diff --git a/+secret b/+secret index abe7cce035ba0..c12c7e07a1795 160000 --- a/+secret +++ b/+secret @@ -1 +1 @@ -Subproject commit abe7cce035ba094c167fd35fbd3e18f1cef692d4 +Subproject commit c12c7e07a1795da6d45cf0c58e1122401b1fc93b diff --git a/.github/CODE_GUIDELINES.md b/.github/CODE_GUIDELINES.md index 32a5ec4f0387b..e93556f21b944 100644 --- a/.github/CODE_GUIDELINES.md +++ b/.github/CODE_GUIDELINES.md @@ -118,7 +118,7 @@ It's also faster (~6%), for internal bytecode reasons (which don't really matter ## Abstract types and typesof -Some types exist just as a parent and should never be created in-game (e.g. `/obj/item`). Mark those using the `ABSTRACT_TYPE(type)` macro. You can check if a type is abstract using the `IS_ABSTRACT(type)` macro. +Some types exist just as a parent and should never be created in-game (e.g. `/obj/item`). Mark those using the `ABSTRACT_TYPE(/type)` macro. You can check if a type is abstract using the `IS_ABSTRACT(/type)` macro. To get a list of all concrete (non-abstract) subtypes of a type you should use `concrete_typesof(type)`, the result is cached so no need to store it yourself. (As a consequence please `.Copy` the list if you want to make changes to it locally.) Proper usage of `ABSTRACT_TYPE` + `concrete_typesof` is preferred to using `typesof` and `childrentypesof` *usually* though exceptions apply. diff --git a/.github/workflows/automaton.yml b/.github/workflows/automaton.yml index 4e1ebc522a633..5b06e526b63c6 100644 --- a/.github/workflows/automaton.yml +++ b/.github/workflows/automaton.yml @@ -11,7 +11,6 @@ on: - "master" jobs: - runtime: name: Runtime Checker runs-on: ubuntu-22.04 @@ -19,10 +18,25 @@ jobs: strategy: fail-fast: false matrix: - map: ["COGMAP", "COGMAP2", "CLARION", "DONUT3", "DONUT2", "OSHAN", "KONDARU", "NADIR", "ATLAS", "SPACE_PREFAB", "UNDERWATER_PREFAB", "RANDOM_ROOMS", "FULL"] + map: + [ + "COGMAP", + "COGMAP2", + "CLARION", + "DONUT3", + "DONUT2", + "OSHAN", + "KONDARU", + "NADIR", + "ATLAS", + "SPACE_PREFAB", + "UNDERWATER_PREFAB", + "RANDOM_ROOMS", + "FULL", + ] compiletype: ["default"] steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 - name: Install Dependencies run: | @@ -32,7 +46,7 @@ jobs: sudo apt install -o APT::Immediate-Configure=false libssl-dev:i386 libgcc-s1:i386 - name: Cache BYOND - uses: actions/cache@v3 + uses: actions/cache@v4 with: path: ~/BYOND key: ${{ runner.os }}-byond-${{ hashFiles('buildByond.conf')}} @@ -95,14 +109,28 @@ jobs: strategy: fail-fast: false matrix: - map: ["COGMAP", "COGMAP2", "CLARION", "DONUT3", "DONUT2", "OSHAN", "KONDARU", "NADIR", "ATLAS", "SPACE_PREFAB", "UNDERWATER_PREFAB", "FULL"] + map: + [ + "COGMAP", + "COGMAP2", + "CLARION", + "DONUT3", + "DONUT2", + "OSHAN", + "KONDARU", + "NADIR", + "ATLAS", + "SPACE_PREFAB", + "UNDERWATER_PREFAB", + "FULL", + ] compiletype: ["default"] steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 with: submodules: true - token: '${{ secrets.ROBUDDYBOT_PAT }}' + token: "${{ secrets.ROBUDDYBOT_PAT }}" - name: Install Dependencies run: | @@ -112,7 +140,7 @@ jobs: sudo apt install -o APT::Immediate-Configure=false libssl-dev:i386 libgcc-s1:i386 - name: Cache BYOND - uses: actions/cache@v3 + uses: actions/cache@v4 with: path: ~/BYOND key: ${{ runner.os }}-byond-${{ hashFiles('buildByond.conf')}} @@ -167,7 +195,7 @@ jobs: runs-on: ubuntu-22.04 if: "!contains(github.event.head_commit.message, 'skip ci')" steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 - name: Install Dependencies run: | @@ -177,7 +205,7 @@ jobs: sudo apt install -o APT::Immediate-Configure=false libssl-dev:i386 libgcc-s1:i386 - name: Cache BYOND - uses: actions/cache@v3 + uses: actions/cache@v4 with: path: ~/BYOND key: ${{ runner.os }}-byond-${{ hashFiles('buildByond.conf')}} diff --git a/.github/workflows/beepsky.yml b/.github/workflows/beepsky.yml index 50c16f7cedebf..fc97895265aac 100644 --- a/.github/workflows/beepsky.yml +++ b/.github/workflows/beepsky.yml @@ -17,13 +17,13 @@ jobs: - uses: actions/checkout@v4 - name: Cache SpacemanDMM - uses: actions/cache@v3 + uses: actions/cache@v4 with: path: $HOME/SpacemanDMM key: ${{ runner.os }}-spacemandmm - name: Setup Rust - uses: hecrj/setup-rust-action@v1.4.1 + uses: hecrj/setup-rust-action@v2.0.0 - name: Install Dependencies run: | @@ -33,15 +33,26 @@ jobs: tools/bootstrap/python -c '' touch +secret/__secret.dme + - name: Check TGUI + run: | + tools/ci/build_tgui.sh + - name: Misc Checks run: | tools/ci/check_filedirs.sh goonstation.dme - tools/ci/build_tgui.sh tools/ci/check_grep.sh tools/bootstrap/python tools/ci/validate_dme.py <goonstation.dme + + - name: Check Maps + run: | tools/bootstrap/python -m dmi.test tools/bootstrap/python -m mapmerge2.dmm_test + - name: Check Duplicate DMI Icon States + uses: spacestation13/dmi-duplicate-state-checker@v1 + with: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + - name: Run Linter id: linter run: | @@ -62,7 +73,7 @@ jobs: uses: actions/setup-dotnet@v3 with: dotnet-version: "7.0" - - uses: actions/cache@v3 + - uses: actions/cache@v4 with: path: ~/.nuget/packages key: ${{ runner.os }}-nuget-od-${{ hashFiles('OpenDream/**/*.csproj') }} @@ -82,7 +93,7 @@ jobs: - uses: actions/checkout@v4 - name: Cache BYOND - uses: actions/cache@v3 + uses: actions/cache@v4 with: path: $HOME/BYOND key: ${{ runner.os }}-byond @@ -109,7 +120,7 @@ jobs: # cp goonstation.rsc artifacts # - name: Upload Artifacts - # uses: actions/upload-artifact@v1 + # uses: actions/upload-artifact@v4 # with: # name: DMB + RSC # path: ${{github.workspace}}/artifacts @@ -126,7 +137,7 @@ jobs: token: "${{ secrets.ROBUDDYBOT_PAT }}" - name: Cache BYOND - uses: actions/cache@v3 + uses: actions/cache@v4 with: path: $HOME/BYOND key: ${{ runner.os }}-byond @@ -142,7 +153,7 @@ jobs: echo "MANPATH=/home/runner/BYOND/byond/man:$MANPATH" >> $GITHUB_ENV - name: Cache SpacemanDMM - uses: actions/cache@v3 + uses: actions/cache@v4 with: path: $HOME/SpacemanDMM key: ${{ runner.os }}-spacemandmm diff --git a/.github/workflows/final_review_labeler.yml b/.github/workflows/final_review_labeler.yml index 0bf13c5bee6a1..89da3a0245da9 100644 --- a/.github/workflows/final_review_labeler.yml +++ b/.github/workflows/final_review_labeler.yml @@ -16,7 +16,7 @@ jobs: if: ${{ github.event.workflow_run.conclusion == 'success' }} steps: - name: "Download artifact" - uses: actions/github-script@v6 + uses: actions/github-script@v7 with: script: | let allArtifacts = await github.rest.actions.listWorkflowRunArtifacts({ @@ -39,7 +39,7 @@ jobs: - name: "Unzip artifact" run: unzip pr_number.zip - - uses: actions/github-script@v6 + - uses: actions/github-script@v7 id: set-pr-number with: script: | @@ -67,7 +67,7 @@ jobs: env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - - uses: actions/github-script@v6 + - uses: actions/github-script@v7 with: # Only on totalCount == 2 or 3 so maintainers can remove the label and it won't get re-applied (3 for fast approvals due to script delay) script: | diff --git a/.github/workflows/final_review_labeler_dummy.yml b/.github/workflows/final_review_labeler_dummy.yml index c79ecc987a89b..66e3b594f71a9 100644 --- a/.github/workflows/final_review_labeler_dummy.yml +++ b/.github/workflows/final_review_labeler_dummy.yml @@ -18,7 +18,7 @@ jobs: run: | mkdir -p ./pr echo $PR_NUMBER > ./pr/pr_number - - uses: actions/upload-artifact@v3 + - uses: actions/upload-artifact@v4 with: name: pr_number path: pr/ diff --git a/.github/workflows/forum_pr_poster.yml b/.github/workflows/forum_pr_poster.yml index 8eed5546661bf..3708daa74c743 100644 --- a/.github/workflows/forum_pr_poster.yml +++ b/.github/workflows/forum_pr_poster.yml @@ -8,40 +8,39 @@ jobs: runs-on: ubuntu-latest if: ${{ github.repository == 'goonstation/goonstation' && (github.event.action == 'labeled' && github.event.label.name == 'E-Input-Wanted' || github.event.action != 'labeled' && contains(github.event.pull_request.labels.*.name, 'E-Input-Wanted')) }} steps: + - name: Get The Script + run: | + wget "https://raw.githubusercontent.com/${{ github.repository }}/master/.github/post_to_forums.py" - - name: Get The Script - run: | - wget "https://raw.githubusercontent.com/${{ github.repository }}/master/.github/post_to_forums.py" + - name: Set up Python + uses: actions/setup-python@v5 + with: + python-version: 3.8 - - name: Set up Python - uses: actions/setup-python@v4 - with: - python-version: 3.8 + - name: Install dependencies + run: | + python -m pip install --upgrade pip + pip install pygithub requests - - name: Install dependencies - run: | - python -m pip install --upgrade pip - pip install pygithub requests - - - name: Post the thread - run: | - python post_to_forums.py - env: - TOKEN: ${{ secrets.GITHUB_TOKEN }} - REPO: ${{ github.repository }} - FORUM_URL: "https://forum.ss13.co" - FORUM_PASSWORD: ${{ secrets.FORUM_PASSWORD }} - FORUM_USERNAME: "github_bot" - SUBFORUM_ID: 8 # Ideas & Suggestions - POST_ICON: 11 # ℹ - POST_ICON_CLOSED: 18 # 👎 - POST_ICON_MERGED: 19 # 👍 - SUBJECT_PREFIX: "[PR] " - SUBJECT_PREFIX_CLOSED: "[CLOSED PR] " - SUBJECT_PREFIX_MERGED: "[MERGED PR] " - PR_TITLE: ${{ github.event.pull_request.title }} - PR_BODY: ${{ github.event.pull_request.body }} - PR_URL: ${{ github.event.pull_request.html_url }} - PR_NUM: ${{ github.event.pull_request.number }} - PR_STATE: ${{ github.event.pull_request.state }} - PR_MERGED: ${{ github.event.pull_request.merged }} + - name: Post the thread + run: | + python post_to_forums.py + env: + TOKEN: ${{ secrets.GITHUB_TOKEN }} + REPO: ${{ github.repository }} + FORUM_URL: "https://forum.ss13.co" + FORUM_PASSWORD: ${{ secrets.FORUM_PASSWORD }} + FORUM_USERNAME: "github_bot" + SUBFORUM_ID: 8 # Ideas & Suggestions + POST_ICON: 11 # ℹ + POST_ICON_CLOSED: 18 # 👎 + POST_ICON_MERGED: 19 # 👍 + SUBJECT_PREFIX: "[PR] " + SUBJECT_PREFIX_CLOSED: "[CLOSED PR] " + SUBJECT_PREFIX_MERGED: "[MERGED PR] " + PR_TITLE: ${{ github.event.pull_request.title }} + PR_BODY: ${{ github.event.pull_request.body }} + PR_URL: ${{ github.event.pull_request.html_url }} + PR_NUM: ${{ github.event.pull_request.number }} + PR_STATE: ${{ github.event.pull_request.state }} + PR_MERGED: ${{ github.event.pull_request.merged }} diff --git a/.github/workflows/merge_upstream.yml b/.github/workflows/merge_upstream.yml index 66bc142ad0134..c6937e64f197c 100644 --- a/.github/workflows/merge_upstream.yml +++ b/.github/workflows/merge_upstream.yml @@ -1,41 +1,40 @@ name: merge_upstream on: issue_comment: - types: [ created ] + types: [created] jobs: merge-upstream: if: ${{ github.event.issue.pull_request && github.event.comment.body == '!merge_upstream' }} runs-on: ubuntu-22.04 steps: + - name: PR Data + run: | + curl -H "Authorization: token ${{ github.token }}" ${{ github.event.issue.pull_request.url }} > pr.json + echo "PR_REPO=`jq -r '.head.repo.full_name' < pr.json`" >> $GITHUB_ENV + echo "PR_BRANCH=`jq -r '.head.ref' < pr.json`" >> $GITHUB_ENV - - name: PR Data - run: | - curl -H "Authorization: token ${{ github.token }}" ${{ github.event.issue.pull_request.url }} > pr.json - echo "PR_REPO=`jq -r '.head.repo.full_name' < pr.json`" >> $GITHUB_ENV - echo "PR_BRANCH=`jq -r '.head.ref' < pr.json`" >> $GITHUB_ENV + - uses: actions/checkout@v4 + with: + repository: ${{ env.PR_REPO }} + ref: ${{ env.PR_BRANCH }} + fetch-depth: 0 - - uses: actions/checkout@v3 - with: - repository: ${{ env.PR_REPO }} - ref: ${{ env.PR_BRANCH }} - fetch-depth: 0 + - name: Perform Merge + run: | + bash tools/hooks/install.sh + bash tools/ci/install_build_tools.sh + bash tgui/bin/tgui --install-git-hooks + chmod +x tools/hooks/*.merge tgui/bin/tgui + git config user.name github-actions + git config user.email github-actions@github.com + git remote add upstream "https://github.com/${{ github.repository }}.git" + git fetch upstream master + git merge upstream/master && git push origin - - name: Perform Merge - run: | - bash tools/hooks/install.sh - bash tools/ci/install_build_tools.sh - bash tgui/bin/tgui --install-git-hooks - chmod +x tools/hooks/*.merge tgui/bin/tgui - git config user.name github-actions - git config user.email github-actions@github.com - git remote add upstream "https://github.com/${{ github.repository }}.git" - git fetch upstream master - git merge upstream/master && git push origin - - - name: Notify Failure - if: failure() - run: | - curl -s -H "Authorization: token ${{ github.token }}" \ - -X POST -d '{"body": "Merging upstream failed:\nhttps://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }}"}' \ - "https://api.github.com/repos/${{ github.repository }}/issues/${{ github.event.issue.number }}/comments" + - name: Notify Failure + if: failure() + run: | + curl -s -H "Authorization: token ${{ github.token }}" \ + -X POST -d '{"body": "Merging upstream failed:\nhttps://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }}"}' \ + "https://api.github.com/repos/${{ github.repository }}/issues/${{ github.event.issue.number }}/comments" diff --git a/.github/workflows/stale.yml b/.github/workflows/stale.yml index e63dd0391e006..f50961f904314 100644 --- a/.github/workflows/stale.yml +++ b/.github/workflows/stale.yml @@ -1,26 +1,26 @@ name: "Close stale PRs" on: schedule: - - cron: "0 0 * * *" + - cron: "0 0 * * *" jobs: stale: runs-on: ubuntu-latest steps: - - uses: actions/stale@v6 - with: - repo-token: ${{ secrets.GITHUB_TOKEN }} + - uses: actions/stale@v9 + with: + repo-token: ${{ secrets.GITHUB_TOKEN }} - stale-pr-message: "This PR has been inactive for two weeks, and has been automatically marked as stale. This means it is at risk of being auto closed in another week. Please address any outstanding review items and ensure your PR is finished. If you are auto-staled anyway, ask developers if your PR will be merged. Once you have done any of the previous actions then you should request a developer remove the stale label on your PR, to reset the stale timer. If you feel no developer will respond in that time, you may wish to close this PR youself, while you seek developer comment, as you will then be able to reopen the PR yourself." - days-before-pr-stale: 14 - days-before-pr-close: 7 - stale-pr-label: 'S-Stale' - exempt-pr-labels: 'E-Certified-Organic,E-Contest,S-Testmerged' + stale-pr-message: "This PR has been inactive for two weeks, and has been automatically marked as stale. This means it is at risk of being auto closed in another week. Please address any outstanding review items and ensure your PR is finished. If you are auto-staled anyway, ask developers if your PR will be merged. Once you have done any of the previous actions then you should request a developer remove the stale label on your PR, to reset the stale timer. If you feel no developer will respond in that time, you may wish to close this PR youself, while you seek developer comment, as you will then be able to reopen the PR yourself." + days-before-pr-stale: 14 + days-before-pr-close: 7 + stale-pr-label: "S-Stale" + exempt-pr-labels: "E-Certified-Organic,E-Contest,S-Testmerged" - close-issue-message: "This issue has been marked as 'Needs Reproducing' for a month, and is being closed automatically. If you find a way to reproduce this bug, make another issue with more detailed reproduction steps." - days-before-issue-stale: -1 - days-before-issue-close: 30 - only-issue-labels: 'S-Needs-Reproducing' - exempt-issue-labels: 'E-Verified' - ignore-issue-updates: true - close-issue-reason: 'not_planned' + close-issue-message: "This issue has been marked as 'Needs Reproducing' for a month, and is being closed automatically. If you find a way to reproduce this bug, make another issue with more detailed reproduction steps." + days-before-issue-stale: -1 + days-before-issue-close: 30 + only-issue-labels: "S-Needs-Reproducing" + exempt-issue-labels: "E-Verified" + ignore-issue-updates: true + close-issue-reason: "not_planned" diff --git a/.github/workflows/update_changelog.yml b/.github/workflows/update_changelog.yml index 4514f832d0c4a..687b09a6f9476 100644 --- a/.github/workflows/update_changelog.yml +++ b/.github/workflows/update_changelog.yml @@ -9,24 +9,24 @@ jobs: runs-on: ubuntu-latest if: github.repository == 'goonstation/goonstation' steps: - - name: Get The Script - run: | - wget "https://raw.githubusercontent.com/${{ github.repository }}/master/.github/update_changelog.py" - - name: Set up Python - uses: actions/setup-python@v4 - with: - python-version: 3.8 - - name: Install dependencies - run: | - python -m pip install --upgrade pip - pip install pygithub pytz - - name: Update Changelog - run: | - python update_changelog.py - env: - REPO: ${{ github.repository }} - TOKEN: ${{ secrets.GITHUB_TOKEN }} - CHANGELOG_PATH: strings/changelog.txt - ASS_CHANGELOG_PATH: strings/ass_changelog.txt - GIT_EMAIL: "65057909+robuddybot@users.noreply.github.com" - GIT_NAME: "robuddybot" + - name: Get The Script + run: | + wget "https://raw.githubusercontent.com/${{ github.repository }}/master/.github/update_changelog.py" + - name: Set up Python + uses: actions/setup-python@v5 + with: + python-version: 3.8 + - name: Install dependencies + run: | + python -m pip install --upgrade pip + pip install pygithub pytz + - name: Update Changelog + run: | + python update_changelog.py + env: + REPO: ${{ github.repository }} + TOKEN: ${{ secrets.GITHUB_TOKEN }} + CHANGELOG_PATH: strings/changelog.txt + ASS_CHANGELOG_PATH: strings/ass_changelog.txt + GIT_EMAIL: "65057909+robuddybot@users.noreply.github.com" + GIT_NAME: "robuddybot" diff --git a/_std/__odlint.dm b/_std/__odlint.dme similarity index 100% rename from _std/__odlint.dm rename to _std/__odlint.dme diff --git a/_std/__std.dme b/_std/__std.dme index fcd0b319c9dea..37fde8b7ccca2 100644 --- a/_std/__std.dme +++ b/_std/__std.dme @@ -55,6 +55,7 @@ #include "defines\economy.dm" #include "defines\ephemeral.dm" #include "defines\events.dm" +#include "defines\faith.dm" #include "defines\floors.dm" #include "defines\fluid.dm" #include "defines\food.dm" @@ -70,6 +71,7 @@ #include "defines\lighting.dm" #include "defines\living.dm" #include "defines\logging.dm" +#include "defines\manufacturing.dm" #include "defines\materials.dm" #include "defines\mechanics.dm" #include "defines\medals.dm" diff --git a/_std/color.dm b/_std/color.dm index 1c6325b64a4e5..d1cda3dacd23d 100644 --- a/_std/color.dm +++ b/_std/color.dm @@ -295,6 +295,19 @@ proc/hsv_transform_color_matrix(h=0.0, s=1.0, v=1.0) 0, 0, 0, 0 ) + +var/global/list/list/icon_state_average_color_cache = list(list()) + +/atom/proc/get_average_color() + if(!icon_state_average_color_cache[src.icon] || !icon_state_average_color_cache[src.icon][src.icon_state]) + if(!icon_state_average_color_cache[src.icon]) + icon_state_average_color_cache[src.icon] = list() + var/icon/I = icon(src.icon, src.icon_state) + icon_state_average_color_cache[src.icon][src.icon_state] = global.get_average_color(I) + + return icon_state_average_color_cache[src.icon][src.icon_state] + + /** * Takes an icon and optionally two non-zero Pixel Intervals and returns the average color of the icon. * diff --git a/_std/defines/chemistry.dm b/_std/defines/chemistry.dm index 6cc8a4f014f75..4d9d5ad2d6a3c 100644 --- a/_std/defines/chemistry.dm +++ b/_std/defines/chemistry.dm @@ -25,6 +25,12 @@ #define RC_FULLNESS 4 // can estimate fullness of container #define RC_SPECTRO 8 // spectroscopic glasses can analyse contents +/// The minimum alpha value that a reagent's fluid overlay can display. +#define RC_MINIMUM_REAGENT_ALPHA 100 + +#define RC_FLUID_OVERLAY_SCALING_LINEAR "linear" +#define RC_FLUID_OVERLAY_SCALING_SPHERICAL "spherical" + // Meal Times used to identify when a food product might TYPICALLY be consumed #define MEAL_TIME_BREAKFAST (1<<0) #define MEAL_TIME_LUNCH (1<<1) diff --git a/_std/defines/component_defines/component_defines_atom.dm b/_std/defines/component_defines/component_defines_atom.dm index 2acd1a7620109..82a9cdc8dad73 100644 --- a/_std/defines/component_defines/component_defines_atom.dm +++ b/_std/defines/component_defines/component_defines_atom.dm @@ -82,6 +82,8 @@ #define COMSIG_MOVABLE_CONTRABAND_CHANGED "mov_contraband_changed" /// get contraband level of movable (check_nonfirearms, check_firearms) #define COMSIG_MOVABLE_GET_CONTRABAND "mov_get_contraband" + /// when an AM is revealed from under a floor tile (turf revealed from) + #define COMSIG_MOVABLE_FLOOR_REVEALED "mov_floor_revealed" // ---- complex ---- diff --git a/_std/defines/faith.dm b/_std/defines/faith.dm new file mode 100644 index 0000000000000..063b9c388ee30 --- /dev/null +++ b/_std/defines/faith.dm @@ -0,0 +1,11 @@ +#define FAITH_STARTING 1000 + +//lifeprocess faith generation +#define FAITH_GEN_BASE 5 + +// bible healing +#define FAITH_HEAL_CHANCE 40 +#define FAITH_HEAL_CHANCE_MOD 0.02 // multiplied by faith, then added to the base +#define FAITH_HEAL_USE_FRACTION 0.025 +#define FAITH_HEAL_CAP 125 // in used faith +#define FAITH_HEAL_BONUS 0.2 // multiplied by used faith diff --git a/_std/defines/item.dm b/_std/defines/item.dm index 475e71f07411d..e610deab2deb3 100644 --- a/_std/defines/item.dm +++ b/_std/defines/item.dm @@ -3,66 +3,66 @@ /// unused //#define (1<<0) /// can pass by a table or rack -#define TABLEPASS (1<<1) +#define TABLEPASS (1<<1) /// thing doesn't drift in space -#define NODRIFT (1<<2) +#define NODRIFT (1<<2) /// put this on either a thing you don't want to be hit rapidly, or a thing you don't want people to hit other stuff rapidly with -#define USEDELAY (1<<3) +#define USEDELAY (1<<3) /// 1 second extra delay on use -#define EXTRADELAY (1<<4) +#define EXTRADELAY (1<<4) /// weapon not affected by shield. MBC also put this flag on cloak/shield device to minimize istype checking, so consider this more SHIELD_ACT (rename? idk) -#define NOSHIELD (1<<5) +#define NOSHIELD (1<<5) /// conducts electricity (metal etc.) -#define CONDUCT (1<<6) +#define CONDUCT (1<<6) /// can mousedrop reagents into from a reagent_container -#define ACCEPTS_MOUSEDROP_REAGENTS (1<<7) +#define ACCEPTS_MOUSEDROP_REAGENTS (1<<7) /// takes a fingerprint -#define FPRINT (1<<8) +#define FPRINT (1<<8) /// item has priority to check when entering or leaving -#define ON_BORDER (1<<9) +#define ON_BORDER (1<<9) /// can pass through a closed door -#define DOORPASS (1<<10) +#define DOORPASS (1<<10) /// automagically talk into this object when a human is holding it (Phone handset!) -#define TALK_INTO_HAND (1<<11) +#define TALK_INTO_HAND (1<<11) /// is an open container for chemistry purposes. don't check this flag directly, use obj.is_open_container() -#define OPENCONTAINER (1<<12) +#define OPENCONTAINER (1<<12) /// No beaker etc. splashing. For Chem machines etc. -#define NOSPLASH (1<<13) +#define NOSPLASH (1<<13) /// No attack when hitting stuff with this item. -#define SUPPRESSATTACK (1<<14) +#define SUPPRESSATTACK (1<<14) /// gets an overlay when submerged in fluid -#define FLUID_SUBMERGE (1<<15) +#define FLUID_SUBMERGE (1<<15) /// gets a perspective overlay from adjacent fluids -#define IS_PERSPECTIVE_FLUID (1<<16) +#define IS_PERSPECTIVE_FLUID (1<<16) /// specifically note this object as solid -#define ALWAYS_SOLID_FLUID (1<<17) +#define ALWAYS_SOLID_FLUID (1<<17) /// Calls equipment_click from hand_range_attack on items worn with this flag set. -#define HAS_EQUIP_CLICK (1<<18) +#define HAS_EQUIP_CLICK (1<<18) /// Has the possibility for a TGUI interface -#define TGUI_INTERACTIVE (1<<19) +#define TGUI_INTERACTIVE (1<<19) /// Has a click delay for attack_self() -#define ATTACK_SELF_DELAY (1<<20) +#define ATTACK_SELF_DELAY (1<<20) /// Counts as dense for purposes of fluids. *scream. -#define FLUID_DENSE (1<<21) +#define FLUID_DENSE (1<<21) /// If click delay should be applied even if atom is in user's contents (e.g.: postit notes) -#define CLICK_DELAY_IN_CONTENTS (1<<22) +#define CLICK_DELAY_IN_CONTENTS (1<<22) /// If an item cannot be crushed by the crusher -#define UNCRUSHABLE (1<<23) +#define UNCRUSHABLE (1<<23) //Item function flags /// apply to an item's flags to use the item's intent_switch_trigger() proc. This will be called when intent is switched while this item is in hand. -#define USE_INTENT_SWITCH_TRIGGER (1<<0) +#define USE_INTENT_SWITCH_TRIGGER (1<<0) /// allows special attacks to be performed on help and grab intent with this item -#define USE_SPECIALS_ON_ALL_INTENTS (1<<1) +#define USE_SPECIALS_ON_ALL_INTENTS (1<<1) /// prevents items from creating smoke while burning -#define SMOKELESS (1<<2) +#define SMOKELESS (1<<2) /// makes items immune to acid -#define IMMUNE_TO_ACID (1<<3) +#define IMMUNE_TO_ACID (1<<3) /// prevents items from heating anything up while burning -#define COLD_BURN (1<<4) +#define COLD_BURN (1<<4) /// Prevents an item from being placed inside of a storage container, regardless of the item's `w_class` or the storage's `can_hold` list. -#define UNSTORABLE (1<<5) +#define UNSTORABLE (1<<5) //tool flags #define TOOL_CLAMPING 1 diff --git a/_std/defines/landmarks.dm b/_std/defines/landmarks.dm index babcdf73e122b..f6f0465cde1b2 100644 --- a/_std/defines/landmarks.dm +++ b/_std/defines/landmarks.dm @@ -37,6 +37,7 @@ #define LANDMARK_PIRATE "Pirate-Spawn" #define LANDMARK_PIRATE_FIRST_MATE "Pirate-First-Mate-Spawn" #define LANDMARK_PIRATE_CAPTAIN "Pirate-Captain-Spawn" +#define LANDMARK_PIRATES_TELE "Priate-Tele" // Salvagers #define LANDMARK_SALVAGER "Salvager-Spawn" diff --git a/_std/defines/manufacturing.dm b/_std/defines/manufacturing.dm new file mode 100644 index 0000000000000..3b2ff4f44cd69 --- /dev/null +++ b/_std/defines/manufacturing.dm @@ -0,0 +1,15 @@ +// Material costs for robot parts + +#define ROBOT_FRAME_COST 1.8 +#define ROBOT_HEAD_COST 1.2 +#define ROBOT_CHEST_COST 1.2 +#define ROBOT_LIMB_COST 0.6 + +#define ROBOT_LIGHT_COST_MOD 0.5 // multiplier + +#define ROBOT_STURDY_COST 0.2 // 2 pieces of plate +#define ROBOT_HEAVY_COST ROBOT_STURDY_COST + 0.3 // extra 2 pieces of plate and 2 rods + +#define ROBOT_TREAD_METAL_COST 0.6 +#define ROBOT_SCREEN_METAL_COST 0.6 +#define ROBOT_THRUSTER_COST 2.5 diff --git a/_std/defines/minimap.dm b/_std/defines/minimap.dm index b2699208214b5..defe89f4e37cb 100644 --- a/_std/defines/minimap.dm +++ b/_std/defines/minimap.dm @@ -31,6 +31,7 @@ #define MAPC_MEDICAL "#1ba7e9" #define MAPC_MEDLOBBY "#78c5e9" #define MAPC_ROBOTICS "#5b6eb1" +#define MAPC_MORGUE "#2b6a92" #define MAPC_MEDRESEARCH "#3fb583" #define MAPC_PATHOLOGY "#167970" diff --git a/_std/defines/pod_door_access_levels.dm b/_std/defines/pod_door_access_levels.dm index b72aab1f10793..cf6cdbef1705a 100644 --- a/_std/defines/pod_door_access_levels.dm +++ b/_std/defines/pod_door_access_levels.dm @@ -3,3 +3,4 @@ #define POD_ACCESS_SYNDICATE (-1) #define POD_ACCESS_WIZARDS (-2) #define POD_ACCESS_SALVAGER (-3) +#define POD_ACCESS_PIRATE (-4) diff --git a/_std/defines/robot.dm b/_std/defines/robot.dm index 70904c71ac011..3dc3396c19d2a 100644 --- a/_std/defines/robot.dm +++ b/_std/defines/robot.dm @@ -12,4 +12,4 @@ /// Amount an arm on the same side as a missing leg will offset the missing leg penalty #define ROBOT_MISSING_LEG_ARM_OFFSET -1 /// Amount a missing arm will speed you up (as long as you have legs) -#define ROBOT_MISSING_ARM_MOVEMENT_ADJUST -0.4 +#define ROBOT_MISSING_ARM_MOVEMENT_ADJUST -0.1 diff --git a/_std/macros/atom_properties.dm b/_std/macros/atom_properties.dm index 3bc52ecd78151..422fcc08e2136 100644 --- a/_std/macros/atom_properties.dm +++ b/_std/macros/atom_properties.dm @@ -285,6 +285,7 @@ To remove: #define PROP_MOB_NO_MIASMA(x) x("no_miasma", APPLY_ATOM_PROPERTY_SIMPLE, REMOVE_ATOM_PROPERTY_SIMPLE) #define PROP_MOB_NO_DECOMPOSITION(x) x("no_decomposition", APPLY_ATOM_PROPERTY_SIMPLE, REMOVE_ATOM_PROPERTY_SIMPLE) #define PROP_MOB_HEARD_PITCH(x) x("heard_pitch", APPLY_ATOM_PROPERTY_PRODUCT, REMOVE_ATOM_PROPERTY_PRODUCT) +#define PROP_MOB_BLOOD_ABSORPTION_RATE(x) x("blood_absorption_rate", APPLY_ATOM_PROPERTY_SUM, REMOVE_ATOM_PROPERTY_SUM) /// Hides med/sec HUDs and name tags from the mob #define PROP_MOB_HIDE_ICONS(x) x("hide_icons", APPLY_ATOM_PROPERTY_SIMPLE, REMOVE_ATOM_PROPERTY_SIMPLE, PROP_UPDATE_HIDE_ICONS) diff --git a/_std/packets.dm b/_std/packets.dm index 4cd1343bf3eb2..d37a5b60c53c0 100644 --- a/_std/packets.dm +++ b/_std/packets.dm @@ -51,6 +51,7 @@ proc/get_radio_connection_by_id(atom/movable/AM, id) //Signal frequencies #define FREQ_PDA 1149 +#define FREQ_PUMP_CONTROL 1225 //frequency for the control of pumps #define FREQ_AIRLOCK 1411 #define FREQ_FREE 1419 /// frequency for "free packet communication", default for nerd stuff #define FREQ_NAVBEACON 1445 diff --git a/_std/rust_g.dm b/_std/rust_g.dm index 677784e693175..bfaad1035450e 100644 --- a/_std/rust_g.dm +++ b/_std/rust_g.dm @@ -135,7 +135,7 @@ #define rustg_dmi_icon_states(fname) RUSTG_CALL(RUST_G, "dmi_icon_states")(fname) #define rustg_file_read(fname) RUSTG_CALL(RUST_G, "file_read")(fname) -#define rustg_file_exists(fname) RUSTG_CALL(RUST_G, "file_exists")(fname) +#define rustg_file_exists(fname) (RUSTG_CALL(RUST_G, "file_exists")(fname) == "true") #define rustg_file_write(text, fname) RUSTG_CALL(RUST_G, "file_write")(text, fname) #define rustg_file_append(text, fname) RUSTG_CALL(RUST_G, "file_append")(text, fname) #define rustg_file_get_line_count(fname) text2num(RUSTG_CALL(RUST_G, "file_get_line_count")(fname)) @@ -146,7 +146,13 @@ #define text2file(text, fname) rustg_file_append(text, "[fname]") #endif +/// Returns the git hash of the given revision, ex. "HEAD". #define rustg_git_revparse(rev) RUSTG_CALL(RUST_G, "rg_git_revparse")(rev) + +/** + * Returns the date of the given revision in the format YYYY-MM-DD. + * Returns null if the revision is invalid. + */ #define rustg_git_commit_date(rev) RUSTG_CALL(RUST_G, "rg_git_commit_date")(rev) #define rustg_hash_string(algorithm, text) RUSTG_CALL(RUST_G, "hash_string")(algorithm, text) @@ -161,6 +167,11 @@ #define RUSTG_HASH_XXH64 "xxh64" #define RUSTG_HASH_BASE64 "base64" +/// Encode a given string into base64 +#define rustg_encode_base64(str) rustg_hash_string(RUSTG_HASH_BASE64, str) +/// Decode a given base64 string +#define rustg_decode_base64(str) RUSTG_CALL(RUST_G, "decode_base64")(str) + #ifdef RUSTG_OVERRIDE_BUILTINS #define md5(thing) (isfile(thing) ? rustg_hash_file(RUSTG_HASH_MD5, "[thing]") : rustg_hash_string(RUSTG_HASH_MD5, thing)) #endif @@ -233,24 +244,6 @@ /proc/rustg_unix_timestamp() return RUSTG_CALL(RUST_G, "unix_timestamp")() -#define rustg_raw_read_toml_file(path) json_decode(RUSTG_CALL(RUST_G, "toml_file_to_json")(path) || "null") - -/proc/rustg_read_toml_file(path) - var/list/output = rustg_raw_read_toml_file(path) - if (output["success"]) - return json_decode(output["content"]) - else - CRASH(output["content"]) - -#define rustg_raw_toml_encode(value) json_decode(RUSTG_CALL(RUST_G, "toml_encode")(json_encode(value))) - -/proc/rustg_toml_encode(value) - var/list/output = rustg_raw_toml_encode(value) - if (output["success"]) - return output["content"] - else - CRASH(output["content"]) - #define rustg_url_encode(text) RUSTG_CALL(RUST_G, "url_encode")("[text]") #define rustg_url_decode(text) RUSTG_CALL(RUST_G, "url_decode")(text) diff --git a/_std/spatial_hashing.dm b/_std/spatial_hashing.dm index c6768a443ad3f..e6a9d8c1b743c 100644 --- a/_std/spatial_hashing.dm +++ b/_std/spatial_hashing.dm @@ -215,6 +215,8 @@ ABSTRACT_TYPE(/datum/spatial_hashmap/by_type/alive_mob) update_cooldown = 5 type_to_track = /obj/shrub +/datum/spatial_hashmap/manual/near_station + /datum/spatial_hashmap/manual/proc/add_target(atom/A) var/turf/T = get_turf(A) if (world.maxz > src.zlevels) diff --git a/assets/maps/allocated/pirate_ship.dmm b/assets/maps/allocated/pirate_ship.dmm index 65bc237b34c9b..4204ba300bdb6 100644 --- a/assets/maps/allocated/pirate_ship.dmm +++ b/assets/maps/allocated/pirate_ship.dmm @@ -1,10 +1,10 @@ //MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE "ai" = ( /obj/lattice{ - icon_state = "lattice-dir" + icon_state = "lattice-dir-b" }, /turf/space, -/area/pirate_ship) +/area/pirate_ship_space) "ak" = ( /obj/item/storage/wall/office, /turf/simulated/floor/orange/side, @@ -38,7 +38,7 @@ /obj/decal/tile_edge/stripe/extra_big, /obj/machinery/vehicle/miniputt/indyputt{ dir = 1; - init_comms_type = /obj/item/shipcomponent/communications/syndicate; + init_comms_type = /obj/item/shipcomponent/communications/pirate; name = "The Dreadful" }, /turf/simulated/floor/shuttlebay, @@ -53,7 +53,7 @@ dir = 1 }, /obj/machinery/vehicle/miniputt/indyputt{ - init_comms_type = /obj/item/shipcomponent/communications/syndicate; + init_comms_type = /obj/item/shipcomponent/communications/pirate; name = "The Deathly" }, /turf/simulated/floor/shuttlebay, @@ -66,6 +66,7 @@ /obj/decal/stage_edge/alt{ color = "#555555" }, +/obj/storage/crate/chest, /turf/simulated/floor, /area/pirate_ship) "bu" = ( @@ -102,16 +103,33 @@ dir = 6 }, /area/pirate_ship) +"bJ" = ( +/turf/unsimulated/wall/generic{ + icon = 'icons/obj/singularity.dmi'; + icon_state = "TheSingMain"; + name = "cloaking field" + }, +/area/space) +"bV" = ( +/obj/machinery/light/incandescent/warm{ + dir = 8 + }, +/turf/simulated/floor/black, +/area/pirate_ship) "cx" = ( /obj/decal/tile_edge/stripe/extra_big, /obj/decal/tile_edge/stripe/extra_big, /obj/machinery/vehicle/pod_smooth/black{ dir = 1; - init_comms_type = /obj/item/shipcomponent/communications/syndicate; + init_comms_type = /obj/item/shipcomponent/communications/pirate; name = "The Waking Nightmare" }, /turf/simulated/floor/shuttlebay, /area/pirate_ship) +"cI" = ( +/obj/table/reinforced/bar/auto, +/turf/simulated/floor/orange, +/area/pirate_ship) "cK" = ( /obj/indestructible/shuttle_corner{ dir = 8; @@ -150,10 +168,7 @@ /turf/simulated/floor/orange, /area/pirate_ship) "dk" = ( -/obj/machinery/r_door_control/podbay{ - access_type = -1; - id = "peregrine_podbay" - }, +/obj/machinery/r_door_control/podbay/pirate, /turf/unsimulated/wall/auto/adventure/shuttle/dark, /area/pirate_ship) "dt" = ( @@ -193,7 +208,7 @@ }, /obj/machinery/vehicle/pod_smooth/industrial{ dir = 1; - init_comms_type = /obj/item/shipcomponent/communications/syndicate; + init_comms_type = /obj/item/shipcomponent/communications/pirate; name = "The Vehement" }, /turf/simulated/floor/shuttlebay, @@ -279,11 +294,15 @@ }, /turf/simulated/floor/black, /area/pirate_ship) -"gH" = ( -/obj/machinery/light/incandescent/warm, -/turf/simulated/floor/grey/side{ - dir = 4 +"gc" = ( +/obj/submachine/chef_sink/chem_sink{ + pixel_y = 12 }, +/turf/simulated/floor/black, +/area/pirate_ship) +"gH" = ( +/obj/mapping_helper/wingrille_spawn/auto/crystal, +/turf/simulated/floor/black, /area/pirate_ship) "gJ" = ( /turf/simulated/floor/blackwhite{ @@ -315,7 +334,7 @@ dir = 1 }, /obj/machinery/vehicle/miniputt/wizard{ - init_comms_type = /obj/item/shipcomponent/communications/syndicate; + init_comms_type = /obj/item/shipcomponent/communications/pirate; name = "The Brimstone" }, /turf/simulated/floor/shuttlebay, @@ -511,38 +530,10 @@ /turf/simulated/floor/orange, /area/pirate_ship) "mu" = ( -/obj/rack, -/obj/item/clothing/mask/breath{ - pixel_x = 10 - }, -/obj/item/clothing/suit/space/emerg{ - pixel_x = 14 - }, -/obj/item/clothing/head/emerg{ - pixel_x = 11; - pixel_y = 10 - }, -/obj/item/clothing/mask/breath, -/obj/item/clothing/suit/space/emerg{ - pixel_x = 4 - }, -/obj/item/clothing/head/emerg{ - pixel_x = 1; - pixel_y = 10 - }, -/obj/item/clothing/mask/breath{ - pixel_x = -10 - }, -/obj/item/clothing/suit/space/emerg{ - pixel_x = -6 - }, -/obj/item/clothing/head/emerg{ - pixel_x = -9; - pixel_y = 10 - }, /obj/cable{ icon_state = "1-2" }, +/obj/machinery/vending/air_vendor/pod_wars, /turf/simulated/floor/black, /area/pirate_ship) "mx" = ( @@ -564,6 +555,7 @@ pixel_y = -2; pixel_x = -8 }, +/obj/machinery/light/incandescent/warm, /turf/simulated/floor/black, /area/pirate_ship) "nu" = ( @@ -578,7 +570,7 @@ "nC" = ( /obj/decal/tile_edge/stripe/extra_big, /obj/machinery/vehicle/pod_smooth{ - init_comms_type = /obj/item/shipcomponent/communications/syndicate; + init_comms_type = /obj/item/shipcomponent/communications/pirate; name = "The Retribution" }, /turf/simulated/floor/shuttlebay, @@ -646,19 +638,8 @@ /turf/simulated/floor/black, /area/pirate_ship) "oO" = ( -/obj/machinery/power/data_terminal, -/obj/cable{ - icon_state = "0-8" - }, -/obj/cable{ - icon_state = "0-8" - }, -/obj/machinery/computer3/terminal{ - dir = 8 - }, -/turf/simulated/floor/orangeblack/side{ - dir = 4 - }, +/obj/stool/bar, +/turf/simulated/floor, /area/pirate_ship) "pb" = ( /obj/machinery/power/terminal, @@ -683,7 +664,7 @@ "pO" = ( /obj/decal/tile_edge/stripe/extra_big, /obj/machinery/vehicle/pod_smooth/gold{ - init_comms_type = /obj/item/shipcomponent/communications/syndicate; + init_comms_type = /obj/item/shipcomponent/communications/pirate; name = "The Cannonade" }, /turf/simulated/floor/shuttlebay, @@ -774,6 +755,14 @@ dir = 8 }, /area/pirate_ship) +"te" = ( +/obj/item/storage/toilet, +/obj/decoration/toiletholder{ + dir = 8; + pixel_x = -10 + }, +/turf/simulated/floor/black, +/area/pirate_ship) "tB" = ( /obj/item/bandage, /obj/item/bandage, @@ -794,10 +783,8 @@ /obj/decal/tile_edge/stripe/extra_big{ dir = 1 }, -/obj/machinery/door/poddoor/blast/pyro/podbay_autoclose{ - dir = 4; - id = "peregrine_podbay"; - name = "Cargo Bay Door" +/obj/machinery/door/poddoor/blast/pyro/podbay_autoclose/pirate_podbay{ + dir = 4 }, /turf/simulated/floor/shuttlebay, /area/pirate_ship) @@ -838,7 +825,7 @@ dir = 1 }, /obj/machinery/vehicle/miniputt/black{ - init_comms_type = /obj/item/shipcomponent/communications/syndicate; + init_comms_type = /obj/item/shipcomponent/communications/pirate; name = "The Black Flag" }, /turf/simulated/floor/shuttlebay, @@ -1043,6 +1030,10 @@ dir = 1 }, /area/pirate_ship) +"vt" = ( +/obj/stool/bed, +/turf/simulated/floor/black, +/area/pirate_ship) "vv" = ( /obj/decal/poster/wallsign/stencil/left/y{ pixel_x = -12; @@ -1061,12 +1052,6 @@ }, /turf/simulated/floor/shuttlebay, /area/pirate_ship) -"vz" = ( -/obj/machinery/light/incandescent/warm, -/turf/simulated/floor/orange/side{ - dir = 8 - }, -/area/pirate_ship) "vN" = ( /obj/decoration/bullethole{ pixel_x = 10; @@ -1126,14 +1111,20 @@ }, /turf/unsimulated/wall/auto/adventure/shuttle/dark, /area/pirate_ship) +"xh" = ( +/obj/machinery/light/incandescent/warm{ + dir = 4 + }, +/turf/simulated/floor/black, +/area/pirate_ship) "xs" = ( -/obj/machinery/portable_atmospherics/canister/oxygen, /obj/machinery/door_control{ id = "peregrine_podbay"; name = "Podbay Door Control"; pixel_x = -24; pixel_y = 12 }, +/obj/machinery/vending/air_vendor/plasma/pod_wars, /turf/simulated/floor/black, /area/pirate_ship) "xG" = ( @@ -1232,6 +1223,11 @@ }, /turf/simulated/floor/black, /area/pirate_ship) +"zP" = ( +/obj/lattice/auto, +/obj/machinery/light/runway_light/delay2, +/turf/space, +/area/pirate_ship_space) "zX" = ( /obj/stool/chair/office/yellow{ dir = 4 @@ -1240,6 +1236,9 @@ dir = 4 }, /area/pirate_ship) +"As" = ( +/turf/cordon, +/area/cordon) "Au" = ( /obj/table/nanotrasen/auto, /obj/machinery/recharger/wall{ @@ -1313,6 +1312,10 @@ /obj/machinery/light/incandescent/warm, /turf/simulated/floor/black, /area/pirate_ship) +"Bg" = ( +/obj/lattice/auto, +/turf/space, +/area/pirate_ship_space) "Bp" = ( /obj/item/storage/toolbox/mechanical{ pixel_x = 3; @@ -1343,6 +1346,10 @@ }, /turf/simulated/floor/black, /area/pirate_ship) +"CO" = ( +/obj/machinery/light/incandescent/warm, +/turf/simulated/floor, +/area/pirate_ship) "Df" = ( /obj/storage/closet/emergency, /turf/unsimulated/floor/plating/random, @@ -1363,6 +1370,11 @@ dir = 8 }, /area/pirate_ship) +"DL" = ( +/obj/lattice/auto, +/obj/machinery/light/runway_light/delay3, +/turf/space, +/area/pirate_ship_space) "DP" = ( /obj/machinery/door/airlock/pyro/glass{ dir = 4 @@ -1461,10 +1473,8 @@ powerlevel = 1 }, /obj/decal/tile_edge/stripe/extra_big, -/obj/machinery/door/poddoor/blast/pyro/podbay_autoclose{ - dir = 4; - id = "peregrine_podbay"; - name = "Cargo Bay Door" +/obj/machinery/door/poddoor/blast/pyro/podbay_autoclose/pirate_podbay{ + dir = 4 }, /turf/simulated/floor/shuttlebay, /area/pirate_ship) @@ -1564,7 +1574,7 @@ /obj/decal/tile_edge/stripe/extra_big, /obj/machinery/vehicle/miniputt{ dir = 1; - init_comms_type = /obj/item/shipcomponent/communications/syndicate; + init_comms_type = /obj/item/shipcomponent/communications/pirate; name = "The Inglorious" }, /turf/simulated/floor/shuttlebay, @@ -1619,6 +1629,16 @@ }, /turf/simulated/floor/orange, /area/pirate_ship) +"Jv" = ( +/obj/cable{ + icon_state = "1-2" + }, +/obj/decal/fakeobjects/teleport_pad{ + name = "prototype receiver pad" + }, +/obj/landmark/pirate_tele, +/turf/simulated/floor/orange, +/area/pirate_ship) "Jy" = ( /obj/machinery/door/airlock/pyro/glass{ dir = 4 @@ -1733,6 +1753,14 @@ /obj/decoration/bustedmantapc, /turf/simulated/floor/orange, /area/pirate_ship) +"Mg" = ( +/obj/decal/tile_edge/stripe{ + dir = 6; + icon_state = "delivery2" + }, +/obj/machinery/light/incandescent/warm, +/turf/simulated/floor/black, +/area/pirate_ship) "Mw" = ( /obj/cable{ icon_state = "1-2" @@ -1793,6 +1821,11 @@ }, /turf/space, /area/pirate_ship) +"Or" = ( +/obj/lattice/auto, +/obj/warp_beacon/pirate, +/turf/space, +/area/pirate_ship_space) "Ox" = ( /obj/decal/tile_edge/stripe{ dir = 6; @@ -1809,11 +1842,10 @@ }, /area/pirate_ship) "OK" = ( -/obj/lattice{ - icon_state = "lattice-dir-b" - }, -/turf/space, -/area/space) +/obj/table/reinforced/bar/auto, +/obj/machinery/light/small/floor, +/turf/simulated/floor/orange, +/area/pirate_ship) "ON" = ( /obj/table/syndicate/auto, /obj/item/storage/firstaid/toxin{ @@ -1832,6 +1864,21 @@ }, /turf/unsimulated/wall/auto/adventure/shuttle/dark, /area/pirate_ship) +"OR" = ( +/obj/machinery/power/data_terminal, +/obj/cable{ + icon_state = "0-8" + }, +/obj/cable{ + icon_state = "0-8" + }, +/obj/machinery/computer3/terminal{ + dir = 8 + }, +/turf/simulated/floor/orange/side{ + dir = 4 + }, +/area/pirate_ship) "OU" = ( /obj/table/syndicate/auto, /obj/item/storage/box/donkpocket_w_kit{ @@ -1910,10 +1957,8 @@ /area/pirate_ship) "Qd" = ( /obj/mapping_helper/wingrille_spawn/auto/crystal, -/obj/machinery/door/poddoor/blast/pyro/podbay_autoclose{ - dir = 4; - id = "peregrine_armoury"; - name = "Cargo Bay Door" +/obj/machinery/door/poddoor/blast/pyro/podbay_autoclose/pirate_armory{ + dir = 8 }, /turf/unsimulated/floor/plating/random, /area/pirate_ship) @@ -2052,7 +2097,7 @@ dir = 1 }, /obj/machinery/vehicle/miniputt{ - init_comms_type = /obj/item/shipcomponent/communications/syndicate; + init_comms_type = /obj/item/shipcomponent/communications/pirate; name = "The Spectre" }, /turf/simulated/floor/shuttlebay, @@ -2101,6 +2146,14 @@ /obj/machinery/light/incandescent/warm, /turf/simulated/floor/black, /area/pirate_ship) +"Ve" = ( +/obj/item/storage/toilet, +/obj/decoration/toiletholder{ + dir = 4; + pixel_x = 10 + }, +/turf/simulated/floor/black, +/area/pirate_ship) "Vf" = ( /obj/cable{ icon_state = "4-8" @@ -2114,15 +2167,13 @@ /turf/simulated/floor, /area/pirate_ship) "Vj" = ( -/obj/lattice{ - icon_state = "lattice-dir-b" - }, /turf/space, -/area/pirate_ship) +/area/pirate_ship_space) "Vm" = ( /obj/decal/stage_edge/alt{ color = "#555555" }, +/obj/storage/crate/chest, /turf/simulated/floor, /area/pirate_ship) "Vo" = ( @@ -2181,14 +2232,17 @@ /obj/decal/tile_edge/stripe/extra_big, /obj/machinery/vehicle/miniputt/nanoputt/security{ dir = 1; - init_comms_type = /obj/item/shipcomponent/communications/syndicate; + init_comms_type = /obj/item/shipcomponent/communications/pirate; name = "The Betrayal" }, /turf/simulated/floor/shuttlebay, /area/pirate_ship) "Wl" = ( +/obj/lattice{ + icon_state = "lattice-dir" + }, /turf/space, -/area/space) +/area/pirate_ship_space) "Wp" = ( /obj/machinery/vending/snack, /turf/simulated/floor/orange/side, @@ -2220,6 +2274,14 @@ }, /turf/simulated/floor/black, /area/pirate_ship) +"XJ" = ( +/obj/machinery/light/runway_light, +/obj/lattice{ + dir = 4; + icon_state = "lattice-dir" + }, +/turf/space, +/area/pirate_ship_space) "Yb" = ( /obj/machinery/light/incandescent/warm, /obj/submachine/weapon_vendor/pirate, @@ -2301,109 +2363,306 @@ /area/pirate_ship) (1,1,1) = {" -Wl -Wl -Wl -Wl -Wl -Wl -Wl -Wl -Wl -Wl -Wl -Wl -Wl -Wl -cK -nu -nu -Qd -Qd -Qd -Qd -Qd -Qd -Qd -Oi -Wl -Wl -Wl +As +As +As +As +As +As +As +As +As +As +As +As +As +As +As +As +As +As +As +As +As +As +As +As +As +As +As +As +As +As +As +As +As +As +As +As +As +As "} (2,1,1) = {" -Wl -Wl -Wl -Wl -Wl -Wl -Wl -cK -TC -TC -TC -TC -nu -ek -nu -nu -nu -KF -fM -JM -JM -JM -zM -GY -nu -Ke -MM -Wl +As +bJ +bJ +bJ +bJ +bJ +bJ +bJ +bJ +bJ +bJ +bJ +bJ +bJ +bJ +bJ +bJ +bJ +bJ +bJ +bJ +bJ +bJ +bJ +bJ +bJ +bJ +bJ +bJ +bJ +bJ +bJ +bJ +bJ +bJ +bJ +bJ +As "} (3,1,1) = {" -Wl -Wl -Wl -Wl -Wl -Wl -Wl -nu -tB -yw -zX -Eo -lN -TL -YQ -yl -OQ -wG -JM -JM -lY -JM -Ox -Yb -nu -Ke -MM -Wl -"} -(4,1,1) = {" -Wl -Wl -Wl -Wl -cK -nu -nu -Fp -uq -zp -zp -EA -nu +As +bJ +Vj +Vj +Vj +Vj +Vj +Vj +Vj +Vj +Vj +Vj +Vj +Vj +Vj +Vj +Vj +Vj +Vj +Vj +Vj +Vj +Vj +Vj +Vj +Vj +Vj +Vj +Vj +Vj +Vj +Vj +Vj +Vj +Vj +Vj +bJ +As +"} +(4,1,1) = {" +As +bJ +Vj +Vj +Vj +Vj +Vj +Vj +Vj +Vj +Vj +Vj +Vj +Vj +Vj +Vj +Vj +Vj +Vj +Vj +Vj +Vj +Vj +Vj +Vj +Vj +Vj +Vj +Vj +Vj +Vj +Vj +Vj +Vj +Vj +Vj +bJ +As +"} +(5,1,1) = {" +As +bJ +Vj +Vj +Vj +Vj +Vj +Vj +Vj +Vj +Vj +Vj +Vj +Vj +Vj +Vj +Vj +Vj +Vj +Vj +Vj +cK +nu +nu +Qd +Qd +Qd +Qd +Qd +Qd +Qd +Oi +Vj +Vj +Vj +Vj +bJ +As +"} +(6,1,1) = {" +As +bJ +Vj +Vj +Vj +Vj +Vj +Vj +Vj +Vj +Vj +Vj +Vj +Vj +cK +TC +TC +TC +TC +nu +ek +nu +nu +nu +KF +fM +JM +JM +JM +zM +GY +nu +Ke +MM +Vj +Vj +bJ +As +"} +(7,1,1) = {" +As +bJ +Vj +Vj +Vj +Vj +Vj +Vj +Vj +Vj +nu +nu +nu +nu +nu +tB +yw +zX +Eo +lN +TL +YQ +yl +OQ +wG +JM +JM +lY +JM +Ox +Yb +nu +Ke +MM +Vj +Vj +bJ +As +"} +(8,1,1) = {" +As +bJ +Vj +Vj +Vj +Vj +Vj +cK +nu +nu +nu +te +bV +vt +Fp +uq +zp +zp +EA +nu Ub zp rG @@ -2418,17 +2677,27 @@ GY nu nu hg -Wl +Vj +Vj +bJ +As "} -(5,1,1) = {" -Wl -Wl -Wl -OK +(9,1,1) = {" +As +bJ +Vj +Vj +Vj +Vj +ai TC oE mL nu +gc +JM +JM +nu ak yM zp @@ -2448,17 +2717,27 @@ GY nu Ke MM -Wl +Vj +Vj +bJ +As "} -(6,1,1) = {" +(10,1,1) = {" +As +bJ Vj ai +Wl cS fy Zt vX qq nu +JM +JM +JM +nu uI zp zp @@ -2478,16 +2757,26 @@ Yb nu Ke MM -Wl +Vj +Vj +bJ +As "} -(7,1,1) = {" -Wl +(11,1,1) = {" +As +bJ +Vj +Vj cK nu nu Pf fh -vz +AJ +nu +gH +Jy +gH nu vl zp @@ -2507,17 +2796,27 @@ Xy GY nu Oi -Wl -Wl +Vj +Vj +Vj +bJ +As "} -(8,1,1) = {" -Wl +(12,1,1) = {" +As +bJ +Vj +Vj nu Kn VJ Vm cP cP +cP +cP +cP +CO nu nu JF @@ -2537,16 +2836,26 @@ nu hS at nu -Wl -Wl +Vj +Vj +Vj +bJ +As "} -(9,1,1) = {" -Wl -TC +(13,1,1) = {" +As +bJ +Vj +Vj +TC LU tS wp cP +oO +oO +oO +cP cP nu vm @@ -2568,15 +2877,25 @@ JM Be TC nu -Wl +Vj +Vj +bJ +As "} -(10,1,1) = {" -Wl +(14,1,1) = {" +As +bJ +Vj +Vj TC zp nv WB zp +OK +cI +OK +zp zp Vr dd @@ -2599,20 +2918,30 @@ rt TC qM vh +Vj +bJ +As "} -(11,1,1) = {" -Wl +(15,1,1) = {" +As +bJ +Vj +Vj zs PY mh Mw nW Io -Ph Io Io Io Io +Ph +Io +Jv +Io +Io Mw Io Io @@ -2629,14 +2958,24 @@ mu pb yQ DS +Vj +bJ +As "} -(12,1,1) = {" -Wl +(16,1,1) = {" +As +bJ +Vj +Vj TC zp nv WB nv +OK +cI +OK +zp zp SY dd @@ -2659,14 +2998,24 @@ rt TC qM qg +Vj +bJ +As "} -(13,1,1) = {" -Wl +(17,1,1) = {" +As +bJ +Vj +Vj TC Re dC bG oe +oO +oO +oO +cP cP nu JA @@ -2688,16 +3037,26 @@ JM Be TC nu -Wl +Vj +Vj +bJ +As "} -(14,1,1) = {" -Wl +(18,1,1) = {" +As +bJ +Vj +Vj nu Tb Yy be Vf cP +cP +cP +cP +CO nu nu DP @@ -2717,16 +3076,26 @@ Sw ip nu nu -Wl -Wl +Vj +Vj +Vj +bJ +As "} -(15,1,1) = {" -Wl +(19,1,1) = {" +As +bJ +Vj +Vj bB nu nu hn -oO +OR +ph +nu +gH +Jy gH nu vo @@ -2747,17 +3116,27 @@ JM UX nu ku -Wl -Wl +Vj +Vj +Vj +bJ +As "} -(16,1,1) = {" +(20,1,1) = {" +As +bJ Vj ai +Wl cS xG nu GP sl +nu +JM +JM +JM Nj vp zo @@ -2778,16 +3157,26 @@ dN nu Ke MM -Wl +Vj +Vj +bJ +As "} -(17,1,1) = {" -Wl -Wl -Wl -OK +(21,1,1) = {" +As +bJ +Vj +Vj +Vj +Vj +ai TC Df -zM +Mg +nu +gc +JM +JM nu vp VL @@ -2808,17 +3197,27 @@ nV nu Ke MM -Wl +Vj +Vj +bJ +As "} -(18,1,1) = {" -Wl -Wl -Wl -Wl +(22,1,1) = {" +As +bJ +Vj +Vj +Vj +Vj +Vj bB nu sl nu +Ve +xh +vt +nu Rp Hs Du @@ -2838,16 +3237,26 @@ nV nu nu hg -Wl +Vj +Vj +bJ +As "} -(19,1,1) = {" -Wl -Wl -Wl -Wl -Wl -Wl -Wl +(23,1,1) = {" +As +bJ +Vj +Vj +Vj +Vj +Vj +Vj +Vj +Vj +nu +nu +nu +nu nu Kf zF @@ -2868,16 +3277,26 @@ cx nu Ke MM -Wl +Vj +Vj +bJ +As "} -(20,1,1) = {" -Wl -Wl -Wl -Wl -Wl -Wl -Wl +(24,1,1) = {" +As +bJ +Vj +Vj +Vj +Vj +Vj +Vj +Vj +Vj +Vj +Vj +Vj +Vj bB nu nK @@ -2898,23 +3317,33 @@ KZ nu Ke MM -Wl +Vj +Vj +bJ +As "} -(21,1,1) = {" -Wl -Wl -Wl -Wl -Wl -Wl -Wl -Wl -Wl -Wl -Wl -Wl -Wl -Wl +(25,1,1) = {" +As +bJ +Vj +Vj +Vj +Vj +Vj +Vj +Vj +Vj +Vj +Vj +Vj +Vj +Vj +Vj +Vj +Vj +Vj +Vj +Vj bB dk tH @@ -2926,7 +3355,330 @@ FT tH FT ku -Wl -Wl -Wl +Vj +Vj +Vj +Vj +bJ +As +"} +(26,1,1) = {" +As +bJ +Vj +Vj +Vj +Vj +Vj +Vj +Vj +Vj +Vj +Vj +Vj +Vj +Vj +Vj +Vj +Vj +Vj +Vj +Vj +Vj +XJ +Vj +Vj +Vj +Vj +Vj +Vj +Vj +Vj +Vj +Vj +Vj +Vj +Vj +bJ +As +"} +(27,1,1) = {" +As +bJ +Vj +Vj +Vj +Vj +Vj +Vj +Vj +Vj +Vj +Vj +Vj +Vj +Vj +Vj +Vj +Vj +Vj +Vj +Vj +Vj +Bg +Vj +Vj +Vj +Vj +Vj +Vj +Vj +Vj +Vj +Vj +Vj +Vj +Vj +bJ +As +"} +(28,1,1) = {" +As +bJ +Vj +Vj +Vj +Vj +Vj +Vj +Vj +Vj +Vj +Vj +Vj +Vj +Vj +Vj +Vj +Vj +Vj +Vj +Vj +Vj +zP +Vj +Vj +Vj +Vj +Vj +Vj +Vj +Vj +Vj +Vj +Vj +Vj +Vj +bJ +As +"} +(29,1,1) = {" +As +bJ +Vj +Vj +Vj +Vj +Vj +Vj +Vj +Vj +Vj +Vj +Vj +Vj +Vj +Vj +Vj +Vj +Vj +Vj +Vj +Bg +Or +Bg +Vj +Vj +Vj +Vj +Vj +Vj +Vj +Vj +Vj +Vj +Vj +Vj +bJ +As +"} +(30,1,1) = {" +As +bJ +Vj +Vj +Vj +Vj +Vj +Vj +Vj +Vj +Vj +Vj +Vj +Vj +Vj +Vj +Vj +Vj +Vj +Vj +Vj +Vj +DL +Vj +Vj +Vj +Vj +Vj +Vj +Vj +Vj +Vj +Vj +Vj +Vj +Vj +bJ +As +"} +(31,1,1) = {" +As +bJ +Vj +Vj +Vj +Vj +Vj +Vj +Vj +Vj +Vj +Vj +Vj +Vj +Vj +Vj +Vj +Vj +Vj +Vj +Vj +Vj +Vj +Vj +Vj +Vj +Vj +Vj +Vj +Vj +Vj +Vj +Vj +Vj +Vj +Vj +bJ +As +"} +(32,1,1) = {" +As +bJ +bJ +bJ +bJ +bJ +bJ +bJ +bJ +bJ +bJ +bJ +bJ +bJ +bJ +bJ +bJ +bJ +bJ +bJ +bJ +bJ +bJ +bJ +bJ +bJ +bJ +bJ +bJ +bJ +bJ +bJ +bJ +bJ +bJ +bJ +bJ +As +"} +(33,1,1) = {" +As +As +As +As +As +As +As +As +As +As +As +As +As +As +As +As +As +As +As +As +As +As +As +As +As +As +As +As +As +As +As +As +As +As +As +As +As +As "} diff --git a/assets/maps/engine_rooms/cogmap/singularity_100.dmm b/assets/maps/engine_rooms/cogmap/singularity_100.dmm index a36f3e908fb45..616b0fb11b004 100644 --- a/assets/maps/engine_rooms/cogmap/singularity_100.dmm +++ b/assets/maps/engine_rooms/cogmap/singularity_100.dmm @@ -178,6 +178,7 @@ /obj/cable/orange{ icon_state = "2-4" }, +/obj/machinery/atmospherics/pipe/simple/insulated, /turf/simulated/floor/plating/jen, /area/station/engine/inner) "pl" = ( @@ -330,6 +331,7 @@ /obj/cable/orange{ icon_state = "1-2" }, +/obj/machinery/atmospherics/pipe/simple/insulated/cold, /turf/simulated/floor/plating/jen, /area/station/engine/inner) "Gn" = ( diff --git a/assets/maps/prefabs/planet/prefab_planet_lost_cargo.dmm b/assets/maps/prefabs/planet/prefab_planet_lost_cargo.dmm index f3be244311c9a..c4bfb0bcc592c 100644 --- a/assets/maps/prefabs/planet/prefab_planet_lost_cargo.dmm +++ b/assets/maps/prefabs/planet/prefab_planet_lost_cargo.dmm @@ -3,7 +3,7 @@ /turf/variableTurf/clear, /area/allowGenerate) "p" = ( -/obj/storage/crate/loot/puzzle, +/obj/storage/crate/loot, /turf/variableTurf/clear, /area/allowGenerate) diff --git a/assets/maps/prefabs/space/prefab_candy_shop.dmm b/assets/maps/prefabs/space/prefab_candy_shop.dmm index 8350063af53c0..d776511dadf38 100644 --- a/assets/maps/prefabs/space/prefab_candy_shop.dmm +++ b/assets/maps/prefabs/space/prefab_candy_shop.dmm @@ -345,14 +345,14 @@ /area/prefab/candy_shop) "Ag" = ( /obj/table/wood/round/auto, -/obj/item/reagent_containers/food/snacks/candy/wrapped_pbcup{ +/obj/item/reagent_containers/food/snacks/candy/wrapped_candy/pb_cup{ pixel_x = 6; rand_pos = 0 }, -/obj/item/reagent_containers/food/snacks/candy/wrapped_pbcup{ +/obj/item/reagent_containers/food/snacks/candy/wrapped_candy/pb_cup{ rand_pos = 0 }, -/obj/item/reagent_containers/food/snacks/candy/wrapped_pbcup{ +/obj/item/reagent_containers/food/snacks/candy/wrapped_candy/pb_cup{ pixel_x = -4; pixel_y = 6; rand_pos = 0 @@ -485,15 +485,15 @@ /obj/machinery/light/incandescent/cool/very{ dir = 8 }, -/obj/item/reagent_containers/food/snacks/candy/butterscotch{ +/obj/item/reagent_containers/food/snacks/candy/wrapped_candy/butterscotch{ pixel_y = 8; rand_pos = 0 }, -/obj/item/reagent_containers/food/snacks/candy/butterscotch{ +/obj/item/reagent_containers/food/snacks/candy/wrapped_candy/butterscotch{ pixel_y = 4; rand_pos = 0 }, -/obj/item/reagent_containers/food/snacks/candy/butterscotch{ +/obj/item/reagent_containers/food/snacks/candy/wrapped_candy/butterscotch{ rand_pos = 0 }, /turf/simulated/floor/wood/four, diff --git a/assets/maps/prefabs/space/prefab_drug_den.dmm b/assets/maps/prefabs/space/prefab_drug_den.dmm index 6ca04a3baf9c7..1402524e88aad 100644 --- a/assets/maps/prefabs/space/prefab_drug_den.dmm +++ b/assets/maps/prefabs/space/prefab_drug_den.dmm @@ -109,7 +109,7 @@ desc = "A black countertop table for storing kitchen-y objects."; name = "kitchen counter" }, -/obj/submachine/mixer, +/obj/machinery/mixer, /turf/simulated/floor/specialroom/cafeteria, /area/prefab/drug_den) "gy" = ( diff --git a/assets/maps/prefabs/space/prefab_outpost.dmm b/assets/maps/prefabs/space/prefab_outpost.dmm index 5a9a8281d8083..499421d53fe2d 100644 --- a/assets/maps/prefabs/space/prefab_outpost.dmm +++ b/assets/maps/prefabs/space/prefab_outpost.dmm @@ -100,7 +100,9 @@ /turf/simulated/floor/sanitary/white, /area/mining/miningoutpost) "at" = ( -/obj/machinery/door/unpowered/wood/stall, +/obj/machinery/door/unpowered/wood/stall{ + dir = 4 + }, /turf/simulated/floor/sanitary/white, /area/mining/miningoutpost) "au" = ( @@ -139,8 +141,7 @@ "aB" = ( /obj/stool/chair/yellow, /obj/cable{ - icon_state = "4-8"; - + icon_state = "4-8" }, /obj/machinery/light/incandescent/warm/very, /turf/simulated/floor/specialroom/medbay, @@ -590,15 +591,13 @@ icon_state = "1-8" }, /obj/cable{ - icon_state = "2-4"; - + icon_state = "2-4" }, /turf/simulated/floor/plating, /area/mining/miningoutpost) "bY" = ( /obj/cable{ - icon_state = "1-2"; - + icon_state = "1-2" }, /turf/simulated/floor/plating, /area/mining/miningoutpost) @@ -608,8 +607,7 @@ dir = 1 }, /obj/cable{ - icon_state = "0-2"; - + icon_state = "0-2" }, /obj/cable{ icon_state = "0-8" @@ -644,8 +642,7 @@ "cd" = ( /obj/machinery/door/airlock/pyro, /obj/cable{ - icon_state = "1-2"; - + icon_state = "1-2" }, /turf/simulated/floor/plating, /area/mining/miningoutpost) diff --git a/assets/maps/prefabs/space/prefab_sequestered_cloner.dmm b/assets/maps/prefabs/space/prefab_sequestered_cloner.dmm index 7ae7ec5ad4c06..181bd97bcaacc 100644 --- a/assets/maps/prefabs/space/prefab_sequestered_cloner.dmm +++ b/assets/maps/prefabs/space/prefab_sequestered_cloner.dmm @@ -268,6 +268,9 @@ /obj/item_dispenser/idcarddispenser{ pixel_x = 7 }, +/obj/storage/secure/closet/command/chief_engineer/puzzle{ + pixel_x = -8 + }, /turf/simulated/floor/yellow/side{ dir = 1 }, @@ -367,6 +370,14 @@ /turf/simulated/floor/red/redblackchecker, /area/prefab/sequestered_cloner) "xI" = ( +/obj/machinery/power/apc/puzzle_apc{ + autoname_on_spawn = 0; + desc = "A note is attached: To leave, power this APC and press the neighboring button. The APC can be a little slow."; + name = "Engine Test APC"; + pixel_x = -24; + pixel_y = -2; + start_charge = 0 + }, /obj/cable, /obj/machinery/light/incandescent/netural, /turf/simulated/floor/yellow, diff --git a/assets/maps/prefabs/space/prefab_silverglass.dmm b/assets/maps/prefabs/space/prefab_silverglass.dmm index d9375b26bf3b1..6508c2919f0d9 100644 --- a/assets/maps/prefabs/space/prefab_silverglass.dmm +++ b/assets/maps/prefabs/space/prefab_silverglass.dmm @@ -360,7 +360,7 @@ /area/prefab/silverglass) "lb" = ( /obj/rack, -/obj/item/clothing/suit/fire/heavy, +/obj/item/clothing/suit/hazard/fire/heavy, /obj/item/clothing/head/helmet/EOD, /turf/simulated/floor/airless/darkblue, /area/prefab/silverglass/research) diff --git a/assets/maps/prefabs/space/prefab_space_casino.dmm b/assets/maps/prefabs/space/prefab_space_casino.dmm index 4184c67de7f25..91dd520f678f5 100644 --- a/assets/maps/prefabs/space/prefab_space_casino.dmm +++ b/assets/maps/prefabs/space/prefab_space_casino.dmm @@ -63,7 +63,7 @@ /area/prefab/space_casino) "fz" = ( /obj/table/auto, -/obj/submachine/mixer, +/obj/machinery/mixer, /obj/machinery/light/incandescent{ dir = 1 }, diff --git a/assets/maps/prefabs/underwater/nadir/prefab_water_nadirelevator.dmm b/assets/maps/prefabs/underwater/nadir/prefab_water_nadirelevator.dmm index e3e2f14cf13ca..0bce15e97ff1e 100644 --- a/assets/maps/prefabs/underwater/nadir/prefab_water_nadirelevator.dmm +++ b/assets/maps/prefabs/underwater/nadir/prefab_water_nadirelevator.dmm @@ -490,7 +490,7 @@ /area/shuttle/sea_elevator) "sR" = ( /obj/table/reinforced/auto, -/obj/submachine/mixer, +/obj/machinery/mixer, /obj/machinery/light/incandescent/warm{ dir = 4; nostick = 1; diff --git a/assets/maps/prefabs/underwater/nadir_unsafe/prefab_water_honk.dmm b/assets/maps/prefabs/underwater/nadir_unsafe/prefab_water_honk.dmm index 0b8be8bcd0395..cedcd29a8cbf5 100644 --- a/assets/maps/prefabs/underwater/nadir_unsafe/prefab_water_honk.dmm +++ b/assets/maps/prefabs/underwater/nadir_unsafe/prefab_water_honk.dmm @@ -244,7 +244,7 @@ }, /area/prefab/slimy_honk) "aY" = ( -/obj/item/reagent_containers/food/snacks/candy/caramel, +/obj/item/reagent_containers/food/snacks/candy/wrapped_candy/caramel, /turf/simulated/floor/carpet/purple, /area/prefab/slimy_honk) "aZ" = ( @@ -252,7 +252,7 @@ /turf/simulated/floor/carpet/purple, /area/prefab/slimy_honk) "bb" = ( -/obj/item/reagent_containers/food/snacks/candy/wrapped_pbcup, +/obj/item/reagent_containers/food/snacks/candy/wrapped_candy/pb_cup, /obj/item/mousetrap/armed, /turf/simulated/floor/carpet, /area/prefab/slimy_honk) diff --git a/assets/maps/random_rooms/3x3/hosroom.dmm b/assets/maps/random_rooms/3x3/hosroom.dmm index 45773698f3851..4e5c7eb90c863 100644 --- a/assets/maps/random_rooms/3x3/hosroom.dmm +++ b/assets/maps/random_rooms/3x3/hosroom.dmm @@ -15,7 +15,7 @@ /obj/item/clothing/shoes/swat, /obj/item/clothing/head/danberet, /obj/item/clothing/suit/gimmick/guncoat/dirty{ - name = "Old And Diry Coats" + name = "Dirty Old Coat" }, /obj/item/reagent_containers/food/drinks/bottle/vintage, /turf/simulated/floor/plating/damaged1, diff --git a/assets/maps/random_rooms/3x3/junkstorage_firefighting.dmm b/assets/maps/random_rooms/3x3/junkstorage_firefighting.dmm index b62040c5ea4af..bae8f7805f31d 100644 --- a/assets/maps/random_rooms/3x3/junkstorage_firefighting.dmm +++ b/assets/maps/random_rooms/3x3/junkstorage_firefighting.dmm @@ -34,8 +34,8 @@ /area/dmm_suite/clear_area) "J" = ( /obj/rack, -/obj/item/clothing/suit/fire, -/obj/item/clothing/suit/fire, +/obj/item/clothing/suit/hazard/fire, +/obj/item/clothing/suit/hazard/fire, /obj/item/tank/air, /obj/item/tank/air, /obj/item/clothing/head/helmet/firefighter, diff --git a/assets/maps/random_rooms/3x3/nope_no_room_30.dmm b/assets/maps/random_rooms/3x3/nope_no_room_30.dmm new file mode 100644 index 0000000000000..b4cc02a8d372a --- /dev/null +++ b/assets/maps/random_rooms/3x3/nope_no_room_30.dmm @@ -0,0 +1,27 @@ +//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE +"a" = ( +/turf/simulated/wall/auto/reinforced, +/area/dmm_suite/clear_area) +"G" = ( +/obj/decal/cleanable/writing{ + words = "FUCK YOU!!!"; + desc = "Someone's scribbled something here in furious, block-letter text." + }, +/turf/simulated/wall/auto/reinforced, +/area/dmm_suite/clear_area) + +(1,1,1) = {" +a +G +a +"} +(2,1,1) = {" +G +a +G +"} +(3,1,1) = {" +a +G +a +"} diff --git a/browserassets/html/how_to_build_a_pod.html b/browserassets/html/how_to_build_a_pod.html index 659ced42a1889..c961702053e0a 100644 --- a/browserassets/html/how_to_build_a_pod.html +++ b/browserassets/html/how_to_build_a_pod.html @@ -10,15 +10,10 @@ <h1 class="center">Making a Space Pod!</h1> <h3>You will need:</h3> <ul> -<li>A pod frame kit</li> -<li>A box of pod circuitry</li> -<li>A pod control interface</li> -<li>An engine manifold</li> +<li>A preassembled pod kit</li> <li>A set of pod armour</li> <li>(Optional: a paint job kit)</li> -<li>4 lengths of cable coil</li> -<li>5 metal sheets</li> -<li>5 reinforced glass sheets</li> +<li>A screwdriver</li> <li>A wrench</li> <li>A welder</li> </ul> @@ -27,33 +22,24 @@ <h3>To make:</h3> <ol> <li>Deploy the frame kit by clicking on the box.</li> <li>Wrench the jumble of metal. It should look less like a pile of junk.</li> -<li>Wrench again. It should look like a functional but unsecured frame of a space pod.</li> -<li>Use the welder.</li> -<li>Insert wires.</li> -<li>Place the circuitry inside the frame.</li> -<li>Add metal to the frame.</li> -<li>Install the engine manifold.</li> +<li>Weld it. It should look like a functional but unsecured frame of a space pod.</li> +<li>Use the screwdriver.</li> <li>Put armor on the pod frame.</li> +<li>Wrench the now armored frame</li> <li>Use the welder.</li> -<li>Install the control interface.</li> -<li>Add the reinforced glass sheets.</li> +<li>Use a screwdriver to close up the final parts</li> <li>Optionally, use the paint job kit on the finished pod.</li> </ol> <h1 class="center">Making a Mini Putt!</h1> -<p>Some of the key components are slightly different, but the construction plan is otherwise the same. And as with space pods, you can rename the finished craft with a champagne bottle.</p> +<p>The main preassembled kit is the only thing different, but the construction plan is otherwise the same. And as with space pods, you can rename the finished craft with a champagne bottle.</p> <h3>You will need:</h3> <ul> -<li>A MiniPutt frame kit</li> -<li>A box of MiniPutt circuitry</li> -<li>A MiniPutt control interface</li> -<li>A MiniPutt engine manifold</li> +<li>A preassembled mini-putt kit</li> <li>A set of pod armour</li> <li>(Optional: a paint job kit)</li> -<li>2 lengths of cable coil</li> -<li>3 metal sheets</li> -<li>3 reinforced glass sheets</li> +<li>A screwdriver</li> <li>A wrench</li> <li>A welder</li> </ul> diff --git a/browserassets/html/polymorph.html b/browserassets/html/polymorph.html index 9f041ab57dcef..b2cf74066e943 100644 --- a/browserassets/html/polymorph.html +++ b/browserassets/html/polymorph.html @@ -2,5 +2,7 @@ <div class="traitor-tips"> <h1 class="center">You have been polymorphed!</h1> - <p>A wizard has polymorphed you into another form! You are reduced in your capacity but you can still fight the wizard! However, <b>you should not randomly attack the crew</b> unless you were somehow already an antagonist. If the crew thinks you're a regular critter, talk to them first!</p> + <p>A wizard has polymorphed you into another form! The spell will wear off in <b>eight minutes</b> and return your previous body.</p> + + <p>You are reduced in your capacity but you can still fight the wizard! However, <b>you should not randomly attack the crew</b> unless you were somehow already an antagonist. If the crew thinks you're a regular critter, talk to them first!</p> </div> diff --git a/browserassets/html/traitorTips/vampiricthrallTips.html b/browserassets/html/traitorTips/vampiricthrallTips.html index 2fa8f0fbb5bc2..6c4626f1dd392 100644 --- a/browserassets/html/traitorTips/vampiricthrallTips.html +++ b/browserassets/html/traitorTips/vampiricthrallTips.html @@ -2,6 +2,7 @@ <div class="traitor-tips"> <h1 class="center">You have been revived as a thrall!</h1> <p>You feel an <em>unwavering loyalty</em> to your new master! (As such, <em>do not reveal their identity</em> or otherwise act against their best interests.)</p> - <p>You will slowly lose blood points over time. Your max health will decrease as blood points are lost. You can regain blood points by drinking the blood of humans or taking an additional donation from your master. + <p>You <em>MUST</em> stay close to your master! Your new unlife is fragile and straying too far from their power will result in your swift demise.</p> + <p>You will slowly lose blood points over time. Your max health will decrease as blood points are lost. You can regain blood points by drinking the blood of humans or taking an additional donation from your master.</p> <p>For more information, consult <a href='?src={ref};wiki=Thrall'>the wiki</a></p> </div> diff --git a/browserassets/js/browserOutput.js b/browserassets/js/browserOutput.js index ffed406372848..91d014e5f9133 100644 --- a/browserassets/js/browserOutput.js +++ b/browserassets/js/browserOutput.js @@ -1008,7 +1008,7 @@ $(function() { '</div>'); } - runByond('?action=ehjax&type=datum&datum=chatOutput&proc=doneLoading¶m[ua]='+escaper(navigator.userAgent)); + runByond('?action=ehjax&type=datum&datum=chatOutput&proc=doneLoading'); if ($('#loading').is(':visible')) { $('#loading').remove(); } diff --git a/browserassets/tgui/tgui.bundle.css b/browserassets/tgui/tgui.bundle.css index 6c852e42b225b..66905f2c6bfcf 100644 --- a/browserassets/tgui/tgui.bundle.css +++ b/browserassets/tgui/tgui.bundle.css @@ -1,11 +1,11 @@ @import url(https://fonts.googleapis.com/css2?family=Anton&display=swap); -html,body{box-sizing:border-box;height:100%;margin:0;font-size:12px}html{overflow:hidden;cursor:default}body{overflow:auto;font-family:Verdana,Geneva,sans-serif}*,*:before,*:after{box-sizing:inherit}h1,h2,h3,h4,h5,h6{display:block;margin:0;padding:6px 0;padding:.5rem 0}h1{font-size:18px;font-size:1.5rem}h2{font-size:16px;font-size:1.333rem}h3{font-size:14px;font-size:1.167rem}h4{font-size:12px;font-size:1rem}td,th{vertical-align:baseline;text-align:left}.candystripe:nth-child(odd){background-color:rgba(0,0,0,.25)}.centered-image{position:absolute;height:100%;left:50%;top:50%;transform:translateX(-50%) translateY(-50%) scale(0.8)}.color-black{color:#1a1a1a !important}.color-white{color:#fff !important}.color-red{color:#df3e3e !important}.color-orange{color:#f37f33 !important}.color-yellow{color:#fbda21 !important}.color-olive{color:#cbe41c !important}.color-green{color:#25ca4c !important}.color-teal{color:#00d6cc !important}.color-blue{color:#2e93de !important}.color-violet{color:#7349cf !important}.color-purple{color:#ad45d0 !important}.color-pink{color:#e34da1 !important}.color-brown{color:#b97447 !important}.color-grey{color:#848484 !important}.color-light-grey{color:#b3b3b3 !important}.color-good{color:#68c22d !important}.color-average{color:#f29a29 !important}.color-bad{color:#df3e3e !important}.color-label{color:#8b9bb0 !important}.color-bg-black{background-color:#000 !important}.color-bg-white{background-color:#d9d9d9 !important}.color-bg-red{background-color:#bd2020 !important}.color-bg-orange{background-color:#d95e0c !important}.color-bg-yellow{background-color:#d9b804 !important}.color-bg-olive{background-color:#9aad14 !important}.color-bg-green{background-color:#1b9638 !important}.color-bg-teal{background-color:#009a93 !important}.color-bg-blue{background-color:#1c71b1 !important}.color-bg-violet{background-color:#552dab !important}.color-bg-purple{background-color:#8b2baa !important}.color-bg-pink{background-color:#cf2082 !important}.color-bg-brown{background-color:#8c5836 !important}.color-bg-grey{background-color:#646464 !important}.color-bg-light-grey{background-color:#919191 !important}.color-bg-good{background-color:#4d9121 !important}.color-bg-average{background-color:#cd7a0d !important}.color-bg-bad{background-color:#bd2020 !important}.color-bg-label{background-color:#657a94 !important}.debug-layout,.debug-layout *:not(g):not(path){color:rgba(255,255,255,.9) !important;background:transparent !important;outline:1px solid rgba(255,255,255,.5) !important;box-shadow:none !important;filter:none !important}.debug-layout:hover,.debug-layout *:not(g):not(path):hover{outline-color:rgba(255,255,255,.8) !important}@media all and (min-width: 100px){.fit-text{font-size:.1em}}@media all and (min-width: 200px){.fit-text{font-size:.2em}}@media all and (min-width: 300px){.fit-text{font-size:.3em}}@media all and (min-width: 400px){.fit-text{font-size:.4em}}@media all and (min-width: 500px){.fit-text{font-size:.5em}}@media all and (min-width: 600px){.fit-text{font-size:.6em}}@media all and (min-width: 700px){.fit-text{font-size:.7em}}@media all and (min-width: 800px){.fit-text{font-size:.8em}}@media all and (min-width: 900px){.fit-text{font-size:.9em}}@media all and (min-width: 1000px){.fit-text{font-size:1em}}@media all and (min-width: 1100px){.fit-text{font-size:1.1em}}@media all and (min-width: 1200px){.fit-text{font-size:1.2em}}@media all and (min-width: 1300px){.fit-text{font-size:1.3em}}@media all and (min-width: 1400px){.fit-text{font-size:1.4em}}@media all and (min-width: 1500px){.fit-text{font-size:1.5em}}@media all and (min-width: 1600px){.fit-text{font-size:1.6em}}@media all and (min-width: 1700px){.fit-text{font-size:1.7em}}@media all and (min-width: 1800px){.fit-text{font-size:1.8em}}@media all and (min-width: 1900px){.fit-text{font-size:1.9em}}a:link,a:visited{color:#2185d0}a:hover,a:active{color:#4972a1}.outline-dotted{outline-style:dotted !important}.outline-dashed{outline-style:dashed !important}.outline-solid{outline-style:solid !important}.outline-double{outline-style:double !important}.outline-groove{outline-style:groove !important}.outline-ridge{outline-style:ridge !important}.outline-inset{outline-style:inset !important}.outline-outset{outline-style:outset !important}.outline-color-black{outline:.167rem solid #1a1a1a !important}.outline-color-white{outline:.167rem solid #fff !important}.outline-color-red{outline:.167rem solid #df3e3e !important}.outline-color-orange{outline:.167rem solid #f37f33 !important}.outline-color-yellow{outline:.167rem solid #fbda21 !important}.outline-color-olive{outline:.167rem solid #cbe41c !important}.outline-color-green{outline:.167rem solid #25ca4c !important}.outline-color-teal{outline:.167rem solid #00d6cc !important}.outline-color-blue{outline:.167rem solid #2e93de !important}.outline-color-violet{outline:.167rem solid #7349cf !important}.outline-color-purple{outline:.167rem solid #ad45d0 !important}.outline-color-pink{outline:.167rem solid #e34da1 !important}.outline-color-brown{outline:.167rem solid #b97447 !important}.outline-color-grey{outline:.167rem solid #848484 !important}.outline-color-light-grey{outline:.167rem solid #b3b3b3 !important}.outline-color-good{outline:.167rem solid #68c22d !important}.outline-color-average{outline:.167rem solid #f29a29 !important}.outline-color-bad{outline:.167rem solid #df3e3e !important}.outline-color-label{outline:.167rem solid #8b9bb0 !important}.text-left{text-align:left}.text-center{text-align:center}.text-right{text-align:right}.text-baseline{text-align:baseline}.text-justify{text-align:justify}.text-nowrap{white-space:nowrap}.text-pre{white-space:pre}.text-bold{font-weight:bold}.text-italic{font-style:italic}.text-underline{text-decoration:underline}.BlockQuote{color:#8b9bb0;border-left:.1666666667em solid #8b9bb0;padding-left:.5em;margin-bottom:.5em}.BlockQuote:last-child{margin-bottom:0}.Button{position:relative;display:inline-block;line-height:1.667em;padding:0 .5em;margin-right:.1666666667em;white-space:nowrap;outline:0;border-radius:.16em;margin-bottom:.1666666667em;user-select:none;-ms-user-select:none}.Button:last-child{margin-right:0;margin-bottom:0}.Button .fa,.Button .fa-solid,.Button .fa-regular{margin-left:0;margin-right:0;min-width:1.333em;text-align:center}.Button--hasContent .fa,.Button--hasContent .fa-solid,.Button--hasContent .fa-regular{margin-right:.25em}.Button--hasContent.Button--iconPosition--right .fa,.Button--hasContent.Button--iconPosition--right .fas,.Button--hasContent.Button--iconPosition--right .far{margin-right:0px;margin-left:3px}.Button--ellipsis{overflow:hidden;text-overflow:ellipsis}.Button--ellipsis .Button__content{overflow:hidden;text-overflow:ellipsis}.Button--fluid{display:block;margin-left:0;margin-right:0}.Button--circular{border-radius:50%}.Button--compact{padding:0 .25em;line-height:1.333em}.Button--color--black{transition:color 50ms,background-color 50ms;background-color:#000;color:#fff}.Button--color--black:hover{transition:color 0ms,background-color 0ms}.Button--color--black:focus{transition:color 100ms,background-color 100ms}.Button--color--black:hover,.Button--color--black:focus{background-color:#131313;color:#fff}.Button--color--black:active{background-color:#262626}.Button--color--white{transition:color 50ms,background-color 50ms;background-color:#d9d9d9;color:#000}.Button--color--white:hover{transition:color 0ms,background-color 0ms}.Button--color--white:focus{transition:color 100ms,background-color 100ms}.Button--color--white:hover,.Button--color--white:focus{background-color:#f8f8f8;color:#000}.Button--color--white:active{background-color:#fbfbfb}.Button--color--red{transition:color 50ms,background-color 50ms;background-color:#bd2020;color:#fff}.Button--color--red:hover{transition:color 0ms,background-color 0ms}.Button--color--red:focus{transition:color 100ms,background-color 100ms}.Button--color--red:hover,.Button--color--red:focus{background-color:#dc4848;color:#fff}.Button--color--red:active{background-color:#e78484}.Button--color--orange{transition:color 50ms,background-color 50ms;background-color:#d95e0c;color:#fff}.Button--color--orange:hover{transition:color 0ms,background-color 0ms}.Button--color--orange:focus{transition:color 100ms,background-color 100ms}.Button--color--orange:hover,.Button--color--orange:focus{background-color:#f0853f;color:#fff}.Button--color--orange:active{background-color:#f5b082}.Button--color--yellow{transition:color 50ms,background-color 50ms;background-color:#d9b804;color:#000}.Button--color--yellow:hover{transition:color 0ms,background-color 0ms}.Button--color--yellow:focus{transition:color 100ms,background-color 100ms}.Button--color--yellow:hover,.Button--color--yellow:focus{background-color:#f5d72e;color:#000}.Button--color--yellow:active{background-color:#f9e572}.Button--color--olive{transition:color 50ms,background-color 50ms;background-color:#9aad14;color:#fff}.Button--color--olive:hover{transition:color 0ms,background-color 0ms}.Button--color--olive:focus{transition:color 100ms,background-color 100ms}.Button--color--olive:hover,.Button--color--olive:focus{background-color:#c4da2b;color:#fff}.Button--color--olive:active{background-color:#d6e761}.Button--color--green{transition:color 50ms,background-color 50ms;background-color:#1b9638;color:#fff}.Button--color--green:hover{transition:color 0ms,background-color 0ms}.Button--color--green:focus{transition:color 100ms,background-color 100ms}.Button--color--green:hover,.Button--color--green:focus{background-color:#32c154;color:#fff}.Button--color--green:active{background-color:#59da78}.Button--color--teal{transition:color 50ms,background-color 50ms;background-color:#009a93;color:#fff}.Button--color--teal:hover{transition:color 0ms,background-color 0ms}.Button--color--teal:focus{transition:color 100ms,background-color 100ms}.Button--color--teal:hover,.Button--color--teal:focus{background-color:#13c4bc;color:#fff}.Button--color--teal:active{background-color:#26eee5}.Button--color--blue{transition:color 50ms,background-color 50ms;background-color:#1c71b1;color:#fff}.Button--color--blue:hover{transition:color 0ms,background-color 0ms}.Button--color--blue:focus{transition:color 100ms,background-color 100ms}.Button--color--blue:hover,.Button--color--blue:focus{background-color:#3a95d9;color:#fff}.Button--color--blue:active{background-color:#73b3e5}.Button--color--violet{transition:color 50ms,background-color 50ms;background-color:#552dab;color:#fff}.Button--color--violet:hover{transition:color 0ms,background-color 0ms}.Button--color--violet:focus{transition:color 100ms,background-color 100ms}.Button--color--violet:hover,.Button--color--violet:focus{background-color:#7953cc;color:#fff}.Button--color--violet:active{background-color:#a389dd}.Button--color--purple{transition:color 50ms,background-color 50ms;background-color:#8b2baa;color:#fff}.Button--color--purple:hover{transition:color 0ms,background-color 0ms}.Button--color--purple:focus{transition:color 100ms,background-color 100ms}.Button--color--purple:hover,.Button--color--purple:focus{background-color:#ad4fcd;color:#fff}.Button--color--purple:active{background-color:#c785dd}.Button--color--pink{transition:color 50ms,background-color 50ms;background-color:#cf2082;color:#fff}.Button--color--pink:hover{transition:color 0ms,background-color 0ms}.Button--color--pink:focus{transition:color 100ms,background-color 100ms}.Button--color--pink:hover,.Button--color--pink:focus{background-color:#e257a5;color:#fff}.Button--color--pink:active{background-color:#ee96c7}.Button--color--brown{transition:color 50ms,background-color 50ms;background-color:#8c5836;color:#fff}.Button--color--brown:hover{transition:color 0ms,background-color 0ms}.Button--color--brown:focus{transition:color 100ms,background-color 100ms}.Button--color--brown:hover,.Button--color--brown:focus{background-color:#b47851;color:#fff}.Button--color--brown:active{background-color:#ca9c7e}.Button--color--grey{transition:color 50ms,background-color 50ms;background-color:#646464;color:#fff}.Button--color--grey:hover{transition:color 0ms,background-color 0ms}.Button--color--grey:focus{transition:color 100ms,background-color 100ms}.Button--color--grey:hover,.Button--color--grey:focus{background-color:#868686;color:#fff}.Button--color--grey:active{background-color:#a8a8a8}.Button--color--light-grey{transition:color 50ms,background-color 50ms;background-color:#919191;color:#fff}.Button--color--light-grey:hover{transition:color 0ms,background-color 0ms}.Button--color--light-grey:focus{transition:color 100ms,background-color 100ms}.Button--color--light-grey:hover,.Button--color--light-grey:focus{background-color:#bababa;color:#fff}.Button--color--light-grey:active{background-color:#e2e2e2}.Button--color--good{transition:color 50ms,background-color 50ms;background-color:#4d9121;color:#fff}.Button--color--good:hover{transition:color 0ms,background-color 0ms}.Button--color--good:focus{transition:color 100ms,background-color 100ms}.Button--color--good:hover,.Button--color--good:focus{background-color:#6cba39;color:#fff}.Button--color--good:active{background-color:#8ed55f}.Button--color--average{transition:color 50ms,background-color 50ms;background-color:#cd7a0d;color:#fff}.Button--color--average:hover{transition:color 0ms,background-color 0ms}.Button--color--average:focus{transition:color 100ms,background-color 100ms}.Button--color--average:hover,.Button--color--average:focus{background-color:#ed9d35;color:#fff}.Button--color--average:active{background-color:#f3bd76}.Button--color--bad{transition:color 50ms,background-color 50ms;background-color:#bd2020;color:#fff}.Button--color--bad:hover{transition:color 0ms,background-color 0ms}.Button--color--bad:focus{transition:color 100ms,background-color 100ms}.Button--color--bad:hover,.Button--color--bad:focus{background-color:#dc4848;color:#fff}.Button--color--bad:active{background-color:#e78484}.Button--color--label{transition:color 50ms,background-color 50ms;background-color:#657a94;color:#fff}.Button--color--label:hover{transition:color 0ms,background-color 0ms}.Button--color--label:focus{transition:color 100ms,background-color 100ms}.Button--color--label:hover,.Button--color--label:focus{background-color:#91a1b3;color:#fff}.Button--color--label:active{background-color:#bec7d3}.Button--color--default{transition:color 50ms,background-color 50ms;background-color:#3e6189;color:#fff}.Button--color--default:hover{transition:color 0ms,background-color 0ms}.Button--color--default:focus{transition:color 100ms,background-color 100ms}.Button--color--default:hover,.Button--color--default:focus{background-color:#5c83b0;color:#fff}.Button--color--default:active{background-color:#89a6c6}.Button--color--caution{transition:color 50ms,background-color 50ms;background-color:#d9b804;color:#000}.Button--color--caution:hover{transition:color 0ms,background-color 0ms}.Button--color--caution:focus{transition:color 100ms,background-color 100ms}.Button--color--caution:hover,.Button--color--caution:focus{background-color:#f5d72e;color:#000}.Button--color--caution:active{background-color:#f9e572}.Button--color--danger{transition:color 50ms,background-color 50ms;background-color:#bd2020;color:#fff}.Button--color--danger:hover{transition:color 0ms,background-color 0ms}.Button--color--danger:focus{transition:color 100ms,background-color 100ms}.Button--color--danger:hover,.Button--color--danger:focus{background-color:#dc4848;color:#fff}.Button--color--danger:active{background-color:#e78484}.Button--color--transparent{transition:color 50ms,background-color 50ms;background-color:#252525;color:#fff;background-color:rgba(37,37,37,0);color:rgba(255,255,255,.5)}.Button--color--transparent:hover{transition:color 0ms,background-color 0ms}.Button--color--transparent:focus{transition:color 100ms,background-color 100ms}.Button--color--transparent:hover,.Button--color--transparent:focus{background-color:#3e3e3e;color:#fff}.Button--color--transparent:active{background-color:#565656}.Button--disabled{background-color:#999 !important}.Button--selected{transition:color 50ms,background-color 50ms;background-color:#1b9638;color:#fff}.Button--selected:hover{transition:color 0ms,background-color 0ms}.Button--selected:focus{transition:color 100ms,background-color 100ms}.Button--selected:hover,.Button--selected:focus{background-color:#32c154;color:#fff}.Button--selected:active{background-color:#59da78}.Button--flex{display:inline-flex;flex-direction:column}.Button--flex--fluid{width:100%}.Button--verticalAlignContent--top{justify-content:flex-start}.Button--verticalAlignContent--middle{justify-content:center}.Button--verticalAlignContent--bottom{justify-content:flex-end}.Button__content{display:block;align-self:stretch}.ColorBox{display:inline-block;width:1em;height:1em;line-height:1em;text-align:center}.Dimmer{display:flex;justify-content:center;align-items:center;position:absolute;top:0;bottom:0;left:0;right:0;background-color:rgba(0,0,0,.75);z-index:1}.Dimmer--full{position:fixed;top:32px}.Divider--horizontal{margin:.5em 0}.Divider--horizontal:not(.Divider--hidden){border-top:.1666666667em solid rgba(255,255,255,.1)}.Divider--vertical{height:100%;margin:0 .5em}.Divider--vertical:not(.Divider--hidden){border-left:.1666666667em solid rgba(255,255,255,.1)}.Dropdown{position:relative}.Dropdown__control{position:relative;display:inline-block;font-family:Verdana,sans-serif;font-size:1em;width:8.3333333333em;line-height:1.4166666667em;user-select:none}.Dropdown__arrow-button{float:right;padding-left:.35em;width:1.2em;height:1.8333333333em;border-left:.0833333333em solid #000;border-left:.0833333333em solid rgba(0,0,0,.25)}.Dropdown__menu{position:absolute;overflow-y:auto;z-index:5;width:8.3333333333em;max-height:16.6666666667em;overflow-y:scroll;border-radius:0 0 .1666666667em .1666666667em;color:#fff;background-color:#000;background-color:rgba(0,0,0,.75)}.Dropdown__menu-noscroll{position:absolute;overflow-y:auto;z-index:5;width:8.3333333333em;max-height:16.6666666667em;border-radius:0 0 .1666666667em .1666666667em;color:#fff;background-color:#000;background-color:rgba(0,0,0,.75)}.Dropdown__menuentry{padding:.1666666667em .3333333333em;font-family:Verdana,sans-serif;font-size:1em;line-height:1.4166666667em;transition:background-color 100ms ease-out}.Dropdown__menuentry:hover{background-color:rgba(255,255,255,.2);transition:background-color 0ms}.Dropdown__over{top:auto;bottom:100%}.Dropdown__selected-text{display:inline-block;text-overflow:ellipsis;white-space:nowrap;height:1.4166666667em;width:calc(100% - 1.2em)}.Flex{display:-ms-flexbox;display:flex}.Flex--inline{display:inline-flex}.Flex--iefix{display:block}.Flex--iefix.Flex--inline{display:inline-block}.Flex__item--iefix{display:inline-block}.Flex--iefix--column>.Flex__item--iefix{display:block}.GeneIcon{display:inline-block;width:1em;height:1em;background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAUAAAAFACAYAAADNkKWqAAACS3pUWHREZXNjcmlwdGlvbgAAeJyVl01u3DAMhdfjUxjJti2S/gDdzKZIUGSRXCGgLXrEmBJVSo47OX0XKZpp0QFpeGMD33uiSEqWLvtvt9/vHvqb+7vuGbWS5H7ff/5w1e1WCi32+/7Tx24XkQ6xvX7UBg37fX9x0e0Cae33/XW3mxQSvr7/ARqmwtDQBAPojBnVBEcRDrLm/4Nfu11AhmO/76/f/fW8OSx5zmcNTkfSo8yUsVI12QStoSI0xwyellSOJlWEj0m0RKrJkWbGAi3atpgKtGhilJK46paQmwnVpaBOoDaJRxwQkp1wCIoZmLIjRApgG5YozV1uVBzc8ESKg6In7YES5kqSa6TJzlZEYMqHJstoe0dgXkbK0Ejs5h9U1pzF0QFtdi3ukQVscoyQkNETIB3KMtvhUbZHzeJoo1oQHWlmegENttuPhWxKBRxDTioHG2Kojv0hrKCTXSawm3NgcKS+zsjYHPVOkme04x9ldS3IR0V75Y7CwQW2iJqAXSwyjj5T+enigH1+Cr7JvO5VjNVhiQe0SxfhxXEAQHCsmqaS7V6PC9udpxBIBgWyJ4BHO37X782xVw6eNESR9siUBrs5SgGlRpLfX22Br014FZ3pXDE85zAoBRTaWY8v//Hodoor5fBPvTHJGFUSwaMu1fPjfBMMKtnRn6eSg7BdpFMBU9o2gjA9b1M8QdgmaAi8STDKAI7D3qmEcqCDbJKURQtvm8kzCeO2wKaljpFgk8Z7b4DfAsexg87eFi7724eb/ub+rvsFmer4u2pZeMcAACAASURBVHic7L19YBXVnf//nvBMIPIUQBsCrfKryIIu94KtLaWl2lCJrVtpdV23PtTea2zTNbBru63QVijutou4m231Rqtl11p/rfZJoqTGtCnWr8IdKliNfhFMYqwhAYyEAHm68/1j7jlz5syZ57m5iTlvHO+9M+fO687cue98zvmcM0cpr6gCALTv3a8BwNzlFyrIoew4+eZLSUmNPo0FdFNYsGA+AKB5736NmMOha7ZrpOC5j1YpAHDbvd+k6+6p2OqrnB0n33wpKanRKaW0dJm2YsWFppXNzS3o2daApvo4Fl2apo/VqzpRW6JibVuMPlY2Fnsq94341SDmQ7Rnz34AQD75S9eukiYoJTVKVQDohtPc3GLaUL2qE+VHVyoAUH50pVK9qhOVjcU4eEWdAgAHr6hTKhuLPZdjxfPyzZeSkhqdUsorqnCgtlGbPXsaXblgwXw0N7fg39L/P11XW6Ji+413YNGlabquqT6Oqoe2YG1bzLFc4YbVdJ9EHR1dNPrKN19KSmp0SiFJkAO1jRoAECPq6OjCVZmttOD2tjX6k41x492bdZOpKtnlWK50R8a0XwAW88k3X6Sd9xpti2FUXlEljVZKahiKGuCha7Zr1as6cVNpGd3Y2rovEkhp6TL6/MHWOlQ2FtNkBVG++byiMj8iaYJSUsNPSnlFFQ5ds11rqo+j/OhK5bZ7v6nVlqhGJMUr5bA3FUCNeFNVyS6sbYvhnoqtys5Zu7VFl6apCfniB5QTn1fU5kckTVBKanipgDxZdGna1J1EKCfzA4CYe5lD12zX2PY5X/wIZMeXkpIafRpLnpAIDIA3E0oK1qWgR4EOOvfRKhqBsfLNDyg7vpSU1OjTWCDbefia7dptq57yVv0UmZ+LtretAUp24bZ7v6kd4trgfPMDyIkvJSU1OkUjQNJ/rqk+Dmy2Ke1kfG7VYwDbb7wDu7Idle+p2Gra5okfUk78kaYnfnS3KVK+4tb1Q2roki/57wV+AaAPG6stUXHuo1XKokvT5q4mbkrBMD+HJAg26qM0zn20SqktUU1D1ULxvcqBP9LEf/l264aCf8Wt65Urbl2vSP7Q8gk333x23Ujk0yTI2raYf1Ngoz4n82N0273f1NiOy6H4AWTHHyly+qKH4iK0YwzVj1Dy9R//cOOTbSONTw2wtkSlNw3wJRV61diD+QH6jQlqS6yZksB8n7LjjwR5+YJzeRG67TvXP0LJt//xDwc+KTOS+AWAbgpr22K0Px4ZYRGpNus3Kzh0zXaN9Mcjm/LNl5KSGp2iSRByY4HaEhXbEX0WFoA+bndzjIzEMG3LN18qmIay7Wc4aKgb+4e7+PMx0q6HAsAYiUEiMXZsbVRiR2KQSIxsyzdfSkpqdMrfSJAIJEeCBJeX6COXEcpw53tpIwrLd0tCSX7++KSMn31SA2yqj/vvHOwj+UF07qNVSlO9tZtLIH4A2fFHitwawUcrP9c/PpZv1w1J8vPHJ9v87s9yN5hcjcQAjGqo091g8sVnNRJuhvBe6Ygq+ZKfTz41wNvu/aZmjMTwWEUk/QC9Do3baNyyns/CBuL7lQOf1UgwQCkpqfAKPhKE7QSd8ECSI0GkpKSGmWg3mLVtMeDemFZ5zfacAu2MJ998KSmp0afgI0FItdfjEDgiORJESkpquMjSBli4YTXdmE43RAKJx4199mxrcGwDzBefl7wlvpTUe1/UANv37tcA0Llzm5tbsLL9dlowzKRE8aeKTPsFAH5S8nzzRZKTIklJvbc1FtBnZOMnJwdgmm4SJbus01LCOi2lqByeMiIwYkR7ahs1dlrMfPLtJI1LSuq9rQIyJy87WTiZk/eeiq1KZWMxHaJGsqjVqzppxpYML3Mq17OtwbTv5uYWzJ49DQdqG7V88/Nz2qWkpIaDCvgVzc0t6OjoQmVjMXbO2q0BwM5ZuzVys4KFT5RpALDwiTKN3MXZS7mOji7TxOR2yjdfSkpq9Egpr6gCicIAfeJwUjVkx+aSkRNsNxKSSPBazo6Tb76UlNToFE2CkOpgrk3BjpNvvpSU1OgT7Qg9VIZgxyGRWa5lxyFZaC/Z4TCy40i+5Ev+0PNpBJhPte/dr7HdVMiHi7oKbMeRfMmX/NHJz7sBirrANDe3oGdbA5rq9fG75JHcLWZtW4w+khsouJX7Rvxq2gWGaM+e/QAAyZd8yR+dfEsWOB9iu8AQVa/qRPnRlQoAlB9dqZCM78Er6hQAOHhFnUIyvl7KOfEkX/Ilf3Ty8x4BAubsLKB3ViZ9AYlqS1RrR+h6a0doUbnCDavpPonsstCSL/mSP3r4w8IAASM7y3ZTuSqzlW4PMxSudEfGtF/APgtty59Tpj+5fLnxpif3AgmganMdw8+e5I33R8vP9/FL/qjmn5/db5LZb3pzGiqAVxn++LY1+DyA+Ag5/mFjgOSO0DeVltF1ra37Itl3aeky+vzB1jrHO1Kb+N9SEUsAKnO3G/q6BvoTsiKW0O+LyK7Pvi7tNP5C+eLn+/glf1TzW4p1vqrqN30CgBiAWAz4hgp8Hsb6w9nHf4sBSAA1SWPdz4bx8Q8LAySzwpUfXamQm6Pa3hY/JV4NwPHWXOyscDtn7dbIcDlb/sYyxBJAGgB7e1by2mKCCQdzBFBVMt8fP+JpAXwff0i+phmjDBVFGXI+r6Hgp5hj5vXqvLqc87XUa7bb1m9+wxf/H9rWIJY1M9QYJhiD8UjE3lwuxr0GdCPsG6bf/1j3tw6NFl2axiGkNdz7TftCTuYH6Gc/Bcdb9B+6Zru2yAOfeFc8a4JExPxiiewXXZMtWJPIvoYRMnIm6IefK71X+JrAbBRFEZTMDZ9XStOQdOCTalqu+FrqNSjJD0bPr4H+x70ma26Mu8WIC7IRYkwvEzPvBa9mHyM9fnINkJ9X0v/3P2wMkPwFAODtBgUik0vB+ueH07mPVtG/AE78NAzzi4N7TBiPvAmKq8UJ4EidL36uNBR8kTlFyU+n9feyhqdpGtLpNOJx5+kUcnH8xPxSaYcI8Mrcff/E/LTUT23LrN8MX/xYClCTjMmRSJDfcdYcyQZifuR9KveGyI+fYXsRzx8WVWDA46xwbpMwEQN0qQa7zkrHVX/5CNC2Gsw3FnLV4qojdYFmxdMEc0QpAaZNyeWsfF4isij46XQasVgMiqJYqtmapkFVVVsTzMXxs+aXjDtHILngs+anJP8hEv75bWssEVwsBfq7UlXGGJk2Ikt0mNBNFABNlgQ+fk3T+WyUl9KMnasAVP/nP3AEGPW0eKT/jj4rnE0hp9nn3KrHALbfeAd2GbPC2fNRJt6BndhIjzVDrlq8feP93vjM8YvMj6z3a4Kej9/u/LuINyVN00wmGAU/lv3l2UWZsRj/0zUU9fHz5pdKOQcvybblkfJ589N+7/wjUBq8HX8qyzdFcdmqMGoY8yMiyT8w78tOlMYmSUKdf7dpN1zMDzb8QB2h7SZGDrIvIOSscCkY5uc0P4mfWenalluqvoC1KhxLwJgRj3CJGcYSxnq1Bth4v+9Z8ezMDwgQAeZ4Vj7X9rcc8nnjHQq+yPySScV+aVseKV9kfsonkvZLg/frj+3qggRneAnn56ayzG/x36M4/yqARPZtKY2J/ARl+T9GNnzfEaCT0YWZHT7QrHDsHzyPkzN5nZWOVHHZJEiaWy/KBANMggTWz+SVH6n5BeD7FW9AxJT4KHC4zgroh29nfqmEvQknsTwyvp35aftutn2P8qsXffHV7P9igH7hk+vYzgDBtReSaJHjRPL9O5xnaow2XsDzfRmglygvqAnWlqhk+Iq/SDLArHQLnyjTTLfRF/CJpwm7wdiYHwn6SBny8VCTAHC/L76dePMjxiOKwETbwvJZxWIxJBIJJBLiiaFFnylKPmG4Rn8R8p3ML1njcNlno5qwfCfzU5Y9EBnfviGBE2uMpJrMPI/VmNsGAx+/CqBGMcyP73sT89YeyPN9JUG8VnODGCCZFU5vA3AIf1i5JD0s2mgMlrablU7nf9maxMhK2NcvAUvSRJgsuXy5R37aU+JDFHU5bvN8/O7nX2R+hG9ryhHwSRKEZbLH6pQECct3M79UzPnnkfTx/YvkZn7aG8uE7yNSHizwxNee5PisqQFms+PXsc+ZpIkKfRRJ4ONPaLoBkud2ckqGCPjD4mYIAEAGNlc9tCVnjKqHttDGVkc+TWIw5pVdhJnf7Ho2YyzKFHvm24g3RdZgeLMRbQvLJ+LNLx6Po6bG+CvBGyFRVHxWfqK/MHwv5pdUFcclDN+L+Snv3+e4+OKL2rftlGAeucoAO4ok1PfPRtc1irUndo1iLiOQiD8sDJD0BCeTGrFj+6IS2xO8qT5uuoeYhX+kzmRuUGuMMNAu2eHKn++d73D8IhO0S0Cw23wdvwOfmF8ymYSiKIjH4/Q1/YwCU4qKz0d3/LG7dYEJwvdqfilotksYvlfzy/TAdvHDX39kl7k6CzCvs29LAIDGRWMa7Gqwr0b0/bvKpu5ud/y+DNBL1TZoEmTRpWnTScmVDl2z3dIJU8gn5kYiPSbJYfnLmLC2FwozxT74TokOpwSJmzwfv0Cs+YleA4b51dTUCI05DJ/IrqrveSSID74f80tCsV2C8v2YX0Gh/RKIL0p86J9K8Jqss34HCcaUovj+aaJDJJcokOf7zgJfcet6xa4tMExfwEA9wZ36BdrIc094dpQHl921ZHmzPeTj3IViqgL75AO6CUbZD9Avn5UX8wMgjAij4BORareqqqa2QFVV6Ta2Oh6G79f8Ug6VgVef9M/3a35R801yNUGAmh/5TWSrv6oKoCQkn0hkfrHs5/HQFzCykSBRd4QOOxLBizz3xJ9TZs5ksdldmCM9k8GxRknWMe2FI3UkSCwWg8qk8vjX7Hon8wszEoIMfyNcYnjks9TU1FBDJI98ddgPP0rzI3r1Se/8KM3PL/8fsuefdmim+3aLTcQGCJhviBBqJIxdAoSAHExQ9P0Pm6FwgbPAgPdIMGAWmDU80XM+yjNlxNgUcrYzdBRZ2ECKIAsb1PzC8NPptJDJm7LoM5lM0CM/defeyM0PAJJzvPG1kp9Gbn5++KnNadqU5s8ErQZIbp3VBuCnYa4/p2ovEbtdZITDNQscaCQA2wnaywXgqyf6/bbZXSLheGCy8ImTWCLQSJBIFaAnPunIzC6qqiKVSiGVMr4AYj5OVc+gIzHszI/l2g1/U1WVRo5++MlNy4X786rEP91veU7MxwtfaXMe05trfnJj3Dqig361LhU97hKoyX51Pw06EiSRTbR4ueFBDEYSJKYZfQOB6EaC5ErDbiQAN57XbkSI6fZXfKdBsi4B/U+gH36O5HkkCjeCg4hdT0yQjfr4drmgfEBv7yP74E3OLgrly5Cqcg32+eL7jf4S/3Q/av7zy8Zn5177PX6/0V/UfFp9JTc+MDXziJrq2G4qxvsPg176vvjGvgR9/7yYoU1VONRIkFzK90iAJPx3hIaPnuheOjmziRIS8fE3RiC3ybrcJz9H8sp36lpDTJAYH2uEdtVSsjbo8bNtfHwCxE+ZXJx/EmWxkRe/PvloakTxfwHgA3AzQU5c2x8xv7eYIoGP3yW761WhRoLkUqQNoHDDarounW6IZN/xuLHPnm0Njm0QJv6Xn/HfBsiOHslGh/G4MbmLL36+j1/ADxIBBuV/+ctXm/YlMjcvz++/P/j5d4sAtZd1k1EWf5k+Z18ri78c6vy7RYC55H8y+/1/AOZ7/Nk2OXEjP4gBvhbh9RdETsc/bAyQzNjOTly8sv12uj3MpCjxp4pM+wXsZ6a34//xzTKkAShM+1Dszr1Qa7hJkUgGuc0oFwU/38d/95v6LcLY4x9K/vkb9fcl24wfearky1BVFYVPfs6xXC7Pv/by/VhfNi/nx59vPrlHIDvZERkyt/6I8f3/Q9saOuxtKI4fCHf9DYsqsGhydACm6e5Qsss6LR6s0+KJyuEp4y8AORF7ahs1dlo+V/68OijcftVNy6181GF7Ww74eT7+9fPq8sqv3QzLfpP1QNWTW1zL5fL8ry+bNzTXX575tSW7kOT2qwi+/58O8fGHvf7yngUmc4KykxWTOUHvqdiqVDYW0yEyJItTvaqTZozI8Bancj3bGkz7bm5uwezZ03CgtlGTfMmX/NHLz7sB8mpubkFHRxcqG4uxc9ZuDQB2ztqtkcHSC58o0wBg4RNlGhnY7KVcR0eXZfZ5yZd8yR/d/GHRBsjODM/OGM+ODSQ9t9k0NmnI9FrOjiP5ki/5o5M/LAwQMGaG52eMHyqO5Eu+5I8+Pk2CkCwMn52JWnYc4sy5lh1H8iVf8kcfXymvqEL73v0amyYm5hR1CGrHkXzJl3zJzwdfKS1dZklBNze3oGdbA5rq9fFz5JHcrWFtW4w+kgHMbuW+Eb+apqCJ9uzZDwCQfMmXfMnPB7+AAPkMSfWqTnJ/LpQfXamQjEt2uAoOXlGnkIyLl3L8AbI8yZd8yZf8fPCV8ooqU3YE0DsLkr44RLUlqrUjYr21I6KoXOGG1XSfRHZZIMmXfMmX/KHi0ywwyY6waeKrMsbs7Qd2/hoA8Mzjxo4/eZU+3GRp+ZWO5Up3ZEz7BeyzQHb8MENhcsXXsvz1eeIP5fHfvHkNipcCs3/NHP+d9wFQsX7efFO5jteAT4yL+PgvL9MHmF7ODsX7MmKI4WMlR03lYgDUOUa5KPh3/3oNoAJKG3Orrs1pqNDnuyBqzZ7/xyP//vWhiNjIHv9eAEBVSZ1juUiOXzAUct+dV6IYy3H3PNrchvVv6rudt+lbER9/bq5/aoDkjqw3lZbRNy787VwApdlXH4I/PQ+gFQBw8DPtdO2DrXWOd4Rl+S2t+mB6xe0eZDYi00XMn29MF+iH39q6T7xfG57dpywtjZbP3ouP6LnnnsOOHTsi5X/9nH0ongcUnwvM/iBQvBQoXgZkJ0zJLmQi1hp07gM6DwAdrwGdh4DON4HOduDBTDB+8S9VuntyVxJA1W/5pgIqVMQQA2LkbjMx8p/x8WJA53wjQvB1/bWooN+qyi0w3/FYeJf27OPnAn//DMz7TL0WlZYGO/4/tdxFn5fgU2jD79CJvSjGcnRiL/biDiyHMYsbWc8+luBTmB/w/LPXfwrGDaD8zoThdP0r5RVVdFam8qMrFXJzQhLJsca3ZsZ5AIBdx1+nz0Xadfz17LPnyaFgafnX6LAVck9+8iFE/LvbjBMRxACNuXI0AArWz9vliy+6LTdvfIrLelbsrFRB+SLj42VnhH7555Ws8WB+rAHamyAAvN7mj//HX5e5mh/5SbiaIICPXVnn7/p7cw0sE/24mCAr9o7KqqqPkfX3/ZfBvGd2LmQNmmUQl+jPsmHP7KyEXvgkkiNGRp6zpkeeP3nXz9Dd0Iurn76BriOPxATXz/N3/oNOiyGatgKwv/5pP8BFl6ZxCGkN934zu8ZqfHavAbMprplxXtYErVHjoWu2a4sEH9zCZ253r0HzZYK8+QXis/vjXvPGx7/m14fli4wvEdP/Dtao5m2XXHIJLrnkElsj9Mon5hdG7Ptfb/PHZ00msATvD3L+6XUkCMKIIVvW2wRs3vnkBLC3ObYzP0B8k1LyByoI32x4xASJ9uIOAMCTd/3Msq+9uCP7p8kcIfrlB1Gce+TF8+mZbKqPW8JSQGx2IolM0lhnGOG5j1YpTfXWj2fHh3vQY5LI/Nh7e/rhazBfUgqMy0wTlCPb7d7vlw8Y5kdmPHMSMUVAN8Lrr7/eUsYrn0R+JPrzo+KlzHvPNRuh5+NXGQ/0a4T8e5n3+zv//LcJc/CbXWKChfOtAPzwVV+RfP/+siJmKFJ3Q2/O+VGJ51vaAPXqr9FmR6I5r0ZIRN6jR4J6eyCpBju1AdDqbwrGH7Ds79otCnQzP7+zktlFePC5nrwOMitaKpUymR+Zd4M1uxo1JYwI+SjQK//mzTqfNb5i2oziXAUGgE6m6bLzgP7Y8Rrw24c9Hv/l2eYPk/HRCq5LFZiWMj2NAfjYk95m5bt74xrOwPg/gzAbq6ipjjk15CbZP/X8/f8S5nNsHL+iLLOJANnPyX8Y/YOQarAbf/2bCjU80u5GqrVgnh/+dtYTngM+8PTrdH3nXYvR3dBL1/HVYC/Xv7XuZj1SL26ZSCRQU1ODRCKBwic/Z+HTM0n6z2y/8Q7ohqW33xntef4kMsztN94B0neHl5nPyUMU6GZ+Qfh2ER+/3i7y49f75ZNjopMNqYrJ+IhE6wBrFOiVX7zUaPMjS5YE/oeZyfwt81o3avZ9ZF+zP+jj+C3hm5356SvUbMhnvgE/04CYffB1/k2Ro0MkyD5nXzMi1WHvfIcQ0pfMoXPg3x8nYoRTJ04AngN6TveZ1gPGujB8DebfHv+al6axPqCL/HZqamqE/ALAOiuT3oWlFbwRkoW8ZiV6zUZ/zzze4X1WLDbVn3Cv/3gxv0CzoiHCKnDAWbFoZMfMuGYxvJjdJRHs+Gf/Os4kPNjF+oMsKGCjkZjlPcQIFx/2cfyXLwdJeJisQHgpMBPCqNYaKnWyOct9zMoWB/tWXR5NkD9N2fVxv7MSsgfFRHSapkBRMoLzwF4DfGSu+pqVkO3CYqfOuxYDb+vPlzzbiiT0P0mddy1G92G9Ssy2/ymbvJ9/9voXRXlukR9vggDcZ4XjZ2Wag14AB3EEE5i96G15oqiQjfjMWeDW7L50hZkVTZQM8WR+jILw7aq61s/nXt7PrGxkT4lY0pLsoCLmF9MgmgnrkksuAQDswMu++GLDE4c4mczfosD2zpKk+u5vVjaR4al0BR/xGltiqvmzkeiLbPd8/CT/YHrOJhpsEiNs3sFce/XHt+1Yw/+ZBbOefC72g5gbQb3ySfV3y9cW4/D0Xiz/rlE2CeDrh3uBZr3qS76NLVnz62nqw38/24olgiSIVz5fw7JbZyfiC4qiP1c2ifnUAC2zgrV3QJs7G3PQiyNohdEf8HmIsrtWUzTMT2nvALJG6nlWKP6vqKADkF/z88WHd+Pj5ZQFDjorll01F6pia34ieeeLqmDiKpkeBcaQyWQcjHCfP77K2hqRXQ8wY0Yqi20QQwwyKx9rZE4mSMrwYte1+eWzcNb8yB9HOykwz2JNDFDxyQe2XLkYKAV6+ozqbBLAV/+1FGg2U7dkI8KeJnPVdy/uwOUwOmoH+f3xR2cnanaKTRQo4NMkCDsz+6dnd2HGwkkAAG3ubCYKLGV29SGHqA8gnaCJAR4/eBpPdUzzNDO8VrI3+70zl3NNDEgaiZAg5ieaGV7EJz3M/RqfnSjIB59GgD4zoKJIkSZDPPL1ER5ANBlII1OgbLrf4/GT+Wz9dnkVST8fMcSgbrzF2/E/yRgICWAtwa8gMQLBdxYD9Welzev3r4GvzM+d+z4fx6yhvf07sESAHr//fXdeqSczrlyM7uJedJ7Vg4v/Q6/vvvSvpSg8Oh49TX1Y8qz+G++8azEAoL22GwDw38+2mjouk0TIvE3f8vX7Cyo2+mPXKZusx0//XpPGwaqHtuDEW704fvA0fbNRhW0FMTZWfJWXRH6s+Z14qxdVD22hjZ28WL5Z2faAbBSoQfNtflr2XzB+dMo137aa7JvP9/jVl0xG1PZkSN8ufi+geubHsv/0nw+7uHUFSljeQ/cV83H8vNlZk7GcuIqZqRFSo8+9n3+z+S1aFMf06Wf7WM7BokU/sjD8Xn/dxb2Y2mk0gR3+9nl6JNsMFE4aj8OXnYeX/rEU3Yd7LeYH6FEhzRT75JMo1znaFUtRrH6gKGJ+AWD0xCaTiqx4mJlftL0DAGuCbBSoy9zfz9jOmt+Kh++nPbGb6uOme3jx/PXMNJNUsWwLt8b9tQUARYPtv5QGpID1JXWe+WRsYY3NYien8mxPdK/8KOWHr4/ttRpYQcGfITJCYnxku2hZP+9znvkfKzmq96/j/hltIbwREuPj3xGjPvKxI0e9H/+Tu2xaANjaqegvriZY9HbC9Vf6+f6NaT5XrPg0pk49x2UpFqwrxYoVrwX6/v93nh50TJ2km9/p/gEc/uF5etb3DaAn3oeeeB+wAChsH4/OP/cA0JMhKegR4eFvn6cnSZ7TGXfP03xd/2TuacW1WudNdsdvOxKErQIDECZDrHreZr2hYD3Bs4NbYgLzq9Hcu8kkAZT451uT9c7yUj5XPeHdoj///BrYRVx6O1+MeU2MD7CGSORPwOd88VXAMpqCtOdZgzBikLCYFin7seyj5+Pno0DroAwf0oBsO5jf73/ChNkAJkJRCrB794/w0Y/eInj3GQATAQC7d6ewciVpOphO1xMFuf5mHp+EqScmoLuhF4WTxgNpoGduH3pK+lB4znhMPjwOS/63lVaF8TYwtXUC2o9246ZnzddQ2OufRIS8Mdqt51MHPJ8aIBmLB6Zxw2p+1ujPrA+BmOARTMCcubMxAx2mEuc+WkXH4rES8c0iqXHG/FTN/YLkfi1++O3wJy/lvfIVRbFtyPUj0v5XVfL3vvid+4DiZXy8a2SG9YRHAZf4MDpDE3Vy93Pwfv5jliRIjM2wIgGLScfE5qirzh+fNUBTVxgvOUhW5i/Rz/F//OOPAJgFYKq+J03BmDFnc/vvBjAl+3wqABVjxpDXZ+PjH/+/+MMfgvCB7tO9mAo96mtHN+Yumqqv65ygX+wTgZ4zfSicOB6Hf3gecFjf1t2j1xZvejbB9A3c5ZvPi60Oa5pGzc5uPWBtReb5wpEgHQ/8CwCgpvcS4Qf5zPwPCzs63/rn/xWWX9f6jKka7N4Tv4xJgrDGBxgXn0tDqcr8GrJngVSDvY7EuMpm14/ZrF9ns/7x7KPvkSgaPCdB7CJAdjSIHAnicSTIm/xAfNb0gv9V8j4SogVADCtXPp3dOgO7d8ey6/g/Ssezy4xsuQQANfve4wCA3bvfhT4S5Hue+P/4ZlpPgnwtG9G1Au1HuzF31lR0PwBinAAAIABJREFUF+vmRoyuZ66e9S2cqCdGCieNxweeNvcIIcmQV+f5HwlFxEd4vAHyZiiqOouuf5uRILr59bc2C5fftvwfy85v/fP/Csv2Nu3HY6WfBBC0J7qd0cW5JSs1Zpgf6Z2ZlV/+EZvFTm7lfY9EUeCpyuXF/PzwO17L3s3lgGFgfCRnJ1KOvJfu65B3Pq1pmqqcXuuejOPFYNqXv/PPtuNFIz/8FSv2obd3Jnp7Z2ZNTVdv79ncMhO9vVOyjyQ6jGH37suy66dgxYoCX/y9uAOHL+MCnPcD7VO7jaRIaXa0xxvAqb5+9MzSza9nbh9tAzz87fPQeddibMkaaVQjUYLK80iQn/5pAvpbmzE+M4DxmQGMO9VFn0+cPBWZ7h5TtEfMj5Rll4mTCtHbtB9/GjfHR0/87EgQU6dWvgNoWl9ULbswxkdCAcYXlI3+e6I/a7PYybF8kJEoUdSBA/A/MS6OzkMwGaEf8cbXeQj4wvne+eqc5Rbz8iX+vTFAbfMxEmST6F4i4czQ30iI+9HdPSO7LAMb23Z3n4Pu7r7s4znZMpOzj+fA+AHE0N29OLutANioeOYns8fffbpXX3p6MXf6VBROHK+3gjUD7e906+2BACa/NU7f0QIAbwB4AZi6fwJ6nulDd0Mviv/rZSQ3+b/+RXdB0jRN+LuwW0/ldyTIuFNdRnfPvjPQ+s5AGT8RGQCDp8aiYGqh9UOcOWl6feb0aUyaOAUTJxUCPe/SgxV9Ptue+GoMiPFRIIn60kZfQZX5y8+KawUNMxIlCvkbCQLo3Sic+wPyI0Wee05PvYluh+WVT+7jF+aWWOz9AHG+P75ztxOPYiPINp/8HMkr/7XXjqG4+FwcOQKww1KamoA5c6YBOBtAE4Bp0BMdb+PIkQVgmyWamhZgzpy3ceTIgG8+ABrtdUM3wqmTJqD7NHPnlwVAYfN4PRLcDXSe6cHkieNoGyDpJ8i2w/nhJ5PGO/U2cc302ss2Xp5HghDDO/1uFyZOMjJJ2pmTGD9xCga7e/DVg3XInOxAwZTZGJ95HRpgKj9x0iRoZ05CmTiFvt9zT3DScEBMEGA6RpPbHcaN1zHBL6XGGjoEHYkRlbzyyZfKfpnCNkHmtZPx+eV32mR09MQIm9kz2v/s7ggdhG9qxlOzl4CqJ0ZiMT0jrHq5GSrZz2988nMkr/xMRs2an1VHjhyCbnyHsmteyj6Ozz6qTNmXEGQkyNRCI5kxtXACupt70b0ga34LADQBPe/vA7LdhYnZsUoCwKvBjl8kJ2Pz2l3GdSRI4YbVtPAfPnsM2kA/fd3bP4iJkyaioGgWAKCvYCwyp7tRMGkqxp3S77WfOdVtfKixemj88d/MpOt6tjU49gRn+XvTzxjVWJqV4weIutSP4sDy+CcD8dPpBuEu7b4hu68gHjf2GQnfpseLYjNwIij/xrENkdwSf+esYHztvmfo7lWA/o9NhHgxQGV5sO9/795nxCfUp5YH5KfTbDscf77Z9DQ/bI79jaiIx88KxL/yfUdMJth+tBt4v5HwICI3Q6BiTa8NiP9rtNe/Xzld/9QA2/fu1wCAnTh4Zfvt9I2bk1+HNtCPqZnJdN3xwrFAQQE2/9cmuu5bX/wnTBg3xlQu/lSRab8A6OTHRG58khlWfmPcKUb7rD4pzPor68zlAKMdMSJ+mEmRcsX3OilMFPzPXLcGsz+o39WFHv+dXwbp5MyWI21+UfL/eHmZ/rNmJjuKbb6PdnJmy5E2vyj5okmBtDuz19+8Osdy0Xz/2XsEsneK2az/Ka4q+R5XTgU2GruPgj/+/K8CAP79w8bsbak79evv1XnM9ff0Gr254Y8j4/ofC+gzMvGTEwMwTTe3MfXvlunmZgimpfve//ynpRyeMhyYfJA9tY0aOy2eG3/95jrLfpXfLLfwReWi4KNkl5UP6/GLyuWK3zSE/N8+LDj+TbDwReUiOf4n66By+1Vxi/X4n6zD9jk5uP7mCa6/TYLrT1Aumu8fHr9/YPuN+yLn1+K/LfzkJgH/spF1/ReQOTnZyYLJnJz3VGxVKhuL6RAVkkWpXtVJMzZkeIlTuZ5tDaZ9Nze3YPbsaThQ26hJvuRLvuTni2+5eVFzcws6OrpQ2ViMnbN2awCwc9ZujfSfWfhEmQYAC58o00jfHS/lOjq6LLO/iyT5ki/5kj9UfKW8oso0Mzs7Yzs7YJn0nGbTyKQh0Ws5O47kS77kS34++DQJQmZm52dsj1p2HMmXfMmX/KHm036AxBlzLTuO5Et+Pvm5/uG5cfJ9/KOVr5RXVKF9736NTROTFHHUIagdR/IlP5/8fCvfxz+a+Upp6TJLCrq5uQU92xrQVK+PnyOP5G4Na9ti9JHcxtqt3DfiV9MUNNGePfsBAJIv+fniD1XkZydRF5DRdP7zzS8gQD5DUr2qk9yfC+VHVyok45IdroKDV9QpJOPipRx/gCxP8iU/n/x8K9/HP5r5liwwoHcWJH1xiGpLVGtHREFHaFG5wg2r6T6J7LJAki/5Q83Pt/J9/KOZb8kCs2niqzJb6RvCDEUp3ZEx7RewzwINV/75bfoQpyQzafsPNu/EAHrRUdJE101om4ZB9OMHG6si5T9+/WYAQGuBcTeO970LIAN84dfGRDY/u/R2aBkNR+YbUxi8F85/mKFoXvj51nA//+9VvuWO0DeVltE3trZ6vAumi0pL6e2E8WBrneMdYYcT/1ut5hsvDKIPg+hHP3oxiH4MoBcD6MMA83oQ/WjC02jCMziEP4Xi4x8nmfjaYAYYyEAbyEDLaEBGX6f1Z/TbAQ1q0DIazrzRhTNvdKG3rTsUP9/nv6UlzL2wDM2fb0QIdvx8azie/9HAt8wK92BrHa7KbI0MDugHclVmKx5srXOdFWq48L2a3yD6OfOrN5lfUL5n8xvUHM1vpJ5/P+b3oQ+JJ+ki61taVEd+vjUcz/9o4dvOCudHiewf2BoP12zoWdFiMaTSYlAyHgNU5w8RhO9kfvpz1vzqTeYXBd/R/AYzjuYXBT9KRcFfsWIFAGDPnj2O5vf889ZZCu34+dZIOv/vJT4dC9xUHw9dLUjE3Muc+2iV0lRvveW4F34iDaTSKpKKbnamRdG3JVzmSvLLNyK8PmHkl8FA9vkABtBn2W9YPjU/8veSMT9k9EXLZI3Qg8Kc/ygUhM+b3J49e7Bnzx5hGfIoMj8nfr41nM+/SAsqJ9MlH/yaS16mSxi+cFY40axMTkrEgO7sb3/qePtI0O+saCZGGqhJZiO8WAyJlErnjVVV67YawTXulU8SHrqx9WXb+fos5jeIPvTjTNb8evF/0YiD+KNtBOiVTxIeJvMbzEAb0I1O0zSAPCdRYEbD6dffQd/bJ20jwKDnXxP8UVECeIhXPklkEIlMbcWKFRYTdJPTrGz5luP5Dzg3DH+X5DC/P1YLKidj1urx9PXRhj40V59y/TxR8WsueRnnrzOyxq8+1oXEc4sD8WkVmPSfaaqPA5td9yXUz14C/n4J8LH5wB8F3ay233gHdmU7Kt5TsdW0zZEfi0FVVUBVEUsBsZhqGF52eyKlQlUBNak/ImatDnvlpzaX+TY/PTo8gwH0wk5e+aWZCb7NL9M36PTVBD7/IvMj6/2aoFf+3Sgzmd7zzz+PD33oQ6ZqbUGB5UZGJolM04mfb9mef01DTQ0/FaY38VMqBP79MSLm13csg/EzC9B3LEPN0M0Eo+Dz5gcA56+bhhq87GqCIr5wVjhTqtmnfvaSzYYAs6IRxRIq1JoYkADUmpge3bHmpuoRH1smluDCUB/85MblWfNjq75u5udS/fXBby3o9WV+2qARIWgDNlXhILPSOTQn+I4AffCVTcstVVjymq8OE2Nkq8CidkGnWdnyLS+/v5qaGpMR8qbotA1AqN8fERv5Hbj5hOlx1urxztXhCPis+X1s/ftMj+evm+ZcHfY7K1wYiaI/oiCzcqkq+Z8R1SUSCcSydWBVVfUvnSljlwvxyh/IGp2e/DhjMr8B2ubXy5hjH87B36APpzCIAbThxVB8P+ZHEiHjZhcikzXAvvaecHwv5pcyT49Ef3Y2c5P44QPm6I01NRIJisyQf59Xfr7l9vtLJBLUBBOJhLCM0zaisLPiDfZoGFOoIP4r3YjI42CPt9Malt9z5AwK50zEU1/XJ4Qijz1HzgTi03pEbYlqmagkF7qnYqtSW2J1J0e+yjT2QZ8vNBaLmRY6hyhxPpvJkrzySfV3EH3IYNBkfmzml5R5Hc+iGXtwGC9Ec/w+za/3rW70/rUb/W+fhOaQDwl0/hkpKnTj48zPJJtJm4Lw+aowv14kO2N04udbbuefRHXECMkj2UaMz626HOb7b64+hXde6Mdgj4aTrwyg71gGJ18ZwGCPhnde6PfUDhiGn3huMd7cfQY9R86g57je5NNzfBA9R87gzd1nPLUD8nzLrHB6Hdwllcp/sGwSxLb6S7TRGKxsNyuUG580CPNfOnnuOD2eR/5/bK6lxkYMz/yczQbr5vcGXnCM/PzwS7oV/+b3pl4VsYv8/PCxOS1OfHjwjQSYSBAwR4Me+WSEBys7w8tkDLcn7YIkOmSjxOeff55Wg0X8fMvu+g/TBphIJMy/hwh+fwCEVV0v5heW/+8rf4MP/10cHU09mL1In5ecmOHsRYX4P79K4+u7P+uLTyNAMrC46qEt9jsIqaqHttDGTl5e+Jqm6ckQgD6yz1VVdcyYeeUHMb8WpJ3NzwffYn6a5mp+fe09zubng28nzUM3JzJrMI0OmWgwKN8uCmTNj7zmq8ZseSd+vuV2/kVtgKKFbBMp7Pe/oHIy3l85GdMvHoeiC8fSZfrF4/B+D11iwvKnD56HVx/rQuGMMeho6kFHUw96jg+icMYYvPpYF6YPnmf7Xju+ZSTI2raYaWydnV7eeT9+vn4Nfr5eT1m/dcK5PElBu/UEt+MT86upqUEymTS1dSQSCSSTSdTU1NiaoB/+kZKXPZmf0Q9wwPV8+eF/4ddbTOYHG/PL9Gdom1+UfKfvn5igyeQ4WX5+KX98dmwvYE6AEHPjzQ/QI0BRO+Dzzz9Pu8AM95EgbuefNbdEImFanBT2+ycJkJmrx2NMoYIxE5mlUMHM1eMdEyFh+SQBcv66aSicMxGFM8YYy5yJdJtdIsSOH2gkyMs778fLDY+jvtHdKHkF7Qmuqipt7yNGyLd7sNvD8r2Y3yH8CYfxgmvkF+j4WfMbEJsfafNzi/yC8JW4QxeYmF4dJj85S7WXXZ+EKQr0+/2zXV8ymQz27NlDR4IAuumxBslni/mEyEgdCcIbnMjwyDonMwzy+2Ozv1MAvNuj4axCowZLXp8EXLvEBOGLur4Uzpko3L9blxieTw2wqT5O7qvl+JcxjPkBek/snbN2a+ztarzw4/E40um0NfObFWt+8bh9Hw2vfDfzG0AvMnDvexeUz5ofP+wt029EP04JjzB8wJsJkloxb4KkKowU9HbAEv98wGxgpI2PPJIoUJQhdhoJIuLnW3bHryiKsEbDJkXsJGoP93v+TZ2ej2WAmQU4q1DBu0zWl5phdruTCfrls+ZHMsB2ItudTJDn+x4J8vP1a4Tm9+pR5+4vQDQ9wUkGWCRVVZFM2vfB8Mqf1DbTZH5Gtte4+8sbeAHNHtr9gvB/VvZ1V/MLEv1FPhKEiezIz9ASCTIRYNXmcCNBAHN12C4i5MsSjdSRILxIYsRT4o9RkO///ZWTMXP1eLzT0Ieii8dR8xNFgO/2aDjxQj+mrx6PYw19eIMzwCB8YoCvPtaFGYvH0eSHSB1NPTj+cj8tzxugiE+vFtI4uP3GO7ycy0DafuMdtLGTl1e+qqrCKq7d+iB8N/Pz1PE5BN/O/LSM/seRjhLxGf0FPf9K3LoA0M0t+/emBmbzo22EKaNcUD4xMr6qS8yPDIljq8OiCNCJn295vf5JNOjX/AD/539B1vwGj2WgATjxQj9OHstQsyPLWYUKTh7L4MQL/dAADB7LYKagPdAvn5hfR5P+R/74y/30OS9ifuS5qD1QxPc9EuQLdweL/qLoCQ4YoT+pApPEB7stLP/7G78mND+2MzQA+uhJPvjt88YLzY+8pjc+8HgDBL983yOBktakiOmbSPnjszczBcRte+RRZH7sdqKRPhIEMMxPURS6eFaI779r/wAOV58CudqI6ZGFVIczAA5Xn0LXfkFSMAT/+Mv9nvr4AXpfQWKEXvg0AlzbFvN8UZCbHbx61KP5Mbrt3m9q7C2sg/CJ4ZF2P3ZdVHyR+ZHESAv2oQVpvI1XPDGD8J3Mr7+9B31/PYn+Y6dzxvermmwkaDHBpHldED6f0bVr4xONH+Zlx8+3vJx/36YnUJDzz64cBIQR4KBN+Sj4UYrnBx4JUqPqxufH/IDwIxHCyitfbH66KWYg+AuT1XTMi4TvGPll7K+TMUXjbbf54YcS2wybMswxDN9uDDCRU+KD1UgdCRKVgpz/ogvHmqqzdhEgoFebiy4cK9pNYP6MxeM83/aq5pKXMWPxOM98y0iQwg2r6cZ0usET1E3xuLHPnm0Njj3BvfDZccBEfFY4Cv6S9A2c+fXiTfwZb2K/MPqbjnnIIIN38VYk/DfOedNifv1/1RMfouhvTNF4QAMGu81V86jPv5MSKW5McAqI3x+Mv3fvM775Ii1f/klXfr41HH9/Rz/8PGatHo/BHg2DZzR07x/AtAvH4qyZBZYs8LvHMujaP4CpF47F+JkFpuFxQfmJ8dU4f900Otrj+Mv9tokQ0gY4Y/E4FM4YQ8snnlvsyKcG2L53vwYA7MTBK9tvp28MMylJ/Kki034BWCalDsJPHNHv9V/45Odyzm9tOwAAeHzjzx2P/8G2L+kGGDH/oUW3QDsziHc/PseR/1/vfkY3wCE4/7bffwpAW7T8MJMieeHnW8P99/erv/scFABvTLuArvv4stcBAH9b+aip3PSLx+HPry2MlL+oVK9ZJT55PV33x+m/0Zl3v2QqN2/lRHx6/NWe+GMB8eTMAEzTzaFkl3VaOlinpROVw1OGA5MPsqe2UWOnxQvCr6nHkPFrS+Dx+H+cm+PHfR75v8X224bm/Nt+/23R89fPq7PwlU3LLXxROTd+vjUifn+/+qVlv38QTEuJX/0S26fl4PcH63SXH6v/rHVaTKhIjPfOLyBzcrKTBZM5Oe+p2KpUNhbTISoki1K9qpNmbMjwEqdyPdsaTPtubm7B7NnTcKC2UZN8yc8n3/KrG2Ll+/hHO99yW93m5hZ0dHShsrEYO2ft1gBg56zdGuk/s/CJMg0AFj5RppG+O17KdXR0WWZ/F0nyJT+f/Hwr38c/2vhKeUWVaWZ2dsZ2dsAy6TnNpqpJQ6LXcnYcyZf8fPLzrXwf/2jm0yQIqQ7k+qKw40i+5OeTn2/l+/hHK5922CHOmGvZcSRf8vPJJ1nIXGeH7Tj5Pv7RylfKK6rQvne/xqaJyZcTdQhqx5F8yZd8yc8HXyktXWZJQTc3t6BnWwOa6vXxc+SR3K1hbVuMPpLbWLuV+0b8apqCJtqzZz8AQPIlX/IlPx/8AgLkMyTVqzrJ/blQfnSlQjIuB6+oUwDg4BV1Csm4eCnHHyDLk3zJl3zJzwffkgUG9M6CpC8OUW2JtSNik6AjpKhc4YbVdJ9EdlkgyZd8yZf8oeJbssBsmviqjDF7e5ihOKU7Mqb9AvZZIMmXfMmX/KHiW+4IfVOpcTfe1tZ9iEKlpcvo8wdb6xzvCCv5ki/5kj9k/PKKKixqhIaNca28ogr16NSqSnZp0G/rFdlSVbJLq0enVl5RBWyMa4saoZVXVEm+5Eu+5HviH/vO0sj5nmeFW7VQb0hsPGh/O3EvZYLOCheVJF/yJX9k8md+5wB9fnKzkTmeslHPJh/7zlJTGS98Oha4qT5uO1HMqoXFaDzYicaDndTkgpQB9H46TfXWW3478XlNriyzLF4VBR8Aupe/SBc/ioofVGH4l53/Ucd9u20Py2f1wgsv0MWPRvL5zyd/1aI5dpt8lYvi+In5FW7cj8KN++lr1vyOfWepJ77rrHDE2Fjx67yUAaKZFQ6JDwAbqjHtlXq6quuCS4FtlUDNYfv3RcWHbn5Tbiilr0/+pBVT917k+J4o+UEVlr/9Cx/BkwcUPP3qsyazI68vX6qh6ud/yhmf6IUXXkBJSQl93dbWhosvvtjxPVHyAWDdunX0+WOPPeZaPmp+EIXhs8bWfGoibr/9dixdqpvMgQMH8PP/vpNub2w6Eimfj+xObr4QhdmoDwB6Nl9Io0C/x+86K5xddbbxn8vw/b+7CNd/aL54u+B9oWeFS3wAv6s4BLzbja4LLqUL3u3W1yc+YP/eKPiwmh8ATLmh1FMkGAU/jMLynzyg4PKlGi47/6NYfM4ZuhDze/KA8x/wKI6fNz8AKCkp8RQJRnX+161bh0ceeYQurBkOBT+owvCJqTWf0ufl/f73vw8AWLJkCZYuXUrX25lfGD4xPzaq68lGfT1MVdgu6nPi+54VDgDu/OwybPqNnqFpPnYKC2ZOdiwPIPCsUGw194/3vIQf/P1K/G7c1Zj2Sj1dfjfuavzg71fij/e8ZF8tjmBWNNb8lK/MMD26mmAuZ2Xzogj4i885Q01w/qwJdCHmt/icMznli8yPyNUEIzr/xPxYeTLB98D3f6DdPNXCddddh5deesl2e9T8CWMUU9sfa37sej98mgRZ2xYD7o1plddsd9xP1y8+iGmfr0PXLz6Iz37zLfxm6wxM+/xr2fWvOX8ImMfosbLjn6quw5TvfR6Z9hO44pf/jHerdmNv83oMvNJGy3wB69FVtRt7fnkrAKBgbhFOfusXkfB59bafxIS5U3BmYysA0Mfe9pOO74uKT3TiPuOW70W37PX0nrD8l/86MWtyE/DwJ/+E6575CH1cfM4ZvPzXiTnlA8Dp06cxadIk4Xoviur8f+QjH8Gf/vQn+uhVUfGDKhf86667bsj4hTZV3Z7NF2LCGPcmRJ7va1Y4ktzo+sUHTevJa6fkB5HfWaEmV5Yh034CBXOL0P/CYZxVeCsyx7pRMOcsumSOdeOswlvR/8JhFMwtQqb9hG1iJMysaFP3XoT+XcfR234Sgx19OPmTVgx29KG3/ST6dx331A4YxaxsJ+5bjqnLbqALa4ZDwe85vxzXPfMRAMB1z3wEPeeXDwn/4osvxrFjxyxmd/r0aRw7dsxTO2BUs+J95StfMT16VRT8mGAZSn5zczN9ft1115le54LvVrUFzMboVN51Vrim+jjtYc2r8Z/LsOk3+7D2b96H2r+8RavC5PWCmZOx4/kW4XsB0DC0epX9rFAiPokAAWD86gtM0R/R2AtK0Negz9RmGwEG5PPqXv4ixq2ZQV97Nb8o+MT8LJ9p30/cI8EI+Jed/1G8f3oPSi/7Aj7/2uv4xQfPQ+vTP8cb7xTi6VefzTkf0KvCM2fOxKRJk3yZX1T8devWYdu2bfje976Hb33rW9iwYYO3REhIvpZOIB6vwRfXAF/bYsy2/F931OB/dgHpdAJKXDwzYhT86dOno6ioCADw2C0Gf919OvPEiRN45513csbnkx+8XJMhAj6NAEnjYNVDW2zfv+o/6kzm98KhI1gwc7I384M+gRFp7OTlxM+0n8Cp6jqcqq7DwCttGHtBiWUZeKWNliFmGRWfiHR7GbdmBgY7+ugybs0MT11iwvJZ84v/+SumRy+RYFg+oGd833inEEeffRz3du7H0Wcf92Z+EfBJt5eioiJaDZ40aRKKioo8dYmJ4vgBPeu7YcMGXHLJJd7NLwI+a35KXI/7lHgMX9uSwBfX6NtzyX/nnXdw4sQJk/kBuhm6ml8E/CBio0ERvwDQU9BN9XE6qQg7to5o1cJirFpYjNt/pf/IXzh0BLV/Mea/3fF8Cy0jEklB31OxVWmqj5vu4eXGP1WtT3s4ubIMBXOM9h82EiyYM4lWe0n5qPiAkQCZckMpJsydgjGzx9NlwtwpdJudCYblE53pbgcAPHveRtMjWW+nKPiXnf9RmvE9dXqQLiQz7NQPMCyfJEBKSkpoFEJUVFREt9mZYBTHv27dOroAwCc+8Qnh+lzxqVQVWlqvxmlpFVDdJ3qP6vh/+9vfAgAe2fN70+Nvf/vbyI/fS9XXTSSDbMf3NBJk1cJiGvEBwLe//S/47nd/AEDPApPXbBm77jNBe4JPrizDqa9+DdNe+TW0njNQCgcw9oJpAE5C6xmLgpkTcOqrX8NkiA0wDF/U9WXC3CnC/U+5oRTdeNG2ShymJ3zRLXtx4j4AC9dAO9mB052NwKRFOAOg/+AuT8mQoHzS9WX+rAlYuXI+Lp9qHH9390kALWg52gvgo47RYBC+U/aXFzFBuypx2JEQ27ZtAwBs2LABZ599tmWdm8LwVQDYBUzsVJFggrCaGhX/o2a354g/ffp0fOITn8CSJUuAJUtwbXb9tSs+gYUVX8FLL72EZ555BtOnT3eMBP3w3UZ1BBHPpwbYVB8n99USZmlIxPftb/8L2l77M750zaX48aP1ptebHq3H2r95n+MHOPfRKmXnrN0ae7saN75hfvUYeKULYy+YBq2HfnQohQMYeKUL01CPLhcT9MtnzY9kgO1EtjuZYJDjZ0VMcNzCNcCU2QC8m19QPm9+U6dOQfG5TFeFQ2msXDkf2N0C4AycTNAvn5gfSXzwGeD+gQGMG6tfC6SMkwkGPf+k3W/Dhg0oLy9Hebme+CkvL8fvf/977Ny5kxqhU5U47PcPADUq+R/z2qOC8Enb3/e//33a+XlJhZH8eemll3DdddeZInM7Ewxz/FOYUR92293E8z2NBGEjPmJ4AEwGeOD1v2Jv+hVa5rvf/UEkI0EmV34K41cvBgD0NbyEgrnTMfaCaei64EpaZtorv8bAK13ItL+D8auXZMu+jFPVvwvNJwZ48ietKFg2BZOXzsDJn7RaRoJMuaEUpw4cR2b215XPAAAgAElEQVTfSVqeN8CwIwFIG9+4bARIpEyZjf6DerXByQiD8Fnzaznai4ovLjObX1adh9K493/20XIv/3WixQSD8IkBtrW1oaioyFL9NZ2fEydw4sQJWp43wKDnnzW/Rx55BNdeq8c/oueknMgEw37/MQAJh5RvjUsUGITPJj5YPfzww1iyZAk1P37bZz7zGYsJRjUS5iSX7OBf2ynQSJA7P7sM3/3uD/Clay51BQDAl665lFaHeQXrCa4gc6wLfQ1/wfjVS2j0d9benXTResZi7AXTMH71EvQ1/AWZY10ArBl1v3xifqcOHAcAZPadxKkDx00ZYAAYt2YGNT8AOHXguLA9MExPfLbry8Spc6FMmU2XiVPneuoSE5Q/f9YEPHlAwanTg+juPonOQ+a/3p2H0ujuPolTpwfx5AEF82dNiIRPzO/EiRO4+OKLqcEJz092Gyknag8Mc/43bNiAlpYWXHvttZYIsLy8HNdeey1aWlocq8Fh+DEAX1yjm9wZrpn9TLG+/otrnLvEDMVIlIcffjivfCf5HgnS+M9leOHQEaz9m/fhx4/qY29JJHjg9b8CAI0GSfT340fraVugaZhcgJ7gpOo7sP+vGHuh3gZEqr5K4QBd2PVjLyzBwP6/6u2BbF/AED3RM/tOmqI5vhrMvp669yJqhCaF4Iu6vkycOpcurGxNMACfJDya3jwFAHjjnULUPNJk3TeAmkea8MY7hQCApjdP0cRIJMdvY3p2EpYPyCfRHwDMnz8f27Ztw86dO7Fz504AoM+3bduG+fP1633btm3WhEDEI0HOFBuLJwXgs9HfiRMn8PDDD9NlyZIljriioiJMnz49Z8fvWzZ8GgGubYtZekmT4W61f3mL3ulFJGKGpAw7TI7Xbfd+U2NvYe3EB2C66UHmWBeUwol4d3k5ui64ki7vLi+HUjgxG/lZ3xeGH7X88lnz4zO9dq+dIsEgx++1mwtgdJOx00g6/2zVl1RpRW2A5eXlNPIjXWSEJuiTT0SiP14TBT9HtyjQL//hhx/G7bffjnfeeQef+cxn6HoyBG7JkiU06jtx4gRWrlxpKheWH7V4vuNIkC9dcyk1P8BoDyTRIADa9vftb/+L6X6AtX95S1htDtMTvWDmNHRdcCmKdj9mWbouuBQFM93nFg3CL1g2xfNtr7qXv4iCZfaJkqDH373vJ9BOdqB7308AAKffPmB65LdHzY9KQfikn58XkX6CUfJZsRHg22+/bYoAvSgMnze8M8XmdSJDDMPfsmULvdkB0XXXXYfrrrsOfX9ogFr9n1Cr/9NkguR9UfDtxLf3eWn/s+NbRoIUblhNNxa++xLW/s37aN8/YoBtr/0ZP85mfNnM8I8fradmSUaNNB7sRDxu7LNnW4NjT3CW/8qHx2HshedgYH8bgAKMX60nHtgMMD2QbFW4r6EVQMaoClfXBeb/XrkbU24opUPfMvtO0kQIoLf1sc/J9jGzx9PyU/deFJjfcHM3pi67AaffPoCBt/eZkh+k7e9Md7tpXf/BXRh79jJMOnspHR0SlD/9ZB+tApOo7v3Te7AhudyUCOk8lMa21F5TmUXzJtNbZwXl//CHd6GoqAjjxo1Df38/Tpw4YZsIIW2AfPmLL744MD+dbsC6detMCY1169ahpaWFVodJ2+D8+fMt5cjrMHzASH6QJEdKEOKVPd6MqxYsMJUjCsrfvv27NNGxcuVKWiV+8OabMGPa2Rg42YmxU4pxvOttxCr/iZb74Q9/iKVLl9JESNjjDysnPjVAMmM9O3HwyvbbjZPRtka/x981Rrve9U93ovnYKSw7/b+O5eJPFZn2C4BOfkzkxn/w336D/hcO49S0Y3TdtGV/CwC4sfIqUzkAePc1IxsaBf/Os/W2tqlrbqbrtLl6lnn9XXtM5catmYGJ+Fyk/O/esRHjFq7BpD88ZfCvuFHnf+5cUzkAKHrLqE1Ewe+Z9696Vfjzxh1fjn9K74y2+e9LTeUWzZuMqg/2Rsq/5nG9PeninUb3i7du0b/r/7j4JVO5mTNn4rwd10TKf/NDD+iGxrRPtdz8ODZs2IB5z99sKldeXo4bDv13pPy7N34LAKC0GW9r/pJusP/50VdN5f7rVyr+abnxOaM6/meeeQbvfNW41v48O4GLpvx/WL/xjKlc58u70bhuXqT8MJMiOfHHAvqMTPzkxABM082hZBe2X2Oebm4HrNPSicrhKcOByQfZU9uosdPiufK/AcG0eLDyBeWi4G+Cdbo9pf5TFv4mqNiOmyPnf3vLZiv/Cevxi8pFwa/FXXia2++M31n5tbgLVZdGz3/0Kuv5f999n7Xw9XJfif74nwewsdm03/kPXIWq57dYyt2wKPrjX7/5e5bjX/DjdZbjF5WL6vjf+ar5+P+2Hqj6d+vxP3Zjc/S//5Jd1t+/nf/4OP4CMicnO1kwmZPznoqtSmVjMR2iQrIo1as6acaGDC9xKtezrcG07+bmFsyePQ0Hahs1yZd8yZf8fPFpEoSoubkFHR1dqGwsxs5ZuzUA2Dlrt0b6zyx8okwDgIVPlGmk746Xch0dXZbZ30WSfMmXfMkfKr5SXlFlmpmdnbGdHbBMek6zqWrSkOi1nB1H8iVf8iU/H3yaBCEzs/MztkctO47kS77kS/5Q82l/EuKMuZYdR/IlX/Ilf6j5SnlFFdr37tfYNDFJEUcdgtpxJF/yJV/y88FXSkuXWVLQzc0t6NnWgKZ6ffwceSR3a1jbFqOP5DbWbuW+Eb+apqCJ9uzRe3BLvuRLvuTng19AgHyGpHpVJ7k/F8qPrlRIxuXgFXUKABy8ok4hGRcv5fgDZHmSL/mSL/n54FuywIDeWZD0xSGqLbF2RG2qt3ZEFJUr3LCa7pPILgsk+ZIv+ZI/VHxLFphNE1+V2UrfEGYoSumOjGm/gH0WSPIlX/Ilf6j4ljtC31Rq3EOvtXUfolBpqXFz1Adb6xzvCCv5ki/5kj9k/PKKKixqhIaNca28ogr16NSqSnZp0O/Nb1piKU243stSVbJLq0enVl5RBWyMa4saoZVXVPniH/vO0rzyO9Rg7Kj40PLMZ5bBwUHTMtT8fB9/vvlLHygyLaPt+KPie5oVjkhNGqYdS2mW9bGUZiojUphZsdhZosjkKKtmvzhk/NnMmOsO1bq+QzWXiZpvusu/JlivQTQTQHR8Tg888AAA4Oabb3YpmRt+EL0X+EsfKMKBm0+4rssVP4zC8jVNs92mKC4Xv4BPxwI31cctYamdiPmpSX0xXosNktW5j1YpTfXWW1774RPzm7Lxxbzwifm9/At9Ia/tDDJqPjG/i26ai4tummuYoZ1BRs3PKplMIplM+nlLpPwgCsqPaRpd8sEXiYQ3+eCnUinh81zxNU2DpmnU5BRFMS1sGT9811nhAGtkpb9mt8M18gKCzwp17DtLLdFfYfYusAq0nPP5yK5D1Y2PaPHn3SO/MHxLZKfp5kf04oPtrpFfKL5Ag4ODGDNmjOV5TvhBPEdwPoLyRaanMtGGnSmqXEQS1fkn0R77d89LBBgVP5VK0T98xPySyaRpfdR81vzcZFc20KxwgLmKSxRLmR/57SIFnRWKmB87U3zP5gup+eWaz1ZxiRZ/3vzIb4+Sb6riZvXig+2mR357pPysBgcH6fLAAw8glUohlUrhgQceMG3LCT/pY4mQT8xNVRS6sOudxJcZjrOi+eGT75t9TWoB5DlfJkq+H4kiQd+zwokkMkF+vVARzAo1YYximhj55GZjprah4ANiE+TX55IvMkF+fS74JMojC7nwycJuE5pgLmYF817zCsRnzY8Vb4KsObImmavjF0V6ru1/EZ9/PgpkTZA8j4rPR3TE3Oyqu8JI0YZPkyBr22LAvTGt8prtjgeu2vyFjXm8GO1mfvLKL2QmQFEgNuNc8tmqLyvWDHPJZ6u+rExmGDHfaxWXiJig6D1hj58qBT3aI48eFRk/oPzylz5gnv/Ezejcygc5fr6a+9xzzwEArr/+ero+nU6juroa6XQaqqraVoWjOP+KorhWie3K8HzHWeGIXKMrgGsTtC8fZFYoturLSmMaenLJd43uYDZGp/KBZsXy0AZmMkaH8iNxVjihktzjUPMDyg+ftOuxi5v48rwhhjn+66+/nppfZWWlaX11dTUAIB6P47nnnkM6nUY6nbbsI4rzT4yNjwDdIkMR3zIrXFN9nPaw5sUnP6zbXZIRG43BynazQjnx2eQHPQAuCswln09+8HJNhoTk88kPXq7JkIB8vxGg7XuCHr8GsdHZRX8piM+DT75dFVi0zS1REoTPJzv8ypIcCXD+2YivsrKSGh15zq7jVVlZiXicqc4G/P6DJkAs7xPwaQRIGgerHrKf0zOI2Gis6qEttLGT13uVz0aD+eCzv56wfPIX3esjr8iOnzR3JLnXLsrV+fdkfjnke1UQ/nPPPYfKykpqdDt27EBlZSVUVcWOHTvouksuuQQA6KPIGMMev1s3F1FkyD4X8QsAPQXdVB+nk4qQsXVeqr5uIhEZSUHfU7FVaaqPm+7hZce3q/oOFd9L1ddNJCIMwg/8p5+VEoLPKR6PI51O07/qbq9ZheIrsJpcintk1zt0gQlz/G5ySoKE4Ss2i9ftQflsIoOYGWn3I9VcvhwxTGKMURw/Pc5snz87I2T7CPLr7PiOI0G89K3zKz89wdm+fyIpARzCD99L375c8r307cspnxMxNy+PueBTJW2ee5AfvqootPOzqN+fMNsbIV/Uhhc2CRLk/Kuqaqnyso/kOydVZbsqcVA+L7aKy69zE8+nBthUHyf31bJ1FTWpOEaFXgzz3EerlJ2zdmvs7Wq88qds3G/qBhObPbT82THnqNCLYYbhQwFe1ByyvR6ugTB8NtJze7TrDxiYT7Y4GZ5d218IPmuC/HpeXqrCfvleEh9+yvvl79ixAzt27EAqlTJFdMTkqqurTUkQtkwUfCJROyCb6SVm6GaEPN/TSBBe4pEhuRuJwevk5gsxhUmGDDVfNDIkpyNBeAlGhuRyJEhUSZBIjt8pIeJyDsLwWXPzan582ZE6EoTv58dWeb2MAAnLB+wTIawB8tv5dYFHgkSlkd4TXvKHAZ+0B7JtgB7MLyzfsZMzxJ2h+bIj9fyLzI0dB+51PHjY47dLgHgxPzu+75EggZWLkQCSPzr5pJU/BXGLf675QfQe4Ps1vCj5dgkQ9mYIREKjjGokSFiNtJ74kj+M+QGSRO+l4w+SIxvpx++UBebLeeFTA6wtUclEIq6pVb69zU+2+J6KrcrCJ8o09j7+fvlTuM7QQ83n2/v8ZIuj4FuufB+/hKB8p5sc+FEkxz/K+UGyw1HywygKvteMrxe+ZSRI4YbVtHA63RAYxCoeN/bZs63BsSe45Eu+5Ev+UPGpAbbv3a8BADtx8Mr22+kbw0xKEn+qyLRfAHTyYyLJl3zJl/yh5o8F9BmZ+MmJAZimm0PJLuu0dLBOSycqh6cMByYfZE9to8ZOiyf5ki/5kj/U/AIyJyc7WTCZk/Oeiq1KZWMxHaJCsijVqzppxoYML3Eq17OtwbTv5uYWzJ49DQdqGzXJl3zJl/x88Wk/QKLm5hZ0dHShsrEYO2ft1gBg56zdGuk/s/CJMg0AFj5RppG+O17KdXR0WWZ/F0nyJV/yJX+o+Ep5RZVpZnZ2xnZ2wDLpOc2mkUlDotdydhzJl3zJl/x88GkShMzMzs/YHrXsOJIv+ZIv+UPNp/0AiTPmWnYcyZd8yZf8oeYr5RVVaN+7X2PTxCRFHHUIaseRfMmXfMnPB18pLV1mSUE3N7egZ1sDmur18XPkkdytYW1bjD6S21i7lftG/Gqagibas0cf0SH5ki/5kp8PfgEB8hmS6lWd5P5cKD+6UiEZl+xwFRy8ok4hGRcv5fgDZHmSL/mSL/n54FuywIDeWZD0xSGqLVGtHRHrrR0RReUKN6ym+ySyywJJvuRLvuQPFd+SBWbTxFdlttI3hBmKUrojY9ovYJ8FknzJl3zJHyq+5Y7QN5WW0Te2tu5DFCotXUafP9ha53hHWMmX/CjZ/GcYKccv+UPEL6+owqJGaNgY18orqlCPTq2qZJcG/bY0kS1VJbu0enRq5RVVwMa4tqgRWnlF1cjhO/0bDccv+XTRYjHH5b1+/MOBH0trpsegfMdZ4XKhSGYFG2q+Bud77rltD8uPUCOZn3K5CSYAJF3uFReGr8XM97BTVFW4XovF6LYo+VEoV3ynaSpzwVfjCmJpDWrc4w/Phk/HAjfVxy1hqV+RO7U63a313EerlKZ66y2vo+DjaWaJis+am+hvC2DMWOZBOT3+IeR/uvo84fNc8FOaRs0vqSiOC1s2Kj5gNjlFVU0GR16z67VYzGKMYfhuan7x35B+Zjt9zr7ONZ9Mg0puT0+MTzQ96nC7/gPNCicSOwmJ3QxOkc2KJtLTAC4TPA/D581P9PV4KROUH7Gi4n+6+jw8Vfk6fQ4AT1W+blofFZ81Pj9KaZrlPUGP3y7ycxJvmGH4XtT84r9Z1h09NgHxT1bR17ngp9NpxGIx09SUgHHrelVV6XSpw/H6j2RWODvD45WzWbFsDC8yvl0UCPiK/qI6fjbS5pdc8j9dfZ4l8nuq8nVqfqIyYfhBzY+8h48Egxy/KIrzIpFJDuWscEePTRgSfix7fuyuvRhz/vzyY2kNsbS+X+VHA6bydtc8Kce+14kvZ4XzwydGSBaPxhcVn3zhbFWDr3bYGmHE518UBQKwGGJQvsj8SPXWaWFlMsEQx89Xee2qt7xMJpjD65+N/o4em0DNj43+hvL3x0eDQflqXKFtfctWjLGYoIX7owEsWzGGtg2a2gdzOSucaGZ2u6gwJ7NSXQaj3c+lGjxSZ8Xiz69IvAlGdf75au7b+04CAC66cS5dj6eBix6ZCzwNfPpV+6qwHz5vfvw6XnxbYVi+W9KDPLpVibVYjFYgor7+ePMDOOPjNBKvfzWuQPnRALRbqV0JJ0PXbh2LfVw5Nz6tAteWqJaJSvyI/SBOP9J7KrYqtSXWCyYs32R2DtXhSPh+Ir8I+HbmZ1sNyNH5v+jGudT8Xry23bT+okd0M8Rl0MvYJKO88nnzI0kOJ7FlWCNkI8Movn/e8JyiQb6sX35zkaWosc2n+QXh+5Uw+ouAz5oae83z17+T+Yn4llnhmurjtIe1X7kmQjYag5XtZoUKw3dNhETE99rmaVFAvojn1u1AaJoB+GzE9+K17dToyHN2Ha8Xr203fwcBj59NaDj9uBSBaZrkk+8lwhMlO0RlFFUNdPzEABdws14GMb9c/P5IEoSIN0A2CRKWz17TmqYhmUwilUoJa6Bej59GgKRxsOqhLY4H7LfhnVXVQ1toYycvr3xTVxeXLi854YdQEH5QsxVm4QPw3953Ei9e224Y3kP680+/eh5efMhYd/ayKQBAH0XGGITPRm9O7Z+iyINvE8zF9893fXFSEP6CE2bzay4yzM+2vS9CvkjpdBrpdFr423fyA798ksggyYyCewfpda0oCjU/8lpRFFM7If9+Eb8A0FPQTfVxOqkIO7ZOdHCihnc3kRT0PRVblab6uOkeXl75pnY+srDrc80PoaB8O/Pj14siRHZdED6byCBmRtr9aDWXK0cMkxhj2OMPkgEWaai+fz5BQp6H4VuqwR/7hr5k5cn8Ijz+WCxmivpUtk8k933xXWD88Ekiw2sihE2CsIkQNa7Y8n2PBBH98PxEgqF7gvPVWpIA8RgJRtETXVVVYSdPwPjCo+Tbhfd25uj0XQThf/rV8/DUta+bqrzs44vZ7+CifVmTtKkSB+UHNUHR+3I1EsIuQRKG31xkrfouOKF/vy1nKegq34hLT5/09TmjPn5ihKqqIhaLWfoCRsXnEyFsGyANxDwkQQKPBHGqivERoZMC9wR36uvHR4S54GeVTqcRj8fpAuimR/4K2hljGL6XSJttknD6LvzyX3yoXc/+MlVeAKZHNgny4kPtdImCH1R2pumH77VqK3qPnfzwifnxJqgoChacgG/z88vnRa4v1UNHcFVVkUgkkEgkouNzxia6xt2SIIFHgvhpi7KLWEL1BPfY2ZmWhbV82J7oxPxSqRRtgAX0v4LkoiB/EUWRYBQ94e1M0Mt3E5RP+vyxj0ReRoCE5bMSjTZgX0fN95LksP2sXBJlOI6E8MrnExuAOfpzq/mE5fOfhU/40bZAhwgw9EgQpxEIfFJEdDGG7okuSoDYJUUEZhlFT3je/JLJpGm704UQBd+pE7SbgvJF5kY6PNttj5LPSnS8Xs9BED7fAdqL2HZA9v1e+WQsL2n74//oOXWNcVKY889GfbFYDPF4nJ53L+YXlg9YR4OItpM2QK98zyNBnLJvnn6QYXuiX+ZziZqfFTE83viSyaTJGHPFD6wI+H4NL2q+Xc8DTz0SQo4EoaysudmZoa1J+uAvePwx07HxWnDCbIKeDDHE8ZPPQEwwTBewIHyS1CBJEDbaYz+PdutY7NszSJMmJiPM5UgQPxqJPdFZsdVgAKZH3hRzwQ+rkc53SgR5ScQF5YvaA/10gA7KbzlLwev9U4T7IkkSvo3QSUGPn9zwIKz88ImBkSFtbPWWRHt80oM8t7tNFs+n76wtUclEIiHGObjrnoqtysInyjT2Pv4jhU9Cfb6an06nnaO/iPhRSPLD8f22A4bi/zHb2fnD1r55fBSYE35WURhfED5vYhajS2uuSQ83vmUkSOGG1bRwOt3ga+d2iseNffZsa3DsCT6S+F67wrxXjz+XfBHbLRHntJ18hpFy/ADw2AOfos9f//CWQFnfMPx8H78b3+sNUZ341ADb9+7XAH1GJkCfOm5l++30jWEmJYk/VWTaLwA6+TGR5Eu+G1/TNCiblo/K4/+HHc8i/skto/r7zwV/LKDPyMRPTgzANN0cSnZZp6WDdVo6UTk8ZTgw+SB7ahs1dlo8yZd8N76yafmoPf6fXg/akD8ajz9X/AIyJyc7WTCZk/Oeiq1KZWMxHaJCsijVqzppxoYML3Eq17OtwbTv5uYWzJ49DQdqGzXJl3zJl/x88Wk/QKLm5hZ0dHShsrEYO2ft1gBg56zdGuk/s/CJMg0AFj5RppG+O17KdXR0WWZ/F0nyJV/yJX+o+Ep5RZVpZnZ2xnZ2wDLpOc2mkUlDotdydhzJl3zJl/x88GkShMzMzs/YHrXsOJIv+ZIv+UPNpwYoJSUlNdpkaQOUkpKSGi2SBiglJTVqJQ1QSkpq1EoaoJSU1KiVNEApKalRK2mAUlJSo1bSAKWkpEatpAFKSUmNWvm7m6CUlNSo1s57ezSn7eUVhTkdyRG1pAFKSUl50s57ezTcdx+gaUBBAUCmgLjvPuDMGb3MbbdpuTZBOxMOwg1sgE/86G7Th7ji1vVD6vySL/mSP3T8nff2aCBTPojuuj1pkv6YSmFnMpkzE6QmrCgWAw5ivoHaAPmTb7cuV2JZV9y6Xrni1vWK5A8tn3DzzWfXjSa+l3VRyWR+XnTffa5V5VCfw86AUynfXN8G6HSih+IisGMM1Y9Q8vUf/3Djk22jgR9kW+RiZ0C85RbjuaZByWQix1lM2I7v03x9GaCXE5zLL8Ft37n+EUq+/Y9/OPBJmfcyP4oyodTfr5tPLAWkskssZRiSokAbMyavfD+SSRApKSl38XNeJ7jnSUGZXH6GiPgj3gCHNOwfBhrqxvbhLv58jLbrQSqcRrwBSklJDYH49rcaGFFYjU2ZXH0GN74Ptq82QC/RRy4jlOHO99JGFJbv1ggu+fnjkzK55EdRJrRSKUBN6kaTTOrP/WSJhxHfdxbYrRE80Kd4D/Bz/eNj+XbdICQ/f3yybSj4QbZFLtZwhsD8yisKFVNkZ8dPJn11iA48J8ho6wgq+ZI/mvnCvoDEkATrc9oRmq/qplL66JRbbvHNlZMiSUlJeZJtX7xUCshk9C4oAUwo0OcQKAhXGqCUlJRnyZshSElJjVqNNINzk7wfoJSU1KiVNEApKalRK2mAUlJSo1bSAKWkpEatpAFKSUmNWkkDlJKSGrWSBiglJTVqJQ1QSkpq1Eoa4DBR+979Wvve/Tm/l50dR/IlfzTy5VC4YaD2vfu1BQvmAwCam1swd/mFCgAcumY7/aLOfbRKAYDb7v0mXXdPxVZf5ew4ki/5o5UvDTDPOlDbqK1YcaFpXXNzC3q2NaCpPo5Fl6bpY/WqTtSWqFjbFqOPlY3Fnsp9I341yJdPtGfPfgCA5Ev+aOXLKvAwUHNzC5qbW0zrqld1ovzoSgUAyo+uVKpXdaKysRgHr6j7f+2dX2xT1x3HvzdrUJNoTlsgK51JO6XQpg9MdYyygQIW5U+lpNMkHprS9IGuJVg0UQyiK6xISKNhEqLOQNUNbTVUNeuyhz6RiFAiFJPRzZBYItJqjS6SCZGGAl3BUggia84enHNyr32vfa997Wtyf190Ffuck/O5xs7P55zf75yfBADfvnJOagstN9wuHY/4xHcqn0aARaCx/hCrqnpMPH/mmacRi13HH0b+Ksr63aMI7nwftZtHRFl00IvA6SNonKxL265i3ybRJ9fU1B2sadwoEZ/4TuaTASwSjfWHGADwD8LU1B1sn+sU9cHJlxMPDnkXfun3iTc54B5I2676szlVvwDEh4/4xHcynwxgkWi8OchObryFN6u3ibKJiYglfVdXe8TjP02cQ1touVgsJj7xncwnA1gEGm8OsuigF023G6QO+SDrd48ufJPpaM2nLtXzsbfiadsH3ANonKxDl79T6ls2zGo3j4gPAfGJ71Q+HYhaJKrdPIJxjDDIBzO2XfOpK+UN1yrT0nhzkNUSn/jEB0CB0EWj6KA3ZVqQSRtKJGwoMXdAb01vQIoOelPKs+HveyZx2cU/cTBx2cU/eqkERy+Z+xOyku/dIsG7xb73HztWJy67+LveTlw58HMaAfL8AIvtmOxCq6Y3IKE5yDo2nm0X/loAAAxkSURBVDU0/M9GwcmXAfcAOuSDbDxpDYb4xHcqP+sRoDI5SqZEKflSnzzN7GJbLR6/FNz5ft4YwZ3vg8dOEZ/4xM/SAPbJ0wzd3Yl0eN3dQFdXwY3gYjLAfOG3pjcg1W4eUbv6NaS11pFx/eNQIkq+pjcg9btHVVuFiE98p/JNT4E1EySXlQGnTqGvtZUVYjosDLAkJRIi37+Pvo6OgrBT7sEiduNkHSDXsbbmoKrcrLcrU3vlB4/4xHc635QBTJsYGQC6u9G3e3deDVHKPUhSwgAXgJ1yD4rXn6vx73eP8u074g0y6tlSKpN3rMvfKa06s40po+eJT3yn8g3HAYqp3qlTwOws8M47QN28IRptXTCC80YhH4ZIdQ8A8PF8xS7kna26B278lK+/uxvYvTtrdod8kPGN3TzCnb95Zj29XBfnmPoDcGhhszg/IcMI36ynl+t4DJbwzXp6udo7reGb9fRyHVg/ZwnfrKeXa+S8Ne+/WU+v0BfXrOGb9PQKffxJRn5272xpaXY3tJgl5WZz+eJs4PQRi24oVYHTR8RiM/GJT3wTU+Amf4WkWvBPmgImt83xXo3dwy7tNvlgq+6htTVlCozW1qzZPBK+y98pdcgHGdwDqlCAi3PafhY+MtSrV0oZCR8d9DI0B1lyJL4e/3hMu08+MtSrt4rf3qndJx8Z6tVbxT+wfk6zTz4y1Ku3ij9yXvv95SNDvXqr+PjimnanfGSoV28V/+NPtDvlI0O9egN8U2uAqj9+IMXw5WIETN9DkhMEHR0Fi0dU/T8wZsnr1oqEH3srbvkisJlIfOITf7HzTXuBU4wgkDACOax/ZXUPu3ez5LJCsFX30NpqWSA43wsJxSIwYMC9n6RM7Wt6A2IvJPGJ73R+1ochJMe/2bEbZDHtROGnYRjdCK50jqQ4O3TEpwHpTuMww1dOge3gK6fAdvCVU2A7+MopsB185RTYFr5iCpwtP+udIEqjY5cBavJXSIvB+AHOjcQnPvHt5Od0GMJiMkB2ymwkfFayMBKf+MRfLHw6DqtIpBcJn05GvL/JMhuJn05GvL/55Bvx/uaTb8T7m0++Ee9vPvlGvL955Rvw/mbikwEsEmlFwuspG+8Yl5lIfOITf7Hz6UToIhGPhK/Yt0mUjYxcsKRvr3ehz+njF9JG4hOf+E7ikwEsEvFs9crEzQ033xX1uSSF8Z51qfoFIJJPE5/4TubTFLgIpJUcHYAq3R/cA6lpAZGaFlCrHc4ufAPyD8Ll/hBTpiUkPvGdyKcj8W0Wz4mqTNbMc6J2+TulttBydPk7pcbJOuHFOrnxlvCY8e096dpNH7+g6jsWu46qqscw1h9ixCe+k/lkAItMsdh1TE3dQVtoOfqWDTMA6Fs2zHj80qoz2xgArDqzjfHYKSPtpqbuqBJDE5/4xKc1wKIQ/xYEFjLWA4noeN6GR64r3fh8IddoOz0O8YnvVD4ZwCLRWH+IAQsZ6wvNIT7xncgXThDuhUn2zlgtPY7T+fybKd/S4xDfmfw+WQQeSwAwIUfyfQt6HFv4UpM/gJtXrjKlm5j/cVo9BNXjEJ/4xLeHrzCAjpRUXe1JcUHHYtcxffwCooOJ/XP8Jz+toXGyTvzkx1hnavee91Xhgua6fPkqAID4xCe+PfyJiUheZzzFrhJgwTWs1MmNt/j5XGi63SBxj8v8dhV8+8o5iXtcjLRTKplHfOIT3z6+kyU1+QMq7wiQCBbksThc/e7R1EDEwdRARK12Ffs2iT659LxAxCc+8QvHd/wUmHuBuXdE6SbePrdw3EYuW1GqP5tT9Qvoe4GIT3ziF45PBnDeAPITWd+s3iYqJyas8chUV3vE4z9NnEt7IizxiU/8wvHJAPoDIitT0+0GiR9OaORYaqWMHkfd5e8UZ/InZ4UiPvEfFr5ZFSvf6QZQxAHWamRl0pPW+ftGs7ibyQpFfOIXIz8XFSvfqRJ7gaOD3pRheUbVHkhcJlTTG5Cig6lHXmfDX7mkHSuXtNvG34q92Iq9tvH3z/+zi98urUO7tM42/p6SddhTYg8/HA6LazHwnapHgPngyeYg69h4Ni/Db2B+cdY9gA75IBtPWgMhPvGz4ZfPrce9kksF54fDYbjdbtXz+vr6h5bvZIkRoFOzQhH/4eVfxQ8on1tfUH6y8QEAt9ttaCRWzHynqgQwn5VJa60l4/qLhVmhiE98AIgu+R+u4oeC8bWMD1dGI1TEfCdLOEH0sjKZ9bZlam82KxTxia/X342aCmB8GniQP36yZmZmUFZWplluRMXKd6qEAdTKymTUs6ZUJu+cmaxQxCd+Wn7DbdzAMiCaH36y6uvrEQ6HsXTpUpURmpmZwXfffZdxHa6Y+U6VCITmWZmig14RYS4+PCY9vULRo+oP4KGFzdp6WaG0+GY9vVw3HpywhG/W08v1FT60hG/W08t1DMcs4Zv19HKdYF9bwt9QImFtNcPTO4DpxhJ8eZhhtGo12J//Bex6GxhehpXj06h98Ah+jh8Jx8hHc7nx9aQ0QmaMTzHynR4HKJwgfHE0cPpI3mCB00fEYm+yiE/8dPwrExKufwFU9M9h+2EJdVPXIL3+XCI5dsNt3KipEGuCeo6RXF9/i6sSLa5KRCIRMQIrKytDJBIRdfl6/QAgyzJkWdbk87ps+Y5Vkz+A2hAYDnlZkz+AQdxiAfcAA8DWfOpiSAzJta/aA4krTRveR8A9wAZxizX5A8AhL6sNgTX5AznxVy5pZyuXtNvG34q9bCv22sbfj/1sP/bbxm+X1rF2aZ1tfO8WiUmvP5c3vvJqcVWyP/5kBWtxVTJZltmLT+5gLzWeYS8+uYPJsqyq17qPXPmyLLNoNMpkWRZXOBxWPef1ZvhOV9qdINlkYM/U3kwkPPGJn66/7Ycl4PA1KCeMVvK5WlyVWFtWvvD8jRa0vNGCDc+24uK/TwEALv32PQAQ7XridzUo2fFlWYbP51PxAaDn8x7VYwDw+XyQZRl+v98U36kSBpDvRUTSImyui+DJqukNiL2IShGf+Gb5ielwCUbOM0Pts+EnG7+1ZeXwP+XGfxp68ETda/j1q0NYMdyCCqlU1QbQNoJm+cnGz+fzoefzHng8Hng8Hnzzz28QiagPTUhnBPX4TlUJABF/lO1GdL0ypYKTL4PHHyk3ghOf+Nny+ZpgIfhXZu7h7n112X9H/yIev/BoKe7eT7TLB39oaAjxuNq4Kw2fz+dDPB7H0NCQab6TRTtBiP/Q8rljJF/8FlclVkvlwqhdY4mfa8vKsWK4BU/UvYYVwy1ixMfrr8zcw2qpPMUpYpYvyzI8Ho8watzg+Xw+RCIReDweRCIRMULk9UNDQ/B4PClOEdoJkqqsdoJkJQt3AhCf+FxXJgwOZHLk8+ksHwWuLSvHs3/bKYwfL9db+8uVz6ezfBTIjSA3frxcb+2PdoJoK+NOkLSKHjUNzDUSXqkbD07Yyv8KH9rKP4ZjtvJPsK9t5V+cM/83bJbPR3Va+uXj5bg7M6tZp/d7ZvnJ63tKbdmyBbOz2ny93yPDp1banSB6ysY7yJVLJDzxiV9Iftv5r+B2uxGPx9EWj+Pklq2q3/n79/fwwqOlqrJwOAyXywWXy4XJyUn0JAUom+F7PB7BD4fDKUbt/PnzKgeJFt/o63eqUnaCVOzbJCpHRi5YAvF6F/qcPn4hbSQ88YlfLPyPPjoKl8uF0tJSzM7O4oP6X2C1VI7KRxP1lWWlYgR4935i1Pe78D9E+3g8jvr6esv4fG3P5UoYf14OJKbAfEpshu/0nSDCAN68cpUBgDJxcsPNd0XDXJKyeM+6VP0CEMmfuYhP/GLmN3/5OE7vegndv3pelLWeiOGnKMX3Pz6tard06VI8+1mz5XwAqO/bI8rkp34Dj8eD3u3fZ813ugF8BEhkpEpOzgxAlW4P7oHUtHxITcun1Q5nF76B+BtxuT/ElGkBiU/8Yub3bh9F987nVf2e0uD3bh9FcOeevPCTX5d/EAh88LOc+U5WCc9JqkyWzHOSdvk7pbbQcnT5O6XGyTrhRTq58ZbwWPFEK+naTR+/oOo7FruOqqrHMNYfYsQnPvHt41tvUh4ulSQXxGLXMTV1B22h5ehbNswAoG/ZMOPxQ6vObGMAsOrMNsZjl4y0m5q6YygbPfGJT3z7+E6T1OQPqDLTKzPWjzcHxTcEjxxXutH5QqrRdnoc4hOf+Pbwnb4GKJwgfDic73UBPQ7xiU/8wvOdbgD/DzTnuApHWW9CAAAAAElFTkSuQmCC);background-size:1000% 1000%;background-position:0% 0%}.GeneIcon--template{background-position:11.1111111111% 0%}.GeneIcon--unknown{background-position:11.1111111111% 11.1111111111%}.GeneIcon--cryokinesis{background-position:22.2222222222% 11.1111111111%}.GeneIcon--mattereater{background-position:33.3333333333% 11.1111111111%}.GeneIcon--jumpy{background-position:44.4444444444% 11.1111111111%}.GeneIcon--polymorphism{background-position:55.5555555556% 11.1111111111%}.GeneIcon--telepathy{background-position:66.6666666667% 11.1111111111%}.GeneIcon--empath{background-position:77.7777777778% 11.1111111111%}.GeneIcon--immolate{background-position:88.8888888889% 11.1111111111%}.GeneIcon--melt{background-position:100% 11.1111111111%}.GeneIcon--superfart{background-position:0% 22.2222222222%}.GeneIcon--eyebeams{background-position:11.1111111111% 22.2222222222%}.GeneIcon--adrenaline{background-position:22.2222222222% 22.2222222222%}.GeneIcon--midas{background-position:33.3333333333% 22.2222222222%}.GeneIcon--photokinesis{background-position:44.4444444444% 22.2222222222%}.GeneIcon--erebokinesis{background-position:55.5555555556% 22.2222222222%}.GeneIcon--firebreath{background-position:66.6666666667% 22.2222222222%}.GeneIcon--dimensionshift{background-position:77.7777777778% 22.2222222222%}.GeneIcon--healingtouch{background-position:88.8888888889% 22.2222222222%}.GeneIcon--hallucination{background-position:100% 22.2222222222%}.GeneIcon--brownnote{background-position:0% 33.3333333333%}.GeneIcon--tk{background-position:11.1111111111% 33.3333333333%}.GeneIcon--darkcloak{background-position:22.2222222222% 33.3333333333%}.GeneIcon--chameleon{background-position:33.3333333333% 33.3333333333%}.GeneIcon--bigpuke{background-position:44.4444444444% 33.3333333333%}.GeneIcon--ink{background-position:55.5555555556% 33.3333333333%}.GeneIcon--none{background-position:66.6666666667% 33.3333333333%}.GeneIcon--speech{background-position:77.7777777778% 33.3333333333%}.GeneIcon--lizard{background-position:88.8888888889% 33.3333333333%}.GeneIcon--squid{background-position:100% 33.3333333333%}.GeneIcon--roach{background-position:0% 44.4444444444%}.GeneIcon--frog{background-position:11.1111111111% 44.4444444444%}.GeneIcon--flashy{background-position:22.2222222222% 44.4444444444%}.GeneIcon--dwarf{background-position:33.3333333333% 44.4444444444%}.GeneIcon--cat{background-position:44.4444444444% 44.4444444444%}.GeneIcon--blank{background-position:55.5555555556% 44.4444444444%}.GeneIcon--skeleton{background-position:66.6666666667% 44.4444444444%}.GeneIcon--monkey{background-position:77.7777777778% 44.4444444444%}.GeneIcon--cow{background-position:88.8888888889% 44.4444444444%}.GeneIcon--fire_res{background-position:100% 44.4444444444%}.GeneIcon--cold_res{background-position:0% 55.5555555556%}.GeneIcon--thermal_res{background-position:11.1111111111% 55.5555555556%}.GeneIcon--elec_res{background-position:22.2222222222% 55.5555555556%}.GeneIcon--tox_res{background-position:33.3333333333% 55.5555555556%}.GeneIcon--alc_res{background-position:44.4444444444% 55.5555555556%}.GeneIcon--rad_res{background-position:55.5555555556% 55.5555555556%}.GeneIcon--breathless{background-position:66.6666666667% 55.5555555556%}.GeneIcon--regen{background-position:77.7777777778% 55.5555555556%}.GeneIcon--haze{background-position:88.8888888889% 55.5555555556%}.GeneIcon--dead{background-position:100% 55.5555555556%}.GeneIcon--strong{background-position:0% 66.6666666667%}.GeneIcon--hulk{background-position:11.1111111111% 66.6666666667%}.GeneIcon--radiobrain{background-position:22.2222222222% 66.6666666667%}.GeneIcon--eye{background-position:33.3333333333% 66.6666666667%}.GeneIcon--fart{background-position:44.4444444444% 66.6666666667%}.GeneIcon--bad{background-position:66.6666666667% 66.6666666667%}.GeneIcon--shoot_limb{background-position:77.7777777778% 66.6666666667%}.GeneIcon--apparition-0{background-position:88.8888888889% 66.6666666667%}.GeneIcon--apparition-1{background-position:100% 66.6666666667%}.GeneIcon--hemochromia_rust{background-position:33.3333333333% 88.8888888889%}.GeneIcon--hemochromia_bronze{background-position:44.4444444444% 88.8888888889%}.GeneIcon--hemochromia_gold{background-position:55.5555555556% 88.8888888889%}.GeneIcon--hemochromia_lime{background-position:66.6666666667% 88.8888888889%}.GeneIcon--hemochromia_olive{background-position:77.7777777778% 88.8888888889%}.GeneIcon--hemochromia_jade{background-position:88.8888888889% 88.8888888889%}.GeneIcon--hemochromia_teal{background-position:100% 88.8888888889%}.GeneIcon--hemochromia_cobalt{background-position:0% 100%}.GeneIcon--hemochromia_indigo{background-position:11.1111111111% 100%}.GeneIcon--hemochromia_purple{background-position:22.2222222222% 100%}.GeneIcon--hemochromia_violet{background-position:33.3333333333% 100%}.GeneIcon--hemochromia_fuchsia{background-position:44.4444444444% 100%}.GeneIcon--hemochromia_unknown{background-position:55.5555555556% 100%}.GeneIcon--achromia{background-position:66.6666666667% 100%}.GeneIcon--noir{background-position:77.7777777778% 100%}.IconStack>.Icon{position:absolute;width:100%;text-align:center}.IconStack{position:relative;display:inline-block;height:1.2em;line-height:2em;vertical-align:middle}.IconStack:after{color:transparent;content:"."}.Input{position:relative;display:inline-block;width:10em;border:.0833333333em solid #88bfff;border:.0833333333em solid rgba(136,191,255,.75);border-radius:.16em;color:#fff;background-color:#0a0a0a;padding:0 .3333333333em;margin-right:.1666666667em;line-height:1.4166666667em;overflow:visible}.Input--fluid{display:block;width:auto}.Input__baseline{display:inline-block;color:transparent}.Input__input{display:block;position:absolute;top:0;bottom:0;left:0;right:0;border:0;outline:0;width:100%;font-size:1em;line-height:1.4166666667em;height:1.4166666667em;margin:0;padding:0 .5em;font-family:Verdana,sans-serif;background-color:transparent;color:#fff;color:inherit}.Input__input:-ms-input-placeholder{font-style:italic;color:#777;color:rgba(255,255,255,.45)}.Input--monospace .Input__input{font-family:"Consolas",monospace}.Knob{position:relative;font-size:1rem;width:2.6em;height:2.6em;margin:0 auto;margin-bottom:-0.2em;cursor:n-resize}.Knob:after{content:".";color:transparent;line-height:2.5em}.Knob__circle{position:absolute;top:.1em;bottom:.1em;left:.1em;right:.1em;margin:.3em;background-color:#333;background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.15) 0%, rgba(255, 255, 255, 0) 100%);border-radius:50%;box-shadow:0 .05em .5em 0 rgba(0,0,0,.5)}.Knob__cursorBox{position:absolute;top:0;bottom:0;left:0;right:0}.Knob__cursor{position:relative;top:.05em;margin:0 auto;width:.2em;height:.8em;background-color:rgba(255,255,255,.9)}.Knob__popupValue{position:absolute;top:-2rem;right:50%;font-size:1rem;text-align:center;padding:.25rem .5rem;color:#fff;background-color:#000;transform:translateX(50%);white-space:nowrap}.Knob__ring{position:absolute;top:0;bottom:0;left:0;right:0;padding:.1em}.Knob__ringTrackPivot{transform:rotateZ(135deg)}.Knob__ringTrack{fill:transparent;stroke:rgba(255,255,255,.1);stroke-width:8;stroke-linecap:round;stroke-dasharray:235.62}.Knob__ringFillPivot{transform:rotateZ(135deg)}.Knob--bipolar .Knob__ringFillPivot{transform:rotateZ(270deg)}.Knob__ringFill{fill:transparent;stroke:#6a96c9;stroke-width:8;stroke-linecap:round;stroke-dasharray:314.16;transition:stroke 50ms ease-out}.Knob--color--black .Knob__ringFill{stroke:#1a1a1a}.Knob--color--white .Knob__ringFill{stroke:#fff}.Knob--color--red .Knob__ringFill{stroke:#df3e3e}.Knob--color--orange .Knob__ringFill{stroke:#f37f33}.Knob--color--yellow .Knob__ringFill{stroke:#fbda21}.Knob--color--olive .Knob__ringFill{stroke:#cbe41c}.Knob--color--green .Knob__ringFill{stroke:#25ca4c}.Knob--color--teal .Knob__ringFill{stroke:#00d6cc}.Knob--color--blue .Knob__ringFill{stroke:#2e93de}.Knob--color--violet .Knob__ringFill{stroke:#7349cf}.Knob--color--purple .Knob__ringFill{stroke:#ad45d0}.Knob--color--pink .Knob__ringFill{stroke:#e34da1}.Knob--color--brown .Knob__ringFill{stroke:#b97447}.Knob--color--grey .Knob__ringFill{stroke:#848484}.Knob--color--light-grey .Knob__ringFill{stroke:#b3b3b3}.Knob--color--good .Knob__ringFill{stroke:#68c22d}.Knob--color--average .Knob__ringFill{stroke:#f29a29}.Knob--color--bad .Knob__ringFill{stroke:#df3e3e}.Knob--color--label .Knob__ringFill{stroke:#8b9bb0}.LabeledList{display:table;width:100%;width:calc(100% + 1em);border-collapse:collapse;border-spacing:0;margin:-0.25em -0.5em;margin-bottom:0;padding:0}.LabeledList__row{display:table-row}.LabeledList__row:last-child .LabeledList__cell{padding-bottom:0}.LabeledList__cell{display:table-cell;margin:0;padding:.25em .5em;border:0;text-align:left}.LabeledList__label--nowrap{width:1%;white-space:nowrap;min-width:5em}.LabeledList__buttons{width:.1%;white-space:nowrap;text-align:right;padding-top:.0833333333em;padding-bottom:0}.Modal{background-color:#252525;max-width:calc(100% - 1rem);padding:1rem}.NoticeBox{padding:.33em .5em;margin-bottom:.5em;box-shadow:none;font-weight:bold;font-style:italic;color:#000;background-color:#bb9b68;background-image:repeating-linear-gradient(-45deg, transparent, transparent 0.8333333333em, rgba(0, 0, 0, 0.1) 0.8333333333em, rgba(0, 0, 0, 0.1) 1.6666666667em)}.NoticeBox--color--black{color:#fff;background-color:#000}.NoticeBox--color--white{color:#000;background-color:#b3b3b3}.NoticeBox--color--red{color:#fff;background-color:#701f1f}.NoticeBox--color--orange{color:#fff;background-color:#854114}.NoticeBox--color--yellow{color:#000;background-color:#83710d}.NoticeBox--color--olive{color:#000;background-color:#576015}.NoticeBox--color--green{color:#fff;background-color:#174e24}.NoticeBox--color--teal{color:#fff;background-color:#064845}.NoticeBox--color--blue{color:#fff;background-color:#1b4565}.NoticeBox--color--violet{color:#fff;background-color:#3b2864}.NoticeBox--color--purple{color:#fff;background-color:#542663}.NoticeBox--color--pink{color:#fff;background-color:#802257}.NoticeBox--color--brown{color:#fff;background-color:#4c3729}.NoticeBox--color--grey{color:#fff;background-color:#3e3e3e}.NoticeBox--color--light-grey{color:#fff;background-color:#6a6a6a}.NoticeBox--color--good{color:#fff;background-color:#2e4b1a}.NoticeBox--color--average{color:#fff;background-color:#7b4e13}.NoticeBox--color--bad{color:#fff;background-color:#701f1f}.NoticeBox--color--label{color:#fff;background-color:#53565a}.NoticeBox--type--info{color:#fff;background-color:#235982}.NoticeBox--type--success{color:#fff;background-color:#1e662f}.NoticeBox--type--warning{color:#fff;background-color:#a95219}.NoticeBox--type--danger{color:#fff;background-color:#8f2828}.Input{position:relative;display:inline-block;width:10em;border:.0833333333em solid #88bfff;border:.0833333333em solid rgba(136,191,255,.75);border-radius:.16em;color:#fff;background-color:#0a0a0a;padding:0 .3333333333em;margin-right:.1666666667em;line-height:1.4166666667em;overflow:visible}.Input--fluid{display:block;width:auto}.Input__baseline{display:inline-block;color:transparent}.Input__input{display:block;position:absolute;top:0;bottom:0;left:0;right:0;border:0;outline:0;width:100%;font-size:1em;line-height:1.4166666667em;height:1.4166666667em;margin:0;padding:0 .5em;font-family:Verdana,sans-serif;background-color:transparent;color:#fff;color:inherit}.Input__input:-ms-input-placeholder{font-style:italic;color:#777;color:rgba(255,255,255,.45)}.Input--monospace .Input__input{font-family:"Consolas",monospace}.NumberInput{position:relative;display:inline-block;border:.0833333333em solid #88bfff;border:.0833333333em solid rgba(136,191,255,.75);border-radius:.16em;color:#88bfff;background-color:#0a0a0a;padding:0 .3333333333em;margin-right:.1666666667em;line-height:1.4166666667em;text-align:right;overflow:visible;cursor:n-resize}.NumberInput--fluid{display:block}.NumberInput__content{margin-left:.5em}.NumberInput__barContainer{position:absolute;top:.1666666667em;bottom:.1666666667em;left:.1666666667em}.NumberInput__bar{position:absolute;bottom:0;left:0;width:.25em;box-sizing:border-box;border-bottom:.0833333333em solid #88bfff;background-color:#88bfff}.NumberInput__input{display:block;position:absolute;top:0;bottom:0;left:0;right:0;border:0;outline:0;width:100%;font-size:1em;line-height:1.4166666667em;height:1.4166666667em;margin:0;padding:0 .5em;font-family:Verdana,sans-serif;background-color:#0a0a0a;color:#fff;text-align:right}.ProgressBar{display:flex;position:relative;width:100%;padding:0 .5em;border-width:.0833333333em !important;border-style:solid !important;border-radius:.16em;background-color:rgba(0,0,0,0);transition:border-color 900ms ease-out;align-items:center}.ProgressBar__fill{position:absolute;top:-0.5px;left:0px;bottom:-0.5px}.ProgressBar__fill--animated{transition:background-color 900ms ease-out,width 900ms ease-out}.ProgressBar__content{position:relative;line-height:1.4166666667em;width:100%;text-align:right}.ProgressBar--color--default{border:.0833333333em solid #3e6189}.ProgressBar--color--default .ProgressBar__fill{background-color:#3e6189}.ProgressBar--color--black{border-color:#000 !important}.ProgressBar--color--black .ProgressBar__fill{background-color:#000}.ProgressBar--color--white{border-color:#d9d9d9 !important}.ProgressBar--color--white .ProgressBar__fill{background-color:#d9d9d9}.ProgressBar--color--red{border-color:#bd2020 !important}.ProgressBar--color--red .ProgressBar__fill{background-color:#bd2020}.ProgressBar--color--orange{border-color:#d95e0c !important}.ProgressBar--color--orange .ProgressBar__fill{background-color:#d95e0c}.ProgressBar--color--yellow{border-color:#d9b804 !important}.ProgressBar--color--yellow .ProgressBar__fill{background-color:#d9b804}.ProgressBar--color--olive{border-color:#9aad14 !important}.ProgressBar--color--olive .ProgressBar__fill{background-color:#9aad14}.ProgressBar--color--green{border-color:#1b9638 !important}.ProgressBar--color--green .ProgressBar__fill{background-color:#1b9638}.ProgressBar--color--teal{border-color:#009a93 !important}.ProgressBar--color--teal .ProgressBar__fill{background-color:#009a93}.ProgressBar--color--blue{border-color:#1c71b1 !important}.ProgressBar--color--blue .ProgressBar__fill{background-color:#1c71b1}.ProgressBar--color--violet{border-color:#552dab !important}.ProgressBar--color--violet .ProgressBar__fill{background-color:#552dab}.ProgressBar--color--purple{border-color:#8b2baa !important}.ProgressBar--color--purple .ProgressBar__fill{background-color:#8b2baa}.ProgressBar--color--pink{border-color:#cf2082 !important}.ProgressBar--color--pink .ProgressBar__fill{background-color:#cf2082}.ProgressBar--color--brown{border-color:#8c5836 !important}.ProgressBar--color--brown .ProgressBar__fill{background-color:#8c5836}.ProgressBar--color--grey{border-color:#646464 !important}.ProgressBar--color--grey .ProgressBar__fill{background-color:#646464}.ProgressBar--color--light-grey{border-color:#919191 !important}.ProgressBar--color--light-grey .ProgressBar__fill{background-color:#919191}.ProgressBar--color--good{border-color:#4d9121 !important}.ProgressBar--color--good .ProgressBar__fill{background-color:#4d9121}.ProgressBar--color--average{border-color:#cd7a0d !important}.ProgressBar--color--average .ProgressBar__fill{background-color:#cd7a0d}.ProgressBar--color--bad{border-color:#bd2020 !important}.ProgressBar--color--bad .ProgressBar__fill{background-color:#bd2020}.ProgressBar--color--label{border-color:#657a94 !important}.ProgressBar--color--label .ProgressBar__fill{background-color:#657a94}.RoundGauge{font-size:1rem;width:2.6em;height:1.3em;margin:0 auto .2em}.RoundGauge__ringTrack{fill:transparent;stroke:rgba(255,255,255,.1);stroke-width:10;stroke-dasharray:157.08;stroke-dashoffset:157.08}.RoundGauge__ringFill{fill:transparent;stroke:#6a96c9;stroke-width:10;stroke-dasharray:314.16;transition:stroke 50ms ease-out}.RoundGauge__needle,.RoundGauge__ringFill{transition:transform 50ms ease-in-out}.RoundGauge__needleLine,.RoundGauge__needleMiddle{fill:#db2828}.RoundGauge__alert{fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2;fill:rgba(255,255,255,.1)}.RoundGauge__alert.max{fill:#db2828}.RoundGauge--color--black.RoundGauge__ringFill{stroke:#1a1a1a}.RoundGauge--color--white.RoundGauge__ringFill{stroke:#fff}.RoundGauge--color--red.RoundGauge__ringFill{stroke:#df3e3e}.RoundGauge--color--orange.RoundGauge__ringFill{stroke:#f37f33}.RoundGauge--color--yellow.RoundGauge__ringFill{stroke:#fbda21}.RoundGauge--color--olive.RoundGauge__ringFill{stroke:#cbe41c}.RoundGauge--color--green.RoundGauge__ringFill{stroke:#25ca4c}.RoundGauge--color--teal.RoundGauge__ringFill{stroke:#00d6cc}.RoundGauge--color--blue.RoundGauge__ringFill{stroke:#2e93de}.RoundGauge--color--violet.RoundGauge__ringFill{stroke:#7349cf}.RoundGauge--color--purple.RoundGauge__ringFill{stroke:#ad45d0}.RoundGauge--color--pink.RoundGauge__ringFill{stroke:#e34da1}.RoundGauge--color--brown.RoundGauge__ringFill{stroke:#b97447}.RoundGauge--color--grey.RoundGauge__ringFill{stroke:#848484}.RoundGauge--color--light-grey.RoundGauge__ringFill{stroke:#b3b3b3}.RoundGauge--color--good.RoundGauge__ringFill{stroke:#68c22d}.RoundGauge--color--average.RoundGauge__ringFill{stroke:#f29a29}.RoundGauge--color--bad.RoundGauge__ringFill{stroke:#df3e3e}.RoundGauge--color--label.RoundGauge__ringFill{stroke:#8b9bb0}.RoundGauge__alert--black{fill:#1a1a1a;transition:opacity .6s cubic-bezier(0.25, 1, 0.5, 1);animation:RoundGauge__alertAnim 1s cubic-bezier(0.34, 1.56, 0.64, 1) infinite}.RoundGauge__alert--white{fill:#fff;transition:opacity .6s cubic-bezier(0.25, 1, 0.5, 1);animation:RoundGauge__alertAnim 1s cubic-bezier(0.34, 1.56, 0.64, 1) infinite}.RoundGauge__alert--red{fill:#df3e3e;transition:opacity .6s cubic-bezier(0.25, 1, 0.5, 1);animation:RoundGauge__alertAnim 1s cubic-bezier(0.34, 1.56, 0.64, 1) infinite}.RoundGauge__alert--orange{fill:#f37f33;transition:opacity .6s cubic-bezier(0.25, 1, 0.5, 1);animation:RoundGauge__alertAnim 1s cubic-bezier(0.34, 1.56, 0.64, 1) infinite}.RoundGauge__alert--yellow{fill:#fbda21;transition:opacity .6s cubic-bezier(0.25, 1, 0.5, 1);animation:RoundGauge__alertAnim 1s cubic-bezier(0.34, 1.56, 0.64, 1) infinite}.RoundGauge__alert--olive{fill:#cbe41c;transition:opacity .6s cubic-bezier(0.25, 1, 0.5, 1);animation:RoundGauge__alertAnim 1s cubic-bezier(0.34, 1.56, 0.64, 1) infinite}.RoundGauge__alert--green{fill:#25ca4c;transition:opacity .6s cubic-bezier(0.25, 1, 0.5, 1);animation:RoundGauge__alertAnim 1s cubic-bezier(0.34, 1.56, 0.64, 1) infinite}.RoundGauge__alert--teal{fill:#00d6cc;transition:opacity .6s cubic-bezier(0.25, 1, 0.5, 1);animation:RoundGauge__alertAnim 1s cubic-bezier(0.34, 1.56, 0.64, 1) infinite}.RoundGauge__alert--blue{fill:#2e93de;transition:opacity .6s cubic-bezier(0.25, 1, 0.5, 1);animation:RoundGauge__alertAnim 1s cubic-bezier(0.34, 1.56, 0.64, 1) infinite}.RoundGauge__alert--violet{fill:#7349cf;transition:opacity .6s cubic-bezier(0.25, 1, 0.5, 1);animation:RoundGauge__alertAnim 1s cubic-bezier(0.34, 1.56, 0.64, 1) infinite}.RoundGauge__alert--purple{fill:#ad45d0;transition:opacity .6s cubic-bezier(0.25, 1, 0.5, 1);animation:RoundGauge__alertAnim 1s cubic-bezier(0.34, 1.56, 0.64, 1) infinite}.RoundGauge__alert--pink{fill:#e34da1;transition:opacity .6s cubic-bezier(0.25, 1, 0.5, 1);animation:RoundGauge__alertAnim 1s cubic-bezier(0.34, 1.56, 0.64, 1) infinite}.RoundGauge__alert--brown{fill:#b97447;transition:opacity .6s cubic-bezier(0.25, 1, 0.5, 1);animation:RoundGauge__alertAnim 1s cubic-bezier(0.34, 1.56, 0.64, 1) infinite}.RoundGauge__alert--grey{fill:#848484;transition:opacity .6s cubic-bezier(0.25, 1, 0.5, 1);animation:RoundGauge__alertAnim 1s cubic-bezier(0.34, 1.56, 0.64, 1) infinite}.RoundGauge__alert--light-grey{fill:#b3b3b3;transition:opacity .6s cubic-bezier(0.25, 1, 0.5, 1);animation:RoundGauge__alertAnim 1s cubic-bezier(0.34, 1.56, 0.64, 1) infinite}.RoundGauge__alert--good{fill:#68c22d;transition:opacity .6s cubic-bezier(0.25, 1, 0.5, 1);animation:RoundGauge__alertAnim 1s cubic-bezier(0.34, 1.56, 0.64, 1) infinite}.RoundGauge__alert--average{fill:#f29a29;transition:opacity .6s cubic-bezier(0.25, 1, 0.5, 1);animation:RoundGauge__alertAnim 1s cubic-bezier(0.34, 1.56, 0.64, 1) infinite}.RoundGauge__alert--bad{fill:#df3e3e;transition:opacity .6s cubic-bezier(0.25, 1, 0.5, 1);animation:RoundGauge__alertAnim 1s cubic-bezier(0.34, 1.56, 0.64, 1) infinite}.RoundGauge__alert--label{fill:#8b9bb0;transition:opacity .6s cubic-bezier(0.25, 1, 0.5, 1);animation:RoundGauge__alertAnim 1s cubic-bezier(0.34, 1.56, 0.64, 1) infinite}@keyframes RoundGauge__alertAnim{0%{opacity:.1}50%{opacity:1}100%{opacity:.1}}.Section{position:relative;margin-bottom:.5em;background-color:#191919;background-color:rgba(0,0,0,.33);box-sizing:border-box}.Section:last-child{margin-bottom:0}.Section__title{position:relative;padding:.5em;border-bottom:.1666666667em solid #4972a1}.Section__titleText{font-size:1.1666666667em;font-weight:bold;color:#fff}.Section__buttons{position:absolute;display:inline-block;right:.5em;margin-top:-.0833333333em}.Section__rest{position:relative}.Section__content{padding:.66em .5em}.Section--fitted>.Section__rest>.Section__content{padding:0}.Section--fill{display:flex;flex-direction:column;height:100%}.Section--fill>.Section__rest{flex-grow:1}.Section--fill>.Section__rest>.Section__content{height:100%}.Section--fill.Section--scrollable>.Section__rest>.Section__content{position:absolute;top:0;left:0;right:0;bottom:0}.Section--fill.Section--iefix{display:table !important;width:100% !important;height:100% !important;border-collapse:collapse;border-spacing:0}.Section--fill.Section--iefix>.Section__rest{display:table-row !important;height:100% !important}.Section--scrollable{overflow-x:hidden;overflow-y:hidden}.Section--scrollable>.Section__rest>.Section__content{overflow-y:scroll;overflow-x:hidden}.Section .Section{background-color:transparent;margin-left:-0.5em;margin-right:-0.5em}.Section .Section:first-child{margin-top:-0.5em}.Section .Section .Section__titleText{font-size:1.0833333333em}.Section .Section .Section .Section__titleText{font-size:1em}.SectionEx .Section__title{display:flex}.SectionEx .Section__titleText{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;flex:auto}.SectionEx .Section__buttons{position:inherit;right:inherit;flex:none}.SectionEx__capitalize .Section__titleText{text-transform:capitalize}.Slider{cursor:e-resize}.Slider__cursorOffset{position:absolute;top:0;left:0;bottom:0;transition:none !important}.Slider__cursor{position:absolute;top:0;right:-.0833333333em;bottom:0;width:0;border-left:.1666666667em solid #fff}.Slider__pointer{position:absolute;right:-.4166666667em;bottom:-.3333333333em;width:0;height:0;border-left:.4166666667em solid transparent;border-right:.4166666667em solid transparent;border-bottom:.4166666667em solid #fff}.Slider__popupValue{position:absolute;right:0;top:-2rem;font-size:1rem;padding:.25rem .5rem;color:#fff;background-color:#000;transform:translateX(50%);white-space:nowrap}.Divider--horizontal{margin:.5em 0}.Divider--horizontal:not(.Divider--hidden){border-top:.1666666667em solid rgba(255,255,255,.1)}.Divider--vertical{height:100%;margin:0 .5em}.Divider--vertical:not(.Divider--hidden){border-left:.1666666667em solid rgba(255,255,255,.1)}.Stack--fill{height:100%}.Stack--horizontal>.Stack__item{margin-left:.5em}.Stack--horizontal>.Stack__item:first-child{margin-left:0}.Stack--vertical>.Stack__item{margin-top:.5em}.Stack--vertical>.Stack__item:first-child{margin-top:0}.Stack--zebra>.Stack__item:nth-child(even){background-color:rgba(0,0,0,.33)}.Stack--horizontal>.Stack__divider:not(.Stack__divider--hidden){border-left:.1666666667em solid rgba(255,255,255,.1)}.Stack--vertical>.Stack__divider:not(.Stack__divider--hidden){border-top:.1666666667em solid rgba(255,255,255,.1)}.Table{display:table;width:100%;border-collapse:collapse;border-spacing:0;margin:0}.Table--collapsing{width:auto}.Table__row{display:table-row}.Table__cell{display:table-cell;padding:0 .25em}.Table__cell:first-child{padding-left:0}.Table__cell:last-child{padding-right:0}.Table__row--header .Table__cell,.Table__cell--header{font-weight:bold;padding-bottom:.5em}.Table__cell--collapsing{width:1%;white-space:nowrap}.Tabs{display:flex;align-items:stretch;overflow:hidden;background-color:rgba(0,0,0,.33)}.Tabs--fill{height:100%}.Section .Tabs{background-color:transparent}.Section:not(.Section--fitted) .Tabs{margin:0 -0.5em .5em}.Section:not(.Section--fitted) .Tabs:first-child{margin-top:-0.5em}.Tabs--vertical{flex-direction:column;padding:.25em 0 .25em .25em}.Tabs--horizontal{margin-bottom:.5em;padding:.25em .25em 0 .25em}.Tabs--horizontal:last-child{margin-bottom:0}.Tabs__Tab{flex-grow:0}.Tabs--fluid .Tabs__Tab{flex-grow:1}.Tab{display:flex;align-items:center;justify-content:space-between;background-color:transparent;color:rgba(255,255,255,.5);min-height:2.25em;min-width:4em}.Tab:not(.Tab--selected):hover{background-color:rgba(255,255,255,.075)}.Tab--selected{background-color:rgba(255,255,255,.125);color:#dfe7f0}.Tab__text{flex-grow:1;margin:0 .5em}.Tab__left{min-width:1.5em;text-align:center;margin-left:.25em}.Tab__right{min-width:1.5em;text-align:center;margin-right:.25em}.Tabs--horizontal .Tab{border-top:.1666666667em solid transparent;border-bottom:.1666666667em solid transparent;border-top-left-radius:.25em;border-top-right-radius:.25em}.Tabs--horizontal .Tab--selected{border-bottom:.1666666667em solid #d4dfec}.Tabs--vertical .Tab{min-height:2em;border-left:.1666666667em solid transparent;border-right:.1666666667em solid transparent;border-top-left-radius:.25em;border-bottom-left-radius:.25em}.Tabs--vertical .Tab--selected{border-right:.1666666667em solid #d4dfec}.Tab--selected.Tab--color--black{color:#535353}.Tabs--horizontal .Tab--selected.Tab--color--black{border-bottom-color:#1a1a1a}.Tabs--vertical .Tab--selected.Tab--color--black{border-right-color:#1a1a1a}.Tab--selected.Tab--color--white{color:#fff}.Tabs--horizontal .Tab--selected.Tab--color--white{border-bottom-color:#fff}.Tabs--vertical .Tab--selected.Tab--color--white{border-right-color:#fff}.Tab--selected.Tab--color--red{color:#e76e6e}.Tabs--horizontal .Tab--selected.Tab--color--red{border-bottom-color:#df3e3e}.Tabs--vertical .Tab--selected.Tab--color--red{border-right-color:#df3e3e}.Tab--selected.Tab--color--orange{color:#f69f66}.Tabs--horizontal .Tab--selected.Tab--color--orange{border-bottom-color:#f37f33}.Tabs--vertical .Tab--selected.Tab--color--orange{border-right-color:#f37f33}.Tab--selected.Tab--color--yellow{color:#fce358}.Tabs--horizontal .Tab--selected.Tab--color--yellow{border-bottom-color:#fbda21}.Tabs--vertical .Tab--selected.Tab--color--yellow{border-right-color:#fbda21}.Tab--selected.Tab--color--olive{color:#d8eb55}.Tabs--horizontal .Tab--selected.Tab--color--olive{border-bottom-color:#cbe41c}.Tabs--vertical .Tab--selected.Tab--color--olive{border-right-color:#cbe41c}.Tab--selected.Tab--color--green{color:#53e074}.Tabs--horizontal .Tab--selected.Tab--color--green{border-bottom-color:#25ca4c}.Tabs--vertical .Tab--selected.Tab--color--green{border-right-color:#25ca4c}.Tab--selected.Tab--color--teal{color:#21fff5}.Tabs--horizontal .Tab--selected.Tab--color--teal{border-bottom-color:#00d6cc}.Tabs--vertical .Tab--selected.Tab--color--teal{border-right-color:#00d6cc}.Tab--selected.Tab--color--blue{color:#62aee6}.Tabs--horizontal .Tab--selected.Tab--color--blue{border-bottom-color:#2e93de}.Tabs--vertical .Tab--selected.Tab--color--blue{border-right-color:#2e93de}.Tab--selected.Tab--color--violet{color:#9676db}.Tabs--horizontal .Tab--selected.Tab--color--violet{border-bottom-color:#7349cf}.Tabs--vertical .Tab--selected.Tab--color--violet{border-right-color:#7349cf}.Tab--selected.Tab--color--purple{color:#c274db}.Tabs--horizontal .Tab--selected.Tab--color--purple{border-bottom-color:#ad45d0}.Tabs--vertical .Tab--selected.Tab--color--purple{border-right-color:#ad45d0}.Tab--selected.Tab--color--pink{color:#ea79b9}.Tabs--horizontal .Tab--selected.Tab--color--pink{border-bottom-color:#e34da1}.Tabs--vertical .Tab--selected.Tab--color--pink{border-right-color:#e34da1}.Tab--selected.Tab--color--brown{color:#ca9775}.Tabs--horizontal .Tab--selected.Tab--color--brown{border-bottom-color:#b97447}.Tabs--vertical .Tab--selected.Tab--color--brown{border-right-color:#b97447}.Tab--selected.Tab--color--grey{color:#a3a3a3}.Tabs--horizontal .Tab--selected.Tab--color--grey{border-bottom-color:#848484}.Tabs--vertical .Tab--selected.Tab--color--grey{border-right-color:#848484}.Tab--selected.Tab--color--light-grey{color:#c6c6c6}.Tabs--horizontal .Tab--selected.Tab--color--light-grey{border-bottom-color:#b3b3b3}.Tabs--vertical .Tab--selected.Tab--color--light-grey{border-right-color:#b3b3b3}.Tab--selected.Tab--color--good{color:#8cd95a}.Tabs--horizontal .Tab--selected.Tab--color--good{border-bottom-color:#68c22d}.Tabs--vertical .Tab--selected.Tab--color--good{border-right-color:#68c22d}.Tab--selected.Tab--color--average{color:#f5b35e}.Tabs--horizontal .Tab--selected.Tab--color--average{border-bottom-color:#f29a29}.Tabs--vertical .Tab--selected.Tab--color--average{border-right-color:#f29a29}.Tab--selected.Tab--color--bad{color:#e76e6e}.Tabs--horizontal .Tab--selected.Tab--color--bad{border-bottom-color:#df3e3e}.Tabs--vertical .Tab--selected.Tab--color--bad{border-right-color:#df3e3e}.Tab--selected.Tab--color--label{color:#a8b4c4}.Tabs--horizontal .Tab--selected.Tab--color--label{border-bottom-color:#8b9bb0}.Tabs--vertical .Tab--selected.Tab--color--label{border-right-color:#8b9bb0}.Input{position:relative;display:inline-block;width:10em;border:.0833333333em solid #88bfff;border:.0833333333em solid rgba(136,191,255,.75);border-radius:.16em;color:#fff;background-color:#0a0a0a;padding:0 .3333333333em;margin-right:.1666666667em;line-height:1.4166666667em;overflow:visible}.Input--fluid{display:block;width:auto}.Input__baseline{display:inline-block;color:transparent}.Input__input{display:block;position:absolute;top:0;bottom:0;left:0;right:0;border:0;outline:0;width:100%;font-size:1em;line-height:1.4166666667em;height:1.4166666667em;margin:0;padding:0 .5em;font-family:Verdana,sans-serif;background-color:transparent;color:#fff;color:inherit}.Input__input:-ms-input-placeholder{font-style:italic;color:#777;color:rgba(255,255,255,.45)}.Input--monospace .Input__input{font-family:"Consolas",monospace}.TextArea{position:relative;display:inline-block;border:.0833333333em solid #88bfff;border:.0833333333em solid rgba(136,191,255,.75);border-radius:.16em;background-color:#0a0a0a;margin-right:.1666666667em;line-height:1.4166666667em;box-sizing:border-box;width:100%}.TextArea--fluid{display:block;width:auto;height:auto}.TextArea__textarea{display:block;position:absolute;top:0;bottom:0;left:0;right:0;border:0;outline:0;width:100%;height:100%;font-size:1em;line-height:1.4166666667em;min-height:1.4166666667em;margin:0;padding:0 .5em;font-family:inherit;background-color:transparent;color:inherit;box-sizing:border-box;word-wrap:break-word;overflow:hidden}.TextArea__textarea:-ms-input-placeholder{font-style:italic;color:#777;color:rgba(255,255,255,.45)}.Tooltip{z-index:2;padding:.5em .75em;pointer-events:none;text-align:left;transition:opacity 150ms ease-out;background-color:#000;color:#fff;box-shadow:.1em .1em 1.25em -0.1em rgba(0,0,0,.5);border-radius:.16em;max-width:20.8333333333em}.TooltipOverflow{display:inline-block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.list-search-interface__search-option.Button--color--transparent{transition:initial}.Button{position:relative;display:inline-block;line-height:1.667em;padding:0 .5em;margin-right:.1666666667em;white-space:nowrap;outline:0;border-radius:.16em;margin-bottom:.1666666667em;user-select:none;-ms-user-select:none}.Button:last-child{margin-right:0;margin-bottom:0}.Button .fa,.Button .fa-solid,.Button .fa-regular{margin-left:0;margin-right:0;min-width:1.333em;text-align:center}.Button--hasContent .fa,.Button--hasContent .fa-solid,.Button--hasContent .fa-regular{margin-right:.25em}.Button--hasContent.Button--iconPosition--right .fa,.Button--hasContent.Button--iconPosition--right .fas,.Button--hasContent.Button--iconPosition--right .far{margin-right:0px;margin-left:3px}.Button--ellipsis{overflow:hidden;text-overflow:ellipsis}.Button--ellipsis .Button__content{overflow:hidden;text-overflow:ellipsis}.Button--fluid{display:block;margin-left:0;margin-right:0}.Button--circular{border-radius:50%}.Button--compact{padding:0 .25em;line-height:1.333em}.Button--color--black{transition:color 50ms,background-color 50ms;background-color:#000;color:#fff}.Button--color--black:hover{transition:color 0ms,background-color 0ms}.Button--color--black:focus{transition:color 100ms,background-color 100ms}.Button--color--black:hover,.Button--color--black:focus{background-color:#131313;color:#fff}.Button--color--black:active{background-color:#262626}.Button--color--white{transition:color 50ms,background-color 50ms;background-color:#d9d9d9;color:#000}.Button--color--white:hover{transition:color 0ms,background-color 0ms}.Button--color--white:focus{transition:color 100ms,background-color 100ms}.Button--color--white:hover,.Button--color--white:focus{background-color:#f8f8f8;color:#000}.Button--color--white:active{background-color:#fbfbfb}.Button--color--red{transition:color 50ms,background-color 50ms;background-color:#bd2020;color:#fff}.Button--color--red:hover{transition:color 0ms,background-color 0ms}.Button--color--red:focus{transition:color 100ms,background-color 100ms}.Button--color--red:hover,.Button--color--red:focus{background-color:#dc4848;color:#fff}.Button--color--red:active{background-color:#e78484}.Button--color--orange{transition:color 50ms,background-color 50ms;background-color:#d95e0c;color:#fff}.Button--color--orange:hover{transition:color 0ms,background-color 0ms}.Button--color--orange:focus{transition:color 100ms,background-color 100ms}.Button--color--orange:hover,.Button--color--orange:focus{background-color:#f0853f;color:#fff}.Button--color--orange:active{background-color:#f5b082}.Button--color--yellow{transition:color 50ms,background-color 50ms;background-color:#d9b804;color:#000}.Button--color--yellow:hover{transition:color 0ms,background-color 0ms}.Button--color--yellow:focus{transition:color 100ms,background-color 100ms}.Button--color--yellow:hover,.Button--color--yellow:focus{background-color:#f5d72e;color:#000}.Button--color--yellow:active{background-color:#f9e572}.Button--color--olive{transition:color 50ms,background-color 50ms;background-color:#9aad14;color:#fff}.Button--color--olive:hover{transition:color 0ms,background-color 0ms}.Button--color--olive:focus{transition:color 100ms,background-color 100ms}.Button--color--olive:hover,.Button--color--olive:focus{background-color:#c4da2b;color:#fff}.Button--color--olive:active{background-color:#d6e761}.Button--color--green{transition:color 50ms,background-color 50ms;background-color:#1b9638;color:#fff}.Button--color--green:hover{transition:color 0ms,background-color 0ms}.Button--color--green:focus{transition:color 100ms,background-color 100ms}.Button--color--green:hover,.Button--color--green:focus{background-color:#32c154;color:#fff}.Button--color--green:active{background-color:#59da78}.Button--color--teal{transition:color 50ms,background-color 50ms;background-color:#009a93;color:#fff}.Button--color--teal:hover{transition:color 0ms,background-color 0ms}.Button--color--teal:focus{transition:color 100ms,background-color 100ms}.Button--color--teal:hover,.Button--color--teal:focus{background-color:#13c4bc;color:#fff}.Button--color--teal:active{background-color:#26eee5}.Button--color--blue{transition:color 50ms,background-color 50ms;background-color:#1c71b1;color:#fff}.Button--color--blue:hover{transition:color 0ms,background-color 0ms}.Button--color--blue:focus{transition:color 100ms,background-color 100ms}.Button--color--blue:hover,.Button--color--blue:focus{background-color:#3a95d9;color:#fff}.Button--color--blue:active{background-color:#73b3e5}.Button--color--violet{transition:color 50ms,background-color 50ms;background-color:#552dab;color:#fff}.Button--color--violet:hover{transition:color 0ms,background-color 0ms}.Button--color--violet:focus{transition:color 100ms,background-color 100ms}.Button--color--violet:hover,.Button--color--violet:focus{background-color:#7953cc;color:#fff}.Button--color--violet:active{background-color:#a389dd}.Button--color--purple{transition:color 50ms,background-color 50ms;background-color:#8b2baa;color:#fff}.Button--color--purple:hover{transition:color 0ms,background-color 0ms}.Button--color--purple:focus{transition:color 100ms,background-color 100ms}.Button--color--purple:hover,.Button--color--purple:focus{background-color:#ad4fcd;color:#fff}.Button--color--purple:active{background-color:#c785dd}.Button--color--pink{transition:color 50ms,background-color 50ms;background-color:#cf2082;color:#fff}.Button--color--pink:hover{transition:color 0ms,background-color 0ms}.Button--color--pink:focus{transition:color 100ms,background-color 100ms}.Button--color--pink:hover,.Button--color--pink:focus{background-color:#e257a5;color:#fff}.Button--color--pink:active{background-color:#ee96c7}.Button--color--brown{transition:color 50ms,background-color 50ms;background-color:#8c5836;color:#fff}.Button--color--brown:hover{transition:color 0ms,background-color 0ms}.Button--color--brown:focus{transition:color 100ms,background-color 100ms}.Button--color--brown:hover,.Button--color--brown:focus{background-color:#b47851;color:#fff}.Button--color--brown:active{background-color:#ca9c7e}.Button--color--grey{transition:color 50ms,background-color 50ms;background-color:#646464;color:#fff}.Button--color--grey:hover{transition:color 0ms,background-color 0ms}.Button--color--grey:focus{transition:color 100ms,background-color 100ms}.Button--color--grey:hover,.Button--color--grey:focus{background-color:#868686;color:#fff}.Button--color--grey:active{background-color:#a8a8a8}.Button--color--light-grey{transition:color 50ms,background-color 50ms;background-color:#919191;color:#fff}.Button--color--light-grey:hover{transition:color 0ms,background-color 0ms}.Button--color--light-grey:focus{transition:color 100ms,background-color 100ms}.Button--color--light-grey:hover,.Button--color--light-grey:focus{background-color:#bababa;color:#fff}.Button--color--light-grey:active{background-color:#e2e2e2}.Button--color--good{transition:color 50ms,background-color 50ms;background-color:#4d9121;color:#fff}.Button--color--good:hover{transition:color 0ms,background-color 0ms}.Button--color--good:focus{transition:color 100ms,background-color 100ms}.Button--color--good:hover,.Button--color--good:focus{background-color:#6cba39;color:#fff}.Button--color--good:active{background-color:#8ed55f}.Button--color--average{transition:color 50ms,background-color 50ms;background-color:#cd7a0d;color:#fff}.Button--color--average:hover{transition:color 0ms,background-color 0ms}.Button--color--average:focus{transition:color 100ms,background-color 100ms}.Button--color--average:hover,.Button--color--average:focus{background-color:#ed9d35;color:#fff}.Button--color--average:active{background-color:#f3bd76}.Button--color--bad{transition:color 50ms,background-color 50ms;background-color:#bd2020;color:#fff}.Button--color--bad:hover{transition:color 0ms,background-color 0ms}.Button--color--bad:focus{transition:color 100ms,background-color 100ms}.Button--color--bad:hover,.Button--color--bad:focus{background-color:#dc4848;color:#fff}.Button--color--bad:active{background-color:#e78484}.Button--color--label{transition:color 50ms,background-color 50ms;background-color:#657a94;color:#fff}.Button--color--label:hover{transition:color 0ms,background-color 0ms}.Button--color--label:focus{transition:color 100ms,background-color 100ms}.Button--color--label:hover,.Button--color--label:focus{background-color:#91a1b3;color:#fff}.Button--color--label:active{background-color:#bec7d3}.Button--color--default{transition:color 50ms,background-color 50ms;background-color:#3e6189;color:#fff}.Button--color--default:hover{transition:color 0ms,background-color 0ms}.Button--color--default:focus{transition:color 100ms,background-color 100ms}.Button--color--default:hover,.Button--color--default:focus{background-color:#5c83b0;color:#fff}.Button--color--default:active{background-color:#89a6c6}.Button--color--caution{transition:color 50ms,background-color 50ms;background-color:#d9b804;color:#000}.Button--color--caution:hover{transition:color 0ms,background-color 0ms}.Button--color--caution:focus{transition:color 100ms,background-color 100ms}.Button--color--caution:hover,.Button--color--caution:focus{background-color:#f5d72e;color:#000}.Button--color--caution:active{background-color:#f9e572}.Button--color--danger{transition:color 50ms,background-color 50ms;background-color:#bd2020;color:#fff}.Button--color--danger:hover{transition:color 0ms,background-color 0ms}.Button--color--danger:focus{transition:color 100ms,background-color 100ms}.Button--color--danger:hover,.Button--color--danger:focus{background-color:#dc4848;color:#fff}.Button--color--danger:active{background-color:#e78484}.Button--color--transparent{transition:color 50ms,background-color 50ms;background-color:#252525;color:#fff;background-color:rgba(37,37,37,0);color:rgba(255,255,255,.5)}.Button--color--transparent:hover{transition:color 0ms,background-color 0ms}.Button--color--transparent:focus{transition:color 100ms,background-color 100ms}.Button--color--transparent:hover,.Button--color--transparent:focus{background-color:#3e3e3e;color:#fff}.Button--color--transparent:active{background-color:#565656}.Button--disabled{background-color:#999 !important}.Button--selected{transition:color 50ms,background-color 50ms;background-color:#1b9638;color:#fff}.Button--selected:hover{transition:color 0ms,background-color 0ms}.Button--selected:focus{transition:color 100ms,background-color 100ms}.Button--selected:hover,.Button--selected:focus{background-color:#32c154;color:#fff}.Button--selected:active{background-color:#59da78}.Button--flex{display:inline-flex;flex-direction:column}.Button--flex--fluid{width:100%}.Button--verticalAlignContent--top{justify-content:flex-start}.Button--verticalAlignContent--middle{justify-content:center}.Button--verticalAlignContent--bottom{justify-content:flex-end}.Button__content{display:block;align-self:stretch}.AccessPanel-wires-btn.Button--selected{background-color:#cd7a0d !important}.Airlock-hack-button{font-family:monospace;border-width:.1666666667em;border-style:outset;border-color:#0a0;outline:.0833333333em solid #007a00}.Airlock-hack-button.Button--disabled{background-color:#4a6a4a}.Airlock-hack-button.Button--color--default{background-color:lime}.AlertModal__Message{text-align:center;justify-content:center}.AlertModal__Buttons{justify-content:center}.AlertModal__Loader{width:100%;position:relative;height:4px}.AlertModal__LoaderProgress{position:absolute;transition:background-color 500ms ease-out,width 500ms ease-out;background-color:#3e6189;height:100%}.cashreg__ownerbutton,.cashreg__pay,.cashreg__tip{display:flex;justify-content:center;align-items:center}.cashreg__ownerbutton>*,.cashreg__pay>*,.cashreg__tip>*{padding:.5em .1em}.cashreg__centerpart{font-size:1.5rem}.cashreg__amount:hover{background-color:#439de1}.cashreg__table{width:80%}.cashreg__table_cellright{text-align:right}.react-colorful{position:relative;display:flex;flex-direction:column;width:200px;height:200px;user-select:none;cursor:default}.react-colorful__saturation_value{position:relative;flex-grow:1;border-color:transparent;border-bottom:12px solid #000;border-radius:8px 8px 0 0;background-image:linear-gradient(to top, black, rgba(0, 0, 0, 0)),linear-gradient(to right, white, rgba(255, 255, 255, 0))}.react-colorful__pointer-fill,.react-colorful__alpha-gradient{content:"";position:absolute;left:0;top:0;right:0;bottom:0;pointer-events:none;border-radius:inherit}.react-colorful__alpha-gradient,.react-colorful__saturation_value{box-shadow:inset 0 0 0 1px rgba(0,0,0,.05)}.react-colorful__hue,.react-colorful__r,.react-colorful__g,.react-colorful__b,.react-colorful__alpha,.react-colorful__saturation,.react-colorful__value{position:relative;height:24px}.react-colorful__hue{background:linear-gradient(to right, #f00 0%, #ff0 17%, #0f0 33%, #0ff 50%, #00f 67%, #f0f 83%, #f00 100%)}.react-colorful__r{background:linear-gradient(to right, #000, #f00)}.react-colorful__g{background:linear-gradient(to right, #000, #0f0)}.react-colorful__b{background:linear-gradient(to right, #000, #00f)}.react-colorful__last-control{border-radius:0 0 8px 8px}.react-colorful__interactive{position:absolute;left:0;top:0;right:0;bottom:0;border-radius:inherit;outline:none;touch-action:none}.react-colorful__pointer{position:absolute;z-index:1;box-sizing:border-box;width:28px;height:28px;transform:translate(-50%, -50%);background-color:#cfcfcf;border:2px solid #cfcfcf;border-radius:50%;box-shadow:0 2px 5px rgba(0,0,0,.4)}.react-colorful__interactive:focus .react-colorful__pointer{transform:translate(-50%, -50%) scale(1.1);background-color:#fff;border-color:#fff}.react-colorful__alpha,.react-colorful__alpha-pointer{background-color:#fff;background-image:url('data:image/svg+xml,<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill-opacity=".05"><rect x="8" width="8" height="8"/><rect y="8" width="8" height="8"/></svg>')}.react-colorful__saturation-pointer,.react-colorful__value-pointer,.react-colorful__hue-pointer,.react-colorful__r-pointer,.react-colorful__g-pointer,.react-colorful__b-pointer{z-index:1;width:20px;height:20px}.react-colorful__saturation_value-pointer{z-index:3}.Button{position:relative;display:inline-block;line-height:1.667em;padding:0 .5em;margin-right:.1666666667em;white-space:nowrap;outline:0;border-radius:.16em;margin-bottom:.1666666667em;user-select:none;-ms-user-select:none}.Button:last-child{margin-right:0;margin-bottom:0}.Button .fa,.Button .fa-solid,.Button .fa-regular{margin-left:0;margin-right:0;min-width:1.333em;text-align:center}.Button--hasContent .fa,.Button--hasContent .fa-solid,.Button--hasContent .fa-regular{margin-right:.25em}.Button--hasContent.Button--iconPosition--right .fa,.Button--hasContent.Button--iconPosition--right .fas,.Button--hasContent.Button--iconPosition--right .far{margin-right:0px;margin-left:3px}.Button--ellipsis{overflow:hidden;text-overflow:ellipsis}.Button--ellipsis .Button__content{overflow:hidden;text-overflow:ellipsis}.Button--fluid{display:block;margin-left:0;margin-right:0}.Button--circular{border-radius:50%}.Button--compact{padding:0 .25em;line-height:1.333em}.Button--color--black{transition:color 50ms,background-color 50ms;background-color:#000;color:#fff}.Button--color--black:hover{transition:color 0ms,background-color 0ms}.Button--color--black:focus{transition:color 100ms,background-color 100ms}.Button--color--black:hover,.Button--color--black:focus{background-color:#131313;color:#fff}.Button--color--black:active{background-color:#262626}.Button--color--white{transition:color 50ms,background-color 50ms;background-color:#d9d9d9;color:#000}.Button--color--white:hover{transition:color 0ms,background-color 0ms}.Button--color--white:focus{transition:color 100ms,background-color 100ms}.Button--color--white:hover,.Button--color--white:focus{background-color:#f8f8f8;color:#000}.Button--color--white:active{background-color:#fbfbfb}.Button--color--red{transition:color 50ms,background-color 50ms;background-color:#bd2020;color:#fff}.Button--color--red:hover{transition:color 0ms,background-color 0ms}.Button--color--red:focus{transition:color 100ms,background-color 100ms}.Button--color--red:hover,.Button--color--red:focus{background-color:#dc4848;color:#fff}.Button--color--red:active{background-color:#e78484}.Button--color--orange{transition:color 50ms,background-color 50ms;background-color:#d95e0c;color:#fff}.Button--color--orange:hover{transition:color 0ms,background-color 0ms}.Button--color--orange:focus{transition:color 100ms,background-color 100ms}.Button--color--orange:hover,.Button--color--orange:focus{background-color:#f0853f;color:#fff}.Button--color--orange:active{background-color:#f5b082}.Button--color--yellow{transition:color 50ms,background-color 50ms;background-color:#d9b804;color:#000}.Button--color--yellow:hover{transition:color 0ms,background-color 0ms}.Button--color--yellow:focus{transition:color 100ms,background-color 100ms}.Button--color--yellow:hover,.Button--color--yellow:focus{background-color:#f5d72e;color:#000}.Button--color--yellow:active{background-color:#f9e572}.Button--color--olive{transition:color 50ms,background-color 50ms;background-color:#9aad14;color:#fff}.Button--color--olive:hover{transition:color 0ms,background-color 0ms}.Button--color--olive:focus{transition:color 100ms,background-color 100ms}.Button--color--olive:hover,.Button--color--olive:focus{background-color:#c4da2b;color:#fff}.Button--color--olive:active{background-color:#d6e761}.Button--color--green{transition:color 50ms,background-color 50ms;background-color:#1b9638;color:#fff}.Button--color--green:hover{transition:color 0ms,background-color 0ms}.Button--color--green:focus{transition:color 100ms,background-color 100ms}.Button--color--green:hover,.Button--color--green:focus{background-color:#32c154;color:#fff}.Button--color--green:active{background-color:#59da78}.Button--color--teal{transition:color 50ms,background-color 50ms;background-color:#009a93;color:#fff}.Button--color--teal:hover{transition:color 0ms,background-color 0ms}.Button--color--teal:focus{transition:color 100ms,background-color 100ms}.Button--color--teal:hover,.Button--color--teal:focus{background-color:#13c4bc;color:#fff}.Button--color--teal:active{background-color:#26eee5}.Button--color--blue{transition:color 50ms,background-color 50ms;background-color:#1c71b1;color:#fff}.Button--color--blue:hover{transition:color 0ms,background-color 0ms}.Button--color--blue:focus{transition:color 100ms,background-color 100ms}.Button--color--blue:hover,.Button--color--blue:focus{background-color:#3a95d9;color:#fff}.Button--color--blue:active{background-color:#73b3e5}.Button--color--violet{transition:color 50ms,background-color 50ms;background-color:#552dab;color:#fff}.Button--color--violet:hover{transition:color 0ms,background-color 0ms}.Button--color--violet:focus{transition:color 100ms,background-color 100ms}.Button--color--violet:hover,.Button--color--violet:focus{background-color:#7953cc;color:#fff}.Button--color--violet:active{background-color:#a389dd}.Button--color--purple{transition:color 50ms,background-color 50ms;background-color:#8b2baa;color:#fff}.Button--color--purple:hover{transition:color 0ms,background-color 0ms}.Button--color--purple:focus{transition:color 100ms,background-color 100ms}.Button--color--purple:hover,.Button--color--purple:focus{background-color:#ad4fcd;color:#fff}.Button--color--purple:active{background-color:#c785dd}.Button--color--pink{transition:color 50ms,background-color 50ms;background-color:#cf2082;color:#fff}.Button--color--pink:hover{transition:color 0ms,background-color 0ms}.Button--color--pink:focus{transition:color 100ms,background-color 100ms}.Button--color--pink:hover,.Button--color--pink:focus{background-color:#e257a5;color:#fff}.Button--color--pink:active{background-color:#ee96c7}.Button--color--brown{transition:color 50ms,background-color 50ms;background-color:#8c5836;color:#fff}.Button--color--brown:hover{transition:color 0ms,background-color 0ms}.Button--color--brown:focus{transition:color 100ms,background-color 100ms}.Button--color--brown:hover,.Button--color--brown:focus{background-color:#b47851;color:#fff}.Button--color--brown:active{background-color:#ca9c7e}.Button--color--grey{transition:color 50ms,background-color 50ms;background-color:#646464;color:#fff}.Button--color--grey:hover{transition:color 0ms,background-color 0ms}.Button--color--grey:focus{transition:color 100ms,background-color 100ms}.Button--color--grey:hover,.Button--color--grey:focus{background-color:#868686;color:#fff}.Button--color--grey:active{background-color:#a8a8a8}.Button--color--light-grey{transition:color 50ms,background-color 50ms;background-color:#919191;color:#fff}.Button--color--light-grey:hover{transition:color 0ms,background-color 0ms}.Button--color--light-grey:focus{transition:color 100ms,background-color 100ms}.Button--color--light-grey:hover,.Button--color--light-grey:focus{background-color:#bababa;color:#fff}.Button--color--light-grey:active{background-color:#e2e2e2}.Button--color--good{transition:color 50ms,background-color 50ms;background-color:#4d9121;color:#fff}.Button--color--good:hover{transition:color 0ms,background-color 0ms}.Button--color--good:focus{transition:color 100ms,background-color 100ms}.Button--color--good:hover,.Button--color--good:focus{background-color:#6cba39;color:#fff}.Button--color--good:active{background-color:#8ed55f}.Button--color--average{transition:color 50ms,background-color 50ms;background-color:#cd7a0d;color:#fff}.Button--color--average:hover{transition:color 0ms,background-color 0ms}.Button--color--average:focus{transition:color 100ms,background-color 100ms}.Button--color--average:hover,.Button--color--average:focus{background-color:#ed9d35;color:#fff}.Button--color--average:active{background-color:#f3bd76}.Button--color--bad{transition:color 50ms,background-color 50ms;background-color:#bd2020;color:#fff}.Button--color--bad:hover{transition:color 0ms,background-color 0ms}.Button--color--bad:focus{transition:color 100ms,background-color 100ms}.Button--color--bad:hover,.Button--color--bad:focus{background-color:#dc4848;color:#fff}.Button--color--bad:active{background-color:#e78484}.Button--color--label{transition:color 50ms,background-color 50ms;background-color:#657a94;color:#fff}.Button--color--label:hover{transition:color 0ms,background-color 0ms}.Button--color--label:focus{transition:color 100ms,background-color 100ms}.Button--color--label:hover,.Button--color--label:focus{background-color:#91a1b3;color:#fff}.Button--color--label:active{background-color:#bec7d3}.Button--color--default{transition:color 50ms,background-color 50ms;background-color:#3e6189;color:#fff}.Button--color--default:hover{transition:color 0ms,background-color 0ms}.Button--color--default:focus{transition:color 100ms,background-color 100ms}.Button--color--default:hover,.Button--color--default:focus{background-color:#5c83b0;color:#fff}.Button--color--default:active{background-color:#89a6c6}.Button--color--caution{transition:color 50ms,background-color 50ms;background-color:#d9b804;color:#000}.Button--color--caution:hover{transition:color 0ms,background-color 0ms}.Button--color--caution:focus{transition:color 100ms,background-color 100ms}.Button--color--caution:hover,.Button--color--caution:focus{background-color:#f5d72e;color:#000}.Button--color--caution:active{background-color:#f9e572}.Button--color--danger{transition:color 50ms,background-color 50ms;background-color:#bd2020;color:#fff}.Button--color--danger:hover{transition:color 0ms,background-color 0ms}.Button--color--danger:focus{transition:color 100ms,background-color 100ms}.Button--color--danger:hover,.Button--color--danger:focus{background-color:#dc4848;color:#fff}.Button--color--danger:active{background-color:#e78484}.Button--color--transparent{transition:color 50ms,background-color 50ms;background-color:#252525;color:#fff;background-color:rgba(37,37,37,0);color:rgba(255,255,255,.5)}.Button--color--transparent:hover{transition:color 0ms,background-color 0ms}.Button--color--transparent:focus{transition:color 100ms,background-color 100ms}.Button--color--transparent:hover,.Button--color--transparent:focus{background-color:#3e3e3e;color:#fff}.Button--color--transparent:active{background-color:#565656}.Button--disabled{background-color:#999 !important}.Button--selected{transition:color 50ms,background-color 50ms;background-color:#1b9638;color:#fff}.Button--selected:hover{transition:color 0ms,background-color 0ms}.Button--selected:focus{transition:color 100ms,background-color 100ms}.Button--selected:hover,.Button--selected:focus{background-color:#32c154;color:#fff}.Button--selected:active{background-color:#59da78}.Button--flex{display:inline-flex;flex-direction:column}.Button--flex--fluid{width:100%}.Button--verticalAlignContent--top{justify-content:flex-start}.Button--verticalAlignContent--middle{justify-content:center}.Button--verticalAlignContent--bottom{justify-content:flex-end}.Button__content{display:block;align-self:stretch}.ComUplink .Button--color--Main{transition:color 50ms,background-color 50ms;background-color:#db2828;color:#fff}.ComUplink .Button--color--Main:hover{transition:color 0ms,background-color 0ms}.ComUplink .Button--color--Main:focus{transition:color 100ms,background-color 100ms}.ComUplink .Button--color--Main:hover,.ComUplink .Button--color--Main:focus{background-color:#e66b6b;color:#fff}.ComUplink .Button--color--Main:active{background-color:#f1acac}.ComUplink__Points--Main{color:#db2828}.ComUplink__Row:not(:last-child){border-bottom:2px solid #3e6189}.boardgame__titlebar{position:fixed;top:4px;right:80px;padding:2px;z-index:2}.boardgame__titlebar>*{margin:0 4px}.boardgame__window{height:calc(100% - 0.25px);display:flex;flex-direction:row;background-color:#211913}.boardgame__window*{-webkit-touch-callout:none;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.boardgame__helpmodal{z-index:20}.boardgame__helpmodal>.Dimmer__inner{background-color:rgba(0,0,0,.8);padding:15px;width:60%}.boardgame__wrapper{width:100%;overflow:hidden}.boardgame__heldpiece{position:fixed;z-index:4;pointer-events:none}.boardgame__palettes{width:100px;background-color:#cecece}.boardgame__palettes-header{font-size:10px;background-color:#242424}.boardgame__palettes-set{width:100%;overflow-y:auto;display:flex;flex-wrap:wrap;background-color:#e6e6e6}.boardgame__palettes-set-piece{transition:.3s all;padding:2px;width:50%;cursor:pointer}.boardgame__palettes-set-piece>img{width:100%;height:auto}.boardgame__palettes-set-toggle{width:100%}.boardgame__palettes-set-minimized .boardgame__palettes-set-piece{width:25%}.boardgame__notations{font-weight:bold;text-align:center;justify-content:center;align-items:center;z-index:0}.boardgame__notations-horizontal{height:20px;padding-left:20px;padding-right:20px}.boardgame__notations-vertical{width:20px;flex-direction:column}.boardgame__notations-number,.boardgame__notations-letter{display:flex;justify-content:center;align-items:center}.boardgame__board{z-index:0;flex-grow:1}.boardgame__board-pieces{z-index:1}.boardgame__board-overlay{z-index:2}.boardgame__board-inner{transition:1s all;flex-grow:1;display:flex;flex-direction:column;height:calc(100% - 0.25px)}.boardgame__board-checkerboard{position:relative;width:100%;height:100%}.boardgame__board-ggrenderer{position:absolute;top:0;left:0;pointer-events:none}.boardgame__board-gprenderer{position:absolute;top:0;left:0}.boardgame__board-gprenderer-piece{position:absolute}.boardgame__board-gprenderer-piece>span{padding:2px 6px;background-color:rgba(0,0,0,.5);position:absolute;text-align:center;left:50%;top:50%;transform:translate(-50%, -50%);font-size:14px;font-weight:bolder;text-shadow:0 0 2px #000;z-index:1;font-family:Arial}.Button{position:relative;display:inline-block;line-height:1.667em;padding:0 .5em;margin-right:.1666666667em;white-space:nowrap;outline:0;border-radius:.16em;margin-bottom:.1666666667em;user-select:none;-ms-user-select:none}.Button:last-child{margin-right:0;margin-bottom:0}.Button .fa,.Button .fa-solid,.Button .fa-regular{margin-left:0;margin-right:0;min-width:1.333em;text-align:center}.Button--hasContent .fa,.Button--hasContent .fa-solid,.Button--hasContent .fa-regular{margin-right:.25em}.Button--hasContent.Button--iconPosition--right .fa,.Button--hasContent.Button--iconPosition--right .fas,.Button--hasContent.Button--iconPosition--right .far{margin-right:0px;margin-left:3px}.Button--ellipsis{overflow:hidden;text-overflow:ellipsis}.Button--ellipsis .Button__content{overflow:hidden;text-overflow:ellipsis}.Button--fluid{display:block;margin-left:0;margin-right:0}.Button--circular{border-radius:50%}.Button--compact{padding:0 .25em;line-height:1.333em}.Button--color--black{transition:color 50ms,background-color 50ms;background-color:#000;color:#fff}.Button--color--black:hover{transition:color 0ms,background-color 0ms}.Button--color--black:focus{transition:color 100ms,background-color 100ms}.Button--color--black:hover,.Button--color--black:focus{background-color:#131313;color:#fff}.Button--color--black:active{background-color:#262626}.Button--color--white{transition:color 50ms,background-color 50ms;background-color:#d9d9d9;color:#000}.Button--color--white:hover{transition:color 0ms,background-color 0ms}.Button--color--white:focus{transition:color 100ms,background-color 100ms}.Button--color--white:hover,.Button--color--white:focus{background-color:#f8f8f8;color:#000}.Button--color--white:active{background-color:#fbfbfb}.Button--color--red{transition:color 50ms,background-color 50ms;background-color:#bd2020;color:#fff}.Button--color--red:hover{transition:color 0ms,background-color 0ms}.Button--color--red:focus{transition:color 100ms,background-color 100ms}.Button--color--red:hover,.Button--color--red:focus{background-color:#dc4848;color:#fff}.Button--color--red:active{background-color:#e78484}.Button--color--orange{transition:color 50ms,background-color 50ms;background-color:#d95e0c;color:#fff}.Button--color--orange:hover{transition:color 0ms,background-color 0ms}.Button--color--orange:focus{transition:color 100ms,background-color 100ms}.Button--color--orange:hover,.Button--color--orange:focus{background-color:#f0853f;color:#fff}.Button--color--orange:active{background-color:#f5b082}.Button--color--yellow{transition:color 50ms,background-color 50ms;background-color:#d9b804;color:#000}.Button--color--yellow:hover{transition:color 0ms,background-color 0ms}.Button--color--yellow:focus{transition:color 100ms,background-color 100ms}.Button--color--yellow:hover,.Button--color--yellow:focus{background-color:#f5d72e;color:#000}.Button--color--yellow:active{background-color:#f9e572}.Button--color--olive{transition:color 50ms,background-color 50ms;background-color:#9aad14;color:#fff}.Button--color--olive:hover{transition:color 0ms,background-color 0ms}.Button--color--olive:focus{transition:color 100ms,background-color 100ms}.Button--color--olive:hover,.Button--color--olive:focus{background-color:#c4da2b;color:#fff}.Button--color--olive:active{background-color:#d6e761}.Button--color--green{transition:color 50ms,background-color 50ms;background-color:#1b9638;color:#fff}.Button--color--green:hover{transition:color 0ms,background-color 0ms}.Button--color--green:focus{transition:color 100ms,background-color 100ms}.Button--color--green:hover,.Button--color--green:focus{background-color:#32c154;color:#fff}.Button--color--green:active{background-color:#59da78}.Button--color--teal{transition:color 50ms,background-color 50ms;background-color:#009a93;color:#fff}.Button--color--teal:hover{transition:color 0ms,background-color 0ms}.Button--color--teal:focus{transition:color 100ms,background-color 100ms}.Button--color--teal:hover,.Button--color--teal:focus{background-color:#13c4bc;color:#fff}.Button--color--teal:active{background-color:#26eee5}.Button--color--blue{transition:color 50ms,background-color 50ms;background-color:#1c71b1;color:#fff}.Button--color--blue:hover{transition:color 0ms,background-color 0ms}.Button--color--blue:focus{transition:color 100ms,background-color 100ms}.Button--color--blue:hover,.Button--color--blue:focus{background-color:#3a95d9;color:#fff}.Button--color--blue:active{background-color:#73b3e5}.Button--color--violet{transition:color 50ms,background-color 50ms;background-color:#552dab;color:#fff}.Button--color--violet:hover{transition:color 0ms,background-color 0ms}.Button--color--violet:focus{transition:color 100ms,background-color 100ms}.Button--color--violet:hover,.Button--color--violet:focus{background-color:#7953cc;color:#fff}.Button--color--violet:active{background-color:#a389dd}.Button--color--purple{transition:color 50ms,background-color 50ms;background-color:#8b2baa;color:#fff}.Button--color--purple:hover{transition:color 0ms,background-color 0ms}.Button--color--purple:focus{transition:color 100ms,background-color 100ms}.Button--color--purple:hover,.Button--color--purple:focus{background-color:#ad4fcd;color:#fff}.Button--color--purple:active{background-color:#c785dd}.Button--color--pink{transition:color 50ms,background-color 50ms;background-color:#cf2082;color:#fff}.Button--color--pink:hover{transition:color 0ms,background-color 0ms}.Button--color--pink:focus{transition:color 100ms,background-color 100ms}.Button--color--pink:hover,.Button--color--pink:focus{background-color:#e257a5;color:#fff}.Button--color--pink:active{background-color:#ee96c7}.Button--color--brown{transition:color 50ms,background-color 50ms;background-color:#8c5836;color:#fff}.Button--color--brown:hover{transition:color 0ms,background-color 0ms}.Button--color--brown:focus{transition:color 100ms,background-color 100ms}.Button--color--brown:hover,.Button--color--brown:focus{background-color:#b47851;color:#fff}.Button--color--brown:active{background-color:#ca9c7e}.Button--color--grey{transition:color 50ms,background-color 50ms;background-color:#646464;color:#fff}.Button--color--grey:hover{transition:color 0ms,background-color 0ms}.Button--color--grey:focus{transition:color 100ms,background-color 100ms}.Button--color--grey:hover,.Button--color--grey:focus{background-color:#868686;color:#fff}.Button--color--grey:active{background-color:#a8a8a8}.Button--color--light-grey{transition:color 50ms,background-color 50ms;background-color:#919191;color:#fff}.Button--color--light-grey:hover{transition:color 0ms,background-color 0ms}.Button--color--light-grey:focus{transition:color 100ms,background-color 100ms}.Button--color--light-grey:hover,.Button--color--light-grey:focus{background-color:#bababa;color:#fff}.Button--color--light-grey:active{background-color:#e2e2e2}.Button--color--good{transition:color 50ms,background-color 50ms;background-color:#4d9121;color:#fff}.Button--color--good:hover{transition:color 0ms,background-color 0ms}.Button--color--good:focus{transition:color 100ms,background-color 100ms}.Button--color--good:hover,.Button--color--good:focus{background-color:#6cba39;color:#fff}.Button--color--good:active{background-color:#8ed55f}.Button--color--average{transition:color 50ms,background-color 50ms;background-color:#cd7a0d;color:#fff}.Button--color--average:hover{transition:color 0ms,background-color 0ms}.Button--color--average:focus{transition:color 100ms,background-color 100ms}.Button--color--average:hover,.Button--color--average:focus{background-color:#ed9d35;color:#fff}.Button--color--average:active{background-color:#f3bd76}.Button--color--bad{transition:color 50ms,background-color 50ms;background-color:#bd2020;color:#fff}.Button--color--bad:hover{transition:color 0ms,background-color 0ms}.Button--color--bad:focus{transition:color 100ms,background-color 100ms}.Button--color--bad:hover,.Button--color--bad:focus{background-color:#dc4848;color:#fff}.Button--color--bad:active{background-color:#e78484}.Button--color--label{transition:color 50ms,background-color 50ms;background-color:#657a94;color:#fff}.Button--color--label:hover{transition:color 0ms,background-color 0ms}.Button--color--label:focus{transition:color 100ms,background-color 100ms}.Button--color--label:hover,.Button--color--label:focus{background-color:#91a1b3;color:#fff}.Button--color--label:active{background-color:#bec7d3}.Button--color--default{transition:color 50ms,background-color 50ms;background-color:#3e6189;color:#fff}.Button--color--default:hover{transition:color 0ms,background-color 0ms}.Button--color--default:focus{transition:color 100ms,background-color 100ms}.Button--color--default:hover,.Button--color--default:focus{background-color:#5c83b0;color:#fff}.Button--color--default:active{background-color:#89a6c6}.Button--color--caution{transition:color 50ms,background-color 50ms;background-color:#d9b804;color:#000}.Button--color--caution:hover{transition:color 0ms,background-color 0ms}.Button--color--caution:focus{transition:color 100ms,background-color 100ms}.Button--color--caution:hover,.Button--color--caution:focus{background-color:#f5d72e;color:#000}.Button--color--caution:active{background-color:#f9e572}.Button--color--danger{transition:color 50ms,background-color 50ms;background-color:#bd2020;color:#fff}.Button--color--danger:hover{transition:color 0ms,background-color 0ms}.Button--color--danger:focus{transition:color 100ms,background-color 100ms}.Button--color--danger:hover,.Button--color--danger:focus{background-color:#dc4848;color:#fff}.Button--color--danger:active{background-color:#e78484}.Button--color--transparent{transition:color 50ms,background-color 50ms;background-color:#252525;color:#fff;background-color:rgba(37,37,37,0);color:rgba(255,255,255,.5)}.Button--color--transparent:hover{transition:color 0ms,background-color 0ms}.Button--color--transparent:focus{transition:color 100ms,background-color 100ms}.Button--color--transparent:hover,.Button--color--transparent:focus{background-color:#3e3e3e;color:#fff}.Button--color--transparent:active{background-color:#565656}.Button--disabled{background-color:#999 !important}.Button--selected{transition:color 50ms,background-color 50ms;background-color:#1b9638;color:#fff}.Button--selected:hover{transition:color 0ms,background-color 0ms}.Button--selected:focus{transition:color 100ms,background-color 100ms}.Button--selected:hover,.Button--selected:focus{background-color:#32c154;color:#fff}.Button--selected:active{background-color:#59da78}.Button--flex{display:inline-flex;flex-direction:column}.Button--flex--fluid{width:100%}.Button--verticalAlignContent--top{justify-content:flex-start}.Button--verticalAlignContent--middle{justify-content:center}.Button--verticalAlignContent--bottom{justify-content:flex-end}.Button__content{display:block;align-self:stretch}.chem-dispenser__buttons{text-transform:capitalize}.chem-dispenser__labels{text-transform:capitalize}.chem-dispenser__dispense-buttons{text-overflow:ellipsis;text-transform:capitalize;white-space:nowrap}.chem-dispenser-dispense:hover{overflow:visible}@keyframes ChemHeater__heating{to{box-shadow:0 0 15px 0 #f2711c;border-color:#f2711c}}@keyframes ChemHeater__cooling{to{box-shadow:0 0 15px 0 #2185d0;border-color:#2185d0}}@keyframes ChemHeater__heating_fill{to{color:#f2711c}}@keyframes ChemHeater__cooling_fill{to{color:#2185d0}}.ChemHeater__TemperatureNumber{transition:color 500ms ease-out}.ChemHeater__TemperatureArrow{color:#aaa;transition:transform 500ms ease-out}.ChemHeater__TemperatureArrow__heating{animation:ChemHeater__heating_fill 2s ease infinite alternate}.ChemHeater__TemperatureArrow__cooling{animation:ChemHeater__cooling_fill 2s ease infinite alternate}.ChemHeater__TemperatureBox{box-shadow:0 0 15px rgba(0,0,0,0);border-color:#aaa;border-style:solid;border-radius:4px;height:3em;text-align:center}.ChemHeater__TemperatureBox__heating{animation:ChemHeater__heating 2s ease infinite alternate}.ChemHeater__TemperatureBox__cooling{animation:ChemHeater__cooling 2s ease infinite alternate}.cloning-console__flex__table{position:relative;display:flex;overflow:none;width:100vw;flex-direction:column}.cloning-console__flex__head{display:flex;height:25px;flex:0 0 auto;padding:0 5px;font-size:12px}.cloning-console__head__row{display:flex;flex:1 1 auto;align-items:center;justify-content:space-between;text-transform:uppercase}.cloning-console__head__item{display:flex;flex:1 1 auto;flex-direction:column;align-items:center;justify-content:space-between;padding:0 5px}.cloning-console__body__row{display:flex;height:30px;flex:0 0 auto;align-items:center;justify-content:space-around;border-bottom:2px solid rgba(51,51,51,.4)}.cloning-console__body__item{display:flex;overflow:hidden;height:30px;align-items:baseline;justify-content:center;text-overflow:ellipsis}.Button{position:relative;display:inline-block;line-height:1.667em;padding:0 .5em;margin-right:.1666666667em;white-space:nowrap;outline:0;border-radius:.16em;margin-bottom:.1666666667em;user-select:none;-ms-user-select:none}.Button:last-child{margin-right:0;margin-bottom:0}.Button .fa,.Button .fa-solid,.Button .fa-regular{margin-left:0;margin-right:0;min-width:1.333em;text-align:center}.Button--hasContent .fa,.Button--hasContent .fa-solid,.Button--hasContent .fa-regular{margin-right:.25em}.Button--hasContent.Button--iconPosition--right .fa,.Button--hasContent.Button--iconPosition--right .fas,.Button--hasContent.Button--iconPosition--right .far{margin-right:0px;margin-left:3px}.Button--ellipsis{overflow:hidden;text-overflow:ellipsis}.Button--ellipsis .Button__content{overflow:hidden;text-overflow:ellipsis}.Button--fluid{display:block;margin-left:0;margin-right:0}.Button--circular{border-radius:50%}.Button--compact{padding:0 .25em;line-height:1.333em}.Button--color--black{transition:color 50ms,background-color 50ms;background-color:#000;color:#fff}.Button--color--black:hover{transition:color 0ms,background-color 0ms}.Button--color--black:focus{transition:color 100ms,background-color 100ms}.Button--color--black:hover,.Button--color--black:focus{background-color:#131313;color:#fff}.Button--color--black:active{background-color:#262626}.Button--color--white{transition:color 50ms,background-color 50ms;background-color:#d9d9d9;color:#000}.Button--color--white:hover{transition:color 0ms,background-color 0ms}.Button--color--white:focus{transition:color 100ms,background-color 100ms}.Button--color--white:hover,.Button--color--white:focus{background-color:#f8f8f8;color:#000}.Button--color--white:active{background-color:#fbfbfb}.Button--color--red{transition:color 50ms,background-color 50ms;background-color:#bd2020;color:#fff}.Button--color--red:hover{transition:color 0ms,background-color 0ms}.Button--color--red:focus{transition:color 100ms,background-color 100ms}.Button--color--red:hover,.Button--color--red:focus{background-color:#dc4848;color:#fff}.Button--color--red:active{background-color:#e78484}.Button--color--orange{transition:color 50ms,background-color 50ms;background-color:#d95e0c;color:#fff}.Button--color--orange:hover{transition:color 0ms,background-color 0ms}.Button--color--orange:focus{transition:color 100ms,background-color 100ms}.Button--color--orange:hover,.Button--color--orange:focus{background-color:#f0853f;color:#fff}.Button--color--orange:active{background-color:#f5b082}.Button--color--yellow{transition:color 50ms,background-color 50ms;background-color:#d9b804;color:#000}.Button--color--yellow:hover{transition:color 0ms,background-color 0ms}.Button--color--yellow:focus{transition:color 100ms,background-color 100ms}.Button--color--yellow:hover,.Button--color--yellow:focus{background-color:#f5d72e;color:#000}.Button--color--yellow:active{background-color:#f9e572}.Button--color--olive{transition:color 50ms,background-color 50ms;background-color:#9aad14;color:#fff}.Button--color--olive:hover{transition:color 0ms,background-color 0ms}.Button--color--olive:focus{transition:color 100ms,background-color 100ms}.Button--color--olive:hover,.Button--color--olive:focus{background-color:#c4da2b;color:#fff}.Button--color--olive:active{background-color:#d6e761}.Button--color--green{transition:color 50ms,background-color 50ms;background-color:#1b9638;color:#fff}.Button--color--green:hover{transition:color 0ms,background-color 0ms}.Button--color--green:focus{transition:color 100ms,background-color 100ms}.Button--color--green:hover,.Button--color--green:focus{background-color:#32c154;color:#fff}.Button--color--green:active{background-color:#59da78}.Button--color--teal{transition:color 50ms,background-color 50ms;background-color:#009a93;color:#fff}.Button--color--teal:hover{transition:color 0ms,background-color 0ms}.Button--color--teal:focus{transition:color 100ms,background-color 100ms}.Button--color--teal:hover,.Button--color--teal:focus{background-color:#13c4bc;color:#fff}.Button--color--teal:active{background-color:#26eee5}.Button--color--blue{transition:color 50ms,background-color 50ms;background-color:#1c71b1;color:#fff}.Button--color--blue:hover{transition:color 0ms,background-color 0ms}.Button--color--blue:focus{transition:color 100ms,background-color 100ms}.Button--color--blue:hover,.Button--color--blue:focus{background-color:#3a95d9;color:#fff}.Button--color--blue:active{background-color:#73b3e5}.Button--color--violet{transition:color 50ms,background-color 50ms;background-color:#552dab;color:#fff}.Button--color--violet:hover{transition:color 0ms,background-color 0ms}.Button--color--violet:focus{transition:color 100ms,background-color 100ms}.Button--color--violet:hover,.Button--color--violet:focus{background-color:#7953cc;color:#fff}.Button--color--violet:active{background-color:#a389dd}.Button--color--purple{transition:color 50ms,background-color 50ms;background-color:#8b2baa;color:#fff}.Button--color--purple:hover{transition:color 0ms,background-color 0ms}.Button--color--purple:focus{transition:color 100ms,background-color 100ms}.Button--color--purple:hover,.Button--color--purple:focus{background-color:#ad4fcd;color:#fff}.Button--color--purple:active{background-color:#c785dd}.Button--color--pink{transition:color 50ms,background-color 50ms;background-color:#cf2082;color:#fff}.Button--color--pink:hover{transition:color 0ms,background-color 0ms}.Button--color--pink:focus{transition:color 100ms,background-color 100ms}.Button--color--pink:hover,.Button--color--pink:focus{background-color:#e257a5;color:#fff}.Button--color--pink:active{background-color:#ee96c7}.Button--color--brown{transition:color 50ms,background-color 50ms;background-color:#8c5836;color:#fff}.Button--color--brown:hover{transition:color 0ms,background-color 0ms}.Button--color--brown:focus{transition:color 100ms,background-color 100ms}.Button--color--brown:hover,.Button--color--brown:focus{background-color:#b47851;color:#fff}.Button--color--brown:active{background-color:#ca9c7e}.Button--color--grey{transition:color 50ms,background-color 50ms;background-color:#646464;color:#fff}.Button--color--grey:hover{transition:color 0ms,background-color 0ms}.Button--color--grey:focus{transition:color 100ms,background-color 100ms}.Button--color--grey:hover,.Button--color--grey:focus{background-color:#868686;color:#fff}.Button--color--grey:active{background-color:#a8a8a8}.Button--color--light-grey{transition:color 50ms,background-color 50ms;background-color:#919191;color:#fff}.Button--color--light-grey:hover{transition:color 0ms,background-color 0ms}.Button--color--light-grey:focus{transition:color 100ms,background-color 100ms}.Button--color--light-grey:hover,.Button--color--light-grey:focus{background-color:#bababa;color:#fff}.Button--color--light-grey:active{background-color:#e2e2e2}.Button--color--good{transition:color 50ms,background-color 50ms;background-color:#4d9121;color:#fff}.Button--color--good:hover{transition:color 0ms,background-color 0ms}.Button--color--good:focus{transition:color 100ms,background-color 100ms}.Button--color--good:hover,.Button--color--good:focus{background-color:#6cba39;color:#fff}.Button--color--good:active{background-color:#8ed55f}.Button--color--average{transition:color 50ms,background-color 50ms;background-color:#cd7a0d;color:#fff}.Button--color--average:hover{transition:color 0ms,background-color 0ms}.Button--color--average:focus{transition:color 100ms,background-color 100ms}.Button--color--average:hover,.Button--color--average:focus{background-color:#ed9d35;color:#fff}.Button--color--average:active{background-color:#f3bd76}.Button--color--bad{transition:color 50ms,background-color 50ms;background-color:#bd2020;color:#fff}.Button--color--bad:hover{transition:color 0ms,background-color 0ms}.Button--color--bad:focus{transition:color 100ms,background-color 100ms}.Button--color--bad:hover,.Button--color--bad:focus{background-color:#dc4848;color:#fff}.Button--color--bad:active{background-color:#e78484}.Button--color--label{transition:color 50ms,background-color 50ms;background-color:#657a94;color:#fff}.Button--color--label:hover{transition:color 0ms,background-color 0ms}.Button--color--label:focus{transition:color 100ms,background-color 100ms}.Button--color--label:hover,.Button--color--label:focus{background-color:#91a1b3;color:#fff}.Button--color--label:active{background-color:#bec7d3}.Button--color--default{transition:color 50ms,background-color 50ms;background-color:#3e6189;color:#fff}.Button--color--default:hover{transition:color 0ms,background-color 0ms}.Button--color--default:focus{transition:color 100ms,background-color 100ms}.Button--color--default:hover,.Button--color--default:focus{background-color:#5c83b0;color:#fff}.Button--color--default:active{background-color:#89a6c6}.Button--color--caution{transition:color 50ms,background-color 50ms;background-color:#d9b804;color:#000}.Button--color--caution:hover{transition:color 0ms,background-color 0ms}.Button--color--caution:focus{transition:color 100ms,background-color 100ms}.Button--color--caution:hover,.Button--color--caution:focus{background-color:#f5d72e;color:#000}.Button--color--caution:active{background-color:#f9e572}.Button--color--danger{transition:color 50ms,background-color 50ms;background-color:#bd2020;color:#fff}.Button--color--danger:hover{transition:color 0ms,background-color 0ms}.Button--color--danger:focus{transition:color 100ms,background-color 100ms}.Button--color--danger:hover,.Button--color--danger:focus{background-color:#dc4848;color:#fff}.Button--color--danger:active{background-color:#e78484}.Button--color--transparent{transition:color 50ms,background-color 50ms;background-color:#252525;color:#fff;background-color:rgba(37,37,37,0);color:rgba(255,255,255,.5)}.Button--color--transparent:hover{transition:color 0ms,background-color 0ms}.Button--color--transparent:focus{transition:color 100ms,background-color 100ms}.Button--color--transparent:hover,.Button--color--transparent:focus{background-color:#3e3e3e;color:#fff}.Button--color--transparent:active{background-color:#565656}.Button--disabled{background-color:#999 !important}.Button--selected{transition:color 50ms,background-color 50ms;background-color:#1b9638;color:#fff}.Button--selected:hover{transition:color 0ms,background-color 0ms}.Button--selected:focus{transition:color 100ms,background-color 100ms}.Button--selected:hover,.Button--selected:focus{background-color:#32c154;color:#fff}.Button--selected:active{background-color:#59da78}.Button--flex{display:inline-flex;flex-direction:column}.Button--flex--fluid{width:100%}.Button--verticalAlignContent--top{justify-content:flex-start}.Button--verticalAlignContent--middle{justify-content:center}.Button--verticalAlignContent--bottom{justify-content:flex-end}.Button__content{display:block;align-self:stretch}.clothingbooth__dropdown{margin-bottom:0 !important;margin-right:0 !important}.clothingbooth__boothitem{padding-left:.5rem;padding-right:.5rem}.clothingbooth__boothitem>div{pointer-events:none}.clothingbooth__boothitem:hover,.clothingbooth__boothitem-selected{background-color:#1b9638}.clothingbooth__boothitem:active{background-color:#67e484}.clothingbooth__preview{width:64px;height:128px}.cyborg-module-rewriter-interface-empty-placeholder{color:#8b9bb0}.cyborg-module-rewriter-interface-module-view__tool-label{margin-left:.5em;color:#8b9bb0}.gameclock__window{display:flex;flex-direction:column;padding:5px}.gameclock__help{position:fixed;top:4px;right:50px;padding:2px;z-index:20}.gameclock__helpbutton{height:20px;width:20px}.gameclock__helpbutton>i{display:flex;justify-content:center;align-items:center;height:100%}.gameclock__configmodal{z-index:20}.gameclock__configmodal>.Dimmer__inner{background-color:rgba(0,0,0,.8);padding:15px;width:180px;height:130px}.gameclock__configmodalbuttoncontainer{padding-top:12px}.gameclock__teamicon{text-align:center;font-size:24px;margin:5px}.gameclock__sidepart{flex-grow:1;padding:5px}.gameclock__timebutton{width:100%;height:100%;text-align:center}.gameclock__timebutton>div{display:flex;justify-content:center;align-items:center;height:100%}.gameclock__timeflex{flex-direction:column;display:flex;justify-content:center;align-items:center;height:100%;font-size:2em}.gameclock__mid{padding:5px;display:flex;flex-direction:column;align-items:center;justify-content:space-around}.gameclock__utilbutton{display:flex;flex-direction:column;justify-content:center;align-items:center;height:30px;width:30px}.gameclock__utilbutton>div{display:flex;justify-content:center;align-items:center;height:100%;padding-right:2px}.gas-canister-detonator-utility__list-item{line-height:1.7em}.gas-canister-detonator-utility__attachment-item{text-transform:capitalize}.IDComputer__DeptBox .Section__title{text-shadow:1px 1px 1px #000,1px -1px 1px #000,-1px -1px 1px #000,-1px 1px 1px #000;background-color:#767676}.mode-light .IDComputer__DeptBox .Section__title{text-shadow:1px 1px 1px #fff,1px -1px 1px #fff,-1px -1px 1px #fff,-1px 1px 1px #fff}.IDComputer__DeptBox_color_blue .Section__title{background-color:#2185d0}.IDComputer__DeptBox_color_yellow .Section__title{background-color:#fbd608}.IDComputer__DeptBox_color_purple .Section__title{background-color:#a333c8}.IDComputer__DeptBox_color_red .Section__title{background-color:#db2828}.IDComputer__DeptBox_color_green .Section__title{background-color:#20b142}.instrument__keyboardwrapper{border-top-left-radius:30px;border-top-right-radius:30px;border-bottom-left-radius:10px;border-bottom-right-radius:10px;margin:10px;padding-top:20px;background:#49504a;background:linear-gradient(180deg, #49504a 0%, #49504a 22%, #575e57 100%);border-left:5px solid #3d3d3d;border-bottom:5px solid #333;overflow-x:auto;display:flex;justify-content:space-between;align-items:center;flex-direction:column}.instruments__piano{display:flex;justify-content:center;list-style-type:none;padding:0 10px 10px 10px;overflow-x:auto}.instrument__outerpanel{display:flex;width:100%;padding:0 40px;justify-content:space-between;flex-direction:row}.instrument__speaker{border-top-left-radius:30%;width:360px;height:100px;margin:0px 20px;border-radius:10px;box-shadow:0px 0px 5px #4d4d4d inset;background:#646464;background-image:linear-gradient(#3d3d3d 0.1em, transparent 0.1em),linear-gradient(90deg, #3d3d3d 0.1em, transparent 0.1em);background-size:2px 2px}.instruments__piano-key{display:flex;align-items:flex-end;justify-content:center;font-size:12px;background:green;font-weight:bold;text-align:center;padding:2px 2px 10px 2px;user-select:none;-ms-user-select:none}.instruments__piano-key-white{height:16em;width:4em;min-width:4em;z-index:1;color:#383838;border:1px solid #d6d6d6;border-radius:0 0 5px 5px;box-shadow:-1px 0 0 rgba(255,255,255,.8) inset,0 0 5px #ccc inset,0 0 3px rgba(0,0,0,.2);background:linear-gradient(to bottom, #eee 0%, #fff 100%);transition:.05s all}.instruments__piano-key-black{height:9em;width:3em;min-width:3em;z-index:10;color:#cecece;border-bottom-left-radius:5px;border-bottom-right-radius:5px;border:1px solid #3b3b3b;margin:0 0 0 -1.5em;box-shadow:-1px -1px 2px rgba(255,255,255,.2) inset,0 -5px 2px 3px rgba(0,0,0,.6) inset,0 2px 12px rgba(0,0,0,.5);background:linear-gradient(0deg, #222 0%, #555 100%);transition:.05s all}.instruments__piano-key-white:active,.instruments__piano-key-white-active{border:1px solid #b4b4b4;box-shadow:2px 0 3px rgba(0,0,0,.1) inset,-5px 5px 20px rgba(0,0,0,.2) inset,0 0 3px rgba(0,0,0,.2);background:linear-gradient(to bottom, #fff 0%, #e9e9e9 100%)}.instruments__piano-key-black:active,.instruments__piano-key-black-active{border:1px solid #222;box-shadow:-1px -1px 2px rgba(255,255,255,.2) inset,0 -2px 2px 3px rgba(0,0,0,.6) inset,0 1px 2px rgba(0,0,0,.5);background:linear-gradient(to bottom, #444 0%, #222 100%)}.instruments__piano-key-white-offset{margin-left:-1.5em}.instruments__piano-key:first-child{margin-left:10px;border-top-left-radius:10px;border-bottom-left-radius:10px}.instruments__piano-key:last-child{margin-right:10px;border-top-right-radius:10px;border-bottom-right-radius:10px}.instruments__notedetails{display:flex;flex-direction:column;user-select:none;pointer-events:none}.instruments__notename{font-size:10px}.instruments__notekey{font-size:15px;padding-bottom:10px}.instruments__piano-key-white>.instruments__notename{font-size:14px;text-shadow:0px 0px 1px 5px #fff}.instrument__keybind-indicator{border-radius:20px;width:20px;height:10px}.instrument__panel{display:flex;justify-content:center;flex-direction:row;align-items:center;border-radius:10px;padding:6px;background:#333}.instrument__keyboardsupport{padding-right:5px;display:flex;flex-direction:column;justify-content:center;align-items:center}.instrument__panel-input{text-align:center;font-size:9px;font-weight:bold;padding:0px 5px}.instrument__toggle-keyboard-button{width:100%;text-align:center;margin-bottom:4px}.instrument_panel-info{flex-grow:1;text-align:center;color:#000;padding:0 10px;margin:0 10px;background:#fff;border-radius:5px}.instrument__instructions{width:100%;text-align:center}.instrument__input_keyorder{width:100%}.ListInput__Section{font-family:Segoe UI Emoji}.ListInput__Section .Section__title{flex-shrink:0}.ListInput__Section .Section__titleText{font-size:1em}.ListInput__Loader{width:100%;position:relative;height:4px}.ListInput__LoaderProgress{position:absolute;transition:background-color 500ms ease-out,width 500ms ease-out;background-color:#3e6189;height:100%}.minimap-controller__number-inputs{width:70px}.minimap-controller__buttons{font-size:1.7rem}.minimap-controller__marker-list{background-color:rgba(0,0,0,.2);justify-content:space-between;padding:5px;padding-bottom:1px;margin-bottom:4px}.paper__stamp,.paper__stamp-text{position:absolute;pointer-events:none;user-select:none}.paper__stamp-text{overflow:hidden;height:40px;padding:.55rem .5rem;box-shadow:inset 0px 0px 0px 3px #525252;color:#5c5c5c;font-family:"Anton";font-size:1.5rem;font-weight:500;text-align:center;text-transform:uppercase;white-space:nowrap}.paper__page{word-break:break-word;word-wrap:break-word}.phone__button>div{overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.port-atmos-pressure-bar__text{text-shadow:1px 1px 1px #000,-1px 1px 1px #000,1px -1px 1px #000,-1px -1px 1px #000}.Button{position:relative;display:inline-block;line-height:1.667em;padding:0 .5em;margin-right:.1666666667em;white-space:nowrap;outline:0;border-radius:.16em;margin-bottom:.1666666667em;user-select:none;-ms-user-select:none}.Button:last-child{margin-right:0;margin-bottom:0}.Button .fa,.Button .fa-solid,.Button .fa-regular{margin-left:0;margin-right:0;min-width:1.333em;text-align:center}.Button--hasContent .fa,.Button--hasContent .fa-solid,.Button--hasContent .fa-regular{margin-right:.25em}.Button--hasContent.Button--iconPosition--right .fa,.Button--hasContent.Button--iconPosition--right .fas,.Button--hasContent.Button--iconPosition--right .far{margin-right:0px;margin-left:3px}.Button--ellipsis{overflow:hidden;text-overflow:ellipsis}.Button--ellipsis .Button__content{overflow:hidden;text-overflow:ellipsis}.Button--fluid{display:block;margin-left:0;margin-right:0}.Button--circular{border-radius:50%}.Button--compact{padding:0 .25em;line-height:1.333em}.Button--color--black{transition:color 50ms,background-color 50ms;background-color:#000;color:#fff}.Button--color--black:hover{transition:color 0ms,background-color 0ms}.Button--color--black:focus{transition:color 100ms,background-color 100ms}.Button--color--black:hover,.Button--color--black:focus{background-color:#131313;color:#fff}.Button--color--black:active{background-color:#262626}.Button--color--white{transition:color 50ms,background-color 50ms;background-color:#d9d9d9;color:#000}.Button--color--white:hover{transition:color 0ms,background-color 0ms}.Button--color--white:focus{transition:color 100ms,background-color 100ms}.Button--color--white:hover,.Button--color--white:focus{background-color:#f8f8f8;color:#000}.Button--color--white:active{background-color:#fbfbfb}.Button--color--red{transition:color 50ms,background-color 50ms;background-color:#bd2020;color:#fff}.Button--color--red:hover{transition:color 0ms,background-color 0ms}.Button--color--red:focus{transition:color 100ms,background-color 100ms}.Button--color--red:hover,.Button--color--red:focus{background-color:#dc4848;color:#fff}.Button--color--red:active{background-color:#e78484}.Button--color--orange{transition:color 50ms,background-color 50ms;background-color:#d95e0c;color:#fff}.Button--color--orange:hover{transition:color 0ms,background-color 0ms}.Button--color--orange:focus{transition:color 100ms,background-color 100ms}.Button--color--orange:hover,.Button--color--orange:focus{background-color:#f0853f;color:#fff}.Button--color--orange:active{background-color:#f5b082}.Button--color--yellow{transition:color 50ms,background-color 50ms;background-color:#d9b804;color:#000}.Button--color--yellow:hover{transition:color 0ms,background-color 0ms}.Button--color--yellow:focus{transition:color 100ms,background-color 100ms}.Button--color--yellow:hover,.Button--color--yellow:focus{background-color:#f5d72e;color:#000}.Button--color--yellow:active{background-color:#f9e572}.Button--color--olive{transition:color 50ms,background-color 50ms;background-color:#9aad14;color:#fff}.Button--color--olive:hover{transition:color 0ms,background-color 0ms}.Button--color--olive:focus{transition:color 100ms,background-color 100ms}.Button--color--olive:hover,.Button--color--olive:focus{background-color:#c4da2b;color:#fff}.Button--color--olive:active{background-color:#d6e761}.Button--color--green{transition:color 50ms,background-color 50ms;background-color:#1b9638;color:#fff}.Button--color--green:hover{transition:color 0ms,background-color 0ms}.Button--color--green:focus{transition:color 100ms,background-color 100ms}.Button--color--green:hover,.Button--color--green:focus{background-color:#32c154;color:#fff}.Button--color--green:active{background-color:#59da78}.Button--color--teal{transition:color 50ms,background-color 50ms;background-color:#009a93;color:#fff}.Button--color--teal:hover{transition:color 0ms,background-color 0ms}.Button--color--teal:focus{transition:color 100ms,background-color 100ms}.Button--color--teal:hover,.Button--color--teal:focus{background-color:#13c4bc;color:#fff}.Button--color--teal:active{background-color:#26eee5}.Button--color--blue{transition:color 50ms,background-color 50ms;background-color:#1c71b1;color:#fff}.Button--color--blue:hover{transition:color 0ms,background-color 0ms}.Button--color--blue:focus{transition:color 100ms,background-color 100ms}.Button--color--blue:hover,.Button--color--blue:focus{background-color:#3a95d9;color:#fff}.Button--color--blue:active{background-color:#73b3e5}.Button--color--violet{transition:color 50ms,background-color 50ms;background-color:#552dab;color:#fff}.Button--color--violet:hover{transition:color 0ms,background-color 0ms}.Button--color--violet:focus{transition:color 100ms,background-color 100ms}.Button--color--violet:hover,.Button--color--violet:focus{background-color:#7953cc;color:#fff}.Button--color--violet:active{background-color:#a389dd}.Button--color--purple{transition:color 50ms,background-color 50ms;background-color:#8b2baa;color:#fff}.Button--color--purple:hover{transition:color 0ms,background-color 0ms}.Button--color--purple:focus{transition:color 100ms,background-color 100ms}.Button--color--purple:hover,.Button--color--purple:focus{background-color:#ad4fcd;color:#fff}.Button--color--purple:active{background-color:#c785dd}.Button--color--pink{transition:color 50ms,background-color 50ms;background-color:#cf2082;color:#fff}.Button--color--pink:hover{transition:color 0ms,background-color 0ms}.Button--color--pink:focus{transition:color 100ms,background-color 100ms}.Button--color--pink:hover,.Button--color--pink:focus{background-color:#e257a5;color:#fff}.Button--color--pink:active{background-color:#ee96c7}.Button--color--brown{transition:color 50ms,background-color 50ms;background-color:#8c5836;color:#fff}.Button--color--brown:hover{transition:color 0ms,background-color 0ms}.Button--color--brown:focus{transition:color 100ms,background-color 100ms}.Button--color--brown:hover,.Button--color--brown:focus{background-color:#b47851;color:#fff}.Button--color--brown:active{background-color:#ca9c7e}.Button--color--grey{transition:color 50ms,background-color 50ms;background-color:#646464;color:#fff}.Button--color--grey:hover{transition:color 0ms,background-color 0ms}.Button--color--grey:focus{transition:color 100ms,background-color 100ms}.Button--color--grey:hover,.Button--color--grey:focus{background-color:#868686;color:#fff}.Button--color--grey:active{background-color:#a8a8a8}.Button--color--light-grey{transition:color 50ms,background-color 50ms;background-color:#919191;color:#fff}.Button--color--light-grey:hover{transition:color 0ms,background-color 0ms}.Button--color--light-grey:focus{transition:color 100ms,background-color 100ms}.Button--color--light-grey:hover,.Button--color--light-grey:focus{background-color:#bababa;color:#fff}.Button--color--light-grey:active{background-color:#e2e2e2}.Button--color--good{transition:color 50ms,background-color 50ms;background-color:#4d9121;color:#fff}.Button--color--good:hover{transition:color 0ms,background-color 0ms}.Button--color--good:focus{transition:color 100ms,background-color 100ms}.Button--color--good:hover,.Button--color--good:focus{background-color:#6cba39;color:#fff}.Button--color--good:active{background-color:#8ed55f}.Button--color--average{transition:color 50ms,background-color 50ms;background-color:#cd7a0d;color:#fff}.Button--color--average:hover{transition:color 0ms,background-color 0ms}.Button--color--average:focus{transition:color 100ms,background-color 100ms}.Button--color--average:hover,.Button--color--average:focus{background-color:#ed9d35;color:#fff}.Button--color--average:active{background-color:#f3bd76}.Button--color--bad{transition:color 50ms,background-color 50ms;background-color:#bd2020;color:#fff}.Button--color--bad:hover{transition:color 0ms,background-color 0ms}.Button--color--bad:focus{transition:color 100ms,background-color 100ms}.Button--color--bad:hover,.Button--color--bad:focus{background-color:#dc4848;color:#fff}.Button--color--bad:active{background-color:#e78484}.Button--color--label{transition:color 50ms,background-color 50ms;background-color:#657a94;color:#fff}.Button--color--label:hover{transition:color 0ms,background-color 0ms}.Button--color--label:focus{transition:color 100ms,background-color 100ms}.Button--color--label:hover,.Button--color--label:focus{background-color:#91a1b3;color:#fff}.Button--color--label:active{background-color:#bec7d3}.Button--color--default{transition:color 50ms,background-color 50ms;background-color:#3e6189;color:#fff}.Button--color--default:hover{transition:color 0ms,background-color 0ms}.Button--color--default:focus{transition:color 100ms,background-color 100ms}.Button--color--default:hover,.Button--color--default:focus{background-color:#5c83b0;color:#fff}.Button--color--default:active{background-color:#89a6c6}.Button--color--caution{transition:color 50ms,background-color 50ms;background-color:#d9b804;color:#000}.Button--color--caution:hover{transition:color 0ms,background-color 0ms}.Button--color--caution:focus{transition:color 100ms,background-color 100ms}.Button--color--caution:hover,.Button--color--caution:focus{background-color:#f5d72e;color:#000}.Button--color--caution:active{background-color:#f9e572}.Button--color--danger{transition:color 50ms,background-color 50ms;background-color:#bd2020;color:#fff}.Button--color--danger:hover{transition:color 0ms,background-color 0ms}.Button--color--danger:focus{transition:color 100ms,background-color 100ms}.Button--color--danger:hover,.Button--color--danger:focus{background-color:#dc4848;color:#fff}.Button--color--danger:active{background-color:#e78484}.Button--color--transparent{transition:color 50ms,background-color 50ms;background-color:#252525;color:#fff;background-color:rgba(37,37,37,0);color:rgba(255,255,255,.5)}.Button--color--transparent:hover{transition:color 0ms,background-color 0ms}.Button--color--transparent:focus{transition:color 100ms,background-color 100ms}.Button--color--transparent:hover,.Button--color--transparent:focus{background-color:#3e3e3e;color:#fff}.Button--color--transparent:active{background-color:#565656}.Button--disabled{background-color:#999 !important}.Button--selected{transition:color 50ms,background-color 50ms;background-color:#1b9638;color:#fff}.Button--selected:hover{transition:color 0ms,background-color 0ms}.Button--selected:focus{transition:color 100ms,background-color 100ms}.Button--selected:hover,.Button--selected:focus{background-color:#32c154;color:#fff}.Button--selected:active{background-color:#59da78}.Button--flex{display:inline-flex;flex-direction:column}.Button--flex--fluid{width:100%}.Button--verticalAlignContent--top{justify-content:flex-start}.Button--verticalAlignContent--middle{justify-content:center}.Button--verticalAlignContent--bottom{justify-content:flex-end}.Button__content{display:block;align-self:stretch}.WeaponVendor .Button--color--sidearm{transition:color 50ms,background-color 50ms;background-color:#00b5ad;color:#fff}.WeaponVendor .Button--color--sidearm:hover{transition:color 0ms,background-color 0ms}.WeaponVendor .Button--color--sidearm:focus{transition:color 100ms,background-color 100ms}.WeaponVendor .Button--color--sidearm:hover,.WeaponVendor .Button--color--sidearm:focus{background-color:#13e3da;color:#fff}.WeaponVendor .Button--color--sidearm:active{background-color:#41f8ef}.WeaponVendor .Button--color--loadout{transition:color 50ms,background-color 50ms;background-color:#fbd608;color:#000}.WeaponVendor .Button--color--loadout:hover{transition:color 0ms,background-color 0ms}.WeaponVendor .Button--color--loadout:focus{transition:color 100ms,background-color 100ms}.WeaponVendor .Button--color--loadout:hover,.WeaponVendor .Button--color--loadout:focus{background-color:#fce354;color:#000}.WeaponVendor .Button--color--loadout:active{background-color:#fdefa0}.WeaponVendor .Button--color--utility{transition:color 50ms,background-color 50ms;background-color:#2185d0;color:#fff}.WeaponVendor .Button--color--utility:hover{transition:color 0ms,background-color 0ms}.WeaponVendor .Button--color--utility:focus{transition:color 100ms,background-color 100ms}.WeaponVendor .Button--color--utility:hover,.WeaponVendor .Button--color--utility:focus{background-color:#59a8e3;color:#fff}.WeaponVendor .Button--color--utility:active{background-color:#99c9ee}.WeaponVendor .Button--color--ammo{transition:color 50ms,background-color 50ms;background-color:#f2711c;color:#fff}.WeaponVendor .Button--color--ammo:hover{transition:color 0ms,background-color 0ms}.WeaponVendor .Button--color--ammo:focus{transition:color 100ms,background-color 100ms}.WeaponVendor .Button--color--ammo:hover,.WeaponVendor .Button--color--ammo:focus{background-color:#f6a067;color:#fff}.WeaponVendor .Button--color--ammo:active{background-color:#fbceb1}.WeaponVendor .Button--color--assistant{transition:color 50ms,background-color 50ms;background-color:#767676;color:#fff}.WeaponVendor .Button--color--assistant:hover{transition:color 0ms,background-color 0ms}.WeaponVendor .Button--color--assistant:focus{transition:color 100ms,background-color 100ms}.WeaponVendor .Button--color--assistant:hover,.WeaponVendor .Button--color--assistant:focus{background-color:#9b9b9b;color:#fff}.WeaponVendor .Button--color--assistant:active{background-color:silver}.WeaponVendor .Button--color--fishing{transition:color 50ms,background-color 50ms;background-color:#2185d0;color:#fff}.WeaponVendor .Button--color--fishing:hover{transition:color 0ms,background-color 0ms}.WeaponVendor .Button--color--fishing:focus{transition:color 100ms,background-color 100ms}.WeaponVendor .Button--color--fishing:hover,.WeaponVendor .Button--color--fishing:focus{background-color:#59a8e3;color:#fff}.WeaponVendor .Button--color--fishing:active{background-color:#99c9ee}.WeaponVendor__Credits--sidearm{color:#00b5ad}.WeaponVendor__Credits--loadout{color:#fbd608}.WeaponVendor__Credits--utility{color:#2185d0}.WeaponVendor__Credits--ammo{color:#f2711c}.WeaponVendor__Credits--assistant{color:#767676}.WeaponVendor__Credits--fishing{color:#2185d0}.WeaponVendor__Row:not(:last-child){border-bottom:2px solid #3e6189}.Layout,.Layout *{scrollbar-base-color:#1c1c1c;scrollbar-face-color:#3b3b3b;scrollbar-3dlight-color:#252525;scrollbar-highlight-color:#252525;scrollbar-track-color:#1c1c1c;scrollbar-arrow-color:#929292;scrollbar-shadow-color:#3b3b3b}.Layout__content{position:absolute;top:0;bottom:0;left:0;right:0;overflow-x:hidden;overflow-y:hidden}.Layout__content--scrollable{overflow-y:scroll;margin-bottom:0}.NtosHeader__left{position:absolute;left:12px}.NtosHeader__right{position:absolute;right:12px}.NtosHeader__icon{margin-top:-9px;margin-bottom:-6px;vertical-align:middle}.NtosWindow__header{position:absolute;top:0;left:0;right:0;height:28px;line-height:27px;background-color:rgba(0,0,0,.5);font-family:Consolas,monospace;font-size:14px;user-select:none;-ms-user-select:none}.NtosWindow__content .Layout__content{margin-top:28px;font-family:Consolas,monospace;font-size:14px}.TitleBar{background-color:#363636;border-bottom:1px solid #161616;box-shadow:0 2px 2px rgba(0,0,0,.1);box-shadow:0 .1666666667rem .1666666667rem rgba(0,0,0,.1);user-select:none;-ms-user-select:none}.TitleBar__clickable{color:rgba(255,255,255,.5);background-color:#363636;transition:color 250ms ease-out,background-color 250ms ease-out}.TitleBar__clickable:hover{color:#fff;background-color:#c00;transition:color 0ms,background-color 0ms}.TitleBar__title{position:absolute;top:0;left:46px;left:3.8333333333rem;color:rgba(255,255,255,.75);font-size:14px;font-size:1.1666666667rem;line-height:31px;line-height:2.5833333333rem;white-space:nowrap}.TitleBar__dragZone{position:absolute;top:0;left:0;right:0;height:32px;height:2.6666666667rem}.TitleBar__statusIcon{position:absolute;top:0;left:12px;left:1rem;transition:color .5s;font-size:20px;font-size:1.6666666667rem;line-height:32px !important;line-height:2.6666666667rem !important}.TitleBar__close{position:absolute;top:-1px;right:0;width:45px;width:3.75rem;height:32px;height:2.6666666667rem;font-size:20px;font-size:1.6666666667rem;line-height:31px;line-height:2.5833333333rem;text-align:center}.TitleBar__devBuildIndicator{position:absolute;top:6px;top:.5rem;right:52px;right:4.3333333333rem;min-width:20px;min-width:1.6666666667rem;padding:2px 4px;padding:.1666666667rem .3333333333rem;background-color:rgba(91,170,39,.75);color:#fff;text-align:center}.Window{position:fixed;top:0;bottom:0;left:0;right:0;color:#fff;background-color:#252525;background-image:linear-gradient(to bottom, #2a2a2a 0%, #202020 100%)}.Window__titleBar{position:fixed;z-index:1;top:0;left:0;width:100%;height:32px;height:2.6666666667rem}.Window__rest{position:fixed;top:32px;top:2.6666666667rem;bottom:0;left:0;right:0}.Window__contentPadding{margin:.5rem;height:calc(100% - 1.01rem)}.Window__contentPadding:after{height:0}.Layout__content--scrollable .Window__contentPadding:after{display:block;content:"";height:.5rem}.Window__dimmer{position:fixed;top:0;bottom:0;left:0;right:0;background-color:rgba(62,62,62,.25);pointer-events:none}.Window__resizeHandle__se{position:fixed;bottom:0;right:0;width:20px;width:1.6666666667rem;height:20px;height:1.6666666667rem;cursor:se-resize}.Window__resizeHandle__s{position:fixed;bottom:0;left:0;right:0;height:6px;height:.5rem;cursor:s-resize}.Window__resizeHandle__e{position:fixed;top:0;bottom:0;right:0;width:3px;width:.25rem;cursor:e-resize}.Layout__content{background-image:url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+DQo8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgdmVyc2lvbj0iMS4wIiB2aWV3Qm94PSIwIDAgNDI1IDIwMCIgb3BhY2l0eT0iLjEiPg0KICA8cGF0aCBkPSJtIDE3OC4wMDM5OSwwLjAzODY5IC03MS4yMDM5MywwIGEgNi43NjEzNDIyLDYuMDI1NTQ5NSAwIDAgMCAtNi43NjEzNCw2LjAyNTU1IGwgMCwxODcuODcxNDcgYSA2Ljc2MTM0MjIsNi4wMjU1NDk1IDAgMCAwIDYuNzYxMzQsNi4wMjU1NCBsIDUzLjEwNzIsMCBhIDYuNzYxMzQyMiw2LjAyNTU0OTUgMCAwIDAgNi43NjEzNSwtNi4wMjU1NCBsIDAsLTEwMS41NDQwMTggNzIuMjE2MjgsMTA0LjY5OTM5OCBhIDYuNzYxMzQyMiw2LjAyNTU0OTUgMCAwIDAgNS43NjAxNSwyLjg3MDE2IGwgNzMuNTU0ODcsMCBhIDYuNzYxMzQyMiw2LjAyNTU0OTUgMCAwIDAgNi43NjEzNSwtNi4wMjU1NCBsIDAsLTE4Ny44NzE0NyBhIDYuNzYxMzQyMiw2LjAyNTU0OTUgMCAwIDAgLTYuNzYxMzUsLTYuMDI1NTUgbCAtNTQuNzE2NDQsMCBhIDYuNzYxMzQyMiw2LjAyNTU0OTUgMCAwIDAgLTYuNzYxMzMsNi4wMjU1NSBsIDAsMTAyLjYxOTM1IEwgMTgzLjc2NDEzLDIuOTA4ODYgYSA2Ljc2MTM0MjIsNi4wMjU1NDk1IDAgMCAwIC01Ljc2MDE0LC0yLjg3MDE3IHoiIC8+DQogIDxwYXRoIGQ9Ik0gNC44NDQ2MzMzLDIyLjEwODc1IEEgMTMuNDEyMDM5LDEyLjUwMTg0MiAwIDAgMSAxMy40Nzc1ODgsMC4wMzkyNCBsIDY2LjExODMxNSwwIGEgNS4zNjQ4MTU4LDUuMDAwNzM3IDAgMCAxIDUuMzY0ODIzLDUuMDAwNzMgbCAwLDc5Ljg3OTMxIHoiIC8+DQogIDxwYXRoIGQ9Im0gNDIwLjE1NTM1LDE3Ny44OTExOSBhIDEzLjQxMjAzOCwxMi41MDE4NDIgMCAwIDEgLTguNjMyOTUsMjIuMDY5NTEgbCAtNjYuMTE4MzIsMCBhIDUuMzY0ODE1Miw1LjAwMDczNyAwIDAgMSAtNS4zNjQ4MiwtNS4wMDA3NCBsIDAsLTc5Ljg3OTMxIHoiIC8+DQo8L3N2Zz4NCjwhLS0gVGhpcyB3b3JrIGlzIGxpY2Vuc2VkIHVuZGVyIGEgQ3JlYXRpdmUgQ29tbW9ucyBBdHRyaWJ1dGlvbi1TaGFyZUFsaWtlIDQuMCBJbnRlcm5hdGlvbmFsIExpY2Vuc2UuIC0tPg0KPCEtLSBodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy9saWNlbnNlcy9ieS1zYS80LjAvIC0tPg0K);background-size:70%;background-position:center;background-repeat:no-repeat} -.theme-genetek .ProgressBar{display:flex;position:relative;width:100%;padding:0 .5em;border-width:.0833333333em !important;border-style:solid !important;border-radius:.16em;background-color:rgba(0,0,0,.5);transition:border-color 900ms ease-out;align-items:center}.theme-genetek .ProgressBar__fill{position:absolute;top:-0.5px;left:0px;bottom:-0.5px}.theme-genetek .ProgressBar__fill--animated{transition:background-color 900ms ease-out,width 900ms ease-out}.theme-genetek .ProgressBar__content{position:relative;line-height:1.4166666667em;width:100%;text-align:right}.theme-genetek .ProgressBar--color--default{border:.0833333333em solid #1b676b}.theme-genetek .ProgressBar--color--default .ProgressBar__fill{background-color:#1b676b}.theme-genetek .Section{position:relative;margin-bottom:.5em;background-color:#0a2628;background-color:rgba(0,0,0,.33);box-sizing:border-box}.theme-genetek .Section:last-child{margin-bottom:0}.theme-genetek .Section__title{position:relative;padding:.5em;border-bottom:.1666666667em solid #2eafb6}.theme-genetek .Section__titleText{font-size:1.1666666667em;font-weight:bold;color:#fff}.theme-genetek .Section__buttons{position:absolute;display:inline-block;right:.5em;margin-top:-.0833333333em}.theme-genetek .Section__rest{position:relative}.theme-genetek .Section__content{padding:.66em .5em}.theme-genetek .Section--fitted>.Section__rest>.Section__content{padding:0}.theme-genetek .Section--fill{display:flex;flex-direction:column;height:100%}.theme-genetek .Section--fill>.Section__rest{flex-grow:1}.theme-genetek .Section--fill>.Section__rest>.Section__content{height:100%}.theme-genetek .Section--fill.Section--scrollable>.Section__rest>.Section__content{position:absolute;top:0;left:0;right:0;bottom:0}.theme-genetek .Section--fill.Section--iefix{display:table !important;width:100% !important;height:100% !important;border-collapse:collapse;border-spacing:0}.theme-genetek .Section--fill.Section--iefix>.Section__rest{display:table-row !important;height:100% !important}.theme-genetek .Section--scrollable{overflow-x:hidden;overflow-y:hidden}.theme-genetek .Section--scrollable>.Section__rest>.Section__content{overflow-y:scroll;overflow-x:hidden}.theme-genetek .Section .Section{background-color:transparent;margin-left:-0.5em;margin-right:-0.5em}.theme-genetek .Section .Section:first-child{margin-top:-0.5em}.theme-genetek .Section .Section .Section__titleText{font-size:1.0833333333em}.theme-genetek .Section .Section .Section .Section__titleText{font-size:1em}.theme-genetek .Layout,.theme-genetek .Layout *{scrollbar-base-color:#0b2a2c;scrollbar-face-color:#185a5e;scrollbar-3dlight-color:#0f393b;scrollbar-highlight-color:#0f393b;scrollbar-track-color:#0b2a2c;scrollbar-arrow-color:#51cdd3;scrollbar-shadow-color:#185a5e}.theme-genetek .Layout__content{position:absolute;top:0;bottom:0;left:0;right:0;overflow-x:hidden;overflow-y:hidden}.theme-genetek .Layout__content--scrollable{overflow-y:scroll;margin-bottom:0}.theme-genetek .Window{position:fixed;top:0;bottom:0;left:0;right:0;color:#fff;background-color:#0f393b;background-image:linear-gradient(to bottom, #114043 0%, #0d3133 100%)}.theme-genetek .Window__titleBar{position:fixed;z-index:1;top:0;left:0;width:100%;height:32px;height:2.6666666667rem}.theme-genetek .Window__rest{position:fixed;top:32px;top:2.6666666667rem;bottom:0;left:0;right:0}.theme-genetek .Window__contentPadding{margin:.5rem;height:calc(100% - 1.01rem)}.theme-genetek .Window__contentPadding:after{height:0}.theme-genetek .Layout__content--scrollable .Window__contentPadding:after{display:block;content:"";height:.5rem}.theme-genetek .Window__dimmer{position:fixed;top:0;bottom:0;left:0;right:0;background-color:rgba(36,85,87,.25);pointer-events:none}.theme-genetek .Window__resizeHandle__se{position:fixed;bottom:0;right:0;width:20px;width:1.6666666667rem;height:20px;height:1.6666666667rem;cursor:se-resize}.theme-genetek .Window__resizeHandle__s{position:fixed;bottom:0;left:0;right:0;height:6px;height:.5rem;cursor:s-resize}.theme-genetek .Window__resizeHandle__e{position:fixed;top:0;bottom:0;right:0;width:3px;width:.25rem;cursor:e-resize}.theme-genetek .TitleBar{background-color:#144d50;border-bottom:1px solid #161616;box-shadow:0 2px 2px rgba(0,0,0,.1);box-shadow:0 .1666666667rem .1666666667rem rgba(0,0,0,.1);user-select:none;-ms-user-select:none}.theme-genetek .TitleBar__clickable{color:rgba(255,255,255,.5);background-color:#144d50;transition:color 250ms ease-out,background-color 250ms ease-out}.theme-genetek .TitleBar__clickable:hover{color:#fff;background-color:#c00;transition:color 0ms,background-color 0ms}.theme-genetek .TitleBar__title{position:absolute;top:0;left:46px;left:3.8333333333rem;color:rgba(255,255,255,.75);font-size:14px;font-size:1.1666666667rem;line-height:31px;line-height:2.5833333333rem;white-space:nowrap}.theme-genetek .TitleBar__dragZone{position:absolute;top:0;left:0;right:0;height:32px;height:2.6666666667rem}.theme-genetek .TitleBar__statusIcon{position:absolute;top:0;left:12px;left:1rem;transition:color .5s;font-size:20px;font-size:1.6666666667rem;line-height:32px !important;line-height:2.6666666667rem !important}.theme-genetek .TitleBar__close{position:absolute;top:-1px;right:0;width:45px;width:3.75rem;height:32px;height:2.6666666667rem;font-size:20px;font-size:1.6666666667rem;line-height:31px;line-height:2.5833333333rem;text-align:center}.theme-genetek .TitleBar__devBuildIndicator{position:absolute;top:6px;top:.5rem;right:52px;right:4.3333333333rem;min-width:20px;min-width:1.6666666667rem;padding:2px 4px;padding:.1666666667rem .3333333333rem;background-color:rgba(91,170,39,.75);color:#fff;text-align:center}.theme-genetek .Layout__content{background-position-x:-60%;background-image:url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+DQo8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgdmVyc2lvbj0iMS4wIiB2aWV3Qm94PSIwIDAgNDAgNTciIG9wYWNpdHk9Ii4xIj4NCiAgPGVsbGlwc2UgY3g9IjIwIiBjeT0iNi40OCIgcng9IjE0LjIiIHJ5PSI2LjY0IiAvPg0KICA8ZWxsaXBzZSBjeD0iMjAiIGN5PSIyMi45IiByeD0iMTAiIHJ5PSI0LjcxIiAvPg0KICA8ZWxsaXBzZSBjeD0iMjAiIGN5PSI0Ny41IiByeD0iMjAiIHJ5PSI5LjQiIC8+DQogIDxwYXRoIGQ9Im05LjIgNi40OGgtMi42MmwzLjQyIDE0LjctOS44MiAyNC42aDIuM2wxMC4xLTI0LjZ6IiAvPg0KICA8cGF0aCBkPSJtMzAuNyA2LjQ4LTMuNiAxNC43IDEwLjEgMjQuNmgyLjNsLTkuOC0yNC42IDMuNi0xNC43eiIgLz4NCjwvc3ZnPg0KPCEtLSBUaGlzIHdvcmsgaXMgbGljZW5zZWQgdW5kZXIgYSBDcmVhdGl2ZSBDb21tb25zIEF0dHJpYnV0aW9uLVNoYXJlQWxpa2UgNC4wIEludGVybmF0aW9uYWwgTGljZW5zZS4gLS0+DQo8IS0tIGh0dHA6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnL2xpY2Vuc2VzL2J5LXNhLzQuMC8gLS0+DQo=)}.theme-genetek .color-label{color:#bfcc90 !important}.theme-genetek .Button{position:relative;display:inline-block;line-height:1.667em;padding:0 .5em;margin-right:.1666666667em;white-space:nowrap;outline:0;border-radius:.16em;margin-bottom:.1666666667em;user-select:none;-ms-user-select:none}.theme-genetek .Button:last-child{margin-right:0;margin-bottom:0}.theme-genetek .Button .fa,.theme-genetek .Button .fa-solid,.theme-genetek .Button .fa-regular{margin-left:0;margin-right:0;min-width:1.333em;text-align:center}.theme-genetek .Button--hasContent .fa,.theme-genetek .Button--hasContent .fa-solid,.theme-genetek .Button--hasContent .fa-regular{margin-right:.25em}.theme-genetek .Button--hasContent.Button--iconPosition--right .fa,.theme-genetek .Button--hasContent.Button--iconPosition--right .fas,.theme-genetek .Button--hasContent.Button--iconPosition--right .far{margin-right:0px;margin-left:3px}.theme-genetek .Button--ellipsis{overflow:hidden;text-overflow:ellipsis}.theme-genetek .Button--ellipsis .Button__content{overflow:hidden;text-overflow:ellipsis}.theme-genetek .Button--fluid{display:block;margin-left:0;margin-right:0}.theme-genetek .Button--circular{border-radius:50%}.theme-genetek .Button--compact{padding:0 .25em;line-height:1.333em}.theme-genetek .Button--color--default{transition:color 50ms,background-color 50ms;background-color:#1b676b;color:#fff}.theme-genetek .Button--color--default:hover{transition:color 0ms,background-color 0ms}.theme-genetek .Button--color--default:focus{transition:color 100ms,background-color 100ms}.theme-genetek .Button--color--default:hover,.theme-genetek .Button--color--default:focus{background-color:#328a8e;color:#fff}.theme-genetek .Button--color--default:active{background-color:#49acb1}.theme-genetek .Button--color--caution{transition:color 50ms,background-color 50ms;background-color:#d9b804;color:#000}.theme-genetek .Button--color--caution:hover{transition:color 0ms,background-color 0ms}.theme-genetek .Button--color--caution:focus{transition:color 100ms,background-color 100ms}.theme-genetek .Button--color--caution:hover,.theme-genetek .Button--color--caution:focus{background-color:#f5d72e;color:#000}.theme-genetek .Button--color--caution:active{background-color:#f9e572}.theme-genetek .Button--color--danger{transition:color 50ms,background-color 50ms;background-color:#bd2020;color:#fff}.theme-genetek .Button--color--danger:hover{transition:color 0ms,background-color 0ms}.theme-genetek .Button--color--danger:focus{transition:color 100ms,background-color 100ms}.theme-genetek .Button--color--danger:hover,.theme-genetek .Button--color--danger:focus{background-color:#dc4848;color:#fff}.theme-genetek .Button--color--danger:active{background-color:#e78484}.theme-genetek .Button--color--transparent{transition:color 50ms,background-color 50ms;background-color:#0f393b;color:#fff;background-color:rgba(15,57,59,0);color:rgba(234,253,230,.75)}.theme-genetek .Button--color--transparent:hover{transition:color 0ms,background-color 0ms}.theme-genetek .Button--color--transparent:focus{transition:color 100ms,background-color 100ms}.theme-genetek .Button--color--transparent:hover,.theme-genetek .Button--color--transparent:focus{background-color:#245557;color:#fff}.theme-genetek .Button--color--transparent:active{background-color:#3a7073}.theme-genetek .Button--disabled{background-color:#999 !important}.theme-genetek .Button--selected{transition:color 50ms,background-color 50ms;background-color:#1b9638;color:#fff}.theme-genetek .Button--selected:hover{transition:color 0ms,background-color 0ms}.theme-genetek .Button--selected:focus{transition:color 100ms,background-color 100ms}.theme-genetek .Button--selected:hover,.theme-genetek .Button--selected:focus{background-color:#32c154;color:#fff}.theme-genetek .Button--selected:active{background-color:#59da78}.theme-genetek .Button--flex{display:inline-flex;flex-direction:column}.theme-genetek .Button--flex--fluid{width:100%}.theme-genetek .Button--verticalAlignContent--top{justify-content:flex-start}.theme-genetek .Button--verticalAlignContent--middle{justify-content:center}.theme-genetek .Button--verticalAlignContent--bottom{justify-content:flex-end}.theme-genetek .Button__content{display:block;align-self:stretch} -.theme-genetek-disabled .ProgressBar{display:flex;position:relative;width:100%;padding:0 .5em;border-width:.0833333333em !important;border-style:solid !important;border-radius:.16em;background-color:rgba(0,0,0,.5);transition:border-color 900ms ease-out;align-items:center}.theme-genetek-disabled .ProgressBar__fill{position:absolute;top:-0.5px;left:0px;bottom:-0.5px}.theme-genetek-disabled .ProgressBar__fill--animated{transition:background-color 900ms ease-out,width 900ms ease-out}.theme-genetek-disabled .ProgressBar__content{position:relative;line-height:1.4166666667em;width:100%;text-align:right}.theme-genetek-disabled .ProgressBar--color--default{border:.0833333333em solid #36645d}.theme-genetek-disabled .ProgressBar--color--default .ProgressBar__fill{background-color:#36645d}.theme-genetek-disabled .Section{position:relative;margin-bottom:.5em;background-color:#142522;background-color:rgba(0,0,0,.33);box-sizing:border-box}.theme-genetek-disabled .Section:last-child{margin-bottom:0}.theme-genetek-disabled .Section__title{position:relative;padding:.5em;border-bottom:.1666666667em solid #559e93}.theme-genetek-disabled .Section__titleText{font-size:1.1666666667em;font-weight:bold;color:#fff}.theme-genetek-disabled .Section__buttons{position:absolute;display:inline-block;right:.5em;margin-top:-.0833333333em}.theme-genetek-disabled .Section__rest{position:relative}.theme-genetek-disabled .Section__content{padding:.66em .5em}.theme-genetek-disabled .Section--fitted>.Section__rest>.Section__content{padding:0}.theme-genetek-disabled .Section--fill{display:flex;flex-direction:column;height:100%}.theme-genetek-disabled .Section--fill>.Section__rest{flex-grow:1}.theme-genetek-disabled .Section--fill>.Section__rest>.Section__content{height:100%}.theme-genetek-disabled .Section--fill.Section--scrollable>.Section__rest>.Section__content{position:absolute;top:0;left:0;right:0;bottom:0}.theme-genetek-disabled .Section--fill.Section--iefix{display:table !important;width:100% !important;height:100% !important;border-collapse:collapse;border-spacing:0}.theme-genetek-disabled .Section--fill.Section--iefix>.Section__rest{display:table-row !important;height:100% !important}.theme-genetek-disabled .Section--scrollable{overflow-x:hidden;overflow-y:hidden}.theme-genetek-disabled .Section--scrollable>.Section__rest>.Section__content{overflow-y:scroll;overflow-x:hidden}.theme-genetek-disabled .Section .Section{background-color:transparent;margin-left:-0.5em;margin-right:-0.5em}.theme-genetek-disabled .Section .Section:first-child{margin-top:-0.5em}.theme-genetek-disabled .Section .Section .Section__titleText{font-size:1.0833333333em}.theme-genetek-disabled .Section .Section .Section .Section__titleText{font-size:1em}.theme-genetek-disabled .Layout,.theme-genetek-disabled .Layout *{scrollbar-base-color:#162926;scrollbar-face-color:#2d534d;scrollbar-3dlight-color:#1e3733;scrollbar-highlight-color:#1e3733;scrollbar-track-color:#162926;scrollbar-arrow-color:#75b4ab;scrollbar-shadow-color:#2d534d}.theme-genetek-disabled .Layout__content{position:absolute;top:0;bottom:0;left:0;right:0;overflow-x:hidden;overflow-y:hidden}.theme-genetek-disabled .Layout__content--scrollable{overflow-y:scroll;margin-bottom:0}.theme-genetek-disabled .Window{position:fixed;top:0;bottom:0;left:0;right:0;color:#fff;background-color:#1e3733;background-image:linear-gradient(to bottom, #213e39 0%, #1a302d 100%)}.theme-genetek-disabled .Window__titleBar{position:fixed;z-index:1;top:0;left:0;width:100%;height:32px;height:2.6666666667rem}.theme-genetek-disabled .Window__rest{position:fixed;top:32px;top:2.6666666667rem;bottom:0;left:0;right:0}.theme-genetek-disabled .Window__contentPadding{margin:.5rem;height:calc(100% - 1.01rem)}.theme-genetek-disabled .Window__contentPadding:after{height:0}.theme-genetek-disabled .Layout__content--scrollable .Window__contentPadding:after{display:block;content:"";height:.5rem}.theme-genetek-disabled .Window__dimmer{position:fixed;top:0;bottom:0;left:0;right:0;background-color:rgba(54,83,78,.25);pointer-events:none}.theme-genetek-disabled .Window__resizeHandle__se{position:fixed;bottom:0;right:0;width:20px;width:1.6666666667rem;height:20px;height:1.6666666667rem;cursor:se-resize}.theme-genetek-disabled .Window__resizeHandle__s{position:fixed;bottom:0;left:0;right:0;height:6px;height:.5rem;cursor:s-resize}.theme-genetek-disabled .Window__resizeHandle__e{position:fixed;top:0;bottom:0;right:0;width:3px;width:.25rem;cursor:e-resize}.theme-genetek-disabled .TitleBar{background-color:#294b46;border-bottom:1px solid #161616;box-shadow:0 2px 2px rgba(0,0,0,.1);box-shadow:0 .1666666667rem .1666666667rem rgba(0,0,0,.1);user-select:none;-ms-user-select:none}.theme-genetek-disabled .TitleBar__clickable{color:rgba(255,255,255,.5);background-color:#294b46;transition:color 250ms ease-out,background-color 250ms ease-out}.theme-genetek-disabled .TitleBar__clickable:hover{color:#fff;background-color:#c00;transition:color 0ms,background-color 0ms}.theme-genetek-disabled .TitleBar__title{position:absolute;top:0;left:46px;left:3.8333333333rem;color:rgba(255,255,255,.75);font-size:14px;font-size:1.1666666667rem;line-height:31px;line-height:2.5833333333rem;white-space:nowrap}.theme-genetek-disabled .TitleBar__dragZone{position:absolute;top:0;left:0;right:0;height:32px;height:2.6666666667rem}.theme-genetek-disabled .TitleBar__statusIcon{position:absolute;top:0;left:12px;left:1rem;transition:color .5s;font-size:20px;font-size:1.6666666667rem;line-height:32px !important;line-height:2.6666666667rem !important}.theme-genetek-disabled .TitleBar__close{position:absolute;top:-1px;right:0;width:45px;width:3.75rem;height:32px;height:2.6666666667rem;font-size:20px;font-size:1.6666666667rem;line-height:31px;line-height:2.5833333333rem;text-align:center}.theme-genetek-disabled .TitleBar__devBuildIndicator{position:absolute;top:6px;top:.5rem;right:52px;right:4.3333333333rem;min-width:20px;min-width:1.6666666667rem;padding:2px 4px;padding:.1666666667rem .3333333333rem;background-color:rgba(91,170,39,.75);color:#fff;text-align:center}.theme-genetek-disabled .Layout__content{background-position-x:-60%;background-image:url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+DQo8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgdmVyc2lvbj0iMS4wIiB2aWV3Qm94PSIwIDAgNDAgNTciIG9wYWNpdHk9Ii4xIj4NCiAgPGVsbGlwc2UgY3g9IjIwIiBjeT0iNi40OCIgcng9IjE0LjIiIHJ5PSI2LjY0IiAvPg0KICA8ZWxsaXBzZSBjeD0iMjAiIGN5PSIyMi45IiByeD0iMTAiIHJ5PSI0LjcxIiAvPg0KICA8ZWxsaXBzZSBjeD0iMjAiIGN5PSI0Ny41IiByeD0iMjAiIHJ5PSI5LjQiIC8+DQogIDxwYXRoIGQ9Im05LjIgNi40OGgtMi42MmwzLjQyIDE0LjctOS44MiAyNC42aDIuM2wxMC4xLTI0LjZ6IiAvPg0KICA8cGF0aCBkPSJtMzAuNyA2LjQ4LTMuNiAxNC43IDEwLjEgMjQuNmgyLjNsLTkuOC0yNC42IDMuNi0xNC43eiIgLz4NCjwvc3ZnPg0KPCEtLSBUaGlzIHdvcmsgaXMgbGljZW5zZWQgdW5kZXIgYSBDcmVhdGl2ZSBDb21tb25zIEF0dHJpYnV0aW9uLVNoYXJlQWxpa2UgNC4wIEludGVybmF0aW9uYWwgTGljZW5zZS4gLS0+DQo8IS0tIGh0dHA6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnL2xpY2Vuc2VzL2J5LXNhLzQuMC8gLS0+DQo=)}.theme-genetek-disabled .color-label{color:#bfcc90 !important}.theme-genetek-disabled .Button{background-color:#999 !important} +html,body{box-sizing:border-box;height:100%;margin:0;font-size:12px}html{overflow:hidden;cursor:default}body{overflow:auto;font-family:Verdana,Geneva,sans-serif}*,*:before,*:after{box-sizing:inherit}h1,h2,h3,h4,h5,h6{display:block;margin:0;padding:6px 0;padding:.5rem 0}h1{font-size:18px;font-size:1.5rem}h2{font-size:16px;font-size:1.333rem}h3{font-size:14px;font-size:1.167rem}h4{font-size:12px;font-size:1rem}td,th{vertical-align:baseline;text-align:left}.candystripe:nth-child(odd){background-color:rgba(0,0,0,.25)}.centered-image{position:absolute;height:100%;left:50%;top:50%;transform:translateX(-50%) translateY(-50%) scale(0.8)}.color-black{color:#1a1a1a !important}.color-white{color:#fff !important}.color-red{color:#df3e3e !important}.color-orange{color:#f37f33 !important}.color-yellow{color:#fbda21 !important}.color-olive{color:#cbe41c !important}.color-green{color:#25ca4c !important}.color-teal{color:#00d6cc !important}.color-blue{color:#2e93de !important}.color-violet{color:#7349cf !important}.color-purple{color:#ad45d0 !important}.color-pink{color:#e34da1 !important}.color-brown{color:#b97447 !important}.color-grey{color:#848484 !important}.color-light-grey{color:#b3b3b3 !important}.color-good{color:#68c22d !important}.color-average{color:#f29a29 !important}.color-bad{color:#df3e3e !important}.color-label{color:#8b9bb0 !important}.color-bg-black{background-color:#000 !important}.color-bg-white{background-color:#d9d9d9 !important}.color-bg-red{background-color:#bd2020 !important}.color-bg-orange{background-color:#d95e0c !important}.color-bg-yellow{background-color:#d9b804 !important}.color-bg-olive{background-color:#9aad14 !important}.color-bg-green{background-color:#1b9638 !important}.color-bg-teal{background-color:#009a93 !important}.color-bg-blue{background-color:#1c71b1 !important}.color-bg-violet{background-color:#552dab !important}.color-bg-purple{background-color:#8b2baa !important}.color-bg-pink{background-color:#cf2082 !important}.color-bg-brown{background-color:#8c5836 !important}.color-bg-grey{background-color:#646464 !important}.color-bg-light-grey{background-color:#919191 !important}.color-bg-good{background-color:#4d9121 !important}.color-bg-average{background-color:#cd7a0d !important}.color-bg-bad{background-color:#bd2020 !important}.color-bg-label{background-color:#657a94 !important}.debug-layout,.debug-layout *:not(g):not(path){color:rgba(255,255,255,.9) !important;background:transparent !important;outline:1px solid rgba(255,255,255,.5) !important;box-shadow:none !important;filter:none !important}.debug-layout:hover,.debug-layout *:not(g):not(path):hover{outline-color:rgba(255,255,255,.8) !important}@media all and (min-width: 100px){.fit-text{font-size:.1em}}@media all and (min-width: 200px){.fit-text{font-size:.2em}}@media all and (min-width: 300px){.fit-text{font-size:.3em}}@media all and (min-width: 400px){.fit-text{font-size:.4em}}@media all and (min-width: 500px){.fit-text{font-size:.5em}}@media all and (min-width: 600px){.fit-text{font-size:.6em}}@media all and (min-width: 700px){.fit-text{font-size:.7em}}@media all and (min-width: 800px){.fit-text{font-size:.8em}}@media all and (min-width: 900px){.fit-text{font-size:.9em}}@media all and (min-width: 1000px){.fit-text{font-size:1em}}@media all and (min-width: 1100px){.fit-text{font-size:1.1em}}@media all and (min-width: 1200px){.fit-text{font-size:1.2em}}@media all and (min-width: 1300px){.fit-text{font-size:1.3em}}@media all and (min-width: 1400px){.fit-text{font-size:1.4em}}@media all and (min-width: 1500px){.fit-text{font-size:1.5em}}@media all and (min-width: 1600px){.fit-text{font-size:1.6em}}@media all and (min-width: 1700px){.fit-text{font-size:1.7em}}@media all and (min-width: 1800px){.fit-text{font-size:1.8em}}@media all and (min-width: 1900px){.fit-text{font-size:1.9em}}a:link,a:visited{color:#2185d0}a:hover,a:active{color:#4972a1}.outline-dotted{outline-style:dotted !important}.outline-dashed{outline-style:dashed !important}.outline-solid{outline-style:solid !important}.outline-double{outline-style:double !important}.outline-groove{outline-style:groove !important}.outline-ridge{outline-style:ridge !important}.outline-inset{outline-style:inset !important}.outline-outset{outline-style:outset !important}.outline-color-black{outline:.167rem solid #1a1a1a !important}.outline-color-white{outline:.167rem solid #fff !important}.outline-color-red{outline:.167rem solid #df3e3e !important}.outline-color-orange{outline:.167rem solid #f37f33 !important}.outline-color-yellow{outline:.167rem solid #fbda21 !important}.outline-color-olive{outline:.167rem solid #cbe41c !important}.outline-color-green{outline:.167rem solid #25ca4c !important}.outline-color-teal{outline:.167rem solid #00d6cc !important}.outline-color-blue{outline:.167rem solid #2e93de !important}.outline-color-violet{outline:.167rem solid #7349cf !important}.outline-color-purple{outline:.167rem solid #ad45d0 !important}.outline-color-pink{outline:.167rem solid #e34da1 !important}.outline-color-brown{outline:.167rem solid #b97447 !important}.outline-color-grey{outline:.167rem solid #848484 !important}.outline-color-light-grey{outline:.167rem solid #b3b3b3 !important}.outline-color-good{outline:.167rem solid #68c22d !important}.outline-color-average{outline:.167rem solid #f29a29 !important}.outline-color-bad{outline:.167rem solid #df3e3e !important}.outline-color-label{outline:.167rem solid #8b9bb0 !important}.text-left{text-align:left}.text-center{text-align:center}.text-right{text-align:right}.text-baseline{text-align:baseline}.text-justify{text-align:justify}.text-nowrap{white-space:nowrap}.text-pre{white-space:pre}.text-bold{font-weight:bold}.text-italic{font-style:italic}.text-underline{text-decoration:underline}.BlockQuote{color:#8b9bb0;border-left:.1666666667em solid #8b9bb0;padding-left:.5em;margin-bottom:.5em}.BlockQuote:last-child{margin-bottom:0}.Button{position:relative;display:inline-block;line-height:1.667em;padding:0 .5em;margin-right:.1666666667em;white-space:nowrap;outline:0;border-radius:.16em;margin-bottom:.1666666667em;user-select:none;-ms-user-select:none}.Button:last-child{margin-right:0;margin-bottom:0}.Button .fa,.Button .fa-solid,.Button .fa-regular{margin-left:0;margin-right:0;min-width:1.333em;text-align:center}.Button--hasContent .fa,.Button--hasContent .fa-solid,.Button--hasContent .fa-regular{margin-right:.25em}.Button--hasContent.Button--iconPosition--right .fa,.Button--hasContent.Button--iconPosition--right .fas,.Button--hasContent.Button--iconPosition--right .far{margin-right:0px;margin-left:3px}.Button--ellipsis{overflow:hidden;text-overflow:ellipsis}.Button--ellipsis .Button__content{overflow:hidden;text-overflow:ellipsis}.Button--fluid{display:block;margin-left:0;margin-right:0}.Button--circular{border-radius:50%}.Button--compact{padding:0 .25em;line-height:1.333em}.Button--color--black{transition:color 50ms,background-color 50ms;background-color:#000;color:#fff}.Button--color--black:hover{transition:color 0ms,background-color 0ms}.Button--color--black:focus{transition:color 100ms,background-color 100ms}.Button--color--black:hover,.Button--color--black:focus{background-color:#131313;color:#fff}.Button--color--black:active{background-color:#262626}.Button--color--white{transition:color 50ms,background-color 50ms;background-color:#d9d9d9;color:#000}.Button--color--white:hover{transition:color 0ms,background-color 0ms}.Button--color--white:focus{transition:color 100ms,background-color 100ms}.Button--color--white:hover,.Button--color--white:focus{background-color:#f8f8f8;color:#000}.Button--color--white:active{background-color:#fbfbfb}.Button--color--red{transition:color 50ms,background-color 50ms;background-color:#bd2020;color:#fff}.Button--color--red:hover{transition:color 0ms,background-color 0ms}.Button--color--red:focus{transition:color 100ms,background-color 100ms}.Button--color--red:hover,.Button--color--red:focus{background-color:#dc4848;color:#fff}.Button--color--red:active{background-color:#e78484}.Button--color--orange{transition:color 50ms,background-color 50ms;background-color:#d95e0c;color:#fff}.Button--color--orange:hover{transition:color 0ms,background-color 0ms}.Button--color--orange:focus{transition:color 100ms,background-color 100ms}.Button--color--orange:hover,.Button--color--orange:focus{background-color:#f0853f;color:#fff}.Button--color--orange:active{background-color:#f5b082}.Button--color--yellow{transition:color 50ms,background-color 50ms;background-color:#d9b804;color:#000}.Button--color--yellow:hover{transition:color 0ms,background-color 0ms}.Button--color--yellow:focus{transition:color 100ms,background-color 100ms}.Button--color--yellow:hover,.Button--color--yellow:focus{background-color:#f5d72e;color:#000}.Button--color--yellow:active{background-color:#f9e572}.Button--color--olive{transition:color 50ms,background-color 50ms;background-color:#9aad14;color:#fff}.Button--color--olive:hover{transition:color 0ms,background-color 0ms}.Button--color--olive:focus{transition:color 100ms,background-color 100ms}.Button--color--olive:hover,.Button--color--olive:focus{background-color:#c4da2b;color:#fff}.Button--color--olive:active{background-color:#d6e761}.Button--color--green{transition:color 50ms,background-color 50ms;background-color:#1b9638;color:#fff}.Button--color--green:hover{transition:color 0ms,background-color 0ms}.Button--color--green:focus{transition:color 100ms,background-color 100ms}.Button--color--green:hover,.Button--color--green:focus{background-color:#32c154;color:#fff}.Button--color--green:active{background-color:#59da78}.Button--color--teal{transition:color 50ms,background-color 50ms;background-color:#009a93;color:#fff}.Button--color--teal:hover{transition:color 0ms,background-color 0ms}.Button--color--teal:focus{transition:color 100ms,background-color 100ms}.Button--color--teal:hover,.Button--color--teal:focus{background-color:#13c4bc;color:#fff}.Button--color--teal:active{background-color:#26eee5}.Button--color--blue{transition:color 50ms,background-color 50ms;background-color:#1c71b1;color:#fff}.Button--color--blue:hover{transition:color 0ms,background-color 0ms}.Button--color--blue:focus{transition:color 100ms,background-color 100ms}.Button--color--blue:hover,.Button--color--blue:focus{background-color:#3a95d9;color:#fff}.Button--color--blue:active{background-color:#73b3e5}.Button--color--violet{transition:color 50ms,background-color 50ms;background-color:#552dab;color:#fff}.Button--color--violet:hover{transition:color 0ms,background-color 0ms}.Button--color--violet:focus{transition:color 100ms,background-color 100ms}.Button--color--violet:hover,.Button--color--violet:focus{background-color:#7953cc;color:#fff}.Button--color--violet:active{background-color:#a389dd}.Button--color--purple{transition:color 50ms,background-color 50ms;background-color:#8b2baa;color:#fff}.Button--color--purple:hover{transition:color 0ms,background-color 0ms}.Button--color--purple:focus{transition:color 100ms,background-color 100ms}.Button--color--purple:hover,.Button--color--purple:focus{background-color:#ad4fcd;color:#fff}.Button--color--purple:active{background-color:#c785dd}.Button--color--pink{transition:color 50ms,background-color 50ms;background-color:#cf2082;color:#fff}.Button--color--pink:hover{transition:color 0ms,background-color 0ms}.Button--color--pink:focus{transition:color 100ms,background-color 100ms}.Button--color--pink:hover,.Button--color--pink:focus{background-color:#e257a5;color:#fff}.Button--color--pink:active{background-color:#ee96c7}.Button--color--brown{transition:color 50ms,background-color 50ms;background-color:#8c5836;color:#fff}.Button--color--brown:hover{transition:color 0ms,background-color 0ms}.Button--color--brown:focus{transition:color 100ms,background-color 100ms}.Button--color--brown:hover,.Button--color--brown:focus{background-color:#b47851;color:#fff}.Button--color--brown:active{background-color:#ca9c7e}.Button--color--grey{transition:color 50ms,background-color 50ms;background-color:#646464;color:#fff}.Button--color--grey:hover{transition:color 0ms,background-color 0ms}.Button--color--grey:focus{transition:color 100ms,background-color 100ms}.Button--color--grey:hover,.Button--color--grey:focus{background-color:#868686;color:#fff}.Button--color--grey:active{background-color:#a8a8a8}.Button--color--light-grey{transition:color 50ms,background-color 50ms;background-color:#919191;color:#fff}.Button--color--light-grey:hover{transition:color 0ms,background-color 0ms}.Button--color--light-grey:focus{transition:color 100ms,background-color 100ms}.Button--color--light-grey:hover,.Button--color--light-grey:focus{background-color:#bababa;color:#fff}.Button--color--light-grey:active{background-color:#e2e2e2}.Button--color--good{transition:color 50ms,background-color 50ms;background-color:#4d9121;color:#fff}.Button--color--good:hover{transition:color 0ms,background-color 0ms}.Button--color--good:focus{transition:color 100ms,background-color 100ms}.Button--color--good:hover,.Button--color--good:focus{background-color:#6cba39;color:#fff}.Button--color--good:active{background-color:#8ed55f}.Button--color--average{transition:color 50ms,background-color 50ms;background-color:#cd7a0d;color:#fff}.Button--color--average:hover{transition:color 0ms,background-color 0ms}.Button--color--average:focus{transition:color 100ms,background-color 100ms}.Button--color--average:hover,.Button--color--average:focus{background-color:#ed9d35;color:#fff}.Button--color--average:active{background-color:#f3bd76}.Button--color--bad{transition:color 50ms,background-color 50ms;background-color:#bd2020;color:#fff}.Button--color--bad:hover{transition:color 0ms,background-color 0ms}.Button--color--bad:focus{transition:color 100ms,background-color 100ms}.Button--color--bad:hover,.Button--color--bad:focus{background-color:#dc4848;color:#fff}.Button--color--bad:active{background-color:#e78484}.Button--color--label{transition:color 50ms,background-color 50ms;background-color:#657a94;color:#fff}.Button--color--label:hover{transition:color 0ms,background-color 0ms}.Button--color--label:focus{transition:color 100ms,background-color 100ms}.Button--color--label:hover,.Button--color--label:focus{background-color:#91a1b3;color:#fff}.Button--color--label:active{background-color:#bec7d3}.Button--color--default{transition:color 50ms,background-color 50ms;background-color:#3e6189;color:#fff}.Button--color--default:hover{transition:color 0ms,background-color 0ms}.Button--color--default:focus{transition:color 100ms,background-color 100ms}.Button--color--default:hover,.Button--color--default:focus{background-color:#5c83b0;color:#fff}.Button--color--default:active{background-color:#89a6c6}.Button--color--caution{transition:color 50ms,background-color 50ms;background-color:#d9b804;color:#000}.Button--color--caution:hover{transition:color 0ms,background-color 0ms}.Button--color--caution:focus{transition:color 100ms,background-color 100ms}.Button--color--caution:hover,.Button--color--caution:focus{background-color:#f5d72e;color:#000}.Button--color--caution:active{background-color:#f9e572}.Button--color--danger{transition:color 50ms,background-color 50ms;background-color:#bd2020;color:#fff}.Button--color--danger:hover{transition:color 0ms,background-color 0ms}.Button--color--danger:focus{transition:color 100ms,background-color 100ms}.Button--color--danger:hover,.Button--color--danger:focus{background-color:#dc4848;color:#fff}.Button--color--danger:active{background-color:#e78484}.Button--color--transparent{transition:color 50ms,background-color 50ms;background-color:#252525;color:#fff;background-color:rgba(37,37,37,0);color:rgba(255,255,255,.5)}.Button--color--transparent:hover{transition:color 0ms,background-color 0ms}.Button--color--transparent:focus{transition:color 100ms,background-color 100ms}.Button--color--transparent:hover,.Button--color--transparent:focus{background-color:#3e3e3e;color:#fff}.Button--color--transparent:active{background-color:#565656}.Button--disabled{background-color:#999 !important}.Button--selected{transition:color 50ms,background-color 50ms;background-color:#1b9638;color:#fff}.Button--selected:hover{transition:color 0ms,background-color 0ms}.Button--selected:focus{transition:color 100ms,background-color 100ms}.Button--selected:hover,.Button--selected:focus{background-color:#32c154;color:#fff}.Button--selected:active{background-color:#59da78}.Button--flex{display:inline-flex;flex-direction:column}.Button--flex--fluid{width:100%}.Button--verticalAlignContent--top{justify-content:flex-start}.Button--verticalAlignContent--middle{justify-content:center}.Button--verticalAlignContent--bottom{justify-content:flex-end}.Button__content{display:block;align-self:stretch}.ColorBox{display:inline-block;width:1em;height:1em;line-height:1em;text-align:center}.Dimmer{display:flex;justify-content:center;align-items:center;position:absolute;top:0;bottom:0;left:0;right:0;background-color:rgba(0,0,0,.75);z-index:1}.Dimmer--full{position:fixed;top:32px}.Divider--horizontal{margin:.5em 0}.Divider--horizontal:not(.Divider--hidden){border-top:.1666666667em solid rgba(255,255,255,.1)}.Divider--vertical{height:100%;margin:0 .5em}.Divider--vertical:not(.Divider--hidden){border-left:.1666666667em solid rgba(255,255,255,.1)}.Dropdown{position:relative}.Dropdown__control{position:relative;display:inline-block;font-family:Verdana,sans-serif;font-size:1em;width:8.3333333333em;line-height:1.4166666667em;user-select:none}.Dropdown__arrow-button{float:right;padding-left:.35em;width:1.2em;height:1.8333333333em;border-left:.0833333333em solid #000;border-left:.0833333333em solid rgba(0,0,0,.25)}.Dropdown__menu{position:absolute;overflow-y:auto;z-index:5;width:8.3333333333em;max-height:16.6666666667em;overflow-y:scroll;border-radius:0 0 .1666666667em .1666666667em;color:#fff;background-color:#000;background-color:rgba(0,0,0,.75)}.Dropdown__menu-noscroll{position:absolute;overflow-y:auto;z-index:5;width:8.3333333333em;max-height:16.6666666667em;border-radius:0 0 .1666666667em .1666666667em;color:#fff;background-color:#000;background-color:rgba(0,0,0,.75)}.Dropdown__menuentry{padding:.1666666667em .3333333333em;font-family:Verdana,sans-serif;font-size:1em;line-height:1.4166666667em;transition:background-color 100ms ease-out}.Dropdown__menuentry:hover{background-color:rgba(255,255,255,.2);transition:background-color 0ms}.Dropdown__over{top:auto;bottom:100%}.Dropdown__selected-text{display:inline-block;text-overflow:ellipsis;white-space:nowrap;height:1.4166666667em;width:calc(100% - 1.2em)}.Flex{display:-ms-flexbox;display:flex}.Flex--inline{display:inline-flex}.Flex--iefix{display:block}.Flex--iefix.Flex--inline{display:inline-block}.Flex__item--iefix{display:inline-block}.Flex--iefix--column>.Flex__item--iefix{display:block}.GeneIcon{display:inline-block;width:1em;height:1em;background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAUAAAAFACAYAAADNkKWqAAACS3pUWHREZXNjcmlwdGlvbgAAeJyVl01u3DAMhdfjUxjJti2S/gDdzKZIUGSRXCGgLXrEmBJVSo47OX0XKZpp0QFpeGMD33uiSEqWLvtvt9/vHvqb+7vuGbWS5H7ff/5w1e1WCi32+/7Tx24XkQ6xvX7UBg37fX9x0e0Cae33/XW3mxQSvr7/ARqmwtDQBAPojBnVBEcRDrLm/4Nfu11AhmO/76/f/fW8OSx5zmcNTkfSo8yUsVI12QStoSI0xwyellSOJlWEj0m0RKrJkWbGAi3atpgKtGhilJK46paQmwnVpaBOoDaJRxwQkp1wCIoZmLIjRApgG5YozV1uVBzc8ESKg6In7YES5kqSa6TJzlZEYMqHJstoe0dgXkbK0Ejs5h9U1pzF0QFtdi3ukQVscoyQkNETIB3KMtvhUbZHzeJoo1oQHWlmegENttuPhWxKBRxDTioHG2Kojv0hrKCTXSawm3NgcKS+zsjYHPVOkme04x9ldS3IR0V75Y7CwQW2iJqAXSwyjj5T+enigH1+Cr7JvO5VjNVhiQe0SxfhxXEAQHCsmqaS7V6PC9udpxBIBgWyJ4BHO37X782xVw6eNESR9siUBrs5SgGlRpLfX22Br014FZ3pXDE85zAoBRTaWY8v//Hodoor5fBPvTHJGFUSwaMu1fPjfBMMKtnRn6eSg7BdpFMBU9o2gjA9b1M8QdgmaAi8STDKAI7D3qmEcqCDbJKURQtvm8kzCeO2wKaljpFgk8Z7b4DfAsexg87eFi7724eb/ub+rvsFmer4u2pZeMcAACAASURBVHic7L19YBXVnf//nvBMIPIUQBsCrfKryIIu94KtLaWl2lCJrVtpdV23PtTea2zTNbBru63QVijutou4m231Rqtl11p/rfZJoqTGtCnWr8IdKliNfhFMYqwhAYyEAHm68/1j7jlz5syZ57m5iTlvHO+9M+fO687cue98zvmcM0cpr6gCALTv3a8BwNzlFyrIoew4+eZLSUmNPo0FdFNYsGA+AKB5736NmMOha7ZrpOC5j1YpAHDbvd+k6+6p2OqrnB0n33wpKanRKaW0dJm2YsWFppXNzS3o2daApvo4Fl2apo/VqzpRW6JibVuMPlY2Fnsq94341SDmQ7Rnz34AQD75S9eukiYoJTVKVQDohtPc3GLaUL2qE+VHVyoAUH50pVK9qhOVjcU4eEWdAgAHr6hTKhuLPZdjxfPyzZeSkhqdUsorqnCgtlGbPXsaXblgwXw0N7fg39L/P11XW6Ji+413YNGlabquqT6Oqoe2YG1bzLFc4YbVdJ9EHR1dNPrKN19KSmp0SiFJkAO1jRoAECPq6OjCVZmttOD2tjX6k41x492bdZOpKtnlWK50R8a0XwAW88k3X6Sd9xpti2FUXlEljVZKahiKGuCha7Zr1as6cVNpGd3Y2rovEkhp6TL6/MHWOlQ2FtNkBVG++byiMj8iaYJSUsNPSnlFFQ5ds11rqo+j/OhK5bZ7v6nVlqhGJMUr5bA3FUCNeFNVyS6sbYvhnoqtys5Zu7VFl6apCfniB5QTn1fU5kckTVBKanipgDxZdGna1J1EKCfzA4CYe5lD12zX2PY5X/wIZMeXkpIafRpLnpAIDIA3E0oK1qWgR4EOOvfRKhqBsfLNDyg7vpSU1OjTWCDbefia7dptq57yVv0UmZ+LtretAUp24bZ7v6kd4trgfPMDyIkvJSU1OkUjQNJ/rqk+Dmy2Ke1kfG7VYwDbb7wDu7Idle+p2Gra5okfUk78kaYnfnS3KVK+4tb1Q2roki/57wV+AaAPG6stUXHuo1XKokvT5q4mbkrBMD+HJAg26qM0zn20SqktUU1D1ULxvcqBP9LEf/l264aCf8Wt65Urbl2vSP7Q8gk333x23Ujk0yTI2raYf1Ngoz4n82N0273f1NiOy6H4AWTHHyly+qKH4iK0YwzVj1Dy9R//cOOTbSONTw2wtkSlNw3wJRV61diD+QH6jQlqS6yZksB8n7LjjwR5+YJzeRG67TvXP0LJt//xDwc+KTOS+AWAbgpr22K0Px4ZYRGpNus3Kzh0zXaN9Mcjm/LNl5KSGp2iSRByY4HaEhXbEX0WFoA+bndzjIzEMG3LN18qmIay7Wc4aKgb+4e7+PMx0q6HAsAYiUEiMXZsbVRiR2KQSIxsyzdfSkpqdMrfSJAIJEeCBJeX6COXEcpw53tpIwrLd0tCSX7++KSMn31SA2yqj/vvHOwj+UF07qNVSlO9tZtLIH4A2fFHitwawUcrP9c/PpZv1w1J8vPHJ9v87s9yN5hcjcQAjGqo091g8sVnNRJuhvBe6Ygq+ZKfTz41wNvu/aZmjMTwWEUk/QC9Do3baNyyns/CBuL7lQOf1UgwQCkpqfAKPhKE7QSd8ECSI0GkpKSGmWg3mLVtMeDemFZ5zfacAu2MJ998KSmp0afgI0FItdfjEDgiORJESkpquMjSBli4YTXdmE43RAKJx4199mxrcGwDzBefl7wlvpTUe1/UANv37tcA0Llzm5tbsLL9dlowzKRE8aeKTPsFAH5S8nzzRZKTIklJvbc1FtBnZOMnJwdgmm4SJbus01LCOi2lqByeMiIwYkR7ahs1dlrMfPLtJI1LSuq9rQIyJy87WTiZk/eeiq1KZWMxHaJGsqjVqzppxpYML3Mq17OtwbTv5uYWzJ49DQdqG7V88/Nz2qWkpIaDCvgVzc0t6OjoQmVjMXbO2q0BwM5ZuzVys4KFT5RpALDwiTKN3MXZS7mOji7TxOR2yjdfSkpq9Egpr6gCicIAfeJwUjVkx+aSkRNsNxKSSPBazo6Tb76UlNToFE2CkOpgrk3BjpNvvpSU1OgT7Qg9VIZgxyGRWa5lxyFZaC/Z4TCy40i+5Ev+0PNpBJhPte/dr7HdVMiHi7oKbMeRfMmX/NHJz7sBirrANDe3oGdbA5rq9fG75JHcLWZtW4w+khsouJX7Rvxq2gWGaM+e/QAAyZd8yR+dfEsWOB9iu8AQVa/qRPnRlQoAlB9dqZCM78Er6hQAOHhFnUIyvl7KOfEkX/Ilf3Ty8x4BAubsLKB3ViZ9AYlqS1RrR+h6a0doUbnCDavpPonsstCSL/mSP3r4w8IAASM7y3ZTuSqzlW4PMxSudEfGtF/APgtty59Tpj+5fLnxpif3AgmganMdw8+e5I33R8vP9/FL/qjmn5/db5LZb3pzGiqAVxn++LY1+DyA+Ag5/mFjgOSO0DeVltF1ra37Itl3aeky+vzB1jrHO1Kb+N9SEUsAKnO3G/q6BvoTsiKW0O+LyK7Pvi7tNP5C+eLn+/glf1TzW4p1vqrqN30CgBiAWAz4hgp8Hsb6w9nHf4sBSAA1SWPdz4bx8Q8LAySzwpUfXamQm6Pa3hY/JV4NwPHWXOyscDtn7dbIcDlb/sYyxBJAGgB7e1by2mKCCQdzBFBVMt8fP+JpAXwff0i+phmjDBVFGXI+r6Hgp5hj5vXqvLqc87XUa7bb1m9+wxf/H9rWIJY1M9QYJhiD8UjE3lwuxr0GdCPsG6bf/1j3tw6NFl2axiGkNdz7TftCTuYH6Gc/Bcdb9B+6Zru2yAOfeFc8a4JExPxiiewXXZMtWJPIvoYRMnIm6IefK71X+JrAbBRFEZTMDZ9XStOQdOCTalqu+FrqNSjJD0bPr4H+x70ma26Mu8WIC7IRYkwvEzPvBa9mHyM9fnINkJ9X0v/3P2wMkPwFAODtBgUik0vB+ueH07mPVtG/AE78NAzzi4N7TBiPvAmKq8UJ4EidL36uNBR8kTlFyU+n9feyhqdpGtLpNOJx5+kUcnH8xPxSaYcI8Mrcff/E/LTUT23LrN8MX/xYClCTjMmRSJDfcdYcyQZifuR9KveGyI+fYXsRzx8WVWDA46xwbpMwEQN0qQa7zkrHVX/5CNC2Gsw3FnLV4qojdYFmxdMEc0QpAaZNyeWsfF4isij46XQasVgMiqJYqtmapkFVVVsTzMXxs+aXjDtHILngs+anJP8hEv75bWssEVwsBfq7UlXGGJk2Ikt0mNBNFABNlgQ+fk3T+WyUl9KMnasAVP/nP3AEGPW0eKT/jj4rnE0hp9nn3KrHALbfeAd2GbPC2fNRJt6BndhIjzVDrlq8feP93vjM8YvMj6z3a4Kej9/u/LuINyVN00wmGAU/lv3l2UWZsRj/0zUU9fHz5pdKOQcvybblkfJ589N+7/wjUBq8HX8qyzdFcdmqMGoY8yMiyT8w78tOlMYmSUKdf7dpN1zMDzb8QB2h7SZGDrIvIOSscCkY5uc0P4mfWenalluqvoC1KhxLwJgRj3CJGcYSxnq1Bth4v+9Z8ezMDwgQAeZ4Vj7X9rcc8nnjHQq+yPySScV+aVseKV9kfsonkvZLg/frj+3qggRneAnn56ayzG/x36M4/yqARPZtKY2J/ARl+T9GNnzfEaCT0YWZHT7QrHDsHzyPkzN5nZWOVHHZJEiaWy/KBANMggTWz+SVH6n5BeD7FW9AxJT4KHC4zgroh29nfqmEvQknsTwyvp35aftutn2P8qsXffHV7P9igH7hk+vYzgDBtReSaJHjRPL9O5xnaow2XsDzfRmglygvqAnWlqhk+Iq/SDLArHQLnyjTTLfRF/CJpwm7wdiYHwn6SBny8VCTAHC/L76dePMjxiOKwETbwvJZxWIxJBIJJBLiiaFFnylKPmG4Rn8R8p3ML1njcNlno5qwfCfzU5Y9EBnfviGBE2uMpJrMPI/VmNsGAx+/CqBGMcyP73sT89YeyPN9JUG8VnODGCCZFU5vA3AIf1i5JD0s2mgMlrablU7nf9maxMhK2NcvAUvSRJgsuXy5R37aU+JDFHU5bvN8/O7nX2R+hG9ryhHwSRKEZbLH6pQECct3M79UzPnnkfTx/YvkZn7aG8uE7yNSHizwxNee5PisqQFms+PXsc+ZpIkKfRRJ4ONPaLoBkud2ckqGCPjD4mYIAEAGNlc9tCVnjKqHttDGVkc+TWIw5pVdhJnf7Ho2YyzKFHvm24g3RdZgeLMRbQvLJ+LNLx6Po6bG+CvBGyFRVHxWfqK/MHwv5pdUFcclDN+L+Snv3+e4+OKL2rftlGAeucoAO4ok1PfPRtc1irUndo1iLiOQiD8sDJD0BCeTGrFj+6IS2xO8qT5uuoeYhX+kzmRuUGuMMNAu2eHKn++d73D8IhO0S0Cw23wdvwOfmF8ymYSiKIjH4/Q1/YwCU4qKz0d3/LG7dYEJwvdqfilotksYvlfzy/TAdvHDX39kl7k6CzCvs29LAIDGRWMa7Gqwr0b0/bvKpu5ud/y+DNBL1TZoEmTRpWnTScmVDl2z3dIJU8gn5kYiPSbJYfnLmLC2FwozxT74TokOpwSJmzwfv0Cs+YleA4b51dTUCI05DJ/IrqrveSSID74f80tCsV2C8v2YX0Gh/RKIL0p86J9K8Jqss34HCcaUovj+aaJDJJcokOf7zgJfcet6xa4tMExfwEA9wZ36BdrIc094dpQHl921ZHmzPeTj3IViqgL75AO6CUbZD9Avn5UX8wMgjAij4BORareqqqa2QFVV6Ta2Oh6G79f8Ug6VgVef9M/3a35R801yNUGAmh/5TWSrv6oKoCQkn0hkfrHs5/HQFzCykSBRd4QOOxLBizz3xJ9TZs5ksdldmCM9k8GxRknWMe2FI3UkSCwWg8qk8vjX7Hon8wszEoIMfyNcYnjks9TU1FBDJI98ddgPP0rzI3r1Se/8KM3PL/8fsuefdmim+3aLTcQGCJhviBBqJIxdAoSAHExQ9P0Pm6FwgbPAgPdIMGAWmDU80XM+yjNlxNgUcrYzdBRZ2ECKIAsb1PzC8NPptJDJm7LoM5lM0CM/defeyM0PAJJzvPG1kp9Gbn5++KnNadqU5s8ErQZIbp3VBuCnYa4/p2ovEbtdZITDNQscaCQA2wnaywXgqyf6/bbZXSLheGCy8ImTWCLQSJBIFaAnPunIzC6qqiKVSiGVMr4AYj5OVc+gIzHszI/l2g1/U1WVRo5++MlNy4X786rEP91veU7MxwtfaXMe05trfnJj3Dqig361LhU97hKoyX51Pw06EiSRTbR4ueFBDEYSJKYZfQOB6EaC5ErDbiQAN57XbkSI6fZXfKdBsi4B/U+gH36O5HkkCjeCg4hdT0yQjfr4drmgfEBv7yP74E3OLgrly5Cqcg32+eL7jf4S/3Q/av7zy8Zn5177PX6/0V/UfFp9JTc+MDXziJrq2G4qxvsPg176vvjGvgR9/7yYoU1VONRIkFzK90iAJPx3hIaPnuheOjmziRIS8fE3RiC3ybrcJz9H8sp36lpDTJAYH2uEdtVSsjbo8bNtfHwCxE+ZXJx/EmWxkRe/PvloakTxfwHgA3AzQU5c2x8xv7eYIoGP3yW761WhRoLkUqQNoHDDarounW6IZN/xuLHPnm0Njm0QJv6Xn/HfBsiOHslGh/G4MbmLL36+j1/ADxIBBuV/+ctXm/YlMjcvz++/P/j5d4sAtZd1k1EWf5k+Z18ri78c6vy7RYC55H8y+/1/AOZ7/Nk2OXEjP4gBvhbh9RdETsc/bAyQzNjOTly8sv12uj3MpCjxp4pM+wXsZ6a34//xzTKkAShM+1Dszr1Qa7hJkUgGuc0oFwU/38d/95v6LcLY4x9K/vkb9fcl24wfearky1BVFYVPfs6xXC7Pv/by/VhfNi/nx59vPrlHIDvZERkyt/6I8f3/Q9saOuxtKI4fCHf9DYsqsGhydACm6e5Qsss6LR6s0+KJyuEp4y8AORF7ahs1dlo+V/68OijcftVNy6181GF7Ww74eT7+9fPq8sqv3QzLfpP1QNWTW1zL5fL8ry+bNzTXX575tSW7kOT2qwi+/58O8fGHvf7yngUmc4KykxWTOUHvqdiqVDYW0yEyJItTvaqTZozI8Bancj3bGkz7bm5uwezZ03CgtlGTfMmX/NHLz7sB8mpubkFHRxcqG4uxc9ZuDQB2ztqtkcHSC58o0wBg4RNlGhnY7KVcR0eXZfZ5yZd8yR/d/GHRBsjODM/OGM+ODSQ9t9k0NmnI9FrOjiP5ki/5o5M/LAwQMGaG52eMHyqO5Eu+5I8+Pk2CkCwMn52JWnYc4sy5lh1H8iVf8kcfXymvqEL73v0amyYm5hR1CGrHkXzJl3zJzwdfKS1dZklBNze3oGdbA5rq9fFz5JHcrWFtW4w+kgHMbuW+Eb+apqCJ9uzZDwCQfMmXfMnPB7+AAPkMSfWqTnJ/LpQfXamQjEt2uAoOXlGnkIyLl3L8AbI8yZd8yZf8fPCV8ooqU3YE0DsLkr44RLUlqrUjYr21I6KoXOGG1XSfRHZZIMmXfMmX/KHi0ywwyY6waeKrMsbs7Qd2/hoA8Mzjxo4/eZU+3GRp+ZWO5Up3ZEz7BeyzQHb8MENhcsXXsvz1eeIP5fHfvHkNipcCs3/NHP+d9wFQsX7efFO5jteAT4yL+PgvL9MHmF7ODsX7MmKI4WMlR03lYgDUOUa5KPh3/3oNoAJKG3Orrs1pqNDnuyBqzZ7/xyP//vWhiNjIHv9eAEBVSZ1juUiOXzAUct+dV6IYy3H3PNrchvVv6rudt+lbER9/bq5/aoDkjqw3lZbRNy787VwApdlXH4I/PQ+gFQBw8DPtdO2DrXWOd4Rl+S2t+mB6xe0eZDYi00XMn29MF+iH39q6T7xfG57dpywtjZbP3ouP6LnnnsOOHTsi5X/9nH0ongcUnwvM/iBQvBQoXgZkJ0zJLmQi1hp07gM6DwAdrwGdh4DON4HOduDBTDB+8S9VuntyVxJA1W/5pgIqVMQQA2LkbjMx8p/x8WJA53wjQvB1/bWooN+qyi0w3/FYeJf27OPnAn//DMz7TL0WlZYGO/4/tdxFn5fgU2jD79CJvSjGcnRiL/biDiyHMYsbWc8+luBTmB/w/LPXfwrGDaD8zoThdP0r5RVVdFam8qMrFXJzQhLJsca3ZsZ5AIBdx1+nz0Xadfz17LPnyaFgafnX6LAVck9+8iFE/LvbjBMRxACNuXI0AArWz9vliy+6LTdvfIrLelbsrFRB+SLj42VnhH7555Ws8WB+rAHamyAAvN7mj//HX5e5mh/5SbiaIICPXVnn7/p7cw0sE/24mCAr9o7KqqqPkfX3/ZfBvGd2LmQNmmUQl+jPsmHP7KyEXvgkkiNGRp6zpkeeP3nXz9Dd0Iurn76BriOPxATXz/N3/oNOiyGatgKwv/5pP8BFl6ZxCGkN934zu8ZqfHavAbMprplxXtYErVHjoWu2a4sEH9zCZ253r0HzZYK8+QXis/vjXvPGx7/m14fli4wvEdP/Dtao5m2XXHIJLrnkElsj9Mon5hdG7Ptfb/PHZ00msATvD3L+6XUkCMKIIVvW2wRs3vnkBLC3ObYzP0B8k1LyByoI32x4xASJ9uIOAMCTd/3Msq+9uCP7p8kcIfrlB1Gce+TF8+mZbKqPW8JSQGx2IolM0lhnGOG5j1YpTfXWj2fHh3vQY5LI/Nh7e/rhazBfUgqMy0wTlCPb7d7vlw8Y5kdmPHMSMUVAN8Lrr7/eUsYrn0R+JPrzo+KlzHvPNRuh5+NXGQ/0a4T8e5n3+zv//LcJc/CbXWKChfOtAPzwVV+RfP/+siJmKFJ3Q2/O+VGJ51vaAPXqr9FmR6I5r0ZIRN6jR4J6eyCpBju1AdDqbwrGH7Ds79otCnQzP7+zktlFePC5nrwOMitaKpUymR+Zd4M1uxo1JYwI+SjQK//mzTqfNb5i2oziXAUGgE6m6bLzgP7Y8Rrw24c9Hv/l2eYPk/HRCq5LFZiWMj2NAfjYk95m5bt74xrOwPg/gzAbq6ipjjk15CbZP/X8/f8S5nNsHL+iLLOJANnPyX8Y/YOQarAbf/2bCjU80u5GqrVgnh/+dtYTngM+8PTrdH3nXYvR3dBL1/HVYC/Xv7XuZj1SL26ZSCRQU1ODRCKBwic/Z+HTM0n6z2y/8Q7ohqW33xntef4kMsztN94B0neHl5nPyUMU6GZ+Qfh2ER+/3i7y49f75ZNjopMNqYrJ+IhE6wBrFOiVX7zUaPMjS5YE/oeZyfwt81o3avZ9ZF+zP+jj+C3hm5356SvUbMhnvgE/04CYffB1/k2Ro0MkyD5nXzMi1WHvfIcQ0pfMoXPg3x8nYoRTJ04AngN6TveZ1gPGujB8DebfHv+al6axPqCL/HZqamqE/ALAOiuT3oWlFbwRkoW8ZiV6zUZ/zzze4X1WLDbVn3Cv/3gxv0CzoiHCKnDAWbFoZMfMuGYxvJjdJRHs+Gf/Os4kPNjF+oMsKGCjkZjlPcQIFx/2cfyXLwdJeJisQHgpMBPCqNYaKnWyOct9zMoWB/tWXR5NkD9N2fVxv7MSsgfFRHSapkBRMoLzwF4DfGSu+pqVkO3CYqfOuxYDb+vPlzzbiiT0P0mddy1G92G9Ssy2/ymbvJ9/9voXRXlukR9vggDcZ4XjZ2Wag14AB3EEE5i96G15oqiQjfjMWeDW7L50hZkVTZQM8WR+jILw7aq61s/nXt7PrGxkT4lY0pLsoCLmF9MgmgnrkksuAQDswMu++GLDE4c4mczfosD2zpKk+u5vVjaR4al0BR/xGltiqvmzkeiLbPd8/CT/YHrOJhpsEiNs3sFce/XHt+1Yw/+ZBbOefC72g5gbQb3ySfV3y9cW4/D0Xiz/rlE2CeDrh3uBZr3qS76NLVnz62nqw38/24olgiSIVz5fw7JbZyfiC4qiP1c2ifnUAC2zgrV3QJs7G3PQiyNohdEf8HmIsrtWUzTMT2nvALJG6nlWKP6vqKADkF/z88WHd+Pj5ZQFDjorll01F6pia34ieeeLqmDiKpkeBcaQyWQcjHCfP77K2hqRXQ8wY0Yqi20QQwwyKx9rZE4mSMrwYte1+eWzcNb8yB9HOykwz2JNDFDxyQe2XLkYKAV6+ozqbBLAV/+1FGg2U7dkI8KeJnPVdy/uwOUwOmoH+f3xR2cnanaKTRQo4NMkCDsz+6dnd2HGwkkAAG3ubCYKLGV29SGHqA8gnaCJAR4/eBpPdUzzNDO8VrI3+70zl3NNDEgaiZAg5ieaGV7EJz3M/RqfnSjIB59GgD4zoKJIkSZDPPL1ER5ANBlII1OgbLrf4/GT+Wz9dnkVST8fMcSgbrzF2/E/yRgICWAtwa8gMQLBdxYD9Welzev3r4GvzM+d+z4fx6yhvf07sESAHr//fXdeqSczrlyM7uJedJ7Vg4v/Q6/vvvSvpSg8Oh49TX1Y8qz+G++8azEAoL22GwDw38+2mjouk0TIvE3f8vX7Cyo2+mPXKZusx0//XpPGwaqHtuDEW704fvA0fbNRhW0FMTZWfJWXRH6s+Z14qxdVD22hjZ28WL5Z2faAbBSoQfNtflr2XzB+dMo137aa7JvP9/jVl0xG1PZkSN8ufi+geubHsv/0nw+7uHUFSljeQ/cV83H8vNlZk7GcuIqZqRFSo8+9n3+z+S1aFMf06Wf7WM7BokU/sjD8Xn/dxb2Y2mk0gR3+9nl6JNsMFE4aj8OXnYeX/rEU3Yd7LeYH6FEhzRT75JMo1znaFUtRrH6gKGJ+AWD0xCaTiqx4mJlftL0DAGuCbBSoy9zfz9jOmt+Kh++nPbGb6uOme3jx/PXMNJNUsWwLt8b9tQUARYPtv5QGpID1JXWe+WRsYY3NYien8mxPdK/8KOWHr4/ttRpYQcGfITJCYnxku2hZP+9znvkfKzmq96/j/hltIbwREuPj3xGjPvKxI0e9H/+Tu2xaANjaqegvriZY9HbC9Vf6+f6NaT5XrPg0pk49x2UpFqwrxYoVrwX6/v93nh50TJ2km9/p/gEc/uF5etb3DaAn3oeeeB+wAChsH4/OP/cA0JMhKegR4eFvn6cnSZ7TGXfP03xd/2TuacW1WudNdsdvOxKErQIDECZDrHreZr2hYD3Bs4NbYgLzq9Hcu8kkAZT451uT9c7yUj5XPeHdoj///BrYRVx6O1+MeU2MD7CGSORPwOd88VXAMpqCtOdZgzBikLCYFin7seyj5+Pno0DroAwf0oBsO5jf73/ChNkAJkJRCrB794/w0Y/eInj3GQATAQC7d6ewciVpOphO1xMFuf5mHp+EqScmoLuhF4WTxgNpoGduH3pK+lB4znhMPjwOS/63lVaF8TYwtXUC2o9246ZnzddQ2OufRIS8Mdqt51MHPJ8aIBmLB6Zxw2p+1ujPrA+BmOARTMCcubMxAx2mEuc+WkXH4rES8c0iqXHG/FTN/YLkfi1++O3wJy/lvfIVRbFtyPUj0v5XVfL3vvid+4DiZXy8a2SG9YRHAZf4MDpDE3Vy93Pwfv5jliRIjM2wIgGLScfE5qirzh+fNUBTVxgvOUhW5i/Rz/F//OOPAJgFYKq+J03BmDFnc/vvBjAl+3wqABVjxpDXZ+PjH/+/+MMfgvCB7tO9mAo96mtHN+Yumqqv65ygX+wTgZ4zfSicOB6Hf3gecFjf1t2j1xZvejbB9A3c5ZvPi60Oa5pGzc5uPWBtReb5wpEgHQ/8CwCgpvcS4Qf5zPwPCzs63/rn/xWWX9f6jKka7N4Tv4xJgrDGBxgXn0tDqcr8GrJngVSDvY7EuMpm14/ZrF9ns/7x7KPvkSgaPCdB7CJAdjSIHAnicSTIm/xAfNb0gv9V8j4SogVADCtXPp3dOgO7d8ey6/g/Ssezy4xsuQQANfve4wCA3bvfhT4S5Hue+P/4ZlpPgnwtG9G1Au1HuzF31lR0PwBinAAAIABJREFUF+vmRoyuZ66e9S2cqCdGCieNxweeNvcIIcmQV+f5HwlFxEd4vAHyZiiqOouuf5uRILr59bc2C5fftvwfy85v/fP/Csv2Nu3HY6WfBBC0J7qd0cW5JSs1Zpgf6Z2ZlV/+EZvFTm7lfY9EUeCpyuXF/PzwO17L3s3lgGFgfCRnJ1KOvJfu65B3Pq1pmqqcXuuejOPFYNqXv/PPtuNFIz/8FSv2obd3Jnp7Z2ZNTVdv79ncMhO9vVOyjyQ6jGH37suy66dgxYoCX/y9uAOHL+MCnPcD7VO7jaRIaXa0xxvAqb5+9MzSza9nbh9tAzz87fPQeddibMkaaVQjUYLK80iQn/5pAvpbmzE+M4DxmQGMO9VFn0+cPBWZ7h5TtEfMj5Rll4mTCtHbtB9/GjfHR0/87EgQU6dWvgNoWl9ULbswxkdCAcYXlI3+e6I/a7PYybF8kJEoUdSBA/A/MS6OzkMwGaEf8cbXeQj4wvne+eqc5Rbz8iX+vTFAbfMxEmST6F4i4czQ30iI+9HdPSO7LAMb23Z3n4Pu7r7s4znZMpOzj+fA+AHE0N29OLutANioeOYns8fffbpXX3p6MXf6VBROHK+3gjUD7e906+2BACa/NU7f0QIAbwB4AZi6fwJ6nulDd0Mviv/rZSQ3+b/+RXdB0jRN+LuwW0/ldyTIuFNdRnfPvjPQ+s5AGT8RGQCDp8aiYGqh9UOcOWl6feb0aUyaOAUTJxUCPe/SgxV9Ptue+GoMiPFRIIn60kZfQZX5y8+KawUNMxIlCvkbCQLo3Sic+wPyI0Wee05PvYluh+WVT+7jF+aWWOz9AHG+P75ztxOPYiPINp/8HMkr/7XXjqG4+FwcOQKww1KamoA5c6YBOBtAE4Bp0BMdb+PIkQVgmyWamhZgzpy3ceTIgG8+ABrtdUM3wqmTJqD7NHPnlwVAYfN4PRLcDXSe6cHkieNoGyDpJ8i2w/nhJ5PGO/U2cc302ss2Xp5HghDDO/1uFyZOMjJJ2pmTGD9xCga7e/DVg3XInOxAwZTZGJ95HRpgKj9x0iRoZ05CmTiFvt9zT3DScEBMEGA6RpPbHcaN1zHBL6XGGjoEHYkRlbzyyZfKfpnCNkHmtZPx+eV32mR09MQIm9kz2v/s7ggdhG9qxlOzl4CqJ0ZiMT0jrHq5GSrZz2988nMkr/xMRs2an1VHjhyCbnyHsmteyj6Ozz6qTNmXEGQkyNRCI5kxtXACupt70b0ga34LADQBPe/vA7LdhYnZsUoCwKvBjl8kJ2Pz2l3GdSRI4YbVtPAfPnsM2kA/fd3bP4iJkyaioGgWAKCvYCwyp7tRMGkqxp3S77WfOdVtfKixemj88d/MpOt6tjU49gRn+XvTzxjVWJqV4weIutSP4sDy+CcD8dPpBuEu7b4hu68gHjf2GQnfpseLYjNwIij/xrENkdwSf+esYHztvmfo7lWA/o9NhHgxQGV5sO9/795nxCfUp5YH5KfTbDscf77Z9DQ/bI79jaiIx88KxL/yfUdMJth+tBt4v5HwICI3Q6BiTa8NiP9rtNe/Xzld/9QA2/fu1wCAnTh4Zfvt9I2bk1+HNtCPqZnJdN3xwrFAQQE2/9cmuu5bX/wnTBg3xlQu/lSRab8A6OTHRG58khlWfmPcKUb7rD4pzPor68zlAKMdMSJ+mEmRcsX3OilMFPzPXLcGsz+o39WFHv+dXwbp5MyWI21+UfL/eHmZ/rNmJjuKbb6PdnJmy5E2vyj5okmBtDuz19+8Osdy0Xz/2XsEsneK2az/Ka4q+R5XTgU2GruPgj/+/K8CAP79w8bsbak79evv1XnM9ff0Gr254Y8j4/ofC+gzMvGTEwMwTTe3MfXvlunmZgimpfve//ynpRyeMhyYfJA9tY0aOy2eG3/95jrLfpXfLLfwReWi4KNkl5UP6/GLyuWK3zSE/N8+LDj+TbDwReUiOf4n66By+1Vxi/X4n6zD9jk5uP7mCa6/TYLrT1Aumu8fHr9/YPuN+yLn1+K/LfzkJgH/spF1/ReQOTnZyYLJnJz3VGxVKhuL6RAVkkWpXtVJMzZkeIlTuZ5tDaZ9Nze3YPbsaThQ26hJvuRLvuTni2+5eVFzcws6OrpQ2ViMnbN2awCwc9ZujfSfWfhEmQYAC58o00jfHS/lOjq6LLO/iyT5ki/5kj9UfKW8oso0Mzs7Yzs7YJn0nGbTyKQh0Ws5O47kS77kS34++DQJQmZm52dsj1p2HMmXfMmX/KHm036AxBlzLTuO5Et+Pvm5/uG5cfJ9/KOVr5RXVKF9736NTROTFHHUIagdR/IlP5/8fCvfxz+a+Upp6TJLCrq5uQU92xrQVK+PnyOP5G4Na9ti9JHcxtqt3DfiV9MUNNGePfsBAJIv+fniD1XkZydRF5DRdP7zzS8gQD5DUr2qk9yfC+VHVyok45IdroKDV9QpJOPipRx/gCxP8iU/n/x8K9/HP5r5liwwoHcWJH1xiGpLVGtHREFHaFG5wg2r6T6J7LJAki/5Q83Pt/J9/KOZb8kCs2niqzJb6RvCDEUp3ZEx7RewzwINV/75bfoQpyQzafsPNu/EAHrRUdJE101om4ZB9OMHG6si5T9+/WYAQGuBcTeO970LIAN84dfGRDY/u/R2aBkNR+YbUxi8F85/mKFoXvj51nA//+9VvuWO0DeVltE3trZ6vAumi0pL6e2E8WBrneMdYYcT/1ut5hsvDKIPg+hHP3oxiH4MoBcD6MMA83oQ/WjC02jCMziEP4Xi4x8nmfjaYAYYyEAbyEDLaEBGX6f1Z/TbAQ1q0DIazrzRhTNvdKG3rTsUP9/nv6UlzL2wDM2fb0QIdvx8azie/9HAt8wK92BrHa7KbI0MDugHclVmKx5srXOdFWq48L2a3yD6OfOrN5lfUL5n8xvUHM1vpJ5/P+b3oQ+JJ+ki61taVEd+vjUcz/9o4dvOCudHiewf2BoP12zoWdFiMaTSYlAyHgNU5w8RhO9kfvpz1vzqTeYXBd/R/AYzjuYXBT9KRcFfsWIFAGDPnj2O5vf889ZZCu34+dZIOv/vJT4dC9xUHw9dLUjE3Muc+2iV0lRvveW4F34iDaTSKpKKbnamRdG3JVzmSvLLNyK8PmHkl8FA9vkABtBn2W9YPjU/8veSMT9k9EXLZI3Qg8Kc/ygUhM+b3J49e7Bnzx5hGfIoMj8nfr41nM+/SAsqJ9MlH/yaS16mSxi+cFY40axMTkrEgO7sb3/qePtI0O+saCZGGqhJZiO8WAyJlErnjVVV67YawTXulU8SHrqx9WXb+fos5jeIPvTjTNb8evF/0YiD+KNtBOiVTxIeJvMbzEAb0I1O0zSAPCdRYEbD6dffQd/bJ20jwKDnXxP8UVECeIhXPklkEIlMbcWKFRYTdJPTrGz5luP5Dzg3DH+X5DC/P1YLKidj1urx9PXRhj40V59y/TxR8WsueRnnrzOyxq8+1oXEc4sD8WkVmPSfaaqPA5td9yXUz14C/n4J8LH5wB8F3ay233gHdmU7Kt5TsdW0zZEfi0FVVUBVEUsBsZhqGF52eyKlQlUBNak/ImatDnvlpzaX+TY/PTo8gwH0wk5e+aWZCb7NL9M36PTVBD7/IvMj6/2aoFf+3Sgzmd7zzz+PD33oQ6ZqbUGB5UZGJolM04mfb9mef01DTQ0/FaY38VMqBP79MSLm13csg/EzC9B3LEPN0M0Eo+Dz5gcA56+bhhq87GqCIr5wVjhTqtmnfvaSzYYAs6IRxRIq1JoYkADUmpge3bHmpuoRH1smluDCUB/85MblWfNjq75u5udS/fXBby3o9WV+2qARIWgDNlXhILPSOTQn+I4AffCVTcstVVjymq8OE2Nkq8CidkGnWdnyLS+/v5qaGpMR8qbotA1AqN8fERv5Hbj5hOlx1urxztXhCPis+X1s/ftMj+evm+ZcHfY7K1wYiaI/oiCzcqkq+Z8R1SUSCcSydWBVVfUvnSljlwvxyh/IGp2e/DhjMr8B2ubXy5hjH87B36APpzCIAbThxVB8P+ZHEiHjZhcikzXAvvaecHwv5pcyT49Ef3Y2c5P44QPm6I01NRIJisyQf59Xfr7l9vtLJBLUBBOJhLCM0zaisLPiDfZoGFOoIP4r3YjI42CPt9Malt9z5AwK50zEU1/XJ4Qijz1HzgTi03pEbYlqmagkF7qnYqtSW2J1J0e+yjT2QZ8vNBaLmRY6hyhxPpvJkrzySfV3EH3IYNBkfmzml5R5Hc+iGXtwGC9Ec/w+za/3rW70/rUb/W+fhOaQDwl0/hkpKnTj48zPJJtJm4Lw+aowv14kO2N04udbbuefRHXECMkj2UaMz626HOb7b64+hXde6Mdgj4aTrwyg71gGJ18ZwGCPhnde6PfUDhiGn3huMd7cfQY9R86g57je5NNzfBA9R87gzd1nPLUD8nzLrHB6Hdwllcp/sGwSxLb6S7TRGKxsNyuUG580CPNfOnnuOD2eR/5/bK6lxkYMz/yczQbr5vcGXnCM/PzwS7oV/+b3pl4VsYv8/PCxOS1OfHjwjQSYSBAwR4Me+WSEBys7w8tkDLcn7YIkOmSjxOeff55Wg0X8fMvu+g/TBphIJMy/hwh+fwCEVV0v5heW/+8rf4MP/10cHU09mL1In5ecmOHsRYX4P79K4+u7P+uLTyNAMrC46qEt9jsIqaqHttDGTl5e+Jqm6ckQgD6yz1VVdcyYeeUHMb8WpJ3NzwffYn6a5mp+fe09zubng28nzUM3JzJrMI0OmWgwKN8uCmTNj7zmq8ZseSd+vuV2/kVtgKKFbBMp7Pe/oHIy3l85GdMvHoeiC8fSZfrF4/B+D11iwvKnD56HVx/rQuGMMeho6kFHUw96jg+icMYYvPpYF6YPnmf7Xju+ZSTI2raYaWydnV7eeT9+vn4Nfr5eT1m/dcK5PElBu/UEt+MT86upqUEymTS1dSQSCSSTSdTU1NiaoB/+kZKXPZmf0Q9wwPV8+eF/4ddbTOYHG/PL9Gdom1+UfKfvn5igyeQ4WX5+KX98dmwvYE6AEHPjzQ/QI0BRO+Dzzz9Pu8AM95EgbuefNbdEImFanBT2+ycJkJmrx2NMoYIxE5mlUMHM1eMdEyFh+SQBcv66aSicMxGFM8YYy5yJdJtdIsSOH2gkyMs778fLDY+jvtHdKHkF7Qmuqipt7yNGyLd7sNvD8r2Y3yH8CYfxgmvkF+j4WfMbEJsfafNzi/yC8JW4QxeYmF4dJj85S7WXXZ+EKQr0+/2zXV8ymQz27NlDR4IAuumxBslni/mEyEgdCcIbnMjwyDonMwzy+2Ozv1MAvNuj4axCowZLXp8EXLvEBOGLur4Uzpko3L9blxieTw2wqT5O7qvl+JcxjPkBek/snbN2a+ztarzw4/E40um0NfObFWt+8bh9Hw2vfDfzG0AvMnDvexeUz5ofP+wt029EP04JjzB8wJsJkloxb4KkKowU9HbAEv98wGxgpI2PPJIoUJQhdhoJIuLnW3bHryiKsEbDJkXsJGoP93v+TZ2ej2WAmQU4q1DBu0zWl5phdruTCfrls+ZHMsB2ItudTJDn+x4J8vP1a4Tm9+pR5+4vQDQ9wUkGWCRVVZFM2vfB8Mqf1DbTZH5Gtte4+8sbeAHNHtr9gvB/VvZ1V/MLEv1FPhKEiezIz9ASCTIRYNXmcCNBAHN12C4i5MsSjdSRILxIYsRT4o9RkO///ZWTMXP1eLzT0Ieii8dR8xNFgO/2aDjxQj+mrx6PYw19eIMzwCB8YoCvPtaFGYvH0eSHSB1NPTj+cj8tzxugiE+vFtI4uP3GO7ycy0DafuMdtLGTl1e+qqrCKq7d+iB8N/Pz1PE5BN/O/LSM/seRjhLxGf0FPf9K3LoA0M0t+/emBmbzo22EKaNcUD4xMr6qS8yPDIljq8OiCNCJn295vf5JNOjX/AD/539B1vwGj2WgATjxQj9OHstQsyPLWYUKTh7L4MQL/dAADB7LYKagPdAvn5hfR5P+R/74y/30OS9ifuS5qD1QxPc9EuQLdweL/qLoCQ4YoT+pApPEB7stLP/7G78mND+2MzQA+uhJPvjt88YLzY+8pjc+8HgDBL983yOBktakiOmbSPnjszczBcRte+RRZH7sdqKRPhIEMMxPURS6eFaI779r/wAOV58CudqI6ZGFVIczAA5Xn0LXfkFSMAT/+Mv9nvr4AXpfQWKEXvg0AlzbFvN8UZCbHbx61KP5Mbrt3m9q7C2sg/CJ4ZF2P3ZdVHyR+ZHESAv2oQVpvI1XPDGD8J3Mr7+9B31/PYn+Y6dzxvermmwkaDHBpHldED6f0bVr4xONH+Zlx8+3vJx/36YnUJDzz64cBIQR4KBN+Sj4UYrnBx4JUqPqxufH/IDwIxHCyitfbH66KWYg+AuT1XTMi4TvGPll7K+TMUXjbbf54YcS2wybMswxDN9uDDCRU+KD1UgdCRKVgpz/ogvHmqqzdhEgoFebiy4cK9pNYP6MxeM83/aq5pKXMWPxOM98y0iQwg2r6cZ0usET1E3xuLHPnm0Njj3BvfDZccBEfFY4Cv6S9A2c+fXiTfwZb2K/MPqbjnnIIIN38VYk/DfOedNifv1/1RMfouhvTNF4QAMGu81V86jPv5MSKW5McAqI3x+Mv3fvM775Ii1f/klXfr41HH9/Rz/8PGatHo/BHg2DZzR07x/AtAvH4qyZBZYs8LvHMujaP4CpF47F+JkFpuFxQfmJ8dU4f900Otrj+Mv9tokQ0gY4Y/E4FM4YQ8snnlvsyKcG2L53vwYA7MTBK9tvp28MMylJ/Kki034BWCalDsJPHNHv9V/45Odyzm9tOwAAeHzjzx2P/8G2L+kGGDH/oUW3QDsziHc/PseR/1/vfkY3wCE4/7bffwpAW7T8MJMieeHnW8P99/erv/scFABvTLuArvv4stcBAH9b+aip3PSLx+HPry2MlL+oVK9ZJT55PV33x+m/0Zl3v2QqN2/lRHx6/NWe+GMB8eTMAEzTzaFkl3VaOlinpROVw1OGA5MPsqe2UWOnxQvCr6nHkPFrS+Dx+H+cm+PHfR75v8X224bm/Nt+/23R89fPq7PwlU3LLXxROTd+vjUifn+/+qVlv38QTEuJX/0S26fl4PcH63SXH6v/rHVaTKhIjPfOLyBzcrKTBZM5Oe+p2KpUNhbTISoki1K9qpNmbMjwEqdyPdsaTPtubm7B7NnTcKC2UZN8yc8n3/KrG2Ll+/hHO99yW93m5hZ0dHShsrEYO2ft1gBg56zdGuk/s/CJMg0AFj5RppG+O17KdXR0WWZ/F0nyJT+f/Hwr38c/2vhKeUWVaWZ2dsZ2dsAy6TnNpqpJQ6LXcnYcyZf8fPLzrXwf/2jm0yQIqQ7k+qKw40i+5OeTn2/l+/hHK5922CHOmGvZcSRf8vPJJ1nIXGeH7Tj5Pv7RylfKK6rQvne/xqaJyZcTdQhqx5F8yZd8yc8HXyktXWZJQTc3t6BnWwOa6vXxc+SR3K1hbVuMPpLbWLuV+0b8apqCJtqzZz8AQPIlX/IlPx/8AgLkMyTVqzrJ/blQfnSlQjIuB6+oUwDg4BV1Csm4eCnHHyDLk3zJl3zJzwffkgUG9M6CpC8OUW2JtSNik6AjpKhc4YbVdJ9EdlkgyZd8yZf8oeJbssBsmviqjDF7e5ihOKU7Mqb9AvZZIMmXfMmX/KHiW+4IfVOpcTfe1tZ9iEKlpcvo8wdb6xzvCCv5ki/5kj9k/PKKKixqhIaNca28ogr16NSqSnZp0G/rFdlSVbJLq0enVl5RBWyMa4saoZVXVEm+5Eu+5HviH/vO0sj5nmeFW7VQb0hsPGh/O3EvZYLOCheVJF/yJX9k8md+5wB9fnKzkTmeslHPJh/7zlJTGS98Oha4qT5uO1HMqoXFaDzYicaDndTkgpQB9H46TfXWW3478XlNriyzLF4VBR8Aupe/SBc/ioofVGH4l53/Ucd9u20Py2f1wgsv0MWPRvL5zyd/1aI5dpt8lYvi+In5FW7cj8KN++lr1vyOfWepJ77rrHDE2Fjx67yUAaKZFQ6JDwAbqjHtlXq6quuCS4FtlUDNYfv3RcWHbn5Tbiilr0/+pBVT917k+J4o+UEVlr/9Cx/BkwcUPP3qsyazI68vX6qh6ud/yhmf6IUXXkBJSQl93dbWhosvvtjxPVHyAWDdunX0+WOPPeZaPmp+EIXhs8bWfGoibr/9dixdqpvMgQMH8PP/vpNub2w6Eimfj+xObr4QhdmoDwB6Nl9Io0C/x+86K5xddbbxn8vw/b+7CNd/aL54u+B9oWeFS3wAv6s4BLzbja4LLqUL3u3W1yc+YP/eKPiwmh8ATLmh1FMkGAU/jMLynzyg4PKlGi47/6NYfM4ZuhDze/KA8x/wKI6fNz8AKCkp8RQJRnX+161bh0ceeYQurBkOBT+owvCJqTWf0ufl/f73vw8AWLJkCZYuXUrX25lfGD4xPzaq68lGfT1MVdgu6nPi+54VDgDu/OwybPqNnqFpPnYKC2ZOdiwPIPCsUGw194/3vIQf/P1K/G7c1Zj2Sj1dfjfuavzg71fij/e8ZF8tjmBWNNb8lK/MMD26mmAuZ2Xzogj4i885Q01w/qwJdCHmt/icMznli8yPyNUEIzr/xPxYeTLB98D3f6DdPNXCddddh5deesl2e9T8CWMUU9sfa37sej98mgRZ2xYD7o1plddsd9xP1y8+iGmfr0PXLz6Iz37zLfxm6wxM+/xr2fWvOX8ImMfosbLjn6quw5TvfR6Z9hO44pf/jHerdmNv83oMvNJGy3wB69FVtRt7fnkrAKBgbhFOfusXkfB59bafxIS5U3BmYysA0Mfe9pOO74uKT3TiPuOW70W37PX0nrD8l/86MWtyE/DwJ/+E6575CH1cfM4ZvPzXiTnlA8Dp06cxadIk4Xoviur8f+QjH8Gf/vQn+uhVUfGDKhf86667bsj4hTZV3Z7NF2LCGPcmRJ7va1Y4ktzo+sUHTevJa6fkB5HfWaEmV5Yh034CBXOL0P/CYZxVeCsyx7pRMOcsumSOdeOswlvR/8JhFMwtQqb9hG1iJMysaFP3XoT+XcfR234Sgx19OPmTVgx29KG3/ST6dx331A4YxaxsJ+5bjqnLbqALa4ZDwe85vxzXPfMRAMB1z3wEPeeXDwn/4osvxrFjxyxmd/r0aRw7dsxTO2BUs+J95StfMT16VRT8mGAZSn5zczN9ft1115le54LvVrUFzMboVN51Vrim+jjtYc2r8Z/LsOk3+7D2b96H2r+8RavC5PWCmZOx4/kW4XsB0DC0epX9rFAiPokAAWD86gtM0R/R2AtK0Negz9RmGwEG5PPqXv4ixq2ZQV97Nb8o+MT8LJ9p30/cI8EI+Jed/1G8f3oPSi/7Aj7/2uv4xQfPQ+vTP8cb7xTi6VefzTkf0KvCM2fOxKRJk3yZX1T8devWYdu2bfje976Hb33rW9iwYYO3REhIvpZOIB6vwRfXAF/bYsy2/F931OB/dgHpdAJKXDwzYhT86dOno6ioCADw2C0Gf919OvPEiRN45513csbnkx+8XJMhAj6NAEnjYNVDW2zfv+o/6kzm98KhI1gwc7I384M+gRFp7OTlxM+0n8Cp6jqcqq7DwCttGHtBiWUZeKWNliFmGRWfiHR7GbdmBgY7+ugybs0MT11iwvJZ84v/+SumRy+RYFg+oGd833inEEeffRz3du7H0Wcf92Z+EfBJt5eioiJaDZ40aRKKioo8dYmJ4vgBPeu7YcMGXHLJJd7NLwI+a35KXI/7lHgMX9uSwBfX6NtzyX/nnXdw4sQJk/kBuhm6ml8E/CBio0ERvwDQU9BN9XE6qQg7to5o1cJirFpYjNt/pf/IXzh0BLV/Mea/3fF8Cy0jEklB31OxVWmqj5vu4eXGP1WtT3s4ubIMBXOM9h82EiyYM4lWe0n5qPiAkQCZckMpJsydgjGzx9NlwtwpdJudCYblE53pbgcAPHveRtMjWW+nKPiXnf9RmvE9dXqQLiQz7NQPMCyfJEBKSkpoFEJUVFREt9mZYBTHv27dOroAwCc+8Qnh+lzxqVQVWlqvxmlpFVDdJ3qP6vh/+9vfAgAe2fN70+Nvf/vbyI/fS9XXTSSDbMf3NBJk1cJiGvEBwLe//S/47nd/AEDPApPXbBm77jNBe4JPrizDqa9+DdNe+TW0njNQCgcw9oJpAE5C6xmLgpkTcOqrX8NkiA0wDF/U9WXC3CnC/U+5oRTdeNG2ShymJ3zRLXtx4j4AC9dAO9mB052NwKRFOAOg/+AuT8mQoHzS9WX+rAlYuXI+Lp9qHH9390kALWg52gvgo47RYBC+U/aXFzFBuypx2JEQ27ZtAwBs2LABZ599tmWdm8LwVQDYBUzsVJFggrCaGhX/o2a354g/ffp0fOITn8CSJUuAJUtwbXb9tSs+gYUVX8FLL72EZ555BtOnT3eMBP3w3UZ1BBHPpwbYVB8n99USZmlIxPftb/8L2l77M750zaX48aP1ptebHq3H2r95n+MHOPfRKmXnrN0ae7saN75hfvUYeKULYy+YBq2HfnQohQMYeKUL01CPLhcT9MtnzY9kgO1EtjuZYJDjZ0VMcNzCNcCU2QC8m19QPm9+U6dOQfG5TFeFQ2msXDkf2N0C4AycTNAvn5gfSXzwGeD+gQGMG6tfC6SMkwkGPf+k3W/Dhg0oLy9Hebme+CkvL8fvf/977Ny5kxqhU5U47PcPADUq+R/z2qOC8Enb3/e//33a+XlJhZH8eemll3DdddeZInM7Ewxz/FOYUR92293E8z2NBGEjPmJ4AEwGeOD1v2Jv+hVa5rvf/UEkI0EmV34K41cvBgD0NbyEgrnTMfaCaei64EpaZtorv8bAK13ItL+D8auXZMu+jFPVvwvNJwZ48ietKFg2BZOXzsDJn7RaRoJMuaEUpw4cR2b215XPAAAgAElEQVTfSVqeN8CwIwFIG9+4bARIpEyZjf6DerXByQiD8Fnzaznai4ovLjObX1adh9K493/20XIv/3WixQSD8IkBtrW1oaioyFL9NZ2fEydw4sQJWp43wKDnnzW/Rx55BNdeq8c/oueknMgEw37/MQAJh5RvjUsUGITPJj5YPfzww1iyZAk1P37bZz7zGYsJRjUS5iSX7OBf2ynQSJA7P7sM3/3uD/Clay51BQDAl665lFaHeQXrCa4gc6wLfQ1/wfjVS2j0d9benXTResZi7AXTMH71EvQ1/AWZY10ArBl1v3xifqcOHAcAZPadxKkDx00ZYAAYt2YGNT8AOHXguLA9MExPfLbry8Spc6FMmU2XiVPneuoSE5Q/f9YEPHlAwanTg+juPonOQ+a/3p2H0ujuPolTpwfx5AEF82dNiIRPzO/EiRO4+OKLqcEJz092Gyknag8Mc/43bNiAlpYWXHvttZYIsLy8HNdeey1aWlocq8Fh+DEAX1yjm9wZrpn9TLG+/otrnLvEDMVIlIcffjivfCf5HgnS+M9leOHQEaz9m/fhx4/qY29JJHjg9b8CAI0GSfT340fraVugaZhcgJ7gpOo7sP+vGHuh3gZEqr5K4QBd2PVjLyzBwP6/6u2BbF/AED3RM/tOmqI5vhrMvp669yJqhCaF4Iu6vkycOpcurGxNMACfJDya3jwFAHjjnULUPNJk3TeAmkea8MY7hQCApjdP0cRIJMdvY3p2EpYPyCfRHwDMnz8f27Ztw86dO7Fz504AoM+3bduG+fP1633btm3WhEDEI0HOFBuLJwXgs9HfiRMn8PDDD9NlyZIljriioiJMnz49Z8fvWzZ8GgGubYtZekmT4W61f3mL3ulFJGKGpAw7TI7Xbfd+U2NvYe3EB2C66UHmWBeUwol4d3k5ui64ki7vLi+HUjgxG/lZ3xeGH7X88lnz4zO9dq+dIsEgx++1mwtgdJOx00g6/2zVl1RpRW2A5eXlNPIjXWSEJuiTT0SiP14TBT9HtyjQL//hhx/G7bffjnfeeQef+cxn6HoyBG7JkiU06jtx4gRWrlxpKheWH7V4vuNIkC9dcyk1P8BoDyTRIADa9vftb/+L6X6AtX95S1htDtMTvWDmNHRdcCmKdj9mWbouuBQFM93nFg3CL1g2xfNtr7qXv4iCZfaJkqDH373vJ9BOdqB7308AAKffPmB65LdHzY9KQfikn58XkX6CUfJZsRHg22+/bYoAvSgMnze8M8XmdSJDDMPfsmULvdkB0XXXXYfrrrsOfX9ogFr9n1Cr/9NkguR9UfDtxLf3eWn/s+NbRoIUblhNNxa++xLW/s37aN8/YoBtr/0ZP85mfNnM8I8fradmSUaNNB7sRDxu7LNnW4NjT3CW/8qHx2HshedgYH8bgAKMX60nHtgMMD2QbFW4r6EVQMaoClfXBeb/XrkbU24opUPfMvtO0kQIoLf1sc/J9jGzx9PyU/deFJjfcHM3pi67AaffPoCBt/eZkh+k7e9Md7tpXf/BXRh79jJMOnspHR0SlD/9ZB+tApOo7v3Te7AhudyUCOk8lMa21F5TmUXzJtNbZwXl//CHd6GoqAjjxo1Df38/Tpw4YZsIIW2AfPmLL744MD+dbsC6detMCY1169ahpaWFVodJ2+D8+fMt5cjrMHzASH6QJEdKEOKVPd6MqxYsMJUjCsrfvv27NNGxcuVKWiV+8OabMGPa2Rg42YmxU4pxvOttxCr/iZb74Q9/iKVLl9JESNjjDysnPjVAMmM9O3HwyvbbjZPRtka/x981Rrve9U93ovnYKSw7/b+O5eJPFZn2C4BOfkzkxn/w336D/hcO49S0Y3TdtGV/CwC4sfIqUzkAePc1IxsaBf/Os/W2tqlrbqbrtLl6lnn9XXtM5catmYGJ+Fyk/O/esRHjFq7BpD88ZfCvuFHnf+5cUzkAKHrLqE1Ewe+Z9696Vfjzxh1fjn9K74y2+e9LTeUWzZuMqg/2Rsq/5nG9PeninUb3i7du0b/r/7j4JVO5mTNn4rwd10TKf/NDD+iGxrRPtdz8ODZs2IB5z99sKldeXo4bDv13pPy7N34LAKC0GW9r/pJusP/50VdN5f7rVyr+abnxOaM6/meeeQbvfNW41v48O4GLpvx/WL/xjKlc58u70bhuXqT8MJMiOfHHAvqMTPzkxABM082hZBe2X2Oebm4HrNPSicrhKcOByQfZU9uosdPiufK/AcG0eLDyBeWi4G+Cdbo9pf5TFv4mqNiOmyPnf3vLZiv/Cevxi8pFwa/FXXia2++M31n5tbgLVZdGz3/0Kuv5f999n7Xw9XJfif74nwewsdm03/kPXIWq57dYyt2wKPrjX7/5e5bjX/DjdZbjF5WL6vjf+ar5+P+2Hqj6d+vxP3Zjc/S//5Jd1t+/nf/4OP4CMicnO1kwmZPznoqtSmVjMR2iQrIo1as6acaGDC9xKtezrcG07+bmFsyePQ0Hahs1yZd8yZf8fPFpEoSoubkFHR1dqGwsxs5ZuzUA2Dlrt0b6zyx8okwDgIVPlGmk746Xch0dXZbZ30WSfMmXfMkfKr5SXlFlmpmdnbGdHbBMek6zqWrSkOi1nB1H8iVf8iU/H3yaBCEzs/MztkctO47kS77kS/5Q82l/EuKMuZYdR/IlX/Ilf6j5SnlFFdr37tfYNDFJEUcdgtpxJF/yJV/y88FXSkuXWVLQzc0t6NnWgKZ6ffwceSR3a1jbFqOP5DbWbuW+Eb+apqCJ9uzRe3BLvuRLvuTng19AgHyGpHpVJ7k/F8qPrlRIxuXgFXUKABy8ok4hGRcv5fgDZHmSL/mSL/n54FuywIDeWZD0xSGqLbF2RG2qt3ZEFJUr3LCa7pPILgsk+ZIv+ZI/VHxLFphNE1+V2UrfEGYoSumOjGm/gH0WSPIlX/Ilf6j4ljtC31Rq3EOvtXUfolBpqXFz1Adb6xzvCCv5ki/5kj9k/PKKKixqhIaNca28ogr16NSqSnZp0O/Nb1piKU243stSVbJLq0enVl5RBWyMa4saoZVXVPniH/vO0rzyO9Rg7Kj40PLMZ5bBwUHTMtT8fB9/vvlLHygyLaPt+KPie5oVjkhNGqYdS2mW9bGUZiojUphZsdhZosjkKKtmvzhk/NnMmOsO1bq+QzWXiZpvusu/JlivQTQTQHR8Tg888AAA4Oabb3YpmRt+EL0X+EsfKMKBm0+4rssVP4zC8jVNs92mKC4Xv4BPxwI31cctYamdiPmpSX0xXosNktW5j1YpTfXWW1774RPzm7Lxxbzwifm9/At9Ia/tDDJqPjG/i26ai4tummuYoZ1BRs3PKplMIplM+nlLpPwgCsqPaRpd8sEXiYQ3+eCnUinh81zxNU2DpmnU5BRFMS1sGT9811nhAGtkpb9mt8M18gKCzwp17DtLLdFfYfYusAq0nPP5yK5D1Y2PaPHn3SO/MHxLZKfp5kf04oPtrpFfKL5Ag4ODGDNmjOV5TvhBPEdwPoLyRaanMtGGnSmqXEQS1fkn0R77d89LBBgVP5VK0T98xPySyaRpfdR81vzcZFc20KxwgLmKSxRLmR/57SIFnRWKmB87U3zP5gup+eWaz1ZxiRZ/3vzIb4+Sb6riZvXig+2mR357pPysBgcH6fLAAw8glUohlUrhgQceMG3LCT/pY4mQT8xNVRS6sOudxJcZjrOi+eGT75t9TWoB5DlfJkq+H4kiQd+zwokkMkF+vVARzAo1YYximhj55GZjprah4ANiE+TX55IvMkF+fS74JMojC7nwycJuE5pgLmYF817zCsRnzY8Vb4KsObImmavjF0V6ru1/EZ9/PgpkTZA8j4rPR3TE3Oyqu8JI0YZPkyBr22LAvTGt8prtjgeu2vyFjXm8GO1mfvLKL2QmQFEgNuNc8tmqLyvWDHPJZ6u+rExmGDHfaxWXiJig6D1hj58qBT3aI48eFRk/oPzylz5gnv/Ezejcygc5fr6a+9xzzwEArr/+ero+nU6juroa6XQaqqraVoWjOP+KorhWie3K8HzHWeGIXKMrgGsTtC8fZFYoturLSmMaenLJd43uYDZGp/KBZsXy0AZmMkaH8iNxVjihktzjUPMDyg+ftOuxi5v48rwhhjn+66+/nppfZWWlaX11dTUAIB6P47nnnkM6nUY6nbbsI4rzT4yNjwDdIkMR3zIrXFN9nPaw5sUnP6zbXZIRG43BynazQjnx2eQHPQAuCswln09+8HJNhoTk88kPXq7JkIB8vxGg7XuCHr8GsdHZRX8piM+DT75dFVi0zS1REoTPJzv8ypIcCXD+2YivsrKSGh15zq7jVVlZiXicqc4G/P6DJkAs7xPwaQRIGgerHrKf0zOI2Gis6qEttLGT13uVz0aD+eCzv56wfPIX3esjr8iOnzR3JLnXLsrV+fdkfjnke1UQ/nPPPYfKykpqdDt27EBlZSVUVcWOHTvouksuuQQA6KPIGMMev1s3F1FkyD4X8QsAPQXdVB+nk4qQsXVeqr5uIhEZSUHfU7FVaaqPm+7hZce3q/oOFd9L1ddNJCIMwg/8p5+VEoLPKR6PI51O07/qbq9ZheIrsJpcintk1zt0gQlz/G5ySoKE4Ss2i9ftQflsIoOYGWn3I9VcvhwxTGKMURw/Pc5snz87I2T7CPLr7PiOI0G89K3zKz89wdm+fyIpARzCD99L375c8r307cspnxMxNy+PueBTJW2ee5AfvqootPOzqN+fMNsbIV/Uhhc2CRLk/Kuqaqnyso/kOydVZbsqcVA+L7aKy69zE8+nBthUHyf31bJ1FTWpOEaFXgzz3EerlJ2zdmvs7Wq88qds3G/qBhObPbT82THnqNCLYYbhQwFe1ByyvR6ugTB8NtJze7TrDxiYT7Y4GZ5d218IPmuC/HpeXqrCfvleEh9+yvvl79ixAzt27EAqlTJFdMTkqqurTUkQtkwUfCJROyCb6SVm6GaEPN/TSBBe4pEhuRuJwevk5gsxhUmGDDVfNDIkpyNBeAlGhuRyJEhUSZBIjt8pIeJyDsLwWXPzan582ZE6EoTv58dWeb2MAAnLB+wTIawB8tv5dYFHgkSlkd4TXvKHAZ+0B7JtgB7MLyzfsZMzxJ2h+bIj9fyLzI0dB+51PHjY47dLgHgxPzu+75EggZWLkQCSPzr5pJU/BXGLf675QfQe4Ps1vCj5dgkQ9mYIREKjjGokSFiNtJ74kj+M+QGSRO+l4w+SIxvpx++UBebLeeFTA6wtUclEIq6pVb69zU+2+J6KrcrCJ8o09j7+fvlTuM7QQ83n2/v8ZIuj4FuufB+/hKB8p5sc+FEkxz/K+UGyw1HywygKvteMrxe+ZSRI4YbVtHA63RAYxCoeN/bZs63BsSe45Eu+5Ev+UPGpAbbv3a8BADtx8Mr22+kbw0xKEn+qyLRfAHTyYyLJl3zJl/yh5o8F9BmZ+MmJAZimm0PJLuu0dLBOSycqh6cMByYfZE9to8ZOiyf5ki/5kj/U/AIyJyc7WTCZk/Oeiq1KZWMxHaJCsijVqzppxoYML3Eq17OtwbTv5uYWzJ49DQdqGzXJl3zJl/x88Wk/QKLm5hZ0dHShsrEYO2ft1gBg56zdGuk/s/CJMg0AFj5RppG+O17KdXR0WWZ/F0nyJV/yJX+o+Ep5RZVpZnZ2xnZ2wDLpOc2mkUlDotdydhzJl3zJl/x88GkShMzMzs/YHrXsOJIv+ZIv+UPNp/0AiTPmWnYcyZd8yZf8oeYr5RVVaN+7X2PTxCRFHHUIaseRfMmXfMnPB18pLV1mSUE3N7egZ1sDmur18XPkkdytYW1bjD6S21i7lftG/Gqagibas0cf0SH5ki/5kp8PfgEB8hmS6lWd5P5cKD+6UiEZl+xwFRy8ok4hGRcv5fgDZHmSL/mSL/n54FuywIDeWZD0xSGqLVGtHRHrrR0RReUKN6ym+ySyywJJvuRLvuQPFd+SBWbTxFdlttI3hBmKUrojY9ovYJ8FknzJl3zJHyq+5Y7QN5WW0Te2tu5DFCotXUafP9ha53hHWMmX/CjZ/GcYKccv+UPEL6+owqJGaNgY18orqlCPTq2qZJcG/bY0kS1VJbu0enRq5RVVwMa4tqgRWnlF1cjhO/0bDccv+XTRYjHH5b1+/MOBH0trpsegfMdZ4XKhSGYFG2q+Bud77rltD8uPUCOZn3K5CSYAJF3uFReGr8XM97BTVFW4XovF6LYo+VEoV3ynaSpzwVfjCmJpDWrc4w/Phk/HAjfVxy1hqV+RO7U63a313EerlKZ66y2vo+DjaWaJis+am+hvC2DMWOZBOT3+IeR/uvo84fNc8FOaRs0vqSiOC1s2Kj5gNjlFVU0GR16z67VYzGKMYfhuan7x35B+Zjt9zr7ONZ9Mg0puT0+MTzQ96nC7/gPNCicSOwmJ3QxOkc2KJtLTAC4TPA/D581P9PV4KROUH7Gi4n+6+jw8Vfk6fQ4AT1W+blofFZ81Pj9KaZrlPUGP3y7ycxJvmGH4XtT84r9Z1h09NgHxT1bR17ngp9NpxGIx09SUgHHrelVV6XSpw/H6j2RWODvD45WzWbFsDC8yvl0UCPiK/qI6fjbS5pdc8j9dfZ4l8nuq8nVqfqIyYfhBzY+8h48Egxy/KIrzIpFJDuWscEePTRgSfix7fuyuvRhz/vzyY2kNsbS+X+VHA6bydtc8Kce+14kvZ4XzwydGSBaPxhcVn3zhbFWDr3bYGmHE518UBQKwGGJQvsj8SPXWaWFlMsEQx89Xee2qt7xMJpjD65+N/o4em0DNj43+hvL3x0eDQflqXKFtfctWjLGYoIX7owEsWzGGtg2a2gdzOSucaGZ2u6gwJ7NSXQaj3c+lGjxSZ8Xiz69IvAlGdf75au7b+04CAC66cS5dj6eBix6ZCzwNfPpV+6qwHz5vfvw6XnxbYVi+W9KDPLpVibVYjFYgor7+ePMDOOPjNBKvfzWuQPnRALRbqV0JJ0PXbh2LfVw5Nz6tAteWqJaJSvyI/SBOP9J7KrYqtSXWCyYs32R2DtXhSPh+Ir8I+HbmZ1sNyNH5v+jGudT8Xry23bT+okd0M8Rl0MvYJKO88nnzI0kOJ7FlWCNkI8Movn/e8JyiQb6sX35zkaWosc2n+QXh+5Uw+ouAz5oae83z17+T+Yn4llnhmurjtIe1X7kmQjYag5XtZoUKw3dNhETE99rmaVFAvojn1u1AaJoB+GzE9+K17dToyHN2Ha8Xr203fwcBj59NaDj9uBSBaZrkk+8lwhMlO0RlFFUNdPzEABdws14GMb9c/P5IEoSIN0A2CRKWz17TmqYhmUwilUoJa6Bej59GgKRxsOqhLY4H7LfhnVXVQ1toYycvr3xTVxeXLi854YdQEH5QsxVm4QPw3953Ei9e224Y3kP680+/eh5efMhYd/ayKQBAH0XGGITPRm9O7Z+iyINvE8zF9893fXFSEP6CE2bzay4yzM+2vS9CvkjpdBrpdFr423fyA798ksggyYyCewfpda0oCjU/8lpRFFM7If9+Eb8A0FPQTfVxOqkIO7ZOdHCihnc3kRT0PRVblab6uOkeXl75pnY+srDrc80PoaB8O/Pj14siRHZdED6byCBmRtr9aDWXK0cMkxhj2OMPkgEWaai+fz5BQp6H4VuqwR/7hr5k5cn8Ijz+WCxmivpUtk8k933xXWD88Ekiw2sihE2CsIkQNa7Y8n2PBBH98PxEgqF7gvPVWpIA8RgJRtETXVVVYSdPwPjCo+Tbhfd25uj0XQThf/rV8/DUta+bqrzs44vZ7+CifVmTtKkSB+UHNUHR+3I1EsIuQRKG31xkrfouOKF/vy1nKegq34hLT5/09TmjPn5ihKqqIhaLWfoCRsXnEyFsGyANxDwkQQKPBHGqivERoZMC9wR36uvHR4S54GeVTqcRj8fpAuimR/4K2hljGL6XSJttknD6LvzyX3yoXc/+MlVeAKZHNgny4kPtdImCH1R2pumH77VqK3qPnfzwifnxJqgoChacgG/z88vnRa4v1UNHcFVVkUgkkEgkouNzxia6xt2SIIFHgvhpi7KLWEL1BPfY2ZmWhbV82J7oxPxSqRRtgAX0v4LkoiB/EUWRYBQ94e1M0Mt3E5RP+vyxj0ReRoCE5bMSjTZgX0fN95LksP2sXBJlOI6E8MrnExuAOfpzq/mE5fOfhU/40bZAhwgw9EgQpxEIfFJEdDGG7okuSoDYJUUEZhlFT3je/JLJpGm704UQBd+pE7SbgvJF5kY6PNttj5LPSnS8Xs9BED7fAdqL2HZA9v1e+WQsL2n74//oOXWNcVKY889GfbFYDPF4nJ53L+YXlg9YR4OItpM2QK98zyNBnLJvnn6QYXuiX+ZziZqfFTE83viSyaTJGHPFD6wI+H4NL2q+Xc8DTz0SQo4EoaysudmZoa1J+uAvePwx07HxWnDCbIKeDDHE8ZPPQEwwTBewIHyS1CBJEDbaYz+PdutY7NszSJMmJiPM5UgQPxqJPdFZsdVgAKZH3hRzwQ+rkc53SgR5ScQF5YvaA/10gA7KbzlLwev9U4T7IkkSvo3QSUGPn9zwIKz88ImBkSFtbPWWRHt80oM8t7tNFs+n76wtUclEIiHGObjrnoqtysInyjT2Pv4jhU9Cfb6an06nnaO/iPhRSPLD8f22A4bi/zHb2fnD1r55fBSYE35WURhfED5vYhajS2uuSQ83vmUkSOGG1bRwOt3ga+d2iseNffZsa3DsCT6S+F67wrxXjz+XfBHbLRHntJ18hpFy/ADw2AOfos9f//CWQFnfMPx8H78b3+sNUZ341ADb9+7XAH1GJkCfOm5l++30jWEmJYk/VWTaLwA6+TGR5Eu+G1/TNCiblo/K4/+HHc8i/skto/r7zwV/LKDPyMRPTgzANN0cSnZZp6WDdVo6UTk8ZTgw+SB7ahs1dlo8yZd8N76yafmoPf6fXg/akD8ajz9X/AIyJyc7WTCZk/Oeiq1KZWMxHaJCsijVqzppxoYML3Eq17OtwbTv5uYWzJ49DQdqGzXJl3zJl/x88Wk/QKLm5hZ0dHShsrEYO2ft1gBg56zdGuk/s/CJMg0AFj5RppG+O17KdXR0WWZ/F0nyJV/yJX+o+Ep5RZVpZnZ2xnZ2wDLpOc2mkUlDotdydhzJl3zJl/x88GkShMzMzs/YHrXsOJIv+ZIv+UPNpwYoJSUlNdpkaQOUkpKSGi2SBiglJTVqJQ1QSkpq1EoaoJSU1KiVNEApKalRK2mAUlJSo1bSAKWkpEatpAFKSUmNWvm7m6CUlNSo1s57ezSn7eUVhTkdyRG1pAFKSUl50s57ezTcdx+gaUBBAUCmgLjvPuDMGb3MbbdpuTZBOxMOwg1sgE/86G7Th7ji1vVD6vySL/mSP3T8nff2aCBTPojuuj1pkv6YSmFnMpkzE6QmrCgWAw5ivoHaAPmTb7cuV2JZV9y6Xrni1vWK5A8tn3DzzWfXjSa+l3VRyWR+XnTffa5V5VCfw86AUynfXN8G6HSih+IisGMM1Y9Q8vUf/3Djk22jgR9kW+RiZ0C85RbjuaZByWQix1lM2I7v03x9GaCXE5zLL8Ft37n+EUq+/Y9/OPBJmfcyP4oyodTfr5tPLAWkskssZRiSokAbMyavfD+SSRApKSl38XNeJ7jnSUGZXH6GiPgj3gCHNOwfBhrqxvbhLv58jLbrQSqcRrwBSklJDYH49rcaGFFYjU2ZXH0GN74Ptq82QC/RRy4jlOHO99JGFJbv1ggu+fnjkzK55EdRJrRSKUBN6kaTTOrP/WSJhxHfdxbYrRE80Kd4D/Bz/eNj+XbdICQ/f3yybSj4QbZFLtZwhsD8yisKFVNkZ8dPJn11iA48J8ho6wgq+ZI/mvnCvoDEkATrc9oRmq/qplL66JRbbvHNlZMiSUlJeZJtX7xUCshk9C4oAUwo0OcQKAhXGqCUlJRnyZshSElJjVqNNINzk7wfoJSU1KiVNEApKalRK2mAUlJSo1bSAKWkpEatpAFKSUmNWkkDlJKSGrWSBiglJTVqJQ1QSkpq1Eoa4DBR+979Wvve/Tm/l50dR/IlfzTy5VC4YaD2vfu1BQvmAwCam1swd/mFCgAcumY7/aLOfbRKAYDb7v0mXXdPxVZf5ew4ki/5o5UvDTDPOlDbqK1YcaFpXXNzC3q2NaCpPo5Fl6bpY/WqTtSWqFjbFqOPlY3Fnsp9I341yJdPtGfPfgCA5Ev+aOXLKvAwUHNzC5qbW0zrqld1ovzoSgUAyo+uVKpXdaKysRgHr6j7f+2dX2xT1x3HvzdrUJNoTlsgK51JO6XQpg9MdYyygQIW5U+lpNMkHprS9IGuJVg0UQyiK6xISKNhEqLOQNUNbTVUNeuyhz6RiFAiFJPRzZBYItJqjS6SCZGGAl3BUggia84enHNyr32vfa997Wtyf190Ffuck/O5xs7P55zf75yfBADfvnJOagstN9wuHY/4xHcqn0aARaCx/hCrqnpMPH/mmacRi13HH0b+Ksr63aMI7nwftZtHRFl00IvA6SNonKxL265i3ybRJ9fU1B2sadwoEZ/4TuaTASwSjfWHGADwD8LU1B1sn+sU9cHJlxMPDnkXfun3iTc54B5I2676szlVvwDEh4/4xHcynwxgkWi8OchObryFN6u3ibKJiYglfVdXe8TjP02cQ1touVgsJj7xncwnA1gEGm8OsuigF023G6QO+SDrd48ufJPpaM2nLtXzsbfiadsH3ANonKxDl79T6ls2zGo3j4gPAfGJ71Q+HYhaJKrdPIJxjDDIBzO2XfOpK+UN1yrT0nhzkNUSn/jEB0CB0EWj6KA3ZVqQSRtKJGwoMXdAb01vQIoOelPKs+HveyZx2cU/cTBx2cU/eqkERy+Z+xOyku/dIsG7xb73HztWJy67+LveTlw58HMaAfL8AIvtmOxCq6Y3IKE5yDo2nm0X/loAAAxkSURBVDU0/M9GwcmXAfcAOuSDbDxpDYb4xHcqP+sRoDI5SqZEKflSnzzN7GJbLR6/FNz5ft4YwZ3vg8dOEZ/4xM/SAPbJ0wzd3Yl0eN3dQFdXwY3gYjLAfOG3pjcg1W4eUbv6NaS11pFx/eNQIkq+pjcg9btHVVuFiE98p/JNT4E1EySXlQGnTqGvtZUVYjosDLAkJRIi37+Pvo6OgrBT7sEiduNkHSDXsbbmoKrcrLcrU3vlB4/4xHc635QBTJsYGQC6u9G3e3deDVHKPUhSwgAXgJ1yD4rXn6vx73eP8u074g0y6tlSKpN3rMvfKa06s40po+eJT3yn8g3HAYqp3qlTwOws8M47QN28IRptXTCC80YhH4ZIdQ8A8PF8xS7kna26B278lK+/uxvYvTtrdod8kPGN3TzCnb95Zj29XBfnmPoDcGhhszg/IcMI36ynl+t4DJbwzXp6udo7reGb9fRyHVg/ZwnfrKeXa+S8Ne+/WU+v0BfXrOGb9PQKffxJRn5272xpaXY3tJgl5WZz+eJs4PQRi24oVYHTR8RiM/GJT3wTU+Amf4WkWvBPmgImt83xXo3dwy7tNvlgq+6htTVlCozW1qzZPBK+y98pdcgHGdwDqlCAi3PafhY+MtSrV0oZCR8d9DI0B1lyJL4e/3hMu08+MtSrt4rf3qndJx8Z6tVbxT+wfk6zTz4y1Ku3ij9yXvv95SNDvXqr+PjimnanfGSoV28V/+NPtDvlI0O9egN8U2uAqj9+IMXw5WIETN9DkhMEHR0Fi0dU/T8wZsnr1oqEH3srbvkisJlIfOITf7HzTXuBU4wgkDACOax/ZXUPu3ez5LJCsFX30NpqWSA43wsJxSIwYMC9n6RM7Wt6A2IvJPGJ73R+1ochJMe/2bEbZDHtROGnYRjdCK50jqQ4O3TEpwHpTuMww1dOge3gK6fAdvCVU2A7+MopsB185RTYFr5iCpwtP+udIEqjY5cBavJXSIvB+AHOjcQnPvHt5Od0GMJiMkB2ymwkfFayMBKf+MRfLHw6DqtIpBcJn05GvL/JMhuJn05GvL/55Bvx/uaTb8T7m0++Ee9vPvlGvL955Rvw/mbikwEsEmlFwuspG+8Yl5lIfOITf7Hz6UToIhGPhK/Yt0mUjYxcsKRvr3ehz+njF9JG4hOf+E7ikwEsEvFs9crEzQ033xX1uSSF8Z51qfoFIJJPE5/4TubTFLgIpJUcHYAq3R/cA6lpAZGaFlCrHc4ufAPyD8Ll/hBTpiUkPvGdyKcj8W0Wz4mqTNbMc6J2+TulttBydPk7pcbJOuHFOrnxlvCY8e096dpNH7+g6jsWu46qqscw1h9ixCe+k/lkAItMsdh1TE3dQVtoOfqWDTMA6Fs2zHj80qoz2xgArDqzjfHYKSPtpqbuqBJDE5/4xKc1wKIQ/xYEFjLWA4noeN6GR64r3fh8IddoOz0O8YnvVD4ZwCLRWH+IAQsZ6wvNIT7xncgXThDuhUn2zlgtPY7T+fybKd/S4xDfmfw+WQQeSwAwIUfyfQt6HFv4UpM/gJtXrjKlm5j/cVo9BNXjEJ/4xLeHrzCAjpRUXe1JcUHHYtcxffwCooOJ/XP8Jz+toXGyTvzkx1hnavee91Xhgua6fPkqAID4xCe+PfyJiUheZzzFrhJgwTWs1MmNt/j5XGi63SBxj8v8dhV8+8o5iXtcjLRTKplHfOIT3z6+kyU1+QMq7wiQCBbksThc/e7R1EDEwdRARK12Ffs2iT659LxAxCc+8QvHd/wUmHuBuXdE6SbePrdw3EYuW1GqP5tT9Qvoe4GIT3ziF45PBnDeAPITWd+s3iYqJyas8chUV3vE4z9NnEt7IizxiU/8wvHJAPoDIitT0+0GiR9OaORYaqWMHkfd5e8UZ/InZ4UiPvEfFr5ZFSvf6QZQxAHWamRl0pPW+ftGs7ibyQpFfOIXIz8XFSvfqRJ7gaOD3pRheUbVHkhcJlTTG5Cig6lHXmfDX7mkHSuXtNvG34q92Iq9tvH3z/+zi98urUO7tM42/p6SddhTYg8/HA6LazHwnapHgPngyeYg69h4Ni/Db2B+cdY9gA75IBtPWgMhPvGz4ZfPrce9kksF54fDYbjdbtXz+vr6h5bvZIkRoFOzQhH/4eVfxQ8on1tfUH6y8QEAt9ttaCRWzHynqgQwn5VJa60l4/qLhVmhiE98AIgu+R+u4oeC8bWMD1dGI1TEfCdLOEH0sjKZ9bZlam82KxTxia/X342aCmB8GniQP36yZmZmUFZWplluRMXKd6qEAdTKymTUs6ZUJu+cmaxQxCd+Wn7DbdzAMiCaH36y6uvrEQ6HsXTpUpURmpmZwXfffZdxHa6Y+U6VCITmWZmig14RYS4+PCY9vULRo+oP4KGFzdp6WaG0+GY9vVw3HpywhG/W08v1FT60hG/W08t1DMcs4Zv19HKdYF9bwt9QImFtNcPTO4DpxhJ8eZhhtGo12J//Bex6GxhehpXj06h98Ah+jh8Jx8hHc7nx9aQ0QmaMTzHynR4HKJwgfHE0cPpI3mCB00fEYm+yiE/8dPwrExKufwFU9M9h+2EJdVPXIL3+XCI5dsNt3KipEGuCeo6RXF9/i6sSLa5KRCIRMQIrKytDJBIRdfl6/QAgyzJkWdbk87ps+Y5Vkz+A2hAYDnlZkz+AQdxiAfcAA8DWfOpiSAzJta/aA4krTRveR8A9wAZxizX5A8AhL6sNgTX5AznxVy5pZyuXtNvG34q9bCv22sbfj/1sP/bbxm+X1rF2aZ1tfO8WiUmvP5c3vvJqcVWyP/5kBWtxVTJZltmLT+5gLzWeYS8+uYPJsqyq17qPXPmyLLNoNMpkWRZXOBxWPef1ZvhOV9qdINlkYM/U3kwkPPGJn66/7Ycl4PA1KCeMVvK5WlyVWFtWvvD8jRa0vNGCDc+24uK/TwEALv32PQAQ7XridzUo2fFlWYbP51PxAaDn8x7VYwDw+XyQZRl+v98U36kSBpDvRUTSImyui+DJqukNiL2IShGf+Gb5ielwCUbOM0Pts+EnG7+1ZeXwP+XGfxp68ETda/j1q0NYMdyCCqlU1QbQNoJm+cnGz+fzoefzHng8Hng8Hnzzz28QiagPTUhnBPX4TlUJABF/lO1GdL0ypYKTL4PHHyk3ghOf+Nny+ZpgIfhXZu7h7n112X9H/yIev/BoKe7eT7TLB39oaAjxuNq4Kw2fz+dDPB7H0NCQab6TRTtBiP/Q8rljJF/8FlclVkvlwqhdY4mfa8vKsWK4BU/UvYYVwy1ixMfrr8zcw2qpPMUpYpYvyzI8Ho8watzg+Xw+RCIReDweRCIRMULk9UNDQ/B4PClOEdoJkqqsdoJkJQt3AhCf+FxXJgwOZHLk8+ksHwWuLSvHs3/bKYwfL9db+8uVz6ezfBTIjSA3frxcb+2PdoJoK+NOkLSKHjUNzDUSXqkbD07Yyv8KH9rKP4ZjtvJPsK9t5V+cM/83bJbPR3Va+uXj5bg7M6tZp/d7ZvnJ63tKbdmyBbOz2ny93yPDp1banSB6ysY7yJVLJDzxiV9Iftv5r+B2uxGPx9EWj+Pklq2q3/n79/fwwqOlqrJwOAyXywWXy4XJyUn0JAUom+F7PB7BD4fDKUbt/PnzKgeJFt/o63eqUnaCVOzbJCpHRi5YAvF6F/qcPn4hbSQ88YlfLPyPPjoKl8uF0tJSzM7O4oP6X2C1VI7KRxP1lWWlYgR4935i1Pe78D9E+3g8jvr6esv4fG3P5UoYf14OJKbAfEpshu/0nSDCAN68cpUBgDJxcsPNd0XDXJKyeM+6VP0CEMmfuYhP/GLmN3/5OE7vegndv3pelLWeiOGnKMX3Pz6tard06VI8+1mz5XwAqO/bI8rkp34Dj8eD3u3fZ813ugF8BEhkpEpOzgxAlW4P7oHUtHxITcun1Q5nF76B+BtxuT/ElGkBiU/8Yub3bh9F987nVf2e0uD3bh9FcOeevPCTX5d/EAh88LOc+U5WCc9JqkyWzHOSdvk7pbbQcnT5O6XGyTrhRTq58ZbwWPFEK+naTR+/oOo7FruOqqrHMNYfYsQnPvHt41tvUh4ulSQXxGLXMTV1B22h5ehbNswAoG/ZMOPxQ6vObGMAsOrMNsZjl4y0m5q6YygbPfGJT3z7+E6T1OQPqDLTKzPWjzcHxTcEjxxXutH5QqrRdnoc4hOf+Pbwnb4GKJwgfDic73UBPQ7xiU/8wvOdbgD/DzTnuApHWW9CAAAAAElFTkSuQmCC);background-size:1000% 1000%;background-position:0% 0%}.GeneIcon--template{background-position:11.1111111111% 0%}.GeneIcon--unknown{background-position:11.1111111111% 11.1111111111%}.GeneIcon--cryokinesis{background-position:22.2222222222% 11.1111111111%}.GeneIcon--mattereater{background-position:33.3333333333% 11.1111111111%}.GeneIcon--jumpy{background-position:44.4444444444% 11.1111111111%}.GeneIcon--polymorphism{background-position:55.5555555556% 11.1111111111%}.GeneIcon--telepathy{background-position:66.6666666667% 11.1111111111%}.GeneIcon--empath{background-position:77.7777777778% 11.1111111111%}.GeneIcon--immolate{background-position:88.8888888889% 11.1111111111%}.GeneIcon--melt{background-position:100% 11.1111111111%}.GeneIcon--superfart{background-position:0% 22.2222222222%}.GeneIcon--eyebeams{background-position:11.1111111111% 22.2222222222%}.GeneIcon--adrenaline{background-position:22.2222222222% 22.2222222222%}.GeneIcon--midas{background-position:33.3333333333% 22.2222222222%}.GeneIcon--photokinesis{background-position:44.4444444444% 22.2222222222%}.GeneIcon--erebokinesis{background-position:55.5555555556% 22.2222222222%}.GeneIcon--firebreath{background-position:66.6666666667% 22.2222222222%}.GeneIcon--dimensionshift{background-position:77.7777777778% 22.2222222222%}.GeneIcon--healingtouch{background-position:88.8888888889% 22.2222222222%}.GeneIcon--hallucination{background-position:100% 22.2222222222%}.GeneIcon--brownnote{background-position:0% 33.3333333333%}.GeneIcon--tk{background-position:11.1111111111% 33.3333333333%}.GeneIcon--darkcloak{background-position:22.2222222222% 33.3333333333%}.GeneIcon--chameleon{background-position:33.3333333333% 33.3333333333%}.GeneIcon--bigpuke{background-position:44.4444444444% 33.3333333333%}.GeneIcon--ink{background-position:55.5555555556% 33.3333333333%}.GeneIcon--none{background-position:66.6666666667% 33.3333333333%}.GeneIcon--speech{background-position:77.7777777778% 33.3333333333%}.GeneIcon--lizard{background-position:88.8888888889% 33.3333333333%}.GeneIcon--squid{background-position:100% 33.3333333333%}.GeneIcon--roach{background-position:0% 44.4444444444%}.GeneIcon--frog{background-position:11.1111111111% 44.4444444444%}.GeneIcon--flashy{background-position:22.2222222222% 44.4444444444%}.GeneIcon--dwarf{background-position:33.3333333333% 44.4444444444%}.GeneIcon--cat{background-position:44.4444444444% 44.4444444444%}.GeneIcon--blank{background-position:55.5555555556% 44.4444444444%}.GeneIcon--skeleton{background-position:66.6666666667% 44.4444444444%}.GeneIcon--monkey{background-position:77.7777777778% 44.4444444444%}.GeneIcon--cow{background-position:88.8888888889% 44.4444444444%}.GeneIcon--fire_res{background-position:100% 44.4444444444%}.GeneIcon--cold_res{background-position:0% 55.5555555556%}.GeneIcon--thermal_res{background-position:11.1111111111% 55.5555555556%}.GeneIcon--elec_res{background-position:22.2222222222% 55.5555555556%}.GeneIcon--tox_res{background-position:33.3333333333% 55.5555555556%}.GeneIcon--alc_res{background-position:44.4444444444% 55.5555555556%}.GeneIcon--rad_res{background-position:55.5555555556% 55.5555555556%}.GeneIcon--breathless{background-position:66.6666666667% 55.5555555556%}.GeneIcon--regen{background-position:77.7777777778% 55.5555555556%}.GeneIcon--haze{background-position:88.8888888889% 55.5555555556%}.GeneIcon--dead{background-position:100% 55.5555555556%}.GeneIcon--strong{background-position:0% 66.6666666667%}.GeneIcon--hulk{background-position:11.1111111111% 66.6666666667%}.GeneIcon--radiobrain{background-position:22.2222222222% 66.6666666667%}.GeneIcon--eye{background-position:33.3333333333% 66.6666666667%}.GeneIcon--fart{background-position:44.4444444444% 66.6666666667%}.GeneIcon--bad{background-position:66.6666666667% 66.6666666667%}.GeneIcon--shoot_limb{background-position:77.7777777778% 66.6666666667%}.GeneIcon--apparition-0{background-position:88.8888888889% 66.6666666667%}.GeneIcon--apparition-1{background-position:100% 66.6666666667%}.GeneIcon--hemochromia_rust{background-position:33.3333333333% 88.8888888889%}.GeneIcon--hemochromia_bronze{background-position:44.4444444444% 88.8888888889%}.GeneIcon--hemochromia_gold{background-position:55.5555555556% 88.8888888889%}.GeneIcon--hemochromia_lime{background-position:66.6666666667% 88.8888888889%}.GeneIcon--hemochromia_olive{background-position:77.7777777778% 88.8888888889%}.GeneIcon--hemochromia_jade{background-position:88.8888888889% 88.8888888889%}.GeneIcon--hemochromia_teal{background-position:100% 88.8888888889%}.GeneIcon--hemochromia_cobalt{background-position:0% 100%}.GeneIcon--hemochromia_indigo{background-position:11.1111111111% 100%}.GeneIcon--hemochromia_purple{background-position:22.2222222222% 100%}.GeneIcon--hemochromia_violet{background-position:33.3333333333% 100%}.GeneIcon--hemochromia_fuchsia{background-position:44.4444444444% 100%}.GeneIcon--hemochromia_unknown{background-position:55.5555555556% 100%}.GeneIcon--achromia{background-position:66.6666666667% 100%}.GeneIcon--noir{background-position:77.7777777778% 100%}.IconStack>.Icon{position:absolute;width:100%;text-align:center}.IconStack{position:relative;display:inline-block;height:1.2em;line-height:2em;vertical-align:middle}.IconStack:after{color:transparent;content:"."}.Input{position:relative;display:inline-block;width:10em;border:.0833333333em solid #88bfff;border:.0833333333em solid rgba(136,191,255,.75);border-radius:.16em;color:#fff;background-color:#0a0a0a;padding:0 .3333333333em;margin-right:.1666666667em;line-height:1.4166666667em;overflow:visible}.Input--fluid{display:block;width:auto}.Input__baseline{display:inline-block;color:transparent}.Input__input{display:block;position:absolute;top:0;bottom:0;left:0;right:0;border:0;outline:0;width:100%;font-size:1em;line-height:1.4166666667em;height:1.4166666667em;margin:0;padding:0 .5em;font-family:Verdana,sans-serif;background-color:transparent;color:#fff;color:inherit}.Input__input:-ms-input-placeholder{font-style:italic;color:#777;color:rgba(255,255,255,.45)}.Input--monospace .Input__input{font-family:"Consolas",monospace}.Knob{position:relative;font-size:1rem;width:2.6em;height:2.6em;margin:0 auto;margin-bottom:-0.2em;cursor:n-resize}.Knob:after{content:".";color:transparent;line-height:2.5em}.Knob__circle{position:absolute;top:.1em;bottom:.1em;left:.1em;right:.1em;margin:.3em;background-color:#333;background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.15) 0%, rgba(255, 255, 255, 0) 100%);border-radius:50%;box-shadow:0 .05em .5em 0 rgba(0,0,0,.5)}.Knob__cursorBox{position:absolute;top:0;bottom:0;left:0;right:0}.Knob__cursor{position:relative;top:.05em;margin:0 auto;width:.2em;height:.8em;background-color:rgba(255,255,255,.9)}.Knob__popupValue{position:absolute;top:-2rem;right:50%;font-size:1rem;text-align:center;padding:.25rem .5rem;color:#fff;background-color:#000;transform:translateX(50%);white-space:nowrap}.Knob__ring{position:absolute;top:0;bottom:0;left:0;right:0;padding:.1em}.Knob__ringTrackPivot{transform:rotateZ(135deg)}.Knob__ringTrack{fill:transparent;stroke:rgba(255,255,255,.1);stroke-width:8;stroke-linecap:round;stroke-dasharray:235.62}.Knob__ringFillPivot{transform:rotateZ(135deg)}.Knob--bipolar .Knob__ringFillPivot{transform:rotateZ(270deg)}.Knob__ringFill{fill:transparent;stroke:#6a96c9;stroke-width:8;stroke-linecap:round;stroke-dasharray:314.16;transition:stroke 50ms ease-out}.Knob--color--black .Knob__ringFill{stroke:#1a1a1a}.Knob--color--white .Knob__ringFill{stroke:#fff}.Knob--color--red .Knob__ringFill{stroke:#df3e3e}.Knob--color--orange .Knob__ringFill{stroke:#f37f33}.Knob--color--yellow .Knob__ringFill{stroke:#fbda21}.Knob--color--olive .Knob__ringFill{stroke:#cbe41c}.Knob--color--green .Knob__ringFill{stroke:#25ca4c}.Knob--color--teal .Knob__ringFill{stroke:#00d6cc}.Knob--color--blue .Knob__ringFill{stroke:#2e93de}.Knob--color--violet .Knob__ringFill{stroke:#7349cf}.Knob--color--purple .Knob__ringFill{stroke:#ad45d0}.Knob--color--pink .Knob__ringFill{stroke:#e34da1}.Knob--color--brown .Knob__ringFill{stroke:#b97447}.Knob--color--grey .Knob__ringFill{stroke:#848484}.Knob--color--light-grey .Knob__ringFill{stroke:#b3b3b3}.Knob--color--good .Knob__ringFill{stroke:#68c22d}.Knob--color--average .Knob__ringFill{stroke:#f29a29}.Knob--color--bad .Knob__ringFill{stroke:#df3e3e}.Knob--color--label .Knob__ringFill{stroke:#8b9bb0}.LabeledList{display:table;width:100%;width:calc(100% + 1em);border-collapse:collapse;border-spacing:0;margin:-0.25em -0.5em;margin-bottom:0;padding:0}.LabeledList__row{display:table-row}.LabeledList__row:last-child .LabeledList__cell{padding-bottom:0}.LabeledList__cell{display:table-cell;margin:0;padding:.25em .5em;border:0;text-align:left}.LabeledList__label--nowrap{width:1%;white-space:nowrap;min-width:5em}.LabeledList__buttons{width:.1%;white-space:nowrap;text-align:right;padding-top:.0833333333em;padding-bottom:0}.Modal{background-color:#252525;max-width:calc(100% - 1rem);padding:1rem}.NoticeBox{padding:.33em .5em;margin-bottom:.5em;box-shadow:none;font-weight:bold;font-style:italic;color:#000;background-color:#bb9b68;background-image:repeating-linear-gradient(-45deg, transparent, transparent 0.8333333333em, rgba(0, 0, 0, 0.1) 0.8333333333em, rgba(0, 0, 0, 0.1) 1.6666666667em)}.NoticeBox--color--black{color:#fff;background-color:#000}.NoticeBox--color--white{color:#000;background-color:#b3b3b3}.NoticeBox--color--red{color:#fff;background-color:#701f1f}.NoticeBox--color--orange{color:#fff;background-color:#854114}.NoticeBox--color--yellow{color:#000;background-color:#83710d}.NoticeBox--color--olive{color:#000;background-color:#576015}.NoticeBox--color--green{color:#fff;background-color:#174e24}.NoticeBox--color--teal{color:#fff;background-color:#064845}.NoticeBox--color--blue{color:#fff;background-color:#1b4565}.NoticeBox--color--violet{color:#fff;background-color:#3b2864}.NoticeBox--color--purple{color:#fff;background-color:#542663}.NoticeBox--color--pink{color:#fff;background-color:#802257}.NoticeBox--color--brown{color:#fff;background-color:#4c3729}.NoticeBox--color--grey{color:#fff;background-color:#3e3e3e}.NoticeBox--color--light-grey{color:#fff;background-color:#6a6a6a}.NoticeBox--color--good{color:#fff;background-color:#2e4b1a}.NoticeBox--color--average{color:#fff;background-color:#7b4e13}.NoticeBox--color--bad{color:#fff;background-color:#701f1f}.NoticeBox--color--label{color:#fff;background-color:#53565a}.NoticeBox--type--info{color:#fff;background-color:#235982}.NoticeBox--type--success{color:#fff;background-color:#1e662f}.NoticeBox--type--warning{color:#fff;background-color:#a95219}.NoticeBox--type--danger{color:#fff;background-color:#8f2828}.Input{position:relative;display:inline-block;width:10em;border:.0833333333em solid #88bfff;border:.0833333333em solid rgba(136,191,255,.75);border-radius:.16em;color:#fff;background-color:#0a0a0a;padding:0 .3333333333em;margin-right:.1666666667em;line-height:1.4166666667em;overflow:visible}.Input--fluid{display:block;width:auto}.Input__baseline{display:inline-block;color:transparent}.Input__input{display:block;position:absolute;top:0;bottom:0;left:0;right:0;border:0;outline:0;width:100%;font-size:1em;line-height:1.4166666667em;height:1.4166666667em;margin:0;padding:0 .5em;font-family:Verdana,sans-serif;background-color:transparent;color:#fff;color:inherit}.Input__input:-ms-input-placeholder{font-style:italic;color:#777;color:rgba(255,255,255,.45)}.Input--monospace .Input__input{font-family:"Consolas",monospace}.NumberInput{position:relative;display:inline-block;border:.0833333333em solid #88bfff;border:.0833333333em solid rgba(136,191,255,.75);border-radius:.16em;color:#88bfff;background-color:#0a0a0a;padding:0 .3333333333em;margin-right:.1666666667em;line-height:1.4166666667em;text-align:right;overflow:visible;cursor:n-resize}.NumberInput--fluid{display:block}.NumberInput__content{margin-left:.5em}.NumberInput__barContainer{position:absolute;top:.1666666667em;bottom:.1666666667em;left:.1666666667em}.NumberInput__bar{position:absolute;bottom:0;left:0;width:.25em;box-sizing:border-box;border-bottom:.0833333333em solid #88bfff;background-color:#88bfff}.NumberInput__input{display:block;position:absolute;top:0;bottom:0;left:0;right:0;border:0;outline:0;width:100%;font-size:1em;line-height:1.4166666667em;height:1.4166666667em;margin:0;padding:0 .5em;font-family:Verdana,sans-serif;background-color:#0a0a0a;color:#fff;text-align:right}.ProgressBar{display:flex;position:relative;width:100%;padding:0 .5em;border-width:.0833333333em !important;border-style:solid !important;border-radius:.16em;background-color:rgba(0,0,0,0);transition:border-color 900ms ease-out;align-items:center}.ProgressBar__fill{position:absolute;top:-0.5px;left:0px;bottom:-0.5px}.ProgressBar__fill--animated{transition:background-color 900ms ease-out,width 900ms ease-out}.ProgressBar__content{position:relative;line-height:1.4166666667em;width:100%;text-align:right}.ProgressBar--color--default{border:.0833333333em solid #3e6189}.ProgressBar--color--default .ProgressBar__fill{background-color:#3e6189}.ProgressBar--color--black{border-color:#000 !important}.ProgressBar--color--black .ProgressBar__fill{background-color:#000}.ProgressBar--color--white{border-color:#d9d9d9 !important}.ProgressBar--color--white .ProgressBar__fill{background-color:#d9d9d9}.ProgressBar--color--red{border-color:#bd2020 !important}.ProgressBar--color--red .ProgressBar__fill{background-color:#bd2020}.ProgressBar--color--orange{border-color:#d95e0c !important}.ProgressBar--color--orange .ProgressBar__fill{background-color:#d95e0c}.ProgressBar--color--yellow{border-color:#d9b804 !important}.ProgressBar--color--yellow .ProgressBar__fill{background-color:#d9b804}.ProgressBar--color--olive{border-color:#9aad14 !important}.ProgressBar--color--olive .ProgressBar__fill{background-color:#9aad14}.ProgressBar--color--green{border-color:#1b9638 !important}.ProgressBar--color--green .ProgressBar__fill{background-color:#1b9638}.ProgressBar--color--teal{border-color:#009a93 !important}.ProgressBar--color--teal .ProgressBar__fill{background-color:#009a93}.ProgressBar--color--blue{border-color:#1c71b1 !important}.ProgressBar--color--blue .ProgressBar__fill{background-color:#1c71b1}.ProgressBar--color--violet{border-color:#552dab !important}.ProgressBar--color--violet .ProgressBar__fill{background-color:#552dab}.ProgressBar--color--purple{border-color:#8b2baa !important}.ProgressBar--color--purple .ProgressBar__fill{background-color:#8b2baa}.ProgressBar--color--pink{border-color:#cf2082 !important}.ProgressBar--color--pink .ProgressBar__fill{background-color:#cf2082}.ProgressBar--color--brown{border-color:#8c5836 !important}.ProgressBar--color--brown .ProgressBar__fill{background-color:#8c5836}.ProgressBar--color--grey{border-color:#646464 !important}.ProgressBar--color--grey .ProgressBar__fill{background-color:#646464}.ProgressBar--color--light-grey{border-color:#919191 !important}.ProgressBar--color--light-grey .ProgressBar__fill{background-color:#919191}.ProgressBar--color--good{border-color:#4d9121 !important}.ProgressBar--color--good .ProgressBar__fill{background-color:#4d9121}.ProgressBar--color--average{border-color:#cd7a0d !important}.ProgressBar--color--average .ProgressBar__fill{background-color:#cd7a0d}.ProgressBar--color--bad{border-color:#bd2020 !important}.ProgressBar--color--bad .ProgressBar__fill{background-color:#bd2020}.ProgressBar--color--label{border-color:#657a94 !important}.ProgressBar--color--label .ProgressBar__fill{background-color:#657a94}.RoundGauge{font-size:1rem;width:2.6em;height:1.3em;margin:0 auto .2em}.RoundGauge__ringTrack{fill:transparent;stroke:rgba(255,255,255,.1);stroke-width:10;stroke-dasharray:157.08;stroke-dashoffset:157.08}.RoundGauge__ringFill{fill:transparent;stroke:#6a96c9;stroke-width:10;stroke-dasharray:314.16;transition:stroke 50ms ease-out}.RoundGauge__needle,.RoundGauge__ringFill{transition:transform 50ms ease-in-out}.RoundGauge__needleLine,.RoundGauge__needleMiddle{fill:#db2828}.RoundGauge__alert{fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2;fill:rgba(255,255,255,.1)}.RoundGauge__alert.max{fill:#db2828}.RoundGauge--color--black.RoundGauge__ringFill{stroke:#1a1a1a}.RoundGauge--color--white.RoundGauge__ringFill{stroke:#fff}.RoundGauge--color--red.RoundGauge__ringFill{stroke:#df3e3e}.RoundGauge--color--orange.RoundGauge__ringFill{stroke:#f37f33}.RoundGauge--color--yellow.RoundGauge__ringFill{stroke:#fbda21}.RoundGauge--color--olive.RoundGauge__ringFill{stroke:#cbe41c}.RoundGauge--color--green.RoundGauge__ringFill{stroke:#25ca4c}.RoundGauge--color--teal.RoundGauge__ringFill{stroke:#00d6cc}.RoundGauge--color--blue.RoundGauge__ringFill{stroke:#2e93de}.RoundGauge--color--violet.RoundGauge__ringFill{stroke:#7349cf}.RoundGauge--color--purple.RoundGauge__ringFill{stroke:#ad45d0}.RoundGauge--color--pink.RoundGauge__ringFill{stroke:#e34da1}.RoundGauge--color--brown.RoundGauge__ringFill{stroke:#b97447}.RoundGauge--color--grey.RoundGauge__ringFill{stroke:#848484}.RoundGauge--color--light-grey.RoundGauge__ringFill{stroke:#b3b3b3}.RoundGauge--color--good.RoundGauge__ringFill{stroke:#68c22d}.RoundGauge--color--average.RoundGauge__ringFill{stroke:#f29a29}.RoundGauge--color--bad.RoundGauge__ringFill{stroke:#df3e3e}.RoundGauge--color--label.RoundGauge__ringFill{stroke:#8b9bb0}.RoundGauge__alert--black{fill:#1a1a1a;transition:opacity .6s cubic-bezier(0.25, 1, 0.5, 1);animation:RoundGauge__alertAnim 1s cubic-bezier(0.34, 1.56, 0.64, 1) infinite}.RoundGauge__alert--white{fill:#fff;transition:opacity .6s cubic-bezier(0.25, 1, 0.5, 1);animation:RoundGauge__alertAnim 1s cubic-bezier(0.34, 1.56, 0.64, 1) infinite}.RoundGauge__alert--red{fill:#df3e3e;transition:opacity .6s cubic-bezier(0.25, 1, 0.5, 1);animation:RoundGauge__alertAnim 1s cubic-bezier(0.34, 1.56, 0.64, 1) infinite}.RoundGauge__alert--orange{fill:#f37f33;transition:opacity .6s cubic-bezier(0.25, 1, 0.5, 1);animation:RoundGauge__alertAnim 1s cubic-bezier(0.34, 1.56, 0.64, 1) infinite}.RoundGauge__alert--yellow{fill:#fbda21;transition:opacity .6s cubic-bezier(0.25, 1, 0.5, 1);animation:RoundGauge__alertAnim 1s cubic-bezier(0.34, 1.56, 0.64, 1) infinite}.RoundGauge__alert--olive{fill:#cbe41c;transition:opacity .6s cubic-bezier(0.25, 1, 0.5, 1);animation:RoundGauge__alertAnim 1s cubic-bezier(0.34, 1.56, 0.64, 1) infinite}.RoundGauge__alert--green{fill:#25ca4c;transition:opacity .6s cubic-bezier(0.25, 1, 0.5, 1);animation:RoundGauge__alertAnim 1s cubic-bezier(0.34, 1.56, 0.64, 1) infinite}.RoundGauge__alert--teal{fill:#00d6cc;transition:opacity .6s cubic-bezier(0.25, 1, 0.5, 1);animation:RoundGauge__alertAnim 1s cubic-bezier(0.34, 1.56, 0.64, 1) infinite}.RoundGauge__alert--blue{fill:#2e93de;transition:opacity .6s cubic-bezier(0.25, 1, 0.5, 1);animation:RoundGauge__alertAnim 1s cubic-bezier(0.34, 1.56, 0.64, 1) infinite}.RoundGauge__alert--violet{fill:#7349cf;transition:opacity .6s cubic-bezier(0.25, 1, 0.5, 1);animation:RoundGauge__alertAnim 1s cubic-bezier(0.34, 1.56, 0.64, 1) infinite}.RoundGauge__alert--purple{fill:#ad45d0;transition:opacity .6s cubic-bezier(0.25, 1, 0.5, 1);animation:RoundGauge__alertAnim 1s cubic-bezier(0.34, 1.56, 0.64, 1) infinite}.RoundGauge__alert--pink{fill:#e34da1;transition:opacity .6s cubic-bezier(0.25, 1, 0.5, 1);animation:RoundGauge__alertAnim 1s cubic-bezier(0.34, 1.56, 0.64, 1) infinite}.RoundGauge__alert--brown{fill:#b97447;transition:opacity .6s cubic-bezier(0.25, 1, 0.5, 1);animation:RoundGauge__alertAnim 1s cubic-bezier(0.34, 1.56, 0.64, 1) infinite}.RoundGauge__alert--grey{fill:#848484;transition:opacity .6s cubic-bezier(0.25, 1, 0.5, 1);animation:RoundGauge__alertAnim 1s cubic-bezier(0.34, 1.56, 0.64, 1) infinite}.RoundGauge__alert--light-grey{fill:#b3b3b3;transition:opacity .6s cubic-bezier(0.25, 1, 0.5, 1);animation:RoundGauge__alertAnim 1s cubic-bezier(0.34, 1.56, 0.64, 1) infinite}.RoundGauge__alert--good{fill:#68c22d;transition:opacity .6s cubic-bezier(0.25, 1, 0.5, 1);animation:RoundGauge__alertAnim 1s cubic-bezier(0.34, 1.56, 0.64, 1) infinite}.RoundGauge__alert--average{fill:#f29a29;transition:opacity .6s cubic-bezier(0.25, 1, 0.5, 1);animation:RoundGauge__alertAnim 1s cubic-bezier(0.34, 1.56, 0.64, 1) infinite}.RoundGauge__alert--bad{fill:#df3e3e;transition:opacity .6s cubic-bezier(0.25, 1, 0.5, 1);animation:RoundGauge__alertAnim 1s cubic-bezier(0.34, 1.56, 0.64, 1) infinite}.RoundGauge__alert--label{fill:#8b9bb0;transition:opacity .6s cubic-bezier(0.25, 1, 0.5, 1);animation:RoundGauge__alertAnim 1s cubic-bezier(0.34, 1.56, 0.64, 1) infinite}@keyframes RoundGauge__alertAnim{0%{opacity:.1}50%{opacity:1}100%{opacity:.1}}.Section{position:relative;margin-bottom:.5em;background-color:#191919;background-color:rgba(0,0,0,.33);box-sizing:border-box}.Section:last-child{margin-bottom:0}.Section__title{position:relative;padding:.5em;border-bottom:.1666666667em solid #4972a1}.Section__titleText{font-size:1.1666666667em;font-weight:bold;color:#fff}.Section__buttons{position:absolute;display:inline-block;right:.5em;margin-top:-.0833333333em}.Section__rest{position:relative}.Section__content{padding:.66em .5em}.Section--fitted>.Section__rest>.Section__content{padding:0}.Section--fill{display:flex;flex-direction:column;height:100%}.Section--fill>.Section__rest{flex-grow:1}.Section--fill>.Section__rest>.Section__content{height:100%}.Section--fill.Section--scrollable>.Section__rest>.Section__content{position:absolute;top:0;left:0;right:0;bottom:0}.Section--fill.Section--iefix{display:table !important;width:100% !important;height:100% !important;border-collapse:collapse;border-spacing:0}.Section--fill.Section--iefix>.Section__rest{display:table-row !important;height:100% !important}.Section--scrollable{overflow-x:hidden;overflow-y:hidden}.Section--scrollable>.Section__rest>.Section__content{overflow-y:scroll;overflow-x:hidden}.Section .Section{background-color:transparent;margin-left:-0.5em;margin-right:-0.5em}.Section .Section:first-child{margin-top:-0.5em}.Section .Section .Section__titleText{font-size:1.0833333333em}.Section .Section .Section .Section__titleText{font-size:1em}.SectionEx .Section__title{display:flex}.SectionEx .Section__titleText{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;flex:auto}.SectionEx .Section__buttons{position:inherit;right:inherit;flex:none}.SectionEx__capitalize .Section__titleText{text-transform:capitalize}.Slider{cursor:e-resize}.Slider__cursorOffset{position:absolute;top:0;left:0;bottom:0;transition:none !important}.Slider__cursor{position:absolute;top:0;right:-.0833333333em;bottom:0;width:0;border-left:.1666666667em solid #fff}.Slider__pointer{position:absolute;right:-.4166666667em;bottom:-.3333333333em;width:0;height:0;border-left:.4166666667em solid transparent;border-right:.4166666667em solid transparent;border-bottom:.4166666667em solid #fff}.Slider__popupValue{position:absolute;right:0;top:-2rem;font-size:1rem;padding:.25rem .5rem;color:#fff;background-color:#000;transform:translateX(50%);white-space:nowrap}.Divider--horizontal{margin:.5em 0}.Divider--horizontal:not(.Divider--hidden){border-top:.1666666667em solid rgba(255,255,255,.1)}.Divider--vertical{height:100%;margin:0 .5em}.Divider--vertical:not(.Divider--hidden){border-left:.1666666667em solid rgba(255,255,255,.1)}.Stack--fill{height:100%}.Stack--horizontal>.Stack__item{margin-left:.5em}.Stack--horizontal>.Stack__item:first-child{margin-left:0}.Stack--vertical>.Stack__item{margin-top:.5em}.Stack--vertical>.Stack__item:first-child{margin-top:0}.Stack--zebra>.Stack__item:nth-child(even){background-color:rgba(0,0,0,.33)}.Stack--horizontal>.Stack__divider:not(.Stack__divider--hidden){border-left:.1666666667em solid rgba(255,255,255,.1)}.Stack--vertical>.Stack__divider:not(.Stack__divider--hidden){border-top:.1666666667em solid rgba(255,255,255,.1)}.Table{display:table;width:100%;border-collapse:collapse;border-spacing:0;margin:0}.Table--collapsing{width:auto}.Table__row{display:table-row}.Table__cell{display:table-cell;padding:0 .25em}.Table__cell:first-child{padding-left:0}.Table__cell:last-child{padding-right:0}.Table__row--header .Table__cell,.Table__cell--header{font-weight:bold;padding-bottom:.5em}.Table__cell--collapsing{width:1%;white-space:nowrap}.Tabs{display:flex;align-items:stretch;overflow:hidden;background-color:rgba(0,0,0,.33)}.Tabs--fill{height:100%}.Section .Tabs{background-color:transparent}.Section:not(.Section--fitted) .Tabs{margin:0 -0.5em .5em}.Section:not(.Section--fitted) .Tabs:first-child{margin-top:-0.5em}.Tabs--vertical{flex-direction:column;padding:.25em 0 .25em .25em}.Tabs--horizontal{margin-bottom:.5em;padding:.25em .25em 0 .25em}.Tabs--horizontal:last-child{margin-bottom:0}.Tabs__Tab{flex-grow:0}.Tabs--fluid .Tabs__Tab{flex-grow:1}.Tab{display:flex;align-items:center;justify-content:space-between;background-color:transparent;color:rgba(255,255,255,.5);min-height:2.25em;min-width:4em}.Tab:not(.Tab--selected):hover{background-color:rgba(255,255,255,.075)}.Tab--selected{background-color:rgba(255,255,255,.125);color:#dfe7f0}.Tab__text{flex-grow:1;margin:0 .5em}.Tab__left{min-width:1.5em;text-align:center;margin-left:.25em}.Tab__right{min-width:1.5em;text-align:center;margin-right:.25em}.Tabs--horizontal .Tab{border-top:.1666666667em solid transparent;border-bottom:.1666666667em solid transparent;border-top-left-radius:.25em;border-top-right-radius:.25em}.Tabs--horizontal .Tab--selected{border-bottom:.1666666667em solid #d4dfec}.Tabs--vertical .Tab{min-height:2em;border-left:.1666666667em solid transparent;border-right:.1666666667em solid transparent;border-top-left-radius:.25em;border-bottom-left-radius:.25em}.Tabs--vertical .Tab--selected{border-right:.1666666667em solid #d4dfec}.Tab--selected.Tab--color--black{color:#535353}.Tabs--horizontal .Tab--selected.Tab--color--black{border-bottom-color:#1a1a1a}.Tabs--vertical .Tab--selected.Tab--color--black{border-right-color:#1a1a1a}.Tab--selected.Tab--color--white{color:#fff}.Tabs--horizontal .Tab--selected.Tab--color--white{border-bottom-color:#fff}.Tabs--vertical .Tab--selected.Tab--color--white{border-right-color:#fff}.Tab--selected.Tab--color--red{color:#e76e6e}.Tabs--horizontal .Tab--selected.Tab--color--red{border-bottom-color:#df3e3e}.Tabs--vertical .Tab--selected.Tab--color--red{border-right-color:#df3e3e}.Tab--selected.Tab--color--orange{color:#f69f66}.Tabs--horizontal .Tab--selected.Tab--color--orange{border-bottom-color:#f37f33}.Tabs--vertical .Tab--selected.Tab--color--orange{border-right-color:#f37f33}.Tab--selected.Tab--color--yellow{color:#fce358}.Tabs--horizontal .Tab--selected.Tab--color--yellow{border-bottom-color:#fbda21}.Tabs--vertical .Tab--selected.Tab--color--yellow{border-right-color:#fbda21}.Tab--selected.Tab--color--olive{color:#d8eb55}.Tabs--horizontal .Tab--selected.Tab--color--olive{border-bottom-color:#cbe41c}.Tabs--vertical .Tab--selected.Tab--color--olive{border-right-color:#cbe41c}.Tab--selected.Tab--color--green{color:#53e074}.Tabs--horizontal .Tab--selected.Tab--color--green{border-bottom-color:#25ca4c}.Tabs--vertical .Tab--selected.Tab--color--green{border-right-color:#25ca4c}.Tab--selected.Tab--color--teal{color:#21fff5}.Tabs--horizontal .Tab--selected.Tab--color--teal{border-bottom-color:#00d6cc}.Tabs--vertical .Tab--selected.Tab--color--teal{border-right-color:#00d6cc}.Tab--selected.Tab--color--blue{color:#62aee6}.Tabs--horizontal .Tab--selected.Tab--color--blue{border-bottom-color:#2e93de}.Tabs--vertical .Tab--selected.Tab--color--blue{border-right-color:#2e93de}.Tab--selected.Tab--color--violet{color:#9676db}.Tabs--horizontal .Tab--selected.Tab--color--violet{border-bottom-color:#7349cf}.Tabs--vertical .Tab--selected.Tab--color--violet{border-right-color:#7349cf}.Tab--selected.Tab--color--purple{color:#c274db}.Tabs--horizontal .Tab--selected.Tab--color--purple{border-bottom-color:#ad45d0}.Tabs--vertical .Tab--selected.Tab--color--purple{border-right-color:#ad45d0}.Tab--selected.Tab--color--pink{color:#ea79b9}.Tabs--horizontal .Tab--selected.Tab--color--pink{border-bottom-color:#e34da1}.Tabs--vertical .Tab--selected.Tab--color--pink{border-right-color:#e34da1}.Tab--selected.Tab--color--brown{color:#ca9775}.Tabs--horizontal .Tab--selected.Tab--color--brown{border-bottom-color:#b97447}.Tabs--vertical .Tab--selected.Tab--color--brown{border-right-color:#b97447}.Tab--selected.Tab--color--grey{color:#a3a3a3}.Tabs--horizontal .Tab--selected.Tab--color--grey{border-bottom-color:#848484}.Tabs--vertical .Tab--selected.Tab--color--grey{border-right-color:#848484}.Tab--selected.Tab--color--light-grey{color:#c6c6c6}.Tabs--horizontal .Tab--selected.Tab--color--light-grey{border-bottom-color:#b3b3b3}.Tabs--vertical .Tab--selected.Tab--color--light-grey{border-right-color:#b3b3b3}.Tab--selected.Tab--color--good{color:#8cd95a}.Tabs--horizontal .Tab--selected.Tab--color--good{border-bottom-color:#68c22d}.Tabs--vertical .Tab--selected.Tab--color--good{border-right-color:#68c22d}.Tab--selected.Tab--color--average{color:#f5b35e}.Tabs--horizontal .Tab--selected.Tab--color--average{border-bottom-color:#f29a29}.Tabs--vertical .Tab--selected.Tab--color--average{border-right-color:#f29a29}.Tab--selected.Tab--color--bad{color:#e76e6e}.Tabs--horizontal .Tab--selected.Tab--color--bad{border-bottom-color:#df3e3e}.Tabs--vertical .Tab--selected.Tab--color--bad{border-right-color:#df3e3e}.Tab--selected.Tab--color--label{color:#a8b4c4}.Tabs--horizontal .Tab--selected.Tab--color--label{border-bottom-color:#8b9bb0}.Tabs--vertical .Tab--selected.Tab--color--label{border-right-color:#8b9bb0}.Input{position:relative;display:inline-block;width:10em;border:.0833333333em solid #88bfff;border:.0833333333em solid rgba(136,191,255,.75);border-radius:.16em;color:#fff;background-color:#0a0a0a;padding:0 .3333333333em;margin-right:.1666666667em;line-height:1.4166666667em;overflow:visible}.Input--fluid{display:block;width:auto}.Input__baseline{display:inline-block;color:transparent}.Input__input{display:block;position:absolute;top:0;bottom:0;left:0;right:0;border:0;outline:0;width:100%;font-size:1em;line-height:1.4166666667em;height:1.4166666667em;margin:0;padding:0 .5em;font-family:Verdana,sans-serif;background-color:transparent;color:#fff;color:inherit}.Input__input:-ms-input-placeholder{font-style:italic;color:#777;color:rgba(255,255,255,.45)}.Input--monospace .Input__input{font-family:"Consolas",monospace}.TextArea{position:relative;display:inline-block;border:.0833333333em solid #88bfff;border:.0833333333em solid rgba(136,191,255,.75);border-radius:.16em;background-color:#0a0a0a;margin-right:.1666666667em;line-height:1.4166666667em;box-sizing:border-box;width:100%}.TextArea--fluid{display:block;width:auto;height:auto}.TextArea__textarea{display:block;position:absolute;top:0;bottom:0;left:0;right:0;border:0;outline:0;width:100%;height:100%;font-size:1em;line-height:1.4166666667em;min-height:1.4166666667em;margin:0;padding:0 .5em;font-family:inherit;background-color:transparent;color:inherit;box-sizing:border-box;word-wrap:break-word;overflow:hidden}.TextArea__textarea:-ms-input-placeholder{font-style:italic;color:#777;color:rgba(255,255,255,.45)}.Tooltip{z-index:2;padding:.5em .75em;pointer-events:none;text-align:left;transition:opacity 150ms ease-out;background-color:#000;color:#fff;box-shadow:.1em .1em 1.25em -0.1em rgba(0,0,0,.5);border-radius:.16em;max-width:20.8333333333em}.TooltipOverflow{display:inline-block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.list-search-interface__search-option.Button--color--transparent{transition:initial}.Button{position:relative;display:inline-block;line-height:1.667em;padding:0 .5em;margin-right:.1666666667em;white-space:nowrap;outline:0;border-radius:.16em;margin-bottom:.1666666667em;user-select:none;-ms-user-select:none}.Button:last-child{margin-right:0;margin-bottom:0}.Button .fa,.Button .fa-solid,.Button .fa-regular{margin-left:0;margin-right:0;min-width:1.333em;text-align:center}.Button--hasContent .fa,.Button--hasContent .fa-solid,.Button--hasContent .fa-regular{margin-right:.25em}.Button--hasContent.Button--iconPosition--right .fa,.Button--hasContent.Button--iconPosition--right .fas,.Button--hasContent.Button--iconPosition--right .far{margin-right:0px;margin-left:3px}.Button--ellipsis{overflow:hidden;text-overflow:ellipsis}.Button--ellipsis .Button__content{overflow:hidden;text-overflow:ellipsis}.Button--fluid{display:block;margin-left:0;margin-right:0}.Button--circular{border-radius:50%}.Button--compact{padding:0 .25em;line-height:1.333em}.Button--color--black{transition:color 50ms,background-color 50ms;background-color:#000;color:#fff}.Button--color--black:hover{transition:color 0ms,background-color 0ms}.Button--color--black:focus{transition:color 100ms,background-color 100ms}.Button--color--black:hover,.Button--color--black:focus{background-color:#131313;color:#fff}.Button--color--black:active{background-color:#262626}.Button--color--white{transition:color 50ms,background-color 50ms;background-color:#d9d9d9;color:#000}.Button--color--white:hover{transition:color 0ms,background-color 0ms}.Button--color--white:focus{transition:color 100ms,background-color 100ms}.Button--color--white:hover,.Button--color--white:focus{background-color:#f8f8f8;color:#000}.Button--color--white:active{background-color:#fbfbfb}.Button--color--red{transition:color 50ms,background-color 50ms;background-color:#bd2020;color:#fff}.Button--color--red:hover{transition:color 0ms,background-color 0ms}.Button--color--red:focus{transition:color 100ms,background-color 100ms}.Button--color--red:hover,.Button--color--red:focus{background-color:#dc4848;color:#fff}.Button--color--red:active{background-color:#e78484}.Button--color--orange{transition:color 50ms,background-color 50ms;background-color:#d95e0c;color:#fff}.Button--color--orange:hover{transition:color 0ms,background-color 0ms}.Button--color--orange:focus{transition:color 100ms,background-color 100ms}.Button--color--orange:hover,.Button--color--orange:focus{background-color:#f0853f;color:#fff}.Button--color--orange:active{background-color:#f5b082}.Button--color--yellow{transition:color 50ms,background-color 50ms;background-color:#d9b804;color:#000}.Button--color--yellow:hover{transition:color 0ms,background-color 0ms}.Button--color--yellow:focus{transition:color 100ms,background-color 100ms}.Button--color--yellow:hover,.Button--color--yellow:focus{background-color:#f5d72e;color:#000}.Button--color--yellow:active{background-color:#f9e572}.Button--color--olive{transition:color 50ms,background-color 50ms;background-color:#9aad14;color:#fff}.Button--color--olive:hover{transition:color 0ms,background-color 0ms}.Button--color--olive:focus{transition:color 100ms,background-color 100ms}.Button--color--olive:hover,.Button--color--olive:focus{background-color:#c4da2b;color:#fff}.Button--color--olive:active{background-color:#d6e761}.Button--color--green{transition:color 50ms,background-color 50ms;background-color:#1b9638;color:#fff}.Button--color--green:hover{transition:color 0ms,background-color 0ms}.Button--color--green:focus{transition:color 100ms,background-color 100ms}.Button--color--green:hover,.Button--color--green:focus{background-color:#32c154;color:#fff}.Button--color--green:active{background-color:#59da78}.Button--color--teal{transition:color 50ms,background-color 50ms;background-color:#009a93;color:#fff}.Button--color--teal:hover{transition:color 0ms,background-color 0ms}.Button--color--teal:focus{transition:color 100ms,background-color 100ms}.Button--color--teal:hover,.Button--color--teal:focus{background-color:#13c4bc;color:#fff}.Button--color--teal:active{background-color:#26eee5}.Button--color--blue{transition:color 50ms,background-color 50ms;background-color:#1c71b1;color:#fff}.Button--color--blue:hover{transition:color 0ms,background-color 0ms}.Button--color--blue:focus{transition:color 100ms,background-color 100ms}.Button--color--blue:hover,.Button--color--blue:focus{background-color:#3a95d9;color:#fff}.Button--color--blue:active{background-color:#73b3e5}.Button--color--violet{transition:color 50ms,background-color 50ms;background-color:#552dab;color:#fff}.Button--color--violet:hover{transition:color 0ms,background-color 0ms}.Button--color--violet:focus{transition:color 100ms,background-color 100ms}.Button--color--violet:hover,.Button--color--violet:focus{background-color:#7953cc;color:#fff}.Button--color--violet:active{background-color:#a389dd}.Button--color--purple{transition:color 50ms,background-color 50ms;background-color:#8b2baa;color:#fff}.Button--color--purple:hover{transition:color 0ms,background-color 0ms}.Button--color--purple:focus{transition:color 100ms,background-color 100ms}.Button--color--purple:hover,.Button--color--purple:focus{background-color:#ad4fcd;color:#fff}.Button--color--purple:active{background-color:#c785dd}.Button--color--pink{transition:color 50ms,background-color 50ms;background-color:#cf2082;color:#fff}.Button--color--pink:hover{transition:color 0ms,background-color 0ms}.Button--color--pink:focus{transition:color 100ms,background-color 100ms}.Button--color--pink:hover,.Button--color--pink:focus{background-color:#e257a5;color:#fff}.Button--color--pink:active{background-color:#ee96c7}.Button--color--brown{transition:color 50ms,background-color 50ms;background-color:#8c5836;color:#fff}.Button--color--brown:hover{transition:color 0ms,background-color 0ms}.Button--color--brown:focus{transition:color 100ms,background-color 100ms}.Button--color--brown:hover,.Button--color--brown:focus{background-color:#b47851;color:#fff}.Button--color--brown:active{background-color:#ca9c7e}.Button--color--grey{transition:color 50ms,background-color 50ms;background-color:#646464;color:#fff}.Button--color--grey:hover{transition:color 0ms,background-color 0ms}.Button--color--grey:focus{transition:color 100ms,background-color 100ms}.Button--color--grey:hover,.Button--color--grey:focus{background-color:#868686;color:#fff}.Button--color--grey:active{background-color:#a8a8a8}.Button--color--light-grey{transition:color 50ms,background-color 50ms;background-color:#919191;color:#fff}.Button--color--light-grey:hover{transition:color 0ms,background-color 0ms}.Button--color--light-grey:focus{transition:color 100ms,background-color 100ms}.Button--color--light-grey:hover,.Button--color--light-grey:focus{background-color:#bababa;color:#fff}.Button--color--light-grey:active{background-color:#e2e2e2}.Button--color--good{transition:color 50ms,background-color 50ms;background-color:#4d9121;color:#fff}.Button--color--good:hover{transition:color 0ms,background-color 0ms}.Button--color--good:focus{transition:color 100ms,background-color 100ms}.Button--color--good:hover,.Button--color--good:focus{background-color:#6cba39;color:#fff}.Button--color--good:active{background-color:#8ed55f}.Button--color--average{transition:color 50ms,background-color 50ms;background-color:#cd7a0d;color:#fff}.Button--color--average:hover{transition:color 0ms,background-color 0ms}.Button--color--average:focus{transition:color 100ms,background-color 100ms}.Button--color--average:hover,.Button--color--average:focus{background-color:#ed9d35;color:#fff}.Button--color--average:active{background-color:#f3bd76}.Button--color--bad{transition:color 50ms,background-color 50ms;background-color:#bd2020;color:#fff}.Button--color--bad:hover{transition:color 0ms,background-color 0ms}.Button--color--bad:focus{transition:color 100ms,background-color 100ms}.Button--color--bad:hover,.Button--color--bad:focus{background-color:#dc4848;color:#fff}.Button--color--bad:active{background-color:#e78484}.Button--color--label{transition:color 50ms,background-color 50ms;background-color:#657a94;color:#fff}.Button--color--label:hover{transition:color 0ms,background-color 0ms}.Button--color--label:focus{transition:color 100ms,background-color 100ms}.Button--color--label:hover,.Button--color--label:focus{background-color:#91a1b3;color:#fff}.Button--color--label:active{background-color:#bec7d3}.Button--color--default{transition:color 50ms,background-color 50ms;background-color:#3e6189;color:#fff}.Button--color--default:hover{transition:color 0ms,background-color 0ms}.Button--color--default:focus{transition:color 100ms,background-color 100ms}.Button--color--default:hover,.Button--color--default:focus{background-color:#5c83b0;color:#fff}.Button--color--default:active{background-color:#89a6c6}.Button--color--caution{transition:color 50ms,background-color 50ms;background-color:#d9b804;color:#000}.Button--color--caution:hover{transition:color 0ms,background-color 0ms}.Button--color--caution:focus{transition:color 100ms,background-color 100ms}.Button--color--caution:hover,.Button--color--caution:focus{background-color:#f5d72e;color:#000}.Button--color--caution:active{background-color:#f9e572}.Button--color--danger{transition:color 50ms,background-color 50ms;background-color:#bd2020;color:#fff}.Button--color--danger:hover{transition:color 0ms,background-color 0ms}.Button--color--danger:focus{transition:color 100ms,background-color 100ms}.Button--color--danger:hover,.Button--color--danger:focus{background-color:#dc4848;color:#fff}.Button--color--danger:active{background-color:#e78484}.Button--color--transparent{transition:color 50ms,background-color 50ms;background-color:#252525;color:#fff;background-color:rgba(37,37,37,0);color:rgba(255,255,255,.5)}.Button--color--transparent:hover{transition:color 0ms,background-color 0ms}.Button--color--transparent:focus{transition:color 100ms,background-color 100ms}.Button--color--transparent:hover,.Button--color--transparent:focus{background-color:#3e3e3e;color:#fff}.Button--color--transparent:active{background-color:#565656}.Button--disabled{background-color:#999 !important}.Button--selected{transition:color 50ms,background-color 50ms;background-color:#1b9638;color:#fff}.Button--selected:hover{transition:color 0ms,background-color 0ms}.Button--selected:focus{transition:color 100ms,background-color 100ms}.Button--selected:hover,.Button--selected:focus{background-color:#32c154;color:#fff}.Button--selected:active{background-color:#59da78}.Button--flex{display:inline-flex;flex-direction:column}.Button--flex--fluid{width:100%}.Button--verticalAlignContent--top{justify-content:flex-start}.Button--verticalAlignContent--middle{justify-content:center}.Button--verticalAlignContent--bottom{justify-content:flex-end}.Button__content{display:block;align-self:stretch}.AccessPanel-wires-btn.Button--selected{background-color:#cd7a0d !important}.Airlock-hack-button{font-family:monospace;border-width:.1666666667em;border-style:outset;border-color:#0a0;outline:.0833333333em solid #007a00}.Airlock-hack-button.Button--disabled{background-color:#4a6a4a}.Airlock-hack-button.Button--color--default{background-color:lime}.AlertModal__Message{text-align:center;justify-content:center}.AlertModal__Buttons{justify-content:center}.AlertModal__Loader{width:100%;position:relative;height:4px}.AlertModal__LoaderProgress{position:absolute;transition:background-color 500ms ease-out,width 500ms ease-out;background-color:#3e6189;height:100%}.Layout__content{background-image:none !important}.CurrentBan{background-color:rgba(0,255,0,.2);font-weight:bold}.ExpiredBan{background-color:rgba(255,0,0,.2);font-style:italic}.BanText{padding:.25rem}a.NoColor{color:inherit}.cashreg__ownerbutton,.cashreg__pay,.cashreg__tip{display:flex;justify-content:center;align-items:center}.cashreg__ownerbutton>*,.cashreg__pay>*,.cashreg__tip>*{padding:.5em .1em}.cashreg__centerpart{font-size:1.5rem}.cashreg__amount:hover{background-color:#439de1}.cashreg__table{width:80%}.cashreg__table_cellright{text-align:right}.react-colorful{position:relative;display:flex;flex-direction:column;width:200px;height:200px;user-select:none;cursor:default}.react-colorful__saturation_value{position:relative;flex-grow:1;border-color:transparent;border-bottom:12px solid #000;border-radius:8px 8px 0 0;background-image:linear-gradient(to top, black, rgba(0, 0, 0, 0)),linear-gradient(to right, white, rgba(255, 255, 255, 0))}.react-colorful__pointer-fill,.react-colorful__alpha-gradient{content:"";position:absolute;left:0;top:0;right:0;bottom:0;pointer-events:none;border-radius:inherit}.react-colorful__alpha-gradient,.react-colorful__saturation_value{box-shadow:inset 0 0 0 1px rgba(0,0,0,.05)}.react-colorful__hue,.react-colorful__r,.react-colorful__g,.react-colorful__b,.react-colorful__alpha,.react-colorful__saturation,.react-colorful__value{position:relative;height:24px}.react-colorful__hue{background:linear-gradient(to right, #f00 0%, #ff0 17%, #0f0 33%, #0ff 50%, #00f 67%, #f0f 83%, #f00 100%)}.react-colorful__r{background:linear-gradient(to right, #000, #f00)}.react-colorful__g{background:linear-gradient(to right, #000, #0f0)}.react-colorful__b{background:linear-gradient(to right, #000, #00f)}.react-colorful__last-control{border-radius:0 0 8px 8px}.react-colorful__interactive{position:absolute;left:0;top:0;right:0;bottom:0;border-radius:inherit;outline:none;touch-action:none}.react-colorful__pointer{position:absolute;z-index:1;box-sizing:border-box;width:28px;height:28px;transform:translate(-50%, -50%);background-color:#cfcfcf;border:2px solid #cfcfcf;border-radius:50%;box-shadow:0 2px 5px rgba(0,0,0,.4)}.react-colorful__interactive:focus .react-colorful__pointer{transform:translate(-50%, -50%) scale(1.1);background-color:#fff;border-color:#fff}.react-colorful__alpha,.react-colorful__alpha-pointer{background-color:#fff;background-image:url('data:image/svg+xml,<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill-opacity=".05"><rect x="8" width="8" height="8"/><rect y="8" width="8" height="8"/></svg>')}.react-colorful__saturation-pointer,.react-colorful__value-pointer,.react-colorful__hue-pointer,.react-colorful__r-pointer,.react-colorful__g-pointer,.react-colorful__b-pointer{z-index:1;width:20px;height:20px}.react-colorful__saturation_value-pointer{z-index:3}.Button{position:relative;display:inline-block;line-height:1.667em;padding:0 .5em;margin-right:.1666666667em;white-space:nowrap;outline:0;border-radius:.16em;margin-bottom:.1666666667em;user-select:none;-ms-user-select:none}.Button:last-child{margin-right:0;margin-bottom:0}.Button .fa,.Button .fa-solid,.Button .fa-regular{margin-left:0;margin-right:0;min-width:1.333em;text-align:center}.Button--hasContent .fa,.Button--hasContent .fa-solid,.Button--hasContent .fa-regular{margin-right:.25em}.Button--hasContent.Button--iconPosition--right .fa,.Button--hasContent.Button--iconPosition--right .fas,.Button--hasContent.Button--iconPosition--right .far{margin-right:0px;margin-left:3px}.Button--ellipsis{overflow:hidden;text-overflow:ellipsis}.Button--ellipsis .Button__content{overflow:hidden;text-overflow:ellipsis}.Button--fluid{display:block;margin-left:0;margin-right:0}.Button--circular{border-radius:50%}.Button--compact{padding:0 .25em;line-height:1.333em}.Button--color--black{transition:color 50ms,background-color 50ms;background-color:#000;color:#fff}.Button--color--black:hover{transition:color 0ms,background-color 0ms}.Button--color--black:focus{transition:color 100ms,background-color 100ms}.Button--color--black:hover,.Button--color--black:focus{background-color:#131313;color:#fff}.Button--color--black:active{background-color:#262626}.Button--color--white{transition:color 50ms,background-color 50ms;background-color:#d9d9d9;color:#000}.Button--color--white:hover{transition:color 0ms,background-color 0ms}.Button--color--white:focus{transition:color 100ms,background-color 100ms}.Button--color--white:hover,.Button--color--white:focus{background-color:#f8f8f8;color:#000}.Button--color--white:active{background-color:#fbfbfb}.Button--color--red{transition:color 50ms,background-color 50ms;background-color:#bd2020;color:#fff}.Button--color--red:hover{transition:color 0ms,background-color 0ms}.Button--color--red:focus{transition:color 100ms,background-color 100ms}.Button--color--red:hover,.Button--color--red:focus{background-color:#dc4848;color:#fff}.Button--color--red:active{background-color:#e78484}.Button--color--orange{transition:color 50ms,background-color 50ms;background-color:#d95e0c;color:#fff}.Button--color--orange:hover{transition:color 0ms,background-color 0ms}.Button--color--orange:focus{transition:color 100ms,background-color 100ms}.Button--color--orange:hover,.Button--color--orange:focus{background-color:#f0853f;color:#fff}.Button--color--orange:active{background-color:#f5b082}.Button--color--yellow{transition:color 50ms,background-color 50ms;background-color:#d9b804;color:#000}.Button--color--yellow:hover{transition:color 0ms,background-color 0ms}.Button--color--yellow:focus{transition:color 100ms,background-color 100ms}.Button--color--yellow:hover,.Button--color--yellow:focus{background-color:#f5d72e;color:#000}.Button--color--yellow:active{background-color:#f9e572}.Button--color--olive{transition:color 50ms,background-color 50ms;background-color:#9aad14;color:#fff}.Button--color--olive:hover{transition:color 0ms,background-color 0ms}.Button--color--olive:focus{transition:color 100ms,background-color 100ms}.Button--color--olive:hover,.Button--color--olive:focus{background-color:#c4da2b;color:#fff}.Button--color--olive:active{background-color:#d6e761}.Button--color--green{transition:color 50ms,background-color 50ms;background-color:#1b9638;color:#fff}.Button--color--green:hover{transition:color 0ms,background-color 0ms}.Button--color--green:focus{transition:color 100ms,background-color 100ms}.Button--color--green:hover,.Button--color--green:focus{background-color:#32c154;color:#fff}.Button--color--green:active{background-color:#59da78}.Button--color--teal{transition:color 50ms,background-color 50ms;background-color:#009a93;color:#fff}.Button--color--teal:hover{transition:color 0ms,background-color 0ms}.Button--color--teal:focus{transition:color 100ms,background-color 100ms}.Button--color--teal:hover,.Button--color--teal:focus{background-color:#13c4bc;color:#fff}.Button--color--teal:active{background-color:#26eee5}.Button--color--blue{transition:color 50ms,background-color 50ms;background-color:#1c71b1;color:#fff}.Button--color--blue:hover{transition:color 0ms,background-color 0ms}.Button--color--blue:focus{transition:color 100ms,background-color 100ms}.Button--color--blue:hover,.Button--color--blue:focus{background-color:#3a95d9;color:#fff}.Button--color--blue:active{background-color:#73b3e5}.Button--color--violet{transition:color 50ms,background-color 50ms;background-color:#552dab;color:#fff}.Button--color--violet:hover{transition:color 0ms,background-color 0ms}.Button--color--violet:focus{transition:color 100ms,background-color 100ms}.Button--color--violet:hover,.Button--color--violet:focus{background-color:#7953cc;color:#fff}.Button--color--violet:active{background-color:#a389dd}.Button--color--purple{transition:color 50ms,background-color 50ms;background-color:#8b2baa;color:#fff}.Button--color--purple:hover{transition:color 0ms,background-color 0ms}.Button--color--purple:focus{transition:color 100ms,background-color 100ms}.Button--color--purple:hover,.Button--color--purple:focus{background-color:#ad4fcd;color:#fff}.Button--color--purple:active{background-color:#c785dd}.Button--color--pink{transition:color 50ms,background-color 50ms;background-color:#cf2082;color:#fff}.Button--color--pink:hover{transition:color 0ms,background-color 0ms}.Button--color--pink:focus{transition:color 100ms,background-color 100ms}.Button--color--pink:hover,.Button--color--pink:focus{background-color:#e257a5;color:#fff}.Button--color--pink:active{background-color:#ee96c7}.Button--color--brown{transition:color 50ms,background-color 50ms;background-color:#8c5836;color:#fff}.Button--color--brown:hover{transition:color 0ms,background-color 0ms}.Button--color--brown:focus{transition:color 100ms,background-color 100ms}.Button--color--brown:hover,.Button--color--brown:focus{background-color:#b47851;color:#fff}.Button--color--brown:active{background-color:#ca9c7e}.Button--color--grey{transition:color 50ms,background-color 50ms;background-color:#646464;color:#fff}.Button--color--grey:hover{transition:color 0ms,background-color 0ms}.Button--color--grey:focus{transition:color 100ms,background-color 100ms}.Button--color--grey:hover,.Button--color--grey:focus{background-color:#868686;color:#fff}.Button--color--grey:active{background-color:#a8a8a8}.Button--color--light-grey{transition:color 50ms,background-color 50ms;background-color:#919191;color:#fff}.Button--color--light-grey:hover{transition:color 0ms,background-color 0ms}.Button--color--light-grey:focus{transition:color 100ms,background-color 100ms}.Button--color--light-grey:hover,.Button--color--light-grey:focus{background-color:#bababa;color:#fff}.Button--color--light-grey:active{background-color:#e2e2e2}.Button--color--good{transition:color 50ms,background-color 50ms;background-color:#4d9121;color:#fff}.Button--color--good:hover{transition:color 0ms,background-color 0ms}.Button--color--good:focus{transition:color 100ms,background-color 100ms}.Button--color--good:hover,.Button--color--good:focus{background-color:#6cba39;color:#fff}.Button--color--good:active{background-color:#8ed55f}.Button--color--average{transition:color 50ms,background-color 50ms;background-color:#cd7a0d;color:#fff}.Button--color--average:hover{transition:color 0ms,background-color 0ms}.Button--color--average:focus{transition:color 100ms,background-color 100ms}.Button--color--average:hover,.Button--color--average:focus{background-color:#ed9d35;color:#fff}.Button--color--average:active{background-color:#f3bd76}.Button--color--bad{transition:color 50ms,background-color 50ms;background-color:#bd2020;color:#fff}.Button--color--bad:hover{transition:color 0ms,background-color 0ms}.Button--color--bad:focus{transition:color 100ms,background-color 100ms}.Button--color--bad:hover,.Button--color--bad:focus{background-color:#dc4848;color:#fff}.Button--color--bad:active{background-color:#e78484}.Button--color--label{transition:color 50ms,background-color 50ms;background-color:#657a94;color:#fff}.Button--color--label:hover{transition:color 0ms,background-color 0ms}.Button--color--label:focus{transition:color 100ms,background-color 100ms}.Button--color--label:hover,.Button--color--label:focus{background-color:#91a1b3;color:#fff}.Button--color--label:active{background-color:#bec7d3}.Button--color--default{transition:color 50ms,background-color 50ms;background-color:#3e6189;color:#fff}.Button--color--default:hover{transition:color 0ms,background-color 0ms}.Button--color--default:focus{transition:color 100ms,background-color 100ms}.Button--color--default:hover,.Button--color--default:focus{background-color:#5c83b0;color:#fff}.Button--color--default:active{background-color:#89a6c6}.Button--color--caution{transition:color 50ms,background-color 50ms;background-color:#d9b804;color:#000}.Button--color--caution:hover{transition:color 0ms,background-color 0ms}.Button--color--caution:focus{transition:color 100ms,background-color 100ms}.Button--color--caution:hover,.Button--color--caution:focus{background-color:#f5d72e;color:#000}.Button--color--caution:active{background-color:#f9e572}.Button--color--danger{transition:color 50ms,background-color 50ms;background-color:#bd2020;color:#fff}.Button--color--danger:hover{transition:color 0ms,background-color 0ms}.Button--color--danger:focus{transition:color 100ms,background-color 100ms}.Button--color--danger:hover,.Button--color--danger:focus{background-color:#dc4848;color:#fff}.Button--color--danger:active{background-color:#e78484}.Button--color--transparent{transition:color 50ms,background-color 50ms;background-color:#252525;color:#fff;background-color:rgba(37,37,37,0);color:rgba(255,255,255,.5)}.Button--color--transparent:hover{transition:color 0ms,background-color 0ms}.Button--color--transparent:focus{transition:color 100ms,background-color 100ms}.Button--color--transparent:hover,.Button--color--transparent:focus{background-color:#3e3e3e;color:#fff}.Button--color--transparent:active{background-color:#565656}.Button--disabled{background-color:#999 !important}.Button--selected{transition:color 50ms,background-color 50ms;background-color:#1b9638;color:#fff}.Button--selected:hover{transition:color 0ms,background-color 0ms}.Button--selected:focus{transition:color 100ms,background-color 100ms}.Button--selected:hover,.Button--selected:focus{background-color:#32c154;color:#fff}.Button--selected:active{background-color:#59da78}.Button--flex{display:inline-flex;flex-direction:column}.Button--flex--fluid{width:100%}.Button--verticalAlignContent--top{justify-content:flex-start}.Button--verticalAlignContent--middle{justify-content:center}.Button--verticalAlignContent--bottom{justify-content:flex-end}.Button__content{display:block;align-self:stretch}.ComUplink .Button--color--Main{transition:color 50ms,background-color 50ms;background-color:#db2828;color:#fff}.ComUplink .Button--color--Main:hover{transition:color 0ms,background-color 0ms}.ComUplink .Button--color--Main:focus{transition:color 100ms,background-color 100ms}.ComUplink .Button--color--Main:hover,.ComUplink .Button--color--Main:focus{background-color:#e66b6b;color:#fff}.ComUplink .Button--color--Main:active{background-color:#f1acac}.ComUplink__Points--Main{color:#db2828}.ComUplink__Row:not(:last-child){border-bottom:2px solid #3e6189}.boardgame__titlebar{position:fixed;top:4px;right:80px;padding:2px;z-index:2}.boardgame__titlebar>*{margin:0 4px}.boardgame__window{height:calc(100% - 0.25px);display:flex;flex-direction:row;background-color:#211913}.boardgame__window*{-webkit-touch-callout:none;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.boardgame__helpmodal{z-index:20}.boardgame__helpmodal>.Dimmer__inner{background-color:rgba(0,0,0,.8);padding:15px;width:60%}.boardgame__wrapper{width:100%;overflow:hidden}.boardgame__heldpiece{position:fixed;z-index:4;pointer-events:none}.boardgame__palettes{width:100px;background-color:#cecece}.boardgame__palettes-header{font-size:10px;background-color:#242424}.boardgame__palettes-set{width:100%;overflow-y:auto;display:flex;flex-wrap:wrap;background-color:#e6e6e6}.boardgame__palettes-set-piece{transition:.3s all;padding:2px;width:50%;cursor:pointer}.boardgame__palettes-set-piece>img{width:100%;height:auto}.boardgame__palettes-set-toggle{width:100%}.boardgame__palettes-set-minimized .boardgame__palettes-set-piece{width:25%}.boardgame__notations{font-weight:bold;text-align:center;justify-content:center;align-items:center;z-index:0}.boardgame__notations-horizontal{height:20px;padding-left:20px;padding-right:20px}.boardgame__notations-vertical{width:20px;flex-direction:column}.boardgame__notations-number,.boardgame__notations-letter{display:flex;justify-content:center;align-items:center}.boardgame__board{z-index:0;flex-grow:1}.boardgame__board-pieces{z-index:1}.boardgame__board-overlay{z-index:2}.boardgame__board-inner{transition:1s all;flex-grow:1;display:flex;flex-direction:column;height:calc(100% - 0.25px)}.boardgame__board-checkerboard{position:relative;width:100%;height:100%}.boardgame__board-ggrenderer{position:absolute;top:0;left:0;pointer-events:none}.boardgame__board-gprenderer{position:absolute;top:0;left:0}.boardgame__board-gprenderer-piece{position:absolute}.boardgame__board-gprenderer-piece>span{padding:2px 6px;background-color:rgba(0,0,0,.5);position:absolute;text-align:center;left:50%;top:50%;transform:translate(-50%, -50%);font-size:14px;font-weight:bolder;text-shadow:0 0 2px #000;z-index:1;font-family:Arial}.Button{position:relative;display:inline-block;line-height:1.667em;padding:0 .5em;margin-right:.1666666667em;white-space:nowrap;outline:0;border-radius:.16em;margin-bottom:.1666666667em;user-select:none;-ms-user-select:none}.Button:last-child{margin-right:0;margin-bottom:0}.Button .fa,.Button .fa-solid,.Button .fa-regular{margin-left:0;margin-right:0;min-width:1.333em;text-align:center}.Button--hasContent .fa,.Button--hasContent .fa-solid,.Button--hasContent .fa-regular{margin-right:.25em}.Button--hasContent.Button--iconPosition--right .fa,.Button--hasContent.Button--iconPosition--right .fas,.Button--hasContent.Button--iconPosition--right .far{margin-right:0px;margin-left:3px}.Button--ellipsis{overflow:hidden;text-overflow:ellipsis}.Button--ellipsis .Button__content{overflow:hidden;text-overflow:ellipsis}.Button--fluid{display:block;margin-left:0;margin-right:0}.Button--circular{border-radius:50%}.Button--compact{padding:0 .25em;line-height:1.333em}.Button--color--black{transition:color 50ms,background-color 50ms;background-color:#000;color:#fff}.Button--color--black:hover{transition:color 0ms,background-color 0ms}.Button--color--black:focus{transition:color 100ms,background-color 100ms}.Button--color--black:hover,.Button--color--black:focus{background-color:#131313;color:#fff}.Button--color--black:active{background-color:#262626}.Button--color--white{transition:color 50ms,background-color 50ms;background-color:#d9d9d9;color:#000}.Button--color--white:hover{transition:color 0ms,background-color 0ms}.Button--color--white:focus{transition:color 100ms,background-color 100ms}.Button--color--white:hover,.Button--color--white:focus{background-color:#f8f8f8;color:#000}.Button--color--white:active{background-color:#fbfbfb}.Button--color--red{transition:color 50ms,background-color 50ms;background-color:#bd2020;color:#fff}.Button--color--red:hover{transition:color 0ms,background-color 0ms}.Button--color--red:focus{transition:color 100ms,background-color 100ms}.Button--color--red:hover,.Button--color--red:focus{background-color:#dc4848;color:#fff}.Button--color--red:active{background-color:#e78484}.Button--color--orange{transition:color 50ms,background-color 50ms;background-color:#d95e0c;color:#fff}.Button--color--orange:hover{transition:color 0ms,background-color 0ms}.Button--color--orange:focus{transition:color 100ms,background-color 100ms}.Button--color--orange:hover,.Button--color--orange:focus{background-color:#f0853f;color:#fff}.Button--color--orange:active{background-color:#f5b082}.Button--color--yellow{transition:color 50ms,background-color 50ms;background-color:#d9b804;color:#000}.Button--color--yellow:hover{transition:color 0ms,background-color 0ms}.Button--color--yellow:focus{transition:color 100ms,background-color 100ms}.Button--color--yellow:hover,.Button--color--yellow:focus{background-color:#f5d72e;color:#000}.Button--color--yellow:active{background-color:#f9e572}.Button--color--olive{transition:color 50ms,background-color 50ms;background-color:#9aad14;color:#fff}.Button--color--olive:hover{transition:color 0ms,background-color 0ms}.Button--color--olive:focus{transition:color 100ms,background-color 100ms}.Button--color--olive:hover,.Button--color--olive:focus{background-color:#c4da2b;color:#fff}.Button--color--olive:active{background-color:#d6e761}.Button--color--green{transition:color 50ms,background-color 50ms;background-color:#1b9638;color:#fff}.Button--color--green:hover{transition:color 0ms,background-color 0ms}.Button--color--green:focus{transition:color 100ms,background-color 100ms}.Button--color--green:hover,.Button--color--green:focus{background-color:#32c154;color:#fff}.Button--color--green:active{background-color:#59da78}.Button--color--teal{transition:color 50ms,background-color 50ms;background-color:#009a93;color:#fff}.Button--color--teal:hover{transition:color 0ms,background-color 0ms}.Button--color--teal:focus{transition:color 100ms,background-color 100ms}.Button--color--teal:hover,.Button--color--teal:focus{background-color:#13c4bc;color:#fff}.Button--color--teal:active{background-color:#26eee5}.Button--color--blue{transition:color 50ms,background-color 50ms;background-color:#1c71b1;color:#fff}.Button--color--blue:hover{transition:color 0ms,background-color 0ms}.Button--color--blue:focus{transition:color 100ms,background-color 100ms}.Button--color--blue:hover,.Button--color--blue:focus{background-color:#3a95d9;color:#fff}.Button--color--blue:active{background-color:#73b3e5}.Button--color--violet{transition:color 50ms,background-color 50ms;background-color:#552dab;color:#fff}.Button--color--violet:hover{transition:color 0ms,background-color 0ms}.Button--color--violet:focus{transition:color 100ms,background-color 100ms}.Button--color--violet:hover,.Button--color--violet:focus{background-color:#7953cc;color:#fff}.Button--color--violet:active{background-color:#a389dd}.Button--color--purple{transition:color 50ms,background-color 50ms;background-color:#8b2baa;color:#fff}.Button--color--purple:hover{transition:color 0ms,background-color 0ms}.Button--color--purple:focus{transition:color 100ms,background-color 100ms}.Button--color--purple:hover,.Button--color--purple:focus{background-color:#ad4fcd;color:#fff}.Button--color--purple:active{background-color:#c785dd}.Button--color--pink{transition:color 50ms,background-color 50ms;background-color:#cf2082;color:#fff}.Button--color--pink:hover{transition:color 0ms,background-color 0ms}.Button--color--pink:focus{transition:color 100ms,background-color 100ms}.Button--color--pink:hover,.Button--color--pink:focus{background-color:#e257a5;color:#fff}.Button--color--pink:active{background-color:#ee96c7}.Button--color--brown{transition:color 50ms,background-color 50ms;background-color:#8c5836;color:#fff}.Button--color--brown:hover{transition:color 0ms,background-color 0ms}.Button--color--brown:focus{transition:color 100ms,background-color 100ms}.Button--color--brown:hover,.Button--color--brown:focus{background-color:#b47851;color:#fff}.Button--color--brown:active{background-color:#ca9c7e}.Button--color--grey{transition:color 50ms,background-color 50ms;background-color:#646464;color:#fff}.Button--color--grey:hover{transition:color 0ms,background-color 0ms}.Button--color--grey:focus{transition:color 100ms,background-color 100ms}.Button--color--grey:hover,.Button--color--grey:focus{background-color:#868686;color:#fff}.Button--color--grey:active{background-color:#a8a8a8}.Button--color--light-grey{transition:color 50ms,background-color 50ms;background-color:#919191;color:#fff}.Button--color--light-grey:hover{transition:color 0ms,background-color 0ms}.Button--color--light-grey:focus{transition:color 100ms,background-color 100ms}.Button--color--light-grey:hover,.Button--color--light-grey:focus{background-color:#bababa;color:#fff}.Button--color--light-grey:active{background-color:#e2e2e2}.Button--color--good{transition:color 50ms,background-color 50ms;background-color:#4d9121;color:#fff}.Button--color--good:hover{transition:color 0ms,background-color 0ms}.Button--color--good:focus{transition:color 100ms,background-color 100ms}.Button--color--good:hover,.Button--color--good:focus{background-color:#6cba39;color:#fff}.Button--color--good:active{background-color:#8ed55f}.Button--color--average{transition:color 50ms,background-color 50ms;background-color:#cd7a0d;color:#fff}.Button--color--average:hover{transition:color 0ms,background-color 0ms}.Button--color--average:focus{transition:color 100ms,background-color 100ms}.Button--color--average:hover,.Button--color--average:focus{background-color:#ed9d35;color:#fff}.Button--color--average:active{background-color:#f3bd76}.Button--color--bad{transition:color 50ms,background-color 50ms;background-color:#bd2020;color:#fff}.Button--color--bad:hover{transition:color 0ms,background-color 0ms}.Button--color--bad:focus{transition:color 100ms,background-color 100ms}.Button--color--bad:hover,.Button--color--bad:focus{background-color:#dc4848;color:#fff}.Button--color--bad:active{background-color:#e78484}.Button--color--label{transition:color 50ms,background-color 50ms;background-color:#657a94;color:#fff}.Button--color--label:hover{transition:color 0ms,background-color 0ms}.Button--color--label:focus{transition:color 100ms,background-color 100ms}.Button--color--label:hover,.Button--color--label:focus{background-color:#91a1b3;color:#fff}.Button--color--label:active{background-color:#bec7d3}.Button--color--default{transition:color 50ms,background-color 50ms;background-color:#3e6189;color:#fff}.Button--color--default:hover{transition:color 0ms,background-color 0ms}.Button--color--default:focus{transition:color 100ms,background-color 100ms}.Button--color--default:hover,.Button--color--default:focus{background-color:#5c83b0;color:#fff}.Button--color--default:active{background-color:#89a6c6}.Button--color--caution{transition:color 50ms,background-color 50ms;background-color:#d9b804;color:#000}.Button--color--caution:hover{transition:color 0ms,background-color 0ms}.Button--color--caution:focus{transition:color 100ms,background-color 100ms}.Button--color--caution:hover,.Button--color--caution:focus{background-color:#f5d72e;color:#000}.Button--color--caution:active{background-color:#f9e572}.Button--color--danger{transition:color 50ms,background-color 50ms;background-color:#bd2020;color:#fff}.Button--color--danger:hover{transition:color 0ms,background-color 0ms}.Button--color--danger:focus{transition:color 100ms,background-color 100ms}.Button--color--danger:hover,.Button--color--danger:focus{background-color:#dc4848;color:#fff}.Button--color--danger:active{background-color:#e78484}.Button--color--transparent{transition:color 50ms,background-color 50ms;background-color:#252525;color:#fff;background-color:rgba(37,37,37,0);color:rgba(255,255,255,.5)}.Button--color--transparent:hover{transition:color 0ms,background-color 0ms}.Button--color--transparent:focus{transition:color 100ms,background-color 100ms}.Button--color--transparent:hover,.Button--color--transparent:focus{background-color:#3e3e3e;color:#fff}.Button--color--transparent:active{background-color:#565656}.Button--disabled{background-color:#999 !important}.Button--selected{transition:color 50ms,background-color 50ms;background-color:#1b9638;color:#fff}.Button--selected:hover{transition:color 0ms,background-color 0ms}.Button--selected:focus{transition:color 100ms,background-color 100ms}.Button--selected:hover,.Button--selected:focus{background-color:#32c154;color:#fff}.Button--selected:active{background-color:#59da78}.Button--flex{display:inline-flex;flex-direction:column}.Button--flex--fluid{width:100%}.Button--verticalAlignContent--top{justify-content:flex-start}.Button--verticalAlignContent--middle{justify-content:center}.Button--verticalAlignContent--bottom{justify-content:flex-end}.Button__content{display:block;align-self:stretch}.chem-dispenser__buttons{text-transform:capitalize}.chem-dispenser__labels{text-transform:capitalize}.chem-dispenser__dispense-buttons{text-overflow:ellipsis;text-transform:capitalize;white-space:nowrap}.chem-dispenser-dispense:hover{overflow:visible}@keyframes ChemHeater__heating{to{box-shadow:0 0 15px 0 #f2711c;border-color:#f2711c}}@keyframes ChemHeater__cooling{to{box-shadow:0 0 15px 0 #2185d0;border-color:#2185d0}}@keyframes ChemHeater__heating_fill{to{color:#f2711c}}@keyframes ChemHeater__cooling_fill{to{color:#2185d0}}.ChemHeater__TemperatureNumber{transition:color 500ms ease-out}.ChemHeater__TemperatureArrow{color:#aaa;transition:transform 500ms ease-out}.ChemHeater__TemperatureArrow__heating{animation:ChemHeater__heating_fill 2s ease infinite alternate}.ChemHeater__TemperatureArrow__cooling{animation:ChemHeater__cooling_fill 2s ease infinite alternate}.ChemHeater__TemperatureBox{box-shadow:0 0 15px rgba(0,0,0,0);border-color:#aaa;border-style:solid;border-radius:4px;height:3em;text-align:center}.ChemHeater__TemperatureBox__heating{animation:ChemHeater__heating 2s ease infinite alternate}.ChemHeater__TemperatureBox__cooling{animation:ChemHeater__cooling 2s ease infinite alternate}.cloning-console__flex__table{position:relative;display:flex;overflow:none;width:100vw;flex-direction:column}.cloning-console__flex__head{display:flex;height:25px;flex:0 0 auto;padding:0 5px;font-size:12px}.cloning-console__head__row{display:flex;flex:1 1 auto;align-items:center;justify-content:space-between;text-transform:uppercase}.cloning-console__head__item{display:flex;flex:1 1 auto;flex-direction:column;align-items:center;justify-content:space-between;padding:0 5px}.cloning-console__body__row{display:flex;height:30px;flex:0 0 auto;align-items:center;justify-content:space-around;border-bottom:2px solid rgba(51,51,51,.4)}.cloning-console__body__item{display:flex;overflow:hidden;height:30px;align-items:baseline;justify-content:center;text-overflow:ellipsis}.Button{position:relative;display:inline-block;line-height:1.667em;padding:0 .5em;margin-right:.1666666667em;white-space:nowrap;outline:0;border-radius:.16em;margin-bottom:.1666666667em;user-select:none;-ms-user-select:none}.Button:last-child{margin-right:0;margin-bottom:0}.Button .fa,.Button .fa-solid,.Button .fa-regular{margin-left:0;margin-right:0;min-width:1.333em;text-align:center}.Button--hasContent .fa,.Button--hasContent .fa-solid,.Button--hasContent .fa-regular{margin-right:.25em}.Button--hasContent.Button--iconPosition--right .fa,.Button--hasContent.Button--iconPosition--right .fas,.Button--hasContent.Button--iconPosition--right .far{margin-right:0px;margin-left:3px}.Button--ellipsis{overflow:hidden;text-overflow:ellipsis}.Button--ellipsis .Button__content{overflow:hidden;text-overflow:ellipsis}.Button--fluid{display:block;margin-left:0;margin-right:0}.Button--circular{border-radius:50%}.Button--compact{padding:0 .25em;line-height:1.333em}.Button--color--black{transition:color 50ms,background-color 50ms;background-color:#000;color:#fff}.Button--color--black:hover{transition:color 0ms,background-color 0ms}.Button--color--black:focus{transition:color 100ms,background-color 100ms}.Button--color--black:hover,.Button--color--black:focus{background-color:#131313;color:#fff}.Button--color--black:active{background-color:#262626}.Button--color--white{transition:color 50ms,background-color 50ms;background-color:#d9d9d9;color:#000}.Button--color--white:hover{transition:color 0ms,background-color 0ms}.Button--color--white:focus{transition:color 100ms,background-color 100ms}.Button--color--white:hover,.Button--color--white:focus{background-color:#f8f8f8;color:#000}.Button--color--white:active{background-color:#fbfbfb}.Button--color--red{transition:color 50ms,background-color 50ms;background-color:#bd2020;color:#fff}.Button--color--red:hover{transition:color 0ms,background-color 0ms}.Button--color--red:focus{transition:color 100ms,background-color 100ms}.Button--color--red:hover,.Button--color--red:focus{background-color:#dc4848;color:#fff}.Button--color--red:active{background-color:#e78484}.Button--color--orange{transition:color 50ms,background-color 50ms;background-color:#d95e0c;color:#fff}.Button--color--orange:hover{transition:color 0ms,background-color 0ms}.Button--color--orange:focus{transition:color 100ms,background-color 100ms}.Button--color--orange:hover,.Button--color--orange:focus{background-color:#f0853f;color:#fff}.Button--color--orange:active{background-color:#f5b082}.Button--color--yellow{transition:color 50ms,background-color 50ms;background-color:#d9b804;color:#000}.Button--color--yellow:hover{transition:color 0ms,background-color 0ms}.Button--color--yellow:focus{transition:color 100ms,background-color 100ms}.Button--color--yellow:hover,.Button--color--yellow:focus{background-color:#f5d72e;color:#000}.Button--color--yellow:active{background-color:#f9e572}.Button--color--olive{transition:color 50ms,background-color 50ms;background-color:#9aad14;color:#fff}.Button--color--olive:hover{transition:color 0ms,background-color 0ms}.Button--color--olive:focus{transition:color 100ms,background-color 100ms}.Button--color--olive:hover,.Button--color--olive:focus{background-color:#c4da2b;color:#fff}.Button--color--olive:active{background-color:#d6e761}.Button--color--green{transition:color 50ms,background-color 50ms;background-color:#1b9638;color:#fff}.Button--color--green:hover{transition:color 0ms,background-color 0ms}.Button--color--green:focus{transition:color 100ms,background-color 100ms}.Button--color--green:hover,.Button--color--green:focus{background-color:#32c154;color:#fff}.Button--color--green:active{background-color:#59da78}.Button--color--teal{transition:color 50ms,background-color 50ms;background-color:#009a93;color:#fff}.Button--color--teal:hover{transition:color 0ms,background-color 0ms}.Button--color--teal:focus{transition:color 100ms,background-color 100ms}.Button--color--teal:hover,.Button--color--teal:focus{background-color:#13c4bc;color:#fff}.Button--color--teal:active{background-color:#26eee5}.Button--color--blue{transition:color 50ms,background-color 50ms;background-color:#1c71b1;color:#fff}.Button--color--blue:hover{transition:color 0ms,background-color 0ms}.Button--color--blue:focus{transition:color 100ms,background-color 100ms}.Button--color--blue:hover,.Button--color--blue:focus{background-color:#3a95d9;color:#fff}.Button--color--blue:active{background-color:#73b3e5}.Button--color--violet{transition:color 50ms,background-color 50ms;background-color:#552dab;color:#fff}.Button--color--violet:hover{transition:color 0ms,background-color 0ms}.Button--color--violet:focus{transition:color 100ms,background-color 100ms}.Button--color--violet:hover,.Button--color--violet:focus{background-color:#7953cc;color:#fff}.Button--color--violet:active{background-color:#a389dd}.Button--color--purple{transition:color 50ms,background-color 50ms;background-color:#8b2baa;color:#fff}.Button--color--purple:hover{transition:color 0ms,background-color 0ms}.Button--color--purple:focus{transition:color 100ms,background-color 100ms}.Button--color--purple:hover,.Button--color--purple:focus{background-color:#ad4fcd;color:#fff}.Button--color--purple:active{background-color:#c785dd}.Button--color--pink{transition:color 50ms,background-color 50ms;background-color:#cf2082;color:#fff}.Button--color--pink:hover{transition:color 0ms,background-color 0ms}.Button--color--pink:focus{transition:color 100ms,background-color 100ms}.Button--color--pink:hover,.Button--color--pink:focus{background-color:#e257a5;color:#fff}.Button--color--pink:active{background-color:#ee96c7}.Button--color--brown{transition:color 50ms,background-color 50ms;background-color:#8c5836;color:#fff}.Button--color--brown:hover{transition:color 0ms,background-color 0ms}.Button--color--brown:focus{transition:color 100ms,background-color 100ms}.Button--color--brown:hover,.Button--color--brown:focus{background-color:#b47851;color:#fff}.Button--color--brown:active{background-color:#ca9c7e}.Button--color--grey{transition:color 50ms,background-color 50ms;background-color:#646464;color:#fff}.Button--color--grey:hover{transition:color 0ms,background-color 0ms}.Button--color--grey:focus{transition:color 100ms,background-color 100ms}.Button--color--grey:hover,.Button--color--grey:focus{background-color:#868686;color:#fff}.Button--color--grey:active{background-color:#a8a8a8}.Button--color--light-grey{transition:color 50ms,background-color 50ms;background-color:#919191;color:#fff}.Button--color--light-grey:hover{transition:color 0ms,background-color 0ms}.Button--color--light-grey:focus{transition:color 100ms,background-color 100ms}.Button--color--light-grey:hover,.Button--color--light-grey:focus{background-color:#bababa;color:#fff}.Button--color--light-grey:active{background-color:#e2e2e2}.Button--color--good{transition:color 50ms,background-color 50ms;background-color:#4d9121;color:#fff}.Button--color--good:hover{transition:color 0ms,background-color 0ms}.Button--color--good:focus{transition:color 100ms,background-color 100ms}.Button--color--good:hover,.Button--color--good:focus{background-color:#6cba39;color:#fff}.Button--color--good:active{background-color:#8ed55f}.Button--color--average{transition:color 50ms,background-color 50ms;background-color:#cd7a0d;color:#fff}.Button--color--average:hover{transition:color 0ms,background-color 0ms}.Button--color--average:focus{transition:color 100ms,background-color 100ms}.Button--color--average:hover,.Button--color--average:focus{background-color:#ed9d35;color:#fff}.Button--color--average:active{background-color:#f3bd76}.Button--color--bad{transition:color 50ms,background-color 50ms;background-color:#bd2020;color:#fff}.Button--color--bad:hover{transition:color 0ms,background-color 0ms}.Button--color--bad:focus{transition:color 100ms,background-color 100ms}.Button--color--bad:hover,.Button--color--bad:focus{background-color:#dc4848;color:#fff}.Button--color--bad:active{background-color:#e78484}.Button--color--label{transition:color 50ms,background-color 50ms;background-color:#657a94;color:#fff}.Button--color--label:hover{transition:color 0ms,background-color 0ms}.Button--color--label:focus{transition:color 100ms,background-color 100ms}.Button--color--label:hover,.Button--color--label:focus{background-color:#91a1b3;color:#fff}.Button--color--label:active{background-color:#bec7d3}.Button--color--default{transition:color 50ms,background-color 50ms;background-color:#3e6189;color:#fff}.Button--color--default:hover{transition:color 0ms,background-color 0ms}.Button--color--default:focus{transition:color 100ms,background-color 100ms}.Button--color--default:hover,.Button--color--default:focus{background-color:#5c83b0;color:#fff}.Button--color--default:active{background-color:#89a6c6}.Button--color--caution{transition:color 50ms,background-color 50ms;background-color:#d9b804;color:#000}.Button--color--caution:hover{transition:color 0ms,background-color 0ms}.Button--color--caution:focus{transition:color 100ms,background-color 100ms}.Button--color--caution:hover,.Button--color--caution:focus{background-color:#f5d72e;color:#000}.Button--color--caution:active{background-color:#f9e572}.Button--color--danger{transition:color 50ms,background-color 50ms;background-color:#bd2020;color:#fff}.Button--color--danger:hover{transition:color 0ms,background-color 0ms}.Button--color--danger:focus{transition:color 100ms,background-color 100ms}.Button--color--danger:hover,.Button--color--danger:focus{background-color:#dc4848;color:#fff}.Button--color--danger:active{background-color:#e78484}.Button--color--transparent{transition:color 50ms,background-color 50ms;background-color:#252525;color:#fff;background-color:rgba(37,37,37,0);color:rgba(255,255,255,.5)}.Button--color--transparent:hover{transition:color 0ms,background-color 0ms}.Button--color--transparent:focus{transition:color 100ms,background-color 100ms}.Button--color--transparent:hover,.Button--color--transparent:focus{background-color:#3e3e3e;color:#fff}.Button--color--transparent:active{background-color:#565656}.Button--disabled{background-color:#999 !important}.Button--selected{transition:color 50ms,background-color 50ms;background-color:#1b9638;color:#fff}.Button--selected:hover{transition:color 0ms,background-color 0ms}.Button--selected:focus{transition:color 100ms,background-color 100ms}.Button--selected:hover,.Button--selected:focus{background-color:#32c154;color:#fff}.Button--selected:active{background-color:#59da78}.Button--flex{display:inline-flex;flex-direction:column}.Button--flex--fluid{width:100%}.Button--verticalAlignContent--top{justify-content:flex-start}.Button--verticalAlignContent--middle{justify-content:center}.Button--verticalAlignContent--bottom{justify-content:flex-end}.Button__content{display:block;align-self:stretch}.clothingbooth__dropdown{margin-bottom:0 !important;margin-right:0 !important}.clothingbooth__boothitem{padding-left:.5rem;padding-right:.5rem}.clothingbooth__boothitem>div{pointer-events:none}.clothingbooth__boothitem:hover,.clothingbooth__boothitem-selected{background-color:#1b9638}.clothingbooth__boothitem:active{background-color:#67e484}.clothingbooth__preview{width:64px;height:128px}.cyborg-module-rewriter-interface-empty-placeholder{color:#8b9bb0}.cyborg-module-rewriter-interface-module-view__tool-label{margin-left:.5em;color:#8b9bb0}.gameclock__window{display:flex;flex-direction:column;padding:5px}.gameclock__help{position:fixed;top:4px;right:50px;padding:2px;z-index:20}.gameclock__helpbutton{height:20px;width:20px}.gameclock__helpbutton>i{display:flex;justify-content:center;align-items:center;height:100%}.gameclock__configmodal{z-index:20}.gameclock__configmodal>.Dimmer__inner{background-color:rgba(0,0,0,.8);padding:15px;width:180px;height:130px}.gameclock__configmodalbuttoncontainer{padding-top:12px}.gameclock__teamicon{text-align:center;font-size:24px;margin:5px}.gameclock__sidepart{flex-grow:1;padding:5px}.gameclock__timebutton{width:100%;height:100%;text-align:center}.gameclock__timebutton>div{display:flex;justify-content:center;align-items:center;height:100%}.gameclock__timeflex{flex-direction:column;display:flex;justify-content:center;align-items:center;height:100%;font-size:2em}.gameclock__mid{padding:5px;display:flex;flex-direction:column;align-items:center;justify-content:space-around}.gameclock__utilbutton{display:flex;flex-direction:column;justify-content:center;align-items:center;height:30px;width:30px}.gameclock__utilbutton>div{display:flex;justify-content:center;align-items:center;height:100%;padding-right:2px}.gas-canister-detonator-utility__list-item{line-height:1.7em}.gas-canister-detonator-utility__attachment-item{text-transform:capitalize}.IDComputer__DeptBox .Section__title{text-shadow:1px 1px 1px #000,1px -1px 1px #000,-1px -1px 1px #000,-1px 1px 1px #000;background-color:#767676}.mode-light .IDComputer__DeptBox .Section__title{text-shadow:1px 1px 1px #fff,1px -1px 1px #fff,-1px -1px 1px #fff,-1px 1px 1px #fff}.IDComputer__DeptBox_color_blue .Section__title{background-color:#2185d0}.IDComputer__DeptBox_color_yellow .Section__title{background-color:#fbd608}.IDComputer__DeptBox_color_purple .Section__title{background-color:#a333c8}.IDComputer__DeptBox_color_red .Section__title{background-color:#db2828}.IDComputer__DeptBox_color_green .Section__title{background-color:#20b142}.instrument__keyboardwrapper{border-top-left-radius:30px;border-top-right-radius:30px;border-bottom-left-radius:10px;border-bottom-right-radius:10px;margin:10px;padding-top:20px;background:#49504a;background:linear-gradient(180deg, #49504a 0%, #49504a 22%, #575e57 100%);border-left:5px solid #3d3d3d;border-bottom:5px solid #333;overflow-x:auto;display:flex;justify-content:space-between;align-items:center;flex-direction:column}.instruments__piano{display:flex;justify-content:center;list-style-type:none;padding:0 10px 10px 10px;overflow-x:auto}.instrument__outerpanel{display:flex;width:100%;padding:0 40px;justify-content:space-between;flex-direction:row}.instrument__speaker{border-top-left-radius:30%;width:360px;height:100px;margin:0px 20px;border-radius:10px;box-shadow:0px 0px 5px #4d4d4d inset;background:#646464;background-image:linear-gradient(#3d3d3d 0.1em, transparent 0.1em),linear-gradient(90deg, #3d3d3d 0.1em, transparent 0.1em);background-size:2px 2px}.instruments__piano-key{display:flex;align-items:flex-end;justify-content:center;font-size:12px;background:green;font-weight:bold;text-align:center;padding:2px 2px 10px 2px;user-select:none;-ms-user-select:none}.instruments__piano-key-white{height:16em;width:4em;min-width:4em;z-index:1;color:#383838;border:1px solid #d6d6d6;border-radius:0 0 5px 5px;box-shadow:-1px 0 0 rgba(255,255,255,.8) inset,0 0 5px #ccc inset,0 0 3px rgba(0,0,0,.2);background:linear-gradient(to bottom, #eee 0%, #fff 100%);transition:.05s all}.instruments__piano-key-black{height:9em;width:3em;min-width:3em;z-index:10;color:#cecece;border-bottom-left-radius:5px;border-bottom-right-radius:5px;border:1px solid #3b3b3b;margin:0 0 0 -1.5em;box-shadow:-1px -1px 2px rgba(255,255,255,.2) inset,0 -5px 2px 3px rgba(0,0,0,.6) inset,0 2px 12px rgba(0,0,0,.5);background:linear-gradient(0deg, #222 0%, #555 100%);transition:.05s all}.instruments__piano-key-white:active,.instruments__piano-key-white-active{border:1px solid #b4b4b4;box-shadow:2px 0 3px rgba(0,0,0,.1) inset,-5px 5px 20px rgba(0,0,0,.2) inset,0 0 3px rgba(0,0,0,.2);background:linear-gradient(to bottom, #fff 0%, #e9e9e9 100%)}.instruments__piano-key-black:active,.instruments__piano-key-black-active{border:1px solid #222;box-shadow:-1px -1px 2px rgba(255,255,255,.2) inset,0 -2px 2px 3px rgba(0,0,0,.6) inset,0 1px 2px rgba(0,0,0,.5);background:linear-gradient(to bottom, #444 0%, #222 100%)}.instruments__piano-key-white-offset{margin-left:-1.5em}.instruments__piano-key:first-child{margin-left:10px;border-top-left-radius:10px;border-bottom-left-radius:10px}.instruments__piano-key:last-child{margin-right:10px;border-top-right-radius:10px;border-bottom-right-radius:10px}.instruments__notedetails{display:flex;flex-direction:column;user-select:none;pointer-events:none}.instruments__notename{font-size:10px}.instruments__notekey{font-size:15px;padding-bottom:10px}.instruments__piano-key-white>.instruments__notename{font-size:14px;text-shadow:0px 0px 1px 5px #fff}.instrument__keybind-indicator{border-radius:20px;width:20px;height:10px}.instrument__panel{display:flex;justify-content:center;flex-direction:row;align-items:center;border-radius:10px;padding:6px;background:#333}.instrument__keyboardsupport{padding-right:5px;display:flex;flex-direction:column;justify-content:center;align-items:center}.instrument__panel-input{text-align:center;font-size:9px;font-weight:bold;padding:0px 5px}.instrument__toggle-keyboard-button{width:100%;text-align:center;margin-bottom:4px}.instrument_panel-info{flex-grow:1;text-align:center;color:#000;padding:0 10px;margin:0 10px;background:#fff;border-radius:5px}.instrument__instructions{width:100%;text-align:center}.instrument__input_keyorder{width:100%}.ListInput__Section{font-family:Segoe UI Emoji}.ListInput__Section .Section__title{flex-shrink:0}.ListInput__Section .Section__titleText{font-size:1em}.ListInput__Loader{width:100%;position:relative;height:4px}.ListInput__LoaderProgress{position:absolute;transition:background-color 500ms ease-out,width 500ms ease-out;background-color:#3e6189;height:100%}.minimap-controller__number-inputs{width:70px}.minimap-controller__buttons{font-size:1.7rem}.minimap-controller__marker-list{background-color:rgba(0,0,0,.2);justify-content:space-between;padding:5px;padding-bottom:1px;margin-bottom:4px}.paper__stamp,.paper__stamp-text{position:absolute;pointer-events:none;user-select:none}.paper__stamp-text{overflow:hidden;height:40px;padding:.55rem .5rem;box-shadow:inset 0px 0px 0px 3px #525252;color:#5c5c5c;font-family:"Anton";font-size:1.5rem;font-weight:500;text-align:center;text-transform:uppercase;white-space:nowrap}.paper__page{word-break:break-word;word-wrap:break-word}.phone__button>div{overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.port-atmos-pressure-bar__text{text-shadow:1px 1px 1px #000,-1px 1px 1px #000,1px -1px 1px #000,-1px -1px 1px #000}.Button{position:relative;display:inline-block;line-height:1.667em;padding:0 .5em;margin-right:.1666666667em;white-space:nowrap;outline:0;border-radius:.16em;margin-bottom:.1666666667em;user-select:none;-ms-user-select:none}.Button:last-child{margin-right:0;margin-bottom:0}.Button .fa,.Button .fa-solid,.Button .fa-regular{margin-left:0;margin-right:0;min-width:1.333em;text-align:center}.Button--hasContent .fa,.Button--hasContent .fa-solid,.Button--hasContent .fa-regular{margin-right:.25em}.Button--hasContent.Button--iconPosition--right .fa,.Button--hasContent.Button--iconPosition--right .fas,.Button--hasContent.Button--iconPosition--right .far{margin-right:0px;margin-left:3px}.Button--ellipsis{overflow:hidden;text-overflow:ellipsis}.Button--ellipsis .Button__content{overflow:hidden;text-overflow:ellipsis}.Button--fluid{display:block;margin-left:0;margin-right:0}.Button--circular{border-radius:50%}.Button--compact{padding:0 .25em;line-height:1.333em}.Button--color--black{transition:color 50ms,background-color 50ms;background-color:#000;color:#fff}.Button--color--black:hover{transition:color 0ms,background-color 0ms}.Button--color--black:focus{transition:color 100ms,background-color 100ms}.Button--color--black:hover,.Button--color--black:focus{background-color:#131313;color:#fff}.Button--color--black:active{background-color:#262626}.Button--color--white{transition:color 50ms,background-color 50ms;background-color:#d9d9d9;color:#000}.Button--color--white:hover{transition:color 0ms,background-color 0ms}.Button--color--white:focus{transition:color 100ms,background-color 100ms}.Button--color--white:hover,.Button--color--white:focus{background-color:#f8f8f8;color:#000}.Button--color--white:active{background-color:#fbfbfb}.Button--color--red{transition:color 50ms,background-color 50ms;background-color:#bd2020;color:#fff}.Button--color--red:hover{transition:color 0ms,background-color 0ms}.Button--color--red:focus{transition:color 100ms,background-color 100ms}.Button--color--red:hover,.Button--color--red:focus{background-color:#dc4848;color:#fff}.Button--color--red:active{background-color:#e78484}.Button--color--orange{transition:color 50ms,background-color 50ms;background-color:#d95e0c;color:#fff}.Button--color--orange:hover{transition:color 0ms,background-color 0ms}.Button--color--orange:focus{transition:color 100ms,background-color 100ms}.Button--color--orange:hover,.Button--color--orange:focus{background-color:#f0853f;color:#fff}.Button--color--orange:active{background-color:#f5b082}.Button--color--yellow{transition:color 50ms,background-color 50ms;background-color:#d9b804;color:#000}.Button--color--yellow:hover{transition:color 0ms,background-color 0ms}.Button--color--yellow:focus{transition:color 100ms,background-color 100ms}.Button--color--yellow:hover,.Button--color--yellow:focus{background-color:#f5d72e;color:#000}.Button--color--yellow:active{background-color:#f9e572}.Button--color--olive{transition:color 50ms,background-color 50ms;background-color:#9aad14;color:#fff}.Button--color--olive:hover{transition:color 0ms,background-color 0ms}.Button--color--olive:focus{transition:color 100ms,background-color 100ms}.Button--color--olive:hover,.Button--color--olive:focus{background-color:#c4da2b;color:#fff}.Button--color--olive:active{background-color:#d6e761}.Button--color--green{transition:color 50ms,background-color 50ms;background-color:#1b9638;color:#fff}.Button--color--green:hover{transition:color 0ms,background-color 0ms}.Button--color--green:focus{transition:color 100ms,background-color 100ms}.Button--color--green:hover,.Button--color--green:focus{background-color:#32c154;color:#fff}.Button--color--green:active{background-color:#59da78}.Button--color--teal{transition:color 50ms,background-color 50ms;background-color:#009a93;color:#fff}.Button--color--teal:hover{transition:color 0ms,background-color 0ms}.Button--color--teal:focus{transition:color 100ms,background-color 100ms}.Button--color--teal:hover,.Button--color--teal:focus{background-color:#13c4bc;color:#fff}.Button--color--teal:active{background-color:#26eee5}.Button--color--blue{transition:color 50ms,background-color 50ms;background-color:#1c71b1;color:#fff}.Button--color--blue:hover{transition:color 0ms,background-color 0ms}.Button--color--blue:focus{transition:color 100ms,background-color 100ms}.Button--color--blue:hover,.Button--color--blue:focus{background-color:#3a95d9;color:#fff}.Button--color--blue:active{background-color:#73b3e5}.Button--color--violet{transition:color 50ms,background-color 50ms;background-color:#552dab;color:#fff}.Button--color--violet:hover{transition:color 0ms,background-color 0ms}.Button--color--violet:focus{transition:color 100ms,background-color 100ms}.Button--color--violet:hover,.Button--color--violet:focus{background-color:#7953cc;color:#fff}.Button--color--violet:active{background-color:#a389dd}.Button--color--purple{transition:color 50ms,background-color 50ms;background-color:#8b2baa;color:#fff}.Button--color--purple:hover{transition:color 0ms,background-color 0ms}.Button--color--purple:focus{transition:color 100ms,background-color 100ms}.Button--color--purple:hover,.Button--color--purple:focus{background-color:#ad4fcd;color:#fff}.Button--color--purple:active{background-color:#c785dd}.Button--color--pink{transition:color 50ms,background-color 50ms;background-color:#cf2082;color:#fff}.Button--color--pink:hover{transition:color 0ms,background-color 0ms}.Button--color--pink:focus{transition:color 100ms,background-color 100ms}.Button--color--pink:hover,.Button--color--pink:focus{background-color:#e257a5;color:#fff}.Button--color--pink:active{background-color:#ee96c7}.Button--color--brown{transition:color 50ms,background-color 50ms;background-color:#8c5836;color:#fff}.Button--color--brown:hover{transition:color 0ms,background-color 0ms}.Button--color--brown:focus{transition:color 100ms,background-color 100ms}.Button--color--brown:hover,.Button--color--brown:focus{background-color:#b47851;color:#fff}.Button--color--brown:active{background-color:#ca9c7e}.Button--color--grey{transition:color 50ms,background-color 50ms;background-color:#646464;color:#fff}.Button--color--grey:hover{transition:color 0ms,background-color 0ms}.Button--color--grey:focus{transition:color 100ms,background-color 100ms}.Button--color--grey:hover,.Button--color--grey:focus{background-color:#868686;color:#fff}.Button--color--grey:active{background-color:#a8a8a8}.Button--color--light-grey{transition:color 50ms,background-color 50ms;background-color:#919191;color:#fff}.Button--color--light-grey:hover{transition:color 0ms,background-color 0ms}.Button--color--light-grey:focus{transition:color 100ms,background-color 100ms}.Button--color--light-grey:hover,.Button--color--light-grey:focus{background-color:#bababa;color:#fff}.Button--color--light-grey:active{background-color:#e2e2e2}.Button--color--good{transition:color 50ms,background-color 50ms;background-color:#4d9121;color:#fff}.Button--color--good:hover{transition:color 0ms,background-color 0ms}.Button--color--good:focus{transition:color 100ms,background-color 100ms}.Button--color--good:hover,.Button--color--good:focus{background-color:#6cba39;color:#fff}.Button--color--good:active{background-color:#8ed55f}.Button--color--average{transition:color 50ms,background-color 50ms;background-color:#cd7a0d;color:#fff}.Button--color--average:hover{transition:color 0ms,background-color 0ms}.Button--color--average:focus{transition:color 100ms,background-color 100ms}.Button--color--average:hover,.Button--color--average:focus{background-color:#ed9d35;color:#fff}.Button--color--average:active{background-color:#f3bd76}.Button--color--bad{transition:color 50ms,background-color 50ms;background-color:#bd2020;color:#fff}.Button--color--bad:hover{transition:color 0ms,background-color 0ms}.Button--color--bad:focus{transition:color 100ms,background-color 100ms}.Button--color--bad:hover,.Button--color--bad:focus{background-color:#dc4848;color:#fff}.Button--color--bad:active{background-color:#e78484}.Button--color--label{transition:color 50ms,background-color 50ms;background-color:#657a94;color:#fff}.Button--color--label:hover{transition:color 0ms,background-color 0ms}.Button--color--label:focus{transition:color 100ms,background-color 100ms}.Button--color--label:hover,.Button--color--label:focus{background-color:#91a1b3;color:#fff}.Button--color--label:active{background-color:#bec7d3}.Button--color--default{transition:color 50ms,background-color 50ms;background-color:#3e6189;color:#fff}.Button--color--default:hover{transition:color 0ms,background-color 0ms}.Button--color--default:focus{transition:color 100ms,background-color 100ms}.Button--color--default:hover,.Button--color--default:focus{background-color:#5c83b0;color:#fff}.Button--color--default:active{background-color:#89a6c6}.Button--color--caution{transition:color 50ms,background-color 50ms;background-color:#d9b804;color:#000}.Button--color--caution:hover{transition:color 0ms,background-color 0ms}.Button--color--caution:focus{transition:color 100ms,background-color 100ms}.Button--color--caution:hover,.Button--color--caution:focus{background-color:#f5d72e;color:#000}.Button--color--caution:active{background-color:#f9e572}.Button--color--danger{transition:color 50ms,background-color 50ms;background-color:#bd2020;color:#fff}.Button--color--danger:hover{transition:color 0ms,background-color 0ms}.Button--color--danger:focus{transition:color 100ms,background-color 100ms}.Button--color--danger:hover,.Button--color--danger:focus{background-color:#dc4848;color:#fff}.Button--color--danger:active{background-color:#e78484}.Button--color--transparent{transition:color 50ms,background-color 50ms;background-color:#252525;color:#fff;background-color:rgba(37,37,37,0);color:rgba(255,255,255,.5)}.Button--color--transparent:hover{transition:color 0ms,background-color 0ms}.Button--color--transparent:focus{transition:color 100ms,background-color 100ms}.Button--color--transparent:hover,.Button--color--transparent:focus{background-color:#3e3e3e;color:#fff}.Button--color--transparent:active{background-color:#565656}.Button--disabled{background-color:#999 !important}.Button--selected{transition:color 50ms,background-color 50ms;background-color:#1b9638;color:#fff}.Button--selected:hover{transition:color 0ms,background-color 0ms}.Button--selected:focus{transition:color 100ms,background-color 100ms}.Button--selected:hover,.Button--selected:focus{background-color:#32c154;color:#fff}.Button--selected:active{background-color:#59da78}.Button--flex{display:inline-flex;flex-direction:column}.Button--flex--fluid{width:100%}.Button--verticalAlignContent--top{justify-content:flex-start}.Button--verticalAlignContent--middle{justify-content:center}.Button--verticalAlignContent--bottom{justify-content:flex-end}.Button__content{display:block;align-self:stretch}.WeaponVendor .Button--color--sidearm{transition:color 50ms,background-color 50ms;background-color:#00b5ad;color:#fff}.WeaponVendor .Button--color--sidearm:hover{transition:color 0ms,background-color 0ms}.WeaponVendor .Button--color--sidearm:focus{transition:color 100ms,background-color 100ms}.WeaponVendor .Button--color--sidearm:hover,.WeaponVendor .Button--color--sidearm:focus{background-color:#13e3da;color:#fff}.WeaponVendor .Button--color--sidearm:active{background-color:#41f8ef}.WeaponVendor .Button--color--loadout{transition:color 50ms,background-color 50ms;background-color:#fbd608;color:#000}.WeaponVendor .Button--color--loadout:hover{transition:color 0ms,background-color 0ms}.WeaponVendor .Button--color--loadout:focus{transition:color 100ms,background-color 100ms}.WeaponVendor .Button--color--loadout:hover,.WeaponVendor .Button--color--loadout:focus{background-color:#fce354;color:#000}.WeaponVendor .Button--color--loadout:active{background-color:#fdefa0}.WeaponVendor .Button--color--utility{transition:color 50ms,background-color 50ms;background-color:#2185d0;color:#fff}.WeaponVendor .Button--color--utility:hover{transition:color 0ms,background-color 0ms}.WeaponVendor .Button--color--utility:focus{transition:color 100ms,background-color 100ms}.WeaponVendor .Button--color--utility:hover,.WeaponVendor .Button--color--utility:focus{background-color:#59a8e3;color:#fff}.WeaponVendor .Button--color--utility:active{background-color:#99c9ee}.WeaponVendor .Button--color--ammo{transition:color 50ms,background-color 50ms;background-color:#f2711c;color:#fff}.WeaponVendor .Button--color--ammo:hover{transition:color 0ms,background-color 0ms}.WeaponVendor .Button--color--ammo:focus{transition:color 100ms,background-color 100ms}.WeaponVendor .Button--color--ammo:hover,.WeaponVendor .Button--color--ammo:focus{background-color:#f6a067;color:#fff}.WeaponVendor .Button--color--ammo:active{background-color:#fbceb1}.WeaponVendor .Button--color--assistant{transition:color 50ms,background-color 50ms;background-color:#767676;color:#fff}.WeaponVendor .Button--color--assistant:hover{transition:color 0ms,background-color 0ms}.WeaponVendor .Button--color--assistant:focus{transition:color 100ms,background-color 100ms}.WeaponVendor .Button--color--assistant:hover,.WeaponVendor .Button--color--assistant:focus{background-color:#9b9b9b;color:#fff}.WeaponVendor .Button--color--assistant:active{background-color:silver}.WeaponVendor .Button--color--fishing{transition:color 50ms,background-color 50ms;background-color:#2185d0;color:#fff}.WeaponVendor .Button--color--fishing:hover{transition:color 0ms,background-color 0ms}.WeaponVendor .Button--color--fishing:focus{transition:color 100ms,background-color 100ms}.WeaponVendor .Button--color--fishing:hover,.WeaponVendor .Button--color--fishing:focus{background-color:#59a8e3;color:#fff}.WeaponVendor .Button--color--fishing:active{background-color:#99c9ee}.WeaponVendor__Credits--sidearm{color:#00b5ad}.WeaponVendor__Credits--loadout{color:#fbd608}.WeaponVendor__Credits--utility{color:#2185d0}.WeaponVendor__Credits--ammo{color:#f2711c}.WeaponVendor__Credits--assistant{color:#767676}.WeaponVendor__Credits--fishing{color:#2185d0}.WeaponVendor__Row:not(:last-child){border-bottom:2px solid #3e6189}.Layout,.Layout *{scrollbar-base-color:#1c1c1c;scrollbar-face-color:#3b3b3b;scrollbar-3dlight-color:#252525;scrollbar-highlight-color:#252525;scrollbar-track-color:#1c1c1c;scrollbar-arrow-color:#929292;scrollbar-shadow-color:#3b3b3b}.Layout__content{position:absolute;top:0;bottom:0;left:0;right:0;overflow-x:hidden;overflow-y:hidden}.Layout__content--scrollable{overflow-y:scroll;margin-bottom:0}.NtosHeader__left{position:absolute;left:12px}.NtosHeader__right{position:absolute;right:12px}.NtosHeader__icon{margin-top:-9px;margin-bottom:-6px;vertical-align:middle}.NtosWindow__header{position:absolute;top:0;left:0;right:0;height:28px;line-height:27px;background-color:rgba(0,0,0,.5);font-family:Consolas,monospace;font-size:14px;user-select:none;-ms-user-select:none}.NtosWindow__content .Layout__content{margin-top:28px;font-family:Consolas,monospace;font-size:14px}.TitleBar{background-color:#363636;border-bottom:1px solid #161616;box-shadow:0 2px 2px rgba(0,0,0,.1);box-shadow:0 .1666666667rem .1666666667rem rgba(0,0,0,.1);user-select:none;-ms-user-select:none}.TitleBar__clickable{color:rgba(255,255,255,.5);background-color:#363636;transition:color 250ms ease-out,background-color 250ms ease-out}.TitleBar__clickable:hover{color:#fff;background-color:#c00;transition:color 0ms,background-color 0ms}.TitleBar__title{position:absolute;top:0;left:46px;left:3.8333333333rem;color:rgba(255,255,255,.75);font-size:14px;font-size:1.1666666667rem;line-height:31px;line-height:2.5833333333rem;white-space:nowrap}.TitleBar__dragZone{position:absolute;top:0;left:0;right:0;height:32px;height:2.6666666667rem}.TitleBar__statusIcon{position:absolute;top:0;left:12px;left:1rem;transition:color .5s;font-size:20px;font-size:1.6666666667rem;line-height:32px !important;line-height:2.6666666667rem !important}.TitleBar__close{position:absolute;top:-1px;right:0;width:45px;width:3.75rem;height:32px;height:2.6666666667rem;font-size:20px;font-size:1.6666666667rem;line-height:31px;line-height:2.5833333333rem;text-align:center}.TitleBar__devBuildIndicator{position:absolute;top:6px;top:.5rem;right:52px;right:4.3333333333rem;min-width:20px;min-width:1.6666666667rem;padding:2px 4px;padding:.1666666667rem .3333333333rem;background-color:rgba(91,170,39,.75);color:#fff;text-align:center}.Window{position:fixed;top:0;bottom:0;left:0;right:0;color:#fff;background-color:#252525;background-image:linear-gradient(to bottom, #2a2a2a 0%, #202020 100%)}.Window__titleBar{position:fixed;z-index:1;top:0;left:0;width:100%;height:32px;height:2.6666666667rem}.Window__rest{position:fixed;top:32px;top:2.6666666667rem;bottom:0;left:0;right:0}.Window__contentPadding{margin:.5rem;height:calc(100% - 1.01rem)}.Window__contentPadding:after{height:0}.Layout__content--scrollable .Window__contentPadding:after{display:block;content:"";height:.5rem}.Window__dimmer{position:fixed;top:0;bottom:0;left:0;right:0;background-color:rgba(62,62,62,.25);pointer-events:none}.Window__resizeHandle__se{position:fixed;bottom:0;right:0;width:20px;width:1.6666666667rem;height:20px;height:1.6666666667rem;cursor:se-resize}.Window__resizeHandle__s{position:fixed;bottom:0;left:0;right:0;height:6px;height:.5rem;cursor:s-resize}.Window__resizeHandle__e{position:fixed;top:0;bottom:0;right:0;width:3px;width:.25rem;cursor:e-resize}.Layout__content{background-image:url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjAiIHZpZXdCb3g9IjAgMCA0MjUgMjAwIiBvcGFjaXR5PSIuMSI+CiAgPHBhdGggZD0ibSAxNzguMDAzOTksMC4wMzg2OSAtNzEuMjAzOTMsMCBhIDYuNzYxMzQyMiw2LjAyNTU0OTUgMCAwIDAgLTYuNzYxMzQsNi4wMjU1NSBsIDAsMTg3Ljg3MTQ3IGEgNi43NjEzNDIyLDYuMDI1NTQ5NSAwIDAgMCA2Ljc2MTM0LDYuMDI1NTQgbCA1My4xMDcyLDAgYSA2Ljc2MTM0MjIsNi4wMjU1NDk1IDAgMCAwIDYuNzYxMzUsLTYuMDI1NTQgbCAwLC0xMDEuNTQ0MDE4IDcyLjIxNjI4LDEwNC42OTkzOTggYSA2Ljc2MTM0MjIsNi4wMjU1NDk1IDAgMCAwIDUuNzYwMTUsMi44NzAxNiBsIDczLjU1NDg3LDAgYSA2Ljc2MTM0MjIsNi4wMjU1NDk1IDAgMCAwIDYuNzYxMzUsLTYuMDI1NTQgbCAwLC0xODcuODcxNDcgYSA2Ljc2MTM0MjIsNi4wMjU1NDk1IDAgMCAwIC02Ljc2MTM1LC02LjAyNTU1IGwgLTU0LjcxNjQ0LDAgYSA2Ljc2MTM0MjIsNi4wMjU1NDk1IDAgMCAwIC02Ljc2MTMzLDYuMDI1NTUgbCAwLDEwMi42MTkzNSBMIDE4My43NjQxMywyLjkwODg2IGEgNi43NjEzNDIyLDYuMDI1NTQ5NSAwIDAgMCAtNS43NjAxNCwtMi44NzAxNyB6IiAvPgogIDxwYXRoIGQ9Ik0gNC44NDQ2MzMzLDIyLjEwODc1IEEgMTMuNDEyMDM5LDEyLjUwMTg0MiAwIDAgMSAxMy40Nzc1ODgsMC4wMzkyNCBsIDY2LjExODMxNSwwIGEgNS4zNjQ4MTU4LDUuMDAwNzM3IDAgMCAxIDUuMzY0ODIzLDUuMDAwNzMgbCAwLDc5Ljg3OTMxIHoiIC8+CiAgPHBhdGggZD0ibSA0MjAuMTU1MzUsMTc3Ljg5MTE5IGEgMTMuNDEyMDM4LDEyLjUwMTg0MiAwIDAgMSAtOC42MzI5NSwyMi4wNjk1MSBsIC02Ni4xMTgzMiwwIGEgNS4zNjQ4MTUyLDUuMDAwNzM3IDAgMCAxIC01LjM2NDgyLC01LjAwMDc0IGwgMCwtNzkuODc5MzEgeiIgLz4KPC9zdmc+CjwhLS0gVGhpcyB3b3JrIGlzIGxpY2Vuc2VkIHVuZGVyIGEgQ3JlYXRpdmUgQ29tbW9ucyBBdHRyaWJ1dGlvbi1TaGFyZUFsaWtlIDQuMCBJbnRlcm5hdGlvbmFsIExpY2Vuc2UuIC0tPgo8IS0tIGh0dHA6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnL2xpY2Vuc2VzL2J5LXNhLzQuMC8gLS0+Cg==);background-size:70%;background-position:center;background-repeat:no-repeat} +.theme-genetek .ProgressBar{display:flex;position:relative;width:100%;padding:0 .5em;border-width:.0833333333em !important;border-style:solid !important;border-radius:.16em;background-color:rgba(0,0,0,.5);transition:border-color 900ms ease-out;align-items:center}.theme-genetek .ProgressBar__fill{position:absolute;top:-0.5px;left:0px;bottom:-0.5px}.theme-genetek .ProgressBar__fill--animated{transition:background-color 900ms ease-out,width 900ms ease-out}.theme-genetek .ProgressBar__content{position:relative;line-height:1.4166666667em;width:100%;text-align:right}.theme-genetek .ProgressBar--color--default{border:.0833333333em solid #1b676b}.theme-genetek .ProgressBar--color--default .ProgressBar__fill{background-color:#1b676b}.theme-genetek .Section{position:relative;margin-bottom:.5em;background-color:#0a2628;background-color:rgba(0,0,0,.33);box-sizing:border-box}.theme-genetek .Section:last-child{margin-bottom:0}.theme-genetek .Section__title{position:relative;padding:.5em;border-bottom:.1666666667em solid #2eafb6}.theme-genetek .Section__titleText{font-size:1.1666666667em;font-weight:bold;color:#fff}.theme-genetek .Section__buttons{position:absolute;display:inline-block;right:.5em;margin-top:-.0833333333em}.theme-genetek .Section__rest{position:relative}.theme-genetek .Section__content{padding:.66em .5em}.theme-genetek .Section--fitted>.Section__rest>.Section__content{padding:0}.theme-genetek .Section--fill{display:flex;flex-direction:column;height:100%}.theme-genetek .Section--fill>.Section__rest{flex-grow:1}.theme-genetek .Section--fill>.Section__rest>.Section__content{height:100%}.theme-genetek .Section--fill.Section--scrollable>.Section__rest>.Section__content{position:absolute;top:0;left:0;right:0;bottom:0}.theme-genetek .Section--fill.Section--iefix{display:table !important;width:100% !important;height:100% !important;border-collapse:collapse;border-spacing:0}.theme-genetek .Section--fill.Section--iefix>.Section__rest{display:table-row !important;height:100% !important}.theme-genetek .Section--scrollable{overflow-x:hidden;overflow-y:hidden}.theme-genetek .Section--scrollable>.Section__rest>.Section__content{overflow-y:scroll;overflow-x:hidden}.theme-genetek .Section .Section{background-color:transparent;margin-left:-0.5em;margin-right:-0.5em}.theme-genetek .Section .Section:first-child{margin-top:-0.5em}.theme-genetek .Section .Section .Section__titleText{font-size:1.0833333333em}.theme-genetek .Section .Section .Section .Section__titleText{font-size:1em}.theme-genetek .Layout,.theme-genetek .Layout *{scrollbar-base-color:#0b2a2c;scrollbar-face-color:#185a5e;scrollbar-3dlight-color:#0f393b;scrollbar-highlight-color:#0f393b;scrollbar-track-color:#0b2a2c;scrollbar-arrow-color:#51cdd3;scrollbar-shadow-color:#185a5e}.theme-genetek .Layout__content{position:absolute;top:0;bottom:0;left:0;right:0;overflow-x:hidden;overflow-y:hidden}.theme-genetek .Layout__content--scrollable{overflow-y:scroll;margin-bottom:0}.theme-genetek .Window{position:fixed;top:0;bottom:0;left:0;right:0;color:#fff;background-color:#0f393b;background-image:linear-gradient(to bottom, #114043 0%, #0d3133 100%)}.theme-genetek .Window__titleBar{position:fixed;z-index:1;top:0;left:0;width:100%;height:32px;height:2.6666666667rem}.theme-genetek .Window__rest{position:fixed;top:32px;top:2.6666666667rem;bottom:0;left:0;right:0}.theme-genetek .Window__contentPadding{margin:.5rem;height:calc(100% - 1.01rem)}.theme-genetek .Window__contentPadding:after{height:0}.theme-genetek .Layout__content--scrollable .Window__contentPadding:after{display:block;content:"";height:.5rem}.theme-genetek .Window__dimmer{position:fixed;top:0;bottom:0;left:0;right:0;background-color:rgba(36,85,87,.25);pointer-events:none}.theme-genetek .Window__resizeHandle__se{position:fixed;bottom:0;right:0;width:20px;width:1.6666666667rem;height:20px;height:1.6666666667rem;cursor:se-resize}.theme-genetek .Window__resizeHandle__s{position:fixed;bottom:0;left:0;right:0;height:6px;height:.5rem;cursor:s-resize}.theme-genetek .Window__resizeHandle__e{position:fixed;top:0;bottom:0;right:0;width:3px;width:.25rem;cursor:e-resize}.theme-genetek .TitleBar{background-color:#144d50;border-bottom:1px solid #161616;box-shadow:0 2px 2px rgba(0,0,0,.1);box-shadow:0 .1666666667rem .1666666667rem rgba(0,0,0,.1);user-select:none;-ms-user-select:none}.theme-genetek .TitleBar__clickable{color:rgba(255,255,255,.5);background-color:#144d50;transition:color 250ms ease-out,background-color 250ms ease-out}.theme-genetek .TitleBar__clickable:hover{color:#fff;background-color:#c00;transition:color 0ms,background-color 0ms}.theme-genetek .TitleBar__title{position:absolute;top:0;left:46px;left:3.8333333333rem;color:rgba(255,255,255,.75);font-size:14px;font-size:1.1666666667rem;line-height:31px;line-height:2.5833333333rem;white-space:nowrap}.theme-genetek .TitleBar__dragZone{position:absolute;top:0;left:0;right:0;height:32px;height:2.6666666667rem}.theme-genetek .TitleBar__statusIcon{position:absolute;top:0;left:12px;left:1rem;transition:color .5s;font-size:20px;font-size:1.6666666667rem;line-height:32px !important;line-height:2.6666666667rem !important}.theme-genetek .TitleBar__close{position:absolute;top:-1px;right:0;width:45px;width:3.75rem;height:32px;height:2.6666666667rem;font-size:20px;font-size:1.6666666667rem;line-height:31px;line-height:2.5833333333rem;text-align:center}.theme-genetek .TitleBar__devBuildIndicator{position:absolute;top:6px;top:.5rem;right:52px;right:4.3333333333rem;min-width:20px;min-width:1.6666666667rem;padding:2px 4px;padding:.1666666667rem .3333333333rem;background-color:rgba(91,170,39,.75);color:#fff;text-align:center}.theme-genetek .Layout__content{background-position-x:-60%;background-image:url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjAiIHZpZXdCb3g9IjAgMCA0MCA1NyIgb3BhY2l0eT0iLjEiPgogIDxlbGxpcHNlIGN4PSIyMCIgY3k9IjYuNDgiIHJ4PSIxNC4yIiByeT0iNi42NCIgLz4KICA8ZWxsaXBzZSBjeD0iMjAiIGN5PSIyMi45IiByeD0iMTAiIHJ5PSI0LjcxIiAvPgogIDxlbGxpcHNlIGN4PSIyMCIgY3k9IjQ3LjUiIHJ4PSIyMCIgcnk9IjkuNCIgLz4KICA8cGF0aCBkPSJtOS4yIDYuNDhoLTIuNjJsMy40MiAxNC43LTkuODIgMjQuNmgyLjNsMTAuMS0yNC42eiIgLz4KICA8cGF0aCBkPSJtMzAuNyA2LjQ4LTMuNiAxNC43IDEwLjEgMjQuNmgyLjNsLTkuOC0yNC42IDMuNi0xNC43eiIgLz4KPC9zdmc+CjwhLS0gVGhpcyB3b3JrIGlzIGxpY2Vuc2VkIHVuZGVyIGEgQ3JlYXRpdmUgQ29tbW9ucyBBdHRyaWJ1dGlvbi1TaGFyZUFsaWtlIDQuMCBJbnRlcm5hdGlvbmFsIExpY2Vuc2UuIC0tPgo8IS0tIGh0dHA6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnL2xpY2Vuc2VzL2J5LXNhLzQuMC8gLS0+Cg==)}.theme-genetek .color-label{color:#bfcc90 !important}.theme-genetek .Button{position:relative;display:inline-block;line-height:1.667em;padding:0 .5em;margin-right:.1666666667em;white-space:nowrap;outline:0;border-radius:.16em;margin-bottom:.1666666667em;user-select:none;-ms-user-select:none}.theme-genetek .Button:last-child{margin-right:0;margin-bottom:0}.theme-genetek .Button .fa,.theme-genetek .Button .fa-solid,.theme-genetek .Button .fa-regular{margin-left:0;margin-right:0;min-width:1.333em;text-align:center}.theme-genetek .Button--hasContent .fa,.theme-genetek .Button--hasContent .fa-solid,.theme-genetek .Button--hasContent .fa-regular{margin-right:.25em}.theme-genetek .Button--hasContent.Button--iconPosition--right .fa,.theme-genetek .Button--hasContent.Button--iconPosition--right .fas,.theme-genetek .Button--hasContent.Button--iconPosition--right .far{margin-right:0px;margin-left:3px}.theme-genetek .Button--ellipsis{overflow:hidden;text-overflow:ellipsis}.theme-genetek .Button--ellipsis .Button__content{overflow:hidden;text-overflow:ellipsis}.theme-genetek .Button--fluid{display:block;margin-left:0;margin-right:0}.theme-genetek .Button--circular{border-radius:50%}.theme-genetek .Button--compact{padding:0 .25em;line-height:1.333em}.theme-genetek .Button--color--default{transition:color 50ms,background-color 50ms;background-color:#1b676b;color:#fff}.theme-genetek .Button--color--default:hover{transition:color 0ms,background-color 0ms}.theme-genetek .Button--color--default:focus{transition:color 100ms,background-color 100ms}.theme-genetek .Button--color--default:hover,.theme-genetek .Button--color--default:focus{background-color:#328a8e;color:#fff}.theme-genetek .Button--color--default:active{background-color:#49acb1}.theme-genetek .Button--color--caution{transition:color 50ms,background-color 50ms;background-color:#d9b804;color:#000}.theme-genetek .Button--color--caution:hover{transition:color 0ms,background-color 0ms}.theme-genetek .Button--color--caution:focus{transition:color 100ms,background-color 100ms}.theme-genetek .Button--color--caution:hover,.theme-genetek .Button--color--caution:focus{background-color:#f5d72e;color:#000}.theme-genetek .Button--color--caution:active{background-color:#f9e572}.theme-genetek .Button--color--danger{transition:color 50ms,background-color 50ms;background-color:#bd2020;color:#fff}.theme-genetek .Button--color--danger:hover{transition:color 0ms,background-color 0ms}.theme-genetek .Button--color--danger:focus{transition:color 100ms,background-color 100ms}.theme-genetek .Button--color--danger:hover,.theme-genetek .Button--color--danger:focus{background-color:#dc4848;color:#fff}.theme-genetek .Button--color--danger:active{background-color:#e78484}.theme-genetek .Button--color--transparent{transition:color 50ms,background-color 50ms;background-color:#0f393b;color:#fff;background-color:rgba(15,57,59,0);color:rgba(234,253,230,.75)}.theme-genetek .Button--color--transparent:hover{transition:color 0ms,background-color 0ms}.theme-genetek .Button--color--transparent:focus{transition:color 100ms,background-color 100ms}.theme-genetek .Button--color--transparent:hover,.theme-genetek .Button--color--transparent:focus{background-color:#245557;color:#fff}.theme-genetek .Button--color--transparent:active{background-color:#3a7073}.theme-genetek .Button--disabled{background-color:#999 !important}.theme-genetek .Button--selected{transition:color 50ms,background-color 50ms;background-color:#1b9638;color:#fff}.theme-genetek .Button--selected:hover{transition:color 0ms,background-color 0ms}.theme-genetek .Button--selected:focus{transition:color 100ms,background-color 100ms}.theme-genetek .Button--selected:hover,.theme-genetek .Button--selected:focus{background-color:#32c154;color:#fff}.theme-genetek .Button--selected:active{background-color:#59da78}.theme-genetek .Button--flex{display:inline-flex;flex-direction:column}.theme-genetek .Button--flex--fluid{width:100%}.theme-genetek .Button--verticalAlignContent--top{justify-content:flex-start}.theme-genetek .Button--verticalAlignContent--middle{justify-content:center}.theme-genetek .Button--verticalAlignContent--bottom{justify-content:flex-end}.theme-genetek .Button__content{display:block;align-self:stretch} +.theme-genetek-disabled .ProgressBar{display:flex;position:relative;width:100%;padding:0 .5em;border-width:.0833333333em !important;border-style:solid !important;border-radius:.16em;background-color:rgba(0,0,0,.5);transition:border-color 900ms ease-out;align-items:center}.theme-genetek-disabled .ProgressBar__fill{position:absolute;top:-0.5px;left:0px;bottom:-0.5px}.theme-genetek-disabled .ProgressBar__fill--animated{transition:background-color 900ms ease-out,width 900ms ease-out}.theme-genetek-disabled .ProgressBar__content{position:relative;line-height:1.4166666667em;width:100%;text-align:right}.theme-genetek-disabled .ProgressBar--color--default{border:.0833333333em solid #36645d}.theme-genetek-disabled .ProgressBar--color--default .ProgressBar__fill{background-color:#36645d}.theme-genetek-disabled .Section{position:relative;margin-bottom:.5em;background-color:#142522;background-color:rgba(0,0,0,.33);box-sizing:border-box}.theme-genetek-disabled .Section:last-child{margin-bottom:0}.theme-genetek-disabled .Section__title{position:relative;padding:.5em;border-bottom:.1666666667em solid #559e93}.theme-genetek-disabled .Section__titleText{font-size:1.1666666667em;font-weight:bold;color:#fff}.theme-genetek-disabled .Section__buttons{position:absolute;display:inline-block;right:.5em;margin-top:-.0833333333em}.theme-genetek-disabled .Section__rest{position:relative}.theme-genetek-disabled .Section__content{padding:.66em .5em}.theme-genetek-disabled .Section--fitted>.Section__rest>.Section__content{padding:0}.theme-genetek-disabled .Section--fill{display:flex;flex-direction:column;height:100%}.theme-genetek-disabled .Section--fill>.Section__rest{flex-grow:1}.theme-genetek-disabled .Section--fill>.Section__rest>.Section__content{height:100%}.theme-genetek-disabled .Section--fill.Section--scrollable>.Section__rest>.Section__content{position:absolute;top:0;left:0;right:0;bottom:0}.theme-genetek-disabled .Section--fill.Section--iefix{display:table !important;width:100% !important;height:100% !important;border-collapse:collapse;border-spacing:0}.theme-genetek-disabled .Section--fill.Section--iefix>.Section__rest{display:table-row !important;height:100% !important}.theme-genetek-disabled .Section--scrollable{overflow-x:hidden;overflow-y:hidden}.theme-genetek-disabled .Section--scrollable>.Section__rest>.Section__content{overflow-y:scroll;overflow-x:hidden}.theme-genetek-disabled .Section .Section{background-color:transparent;margin-left:-0.5em;margin-right:-0.5em}.theme-genetek-disabled .Section .Section:first-child{margin-top:-0.5em}.theme-genetek-disabled .Section .Section .Section__titleText{font-size:1.0833333333em}.theme-genetek-disabled .Section .Section .Section .Section__titleText{font-size:1em}.theme-genetek-disabled .Layout,.theme-genetek-disabled .Layout *{scrollbar-base-color:#162926;scrollbar-face-color:#2d534d;scrollbar-3dlight-color:#1e3733;scrollbar-highlight-color:#1e3733;scrollbar-track-color:#162926;scrollbar-arrow-color:#75b4ab;scrollbar-shadow-color:#2d534d}.theme-genetek-disabled .Layout__content{position:absolute;top:0;bottom:0;left:0;right:0;overflow-x:hidden;overflow-y:hidden}.theme-genetek-disabled .Layout__content--scrollable{overflow-y:scroll;margin-bottom:0}.theme-genetek-disabled .Window{position:fixed;top:0;bottom:0;left:0;right:0;color:#fff;background-color:#1e3733;background-image:linear-gradient(to bottom, #213e39 0%, #1a302d 100%)}.theme-genetek-disabled .Window__titleBar{position:fixed;z-index:1;top:0;left:0;width:100%;height:32px;height:2.6666666667rem}.theme-genetek-disabled .Window__rest{position:fixed;top:32px;top:2.6666666667rem;bottom:0;left:0;right:0}.theme-genetek-disabled .Window__contentPadding{margin:.5rem;height:calc(100% - 1.01rem)}.theme-genetek-disabled .Window__contentPadding:after{height:0}.theme-genetek-disabled .Layout__content--scrollable .Window__contentPadding:after{display:block;content:"";height:.5rem}.theme-genetek-disabled .Window__dimmer{position:fixed;top:0;bottom:0;left:0;right:0;background-color:rgba(54,83,78,.25);pointer-events:none}.theme-genetek-disabled .Window__resizeHandle__se{position:fixed;bottom:0;right:0;width:20px;width:1.6666666667rem;height:20px;height:1.6666666667rem;cursor:se-resize}.theme-genetek-disabled .Window__resizeHandle__s{position:fixed;bottom:0;left:0;right:0;height:6px;height:.5rem;cursor:s-resize}.theme-genetek-disabled .Window__resizeHandle__e{position:fixed;top:0;bottom:0;right:0;width:3px;width:.25rem;cursor:e-resize}.theme-genetek-disabled .TitleBar{background-color:#294b46;border-bottom:1px solid #161616;box-shadow:0 2px 2px rgba(0,0,0,.1);box-shadow:0 .1666666667rem .1666666667rem rgba(0,0,0,.1);user-select:none;-ms-user-select:none}.theme-genetek-disabled .TitleBar__clickable{color:rgba(255,255,255,.5);background-color:#294b46;transition:color 250ms ease-out,background-color 250ms ease-out}.theme-genetek-disabled .TitleBar__clickable:hover{color:#fff;background-color:#c00;transition:color 0ms,background-color 0ms}.theme-genetek-disabled .TitleBar__title{position:absolute;top:0;left:46px;left:3.8333333333rem;color:rgba(255,255,255,.75);font-size:14px;font-size:1.1666666667rem;line-height:31px;line-height:2.5833333333rem;white-space:nowrap}.theme-genetek-disabled .TitleBar__dragZone{position:absolute;top:0;left:0;right:0;height:32px;height:2.6666666667rem}.theme-genetek-disabled .TitleBar__statusIcon{position:absolute;top:0;left:12px;left:1rem;transition:color .5s;font-size:20px;font-size:1.6666666667rem;line-height:32px !important;line-height:2.6666666667rem !important}.theme-genetek-disabled .TitleBar__close{position:absolute;top:-1px;right:0;width:45px;width:3.75rem;height:32px;height:2.6666666667rem;font-size:20px;font-size:1.6666666667rem;line-height:31px;line-height:2.5833333333rem;text-align:center}.theme-genetek-disabled .TitleBar__devBuildIndicator{position:absolute;top:6px;top:.5rem;right:52px;right:4.3333333333rem;min-width:20px;min-width:1.6666666667rem;padding:2px 4px;padding:.1666666667rem .3333333333rem;background-color:rgba(91,170,39,.75);color:#fff;text-align:center}.theme-genetek-disabled .Layout__content{background-position-x:-60%;background-image:url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjAiIHZpZXdCb3g9IjAgMCA0MCA1NyIgb3BhY2l0eT0iLjEiPgogIDxlbGxpcHNlIGN4PSIyMCIgY3k9IjYuNDgiIHJ4PSIxNC4yIiByeT0iNi42NCIgLz4KICA8ZWxsaXBzZSBjeD0iMjAiIGN5PSIyMi45IiByeD0iMTAiIHJ5PSI0LjcxIiAvPgogIDxlbGxpcHNlIGN4PSIyMCIgY3k9IjQ3LjUiIHJ4PSIyMCIgcnk9IjkuNCIgLz4KICA8cGF0aCBkPSJtOS4yIDYuNDhoLTIuNjJsMy40MiAxNC43LTkuODIgMjQuNmgyLjNsMTAuMS0yNC42eiIgLz4KICA8cGF0aCBkPSJtMzAuNyA2LjQ4LTMuNiAxNC43IDEwLjEgMjQuNmgyLjNsLTkuOC0yNC42IDMuNi0xNC43eiIgLz4KPC9zdmc+CjwhLS0gVGhpcyB3b3JrIGlzIGxpY2Vuc2VkIHVuZGVyIGEgQ3JlYXRpdmUgQ29tbW9ucyBBdHRyaWJ1dGlvbi1TaGFyZUFsaWtlIDQuMCBJbnRlcm5hdGlvbmFsIExpY2Vuc2UuIC0tPgo8IS0tIGh0dHA6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnL2xpY2Vuc2VzL2J5LXNhLzQuMC8gLS0+Cg==)}.theme-genetek-disabled .color-label{color:#bfcc90 !important}.theme-genetek-disabled .Button{background-color:#999 !important} .theme-ntos .Button{position:relative;display:inline-block;line-height:1.667em;padding:0 .5em;margin-right:.1666666667em;white-space:nowrap;outline:0;border-radius:.16em;margin-bottom:.1666666667em;user-select:none;-ms-user-select:none}.theme-ntos .Button:last-child{margin-right:0;margin-bottom:0}.theme-ntos .Button .fa,.theme-ntos .Button .fa-solid,.theme-ntos .Button .fa-regular{margin-left:0;margin-right:0;min-width:1.333em;text-align:center}.theme-ntos .Button--hasContent .fa,.theme-ntos .Button--hasContent .fa-solid,.theme-ntos .Button--hasContent .fa-regular{margin-right:.25em}.theme-ntos .Button--hasContent.Button--iconPosition--right .fa,.theme-ntos .Button--hasContent.Button--iconPosition--right .fas,.theme-ntos .Button--hasContent.Button--iconPosition--right .far{margin-right:0px;margin-left:3px}.theme-ntos .Button--ellipsis{overflow:hidden;text-overflow:ellipsis}.theme-ntos .Button--ellipsis .Button__content{overflow:hidden;text-overflow:ellipsis}.theme-ntos .Button--fluid{display:block;margin-left:0;margin-right:0}.theme-ntos .Button--circular{border-radius:50%}.theme-ntos .Button--compact{padding:0 .25em;line-height:1.333em}.theme-ntos .Button--color--default{transition:color 50ms,background-color 50ms;background-color:#384e68;color:#fff}.theme-ntos .Button--color--default:hover{transition:color 0ms,background-color 0ms}.theme-ntos .Button--color--default:focus{transition:color 100ms,background-color 100ms}.theme-ntos .Button--color--default:hover,.theme-ntos .Button--color--default:focus{background-color:#546d8b;color:#fff}.theme-ntos .Button--color--default:active{background-color:#6f8cad}.theme-ntos .Button--color--caution{transition:color 50ms,background-color 50ms;background-color:#d9b804;color:#000}.theme-ntos .Button--color--caution:hover{transition:color 0ms,background-color 0ms}.theme-ntos .Button--color--caution:focus{transition:color 100ms,background-color 100ms}.theme-ntos .Button--color--caution:hover,.theme-ntos .Button--color--caution:focus{background-color:#f5d72e;color:#000}.theme-ntos .Button--color--caution:active{background-color:#f9e572}.theme-ntos .Button--color--danger{transition:color 50ms,background-color 50ms;background-color:#bd2020;color:#fff}.theme-ntos .Button--color--danger:hover{transition:color 0ms,background-color 0ms}.theme-ntos .Button--color--danger:focus{transition:color 100ms,background-color 100ms}.theme-ntos .Button--color--danger:hover,.theme-ntos .Button--color--danger:focus{background-color:#dc4848;color:#fff}.theme-ntos .Button--color--danger:active{background-color:#e78484}.theme-ntos .Button--color--transparent{transition:color 50ms,background-color 50ms;background-color:#1f2b39;color:#fff;background-color:rgba(31,43,57,0);color:rgba(227,240,255,.75)}.theme-ntos .Button--color--transparent:hover{transition:color 0ms,background-color 0ms}.theme-ntos .Button--color--transparent:focus{transition:color 100ms,background-color 100ms}.theme-ntos .Button--color--transparent:hover,.theme-ntos .Button--color--transparent:focus{background-color:#374555;color:#fff}.theme-ntos .Button--color--transparent:active{background-color:#4e5e71}.theme-ntos .Button--disabled{background-color:#999 !important}.theme-ntos .Button--selected{transition:color 50ms,background-color 50ms;background-color:#1b9638;color:#fff}.theme-ntos .Button--selected:hover{transition:color 0ms,background-color 0ms}.theme-ntos .Button--selected:focus{transition:color 100ms,background-color 100ms}.theme-ntos .Button--selected:hover,.theme-ntos .Button--selected:focus{background-color:#32c154;color:#fff}.theme-ntos .Button--selected:active{background-color:#59da78}.theme-ntos .Button--flex{display:inline-flex;flex-direction:column}.theme-ntos .Button--flex--fluid{width:100%}.theme-ntos .Button--verticalAlignContent--top{justify-content:flex-start}.theme-ntos .Button--verticalAlignContent--middle{justify-content:center}.theme-ntos .Button--verticalAlignContent--bottom{justify-content:flex-end}.theme-ntos .Button__content{display:block;align-self:stretch}.theme-ntos .ProgressBar{display:flex;position:relative;width:100%;padding:0 .5em;border-width:.0833333333em !important;border-style:solid !important;border-radius:.16em;background-color:rgba(0,0,0,.5);transition:border-color 900ms ease-out;align-items:center}.theme-ntos .ProgressBar__fill{position:absolute;top:-0.5px;left:0px;bottom:-0.5px}.theme-ntos .ProgressBar__fill--animated{transition:background-color 900ms ease-out,width 900ms ease-out}.theme-ntos .ProgressBar__content{position:relative;line-height:1.4166666667em;width:100%;text-align:right}.theme-ntos .ProgressBar--color--default{border:.0833333333em solid #384e68}.theme-ntos .ProgressBar--color--default .ProgressBar__fill{background-color:#384e68}.theme-ntos .Section{position:relative;margin-bottom:.5em;background-color:#151d26;background-color:rgba(0,0,0,.33);box-sizing:border-box}.theme-ntos .Section:last-child{margin-bottom:0}.theme-ntos .Section__title{position:relative;padding:.5em;border-bottom:.1666666667em solid #4972a1}.theme-ntos .Section__titleText{font-size:1.1666666667em;font-weight:bold;color:#fff}.theme-ntos .Section__buttons{position:absolute;display:inline-block;right:.5em;margin-top:-.0833333333em}.theme-ntos .Section__rest{position:relative}.theme-ntos .Section__content{padding:.66em .5em}.theme-ntos .Section--fitted>.Section__rest>.Section__content{padding:0}.theme-ntos .Section--fill{display:flex;flex-direction:column;height:100%}.theme-ntos .Section--fill>.Section__rest{flex-grow:1}.theme-ntos .Section--fill>.Section__rest>.Section__content{height:100%}.theme-ntos .Section--fill.Section--scrollable>.Section__rest>.Section__content{position:absolute;top:0;left:0;right:0;bottom:0}.theme-ntos .Section--fill.Section--iefix{display:table !important;width:100% !important;height:100% !important;border-collapse:collapse;border-spacing:0}.theme-ntos .Section--fill.Section--iefix>.Section__rest{display:table-row !important;height:100% !important}.theme-ntos .Section--scrollable{overflow-x:hidden;overflow-y:hidden}.theme-ntos .Section--scrollable>.Section__rest>.Section__content{overflow-y:scroll;overflow-x:hidden}.theme-ntos .Section .Section{background-color:transparent;margin-left:-0.5em;margin-right:-0.5em}.theme-ntos .Section .Section:first-child{margin-top:-0.5em}.theme-ntos .Section .Section .Section__titleText{font-size:1.0833333333em}.theme-ntos .Section .Section .Section .Section__titleText{font-size:1em}.theme-ntos .SectionEx .Section__title{display:flex}.theme-ntos .SectionEx .Section__titleText{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;flex:auto}.theme-ntos .SectionEx .Section__buttons{position:inherit;right:inherit;flex:none}.theme-ntos .SectionEx__capitalize .Section__titleText{text-transform:capitalize}.theme-ntos .Layout,.theme-ntos .Layout *{scrollbar-base-color:#17202b;scrollbar-face-color:#2e3f55;scrollbar-3dlight-color:#1f2b39;scrollbar-highlight-color:#1f2b39;scrollbar-track-color:#17202b;scrollbar-arrow-color:#7693b5;scrollbar-shadow-color:#2e3f55}.theme-ntos .Layout__content{position:absolute;top:0;bottom:0;left:0;right:0;overflow-x:hidden;overflow-y:hidden}.theme-ntos .Layout__content--scrollable{overflow-y:scroll;margin-bottom:0}.theme-ntos .Window{position:fixed;top:0;bottom:0;left:0;right:0;color:#fff;background-color:#1f2b39;background-image:linear-gradient(to bottom, #223040 0%, #1b2633 100%)}.theme-ntos .Window__titleBar{position:fixed;z-index:1;top:0;left:0;width:100%;height:32px;height:2.6666666667rem}.theme-ntos .Window__rest{position:fixed;top:32px;top:2.6666666667rem;bottom:0;left:0;right:0}.theme-ntos .Window__contentPadding{margin:.5rem;height:calc(100% - 1.01rem)}.theme-ntos .Window__contentPadding:after{height:0}.theme-ntos .Layout__content--scrollable .Window__contentPadding:after{display:block;content:"";height:.5rem}.theme-ntos .Window__dimmer{position:fixed;top:0;bottom:0;left:0;right:0;background-color:rgba(55,69,85,.25);pointer-events:none}.theme-ntos .Window__resizeHandle__se{position:fixed;bottom:0;right:0;width:20px;width:1.6666666667rem;height:20px;height:1.6666666667rem;cursor:se-resize}.theme-ntos .Window__resizeHandle__s{position:fixed;bottom:0;left:0;right:0;height:6px;height:.5rem;cursor:s-resize}.theme-ntos .Window__resizeHandle__e{position:fixed;top:0;bottom:0;right:0;width:3px;width:.25rem;cursor:e-resize}.theme-ntos .TitleBar{background-color:#2a3b4e;border-bottom:1px solid #161616;box-shadow:0 2px 2px rgba(0,0,0,.1);box-shadow:0 .1666666667rem .1666666667rem rgba(0,0,0,.1);user-select:none;-ms-user-select:none}.theme-ntos .TitleBar__clickable{color:rgba(255,255,255,.5);background-color:#2a3b4e;transition:color 250ms ease-out,background-color 250ms ease-out}.theme-ntos .TitleBar__clickable:hover{color:#fff;background-color:#c00;transition:color 0ms,background-color 0ms}.theme-ntos .TitleBar__title{position:absolute;top:0;left:46px;left:3.8333333333rem;color:rgba(255,255,255,.75);font-size:14px;font-size:1.1666666667rem;line-height:31px;line-height:2.5833333333rem;white-space:nowrap}.theme-ntos .TitleBar__dragZone{position:absolute;top:0;left:0;right:0;height:32px;height:2.6666666667rem}.theme-ntos .TitleBar__statusIcon{position:absolute;top:0;left:12px;left:1rem;transition:color .5s;font-size:20px;font-size:1.6666666667rem;line-height:32px !important;line-height:2.6666666667rem !important}.theme-ntos .TitleBar__close{position:absolute;top:-1px;right:0;width:45px;width:3.75rem;height:32px;height:2.6666666667rem;font-size:20px;font-size:1.6666666667rem;line-height:31px;line-height:2.5833333333rem;text-align:center}.theme-ntos .TitleBar__devBuildIndicator{position:absolute;top:6px;top:.5rem;right:52px;right:4.3333333333rem;min-width:20px;min-width:1.6666666667rem;padding:2px 4px;padding:.1666666667rem .3333333333rem;background-color:rgba(91,170,39,.75);color:#fff;text-align:center} .theme-paper .color-black{color:#000 !important}.theme-paper .color-white{color:#e6e6e6 !important}.theme-paper .color-red{color:#c82121 !important}.theme-paper .color-orange{color:#e6630d !important}.theme-paper .color-yellow{color:#e5c304 !important}.theme-paper .color-olive{color:#a3b816 !important}.theme-paper .color-green{color:#1d9f3b !important}.theme-paper .color-teal{color:#00a39c !important}.theme-paper .color-blue{color:#1e78bb !important}.theme-paper .color-violet{color:#5a30b5 !important}.theme-paper .color-purple{color:#932eb4 !important}.theme-paper .color-pink{color:#db228a !important}.theme-paper .color-brown{color:#955d39 !important}.theme-paper .color-grey{color:#6a6a6a !important}.theme-paper .color-light-grey{color:#999 !important}.theme-paper .color-good{color:#529923 !important}.theme-paper .color-average{color:#da810e !important}.theme-paper .color-bad{color:#c82121 !important}.theme-paper .color-label{color:#6d819b !important}.theme-paper .color-bg-black{background-color:#404040 !important}.theme-paper .color-bg-white{background-color:#fff !important}.theme-paper .color-bg-red{background-color:#e45e5e !important}.theme-paper .color-bg-orange{background-color:#f59555 !important}.theme-paper .color-bg-yellow{background-color:#fce046 !important}.theme-paper .color-bg-olive{background-color:#d3e942 !important}.theme-paper .color-bg-green{background-color:#40dc65 !important}.theme-paper .color-bg-teal{background-color:#08fff4 !important}.theme-paper .color-bg-blue{background-color:#51a5e3 !important}.theme-paper .color-bg-violet{background-color:#8b67d7 !important}.theme-paper .color-bg-purple{background-color:#bb64d8 !important}.theme-paper .color-bg-pink{background-color:#e86bb1 !important}.theme-paper .color-bg-brown{background-color:#c58b66 !important}.theme-paper .color-bg-grey{background-color:#989898 !important}.theme-paper .color-bg-light-grey{background-color:#bfbfbf !important}.theme-paper .color-bg-good{background-color:#80d547 !important}.theme-paper .color-bg-average{background-color:#f4ab4d !important}.theme-paper .color-bg-bad{background-color:#e45e5e !important}.theme-paper .color-bg-label{background-color:#9eacbd !important}.theme-paper .Tabs{display:flex;align-items:stretch;overflow:hidden;background-color:#fff}.theme-paper .Tabs--fill{height:100%}.theme-paper .Section .Tabs{background-color:transparent}.theme-paper .Section:not(.Section--fitted) .Tabs{margin:0 -0.5em .5em}.theme-paper .Section:not(.Section--fitted) .Tabs:first-child{margin-top:-0.5em}.theme-paper .Tabs--vertical{flex-direction:column;padding:.25em 0 .25em .25em}.theme-paper .Tabs--horizontal{margin-bottom:.5em;padding:.25em .25em 0 .25em}.theme-paper .Tabs--horizontal:last-child{margin-bottom:0}.theme-paper .Tabs__Tab{flex-grow:0}.theme-paper .Tabs--fluid .Tabs__Tab{flex-grow:1}.theme-paper .Tab{display:flex;align-items:center;justify-content:space-between;background-color:transparent;color:rgba(255,255,255,.5);min-height:2.25em;min-width:4em}.theme-paper .Tab:not(.Tab--selected):hover{background-color:rgba(255,255,255,.075)}.theme-paper .Tab--selected{background-color:rgba(255,255,255,.125);color:#fafafa}.theme-paper .Tab__text{flex-grow:1;margin:0 .5em}.theme-paper .Tab__left{min-width:1.5em;text-align:center;margin-left:.25em}.theme-paper .Tab__right{min-width:1.5em;text-align:center;margin-right:.25em}.theme-paper .Tabs--horizontal .Tab{border-top:.1666666667em solid transparent;border-bottom:.1666666667em solid transparent;border-top-left-radius:.25em;border-top-right-radius:.25em}.theme-paper .Tabs--horizontal .Tab--selected{border-bottom:.1666666667em solid #f9f9f9}.theme-paper .Tabs--vertical .Tab{min-height:2em;border-left:.1666666667em solid transparent;border-right:.1666666667em solid transparent;border-top-left-radius:.25em;border-bottom-left-radius:.25em}.theme-paper .Tabs--vertical .Tab--selected{border-right:.1666666667em solid #f9f9f9}.theme-paper .Tab--selected.Tab--color--black{color:#404040}.theme-paper .Tabs--horizontal .Tab--selected.Tab--color--black{border-bottom-color:#000}.theme-paper .Tabs--vertical .Tab--selected.Tab--color--black{border-right-color:#000}.theme-paper .Tab--selected.Tab--color--white{color:#ececec}.theme-paper .Tabs--horizontal .Tab--selected.Tab--color--white{border-bottom-color:#e6e6e6}.theme-paper .Tabs--vertical .Tab--selected.Tab--color--white{border-right-color:#e6e6e6}.theme-paper .Tab--selected.Tab--color--red{color:#e14d4d}.theme-paper .Tabs--horizontal .Tab--selected.Tab--color--red{border-bottom-color:#c82121}.theme-paper .Tabs--vertical .Tab--selected.Tab--color--red{border-right-color:#c82121}.theme-paper .Tab--selected.Tab--color--orange{color:#f48942}.theme-paper .Tabs--horizontal .Tab--selected.Tab--color--orange{border-bottom-color:#e6630d}.theme-paper .Tabs--vertical .Tab--selected.Tab--color--orange{border-right-color:#e6630d}.theme-paper .Tab--selected.Tab--color--yellow{color:#fcdd33}.theme-paper .Tabs--horizontal .Tab--selected.Tab--color--yellow{border-bottom-color:#e5c304}.theme-paper .Tabs--vertical .Tab--selected.Tab--color--yellow{border-right-color:#e5c304}.theme-paper .Tab--selected.Tab--color--olive{color:#d0e732}.theme-paper .Tabs--horizontal .Tab--selected.Tab--color--olive{border-bottom-color:#a3b816}.theme-paper .Tabs--vertical .Tab--selected.Tab--color--olive{border-right-color:#a3b816}.theme-paper .Tab--selected.Tab--color--green{color:#33da5a}.theme-paper .Tabs--horizontal .Tab--selected.Tab--color--green{border-bottom-color:#1d9f3b}.theme-paper .Tabs--vertical .Tab--selected.Tab--color--green{border-right-color:#1d9f3b}.theme-paper .Tab--selected.Tab--color--teal{color:#00faef}.theme-paper .Tabs--horizontal .Tab--selected.Tab--color--teal{border-bottom-color:#00a39c}.theme-paper .Tabs--vertical .Tab--selected.Tab--color--teal{border-right-color:#00a39c}.theme-paper .Tab--selected.Tab--color--blue{color:#419ce1}.theme-paper .Tabs--horizontal .Tab--selected.Tab--color--blue{border-bottom-color:#1e78bb}.theme-paper .Tabs--vertical .Tab--selected.Tab--color--blue{border-right-color:#1e78bb}.theme-paper .Tab--selected.Tab--color--violet{color:#7f58d3}.theme-paper .Tabs--horizontal .Tab--selected.Tab--color--violet{border-bottom-color:#5a30b5}.theme-paper .Tabs--vertical .Tab--selected.Tab--color--violet{border-right-color:#5a30b5}.theme-paper .Tab--selected.Tab--color--purple{color:#b455d4}.theme-paper .Tabs--horizontal .Tab--selected.Tab--color--purple{border-bottom-color:#932eb4}.theme-paper .Tabs--vertical .Tab--selected.Tab--color--purple{border-right-color:#932eb4}.theme-paper .Tab--selected.Tab--color--pink{color:#e558a7}.theme-paper .Tabs--horizontal .Tab--selected.Tab--color--pink{border-bottom-color:#db228a}.theme-paper .Tabs--vertical .Tab--selected.Tab--color--pink{border-right-color:#db228a}.theme-paper .Tab--selected.Tab--color--brown{color:#c0825a}.theme-paper .Tabs--horizontal .Tab--selected.Tab--color--brown{border-bottom-color:#955d39}.theme-paper .Tabs--vertical .Tab--selected.Tab--color--brown{border-right-color:#955d39}.theme-paper .Tab--selected.Tab--color--grey{color:#8f8f8f}.theme-paper .Tabs--horizontal .Tab--selected.Tab--color--grey{border-bottom-color:#6a6a6a}.theme-paper .Tabs--vertical .Tab--selected.Tab--color--grey{border-right-color:#6a6a6a}.theme-paper .Tab--selected.Tab--color--light-grey{color:#b3b3b3}.theme-paper .Tabs--horizontal .Tab--selected.Tab--color--light-grey{border-bottom-color:#999}.theme-paper .Tabs--vertical .Tab--selected.Tab--color--light-grey{border-right-color:#999}.theme-paper .Tab--selected.Tab--color--good{color:#77d23b}.theme-paper .Tabs--horizontal .Tab--selected.Tab--color--good{border-bottom-color:#529923}.theme-paper .Tabs--vertical .Tab--selected.Tab--color--good{border-right-color:#529923}.theme-paper .Tab--selected.Tab--color--average{color:#f3a23a}.theme-paper .Tabs--horizontal .Tab--selected.Tab--color--average{border-bottom-color:#da810e}.theme-paper .Tabs--vertical .Tab--selected.Tab--color--average{border-right-color:#da810e}.theme-paper .Tab--selected.Tab--color--bad{color:#e14d4d}.theme-paper .Tabs--horizontal .Tab--selected.Tab--color--bad{border-bottom-color:#c82121}.theme-paper .Tabs--vertical .Tab--selected.Tab--color--bad{border-right-color:#c82121}.theme-paper .Tab--selected.Tab--color--label{color:#91a1b4}.theme-paper .Tabs--horizontal .Tab--selected.Tab--color--label{border-bottom-color:#6d819b}.theme-paper .Tabs--vertical .Tab--selected.Tab--color--label{border-right-color:#6d819b}.theme-paper .Section{position:relative;margin-bottom:.5em;background-color:#d6d6d6;background-color:rgba(0,0,0,.1);box-sizing:border-box}.theme-paper .Section:last-child{margin-bottom:0}.theme-paper .Section__title{position:relative;padding:.5em;border-bottom:.1666666667em solid #fff}.theme-paper .Section__titleText{font-size:1.1666666667em;font-weight:bold;color:#000}.theme-paper .Section__buttons{position:absolute;display:inline-block;right:.5em;margin-top:-.0833333333em}.theme-paper .Section__rest{position:relative}.theme-paper .Section__content{padding:.66em .5em}.theme-paper .Section--fitted>.Section__rest>.Section__content{padding:0}.theme-paper .Section--fill{display:flex;flex-direction:column;height:100%}.theme-paper .Section--fill>.Section__rest{flex-grow:1}.theme-paper .Section--fill>.Section__rest>.Section__content{height:100%}.theme-paper .Section--fill.Section--scrollable>.Section__rest>.Section__content{position:absolute;top:0;left:0;right:0;bottom:0}.theme-paper .Section--fill.Section--iefix{display:table !important;width:100% !important;height:100% !important;border-collapse:collapse;border-spacing:0}.theme-paper .Section--fill.Section--iefix>.Section__rest{display:table-row !important;height:100% !important}.theme-paper .Section--scrollable{overflow-x:hidden;overflow-y:hidden}.theme-paper .Section--scrollable>.Section__rest>.Section__content{overflow-y:scroll;overflow-x:hidden}.theme-paper .Section .Section{background-color:transparent;margin-left:-0.5em;margin-right:-0.5em}.theme-paper .Section .Section:first-child{margin-top:-0.5em}.theme-paper .Section .Section .Section__titleText{font-size:1.0833333333em}.theme-paper .Section .Section .Section .Section__titleText{font-size:1em}.theme-paper .Button{position:relative;display:inline-block;line-height:1.667em;padding:0 .5em;margin-right:.1666666667em;white-space:nowrap;outline:0;border-radius:.16em;margin-bottom:.1666666667em;user-select:none;-ms-user-select:none}.theme-paper .Button:last-child{margin-right:0;margin-bottom:0}.theme-paper .Button .fa,.theme-paper .Button .fa-solid,.theme-paper .Button .fa-regular{margin-left:0;margin-right:0;min-width:1.333em;text-align:center}.theme-paper .Button--hasContent .fa,.theme-paper .Button--hasContent .fa-solid,.theme-paper .Button--hasContent .fa-regular{margin-right:.25em}.theme-paper .Button--hasContent.Button--iconPosition--right .fa,.theme-paper .Button--hasContent.Button--iconPosition--right .fas,.theme-paper .Button--hasContent.Button--iconPosition--right .far{margin-right:0px;margin-left:3px}.theme-paper .Button--ellipsis{overflow:hidden;text-overflow:ellipsis}.theme-paper .Button--ellipsis .Button__content{overflow:hidden;text-overflow:ellipsis}.theme-paper .Button--fluid{display:block;margin-left:0;margin-right:0}.theme-paper .Button--circular{border-radius:50%}.theme-paper .Button--compact{padding:0 .25em;line-height:1.333em}.theme-paper .Button--color--black{transition:color 50ms,background-color 50ms;background-color:#404040;color:#fff}.theme-paper .Button--color--black:hover{transition:color 0ms,background-color 0ms}.theme-paper .Button--color--black:focus{transition:color 100ms,background-color 100ms}.theme-paper .Button--color--black:hover,.theme-paper .Button--color--black:focus{background-color:#5d5d5d;color:#fff}.theme-paper .Button--color--black:active{background-color:#797979}.theme-paper .Button--color--white{transition:color 50ms,background-color 50ms;background-color:#fff;color:#000}.theme-paper .Button--color--white:hover{transition:color 0ms,background-color 0ms}.theme-paper .Button--color--white:focus{transition:color 100ms,background-color 100ms}.theme-paper .Button--color--white:hover,.theme-paper .Button--color--white:focus{background-color:#fff;color:#000}.theme-paper .Button--color--white:active{background-color:#fff}.theme-paper .Button--color--red{transition:color 50ms,background-color 50ms;background-color:#e45e5e;color:#fff}.theme-paper .Button--color--red:hover{transition:color 0ms,background-color 0ms}.theme-paper .Button--color--red:focus{transition:color 100ms,background-color 100ms}.theme-paper .Button--color--red:hover,.theme-paper .Button--color--red:focus{background-color:#f1a8a8;color:#fff}.theme-paper .Button--color--red:active{background-color:#fcefef}.theme-paper .Button--color--orange{transition:color 50ms,background-color 50ms;background-color:#f59555;color:#000}.theme-paper .Button--color--orange:hover{transition:color 0ms,background-color 0ms}.theme-paper .Button--color--orange:focus{transition:color 100ms,background-color 100ms}.theme-paper .Button--color--orange:hover,.theme-paper .Button--color--orange:focus{background-color:#fac9a8;color:#000}.theme-paper .Button--color--orange:active{background-color:#fef5ee}.theme-paper .Button--color--yellow{transition:color 50ms,background-color 50ms;background-color:#fce046;color:#000}.theme-paper .Button--color--yellow:hover{transition:color 0ms,background-color 0ms}.theme-paper .Button--color--yellow:focus{transition:color 100ms,background-color 100ms}.theme-paper .Button--color--yellow:hover,.theme-paper .Button--color--yellow:focus{background-color:#feee9b;color:#000}.theme-paper .Button--color--yellow:active{background-color:#fffced}.theme-paper .Button--color--olive{transition:color 50ms,background-color 50ms;background-color:#d3e942;color:#000}.theme-paper .Button--color--olive:hover{transition:color 0ms,background-color 0ms}.theme-paper .Button--color--olive:focus{transition:color 100ms,background-color 100ms}.theme-paper .Button--color--olive:hover,.theme-paper .Button--color--olive:focus{background-color:#e5f28c;color:#000}.theme-paper .Button--color--olive:active{background-color:#f5fbd6}.theme-paper .Button--color--green{transition:color 50ms,background-color 50ms;background-color:#40dc65;color:#000}.theme-paper .Button--color--green:hover{transition:color 0ms,background-color 0ms}.theme-paper .Button--color--green:focus{transition:color 100ms,background-color 100ms}.theme-paper .Button--color--green:hover,.theme-paper .Button--color--green:focus{background-color:#84e99c;color:#000}.theme-paper .Button--color--green:active{background-color:#c9f6d3}.theme-paper .Button--color--teal{transition:color 50ms,background-color 50ms;background-color:#08fff4;color:#000}.theme-paper .Button--color--teal:hover{transition:color 0ms,background-color 0ms}.theme-paper .Button--color--teal:focus{transition:color 100ms,background-color 100ms}.theme-paper .Button--color--teal:hover,.theme-paper .Button--color--teal:focus{background-color:#56fff8;color:#000}.theme-paper .Button--color--teal:active{background-color:#a4fffb}.theme-paper .Button--color--blue{transition:color 50ms,background-color 50ms;background-color:#51a5e3;color:#fff}.theme-paper .Button--color--blue:hover{transition:color 0ms,background-color 0ms}.theme-paper .Button--color--blue:focus{transition:color 100ms,background-color 100ms}.theme-paper .Button--color--blue:hover,.theme-paper .Button--color--blue:focus{background-color:#9acbef;color:#fff}.theme-paper .Button--color--blue:active{background-color:#e3f0fb}.theme-paper .Button--color--violet{transition:color 50ms,background-color 50ms;background-color:#8b67d7;color:#fff}.theme-paper .Button--color--violet:hover{transition:color 0ms,background-color 0ms}.theme-paper .Button--color--violet:focus{transition:color 100ms,background-color 100ms}.theme-paper .Button--color--violet:hover,.theme-paper .Button--color--violet:focus{background-color:#bface9;color:#fff}.theme-paper .Button--color--violet:active{background-color:#f3effb}.theme-paper .Button--color--purple{transition:color 50ms,background-color 50ms;background-color:#bb64d8;color:#fff}.theme-paper .Button--color--purple:hover{transition:color 0ms,background-color 0ms}.theme-paper .Button--color--purple:focus{transition:color 100ms,background-color 100ms}.theme-paper .Button--color--purple:hover,.theme-paper .Button--color--purple:focus{background-color:#d9a9e9;color:#fff}.theme-paper .Button--color--purple:active{background-color:#f7edfa}.theme-paper .Button--color--pink{transition:color 50ms,background-color 50ms;background-color:#e86bb1;color:#fff}.theme-paper .Button--color--pink:hover{transition:color 0ms,background-color 0ms}.theme-paper .Button--color--pink:focus{transition:color 100ms,background-color 100ms}.theme-paper .Button--color--pink:hover,.theme-paper .Button--color--pink:focus{background-color:#f4b7d9;color:#fff}.theme-paper .Button--color--pink:active{background-color:#fdf0f7}.theme-paper .Button--color--brown{transition:color 50ms,background-color 50ms;background-color:#c58b66;color:#fff}.theme-paper .Button--color--brown:hover{transition:color 0ms,background-color 0ms}.theme-paper .Button--color--brown:focus{transition:color 100ms,background-color 100ms}.theme-paper .Button--color--brown:hover,.theme-paper .Button--color--brown:focus{background-color:#dbb9a2;color:#fff}.theme-paper .Button--color--brown:active{background-color:#f3e6df}.theme-paper .Button--color--grey{transition:color 50ms,background-color 50ms;background-color:#989898;color:#fff}.theme-paper .Button--color--grey:hover{transition:color 0ms,background-color 0ms}.theme-paper .Button--color--grey:focus{transition:color 100ms,background-color 100ms}.theme-paper .Button--color--grey:hover,.theme-paper .Button--color--grey:focus{background-color:#c2c2c2;color:#fff}.theme-paper .Button--color--grey:active{background-color:#ededed}.theme-paper .Button--color--light-grey{transition:color 50ms,background-color 50ms;background-color:#bfbfbf;color:#000}.theme-paper .Button--color--light-grey:hover{transition:color 0ms,background-color 0ms}.theme-paper .Button--color--light-grey:focus{transition:color 100ms,background-color 100ms}.theme-paper .Button--color--light-grey:hover,.theme-paper .Button--color--light-grey:focus{background-color:#efefef;color:#000}.theme-paper .Button--color--light-grey:active{background-color:#f9f9f9}.theme-paper .Button--color--good{transition:color 50ms,background-color 50ms;background-color:#80d547;color:#000}.theme-paper .Button--color--good:hover{transition:color 0ms,background-color 0ms}.theme-paper .Button--color--good:focus{transition:color 100ms,background-color 100ms}.theme-paper .Button--color--good:hover,.theme-paper .Button--color--good:focus{background-color:#aee489;color:#000}.theme-paper .Button--color--good:active{background-color:#dbf3cb}.theme-paper .Button--color--average{transition:color 50ms,background-color 50ms;background-color:#f4ab4d;color:#000}.theme-paper .Button--color--average:hover{transition:color 0ms,background-color 0ms}.theme-paper .Button--color--average:focus{transition:color 100ms,background-color 100ms}.theme-paper .Button--color--average:hover,.theme-paper .Button--color--average:focus{background-color:#f9d29e;color:#000}.theme-paper .Button--color--average:active{background-color:#fef7ed}.theme-paper .Button--color--bad{transition:color 50ms,background-color 50ms;background-color:#e45e5e;color:#fff}.theme-paper .Button--color--bad:hover{transition:color 0ms,background-color 0ms}.theme-paper .Button--color--bad:focus{transition:color 100ms,background-color 100ms}.theme-paper .Button--color--bad:hover,.theme-paper .Button--color--bad:focus{background-color:#f1a8a8;color:#fff}.theme-paper .Button--color--bad:active{background-color:#fcefef}.theme-paper .Button--color--label{transition:color 50ms,background-color 50ms;background-color:#9eacbd;color:#000}.theme-paper .Button--color--label:hover{transition:color 0ms,background-color 0ms}.theme-paper .Button--color--label:focus{transition:color 100ms,background-color 100ms}.theme-paper .Button--color--label:hover,.theme-paper .Button--color--label:focus{background-color:#d4dae2;color:#000}.theme-paper .Button--color--label:active{background-color:#f5f7f9}.theme-paper .Button--color--default{transition:color 50ms,background-color 50ms;background-color:#e8e4c9;color:#000}.theme-paper .Button--color--default:hover{transition:color 0ms,background-color 0ms}.theme-paper .Button--color--default:focus{transition:color 100ms,background-color 100ms}.theme-paper .Button--color--default:hover,.theme-paper .Button--color--default:focus{background-color:#fbfaf6;color:#000}.theme-paper .Button--color--default:active{background-color:#fdfcfa}.theme-paper .Button--color--caution{transition:color 50ms,background-color 50ms;background-color:#be6209;color:#fff}.theme-paper .Button--color--caution:hover{transition:color 0ms,background-color 0ms}.theme-paper .Button--color--caution:focus{transition:color 100ms,background-color 100ms}.theme-paper .Button--color--caution:hover,.theme-paper .Button--color--caution:focus{background-color:#ec8420;color:#fff}.theme-paper .Button--color--caution:active{background-color:#f2a75d}.theme-paper .Button--color--danger{transition:color 50ms,background-color 50ms;background-color:#9a9d00;color:#fff}.theme-paper .Button--color--danger:hover{transition:color 0ms,background-color 0ms}.theme-paper .Button--color--danger:focus{transition:color 100ms,background-color 100ms}.theme-paper .Button--color--danger:hover,.theme-paper .Button--color--danger:focus{background-color:#c4c813;color:#fff}.theme-paper .Button--color--danger:active{background-color:#eef226}.theme-paper .Button--color--transparent{transition:color 50ms,background-color 50ms;background-color:#eee;color:#000;background-color:rgba(238,238,238,0);color:rgba(0,0,0,.5)}.theme-paper .Button--color--transparent:hover{transition:color 0ms,background-color 0ms}.theme-paper .Button--color--transparent:focus{transition:color 100ms,background-color 100ms}.theme-paper .Button--color--transparent:hover,.theme-paper .Button--color--transparent:focus{background-color:#fcfcfc;color:#000}.theme-paper .Button--color--transparent:active{background-color:#fdfdfd}.theme-paper .Button--disabled{background-color:#363636 !important}.theme-paper .Button--selected{transition:color 50ms,background-color 50ms;background-color:#9d0808;color:#fff}.theme-paper .Button--selected:hover{transition:color 0ms,background-color 0ms}.theme-paper .Button--selected:focus{transition:color 100ms,background-color 100ms}.theme-paper .Button--selected:hover,.theme-paper .Button--selected:focus{background-color:#c81c1c;color:#fff}.theme-paper .Button--selected:active{background-color:#ec3737}.theme-paper .Button--flex{display:inline-flex;flex-direction:column}.theme-paper .Button--flex--fluid{width:100%}.theme-paper .Button--verticalAlignContent--top{justify-content:flex-start}.theme-paper .Button--verticalAlignContent--middle{justify-content:center}.theme-paper .Button--verticalAlignContent--bottom{justify-content:flex-end}.theme-paper .Button__content{display:block;align-self:stretch}.theme-paper .Input{position:relative;display:inline-block;width:10em;border:.0833333333em solid #88bfff;border:.0833333333em solid rgba(136,191,255,.75);border-radius:.16em;color:#000;background-color:#0a0a0a;padding:0 .3333333333em;margin-right:.1666666667em;line-height:1.4166666667em;overflow:visible}.theme-paper .Input--fluid{display:block;width:auto}.theme-paper .Input__baseline{display:inline-block;color:transparent}.theme-paper .Input__input{display:block;position:absolute;top:0;bottom:0;left:0;right:0;border:0;outline:0;width:100%;font-size:1em;line-height:1.4166666667em;height:1.4166666667em;margin:0;padding:0 .5em;font-family:Verdana,sans-serif;background-color:transparent;color:#000;color:inherit}.theme-paper .Input__input:-ms-input-placeholder{font-style:italic;color:#777;color:rgba(255,255,255,.45)}.theme-paper .Input--monospace .Input__input{font-family:"Consolas",monospace}.theme-paper .TextArea{position:relative;display:inline-block;border:.0833333333em solid #88bfff;border:.0833333333em solid rgba(136,191,255,.75);border-radius:.16em;background-color:#ddd;margin-right:.1666666667em;line-height:1.4166666667em;box-sizing:border-box;width:100%}.theme-paper .TextArea--fluid{display:block;width:auto;height:auto}.theme-paper .TextArea__textarea{display:block;position:absolute;top:0;bottom:0;left:0;right:0;border:0;outline:0;width:100%;height:100%;font-size:1em;line-height:1.4166666667em;min-height:1.4166666667em;margin:0;padding:0 .5em;font-family:inherit;background-color:transparent;color:inherit;box-sizing:border-box;word-wrap:break-word;overflow:hidden}.theme-paper .TextArea__textarea:-ms-input-placeholder{font-style:italic;color:#777;color:rgba(255,255,255,.45)}.theme-paper .Layout,.theme-paper .Layout *{scrollbar-base-color:#b3b3b3;scrollbar-face-color:#f0f0f0;scrollbar-3dlight-color:#eee;scrollbar-highlight-color:#eee;scrollbar-track-color:#b3b3b3;scrollbar-arrow-color:#f7f7f7;scrollbar-shadow-color:#f0f0f0}.theme-paper .Layout__content{position:absolute;top:0;bottom:0;left:0;right:0;overflow-x:hidden;overflow-y:hidden}.theme-paper .Layout__content--scrollable{overflow-y:scroll;margin-bottom:0}.theme-paper .Window{position:fixed;top:0;bottom:0;left:0;right:0;color:#000;background-color:#eee;background-image:linear-gradient(to bottom, #eeeeee 0%, #eeeeee 100%)}.theme-paper .Window__titleBar{position:fixed;z-index:1;top:0;left:0;width:100%;height:32px;height:2.6666666667rem}.theme-paper .Window__rest{position:fixed;top:32px;top:2.6666666667rem;bottom:0;left:0;right:0}.theme-paper .Window__contentPadding{margin:.5rem;height:calc(100% - 1.01rem)}.theme-paper .Window__contentPadding:after{height:0}.theme-paper .Layout__content--scrollable .Window__contentPadding:after{display:block;content:"";height:.5rem}.theme-paper .Window__dimmer{position:fixed;top:0;bottom:0;left:0;right:0;background-color:rgba(252,252,252,.25);pointer-events:none}.theme-paper .Window__resizeHandle__se{position:fixed;bottom:0;right:0;width:20px;width:1.6666666667rem;height:20px;height:1.6666666667rem;cursor:se-resize}.theme-paper .Window__resizeHandle__s{position:fixed;bottom:0;left:0;right:0;height:6px;height:.5rem;cursor:s-resize}.theme-paper .Window__resizeHandle__e{position:fixed;top:0;bottom:0;right:0;width:3px;width:.25rem;cursor:e-resize}.theme-paper .TitleBar{background-color:#eee;border-bottom:1px solid rgba(0,0,0,.25);box-shadow:0 2px 2px rgba(0,0,0,.1);box-shadow:0 .1666666667rem .1666666667rem rgba(0,0,0,.1);user-select:none;-ms-user-select:none}.theme-paper .TitleBar__clickable{color:rgba(0,0,0,.5);background-color:#eee;transition:color 250ms ease-out,background-color 250ms ease-out}.theme-paper .TitleBar__clickable:hover{color:#fff;background-color:#c00;transition:color 0ms,background-color 0ms}.theme-paper .TitleBar__title{position:absolute;top:0;left:46px;left:3.8333333333rem;color:rgba(0,0,0,.75);font-size:14px;font-size:1.1666666667rem;line-height:31px;line-height:2.5833333333rem;white-space:nowrap}.theme-paper .TitleBar__dragZone{position:absolute;top:0;left:0;right:0;height:32px;height:2.6666666667rem}.theme-paper .TitleBar__statusIcon{position:absolute;top:0;left:12px;left:1rem;transition:color .5s;font-size:20px;font-size:1.6666666667rem;line-height:32px !important;line-height:2.6666666667rem !important}.theme-paper .TitleBar__close{position:absolute;top:-1px;right:0;width:45px;width:3.75rem;height:32px;height:2.6666666667rem;font-size:20px;font-size:1.6666666667rem;line-height:31px;line-height:2.5833333333rem;text-align:center}.theme-paper .TitleBar__devBuildIndicator{position:absolute;top:6px;top:.5rem;right:52px;right:4.3333333333rem;min-width:20px;min-width:1.6666666667rem;padding:2px 4px;padding:.1666666667rem .3333333333rem;background-color:rgba(91,170,39,.75);color:#fff;text-align:center}.theme-paper .PaperInput{position:relative;display:inline-block;width:120px;border:none;background:transparent;border-bottom:1px solid #000;outline:none;background-color:rgba(255,255,62,.8);padding:0 4px;margin-right:2px;line-height:17px;overflow:visible}.theme-paper .PaperInput__baseline{display:inline-block;color:transparent}.theme-paper .PaperInput__input{display:block;position:absolute;top:0;bottom:0;left:0;right:0;border:0;outline:0;width:100%;font-size:12px;line-height:17px;height:17px;margin:0;padding:0 6px;font-family:Verdana,sans-serif;background-color:transparent;color:#fff;color:inherit}.theme-paper .PaperInput__input:-ms-input-placeholder{font-style:italic;color:#777;color:rgba(255,255,255,.45)}.theme-paper .Layout__content{background-image:none}.theme-paper .Window{background-image:none;color:#000}.theme-paper .paper-text input:disabled{position:relative;display:inline-block;border:none;background:transparent;border-bottom:1px solid #000;outline:none;background-color:rgba(255,255,62,.8);padding:0 4px;margin-right:2px;line-height:17px;overflow:visible}.theme-paper .paper-text input{position:relative;display:inline-block;border:none;background:transparent;border-bottom:1px solid #000;outline:none;background-color:rgba(255,255,62,.8);padding:0 4px;margin-right:2px;line-height:17px;overflow:visible}.theme-paper .paper-field{position:relative;display:inline-block;border:none;background:transparent;border-bottom:1px solid #000;outline:none;background-color:rgba(255,255,62,.8);padding:0 4px;margin-right:2px;line-height:17px;overflow:visible}.theme-paper .paper-field input:disabled{position:relative;display:inline-block;border:none;background:transparent;border-bottom:1px solid #000;outline:none;background-color:rgba(255,255,62,.8);padding:0 4px;margin-right:2px;line-height:17px;overflow:visible}.theme-paper .artifactType3{background-color:#c9acac}.theme-paper .artifactType2{background-color:#ccc6b0}.theme-paper .artifactType1{background-color:#adc2d3} .theme-retro-dark .Button{position:relative;display:inline-block;line-height:1.667em;padding:0 .5em;margin-right:.1666666667em;white-space:nowrap;outline:0;border-radius:.16em;margin-bottom:.1666666667em;user-select:none;-ms-user-select:none}.theme-retro-dark .Button:last-child{margin-right:0;margin-bottom:0}.theme-retro-dark .Button .fa,.theme-retro-dark .Button .fa-solid,.theme-retro-dark .Button .fa-regular{margin-left:0;margin-right:0;min-width:1.333em;text-align:center}.theme-retro-dark .Button--hasContent .fa,.theme-retro-dark .Button--hasContent .fa-solid,.theme-retro-dark .Button--hasContent .fa-regular{margin-right:.25em}.theme-retro-dark .Button--hasContent.Button--iconPosition--right .fa,.theme-retro-dark .Button--hasContent.Button--iconPosition--right .fas,.theme-retro-dark .Button--hasContent.Button--iconPosition--right .far{margin-right:0px;margin-left:3px}.theme-retro-dark .Button--ellipsis{overflow:hidden;text-overflow:ellipsis}.theme-retro-dark .Button--ellipsis .Button__content{overflow:hidden;text-overflow:ellipsis}.theme-retro-dark .Button--fluid{display:block;margin-left:0;margin-right:0}.theme-retro-dark .Button--circular{border-radius:50%}.theme-retro-dark .Button--compact{padding:0 .25em;line-height:1.333em}.theme-retro-dark .Button--color--default{transition:color 50ms,background-color 50ms;background-color:#fdc185;color:#000}.theme-retro-dark .Button--color--default:hover{transition:color 0ms,background-color 0ms}.theme-retro-dark .Button--color--default:focus{transition:color 100ms,background-color 100ms}.theme-retro-dark .Button--color--default:hover,.theme-retro-dark .Button--color--default:focus{background-color:#fff1e4;color:#000}.theme-retro-dark .Button--color--default:active{background-color:#fff9f3}.theme-retro-dark .Button--color--caution{transition:color 50ms,background-color 50ms;background-color:#be6209;color:#fff}.theme-retro-dark .Button--color--caution:hover{transition:color 0ms,background-color 0ms}.theme-retro-dark .Button--color--caution:focus{transition:color 100ms,background-color 100ms}.theme-retro-dark .Button--color--caution:hover,.theme-retro-dark .Button--color--caution:focus{background-color:#ec8420;color:#fff}.theme-retro-dark .Button--color--caution:active{background-color:#f2a75d}.theme-retro-dark .Button--color--danger{transition:color 50ms,background-color 50ms;background-color:#9a9d00;color:#fff}.theme-retro-dark .Button--color--danger:hover{transition:color 0ms,background-color 0ms}.theme-retro-dark .Button--color--danger:focus{transition:color 100ms,background-color 100ms}.theme-retro-dark .Button--color--danger:hover,.theme-retro-dark .Button--color--danger:focus{background-color:#c4c813;color:#fff}.theme-retro-dark .Button--color--danger:active{background-color:#eef226}.theme-retro-dark .Button--color--transparent{transition:color 50ms,background-color 50ms;background-color:#301f0a;color:#fff;background-color:rgba(48,31,10,0);color:#fda751}.theme-retro-dark .Button--color--transparent:hover{transition:color 0ms,background-color 0ms}.theme-retro-dark .Button--color--transparent:focus{transition:color 100ms,background-color 100ms}.theme-retro-dark .Button--color--transparent:hover,.theme-retro-dark .Button--color--transparent:focus{background-color:#4a371f;color:#fff}.theme-retro-dark .Button--color--transparent:active{background-color:#654f33}.theme-retro-dark .Button--disabled{background-color:#5e5e5e !important}.theme-retro-dark .Button--selected{transition:color 50ms,background-color 50ms;background-color:#226d0f;color:#fff}.theme-retro-dark .Button--selected:hover{transition:color 0ms,background-color 0ms}.theme-retro-dark .Button--selected:focus{transition:color 100ms,background-color 100ms}.theme-retro-dark .Button--selected:hover,.theme-retro-dark .Button--selected:focus{background-color:#3a9125;color:#fff}.theme-retro-dark .Button--selected:active{background-color:#52b43a}.theme-retro-dark .Button--flex{display:inline-flex;flex-direction:column}.theme-retro-dark .Button--flex--fluid{width:100%}.theme-retro-dark .Button--verticalAlignContent--top{justify-content:flex-start}.theme-retro-dark .Button--verticalAlignContent--middle{justify-content:center}.theme-retro-dark .Button--verticalAlignContent--bottom{justify-content:flex-end}.theme-retro-dark .Button__content{display:block;align-self:stretch}.theme-retro-dark .ProgressBar{display:flex;position:relative;width:100%;padding:0 .5em;border-width:.0833333333em !important;border-style:solid !important;border-radius:.16em;background-color:rgba(68,46,26,.5);transition:border-color 900ms ease-out;align-items:center}.theme-retro-dark .ProgressBar__fill{position:absolute;top:-0.5px;left:0px;bottom:-0.5px}.theme-retro-dark .ProgressBar__fill--animated{transition:background-color 900ms ease-out,width 900ms ease-out}.theme-retro-dark .ProgressBar__content{position:relative;line-height:1.4166666667em;width:100%;text-align:right}.theme-retro-dark .ProgressBar--color--default{border:.0833333333em solid #fc8e1f}.theme-retro-dark .ProgressBar--color--default .ProgressBar__fill{background-color:#fc8e1f}.theme-retro-dark .Knob{position:relative;font-size:1rem;width:2.6em;height:2.6em;margin:0 auto;margin-bottom:-0.2em;cursor:n-resize}.theme-retro-dark .Knob:after{content:".";color:transparent;line-height:2.5em}.theme-retro-dark .Knob__circle{position:absolute;top:.1em;bottom:.1em;left:.1em;right:.1em;margin:.3em;background-color:#333;background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.15) 0%, rgba(255, 255, 255, 0) 100%);border-radius:50%;box-shadow:0 .05em .5em 0 rgba(0,0,0,.5)}.theme-retro-dark .Knob__cursorBox{position:absolute;top:0;bottom:0;left:0;right:0}.theme-retro-dark .Knob__cursor{position:relative;top:.05em;margin:0 auto;width:.2em;height:.8em;background-color:rgba(255,255,255,.9)}.theme-retro-dark .Knob__popupValue{position:absolute;top:-2rem;right:50%;font-size:1rem;text-align:center;padding:.25rem .5rem;color:#fff;background-color:#000;transform:translateX(50%);white-space:nowrap}.theme-retro-dark .Knob__ring{position:absolute;top:0;bottom:0;left:0;right:0;padding:.1em}.theme-retro-dark .Knob__ringTrackPivot{transform:rotateZ(135deg)}.theme-retro-dark .Knob__ringTrack{fill:transparent;stroke:rgba(255,255,255,.1);stroke-width:8;stroke-linecap:round;stroke-dasharray:235.62}.theme-retro-dark .Knob__ringFillPivot{transform:rotateZ(135deg)}.theme-retro-dark .Knob--bipolar .Knob__ringFillPivot{transform:rotateZ(270deg)}.theme-retro-dark .Knob__ringFill{fill:transparent;stroke:#fda751;stroke-width:8;stroke-linecap:round;stroke-dasharray:314.16;transition:stroke 50ms ease-out}.theme-retro-dark .Input{position:relative;display:inline-block;width:10em;border:.0833333333em solid #fda751;border:.0833333333em solid rgba(253,167,81,.75);border-radius:.16em;color:#fdc185;background-color:#0a0a0a;padding:0 .3333333333em;margin-right:.1666666667em;line-height:1.4166666667em;overflow:visible}.theme-retro-dark .Input--fluid{display:block;width:auto}.theme-retro-dark .Input__baseline{display:inline-block;color:transparent}.theme-retro-dark .Input__input{display:block;position:absolute;top:0;bottom:0;left:0;right:0;border:0;outline:0;width:100%;font-size:1em;line-height:1.4166666667em;height:1.4166666667em;margin:0;padding:0 .5em;font-family:Verdana,sans-serif;background-color:transparent;color:#fdc185;color:inherit}.theme-retro-dark .Input__input:-ms-input-placeholder{font-style:italic;color:#777;color:rgba(255,255,255,.45)}.theme-retro-dark .Input--monospace .Input__input{font-family:"Consolas",monospace}.theme-retro-dark .BlockQuote{color:#fda751;border-left:.1666666667em solid #fda751;padding-left:.5em;margin-bottom:.5em}.theme-retro-dark .BlockQuote:last-child{margin-bottom:0}.theme-retro-dark .Input{position:relative;display:inline-block;width:10em;border:.0833333333em solid #fda751;border:.0833333333em solid rgba(253,167,81,.75);border-radius:.16em;color:#fdc185;background-color:#0a0a0a;padding:0 .3333333333em;margin-right:.1666666667em;line-height:1.4166666667em;overflow:visible}.theme-retro-dark .Input--fluid{display:block;width:auto}.theme-retro-dark .Input__baseline{display:inline-block;color:transparent}.theme-retro-dark .Input__input{display:block;position:absolute;top:0;bottom:0;left:0;right:0;border:0;outline:0;width:100%;font-size:1em;line-height:1.4166666667em;height:1.4166666667em;margin:0;padding:0 .5em;font-family:Verdana,sans-serif;background-color:transparent;color:#fdc185;color:inherit}.theme-retro-dark .Input__input:-ms-input-placeholder{font-style:italic;color:#777;color:rgba(255,255,255,.45)}.theme-retro-dark .Input--monospace .Input__input{font-family:"Consolas",monospace}.theme-retro-dark .NumberInput{position:relative;display:inline-block;border:.0833333333em solid #fdb062;border:.0833333333em solid rgba(253,176,98,.75);border-radius:.16em;color:#fdb062;background-color:#0a0a0a;padding:0 .3333333333em;margin-right:.1666666667em;line-height:1.4166666667em;text-align:right;overflow:visible;cursor:n-resize}.theme-retro-dark .NumberInput--fluid{display:block}.theme-retro-dark .NumberInput__content{margin-left:.5em}.theme-retro-dark .NumberInput__barContainer{position:absolute;top:.1666666667em;bottom:.1666666667em;left:.1666666667em}.theme-retro-dark .NumberInput__bar{position:absolute;bottom:0;left:0;width:.25em;box-sizing:border-box;border-bottom:.0833333333em solid #fdb062;background-color:#fdb062}.theme-retro-dark .NumberInput__input{display:block;position:absolute;top:0;bottom:0;left:0;right:0;border:0;outline:0;width:100%;font-size:1em;line-height:1.4166666667em;height:1.4166666667em;margin:0;padding:0 .5em;font-family:Verdana,sans-serif;background-color:#0a0a0a;color:#fdc185;text-align:right}.theme-retro-dark .Section{position:relative;margin-bottom:.5em;background-color:#201507;background-color:rgba(0,0,0,.33);box-sizing:border-box}.theme-retro-dark .Section:last-child{margin-bottom:0}.theme-retro-dark .Section__title{position:relative;padding:.5em;border-bottom:.1666666667em solid #fda751}.theme-retro-dark .Section__titleText{font-size:1.1666666667em;font-weight:bold;color:#fdc185}.theme-retro-dark .Section__buttons{position:absolute;display:inline-block;right:.5em;margin-top:-.0833333333em}.theme-retro-dark .Section__rest{position:relative}.theme-retro-dark .Section__content{padding:.66em .5em}.theme-retro-dark .Section--fitted>.Section__rest>.Section__content{padding:0}.theme-retro-dark .Section--fill{display:flex;flex-direction:column;height:100%}.theme-retro-dark .Section--fill>.Section__rest{flex-grow:1}.theme-retro-dark .Section--fill>.Section__rest>.Section__content{height:100%}.theme-retro-dark .Section--fill.Section--scrollable>.Section__rest>.Section__content{position:absolute;top:0;left:0;right:0;bottom:0}.theme-retro-dark .Section--fill.Section--iefix{display:table !important;width:100% !important;height:100% !important;border-collapse:collapse;border-spacing:0}.theme-retro-dark .Section--fill.Section--iefix>.Section__rest{display:table-row !important;height:100% !important}.theme-retro-dark .Section--scrollable{overflow-x:hidden;overflow-y:hidden}.theme-retro-dark .Section--scrollable>.Section__rest>.Section__content{overflow-y:scroll;overflow-x:hidden}.theme-retro-dark .Section .Section{background-color:transparent;margin-left:-0.5em;margin-right:-0.5em}.theme-retro-dark .Section .Section:first-child{margin-top:-0.5em}.theme-retro-dark .Section .Section .Section__titleText{font-size:1.0833333333em}.theme-retro-dark .Section .Section .Section .Section__titleText{font-size:1em}.theme-retro-dark .Layout,.theme-retro-dark .Layout *{scrollbar-base-color:#241708;scrollbar-face-color:#553712;scrollbar-3dlight-color:#301f0a;scrollbar-highlight-color:#301f0a;scrollbar-track-color:#241708;scrollbar-arrow-color:#d89644;scrollbar-shadow-color:#553712}.theme-retro-dark .Layout__content{position:absolute;top:0;bottom:0;left:0;right:0;overflow-x:hidden;overflow-y:hidden}.theme-retro-dark .Layout__content--scrollable{overflow-y:scroll;margin-bottom:0}.theme-retro-dark .Window{position:fixed;top:0;bottom:0;left:0;right:0;color:#fdc185;background-color:#301f0a;background-image:linear-gradient(to bottom, #38240c 0%, #281a08 100%)}.theme-retro-dark .Window__titleBar{position:fixed;z-index:1;top:0;left:0;width:100%;height:32px;height:2.6666666667rem}.theme-retro-dark .Window__rest{position:fixed;top:32px;top:2.6666666667rem;bottom:0;left:0;right:0}.theme-retro-dark .Window__contentPadding{margin:.5rem;height:calc(100% - 1.01rem)}.theme-retro-dark .Window__contentPadding:after{height:0}.theme-retro-dark .Layout__content--scrollable .Window__contentPadding:after{display:block;content:"";height:.5rem}.theme-retro-dark .Window__dimmer{position:fixed;top:0;bottom:0;left:0;right:0;background-color:rgba(74,55,31,.25);pointer-events:none}.theme-retro-dark .Window__resizeHandle__se{position:fixed;bottom:0;right:0;width:20px;width:1.6666666667rem;height:20px;height:1.6666666667rem;cursor:se-resize}.theme-retro-dark .Window__resizeHandle__s{position:fixed;bottom:0;left:0;right:0;height:6px;height:.5rem;cursor:s-resize}.theme-retro-dark .Window__resizeHandle__e{position:fixed;top:0;bottom:0;right:0;width:3px;width:.25rem;cursor:e-resize}.theme-retro-dark .TitleBar{background-color:#302a23;border-bottom:1px solid #161616;box-shadow:0 2px 2px rgba(0,0,0,.1);box-shadow:0 .1666666667rem .1666666667rem rgba(0,0,0,.1);user-select:none;-ms-user-select:none}.theme-retro-dark .TitleBar__clickable{color:rgba(255,255,255,.5);background-color:#302a23;transition:color 250ms ease-out,background-color 250ms ease-out}.theme-retro-dark .TitleBar__clickable:hover{color:#fff;background-color:#c00;transition:color 0ms,background-color 0ms}.theme-retro-dark .TitleBar__title{position:absolute;top:0;left:46px;left:3.8333333333rem;color:rgba(255,255,255,.75);font-size:14px;font-size:1.1666666667rem;line-height:31px;line-height:2.5833333333rem;white-space:nowrap}.theme-retro-dark .TitleBar__dragZone{position:absolute;top:0;left:0;right:0;height:32px;height:2.6666666667rem}.theme-retro-dark .TitleBar__statusIcon{position:absolute;top:0;left:12px;left:1rem;transition:color .5s;font-size:20px;font-size:1.6666666667rem;line-height:32px !important;line-height:2.6666666667rem !important}.theme-retro-dark .TitleBar__close{position:absolute;top:-1px;right:0;width:45px;width:3.75rem;height:32px;height:2.6666666667rem;font-size:20px;font-size:1.6666666667rem;line-height:31px;line-height:2.5833333333rem;text-align:center}.theme-retro-dark .TitleBar__devBuildIndicator{position:absolute;top:6px;top:.5rem;right:52px;right:4.3333333333rem;min-width:20px;min-width:1.6666666667rem;padding:2px 4px;padding:.1666666667rem .3333333333rem;background-color:rgba(91,170,39,.75);color:#fff;text-align:center} -.theme-syndicate .Button{position:relative;display:inline-block;line-height:1.667em;padding:0 .5em;margin-right:.1666666667em;white-space:nowrap;outline:0;border-radius:.16em;margin-bottom:.1666666667em;user-select:none;-ms-user-select:none}.theme-syndicate .Button:last-child{margin-right:0;margin-bottom:0}.theme-syndicate .Button .fa,.theme-syndicate .Button .fa-solid,.theme-syndicate .Button .fa-regular{margin-left:0;margin-right:0;min-width:1.333em;text-align:center}.theme-syndicate .Button--hasContent .fa,.theme-syndicate .Button--hasContent .fa-solid,.theme-syndicate .Button--hasContent .fa-regular{margin-right:.25em}.theme-syndicate .Button--hasContent.Button--iconPosition--right .fa,.theme-syndicate .Button--hasContent.Button--iconPosition--right .fas,.theme-syndicate .Button--hasContent.Button--iconPosition--right .far{margin-right:0px;margin-left:3px}.theme-syndicate .Button--ellipsis{overflow:hidden;text-overflow:ellipsis}.theme-syndicate .Button--ellipsis .Button__content{overflow:hidden;text-overflow:ellipsis}.theme-syndicate .Button--fluid{display:block;margin-left:0;margin-right:0}.theme-syndicate .Button--circular{border-radius:50%}.theme-syndicate .Button--compact{padding:0 .25em;line-height:1.333em}.theme-syndicate .Button--color--default{transition:color 50ms,background-color 50ms;background-color:#397439;color:#fff}.theme-syndicate .Button--color--default:hover{transition:color 0ms,background-color 0ms}.theme-syndicate .Button--color--default:focus{transition:color 100ms,background-color 100ms}.theme-syndicate .Button--color--default:hover,.theme-syndicate .Button--color--default:focus{background-color:#595;color:#fff}.theme-syndicate .Button--color--default:active{background-color:#76b776}.theme-syndicate .Button--color--caution{transition:color 50ms,background-color 50ms;background-color:#be6209;color:#fff}.theme-syndicate .Button--color--caution:hover{transition:color 0ms,background-color 0ms}.theme-syndicate .Button--color--caution:focus{transition:color 100ms,background-color 100ms}.theme-syndicate .Button--color--caution:hover,.theme-syndicate .Button--color--caution:focus{background-color:#ec8420;color:#fff}.theme-syndicate .Button--color--caution:active{background-color:#f2a75d}.theme-syndicate .Button--color--danger{transition:color 50ms,background-color 50ms;background-color:#9a9d00;color:#fff}.theme-syndicate .Button--color--danger:hover{transition:color 0ms,background-color 0ms}.theme-syndicate .Button--color--danger:focus{transition:color 100ms,background-color 100ms}.theme-syndicate .Button--color--danger:hover,.theme-syndicate .Button--color--danger:focus{background-color:#c4c813;color:#fff}.theme-syndicate .Button--color--danger:active{background-color:#eef226}.theme-syndicate .Button--color--transparent{transition:color 50ms,background-color 50ms;background-color:#550202;color:#fff;background-color:rgba(85,2,2,0);color:rgba(255,255,255,.5)}.theme-syndicate .Button--color--transparent:hover{transition:color 0ms,background-color 0ms}.theme-syndicate .Button--color--transparent:focus{transition:color 100ms,background-color 100ms}.theme-syndicate .Button--color--transparent:hover,.theme-syndicate .Button--color--transparent:focus{background-color:#751616;color:#fff}.theme-syndicate .Button--color--transparent:active{background-color:#952929}.theme-syndicate .Button--disabled{background-color:#363636 !important}.theme-syndicate .Button--selected{transition:color 50ms,background-color 50ms;background-color:#9d0808;color:#fff}.theme-syndicate .Button--selected:hover{transition:color 0ms,background-color 0ms}.theme-syndicate .Button--selected:focus{transition:color 100ms,background-color 100ms}.theme-syndicate .Button--selected:hover,.theme-syndicate .Button--selected:focus{background-color:#c81c1c;color:#fff}.theme-syndicate .Button--selected:active{background-color:#ec3737}.theme-syndicate .Button--flex{display:inline-flex;flex-direction:column}.theme-syndicate .Button--flex--fluid{width:100%}.theme-syndicate .Button--verticalAlignContent--top{justify-content:flex-start}.theme-syndicate .Button--verticalAlignContent--middle{justify-content:center}.theme-syndicate .Button--verticalAlignContent--bottom{justify-content:flex-end}.theme-syndicate .Button__content{display:block;align-self:stretch}.theme-syndicate .Input{position:relative;display:inline-block;width:10em;border:.0833333333em solid #87ce87;border:.0833333333em solid rgba(135,206,135,.75);border-radius:.16em;color:#fff;background-color:#0a0a0a;padding:0 .3333333333em;margin-right:.1666666667em;line-height:1.4166666667em;overflow:visible}.theme-syndicate .Input--fluid{display:block;width:auto}.theme-syndicate .Input__baseline{display:inline-block;color:transparent}.theme-syndicate .Input__input{display:block;position:absolute;top:0;bottom:0;left:0;right:0;border:0;outline:0;width:100%;font-size:1em;line-height:1.4166666667em;height:1.4166666667em;margin:0;padding:0 .5em;font-family:Verdana,sans-serif;background-color:transparent;color:#fff;color:inherit}.theme-syndicate .Input__input:-ms-input-placeholder{font-style:italic;color:#777;color:rgba(255,255,255,.45)}.theme-syndicate .Input--monospace .Input__input{font-family:"Consolas",monospace}.theme-syndicate .NoticeBox{padding:.33em .5em;margin-bottom:.5em;box-shadow:none;font-weight:bold;font-style:italic;color:#fff;background-color:#910101;background-image:repeating-linear-gradient(-45deg, transparent, transparent 0.8333333333em, rgba(0, 0, 0, 0.1) 0.8333333333em, rgba(0, 0, 0, 0.1) 1.6666666667em)}.theme-syndicate .NoticeBox--type--info{color:#fff;background-color:#235982}.theme-syndicate .NoticeBox--type--success{color:#fff;background-color:#1e662f}.theme-syndicate .NoticeBox--type--warning{color:#fff;background-color:#a95219}.theme-syndicate .NoticeBox--type--danger{color:#fff;background-color:#8f2828}.theme-syndicate .Input{position:relative;display:inline-block;width:10em;border:.0833333333em solid #87ce87;border:.0833333333em solid rgba(135,206,135,.75);border-radius:.16em;color:#fff;background-color:#0a0a0a;padding:0 .3333333333em;margin-right:.1666666667em;line-height:1.4166666667em;overflow:visible}.theme-syndicate .Input--fluid{display:block;width:auto}.theme-syndicate .Input__baseline{display:inline-block;color:transparent}.theme-syndicate .Input__input{display:block;position:absolute;top:0;bottom:0;left:0;right:0;border:0;outline:0;width:100%;font-size:1em;line-height:1.4166666667em;height:1.4166666667em;margin:0;padding:0 .5em;font-family:Verdana,sans-serif;background-color:transparent;color:#fff;color:inherit}.theme-syndicate .Input__input:-ms-input-placeholder{font-style:italic;color:#777;color:rgba(255,255,255,.45)}.theme-syndicate .Input--monospace .Input__input{font-family:"Consolas",monospace}.theme-syndicate .NumberInput{position:relative;display:inline-block;border:.0833333333em solid #87ce87;border:.0833333333em solid rgba(135,206,135,.75);border-radius:.16em;color:#87ce87;background-color:#0a0a0a;padding:0 .3333333333em;margin-right:.1666666667em;line-height:1.4166666667em;text-align:right;overflow:visible;cursor:n-resize}.theme-syndicate .NumberInput--fluid{display:block}.theme-syndicate .NumberInput__content{margin-left:.5em}.theme-syndicate .NumberInput__barContainer{position:absolute;top:.1666666667em;bottom:.1666666667em;left:.1666666667em}.theme-syndicate .NumberInput__bar{position:absolute;bottom:0;left:0;width:.25em;box-sizing:border-box;border-bottom:.0833333333em solid #87ce87;background-color:#87ce87}.theme-syndicate .NumberInput__input{display:block;position:absolute;top:0;bottom:0;left:0;right:0;border:0;outline:0;width:100%;font-size:1em;line-height:1.4166666667em;height:1.4166666667em;margin:0;padding:0 .5em;font-family:Verdana,sans-serif;background-color:#0a0a0a;color:#fff;text-align:right}.theme-syndicate .ProgressBar{display:flex;position:relative;width:100%;padding:0 .5em;border-width:.0833333333em !important;border-style:solid !important;border-radius:.16em;background-color:rgba(0,0,0,.5);transition:border-color 900ms ease-out;align-items:center}.theme-syndicate .ProgressBar__fill{position:absolute;top:-0.5px;left:0px;bottom:-0.5px}.theme-syndicate .ProgressBar__fill--animated{transition:background-color 900ms ease-out,width 900ms ease-out}.theme-syndicate .ProgressBar__content{position:relative;line-height:1.4166666667em;width:100%;text-align:right}.theme-syndicate .ProgressBar--color--default{border:.0833333333em solid #306330}.theme-syndicate .ProgressBar--color--default .ProgressBar__fill{background-color:#306330}.theme-syndicate .Section{position:relative;margin-bottom:.5em;background-color:#390101;background-color:rgba(0,0,0,.33);box-sizing:border-box}.theme-syndicate .Section:last-child{margin-bottom:0}.theme-syndicate .Section__title{position:relative;padding:.5em;border-bottom:.1666666667em solid #397439}.theme-syndicate .Section__titleText{font-size:1.1666666667em;font-weight:bold;color:#fff}.theme-syndicate .Section__buttons{position:absolute;display:inline-block;right:.5em;margin-top:-.0833333333em}.theme-syndicate .Section__rest{position:relative}.theme-syndicate .Section__content{padding:.66em .5em}.theme-syndicate .Section--fitted>.Section__rest>.Section__content{padding:0}.theme-syndicate .Section--fill{display:flex;flex-direction:column;height:100%}.theme-syndicate .Section--fill>.Section__rest{flex-grow:1}.theme-syndicate .Section--fill>.Section__rest>.Section__content{height:100%}.theme-syndicate .Section--fill.Section--scrollable>.Section__rest>.Section__content{position:absolute;top:0;left:0;right:0;bottom:0}.theme-syndicate .Section--fill.Section--iefix{display:table !important;width:100% !important;height:100% !important;border-collapse:collapse;border-spacing:0}.theme-syndicate .Section--fill.Section--iefix>.Section__rest{display:table-row !important;height:100% !important}.theme-syndicate .Section--scrollable{overflow-x:hidden;overflow-y:hidden}.theme-syndicate .Section--scrollable>.Section__rest>.Section__content{overflow-y:scroll;overflow-x:hidden}.theme-syndicate .Section .Section{background-color:transparent;margin-left:-0.5em;margin-right:-0.5em}.theme-syndicate .Section .Section:first-child{margin-top:-0.5em}.theme-syndicate .Section .Section .Section__titleText{font-size:1.0833333333em}.theme-syndicate .Section .Section .Section .Section__titleText{font-size:1em}.theme-syndicate .Tooltip{z-index:2;padding:.5em .75em;pointer-events:none;text-align:left;transition:opacity 150ms ease-out;background-color:#4a0202;color:#fff;box-shadow:.1em .1em 1.25em -0.1em rgba(0,0,0,.5);border-radius:.16em;max-width:20.8333333333em}.theme-syndicate .Layout,.theme-syndicate .Layout *{scrollbar-base-color:#400202;scrollbar-face-color:#7e0303;scrollbar-3dlight-color:#550202;scrollbar-highlight-color:#550202;scrollbar-track-color:#400202;scrollbar-arrow-color:#fa3030;scrollbar-shadow-color:#7e0303}.theme-syndicate .Layout__content{position:absolute;top:0;bottom:0;left:0;right:0;overflow-x:hidden;overflow-y:hidden}.theme-syndicate .Layout__content--scrollable{overflow-y:scroll;margin-bottom:0}.theme-syndicate .Window{position:fixed;top:0;bottom:0;left:0;right:0;color:#fff;background-color:#550202;background-image:linear-gradient(to bottom, #730303 0%, #370101 100%)}.theme-syndicate .Window__titleBar{position:fixed;z-index:1;top:0;left:0;width:100%;height:32px;height:2.6666666667rem}.theme-syndicate .Window__rest{position:fixed;top:32px;top:2.6666666667rem;bottom:0;left:0;right:0}.theme-syndicate .Window__contentPadding{margin:.5rem;height:calc(100% - 1.01rem)}.theme-syndicate .Window__contentPadding:after{height:0}.theme-syndicate .Layout__content--scrollable .Window__contentPadding:after{display:block;content:"";height:.5rem}.theme-syndicate .Window__dimmer{position:fixed;top:0;bottom:0;left:0;right:0;background-color:rgba(117,22,22,.25);pointer-events:none}.theme-syndicate .Window__resizeHandle__se{position:fixed;bottom:0;right:0;width:20px;width:1.6666666667rem;height:20px;height:1.6666666667rem;cursor:se-resize}.theme-syndicate .Window__resizeHandle__s{position:fixed;bottom:0;left:0;right:0;height:6px;height:.5rem;cursor:s-resize}.theme-syndicate .Window__resizeHandle__e{position:fixed;top:0;bottom:0;right:0;width:3px;width:.25rem;cursor:e-resize}.theme-syndicate .TitleBar{background-color:#910101;border-bottom:1px solid #161616;box-shadow:0 2px 2px rgba(0,0,0,.1);box-shadow:0 .1666666667rem .1666666667rem rgba(0,0,0,.1);user-select:none;-ms-user-select:none}.theme-syndicate .TitleBar__clickable{color:rgba(255,255,255,.5);background-color:#910101;transition:color 250ms ease-out,background-color 250ms ease-out}.theme-syndicate .TitleBar__clickable:hover{color:#fff;background-color:#c00;transition:color 0ms,background-color 0ms}.theme-syndicate .TitleBar__title{position:absolute;top:0;left:46px;left:3.8333333333rem;color:rgba(255,255,255,.75);font-size:14px;font-size:1.1666666667rem;line-height:31px;line-height:2.5833333333rem;white-space:nowrap}.theme-syndicate .TitleBar__dragZone{position:absolute;top:0;left:0;right:0;height:32px;height:2.6666666667rem}.theme-syndicate .TitleBar__statusIcon{position:absolute;top:0;left:12px;left:1rem;transition:color .5s;font-size:20px;font-size:1.6666666667rem;line-height:32px !important;line-height:2.6666666667rem !important}.theme-syndicate .TitleBar__close{position:absolute;top:-1px;right:0;width:45px;width:3.75rem;height:32px;height:2.6666666667rem;font-size:20px;font-size:1.6666666667rem;line-height:31px;line-height:2.5833333333rem;text-align:center}.theme-syndicate .TitleBar__devBuildIndicator{position:absolute;top:6px;top:.5rem;right:52px;right:4.3333333333rem;min-width:20px;min-width:1.6666666667rem;padding:2px 4px;padding:.1666666667rem .3333333333rem;background-color:rgba(91,170,39,.75);color:#fff;text-align:center}.theme-syndicate .Layout__content{background-image:url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+DQo8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgdmVyc2lvbj0iMS4wIiB2aWV3Qm94PSIwIDAgMjAwIDI4OS43NDIiIG9wYWNpdHk9Ii4xIj4NCiAgPHBhdGggZD0ibSA5My41Mzc2NzcsMCBjIC0xOC4xMTMxMjUsMCAtMzQuMjIwMTMzLDMuMTExNjQgLTQ4LjMyMzQ4NCw5LjMzNDM3IC0xMy45NjUwOTIsNi4yMjE2NyAtMjQuNjEyNDQyLDE1LjA3MTE0IC0zMS45NDA2NTEsMjYuNTQ3MSAtNy4xODk5Mzk4LDExLjMzNzg5IC0xMC4zMDEyMjY2LDI0Ljc0OTExIC0xMC4zMDEyMjY2LDQwLjIzNDc4IDAsMTAuNjQ2NjIgMi43MjUwMDI2LDIwLjQ2NDY1IDguMTc1MTExNiwyOS40NTI1OCA1LjYxNTI3Nyw4Ljk4Njg2IDE0LjAzODI3NywxNy4zNTIwNCAyNS4yNjg4MjEsMjUuMDk0MzYgMTEuMjMwNTQ0LDcuNjA1MzEgMjYuNTA3NDIxLDE1LjQxODM1IDQ1LjgzMDUxNCwyMy40Mzc4MiAxOS45ODM3NDgsOC4yOTU1NyAzNC44NDg4NDgsMTUuNTU0NzEgNDQuNTkyOTk4LDIxLjc3NjM4IDkuNzQ0MTQsNi4yMjI3MyAxNi43NjE3LDEyLjg1ODUgMjEuMDU1NzIsMTkuOTA5NTEgNC4yOTQwNCw3LjA1MjA4IDYuNDQxOTMsMTUuNzY0MDggNi40NDE5MywyNi4xMzQ1OSAwLDE2LjE3NzAyIC01LjIwMTk2LDI4LjQ4MjIyIC0xNS42MDY3MywzNi45MTY4MiAtMTAuMjM5Niw4LjQzNDcgLTI1LjAyMjAzLDEyLjY1MjMgLTQ0LjM0NTE2OSwxMi42NTIzIC0xNC4wMzgxNzEsMCAtMjUuNTE1MjQ3LC0xLjY1OTQgLTM0LjQzMzYxOCwtNC45Nzc3IC04LjkxODM3LC0zLjQ1NjYgLTE2LjE4NTU3MiwtOC43MTEzIC0yMS44MDA4MzksLTE1Ljc2MzMgLTUuNjE1Mjc3LC03LjA1MjEgLTEwLjA3NDc5NSwtMTYuNjYwODggLTEzLjM3Nzg5OSwtMjguODI4MTIgbCAtMjQuNzczMTYyNjI5Mzk0NSwwIDAsNTYuODI2MzIgQyAzMy44NTY3NjksMjg2LjA3NjAxIDYzLjc0OTA0LDI4OS43NDIwMSA4OS42NzgzODMsMjg5Ljc0MjAxIGMgMTYuMDIwMDI3LDAgMzAuNzE5Nzg3LC0xLjM4MjcgNDQuMDk3MzM3LC00LjE0NzkgMTMuNTQyNzIsLTIuOTA0MyAyNS4xMDQxLC03LjQ2NzYgMzQuNjgzMDksLTEzLjY4OTMgOS43NDQxMywtNi4zNTk3IDE3LjM0MDQyLC0xNC41MTk1IDIyLjc5MDUyLC0yNC40NzQ4IDUuNDUwMSwtMTAuMDkzMzIgOC4xNzUxMSwtMjIuMzk5NTkgOC4xNzUxMSwtMzYuOTE2ODIgMCwtMTIuOTk3NjQgLTMuMzAyMSwtMjQuMzM1MzkgLTkuOTA4MjksLTM0LjAxNDYgLTYuNDQxMDUsLTkuODE3MjUgLTE1LjUyNTQ1LC0xOC41MjcwNyAtMjcuMjUxNDYsLTI2LjEzMTMzIC0xMS41NjA4NSwtNy42MDQyNyAtMjcuOTEwODMsLTE1LjgzMTQyIC00OS4wNTA2NiwtMjQuNjgwMjIgLTE3LjUwNjQ0LC03LjE5MDEyIC0zMC43MTk2NjgsLTEzLjY4OTQ4IC0zOS42MzgwMzgsLTE5LjQ5NzAxIC04LjkxODM3MSwtNS44MDc1MiAtMTguNjA3NDc0LC0xMi40MzQwOSAtMjQuMDk2NTI0LC0xOC44NzQxNyAtNS40MjYwNDMsLTYuMzY2MTYgLTkuNjU4ODI2LC0xNS4wNzAwMyAtOS42NTg4MjYsLTI0Ljg4NzI5IDAsLTkuMjY0MDEgMi4wNzU0MTQsLTE3LjIxMzQ1IDYuMjIzNDU0LC0yMy44NTAzMyAxMS4wOTgyOTgsLTE0LjM5NzQ4IDQxLjI4NjYzOCwtMS43OTUwNyA0NS4wNzU2MDksMjQuMzQ3NjIgNC44MzkzOTIsNi43NzQ5MSA4Ljg0OTM1LDE2LjI0NzI5IDEyLjAyOTUxNSwyOC40MTU2IGwgMjAuNTMyMzQsMCAwLC01NS45OTk2NyBjIC00LjQ3ODI1LC01LjkyNDQ4IC05Ljk1NDg4LC0xMC42MzIyMiAtMTUuOTA4MzcsLTE0LjM3NDExIDEuNjQwNTUsMC40NzkwNSAzLjE5MDM5LDEuMDIzNzYgNC42Mzg2NSwxLjY0MDI0IDYuNDk4NjEsMi42MjYwNyAxMi4xNjc5Myw3LjMyNzQ3IDE3LjAwNzMsMTQuMTAzNDUgNC44MzkzOSw2Ljc3NDkxIDguODQ5MzUsMTYuMjQ1NjcgMTIuMDI5NTIsMjguNDEzOTcgMCwwIDguNDgxMjgsLTAuMTI4OTQgOC40ODk3OCwtMC4wMDIgMC40MTc3Niw2LjQxNDk0IC0xLjc1MzM5LDkuNDUyODYgLTQuMTIzNDIsMTIuNTYxMDQgLTIuNDE3NCwzLjE2OTc4IC01LjE0NDg2LDYuNzg5NzMgLTQuMDAyNzgsMTMuMDAyOSAxLjUwNzg2LDguMjAzMTggMTAuMTgzNTQsMTAuNTk2NDIgMTQuNjIxOTQsOS4zMTE1NCAtMy4zMTg0MiwtMC40OTkxMSAtNS4zMTg1NSwtMS43NDk0OCAtNS4zMTg1NSwtMS43NDk0OCAwLDAgMS44NzY0NiwwLjk5ODY4IDUuNjUxMTcsLTEuMzU5ODEgLTMuMjc2OTUsMC45NTU3MSAtMTAuNzA1MjksLTAuNzk3MzggLTExLjgwMTI1LC02Ljc2MzEzIC0wLjk1NzUyLC01LjIwODYxIDAuOTQ2NTQsLTcuMjk1MTQgMy40MDExMywtMTAuNTE0ODIgMi40NTQ2MiwtMy4yMTk2OCA1LjI4NDI2LC02Ljk1ODMxIDQuNjg0MywtMTQuNDg4MjQgbCAwLjAwMywwLjAwMiA4LjkyNjc2LDAgMCwtNTUuOTk5NjcgYyAtMTUuMDcxMjUsLTMuODcxNjggLTI3LjY1MzE0LC02LjM2MDQyIC0zNy43NDY3MSwtNy40NjU4NiAtOS45NTUzMSwtMS4xMDc1NSAtMjAuMTg4MjMsLTEuNjU5ODEgLTMwLjY5NjYxMywtMS42NTk4MSB6IG0gNzAuMzIxNjAzLDE3LjMwODkzIDAuMjM4MDUsNDAuMzA0OSBjIDEuMzE4MDgsMS4yMjY2NiAyLjQzOTY1LDIuMjc4MTUgMy4zNDA4MSwzLjEwNjAyIDQuODM5MzksNi43NzQ5MSA4Ljg0OTM0LDE2LjI0NTY2IDEyLjAyOTUxLDI4LjQxMzk3IGwgMjAuNTMyMzQsMCAwLC01NS45OTk2NyBjIC02LjY3NzMxLC00LjU5MzgxIC0xOS44MzY0MywtMTAuNDczMDkgLTM2LjE0MDcxLC0xNS44MjUyMiB6IG0gLTI4LjEyMDQ5LDUuNjA1NTEgOC41NjQ3OSwxNy43MTY1NSBjIC0xMS45NzAzNywtNi40NjY5NyAtMTMuODQ2NzgsLTkuNzE3MjYgLTguNTY0NzksLTE3LjcxNjU1IHogbSAyMi43OTcwNSwwIGMgMi43NzE1LDcuOTk5MjkgMS43ODc0MSwxMS4yNDk1OCAtNC40OTM1NCwxNy43MTY1NSBsIDQuNDkzNTQsLTE3LjcxNjU1IHogbSAxNS4yMjE5NSwyNC4wMDg0OCA4LjU2NDc5LDE3LjcxNjU1IGMgLTExLjk3MDM4LC02LjQ2Njk3IC0xMy44NDY3OSwtOS43MTcyNiAtOC41NjQ3OSwtMTcuNzE2NTUgeiBtIDIyLjc5NzA0LDAgYyAyLjc3MTUsNy45OTkyOSAxLjc4NzQxLDExLjI0OTU4IC00LjQ5MzU0LDE3LjcxNjU1IGwgNC40OTM1NCwtMTcuNzE2NTUgeiBtIC05OS4xMTM4NCwyLjIwNzY0IDguNTY0NzksMTcuNzE2NTUgYyAtMTEuOTcwMzgyLC02LjQ2Njk3IC0xMy44NDY3ODIsLTkuNzE3MjYgLTguNTY0NzksLTE3LjcxNjU1IHogbSAyMi43OTU0MiwwIGMgMi43NzE1LDcuOTk5MjkgMS43ODc0MSwxMS4yNDk1OCAtNC40OTM1NCwxNy43MTY1NSBsIDQuNDkzNTQsLTE3LjcxNjU1IHoiIC8+DQo8L3N2Zz4NCjwhLS0gVGhpcyB3b3JrIGlzIGxpY2Vuc2VkIHVuZGVyIGEgQ3JlYXRpdmUgQ29tbW9ucyBBdHRyaWJ1dGlvbi1TaGFyZUFsaWtlIDQuMCBJbnRlcm5hdGlvbmFsIExpY2Vuc2UuIC0tPg0KPCEtLSBodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy9saWNlbnNlcy9ieS1zYS80LjAvIC0tPg0K)} +.theme-syndicate .Button{position:relative;display:inline-block;line-height:1.667em;padding:0 .5em;margin-right:.1666666667em;white-space:nowrap;outline:0;border-radius:.16em;margin-bottom:.1666666667em;user-select:none;-ms-user-select:none}.theme-syndicate .Button:last-child{margin-right:0;margin-bottom:0}.theme-syndicate .Button .fa,.theme-syndicate .Button .fa-solid,.theme-syndicate .Button .fa-regular{margin-left:0;margin-right:0;min-width:1.333em;text-align:center}.theme-syndicate .Button--hasContent .fa,.theme-syndicate .Button--hasContent .fa-solid,.theme-syndicate .Button--hasContent .fa-regular{margin-right:.25em}.theme-syndicate .Button--hasContent.Button--iconPosition--right .fa,.theme-syndicate .Button--hasContent.Button--iconPosition--right .fas,.theme-syndicate .Button--hasContent.Button--iconPosition--right .far{margin-right:0px;margin-left:3px}.theme-syndicate .Button--ellipsis{overflow:hidden;text-overflow:ellipsis}.theme-syndicate .Button--ellipsis .Button__content{overflow:hidden;text-overflow:ellipsis}.theme-syndicate .Button--fluid{display:block;margin-left:0;margin-right:0}.theme-syndicate .Button--circular{border-radius:50%}.theme-syndicate .Button--compact{padding:0 .25em;line-height:1.333em}.theme-syndicate .Button--color--default{transition:color 50ms,background-color 50ms;background-color:#397439;color:#fff}.theme-syndicate .Button--color--default:hover{transition:color 0ms,background-color 0ms}.theme-syndicate .Button--color--default:focus{transition:color 100ms,background-color 100ms}.theme-syndicate .Button--color--default:hover,.theme-syndicate .Button--color--default:focus{background-color:#595;color:#fff}.theme-syndicate .Button--color--default:active{background-color:#76b776}.theme-syndicate .Button--color--caution{transition:color 50ms,background-color 50ms;background-color:#be6209;color:#fff}.theme-syndicate .Button--color--caution:hover{transition:color 0ms,background-color 0ms}.theme-syndicate .Button--color--caution:focus{transition:color 100ms,background-color 100ms}.theme-syndicate .Button--color--caution:hover,.theme-syndicate .Button--color--caution:focus{background-color:#ec8420;color:#fff}.theme-syndicate .Button--color--caution:active{background-color:#f2a75d}.theme-syndicate .Button--color--danger{transition:color 50ms,background-color 50ms;background-color:#9a9d00;color:#fff}.theme-syndicate .Button--color--danger:hover{transition:color 0ms,background-color 0ms}.theme-syndicate .Button--color--danger:focus{transition:color 100ms,background-color 100ms}.theme-syndicate .Button--color--danger:hover,.theme-syndicate .Button--color--danger:focus{background-color:#c4c813;color:#fff}.theme-syndicate .Button--color--danger:active{background-color:#eef226}.theme-syndicate .Button--color--transparent{transition:color 50ms,background-color 50ms;background-color:#550202;color:#fff;background-color:rgba(85,2,2,0);color:rgba(255,255,255,.5)}.theme-syndicate .Button--color--transparent:hover{transition:color 0ms,background-color 0ms}.theme-syndicate .Button--color--transparent:focus{transition:color 100ms,background-color 100ms}.theme-syndicate .Button--color--transparent:hover,.theme-syndicate .Button--color--transparent:focus{background-color:#751616;color:#fff}.theme-syndicate .Button--color--transparent:active{background-color:#952929}.theme-syndicate .Button--disabled{background-color:#363636 !important}.theme-syndicate .Button--selected{transition:color 50ms,background-color 50ms;background-color:#9d0808;color:#fff}.theme-syndicate .Button--selected:hover{transition:color 0ms,background-color 0ms}.theme-syndicate .Button--selected:focus{transition:color 100ms,background-color 100ms}.theme-syndicate .Button--selected:hover,.theme-syndicate .Button--selected:focus{background-color:#c81c1c;color:#fff}.theme-syndicate .Button--selected:active{background-color:#ec3737}.theme-syndicate .Button--flex{display:inline-flex;flex-direction:column}.theme-syndicate .Button--flex--fluid{width:100%}.theme-syndicate .Button--verticalAlignContent--top{justify-content:flex-start}.theme-syndicate .Button--verticalAlignContent--middle{justify-content:center}.theme-syndicate .Button--verticalAlignContent--bottom{justify-content:flex-end}.theme-syndicate .Button__content{display:block;align-self:stretch}.theme-syndicate .Input{position:relative;display:inline-block;width:10em;border:.0833333333em solid #87ce87;border:.0833333333em solid rgba(135,206,135,.75);border-radius:.16em;color:#fff;background-color:#0a0a0a;padding:0 .3333333333em;margin-right:.1666666667em;line-height:1.4166666667em;overflow:visible}.theme-syndicate .Input--fluid{display:block;width:auto}.theme-syndicate .Input__baseline{display:inline-block;color:transparent}.theme-syndicate .Input__input{display:block;position:absolute;top:0;bottom:0;left:0;right:0;border:0;outline:0;width:100%;font-size:1em;line-height:1.4166666667em;height:1.4166666667em;margin:0;padding:0 .5em;font-family:Verdana,sans-serif;background-color:transparent;color:#fff;color:inherit}.theme-syndicate .Input__input:-ms-input-placeholder{font-style:italic;color:#777;color:rgba(255,255,255,.45)}.theme-syndicate .Input--monospace .Input__input{font-family:"Consolas",monospace}.theme-syndicate .NoticeBox{padding:.33em .5em;margin-bottom:.5em;box-shadow:none;font-weight:bold;font-style:italic;color:#fff;background-color:#910101;background-image:repeating-linear-gradient(-45deg, transparent, transparent 0.8333333333em, rgba(0, 0, 0, 0.1) 0.8333333333em, rgba(0, 0, 0, 0.1) 1.6666666667em)}.theme-syndicate .NoticeBox--type--info{color:#fff;background-color:#235982}.theme-syndicate .NoticeBox--type--success{color:#fff;background-color:#1e662f}.theme-syndicate .NoticeBox--type--warning{color:#fff;background-color:#a95219}.theme-syndicate .NoticeBox--type--danger{color:#fff;background-color:#8f2828}.theme-syndicate .Input{position:relative;display:inline-block;width:10em;border:.0833333333em solid #87ce87;border:.0833333333em solid rgba(135,206,135,.75);border-radius:.16em;color:#fff;background-color:#0a0a0a;padding:0 .3333333333em;margin-right:.1666666667em;line-height:1.4166666667em;overflow:visible}.theme-syndicate .Input--fluid{display:block;width:auto}.theme-syndicate .Input__baseline{display:inline-block;color:transparent}.theme-syndicate .Input__input{display:block;position:absolute;top:0;bottom:0;left:0;right:0;border:0;outline:0;width:100%;font-size:1em;line-height:1.4166666667em;height:1.4166666667em;margin:0;padding:0 .5em;font-family:Verdana,sans-serif;background-color:transparent;color:#fff;color:inherit}.theme-syndicate .Input__input:-ms-input-placeholder{font-style:italic;color:#777;color:rgba(255,255,255,.45)}.theme-syndicate .Input--monospace .Input__input{font-family:"Consolas",monospace}.theme-syndicate .NumberInput{position:relative;display:inline-block;border:.0833333333em solid #87ce87;border:.0833333333em solid rgba(135,206,135,.75);border-radius:.16em;color:#87ce87;background-color:#0a0a0a;padding:0 .3333333333em;margin-right:.1666666667em;line-height:1.4166666667em;text-align:right;overflow:visible;cursor:n-resize}.theme-syndicate .NumberInput--fluid{display:block}.theme-syndicate .NumberInput__content{margin-left:.5em}.theme-syndicate .NumberInput__barContainer{position:absolute;top:.1666666667em;bottom:.1666666667em;left:.1666666667em}.theme-syndicate .NumberInput__bar{position:absolute;bottom:0;left:0;width:.25em;box-sizing:border-box;border-bottom:.0833333333em solid #87ce87;background-color:#87ce87}.theme-syndicate .NumberInput__input{display:block;position:absolute;top:0;bottom:0;left:0;right:0;border:0;outline:0;width:100%;font-size:1em;line-height:1.4166666667em;height:1.4166666667em;margin:0;padding:0 .5em;font-family:Verdana,sans-serif;background-color:#0a0a0a;color:#fff;text-align:right}.theme-syndicate .ProgressBar{display:flex;position:relative;width:100%;padding:0 .5em;border-width:.0833333333em !important;border-style:solid !important;border-radius:.16em;background-color:rgba(0,0,0,.5);transition:border-color 900ms ease-out;align-items:center}.theme-syndicate .ProgressBar__fill{position:absolute;top:-0.5px;left:0px;bottom:-0.5px}.theme-syndicate .ProgressBar__fill--animated{transition:background-color 900ms ease-out,width 900ms ease-out}.theme-syndicate .ProgressBar__content{position:relative;line-height:1.4166666667em;width:100%;text-align:right}.theme-syndicate .ProgressBar--color--default{border:.0833333333em solid #306330}.theme-syndicate .ProgressBar--color--default .ProgressBar__fill{background-color:#306330}.theme-syndicate .Section{position:relative;margin-bottom:.5em;background-color:#390101;background-color:rgba(0,0,0,.33);box-sizing:border-box}.theme-syndicate .Section:last-child{margin-bottom:0}.theme-syndicate .Section__title{position:relative;padding:.5em;border-bottom:.1666666667em solid #397439}.theme-syndicate .Section__titleText{font-size:1.1666666667em;font-weight:bold;color:#fff}.theme-syndicate .Section__buttons{position:absolute;display:inline-block;right:.5em;margin-top:-.0833333333em}.theme-syndicate .Section__rest{position:relative}.theme-syndicate .Section__content{padding:.66em .5em}.theme-syndicate .Section--fitted>.Section__rest>.Section__content{padding:0}.theme-syndicate .Section--fill{display:flex;flex-direction:column;height:100%}.theme-syndicate .Section--fill>.Section__rest{flex-grow:1}.theme-syndicate .Section--fill>.Section__rest>.Section__content{height:100%}.theme-syndicate .Section--fill.Section--scrollable>.Section__rest>.Section__content{position:absolute;top:0;left:0;right:0;bottom:0}.theme-syndicate .Section--fill.Section--iefix{display:table !important;width:100% !important;height:100% !important;border-collapse:collapse;border-spacing:0}.theme-syndicate .Section--fill.Section--iefix>.Section__rest{display:table-row !important;height:100% !important}.theme-syndicate .Section--scrollable{overflow-x:hidden;overflow-y:hidden}.theme-syndicate .Section--scrollable>.Section__rest>.Section__content{overflow-y:scroll;overflow-x:hidden}.theme-syndicate .Section .Section{background-color:transparent;margin-left:-0.5em;margin-right:-0.5em}.theme-syndicate .Section .Section:first-child{margin-top:-0.5em}.theme-syndicate .Section .Section .Section__titleText{font-size:1.0833333333em}.theme-syndicate .Section .Section .Section .Section__titleText{font-size:1em}.theme-syndicate .Tooltip{z-index:2;padding:.5em .75em;pointer-events:none;text-align:left;transition:opacity 150ms ease-out;background-color:#4a0202;color:#fff;box-shadow:.1em .1em 1.25em -0.1em rgba(0,0,0,.5);border-radius:.16em;max-width:20.8333333333em}.theme-syndicate .Layout,.theme-syndicate .Layout *{scrollbar-base-color:#400202;scrollbar-face-color:#7e0303;scrollbar-3dlight-color:#550202;scrollbar-highlight-color:#550202;scrollbar-track-color:#400202;scrollbar-arrow-color:#fa3030;scrollbar-shadow-color:#7e0303}.theme-syndicate .Layout__content{position:absolute;top:0;bottom:0;left:0;right:0;overflow-x:hidden;overflow-y:hidden}.theme-syndicate .Layout__content--scrollable{overflow-y:scroll;margin-bottom:0}.theme-syndicate .Window{position:fixed;top:0;bottom:0;left:0;right:0;color:#fff;background-color:#550202;background-image:linear-gradient(to bottom, #730303 0%, #370101 100%)}.theme-syndicate .Window__titleBar{position:fixed;z-index:1;top:0;left:0;width:100%;height:32px;height:2.6666666667rem}.theme-syndicate .Window__rest{position:fixed;top:32px;top:2.6666666667rem;bottom:0;left:0;right:0}.theme-syndicate .Window__contentPadding{margin:.5rem;height:calc(100% - 1.01rem)}.theme-syndicate .Window__contentPadding:after{height:0}.theme-syndicate .Layout__content--scrollable .Window__contentPadding:after{display:block;content:"";height:.5rem}.theme-syndicate .Window__dimmer{position:fixed;top:0;bottom:0;left:0;right:0;background-color:rgba(117,22,22,.25);pointer-events:none}.theme-syndicate .Window__resizeHandle__se{position:fixed;bottom:0;right:0;width:20px;width:1.6666666667rem;height:20px;height:1.6666666667rem;cursor:se-resize}.theme-syndicate .Window__resizeHandle__s{position:fixed;bottom:0;left:0;right:0;height:6px;height:.5rem;cursor:s-resize}.theme-syndicate .Window__resizeHandle__e{position:fixed;top:0;bottom:0;right:0;width:3px;width:.25rem;cursor:e-resize}.theme-syndicate .TitleBar{background-color:#910101;border-bottom:1px solid #161616;box-shadow:0 2px 2px rgba(0,0,0,.1);box-shadow:0 .1666666667rem .1666666667rem rgba(0,0,0,.1);user-select:none;-ms-user-select:none}.theme-syndicate .TitleBar__clickable{color:rgba(255,255,255,.5);background-color:#910101;transition:color 250ms ease-out,background-color 250ms ease-out}.theme-syndicate .TitleBar__clickable:hover{color:#fff;background-color:#c00;transition:color 0ms,background-color 0ms}.theme-syndicate .TitleBar__title{position:absolute;top:0;left:46px;left:3.8333333333rem;color:rgba(255,255,255,.75);font-size:14px;font-size:1.1666666667rem;line-height:31px;line-height:2.5833333333rem;white-space:nowrap}.theme-syndicate .TitleBar__dragZone{position:absolute;top:0;left:0;right:0;height:32px;height:2.6666666667rem}.theme-syndicate .TitleBar__statusIcon{position:absolute;top:0;left:12px;left:1rem;transition:color .5s;font-size:20px;font-size:1.6666666667rem;line-height:32px !important;line-height:2.6666666667rem !important}.theme-syndicate .TitleBar__close{position:absolute;top:-1px;right:0;width:45px;width:3.75rem;height:32px;height:2.6666666667rem;font-size:20px;font-size:1.6666666667rem;line-height:31px;line-height:2.5833333333rem;text-align:center}.theme-syndicate .TitleBar__devBuildIndicator{position:absolute;top:6px;top:.5rem;right:52px;right:4.3333333333rem;min-width:20px;min-width:1.6666666667rem;padding:2px 4px;padding:.1666666667rem .3333333333rem;background-color:rgba(91,170,39,.75);color:#fff;text-align:center}.theme-syndicate .Layout__content{background-image:url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjAiIHZpZXdCb3g9IjAgMCAyMDAgMjg5Ljc0MiIgb3BhY2l0eT0iLjEiPgogIDxwYXRoIGQ9Im0gOTMuNTM3Njc3LDAgYyAtMTguMTEzMTI1LDAgLTM0LjIyMDEzMywzLjExMTY0IC00OC4zMjM0ODQsOS4zMzQzNyAtMTMuOTY1MDkyLDYuMjIxNjcgLTI0LjYxMjQ0MiwxNS4wNzExNCAtMzEuOTQwNjUxLDI2LjU0NzEgLTcuMTg5OTM5OCwxMS4zMzc4OSAtMTAuMzAxMjI2NiwyNC43NDkxMSAtMTAuMzAxMjI2Niw0MC4yMzQ3OCAwLDEwLjY0NjYyIDIuNzI1MDAyNiwyMC40NjQ2NSA4LjE3NTExMTYsMjkuNDUyNTggNS42MTUyNzcsOC45ODY4NiAxNC4wMzgyNzcsMTcuMzUyMDQgMjUuMjY4ODIxLDI1LjA5NDM2IDExLjIzMDU0NCw3LjYwNTMxIDI2LjUwNzQyMSwxNS40MTgzNSA0NS44MzA1MTQsMjMuNDM3ODIgMTkuOTgzNzQ4LDguMjk1NTcgMzQuODQ4ODQ4LDE1LjU1NDcxIDQ0LjU5Mjk5OCwyMS43NzYzOCA5Ljc0NDE0LDYuMjIyNzMgMTYuNzYxNywxMi44NTg1IDIxLjA1NTcyLDE5LjkwOTUxIDQuMjk0MDQsNy4wNTIwOCA2LjQ0MTkzLDE1Ljc2NDA4IDYuNDQxOTMsMjYuMTM0NTkgMCwxNi4xNzcwMiAtNS4yMDE5NiwyOC40ODIyMiAtMTUuNjA2NzMsMzYuOTE2ODIgLTEwLjIzOTYsOC40MzQ3IC0yNS4wMjIwMywxMi42NTIzIC00NC4zNDUxNjksMTIuNjUyMyAtMTQuMDM4MTcxLDAgLTI1LjUxNTI0NywtMS42NTk0IC0zNC40MzM2MTgsLTQuOTc3NyAtOC45MTgzNywtMy40NTY2IC0xNi4xODU1NzIsLTguNzExMyAtMjEuODAwODM5LC0xNS43NjMzIC01LjYxNTI3NywtNy4wNTIxIC0xMC4wNzQ3OTUsLTE2LjY2MDg4IC0xMy4zNzc4OTksLTI4LjgyODEyIGwgLTI0Ljc3MzE2MjYyOTM5NDUsMCAwLDU2LjgyNjMyIEMgMzMuODU2NzY5LDI4Ni4wNzYwMSA2My43NDkwNCwyODkuNzQyMDEgODkuNjc4MzgzLDI4OS43NDIwMSBjIDE2LjAyMDAyNywwIDMwLjcxOTc4NywtMS4zODI3IDQ0LjA5NzMzNywtNC4xNDc5IDEzLjU0MjcyLC0yLjkwNDMgMjUuMTA0MSwtNy40Njc2IDM0LjY4MzA5LC0xMy42ODkzIDkuNzQ0MTMsLTYuMzU5NyAxNy4zNDA0MiwtMTQuNTE5NSAyMi43OTA1MiwtMjQuNDc0OCA1LjQ1MDEsLTEwLjA5MzMyIDguMTc1MTEsLTIyLjM5OTU5IDguMTc1MTEsLTM2LjkxNjgyIDAsLTEyLjk5NzY0IC0zLjMwMjEsLTI0LjMzNTM5IC05LjkwODI5LC0zNC4wMTQ2IC02LjQ0MTA1LC05LjgxNzI1IC0xNS41MjU0NSwtMTguNTI3MDcgLTI3LjI1MTQ2LC0yNi4xMzEzMyAtMTEuNTYwODUsLTcuNjA0MjcgLTI3LjkxMDgzLC0xNS44MzE0MiAtNDkuMDUwNjYsLTI0LjY4MDIyIC0xNy41MDY0NCwtNy4xOTAxMiAtMzAuNzE5NjY4LC0xMy42ODk0OCAtMzkuNjM4MDM4LC0xOS40OTcwMSAtOC45MTgzNzEsLTUuODA3NTIgLTE4LjYwNzQ3NCwtMTIuNDM0MDkgLTI0LjA5NjUyNCwtMTguODc0MTcgLTUuNDI2MDQzLC02LjM2NjE2IC05LjY1ODgyNiwtMTUuMDcwMDMgLTkuNjU4ODI2LC0yNC44ODcyOSAwLC05LjI2NDAxIDIuMDc1NDE0LC0xNy4yMTM0NSA2LjIyMzQ1NCwtMjMuODUwMzMgMTEuMDk4Mjk4LC0xNC4zOTc0OCA0MS4yODY2MzgsLTEuNzk1MDcgNDUuMDc1NjA5LDI0LjM0NzYyIDQuODM5MzkyLDYuNzc0OTEgOC44NDkzNSwxNi4yNDcyOSAxMi4wMjk1MTUsMjguNDE1NiBsIDIwLjUzMjM0LDAgMCwtNTUuOTk5NjcgYyAtNC40NzgyNSwtNS45MjQ0OCAtOS45NTQ4OCwtMTAuNjMyMjIgLTE1LjkwODM3LC0xNC4zNzQxMSAxLjY0MDU1LDAuNDc5MDUgMy4xOTAzOSwxLjAyMzc2IDQuNjM4NjUsMS42NDAyNCA2LjQ5ODYxLDIuNjI2MDcgMTIuMTY3OTMsNy4zMjc0NyAxNy4wMDczLDE0LjEwMzQ1IDQuODM5MzksNi43NzQ5MSA4Ljg0OTM1LDE2LjI0NTY3IDEyLjAyOTUyLDI4LjQxMzk3IDAsMCA4LjQ4MTI4LC0wLjEyODk0IDguNDg5NzgsLTAuMDAyIDAuNDE3NzYsNi40MTQ5NCAtMS43NTMzOSw5LjQ1Mjg2IC00LjEyMzQyLDEyLjU2MTA0IC0yLjQxNzQsMy4xNjk3OCAtNS4xNDQ4Niw2Ljc4OTczIC00LjAwMjc4LDEzLjAwMjkgMS41MDc4Niw4LjIwMzE4IDEwLjE4MzU0LDEwLjU5NjQyIDE0LjYyMTk0LDkuMzExNTQgLTMuMzE4NDIsLTAuNDk5MTEgLTUuMzE4NTUsLTEuNzQ5NDggLTUuMzE4NTUsLTEuNzQ5NDggMCwwIDEuODc2NDYsMC45OTg2OCA1LjY1MTE3LC0xLjM1OTgxIC0zLjI3Njk1LDAuOTU1NzEgLTEwLjcwNTI5LC0wLjc5NzM4IC0xMS44MDEyNSwtNi43NjMxMyAtMC45NTc1MiwtNS4yMDg2MSAwLjk0NjU0LC03LjI5NTE0IDMuNDAxMTMsLTEwLjUxNDgyIDIuNDU0NjIsLTMuMjE5NjggNS4yODQyNiwtNi45NTgzMSA0LjY4NDMsLTE0LjQ4ODI0IGwgMC4wMDMsMC4wMDIgOC45MjY3NiwwIDAsLTU1Ljk5OTY3IGMgLTE1LjA3MTI1LC0zLjg3MTY4IC0yNy42NTMxNCwtNi4zNjA0MiAtMzcuNzQ2NzEsLTcuNDY1ODYgLTkuOTU1MzEsLTEuMTA3NTUgLTIwLjE4ODIzLC0xLjY1OTgxIC0zMC42OTY2MTMsLTEuNjU5ODEgeiBtIDcwLjMyMTYwMywxNy4zMDg5MyAwLjIzODA1LDQwLjMwNDkgYyAxLjMxODA4LDEuMjI2NjYgMi40Mzk2NSwyLjI3ODE1IDMuMzQwODEsMy4xMDYwMiA0LjgzOTM5LDYuNzc0OTEgOC44NDkzNCwxNi4yNDU2NiAxMi4wMjk1MSwyOC40MTM5NyBsIDIwLjUzMjM0LDAgMCwtNTUuOTk5NjcgYyAtNi42NzczMSwtNC41OTM4MSAtMTkuODM2NDMsLTEwLjQ3MzA5IC0zNi4xNDA3MSwtMTUuODI1MjIgeiBtIC0yOC4xMjA0OSw1LjYwNTUxIDguNTY0NzksMTcuNzE2NTUgYyAtMTEuOTcwMzcsLTYuNDY2OTcgLTEzLjg0Njc4LC05LjcxNzI2IC04LjU2NDc5LC0xNy43MTY1NSB6IG0gMjIuNzk3MDUsMCBjIDIuNzcxNSw3Ljk5OTI5IDEuNzg3NDEsMTEuMjQ5NTggLTQuNDkzNTQsMTcuNzE2NTUgbCA0LjQ5MzU0LC0xNy43MTY1NSB6IG0gMTUuMjIxOTUsMjQuMDA4NDggOC41NjQ3OSwxNy43MTY1NSBjIC0xMS45NzAzOCwtNi40NjY5NyAtMTMuODQ2NzksLTkuNzE3MjYgLTguNTY0NzksLTE3LjcxNjU1IHogbSAyMi43OTcwNCwwIGMgMi43NzE1LDcuOTk5MjkgMS43ODc0MSwxMS4yNDk1OCAtNC40OTM1NCwxNy43MTY1NSBsIDQuNDkzNTQsLTE3LjcxNjU1IHogbSAtOTkuMTEzODQsMi4yMDc2NCA4LjU2NDc5LDE3LjcxNjU1IGMgLTExLjk3MDM4MiwtNi40NjY5NyAtMTMuODQ2NzgyLC05LjcxNzI2IC04LjU2NDc5LC0xNy43MTY1NSB6IG0gMjIuNzk1NDIsMCBjIDIuNzcxNSw3Ljk5OTI5IDEuNzg3NDEsMTEuMjQ5NTggLTQuNDkzNTQsMTcuNzE2NTUgbCA0LjQ5MzU0LC0xNy43MTY1NSB6IiAvPgo8L3N2Zz4KPCEtLSBUaGlzIHdvcmsgaXMgbGljZW5zZWQgdW5kZXIgYSBDcmVhdGl2ZSBDb21tb25zIEF0dHJpYnV0aW9uLVNoYXJlQWxpa2UgNC4wIEludGVybmF0aW9uYWwgTGljZW5zZS4gLS0+CjwhLS0gaHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvbGljZW5zZXMvYnktc2EvNC4wLyAtLT4K)} .theme-flock{color:26FFE7}.theme-flock .Button{position:relative;display:inline-block;line-height:1.667em;padding:0 .5em;margin-right:.1666666667em;white-space:nowrap;outline:0;border-radius:.16em;margin-bottom:.1666666667em;user-select:none;-ms-user-select:none}.theme-flock .Button:last-child{margin-right:0;margin-bottom:0}.theme-flock .Button .fa,.theme-flock .Button .fa-solid,.theme-flock .Button .fa-regular{margin-left:0;margin-right:0;min-width:1.333em;text-align:center}.theme-flock .Button--hasContent .fa,.theme-flock .Button--hasContent .fa-solid,.theme-flock .Button--hasContent .fa-regular{margin-right:.25em}.theme-flock .Button--hasContent.Button--iconPosition--right .fa,.theme-flock .Button--hasContent.Button--iconPosition--right .fas,.theme-flock .Button--hasContent.Button--iconPosition--right .far{margin-right:0px;margin-left:3px}.theme-flock .Button--ellipsis{overflow:hidden;text-overflow:ellipsis}.theme-flock .Button--ellipsis .Button__content{overflow:hidden;text-overflow:ellipsis}.theme-flock .Button--fluid{display:block;margin-left:0;margin-right:0}.theme-flock .Button--circular{border-radius:50%}.theme-flock .Button--compact{padding:0 .25em;line-height:1.333em}.theme-flock .Button--color--default{transition:color 50ms,background-color 50ms;background-color:#14aa94;color:#fff}.theme-flock .Button--color--default:hover{transition:color 0ms,background-color 0ms}.theme-flock .Button--color--default:focus{transition:color 100ms,background-color 100ms}.theme-flock .Button--color--default:hover,.theme-flock .Button--color--default:focus{background-color:#2ad7bd;color:#fff}.theme-flock .Button--color--default:active{background-color:#5ee6d2}.theme-flock .Button--color--caution{transition:color 50ms,background-color 50ms;background-color:#d9b804;color:#000}.theme-flock .Button--color--caution:hover{transition:color 0ms,background-color 0ms}.theme-flock .Button--color--caution:focus{transition:color 100ms,background-color 100ms}.theme-flock .Button--color--caution:hover,.theme-flock .Button--color--caution:focus{background-color:#f5d72e;color:#000}.theme-flock .Button--color--caution:active{background-color:#f9e572}.theme-flock .Button--color--danger{transition:color 50ms,background-color 50ms;background-color:#bd2020;color:#fff}.theme-flock .Button--color--danger:hover{transition:color 0ms,background-color 0ms}.theme-flock .Button--color--danger:focus{transition:color 100ms,background-color 100ms}.theme-flock .Button--color--danger:hover,.theme-flock .Button--color--danger:focus{background-color:#dc4848;color:#fff}.theme-flock .Button--color--danger:active{background-color:#e78484}.theme-flock .Button--color--transparent{transition:color 50ms,background-color 50ms;background-color:#0b5e51;color:#fff;background-color:rgba(11,94,81,0);color:rgba(227,240,255,.75)}.theme-flock .Button--color--transparent:hover{transition:color 0ms,background-color 0ms}.theme-flock .Button--color--transparent:focus{transition:color 100ms,background-color 100ms}.theme-flock .Button--color--transparent:hover,.theme-flock .Button--color--transparent:focus{background-color:#207f71;color:#fff}.theme-flock .Button--color--transparent:active{background-color:#35a090}.theme-flock .Button--disabled{background-color:#999 !important}.theme-flock .Button--selected{transition:color 50ms,background-color 50ms;background-color:#1b9638;color:#fff}.theme-flock .Button--selected:hover{transition:color 0ms,background-color 0ms}.theme-flock .Button--selected:focus{transition:color 100ms,background-color 100ms}.theme-flock .Button--selected:hover,.theme-flock .Button--selected:focus{background-color:#32c154;color:#fff}.theme-flock .Button--selected:active{background-color:#59da78}.theme-flock .Button--flex{display:inline-flex;flex-direction:column}.theme-flock .Button--flex--fluid{width:100%}.theme-flock .Button--verticalAlignContent--top{justify-content:flex-start}.theme-flock .Button--verticalAlignContent--middle{justify-content:center}.theme-flock .Button--verticalAlignContent--bottom{justify-content:flex-end}.theme-flock .Button__content{display:block;align-self:stretch}.theme-flock .ProgressBar{display:flex;position:relative;width:100%;padding:0 .5em;border-width:.0833333333em !important;border-style:solid !important;border-radius:.16em;background-color:rgba(0,0,0,.5);transition:border-color 900ms ease-out;align-items:center}.theme-flock .ProgressBar__fill{position:absolute;top:-0.5px;left:0px;bottom:-0.5px}.theme-flock .ProgressBar__fill--animated{transition:background-color 900ms ease-out,width 900ms ease-out}.theme-flock .ProgressBar__content{position:relative;line-height:1.4166666667em;width:100%;text-align:right}.theme-flock .ProgressBar--color--default{border:.0833333333em solid #14aa94}.theme-flock .ProgressBar--color--default .ProgressBar__fill{background-color:#14aa94}.theme-flock .Section{position:relative;margin-bottom:.5em;background-color:#073f36;background-color:rgba(0,0,0,.33);box-sizing:border-box}.theme-flock .Section:last-child{margin-bottom:0}.theme-flock .Section__title{position:relative;padding:.5em;border-bottom:.1666666667em solid #4972a1}.theme-flock .Section__titleText{font-size:1.1666666667em;font-weight:bold;color:#fff}.theme-flock .Section__buttons{position:absolute;display:inline-block;right:.5em;margin-top:-.0833333333em}.theme-flock .Section__rest{position:relative}.theme-flock .Section__content{padding:.66em .5em}.theme-flock .Section--fitted>.Section__rest>.Section__content{padding:0}.theme-flock .Section--fill{display:flex;flex-direction:column;height:100%}.theme-flock .Section--fill>.Section__rest{flex-grow:1}.theme-flock .Section--fill>.Section__rest>.Section__content{height:100%}.theme-flock .Section--fill.Section--scrollable>.Section__rest>.Section__content{position:absolute;top:0;left:0;right:0;bottom:0}.theme-flock .Section--fill.Section--iefix{display:table !important;width:100% !important;height:100% !important;border-collapse:collapse;border-spacing:0}.theme-flock .Section--fill.Section--iefix>.Section__rest{display:table-row !important;height:100% !important}.theme-flock .Section--scrollable{overflow-x:hidden;overflow-y:hidden}.theme-flock .Section--scrollable>.Section__rest>.Section__content{overflow-y:scroll;overflow-x:hidden}.theme-flock .Section .Section{background-color:transparent;margin-left:-0.5em;margin-right:-0.5em}.theme-flock .Section .Section:first-child{margin-top:-0.5em}.theme-flock .Section .Section .Section__titleText{font-size:1.0833333333em}.theme-flock .Section .Section .Section .Section__titleText{font-size:1em}.theme-flock .Layout,.theme-flock .Layout *{scrollbar-base-color:#08463d;scrollbar-face-color:#0f8271;scrollbar-3dlight-color:#0b5e51;scrollbar-highlight-color:#0b5e51;scrollbar-track-color:#08463d;scrollbar-arrow-color:#4aead2;scrollbar-shadow-color:#0f8271}.theme-flock .Layout__content{position:absolute;top:0;bottom:0;left:0;right:0;overflow-x:hidden;overflow-y:hidden}.theme-flock .Layout__content--scrollable{overflow-y:scroll;margin-bottom:0}.theme-flock .Window{position:fixed;top:0;bottom:0;left:0;right:0;color:#fff;background-color:#0b5e51;background-image:linear-gradient(to bottom, #0c6759 0%, #0a5449 100%)}.theme-flock .Window__titleBar{position:fixed;z-index:1;top:0;left:0;width:100%;height:32px;height:2.6666666667rem}.theme-flock .Window__rest{position:fixed;top:32px;top:2.6666666667rem;bottom:0;left:0;right:0}.theme-flock .Window__contentPadding{margin:.5rem;height:calc(100% - 1.01rem)}.theme-flock .Window__contentPadding:after{height:0}.theme-flock .Layout__content--scrollable .Window__contentPadding:after{display:block;content:"";height:.5rem}.theme-flock .Window__dimmer{position:fixed;top:0;bottom:0;left:0;right:0;background-color:rgba(32,127,113,.25);pointer-events:none}.theme-flock .Window__resizeHandle__se{position:fixed;bottom:0;right:0;width:20px;width:1.6666666667rem;height:20px;height:1.6666666667rem;cursor:se-resize}.theme-flock .Window__resizeHandle__s{position:fixed;bottom:0;left:0;right:0;height:6px;height:.5rem;cursor:s-resize}.theme-flock .Window__resizeHandle__e{position:fixed;top:0;bottom:0;right:0;width:3px;width:.25rem;cursor:e-resize}.theme-flock .TitleBar{background-color:#0f806f;border-bottom:1px solid #161616;box-shadow:0 2px 2px rgba(0,0,0,.1);box-shadow:0 .1666666667rem .1666666667rem rgba(0,0,0,.1);user-select:none;-ms-user-select:none}.theme-flock .TitleBar__clickable{color:rgba(255,255,255,.5);background-color:#0f806f;transition:color 250ms ease-out,background-color 250ms ease-out}.theme-flock .TitleBar__clickable:hover{color:#fff;background-color:#c00;transition:color 0ms,background-color 0ms}.theme-flock .TitleBar__title{position:absolute;top:0;left:46px;left:3.8333333333rem;color:rgba(255,255,255,.75);font-size:14px;font-size:1.1666666667rem;line-height:31px;line-height:2.5833333333rem;white-space:nowrap}.theme-flock .TitleBar__dragZone{position:absolute;top:0;left:0;right:0;height:32px;height:2.6666666667rem}.theme-flock .TitleBar__statusIcon{position:absolute;top:0;left:12px;left:1rem;transition:color .5s;font-size:20px;font-size:1.6666666667rem;line-height:32px !important;line-height:2.6666666667rem !important}.theme-flock .TitleBar__close{position:absolute;top:-1px;right:0;width:45px;width:3.75rem;height:32px;height:2.6666666667rem;font-size:20px;font-size:1.6666666667rem;line-height:31px;line-height:2.5833333333rem;text-align:center}.theme-flock .TitleBar__devBuildIndicator{position:absolute;top:6px;top:.5rem;right:52px;right:4.3333333333rem;min-width:20px;min-width:1.6666666667rem;padding:2px 4px;padding:.1666666667rem .3333333333rem;background-color:rgba(91,170,39,.75);color:#fff;text-align:center}.theme-flock .Layout__content{background-image:none} .theme-nanotrasen.mode-light .color-black{color:#000 !important}.theme-nanotrasen.mode-light .color-white{color:#9e9e9e !important}.theme-nanotrasen.mode-light .color-red{color:#c82121 !important}.theme-nanotrasen.mode-light .color-orange{color:#e6630d !important}.theme-nanotrasen.mode-light .color-yellow{color:#ad9300 !important}.theme-nanotrasen.mode-light .color-olive{color:#7e8e12 !important}.theme-nanotrasen.mode-light .color-green{color:#1d9f3b !important}.theme-nanotrasen.mode-light .color-teal{color:#00a39c !important}.theme-nanotrasen.mode-light .color-blue{color:#1e78bb !important}.theme-nanotrasen.mode-light .color-violet{color:#5a30b5 !important}.theme-nanotrasen.mode-light .color-purple{color:#932eb4 !important}.theme-nanotrasen.mode-light .color-pink{color:#db228a !important}.theme-nanotrasen.mode-light .color-brown{color:#955d39 !important}.theme-nanotrasen.mode-light .color-grey{color:#6a6a6a !important}.theme-nanotrasen.mode-light .color-light-grey{color:#999 !important}.theme-nanotrasen.mode-light .color-good{color:#428515 !important}.theme-nanotrasen.mode-light .color-average{color:#a65f03 !important}.theme-nanotrasen.mode-light .color-bad{color:#971919 !important}.theme-nanotrasen.mode-light .color-label{color:#3b4b5f !important}.theme-nanotrasen.mode-light .color-bg-black{background-color:#404040 !important}.theme-nanotrasen.mode-light .color-bg-white{background-color:#c3c3c3 !important}.theme-nanotrasen.mode-light .color-bg-red{background-color:#e45e5e !important}.theme-nanotrasen.mode-light .color-bg-orange{background-color:#f59555 !important}.theme-nanotrasen.mode-light .color-bg-yellow{background-color:#ffdb11 !important}.theme-nanotrasen.mode-light .color-bg-olive{background-color:#cae322 !important}.theme-nanotrasen.mode-light .color-bg-green{background-color:#40dc65 !important}.theme-nanotrasen.mode-light .color-bg-teal{background-color:#08fff4 !important}.theme-nanotrasen.mode-light .color-bg-blue{background-color:#51a5e3 !important}.theme-nanotrasen.mode-light .color-bg-violet{background-color:#8b67d7 !important}.theme-nanotrasen.mode-light .color-bg-purple{background-color:#bb64d8 !important}.theme-nanotrasen.mode-light .color-bg-pink{background-color:#e86bb1 !important}.theme-nanotrasen.mode-light .color-bg-brown{background-color:#c58b66 !important}.theme-nanotrasen.mode-light .color-bg-grey{background-color:#989898 !important}.theme-nanotrasen.mode-light .color-bg-light-grey{background-color:#bfbfbf !important}.theme-nanotrasen.mode-light .color-bg-good{background-color:#6ddd23 !important}.theme-nanotrasen.mode-light .color-bg-average{background-color:#fb9511 !important}.theme-nanotrasen.mode-light .color-bg-bad{background-color:#dd3535 !important}.theme-nanotrasen.mode-light .color-bg-label{background-color:#627d9e !important}.theme-nanotrasen.mode-light .Tooltip{z-index:2;padding:.5em .75em;pointer-events:none;text-align:left;transition:opacity 150ms ease-out;background-color:#e6e6e6;color:#000;box-shadow:.1em .1em 1.25em -0.1em rgba(0,0,0,.5);border-radius:.16em;max-width:20.8333333333em}.theme-nanotrasen.mode-light .Divider--horizontal{margin:.5em 0}.theme-nanotrasen.mode-light .Divider--horizontal:not(.Divider--hidden){border-top:.1666666667em solid rgba(0,0,0,.1)}.theme-nanotrasen.mode-light .Divider--vertical{height:100%;margin:0 .5em}.theme-nanotrasen.mode-light .Divider--vertical:not(.Divider--hidden){border-left:.1666666667em solid rgba(0,0,0,.1)}.theme-nanotrasen.mode-light .Divider--horizontal{margin:.5em 0}.theme-nanotrasen.mode-light .Divider--horizontal:not(.Divider--hidden){border-top:.1666666667em solid rgba(0,0,0,.1)}.theme-nanotrasen.mode-light .Divider--vertical{height:100%;margin:0 .5em}.theme-nanotrasen.mode-light .Divider--vertical:not(.Divider--hidden){border-left:.1666666667em solid rgba(0,0,0,.1)}.theme-nanotrasen.mode-light .Stack--fill{height:100%}.theme-nanotrasen.mode-light .Stack--horizontal>.Stack__item{margin-left:.5em}.theme-nanotrasen.mode-light .Stack--horizontal>.Stack__item:first-child{margin-left:0}.theme-nanotrasen.mode-light .Stack--vertical>.Stack__item{margin-top:.5em}.theme-nanotrasen.mode-light .Stack--vertical>.Stack__item:first-child{margin-top:0}.theme-nanotrasen.mode-light .Stack--zebra>.Stack__item:nth-child(even){background-color:rgba(255,255,255,.33)}.theme-nanotrasen.mode-light .Stack--horizontal>.Stack__divider:not(.Stack__divider--hidden){border-left:.1666666667em solid rgba(0,0,0,.1)}.theme-nanotrasen.mode-light .Stack--vertical>.Stack__divider:not(.Stack__divider--hidden){border-top:.1666666667em solid rgba(0,0,0,.1)}.theme-nanotrasen.mode-light .ProgressBar{display:flex;position:relative;width:100%;padding:0 .5em;border-width:.0833333333em !important;border-style:solid !important;border-radius:.16em;background-color:rgba(255,255,255,.5);transition:border-color 900ms ease-out;align-items:center}.theme-nanotrasen.mode-light .ProgressBar__fill{position:absolute;top:-0.5px;left:0px;bottom:-0.5px}.theme-nanotrasen.mode-light .ProgressBar__fill--animated{transition:background-color 900ms ease-out,width 900ms ease-out}.theme-nanotrasen.mode-light .ProgressBar__content{position:relative;line-height:1.4166666667em;width:100%;text-align:right}.theme-nanotrasen.mode-light .ProgressBar--color--default{border:.0833333333em solid #fff}.theme-nanotrasen.mode-light .ProgressBar--color--default .ProgressBar__fill{background-color:#fff}.theme-nanotrasen.mode-light .ProgressBar--color--black{border-color:#404040 !important}.theme-nanotrasen.mode-light .ProgressBar--color--black .ProgressBar__fill{background-color:#404040}.theme-nanotrasen.mode-light .ProgressBar--color--white{border-color:#c3c3c3 !important}.theme-nanotrasen.mode-light .ProgressBar--color--white .ProgressBar__fill{background-color:#c3c3c3}.theme-nanotrasen.mode-light .ProgressBar--color--red{border-color:#e45e5e !important}.theme-nanotrasen.mode-light .ProgressBar--color--red .ProgressBar__fill{background-color:#e45e5e}.theme-nanotrasen.mode-light .ProgressBar--color--orange{border-color:#f59555 !important}.theme-nanotrasen.mode-light .ProgressBar--color--orange .ProgressBar__fill{background-color:#f59555}.theme-nanotrasen.mode-light .ProgressBar--color--yellow{border-color:#ffdb11 !important}.theme-nanotrasen.mode-light .ProgressBar--color--yellow .ProgressBar__fill{background-color:#ffdb11}.theme-nanotrasen.mode-light .ProgressBar--color--olive{border-color:#cae322 !important}.theme-nanotrasen.mode-light .ProgressBar--color--olive .ProgressBar__fill{background-color:#cae322}.theme-nanotrasen.mode-light .ProgressBar--color--green{border-color:#40dc65 !important}.theme-nanotrasen.mode-light .ProgressBar--color--green .ProgressBar__fill{background-color:#40dc65}.theme-nanotrasen.mode-light .ProgressBar--color--teal{border-color:#08fff4 !important}.theme-nanotrasen.mode-light .ProgressBar--color--teal .ProgressBar__fill{background-color:#08fff4}.theme-nanotrasen.mode-light .ProgressBar--color--blue{border-color:#51a5e3 !important}.theme-nanotrasen.mode-light .ProgressBar--color--blue .ProgressBar__fill{background-color:#51a5e3}.theme-nanotrasen.mode-light .ProgressBar--color--violet{border-color:#8b67d7 !important}.theme-nanotrasen.mode-light .ProgressBar--color--violet .ProgressBar__fill{background-color:#8b67d7}.theme-nanotrasen.mode-light .ProgressBar--color--purple{border-color:#bb64d8 !important}.theme-nanotrasen.mode-light .ProgressBar--color--purple .ProgressBar__fill{background-color:#bb64d8}.theme-nanotrasen.mode-light .ProgressBar--color--pink{border-color:#e86bb1 !important}.theme-nanotrasen.mode-light .ProgressBar--color--pink .ProgressBar__fill{background-color:#e86bb1}.theme-nanotrasen.mode-light .ProgressBar--color--brown{border-color:#c58b66 !important}.theme-nanotrasen.mode-light .ProgressBar--color--brown .ProgressBar__fill{background-color:#c58b66}.theme-nanotrasen.mode-light .ProgressBar--color--grey{border-color:#989898 !important}.theme-nanotrasen.mode-light .ProgressBar--color--grey .ProgressBar__fill{background-color:#989898}.theme-nanotrasen.mode-light .ProgressBar--color--light-grey{border-color:#bfbfbf !important}.theme-nanotrasen.mode-light .ProgressBar--color--light-grey .ProgressBar__fill{background-color:#bfbfbf}.theme-nanotrasen.mode-light .ProgressBar--color--good{border-color:#6ddd23 !important}.theme-nanotrasen.mode-light .ProgressBar--color--good .ProgressBar__fill{background-color:#6ddd23}.theme-nanotrasen.mode-light .ProgressBar--color--average{border-color:#fb9511 !important}.theme-nanotrasen.mode-light .ProgressBar--color--average .ProgressBar__fill{background-color:#fb9511}.theme-nanotrasen.mode-light .ProgressBar--color--bad{border-color:#dd3535 !important}.theme-nanotrasen.mode-light .ProgressBar--color--bad .ProgressBar__fill{background-color:#dd3535}.theme-nanotrasen.mode-light .ProgressBar--color--label{border-color:#627d9e !important}.theme-nanotrasen.mode-light .ProgressBar--color--label .ProgressBar__fill{background-color:#627d9e}.theme-nanotrasen.mode-light .Section{position:relative;margin-bottom:.5em;background-color:#e6e6e6;background-color:rgba(0,0,0,.1);box-sizing:border-box}.theme-nanotrasen.mode-light .Section:last-child{margin-bottom:0}.theme-nanotrasen.mode-light .Section__title{position:relative;padding:.5em;border-bottom:.1666666667em solid #ccc}.theme-nanotrasen.mode-light .Section__titleText{font-size:1.1666666667em;font-weight:bold;color:#000}.theme-nanotrasen.mode-light .Section__buttons{position:absolute;display:inline-block;right:.5em;margin-top:-.0833333333em}.theme-nanotrasen.mode-light .Section__rest{position:relative}.theme-nanotrasen.mode-light .Section__content{padding:.66em .5em}.theme-nanotrasen.mode-light .Section--fitted>.Section__rest>.Section__content{padding:0}.theme-nanotrasen.mode-light .Section--fill{display:flex;flex-direction:column;height:100%}.theme-nanotrasen.mode-light .Section--fill>.Section__rest{flex-grow:1}.theme-nanotrasen.mode-light .Section--fill>.Section__rest>.Section__content{height:100%}.theme-nanotrasen.mode-light .Section--fill.Section--scrollable>.Section__rest>.Section__content{position:absolute;top:0;left:0;right:0;bottom:0}.theme-nanotrasen.mode-light .Section--fill.Section--iefix{display:table !important;width:100% !important;height:100% !important;border-collapse:collapse;border-spacing:0}.theme-nanotrasen.mode-light .Section--fill.Section--iefix>.Section__rest{display:table-row !important;height:100% !important}.theme-nanotrasen.mode-light .Section--scrollable{overflow-x:hidden;overflow-y:hidden}.theme-nanotrasen.mode-light .Section--scrollable>.Section__rest>.Section__content{overflow-y:scroll;overflow-x:hidden}.theme-nanotrasen.mode-light .Section .Section{background-color:transparent;margin-left:-0.5em;margin-right:-0.5em}.theme-nanotrasen.mode-light .Section .Section:first-child{margin-top:-0.5em}.theme-nanotrasen.mode-light .Section .Section .Section__titleText{font-size:1.0833333333em}.theme-nanotrasen.mode-light .Section .Section .Section .Section__titleText{font-size:1em}.theme-nanotrasen.mode-light .SectionEx .Section__title{display:flex}.theme-nanotrasen.mode-light .SectionEx .Section__titleText{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;flex:auto}.theme-nanotrasen.mode-light .SectionEx .Section__buttons{position:inherit;right:inherit;flex:none}.theme-nanotrasen.mode-light .SectionEx__capitalize .Section__titleText{text-transform:capitalize}.theme-nanotrasen.mode-light .Button{position:relative;display:inline-block;line-height:1.667em;padding:0 .5em;margin-right:.1666666667em;white-space:nowrap;outline:0;border-radius:.16em;margin-bottom:.1666666667em;user-select:none;-ms-user-select:none}.theme-nanotrasen.mode-light .Button:last-child{margin-right:0;margin-bottom:0}.theme-nanotrasen.mode-light .Button .fa,.theme-nanotrasen.mode-light .Button .fa-solid,.theme-nanotrasen.mode-light .Button .fa-regular{margin-left:0;margin-right:0;min-width:1.333em;text-align:center}.theme-nanotrasen.mode-light .Button--hasContent .fa,.theme-nanotrasen.mode-light .Button--hasContent .fa-solid,.theme-nanotrasen.mode-light .Button--hasContent .fa-regular{margin-right:.25em}.theme-nanotrasen.mode-light .Button--hasContent.Button--iconPosition--right .fa,.theme-nanotrasen.mode-light .Button--hasContent.Button--iconPosition--right .fas,.theme-nanotrasen.mode-light .Button--hasContent.Button--iconPosition--right .far{margin-right:0px;margin-left:3px}.theme-nanotrasen.mode-light .Button--ellipsis{overflow:hidden;text-overflow:ellipsis}.theme-nanotrasen.mode-light .Button--ellipsis .Button__content{overflow:hidden;text-overflow:ellipsis}.theme-nanotrasen.mode-light .Button--fluid{display:block;margin-left:0;margin-right:0}.theme-nanotrasen.mode-light .Button--circular{border-radius:50%}.theme-nanotrasen.mode-light .Button--compact{padding:0 .25em;line-height:1.333em}.theme-nanotrasen.mode-light .Button--color--black{transition:color 50ms,background-color 50ms;background-color:#404040;color:#fff}.theme-nanotrasen.mode-light .Button--color--black:hover{transition:color 0ms,background-color 0ms}.theme-nanotrasen.mode-light .Button--color--black:focus{transition:color 100ms,background-color 100ms}.theme-nanotrasen.mode-light .Button--color--black:hover,.theme-nanotrasen.mode-light .Button--color--black:focus{background-color:#5d5d5d;color:#fff}.theme-nanotrasen.mode-light .Button--color--black:active{background-color:#797979}.theme-nanotrasen.mode-light .Button--color--white{transition:color 50ms,background-color 50ms;background-color:#c3c3c3;color:#000}.theme-nanotrasen.mode-light .Button--color--white:hover{transition:color 0ms,background-color 0ms}.theme-nanotrasen.mode-light .Button--color--white:focus{transition:color 100ms,background-color 100ms}.theme-nanotrasen.mode-light .Button--color--white:hover,.theme-nanotrasen.mode-light .Button--color--white:focus{background-color:#f4f4f4;color:#000}.theme-nanotrasen.mode-light .Button--color--white:active{background-color:#f9f9f9}.theme-nanotrasen.mode-light .Button--color--red{transition:color 50ms,background-color 50ms;background-color:#e45e5e;color:#fff}.theme-nanotrasen.mode-light .Button--color--red:hover{transition:color 0ms,background-color 0ms}.theme-nanotrasen.mode-light .Button--color--red:focus{transition:color 100ms,background-color 100ms}.theme-nanotrasen.mode-light .Button--color--red:hover,.theme-nanotrasen.mode-light .Button--color--red:focus{background-color:#f1a8a8;color:#fff}.theme-nanotrasen.mode-light .Button--color--red:active{background-color:#fcefef}.theme-nanotrasen.mode-light .Button--color--orange{transition:color 50ms,background-color 50ms;background-color:#f59555;color:#000}.theme-nanotrasen.mode-light .Button--color--orange:hover{transition:color 0ms,background-color 0ms}.theme-nanotrasen.mode-light .Button--color--orange:focus{transition:color 100ms,background-color 100ms}.theme-nanotrasen.mode-light .Button--color--orange:hover,.theme-nanotrasen.mode-light .Button--color--orange:focus{background-color:#fac9a8;color:#000}.theme-nanotrasen.mode-light .Button--color--orange:active{background-color:#fef5ee}.theme-nanotrasen.mode-light .Button--color--yellow{transition:color 50ms,background-color 50ms;background-color:#ffdb11;color:#000}.theme-nanotrasen.mode-light .Button--color--yellow:hover{transition:color 0ms,background-color 0ms}.theme-nanotrasen.mode-light .Button--color--yellow:focus{transition:color 100ms,background-color 100ms}.theme-nanotrasen.mode-light .Button--color--yellow:hover,.theme-nanotrasen.mode-light .Button--color--yellow:focus{background-color:#ffe760;color:#000}.theme-nanotrasen.mode-light .Button--color--yellow:active{background-color:#fff3ae}.theme-nanotrasen.mode-light .Button--color--olive{transition:color 50ms,background-color 50ms;background-color:#cae322;color:#000}.theme-nanotrasen.mode-light .Button--color--olive:hover{transition:color 0ms,background-color 0ms}.theme-nanotrasen.mode-light .Button--color--olive:focus{transition:color 100ms,background-color 100ms}.theme-nanotrasen.mode-light .Button--color--olive:hover,.theme-nanotrasen.mode-light .Button--color--olive:focus{background-color:#dbec66;color:#000}.theme-nanotrasen.mode-light .Button--color--olive:active{background-color:#ebf5ac}.theme-nanotrasen.mode-light .Button--color--green{transition:color 50ms,background-color 50ms;background-color:#40dc65;color:#000}.theme-nanotrasen.mode-light .Button--color--green:hover{transition:color 0ms,background-color 0ms}.theme-nanotrasen.mode-light .Button--color--green:focus{transition:color 100ms,background-color 100ms}.theme-nanotrasen.mode-light .Button--color--green:hover,.theme-nanotrasen.mode-light .Button--color--green:focus{background-color:#84e99c;color:#000}.theme-nanotrasen.mode-light .Button--color--green:active{background-color:#c9f6d3}.theme-nanotrasen.mode-light .Button--color--teal{transition:color 50ms,background-color 50ms;background-color:#08fff4;color:#000}.theme-nanotrasen.mode-light .Button--color--teal:hover{transition:color 0ms,background-color 0ms}.theme-nanotrasen.mode-light .Button--color--teal:focus{transition:color 100ms,background-color 100ms}.theme-nanotrasen.mode-light .Button--color--teal:hover,.theme-nanotrasen.mode-light .Button--color--teal:focus{background-color:#56fff8;color:#000}.theme-nanotrasen.mode-light .Button--color--teal:active{background-color:#a4fffb}.theme-nanotrasen.mode-light .Button--color--blue{transition:color 50ms,background-color 50ms;background-color:#51a5e3;color:#fff}.theme-nanotrasen.mode-light .Button--color--blue:hover{transition:color 0ms,background-color 0ms}.theme-nanotrasen.mode-light .Button--color--blue:focus{transition:color 100ms,background-color 100ms}.theme-nanotrasen.mode-light .Button--color--blue:hover,.theme-nanotrasen.mode-light .Button--color--blue:focus{background-color:#9acbef;color:#fff}.theme-nanotrasen.mode-light .Button--color--blue:active{background-color:#e3f0fb}.theme-nanotrasen.mode-light .Button--color--violet{transition:color 50ms,background-color 50ms;background-color:#8b67d7;color:#fff}.theme-nanotrasen.mode-light .Button--color--violet:hover{transition:color 0ms,background-color 0ms}.theme-nanotrasen.mode-light .Button--color--violet:focus{transition:color 100ms,background-color 100ms}.theme-nanotrasen.mode-light .Button--color--violet:hover,.theme-nanotrasen.mode-light .Button--color--violet:focus{background-color:#bface9;color:#fff}.theme-nanotrasen.mode-light .Button--color--violet:active{background-color:#f3effb}.theme-nanotrasen.mode-light .Button--color--purple{transition:color 50ms,background-color 50ms;background-color:#bb64d8;color:#fff}.theme-nanotrasen.mode-light .Button--color--purple:hover{transition:color 0ms,background-color 0ms}.theme-nanotrasen.mode-light .Button--color--purple:focus{transition:color 100ms,background-color 100ms}.theme-nanotrasen.mode-light .Button--color--purple:hover,.theme-nanotrasen.mode-light .Button--color--purple:focus{background-color:#d9a9e9;color:#fff}.theme-nanotrasen.mode-light .Button--color--purple:active{background-color:#f7edfa}.theme-nanotrasen.mode-light .Button--color--pink{transition:color 50ms,background-color 50ms;background-color:#e86bb1;color:#fff}.theme-nanotrasen.mode-light .Button--color--pink:hover{transition:color 0ms,background-color 0ms}.theme-nanotrasen.mode-light .Button--color--pink:focus{transition:color 100ms,background-color 100ms}.theme-nanotrasen.mode-light .Button--color--pink:hover,.theme-nanotrasen.mode-light .Button--color--pink:focus{background-color:#f4b7d9;color:#fff}.theme-nanotrasen.mode-light .Button--color--pink:active{background-color:#fdf0f7}.theme-nanotrasen.mode-light .Button--color--brown{transition:color 50ms,background-color 50ms;background-color:#c58b66;color:#fff}.theme-nanotrasen.mode-light .Button--color--brown:hover{transition:color 0ms,background-color 0ms}.theme-nanotrasen.mode-light .Button--color--brown:focus{transition:color 100ms,background-color 100ms}.theme-nanotrasen.mode-light .Button--color--brown:hover,.theme-nanotrasen.mode-light .Button--color--brown:focus{background-color:#dbb9a2;color:#fff}.theme-nanotrasen.mode-light .Button--color--brown:active{background-color:#f3e6df}.theme-nanotrasen.mode-light .Button--color--grey{transition:color 50ms,background-color 50ms;background-color:#989898;color:#fff}.theme-nanotrasen.mode-light .Button--color--grey:hover{transition:color 0ms,background-color 0ms}.theme-nanotrasen.mode-light .Button--color--grey:focus{transition:color 100ms,background-color 100ms}.theme-nanotrasen.mode-light .Button--color--grey:hover,.theme-nanotrasen.mode-light .Button--color--grey:focus{background-color:#c2c2c2;color:#fff}.theme-nanotrasen.mode-light .Button--color--grey:active{background-color:#ededed}.theme-nanotrasen.mode-light .Button--color--light-grey{transition:color 50ms,background-color 50ms;background-color:#bfbfbf;color:#000}.theme-nanotrasen.mode-light .Button--color--light-grey:hover{transition:color 0ms,background-color 0ms}.theme-nanotrasen.mode-light .Button--color--light-grey:focus{transition:color 100ms,background-color 100ms}.theme-nanotrasen.mode-light .Button--color--light-grey:hover,.theme-nanotrasen.mode-light .Button--color--light-grey:focus{background-color:#efefef;color:#000}.theme-nanotrasen.mode-light .Button--color--light-grey:active{background-color:#f9f9f9}.theme-nanotrasen.mode-light .Button--color--good{transition:color 50ms,background-color 50ms;background-color:#6ddd23;color:#000}.theme-nanotrasen.mode-light .Button--color--good:hover{transition:color 0ms,background-color 0ms}.theme-nanotrasen.mode-light .Button--color--good:focus{transition:color 100ms,background-color 100ms}.theme-nanotrasen.mode-light .Button--color--good:hover,.theme-nanotrasen.mode-light .Button--color--good:focus{background-color:#99e765;color:#000}.theme-nanotrasen.mode-light .Button--color--good:active{background-color:#c5f1a8}.theme-nanotrasen.mode-light .Button--color--average{transition:color 50ms,background-color 50ms;background-color:#fb9511;color:#000}.theme-nanotrasen.mode-light .Button--color--average:hover{transition:color 0ms,background-color 0ms}.theme-nanotrasen.mode-light .Button--color--average:focus{transition:color 100ms,background-color 100ms}.theme-nanotrasen.mode-light .Button--color--average:hover,.theme-nanotrasen.mode-light .Button--color--average:focus{background-color:#fcb75e;color:#000}.theme-nanotrasen.mode-light .Button--color--average:active{background-color:#fedaab}.theme-nanotrasen.mode-light .Button--color--bad{transition:color 50ms,background-color 50ms;background-color:#dd3535;color:#fff}.theme-nanotrasen.mode-light .Button--color--bad:hover{transition:color 0ms,background-color 0ms}.theme-nanotrasen.mode-light .Button--color--bad:focus{transition:color 100ms,background-color 100ms}.theme-nanotrasen.mode-light .Button--color--bad:hover,.theme-nanotrasen.mode-light .Button--color--bad:focus{background-color:#e97a7a;color:#fff}.theme-nanotrasen.mode-light .Button--color--bad:active{background-color:#f4bdbd}.theme-nanotrasen.mode-light .Button--color--label{transition:color 50ms,background-color 50ms;background-color:#627d9e;color:#fff}.theme-nanotrasen.mode-light .Button--color--label:hover{transition:color 0ms,background-color 0ms}.theme-nanotrasen.mode-light .Button--color--label:focus{transition:color 100ms,background-color 100ms}.theme-nanotrasen.mode-light .Button--color--label:hover,.theme-nanotrasen.mode-light .Button--color--label:focus{background-color:#91a4bb;color:#fff}.theme-nanotrasen.mode-light .Button--color--label:active{background-color:#c0cbd8}.theme-nanotrasen.mode-light .Button--color--default{transition:color 50ms,background-color 50ms;background-color:#fff;color:#000}.theme-nanotrasen.mode-light .Button--color--default:hover{transition:color 0ms,background-color 0ms}.theme-nanotrasen.mode-light .Button--color--default:focus{transition:color 100ms,background-color 100ms}.theme-nanotrasen.mode-light .Button--color--default:hover,.theme-nanotrasen.mode-light .Button--color--default:focus{background-color:#fff;color:#000}.theme-nanotrasen.mode-light .Button--color--default:active{background-color:#fff}.theme-nanotrasen.mode-light .Button--color--caution{transition:color 50ms,background-color 50ms;background-color:#b96817;color:#fff}.theme-nanotrasen.mode-light .Button--color--caution:hover{transition:color 0ms,background-color 0ms}.theme-nanotrasen.mode-light .Button--color--caution:focus{transition:color 100ms,background-color 100ms}.theme-nanotrasen.mode-light .Button--color--caution:hover,.theme-nanotrasen.mode-light .Button--color--caution:focus{background-color:#df8b37;color:#fff}.theme-nanotrasen.mode-light .Button--color--caution:active{background-color:#e9ad71}.theme-nanotrasen.mode-light .Button--color--danger{transition:color 50ms,background-color 50ms;background-color:#9a9d00;color:#fff}.theme-nanotrasen.mode-light .Button--color--danger:hover{transition:color 0ms,background-color 0ms}.theme-nanotrasen.mode-light .Button--color--danger:focus{transition:color 100ms,background-color 100ms}.theme-nanotrasen.mode-light .Button--color--danger:hover,.theme-nanotrasen.mode-light .Button--color--danger:focus{background-color:#c4c813;color:#fff}.theme-nanotrasen.mode-light .Button--color--danger:active{background-color:#eef226}.theme-nanotrasen.mode-light .Button--color--transparent{transition:color 50ms,background-color 50ms;background-color:#fff;color:#000;background-color:rgba(255,255,255,0);color:rgba(33,33,34,.75)}.theme-nanotrasen.mode-light .Button--color--transparent:hover{transition:color 0ms,background-color 0ms}.theme-nanotrasen.mode-light .Button--color--transparent:focus{transition:color 100ms,background-color 100ms}.theme-nanotrasen.mode-light .Button--color--transparent:hover,.theme-nanotrasen.mode-light .Button--color--transparent:focus{background-color:#fff;color:#000}.theme-nanotrasen.mode-light .Button--color--transparent:active{background-color:#fff}.theme-nanotrasen.mode-light .Button--disabled{background-color:#777 !important}.theme-nanotrasen.mode-light .Button--selected{transition:color 50ms,background-color 50ms;background-color:#58c44a;color:#000}.theme-nanotrasen.mode-light .Button--selected:hover{transition:color 0ms,background-color 0ms}.theme-nanotrasen.mode-light .Button--selected:focus{transition:color 100ms,background-color 100ms}.theme-nanotrasen.mode-light .Button--selected:hover,.theme-nanotrasen.mode-light .Button--selected:focus{background-color:#8fd885;color:#000}.theme-nanotrasen.mode-light .Button--selected:active{background-color:#c6ebc1}.theme-nanotrasen.mode-light .Button--flex{display:inline-flex;flex-direction:column}.theme-nanotrasen.mode-light .Button--flex--fluid{width:100%}.theme-nanotrasen.mode-light .Button--verticalAlignContent--top{justify-content:flex-start}.theme-nanotrasen.mode-light .Button--verticalAlignContent--middle{justify-content:center}.theme-nanotrasen.mode-light .Button--verticalAlignContent--bottom{justify-content:flex-end}.theme-nanotrasen.mode-light .Button__content{display:block;align-self:stretch}.theme-nanotrasen.mode-light .Input{position:relative;display:inline-block;width:10em;border:.0833333333em solid #4171a8;border:.0833333333em solid rgba(65,113,168,.75);border-radius:.16em;color:#000;background-color:#e6e6e6;padding:0 .3333333333em;margin-right:.1666666667em;line-height:1.4166666667em;overflow:visible}.theme-nanotrasen.mode-light .Input--fluid{display:block;width:auto}.theme-nanotrasen.mode-light .Input__baseline{display:inline-block;color:transparent}.theme-nanotrasen.mode-light .Input__input{display:block;position:absolute;top:0;bottom:0;left:0;right:0;border:0;outline:0;width:100%;font-size:1em;line-height:1.4166666667em;height:1.4166666667em;margin:0;padding:0 .5em;font-family:Verdana,sans-serif;background-color:transparent;color:#000;color:inherit}.theme-nanotrasen.mode-light .Input__input:-ms-input-placeholder{font-style:italic;color:#777;color:rgba(255,255,255,.45)}.theme-nanotrasen.mode-light .Input--monospace .Input__input{font-family:"Consolas",monospace}.theme-nanotrasen.mode-light .Input{position:relative;display:inline-block;width:10em;border:.0833333333em solid #4171a8;border:.0833333333em solid rgba(65,113,168,.75);border-radius:.16em;color:#000;background-color:#e6e6e6;padding:0 .3333333333em;margin-right:.1666666667em;line-height:1.4166666667em;overflow:visible}.theme-nanotrasen.mode-light .Input--fluid{display:block;width:auto}.theme-nanotrasen.mode-light .Input__baseline{display:inline-block;color:transparent}.theme-nanotrasen.mode-light .Input__input{display:block;position:absolute;top:0;bottom:0;left:0;right:0;border:0;outline:0;width:100%;font-size:1em;line-height:1.4166666667em;height:1.4166666667em;margin:0;padding:0 .5em;font-family:Verdana,sans-serif;background-color:transparent;color:#000;color:inherit}.theme-nanotrasen.mode-light .Input__input:-ms-input-placeholder{font-style:italic;color:#777;color:rgba(255,255,255,.45)}.theme-nanotrasen.mode-light .Input--monospace .Input__input{font-family:"Consolas",monospace}.theme-nanotrasen.mode-light .TextArea{position:relative;display:inline-block;border:.0833333333em solid #4171a8;border:.0833333333em solid rgba(65,113,168,.75);border-radius:.16em;background-color:#e6e6e6;margin-right:.1666666667em;line-height:1.4166666667em;box-sizing:border-box;width:100%}.theme-nanotrasen.mode-light .TextArea--fluid{display:block;width:auto;height:auto}.theme-nanotrasen.mode-light .TextArea__textarea{display:block;position:absolute;top:0;bottom:0;left:0;right:0;border:0;outline:0;width:100%;height:100%;font-size:1em;line-height:1.4166666667em;min-height:1.4166666667em;margin:0;padding:0 .5em;font-family:inherit;background-color:transparent;color:inherit;box-sizing:border-box;word-wrap:break-word;overflow:hidden}.theme-nanotrasen.mode-light .TextArea__textarea:-ms-input-placeholder{font-style:italic;color:#777;color:rgba(255,255,255,.45)}.theme-nanotrasen.mode-light .Modal{background-color:#e6e6e6;max-width:calc(100% - 1rem);padding:1rem}.theme-nanotrasen.mode-light .Input{position:relative;display:inline-block;width:10em;border:.0833333333em solid #4171a8;border:.0833333333em solid rgba(65,113,168,.75);border-radius:.16em;color:#000;background-color:#e6e6e6;padding:0 .3333333333em;margin-right:.1666666667em;line-height:1.4166666667em;overflow:visible}.theme-nanotrasen.mode-light .Input--fluid{display:block;width:auto}.theme-nanotrasen.mode-light .Input__baseline{display:inline-block;color:transparent}.theme-nanotrasen.mode-light .Input__input{display:block;position:absolute;top:0;bottom:0;left:0;right:0;border:0;outline:0;width:100%;font-size:1em;line-height:1.4166666667em;height:1.4166666667em;margin:0;padding:0 .5em;font-family:Verdana,sans-serif;background-color:transparent;color:#000;color:inherit}.theme-nanotrasen.mode-light .Input__input:-ms-input-placeholder{font-style:italic;color:#777;color:rgba(255,255,255,.45)}.theme-nanotrasen.mode-light .Input--monospace .Input__input{font-family:"Consolas",monospace}.theme-nanotrasen.mode-light .NumberInput{position:relative;display:inline-block;border:.0833333333em solid #4171a8;border:.0833333333em solid rgba(65,113,168,.75);border-radius:.16em;color:#4171a8;background-color:#e6e6e6;padding:0 .3333333333em;margin-right:.1666666667em;line-height:1.4166666667em;text-align:right;overflow:visible;cursor:n-resize}.theme-nanotrasen.mode-light .NumberInput--fluid{display:block}.theme-nanotrasen.mode-light .NumberInput__content{margin-left:.5em}.theme-nanotrasen.mode-light .NumberInput__barContainer{position:absolute;top:.1666666667em;bottom:.1666666667em;left:.1666666667em}.theme-nanotrasen.mode-light .NumberInput__bar{position:absolute;bottom:0;left:0;width:.25em;box-sizing:border-box;border-bottom:.0833333333em solid #4171a8;background-color:#4171a8}.theme-nanotrasen.mode-light .NumberInput__input{display:block;position:absolute;top:0;bottom:0;left:0;right:0;border:0;outline:0;width:100%;font-size:1em;line-height:1.4166666667em;height:1.4166666667em;margin:0;padding:0 .5em;font-family:Verdana,sans-serif;background-color:#e6e6e6;color:#000;text-align:right}.theme-nanotrasen.mode-light .Tabs{display:flex;align-items:stretch;overflow:hidden;background-color:rgba(255,255,255,.33)}.theme-nanotrasen.mode-light .Tabs--fill{height:100%}.theme-nanotrasen.mode-light .Section .Tabs{background-color:transparent}.theme-nanotrasen.mode-light .Section:not(.Section--fitted) .Tabs{margin:0 -0.5em .5em}.theme-nanotrasen.mode-light .Section:not(.Section--fitted) .Tabs:first-child{margin-top:-0.5em}.theme-nanotrasen.mode-light .Tabs--vertical{flex-direction:column;padding:.25em 0 .25em .25em}.theme-nanotrasen.mode-light .Tabs--horizontal{margin-bottom:.5em;padding:.25em .25em 0 .25em}.theme-nanotrasen.mode-light .Tabs--horizontal:last-child{margin-bottom:0}.theme-nanotrasen.mode-light .Tabs__Tab{flex-grow:0}.theme-nanotrasen.mode-light .Tabs--fluid .Tabs__Tab{flex-grow:1}.theme-nanotrasen.mode-light .Tab{display:flex;align-items:center;justify-content:space-between;background-color:transparent;color:rgba(0,0,0,.5);min-height:2.25em;min-width:4em}.theme-nanotrasen.mode-light .Tab:not(.Tab--selected):hover{background-color:rgba(0,0,0,.075)}.theme-nanotrasen.mode-light .Tab--selected{background-color:rgba(0,0,0,.125);color:rgba(0,0,0,.9)}.theme-nanotrasen.mode-light .Tab__text{flex-grow:1;margin:0 .5em}.theme-nanotrasen.mode-light .Tab__left{min-width:1.5em;text-align:center;margin-left:.25em}.theme-nanotrasen.mode-light .Tab__right{min-width:1.5em;text-align:center;margin-right:.25em}.theme-nanotrasen.mode-light .Tabs--horizontal .Tab{border-top:.1666666667em solid transparent;border-bottom:.1666666667em solid transparent;border-top-left-radius:.25em;border-top-right-radius:.25em}.theme-nanotrasen.mode-light .Tabs--horizontal .Tab--selected{border-bottom:.1666666667em solid #ededed}.theme-nanotrasen.mode-light .Tabs--vertical .Tab{min-height:2em;border-left:.1666666667em solid transparent;border-right:.1666666667em solid transparent;border-top-left-radius:.25em;border-bottom-left-radius:.25em}.theme-nanotrasen.mode-light .Tabs--vertical .Tab--selected{border-right:.1666666667em solid #ededed}.theme-nanotrasen.mode-light .Tab--selected.Tab--color--black{color:#404040}.theme-nanotrasen.mode-light .Tabs--horizontal .Tab--selected.Tab--color--black{border-bottom-color:#000}.theme-nanotrasen.mode-light .Tabs--vertical .Tab--selected.Tab--color--black{border-right-color:#000}.theme-nanotrasen.mode-light .Tab--selected.Tab--color--white{color:#b6b6b6}.theme-nanotrasen.mode-light .Tabs--horizontal .Tab--selected.Tab--color--white{border-bottom-color:#9e9e9e}.theme-nanotrasen.mode-light .Tabs--vertical .Tab--selected.Tab--color--white{border-right-color:#9e9e9e}.theme-nanotrasen.mode-light .Tab--selected.Tab--color--red{color:#e14d4d}.theme-nanotrasen.mode-light .Tabs--horizontal .Tab--selected.Tab--color--red{border-bottom-color:#c82121}.theme-nanotrasen.mode-light .Tabs--vertical .Tab--selected.Tab--color--red{border-right-color:#c82121}.theme-nanotrasen.mode-light .Tab--selected.Tab--color--orange{color:#f48942}.theme-nanotrasen.mode-light .Tabs--horizontal .Tab--selected.Tab--color--orange{border-bottom-color:#e6630d}.theme-nanotrasen.mode-light .Tabs--vertical .Tab--selected.Tab--color--orange{border-right-color:#e6630d}.theme-nanotrasen.mode-light .Tab--selected.Tab--color--yellow{color:#ffd902}.theme-nanotrasen.mode-light .Tabs--horizontal .Tab--selected.Tab--color--yellow{border-bottom-color:#ad9300}.theme-nanotrasen.mode-light .Tabs--vertical .Tab--selected.Tab--color--yellow{border-right-color:#ad9300}.theme-nanotrasen.mode-light .Tab--selected.Tab--color--olive{color:#c3dc1c}.theme-nanotrasen.mode-light .Tabs--horizontal .Tab--selected.Tab--color--olive{border-bottom-color:#7e8e12}.theme-nanotrasen.mode-light .Tabs--vertical .Tab--selected.Tab--color--olive{border-right-color:#7e8e12}.theme-nanotrasen.mode-light .Tab--selected.Tab--color--green{color:#33da5a}.theme-nanotrasen.mode-light .Tabs--horizontal .Tab--selected.Tab--color--green{border-bottom-color:#1d9f3b}.theme-nanotrasen.mode-light .Tabs--vertical .Tab--selected.Tab--color--green{border-right-color:#1d9f3b}.theme-nanotrasen.mode-light .Tab--selected.Tab--color--teal{color:#00faef}.theme-nanotrasen.mode-light .Tabs--horizontal .Tab--selected.Tab--color--teal{border-bottom-color:#00a39c}.theme-nanotrasen.mode-light .Tabs--vertical .Tab--selected.Tab--color--teal{border-right-color:#00a39c}.theme-nanotrasen.mode-light .Tab--selected.Tab--color--blue{color:#419ce1}.theme-nanotrasen.mode-light .Tabs--horizontal .Tab--selected.Tab--color--blue{border-bottom-color:#1e78bb}.theme-nanotrasen.mode-light .Tabs--vertical .Tab--selected.Tab--color--blue{border-right-color:#1e78bb}.theme-nanotrasen.mode-light .Tab--selected.Tab--color--violet{color:#7f58d3}.theme-nanotrasen.mode-light .Tabs--horizontal .Tab--selected.Tab--color--violet{border-bottom-color:#5a30b5}.theme-nanotrasen.mode-light .Tabs--vertical .Tab--selected.Tab--color--violet{border-right-color:#5a30b5}.theme-nanotrasen.mode-light .Tab--selected.Tab--color--purple{color:#b455d4}.theme-nanotrasen.mode-light .Tabs--horizontal .Tab--selected.Tab--color--purple{border-bottom-color:#932eb4}.theme-nanotrasen.mode-light .Tabs--vertical .Tab--selected.Tab--color--purple{border-right-color:#932eb4}.theme-nanotrasen.mode-light .Tab--selected.Tab--color--pink{color:#e558a7}.theme-nanotrasen.mode-light .Tabs--horizontal .Tab--selected.Tab--color--pink{border-bottom-color:#db228a}.theme-nanotrasen.mode-light .Tabs--vertical .Tab--selected.Tab--color--pink{border-right-color:#db228a}.theme-nanotrasen.mode-light .Tab--selected.Tab--color--brown{color:#c0825a}.theme-nanotrasen.mode-light .Tabs--horizontal .Tab--selected.Tab--color--brown{border-bottom-color:#955d39}.theme-nanotrasen.mode-light .Tabs--vertical .Tab--selected.Tab--color--brown{border-right-color:#955d39}.theme-nanotrasen.mode-light .Tab--selected.Tab--color--grey{color:#8f8f8f}.theme-nanotrasen.mode-light .Tabs--horizontal .Tab--selected.Tab--color--grey{border-bottom-color:#6a6a6a}.theme-nanotrasen.mode-light .Tabs--vertical .Tab--selected.Tab--color--grey{border-right-color:#6a6a6a}.theme-nanotrasen.mode-light .Tab--selected.Tab--color--light-grey{color:#b3b3b3}.theme-nanotrasen.mode-light .Tabs--horizontal .Tab--selected.Tab--color--light-grey{border-bottom-color:#999}.theme-nanotrasen.mode-light .Tabs--vertical .Tab--selected.Tab--color--light-grey{border-right-color:#999}.theme-nanotrasen.mode-light .Tab--selected.Tab--color--good{color:#68d221}.theme-nanotrasen.mode-light .Tabs--horizontal .Tab--selected.Tab--color--good{border-bottom-color:#428515}.theme-nanotrasen.mode-light .Tabs--vertical .Tab--selected.Tab--color--good{border-right-color:#428515}.theme-nanotrasen.mode-light .Tab--selected.Tab--color--average{color:#fa8e04}.theme-nanotrasen.mode-light .Tabs--horizontal .Tab--selected.Tab--color--average{border-bottom-color:#a65f03}.theme-nanotrasen.mode-light .Tabs--vertical .Tab--selected.Tab--color--average{border-right-color:#a65f03}.theme-nanotrasen.mode-light .Tab--selected.Tab--color--bad{color:#db2929}.theme-nanotrasen.mode-light .Tabs--horizontal .Tab--selected.Tab--color--bad{border-bottom-color:#971919}.theme-nanotrasen.mode-light .Tabs--vertical .Tab--selected.Tab--color--bad{border-right-color:#971919}.theme-nanotrasen.mode-light .Tab--selected.Tab--color--label{color:#5d7696}.theme-nanotrasen.mode-light .Tabs--horizontal .Tab--selected.Tab--color--label{border-bottom-color:#3b4b5f}.theme-nanotrasen.mode-light .Tabs--vertical .Tab--selected.Tab--color--label{border-right-color:#3b4b5f}.theme-nanotrasen.mode-light .Slider{cursor:e-resize}.theme-nanotrasen.mode-light .Slider__cursorOffset{position:absolute;top:0;left:0;bottom:0;transition:none !important}.theme-nanotrasen.mode-light .Slider__cursor{position:absolute;top:0;right:-.0833333333em;bottom:0;width:0;border-left:.1666666667em solid #000}.theme-nanotrasen.mode-light .Slider__pointer{position:absolute;right:-.4166666667em;bottom:-.3333333333em;width:0;height:0;border-left:.4166666667em solid transparent;border-right:.4166666667em solid transparent;border-bottom:.4166666667em solid #000}.theme-nanotrasen.mode-light .Slider__popupValue{position:absolute;right:0;top:-2rem;font-size:1rem;padding:.25rem .5rem;color:#000;background-color:#fff;transform:translateX(50%);white-space:nowrap}.theme-nanotrasen.mode-light .BlockQuote{color:#3b4b5f;border-left:.1666666667em solid #3b4b5f;padding-left:.5em;margin-bottom:.5em}.theme-nanotrasen.mode-light .BlockQuote:last-child{margin-bottom:0}.theme-nanotrasen.mode-light .Layout,.theme-nanotrasen.mode-light .Layout *{scrollbar-base-color:#bfbfbf;scrollbar-face-color:#fff;scrollbar-3dlight-color:#fff;scrollbar-highlight-color:#fff;scrollbar-track-color:#bfbfbf;scrollbar-arrow-color:#fff;scrollbar-shadow-color:#fff}.theme-nanotrasen.mode-light .Layout__content{position:absolute;top:0;bottom:0;left:0;right:0;overflow-x:hidden;overflow-y:hidden}.theme-nanotrasen.mode-light .Layout__content--scrollable{overflow-y:scroll;margin-bottom:0}.theme-nanotrasen.mode-light .Window{position:fixed;top:0;bottom:0;left:0;right:0;color:#000;background-color:#fff;background-image:linear-gradient(to bottom, white 0%, #f7f7f7 100%)}.theme-nanotrasen.mode-light .Window__titleBar{position:fixed;z-index:1;top:0;left:0;width:100%;height:32px;height:2.6666666667rem}.theme-nanotrasen.mode-light .Window__rest{position:fixed;top:32px;top:2.6666666667rem;bottom:0;left:0;right:0}.theme-nanotrasen.mode-light .Window__contentPadding{margin:.5rem;height:calc(100% - 1.01rem)}.theme-nanotrasen.mode-light .Window__contentPadding:after{height:0}.theme-nanotrasen.mode-light .Layout__content--scrollable .Window__contentPadding:after{display:block;content:"";height:.5rem}.theme-nanotrasen.mode-light .Window__dimmer{position:fixed;top:0;bottom:0;left:0;right:0;background-color:rgba(255,255,255,.25);pointer-events:none}.theme-nanotrasen.mode-light .Window__resizeHandle__se{position:fixed;bottom:0;right:0;width:20px;width:1.6666666667rem;height:20px;height:1.6666666667rem;cursor:se-resize}.theme-nanotrasen.mode-light .Window__resizeHandle__s{position:fixed;bottom:0;left:0;right:0;height:6px;height:.5rem;cursor:s-resize}.theme-nanotrasen.mode-light .Window__resizeHandle__e{position:fixed;top:0;bottom:0;right:0;width:3px;width:.25rem;cursor:e-resize}.theme-nanotrasen.mode-light .TitleBar{background-color:#fff;border-bottom:1px solid rgba(0,0,0,.25);box-shadow:0 2px 2px rgba(0,0,0,.1);box-shadow:0 .1666666667rem .1666666667rem rgba(0,0,0,.1);user-select:none;-ms-user-select:none}.theme-nanotrasen.mode-light .TitleBar__clickable{color:rgba(0,0,0,.5);background-color:#fff;transition:color 250ms ease-out,background-color 250ms ease-out}.theme-nanotrasen.mode-light .TitleBar__clickable:hover{color:#fff;background-color:#c00;transition:color 0ms,background-color 0ms}.theme-nanotrasen.mode-light .TitleBar__title{position:absolute;top:0;left:46px;left:3.8333333333rem;color:rgba(0,0,0,.9);font-size:14px;font-size:1.1666666667rem;line-height:31px;line-height:2.5833333333rem;white-space:nowrap}.theme-nanotrasen.mode-light .TitleBar__dragZone{position:absolute;top:0;left:0;right:0;height:32px;height:2.6666666667rem}.theme-nanotrasen.mode-light .TitleBar__statusIcon{position:absolute;top:0;left:12px;left:1rem;transition:color .5s;font-size:20px;font-size:1.6666666667rem;line-height:32px !important;line-height:2.6666666667rem !important}.theme-nanotrasen.mode-light .TitleBar__close{position:absolute;top:-1px;right:0;width:45px;width:3.75rem;height:32px;height:2.6666666667rem;font-size:20px;font-size:1.6666666667rem;line-height:31px;line-height:2.5833333333rem;text-align:center}.theme-nanotrasen.mode-light .TitleBar__devBuildIndicator{position:absolute;top:6px;top:.5rem;right:52px;right:4.3333333333rem;min-width:20px;min-width:1.6666666667rem;padding:2px 4px;padding:.1666666667rem .3333333333rem;background-color:rgba(73,148,23,.75);color:#fff;text-align:center}.theme-nanotrasen.mode-light .Layout__content{background-image:url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+DQo8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgdmVyc2lvbj0iMS4wIiB2aWV3Qm94PSIwIDAgNDI1IDIwMCIgb3BhY2l0eT0iLjA0Ij4NCiAgPHBhdGggZD0ibSAxNzguMDAzOTksMC4wMzg2OSAtNzEuMjAzOTMsMCBhIDYuNzYxMzQyMiw2LjAyNTU0OTUgMCAwIDAgLTYuNzYxMzQsNi4wMjU1NSBsIDAsMTg3Ljg3MTQ3IGEgNi43NjEzNDIyLDYuMDI1NTQ5NSAwIDAgMCA2Ljc2MTM0LDYuMDI1NTQgbCA1My4xMDcyLDAgYSA2Ljc2MTM0MjIsNi4wMjU1NDk1IDAgMCAwIDYuNzYxMzUsLTYuMDI1NTQgbCAwLC0xMDEuNTQ0MDE4IDcyLjIxNjI4LDEwNC42OTkzOTggYSA2Ljc2MTM0MjIsNi4wMjU1NDk1IDAgMCAwIDUuNzYwMTUsMi44NzAxNiBsIDczLjU1NDg3LDAgYSA2Ljc2MTM0MjIsNi4wMjU1NDk1IDAgMCAwIDYuNzYxMzUsLTYuMDI1NTQgbCAwLC0xODcuODcxNDcgYSA2Ljc2MTM0MjIsNi4wMjU1NDk1IDAgMCAwIC02Ljc2MTM1LC02LjAyNTU1IGwgLTU0LjcxNjQ0LDAgYSA2Ljc2MTM0MjIsNi4wMjU1NDk1IDAgMCAwIC02Ljc2MTMzLDYuMDI1NTUgbCAwLDEwMi42MTkzNSBMIDE4My43NjQxMywyLjkwODg2IGEgNi43NjEzNDIyLDYuMDI1NTQ5NSAwIDAgMCAtNS43NjAxNCwtMi44NzAxNyB6IiAvPg0KICA8cGF0aCBkPSJNIDQuODQ0NjMzMywyMi4xMDg3NSBBIDEzLjQxMjAzOSwxMi41MDE4NDIgMCAwIDEgMTMuNDc3NTg4LDAuMDM5MjQgbCA2Ni4xMTgzMTUsMCBhIDUuMzY0ODE1OCw1LjAwMDczNyAwIDAgMSA1LjM2NDgyMyw1LjAwMDczIGwgMCw3OS44NzkzMSB6IiAvPg0KICA8cGF0aCBkPSJtIDQyMC4xNTUzNSwxNzcuODkxMTkgYSAxMy40MTIwMzgsMTIuNTAxODQyIDAgMCAxIC04LjYzMjk1LDIyLjA2OTUxIGwgLTY2LjExODMyLDAgYSA1LjM2NDgxNTIsNS4wMDA3MzcgMCAwIDEgLTUuMzY0ODIsLTUuMDAwNzQgbCAwLC03OS44NzkzMSB6IiAvPg0KPC9zdmc+DQo8IS0tIFRoaXMgd29yayBpcyBsaWNlbnNlZCB1bmRlciBhIENyZWF0aXZlIENvbW1vbnMgQXR0cmlidXRpb24tU2hhcmVBbGlrZSA0LjAgSW50ZXJuYXRpb25hbCBMaWNlbnNlLiAtLT4NCjwhLS0gaHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvbGljZW5zZXMvYnktc2EvNC4wLyAtLT4NCg==)} .theme-ntos.mode-light .color-black{color:#000 !important}.theme-ntos.mode-light .color-white{color:#9e9e9e !important}.theme-ntos.mode-light .color-red{color:#c82121 !important}.theme-ntos.mode-light .color-orange{color:#e6630d !important}.theme-ntos.mode-light .color-yellow{color:#ad9300 !important}.theme-ntos.mode-light .color-olive{color:#7e8e12 !important}.theme-ntos.mode-light .color-green{color:#1d9f3b !important}.theme-ntos.mode-light .color-teal{color:#00a39c !important}.theme-ntos.mode-light .color-blue{color:#1e78bb !important}.theme-ntos.mode-light .color-violet{color:#5a30b5 !important}.theme-ntos.mode-light .color-purple{color:#932eb4 !important}.theme-ntos.mode-light .color-pink{color:#db228a !important}.theme-ntos.mode-light .color-brown{color:#955d39 !important}.theme-ntos.mode-light .color-grey{color:#6a6a6a !important}.theme-ntos.mode-light .color-light-grey{color:#999 !important}.theme-ntos.mode-light .color-good{color:#428515 !important}.theme-ntos.mode-light .color-average{color:#a65f03 !important}.theme-ntos.mode-light .color-bad{color:#971919 !important}.theme-ntos.mode-light .color-label{color:#3b4b5f !important}.theme-ntos.mode-light .color-bg-black{background-color:#404040 !important}.theme-ntos.mode-light .color-bg-white{background-color:#c3c3c3 !important}.theme-ntos.mode-light .color-bg-red{background-color:#e45e5e !important}.theme-ntos.mode-light .color-bg-orange{background-color:#f59555 !important}.theme-ntos.mode-light .color-bg-yellow{background-color:#ffdb11 !important}.theme-ntos.mode-light .color-bg-olive{background-color:#cae322 !important}.theme-ntos.mode-light .color-bg-green{background-color:#40dc65 !important}.theme-ntos.mode-light .color-bg-teal{background-color:#08fff4 !important}.theme-ntos.mode-light .color-bg-blue{background-color:#51a5e3 !important}.theme-ntos.mode-light .color-bg-violet{background-color:#8b67d7 !important}.theme-ntos.mode-light .color-bg-purple{background-color:#bb64d8 !important}.theme-ntos.mode-light .color-bg-pink{background-color:#e86bb1 !important}.theme-ntos.mode-light .color-bg-brown{background-color:#c58b66 !important}.theme-ntos.mode-light .color-bg-grey{background-color:#989898 !important}.theme-ntos.mode-light .color-bg-light-grey{background-color:#bfbfbf !important}.theme-ntos.mode-light .color-bg-good{background-color:#6ddd23 !important}.theme-ntos.mode-light .color-bg-average{background-color:#fb9511 !important}.theme-ntos.mode-light .color-bg-bad{background-color:#dd3535 !important}.theme-ntos.mode-light .color-bg-label{background-color:#627d9e !important}.theme-ntos.mode-light .Tooltip{z-index:2;padding:.5em .75em;pointer-events:none;text-align:left;transition:opacity 150ms ease-out;background-color:#d9eaff;color:#000;box-shadow:.1em .1em 1.25em -0.1em rgba(0,0,0,.5);border-radius:.16em;max-width:20.8333333333em}.theme-ntos.mode-light .Divider--horizontal{margin:.5em 0}.theme-ntos.mode-light .Divider--horizontal:not(.Divider--hidden){border-top:.1666666667em solid rgba(0,0,0,.1)}.theme-ntos.mode-light .Divider--vertical{height:100%;margin:0 .5em}.theme-ntos.mode-light .Divider--vertical:not(.Divider--hidden){border-left:.1666666667em solid rgba(0,0,0,.1)}.theme-ntos.mode-light .Divider--horizontal{margin:.5em 0}.theme-ntos.mode-light .Divider--horizontal:not(.Divider--hidden){border-top:.1666666667em solid rgba(0,0,0,.1)}.theme-ntos.mode-light .Divider--vertical{height:100%;margin:0 .5em}.theme-ntos.mode-light .Divider--vertical:not(.Divider--hidden){border-left:.1666666667em solid rgba(0,0,0,.1)}.theme-ntos.mode-light .Stack--fill{height:100%}.theme-ntos.mode-light .Stack--horizontal>.Stack__item{margin-left:.5em}.theme-ntos.mode-light .Stack--horizontal>.Stack__item:first-child{margin-left:0}.theme-ntos.mode-light .Stack--vertical>.Stack__item{margin-top:.5em}.theme-ntos.mode-light .Stack--vertical>.Stack__item:first-child{margin-top:0}.theme-ntos.mode-light .Stack--zebra>.Stack__item:nth-child(even){background-color:rgba(217,234,255,.33)}.theme-ntos.mode-light .Stack--horizontal>.Stack__divider:not(.Stack__divider--hidden){border-left:.1666666667em solid rgba(0,0,0,.1)}.theme-ntos.mode-light .Stack--vertical>.Stack__divider:not(.Stack__divider--hidden){border-top:.1666666667em solid rgba(0,0,0,.1)}.theme-ntos.mode-light .ProgressBar{display:flex;position:relative;width:100%;padding:0 .5em;border-width:.0833333333em !important;border-style:solid !important;border-radius:.16em;background-color:rgba(255,255,255,.5);transition:border-color 900ms ease-out;align-items:center}.theme-ntos.mode-light .ProgressBar__fill{position:absolute;top:-0.5px;left:0px;bottom:-0.5px}.theme-ntos.mode-light .ProgressBar__fill--animated{transition:background-color 900ms ease-out,width 900ms ease-out}.theme-ntos.mode-light .ProgressBar__content{position:relative;line-height:1.4166666667em;width:100%;text-align:right}.theme-ntos.mode-light .ProgressBar--color--default{border:.0833333333em solid #d9eaff}.theme-ntos.mode-light .ProgressBar--color--default .ProgressBar__fill{background-color:#d9eaff}.theme-ntos.mode-light .ProgressBar--color--black{border-color:#404040 !important}.theme-ntos.mode-light .ProgressBar--color--black .ProgressBar__fill{background-color:#404040}.theme-ntos.mode-light .ProgressBar--color--white{border-color:#c3c3c3 !important}.theme-ntos.mode-light .ProgressBar--color--white .ProgressBar__fill{background-color:#c3c3c3}.theme-ntos.mode-light .ProgressBar--color--red{border-color:#e45e5e !important}.theme-ntos.mode-light .ProgressBar--color--red .ProgressBar__fill{background-color:#e45e5e}.theme-ntos.mode-light .ProgressBar--color--orange{border-color:#f59555 !important}.theme-ntos.mode-light .ProgressBar--color--orange .ProgressBar__fill{background-color:#f59555}.theme-ntos.mode-light .ProgressBar--color--yellow{border-color:#ffdb11 !important}.theme-ntos.mode-light .ProgressBar--color--yellow .ProgressBar__fill{background-color:#ffdb11}.theme-ntos.mode-light .ProgressBar--color--olive{border-color:#cae322 !important}.theme-ntos.mode-light .ProgressBar--color--olive .ProgressBar__fill{background-color:#cae322}.theme-ntos.mode-light .ProgressBar--color--green{border-color:#40dc65 !important}.theme-ntos.mode-light .ProgressBar--color--green .ProgressBar__fill{background-color:#40dc65}.theme-ntos.mode-light .ProgressBar--color--teal{border-color:#08fff4 !important}.theme-ntos.mode-light .ProgressBar--color--teal .ProgressBar__fill{background-color:#08fff4}.theme-ntos.mode-light .ProgressBar--color--blue{border-color:#51a5e3 !important}.theme-ntos.mode-light .ProgressBar--color--blue .ProgressBar__fill{background-color:#51a5e3}.theme-ntos.mode-light .ProgressBar--color--violet{border-color:#8b67d7 !important}.theme-ntos.mode-light .ProgressBar--color--violet .ProgressBar__fill{background-color:#8b67d7}.theme-ntos.mode-light .ProgressBar--color--purple{border-color:#bb64d8 !important}.theme-ntos.mode-light .ProgressBar--color--purple .ProgressBar__fill{background-color:#bb64d8}.theme-ntos.mode-light .ProgressBar--color--pink{border-color:#e86bb1 !important}.theme-ntos.mode-light .ProgressBar--color--pink .ProgressBar__fill{background-color:#e86bb1}.theme-ntos.mode-light .ProgressBar--color--brown{border-color:#c58b66 !important}.theme-ntos.mode-light .ProgressBar--color--brown .ProgressBar__fill{background-color:#c58b66}.theme-ntos.mode-light .ProgressBar--color--grey{border-color:#989898 !important}.theme-ntos.mode-light .ProgressBar--color--grey .ProgressBar__fill{background-color:#989898}.theme-ntos.mode-light .ProgressBar--color--light-grey{border-color:#bfbfbf !important}.theme-ntos.mode-light .ProgressBar--color--light-grey .ProgressBar__fill{background-color:#bfbfbf}.theme-ntos.mode-light .ProgressBar--color--good{border-color:#6ddd23 !important}.theme-ntos.mode-light .ProgressBar--color--good .ProgressBar__fill{background-color:#6ddd23}.theme-ntos.mode-light .ProgressBar--color--average{border-color:#fb9511 !important}.theme-ntos.mode-light .ProgressBar--color--average .ProgressBar__fill{background-color:#fb9511}.theme-ntos.mode-light .ProgressBar--color--bad{border-color:#dd3535 !important}.theme-ntos.mode-light .ProgressBar--color--bad .ProgressBar__fill{background-color:#dd3535}.theme-ntos.mode-light .ProgressBar--color--label{border-color:#627d9e !important}.theme-ntos.mode-light .ProgressBar--color--label .ProgressBar__fill{background-color:#627d9e}.theme-ntos.mode-light .Section{position:relative;margin-bottom:.5em;background-color:#c3d3e6;background-color:rgba(0,0,0,.1);box-sizing:border-box}.theme-ntos.mode-light .Section:last-child{margin-bottom:0}.theme-ntos.mode-light .Section__title{position:relative;padding:.5em;border-bottom:.1666666667em solid #7bb6ff}.theme-ntos.mode-light .Section__titleText{font-size:1.1666666667em;font-weight:bold;color:#000}.theme-ntos.mode-light .Section__buttons{position:absolute;display:inline-block;right:.5em;margin-top:-.0833333333em}.theme-ntos.mode-light .Section__rest{position:relative}.theme-ntos.mode-light .Section__content{padding:.66em .5em}.theme-ntos.mode-light .Section--fitted>.Section__rest>.Section__content{padding:0}.theme-ntos.mode-light .Section--fill{display:flex;flex-direction:column;height:100%}.theme-ntos.mode-light .Section--fill>.Section__rest{flex-grow:1}.theme-ntos.mode-light .Section--fill>.Section__rest>.Section__content{height:100%}.theme-ntos.mode-light .Section--fill.Section--scrollable>.Section__rest>.Section__content{position:absolute;top:0;left:0;right:0;bottom:0}.theme-ntos.mode-light .Section--fill.Section--iefix{display:table !important;width:100% !important;height:100% !important;border-collapse:collapse;border-spacing:0}.theme-ntos.mode-light .Section--fill.Section--iefix>.Section__rest{display:table-row !important;height:100% !important}.theme-ntos.mode-light .Section--scrollable{overflow-x:hidden;overflow-y:hidden}.theme-ntos.mode-light .Section--scrollable>.Section__rest>.Section__content{overflow-y:scroll;overflow-x:hidden}.theme-ntos.mode-light .Section .Section{background-color:transparent;margin-left:-0.5em;margin-right:-0.5em}.theme-ntos.mode-light .Section .Section:first-child{margin-top:-0.5em}.theme-ntos.mode-light .Section .Section .Section__titleText{font-size:1.0833333333em}.theme-ntos.mode-light .Section .Section .Section .Section__titleText{font-size:1em}.theme-ntos.mode-light .SectionEx .Section__title{display:flex}.theme-ntos.mode-light .SectionEx .Section__titleText{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;flex:auto}.theme-ntos.mode-light .SectionEx .Section__buttons{position:inherit;right:inherit;flex:none}.theme-ntos.mode-light .SectionEx__capitalize .Section__titleText{text-transform:capitalize}.theme-ntos.mode-light .Button{position:relative;display:inline-block;line-height:1.667em;padding:0 .5em;margin-right:.1666666667em;white-space:nowrap;outline:0;border-radius:.16em;margin-bottom:.1666666667em;user-select:none;-ms-user-select:none}.theme-ntos.mode-light .Button:last-child{margin-right:0;margin-bottom:0}.theme-ntos.mode-light .Button .fa,.theme-ntos.mode-light .Button .fa-solid,.theme-ntos.mode-light .Button .fa-regular{margin-left:0;margin-right:0;min-width:1.333em;text-align:center}.theme-ntos.mode-light .Button--hasContent .fa,.theme-ntos.mode-light .Button--hasContent .fa-solid,.theme-ntos.mode-light .Button--hasContent .fa-regular{margin-right:.25em}.theme-ntos.mode-light .Button--hasContent.Button--iconPosition--right .fa,.theme-ntos.mode-light .Button--hasContent.Button--iconPosition--right .fas,.theme-ntos.mode-light .Button--hasContent.Button--iconPosition--right .far{margin-right:0px;margin-left:3px}.theme-ntos.mode-light .Button--ellipsis{overflow:hidden;text-overflow:ellipsis}.theme-ntos.mode-light .Button--ellipsis .Button__content{overflow:hidden;text-overflow:ellipsis}.theme-ntos.mode-light .Button--fluid{display:block;margin-left:0;margin-right:0}.theme-ntos.mode-light .Button--circular{border-radius:50%}.theme-ntos.mode-light .Button--compact{padding:0 .25em;line-height:1.333em}.theme-ntos.mode-light .Button--color--black{transition:color 50ms,background-color 50ms;background-color:#404040;color:#fff}.theme-ntos.mode-light .Button--color--black:hover{transition:color 0ms,background-color 0ms}.theme-ntos.mode-light .Button--color--black:focus{transition:color 100ms,background-color 100ms}.theme-ntos.mode-light .Button--color--black:hover,.theme-ntos.mode-light .Button--color--black:focus{background-color:#5d5d5d;color:#fff}.theme-ntos.mode-light .Button--color--black:active{background-color:#797979}.theme-ntos.mode-light .Button--color--white{transition:color 50ms,background-color 50ms;background-color:#c3c3c3;color:#000}.theme-ntos.mode-light .Button--color--white:hover{transition:color 0ms,background-color 0ms}.theme-ntos.mode-light .Button--color--white:focus{transition:color 100ms,background-color 100ms}.theme-ntos.mode-light .Button--color--white:hover,.theme-ntos.mode-light .Button--color--white:focus{background-color:#f4f4f4;color:#000}.theme-ntos.mode-light .Button--color--white:active{background-color:#f9f9f9}.theme-ntos.mode-light .Button--color--red{transition:color 50ms,background-color 50ms;background-color:#e45e5e;color:#fff}.theme-ntos.mode-light .Button--color--red:hover{transition:color 0ms,background-color 0ms}.theme-ntos.mode-light .Button--color--red:focus{transition:color 100ms,background-color 100ms}.theme-ntos.mode-light .Button--color--red:hover,.theme-ntos.mode-light .Button--color--red:focus{background-color:#f1a8a8;color:#fff}.theme-ntos.mode-light .Button--color--red:active{background-color:#fcefef}.theme-ntos.mode-light .Button--color--orange{transition:color 50ms,background-color 50ms;background-color:#f59555;color:#000}.theme-ntos.mode-light .Button--color--orange:hover{transition:color 0ms,background-color 0ms}.theme-ntos.mode-light .Button--color--orange:focus{transition:color 100ms,background-color 100ms}.theme-ntos.mode-light .Button--color--orange:hover,.theme-ntos.mode-light .Button--color--orange:focus{background-color:#fac9a8;color:#000}.theme-ntos.mode-light .Button--color--orange:active{background-color:#fef5ee}.theme-ntos.mode-light .Button--color--yellow{transition:color 50ms,background-color 50ms;background-color:#ffdb11;color:#000}.theme-ntos.mode-light .Button--color--yellow:hover{transition:color 0ms,background-color 0ms}.theme-ntos.mode-light .Button--color--yellow:focus{transition:color 100ms,background-color 100ms}.theme-ntos.mode-light .Button--color--yellow:hover,.theme-ntos.mode-light .Button--color--yellow:focus{background-color:#ffe760;color:#000}.theme-ntos.mode-light .Button--color--yellow:active{background-color:#fff3ae}.theme-ntos.mode-light .Button--color--olive{transition:color 50ms,background-color 50ms;background-color:#cae322;color:#000}.theme-ntos.mode-light .Button--color--olive:hover{transition:color 0ms,background-color 0ms}.theme-ntos.mode-light .Button--color--olive:focus{transition:color 100ms,background-color 100ms}.theme-ntos.mode-light .Button--color--olive:hover,.theme-ntos.mode-light .Button--color--olive:focus{background-color:#dbec66;color:#000}.theme-ntos.mode-light .Button--color--olive:active{background-color:#ebf5ac}.theme-ntos.mode-light .Button--color--green{transition:color 50ms,background-color 50ms;background-color:#40dc65;color:#000}.theme-ntos.mode-light .Button--color--green:hover{transition:color 0ms,background-color 0ms}.theme-ntos.mode-light .Button--color--green:focus{transition:color 100ms,background-color 100ms}.theme-ntos.mode-light .Button--color--green:hover,.theme-ntos.mode-light .Button--color--green:focus{background-color:#84e99c;color:#000}.theme-ntos.mode-light .Button--color--green:active{background-color:#c9f6d3}.theme-ntos.mode-light .Button--color--teal{transition:color 50ms,background-color 50ms;background-color:#08fff4;color:#000}.theme-ntos.mode-light .Button--color--teal:hover{transition:color 0ms,background-color 0ms}.theme-ntos.mode-light .Button--color--teal:focus{transition:color 100ms,background-color 100ms}.theme-ntos.mode-light .Button--color--teal:hover,.theme-ntos.mode-light .Button--color--teal:focus{background-color:#56fff8;color:#000}.theme-ntos.mode-light .Button--color--teal:active{background-color:#a4fffb}.theme-ntos.mode-light .Button--color--blue{transition:color 50ms,background-color 50ms;background-color:#51a5e3;color:#fff}.theme-ntos.mode-light .Button--color--blue:hover{transition:color 0ms,background-color 0ms}.theme-ntos.mode-light .Button--color--blue:focus{transition:color 100ms,background-color 100ms}.theme-ntos.mode-light .Button--color--blue:hover,.theme-ntos.mode-light .Button--color--blue:focus{background-color:#9acbef;color:#fff}.theme-ntos.mode-light .Button--color--blue:active{background-color:#e3f0fb}.theme-ntos.mode-light .Button--color--violet{transition:color 50ms,background-color 50ms;background-color:#8b67d7;color:#fff}.theme-ntos.mode-light .Button--color--violet:hover{transition:color 0ms,background-color 0ms}.theme-ntos.mode-light .Button--color--violet:focus{transition:color 100ms,background-color 100ms}.theme-ntos.mode-light .Button--color--violet:hover,.theme-ntos.mode-light .Button--color--violet:focus{background-color:#bface9;color:#fff}.theme-ntos.mode-light .Button--color--violet:active{background-color:#f3effb}.theme-ntos.mode-light .Button--color--purple{transition:color 50ms,background-color 50ms;background-color:#bb64d8;color:#fff}.theme-ntos.mode-light .Button--color--purple:hover{transition:color 0ms,background-color 0ms}.theme-ntos.mode-light .Button--color--purple:focus{transition:color 100ms,background-color 100ms}.theme-ntos.mode-light .Button--color--purple:hover,.theme-ntos.mode-light .Button--color--purple:focus{background-color:#d9a9e9;color:#fff}.theme-ntos.mode-light .Button--color--purple:active{background-color:#f7edfa}.theme-ntos.mode-light .Button--color--pink{transition:color 50ms,background-color 50ms;background-color:#e86bb1;color:#fff}.theme-ntos.mode-light .Button--color--pink:hover{transition:color 0ms,background-color 0ms}.theme-ntos.mode-light .Button--color--pink:focus{transition:color 100ms,background-color 100ms}.theme-ntos.mode-light .Button--color--pink:hover,.theme-ntos.mode-light .Button--color--pink:focus{background-color:#f4b7d9;color:#fff}.theme-ntos.mode-light .Button--color--pink:active{background-color:#fdf0f7}.theme-ntos.mode-light .Button--color--brown{transition:color 50ms,background-color 50ms;background-color:#c58b66;color:#fff}.theme-ntos.mode-light .Button--color--brown:hover{transition:color 0ms,background-color 0ms}.theme-ntos.mode-light .Button--color--brown:focus{transition:color 100ms,background-color 100ms}.theme-ntos.mode-light .Button--color--brown:hover,.theme-ntos.mode-light .Button--color--brown:focus{background-color:#dbb9a2;color:#fff}.theme-ntos.mode-light .Button--color--brown:active{background-color:#f3e6df}.theme-ntos.mode-light .Button--color--grey{transition:color 50ms,background-color 50ms;background-color:#989898;color:#fff}.theme-ntos.mode-light .Button--color--grey:hover{transition:color 0ms,background-color 0ms}.theme-ntos.mode-light .Button--color--grey:focus{transition:color 100ms,background-color 100ms}.theme-ntos.mode-light .Button--color--grey:hover,.theme-ntos.mode-light .Button--color--grey:focus{background-color:#c2c2c2;color:#fff}.theme-ntos.mode-light .Button--color--grey:active{background-color:#ededed}.theme-ntos.mode-light .Button--color--light-grey{transition:color 50ms,background-color 50ms;background-color:#bfbfbf;color:#000}.theme-ntos.mode-light .Button--color--light-grey:hover{transition:color 0ms,background-color 0ms}.theme-ntos.mode-light .Button--color--light-grey:focus{transition:color 100ms,background-color 100ms}.theme-ntos.mode-light .Button--color--light-grey:hover,.theme-ntos.mode-light .Button--color--light-grey:focus{background-color:#efefef;color:#000}.theme-ntos.mode-light .Button--color--light-grey:active{background-color:#f9f9f9}.theme-ntos.mode-light .Button--color--good{transition:color 50ms,background-color 50ms;background-color:#6ddd23;color:#000}.theme-ntos.mode-light .Button--color--good:hover{transition:color 0ms,background-color 0ms}.theme-ntos.mode-light .Button--color--good:focus{transition:color 100ms,background-color 100ms}.theme-ntos.mode-light .Button--color--good:hover,.theme-ntos.mode-light .Button--color--good:focus{background-color:#99e765;color:#000}.theme-ntos.mode-light .Button--color--good:active{background-color:#c5f1a8}.theme-ntos.mode-light .Button--color--average{transition:color 50ms,background-color 50ms;background-color:#fb9511;color:#000}.theme-ntos.mode-light .Button--color--average:hover{transition:color 0ms,background-color 0ms}.theme-ntos.mode-light .Button--color--average:focus{transition:color 100ms,background-color 100ms}.theme-ntos.mode-light .Button--color--average:hover,.theme-ntos.mode-light .Button--color--average:focus{background-color:#fcb75e;color:#000}.theme-ntos.mode-light .Button--color--average:active{background-color:#fedaab}.theme-ntos.mode-light .Button--color--bad{transition:color 50ms,background-color 50ms;background-color:#dd3535;color:#fff}.theme-ntos.mode-light .Button--color--bad:hover{transition:color 0ms,background-color 0ms}.theme-ntos.mode-light .Button--color--bad:focus{transition:color 100ms,background-color 100ms}.theme-ntos.mode-light .Button--color--bad:hover,.theme-ntos.mode-light .Button--color--bad:focus{background-color:#e97a7a;color:#fff}.theme-ntos.mode-light .Button--color--bad:active{background-color:#f4bdbd}.theme-ntos.mode-light .Button--color--label{transition:color 50ms,background-color 50ms;background-color:#627d9e;color:#fff}.theme-ntos.mode-light .Button--color--label:hover{transition:color 0ms,background-color 0ms}.theme-ntos.mode-light .Button--color--label:focus{transition:color 100ms,background-color 100ms}.theme-ntos.mode-light .Button--color--label:hover,.theme-ntos.mode-light .Button--color--label:focus{background-color:#91a4bb;color:#fff}.theme-ntos.mode-light .Button--color--label:active{background-color:#c0cbd8}.theme-ntos.mode-light .Button--color--default{transition:color 50ms,background-color 50ms;background-color:#d9eaff;color:#000}.theme-ntos.mode-light .Button--color--default:hover{transition:color 0ms,background-color 0ms}.theme-ntos.mode-light .Button--color--default:focus{transition:color 100ms,background-color 100ms}.theme-ntos.mode-light .Button--color--default:hover,.theme-ntos.mode-light .Button--color--default:focus{background-color:#f8fbff;color:#000}.theme-ntos.mode-light .Button--color--default:active{background-color:#fbfdff}.theme-ntos.mode-light .Button--color--caution{transition:color 50ms,background-color 50ms;background-color:#b96817;color:#fff}.theme-ntos.mode-light .Button--color--caution:hover{transition:color 0ms,background-color 0ms}.theme-ntos.mode-light .Button--color--caution:focus{transition:color 100ms,background-color 100ms}.theme-ntos.mode-light .Button--color--caution:hover,.theme-ntos.mode-light .Button--color--caution:focus{background-color:#df8b37;color:#fff}.theme-ntos.mode-light .Button--color--caution:active{background-color:#e9ad71}.theme-ntos.mode-light .Button--color--danger{transition:color 50ms,background-color 50ms;background-color:#9a9d00;color:#fff}.theme-ntos.mode-light .Button--color--danger:hover{transition:color 0ms,background-color 0ms}.theme-ntos.mode-light .Button--color--danger:focus{transition:color 100ms,background-color 100ms}.theme-ntos.mode-light .Button--color--danger:hover,.theme-ntos.mode-light .Button--color--danger:focus{background-color:#c4c813;color:#fff}.theme-ntos.mode-light .Button--color--danger:active{background-color:#eef226}.theme-ntos.mode-light .Button--color--transparent{transition:color 50ms,background-color 50ms;background-color:#d9eaff;color:#000;background-color:rgba(217,234,255,0);color:rgba(33,33,34,.75)}.theme-ntos.mode-light .Button--color--transparent:hover{transition:color 0ms,background-color 0ms}.theme-ntos.mode-light .Button--color--transparent:focus{transition:color 100ms,background-color 100ms}.theme-ntos.mode-light .Button--color--transparent:hover,.theme-ntos.mode-light .Button--color--transparent:focus{background-color:#f8fbff;color:#000}.theme-ntos.mode-light .Button--color--transparent:active{background-color:#fbfdff}.theme-ntos.mode-light .Button--disabled{background-color:#777 !important}.theme-ntos.mode-light .Button--selected{transition:color 50ms,background-color 50ms;background-color:#58c44a;color:#000}.theme-ntos.mode-light .Button--selected:hover{transition:color 0ms,background-color 0ms}.theme-ntos.mode-light .Button--selected:focus{transition:color 100ms,background-color 100ms}.theme-ntos.mode-light .Button--selected:hover,.theme-ntos.mode-light .Button--selected:focus{background-color:#8fd885;color:#000}.theme-ntos.mode-light .Button--selected:active{background-color:#c6ebc1}.theme-ntos.mode-light .Button--flex{display:inline-flex;flex-direction:column}.theme-ntos.mode-light .Button--flex--fluid{width:100%}.theme-ntos.mode-light .Button--verticalAlignContent--top{justify-content:flex-start}.theme-ntos.mode-light .Button--verticalAlignContent--middle{justify-content:center}.theme-ntos.mode-light .Button--verticalAlignContent--bottom{justify-content:flex-end}.theme-ntos.mode-light .Button__content{display:block;align-self:stretch}.theme-ntos.mode-light .Input{position:relative;display:inline-block;width:10em;border:.0833333333em solid #4171a8;border:.0833333333em solid rgba(65,113,168,.75);border-radius:.16em;color:#000;background-color:#d9eaff;padding:0 .3333333333em;margin-right:.1666666667em;line-height:1.4166666667em;overflow:visible}.theme-ntos.mode-light .Input--fluid{display:block;width:auto}.theme-ntos.mode-light .Input__baseline{display:inline-block;color:transparent}.theme-ntos.mode-light .Input__input{display:block;position:absolute;top:0;bottom:0;left:0;right:0;border:0;outline:0;width:100%;font-size:1em;line-height:1.4166666667em;height:1.4166666667em;margin:0;padding:0 .5em;font-family:Verdana,sans-serif;background-color:transparent;color:#000;color:inherit}.theme-ntos.mode-light .Input__input:-ms-input-placeholder{font-style:italic;color:#777;color:rgba(255,255,255,.45)}.theme-ntos.mode-light .Input--monospace .Input__input{font-family:"Consolas",monospace}.theme-ntos.mode-light .Input{position:relative;display:inline-block;width:10em;border:.0833333333em solid #4171a8;border:.0833333333em solid rgba(65,113,168,.75);border-radius:.16em;color:#000;background-color:#d9eaff;padding:0 .3333333333em;margin-right:.1666666667em;line-height:1.4166666667em;overflow:visible}.theme-ntos.mode-light .Input--fluid{display:block;width:auto}.theme-ntos.mode-light .Input__baseline{display:inline-block;color:transparent}.theme-ntos.mode-light .Input__input{display:block;position:absolute;top:0;bottom:0;left:0;right:0;border:0;outline:0;width:100%;font-size:1em;line-height:1.4166666667em;height:1.4166666667em;margin:0;padding:0 .5em;font-family:Verdana,sans-serif;background-color:transparent;color:#000;color:inherit}.theme-ntos.mode-light .Input__input:-ms-input-placeholder{font-style:italic;color:#777;color:rgba(255,255,255,.45)}.theme-ntos.mode-light .Input--monospace .Input__input{font-family:"Consolas",monospace}.theme-ntos.mode-light .TextArea{position:relative;display:inline-block;border:.0833333333em solid #4171a8;border:.0833333333em solid rgba(65,113,168,.75);border-radius:.16em;background-color:#d9eaff;margin-right:.1666666667em;line-height:1.4166666667em;box-sizing:border-box;width:100%}.theme-ntos.mode-light .TextArea--fluid{display:block;width:auto;height:auto}.theme-ntos.mode-light .TextArea__textarea{display:block;position:absolute;top:0;bottom:0;left:0;right:0;border:0;outline:0;width:100%;height:100%;font-size:1em;line-height:1.4166666667em;min-height:1.4166666667em;margin:0;padding:0 .5em;font-family:inherit;background-color:transparent;color:inherit;box-sizing:border-box;word-wrap:break-word;overflow:hidden}.theme-ntos.mode-light .TextArea__textarea:-ms-input-placeholder{font-style:italic;color:#777;color:rgba(255,255,255,.45)}.theme-ntos.mode-light .Modal{background-color:#d9eaff;max-width:calc(100% - 1rem);padding:1rem}.theme-ntos.mode-light .Input{position:relative;display:inline-block;width:10em;border:.0833333333em solid #4171a8;border:.0833333333em solid rgba(65,113,168,.75);border-radius:.16em;color:#000;background-color:#d9eaff;padding:0 .3333333333em;margin-right:.1666666667em;line-height:1.4166666667em;overflow:visible}.theme-ntos.mode-light .Input--fluid{display:block;width:auto}.theme-ntos.mode-light .Input__baseline{display:inline-block;color:transparent}.theme-ntos.mode-light .Input__input{display:block;position:absolute;top:0;bottom:0;left:0;right:0;border:0;outline:0;width:100%;font-size:1em;line-height:1.4166666667em;height:1.4166666667em;margin:0;padding:0 .5em;font-family:Verdana,sans-serif;background-color:transparent;color:#000;color:inherit}.theme-ntos.mode-light .Input__input:-ms-input-placeholder{font-style:italic;color:#777;color:rgba(255,255,255,.45)}.theme-ntos.mode-light .Input--monospace .Input__input{font-family:"Consolas",monospace}.theme-ntos.mode-light .NumberInput{position:relative;display:inline-block;border:.0833333333em solid #4171a8;border:.0833333333em solid rgba(65,113,168,.75);border-radius:.16em;color:#4171a8;background-color:#d9eaff;padding:0 .3333333333em;margin-right:.1666666667em;line-height:1.4166666667em;text-align:right;overflow:visible;cursor:n-resize}.theme-ntos.mode-light .NumberInput--fluid{display:block}.theme-ntos.mode-light .NumberInput__content{margin-left:.5em}.theme-ntos.mode-light .NumberInput__barContainer{position:absolute;top:.1666666667em;bottom:.1666666667em;left:.1666666667em}.theme-ntos.mode-light .NumberInput__bar{position:absolute;bottom:0;left:0;width:.25em;box-sizing:border-box;border-bottom:.0833333333em solid #4171a8;background-color:#4171a8}.theme-ntos.mode-light .NumberInput__input{display:block;position:absolute;top:0;bottom:0;left:0;right:0;border:0;outline:0;width:100%;font-size:1em;line-height:1.4166666667em;height:1.4166666667em;margin:0;padding:0 .5em;font-family:Verdana,sans-serif;background-color:#d9eaff;color:#000;text-align:right}.theme-ntos.mode-light .Tabs{display:flex;align-items:stretch;overflow:hidden;background-color:rgba(217,234,255,.33)}.theme-ntos.mode-light .Tabs--fill{height:100%}.theme-ntos.mode-light .Section .Tabs{background-color:transparent}.theme-ntos.mode-light .Section:not(.Section--fitted) .Tabs{margin:0 -0.5em .5em}.theme-ntos.mode-light .Section:not(.Section--fitted) .Tabs:first-child{margin-top:-0.5em}.theme-ntos.mode-light .Tabs--vertical{flex-direction:column;padding:.25em 0 .25em .25em}.theme-ntos.mode-light .Tabs--horizontal{margin-bottom:.5em;padding:.25em .25em 0 .25em}.theme-ntos.mode-light .Tabs--horizontal:last-child{margin-bottom:0}.theme-ntos.mode-light .Tabs__Tab{flex-grow:0}.theme-ntos.mode-light .Tabs--fluid .Tabs__Tab{flex-grow:1}.theme-ntos.mode-light .Tab{display:flex;align-items:center;justify-content:space-between;background-color:transparent;color:rgba(0,0,0,.5);min-height:2.25em;min-width:4em}.theme-ntos.mode-light .Tab:not(.Tab--selected):hover{background-color:rgba(0,0,0,.075)}.theme-ntos.mode-light .Tab--selected{background-color:rgba(0,0,0,.125);color:rgba(0,0,0,.9)}.theme-ntos.mode-light .Tab__text{flex-grow:1;margin:0 .5em}.theme-ntos.mode-light .Tab__left{min-width:1.5em;text-align:center;margin-left:.25em}.theme-ntos.mode-light .Tab__right{min-width:1.5em;text-align:center;margin-right:.25em}.theme-ntos.mode-light .Tabs--horizontal .Tab{border-top:.1666666667em solid transparent;border-bottom:.1666666667em solid transparent;border-top-left-radius:.25em;border-top-right-radius:.25em}.theme-ntos.mode-light .Tabs--horizontal .Tab--selected{border-bottom:.1666666667em solid #d4e7ff}.theme-ntos.mode-light .Tabs--vertical .Tab{min-height:2em;border-left:.1666666667em solid transparent;border-right:.1666666667em solid transparent;border-top-left-radius:.25em;border-bottom-left-radius:.25em}.theme-ntos.mode-light .Tabs--vertical .Tab--selected{border-right:.1666666667em solid #d4e7ff}.theme-ntos.mode-light .Tab--selected.Tab--color--black{color:#404040}.theme-ntos.mode-light .Tabs--horizontal .Tab--selected.Tab--color--black{border-bottom-color:#000}.theme-ntos.mode-light .Tabs--vertical .Tab--selected.Tab--color--black{border-right-color:#000}.theme-ntos.mode-light .Tab--selected.Tab--color--white{color:#b6b6b6}.theme-ntos.mode-light .Tabs--horizontal .Tab--selected.Tab--color--white{border-bottom-color:#9e9e9e}.theme-ntos.mode-light .Tabs--vertical .Tab--selected.Tab--color--white{border-right-color:#9e9e9e}.theme-ntos.mode-light .Tab--selected.Tab--color--red{color:#e14d4d}.theme-ntos.mode-light .Tabs--horizontal .Tab--selected.Tab--color--red{border-bottom-color:#c82121}.theme-ntos.mode-light .Tabs--vertical .Tab--selected.Tab--color--red{border-right-color:#c82121}.theme-ntos.mode-light .Tab--selected.Tab--color--orange{color:#f48942}.theme-ntos.mode-light .Tabs--horizontal .Tab--selected.Tab--color--orange{border-bottom-color:#e6630d}.theme-ntos.mode-light .Tabs--vertical .Tab--selected.Tab--color--orange{border-right-color:#e6630d}.theme-ntos.mode-light .Tab--selected.Tab--color--yellow{color:#ffd902}.theme-ntos.mode-light .Tabs--horizontal .Tab--selected.Tab--color--yellow{border-bottom-color:#ad9300}.theme-ntos.mode-light .Tabs--vertical .Tab--selected.Tab--color--yellow{border-right-color:#ad9300}.theme-ntos.mode-light .Tab--selected.Tab--color--olive{color:#c3dc1c}.theme-ntos.mode-light .Tabs--horizontal .Tab--selected.Tab--color--olive{border-bottom-color:#7e8e12}.theme-ntos.mode-light .Tabs--vertical .Tab--selected.Tab--color--olive{border-right-color:#7e8e12}.theme-ntos.mode-light .Tab--selected.Tab--color--green{color:#33da5a}.theme-ntos.mode-light .Tabs--horizontal .Tab--selected.Tab--color--green{border-bottom-color:#1d9f3b}.theme-ntos.mode-light .Tabs--vertical .Tab--selected.Tab--color--green{border-right-color:#1d9f3b}.theme-ntos.mode-light .Tab--selected.Tab--color--teal{color:#00faef}.theme-ntos.mode-light .Tabs--horizontal .Tab--selected.Tab--color--teal{border-bottom-color:#00a39c}.theme-ntos.mode-light .Tabs--vertical .Tab--selected.Tab--color--teal{border-right-color:#00a39c}.theme-ntos.mode-light .Tab--selected.Tab--color--blue{color:#419ce1}.theme-ntos.mode-light .Tabs--horizontal .Tab--selected.Tab--color--blue{border-bottom-color:#1e78bb}.theme-ntos.mode-light .Tabs--vertical .Tab--selected.Tab--color--blue{border-right-color:#1e78bb}.theme-ntos.mode-light .Tab--selected.Tab--color--violet{color:#7f58d3}.theme-ntos.mode-light .Tabs--horizontal .Tab--selected.Tab--color--violet{border-bottom-color:#5a30b5}.theme-ntos.mode-light .Tabs--vertical .Tab--selected.Tab--color--violet{border-right-color:#5a30b5}.theme-ntos.mode-light .Tab--selected.Tab--color--purple{color:#b455d4}.theme-ntos.mode-light .Tabs--horizontal .Tab--selected.Tab--color--purple{border-bottom-color:#932eb4}.theme-ntos.mode-light .Tabs--vertical .Tab--selected.Tab--color--purple{border-right-color:#932eb4}.theme-ntos.mode-light .Tab--selected.Tab--color--pink{color:#e558a7}.theme-ntos.mode-light .Tabs--horizontal .Tab--selected.Tab--color--pink{border-bottom-color:#db228a}.theme-ntos.mode-light .Tabs--vertical .Tab--selected.Tab--color--pink{border-right-color:#db228a}.theme-ntos.mode-light .Tab--selected.Tab--color--brown{color:#c0825a}.theme-ntos.mode-light .Tabs--horizontal .Tab--selected.Tab--color--brown{border-bottom-color:#955d39}.theme-ntos.mode-light .Tabs--vertical .Tab--selected.Tab--color--brown{border-right-color:#955d39}.theme-ntos.mode-light .Tab--selected.Tab--color--grey{color:#8f8f8f}.theme-ntos.mode-light .Tabs--horizontal .Tab--selected.Tab--color--grey{border-bottom-color:#6a6a6a}.theme-ntos.mode-light .Tabs--vertical .Tab--selected.Tab--color--grey{border-right-color:#6a6a6a}.theme-ntos.mode-light .Tab--selected.Tab--color--light-grey{color:#b3b3b3}.theme-ntos.mode-light .Tabs--horizontal .Tab--selected.Tab--color--light-grey{border-bottom-color:#999}.theme-ntos.mode-light .Tabs--vertical .Tab--selected.Tab--color--light-grey{border-right-color:#999}.theme-ntos.mode-light .Tab--selected.Tab--color--good{color:#68d221}.theme-ntos.mode-light .Tabs--horizontal .Tab--selected.Tab--color--good{border-bottom-color:#428515}.theme-ntos.mode-light .Tabs--vertical .Tab--selected.Tab--color--good{border-right-color:#428515}.theme-ntos.mode-light .Tab--selected.Tab--color--average{color:#fa8e04}.theme-ntos.mode-light .Tabs--horizontal .Tab--selected.Tab--color--average{border-bottom-color:#a65f03}.theme-ntos.mode-light .Tabs--vertical .Tab--selected.Tab--color--average{border-right-color:#a65f03}.theme-ntos.mode-light .Tab--selected.Tab--color--bad{color:#db2929}.theme-ntos.mode-light .Tabs--horizontal .Tab--selected.Tab--color--bad{border-bottom-color:#971919}.theme-ntos.mode-light .Tabs--vertical .Tab--selected.Tab--color--bad{border-right-color:#971919}.theme-ntos.mode-light .Tab--selected.Tab--color--label{color:#5d7696}.theme-ntos.mode-light .Tabs--horizontal .Tab--selected.Tab--color--label{border-bottom-color:#3b4b5f}.theme-ntos.mode-light .Tabs--vertical .Tab--selected.Tab--color--label{border-right-color:#3b4b5f}.theme-ntos.mode-light .Slider{cursor:e-resize}.theme-ntos.mode-light .Slider__cursorOffset{position:absolute;top:0;left:0;bottom:0;transition:none !important}.theme-ntos.mode-light .Slider__cursor{position:absolute;top:0;right:-.0833333333em;bottom:0;width:0;border-left:.1666666667em solid #000}.theme-ntos.mode-light .Slider__pointer{position:absolute;right:-.4166666667em;bottom:-.3333333333em;width:0;height:0;border-left:.4166666667em solid transparent;border-right:.4166666667em solid transparent;border-bottom:.4166666667em solid #000}.theme-ntos.mode-light .Slider__popupValue{position:absolute;right:0;top:-2rem;font-size:1rem;padding:.25rem .5rem;color:#000;background-color:#fff;transform:translateX(50%);white-space:nowrap}.theme-ntos.mode-light .BlockQuote{color:#3b4b5f;border-left:.1666666667em solid #3b4b5f;padding-left:.5em;margin-bottom:.5em}.theme-ntos.mode-light .BlockQuote:last-child{margin-bottom:0}.theme-ntos.mode-light .Layout,.theme-ntos.mode-light .Layout *{scrollbar-base-color:#63a9ff;scrollbar-face-color:#ddecff;scrollbar-3dlight-color:#d9eaff;scrollbar-highlight-color:#d9eaff;scrollbar-track-color:#63a9ff;scrollbar-arrow-color:#ecf5ff;scrollbar-shadow-color:#ddecff}.theme-ntos.mode-light .Layout__content{position:absolute;top:0;bottom:0;left:0;right:0;overflow-x:hidden;overflow-y:hidden}.theme-ntos.mode-light .Layout__content--scrollable{overflow-y:scroll;margin-bottom:0}.theme-ntos.mode-light .Window{position:fixed;top:0;bottom:0;left:0;right:0;color:#000;background-color:#d9eaff;background-image:linear-gradient(to bottom, #e8f2ff 0%, #cae2ff 100%)}.theme-ntos.mode-light .Window__titleBar{position:fixed;z-index:1;top:0;left:0;width:100%;height:32px;height:2.6666666667rem}.theme-ntos.mode-light .Window__rest{position:fixed;top:32px;top:2.6666666667rem;bottom:0;left:0;right:0}.theme-ntos.mode-light .Window__contentPadding{margin:.5rem;height:calc(100% - 1.01rem)}.theme-ntos.mode-light .Window__contentPadding:after{height:0}.theme-ntos.mode-light .Layout__content--scrollable .Window__contentPadding:after{display:block;content:"";height:.5rem}.theme-ntos.mode-light .Window__dimmer{position:fixed;top:0;bottom:0;left:0;right:0;background-color:rgba(248,251,255,.25);pointer-events:none}.theme-ntos.mode-light .Window__resizeHandle__se{position:fixed;bottom:0;right:0;width:20px;width:1.6666666667rem;height:20px;height:1.6666666667rem;cursor:se-resize}.theme-ntos.mode-light .Window__resizeHandle__s{position:fixed;bottom:0;left:0;right:0;height:6px;height:.5rem;cursor:s-resize}.theme-ntos.mode-light .Window__resizeHandle__e{position:fixed;top:0;bottom:0;right:0;width:3px;width:.25rem;cursor:e-resize}.theme-ntos.mode-light .TitleBar{background-color:#d9eaff;border-bottom:1px solid rgba(0,0,0,.25);box-shadow:0 2px 2px rgba(0,0,0,.1);box-shadow:0 .1666666667rem .1666666667rem rgba(0,0,0,.1);user-select:none;-ms-user-select:none}.theme-ntos.mode-light .TitleBar__clickable{color:rgba(0,0,0,.5);background-color:#d9eaff;transition:color 250ms ease-out,background-color 250ms ease-out}.theme-ntos.mode-light .TitleBar__clickable:hover{color:#fff;background-color:#c00;transition:color 0ms,background-color 0ms}.theme-ntos.mode-light .TitleBar__title{position:absolute;top:0;left:46px;left:3.8333333333rem;color:rgba(0,0,0,.9);font-size:14px;font-size:1.1666666667rem;line-height:31px;line-height:2.5833333333rem;white-space:nowrap}.theme-ntos.mode-light .TitleBar__dragZone{position:absolute;top:0;left:0;right:0;height:32px;height:2.6666666667rem}.theme-ntos.mode-light .TitleBar__statusIcon{position:absolute;top:0;left:12px;left:1rem;transition:color .5s;font-size:20px;font-size:1.6666666667rem;line-height:32px !important;line-height:2.6666666667rem !important}.theme-ntos.mode-light .TitleBar__close{position:absolute;top:-1px;right:0;width:45px;width:3.75rem;height:32px;height:2.6666666667rem;font-size:20px;font-size:1.6666666667rem;line-height:31px;line-height:2.5833333333rem;text-align:center}.theme-ntos.mode-light .TitleBar__devBuildIndicator{position:absolute;top:6px;top:.5rem;right:52px;right:4.3333333333rem;min-width:20px;min-width:1.6666666667rem;padding:2px 4px;padding:.1666666667rem .3333333333rem;background-color:rgba(73,148,23,.75);color:#fff;text-align:center}.theme-ntos.mode-light .Layout__content{background-image:url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+DQo8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgdmVyc2lvbj0iMS4wIiB2aWV3Qm94PSIwIDAgNDI1IDIwMCIgb3BhY2l0eT0iLjA0Ij4NCiAgPHBhdGggZD0ibSAxNzguMDAzOTksMC4wMzg2OSAtNzEuMjAzOTMsMCBhIDYuNzYxMzQyMiw2LjAyNTU0OTUgMCAwIDAgLTYuNzYxMzQsNi4wMjU1NSBsIDAsMTg3Ljg3MTQ3IGEgNi43NjEzNDIyLDYuMDI1NTQ5NSAwIDAgMCA2Ljc2MTM0LDYuMDI1NTQgbCA1My4xMDcyLDAgYSA2Ljc2MTM0MjIsNi4wMjU1NDk1IDAgMCAwIDYuNzYxMzUsLTYuMDI1NTQgbCAwLC0xMDEuNTQ0MDE4IDcyLjIxNjI4LDEwNC42OTkzOTggYSA2Ljc2MTM0MjIsNi4wMjU1NDk1IDAgMCAwIDUuNzYwMTUsMi44NzAxNiBsIDczLjU1NDg3LDAgYSA2Ljc2MTM0MjIsNi4wMjU1NDk1IDAgMCAwIDYuNzYxMzUsLTYuMDI1NTQgbCAwLC0xODcuODcxNDcgYSA2Ljc2MTM0MjIsNi4wMjU1NDk1IDAgMCAwIC02Ljc2MTM1LC02LjAyNTU1IGwgLTU0LjcxNjQ0LDAgYSA2Ljc2MTM0MjIsNi4wMjU1NDk1IDAgMCAwIC02Ljc2MTMzLDYuMDI1NTUgbCAwLDEwMi42MTkzNSBMIDE4My43NjQxMywyLjkwODg2IGEgNi43NjEzNDIyLDYuMDI1NTQ5NSAwIDAgMCAtNS43NjAxNCwtMi44NzAxNyB6IiAvPg0KICA8cGF0aCBkPSJNIDQuODQ0NjMzMywyMi4xMDg3NSBBIDEzLjQxMjAzOSwxMi41MDE4NDIgMCAwIDEgMTMuNDc3NTg4LDAuMDM5MjQgbCA2Ni4xMTgzMTUsMCBhIDUuMzY0ODE1OCw1LjAwMDczNyAwIDAgMSA1LjM2NDgyMyw1LjAwMDczIGwgMCw3OS44NzkzMSB6IiAvPg0KICA8cGF0aCBkPSJtIDQyMC4xNTUzNSwxNzcuODkxMTkgYSAxMy40MTIwMzgsMTIuNTAxODQyIDAgMCAxIC04LjYzMjk1LDIyLjA2OTUxIGwgLTY2LjExODMyLDAgYSA1LjM2NDgxNTIsNS4wMDA3MzcgMCAwIDEgLTUuMzY0ODIsLTUuMDAwNzQgbCAwLC03OS44NzkzMSB6IiAvPg0KPC9zdmc+DQo8IS0tIFRoaXMgd29yayBpcyBsaWNlbnNlZCB1bmRlciBhIENyZWF0aXZlIENvbW1vbnMgQXR0cmlidXRpb24tU2hhcmVBbGlrZSA0LjAgSW50ZXJuYXRpb25hbCBMaWNlbnNlLiAtLT4NCjwhLS0gaHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvbGljZW5zZXMvYnktc2EvNC4wLyAtLT4NCg==)} diff --git a/browserassets/tgui/tgui.bundle.js b/browserassets/tgui/tgui.bundle.js index 3112a037eed26..c5c6d4c3c7d1a 100644 --- a/browserassets/tgui/tgui.bundle.js +++ b/browserassets/tgui/tgui.bundle.js @@ -1 +1 @@ -!function(){var e={92179:function(e,t,n){"use strict";t.__esModule=!0,t.popperGenerator=h,t.createPopper=void 0;var o=p(n(30505)),r=p(n(43545)),a=p(n(46213)),i=p(n(32440)),c=(p(n(61131)),p(n(45700))),l=p(n(68369)),u=(p(n(38574)),p(n(25435)),p(n(22709)),p(n(36284))),d=p(n(19574));t.detectOverflow=d["default"];var s=n(67458);n(56728);function p(e){return e&&e.__esModule?e:{"default":e}}var m={placement:"bottom",modifiers:[],strategy:"absolute"};function f(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];return!t.some((function(e){return!(e&&"function"==typeof e.getBoundingClientRect)}))}function h(e){void 0===e&&(e={});var t=e,n=t.defaultModifiers,d=void 0===n?[]:n,p=t.defaultOptions,h=void 0===p?m:p;return function(e,t,n){void 0===n&&(n=h);var p={placement:"bottom",orderedModifiers:[],options:Object.assign({},m,h),modifiersData:{},elements:{reference:e,popper:t},attributes:{},styles:{}},g=[],C=!1,N={state:p,setOptions:function(n){v(),p.options=Object.assign({},h,p.options,n),p.scrollParents={reference:(0,s.isElement)(e)?(0,a["default"])(e):e.contextElement?(0,a["default"])(e.contextElement):[],popper:(0,a["default"])(t)};var o=(0,c["default"])((0,u["default"])([].concat(d,p.options.modifiers)));return p.orderedModifiers=o.filter((function(e){return e.enabled})),p.orderedModifiers.forEach((function(e){var t=e.name,n=e.options,o=void 0===n?{}:n,r=e.effect;if("function"==typeof r){var a=r({state:p,name:t,instance:N,options:o}),i=function(){function e(){}return e}();g.push(a||i)}})),N.update()},forceUpdate:function(){if(!C){var e=p.elements,t=e.reference,n=e.popper;if(f(t,n)){p.rects={reference:(0,o["default"])(t,(0,i["default"])(n),"fixed"===p.options.strategy),popper:(0,r["default"])(n)},p.reset=!1,p.placement=p.options.placement,p.orderedModifiers.forEach((function(e){return p.modifiersData[e.name]=Object.assign({},e.data)}));for(var a=0;a<p.orderedModifiers.length;a++)if(!0!==p.reset){var c=p.orderedModifiers[a],l=c.fn,u=c.options,d=void 0===u?{}:u,s=c.name;"function"==typeof l&&(p=l({state:p,options:d,name:s,instance:N})||p)}else p.reset=!1,a=-1}}},update:(0,l["default"])((function(){return new Promise((function(e){N.forceUpdate(),e(p)}))})),destroy:function(){v(),C=!0}};if(!f(e,t))return N;function v(){g.forEach((function(e){return e()})),g=[]}return N.setOptions(n).then((function(e){!C&&n.onFirstUpdate&&n.onFirstUpdate(e)})),N}}var g=h();t.createPopper=g},97607:function(e,t,n){"use strict";t.__esModule=!0,t["default"]=function(e,t){var n=t.getRootNode&&t.getRootNode();if(e.contains(t))return!0;if(n&&(0,o.isShadowRoot)(n)){var r=t;do{if(r&&e.isSameNode(r))return!0;r=r.parentNode||r.host}while(r)}return!1};var o=n(67458)},94294:function(e,t,n){"use strict";t.__esModule=!0,t["default"]=function(e,t){void 0===t&&(t=!1);var n=e.getBoundingClientRect(),a=1,i=1;(0,o.isHTMLElement)(e)&&t&&(a=n.width/e.offsetWidth||1,i=n.height/e.offsetHeight||1);return{width:r(n.width/a),height:r(n.height/i),top:r(n.top/i),right:r(n.right/a),bottom:r(n.bottom/i),left:r(n.left/a),x:r(n.left/a),y:r(n.top/i)}};var o=n(67458),r=Math.round},48162:function(e,t,n){"use strict";t.__esModule=!0,t["default"]=function(e,t,n){var o="clippingParents"===t?function(e){var t=(0,i["default"])((0,p["default"])(e)),n=["absolute","fixed"].indexOf((0,u["default"])(e).position)>=0,o=n&&(0,d.isHTMLElement)(e)?(0,c["default"])(e):e;if(!(0,d.isElement)(o))return[];return t.filter((function(e){return(0,d.isElement)(e)&&(0,m["default"])(e,o)&&"body"!==(0,f["default"])(e)}))}(e):[].concat(t),r=[].concat(o,[n]),a=r[0],l=r.reduce((function(t,n){var o=N(e,n);return t.top=(0,g.max)(o.top,t.top),t.right=(0,g.min)(o.right,t.right),t.bottom=(0,g.min)(o.bottom,t.bottom),t.left=(0,g.max)(o.left,t.left),t}),N(e,a));return l.width=l.right-l.left,l.height=l.bottom-l.top,l.x=l.left,l.y=l.top,l};var o=n(56728),r=C(n(78331)),a=C(n(68692)),i=C(n(46213)),c=C(n(32440)),l=C(n(58386)),u=C(n(61131)),d=n(67458),s=C(n(94294)),p=C(n(31613)),m=C(n(97607)),f=C(n(99624)),h=C(n(20935)),g=n(62836);function C(e){return e&&e.__esModule?e:{"default":e}}function N(e,t){return t===o.viewport?(0,h["default"])((0,r["default"])(e)):(0,d.isHTMLElement)(t)?function(e){var t=(0,s["default"])(e);return t.top=t.top+e.clientTop,t.left=t.left+e.clientLeft,t.bottom=t.top+e.clientHeight,t.right=t.left+e.clientWidth,t.width=e.clientWidth,t.height=e.clientHeight,t.x=t.left,t.y=t.top,t}(t):(0,h["default"])((0,a["default"])((0,l["default"])(e)))}},30505:function(e,t,n){"use strict";t.__esModule=!0,t["default"]=function(e,t,n){void 0===n&&(n=!1);var d=(0,i.isHTMLElement)(t),s=(0,i.isHTMLElement)(t)&&function(e){var t=e.getBoundingClientRect(),n=t.width/e.offsetWidth||1,o=t.height/e.offsetHeight||1;return 1!==n||1!==o}(t),p=(0,l["default"])(t),m=(0,o["default"])(e,s),f={scrollLeft:0,scrollTop:0},h={x:0,y:0};(d||!d&&!n)&&(("body"!==(0,a["default"])(t)||(0,u["default"])(p))&&(f=(0,r["default"])(t)),(0,i.isHTMLElement)(t)?((h=(0,o["default"])(t,!0)).x+=t.clientLeft,h.y+=t.clientTop):p&&(h.x=(0,c["default"])(p)));return{x:m.left+f.scrollLeft-h.x,y:m.top+f.scrollTop-h.y,width:m.width,height:m.height}};var o=d(n(94294)),r=d(n(71942)),a=d(n(99624)),i=n(67458),c=d(n(45471)),l=d(n(58386)),u=d(n(37229));function d(e){return e&&e.__esModule?e:{"default":e}}},61131:function(e,t,n){"use strict";t.__esModule=!0,t["default"]=function(e){return(0,r["default"])(e).getComputedStyle(e)};var o,r=(o=n(31677))&&o.__esModule?o:{"default":o}},58386:function(e,t,n){"use strict";t.__esModule=!0,t["default"]=function(e){return(((0,o.isElement)(e)?e.ownerDocument:e.document)||window.document).documentElement};var o=n(67458)},68692:function(e,t,n){"use strict";t.__esModule=!0,t["default"]=function(e){var t,n=(0,o["default"])(e),l=(0,i["default"])(e),u=null==(t=e.ownerDocument)?void 0:t.body,d=(0,c.max)(n.scrollWidth,n.clientWidth,u?u.scrollWidth:0,u?u.clientWidth:0),s=(0,c.max)(n.scrollHeight,n.clientHeight,u?u.scrollHeight:0,u?u.clientHeight:0),p=-l.scrollLeft+(0,a["default"])(e),m=-l.scrollTop;"rtl"===(0,r["default"])(u||n).direction&&(p+=(0,c.max)(n.clientWidth,u?u.clientWidth:0)-d);return{width:d,height:s,x:p,y:m}};var o=l(n(58386)),r=l(n(61131)),a=l(n(45471)),i=l(n(1255)),c=n(62836);function l(e){return e&&e.__esModule?e:{"default":e}}},50552:function(e,t){"use strict";t.__esModule=!0,t["default"]=function(e){return{scrollLeft:e.scrollLeft,scrollTop:e.scrollTop}}},43545:function(e,t,n){"use strict";t.__esModule=!0,t["default"]=function(e){var t=(0,r["default"])(e),n=e.offsetWidth,o=e.offsetHeight;Math.abs(t.width-n)<=1&&(n=t.width);Math.abs(t.height-o)<=1&&(o=t.height);return{x:e.offsetLeft,y:e.offsetTop,width:n,height:o}};var o,r=(o=n(94294))&&o.__esModule?o:{"default":o}},99624:function(e,t){"use strict";t.__esModule=!0,t["default"]=function(e){return e?(e.nodeName||"").toLowerCase():null}},71942:function(e,t,n){"use strict";t.__esModule=!0,t["default"]=function(e){return e!==(0,r["default"])(e)&&(0,a.isHTMLElement)(e)?(0,i["default"])(e):(0,o["default"])(e)};var o=c(n(1255)),r=c(n(31677)),a=n(67458),i=c(n(50552));function c(e){return e&&e.__esModule?e:{"default":e}}},32440:function(e,t,n){"use strict";t.__esModule=!0,t["default"]=function(e){var t=(0,o["default"])(e),n=d(e);for(;n&&(0,c["default"])(n)&&"static"===(0,a["default"])(n).position;)n=d(n);if(n&&("html"===(0,r["default"])(n)||"body"===(0,r["default"])(n)&&"static"===(0,a["default"])(n).position))return t;return n||function(e){var t=-1!==navigator.userAgent.toLowerCase().indexOf("firefox");if(-1!==navigator.userAgent.indexOf("Trident")&&(0,i.isHTMLElement)(e)){if("fixed"===(0,a["default"])(e).position)return null}var n=(0,l["default"])(e);for(;(0,i.isHTMLElement)(n)&&["html","body"].indexOf((0,r["default"])(n))<0;){var o=(0,a["default"])(n);if("none"!==o.transform||"none"!==o.perspective||"paint"===o.contain||-1!==["transform","perspective"].indexOf(o.willChange)||t&&"filter"===o.willChange||t&&o.filter&&"none"!==o.filter)return n;n=n.parentNode}return null}(e)||t};var o=u(n(31677)),r=u(n(99624)),a=u(n(61131)),i=n(67458),c=u(n(79130)),l=u(n(31613));function u(e){return e&&e.__esModule?e:{"default":e}}function d(e){return(0,i.isHTMLElement)(e)&&"fixed"!==(0,a["default"])(e).position?e.offsetParent:null}},31613:function(e,t,n){"use strict";t.__esModule=!0,t["default"]=function(e){if("html"===(0,o["default"])(e))return e;return e.assignedSlot||e.parentNode||((0,a.isShadowRoot)(e)?e.host:null)||(0,r["default"])(e)};var o=i(n(99624)),r=i(n(58386)),a=n(67458);function i(e){return e&&e.__esModule?e:{"default":e}}},66055:function(e,t,n){"use strict";t.__esModule=!0,t["default"]=function l(e){if(["html","body","#document"].indexOf((0,a["default"])(e))>=0)return e.ownerDocument.body;if((0,i.isHTMLElement)(e)&&(0,r["default"])(e))return e;return l((0,o["default"])(e))};var o=c(n(31613)),r=c(n(37229)),a=c(n(99624)),i=n(67458);function c(e){return e&&e.__esModule?e:{"default":e}}},78331:function(e,t,n){"use strict";t.__esModule=!0,t["default"]=function(e){var t=(0,o["default"])(e),n=(0,r["default"])(e),i=t.visualViewport,c=n.clientWidth,l=n.clientHeight,u=0,d=0;i&&(c=i.width,l=i.height,/^((?!chrome|android).)*safari/i.test(navigator.userAgent)||(u=i.offsetLeft,d=i.offsetTop));return{width:c,height:l,x:u+(0,a["default"])(e),y:d}};var o=i(n(31677)),r=i(n(58386)),a=i(n(45471));function i(e){return e&&e.__esModule?e:{"default":e}}},31677:function(e,t){"use strict";t.__esModule=!0,t["default"]=function(e){if(null==e)return window;if("[object Window]"!==e.toString()){var t=e.ownerDocument;return t&&t.defaultView||window}return e}},1255:function(e,t,n){"use strict";t.__esModule=!0,t["default"]=function(e){var t=(0,r["default"])(e),n=t.pageXOffset,o=t.pageYOffset;return{scrollLeft:n,scrollTop:o}};var o,r=(o=n(31677))&&o.__esModule?o:{"default":o}},45471:function(e,t,n){"use strict";t.__esModule=!0,t["default"]=function(e){return(0,o["default"])((0,r["default"])(e)).left+(0,a["default"])(e).scrollLeft};var o=i(n(94294)),r=i(n(58386)),a=i(n(1255));function i(e){return e&&e.__esModule?e:{"default":e}}},67458:function(e,t,n){"use strict";t.__esModule=!0,t.isElement=function(e){var t=(0,r["default"])(e).Element;return e instanceof t||e instanceof Element},t.isHTMLElement=function(e){var t=(0,r["default"])(e).HTMLElement;return e instanceof t||e instanceof HTMLElement},t.isShadowRoot=function(e){if("undefined"==typeof ShadowRoot)return!1;var t=(0,r["default"])(e).ShadowRoot;return e instanceof t||e instanceof ShadowRoot};var o,r=(o=n(31677))&&o.__esModule?o:{"default":o}},37229:function(e,t,n){"use strict";t.__esModule=!0,t["default"]=function(e){var t=(0,r["default"])(e),n=t.overflow,o=t.overflowX,a=t.overflowY;return/auto|scroll|overlay|hidden/.test(n+a+o)};var o,r=(o=n(61131))&&o.__esModule?o:{"default":o}},79130:function(e,t,n){"use strict";t.__esModule=!0,t["default"]=function(e){return["table","td","th"].indexOf((0,r["default"])(e))>=0};var o,r=(o=n(99624))&&o.__esModule?o:{"default":o}},46213:function(e,t,n){"use strict";t.__esModule=!0,t["default"]=function l(e,t){var n;void 0===t&&(t=[]);var c=(0,o["default"])(e),u=c===(null==(n=e.ownerDocument)?void 0:n.body),d=(0,a["default"])(c),s=u?[d].concat(d.visualViewport||[],(0,i["default"])(c)?c:[]):c,p=t.concat(s);return u?p:p.concat(l((0,r["default"])(s)))};var o=c(n(66055)),r=c(n(31613)),a=c(n(31677)),i=c(n(37229));function c(e){return e&&e.__esModule?e:{"default":e}}},56728:function(e,t){"use strict";t.__esModule=!0,t.modifierPhases=t.afterWrite=t.write=t.beforeWrite=t.afterMain=t.main=t.beforeMain=t.afterRead=t.read=t.beforeRead=t.placements=t.variationPlacements=t.reference=t.popper=t.viewport=t.clippingParents=t.end=t.start=t.basePlacements=t.auto=t.left=t.right=t.bottom=t.top=void 0;t.top="top";var n="bottom";t.bottom=n;var o="right";t.right=o;var r="left";t.left=r;var a="auto";t.auto=a;var i=["top",n,o,r];t.basePlacements=i;var c="start";t.start=c;var l="end";t.end=l;t.clippingParents="clippingParents";t.viewport="viewport";t.popper="popper";t.reference="reference";var u=i.reduce((function(e,t){return e.concat([t+"-"+c,t+"-"+l])}),[]);t.variationPlacements=u;var d=[].concat(i,[a]).reduce((function(e,t){return e.concat([t,t+"-"+c,t+"-"+l])}),[]);t.placements=d;var s="beforeRead";t.beforeRead=s;var p="read";t.read=p;var m="afterRead";t.afterRead=m;var f="beforeMain";t.beforeMain=f;var h="main";t.main=h;var g="afterMain";t.afterMain=g;var C="beforeWrite";t.beforeWrite=C;var N="write";t.write=N;var v="afterWrite";t.afterWrite=v;var b=[s,p,m,f,h,g,C,N,v];t.modifierPhases=b},34739:function(e,t,n){"use strict";t.__esModule=!0;var o={popperGenerator:!0,detectOverflow:!0,createPopperBase:!0,createPopper:!0,createPopperLite:!0};t.createPopperLite=t.createPopper=t.createPopperBase=t.detectOverflow=t.popperGenerator=void 0;var r=n(56728);Object.keys(r).forEach((function(e){"default"!==e&&"__esModule"!==e&&(Object.prototype.hasOwnProperty.call(o,e)||e in t&&t[e]===r[e]||(t[e]=r[e]))}));var a=n(18726);Object.keys(a).forEach((function(e){"default"!==e&&"__esModule"!==e&&(Object.prototype.hasOwnProperty.call(o,e)||e in t&&t[e]===a[e]||(t[e]=a[e]))}));var i=n(92179);t.popperGenerator=i.popperGenerator,t.detectOverflow=i.detectOverflow,t.createPopperBase=i.createPopper;var c=n(48069);t.createPopper=c.createPopper;var l=n(39030);t.createPopperLite=l.createPopper},34559:function(e,t,n){"use strict";t.__esModule=!0,t["default"]=void 0;var o,r=(o=n(99624))&&o.__esModule?o:{"default":o},a=n(67458);var i={name:"applyStyles",enabled:!0,phase:"write",fn:function(e){var t=e.state;Object.keys(t.elements).forEach((function(e){var n=t.styles[e]||{},o=t.attributes[e]||{},i=t.elements[e];(0,a.isHTMLElement)(i)&&(0,r["default"])(i)&&(Object.assign(i.style,n),Object.keys(o).forEach((function(e){var t=o[e];!1===t?i.removeAttribute(e):i.setAttribute(e,!0===t?"":t)})))}))},effect:function(e){var t=e.state,n={popper:{position:t.options.strategy,left:"0",top:"0",margin:"0"},arrow:{position:"absolute"},reference:{}};return Object.assign(t.elements.popper.style,n.popper),t.styles=n,t.elements.arrow&&Object.assign(t.elements.arrow.style,n.arrow),function(){Object.keys(t.elements).forEach((function(e){var o=t.elements[e],i=t.attributes[e]||{},c=Object.keys(t.styles.hasOwnProperty(e)?t.styles[e]:n[e]).reduce((function(e,t){return e[t]="",e}),{});(0,a.isHTMLElement)(o)&&(0,r["default"])(o)&&(Object.assign(o.style,c),Object.keys(i).forEach((function(e){o.removeAttribute(e)})))}))}},requires:["computeStyles"]};t["default"]=i},76340:function(e,t,n){"use strict";t.__esModule=!0,t["default"]=void 0;var o=p(n(22709)),r=p(n(43545)),a=p(n(97607)),i=p(n(32440)),c=p(n(16615)),l=p(n(52534)),u=p(n(32055)),d=p(n(76294)),s=n(56728);n(67458);function p(e){return e&&e.__esModule?e:{"default":e}}var m=function(e,t){return e="function"==typeof e?e(Object.assign({},t.rects,{placement:t.placement})):e,(0,u["default"])("number"!=typeof e?e:(0,d["default"])(e,s.basePlacements))};var f={name:"arrow",enabled:!0,phase:"main",fn:function(e){var t,n=e.state,a=e.name,u=e.options,d=n.elements.arrow,p=n.modifiersData.popperOffsets,f=(0,o["default"])(n.placement),h=(0,c["default"])(f),g=[s.left,s.right].indexOf(f)>=0?"height":"width";if(d&&p){var C=m(u.padding,n),N=(0,r["default"])(d),v="y"===h?s.top:s.left,b="y"===h?s.bottom:s.right,V=n.rects.reference[g]+n.rects.reference[h]-p[h]-n.rects.popper[g],y=p[h]-n.rects.reference[h],x=(0,i["default"])(d),I=x?"y"===h?x.clientHeight||0:x.clientWidth||0:0,k=V/2-y/2,w=C[v],S=I-N[g]-C[b],_=I/2-N[g]/2+k,M=(0,l["default"])(w,_,S),D=h;n.modifiersData[a]=((t={})[D]=M,t.centerOffset=M-_,t)}},effect:function(e){var t=e.state,n=e.options.element,o=void 0===n?"[data-popper-arrow]":n;null!=o&&("string"!=typeof o||(o=t.elements.popper.querySelector(o)))&&(0,a["default"])(t.elements.popper,o)&&(t.elements.arrow=o)},requires:["popperOffsets"],requiresIfExists:["preventOverflow"]};t["default"]=f},11300:function(e,t,n){"use strict";t.__esModule=!0,t.mapToStyles=p,t["default"]=void 0;var o=n(56728),r=d(n(32440)),a=d(n(31677)),i=d(n(58386)),c=d(n(61131)),l=d(n(22709)),u=n(62836);function d(e){return e&&e.__esModule?e:{"default":e}}var s={top:"auto",right:"auto",bottom:"auto",left:"auto"};function p(e){var t,n=e.popper,l=e.popperRect,d=e.placement,p=e.offsets,m=e.position,f=e.gpuAcceleration,h=e.adaptive,g=e.roundOffsets,C=!0===g?function(e){var t=e.x,n=e.y,o=window.devicePixelRatio||1;return{x:(0,u.round)((0,u.round)(t*o)/o)||0,y:(0,u.round)((0,u.round)(n*o)/o)||0}}(p):"function"==typeof g?g(p):p,N=C.x,v=void 0===N?0:N,b=C.y,V=void 0===b?0:b,y=p.hasOwnProperty("x"),x=p.hasOwnProperty("y"),I=o.left,k=o.top,w=window;if(h){var S=(0,r["default"])(n),_="clientHeight",M="clientWidth";S===(0,a["default"])(n)&&(S=(0,i["default"])(n),"static"!==(0,c["default"])(S).position&&(_="scrollHeight",M="scrollWidth")),d===o.top&&(k=o.bottom,V-=S[_]-l.height,V*=f?1:-1),d===o.left&&(I=o.right,v-=S[M]-l.width,v*=f?1:-1)}var D,B=Object.assign({position:m},h&&s);return f?Object.assign({},B,((D={})[k]=x?"0":"",D[I]=y?"0":"",D.transform=(w.devicePixelRatio||1)<2?"translate("+v+"px, "+V+"px)":"translate3d("+v+"px, "+V+"px, 0)",D)):Object.assign({},B,((t={})[k]=x?V+"px":"",t[I]=y?v+"px":"",t.transform="",t))}var m={name:"computeStyles",enabled:!0,phase:"beforeWrite",fn:function(e){var t=e.state,n=e.options,o=n.gpuAcceleration,r=void 0===o||o,a=n.adaptive,i=void 0===a||a,c=n.roundOffsets,u=void 0===c||c,d={placement:(0,l["default"])(t.placement),popper:t.elements.popper,popperRect:t.rects.popper,gpuAcceleration:r};null!=t.modifiersData.popperOffsets&&(t.styles.popper=Object.assign({},t.styles.popper,p(Object.assign({},d,{offsets:t.modifiersData.popperOffsets,position:t.options.strategy,adaptive:i,roundOffsets:u})))),null!=t.modifiersData.arrow&&(t.styles.arrow=Object.assign({},t.styles.arrow,p(Object.assign({},d,{offsets:t.modifiersData.arrow,position:"absolute",adaptive:!1,roundOffsets:u})))),t.attributes.popper=Object.assign({},t.attributes.popper,{"data-popper-placement":t.placement})},data:{}};t["default"]=m},27020:function(e,t,n){"use strict";t.__esModule=!0,t["default"]=void 0;var o,r=(o=n(31677))&&o.__esModule?o:{"default":o};var a={passive:!0};var i={name:"eventListeners",enabled:!0,phase:"write",fn:function(){},effect:function(e){var t=e.state,n=e.instance,o=e.options,i=o.scroll,c=void 0===i||i,l=o.resize,u=void 0===l||l,d=(0,r["default"])(t.elements.popper),s=[].concat(t.scrollParents.reference,t.scrollParents.popper);return c&&s.forEach((function(e){e.addEventListener("scroll",n.update,a)})),u&&d.addEventListener("resize",n.update,a),function(){c&&s.forEach((function(e){e.removeEventListener("scroll",n.update,a)})),u&&d.removeEventListener("resize",n.update,a)}},data:{}};t["default"]=i},45922:function(e,t,n){"use strict";t.__esModule=!0,t["default"]=void 0;var o=d(n(70045)),r=d(n(22709)),a=d(n(28916)),i=d(n(19574)),c=d(n(31565)),l=n(56728),u=d(n(45412));function d(e){return e&&e.__esModule?e:{"default":e}}var s={name:"flip",enabled:!0,phase:"main",fn:function(e){var t=e.state,n=e.options,d=e.name;if(!t.modifiersData[d]._skip){for(var s=n.mainAxis,p=void 0===s||s,m=n.altAxis,f=void 0===m||m,h=n.fallbackPlacements,g=n.padding,C=n.boundary,N=n.rootBoundary,v=n.altBoundary,b=n.flipVariations,V=void 0===b||b,y=n.allowedAutoPlacements,x=t.options.placement,I=(0,r["default"])(x),k=h||(I===x||!V?[(0,o["default"])(x)]:function(e){if((0,r["default"])(e)===l.auto)return[];var t=(0,o["default"])(e);return[(0,a["default"])(e),t,(0,a["default"])(t)]}(x)),w=[x].concat(k).reduce((function(e,n){return e.concat((0,r["default"])(n)===l.auto?(0,c["default"])(t,{placement:n,boundary:C,rootBoundary:N,padding:g,flipVariations:V,allowedAutoPlacements:y}):n)}),[]),S=t.rects.reference,_=t.rects.popper,M=new Map,D=!0,B=w[0],A=0;A<w.length;A++){var T=w[A],L=(0,r["default"])(T),E=(0,u["default"])(T)===l.start,j=[l.top,l.bottom].indexOf(L)>=0,P=j?"width":"height",O=(0,i["default"])(t,{placement:T,boundary:C,rootBoundary:N,altBoundary:v,padding:g}),F=j?E?l.right:l.left:E?l.bottom:l.top;S[P]>_[P]&&(F=(0,o["default"])(F));var R=(0,o["default"])(F),z=[];if(p&&z.push(O[L]<=0),f&&z.push(O[F]<=0,O[R]<=0),z.every((function(e){return e}))){B=T,D=!1;break}M.set(T,z)}if(D)for(var W=function(e){var t=w.find((function(t){var n=M.get(t);if(n)return n.slice(0,e).every((function(e){return e}))}));if(t)return B=t,"break"},U=V?3:1;U>0;U--){if("break"===W(U))break}t.placement!==B&&(t.modifiersData[d]._skip=!0,t.placement=B,t.reset=!0)}},requiresIfExists:["offset"],data:{_skip:!1}};t["default"]=s},82860:function(e,t,n){"use strict";t.__esModule=!0,t["default"]=void 0;var o,r=n(56728),a=(o=n(19574))&&o.__esModule?o:{"default":o};function i(e,t,n){return void 0===n&&(n={x:0,y:0}),{top:e.top-t.height-n.y,right:e.right-t.width+n.x,bottom:e.bottom-t.height+n.y,left:e.left-t.width-n.x}}function c(e){return[r.top,r.right,r.bottom,r.left].some((function(t){return e[t]>=0}))}var l={name:"hide",enabled:!0,phase:"main",requiresIfExists:["preventOverflow"],fn:function(e){var t=e.state,n=e.name,o=t.rects.reference,r=t.rects.popper,l=t.modifiersData.preventOverflow,u=(0,a["default"])(t,{elementContext:"reference"}),d=(0,a["default"])(t,{altBoundary:!0}),s=i(u,o),p=i(d,r,l),m=c(s),f=c(p);t.modifiersData[n]={referenceClippingOffsets:s,popperEscapeOffsets:p,isReferenceHidden:m,hasPopperEscaped:f},t.attributes.popper=Object.assign({},t.attributes.popper,{"data-popper-reference-hidden":m,"data-popper-escaped":f})}};t["default"]=l},18726:function(e,t,n){"use strict";t.__esModule=!0,t.preventOverflow=t.popperOffsets=t.offset=t.hide=t.flip=t.eventListeners=t.computeStyles=t.arrow=t.applyStyles=void 0;var o=p(n(34559));t.applyStyles=o["default"];var r=p(n(76340));t.arrow=r["default"];var a=p(n(11300));t.computeStyles=a["default"];var i=p(n(27020));t.eventListeners=i["default"];var c=p(n(45922));t.flip=c["default"];var l=p(n(82860));t.hide=l["default"];var u=p(n(33310));t.offset=u["default"];var d=p(n(74371));t.popperOffsets=d["default"];var s=p(n(21532));function p(e){return e&&e.__esModule?e:{"default":e}}t.preventOverflow=s["default"]},33310:function(e,t,n){"use strict";t.__esModule=!0,t.distanceAndSkiddingToXY=i,t["default"]=void 0;var o,r=(o=n(22709))&&o.__esModule?o:{"default":o},a=n(56728);function i(e,t,n){var o=(0,r["default"])(e),i=[a.left,a.top].indexOf(o)>=0?-1:1,c="function"==typeof n?n(Object.assign({},t,{placement:e})):n,l=c[0],u=c[1];return l=l||0,u=(u||0)*i,[a.left,a.right].indexOf(o)>=0?{x:u,y:l}:{x:l,y:u}}var c={name:"offset",enabled:!0,phase:"main",requires:["popperOffsets"],fn:function(e){var t=e.state,n=e.options,o=e.name,r=n.offset,c=void 0===r?[0,0]:r,l=a.placements.reduce((function(e,n){return e[n]=i(n,t.rects,c),e}),{}),u=l[t.placement],d=u.x,s=u.y;null!=t.modifiersData.popperOffsets&&(t.modifiersData.popperOffsets.x+=d,t.modifiersData.popperOffsets.y+=s),t.modifiersData[o]=l}};t["default"]=c},74371:function(e,t,n){"use strict";t.__esModule=!0,t["default"]=void 0;var o,r=(o=n(17175))&&o.__esModule?o:{"default":o};var a={name:"popperOffsets",enabled:!0,phase:"read",fn:function(e){var t=e.state,n=e.name;t.modifiersData[n]=(0,r["default"])({reference:t.rects.reference,element:t.rects.popper,strategy:"absolute",placement:t.placement})},data:{}};t["default"]=a},21532:function(e,t,n){"use strict";t.__esModule=!0,t["default"]=void 0;var o=n(56728),r=f(n(22709)),a=f(n(16615)),i=f(n(82898)),c=f(n(52534)),l=f(n(43545)),u=f(n(32440)),d=f(n(19574)),s=f(n(45412)),p=f(n(41801)),m=n(62836);function f(e){return e&&e.__esModule?e:{"default":e}}var h={name:"preventOverflow",enabled:!0,phase:"main",fn:function(e){var t=e.state,n=e.options,f=e.name,h=n.mainAxis,g=void 0===h||h,C=n.altAxis,N=void 0!==C&&C,v=n.boundary,b=n.rootBoundary,V=n.altBoundary,y=n.padding,x=n.tether,I=void 0===x||x,k=n.tetherOffset,w=void 0===k?0:k,S=(0,d["default"])(t,{boundary:v,rootBoundary:b,padding:y,altBoundary:V}),_=(0,r["default"])(t.placement),M=(0,s["default"])(t.placement),D=!M,B=(0,a["default"])(_),A=(0,i["default"])(B),T=t.modifiersData.popperOffsets,L=t.rects.reference,E=t.rects.popper,j="function"==typeof w?w(Object.assign({},t.rects,{placement:t.placement})):w,P={x:0,y:0};if(T){if(g||N){var O="y"===B?o.top:o.left,F="y"===B?o.bottom:o.right,R="y"===B?"height":"width",z=T[B],W=T[B]+S[O],U=T[B]-S[F],H=I?-E[R]/2:0,G=M===o.start?L[R]:E[R],Y=M===o.start?-E[R]:-L[R],Z=t.elements.arrow,K=I&&Z?(0,l["default"])(Z):{width:0,height:0},Q=t.modifiersData["arrow#persistent"]?t.modifiersData["arrow#persistent"].padding:(0,p["default"])(),J=Q[O],X=Q[F],q=(0,c["default"])(0,L[R],K[R]),$=D?L[R]/2-H-q-J-j:G-q-J-j,ee=D?-L[R]/2+H+q+X+j:Y+q+X+j,te=t.elements.arrow&&(0,u["default"])(t.elements.arrow),ne=te?"y"===B?te.clientTop||0:te.clientLeft||0:0,oe=t.modifiersData.offset?t.modifiersData.offset[t.placement][B]:0,re=T[B]+$-oe-ne,ae=T[B]+ee-oe;if(g){var ie=(0,c["default"])(I?(0,m.min)(W,re):W,z,I?(0,m.max)(U,ae):U);T[B]=ie,P[B]=ie-z}if(N){var ce="x"===B?o.top:o.left,le="x"===B?o.bottom:o.right,ue=T[A],de=ue+S[ce],se=ue-S[le],pe=(0,c["default"])(I?(0,m.min)(de,re):de,ue,I?(0,m.max)(se,ae):se);T[A]=pe,P[A]=pe-ue}}t.modifiersData[f]=P}},requiresIfExists:["offset"]};t["default"]=h},39030:function(e,t,n){"use strict";t.__esModule=!0,t.defaultModifiers=t.createPopper=void 0;var o=n(92179);t.popperGenerator=o.popperGenerator,t.detectOverflow=o.detectOverflow;var r=l(n(27020)),a=l(n(74371)),i=l(n(11300)),c=l(n(34559));function l(e){return e&&e.__esModule?e:{"default":e}}var u=[r["default"],a["default"],i["default"],c["default"]];t.defaultModifiers=u;var d=(0,o.popperGenerator)({defaultModifiers:u});t.createPopper=d},48069:function(e,t,n){"use strict";t.__esModule=!0;var o={createPopper:!0,createPopperLite:!0,defaultModifiers:!0,popperGenerator:!0,detectOverflow:!0};t.defaultModifiers=t.createPopperLite=t.createPopper=void 0;var r=n(92179);t.popperGenerator=r.popperGenerator,t.detectOverflow=r.detectOverflow;var a=g(n(27020)),i=g(n(74371)),c=g(n(11300)),l=g(n(34559)),u=g(n(33310)),d=g(n(45922)),s=g(n(21532)),p=g(n(76340)),m=g(n(82860)),f=n(39030);t.createPopperLite=f.createPopper;var h=n(18726);function g(e){return e&&e.__esModule?e:{"default":e}}Object.keys(h).forEach((function(e){"default"!==e&&"__esModule"!==e&&(Object.prototype.hasOwnProperty.call(o,e)||e in t&&t[e]===h[e]||(t[e]=h[e]))}));var C=[a["default"],i["default"],c["default"],l["default"],u["default"],d["default"],s["default"],p["default"],m["default"]];t.defaultModifiers=C;var N=(0,r.popperGenerator)({defaultModifiers:C});t.createPopperLite=t.createPopper=N},31565:function(e,t,n){"use strict";t.__esModule=!0,t["default"]=function(e,t){void 0===t&&(t={});var n=t,c=n.placement,l=n.boundary,u=n.rootBoundary,d=n.padding,s=n.flipVariations,p=n.allowedAutoPlacements,m=void 0===p?r.placements:p,f=(0,o["default"])(c),h=f?s?r.variationPlacements:r.variationPlacements.filter((function(e){return(0,o["default"])(e)===f})):r.basePlacements,g=h.filter((function(e){return m.indexOf(e)>=0}));0===g.length&&(g=h);var C=g.reduce((function(t,n){return t[n]=(0,a["default"])(e,{placement:n,boundary:l,rootBoundary:u,padding:d})[(0,i["default"])(n)],t}),{});return Object.keys(C).sort((function(e,t){return C[e]-C[t]}))};var o=c(n(45412)),r=n(56728),a=c(n(19574)),i=c(n(22709));function c(e){return e&&e.__esModule?e:{"default":e}}},17175:function(e,t,n){"use strict";t.__esModule=!0,t["default"]=function(e){var t,n=e.reference,c=e.element,l=e.placement,u=l?(0,o["default"])(l):null,d=l?(0,r["default"])(l):null,s=n.x+n.width/2-c.width/2,p=n.y+n.height/2-c.height/2;switch(u){case i.top:t={x:s,y:n.y-c.height};break;case i.bottom:t={x:s,y:n.y+n.height};break;case i.right:t={x:n.x+n.width,y:p};break;case i.left:t={x:n.x-c.width,y:p};break;default:t={x:n.x,y:n.y}}var m=u?(0,a["default"])(u):null;if(null!=m){var f="y"===m?"height":"width";switch(d){case i.start:t[m]=t[m]-(n[f]/2-c[f]/2);break;case i.end:t[m]=t[m]+(n[f]/2-c[f]/2)}}return t};var o=c(n(22709)),r=c(n(45412)),a=c(n(16615)),i=n(56728);function c(e){return e&&e.__esModule?e:{"default":e}}},68369:function(e,t){"use strict";t.__esModule=!0,t["default"]=function(e){var t;return function(){return t||(t=new Promise((function(n){Promise.resolve().then((function(){t=undefined,n(e())}))}))),t}}},19574:function(e,t,n){"use strict";t.__esModule=!0,t["default"]=function(e,t){void 0===t&&(t={});var n=t,p=n.placement,m=void 0===p?e.placement:p,f=n.boundary,h=void 0===f?l.clippingParents:f,g=n.rootBoundary,C=void 0===g?l.viewport:g,N=n.elementContext,v=void 0===N?l.popper:N,b=n.altBoundary,V=void 0!==b&&b,y=n.padding,x=void 0===y?0:y,I=(0,d["default"])("number"!=typeof x?x:(0,s["default"])(x,l.basePlacements)),k=v===l.popper?l.reference:l.popper,w=e.elements.reference,S=e.rects.popper,_=e.elements[V?k:v],M=(0,r["default"])((0,u.isElement)(_)?_:_.contextElement||(0,a["default"])(e.elements.popper),h,C),D=(0,o["default"])(w),B=(0,i["default"])({reference:D,element:S,strategy:"absolute",placement:m}),A=(0,c["default"])(Object.assign({},S,B)),T=v===l.popper?A:D,L={top:M.top-T.top+I.top,bottom:T.bottom-M.bottom+I.bottom,left:M.left-T.left+I.left,right:T.right-M.right+I.right},E=e.modifiersData.offset;if(v===l.popper&&E){var j=E[m];Object.keys(L).forEach((function(e){var t=[l.right,l.bottom].indexOf(e)>=0?1:-1,n=[l.top,l.bottom].indexOf(e)>=0?"y":"x";L[e]+=j[n]*t}))}return L};var o=p(n(94294)),r=p(n(48162)),a=p(n(58386)),i=p(n(17175)),c=p(n(20935)),l=n(56728),u=n(67458),d=p(n(32055)),s=p(n(76294));function p(e){return e&&e.__esModule?e:{"default":e}}},76294:function(e,t){"use strict";t.__esModule=!0,t["default"]=function(e,t){return t.reduce((function(t,n){return t[n]=e,t}),{})}},41434:function(e,t){"use strict";t.__esModule=!0,t["default"]=function(e){for(var t=arguments.length,n=new Array(t>1?t-1:0),o=1;o<t;o++)n[o-1]=arguments[o];return[].concat(n).reduce((function(e,t){return e.replace(/%s/,t)}),e)}},82898:function(e,t){"use strict";t.__esModule=!0,t["default"]=function(e){return"x"===e?"y":"x"}},22709:function(e,t,n){"use strict";t.__esModule=!0,t["default"]=function(e){return e.split("-")[0]};n(56728)},41801:function(e,t){"use strict";t.__esModule=!0,t["default"]=function(){return{top:0,right:0,bottom:0,left:0}}},16615:function(e,t){"use strict";t.__esModule=!0,t["default"]=function(e){return["top","bottom"].indexOf(e)>=0?"x":"y"}},70045:function(e,t){"use strict";t.__esModule=!0,t["default"]=function(e){return e.replace(/left|right|bottom|top/g,(function(e){return n[e]}))};var n={left:"right",right:"left",bottom:"top",top:"bottom"}},28916:function(e,t){"use strict";t.__esModule=!0,t["default"]=function(e){return e.replace(/start|end/g,(function(e){return n[e]}))};var n={start:"end",end:"start"}},45412:function(e,t){"use strict";t.__esModule=!0,t["default"]=function(e){return e.split("-")[1]}},62836:function(e,t){"use strict";t.__esModule=!0,t.round=t.min=t.max=void 0;var n=Math.max;t.max=n;var o=Math.min;t.min=o;var r=Math.round;t.round=r},36284:function(e,t){"use strict";t.__esModule=!0,t["default"]=function(e){var t=e.reduce((function(e,t){var n=e[t.name];return e[t.name]=n?Object.assign({},n,t,{options:Object.assign({},n.options,t.options),data:Object.assign({},n.data,t.data)}):t,e}),{});return Object.keys(t).map((function(e){return t[e]}))}},32055:function(e,t,n){"use strict";t.__esModule=!0,t["default"]=function(e){return Object.assign({},(0,r["default"])(),e)};var o,r=(o=n(41801))&&o.__esModule?o:{"default":o}},45700:function(e,t,n){"use strict";t.__esModule=!0,t["default"]=function(e){var t=function(e){var t=new Map,n=new Set,o=[];function r(e){n.add(e.name),[].concat(e.requires||[],e.requiresIfExists||[]).forEach((function(e){if(!n.has(e)){var o=t.get(e);o&&r(o)}})),o.push(e)}return e.forEach((function(e){t.set(e.name,e)})),e.forEach((function(e){n.has(e.name)||r(e)})),o}(e);return o.modifierPhases.reduce((function(e,n){return e.concat(t.filter((function(e){return e.phase===n})))}),[])};var o=n(56728)},20935:function(e,t){"use strict";t.__esModule=!0,t["default"]=function(e){return Object.assign({},e,{left:e.x,top:e.y,right:e.x+e.width,bottom:e.y+e.height})}},25435:function(e,t){"use strict";t.__esModule=!0,t["default"]=function(e,t){var n=new Set;return e.filter((function(e){var o=t(e);if(!n.has(o))return n.add(o),!0}))}},38574:function(e,t,n){"use strict";t.__esModule=!0,t["default"]=function(e){e.forEach((function(t){Object.keys(t).forEach((function(n){switch(n){case"name":t.name;break;case"enabled":t.enabled;case"phase":r.modifierPhases.indexOf(t.phase);break;case"fn":t.fn;break;case"effect":t.effect;break;case"requires":Array.isArray(t.requires);break;case"requiresIfExists":Array.isArray(t.requiresIfExists)}t.requires&&t.requires.forEach((function(t){e.find((function(e){return e.name===t}))}))}))}))};(o=n(41434))&&o.__esModule;var o,r=n(56728)},52534:function(e,t,n){"use strict";t.__esModule=!0,t["default"]=function(e,t,n){return(0,o.max)(e,(0,o.min)(t,n))};var o=n(62836)},83923:function(e){"use strict";e.exports=function(e){if("function"!=typeof e)throw TypeError(String(e)+" is not a function");return e}},1372:function(e,t,n){"use strict";var o=n(35611);e.exports=function(e){if(!o(e)&&null!==e)throw TypeError("Can't set "+String(e)+" as a prototype");return e}},36910:function(e,t,n){"use strict";var o=n(17657),r=n(83681),a=n(74217),i=o("unscopables"),c=Array.prototype;c[i]==undefined&&a.f(c,i,{configurable:!0,value:r(null)}),e.exports=function(e){c[i][e]=!0}},69953:function(e,t,n){"use strict";var o=n(37015).charAt;e.exports=function(e,t,n){return t+(n?o(e,t).length:1)}},50997:function(e){"use strict";e.exports=function(e,t,n){if(!(e instanceof t))throw TypeError("Incorrect "+(n?n+" ":"")+"invocation");return e}},63518:function(e,t,n){"use strict";var o=n(35611);e.exports=function(e){if(!o(e))throw TypeError(String(e)+" is not an object");return e}},32977:function(e){"use strict";e.exports="undefined"!=typeof ArrayBuffer&&"undefined"!=typeof DataView},19216:function(e,t,n){"use strict";var o,r,a,i=n(32977),c=n(75592),l=n(84253),u=n(35611),d=n(28919),s=n(47953),p=n(52188),m=n(11807),f=n(74217).f,h=n(6863),g=n(18444),C=n(17657),N=n(41080),v=l.Int8Array,b=v&&v.prototype,V=l.Uint8ClampedArray,y=V&&V.prototype,x=v&&h(v),I=b&&h(b),k=Object.prototype,w=k.isPrototypeOf,S=C("toStringTag"),_=N("TYPED_ARRAY_TAG"),M=N("TYPED_ARRAY_CONSTRUCTOR"),D=i&&!!g&&"Opera"!==s(l.opera),B=!1,A={Int8Array:1,Uint8Array:1,Uint8ClampedArray:1,Int16Array:2,Uint16Array:2,Int32Array:4,Uint32Array:4,Float32Array:4,Float64Array:8},T={BigInt64Array:8,BigUint64Array:8},L=function(e){if(!u(e))return!1;var t=s(e);return"DataView"===t||d(A,t)||d(T,t)},E=function(e){if(!u(e))return!1;var t=s(e);return d(A,t)||d(T,t)};for(o in A)(a=(r=l[o])&&r.prototype)?p(a,M,r):D=!1;for(o in T)(a=(r=l[o])&&r.prototype)&&p(a,M,r);if((!D||"function"!=typeof x||x===Function.prototype)&&(x=function(){throw TypeError("Incorrect invocation")},D))for(o in A)l[o]&&g(l[o],x);if((!D||!I||I===k)&&(I=x.prototype,D))for(o in A)l[o]&&g(l[o].prototype,I);if(D&&h(y)!==I&&g(y,I),c&&!d(I,S))for(o in B=!0,f(I,S,{get:function(){return u(this)?this[_]:undefined}}),A)l[o]&&p(l[o],_,o);e.exports={NATIVE_ARRAY_BUFFER_VIEWS:D,TYPED_ARRAY_CONSTRUCTOR:M,TYPED_ARRAY_TAG:B&&_,aTypedArray:function(e){if(E(e))return e;throw TypeError("Target is not a typed array")},aTypedArrayConstructor:function(e){if(g&&!w.call(x,e))throw TypeError("Target is not a typed array constructor");return e},exportTypedArrayMethod:function(e,t,n){if(c){if(n)for(var o in A){var r=l[o];if(r&&d(r.prototype,e))try{delete r.prototype[e]}catch(a){}}I[e]&&!n||m(I,e,n?t:D&&b[e]||t)}},exportTypedArrayStaticMethod:function(e,t,n){var o,r;if(c){if(g){if(n)for(o in A)if((r=l[o])&&d(r,e))try{delete r[e]}catch(a){}if(x[e]&&!n)return;try{return m(x,e,n?t:D&&x[e]||t)}catch(a){}}for(o in A)!(r=l[o])||r[e]&&!n||m(r,e,t)}},isView:L,isTypedArray:E,TypedArray:x,TypedArrayPrototype:I}},80246:function(e,t,n){"use strict";var o=n(84253),r=n(75592),a=n(32977),i=n(52188),c=n(3993),l=n(69691),u=n(50997),d=n(3997),s=n(39570),p=n(77559),m=n(16567),f=n(6863),h=n(18444),g=n(78870).f,C=n(74217).f,N=n(22051),v=n(29108),b=n(79947),V=b.get,y=b.set,x="ArrayBuffer",I="DataView",k="prototype",w="Wrong index",S=o[x],_=S,M=o[I],D=M&&M[k],B=Object.prototype,A=o.RangeError,T=m.pack,L=m.unpack,E=function(e){return[255&e]},j=function(e){return[255&e,e>>8&255]},P=function(e){return[255&e,e>>8&255,e>>16&255,e>>24&255]},O=function(e){return e[3]<<24|e[2]<<16|e[1]<<8|e[0]},F=function(e){return T(e,23,4)},R=function(e){return T(e,52,8)},z=function(e,t){C(e[k],t,{get:function(){return V(this)[t]}})},W=function(e,t,n,o){var r=p(n),a=V(e);if(r+t>a.byteLength)throw A(w);var i=V(a.buffer).bytes,c=r+a.byteOffset,l=i.slice(c,c+t);return o?l:l.reverse()},U=function(e,t,n,o,r,a){var i=p(n),c=V(e);if(i+t>c.byteLength)throw A(w);for(var l=V(c.buffer).bytes,u=i+c.byteOffset,d=o(+r),s=0;s<t;s++)l[u+s]=d[a?s:t-s-1]};if(a){if(!l((function(){S(1)}))||!l((function(){new S(-1)}))||l((function(){return new S,new S(1.5),new S(NaN),S.name!=x}))){for(var H,G=(_=function(e){return u(this,_),new S(p(e))})[k]=S[k],Y=g(S),Z=0;Y.length>Z;)(H=Y[Z++])in _||i(_,H,S[H]);G.constructor=_}h&&f(D)!==B&&h(D,B);var K=new M(new _(2)),Q=D.setInt8;K.setInt8(0,2147483648),K.setInt8(1,2147483649),!K.getInt8(0)&&K.getInt8(1)||c(D,{setInt8:function(e,t){Q.call(this,e,t<<24>>24)},setUint8:function(e,t){Q.call(this,e,t<<24>>24)}},{unsafe:!0})}else _=function(e){u(this,_,x);var t=p(e);y(this,{bytes:N.call(new Array(t),0),byteLength:t}),r||(this.byteLength=t)},M=function(e,t,n){u(this,M,I),u(e,_,I);var o=V(e).byteLength,a=d(t);if(a<0||a>o)throw A("Wrong offset");if(a+(n=n===undefined?o-a:s(n))>o)throw A("Wrong length");y(this,{buffer:e,byteLength:n,byteOffset:a}),r||(this.buffer=e,this.byteLength=n,this.byteOffset=a)},r&&(z(_,"byteLength"),z(M,"buffer"),z(M,"byteLength"),z(M,"byteOffset")),c(M[k],{getInt8:function(e){return W(this,1,e)[0]<<24>>24},getUint8:function(e){return W(this,1,e)[0]},getInt16:function(e){var t=W(this,2,e,arguments.length>1?arguments[1]:undefined);return(t[1]<<8|t[0])<<16>>16},getUint16:function(e){var t=W(this,2,e,arguments.length>1?arguments[1]:undefined);return t[1]<<8|t[0]},getInt32:function(e){return O(W(this,4,e,arguments.length>1?arguments[1]:undefined))},getUint32:function(e){return O(W(this,4,e,arguments.length>1?arguments[1]:undefined))>>>0},getFloat32:function(e){return L(W(this,4,e,arguments.length>1?arguments[1]:undefined),23)},getFloat64:function(e){return L(W(this,8,e,arguments.length>1?arguments[1]:undefined),52)},setInt8:function(e,t){U(this,1,e,E,t)},setUint8:function(e,t){U(this,1,e,E,t)},setInt16:function(e,t){U(this,2,e,j,t,arguments.length>2?arguments[2]:undefined)},setUint16:function(e,t){U(this,2,e,j,t,arguments.length>2?arguments[2]:undefined)},setInt32:function(e,t){U(this,4,e,P,t,arguments.length>2?arguments[2]:undefined)},setUint32:function(e,t){U(this,4,e,P,t,arguments.length>2?arguments[2]:undefined)},setFloat32:function(e,t){U(this,4,e,F,t,arguments.length>2?arguments[2]:undefined)},setFloat64:function(e,t){U(this,8,e,R,t,arguments.length>2?arguments[2]:undefined)}});v(_,x),v(M,I),e.exports={ArrayBuffer:_,DataView:M}},59571:function(e,t,n){"use strict";var o=n(12104),r=n(55205),a=n(39570),i=Math.min;e.exports=[].copyWithin||function(e,t){var n=o(this),c=a(n.length),l=r(e,c),u=r(t,c),d=arguments.length>2?arguments[2]:undefined,s=i((d===undefined?c:r(d,c))-u,c-l),p=1;for(u<l&&l<u+s&&(p=-1,u+=s-1,l+=s-1);s-- >0;)u in n?n[l]=n[u]:delete n[l],l+=p,u+=p;return n}},22051:function(e,t,n){"use strict";var o=n(12104),r=n(55205),a=n(39570);e.exports=function(e){for(var t=o(this),n=a(t.length),i=arguments.length,c=r(i>1?arguments[1]:undefined,n),l=i>2?arguments[2]:undefined,u=l===undefined?n:r(l,n);u>c;)t[c++]=e;return t}},90369:function(e,t,n){"use strict";var o=n(69033).forEach,r=n(37902)("forEach");e.exports=r?[].forEach:function(e){return o(this,e,arguments.length>1?arguments[1]:undefined)}},11955:function(e){"use strict";e.exports=function(e,t){for(var n=0,o=t.length,r=new e(o);o>n;)r[n]=t[n++];return r}},28213:function(e,t,n){"use strict";var o=n(74271),r=n(12104),a=n(32648),i=n(14195),c=n(39570),l=n(39241),u=n(3170);e.exports=function(e){var t,n,d,s,p,m,f=r(e),h="function"==typeof this?this:Array,g=arguments.length,C=g>1?arguments[1]:undefined,N=C!==undefined,v=u(f),b=0;if(N&&(C=o(C,g>2?arguments[2]:undefined,2)),v==undefined||h==Array&&i(v))for(n=new h(t=c(f.length));t>b;b++)m=N?C(f[b],b):f[b],l(n,b,m);else for(p=(s=v.call(f)).next,n=new h;!(d=p.call(s)).done;b++)m=N?a(s,C,[d.value,b],!0):d.value,l(n,b,m);return n.length=b,n}},25945:function(e,t,n){"use strict";var o=n(26553),r=n(39570),a=n(55205),i=function(e){return function(t,n,i){var c,l=o(t),u=r(l.length),d=a(i,u);if(e&&n!=n){for(;u>d;)if((c=l[d++])!=c)return!0}else for(;u>d;d++)if((e||d in l)&&l[d]===n)return e||d||0;return!e&&-1}};e.exports={includes:i(!0),indexOf:i(!1)}},69033:function(e,t,n){"use strict";var o=n(74271),r=n(50990),a=n(12104),i=n(39570),c=n(77454),l=[].push,u=function(e){var t=1==e,n=2==e,u=3==e,d=4==e,s=6==e,p=7==e,m=5==e||s;return function(f,h,g,C){for(var N,v,b=a(f),V=r(b),y=o(h,g,3),x=i(V.length),I=0,k=C||c,w=t?k(f,x):n||p?k(f,0):undefined;x>I;I++)if((m||I in V)&&(v=y(N=V[I],I,b),e))if(t)w[I]=v;else if(v)switch(e){case 3:return!0;case 5:return N;case 6:return I;case 2:l.call(w,N)}else switch(e){case 4:return!1;case 7:l.call(w,N)}return s?-1:u||d?d:w}};e.exports={forEach:u(0),map:u(1),filter:u(2),some:u(3),every:u(4),find:u(5),findIndex:u(6),filterReject:u(7)}},41183:function(e,t,n){"use strict";var o=n(26553),r=n(3997),a=n(39570),i=n(37902),c=Math.min,l=[].lastIndexOf,u=!!l&&1/[1].lastIndexOf(1,-0)<0,d=i("lastIndexOf"),s=u||!d;e.exports=s?function(e){if(u)return l.apply(this,arguments)||0;var t=o(this),n=a(t.length),i=n-1;for(arguments.length>1&&(i=c(i,r(arguments[1]))),i<0&&(i=n+i);i>=0;i--)if(i in t&&t[i]===e)return i||0;return-1}:l},93537:function(e,t,n){"use strict";var o=n(69691),r=n(17657),a=n(12338),i=r("species");e.exports=function(e){return a>=51||!o((function(){var t=[];return(t.constructor={})[i]=function(){return{foo:1}},1!==t[e](Boolean).foo}))}},37902:function(e,t,n){"use strict";var o=n(69691);e.exports=function(e,t){var n=[][e];return!!n&&o((function(){n.call(null,t||function(){throw 1},1)}))}},28249:function(e,t,n){"use strict";var o=n(83923),r=n(12104),a=n(50990),i=n(39570),c=function(e){return function(t,n,c,l){o(n);var u=r(t),d=a(u),s=i(u.length),p=e?s-1:0,m=e?-1:1;if(c<2)for(;;){if(p in d){l=d[p],p+=m;break}if(p+=m,e?p<0:s<=p)throw TypeError("Reduce of empty array with no initial value")}for(;e?p>=0:s>p;p+=m)p in d&&(l=n(l,d[p],p,u));return l}};e.exports={left:c(!1),right:c(!0)}},58737:function(e){"use strict";var t=Math.floor,n=function(e,t){for(var n,o,r=e.length,a=1;a<r;){for(o=a,n=e[a];o&&t(e[o-1],n)>0;)e[o]=e[--o];o!==a++&&(e[o]=n)}return e},o=function(e,t,n){for(var o=e.length,r=t.length,a=0,i=0,c=[];a<o||i<r;)a<o&&i<r?c.push(n(e[a],t[i])<=0?e[a++]:t[i++]):c.push(a<o?e[a++]:t[i++]);return c};e.exports=function r(e,a){var i=e.length,c=t(i/2);return i<8?n(e,a):o(r(e.slice(0,c),a),r(e.slice(c),a),a)}},73612:function(e,t,n){"use strict";var o=n(35611),r=n(89999),a=n(17657)("species");e.exports=function(e){var t;return r(e)&&("function"!=typeof(t=e.constructor)||t!==Array&&!r(t.prototype)?o(t)&&null===(t=t[a])&&(t=undefined):t=undefined),t===undefined?Array:t}},77454:function(e,t,n){"use strict";var o=n(73612);e.exports=function(e,t){return new(o(e))(0===t?0:t)}},32648:function(e,t,n){"use strict";var o=n(63518),r=n(61781);e.exports=function(e,t,n,a){try{return a?t(o(n)[0],n[1]):t(n)}catch(i){throw r(e),i}}},68762:function(e,t,n){"use strict";var o=n(17657)("iterator"),r=!1;try{var a=0,i={next:function(){return{done:!!a++}},"return":function(){r=!0}};i[o]=function(){return this},Array.from(i,(function(){throw 2}))}catch(c){}e.exports=function(e,t){if(!t&&!r)return!1;var n=!1;try{var a={};a[o]=function(){return{next:function(){return{done:n=!0}}}},e(a)}catch(c){}return n}},77e3:function(e){"use strict";var t={}.toString;e.exports=function(e){return t.call(e).slice(8,-1)}},47953:function(e,t,n){"use strict";var o=n(64910),r=n(77e3),a=n(17657)("toStringTag"),i="Arguments"==r(function(){return arguments}());e.exports=o?r:function(e){var t,n,o;return e===undefined?"Undefined":null===e?"Null":"string"==typeof(n=function(e,t){try{return e[t]}catch(n){}}(t=Object(e),a))?n:i?r(t):"Object"==(o=r(t))&&"function"==typeof t.callee?"Arguments":o}},74568:function(e,t,n){"use strict";var o=n(74217).f,r=n(83681),a=n(3993),i=n(74271),c=n(50997),l=n(56342),u=n(71179),d=n(64157),s=n(75592),p=n(40421).fastKey,m=n(79947),f=m.set,h=m.getterFor;e.exports={getConstructor:function(e,t,n,u){var d=e((function(e,o){c(e,d,t),f(e,{type:t,index:r(null),first:undefined,last:undefined,size:0}),s||(e.size=0),o!=undefined&&l(o,e[u],{that:e,AS_ENTRIES:n})})),m=h(t),g=function(e,t,n){var o,r,a=m(e),i=C(e,t);return i?i.value=n:(a.last=i={index:r=p(t,!0),key:t,value:n,previous:o=a.last,next:undefined,removed:!1},a.first||(a.first=i),o&&(o.next=i),s?a.size++:e.size++,"F"!==r&&(a.index[r]=i)),e},C=function(e,t){var n,o=m(e),r=p(t);if("F"!==r)return o.index[r];for(n=o.first;n;n=n.next)if(n.key==t)return n};return a(d.prototype,{clear:function(){for(var e=m(this),t=e.index,n=e.first;n;)n.removed=!0,n.previous&&(n.previous=n.previous.next=undefined),delete t[n.index],n=n.next;e.first=e.last=undefined,s?e.size=0:this.size=0},"delete":function(e){var t=this,n=m(t),o=C(t,e);if(o){var r=o.next,a=o.previous;delete n.index[o.index],o.removed=!0,a&&(a.next=r),r&&(r.previous=a),n.first==o&&(n.first=r),n.last==o&&(n.last=a),s?n.size--:t.size--}return!!o},forEach:function(e){for(var t,n=m(this),o=i(e,arguments.length>1?arguments[1]:undefined,3);t=t?t.next:n.first;)for(o(t.value,t.key,this);t&&t.removed;)t=t.previous},has:function(e){return!!C(this,e)}}),a(d.prototype,n?{get:function(e){var t=C(this,e);return t&&t.value},set:function(e,t){return g(this,0===e?0:e,t)}}:{add:function(e){return g(this,e=0===e?0:e,e)}}),s&&o(d.prototype,"size",{get:function(){return m(this).size}}),d},setStrong:function(e,t,n){var o=t+" Iterator",r=h(t),a=h(o);u(e,t,(function(e,t){f(this,{type:o,target:e,state:r(e),kind:t,last:undefined})}),(function(){for(var e=a(this),t=e.kind,n=e.last;n&&n.removed;)n=n.previous;return e.target&&(e.last=n=n?n.next:e.state.first)?"keys"==t?{value:n.key,done:!1}:"values"==t?{value:n.value,done:!1}:{value:[n.key,n.value],done:!1}:(e.target=undefined,{value:undefined,done:!0})}),n?"entries":"values",!n,!0),d(t)}}},57396:function(e,t,n){"use strict";var o=n(3993),r=n(40421).getWeakData,a=n(63518),i=n(35611),c=n(50997),l=n(56342),u=n(69033),d=n(28919),s=n(79947),p=s.set,m=s.getterFor,f=u.find,h=u.findIndex,g=0,C=function(e){return e.frozen||(e.frozen=new N)},N=function(){this.entries=[]},v=function(e,t){return f(e.entries,(function(e){return e[0]===t}))};N.prototype={get:function(e){var t=v(this,e);if(t)return t[1]},has:function(e){return!!v(this,e)},set:function(e,t){var n=v(this,e);n?n[1]=t:this.entries.push([e,t])},"delete":function(e){var t=h(this.entries,(function(t){return t[0]===e}));return~t&&this.entries.splice(t,1),!!~t}},e.exports={getConstructor:function(e,t,n,u){var s=e((function(e,o){c(e,s,t),p(e,{type:t,id:g++,frozen:undefined}),o!=undefined&&l(o,e[u],{that:e,AS_ENTRIES:n})})),f=m(t),h=function(e,t,n){var o=f(e),i=r(a(t),!0);return!0===i?C(o).set(t,n):i[o.id]=n,e};return o(s.prototype,{"delete":function(e){var t=f(this);if(!i(e))return!1;var n=r(e);return!0===n?C(t)["delete"](e):n&&d(n,t.id)&&delete n[t.id]},has:function(e){var t=f(this);if(!i(e))return!1;var n=r(e);return!0===n?C(t).has(e):n&&d(n,t.id)}}),o(s.prototype,n?{get:function(e){var t=f(this);if(i(e)){var n=r(e);return!0===n?C(t).get(e):n?n[t.id]:undefined}},set:function(e,t){return h(this,e,t)}}:{add:function(e){return h(this,e,!0)}}),s}}},42006:function(e,t,n){"use strict";var o=n(56174),r=n(84253),a=n(41441),i=n(11807),c=n(40421),l=n(56342),u=n(50997),d=n(35611),s=n(69691),p=n(68762),m=n(29108),f=n(22285);e.exports=function(e,t,n){var h=-1!==e.indexOf("Map"),g=-1!==e.indexOf("Weak"),C=h?"set":"add",N=r[e],v=N&&N.prototype,b=N,V={},y=function(e){var t=v[e];i(v,e,"add"==e?function(e){return t.call(this,0===e?0:e),this}:"delete"==e?function(e){return!(g&&!d(e))&&t.call(this,0===e?0:e)}:"get"==e?function(e){return g&&!d(e)?undefined:t.call(this,0===e?0:e)}:"has"==e?function(e){return!(g&&!d(e))&&t.call(this,0===e?0:e)}:function(e,n){return t.call(this,0===e?0:e,n),this})};if(a(e,"function"!=typeof N||!(g||v.forEach&&!s((function(){(new N).entries().next()})))))b=n.getConstructor(t,e,h,C),c.enable();else if(a(e,!0)){var x=new b,I=x[C](g?{}:-0,1)!=x,k=s((function(){x.has(1)})),w=p((function(e){new N(e)})),S=!g&&s((function(){for(var e=new N,t=5;t--;)e[C](t,t);return!e.has(-0)}));w||((b=t((function(t,n){u(t,b,e);var o=f(new N,t,b);return n!=undefined&&l(n,o[C],{that:o,AS_ENTRIES:h}),o}))).prototype=v,v.constructor=b),(k||S)&&(y("delete"),y("has"),h&&y("get")),(S||I)&&y(C),g&&v.clear&&delete v.clear}return V[e]=b,o({global:!0,forced:b!=N},V),m(b,e),g||n.setStrong(b,e,h),b}},49957:function(e,t,n){"use strict";var o=n(28919),r=n(28482),a=n(22245),i=n(74217);e.exports=function(e,t){for(var n=r(t),c=i.f,l=a.f,u=0;u<n.length;u++){var d=n[u];o(e,d)||c(e,d,l(t,d))}}},93937:function(e,t,n){"use strict";var o=n(17657)("match");e.exports=function(e){var t=/./;try{"/./"[e](t)}catch(n){try{return t[o]=!1,"/./"[e](t)}catch(r){}}return!1}},28954:function(e,t,n){"use strict";var o=n(69691);e.exports=!o((function(){function e(){}return e.prototype.constructor=null,Object.getPrototypeOf(new e)!==e.prototype}))},34141:function(e,t,n){"use strict";var o=n(44184),r=n(92082),a=/"/g;e.exports=function(e,t,n,i){var c=r(o(e)),l="<"+t;return""!==n&&(l+=" "+n+'="'+r(i).replace(a,""")+'"'),l+">"+c+"</"+t+">"}},38415:function(e,t,n){"use strict";var o=n(39881).IteratorPrototype,r=n(83681),a=n(39160),i=n(29108),c=n(82723),l=function(){return this};e.exports=function(e,t,n){var u=t+" Iterator";return e.prototype=r(o,{next:a(1,n)}),i(e,u,!1,!0),c[u]=l,e}},52188:function(e,t,n){"use strict";var o=n(75592),r=n(74217),a=n(39160);e.exports=o?function(e,t,n){return r.f(e,t,a(1,n))}:function(e,t,n){return e[t]=n,e}},39160:function(e){"use strict";e.exports=function(e,t){return{enumerable:!(1&e),configurable:!(2&e),writable:!(4&e),value:t}}},39241:function(e,t,n){"use strict";var o=n(14613),r=n(74217),a=n(39160);e.exports=function(e,t,n){var i=o(t);i in e?r.f(e,i,a(0,n)):e[i]=n}},79873:function(e,t,n){"use strict";var o=n(69691),r=n(47497).start,a=Math.abs,i=Date.prototype,c=i.getTime,l=i.toISOString;e.exports=o((function(){return"0385-07-25T07:06:39.999Z"!=l.call(new Date(-50000000000001))}))||!o((function(){l.call(new Date(NaN))}))?function(){if(!isFinite(c.call(this)))throw RangeError("Invalid time value");var e=this,t=e.getUTCFullYear(),n=e.getUTCMilliseconds(),o=t<0?"-":t>9999?"+":"";return o+r(a(t),o?6:4,0)+"-"+r(e.getUTCMonth()+1,2,0)+"-"+r(e.getUTCDate(),2,0)+"T"+r(e.getUTCHours(),2,0)+":"+r(e.getUTCMinutes(),2,0)+":"+r(e.getUTCSeconds(),2,0)+"."+r(n,3,0)+"Z"}:l},57763:function(e,t,n){"use strict";var o=n(63518),r=n(28734);e.exports=function(e){if(o(this),"string"===e||"default"===e)e="string";else if("number"!==e)throw TypeError("Incorrect hint");return r(this,e)}},71179:function(e,t,n){"use strict";var o=n(56174),r=n(38415),a=n(6863),i=n(18444),c=n(29108),l=n(52188),u=n(11807),d=n(17657),s=n(1986),p=n(82723),m=n(39881),f=m.IteratorPrototype,h=m.BUGGY_SAFARI_ITERATORS,g=d("iterator"),C="keys",N="values",v="entries",b=function(){return this};e.exports=function(e,t,n,d,m,V,y){r(n,t,d);var x,I,k,w=function(e){if(e===m&&B)return B;if(!h&&e in M)return M[e];switch(e){case C:case N:case v:return function(){return new n(this,e)}}return function(){return new n(this)}},S=t+" Iterator",_=!1,M=e.prototype,D=M[g]||M["@@iterator"]||m&&M[m],B=!h&&D||w(m),A="Array"==t&&M.entries||D;if(A&&(x=a(A.call(new e)),f!==Object.prototype&&x.next&&(s||a(x)===f||(i?i(x,f):"function"!=typeof x[g]&&l(x,g,b)),c(x,S,!0,!0),s&&(p[S]=b))),m==N&&D&&D.name!==N&&(_=!0,B=function(){return D.call(this)}),s&&!y||M[g]===B||l(M,g,B),p[t]=B,m)if(I={values:w(N),keys:V?B:w(C),entries:w(v)},y)for(k in I)(h||_||!(k in M))&&u(M,k,I[k]);else o({target:t,proto:!0,forced:h||_},I);return I}},55282:function(e,t,n){"use strict";var o=n(65781),r=n(28919),a=n(3444),i=n(74217).f;e.exports=function(e){var t=o.Symbol||(o.Symbol={});r(t,e)||i(t,e,{value:a.f(e)})}},75592:function(e,t,n){"use strict";var o=n(69691);e.exports=!o((function(){return 7!=Object.defineProperty({},1,{get:function(){return 7}})[1]}))},21477:function(e,t,n){"use strict";var o=n(84253),r=n(35611),a=o.document,i=r(a)&&r(a.createElement);e.exports=function(e){return i?a.createElement(e):{}}},20967:function(e,t,n){"use strict";var o=n(72319).match(/firefox\/(\d+)/i);e.exports=!!o&&+o[1]},46392:function(e){"use strict";e.exports="object"==typeof window},85749:function(e,t,n){"use strict";var o=n(72319);e.exports=/MSIE|Trident/.test(o)},20037:function(e,t,n){"use strict";var o=n(72319),r=n(84253);e.exports=/iphone|ipod|ipad/i.test(o)&&r.Pebble!==undefined},24542:function(e,t,n){"use strict";var o=n(72319);e.exports=/(?:iphone|ipod|ipad).*applewebkit/i.test(o)},41488:function(e,t,n){"use strict";var o=n(77e3),r=n(84253);e.exports="process"==o(r.process)},47501:function(e,t,n){"use strict";var o=n(72319);e.exports=/web0s(?!.*chrome)/i.test(o)},72319:function(e,t,n){"use strict";var o=n(69808);e.exports=o("navigator","userAgent")||""},12338:function(e,t,n){"use strict";var o,r,a=n(84253),i=n(72319),c=a.process,l=a.Deno,u=c&&c.versions||l&&l.version,d=u&&u.v8;d?r=(o=d.split("."))[0]<4?1:o[0]+o[1]:i&&(!(o=i.match(/Edge\/(\d+)/))||o[1]>=74)&&(o=i.match(/Chrome\/(\d+)/))&&(r=o[1]),e.exports=r&&+r},12200:function(e,t,n){"use strict";var o=n(72319).match(/AppleWebKit\/(\d+)\./);e.exports=!!o&&+o[1]},23344:function(e){"use strict";e.exports=["constructor","hasOwnProperty","isPrototypeOf","propertyIsEnumerable","toLocaleString","toString","valueOf"]},56174:function(e,t,n){"use strict";var o=n(84253),r=n(22245).f,a=n(52188),i=n(11807),c=n(30889),l=n(49957),u=n(41441);e.exports=function(e,t){var n,d,s,p,m,f=e.target,h=e.global,g=e.stat;if(n=h?o:g?o[f]||c(f,{}):(o[f]||{}).prototype)for(d in t){if(p=t[d],s=e.noTargetGet?(m=r(n,d))&&m.value:n[d],!u(h?d:f+(g?".":"#")+d,e.forced)&&s!==undefined){if(typeof p==typeof s)continue;l(p,s)}(e.sham||s&&s.sham)&&a(p,"sham",!0),i(n,d,p,e)}}},69691:function(e){"use strict";e.exports=function(e){try{return!!e()}catch(t){return!0}}},68880:function(e,t,n){"use strict";n(12654);var o=n(11807),r=n(71841),a=n(69691),i=n(17657),c=n(52188),l=i("species"),u=RegExp.prototype;e.exports=function(e,t,n,d){var s=i(e),p=!a((function(){var t={};return t[s]=function(){return 7},7!=""[e](t)})),m=p&&!a((function(){var t=!1,n=/a/;return"split"===e&&((n={}).constructor={},n.constructor[l]=function(){return n},n.flags="",n[s]=/./[s]),n.exec=function(){return t=!0,null},n[s](""),!t}));if(!p||!m||n){var f=/./[s],h=t(s,""[e],(function(e,t,n,o,a){var i=t.exec;return i===r||i===u.exec?p&&!a?{done:!0,value:f.call(t,n,o)}:{done:!0,value:e.call(n,t,o)}:{done:!1}}));o(String.prototype,e,h[0]),o(u,s,h[1])}d&&c(u[s],"sham",!0)}},904:function(e,t,n){"use strict";var o=n(89999),r=n(39570),a=n(74271);e.exports=function i(e,t,n,c,l,u,d,s){for(var p,m=l,f=0,h=!!d&&a(d,s,3);f<c;){if(f in n){if(p=h?h(n[f],f,t):n[f],u>0&&o(p))m=i(e,t,p,r(p.length),m,u-1)-1;else{if(m>=9007199254740991)throw TypeError("Exceed the acceptable array length");e[m]=p}m++}f++}return m}},7056:function(e,t,n){"use strict";var o=n(69691);e.exports=!o((function(){return Object.isExtensible(Object.preventExtensions({}))}))},74271:function(e,t,n){"use strict";var o=n(83923);e.exports=function(e,t,n){if(o(e),t===undefined)return e;switch(n){case 0:return function(){return e.call(t)};case 1:return function(n){return e.call(t,n)};case 2:return function(n,o){return e.call(t,n,o)};case 3:return function(n,o,r){return e.call(t,n,o,r)}}return function(){return e.apply(t,arguments)}}},68719:function(e,t,n){"use strict";var o=n(83923),r=n(35611),a=[].slice,i={};e.exports=Function.bind||function(e){var t=o(this),n=a.call(arguments,1),c=function(){var o=n.concat(a.call(arguments));return this instanceof c?function(e,t,n){if(!(t in i)){for(var o=[],r=0;r<t;r++)o[r]="a["+r+"]";i[t]=Function("C,a","return new C("+o.join(",")+")")}return i[t](e,n)}(t,o.length,o):t.apply(e,o)};return r(t.prototype)&&(c.prototype=t.prototype),c}},69808:function(e,t,n){"use strict";var o=n(84253);e.exports=function(e,t){return arguments.length<2?"function"==typeof(n=o[e])?n:undefined:o[e]&&o[e][t];var n}},3170:function(e,t,n){"use strict";var o=n(47953),r=n(82723),a=n(17657)("iterator");e.exports=function(e){if(e!=undefined)return e[a]||e["@@iterator"]||r[o(e)]}},55444:function(e,t,n){"use strict";var o=n(12104),r=Math.floor,a="".replace,i=/\$([$&'`]|\d{1,2}|<[^>]*>)/g,c=/\$([$&'`]|\d{1,2})/g;e.exports=function(e,t,n,l,u,d){var s=n+e.length,p=l.length,m=c;return u!==undefined&&(u=o(u),m=i),a.call(d,m,(function(o,a){var i;switch(a.charAt(0)){case"$":return"$";case"&":return e;case"`":return t.slice(0,n);case"'":return t.slice(s);case"<":i=u[a.slice(1,-1)];break;default:var c=+a;if(0===c)return o;if(c>p){var d=r(c/10);return 0===d?o:d<=p?l[d-1]===undefined?a.charAt(1):l[d-1]+a.charAt(1):o}i=l[c-1]}return i===undefined?"":i}))}},84253:function(e,t,n){"use strict";var o=function(e){return e&&e.Math==Math&&e};e.exports=o("object"==typeof globalThis&&globalThis)||o("object"==typeof window&&window)||o("object"==typeof self&&self)||o("object"==typeof n.g&&n.g)||function(){return this}()||Function("return this")()},28919:function(e,t,n){"use strict";var o=n(12104),r={}.hasOwnProperty;e.exports=Object.hasOwn||function(e,t){return r.call(o(e),t)}},90311:function(e){"use strict";e.exports={}},21419:function(e,t,n){"use strict";var o=n(84253);e.exports=function(e,t){var n=o.console;n&&n.error&&(1===arguments.length?n.error(e):n.error(e,t))}},2369:function(e,t,n){"use strict";var o=n(69808);e.exports=o("document","documentElement")},78251:function(e,t,n){"use strict";var o=n(75592),r=n(69691),a=n(21477);e.exports=!o&&!r((function(){return 7!=Object.defineProperty(a("div"),"a",{get:function(){return 7}}).a}))},16567:function(e){"use strict";var t=Math.abs,n=Math.pow,o=Math.floor,r=Math.log,a=Math.LN2;e.exports={pack:function(e,i,c){var l,u,d,s=new Array(c),p=8*c-i-1,m=(1<<p)-1,f=m>>1,h=23===i?n(2,-24)-n(2,-77):0,g=e<0||0===e&&1/e<0?1:0,C=0;for((e=t(e))!=e||e===Infinity?(u=e!=e?1:0,l=m):(l=o(r(e)/a),e*(d=n(2,-l))<1&&(l--,d*=2),(e+=l+f>=1?h/d:h*n(2,1-f))*d>=2&&(l++,d/=2),l+f>=m?(u=0,l=m):l+f>=1?(u=(e*d-1)*n(2,i),l+=f):(u=e*n(2,f-1)*n(2,i),l=0));i>=8;s[C++]=255&u,u/=256,i-=8);for(l=l<<i|u,p+=i;p>0;s[C++]=255&l,l/=256,p-=8);return s[--C]|=128*g,s},unpack:function(e,t){var o,r=e.length,a=8*r-t-1,i=(1<<a)-1,c=i>>1,l=a-7,u=r-1,d=e[u--],s=127&d;for(d>>=7;l>0;s=256*s+e[u],u--,l-=8);for(o=s&(1<<-l)-1,s>>=-l,l+=t;l>0;o=256*o+e[u],u--,l-=8);if(0===s)s=1-c;else{if(s===i)return o?NaN:d?-Infinity:Infinity;o+=n(2,t),s-=c}return(d?-1:1)*o*n(2,s-t)}}},50990:function(e,t,n){"use strict";var o=n(69691),r=n(77e3),a="".split;e.exports=o((function(){return!Object("z").propertyIsEnumerable(0)}))?function(e){return"String"==r(e)?a.call(e,""):Object(e)}:Object},22285:function(e,t,n){"use strict";var o=n(35611),r=n(18444);e.exports=function(e,t,n){var a,i;return r&&"function"==typeof(a=t.constructor)&&a!==n&&o(i=a.prototype)&&i!==n.prototype&&r(e,i),e}},89853:function(e,t,n){"use strict";var o=n(55935),r=Function.toString;"function"!=typeof o.inspectSource&&(o.inspectSource=function(e){return r.call(e)}),e.exports=o.inspectSource},40421:function(e,t,n){"use strict";var o=n(56174),r=n(90311),a=n(35611),i=n(28919),c=n(74217).f,l=n(78870),u=n(59995),d=n(41080),s=n(7056),p=!1,m=d("meta"),f=0,h=Object.isExtensible||function(){return!0},g=function(e){c(e,m,{value:{objectID:"O"+f++,weakData:{}}})},C=e.exports={enable:function(){C.enable=function(){},p=!0;var e=l.f,t=[].splice,n={};n[m]=1,e(n).length&&(l.f=function(n){for(var o=e(n),r=0,a=o.length;r<a;r++)if(o[r]===m){t.call(o,r,1);break}return o},o({target:"Object",stat:!0,forced:!0},{getOwnPropertyNames:u.f}))},fastKey:function(e,t){if(!a(e))return"symbol"==typeof e?e:("string"==typeof e?"S":"P")+e;if(!i(e,m)){if(!h(e))return"F";if(!t)return"E";g(e)}return e[m].objectID},getWeakData:function(e,t){if(!i(e,m)){if(!h(e))return!0;if(!t)return!1;g(e)}return e[m].weakData},onFreeze:function(e){return s&&p&&h(e)&&!i(e,m)&&g(e),e}};r[m]=!0},79947:function(e,t,n){"use strict";var o,r,a,i=n(82911),c=n(84253),l=n(35611),u=n(52188),d=n(28919),s=n(55935),p=n(85152),m=n(90311),f="Object already initialized",h=c.WeakMap;if(i||s.state){var g=s.state||(s.state=new h),C=g.get,N=g.has,v=g.set;o=function(e,t){if(N.call(g,e))throw new TypeError(f);return t.facade=e,v.call(g,e,t),t},r=function(e){return C.call(g,e)||{}},a=function(e){return N.call(g,e)}}else{var b=p("state");m[b]=!0,o=function(e,t){if(d(e,b))throw new TypeError(f);return t.facade=e,u(e,b,t),t},r=function(e){return d(e,b)?e[b]:{}},a=function(e){return d(e,b)}}e.exports={set:o,get:r,has:a,enforce:function(e){return a(e)?r(e):o(e,{})},getterFor:function(e){return function(t){var n;if(!l(t)||(n=r(t)).type!==e)throw TypeError("Incompatible receiver, "+e+" required");return n}}}},14195:function(e,t,n){"use strict";var o=n(17657),r=n(82723),a=o("iterator"),i=Array.prototype;e.exports=function(e){return e!==undefined&&(r.Array===e||i[a]===e)}},89999:function(e,t,n){"use strict";var o=n(77e3);e.exports=Array.isArray||function(e){return"Array"==o(e)}},41441:function(e,t,n){"use strict";var o=n(69691),r=/#|\.prototype\./,a=function(e,t){var n=c[i(e)];return n==u||n!=l&&("function"==typeof t?o(t):!!t)},i=a.normalize=function(e){return String(e).replace(r,".").toLowerCase()},c=a.data={},l=a.NATIVE="N",u=a.POLYFILL="P";e.exports=a},93624:function(e,t,n){"use strict";var o=n(35611),r=Math.floor;e.exports=function(e){return!o(e)&&isFinite(e)&&r(e)===e}},35611:function(e){"use strict";e.exports=function(e){return"object"==typeof e?null!==e:"function"==typeof e}},1986:function(e){"use strict";e.exports=!1},86133:function(e,t,n){"use strict";var o=n(35611),r=n(77e3),a=n(17657)("match");e.exports=function(e){var t;return o(e)&&((t=e[a])!==undefined?!!t:"RegExp"==r(e))}},78253:function(e,t,n){"use strict";var o=n(69808),r=n(40647);e.exports=r?function(e){return"symbol"==typeof e}:function(e){var t=o("Symbol");return"function"==typeof t&&Object(e)instanceof t}},56342:function(e,t,n){"use strict";var o=n(63518),r=n(14195),a=n(39570),i=n(74271),c=n(3170),l=n(61781),u=function(e,t){this.stopped=e,this.result=t};e.exports=function(e,t,n){var d,s,p,m,f,h,g,C=n&&n.that,N=!(!n||!n.AS_ENTRIES),v=!(!n||!n.IS_ITERATOR),b=!(!n||!n.INTERRUPTED),V=i(t,C,1+N+b),y=function(e){return d&&l(d),new u(!0,e)},x=function(e){return N?(o(e),b?V(e[0],e[1],y):V(e[0],e[1])):b?V(e,y):V(e)};if(v)d=e;else{if("function"!=typeof(s=c(e)))throw TypeError("Target is not iterable");if(r(s)){for(p=0,m=a(e.length);m>p;p++)if((f=x(e[p]))&&f instanceof u)return f;return new u(!1)}d=s.call(e)}for(h=d.next;!(g=h.call(d)).done;){try{f=x(g.value)}catch(I){throw l(d),I}if("object"==typeof f&&f&&f instanceof u)return f}return new u(!1)}},61781:function(e,t,n){"use strict";var o=n(63518);e.exports=function(e){var t=e["return"];if(t!==undefined)return o(t.call(e)).value}},39881:function(e,t,n){"use strict";var o,r,a,i=n(69691),c=n(6863),l=n(52188),u=n(28919),d=n(17657),s=n(1986),p=d("iterator"),m=!1;[].keys&&("next"in(a=[].keys())?(r=c(c(a)))!==Object.prototype&&(o=r):m=!0);var f=o==undefined||i((function(){var e={};return o[p].call(e)!==e}));f&&(o={}),s&&!f||u(o,p)||l(o,p,(function(){return this})),e.exports={IteratorPrototype:o,BUGGY_SAFARI_ITERATORS:m}},82723:function(e){"use strict";e.exports={}},19997:function(e){"use strict";var t=Math.expm1,n=Math.exp;e.exports=!t||t(10)>22025.465794806718||t(10)<22025.465794806718||-2e-17!=t(-2e-17)?function(e){return 0==(e=+e)?e:e>-1e-6&&e<1e-6?e+e*e/2:n(e)-1}:t},43334:function(e,t,n){"use strict";var o=n(24305),r=Math.abs,a=Math.pow,i=a(2,-52),c=a(2,-23),l=a(2,127)*(2-c),u=a(2,-126);e.exports=Math.fround||function(e){var t,n,a=r(e),d=o(e);return a<u?d*(a/u/c+1/i-1/i)*u*c:(n=(t=(1+c/i)*a)-(t-a))>l||n!=n?d*Infinity:d*n}},83659:function(e){"use strict";var t=Math.log;e.exports=Math.log1p||function(e){return(e=+e)>-1e-8&&e<1e-8?e-e*e/2:t(1+e)}},24305:function(e){"use strict";e.exports=Math.sign||function(e){return 0==(e=+e)||e!=e?e:e<0?-1:1}},80909:function(e,t,n){"use strict";var o,r,a,i,c,l,u,d,s=n(84253),p=n(22245).f,m=n(33453).set,f=n(24542),h=n(20037),g=n(47501),C=n(41488),N=s.MutationObserver||s.WebKitMutationObserver,v=s.document,b=s.process,V=s.Promise,y=p(s,"queueMicrotask"),x=y&&y.value;x||(o=function(){var e,t;for(C&&(e=b.domain)&&e.exit();r;){t=r.fn,r=r.next;try{t()}catch(n){throw r?i():a=undefined,n}}a=undefined,e&&e.enter()},f||C||g||!N||!v?!h&&V&&V.resolve?((u=V.resolve(undefined)).constructor=V,d=u.then,i=function(){d.call(u,o)}):i=C?function(){b.nextTick(o)}:function(){m.call(s,o)}:(c=!0,l=v.createTextNode(""),new N(o).observe(l,{characterData:!0}),i=function(){l.data=c=!c})),e.exports=x||function(e){var t={fn:e,next:undefined};a&&(a.next=t),r||(r=t,i()),a=t}},4302:function(e,t,n){"use strict";var o=n(84253);e.exports=o.Promise},54772:function(e,t,n){"use strict";var o=n(12338),r=n(69691);e.exports=!!Object.getOwnPropertySymbols&&!r((function(){var e=Symbol();return!String(e)||!(Object(e)instanceof Symbol)||!Symbol.sham&&o&&o<41}))},82911:function(e,t,n){"use strict";var o=n(84253),r=n(89853),a=o.WeakMap;e.exports="function"==typeof a&&/native code/.test(r(a))},82101:function(e,t,n){"use strict";var o=n(83923),r=function(e){var t,n;this.promise=new e((function(e,o){if(t!==undefined||n!==undefined)throw TypeError("Bad Promise constructor");t=e,n=o})),this.resolve=o(t),this.reject=o(n)};e.exports.f=function(e){return new r(e)}},18774:function(e,t,n){"use strict";var o=n(86133);e.exports=function(e){if(o(e))throw TypeError("The method doesn't accept regular expressions");return e}},64630:function(e,t,n){"use strict";var o=n(84253).isFinite;e.exports=Number.isFinite||function(e){return"number"==typeof e&&o(e)}},78025:function(e,t,n){"use strict";var o=n(84253),r=n(92082),a=n(84703).trim,i=n(65181),c=o.parseFloat,l=1/c(i+"-0")!=-Infinity;e.exports=l?function(e){var t=a(r(e)),n=c(t);return 0===n&&"-"==t.charAt(0)?-0:n}:c},55092:function(e,t,n){"use strict";var o=n(84253),r=n(92082),a=n(84703).trim,i=n(65181),c=o.parseInt,l=/^[+-]?0[Xx]/,u=8!==c(i+"08")||22!==c(i+"0x16");e.exports=u?function(e,t){var n=a(r(e));return c(n,t>>>0||(l.test(n)?16:10))}:c},64905:function(e,t,n){"use strict";var o=n(75592),r=n(69691),a=n(84547),i=n(21061),c=n(77659),l=n(12104),u=n(50990),d=Object.assign,s=Object.defineProperty;e.exports=!d||r((function(){if(o&&1!==d({b:1},d(s({},"a",{enumerable:!0,get:function(){s(this,"b",{value:3,enumerable:!1})}}),{b:2})).b)return!0;var e={},t={},n=Symbol(),r="abcdefghijklmnopqrst";return e[n]=7,r.split("").forEach((function(e){t[e]=e})),7!=d({},e)[n]||a(d({},t)).join("")!=r}))?function(e,t){for(var n=l(e),r=arguments.length,d=1,s=i.f,p=c.f;r>d;)for(var m,f=u(arguments[d++]),h=s?a(f).concat(s(f)):a(f),g=h.length,C=0;g>C;)m=h[C++],o&&!p.call(f,m)||(n[m]=f[m]);return n}:d},83681:function(e,t,n){"use strict";var o,r=n(63518),a=n(91543),i=n(23344),c=n(90311),l=n(2369),u=n(21477),d=n(85152),s="prototype",p="script",m=d("IE_PROTO"),f=function(){},h=function(e){return"<"+p+">"+e+"</"+p+">"},g=function(e){e.write(h("")),e.close();var t=e.parentWindow.Object;return e=null,t},C=function(){try{o=new ActiveXObject("htmlfile")}catch(t){}C=document.domain&&o?g(o):function(){var e,t=u("iframe"),n="java"+p+":";if(t.style)return t.style.display="none",l.appendChild(t),t.src=String(n),(e=t.contentWindow.document).open(),e.write(h("document.F=Object")),e.close(),e.F}()||g(o);for(var e=i.length;e--;)delete C[s][i[e]];return C()};c[m]=!0,e.exports=Object.create||function(e,t){var n;return null!==e?(f[s]=r(e),n=new f,f[s]=null,n[m]=e):n=C(),t===undefined?n:a(n,t)}},91543:function(e,t,n){"use strict";var o=n(75592),r=n(74217),a=n(63518),i=n(84547);e.exports=o?Object.defineProperties:function(e,t){a(e);for(var n,o=i(t),c=o.length,l=0;c>l;)r.f(e,n=o[l++],t[n]);return e}},74217:function(e,t,n){"use strict";var o=n(75592),r=n(78251),a=n(63518),i=n(14613),c=Object.defineProperty;t.f=o?c:function(e,t,n){if(a(e),t=i(t),a(n),r)try{return c(e,t,n)}catch(o){}if("get"in n||"set"in n)throw TypeError("Accessors not supported");return"value"in n&&(e[t]=n.value),e}},22245:function(e,t,n){"use strict";var o=n(75592),r=n(77659),a=n(39160),i=n(26553),c=n(14613),l=n(28919),u=n(78251),d=Object.getOwnPropertyDescriptor;t.f=o?d:function(e,t){if(e=i(e),t=c(t),u)try{return d(e,t)}catch(n){}if(l(e,t))return a(!r.f.call(e,t),e[t])}},59995:function(e,t,n){"use strict";var o=n(26553),r=n(78870).f,a={}.toString,i="object"==typeof window&&window&&Object.getOwnPropertyNames?Object.getOwnPropertyNames(window):[];e.exports.f=function(e){return i&&"[object Window]"==a.call(e)?function(e){try{return r(e)}catch(t){return i.slice()}}(e):r(o(e))}},78870:function(e,t,n){"use strict";var o=n(3613),r=n(23344).concat("length","prototype");t.f=Object.getOwnPropertyNames||function(e){return o(e,r)}},21061:function(e,t){"use strict";t.f=Object.getOwnPropertySymbols},6863:function(e,t,n){"use strict";var o=n(28919),r=n(12104),a=n(85152),i=n(28954),c=a("IE_PROTO"),l=Object.prototype;e.exports=i?Object.getPrototypeOf:function(e){return e=r(e),o(e,c)?e[c]:"function"==typeof e.constructor&&e instanceof e.constructor?e.constructor.prototype:e instanceof Object?l:null}},3613:function(e,t,n){"use strict";var o=n(28919),r=n(26553),a=n(25945).indexOf,i=n(90311);e.exports=function(e,t){var n,c=r(e),l=0,u=[];for(n in c)!o(i,n)&&o(c,n)&&u.push(n);for(;t.length>l;)o(c,n=t[l++])&&(~a(u,n)||u.push(n));return u}},84547:function(e,t,n){"use strict";var o=n(3613),r=n(23344);e.exports=Object.keys||function(e){return o(e,r)}},77659:function(e,t){"use strict";var n={}.propertyIsEnumerable,o=Object.getOwnPropertyDescriptor,r=o&&!n.call({1:2},1);t.f=r?function(e){var t=o(this,e);return!!t&&t.enumerable}:n},47339:function(e,t,n){"use strict";var o=n(1986),r=n(84253),a=n(69691),i=n(12200);e.exports=o||!a((function(){if(!(i&&i<535)){var e=Math.random();__defineSetter__.call(null,e,(function(){})),delete r[e]}}))},18444:function(e,t,n){"use strict";var o=n(63518),r=n(1372);e.exports=Object.setPrototypeOf||("__proto__"in{}?function(){var e,t=!1,n={};try{(e=Object.getOwnPropertyDescriptor(Object.prototype,"__proto__").set).call(n,[]),t=n instanceof Array}catch(a){}return function(n,a){return o(n),r(a),t?e.call(n,a):n.__proto__=a,n}}():undefined)},3e4:function(e,t,n){"use strict";var o=n(75592),r=n(84547),a=n(26553),i=n(77659).f,c=function(e){return function(t){for(var n,c=a(t),l=r(c),u=l.length,d=0,s=[];u>d;)n=l[d++],o&&!i.call(c,n)||s.push(e?[n,c[n]]:c[n]);return s}};e.exports={entries:c(!0),values:c(!1)}},13966:function(e,t,n){"use strict";var o=n(64910),r=n(47953);e.exports=o?{}.toString:function(){return"[object "+r(this)+"]"}},28734:function(e,t,n){"use strict";var o=n(35611);e.exports=function(e,t){var n,r;if("string"===t&&"function"==typeof(n=e.toString)&&!o(r=n.call(e)))return r;if("function"==typeof(n=e.valueOf)&&!o(r=n.call(e)))return r;if("string"!==t&&"function"==typeof(n=e.toString)&&!o(r=n.call(e)))return r;throw TypeError("Can't convert object to primitive value")}},28482:function(e,t,n){"use strict";var o=n(69808),r=n(78870),a=n(21061),i=n(63518);e.exports=o("Reflect","ownKeys")||function(e){var t=r.f(i(e)),n=a.f;return n?t.concat(n(e)):t}},65781:function(e,t,n){"use strict";var o=n(84253);e.exports=o},47673:function(e){"use strict";e.exports=function(e){try{return{error:!1,value:e()}}catch(t){return{error:!0,value:t}}}},48141:function(e,t,n){"use strict";var o=n(63518),r=n(35611),a=n(82101);e.exports=function(e,t){if(o(e),r(t)&&t.constructor===e)return t;var n=a.f(e);return(0,n.resolve)(t),n.promise}},3993:function(e,t,n){"use strict";var o=n(11807);e.exports=function(e,t,n){for(var r in t)o(e,r,t[r],n);return e}},11807:function(e,t,n){"use strict";var o=n(84253),r=n(52188),a=n(28919),i=n(30889),c=n(89853),l=n(79947),u=l.get,d=l.enforce,s=String(String).split("String");(e.exports=function(e,t,n,c){var l,u=!!c&&!!c.unsafe,p=!!c&&!!c.enumerable,m=!!c&&!!c.noTargetGet;"function"==typeof n&&("string"!=typeof t||a(n,"name")||r(n,"name",t),(l=d(n)).source||(l.source=s.join("string"==typeof t?t:""))),e!==o?(u?!m&&e[t]&&(p=!0):delete e[t],p?e[t]=n:r(e,t,n)):p?e[t]=n:i(t,n)})(Function.prototype,"toString",(function(){return"function"==typeof this&&u(this).source||c(this)}))},5641:function(e,t,n){"use strict";var o=n(77e3),r=n(71841);e.exports=function(e,t){var n=e.exec;if("function"==typeof n){var a=n.call(e,t);if("object"!=typeof a)throw TypeError("RegExp exec method returned something other than an Object or null");return a}if("RegExp"!==o(e))throw TypeError("RegExp#exec called on incompatible receiver");return r.call(e,t)}},71841:function(e,t,n){"use strict";var o,r,a=n(92082),i=n(5105),c=n(1864),l=n(27364),u=n(83681),d=n(79947).get,s=n(8368),p=n(2229),m=RegExp.prototype.exec,f=l("native-string-replace",String.prototype.replace),h=m,g=(o=/a/,r=/b*/g,m.call(o,"a"),m.call(r,"a"),0!==o.lastIndex||0!==r.lastIndex),C=c.UNSUPPORTED_Y||c.BROKEN_CARET,N=/()??/.exec("")[1]!==undefined;(g||N||C||s||p)&&(h=function(e){var t,n,o,r,c,l,s,p=this,v=d(p),b=a(e),V=v.raw;if(V)return V.lastIndex=p.lastIndex,t=h.call(V,b),p.lastIndex=V.lastIndex,t;var y=v.groups,x=C&&p.sticky,I=i.call(p),k=p.source,w=0,S=b;if(x&&(-1===(I=I.replace("y","")).indexOf("g")&&(I+="g"),S=b.slice(p.lastIndex),p.lastIndex>0&&(!p.multiline||p.multiline&&"\n"!==b.charAt(p.lastIndex-1))&&(k="(?: "+k+")",S=" "+S,w++),n=new RegExp("^(?:"+k+")",I)),N&&(n=new RegExp("^"+k+"$(?!\\s)",I)),g&&(o=p.lastIndex),r=m.call(x?n:p,S),x?r?(r.input=r.input.slice(w),r[0]=r[0].slice(w),r.index=p.lastIndex,p.lastIndex+=r[0].length):p.lastIndex=0:g&&r&&(p.lastIndex=p.global?r.index+r[0].length:o),N&&r&&r.length>1&&f.call(r[0],n,(function(){for(c=1;c<arguments.length-2;c++)arguments[c]===undefined&&(r[c]=undefined)})),r&&y)for(r.groups=l=u(null),c=0;c<y.length;c++)l[(s=y[c])[0]]=r[s[1]];return r}),e.exports=h},5105:function(e,t,n){"use strict";var o=n(63518);e.exports=function(){var e=o(this),t="";return e.global&&(t+="g"),e.ignoreCase&&(t+="i"),e.multiline&&(t+="m"),e.dotAll&&(t+="s"),e.unicode&&(t+="u"),e.sticky&&(t+="y"),t}},1864:function(e,t,n){"use strict";var o=n(69691),r=function(e,t){return RegExp(e,t)};t.UNSUPPORTED_Y=o((function(){var e=r("a","y");return e.lastIndex=2,null!=e.exec("abcd")})),t.BROKEN_CARET=o((function(){var e=r("^r","gy");return e.lastIndex=2,null!=e.exec("str")}))},8368:function(e,t,n){"use strict";var o=n(69691);e.exports=o((function(){var e=RegExp(".","string".charAt(0));return!(e.dotAll&&e.exec("\n")&&"s"===e.flags)}))},2229:function(e,t,n){"use strict";var o=n(69691);e.exports=o((function(){var e=RegExp("(?<a>b)","string".charAt(5));return"b"!==e.exec("b").groups.a||"bc"!=="b".replace(e,"$<a>c")}))},44184:function(e){"use strict";e.exports=function(e){if(e==undefined)throw TypeError("Can't call method on "+e);return e}},61398:function(e){"use strict";e.exports=Object.is||function(e,t){return e===t?0!==e||1/e==1/t:e!=e&&t!=t}},30889:function(e,t,n){"use strict";var o=n(84253);e.exports=function(e,t){try{Object.defineProperty(o,e,{value:t,configurable:!0,writable:!0})}catch(n){o[e]=t}return t}},64157:function(e,t,n){"use strict";var o=n(69808),r=n(74217),a=n(17657),i=n(75592),c=a("species");e.exports=function(e){var t=o(e),n=r.f;i&&t&&!t[c]&&n(t,c,{configurable:!0,get:function(){return this}})}},29108:function(e,t,n){"use strict";var o=n(74217).f,r=n(28919),a=n(17657)("toStringTag");e.exports=function(e,t,n){e&&!r(e=n?e:e.prototype,a)&&o(e,a,{configurable:!0,value:t})}},85152:function(e,t,n){"use strict";var o=n(27364),r=n(41080),a=o("keys");e.exports=function(e){return a[e]||(a[e]=r(e))}},55935:function(e,t,n){"use strict";var o=n(84253),r=n(30889),a="__core-js_shared__",i=o[a]||r(a,{});e.exports=i},27364:function(e,t,n){"use strict";var o=n(1986),r=n(55935);(e.exports=function(e,t){return r[e]||(r[e]=t!==undefined?t:{})})("versions",[]).push({version:"3.16.1",mode:o?"pure":"global",copyright:"\xa9 2021 Denis Pushkarev (zloirock.ru)"})},24345:function(e,t,n){"use strict";var o=n(63518),r=n(83923),a=n(17657)("species");e.exports=function(e,t){var n,i=o(e).constructor;return i===undefined||(n=o(i)[a])==undefined?t:r(n)}},26096:function(e,t,n){"use strict";var o=n(69691);e.exports=function(e){return o((function(){var t=""[e]('"');return t!==t.toLowerCase()||t.split('"').length>3}))}},37015:function(e,t,n){"use strict";var o=n(3997),r=n(92082),a=n(44184),i=function(e){return function(t,n){var i,c,l=r(a(t)),u=o(n),d=l.length;return u<0||u>=d?e?"":undefined:(i=l.charCodeAt(u))<55296||i>56319||u+1===d||(c=l.charCodeAt(u+1))<56320||c>57343?e?l.charAt(u):i:e?l.slice(u,u+2):c-56320+(i-55296<<10)+65536}};e.exports={codeAt:i(!1),charAt:i(!0)}},43331:function(e,t,n){"use strict";var o=n(72319);e.exports=/Version\/10(?:\.\d+){1,2}(?: [\w./]+)?(?: Mobile\/\w+)? Safari\//.test(o)},47497:function(e,t,n){"use strict";var o=n(39570),r=n(92082),a=n(9811),i=n(44184),c=Math.ceil,l=function(e){return function(t,n,l){var u,d,s=r(i(t)),p=s.length,m=l===undefined?" ":r(l),f=o(n);return f<=p||""==m?s:(u=f-p,(d=a.call(m,c(u/m.length))).length>u&&(d=d.slice(0,u)),e?s+d:d+s)}};e.exports={start:l(!1),end:l(!0)}},9811:function(e,t,n){"use strict";var o=n(3997),r=n(92082),a=n(44184);e.exports=function(e){var t=r(a(this)),n="",i=o(e);if(i<0||i==Infinity)throw RangeError("Wrong number of repetitions");for(;i>0;(i>>>=1)&&(t+=t))1&i&&(n+=t);return n}},3035:function(e,t,n){"use strict";var o=n(69691),r=n(65181);e.exports=function(e){return o((function(){return!!r[e]()||"\u200b\x85\u180e"!="\u200b\x85\u180e"[e]()||r[e].name!==e}))}},84703:function(e,t,n){"use strict";var o=n(44184),r=n(92082),a="["+n(65181)+"]",i=RegExp("^"+a+a+"*"),c=RegExp(a+a+"*$"),l=function(e){return function(t){var n=r(o(t));return 1&e&&(n=n.replace(i,"")),2&e&&(n=n.replace(c,"")),n}};e.exports={start:l(1),end:l(2),trim:l(3)}},33453:function(e,t,n){"use strict";var o,r,a,i,c=n(84253),l=n(69691),u=n(74271),d=n(2369),s=n(21477),p=n(24542),m=n(41488),f=c.setImmediate,h=c.clearImmediate,g=c.process,C=c.MessageChannel,N=c.Dispatch,v=0,b={},V="onreadystatechange";try{o=c.location}catch(w){}var y=function(e){if(b.hasOwnProperty(e)){var t=b[e];delete b[e],t()}},x=function(e){return function(){y(e)}},I=function(e){y(e.data)},k=function(e){c.postMessage(String(e),o.protocol+"//"+o.host)};f&&h||(f=function(e){for(var t=[],n=arguments.length,o=1;n>o;)t.push(arguments[o++]);return b[++v]=function(){("function"==typeof e?e:Function(e)).apply(undefined,t)},r(v),v},h=function(e){delete b[e]},m?r=function(e){g.nextTick(x(e))}:N&&N.now?r=function(e){N.now(x(e))}:C&&!p?(i=(a=new C).port2,a.port1.onmessage=I,r=u(i.postMessage,i,1)):c.addEventListener&&"function"==typeof postMessage&&!c.importScripts&&o&&"file:"!==o.protocol&&!l(k)?(r=k,c.addEventListener("message",I,!1)):r=V in s("script")?function(e){d.appendChild(s("script"))[V]=function(){d.removeChild(this),y(e)}}:function(e){setTimeout(x(e),0)}),e.exports={set:f,clear:h}},81687:function(e,t,n){"use strict";var o=n(77e3);e.exports=function(e){if("number"!=typeof e&&"Number"!=o(e))throw TypeError("Incorrect invocation");return+e}},55205:function(e,t,n){"use strict";var o=n(3997),r=Math.max,a=Math.min;e.exports=function(e,t){var n=o(e);return n<0?r(n+t,0):a(n,t)}},77559:function(e,t,n){"use strict";var o=n(3997),r=n(39570);e.exports=function(e){if(e===undefined)return 0;var t=o(e),n=r(t);if(t!==n)throw RangeError("Wrong length or index");return n}},26553:function(e,t,n){"use strict";var o=n(50990),r=n(44184);e.exports=function(e){return o(r(e))}},3997:function(e){"use strict";var t=Math.ceil,n=Math.floor;e.exports=function(e){return isNaN(e=+e)?0:(e>0?n:t)(e)}},39570:function(e,t,n){"use strict";var o=n(3997),r=Math.min;e.exports=function(e){return e>0?r(o(e),9007199254740991):0}},12104:function(e,t,n){"use strict";var o=n(44184);e.exports=function(e){return Object(o(e))}},95740:function(e,t,n){"use strict";var o=n(80425);e.exports=function(e,t){var n=o(e);if(n%t)throw RangeError("Wrong offset");return n}},80425:function(e,t,n){"use strict";var o=n(3997);e.exports=function(e){var t=o(e);if(t<0)throw RangeError("The argument can't be less than 0");return t}},94673:function(e,t,n){"use strict";var o=n(35611),r=n(78253),a=n(28734),i=n(17657)("toPrimitive");e.exports=function(e,t){if(!o(e)||r(e))return e;var n,c=e[i];if(c!==undefined){if(t===undefined&&(t="default"),n=c.call(e,t),!o(n)||r(n))return n;throw TypeError("Can't convert object to primitive value")}return t===undefined&&(t="number"),a(e,t)}},14613:function(e,t,n){"use strict";var o=n(94673),r=n(78253);e.exports=function(e){var t=o(e,"string");return r(t)?t:String(t)}},64910:function(e,t,n){"use strict";var o={};o[n(17657)("toStringTag")]="z",e.exports="[object z]"===String(o)},92082:function(e,t,n){"use strict";var o=n(78253);e.exports=function(e){if(o(e))throw TypeError("Cannot convert a Symbol value to a string");return String(e)}},17576:function(e,t,n){"use strict";var o=n(56174),r=n(84253),a=n(75592),i=n(29023),c=n(19216),l=n(80246),u=n(50997),d=n(39160),s=n(52188),p=n(93624),m=n(39570),f=n(77559),h=n(95740),g=n(14613),C=n(28919),N=n(47953),v=n(35611),b=n(78253),V=n(83681),y=n(18444),x=n(78870).f,I=n(76182),k=n(69033).forEach,w=n(64157),S=n(74217),_=n(22245),M=n(79947),D=n(22285),B=M.get,A=M.set,T=S.f,L=_.f,E=Math.round,j=r.RangeError,P=l.ArrayBuffer,O=l.DataView,F=c.NATIVE_ARRAY_BUFFER_VIEWS,R=c.TYPED_ARRAY_CONSTRUCTOR,z=c.TYPED_ARRAY_TAG,W=c.TypedArray,U=c.TypedArrayPrototype,H=c.aTypedArrayConstructor,G=c.isTypedArray,Y="BYTES_PER_ELEMENT",Z="Wrong length",K=function(e,t){for(var n=0,o=t.length,r=new(H(e))(o);o>n;)r[n]=t[n++];return r},Q=function(e,t){T(e,t,{get:function(){return B(this)[t]}})},J=function(e){var t;return e instanceof P||"ArrayBuffer"==(t=N(e))||"SharedArrayBuffer"==t},X=function(e,t){return G(e)&&!b(t)&&t in e&&p(+t)&&t>=0},q=function(e,t){return t=g(t),X(e,t)?d(2,e[t]):L(e,t)},$=function(e,t,n){return t=g(t),!(X(e,t)&&v(n)&&C(n,"value"))||C(n,"get")||C(n,"set")||n.configurable||C(n,"writable")&&!n.writable||C(n,"enumerable")&&!n.enumerable?T(e,t,n):(e[t]=n.value,e)};a?(F||(_.f=q,S.f=$,Q(U,"buffer"),Q(U,"byteOffset"),Q(U,"byteLength"),Q(U,"length")),o({target:"Object",stat:!0,forced:!F},{getOwnPropertyDescriptor:q,defineProperty:$}),e.exports=function(e,t,n){var a=e.match(/\d+$/)[0]/8,c=e+(n?"Clamped":"")+"Array",l="get"+e,d="set"+e,p=r[c],g=p,C=g&&g.prototype,N={},b=function(e,t){T(e,t,{get:function(){return function(e,t){var n=B(e);return n.view[l](t*a+n.byteOffset,!0)}(this,t)},set:function(e){return function(e,t,o){var r=B(e);n&&(o=(o=E(o))<0?0:o>255?255:255&o),r.view[d](t*a+r.byteOffset,o,!0)}(this,t,e)},enumerable:!0})};F?i&&(g=t((function(e,t,n,o){return u(e,g,c),D(v(t)?J(t)?o!==undefined?new p(t,h(n,a),o):n!==undefined?new p(t,h(n,a)):new p(t):G(t)?K(g,t):I.call(g,t):new p(f(t)),e,g)})),y&&y(g,W),k(x(p),(function(e){e in g||s(g,e,p[e])})),g.prototype=C):(g=t((function(e,t,n,o){u(e,g,c);var r,i,l,d=0,s=0;if(v(t)){if(!J(t))return G(t)?K(g,t):I.call(g,t);r=t,s=h(n,a);var p=t.byteLength;if(o===undefined){if(p%a)throw j(Z);if((i=p-s)<0)throw j(Z)}else if((i=m(o)*a)+s>p)throw j(Z);l=i/a}else l=f(t),r=new P(i=l*a);for(A(e,{buffer:r,byteOffset:s,byteLength:i,length:l,view:new O(r)});d<l;)b(e,d++)})),y&&y(g,W),C=g.prototype=V(U)),C.constructor!==g&&s(C,"constructor",g),s(C,R,g),z&&s(C,z,c),N[c]=g,o({global:!0,forced:g!=p,sham:!F},N),Y in g||s(g,Y,a),Y in C||s(C,Y,a),w(c)}):e.exports=function(){}},29023:function(e,t,n){"use strict";var o=n(84253),r=n(69691),a=n(68762),i=n(19216).NATIVE_ARRAY_BUFFER_VIEWS,c=o.ArrayBuffer,l=o.Int8Array;e.exports=!i||!r((function(){l(1)}))||!r((function(){new l(-1)}))||!a((function(e){new l,new l(null),new l(1.5),new l(e)}),!0)||r((function(){return 1!==new l(new c(2),1,undefined).length}))},16688:function(e,t,n){"use strict";var o=n(11955),r=n(25198);e.exports=function(e,t){return o(r(e),t)}},76182:function(e,t,n){"use strict";var o=n(12104),r=n(39570),a=n(3170),i=n(14195),c=n(74271),l=n(19216).aTypedArrayConstructor;e.exports=function(e){var t,n,u,d,s,p,m=o(e),f=arguments.length,h=f>1?arguments[1]:undefined,g=h!==undefined,C=a(m);if(C!=undefined&&!i(C))for(p=(s=C.call(m)).next,m=[];!(d=p.call(s)).done;)m.push(d.value);for(g&&f>2&&(h=c(h,arguments[2],2)),n=r(m.length),u=new(l(this))(n),t=0;n>t;t++)u[t]=g?h(m[t],t):m[t];return u}},25198:function(e,t,n){"use strict";var o=n(19216),r=n(24345),a=o.TYPED_ARRAY_CONSTRUCTOR,i=o.aTypedArrayConstructor;e.exports=function(e){return i(r(e,e[a]))}},41080:function(e){"use strict";var t=0,n=Math.random();e.exports=function(e){return"Symbol("+String(e===undefined?"":e)+")_"+(++t+n).toString(36)}},40647:function(e,t,n){"use strict";var o=n(54772);e.exports=o&&!Symbol.sham&&"symbol"==typeof Symbol.iterator},3444:function(e,t,n){"use strict";var o=n(17657);t.f=o},17657:function(e,t,n){"use strict";var o=n(84253),r=n(27364),a=n(28919),i=n(41080),c=n(54772),l=n(40647),u=r("wks"),d=o.Symbol,s=l?d:d&&d.withoutSetter||i;e.exports=function(e){return a(u,e)&&(c||"string"==typeof u[e])||(c&&a(d,e)?u[e]=d[e]:u[e]=s("Symbol."+e)),u[e]}},65181:function(e){"use strict";e.exports="\t\n\x0B\f\r \xa0\u1680\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u202f\u205f\u3000\u2028\u2029\ufeff"},15196:function(e,t,n){"use strict";var o=n(56174),r=n(84253),a=n(80246),i=n(64157),c="ArrayBuffer",l=a[c];o({global:!0,forced:r[c]!==l},{ArrayBuffer:l}),i(c)},95993:function(e,t,n){"use strict";var o=n(56174),r=n(19216);o({target:"ArrayBuffer",stat:!0,forced:!r.NATIVE_ARRAY_BUFFER_VIEWS},{isView:r.isView})},25079:function(e,t,n){"use strict";var o=n(56174),r=n(69691),a=n(80246),i=n(63518),c=n(55205),l=n(39570),u=n(24345),d=a.ArrayBuffer,s=a.DataView,p=d.prototype.slice;o({target:"ArrayBuffer",proto:!0,unsafe:!0,forced:r((function(){return!new d(2).slice(1,undefined).byteLength}))},{slice:function(e,t){if(p!==undefined&&t===undefined)return p.call(i(this),e);for(var n=i(this).byteLength,o=c(e,n),r=c(t===undefined?n:t,n),a=new(u(this,d))(l(r-o)),m=new s(this),f=new s(a),h=0;o<r;)f.setUint8(h++,m.getUint8(o++));return a}})},24835:function(e,t,n){"use strict";var o=n(56174),r=n(69691),a=n(89999),i=n(35611),c=n(12104),l=n(39570),u=n(39241),d=n(77454),s=n(93537),p=n(17657),m=n(12338),f=p("isConcatSpreadable"),h=9007199254740991,g="Maximum allowed index exceeded",C=m>=51||!r((function(){var e=[];return e[f]=!1,e.concat()[0]!==e})),N=s("concat"),v=function(e){if(!i(e))return!1;var t=e[f];return t!==undefined?!!t:a(e)};o({target:"Array",proto:!0,forced:!C||!N},{concat:function(e){var t,n,o,r,a,i=c(this),s=d(i,0),p=0;for(t=-1,o=arguments.length;t<o;t++)if(v(a=-1===t?i:arguments[t])){if(p+(r=l(a.length))>h)throw TypeError(g);for(n=0;n<r;n++,p++)n in a&&u(s,p,a[n])}else{if(p>=h)throw TypeError(g);u(s,p++,a)}return s.length=p,s}})},14653:function(e,t,n){"use strict";var o=n(56174),r=n(59571),a=n(36910);o({target:"Array",proto:!0},{copyWithin:r}),a("copyWithin")},58139:function(e,t,n){"use strict";var o=n(56174),r=n(69033).every;o({target:"Array",proto:!0,forced:!n(37902)("every")},{every:function(e){return r(this,e,arguments.length>1?arguments[1]:undefined)}})},34049:function(e,t,n){"use strict";var o=n(56174),r=n(22051),a=n(36910);o({target:"Array",proto:!0},{fill:r}),a("fill")},38356:function(e,t,n){"use strict";var o=n(56174),r=n(69033).filter;o({target:"Array",proto:!0,forced:!n(93537)("filter")},{filter:function(e){return r(this,e,arguments.length>1?arguments[1]:undefined)}})},31699:function(e,t,n){"use strict";var o=n(56174),r=n(69033).findIndex,a=n(36910),i="findIndex",c=!0;i in[]&&Array(1)[i]((function(){c=!1})),o({target:"Array",proto:!0,forced:c},{findIndex:function(e){return r(this,e,arguments.length>1?arguments[1]:undefined)}}),a(i)},72494:function(e,t,n){"use strict";var o=n(56174),r=n(69033).find,a=n(36910),i="find",c=!0;i in[]&&Array(1)[i]((function(){c=!1})),o({target:"Array",proto:!0,forced:c},{find:function(e){return r(this,e,arguments.length>1?arguments[1]:undefined)}}),a(i)},81520:function(e,t,n){"use strict";var o=n(56174),r=n(904),a=n(12104),i=n(39570),c=n(83923),l=n(77454);o({target:"Array",proto:!0},{flatMap:function(e){var t,n=a(this),o=i(n.length);return c(e),(t=l(n,0)).length=r(t,n,n,o,0,1,e,arguments.length>1?arguments[1]:undefined),t}})},3263:function(e,t,n){"use strict";var o=n(56174),r=n(904),a=n(12104),i=n(39570),c=n(3997),l=n(77454);o({target:"Array",proto:!0},{flat:function(){var e=arguments.length?arguments[0]:undefined,t=a(this),n=i(t.length),o=l(t,0);return o.length=r(o,t,t,n,0,e===undefined?1:c(e)),o}})},80036:function(e,t,n){"use strict";var o=n(56174),r=n(90369);o({target:"Array",proto:!0,forced:[].forEach!=r},{forEach:r})},60515:function(e,t,n){"use strict";var o=n(56174),r=n(28213);o({target:"Array",stat:!0,forced:!n(68762)((function(e){Array.from(e)}))},{from:r})},94330:function(e,t,n){"use strict";var o=n(56174),r=n(25945).includes,a=n(36910);o({target:"Array",proto:!0},{includes:function(e){return r(this,e,arguments.length>1?arguments[1]:undefined)}}),a("includes")},96553:function(e,t,n){"use strict";var o=n(56174),r=n(25945).indexOf,a=n(37902),i=[].indexOf,c=!!i&&1/[1].indexOf(1,-0)<0,l=a("indexOf");o({target:"Array",proto:!0,forced:c||!l},{indexOf:function(e){return c?i.apply(this,arguments)||0:r(this,e,arguments.length>1?arguments[1]:undefined)}})},99139:function(e,t,n){"use strict";n(56174)({target:"Array",stat:!0},{isArray:n(89999)})},98215:function(e,t,n){"use strict";var o=n(26553),r=n(36910),a=n(82723),i=n(79947),c=n(71179),l="Array Iterator",u=i.set,d=i.getterFor(l);e.exports=c(Array,"Array",(function(e,t){u(this,{type:l,target:o(e),index:0,kind:t})}),(function(){var e=d(this),t=e.target,n=e.kind,o=e.index++;return!t||o>=t.length?(e.target=undefined,{value:undefined,done:!0}):"keys"==n?{value:o,done:!1}:"values"==n?{value:t[o],done:!1}:{value:[o,t[o]],done:!1}}),"values"),a.Arguments=a.Array,r("keys"),r("values"),r("entries")},32617:function(e,t,n){"use strict";var o=n(56174),r=n(50990),a=n(26553),i=n(37902),c=[].join,l=r!=Object,u=i("join",",");o({target:"Array",proto:!0,forced:l||!u},{join:function(e){return c.call(a(this),e===undefined?",":e)}})},80186:function(e,t,n){"use strict";var o=n(56174),r=n(41183);o({target:"Array",proto:!0,forced:r!==[].lastIndexOf},{lastIndexOf:r})},31149:function(e,t,n){"use strict";var o=n(56174),r=n(69033).map;o({target:"Array",proto:!0,forced:!n(93537)("map")},{map:function(e){return r(this,e,arguments.length>1?arguments[1]:undefined)}})},71827:function(e,t,n){"use strict";var o=n(56174),r=n(69691),a=n(39241);o({target:"Array",stat:!0,forced:r((function(){function e(){}return!(Array.of.call(e)instanceof e)}))},{of:function(){for(var e=0,t=arguments.length,n=new("function"==typeof this?this:Array)(t);t>e;)a(n,e,arguments[e++]);return n.length=t,n}})},32099:function(e,t,n){"use strict";var o=n(56174),r=n(28249).right,a=n(37902),i=n(12338),c=n(41488);o({target:"Array",proto:!0,forced:!a("reduceRight")||!c&&i>79&&i<83},{reduceRight:function(e){return r(this,e,arguments.length,arguments.length>1?arguments[1]:undefined)}})},79770:function(e,t,n){"use strict";var o=n(56174),r=n(28249).left,a=n(37902),i=n(12338),c=n(41488);o({target:"Array",proto:!0,forced:!a("reduce")||!c&&i>79&&i<83},{reduce:function(e){return r(this,e,arguments.length,arguments.length>1?arguments[1]:undefined)}})},72667:function(e,t,n){"use strict";var o=n(56174),r=n(89999),a=[].reverse,i=[1,2];o({target:"Array",proto:!0,forced:String(i)===String(i.reverse())},{reverse:function(){return r(this)&&(this.length=this.length),a.call(this)}})},94920:function(e,t,n){"use strict";var o=n(56174),r=n(35611),a=n(89999),i=n(55205),c=n(39570),l=n(26553),u=n(39241),d=n(17657),s=n(93537)("slice"),p=d("species"),m=[].slice,f=Math.max;o({target:"Array",proto:!0,forced:!s},{slice:function(e,t){var n,o,d,s=l(this),h=c(s.length),g=i(e,h),C=i(t===undefined?h:t,h);if(a(s)&&("function"!=typeof(n=s.constructor)||n!==Array&&!a(n.prototype)?r(n)&&null===(n=n[p])&&(n=undefined):n=undefined,n===Array||n===undefined))return m.call(s,g,C);for(o=new(n===undefined?Array:n)(f(C-g,0)),d=0;g<C;g++,d++)g in s&&u(o,d,s[g]);return o.length=d,o}})},64683:function(e,t,n){"use strict";var o=n(56174),r=n(69033).some;o({target:"Array",proto:!0,forced:!n(37902)("some")},{some:function(e){return r(this,e,arguments.length>1?arguments[1]:undefined)}})},26189:function(e,t,n){"use strict";var o=n(56174),r=n(83923),a=n(12104),i=n(39570),c=n(92082),l=n(69691),u=n(58737),d=n(37902),s=n(20967),p=n(85749),m=n(12338),f=n(12200),h=[],g=h.sort,C=l((function(){h.sort(undefined)})),N=l((function(){h.sort(null)})),v=d("sort"),b=!l((function(){if(m)return m<70;if(!(s&&s>3)){if(p)return!0;if(f)return f<603;var e,t,n,o,r="";for(e=65;e<76;e++){switch(t=String.fromCharCode(e),e){case 66:case 69:case 70:case 72:n=3;break;case 68:case 71:n=4;break;default:n=2}for(o=0;o<47;o++)h.push({k:t+o,v:n})}for(h.sort((function(e,t){return t.v-e.v})),o=0;o<h.length;o++)t=h[o].k.charAt(0),r.charAt(r.length-1)!==t&&(r+=t);return"DGBEFHACIJK"!==r}}));o({target:"Array",proto:!0,forced:C||!N||!v||!b},{sort:function(e){e!==undefined&&r(e);var t=a(this);if(b)return e===undefined?g.call(t):g.call(t,e);var n,o,l=[],d=i(t.length);for(o=0;o<d;o++)o in t&&l.push(t[o]);for(l=u(l,function(e){return function(t,n){return n===undefined?-1:t===undefined?1:e!==undefined?+e(t,n)||0:c(t)>c(n)?1:-1}}(e)),n=l.length,o=0;o<n;)t[o]=l[o++];for(;o<d;)delete t[o++];return t}})},41185:function(e,t,n){"use strict";n(64157)("Array")},51008:function(e,t,n){"use strict";var o=n(56174),r=n(55205),a=n(3997),i=n(39570),c=n(12104),l=n(77454),u=n(39241),d=n(93537)("splice"),s=Math.max,p=Math.min;o({target:"Array",proto:!0,forced:!d},{splice:function(e,t){var n,o,d,m,f,h,g=c(this),C=i(g.length),N=r(e,C),v=arguments.length;if(0===v?n=o=0:1===v?(n=0,o=C-N):(n=v-2,o=p(s(a(t),0),C-N)),C+n-o>9007199254740991)throw TypeError("Maximum allowed length exceeded");for(d=l(g,o),m=0;m<o;m++)(f=N+m)in g&&u(d,m,g[f]);if(d.length=o,n<o){for(m=N;m<C-o;m++)h=m+n,(f=m+o)in g?g[h]=g[f]:delete g[h];for(m=C;m>C-o+n;m--)delete g[m-1]}else if(n>o)for(m=C-o;m>N;m--)h=m+n-1,(f=m+o-1)in g?g[h]=g[f]:delete g[h];for(m=0;m<n;m++)g[m+N]=arguments[m+2];return g.length=C-o+n,d}})},86e3:function(e,t,n){"use strict";n(36910)("flatMap")},47112:function(e,t,n){"use strict";n(36910)("flat")},87143:function(e,t,n){"use strict";var o=n(56174),r=n(80246);o({global:!0,forced:!n(32977)},{DataView:r.DataView})},72499:function(e,t,n){"use strict";n(56174)({target:"Date",stat:!0},{now:function(){return(new Date).getTime()}})},73676:function(e,t,n){"use strict";var o=n(56174),r=n(79873);o({target:"Date",proto:!0,forced:Date.prototype.toISOString!==r},{toISOString:r})},76746:function(e,t,n){"use strict";var o=n(56174),r=n(69691),a=n(12104),i=n(94673);o({target:"Date",proto:!0,forced:r((function(){return null!==new Date(NaN).toJSON()||1!==Date.prototype.toJSON.call({toISOString:function(){return 1}})}))},{toJSON:function(e){var t=a(this),n=i(t,"number");return"number"!=typeof n||isFinite(n)?t.toISOString():null}})},19:function(e,t,n){"use strict";var o=n(52188),r=n(57763),a=n(17657)("toPrimitive"),i=Date.prototype;a in i||o(i,a,r)},17038:function(e,t,n){"use strict";var o=n(11807),r=Date.prototype,a="Invalid Date",i="toString",c=r[i],l=r.getTime;String(new Date(NaN))!=a&&o(r,i,(function(){var e=l.call(this);return e==e?c.call(this):a}))},46360:function(e,t,n){"use strict";n(56174)({target:"Function",proto:!0},{bind:n(68719)})},16835:function(e,t,n){"use strict";var o=n(35611),r=n(74217),a=n(6863),i=n(17657)("hasInstance"),c=Function.prototype;i in c||r.f(c,i,{value:function(e){if("function"!=typeof this||!o(e))return!1;if(!o(this.prototype))return e instanceof this;for(;e=a(e);)if(this.prototype===e)return!0;return!1}})},96683:function(e,t,n){"use strict";var o=n(75592),r=n(74217).f,a=Function.prototype,i=a.toString,c=/^\s*function ([^ (]*)/,l="name";o&&!(l in a)&&r(a,l,{configurable:!0,get:function(){try{return i.call(this).match(c)[1]}catch(e){return""}}})},7756:function(e,t,n){"use strict";var o=n(84253);n(29108)(o.JSON,"JSON",!0)},21842:function(e,t,n){"use strict";var o=n(42006),r=n(74568);e.exports=o("Map",(function(e){return function(){return e(this,arguments.length?arguments[0]:undefined)}}),r)},1613:function(e,t,n){"use strict";var o=n(56174),r=n(83659),a=Math.acosh,i=Math.log,c=Math.sqrt,l=Math.LN2;o({target:"Math",stat:!0,forced:!a||710!=Math.floor(a(Number.MAX_VALUE))||a(Infinity)!=Infinity},{acosh:function(e){return(e=+e)<1?NaN:e>94906265.62425156?i(e)+l:r(e-1+c(e-1)*c(e+1))}})},65115:function(e,t,n){"use strict";var o=n(56174),r=Math.asinh,a=Math.log,i=Math.sqrt;o({target:"Math",stat:!0,forced:!(r&&1/r(0)>0)},{asinh:function c(e){return isFinite(e=+e)&&0!=e?e<0?-c(-e):a(e+i(e*e+1)):e}})},27115:function(e,t,n){"use strict";var o=n(56174),r=Math.atanh,a=Math.log;o({target:"Math",stat:!0,forced:!(r&&1/r(-0)<0)},{atanh:function(e){return 0==(e=+e)?e:a((1+e)/(1-e))/2}})},13280:function(e,t,n){"use strict";var o=n(56174),r=n(24305),a=Math.abs,i=Math.pow;o({target:"Math",stat:!0},{cbrt:function(e){return r(e=+e)*i(a(e),1/3)}})},21019:function(e,t,n){"use strict";var o=n(56174),r=Math.floor,a=Math.log,i=Math.LOG2E;o({target:"Math",stat:!0},{clz32:function(e){return(e>>>=0)?31-r(a(e+.5)*i):32}})},66619:function(e,t,n){"use strict";var o=n(56174),r=n(19997),a=Math.cosh,i=Math.abs,c=Math.E;o({target:"Math",stat:!0,forced:!a||a(710)===Infinity},{cosh:function(e){var t=r(i(e)-1)+1;return(t+1/(t*c*c))*(c/2)}})},75469:function(e,t,n){"use strict";var o=n(56174),r=n(19997);o({target:"Math",stat:!0,forced:r!=Math.expm1},{expm1:r})},90967:function(e,t,n){"use strict";n(56174)({target:"Math",stat:!0},{fround:n(43334)})},35022:function(e,t,n){"use strict";var o=n(56174),r=Math.hypot,a=Math.abs,i=Math.sqrt;o({target:"Math",stat:!0,forced:!!r&&r(Infinity,NaN)!==Infinity},{hypot:function(e,t){for(var n,o,r=0,c=0,l=arguments.length,u=0;c<l;)u<(n=a(arguments[c++]))?(r=r*(o=u/n)*o+1,u=n):r+=n>0?(o=n/u)*o:n;return u===Infinity?Infinity:u*i(r)}})},22604:function(e,t,n){"use strict";var o=n(56174),r=n(69691),a=Math.imul;o({target:"Math",stat:!0,forced:r((function(){return-5!=a(4294967295,5)||2!=a.length}))},{imul:function(e,t){var n=65535,o=+e,r=+t,a=n&o,i=n&r;return 0|a*i+((n&o>>>16)*i+a*(n&r>>>16)<<16>>>0)}})},41843:function(e,t,n){"use strict";var o=n(56174),r=Math.log,a=Math.LOG10E;o({target:"Math",stat:!0},{log10:function(e){return r(e)*a}})},86810:function(e,t,n){"use strict";n(56174)({target:"Math",stat:!0},{log1p:n(83659)})},54670:function(e,t,n){"use strict";var o=n(56174),r=Math.log,a=Math.LN2;o({target:"Math",stat:!0},{log2:function(e){return r(e)/a}})},16580:function(e,t,n){"use strict";n(56174)({target:"Math",stat:!0},{sign:n(24305)})},31304:function(e,t,n){"use strict";var o=n(56174),r=n(69691),a=n(19997),i=Math.abs,c=Math.exp,l=Math.E;o({target:"Math",stat:!0,forced:r((function(){return-2e-17!=Math.sinh(-2e-17)}))},{sinh:function(e){return i(e=+e)<1?(a(e)-a(-e))/2:(c(e-1)-c(-e-1))*(l/2)}})},13078:function(e,t,n){"use strict";var o=n(56174),r=n(19997),a=Math.exp;o({target:"Math",stat:!0},{tanh:function(e){var t=r(e=+e),n=r(-e);return t==Infinity?1:n==Infinity?-1:(t-n)/(a(e)+a(-e))}})},45128:function(e,t,n){"use strict";n(29108)(Math,"Math",!0)},31938:function(e,t,n){"use strict";var o=n(56174),r=Math.ceil,a=Math.floor;o({target:"Math",stat:!0},{trunc:function(e){return(e>0?a:r)(e)}})},90958:function(e,t,n){"use strict";var o=n(75592),r=n(84253),a=n(41441),i=n(11807),c=n(28919),l=n(77e3),u=n(22285),d=n(78253),s=n(94673),p=n(69691),m=n(83681),f=n(78870).f,h=n(22245).f,g=n(74217).f,C=n(84703).trim,N="Number",v=r[N],b=v.prototype,V=l(m(b))==N,y=function(e){if(d(e))throw TypeError("Cannot convert a Symbol value to a number");var t,n,o,r,a,i,c,l,u=s(e,"number");if("string"==typeof u&&u.length>2)if(43===(t=(u=C(u)).charCodeAt(0))||45===t){if(88===(n=u.charCodeAt(2))||120===n)return NaN}else if(48===t){switch(u.charCodeAt(1)){case 66:case 98:o=2,r=49;break;case 79:case 111:o=8,r=55;break;default:return+u}for(i=(a=u.slice(2)).length,c=0;c<i;c++)if((l=a.charCodeAt(c))<48||l>r)return NaN;return parseInt(a,o)}return+u};if(a(N,!v(" 0o1")||!v("0b1")||v("+0x1"))){for(var x,I=function(e){var t=arguments.length<1?0:e,n=this;return n instanceof I&&(V?p((function(){b.valueOf.call(n)})):l(n)!=N)?u(new v(y(t)),n,I):y(t)},k=o?f(v):"MAX_VALUE,MIN_VALUE,NaN,NEGATIVE_INFINITY,POSITIVE_INFINITY,EPSILON,isFinite,isInteger,isNaN,isSafeInteger,MAX_SAFE_INTEGER,MIN_SAFE_INTEGER,parseFloat,parseInt,isInteger,fromString,range".split(","),w=0;k.length>w;w++)c(v,x=k[w])&&!c(I,x)&&g(I,x,h(v,x));I.prototype=b,b.constructor=I,i(r,N,I)}},88885:function(e,t,n){"use strict";n(56174)({target:"Number",stat:!0},{EPSILON:Math.pow(2,-52)})},45017:function(e,t,n){"use strict";n(56174)({target:"Number",stat:!0},{isFinite:n(64630)})},59743:function(e,t,n){"use strict";n(56174)({target:"Number",stat:!0},{isInteger:n(93624)})},47560:function(e,t,n){"use strict";n(56174)({target:"Number",stat:!0},{isNaN:function(e){return e!=e}})},31569:function(e,t,n){"use strict";var o=n(56174),r=n(93624),a=Math.abs;o({target:"Number",stat:!0},{isSafeInteger:function(e){return r(e)&&a(e)<=9007199254740991}})},6134:function(e,t,n){"use strict";n(56174)({target:"Number",stat:!0},{MAX_SAFE_INTEGER:9007199254740991})},12622:function(e,t,n){"use strict";n(56174)({target:"Number",stat:!0},{MIN_SAFE_INTEGER:-9007199254740991})},60852:function(e,t,n){"use strict";var o=n(56174),r=n(78025);o({target:"Number",stat:!0,forced:Number.parseFloat!=r},{parseFloat:r})},99085:function(e,t,n){"use strict";var o=n(56174),r=n(55092);o({target:"Number",stat:!0,forced:Number.parseInt!=r},{parseInt:r})},75180:function(e,t,n){"use strict";var o=n(56174),r=n(3997),a=n(81687),i=n(9811),c=n(69691),l=1..toFixed,u=Math.floor,d=function f(e,t,n){return 0===t?n:t%2==1?f(e,t-1,n*e):f(e*e,t/2,n)},s=function(e,t,n){for(var o=-1,r=n;++o<6;)r+=t*e[o],e[o]=r%1e7,r=u(r/1e7)},p=function(e,t){for(var n=6,o=0;--n>=0;)o+=e[n],e[n]=u(o/t),o=o%t*1e7},m=function(e){for(var t=6,n="";--t>=0;)if(""!==n||0===t||0!==e[t]){var o=String(e[t]);n=""===n?o:n+i.call("0",7-o.length)+o}return n};o({target:"Number",proto:!0,forced:l&&("0.000"!==8e-5.toFixed(3)||"1"!==.9.toFixed(0)||"1.25"!==1.255.toFixed(2)||"1000000000000000128"!==(0xde0b6b3a7640080).toFixed(0))||!c((function(){l.call({})}))},{toFixed:function(e){var t,n,o,c,l=a(this),u=r(e),f=[0,0,0,0,0,0],h="",g="0";if(u<0||u>20)throw RangeError("Incorrect fraction digits");if(l!=l)return"NaN";if(l<=-1e21||l>=1e21)return String(l);if(l<0&&(h="-",l=-l),l>1e-21)if(n=(t=function(e){for(var t=0,n=e;n>=4096;)t+=12,n/=4096;for(;n>=2;)t+=1,n/=2;return t}(l*d(2,69,1))-69)<0?l*d(2,-t,1):l/d(2,t,1),n*=4503599627370496,(t=52-t)>0){for(s(f,0,n),o=u;o>=7;)s(f,1e7,0),o-=7;for(s(f,d(10,o,1),0),o=t-1;o>=23;)p(f,1<<23),o-=23;p(f,1<<o),s(f,1,1),p(f,2),g=m(f)}else s(f,0,n),s(f,1<<-t,0),g=m(f)+i.call("0",u);return g=u>0?h+((c=g.length)<=u?"0."+i.call("0",u-c)+g:g.slice(0,c-u)+"."+g.slice(c-u)):h+g}})},79437:function(e,t,n){"use strict";var o=n(56174),r=n(69691),a=n(81687),i=1..toPrecision;o({target:"Number",proto:!0,forced:r((function(){return"1"!==i.call(1,undefined)}))||!r((function(){i.call({})}))},{toPrecision:function(e){return e===undefined?i.call(a(this)):i.call(a(this),e)}})},75370:function(e,t,n){"use strict";var o=n(56174),r=n(64905);o({target:"Object",stat:!0,forced:Object.assign!==r},{assign:r})},61022:function(e,t,n){"use strict";n(56174)({target:"Object",stat:!0,sham:!n(75592)},{create:n(83681)})},50580:function(e,t,n){"use strict";var o=n(56174),r=n(75592),a=n(47339),i=n(12104),c=n(83923),l=n(74217);r&&o({target:"Object",proto:!0,forced:a},{__defineGetter__:function(e,t){l.f(i(this),e,{get:c(t),enumerable:!0,configurable:!0})}})},5301:function(e,t,n){"use strict";var o=n(56174),r=n(75592);o({target:"Object",stat:!0,forced:!r,sham:!r},{defineProperties:n(91543)})},76438:function(e,t,n){"use strict";var o=n(56174),r=n(75592);o({target:"Object",stat:!0,forced:!r,sham:!r},{defineProperty:n(74217).f})},97307:function(e,t,n){"use strict";var o=n(56174),r=n(75592),a=n(47339),i=n(12104),c=n(83923),l=n(74217);r&&o({target:"Object",proto:!0,forced:a},{__defineSetter__:function(e,t){l.f(i(this),e,{set:c(t),enumerable:!0,configurable:!0})}})},34016:function(e,t,n){"use strict";var o=n(56174),r=n(3e4).entries;o({target:"Object",stat:!0},{entries:function(e){return r(e)}})},86944:function(e,t,n){"use strict";var o=n(56174),r=n(7056),a=n(69691),i=n(35611),c=n(40421).onFreeze,l=Object.freeze;o({target:"Object",stat:!0,forced:a((function(){l(1)})),sham:!r},{freeze:function(e){return l&&i(e)?l(c(e)):e}})},60687:function(e,t,n){"use strict";var o=n(56174),r=n(56342),a=n(39241);o({target:"Object",stat:!0},{fromEntries:function(e){var t={};return r(e,(function(e,n){a(t,e,n)}),{AS_ENTRIES:!0}),t}})},86957:function(e,t,n){"use strict";var o=n(56174),r=n(69691),a=n(26553),i=n(22245).f,c=n(75592),l=r((function(){i(1)}));o({target:"Object",stat:!0,forced:!c||l,sham:!c},{getOwnPropertyDescriptor:function(e,t){return i(a(e),t)}})},59163:function(e,t,n){"use strict";var o=n(56174),r=n(75592),a=n(28482),i=n(26553),c=n(22245),l=n(39241);o({target:"Object",stat:!0,sham:!r},{getOwnPropertyDescriptors:function(e){for(var t,n,o=i(e),r=c.f,u=a(o),d={},s=0;u.length>s;)(n=r(o,t=u[s++]))!==undefined&&l(d,t,n);return d}})},34128:function(e,t,n){"use strict";var o=n(56174),r=n(69691),a=n(59995).f;o({target:"Object",stat:!0,forced:r((function(){return!Object.getOwnPropertyNames(1)}))},{getOwnPropertyNames:a})},24267:function(e,t,n){"use strict";var o=n(56174),r=n(69691),a=n(12104),i=n(6863),c=n(28954);o({target:"Object",stat:!0,forced:r((function(){i(1)})),sham:!c},{getPrototypeOf:function(e){return i(a(e))}})},4239:function(e,t,n){"use strict";var o=n(56174),r=n(69691),a=n(35611),i=Object.isExtensible;o({target:"Object",stat:!0,forced:r((function(){i(1)}))},{isExtensible:function(e){return!!a(e)&&(!i||i(e))}})},8381:function(e,t,n){"use strict";var o=n(56174),r=n(69691),a=n(35611),i=Object.isFrozen;o({target:"Object",stat:!0,forced:r((function(){i(1)}))},{isFrozen:function(e){return!a(e)||!!i&&i(e)}})},63669:function(e,t,n){"use strict";var o=n(56174),r=n(69691),a=n(35611),i=Object.isSealed;o({target:"Object",stat:!0,forced:r((function(){i(1)}))},{isSealed:function(e){return!a(e)||!!i&&i(e)}})},39816:function(e,t,n){"use strict";n(56174)({target:"Object",stat:!0},{is:n(61398)})},25779:function(e,t,n){"use strict";var o=n(56174),r=n(12104),a=n(84547);o({target:"Object",stat:!0,forced:n(69691)((function(){a(1)}))},{keys:function(e){return a(r(e))}})},84580:function(e,t,n){"use strict";var o=n(56174),r=n(75592),a=n(47339),i=n(12104),c=n(14613),l=n(6863),u=n(22245).f;r&&o({target:"Object",proto:!0,forced:a},{__lookupGetter__:function(e){var t,n=i(this),o=c(e);do{if(t=u(n,o))return t.get}while(n=l(n))}})},33198:function(e,t,n){"use strict";var o=n(56174),r=n(75592),a=n(47339),i=n(12104),c=n(14613),l=n(6863),u=n(22245).f;r&&o({target:"Object",proto:!0,forced:a},{__lookupSetter__:function(e){var t,n=i(this),o=c(e);do{if(t=u(n,o))return t.set}while(n=l(n))}})},71895:function(e,t,n){"use strict";var o=n(56174),r=n(35611),a=n(40421).onFreeze,i=n(7056),c=n(69691),l=Object.preventExtensions;o({target:"Object",stat:!0,forced:c((function(){l(1)})),sham:!i},{preventExtensions:function(e){return l&&r(e)?l(a(e)):e}})},44910:function(e,t,n){"use strict";var o=n(56174),r=n(35611),a=n(40421).onFreeze,i=n(7056),c=n(69691),l=Object.seal;o({target:"Object",stat:!0,forced:c((function(){l(1)})),sham:!i},{seal:function(e){return l&&r(e)?l(a(e)):e}})},95962:function(e,t,n){"use strict";n(56174)({target:"Object",stat:!0},{setPrototypeOf:n(18444)})},73769:function(e,t,n){"use strict";var o=n(64910),r=n(11807),a=n(13966);o||r(Object.prototype,"toString",a,{unsafe:!0})},14962:function(e,t,n){"use strict";var o=n(56174),r=n(3e4).values;o({target:"Object",stat:!0},{values:function(e){return r(e)}})},80345:function(e,t,n){"use strict";var o=n(56174),r=n(78025);o({global:!0,forced:parseFloat!=r},{parseFloat:r})},18438:function(e,t,n){"use strict";var o=n(56174),r=n(55092);o({global:!0,forced:parseInt!=r},{parseInt:r})},46356:function(e,t,n){"use strict";var o=n(56174),r=n(1986),a=n(4302),i=n(69691),c=n(69808),l=n(24345),u=n(48141),d=n(11807);if(o({target:"Promise",proto:!0,real:!0,forced:!!a&&i((function(){a.prototype["finally"].call({then:function(){}},(function(){}))}))},{"finally":function(e){var t=l(this,c("Promise")),n="function"==typeof e;return this.then(n?function(n){return u(t,e()).then((function(){return n}))}:e,n?function(n){return u(t,e()).then((function(){throw n}))}:e)}}),!r&&"function"==typeof a){var s=c("Promise").prototype["finally"];a.prototype["finally"]!==s&&d(a.prototype,"finally",s,{unsafe:!0})}},70552:function(e,t,n){"use strict";var o,r,a,i,c=n(56174),l=n(1986),u=n(84253),d=n(69808),s=n(4302),p=n(11807),m=n(3993),f=n(18444),h=n(29108),g=n(64157),C=n(35611),N=n(83923),v=n(50997),b=n(89853),V=n(56342),y=n(68762),x=n(24345),I=n(33453).set,k=n(80909),w=n(48141),S=n(21419),_=n(82101),M=n(47673),D=n(79947),B=n(41441),A=n(17657),T=n(46392),L=n(41488),E=n(12338),j=A("species"),P="Promise",O=D.get,F=D.set,R=D.getterFor(P),z=s&&s.prototype,W=s,U=z,H=u.TypeError,G=u.document,Y=u.process,Z=_.f,K=Z,Q=!!(G&&G.createEvent&&u.dispatchEvent),J="function"==typeof PromiseRejectionEvent,X="unhandledrejection",q=!1,$=B(P,(function(){var e=b(W),t=e!==String(W);if(!t&&66===E)return!0;if(l&&!U["finally"])return!0;if(E>=51&&/native code/.test(e))return!1;var n=new W((function(e){e(1)})),o=function(e){e((function(){}),(function(){}))};return(n.constructor={})[j]=o,!(q=n.then((function(){}))instanceof o)||!t&&T&&!J})),ee=$||!y((function(e){W.all(e)["catch"]((function(){}))})),te=function(e){var t;return!(!C(e)||"function"!=typeof(t=e.then))&&t},ne=function(e,t){if(!e.notified){e.notified=!0;var n=e.reactions;k((function(){for(var o=e.value,r=1==e.state,a=0;n.length>a;){var i,c,l,u=n[a++],d=r?u.ok:u.fail,s=u.resolve,p=u.reject,m=u.domain;try{d?(r||(2===e.rejection&&ie(e),e.rejection=1),!0===d?i=o:(m&&m.enter(),i=d(o),m&&(m.exit(),l=!0)),i===u.promise?p(H("Promise-chain cycle")):(c=te(i))?c.call(i,s,p):s(i)):p(o)}catch(f){m&&!l&&m.exit(),p(f)}}e.reactions=[],e.notified=!1,t&&!e.rejection&&re(e)}))}},oe=function(e,t,n){var o,r;Q?((o=G.createEvent("Event")).promise=t,o.reason=n,o.initEvent(e,!1,!0),u.dispatchEvent(o)):o={promise:t,reason:n},!J&&(r=u["on"+e])?r(o):e===X&&S("Unhandled promise rejection",n)},re=function(e){I.call(u,(function(){var t,n=e.facade,o=e.value;if(ae(e)&&(t=M((function(){L?Y.emit("unhandledRejection",o,n):oe(X,n,o)})),e.rejection=L||ae(e)?2:1,t.error))throw t.value}))},ae=function(e){return 1!==e.rejection&&!e.parent},ie=function(e){I.call(u,(function(){var t=e.facade;L?Y.emit("rejectionHandled",t):oe("rejectionhandled",t,e.value)}))},ce=function(e,t,n){return function(o){e(t,o,n)}},le=function(e,t,n){e.done||(e.done=!0,n&&(e=n),e.value=t,e.state=2,ne(e,!0))},ue=function se(e,t,n){if(!e.done){e.done=!0,n&&(e=n);try{if(e.facade===t)throw H("Promise can't be resolved itself");var o=te(t);o?k((function(){var n={done:!1};try{o.call(t,ce(se,n,e),ce(le,n,e))}catch(r){le(n,r,e)}})):(e.value=t,e.state=1,ne(e,!1))}catch(r){le({done:!1},r,e)}}};if($&&(W=function(e){v(this,W,P),N(e),o.call(this);var t=O(this);try{e(ce(ue,t),ce(le,t))}catch(n){le(t,n)}},U=W.prototype,(o=function(e){F(this,{type:P,done:!1,notified:!1,parent:!1,reactions:[],rejection:!1,state:0,value:undefined})}).prototype=m(U,{then:function(e,t){var n=R(this),o=Z(x(this,W));return o.ok="function"!=typeof e||e,o.fail="function"==typeof t&&t,o.domain=L?Y.domain:undefined,n.parent=!0,n.reactions.push(o),0!=n.state&&ne(n,!1),o.promise},"catch":function(e){return this.then(undefined,e)}}),r=function(){var e=new o,t=O(e);this.promise=e,this.resolve=ce(ue,t),this.reject=ce(le,t)},_.f=Z=function(e){return e===W||e===a?new r(e):K(e)},!l&&"function"==typeof s&&z!==Object.prototype)){i=z.then,q||(p(z,"then",(function(e,t){var n=this;return new W((function(e,t){i.call(n,e,t)})).then(e,t)}),{unsafe:!0}),p(z,"catch",U["catch"],{unsafe:!0}));try{delete z.constructor}catch(de){}f&&f(z,U)}c({global:!0,wrap:!0,forced:$},{Promise:W}),h(W,P,!1,!0),g(P),a=d(P),c({target:P,stat:!0,forced:$},{reject:function(e){var t=Z(this);return t.reject.call(undefined,e),t.promise}}),c({target:P,stat:!0,forced:l||$},{resolve:function(e){return w(l&&this===a?W:this,e)}}),c({target:P,stat:!0,forced:ee},{all:function(e){var t=this,n=Z(t),o=n.resolve,r=n.reject,a=M((function(){var n=N(t.resolve),a=[],i=0,c=1;V(e,(function(e){var l=i++,u=!1;a.push(undefined),c++,n.call(t,e).then((function(e){u||(u=!0,a[l]=e,--c||o(a))}),r)})),--c||o(a)}));return a.error&&r(a.value),n.promise},race:function(e){var t=this,n=Z(t),o=n.reject,r=M((function(){var r=N(t.resolve);V(e,(function(e){r.call(t,e).then(n.resolve,o)}))}));return r.error&&o(r.value),n.promise}})},57128:function(e,t,n){"use strict";var o=n(56174),r=n(69808),a=n(83923),i=n(63518),c=n(69691),l=r("Reflect","apply"),u=Function.apply;o({target:"Reflect",stat:!0,forced:!c((function(){l((function(){}))}))},{apply:function(e,t,n){return a(e),i(n),l?l(e,t,n):u.call(e,t,n)}})},83588:function(e,t,n){"use strict";var o=n(56174),r=n(69808),a=n(83923),i=n(63518),c=n(35611),l=n(83681),u=n(68719),d=n(69691),s=r("Reflect","construct"),p=d((function(){function e(){}return!(s((function(){}),[],e)instanceof e)})),m=!d((function(){s((function(){}))})),f=p||m;o({target:"Reflect",stat:!0,forced:f,sham:f},{construct:function(e,t){a(e),i(t);var n=arguments.length<3?e:a(arguments[2]);if(m&&!p)return s(e,t,n);if(e==n){switch(t.length){case 0:return new e;case 1:return new e(t[0]);case 2:return new e(t[0],t[1]);case 3:return new e(t[0],t[1],t[2]);case 4:return new e(t[0],t[1],t[2],t[3])}var o=[null];return o.push.apply(o,t),new(u.apply(e,o))}var r=n.prototype,d=l(c(r)?r:Object.prototype),f=Function.apply.call(e,d,t);return c(f)?f:d}})},47057:function(e,t,n){"use strict";var o=n(56174),r=n(75592),a=n(63518),i=n(14613),c=n(74217);o({target:"Reflect",stat:!0,forced:n(69691)((function(){Reflect.defineProperty(c.f({},1,{value:1}),1,{value:2})})),sham:!r},{defineProperty:function(e,t,n){a(e);var o=i(t);a(n);try{return c.f(e,o,n),!0}catch(r){return!1}}})},67092:function(e,t,n){"use strict";var o=n(56174),r=n(63518),a=n(22245).f;o({target:"Reflect",stat:!0},{deleteProperty:function(e,t){var n=a(r(e),t);return!(n&&!n.configurable)&&delete e[t]}})},69203:function(e,t,n){"use strict";var o=n(56174),r=n(75592),a=n(63518),i=n(22245);o({target:"Reflect",stat:!0,sham:!r},{getOwnPropertyDescriptor:function(e,t){return i.f(a(e),t)}})},27879:function(e,t,n){"use strict";var o=n(56174),r=n(63518),a=n(6863);o({target:"Reflect",stat:!0,sham:!n(28954)},{getPrototypeOf:function(e){return a(r(e))}})},59478:function(e,t,n){"use strict";var o=n(56174),r=n(35611),a=n(63518),i=n(28919),c=n(22245),l=n(6863);o({target:"Reflect",stat:!0},{get:function u(e,t){var n,o,d=arguments.length<3?e:arguments[2];return a(e)===d?e[t]:(n=c.f(e,t))?i(n,"value")?n.value:n.get===undefined?undefined:n.get.call(d):r(o=l(e))?u(o,t,d):void 0}})},71507:function(e,t,n){"use strict";n(56174)({target:"Reflect",stat:!0},{has:function(e,t){return t in e}})},39021:function(e,t,n){"use strict";var o=n(56174),r=n(63518),a=Object.isExtensible;o({target:"Reflect",stat:!0},{isExtensible:function(e){return r(e),!a||a(e)}})},8641:function(e,t,n){"use strict";n(56174)({target:"Reflect",stat:!0},{ownKeys:n(28482)})},83064:function(e,t,n){"use strict";var o=n(56174),r=n(69808),a=n(63518);o({target:"Reflect",stat:!0,sham:!n(7056)},{preventExtensions:function(e){a(e);try{var t=r("Object","preventExtensions");return t&&t(e),!0}catch(n){return!1}}})},33362:function(e,t,n){"use strict";var o=n(56174),r=n(63518),a=n(1372),i=n(18444);i&&o({target:"Reflect",stat:!0},{setPrototypeOf:function(e,t){r(e),a(t);try{return i(e,t),!0}catch(n){return!1}}})},93115:function(e,t,n){"use strict";var o=n(56174),r=n(63518),a=n(35611),i=n(28919),c=n(69691),l=n(74217),u=n(22245),d=n(6863),s=n(39160);o({target:"Reflect",stat:!0,forced:c((function(){var e=function(){},t=l.f(new e,"a",{configurable:!0});return!1!==Reflect.set(e.prototype,"a",1,t)}))},{set:function p(e,t,n){var o,c,m=arguments.length<4?e:arguments[3],f=u.f(r(e),t);if(!f){if(a(c=d(e)))return p(c,t,n,m);f=s(0)}if(i(f,"value")){if(!1===f.writable||!a(m))return!1;if(o=u.f(m,t)){if(o.get||o.set||!1===o.writable)return!1;o.value=n,l.f(m,t,o)}else l.f(m,t,s(0,n));return!0}return f.set!==undefined&&(f.set.call(m,n),!0)}})},45090:function(e,t,n){"use strict";var o=n(75592),r=n(84253),a=n(41441),i=n(22285),c=n(52188),l=n(74217).f,u=n(78870).f,d=n(86133),s=n(92082),p=n(5105),m=n(1864),f=n(11807),h=n(69691),g=n(28919),C=n(79947).enforce,N=n(64157),v=n(17657),b=n(8368),V=n(2229),y=v("match"),x=r.RegExp,I=x.prototype,k=/^\?<[^\s\d!#%&*+<=>@^][^\s!#%&*+<=>@^]*>/,w=/a/g,S=/a/g,_=new x(w)!==w,M=m.UNSUPPORTED_Y,D=o&&(!_||M||b||V||h((function(){return S[y]=!1,x(w)!=w||x(S)==S||"/a/i"!=x(w,"i")})));if(a("RegExp",D)){for(var B=function(e,t){var n,o,r,a,l,u,m=this instanceof B,f=d(e),h=t===undefined,N=[],v=e;if(!m&&f&&h&&e.constructor===B)return e;if((f||e instanceof B)&&(e=e.source,h&&(t="flags"in v?v.flags:p.call(v))),e=e===undefined?"":s(e),t=t===undefined?"":s(t),v=e,b&&"dotAll"in w&&(o=!!t&&t.indexOf("s")>-1)&&(t=t.replace(/s/g,"")),n=t,M&&"sticky"in w&&(r=!!t&&t.indexOf("y")>-1)&&(t=t.replace(/y/g,"")),V&&(a=function(e){for(var t,n=e.length,o=0,r="",a=[],i={},c=!1,l=!1,u=0,d="";o<=n;o++){if("\\"===(t=e.charAt(o)))t+=e.charAt(++o);else if("]"===t)c=!1;else if(!c)switch(!0){case"["===t:c=!0;break;case"("===t:k.test(e.slice(o+1))&&(o+=2,l=!0),r+=t,u++;continue;case">"===t&&l:if(""===d||g(i,d))throw new SyntaxError("Invalid capture group name");i[d]=!0,a.push([d,u]),l=!1,d="";continue}l?d+=t:r+=t}return[r,a]}(e),e=a[0],N=a[1]),l=i(x(e,t),m?this:I,B),(o||r||N.length)&&(u=C(l),o&&(u.dotAll=!0,u.raw=B(function(e){for(var t,n=e.length,o=0,r="",a=!1;o<=n;o++)"\\"!==(t=e.charAt(o))?a||"."!==t?("["===t?a=!0:"]"===t&&(a=!1),r+=t):r+="[\\s\\S]":r+=t+e.charAt(++o);return r}(e),n)),r&&(u.sticky=!0),N.length&&(u.groups=N)),e!==v)try{c(l,"source",""===v?"(?:)":v)}catch(y){}return l},A=function(e){e in B||l(B,e,{configurable:!0,get:function(){return x[e]},set:function(t){x[e]=t}})},T=u(x),L=0;T.length>L;)A(T[L++]);I.constructor=B,B.prototype=I,f(r,"RegExp",B)}N("RegExp")},12654:function(e,t,n){"use strict";var o=n(56174),r=n(71841);o({target:"RegExp",proto:!0,forced:/./.exec!==r},{exec:r})},58870:function(e,t,n){"use strict";var o=n(75592),r=n(74217),a=n(5105),i=n(69691);o&&i((function(){return"sy"!==Object.getOwnPropertyDescriptor(RegExp.prototype,"flags").get.call({dotAll:!0,sticky:!0})}))&&r.f(RegExp.prototype,"flags",{configurable:!0,get:a})},76581:function(e,t,n){"use strict";var o=n(11807),r=n(63518),a=n(92082),i=n(69691),c=n(5105),l="toString",u=RegExp.prototype,d=u[l],s=i((function(){return"/a/b"!=d.call({source:"a",flags:"b"})})),p=d.name!=l;(s||p)&&o(RegExp.prototype,l,(function(){var e=r(this),t=a(e.source),n=e.flags;return"/"+t+"/"+a(n===undefined&&e instanceof RegExp&&!("flags"in u)?c.call(e):n)}),{unsafe:!0})},4567:function(e,t,n){"use strict";var o=n(42006),r=n(74568);e.exports=o("Set",(function(e){return function(){return e(this,arguments.length?arguments[0]:undefined)}}),r)},67586:function(e,t,n){"use strict";var o=n(56174),r=n(34141);o({target:"String",proto:!0,forced:n(26096)("anchor")},{anchor:function(e){return r(this,"a","name",e)}})},7743:function(e,t,n){"use strict";var o=n(56174),r=n(34141);o({target:"String",proto:!0,forced:n(26096)("big")},{big:function(){return r(this,"big","","")}})},15890:function(e,t,n){"use strict";var o=n(56174),r=n(34141);o({target:"String",proto:!0,forced:n(26096)("blink")},{blink:function(){return r(this,"blink","","")}})},34651:function(e,t,n){"use strict";var o=n(56174),r=n(34141);o({target:"String",proto:!0,forced:n(26096)("bold")},{bold:function(){return r(this,"b","","")}})},28638:function(e,t,n){"use strict";var o=n(56174),r=n(37015).codeAt;o({target:"String",proto:!0},{codePointAt:function(e){return r(this,e)}})},60314:function(e,t,n){"use strict";var o,r=n(56174),a=n(22245).f,i=n(39570),c=n(92082),l=n(18774),u=n(44184),d=n(93937),s=n(1986),p="".endsWith,m=Math.min,f=d("endsWith");r({target:"String",proto:!0,forced:!!(s||f||(o=a(String.prototype,"endsWith"),!o||o.writable))&&!f},{endsWith:function(e){var t=c(u(this));l(e);var n=arguments.length>1?arguments[1]:undefined,o=i(t.length),r=n===undefined?o:m(i(n),o),a=c(e);return p?p.call(t,a,r):t.slice(r-a.length,r)===a}})},18037:function(e,t,n){"use strict";var o=n(56174),r=n(34141);o({target:"String",proto:!0,forced:n(26096)("fixed")},{fixed:function(){return r(this,"tt","","")}})},48415:function(e,t,n){"use strict";var o=n(56174),r=n(34141);o({target:"String",proto:!0,forced:n(26096)("fontcolor")},{fontcolor:function(e){return r(this,"font","color",e)}})},54950:function(e,t,n){"use strict";var o=n(56174),r=n(34141);o({target:"String",proto:!0,forced:n(26096)("fontsize")},{fontsize:function(e){return r(this,"font","size",e)}})},71595:function(e,t,n){"use strict";var o=n(56174),r=n(55205),a=String.fromCharCode,i=String.fromCodePoint;o({target:"String",stat:!0,forced:!!i&&1!=i.length},{fromCodePoint:function(e){for(var t,n=[],o=arguments.length,i=0;o>i;){if(t=+arguments[i++],r(t,1114111)!==t)throw RangeError(t+" is not a valid code point");n.push(t<65536?a(t):a(55296+((t-=65536)>>10),t%1024+56320))}return n.join("")}})},98954:function(e,t,n){"use strict";var o=n(56174),r=n(18774),a=n(44184),i=n(92082);o({target:"String",proto:!0,forced:!n(93937)("includes")},{includes:function(e){return!!~i(a(this)).indexOf(i(r(e)),arguments.length>1?arguments[1]:undefined)}})},76102:function(e,t,n){"use strict";var o=n(56174),r=n(34141);o({target:"String",proto:!0,forced:n(26096)("italics")},{italics:function(){return r(this,"i","","")}})},91332:function(e,t,n){"use strict";var o=n(37015).charAt,r=n(92082),a=n(79947),i=n(71179),c="String Iterator",l=a.set,u=a.getterFor(c);i(String,"String",(function(e){l(this,{type:c,string:r(e),index:0})}),(function(){var e,t=u(this),n=t.string,r=t.index;return r>=n.length?{value:undefined,done:!0}:(e=o(n,r),t.index+=e.length,{value:e,done:!1})}))},47816:function(e,t,n){"use strict";var o=n(56174),r=n(34141);o({target:"String",proto:!0,forced:n(26096)("link")},{link:function(e){return r(this,"a","href",e)}})},79445:function(e,t,n){"use strict";var o=n(68880),r=n(63518),a=n(39570),i=n(92082),c=n(44184),l=n(69953),u=n(5641);o("match",(function(e,t,n){return[function(t){var n=c(this),o=t==undefined?undefined:t[e];return o!==undefined?o.call(t,n):new RegExp(t)[e](i(n))},function(e){var o=r(this),c=i(e),d=n(t,o,c);if(d.done)return d.value;if(!o.global)return u(o,c);var s=o.unicode;o.lastIndex=0;for(var p,m=[],f=0;null!==(p=u(o,c));){var h=i(p[0]);m[f]=h,""===h&&(o.lastIndex=l(c,a(o.lastIndex),s)),f++}return 0===f?null:m}]}))},36493:function(e,t,n){"use strict";var o=n(56174),r=n(47497).end;o({target:"String",proto:!0,forced:n(43331)},{padEnd:function(e){return r(this,e,arguments.length>1?arguments[1]:undefined)}})},24476:function(e,t,n){"use strict";var o=n(56174),r=n(47497).start;o({target:"String",proto:!0,forced:n(43331)},{padStart:function(e){return r(this,e,arguments.length>1?arguments[1]:undefined)}})},78192:function(e,t,n){"use strict";var o=n(56174),r=n(26553),a=n(39570),i=n(92082);o({target:"String",stat:!0},{raw:function(e){for(var t=r(e.raw),n=a(t.length),o=arguments.length,c=[],l=0;n>l;)c.push(i(t[l++])),l<o&&c.push(i(arguments[l]));return c.join("")}})},58660:function(e,t,n){"use strict";n(56174)({target:"String",proto:!0},{repeat:n(9811)})},56592:function(e,t,n){"use strict";var o=n(68880),r=n(69691),a=n(63518),i=n(3997),c=n(39570),l=n(92082),u=n(44184),d=n(69953),s=n(55444),p=n(5641),m=n(17657)("replace"),f=Math.max,h=Math.min,g="$0"==="a".replace(/./,"$0"),C=!!/./[m]&&""===/./[m]("a","$0");o("replace",(function(e,t,n){var o=C?"$":"$0";return[function(e,n){var o=u(this),r=e==undefined?undefined:e[m];return r!==undefined?r.call(e,o,n):t.call(l(o),e,n)},function(e,r){var u=a(this),m=l(e);if("string"==typeof r&&-1===r.indexOf(o)&&-1===r.indexOf("$<")){var g=n(t,u,m,r);if(g.done)return g.value}var C="function"==typeof r;C||(r=l(r));var N=u.global;if(N){var v=u.unicode;u.lastIndex=0}for(var b=[];;){var V=p(u,m);if(null===V)break;if(b.push(V),!N)break;""===l(V[0])&&(u.lastIndex=d(m,c(u.lastIndex),v))}for(var y,x="",I=0,k=0;k<b.length;k++){V=b[k];for(var w=l(V[0]),S=f(h(i(V.index),m.length),0),_=[],M=1;M<V.length;M++)_.push((y=V[M])===undefined?y:String(y));var D=V.groups;if(C){var B=[w].concat(_,S,m);D!==undefined&&B.push(D);var A=l(r.apply(undefined,B))}else A=s(w,m,S,_,D,r);S>=I&&(x+=m.slice(I,S)+A,I=S+w.length)}return x+m.slice(I)}]}),!!r((function(){var e=/./;return e.exec=function(){var e=[];return e.groups={a:"7"},e},"7"!=="".replace(e,"$<a>")}))||!g||C)},69957:function(e,t,n){"use strict";var o=n(68880),r=n(63518),a=n(44184),i=n(61398),c=n(92082),l=n(5641);o("search",(function(e,t,n){return[function(t){var n=a(this),o=t==undefined?undefined:t[e];return o!==undefined?o.call(t,n):new RegExp(t)[e](c(n))},function(e){var o=r(this),a=c(e),u=n(t,o,a);if(u.done)return u.value;var d=o.lastIndex;i(d,0)||(o.lastIndex=0);var s=l(o,a);return i(o.lastIndex,d)||(o.lastIndex=d),null===s?-1:s.index}]}))},30037:function(e,t,n){"use strict";var o=n(56174),r=n(34141);o({target:"String",proto:!0,forced:n(26096)("small")},{small:function(){return r(this,"small","","")}})},9747:function(e,t,n){"use strict";var o=n(68880),r=n(86133),a=n(63518),i=n(44184),c=n(24345),l=n(69953),u=n(39570),d=n(92082),s=n(5641),p=n(71841),m=n(1864),f=n(69691),h=m.UNSUPPORTED_Y,g=[].push,C=Math.min,N=4294967295,v=!f((function(){var e=/(?:)/,t=e.exec;e.exec=function(){return t.apply(this,arguments)};var n="ab".split(e);return 2!==n.length||"a"!==n[0]||"b"!==n[1]}));o("split",(function(e,t,n){var o;return o="c"=="abbc".split(/(b)*/)[1]||4!="test".split(/(?:)/,-1).length||2!="ab".split(/(?:ab)*/).length||4!=".".split(/(.?)(.?)/).length||".".split(/()()/).length>1||"".split(/.?/).length?function(e,n){var o=d(i(this)),a=n===undefined?N:n>>>0;if(0===a)return[];if(e===undefined)return[o];if(!r(e))return t.call(o,e,a);for(var c,l,u,s=[],m=(e.ignoreCase?"i":"")+(e.multiline?"m":"")+(e.unicode?"u":"")+(e.sticky?"y":""),f=0,h=new RegExp(e.source,m+"g");(c=p.call(h,o))&&!((l=h.lastIndex)>f&&(s.push(o.slice(f,c.index)),c.length>1&&c.index<o.length&&g.apply(s,c.slice(1)),u=c[0].length,f=l,s.length>=a));)h.lastIndex===c.index&&h.lastIndex++;return f===o.length?!u&&h.test("")||s.push(""):s.push(o.slice(f)),s.length>a?s.slice(0,a):s}:"0".split(undefined,0).length?function(e,n){return e===undefined&&0===n?[]:t.call(this,e,n)}:t,[function(t,n){var r=i(this),a=t==undefined?undefined:t[e];return a!==undefined?a.call(t,r,n):o.call(d(r),t,n)},function(e,r){var i=a(this),p=d(e),m=n(o,i,p,r,o!==t);if(m.done)return m.value;var f=c(i,RegExp),g=i.unicode,v=(i.ignoreCase?"i":"")+(i.multiline?"m":"")+(i.unicode?"u":"")+(h?"g":"y"),b=new f(h?"^(?:"+i.source+")":i,v),V=r===undefined?N:r>>>0;if(0===V)return[];if(0===p.length)return null===s(b,p)?[p]:[];for(var y=0,x=0,I=[];x<p.length;){b.lastIndex=h?0:x;var k,w=s(b,h?p.slice(x):p);if(null===w||(k=C(u(b.lastIndex+(h?x:0)),p.length))===y)x=l(p,x,g);else{if(I.push(p.slice(y,x)),I.length===V)return I;for(var S=1;S<=w.length-1;S++)if(I.push(w[S]),I.length===V)return I;x=y=k}}return I.push(p.slice(y)),I}]}),!v,h)},13578:function(e,t,n){"use strict";var o,r=n(56174),a=n(22245).f,i=n(39570),c=n(92082),l=n(18774),u=n(44184),d=n(93937),s=n(1986),p="".startsWith,m=Math.min,f=d("startsWith");r({target:"String",proto:!0,forced:!!(s||f||(o=a(String.prototype,"startsWith"),!o||o.writable))&&!f},{startsWith:function(e){var t=c(u(this));l(e);var n=i(m(arguments.length>1?arguments[1]:undefined,t.length)),o=c(e);return p?p.call(t,o,n):t.slice(n,n+o.length)===o}})},54705:function(e,t,n){"use strict";var o=n(56174),r=n(34141);o({target:"String",proto:!0,forced:n(26096)("strike")},{strike:function(){return r(this,"strike","","")}})},75831:function(e,t,n){"use strict";var o=n(56174),r=n(34141);o({target:"String",proto:!0,forced:n(26096)("sub")},{sub:function(){return r(this,"sub","","")}})},96958:function(e,t,n){"use strict";var o=n(56174),r=n(34141);o({target:"String",proto:!0,forced:n(26096)("sup")},{sup:function(){return r(this,"sup","","")}})},19209:function(e,t,n){"use strict";var o=n(56174),r=n(84703).end,a=n(3035)("trimEnd"),i=a?function(){return r(this)}:"".trimEnd;o({target:"String",proto:!0,forced:a},{trimEnd:i,trimRight:i})},56737:function(e,t,n){"use strict";var o=n(56174),r=n(84703).start,a=n(3035)("trimStart"),i=a?function(){return r(this)}:"".trimStart;o({target:"String",proto:!0,forced:a},{trimStart:i,trimLeft:i})},3684:function(e,t,n){"use strict";var o=n(56174),r=n(84703).trim;o({target:"String",proto:!0,forced:n(3035)("trim")},{trim:function(){return r(this)}})},69656:function(e,t,n){"use strict";n(55282)("asyncIterator")},43674:function(e,t,n){"use strict";var o=n(56174),r=n(75592),a=n(84253),i=n(28919),c=n(35611),l=n(74217).f,u=n(49957),d=a.Symbol;if(r&&"function"==typeof d&&(!("description"in d.prototype)||d().description!==undefined)){var s={},p=function(){var e=arguments.length<1||arguments[0]===undefined?undefined:String(arguments[0]),t=this instanceof p?new d(e):e===undefined?d():d(e);return""===e&&(s[t]=!0),t};u(p,d);var m=p.prototype=d.prototype;m.constructor=p;var f=m.toString,h="Symbol(test)"==String(d("test")),g=/^Symbol\((.*)\)[^)]+$/;l(m,"description",{configurable:!0,get:function(){var e=c(this)?this.valueOf():this,t=f.call(e);if(i(s,e))return"";var n=h?t.slice(7,-1):t.replace(g,"$1");return""===n?undefined:n}}),o({global:!0,forced:!0},{Symbol:p})}},72411:function(e,t,n){"use strict";n(55282)("hasInstance")},24467:function(e,t,n){"use strict";n(55282)("isConcatSpreadable")},37493:function(e,t,n){"use strict";n(55282)("iterator")},65379:function(e,t,n){"use strict";var o=n(56174),r=n(84253),a=n(69808),i=n(1986),c=n(75592),l=n(54772),u=n(69691),d=n(28919),s=n(89999),p=n(35611),m=n(78253),f=n(63518),h=n(12104),g=n(26553),C=n(14613),N=n(92082),v=n(39160),b=n(83681),V=n(84547),y=n(78870),x=n(59995),I=n(21061),k=n(22245),w=n(74217),S=n(77659),_=n(52188),M=n(11807),D=n(27364),B=n(85152),A=n(90311),T=n(41080),L=n(17657),E=n(3444),j=n(55282),P=n(29108),O=n(79947),F=n(69033).forEach,R=B("hidden"),z="Symbol",W="prototype",U=L("toPrimitive"),H=O.set,G=O.getterFor(z),Y=Object[W],Z=r.Symbol,K=a("JSON","stringify"),Q=k.f,J=w.f,X=x.f,q=S.f,$=D("symbols"),ee=D("op-symbols"),te=D("string-to-symbol-registry"),ne=D("symbol-to-string-registry"),oe=D("wks"),re=r.QObject,ae=!re||!re[W]||!re[W].findChild,ie=c&&u((function(){return 7!=b(J({},"a",{get:function(){return J(this,"a",{value:7}).a}})).a}))?function(e,t,n){var o=Q(Y,t);o&&delete Y[t],J(e,t,n),o&&e!==Y&&J(Y,t,o)}:J,ce=function(e,t){var n=$[e]=b(Z[W]);return H(n,{type:z,tag:e,description:t}),c||(n.description=t),n},le=function(e,t,n){e===Y&&le(ee,t,n),f(e);var o=C(t);return f(n),d($,o)?(n.enumerable?(d(e,R)&&e[R][o]&&(e[R][o]=!1),n=b(n,{enumerable:v(0,!1)})):(d(e,R)||J(e,R,v(1,{})),e[R][o]=!0),ie(e,o,n)):J(e,o,n)},ue=function(e,t){f(e);var n=g(t),o=V(n).concat(fe(n));return F(o,(function(t){c&&!se.call(n,t)||le(e,t,n[t])})),e},de=function(e,t){return t===undefined?b(e):ue(b(e),t)},se=function(e){var t=C(e),n=q.call(this,t);return!(this===Y&&d($,t)&&!d(ee,t))&&(!(n||!d(this,t)||!d($,t)||d(this,R)&&this[R][t])||n)},pe=function(e,t){var n=g(e),o=C(t);if(n!==Y||!d($,o)||d(ee,o)){var r=Q(n,o);return!r||!d($,o)||d(n,R)&&n[R][o]||(r.enumerable=!0),r}},me=function(e){var t=X(g(e)),n=[];return F(t,(function(e){d($,e)||d(A,e)||n.push(e)})),n},fe=function(e){var t=e===Y,n=X(t?ee:g(e)),o=[];return F(n,(function(e){!d($,e)||t&&!d(Y,e)||o.push($[e])})),o};(l||(Z=function(){if(this instanceof Z)throw TypeError("Symbol is not a constructor");var e=arguments.length&&arguments[0]!==undefined?N(arguments[0]):undefined,t=T(e),n=function o(e){this===Y&&o.call(ee,e),d(this,R)&&d(this[R],t)&&(this[R][t]=!1),ie(this,t,v(1,e))};return c&&ae&&ie(Y,t,{configurable:!0,set:n}),ce(t,e)},M(Z[W],"toString",(function(){return G(this).tag})),M(Z,"withoutSetter",(function(e){return ce(T(e),e)})),S.f=se,w.f=le,k.f=pe,y.f=x.f=me,I.f=fe,E.f=function(e){return ce(L(e),e)},c&&(J(Z[W],"description",{configurable:!0,get:function(){return G(this).description}}),i||M(Y,"propertyIsEnumerable",se,{unsafe:!0}))),o({global:!0,wrap:!0,forced:!l,sham:!l},{Symbol:Z}),F(V(oe),(function(e){j(e)})),o({target:z,stat:!0,forced:!l},{"for":function(e){var t=N(e);if(d(te,t))return te[t];var n=Z(t);return te[t]=n,ne[n]=t,n},keyFor:function(e){if(!m(e))throw TypeError(e+" is not a symbol");if(d(ne,e))return ne[e]},useSetter:function(){ae=!0},useSimple:function(){ae=!1}}),o({target:"Object",stat:!0,forced:!l,sham:!c},{create:de,defineProperty:le,defineProperties:ue,getOwnPropertyDescriptor:pe}),o({target:"Object",stat:!0,forced:!l},{getOwnPropertyNames:me,getOwnPropertySymbols:fe}),o({target:"Object",stat:!0,forced:u((function(){I.f(1)}))},{getOwnPropertySymbols:function(e){return I.f(h(e))}}),K)&&o({target:"JSON",stat:!0,forced:!l||u((function(){var e=Z();return"[null]"!=K([e])||"{}"!=K({a:e})||"{}"!=K(Object(e))}))},{stringify:function(e,t,n){for(var o,r=[e],a=1;arguments.length>a;)r.push(arguments[a++]);if(o=t,(p(t)||e!==undefined)&&!m(e))return s(t)||(t=function(e,t){if("function"==typeof o&&(t=o.call(this,e,t)),!m(t))return t}),r[1]=t,K.apply(null,r)}});Z[W][U]||_(Z[W],U,Z[W].valueOf),P(Z,z),A[R]=!0},87420:function(e,t,n){"use strict";n(55282)("match")},9480:function(e,t,n){"use strict";n(55282)("replace")},66171:function(e,t,n){"use strict";n(55282)("search")},53276:function(e,t,n){"use strict";n(55282)("species")},71852:function(e,t,n){"use strict";n(55282)("split")},59045:function(e,t,n){"use strict";n(55282)("toPrimitive")},70887:function(e,t,n){"use strict";n(55282)("toStringTag")},72906:function(e,t,n){"use strict";n(55282)("unscopables")},64346:function(e,t,n){"use strict";var o=n(19216),r=n(59571),a=o.aTypedArray;(0,o.exportTypedArrayMethod)("copyWithin",(function(e,t){return r.call(a(this),e,t,arguments.length>2?arguments[2]:undefined)}))},27553:function(e,t,n){"use strict";var o=n(19216),r=n(69033).every,a=o.aTypedArray;(0,o.exportTypedArrayMethod)("every",(function(e){return r(a(this),e,arguments.length>1?arguments[1]:undefined)}))},49007:function(e,t,n){"use strict";var o=n(19216),r=n(22051),a=o.aTypedArray;(0,o.exportTypedArrayMethod)("fill",(function(e){return r.apply(a(this),arguments)}))},17621:function(e,t,n){"use strict";var o=n(19216),r=n(69033).filter,a=n(16688),i=o.aTypedArray;(0,o.exportTypedArrayMethod)("filter",(function(e){var t=r(i(this),e,arguments.length>1?arguments[1]:undefined);return a(this,t)}))},20500:function(e,t,n){"use strict";var o=n(19216),r=n(69033).findIndex,a=o.aTypedArray;(0,o.exportTypedArrayMethod)("findIndex",(function(e){return r(a(this),e,arguments.length>1?arguments[1]:undefined)}))},71078:function(e,t,n){"use strict";var o=n(19216),r=n(69033).find,a=o.aTypedArray;(0,o.exportTypedArrayMethod)("find",(function(e){return r(a(this),e,arguments.length>1?arguments[1]:undefined)}))},75344:function(e,t,n){"use strict";n(17576)("Float32",(function(e){return function(t,n,o){return e(this,t,n,o)}}))},87853:function(e,t,n){"use strict";n(17576)("Float64",(function(e){return function(t,n,o){return e(this,t,n,o)}}))},85923:function(e,t,n){"use strict";var o=n(19216),r=n(69033).forEach,a=o.aTypedArray;(0,o.exportTypedArrayMethod)("forEach",(function(e){r(a(this),e,arguments.length>1?arguments[1]:undefined)}))},38956:function(e,t,n){"use strict";var o=n(29023);(0,n(19216).exportTypedArrayStaticMethod)("from",n(76182),o)},49264:function(e,t,n){"use strict";var o=n(19216),r=n(25945).includes,a=o.aTypedArray;(0,o.exportTypedArrayMethod)("includes",(function(e){return r(a(this),e,arguments.length>1?arguments[1]:undefined)}))},70448:function(e,t,n){"use strict";var o=n(19216),r=n(25945).indexOf,a=o.aTypedArray;(0,o.exportTypedArrayMethod)("indexOf",(function(e){return r(a(this),e,arguments.length>1?arguments[1]:undefined)}))},1150:function(e,t,n){"use strict";n(17576)("Int16",(function(e){return function(t,n,o){return e(this,t,n,o)}}))},50444:function(e,t,n){"use strict";n(17576)("Int32",(function(e){return function(t,n,o){return e(this,t,n,o)}}))},25865:function(e,t,n){"use strict";n(17576)("Int8",(function(e){return function(t,n,o){return e(this,t,n,o)}}))},5775:function(e,t,n){"use strict";var o=n(84253),r=n(19216),a=n(98215),i=n(17657)("iterator"),c=o.Uint8Array,l=a.values,u=a.keys,d=a.entries,s=r.aTypedArray,p=r.exportTypedArrayMethod,m=c&&c.prototype[i],f=!!m&&("values"==m.name||m.name==undefined),h=function(){return l.call(s(this))};p("entries",(function(){return d.call(s(this))})),p("keys",(function(){return u.call(s(this))})),p("values",h,!f),p(i,h,!f)},45164:function(e,t,n){"use strict";var o=n(19216),r=o.aTypedArray,a=o.exportTypedArrayMethod,i=[].join;a("join",(function(e){return i.apply(r(this),arguments)}))},83762:function(e,t,n){"use strict";var o=n(19216),r=n(41183),a=o.aTypedArray;(0,o.exportTypedArrayMethod)("lastIndexOf",(function(e){return r.apply(a(this),arguments)}))},67265:function(e,t,n){"use strict";var o=n(19216),r=n(69033).map,a=n(25198),i=o.aTypedArray;(0,o.exportTypedArrayMethod)("map",(function(e){return r(i(this),e,arguments.length>1?arguments[1]:undefined,(function(e,t){return new(a(e))(t)}))}))},56058:function(e,t,n){"use strict";var o=n(19216),r=n(29023),a=o.aTypedArrayConstructor;(0,o.exportTypedArrayStaticMethod)("of",(function(){for(var e=0,t=arguments.length,n=new(a(this))(t);t>e;)n[e]=arguments[e++];return n}),r)},23535:function(e,t,n){"use strict";var o=n(19216),r=n(28249).right,a=o.aTypedArray;(0,o.exportTypedArrayMethod)("reduceRight",(function(e){return r(a(this),e,arguments.length,arguments.length>1?arguments[1]:undefined)}))},87001:function(e,t,n){"use strict";var o=n(19216),r=n(28249).left,a=o.aTypedArray;(0,o.exportTypedArrayMethod)("reduce",(function(e){return r(a(this),e,arguments.length,arguments.length>1?arguments[1]:undefined)}))},18617:function(e,t,n){"use strict";var o=n(19216),r=o.aTypedArray,a=o.exportTypedArrayMethod,i=Math.floor;a("reverse",(function(){for(var e,t=this,n=r(t).length,o=i(n/2),a=0;a<o;)e=t[a],t[a++]=t[--n],t[n]=e;return t}))},70595:function(e,t,n){"use strict";var o=n(19216),r=n(39570),a=n(95740),i=n(12104),c=n(69691),l=o.aTypedArray;(0,o.exportTypedArrayMethod)("set",(function(e){l(this);var t=a(arguments.length>1?arguments[1]:undefined,1),n=this.length,o=i(e),c=r(o.length),u=0;if(c+t>n)throw RangeError("Wrong length");for(;u<c;)this[t+u]=o[u++]}),c((function(){new Int8Array(1).set({})})))},76820:function(e,t,n){"use strict";var o=n(19216),r=n(25198),a=n(69691),i=o.aTypedArray,c=o.exportTypedArrayMethod,l=[].slice;c("slice",(function(e,t){for(var n=l.call(i(this),e,t),o=r(this),a=0,c=n.length,u=new o(c);c>a;)u[a]=n[a++];return u}),a((function(){new Int8Array(1).slice()})))},33357:function(e,t,n){"use strict";var o=n(19216),r=n(69033).some,a=o.aTypedArray;(0,o.exportTypedArrayMethod)("some",(function(e){return r(a(this),e,arguments.length>1?arguments[1]:undefined)}))},38215:function(e,t,n){"use strict";var o=n(19216),r=n(84253),a=n(69691),i=n(83923),c=n(39570),l=n(58737),u=n(20967),d=n(85749),s=n(12338),p=n(12200),m=o.aTypedArray,f=o.exportTypedArrayMethod,h=r.Uint16Array,g=h&&h.prototype.sort,C=!!g&&!a((function(){var e=new h(2);e.sort(null),e.sort({})})),N=!!g&&!a((function(){if(s)return s<74;if(u)return u<67;if(d)return!0;if(p)return p<602;var e,t,n=new h(516),o=Array(516);for(e=0;e<516;e++)t=e%4,n[e]=515-e,o[e]=e-2*t+3;for(n.sort((function(e,t){return(e/4|0)-(t/4|0)})),e=0;e<516;e++)if(n[e]!==o[e])return!0}));f("sort",(function(e){var t=this;if(e!==undefined&&i(e),N)return g.call(t,e);m(t);var n,o=c(t.length),r=Array(o);for(n=0;n<o;n++)r[n]=t[n];for(r=l(t,function(e){return function(t,n){return e!==undefined?+e(t,n)||0:n!=n?-1:t!=t?1:0===t&&0===n?1/t>0&&1/n<0?1:-1:t>n}}(e)),n=0;n<o;n++)t[n]=r[n];return t}),!N||C)},37281:function(e,t,n){"use strict";var o=n(19216),r=n(39570),a=n(55205),i=n(25198),c=o.aTypedArray;(0,o.exportTypedArrayMethod)("subarray",(function(e,t){var n=c(this),o=n.length,l=a(e,o);return new(i(n))(n.buffer,n.byteOffset+l*n.BYTES_PER_ELEMENT,r((t===undefined?o:a(t,o))-l))}))},99584:function(e,t,n){"use strict";var o=n(84253),r=n(19216),a=n(69691),i=o.Int8Array,c=r.aTypedArray,l=r.exportTypedArrayMethod,u=[].toLocaleString,d=[].slice,s=!!i&&a((function(){u.call(new i(1))}));l("toLocaleString",(function(){return u.apply(s?d.call(c(this)):c(this),arguments)}),a((function(){return[1,2].toLocaleString()!=new i([1,2]).toLocaleString()}))||!a((function(){i.prototype.toLocaleString.call([1,2])})))},43582:function(e,t,n){"use strict";var o=n(19216).exportTypedArrayMethod,r=n(69691),a=n(84253).Uint8Array,i=a&&a.prototype||{},c=[].toString,l=[].join;r((function(){c.call({})}))&&(c=function(){return l.call(this)});var u=i.toString!=c;o("toString",c,u)},37650:function(e,t,n){"use strict";n(17576)("Uint16",(function(e){return function(t,n,o){return e(this,t,n,o)}}))},12424:function(e,t,n){"use strict";n(17576)("Uint32",(function(e){return function(t,n,o){return e(this,t,n,o)}}))},11220:function(e,t,n){"use strict";n(17576)("Uint8",(function(e){return function(t,n,o){return e(this,t,n,o)}}))},6636:function(e,t,n){"use strict";n(17576)("Uint8",(function(e){return function(t,n,o){return e(this,t,n,o)}}),!0)},15378:function(e,t,n){"use strict";var o,r=n(84253),a=n(3993),i=n(40421),c=n(42006),l=n(57396),u=n(35611),d=n(79947).enforce,s=n(82911),p=!r.ActiveXObject&&"ActiveXObject"in r,m=Object.isExtensible,f=function(e){return function(){return e(this,arguments.length?arguments[0]:undefined)}},h=e.exports=c("WeakMap",f,l);if(s&&p){o=l.getConstructor(f,"WeakMap",!0),i.enable();var g=h.prototype,C=g["delete"],N=g.has,v=g.get,b=g.set;a(g,{"delete":function(e){if(u(e)&&!m(e)){var t=d(this);return t.frozen||(t.frozen=new o),C.call(this,e)||t.frozen["delete"](e)}return C.call(this,e)},has:function(e){if(u(e)&&!m(e)){var t=d(this);return t.frozen||(t.frozen=new o),N.call(this,e)||t.frozen.has(e)}return N.call(this,e)},get:function(e){if(u(e)&&!m(e)){var t=d(this);return t.frozen||(t.frozen=new o),N.call(this,e)?v.call(this,e):t.frozen.get(e)}return v.call(this,e)},set:function(e,t){if(u(e)&&!m(e)){var n=d(this);n.frozen||(n.frozen=new o),N.call(this,e)?b.call(this,e,t):n.frozen.set(e,t)}else b.call(this,e,t);return this}})}},31213:function(e,t,n){"use strict";n(42006)("WeakSet",(function(e){return function(){return e(this,arguments.length?arguments[0]:undefined)}}),n(57396))},19275:function(e,t,n){"use strict";var o=n(56174),r=n(84253),a=n(33453);o({global:!0,bind:!0,enumerable:!0,forced:!r.setImmediate||!r.clearImmediate},{setImmediate:a.set,clearImmediate:a.clear})},59:function(e,t,n){"use strict";var o=n(56174),r=n(84253),a=n(80909),i=n(41488),c=r.process;o({global:!0,enumerable:!0,noTargetGet:!0},{queueMicrotask:function(e){var t=i&&c.domain;a(t?t.bind(e):e)}})},43849:function(e,t,n){"use strict";var o=n(56174),r=n(84253),a=n(72319),i=[].slice,c=function(e){return function(t,n){var o=arguments.length>2,r=o?i.call(arguments,2):undefined;return e(o?function(){("function"==typeof t?t:Function(t)).apply(this,r)}:t,n)}};o({global:!0,bind:!0,forced:/MSIE .\./.test(a)},{setTimeout:c(r.setTimeout),setInterval:c(r.setInterval)})},42950:function(e){"use strict";e.exports=function(){function e(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t<e.length;t++)n[t]=e[t];return n}return Array.from(e)}var t=Object.hasOwnProperty,n=Object.setPrototypeOf,o=Object.isFrozen,r=Object.getPrototypeOf,a=Object.getOwnPropertyDescriptor,i=Object.freeze,c=Object.seal,l=Object.create,u="undefined"!=typeof Reflect&&Reflect,d=u.apply,s=u.construct;d||(d=function(){function e(e,t,n){return e.apply(t,n)}return e}()),i||(i=function(){function e(e){return e}return e}()),c||(c=function(){function e(e){return e}return e}()),s||(s=function(){function t(t,n){return new(Function.prototype.bind.apply(t,[null].concat(e(n))))}return t}());var p=y(Array.prototype.forEach),m=y(Array.prototype.pop),f=y(Array.prototype.push),h=y(String.prototype.toLowerCase),g=y(String.prototype.match),C=y(String.prototype.replace),N=y(String.prototype.indexOf),v=y(String.prototype.trim),b=y(RegExp.prototype.test),V=x(TypeError);function y(e){return function(t){for(var n=arguments.length,o=Array(n>1?n-1:0),r=1;r<n;r++)o[r-1]=arguments[r];return d(e,t,o)}}function x(e){return function(){for(var t=arguments.length,n=Array(t),o=0;o<t;o++)n[o]=arguments[o];return s(e,n)}}function I(e,t){n&&n(e,null);for(var r=t.length;r--;){var a=t[r];if("string"==typeof a){var i=h(a);i!==a&&(o(t)||(t[r]=i),a=i)}e[a]=!0}return e}function k(e){var n=l(null),o=void 0;for(o in e)d(t,e,[o])&&(n[o]=e[o]);return n}function w(e,t){for(;null!==e;){var n=a(e,t);if(n){if(n.get)return y(n.get);if("function"==typeof n.value)return y(n.value)}e=r(e)}function o(e){return null}return o}var S=i(["a","abbr","acronym","address","area","article","aside","audio","b","bdi","bdo","big","blink","blockquote","body","br","button","canvas","caption","center","cite","code","col","colgroup","content","data","datalist","dd","decorator","del","details","dfn","dialog","dir","div","dl","dt","element","em","fieldset","figcaption","figure","font","footer","form","h1","h2","h3","h4","h5","h6","head","header","hgroup","hr","html","i","img","input","ins","kbd","label","legend","li","main","map","mark","marquee","menu","menuitem","meter","nav","nobr","ol","optgroup","option","output","p","picture","pre","progress","q","rp","rt","ruby","s","samp","section","select","shadow","small","source","spacer","span","strike","strong","style","sub","summary","sup","table","tbody","td","template","textarea","tfoot","th","thead","time","tr","track","tt","u","ul","var","video","wbr"]),_=i(["svg","a","altglyph","altglyphdef","altglyphitem","animatecolor","animatemotion","animatetransform","circle","clippath","defs","desc","ellipse","filter","font","g","glyph","glyphref","hkern","image","line","lineargradient","marker","mask","metadata","mpath","path","pattern","polygon","polyline","radialgradient","rect","stop","style","switch","symbol","text","textpath","title","tref","tspan","view","vkern"]),M=i(["feBlend","feColorMatrix","feComponentTransfer","feComposite","feConvolveMatrix","feDiffuseLighting","feDisplacementMap","feDistantLight","feFlood","feFuncA","feFuncB","feFuncG","feFuncR","feGaussianBlur","feMerge","feMergeNode","feMorphology","feOffset","fePointLight","feSpecularLighting","feSpotLight","feTile","feTurbulence"]),D=i(["animate","color-profile","cursor","discard","fedropshadow","feimage","font-face","font-face-format","font-face-name","font-face-src","font-face-uri","foreignobject","hatch","hatchpath","mesh","meshgradient","meshpatch","meshrow","missing-glyph","script","set","solidcolor","unknown","use"]),B=i(["math","menclose","merror","mfenced","mfrac","mglyph","mi","mlabeledtr","mmultiscripts","mn","mo","mover","mpadded","mphantom","mroot","mrow","ms","mspace","msqrt","mstyle","msub","msup","msubsup","mtable","mtd","mtext","mtr","munder","munderover"]),A=i(["maction","maligngroup","malignmark","mlongdiv","mscarries","mscarry","msgroup","mstack","msline","msrow","semantics","annotation","annotation-xml","mprescripts","none"]),T=i(["#text"]),L=i(["accept","action","align","alt","autocapitalize","autocomplete","autopictureinpicture","autoplay","background","bgcolor","border","capture","cellpadding","cellspacing","checked","cite","class","clear","color","cols","colspan","controls","controlslist","coords","crossorigin","datetime","decoding","default","dir","disabled","disablepictureinpicture","disableremoteplayback","download","draggable","enctype","enterkeyhint","face","for","headers","height","hidden","high","href","hreflang","id","inputmode","integrity","ismap","kind","label","lang","list","loading","loop","low","max","maxlength","media","method","min","minlength","multiple","muted","name","noshade","novalidate","nowrap","open","optimum","pattern","placeholder","playsinline","poster","preload","pubdate","radiogroup","readonly","rel","required","rev","reversed","role","rows","rowspan","spellcheck","scope","selected","shape","size","sizes","span","srclang","start","src","srcset","step","style","summary","tabindex","title","translate","type","usemap","valign","value","width","xmlns","slot"]),E=i(["accent-height","accumulate","additive","alignment-baseline","ascent","attributename","attributetype","azimuth","basefrequency","baseline-shift","begin","bias","by","class","clip","clippathunits","clip-path","clip-rule","color","color-interpolation","color-interpolation-filters","color-profile","color-rendering","cx","cy","d","dx","dy","diffuseconstant","direction","display","divisor","dur","edgemode","elevation","end","fill","fill-opacity","fill-rule","filter","filterunits","flood-color","flood-opacity","font-family","font-size","font-size-adjust","font-stretch","font-style","font-variant","font-weight","fx","fy","g1","g2","glyph-name","glyphref","gradientunits","gradienttransform","height","href","id","image-rendering","in","in2","k","k1","k2","k3","k4","kerning","keypoints","keysplines","keytimes","lang","lengthadjust","letter-spacing","kernelmatrix","kernelunitlength","lighting-color","local","marker-end","marker-mid","marker-start","markerheight","markerunits","markerwidth","maskcontentunits","maskunits","max","mask","media","method","mode","min","name","numoctaves","offset","operator","opacity","order","orient","orientation","origin","overflow","paint-order","path","pathlength","patterncontentunits","patterntransform","patternunits","points","preservealpha","preserveaspectratio","primitiveunits","r","rx","ry","radius","refx","refy","repeatcount","repeatdur","restart","result","rotate","scale","seed","shape-rendering","specularconstant","specularexponent","spreadmethod","startoffset","stddeviation","stitchtiles","stop-color","stop-opacity","stroke-dasharray","stroke-dashoffset","stroke-linecap","stroke-linejoin","stroke-miterlimit","stroke-opacity","stroke","stroke-width","style","surfacescale","systemlanguage","tabindex","targetx","targety","transform","text-anchor","text-decoration","text-rendering","textlength","type","u1","u2","unicode","values","viewbox","visibility","version","vert-adv-y","vert-origin-x","vert-origin-y","width","word-spacing","wrap","writing-mode","xchannelselector","ychannelselector","x","x1","x2","xmlns","y","y1","y2","z","zoomandpan"]),j=i(["accent","accentunder","align","bevelled","close","columnsalign","columnlines","columnspan","denomalign","depth","dir","display","displaystyle","encoding","fence","frame","height","href","id","largeop","length","linethickness","lspace","lquote","mathbackground","mathcolor","mathsize","mathvariant","maxsize","minsize","movablelimits","notation","numalign","open","rowalign","rowlines","rowspacing","rowspan","rspace","rquote","scriptlevel","scriptminsize","scriptsizemultiplier","selection","separator","separators","stretchy","subscriptshift","supscriptshift","symmetric","voffset","width","xmlns"]),P=i(["xlink:href","xml:id","xlink:title","xml:space","xmlns:xlink"]),O=c(/\{\{[\s\S]*|[\s\S]*\}\}/gm),F=c(/<%[\s\S]*|[\s\S]*%>/gm),R=c(/^data-[\-\w.\u00B7-\uFFFF]/),z=c(/^aria-[\-\w]+$/),W=c(/^(?:(?:(?:f|ht)tps?|mailto|tel|callto|cid|xmpp):|[^a-z]|[a-z+.\-]+(?:[^a-z+.\-:]|$))/i),U=c(/^(?:\w+script|data):/i),H=c(/[\u0000-\u0020\u00A0\u1680\u180E\u2000-\u2029\u205F\u3000]/g),G="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e};function Y(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t<e.length;t++)n[t]=e[t];return n}return Array.from(e)}var Z=function(){function e(){return"undefined"==typeof window?null:window}return e}(),K=function(){function e(e,t){if("object"!==(void 0===e?"undefined":G(e))||"function"!=typeof e.createPolicy)return null;var n=null,o="data-tt-policy-suffix";t.currentScript&&t.currentScript.hasAttribute(o)&&(n=t.currentScript.getAttribute(o));var r="dompurify"+(n?"#"+n:"");try{return e.createPolicy(r,{createHTML:function(){function e(e){return e}return e}()})}catch(a){return null}}return e}();function Q(){var e=arguments.length>0&&arguments[0]!==undefined?arguments[0]:Z(),t=function(){function e(e){return Q(e)}return e}();if(t.version="2.3.1",t.removed=[],!e||!e.document||9!==e.document.nodeType)return t.isSupported=!1,t;var n=e.document,o=e.document,r=e.DocumentFragment,a=e.HTMLTemplateElement,c=e.Node,l=e.Element,u=e.NodeFilter,d=e.NamedNodeMap,s=d===undefined?e.NamedNodeMap||e.MozNamedAttrMap:d,y=e.Text,x=e.Comment,J=e.DOMParser,X=e.trustedTypes,q=l.prototype,$=w(q,"cloneNode"),ee=w(q,"nextSibling"),te=w(q,"childNodes"),ne=w(q,"parentNode");if("function"==typeof a){var oe=o.createElement("template");oe.content&&oe.content.ownerDocument&&(o=oe.content.ownerDocument)}var re=K(X,n),ae=re&&Pe?re.createHTML(""):"",ie=o,ce=ie.implementation,le=ie.createNodeIterator,ue=ie.createDocumentFragment,de=ie.getElementsByTagName,se=n.importNode,pe={};try{pe=k(o).documentMode?o.documentMode:{}}catch(Nt){}var me={};t.isSupported="function"==typeof ne&&ce&&"undefined"!=typeof ce.createHTMLDocument&&9!==pe;var fe=O,he=F,ge=R,Ce=z,Ne=U,ve=H,be=W,Ve=null,ye=I({},[].concat(Y(S),Y(_),Y(M),Y(B),Y(T))),xe=null,Ie=I({},[].concat(Y(L),Y(E),Y(j),Y(P))),ke=null,we=null,Se=!0,_e=!0,Me=!1,De=!1,Be=!1,Ae=!1,Te=!1,Le=!1,Ee=!1,je=!0,Pe=!1,Oe=!0,Fe=!0,Re=!1,ze={},We=null,Ue=I({},["annotation-xml","audio","colgroup","desc","foreignobject","head","iframe","math","mi","mn","mo","ms","mtext","noembed","noframes","noscript","plaintext","script","style","svg","template","thead","title","video","xmp"]),He=null,Ge=I({},["audio","video","img","source","image","track"]),Ye=null,Ze=I({},["alt","class","for","id","label","name","pattern","placeholder","role","summary","title","value","style","xmlns"]),Ke="http://www.w3.org/1998/Math/MathML",Qe="http://www.w3.org/2000/svg",Je="http://www.w3.org/1999/xhtml",Xe=Je,qe=!1,$e=null,et=o.createElement("form"),tt=function(){function e(e){$e&&$e===e||(e&&"object"===(void 0===e?"undefined":G(e))||(e={}),e=k(e),Ve="ALLOWED_TAGS"in e?I({},e.ALLOWED_TAGS):ye,xe="ALLOWED_ATTR"in e?I({},e.ALLOWED_ATTR):Ie,Ye="ADD_URI_SAFE_ATTR"in e?I(k(Ze),e.ADD_URI_SAFE_ATTR):Ze,He="ADD_DATA_URI_TAGS"in e?I(k(Ge),e.ADD_DATA_URI_TAGS):Ge,We="FORBID_CONTENTS"in e?I({},e.FORBID_CONTENTS):Ue,ke="FORBID_TAGS"in e?I({},e.FORBID_TAGS):{},we="FORBID_ATTR"in e?I({},e.FORBID_ATTR):{},ze="USE_PROFILES"in e&&e.USE_PROFILES,Se=!1!==e.ALLOW_ARIA_ATTR,_e=!1!==e.ALLOW_DATA_ATTR,Me=e.ALLOW_UNKNOWN_PROTOCOLS||!1,De=e.SAFE_FOR_TEMPLATES||!1,Be=e.WHOLE_DOCUMENT||!1,Le=e.RETURN_DOM||!1,Ee=e.RETURN_DOM_FRAGMENT||!1,je=!1!==e.RETURN_DOM_IMPORT,Pe=e.RETURN_TRUSTED_TYPE||!1,Te=e.FORCE_BODY||!1,Oe=!1!==e.SANITIZE_DOM,Fe=!1!==e.KEEP_CONTENT,Re=e.IN_PLACE||!1,be=e.ALLOWED_URI_REGEXP||be,Xe=e.NAMESPACE||Je,De&&(_e=!1),Ee&&(Le=!0),ze&&(Ve=I({},[].concat(Y(T))),xe=[],!0===ze.html&&(I(Ve,S),I(xe,L)),!0===ze.svg&&(I(Ve,_),I(xe,E),I(xe,P)),!0===ze.svgFilters&&(I(Ve,M),I(xe,E),I(xe,P)),!0===ze.mathMl&&(I(Ve,B),I(xe,j),I(xe,P))),e.ADD_TAGS&&(Ve===ye&&(Ve=k(Ve)),I(Ve,e.ADD_TAGS)),e.ADD_ATTR&&(xe===Ie&&(xe=k(xe)),I(xe,e.ADD_ATTR)),e.ADD_URI_SAFE_ATTR&&I(Ye,e.ADD_URI_SAFE_ATTR),e.FORBID_CONTENTS&&(We===Ue&&(We=k(We)),I(We,e.FORBID_CONTENTS)),Fe&&(Ve["#text"]=!0),Be&&I(Ve,["html","head","body"]),Ve.table&&(I(Ve,["tbody"]),delete ke.tbody),i&&i(e),$e=e)}return e}(),nt=I({},["mi","mo","mn","ms","mtext"]),ot=I({},["foreignobject","desc","title","annotation-xml"]),rt=I({},_);I(rt,M),I(rt,D);var at=I({},B);I(at,A);var it=function(){function e(e){var t=ne(e);t&&t.tagName||(t={namespaceURI:Je,tagName:"template"});var n=h(e.tagName),o=h(t.tagName);if(e.namespaceURI===Qe)return t.namespaceURI===Je?"svg"===n:t.namespaceURI===Ke?"svg"===n&&("annotation-xml"===o||nt[o]):Boolean(rt[n]);if(e.namespaceURI===Ke)return t.namespaceURI===Je?"math"===n:t.namespaceURI===Qe?"math"===n&&ot[o]:Boolean(at[n]);if(e.namespaceURI===Je){if(t.namespaceURI===Qe&&!ot[o])return!1;if(t.namespaceURI===Ke&&!nt[o])return!1;var r=I({},["title","style","font","a","script"]);return!at[n]&&(r[n]||!rt[n])}return!1}return e}(),ct=function(){function e(e){f(t.removed,{element:e});try{e.parentNode.removeChild(e)}catch(Nt){try{e.outerHTML=ae}catch(Nt){e.remove()}}}return e}(),lt=function(){function e(e,n){try{f(t.removed,{attribute:n.getAttributeNode(e),from:n})}catch(Nt){f(t.removed,{attribute:null,from:n})}if(n.removeAttribute(e),"is"===e&&!xe[e])if(Le||Ee)try{ct(n)}catch(Nt){}else try{n.setAttribute(e,"")}catch(Nt){}}return e}(),ut=function(){function e(e){var t=void 0,n=void 0;if(Te)e="<remove></remove>"+e;else{var r=g(e,/^[\r\n\t ]+/);n=r&&r[0]}var a=re?re.createHTML(e):e;if(Xe===Je)try{t=(new J).parseFromString(a,"text/html")}catch(Nt){}if(!t||!t.documentElement){t=ce.createDocument(Xe,"template",null);try{t.documentElement.innerHTML=qe?"":a}catch(Nt){}}var i=t.body||t.documentElement;return e&&n&&i.insertBefore(o.createTextNode(n),i.childNodes[0]||null),Xe===Je?de.call(t,Be?"html":"body")[0]:Be?t.documentElement:i}return e}(),dt=function(){function e(e){return le.call(e.ownerDocument||e,e,u.SHOW_ELEMENT|u.SHOW_COMMENT|u.SHOW_TEXT,null,!1)}return e}(),st=function(){function e(e){return!(e instanceof y||e instanceof x||"string"==typeof e.nodeName&&"string"==typeof e.textContent&&"function"==typeof e.removeChild&&e.attributes instanceof s&&"function"==typeof e.removeAttribute&&"function"==typeof e.setAttribute&&"string"==typeof e.namespaceURI&&"function"==typeof e.insertBefore)}return e}(),pt=function(){function e(e){return"object"===(void 0===c?"undefined":G(c))?e instanceof c:e&&"object"===(void 0===e?"undefined":G(e))&&"number"==typeof e.nodeType&&"string"==typeof e.nodeName}return e}(),mt=function(){function e(e,n,o){me[e]&&p(me[e],(function(e){e.call(t,n,o,$e)}))}return e}(),ft=function(){function e(e){var n=void 0;if(mt("beforeSanitizeElements",e,null),st(e))return ct(e),!0;if(g(e.nodeName,/[\u0080-\uFFFF]/))return ct(e),!0;var o=h(e.nodeName);if(mt("uponSanitizeElement",e,{tagName:o,allowedTags:Ve}),!pt(e.firstElementChild)&&(!pt(e.content)||!pt(e.content.firstElementChild))&&b(/<[/\w]/g,e.innerHTML)&&b(/<[/\w]/g,e.textContent))return ct(e),!0;if("select"===o&&b(/<template/i,e.innerHTML))return ct(e),!0;if(!Ve[o]||ke[o]){if(Fe&&!We[o]){var r=ne(e)||e.parentNode,a=te(e)||e.childNodes;if(a&&r)for(var i=a.length-1;i>=0;--i)r.insertBefore($(a[i],!0),ee(e))}return ct(e),!0}return e instanceof l&&!it(e)?(ct(e),!0):"noscript"!==o&&"noembed"!==o||!b(/<\/no(script|embed)/i,e.innerHTML)?(De&&3===e.nodeType&&(n=e.textContent,n=C(n,fe," "),n=C(n,he," "),e.textContent!==n&&(f(t.removed,{element:e.cloneNode()}),e.textContent=n)),mt("afterSanitizeElements",e,null),!1):(ct(e),!0)}return e}(),ht=function(){function e(e,t,n){if(Oe&&("id"===t||"name"===t)&&(n in o||n in et))return!1;if(_e&&!we[t]&&b(ge,t));else if(Se&&b(Ce,t));else{if(!xe[t]||we[t])return!1;if(Ye[t]);else if(b(be,C(n,ve,"")));else if("src"!==t&&"xlink:href"!==t&&"href"!==t||"script"===e||0!==N(n,"data:")||!He[e])if(Me&&!b(Ne,C(n,ve,"")));else if(n)return!1}return!0}return e}(),gt=function(){function e(e){var n=void 0,o=void 0,r=void 0,a=void 0;mt("beforeSanitizeAttributes",e,null);var i=e.attributes;if(i){var c={attrName:"",attrValue:"",keepAttr:!0,allowedAttributes:xe};for(a=i.length;a--;){var l=n=i[a],u=l.name,d=l.namespaceURI;if(o=v(n.value),r=h(u),c.attrName=r,c.attrValue=o,c.keepAttr=!0,c.forceKeepAttr=undefined,mt("uponSanitizeAttribute",e,c),o=c.attrValue,!c.forceKeepAttr&&(lt(u,e),c.keepAttr))if(b(/\/>/i,o))lt(u,e);else{De&&(o=C(o,fe," "),o=C(o,he," "));var s=e.nodeName.toLowerCase();if(ht(s,r,o))try{d?e.setAttributeNS(d,u,o):e.setAttribute(u,o),m(t.removed)}catch(Nt){}}}mt("afterSanitizeAttributes",e,null)}}return e}(),Ct=function(){function e(t){var n=void 0,o=dt(t);for(mt("beforeSanitizeShadowDOM",t,null);n=o.nextNode();)mt("uponSanitizeShadowNode",n,null),ft(n)||(n.content instanceof r&&e(n.content),gt(n));mt("afterSanitizeShadowDOM",t,null)}return e}();return t.sanitize=function(o,a){var i=void 0,l=void 0,u=void 0,d=void 0,s=void 0;if((qe=!o)&&(o="\x3c!--\x3e"),"string"!=typeof o&&!pt(o)){if("function"!=typeof o.toString)throw V("toString is not a function");if("string"!=typeof(o=o.toString()))throw V("dirty is not a string, aborting")}if(!t.isSupported){if("object"===G(e.toStaticHTML)||"function"==typeof e.toStaticHTML){if("string"==typeof o)return e.toStaticHTML(o);if(pt(o))return e.toStaticHTML(o.outerHTML)}return o}if(Ae||tt(a),t.removed=[],"string"==typeof o&&(Re=!1),Re);else if(o instanceof c)1===(l=(i=ut("\x3c!----\x3e")).ownerDocument.importNode(o,!0)).nodeType&&"BODY"===l.nodeName||"HTML"===l.nodeName?i=l:i.appendChild(l);else{if(!Le&&!De&&!Be&&-1===o.indexOf("<"))return re&&Pe?re.createHTML(o):o;if(!(i=ut(o)))return Le?null:ae}i&&Te&&ct(i.firstChild);for(var p=dt(Re?o:i);u=p.nextNode();)3===u.nodeType&&u===d||ft(u)||(u.content instanceof r&&Ct(u.content),gt(u),d=u);if(d=null,Re)return o;if(Le){if(Ee)for(s=ue.call(i.ownerDocument);i.firstChild;)s.appendChild(i.firstChild);else s=i;return je&&(s=se.call(n,s,!0)),s}var m=Be?i.outerHTML:i.innerHTML;return De&&(m=C(m,fe," "),m=C(m,he," ")),re&&Pe?re.createHTML(m):m},t.setConfig=function(e){tt(e),Ae=!0},t.clearConfig=function(){$e=null,Ae=!1},t.isValidAttribute=function(e,t,n){$e||tt({});var o=h(e),r=h(t);return ht(o,r,n)},t.addHook=function(e,t){"function"==typeof t&&(me[e]=me[e]||[],f(me[e],t))},t.removeHook=function(e){me[e]&&m(me[e])},t.removeHooks=function(e){me[e]&&(me[e]=[])},t.removeAllHooks=function(){me={}},t}return Q()}()},92376:function(e,t){"use strict";t.__esModule=!0,t._CI=Me,t._HI=O,t._M=Be,t._MCCC=Ee,t._ME=Te,t._MFCC=je,t._MP=Se,t._MR=ve,t._RFC=De,t.__render=ze,t.createComponentVNode=function(e,t,n,o,a){var i=new D(1,null,null,e=function(e,t){if(12&e)return e;if(t.prototype&&t.prototype.render)return 4;if(t.render)return 32776;return 8}(e,t),o,function(e,t,n){var o=(32768&e?t.render:t).defaultProps;if(r(o))return n;if(r(n))return u(o,null);return S(n,o)}(e,t,n),function(e,t,n){if(4&e)return n;var o=(32768&e?t.render:t).defaultHooks;if(r(o))return n;if(r(n))return o;return S(n,o)}(e,t,a),t);I.createVNode&&I.createVNode(i);return i},t.createFragment=T,t.createPortal=function(e,t){var n=O(e);return B(1024,1024,null,n,0,null,n.key,t)},t.createRef=function(){return{current:null}},t.createRenderer=function(e){return function(t,n,o,r){e||(e=t),We(n,e,o,r)}},t.createTextVNode=A,t.createVNode=B,t.directClone=L,t.findDOMfromVNode=v,t.forwardRef=function(e){return{render:e}},t.getFlagsForElementVnode=function(e){switch(e){case"svg":return 32;case"input":return 64;case"select":return 256;case"textarea":return 128;case p:return 8192;default:return 1}},t.linkEvent=function(e,t){if(i(t))return{data:e,event:t};return null},t.normalizeProps=function(e){var t=e.props;if(t){var n=e.flags;481&n&&(void 0!==t.children&&r(e.children)&&P(e,t.children),void 0!==t.className&&(e.className=t.className||null,t.className=undefined)),void 0!==t.key&&(e.key=t.key,t.key=undefined),void 0!==t.ref&&(e.ref=8&n?u(e.ref,t.ref):t.ref,t.ref=undefined)}return e},t.render=We,t.rerender=Ke,t.version=t.options=t.Fragment=t.EMPTY_OBJ=t.Component=void 0;var n=Array.isArray;function o(e){var t=typeof e;return"string"===t||"number"===t}function r(e){return null==e}function a(e){return null===e||!1===e||!0===e||void 0===e}function i(e){return"function"==typeof e}function c(e){return"string"==typeof e}function l(e){return null===e}function u(e,t){var n={};if(e)for(var o in e)n[o]=e[o];if(t)for(var r in t)n[r]=t[r];return n}function d(e){return!l(e)&&"object"==typeof e}var s={};t.EMPTY_OBJ=s;var p="$F";function m(e){return e.substr(2).toLowerCase()}function f(e,t){e.appendChild(t)}function h(e,t,n){l(n)?f(e,t):e.insertBefore(t,n)}function g(e,t){e.removeChild(t)}function C(e){for(var t=0;t<e.length;t++)e[t]()}function N(e,t,n){var o=e.children;return 4&n?o.$LI:8192&n?2===e.childFlags?o:o[t?0:o.length-1]:o}function v(e,t){for(var n;e;){if(2033&(n=e.flags))return e.dom;e=N(e,t,n)}return null}function b(e,t){do{var n=e.flags;if(2033&n)return void g(t,e.dom);var o=e.children;if(4&n&&(e=o.$LI),8&n&&(e=o),8192&n){if(2!==e.childFlags){for(var r=0,a=o.length;r<a;++r)b(o[r],t);return}e=o}}while(e)}function V(e,t,n){do{var o=e.flags;if(2033&o)return void h(t,e.dom,n);var r=e.children;if(4&o&&(e=r.$LI),8&o&&(e=r),8192&o){if(2!==e.childFlags){for(var a=0,i=r.length;a<i;++a)V(r[a],t,n);return}e=r}}while(e)}function y(e,t,n){return e.constructor.getDerivedStateFromProps?u(n,e.constructor.getDerivedStateFromProps(t,n)):n}t.Fragment=p;var x={v:!1},I={componentComparator:null,createVNode:null,renderComplete:null};function k(e,t){e.textContent=t}function w(e,t){return d(e)&&e.event===t.event&&e.data===t.data}function S(e,t){for(var n in t)void 0===e[n]&&(e[n]=t[n]);return e}function _(e,t){return!!i(e)&&(e(t),!0)}t.options=I;var M="$";function D(e,t,n,o,r,a,i,c){this.childFlags=e,this.children=t,this.className=n,this.dom=null,this.flags=o,this.key=void 0===r?null:r,this.props=void 0===a?null:a,this.ref=void 0===i?null:i,this.type=c}function B(e,t,n,o,r,a,i,c){var l=void 0===r?1:r,u=new D(l,o,n,e,i,a,c,t);return I.createVNode&&I.createVNode(u),0===l&&P(u,u.children),u}function A(e,t){return new D(1,r(e)||!0===e||!1===e?"":e,null,16,t,null,null,null)}function T(e,t,n){var o=B(8192,8192,null,e,t,null,n,null);switch(o.childFlags){case 1:o.children=E(),o.childFlags=2;break;case 16:o.children=[A(e)],o.childFlags=4}return o}function L(e){var t=-16385&e.flags,n=e.props;if(14&t&&!l(n)){var o=n;for(var r in n={},o)n[r]=o[r]}return 0==(8192&t)?new D(e.childFlags,e.children,e.className,t,e.key,n,e.ref,e.type):function(e){var t=e.children,n=e.childFlags;return T(2===n?L(t):t.map(L),n,e.key)}(e)}function E(){return A("",null)}function j(e,t,r,i){for(var u=e.length;r<u;r++){var d=e[r];if(!a(d)){var s=i+M+r;if(n(d))j(d,t,0,s);else{if(o(d))d=A(d,s);else{var p=d.key,m=c(p)&&p[0]===M;(81920&d.flags||m)&&(d=L(d)),d.flags|=65536,m?p.substring(0,i.length)!==i&&(d.key=i+p):l(p)?d.key=s:d.key=i+p}t.push(d)}}}}function P(e,t){var r,i=1;if(a(t))r=t;else if(o(t))i=16,r=t;else if(n(t)){for(var u=t.length,d=0;d<u;++d){var s=t[d];if(a(s)||n(s)){r=r||t.slice(0,d),j(t,r,d,"");break}if(o(s))(r=r||t.slice(0,d)).push(A(s,M+d));else{var p=s.key,m=(81920&s.flags)>0,f=l(p),h=c(p)&&p[0]===M;m||f||h?(r=r||t.slice(0,d),(m||h)&&(s=L(s)),(f||h)&&(s.key=M+d),r.push(s)):r&&r.push(s),s.flags|=65536}}i=0===(r=r||t).length?1:8}else(r=t).flags|=65536,81920&t.flags&&(r=L(t)),i=2;return e.children=r,e.childFlags=i,e}function O(e){return a(e)||o(e)?A(e,null):n(e)?T(e,0,null):16384&e.flags?L(e):e}var F="http://www.w3.org/1999/xlink",R="http://www.w3.org/XML/1998/namespace",z={"xlink:actuate":F,"xlink:arcrole":F,"xlink:href":F,"xlink:role":F,"xlink:show":F,"xlink:title":F,"xlink:type":F,"xml:base":R,"xml:lang":R,"xml:space":R};function W(e){return{onClick:e,onDblClick:e,onFocusIn:e,onFocusOut:e,onKeyDown:e,onKeyPress:e,onKeyUp:e,onMouseDown:e,onMouseMove:e,onMouseUp:e,onTouchEnd:e,onTouchMove:e,onTouchStart:e}}var U=W(0),H=W(null),G=W(!0);function Y(e,t){var n=t.$EV;return n||(n=t.$EV=W(null)),n[e]||1==++U[e]&&(H[e]=function(e){var t="onClick"===e||"onDblClick"===e?function(e){return function(t){0===t.button?K(t,!0,e,q(t)):t.stopPropagation()}}(e):function(e){return function(t){K(t,!1,e,q(t))}}(e);return document.addEventListener(m(e),t),t}(e)),n}function Z(e,t){var n=t.$EV;n&&n[e]&&(0==--U[e]&&(document.removeEventListener(m(e),H[e]),H[e]=null),n[e]=null)}function K(e,t,n,o){var r=function(e){return i(e.composedPath)?e.composedPath()[0]:e.target}(e);do{if(t&&r.disabled)return;var a=r.$EV;if(a){var c=a[n];if(c&&(o.dom=r,c.event?c.event(c.data,e):c(e),e.cancelBubble))return}r=r.parentNode}while(!l(r))}function Q(){this.cancelBubble=!0,this.immediatePropagationStopped||this.stopImmediatePropagation()}function J(){return this.defaultPrevented}function X(){return this.cancelBubble}function q(e){var t={dom:document};return e.isDefaultPrevented=J,e.isPropagationStopped=X,e.stopPropagation=Q,Object.defineProperty(e,"currentTarget",{configurable:!0,get:function(){return t.dom}}),t}function $(e,t,n){if(e[t]){var o=e[t];o.event?o.event(o.data,n):o(n)}else{var r=t.toLowerCase();e[r]&&e[r](n)}}function ee(e,t){var n=function(n){var o=this.$V;if(o){var r=o.props||s,a=o.dom;if(c(e))$(r,e,n);else for(var l=0;l<e.length;++l)$(r,e[l],n);if(i(t)){var u=this.$V,d=u.props||s;t(d,a,!1,u)}}};return Object.defineProperty(n,"wrapped",{configurable:!1,enumerable:!1,value:!0,writable:!1}),n}function te(e,t,n){var o="$"+t,r=e[o];if(r){if(r[1].wrapped)return;e.removeEventListener(r[0],r[1]),e[o]=null}i(n)&&(e.addEventListener(t,n),e[o]=[t,n])}function ne(e){return"checkbox"===e||"radio"===e}var oe=ee("onInput",ie),re=ee(["onClick","onChange"],ie);function ae(e){e.stopPropagation()}function ie(e,t){var n=e.type,o=e.value,a=e.checked,i=e.multiple,c=e.defaultValue,l=!r(o);n&&n!==t.type&&t.setAttribute("type",n),r(i)||i===t.multiple||(t.multiple=i),r(c)||l||(t.defaultValue=c+""),ne(n)?(l&&(t.value=o),r(a)||(t.checked=a)):l&&t.value!==o?(t.defaultValue=o,t.value=o):r(a)||(t.checked=a)}function ce(e,t){if("option"===e.type)!function(e,t){var o=e.props||s,a=e.dom;a.value=o.value,o.value===t||n(t)&&-1!==t.indexOf(o.value)?a.selected=!0:r(t)&&r(o.selected)||(a.selected=o.selected||!1)}(e,t);else{var o=e.children,a=e.flags;if(4&a)ce(o.$LI,t);else if(8&a)ce(o,t);else if(2===e.childFlags)ce(o,t);else if(12&e.childFlags)for(var i=0,c=o.length;i<c;++i)ce(o[i],t)}}ae.wrapped=!0;var le=ee("onChange",ue);function ue(e,t,n,o){var a=Boolean(e.multiple);r(e.multiple)||a===t.multiple||(t.multiple=a);var i=e.selectedIndex;if(-1===i&&(t.selectedIndex=-1),1!==o.childFlags){var c=e.value;"number"==typeof i&&i>-1&&t.options[i]&&(c=t.options[i].value),n&&r(c)&&(c=e.defaultValue),ce(o,c)}}var de,se,pe=ee("onInput",fe),me=ee("onChange");function fe(e,t,n){var o=e.value,a=t.value;if(r(o)){if(n){var i=e.defaultValue;r(i)||i===a||(t.defaultValue=i,t.value=i)}}else a!==o&&(t.defaultValue=o,t.value=o)}function he(e,t,n,o,r,a){64&e?ie(o,n):256&e?ue(o,n,r,t):128&e&&fe(o,n,r),a&&(n.$V=t)}function ge(e,t,n){64&e?function(e,t){ne(t.type)?(te(e,"change",re),te(e,"click",ae)):te(e,"input",oe)}(t,n):256&e?function(e){te(e,"change",le)}(t):128&e&&function(e,t){te(e,"input",pe),t.onChange&&te(e,"change",me)}(t,n)}function Ce(e){return e.type&&ne(e.type)?!r(e.checked):!r(e.value)}function Ne(e){e&&!_(e,null)&&e.current&&(e.current=null)}function ve(e,t,n){e&&(i(e)||void 0!==e.current)&&n.push((function(){_(e,t)||void 0===e.current||(e.current=t)}))}function be(e,t){Ve(e),b(e,t)}function Ve(e){var t,n=e.flags,o=e.children;if(481&n){t=e.ref;var a=e.props;Ne(t);var c=e.childFlags;if(!l(a))for(var u=Object.keys(a),d=0,p=u.length;d<p;d++){var m=u[d];G[m]&&Z(m,e.dom)}12&c?ye(o):2===c&&Ve(o)}else o&&(4&n?(i(o.componentWillUnmount)&&o.componentWillUnmount(),Ne(e.ref),o.$UN=!0,Ve(o.$LI)):8&n?(!r(t=e.ref)&&i(t.onComponentWillUnmount)&&t.onComponentWillUnmount(v(e,!0),e.props||s),Ve(o)):1024&n?be(o,e.ref):8192&n&&12&e.childFlags&&ye(o))}function ye(e){for(var t=0,n=e.length;t<n;++t)Ve(e[t])}function xe(e){e.textContent=""}function Ie(e,t,n){ye(n),8192&t.flags?b(t,e):xe(e)}function ke(e,t,n,o){var a=e&&e.__html||"",i=t&&t.__html||"";a!==i&&(r(i)||function(e,t){var n=document.createElement("i");return n.innerHTML=t,n.innerHTML===e.innerHTML}(o,i)||(l(n)||(12&n.childFlags?ye(n.children):2===n.childFlags&&Ve(n.children),n.children=null,n.childFlags=1),o.innerHTML=i))}function we(e,t,n,o,a,l,u){switch(e){case"children":case"childrenType":case"className":case"defaultValue":case"key":case"multiple":case"ref":case"selectedIndex":break;case"autoFocus":o.autofocus=!!n;break;case"allowfullscreen":case"autoplay":case"capture":case"checked":case"controls":case"default":case"disabled":case"hidden":case"indeterminate":case"loop":case"muted":case"novalidate":case"open":case"readOnly":case"required":case"reversed":case"scoped":case"seamless":case"selected":o[e]=!!n;break;case"defaultChecked":case"value":case"volume":if(l&&"value"===e)break;var s=r(n)?"":n;o[e]!==s&&(o[e]=s);break;case"style":!function(e,t,n){if(r(t))n.removeAttribute("style");else{var o,a,i=n.style;if(c(t))i.cssText=t;else if(r(e)||c(e))for(o in t)a=t[o],i.setProperty(o,a);else{for(o in t)(a=t[o])!==e[o]&&i.setProperty(o,a);for(o in e)r(t[o])&&i.removeProperty(o)}}}(t,n,o);break;case"dangerouslySetInnerHTML":ke(t,n,u,o);break;default:G[e]?function(e,t,n,o){if(i(n))Y(e,o)[e]=n;else if(d(n)){if(w(t,n))return;Y(e,o)[e]=n}else Z(e,o)}(e,t,n,o):111===e.charCodeAt(0)&&110===e.charCodeAt(1)?function(e,t,n,o){if(d(n)){if(w(t,n))return;n=function(e){var t=e.event;return function(n){t(e.data,n)}}(n)}te(o,m(e),n)}(e,t,n,o):r(n)?o.removeAttribute(e):a&&z[e]?o.setAttributeNS(z[e],e,n):o.setAttribute(e,n)}}function Se(e,t,n,o,r){var a=!1,i=(448&t)>0;for(var c in i&&(a=Ce(n))&&ge(t,o,n),n)we(c,null,n[c],o,r,a,null);i&&he(t,e,o,n,!0,a)}function _e(e,t,n){var o=O(e.render(t,e.state,n)),r=n;return i(e.getChildContext)&&(r=u(n,e.getChildContext())),e.$CX=r,o}function Me(e,t,n,o,r,a){var c=new t(n,o),u=c.$N=Boolean(t.getDerivedStateFromProps||c.getSnapshotBeforeUpdate);if(c.$SVG=r,c.$L=a,e.children=c,c.$BS=!1,c.context=o,c.props===s&&(c.props=n),u)c.state=y(c,n,c.state);else if(i(c.componentWillMount)){c.$BR=!0,c.componentWillMount();var d=c.$PS;if(!l(d)){var p=c.state;if(l(p))c.state=d;else for(var m in d)p[m]=d[m];c.$PS=null}c.$BR=!1}return c.$LI=_e(c,n,o),c}function De(e,t){var n=e.props||s;return 32768&e.flags?e.type.render(n,e.ref,t):e.type(n,t)}function Be(e,t,n,o,r,a){var i=e.flags|=16384;481&i?Te(e,t,n,o,r,a):4&i?function(e,t,n,o,r,a){var i=Me(e,e.type,e.props||s,n,o,a);Be(i.$LI,t,i.$CX,o,r,a),Ee(e.ref,i,a)}(e,t,n,o,r,a):8&i?(!function(e,t,n,o,r,a){Be(e.children=O(De(e,n)),t,n,o,r,a)}(e,t,n,o,r,a),je(e,a)):512&i||16&i?Ae(e,t,r):8192&i?function(e,t,n,o,r,a){var i=e.children,c=e.childFlags;12&c&&0===i.length&&(c=e.childFlags=2,i=e.children=E());2===c?Be(i,n,r,o,r,a):Le(i,n,t,o,r,a)}(e,n,t,o,r,a):1024&i&&function(e,t,n,o,r){Be(e.children,e.ref,t,!1,null,r);var a=E();Ae(a,n,o),e.dom=a.dom}(e,n,t,r,a)}function Ae(e,t,n){var o=e.dom=document.createTextNode(e.children);l(t)||h(t,o,n)}function Te(e,t,n,o,a,i){var c=e.flags,u=e.props,d=e.className,s=e.childFlags,p=e.dom=function(e,t){return t?document.createElementNS("http://www.w3.org/2000/svg",e):document.createElement(e)}(e.type,o=o||(32&c)>0),m=e.children;if(r(d)||""===d||(o?p.setAttribute("class",d):p.className=d),16===s)k(p,m);else if(1!==s){var f=o&&"foreignObject"!==e.type;2===s?(16384&m.flags&&(e.children=m=L(m)),Be(m,p,n,f,null,i)):8!==s&&4!==s||Le(m,p,n,f,null,i)}l(t)||h(t,p,a),l(u)||Se(e,c,u,p,o),ve(e.ref,p,i)}function Le(e,t,n,o,r,a){for(var i=0;i<e.length;++i){var c=e[i];16384&c.flags&&(e[i]=c=L(c)),Be(c,t,n,o,r,a)}}function Ee(e,t,n){ve(e,t,n),i(t.componentDidMount)&&n.push(function(e){return function(){e.componentDidMount()}}(t))}function je(e,t){var n=e.ref;r(n)||(_(n.onComponentWillMount,e.props||s),i(n.onComponentDidMount)&&t.push(function(e,t){return function(){e.onComponentDidMount(v(t,!0),t.props||s)}}(n,e)))}function Pe(e,t,n,o,c,d,p){var m=t.flags|=16384;e.flags!==m||e.type!==t.type||e.key!==t.key||2048&m?16384&e.flags?function(e,t,n,o,r,a){Ve(e),0!=(t.flags&e.flags&2033)?(Be(t,null,o,r,null,a),function(e,t,n){e.replaceChild(t,n)}(n,t.dom,e.dom)):(Be(t,n,o,r,v(e,!0),a),b(e,n))}(e,t,n,o,c,p):Be(t,n,o,c,d,p):481&m?function(e,t,n,o,a,i){var c,l=t.dom=e.dom,u=e.props,d=t.props,p=!1,m=!1;if(o=o||(32&a)>0,u!==d){var f=u||s;if((c=d||s)!==s)for(var h in(p=(448&a)>0)&&(m=Ce(c)),c){var g=f[h],C=c[h];g!==C&&we(h,g,C,l,o,m,e)}if(f!==s)for(var N in f)r(c[N])&&!r(f[N])&&we(N,f[N],null,l,o,m,e)}var v=t.children,b=t.className;e.className!==b&&(r(b)?l.removeAttribute("class"):o?l.setAttribute("class",b):l.className=b);4096&a?function(e,t){e.textContent!==t&&(e.textContent=t)}(l,v):Oe(e.childFlags,t.childFlags,e.children,v,l,n,o&&"foreignObject"!==t.type,null,e,i);p&&he(a,t,l,c,!1,m);var V=t.ref,y=e.ref;y!==V&&(Ne(y),ve(V,l,i))}(e,t,o,c,m,p):4&m?function(e,t,n,o,r,a,c){var d=t.children=e.children;if(l(d))return;d.$L=c;var p=t.props||s,m=t.ref,f=e.ref,h=d.state;if(!d.$N){if(i(d.componentWillReceiveProps)){if(d.$BR=!0,d.componentWillReceiveProps(p,o),d.$UN)return;d.$BR=!1}l(d.$PS)||(h=u(h,d.$PS),d.$PS=null)}Fe(d,h,p,n,o,r,!1,a,c),f!==m&&(Ne(f),ve(m,d,c))}(e,t,n,o,c,d,p):8&m?function(e,t,n,o,a,c,l){var u=!0,d=t.props||s,p=t.ref,m=e.props,f=!r(p),h=e.children;f&&i(p.onComponentShouldUpdate)&&(u=p.onComponentShouldUpdate(m,d));if(!1!==u){f&&i(p.onComponentWillUpdate)&&p.onComponentWillUpdate(m,d);var g=O(De(t,o));Pe(h,g,n,o,a,c,l),t.children=g,f&&i(p.onComponentDidUpdate)&&p.onComponentDidUpdate(m,d)}else t.children=h}(e,t,n,o,c,d,p):16&m?function(e,t){var n=t.children,o=t.dom=e.dom;n!==e.children&&(o.nodeValue=n)}(e,t):512&m?t.dom=e.dom:8192&m?function(e,t,n,o,r,a){var i=e.children,c=t.children,l=e.childFlags,u=t.childFlags,d=null;12&u&&0===c.length&&(u=t.childFlags=2,c=t.children=E());var s=0!=(2&u);if(12&l){var p=i.length;(8&l&&8&u||s||!s&&c.length>p)&&(d=v(i[p-1],!1).nextSibling)}Oe(l,u,i,c,n,o,r,d,e,a)}(e,t,n,o,c,p):function(e,t,n,o){var r=e.ref,i=t.ref,c=t.children;if(Oe(e.childFlags,t.childFlags,e.children,c,r,n,!1,null,e,o),t.dom=e.dom,r!==i&&!a(c)){var l=c.dom;g(r,l),f(i,l)}}(e,t,o,p)}function Oe(e,t,n,o,r,a,i,c,l,u){switch(e){case 2:switch(t){case 2:Pe(n,o,r,a,i,c,u);break;case 1:be(n,r);break;case 16:Ve(n),k(r,o);break;default:!function(e,t,n,o,r,a){Ve(e),Le(t,n,o,r,v(e,!0),a),b(e,n)}(n,o,r,a,i,u)}break;case 1:switch(t){case 2:Be(o,r,a,i,c,u);break;case 1:break;case 16:k(r,o);break;default:Le(o,r,a,i,c,u)}break;case 16:switch(t){case 16:!function(e,t,n){e!==t&&(""!==e?n.firstChild.nodeValue=t:k(n,t))}(n,o,r);break;case 2:xe(r),Be(o,r,a,i,c,u);break;case 1:xe(r);break;default:xe(r),Le(o,r,a,i,c,u)}break;default:switch(t){case 16:ye(n),k(r,o);break;case 2:Ie(r,l,n),Be(o,r,a,i,c,u);break;case 1:Ie(r,l,n);break;default:var d=0|n.length,s=0|o.length;0===d?s>0&&Le(o,r,a,i,c,u):0===s?Ie(r,l,n):8===t&&8===e?function(e,t,n,o,r,a,i,c,l,u){var d,s,p=a-1,m=i-1,f=0,h=e[f],g=t[f];e:{for(;h.key===g.key;){if(16384&g.flags&&(t[f]=g=L(g)),Pe(h,g,n,o,r,c,u),e[f]=g,++f>p||f>m)break e;h=e[f],g=t[f]}for(h=e[p],g=t[m];h.key===g.key;){if(16384&g.flags&&(t[m]=g=L(g)),Pe(h,g,n,o,r,c,u),e[p]=g,m--,f>--p||f>m)break e;h=e[p],g=t[m]}}if(f>p){if(f<=m)for(s=(d=m+1)<i?v(t[d],!0):c;f<=m;)16384&(g=t[f]).flags&&(t[f]=g=L(g)),++f,Be(g,n,o,r,s,u)}else if(f>m)for(;f<=p;)be(e[f++],n);else!function(e,t,n,o,r,a,i,c,l,u,d,s,p){var m,f,h,g=0,C=c,N=c,b=a-c+1,y=i-c+1,x=new Int32Array(y+1),I=b===o,k=!1,w=0,S=0;if(r<4||(b|y)<32)for(g=C;g<=a;++g)if(m=e[g],S<y){for(c=N;c<=i;c++)if(f=t[c],m.key===f.key){if(x[c-N]=g+1,I)for(I=!1;C<g;)be(e[C++],l);w>c?k=!0:w=c,16384&f.flags&&(t[c]=f=L(f)),Pe(m,f,l,n,u,d,p),++S;break}!I&&c>i&&be(m,l)}else I||be(m,l);else{var _={};for(g=N;g<=i;++g)_[t[g].key]=g;for(g=C;g<=a;++g)if(m=e[g],S<y)if(void 0!==(c=_[m.key])){if(I)for(I=!1;g>C;)be(e[C++],l);x[c-N]=g+1,w>c?k=!0:w=c,16384&(f=t[c]).flags&&(t[c]=f=L(f)),Pe(m,f,l,n,u,d,p),++S}else I||be(m,l);else I||be(m,l)}if(I)Ie(l,s,e),Le(t,l,n,u,d,p);else if(k){var M=function(e){var t=0,n=0,o=0,r=0,a=0,i=0,c=0,l=e.length;l>Re&&(Re=l,de=new Int32Array(l),se=new Int32Array(l));for(;n<l;++n)if(0!==(t=e[n])){if(e[o=de[r]]<t){se[n]=o,de[++r]=n;continue}for(a=0,i=r;a<i;)e[de[c=a+i>>1]]<t?a=c+1:i=c;t<e[de[a]]&&(a>0&&(se[n]=de[a-1]),de[a]=n)}a=r+1;var u=new Int32Array(a);i=de[a-1];for(;a-- >0;)u[a]=i,i=se[i],de[a]=0;return u}(x);for(c=M.length-1,g=y-1;g>=0;g--)0===x[g]?(16384&(f=t[w=g+N]).flags&&(t[w]=f=L(f)),Be(f,l,n,u,(h=w+1)<r?v(t[h],!0):d,p)):c<0||g!==M[c]?V(f=t[w=g+N],l,(h=w+1)<r?v(t[h],!0):d):c--}else if(S!==y)for(g=y-1;g>=0;g--)0===x[g]&&(16384&(f=t[w=g+N]).flags&&(t[w]=f=L(f)),Be(f,l,n,u,(h=w+1)<r?v(t[h],!0):d,p))}(e,t,o,a,i,p,m,f,n,r,c,l,u)}(n,o,r,a,i,d,s,c,l,u):function(e,t,n,o,r,a,i,c,l){for(var u,d,s=a>i?i:a,p=0;p<s;++p)u=t[p],d=e[p],16384&u.flags&&(u=t[p]=L(u)),Pe(d,u,n,o,r,c,l),e[p]=u;if(a<i)for(p=s;p<i;++p)16384&(u=t[p]).flags&&(u=t[p]=L(u)),Be(u,n,o,r,c,l);else if(a>i)for(p=s;p<a;++p)be(e[p],n)}(n,o,r,a,i,d,s,c,u)}}}function Fe(e,t,n,o,r,a,c,l,d){var s=e.state,p=e.props,m=Boolean(e.$N),f=i(e.shouldComponentUpdate);if(m&&(t=y(e,n,t!==s?u(s,t):t)),c||!f||f&&e.shouldComponentUpdate(n,t,r)){!m&&i(e.componentWillUpdate)&&e.componentWillUpdate(n,t,r),e.props=n,e.state=t,e.context=r;var h=null,g=_e(e,n,r);m&&i(e.getSnapshotBeforeUpdate)&&(h=e.getSnapshotBeforeUpdate(p,s)),Pe(e.$LI,g,o,e.$CX,a,l,d),e.$LI=g,i(e.componentDidUpdate)&&function(e,t,n,o,r){r.push((function(){e.componentDidUpdate(t,n,o)}))}(e,p,s,h,d)}else e.props=n,e.state=t,e.context=r}var Re=0;function ze(e,t,n,o){var a=[],c=t.$V;x.v=!0,r(c)?r(e)||(16384&e.flags&&(e=L(e)),Be(e,t,o,!1,null,a),t.$V=e,c=e):r(e)?(be(c,t),t.$V=null):(16384&e.flags&&(e=L(e)),Pe(c,e,t,o,!1,null,a),c=t.$V=e),C(a),x.v=!1,i(n)&&n(),i(I.renderComplete)&&I.renderComplete(c,t)}function We(e,t,n,o){void 0===n&&(n=null),void 0===o&&(o=s),ze(e,t,n,o)}"undefined"!=typeof document&&window.Node&&(Node.prototype.$EV=null,Node.prototype.$V=null);var Ue=[],He="undefined"!=typeof Promise?Promise.resolve().then.bind(Promise.resolve()):function(e){window.setTimeout(e,0)},Ge=!1;function Ye(e,t,n,o){var a=e.$PS;if(i(t)&&(t=t(a?u(e.state,a):e.state,e.props,e.context)),r(a))e.$PS=t;else for(var c in t)a[c]=t[c];if(e.$BR)i(n)&&e.$L.push(n.bind(e));else{if(!x.v&&0===Ue.length)return Qe(e,o),void(i(n)&&n.call(e));if(-1===Ue.indexOf(e)&&Ue.push(e),o&&(e.$F=!0),Ge||(Ge=!0,He(Ke)),i(n)){var l=e.$QU;l||(l=e.$QU=[]),l.push(n)}}}function Ze(e){for(var t=e.$QU,n=0;n<t.length;++n)t[n].call(e);e.$QU=null}function Ke(){var e;for(Ge=!1;e=Ue.shift();)if(!e.$UN){var t=e.$F;e.$F=!1,Qe(e,t),e.$QU&&Ze(e)}}function Qe(e,t){if(t||!e.$BR){var n=e.$PS;e.$PS=null;var o=[];x.v=!0,Fe(e,u(e.state,n),e.props,v(e.$LI,!0).parentNode,e.context,e.$SVG,t,null,o),C(o),x.v=!1}else e.state=e.$PS,e.$PS=null}var Je=function(e,t){this.state=null,this.$BR=!1,this.$BS=!0,this.$PS=null,this.$LI=null,this.$UN=!1,this.$CX=null,this.$QU=null,this.$N=!1,this.$L=null,this.$SVG=!1,this.$F=!1,this.props=e||s,this.context=t||s};t.Component=Je,Je.prototype.forceUpdate=function(e){this.$UN||Ye(this,{},e,!0)},Je.prototype.setState=function(e,t){this.$UN||this.$BS||Ye(this,e,t,!1)},Je.prototype.render=function(e,t,n){return null};t.version="7.4.8"},96323:function(e,t,n){"use strict";t.__esModule=!0;var o=n(92376);Object.keys(o).forEach((function(e){"default"!==e&&"__esModule"!==e&&(e in t&&t[e]===o[e]||(t[e]=o[e]))}))},10648:function(e,t){"use strict";var n,o;t.__esModule=!0,t.VNodeFlags=t.ChildFlags=void 0,t.VNodeFlags=n,function(e){e[e.HtmlElement=1]="HtmlElement",e[e.ComponentUnknown=2]="ComponentUnknown",e[e.ComponentClass=4]="ComponentClass",e[e.ComponentFunction=8]="ComponentFunction",e[e.Text=16]="Text",e[e.SvgElement=32]="SvgElement",e[e.InputElement=64]="InputElement",e[e.TextareaElement=128]="TextareaElement",e[e.SelectElement=256]="SelectElement",e[e.Void=512]="Void",e[e.Portal=1024]="Portal",e[e.ReCreate=2048]="ReCreate",e[e.ContentEditable=4096]="ContentEditable",e[e.Fragment=8192]="Fragment",e[e.InUse=16384]="InUse",e[e.ForwardRef=32768]="ForwardRef",e[e.Normalized=65536]="Normalized",e[e.ForwardRefComponent=32776]="ForwardRefComponent",e[e.FormElement=448]="FormElement",e[e.Element=481]="Element",e[e.Component=14]="Component",e[e.DOMRef=2033]="DOMRef",e[e.InUseOrNormalized=81920]="InUseOrNormalized",e[e.ClearInUse=-16385]="ClearInUse",e[e.ComponentKnown=12]="ComponentKnown"}(n||(t.VNodeFlags=n={})),t.ChildFlags=o,function(e){e[e.UnknownChildren=0]="UnknownChildren",e[e.HasInvalidChildren=1]="HasInvalidChildren",e[e.HasVNodeChildren=2]="HasVNodeChildren",e[e.HasNonKeyedChildren=4]="HasNonKeyedChildren",e[e.HasKeyedChildren=8]="HasKeyedChildren",e[e.HasTextChildren=16]="HasTextChildren",e[e.MultipleChildren=12]="MultipleChildren"}(o||(t.ChildFlags=o={}))},12800:function(e){"use strict";e.exports=function(){function e(e,t){for(var n=0;n<t.length;n++){var o=t[n];o.enumerable=o.enumerable||!1,o.configurable=!0,"value"in o&&(o.writable=!0),Object.defineProperty(e,o.key,o)}}function t(t,n,o){return n&&e(t.prototype,n),o&&e(t,o),t}function n(e,t){if(e){if("string"==typeof e)return o(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?o(e,t):void 0}}function o(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,o=new Array(t);n<t;n++)o[n]=e[n];return o}function r(e,t){var o="undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(o)return(o=o.call(e)).next.bind(o);if(Array.isArray(e)||(o=n(e))||t&&e&&"number"==typeof e.length){o&&(e=o);var r=0;return function(){return r>=e.length?{done:!0}:{done:!1,value:e[r++]}}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var a={exports:{}};function i(){return{baseUrl:null,breaks:!1,extensions:null,gfm:!0,headerIds:!0,headerPrefix:"",highlight:null,langPrefix:"language-",mangle:!0,pedantic:!1,renderer:null,sanitize:!1,sanitizer:null,silent:!1,smartLists:!1,smartypants:!1,tokenizer:null,walkTokens:null,xhtml:!1}}function c(e){a.exports.defaults=e}a.exports={defaults:i(),getDefaults:i,changeDefaults:c};var l=/[&<>"']/,u=/[&<>"']/g,d=/[<>"']|&(?!#?\w+;)/,s=/[<>"']|&(?!#?\w+;)/g,p={"&":"&","<":"<",">":">",'"':""","'":"'"},m=function(){function e(e){return p[e]}return e}();function f(e,t){if(t){if(l.test(e))return e.replace(u,m)}else if(d.test(e))return e.replace(s,m);return e}var h=/&(#(?:\d+)|(?:#x[0-9A-Fa-f]+)|(?:\w+));?/gi;function g(e){return e.replace(h,(function(e,t){return"colon"===(t=t.toLowerCase())?":":"#"===t.charAt(0)?"x"===t.charAt(1)?String.fromCharCode(parseInt(t.substring(2),16)):String.fromCharCode(+t.substring(1)):""}))}var C=/(^|[^\[])\^/g;function N(e,t){e=e.source||e,t=t||"";var n={replace:function(){function t(t,o){return o=(o=o.source||o).replace(C,"$1"),e=e.replace(t,o),n}return t}(),getRegex:function(){function n(){return new RegExp(e,t)}return n}()};return n}var v=/[^\w:]/g,b=/^$|^[a-z][a-z0-9+.-]*:|^[?#]/i;function V(e,t,n){if(e){var o;try{o=decodeURIComponent(g(n)).replace(v,"").toLowerCase()}catch(r){return null}if(0===o.indexOf("javascript:")||0===o.indexOf("vbscript:")||0===o.indexOf("data:"))return null}t&&!b.test(n)&&(n=w(t,n));try{n=encodeURI(n).replace(/%25/g,"%")}catch(r){return null}return n}var y={},x=/^[^:]+:\/*[^/]*$/,I=/^([^:]+:)[\s\S]*$/,k=/^([^:]+:\/*[^/]*)[\s\S]*$/;function w(e,t){y[" "+e]||(x.test(e)?y[" "+e]=e+"/":y[" "+e]=M(e,"/",!0));var n=-1===(e=y[" "+e]).indexOf(":");return"//"===t.substring(0,2)?n?t:e.replace(I,"$1")+t:"/"===t.charAt(0)?n?t:e.replace(k,"$1")+t:e+t}function S(e){for(var t,n,o=1;o<arguments.length;o++)for(n in t=arguments[o])Object.prototype.hasOwnProperty.call(t,n)&&(e[n]=t[n]);return e}function _(e,t){var n=e.replace(/\|/g,(function(e,t,n){for(var o=!1,r=t;--r>=0&&"\\"===n[r];)o=!o;return o?"|":" |"})).split(/ \|/),o=0;if(n.length>t)n.splice(t);else for(;n.length<t;)n.push("");for(;o<n.length;o++)n[o]=n[o].trim().replace(/\\\|/g,"|");return n}function M(e,t,n){var o=e.length;if(0===o)return"";for(var r=0;r<o;){var a=e.charAt(o-r-1);if(a!==t||n){if(a===t||!n)break;r++}else r++}return e.substr(0,o-r)}function D(e,t){if(-1===e.indexOf(t[1]))return-1;for(var n=e.length,o=0,r=0;r<n;r++)if("\\"===e[r])r++;else if(e[r]===t[0])o++;else if(e[r]===t[1]&&--o<0)return r;return-1}function B(e){e&&e.sanitize&&e.silent}function A(e,t){if(t<1)return"";for(var n="";t>1;)1&t&&(n+=e),t>>=1,e+=e;return n+e}var T={escape:f,unescape:g,edit:N,cleanUrl:V,resolveUrl:w,noopTest:{exec:function(){function e(){}return e}()},merge:S,splitCells:_,rtrim:M,findClosingBracket:D,checkSanitizeDeprecation:B,repeatString:A},L=a.exports.defaults,E=T.rtrim,j=T.splitCells,P=T.escape,O=T.findClosingBracket;function F(e,t,n){var o=t.href,r=t.title?P(t.title):null,a=e[1].replace(/\\([\[\]])/g,"$1");return"!"!==e[0].charAt(0)?{type:"link",raw:n,href:o,title:r,text:a}:{type:"image",raw:n,href:o,title:r,text:P(a)}}function R(e,t){var n=e.match(/^(\s+)(?:```)/);if(null===n)return t;var o=n[1];return t.split("\n").map((function(e){var t=e.match(/^\s+/);return null===t?e:t[0].length>=o.length?e.slice(o.length):e})).join("\n")}var z=function(){function e(e){this.options=e||L}var t=e.prototype;return t.space=function(){function e(e){var t=this.rules.block.newline.exec(e);if(t)return t[0].length>1?{type:"space",raw:t[0]}:{raw:"\n"}}return e}(),t.code=function(){function e(e){var t=this.rules.block.code.exec(e);if(t){var n=t[0].replace(/^ {1,4}/gm,"");return{type:"code",raw:t[0],codeBlockStyle:"indented",text:this.options.pedantic?n:E(n,"\n")}}}return e}(),t.fences=function(){function e(e){var t=this.rules.block.fences.exec(e);if(t){var n=t[0],o=R(n,t[3]||"");return{type:"code",raw:n,lang:t[2]?t[2].trim():t[2],text:o}}}return e}(),t.heading=function(){function e(e){var t=this.rules.block.heading.exec(e);if(t){var n=t[2].trim();if(/#$/.test(n)){var o=E(n,"#");this.options.pedantic?n=o.trim():o&&!/ $/.test(o)||(n=o.trim())}return{type:"heading",raw:t[0],depth:t[1].length,text:n}}}return e}(),t.nptable=function(){function e(e){var t=this.rules.block.nptable.exec(e);if(t){var n={type:"table",header:j(t[1].replace(/^ *| *\| *$/g,"")),align:t[2].replace(/^ *|\| *$/g,"").split(/ *\| */),cells:t[3]?t[3].replace(/\n$/,"").split("\n"):[],raw:t[0]};if(n.header.length===n.align.length){var o,r=n.align.length;for(o=0;o<r;o++)/^ *-+: *$/.test(n.align[o])?n.align[o]="right":/^ *:-+: *$/.test(n.align[o])?n.align[o]="center":/^ *:-+ *$/.test(n.align[o])?n.align[o]="left":n.align[o]=null;for(r=n.cells.length,o=0;o<r;o++)n.cells[o]=j(n.cells[o],n.header.length);return n}}}return e}(),t.hr=function(){function e(e){var t=this.rules.block.hr.exec(e);if(t)return{type:"hr",raw:t[0]}}return e}(),t.blockquote=function(){function e(e){var t=this.rules.block.blockquote.exec(e);if(t){var n=t[0].replace(/^ *> ?/gm,"");return{type:"blockquote",raw:t[0],text:n}}}return e}(),t.list=function(){function e(e){var t=this.rules.block.list.exec(e);if(t){var n,o,r,a,i,c,l,u,d,s=t[0],p=t[2],m=p.length>1,f={type:"list",raw:s,ordered:m,start:m?+p.slice(0,-1):"",loose:!1,items:[]},h=t[0].match(this.rules.block.item),g=!1,C=h.length;r=this.rules.block.listItemStart.exec(h[0]);for(var N=0;N<C;N++){if(s=n=h[N],this.options.pedantic||(d=n.match(new RegExp("\\n\\s*\\n {0,"+(r[0].length-1)+"}\\S")))&&(i=n.length-d.index+h.slice(N+1).join("\n").length,f.raw=f.raw.substring(0,f.raw.length-i),s=n=n.substring(0,d.index),C=N+1),N!==C-1){if(a=this.rules.block.listItemStart.exec(h[N+1]),this.options.pedantic?a[1].length>r[1].length:a[1].length>=r[0].length||a[1].length>3){h.splice(N,2,h[N]+(!this.options.pedantic&&a[1].length<r[0].length&&!h[N].match(/\n$/)?"":"\n")+h[N+1]),N--,C--;continue}(!this.options.pedantic||this.options.smartLists?a[2][a[2].length-1]!==p[p.length-1]:m===(1===a[2].length))&&(i=h.slice(N+1).join("\n").length,f.raw=f.raw.substring(0,f.raw.length-i),N=C-1),r=a}o=n.length,~(n=n.replace(/^ *([*+-]|\d+[.)]) ?/,"")).indexOf("\n ")&&(o-=n.length,n=this.options.pedantic?n.replace(/^ {1,4}/gm,""):n.replace(new RegExp("^ {1,"+o+"}","gm"),"")),n=E(n,"\n"),N!==C-1&&(s+="\n"),c=g||/\n\n(?!\s*$)/.test(s),N!==C-1&&(g="\n\n"===s.slice(-2),c||(c=g)),c&&(f.loose=!0),this.options.gfm&&(l=/^\[[ xX]\] /.test(n),u=undefined,l&&(u=" "!==n[1],n=n.replace(/^\[[ xX]\] +/,""))),f.items.push({type:"list_item",raw:s,task:l,checked:u,loose:c,text:n})}return f}}return e}(),t.html=function(){function e(e){var t=this.rules.block.html.exec(e);if(t)return{type:this.options.sanitize?"paragraph":"html",raw:t[0],pre:!this.options.sanitizer&&("pre"===t[1]||"script"===t[1]||"style"===t[1]),text:this.options.sanitize?this.options.sanitizer?this.options.sanitizer(t[0]):P(t[0]):t[0]}}return e}(),t.def=function(){function e(e){var t=this.rules.block.def.exec(e);if(t)return t[3]&&(t[3]=t[3].substring(1,t[3].length-1)),{type:"def",tag:t[1].toLowerCase().replace(/\s+/g," "),raw:t[0],href:t[2],title:t[3]}}return e}(),t.table=function(){function e(e){var t=this.rules.block.table.exec(e);if(t){var n={type:"table",header:j(t[1].replace(/^ *| *\| *$/g,"")),align:t[2].replace(/^ *|\| *$/g,"").split(/ *\| */),cells:t[3]?t[3].replace(/\n$/,"").split("\n"):[]};if(n.header.length===n.align.length){n.raw=t[0];var o,r=n.align.length;for(o=0;o<r;o++)/^ *-+: *$/.test(n.align[o])?n.align[o]="right":/^ *:-+: *$/.test(n.align[o])?n.align[o]="center":/^ *:-+ *$/.test(n.align[o])?n.align[o]="left":n.align[o]=null;for(r=n.cells.length,o=0;o<r;o++)n.cells[o]=j(n.cells[o].replace(/^ *\| *| *\| *$/g,""),n.header.length);return n}}}return e}(),t.lheading=function(){function e(e){var t=this.rules.block.lheading.exec(e);if(t)return{type:"heading",raw:t[0],depth:"="===t[2].charAt(0)?1:2,text:t[1]}}return e}(),t.paragraph=function(){function e(e){var t=this.rules.block.paragraph.exec(e);if(t)return{type:"paragraph",raw:t[0],text:"\n"===t[1].charAt(t[1].length-1)?t[1].slice(0,-1):t[1]}}return e}(),t.text=function(){function e(e){var t=this.rules.block.text.exec(e);if(t)return{type:"text",raw:t[0],text:t[0]}}return e}(),t.escape=function(){function e(e){var t=this.rules.inline.escape.exec(e);if(t)return{type:"escape",raw:t[0],text:P(t[1])}}return e}(),t.tag=function(){function e(e,t,n){var o=this.rules.inline.tag.exec(e);if(o)return!t&&/^<a /i.test(o[0])?t=!0:t&&/^<\/a>/i.test(o[0])&&(t=!1),!n&&/^<(pre|code|kbd|script)(\s|>)/i.test(o[0])?n=!0:n&&/^<\/(pre|code|kbd|script)(\s|>)/i.test(o[0])&&(n=!1),{type:this.options.sanitize?"text":"html",raw:o[0],inLink:t,inRawBlock:n,text:this.options.sanitize?this.options.sanitizer?this.options.sanitizer(o[0]):P(o[0]):o[0]}}return e}(),t.link=function(){function e(e){var t=this.rules.inline.link.exec(e);if(t){var n=t[2].trim();if(!this.options.pedantic&&/^</.test(n)){if(!/>$/.test(n))return;var o=E(n.slice(0,-1),"\\");if((n.length-o.length)%2==0)return}else{var r=O(t[2],"()");if(r>-1){var a=(0===t[0].indexOf("!")?5:4)+t[1].length+r;t[2]=t[2].substring(0,r),t[0]=t[0].substring(0,a).trim(),t[3]=""}}var i=t[2],c="";if(this.options.pedantic){var l=/^([^'"]*[^\s])\s+(['"])(.*)\2/.exec(i);l&&(i=l[1],c=l[3])}else c=t[3]?t[3].slice(1,-1):"";return i=i.trim(),/^</.test(i)&&(i=this.options.pedantic&&!/>$/.test(n)?i.slice(1):i.slice(1,-1)),F(t,{href:i?i.replace(this.rules.inline._escapes,"$1"):i,title:c?c.replace(this.rules.inline._escapes,"$1"):c},t[0])}}return e}(),t.reflink=function(){function e(e,t){var n;if((n=this.rules.inline.reflink.exec(e))||(n=this.rules.inline.nolink.exec(e))){var o=(n[2]||n[1]).replace(/\s+/g," ");if(!(o=t[o.toLowerCase()])||!o.href){var r=n[0].charAt(0);return{type:"text",raw:r,text:r}}return F(n,o,n[0])}}return e}(),t.emStrong=function(){function e(e,t,n){void 0===n&&(n="");var o=this.rules.inline.emStrong.lDelim.exec(e);if(o&&(!o[3]||!n.match(/(?:[0-9A-Za-z\xAA\xB2\xB3\xB5\xB9\xBA\xBC-\xBE\xC0-\xD6\xD8-\xF6\xF8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0370-\u0374\u0376\u0377\u037A-\u037D\u037F\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5\u03F7-\u0481\u048A-\u052F\u0531-\u0556\u0559\u0560-\u0588\u05D0-\u05EA\u05EF-\u05F2\u0620-\u064A\u0660-\u0669\u066E\u066F\u0671-\u06D3\u06D5\u06E5\u06E6\u06EE-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07C0-\u07EA\u07F4\u07F5\u07FA\u0800-\u0815\u081A\u0824\u0828\u0840-\u0858\u0860-\u086A\u08A0-\u08B4\u08B6-\u08C7\u0904-\u0939\u093D\u0950\u0958-\u0961\u0966-\u096F\u0971-\u0980\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BD\u09CE\u09DC\u09DD\u09DF-\u09E1\u09E6-\u09F1\u09F4-\u09F9\u09FC\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A59-\u0A5C\u0A5E\u0A66-\u0A6F\u0A72-\u0A74\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD\u0AD0\u0AE0\u0AE1\u0AE6-\u0AEF\u0AF9\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3D\u0B5C\u0B5D\u0B5F-\u0B61\u0B66-\u0B6F\u0B71-\u0B77\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BD0\u0BE6-\u0BF2\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C39\u0C3D\u0C58-\u0C5A\u0C60\u0C61\u0C66-\u0C6F\u0C78-\u0C7E\u0C80\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBD\u0CDE\u0CE0\u0CE1\u0CE6-\u0CEF\u0CF1\u0CF2\u0D04-\u0D0C\u0D0E-\u0D10\u0D12-\u0D3A\u0D3D\u0D4E\u0D54-\u0D56\u0D58-\u0D61\u0D66-\u0D78\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0DE6-\u0DEF\u0E01-\u0E30\u0E32\u0E33\u0E40-\u0E46\u0E50-\u0E59\u0E81\u0E82\u0E84\u0E86-\u0E8A\u0E8C-\u0EA3\u0EA5\u0EA7-\u0EB0\u0EB2\u0EB3\u0EBD\u0EC0-\u0EC4\u0EC6\u0ED0-\u0ED9\u0EDC-\u0EDF\u0F00\u0F20-\u0F33\u0F40-\u0F47\u0F49-\u0F6C\u0F88-\u0F8C\u1000-\u102A\u103F-\u1049\u1050-\u1055\u105A-\u105D\u1061\u1065\u1066\u106E-\u1070\u1075-\u1081\u108E\u1090-\u1099\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u1369-\u137C\u1380-\u138F\u13A0-\u13F5\u13F8-\u13FD\u1401-\u166C\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u16EE-\u16F8\u1700-\u170C\u170E-\u1711\u1720-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17D7\u17DC\u17E0-\u17E9\u17F0-\u17F9\u1810-\u1819\u1820-\u1878\u1880-\u1884\u1887-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191E\u1946-\u196D\u1970-\u1974\u1980-\u19AB\u19B0-\u19C9\u19D0-\u19DA\u1A00-\u1A16\u1A20-\u1A54\u1A80-\u1A89\u1A90-\u1A99\u1AA7\u1B05-\u1B33\u1B45-\u1B4B\u1B50-\u1B59\u1B83-\u1BA0\u1BAE-\u1BE5\u1C00-\u1C23\u1C40-\u1C49\u1C4D-\u1C7D\u1C80-\u1C88\u1C90-\u1CBA\u1CBD-\u1CBF\u1CE9-\u1CEC\u1CEE-\u1CF3\u1CF5\u1CF6\u1CFA\u1D00-\u1DBF\u1E00-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2070\u2071\u2074-\u2079\u207F-\u2089\u2090-\u209C\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2150-\u2189\u2460-\u249B\u24EA-\u24FF\u2776-\u2793\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CEE\u2CF2\u2CF3\u2CFD\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u2E2F\u3005-\u3007\u3021-\u3029\u3031-\u3035\u3038-\u303C\u3041-\u3096\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312F\u3131-\u318E\u3192-\u3195\u31A0-\u31BF\u31F0-\u31FF\u3220-\u3229\u3248-\u324F\u3251-\u325F\u3280-\u3289\u32B1-\u32BF\u3400-\u4DBF\u4E00-\u9FFC\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA62B\uA640-\uA66E\uA67F-\uA69D\uA6A0-\uA6EF\uA717-\uA71F\uA722-\uA788\uA78B-\uA7BF\uA7C2-\uA7CA\uA7F5-\uA801\uA803-\uA805\uA807-\uA80A\uA80C-\uA822\uA830-\uA835\uA840-\uA873\uA882-\uA8B3\uA8D0-\uA8D9\uA8F2-\uA8F7\uA8FB\uA8FD\uA8FE\uA900-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9CF-\uA9D9\uA9E0-\uA9E4\uA9E6-\uA9FE\uAA00-\uAA28\uAA40-\uAA42\uAA44-\uAA4B\uAA50-\uAA59\uAA60-\uAA76\uAA7A\uAA7E-\uAAAF\uAAB1\uAAB5\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAADD\uAAE0-\uAAEA\uAAF2-\uAAF4\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uAB30-\uAB5A\uAB5C-\uAB69\uAB70-\uABE2\uABF0-\uABF9\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC\uFF10-\uFF19\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC]|\uD800[\uDC00-\uDC0B\uDC0D-\uDC26\uDC28-\uDC3A\uDC3C\uDC3D\uDC3F-\uDC4D\uDC50-\uDC5D\uDC80-\uDCFA\uDD07-\uDD33\uDD40-\uDD78\uDD8A\uDD8B\uDE80-\uDE9C\uDEA0-\uDED0\uDEE1-\uDEFB\uDF00-\uDF23\uDF2D-\uDF4A\uDF50-\uDF75\uDF80-\uDF9D\uDFA0-\uDFC3\uDFC8-\uDFCF\uDFD1-\uDFD5]|\uD801[\uDC00-\uDC9D\uDCA0-\uDCA9\uDCB0-\uDCD3\uDCD8-\uDCFB\uDD00-\uDD27\uDD30-\uDD63\uDE00-\uDF36\uDF40-\uDF55\uDF60-\uDF67]|\uD802[\uDC00-\uDC05\uDC08\uDC0A-\uDC35\uDC37\uDC38\uDC3C\uDC3F-\uDC55\uDC58-\uDC76\uDC79-\uDC9E\uDCA7-\uDCAF\uDCE0-\uDCF2\uDCF4\uDCF5\uDCFB-\uDD1B\uDD20-\uDD39\uDD80-\uDDB7\uDDBC-\uDDCF\uDDD2-\uDE00\uDE10-\uDE13\uDE15-\uDE17\uDE19-\uDE35\uDE40-\uDE48\uDE60-\uDE7E\uDE80-\uDE9F\uDEC0-\uDEC7\uDEC9-\uDEE4\uDEEB-\uDEEF\uDF00-\uDF35\uDF40-\uDF55\uDF58-\uDF72\uDF78-\uDF91\uDFA9-\uDFAF]|\uD803[\uDC00-\uDC48\uDC80-\uDCB2\uDCC0-\uDCF2\uDCFA-\uDD23\uDD30-\uDD39\uDE60-\uDE7E\uDE80-\uDEA9\uDEB0\uDEB1\uDF00-\uDF27\uDF30-\uDF45\uDF51-\uDF54\uDFB0-\uDFCB\uDFE0-\uDFF6]|\uD804[\uDC03-\uDC37\uDC52-\uDC6F\uDC83-\uDCAF\uDCD0-\uDCE8\uDCF0-\uDCF9\uDD03-\uDD26\uDD36-\uDD3F\uDD44\uDD47\uDD50-\uDD72\uDD76\uDD83-\uDDB2\uDDC1-\uDDC4\uDDD0-\uDDDA\uDDDC\uDDE1-\uDDF4\uDE00-\uDE11\uDE13-\uDE2B\uDE80-\uDE86\uDE88\uDE8A-\uDE8D\uDE8F-\uDE9D\uDE9F-\uDEA8\uDEB0-\uDEDE\uDEF0-\uDEF9\uDF05-\uDF0C\uDF0F\uDF10\uDF13-\uDF28\uDF2A-\uDF30\uDF32\uDF33\uDF35-\uDF39\uDF3D\uDF50\uDF5D-\uDF61]|\uD805[\uDC00-\uDC34\uDC47-\uDC4A\uDC50-\uDC59\uDC5F-\uDC61\uDC80-\uDCAF\uDCC4\uDCC5\uDCC7\uDCD0-\uDCD9\uDD80-\uDDAE\uDDD8-\uDDDB\uDE00-\uDE2F\uDE44\uDE50-\uDE59\uDE80-\uDEAA\uDEB8\uDEC0-\uDEC9\uDF00-\uDF1A\uDF30-\uDF3B]|\uD806[\uDC00-\uDC2B\uDCA0-\uDCF2\uDCFF-\uDD06\uDD09\uDD0C-\uDD13\uDD15\uDD16\uDD18-\uDD2F\uDD3F\uDD41\uDD50-\uDD59\uDDA0-\uDDA7\uDDAA-\uDDD0\uDDE1\uDDE3\uDE00\uDE0B-\uDE32\uDE3A\uDE50\uDE5C-\uDE89\uDE9D\uDEC0-\uDEF8]|\uD807[\uDC00-\uDC08\uDC0A-\uDC2E\uDC40\uDC50-\uDC6C\uDC72-\uDC8F\uDD00-\uDD06\uDD08\uDD09\uDD0B-\uDD30\uDD46\uDD50-\uDD59\uDD60-\uDD65\uDD67\uDD68\uDD6A-\uDD89\uDD98\uDDA0-\uDDA9\uDEE0-\uDEF2\uDFB0\uDFC0-\uDFD4]|\uD808[\uDC00-\uDF99]|\uD809[\uDC00-\uDC6E\uDC80-\uDD43]|[\uD80C\uD81C-\uD820\uD822\uD840-\uD868\uD86A-\uD86C\uD86F-\uD872\uD874-\uD879\uD880-\uD883][\uDC00-\uDFFF]|\uD80D[\uDC00-\uDC2E]|\uD811[\uDC00-\uDE46]|\uD81A[\uDC00-\uDE38\uDE40-\uDE5E\uDE60-\uDE69\uDED0-\uDEED\uDF00-\uDF2F\uDF40-\uDF43\uDF50-\uDF59\uDF5B-\uDF61\uDF63-\uDF77\uDF7D-\uDF8F]|\uD81B[\uDE40-\uDE96\uDF00-\uDF4A\uDF50\uDF93-\uDF9F\uDFE0\uDFE1\uDFE3]|\uD821[\uDC00-\uDFF7]|\uD823[\uDC00-\uDCD5\uDD00-\uDD08]|\uD82C[\uDC00-\uDD1E\uDD50-\uDD52\uDD64-\uDD67\uDD70-\uDEFB]|\uD82F[\uDC00-\uDC6A\uDC70-\uDC7C\uDC80-\uDC88\uDC90-\uDC99]|\uD834[\uDEE0-\uDEF3\uDF60-\uDF78]|\uD835[\uDC00-\uDC54\uDC56-\uDC9C\uDC9E\uDC9F\uDCA2\uDCA5\uDCA6\uDCA9-\uDCAC\uDCAE-\uDCB9\uDCBB\uDCBD-\uDCC3\uDCC5-\uDD05\uDD07-\uDD0A\uDD0D-\uDD14\uDD16-\uDD1C\uDD1E-\uDD39\uDD3B-\uDD3E\uDD40-\uDD44\uDD46\uDD4A-\uDD50\uDD52-\uDEA5\uDEA8-\uDEC0\uDEC2-\uDEDA\uDEDC-\uDEFA\uDEFC-\uDF14\uDF16-\uDF34\uDF36-\uDF4E\uDF50-\uDF6E\uDF70-\uDF88\uDF8A-\uDFA8\uDFAA-\uDFC2\uDFC4-\uDFCB\uDFCE-\uDFFF]|\uD838[\uDD00-\uDD2C\uDD37-\uDD3D\uDD40-\uDD49\uDD4E\uDEC0-\uDEEB\uDEF0-\uDEF9]|\uD83A[\uDC00-\uDCC4\uDCC7-\uDCCF\uDD00-\uDD43\uDD4B\uDD50-\uDD59]|\uD83B[\uDC71-\uDCAB\uDCAD-\uDCAF\uDCB1-\uDCB4\uDD01-\uDD2D\uDD2F-\uDD3D\uDE00-\uDE03\uDE05-\uDE1F\uDE21\uDE22\uDE24\uDE27\uDE29-\uDE32\uDE34-\uDE37\uDE39\uDE3B\uDE42\uDE47\uDE49\uDE4B\uDE4D-\uDE4F\uDE51\uDE52\uDE54\uDE57\uDE59\uDE5B\uDE5D\uDE5F\uDE61\uDE62\uDE64\uDE67-\uDE6A\uDE6C-\uDE72\uDE74-\uDE77\uDE79-\uDE7C\uDE7E\uDE80-\uDE89\uDE8B-\uDE9B\uDEA1-\uDEA3\uDEA5-\uDEA9\uDEAB-\uDEBB]|\uD83C[\uDD00-\uDD0C]|\uD83E[\uDFF0-\uDFF9]|\uD869[\uDC00-\uDEDD\uDF00-\uDFFF]|\uD86D[\uDC00-\uDF34\uDF40-\uDFFF]|\uD86E[\uDC00-\uDC1D\uDC20-\uDFFF]|\uD873[\uDC00-\uDEA1\uDEB0-\uDFFF]|\uD87A[\uDC00-\uDFE0]|\uD87E[\uDC00-\uDE1D]|\uD884[\uDC00-\uDF4A])/))){var r=o[1]||o[2]||"";if(!r||r&&(""===n||this.rules.inline.punctuation.exec(n))){var a,i,c=o[0].length-1,l=c,u=0,d="*"===o[0][0]?this.rules.inline.emStrong.rDelimAst:this.rules.inline.emStrong.rDelimUnd;for(d.lastIndex=0,t=t.slice(-1*e.length+c);null!=(o=d.exec(t));)if(a=o[1]||o[2]||o[3]||o[4]||o[5]||o[6])if(i=a.length,o[3]||o[4])l+=i;else if(!((o[5]||o[6])&&c%3)||(c+i)%3){if(!((l-=i)>0))return i=Math.min(i,i+l+u),Math.min(c,i)%2?{type:"em",raw:e.slice(0,c+o.index+i+1),text:e.slice(1,c+o.index+i)}:{type:"strong",raw:e.slice(0,c+o.index+i+1),text:e.slice(2,c+o.index+i-1)}}else u+=i}}}return e}(),t.codespan=function(){function e(e){var t=this.rules.inline.code.exec(e);if(t){var n=t[2].replace(/\n/g," "),o=/[^ ]/.test(n),r=/^ /.test(n)&&/ $/.test(n);return o&&r&&(n=n.substring(1,n.length-1)),n=P(n,!0),{type:"codespan",raw:t[0],text:n}}}return e}(),t.br=function(){function e(e){var t=this.rules.inline.br.exec(e);if(t)return{type:"br",raw:t[0]}}return e}(),t.del=function(){function e(e){var t=this.rules.inline.del.exec(e);if(t)return{type:"del",raw:t[0],text:t[2]}}return e}(),t.autolink=function(){function e(e,t){var n,o,r=this.rules.inline.autolink.exec(e);if(r)return o="@"===r[2]?"mailto:"+(n=P(this.options.mangle?t(r[1]):r[1])):n=P(r[1]),{type:"link",raw:r[0],text:n,href:o,tokens:[{type:"text",raw:n,text:n}]}}return e}(),t.url=function(){function e(e,t){var n;if(n=this.rules.inline.url.exec(e)){var o,r;if("@"===n[2])r="mailto:"+(o=P(this.options.mangle?t(n[0]):n[0]));else{var a;do{a=n[0],n[0]=this.rules.inline._backpedal.exec(n[0])[0]}while(a!==n[0]);o=P(n[0]),r="www."===n[1]?"http://"+o:o}return{type:"link",raw:n[0],text:o,href:r,tokens:[{type:"text",raw:o,text:o}]}}}return e}(),t.inlineText=function(){function e(e,t,n){var o,r=this.rules.inline.text.exec(e);if(r)return o=t?this.options.sanitize?this.options.sanitizer?this.options.sanitizer(r[0]):P(r[0]):r[0]:P(this.options.smartypants?n(r[0]):r[0]),{type:"text",raw:r[0],text:o}}return e}(),e}(),W=T.noopTest,U=T.edit,H=T.merge,G={newline:/^(?: *(?:\n|$))+/,code:/^( {4}[^\n]+(?:\n(?: *(?:\n|$))*)?)+/,fences:/^ {0,3}(`{3,}(?=[^`\n]*\n)|~{3,})([^\n]*)\n(?:|([\s\S]*?)\n)(?: {0,3}\1[~`]* *(?:\n+|$)|$)/,hr:/^ {0,3}((?:- *){3,}|(?:_ *){3,}|(?:\* *){3,})(?:\n+|$)/,heading:/^ {0,3}(#{1,6})(?=\s|$)(.*)(?:\n+|$)/,blockquote:/^( {0,3}> ?(paragraph|[^\n]*)(?:\n|$))+/,list:/^( {0,3})(bull) [\s\S]+?(?:hr|def|\n{2,}(?! )(?! {0,3}bull )\n*|\s*$)/,html:"^ {0,3}(?:<(script|pre|style|textarea)[\\s>][\\s\\S]*?(?:</\\1>[^\\n]*\\n+|$)|comment[^\\n]*(\\n+|$)|<\\?[\\s\\S]*?(?:\\?>\\n*|$)|<![A-Z][\\s\\S]*?(?:>\\n*|$)|<!\\[CDATA\\[[\\s\\S]*?(?:\\]\\]>\\n*|$)|</?(tag)(?: +|\\n|/?>)[\\s\\S]*?(?:(?:\\n *)+\\n|$)|<(?!script|pre|style|textarea)([a-z][\\w-]*)(?:attribute)*? */?>(?=[ \\t]*(?:\\n|$))[\\s\\S]*?(?:(?:\\n *)+\\n|$)|</(?!script|pre|style|textarea)[a-z][\\w-]*\\s*>(?=[ \\t]*(?:\\n|$))[\\s\\S]*?(?:(?:\\n *)+\\n|$))",def:/^ {0,3}\[(label)\]: *\n? *<?([^\s>]+)>?(?:(?: +\n? *| *\n *)(title))? *(?:\n+|$)/,nptable:W,table:W,lheading:/^([^\n]+)\n {0,3}(=+|-+) *(?:\n+|$)/,_paragraph:/^([^\n]+(?:\n(?!hr|heading|lheading|blockquote|fences|list|html| +\n)[^\n]+)*)/,text:/^[^\n]+/,_label:/(?!\s*\])(?:\\[\[\]]|[^\[\]])+/,_title:/(?:"(?:\\"?|[^"\\])*"|'[^'\n]*(?:\n[^'\n]+)*\n?'|\([^()]*\))/};G.def=U(G.def).replace("label",G._label).replace("title",G._title).getRegex(),G.bullet=/(?:[*+-]|\d{1,9}[.)])/,G.item=/^( *)(bull) ?[^\n]*(?:\n(?! *bull ?)[^\n]*)*/,G.item=U(G.item,"gm").replace(/bull/g,G.bullet).getRegex(),G.listItemStart=U(/^( *)(bull) */).replace("bull",G.bullet).getRegex(),G.list=U(G.list).replace(/bull/g,G.bullet).replace("hr","\\n+(?=\\1?(?:(?:- *){3,}|(?:_ *){3,}|(?:\\* *){3,})(?:\\n+|$))").replace("def","\\n+(?="+G.def.source+")").getRegex(),G._tag="address|article|aside|base|basefont|blockquote|body|caption|center|col|colgroup|dd|details|dialog|dir|div|dl|dt|fieldset|figcaption|figure|footer|form|frame|frameset|h[1-6]|head|header|hr|html|iframe|legend|li|link|main|menu|menuitem|meta|nav|noframes|ol|optgroup|option|p|param|section|source|summary|table|tbody|td|tfoot|th|thead|title|tr|track|ul",G._comment=/<!--(?!-?>)[\s\S]*?(?:-->|$)/,G.html=U(G.html,"i").replace("comment",G._comment).replace("tag",G._tag).replace("attribute",/ +[a-zA-Z:_][\w.:-]*(?: *= *"[^"\n]*"| *= *'[^'\n]*'| *= *[^\s"'=<>`]+)?/).getRegex(),G.paragraph=U(G._paragraph).replace("hr",G.hr).replace("heading"," {0,3}#{1,6} ").replace("|lheading","").replace("blockquote"," {0,3}>").replace("fences"," {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace("list"," {0,3}(?:[*+-]|1[.)]) ").replace("html","</?(?:tag)(?: +|\\n|/?>)|<(?:script|pre|style|textarea|!--)").replace("tag",G._tag).getRegex(),G.blockquote=U(G.blockquote).replace("paragraph",G.paragraph).getRegex(),G.normal=H({},G),G.gfm=H({},G.normal,{nptable:"^ *([^|\\n ].*\\|.*)\\n {0,3}([-:]+ *\\|[-| :]*)(?:\\n((?:(?!\\n|hr|heading|blockquote|code|fences|list|html).*(?:\\n|$))*)\\n*|$)",table:"^ *\\|(.+)\\n {0,3}\\|?( *[-:]+[-| :]*)(?:\\n *((?:(?!\\n|hr|heading|blockquote|code|fences|list|html).*(?:\\n|$))*)\\n*|$)"}),G.gfm.nptable=U(G.gfm.nptable).replace("hr",G.hr).replace("heading"," {0,3}#{1,6} ").replace("blockquote"," {0,3}>").replace("code"," {4}[^\\n]").replace("fences"," {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace("list"," {0,3}(?:[*+-]|1[.)]) ").replace("html","</?(?:tag)(?: +|\\n|/?>)|<(?:script|pre|style|textarea|!--)").replace("tag",G._tag).getRegex(),G.gfm.table=U(G.gfm.table).replace("hr",G.hr).replace("heading"," {0,3}#{1,6} ").replace("blockquote"," {0,3}>").replace("code"," {4}[^\\n]").replace("fences"," {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace("list"," {0,3}(?:[*+-]|1[.)]) ").replace("html","</?(?:tag)(?: +|\\n|/?>)|<(?:script|pre|style|textarea|!--)").replace("tag",G._tag).getRegex(),G.pedantic=H({},G.normal,{html:U("^ *(?:comment *(?:\\n|\\s*$)|<(tag)[\\s\\S]+?</\\1> *(?:\\n{2,}|\\s*$)|<tag(?:\"[^\"]*\"|'[^']*'|\\s[^'\"/>\\s]*)*?/?> *(?:\\n{2,}|\\s*$))").replace("comment",G._comment).replace(/tag/g,"(?!(?:a|em|strong|small|s|cite|q|dfn|abbr|data|time|code|var|samp|kbd|sub|sup|i|b|u|mark|ruby|rt|rp|bdi|bdo|span|br|wbr|ins|del|img)\\b)\\w+(?!:|[^\\w\\s@]*@)\\b").getRegex(),def:/^ *\[([^\]]+)\]: *<?([^\s>]+)>?(?: +(["(][^\n]+[")]))? *(?:\n+|$)/,heading:/^(#{1,6})(.*)(?:\n+|$)/,fences:W,paragraph:U(G.normal._paragraph).replace("hr",G.hr).replace("heading"," *#{1,6} *[^\n]").replace("lheading",G.lheading).replace("blockquote"," {0,3}>").replace("|fences","").replace("|list","").replace("|html","").getRegex()});var Y={escape:/^\\([!"#$%&'()*+,\-./:;<=>?@\[\]\\^_`{|}~])/,autolink:/^<(scheme:[^\s\x00-\x1f<>]*|email)>/,url:W,tag:"^comment|^</[a-zA-Z][\\w:-]*\\s*>|^<[a-zA-Z][\\w-]*(?:attribute)*?\\s*/?>|^<\\?[\\s\\S]*?\\?>|^<![a-zA-Z]+\\s[\\s\\S]*?>|^<!\\[CDATA\\[[\\s\\S]*?\\]\\]>",link:/^!?\[(label)\]\(\s*(href)(?:\s+(title))?\s*\)/,reflink:/^!?\[(label)\]\[(?!\s*\])((?:\\[\[\]]?|[^\[\]\\])+)\]/,nolink:/^!?\[(?!\s*\])((?:\[[^\[\]]*\]|\\[\[\]]|[^\[\]])*)\](?:\[\])?/,reflinkSearch:"reflink|nolink(?!\\()",emStrong:{lDelim:/^(?:\*+(?:([punct_])|[^\s*]))|^_+(?:([punct*])|([^\s_]))/,rDelimAst:/\_\_[^_*]*?\*[^_*]*?\_\_|[punct_](\*+)(?=[\s]|$)|[^punct*_\s](\*+)(?=[punct_\s]|$)|[punct_\s](\*+)(?=[^punct*_\s])|[\s](\*+)(?=[punct_])|[punct_](\*+)(?=[punct_])|[^punct*_\s](\*+)(?=[^punct*_\s])/,rDelimUnd:/\*\*[^_*]*?\_[^_*]*?\*\*|[punct*](\_+)(?=[\s]|$)|[^punct*_\s](\_+)(?=[punct*\s]|$)|[punct*\s](\_+)(?=[^punct*_\s])|[\s](\_+)(?=[punct*])|[punct*](\_+)(?=[punct*])/},code:/^(`+)([^`]|[^`][\s\S]*?[^`])\1(?!`)/,br:/^( {2,}|\\)\n(?!\s*$)/,del:W,text:/^(`+|[^`])(?:(?= {2,}\n)|[\s\S]*?(?:(?=[\\<!\[`*_]|\b_|$)|[^ ](?= {2,}\n)))/,punctuation:/^([\spunctuation])/,_punctuation:"!\"#$%&'()+\\-.,/:;<=>?@\\[\\]`^{|}~"};Y.punctuation=U(Y.punctuation).replace(/punctuation/g,Y._punctuation).getRegex(),Y.blockSkip=/\[[^\]]*?\]\([^\)]*?\)|`[^`]*?`|<[^>]*?>/g,Y.escapedEmSt=/\\\*|\\_/g,Y._comment=U(G._comment).replace("(?:--\x3e|$)","--\x3e").getRegex(),Y.emStrong.lDelim=U(Y.emStrong.lDelim).replace(/punct/g,Y._punctuation).getRegex(),Y.emStrong.rDelimAst=U(Y.emStrong.rDelimAst,"g").replace(/punct/g,Y._punctuation).getRegex(),Y.emStrong.rDelimUnd=U(Y.emStrong.rDelimUnd,"g").replace(/punct/g,Y._punctuation).getRegex(),Y._escapes=/\\([!"#$%&'()*+,\-./:;<=>?@\[\]\\^_`{|}~])/g,Y._scheme=/[a-zA-Z][a-zA-Z0-9+.-]{1,31}/,Y._email=/[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+(@)[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)+(?![-_])/,Y.autolink=U(Y.autolink).replace("scheme",Y._scheme).replace("email",Y._email).getRegex(),Y._attribute=/\s+[a-zA-Z:_][\w.:-]*(?:\s*=\s*"[^"]*"|\s*=\s*'[^']*'|\s*=\s*[^\s"'=<>`]+)?/,Y.tag=U(Y.tag).replace("comment",Y._comment).replace("attribute",Y._attribute).getRegex(),Y._label=/(?:\[(?:\\.|[^\[\]\\])*\]|\\.|`[^`]*`|[^\[\]\\`])*?/,Y._href=/<(?:\\.|[^\n<>\\])+>|[^\s\x00-\x1f]*/,Y._title=/"(?:\\"?|[^"\\])*"|'(?:\\'?|[^'\\])*'|\((?:\\\)?|[^)\\])*\)/,Y.link=U(Y.link).replace("label",Y._label).replace("href",Y._href).replace("title",Y._title).getRegex(),Y.reflink=U(Y.reflink).replace("label",Y._label).getRegex(),Y.reflinkSearch=U(Y.reflinkSearch,"g").replace("reflink",Y.reflink).replace("nolink",Y.nolink).getRegex(),Y.normal=H({},Y),Y.pedantic=H({},Y.normal,{strong:{start:/^__|\*\*/,middle:/^__(?=\S)([\s\S]*?\S)__(?!_)|^\*\*(?=\S)([\s\S]*?\S)\*\*(?!\*)/,endAst:/\*\*(?!\*)/g,endUnd:/__(?!_)/g},em:{start:/^_|\*/,middle:/^()\*(?=\S)([\s\S]*?\S)\*(?!\*)|^_(?=\S)([\s\S]*?\S)_(?!_)/,endAst:/\*(?!\*)/g,endUnd:/_(?!_)/g},link:U(/^!?\[(label)\]\((.*?)\)/).replace("label",Y._label).getRegex(),reflink:U(/^!?\[(label)\]\s*\[([^\]]*)\]/).replace("label",Y._label).getRegex()}),Y.gfm=H({},Y.normal,{escape:U(Y.escape).replace("])","~|])").getRegex(),_extended_email:/[A-Za-z0-9._+-]+(@)[a-zA-Z0-9-_]+(?:\.[a-zA-Z0-9-_]*[a-zA-Z0-9])+(?![-_])/,url:/^((?:ftp|https?):\/\/|www\.)(?:[a-zA-Z0-9\-]+\.?)+[^\s<]*|^email/,_backpedal:/(?:[^?!.,:;*_~()&]+|\([^)]*\)|&(?![a-zA-Z0-9]+;$)|[?!.,:;*_~)]+(?!$))+/,del:/^(~~?)(?=[^\s~])([\s\S]*?[^\s~])\1(?=[^~]|$)/,text:/^([`~]+|[^`~])(?:(?= {2,}\n)|(?=[a-zA-Z0-9.!#$%&'*+\/=?_`{\|}~-]+@)|[\s\S]*?(?:(?=[\\<!\[`*~_]|\b_|https?:\/\/|ftp:\/\/|www\.|$)|[^ ](?= {2,}\n)|[^a-zA-Z0-9.!#$%&'*+\/=?_`{\|}~-](?=[a-zA-Z0-9.!#$%&'*+\/=?_`{\|}~-]+@)))/}),Y.gfm.url=U(Y.gfm.url,"i").replace("email",Y.gfm._extended_email).getRegex(),Y.breaks=H({},Y.gfm,{br:U(Y.br).replace("{2,}","*").getRegex(),text:U(Y.gfm.text).replace("\\b_","\\b_| {2,}\\n").replace(/\{2,\}/g,"*").getRegex()});var Z={block:G,inline:Y},K=z,Q=a.exports.defaults,J=Z.block,X=Z.inline,q=T.repeatString;function $(e){return e.replace(/---/g,"\u2014").replace(/--/g,"\u2013").replace(/(^|[-\u2014/(\[{"\s])'/g,"$1\u2018").replace(/'/g,"\u2019").replace(/(^|[-\u2014/(\[{\u2018\s])"/g,"$1\u201c").replace(/"/g,"\u201d").replace(/\.{3}/g,"\u2026")}function ee(e){var t,n,o="",r=e.length;for(t=0;t<r;t++)n=e.charCodeAt(t),Math.random()>.5&&(n="x"+n.toString(16)),o+="&#"+n+";";return o}var te=function(){function e(e){this.tokens=[],this.tokens.links=Object.create(null),this.options=e||Q,this.options.tokenizer=this.options.tokenizer||new K,this.tokenizer=this.options.tokenizer,this.tokenizer.options=this.options;var t={block:J.normal,inline:X.normal};this.options.pedantic?(t.block=J.pedantic,t.inline=X.pedantic):this.options.gfm&&(t.block=J.gfm,this.options.breaks?t.inline=X.breaks:t.inline=X.gfm),this.tokenizer.rules=t}e.lex=function(){function t(t,n){return new e(n).lex(t)}return t}(),e.lexInline=function(){function t(t,n){return new e(n).inlineTokens(t)}return t}();var n=e.prototype;return n.lex=function(){function e(e){return e=e.replace(/\r\n|\r/g,"\n").replace(/\t/g," "),this.blockTokens(e,this.tokens,!0),this.inline(this.tokens),this.tokens}return e}(),n.blockTokens=function(){function e(e,t,n){var o,r,a,i,c,l,u=this;for(void 0===t&&(t=[]),void 0===n&&(n=!0),this.options.pedantic&&(e=e.replace(/^ +$/gm,""));e;)if(!(this.options.extensions&&this.options.extensions.block&&this.options.extensions.block.some((function(n){return!!(o=n.call(u,e,t))&&(e=e.substring(o.raw.length),t.push(o),!0)}))))if(o=this.tokenizer.space(e))e=e.substring(o.raw.length),o.type&&t.push(o);else if(o=this.tokenizer.code(e))e=e.substring(o.raw.length),(i=t[t.length-1])&&"paragraph"===i.type?(i.raw+="\n"+o.raw,i.text+="\n"+o.text):t.push(o);else if(o=this.tokenizer.fences(e))e=e.substring(o.raw.length),t.push(o);else if(o=this.tokenizer.heading(e))e=e.substring(o.raw.length),t.push(o);else if(o=this.tokenizer.nptable(e))e=e.substring(o.raw.length),t.push(o);else if(o=this.tokenizer.hr(e))e=e.substring(o.raw.length),t.push(o);else if(o=this.tokenizer.blockquote(e))e=e.substring(o.raw.length),o.tokens=this.blockTokens(o.text,[],n),t.push(o);else if(o=this.tokenizer.list(e)){for(e=e.substring(o.raw.length),a=o.items.length,r=0;r<a;r++)o.items[r].tokens=this.blockTokens(o.items[r].text,[],!1);t.push(o)}else if(o=this.tokenizer.html(e))e=e.substring(o.raw.length),t.push(o);else if(n&&(o=this.tokenizer.def(e)))e=e.substring(o.raw.length),this.tokens.links[o.tag]||(this.tokens.links[o.tag]={href:o.href,title:o.title});else if(o=this.tokenizer.table(e))e=e.substring(o.raw.length),t.push(o);else if(o=this.tokenizer.lheading(e))e=e.substring(o.raw.length),t.push(o);else if(c=e,this.options.extensions&&this.options.extensions.startBlock&&function(){var t=Infinity,n=e.slice(1),o=void 0;u.options.extensions.startBlock.forEach((function(e){"number"==typeof(o=e.call(this,n))&&o>=0&&(t=Math.min(t,o))})),t<Infinity&&t>=0&&(c=e.substring(0,t+1))}(),n&&(o=this.tokenizer.paragraph(c)))i=t[t.length-1],l&&"paragraph"===i.type?(i.raw+="\n"+o.raw,i.text+="\n"+o.text):t.push(o),l=c.length!==e.length,e=e.substring(o.raw.length);else if(o=this.tokenizer.text(e))e=e.substring(o.raw.length),(i=t[t.length-1])&&"text"===i.type?(i.raw+="\n"+o.raw,i.text+="\n"+o.text):t.push(o);else if(e){var d="Infinite loop on byte: "+e.charCodeAt(0);if(this.options.silent)break;throw new Error(d)}return t}return e}(),n.inline=function(){function e(e){var t,n,o,r,a,i,c=e.length;for(t=0;t<c;t++)switch((i=e[t]).type){case"paragraph":case"text":case"heading":i.tokens=[],this.inlineTokens(i.text,i.tokens);break;case"table":for(i.tokens={header:[],cells:[]},r=i.header.length,n=0;n<r;n++)i.tokens.header[n]=[],this.inlineTokens(i.header[n],i.tokens.header[n]);for(r=i.cells.length,n=0;n<r;n++)for(a=i.cells[n],i.tokens.cells[n]=[],o=0;o<a.length;o++)i.tokens.cells[n][o]=[],this.inlineTokens(a[o],i.tokens.cells[n][o]);break;case"blockquote":this.inline(i.tokens);break;case"list":for(r=i.items.length,n=0;n<r;n++)this.inline(i.items[n].tokens)}return e}return e}(),n.inlineTokens=function(){function e(e,t,n,o){var r,a,i,c=this;void 0===t&&(t=[]),void 0===n&&(n=!1),void 0===o&&(o=!1);var l,u,d,s=e;if(this.tokens.links){var p=Object.keys(this.tokens.links);if(p.length>0)for(;null!=(l=this.tokenizer.rules.inline.reflinkSearch.exec(s));)p.includes(l[0].slice(l[0].lastIndexOf("[")+1,-1))&&(s=s.slice(0,l.index)+"["+q("a",l[0].length-2)+"]"+s.slice(this.tokenizer.rules.inline.reflinkSearch.lastIndex))}for(;null!=(l=this.tokenizer.rules.inline.blockSkip.exec(s));)s=s.slice(0,l.index)+"["+q("a",l[0].length-2)+"]"+s.slice(this.tokenizer.rules.inline.blockSkip.lastIndex);for(;null!=(l=this.tokenizer.rules.inline.escapedEmSt.exec(s));)s=s.slice(0,l.index)+"++"+s.slice(this.tokenizer.rules.inline.escapedEmSt.lastIndex);for(;e;)if(u||(d=""),u=!1,!(this.options.extensions&&this.options.extensions.inline&&this.options.extensions.inline.some((function(n){return!!(r=n.call(c,e,t))&&(e=e.substring(r.raw.length),t.push(r),!0)}))))if(r=this.tokenizer.escape(e))e=e.substring(r.raw.length),t.push(r);else if(r=this.tokenizer.tag(e,n,o))e=e.substring(r.raw.length),n=r.inLink,o=r.inRawBlock,(a=t[t.length-1])&&"text"===r.type&&"text"===a.type?(a.raw+=r.raw,a.text+=r.text):t.push(r);else if(r=this.tokenizer.link(e))e=e.substring(r.raw.length),"link"===r.type&&(r.tokens=this.inlineTokens(r.text,[],!0,o)),t.push(r);else if(r=this.tokenizer.reflink(e,this.tokens.links))e=e.substring(r.raw.length),a=t[t.length-1],"link"===r.type?(r.tokens=this.inlineTokens(r.text,[],!0,o),t.push(r)):a&&"text"===r.type&&"text"===a.type?(a.raw+=r.raw,a.text+=r.text):t.push(r);else if(r=this.tokenizer.emStrong(e,s,d))e=e.substring(r.raw.length),r.tokens=this.inlineTokens(r.text,[],n,o),t.push(r);else if(r=this.tokenizer.codespan(e))e=e.substring(r.raw.length),t.push(r);else if(r=this.tokenizer.br(e))e=e.substring(r.raw.length),t.push(r);else if(r=this.tokenizer.del(e))e=e.substring(r.raw.length),r.tokens=this.inlineTokens(r.text,[],n,o),t.push(r);else if(r=this.tokenizer.autolink(e,ee))e=e.substring(r.raw.length),t.push(r);else if(n||!(r=this.tokenizer.url(e,ee))){if(i=e,this.options.extensions&&this.options.extensions.startInline&&function(){var t=Infinity,n=e.slice(1),o=void 0;c.options.extensions.startInline.forEach((function(e){"number"==typeof(o=e.call(this,n))&&o>=0&&(t=Math.min(t,o))})),t<Infinity&&t>=0&&(i=e.substring(0,t+1))}(),r=this.tokenizer.inlineText(i,o,$))e=e.substring(r.raw.length),"_"!==r.raw.slice(-1)&&(d=r.raw.slice(-1)),u=!0,(a=t[t.length-1])&&"text"===a.type?(a.raw+=r.raw,a.text+=r.text):t.push(r);else if(e){var m="Infinite loop on byte: "+e.charCodeAt(0);if(this.options.silent)break;throw new Error(m)}}else e=e.substring(r.raw.length),t.push(r);return t}return e}(),t(e,null,[{key:"rules",get:function(){function e(){return{block:J,inline:X}}return e}()}]),e}(),ne=a.exports.defaults,oe=T.cleanUrl,re=T.escape,ae=function(){function e(e){this.options=e||ne}var t=e.prototype;return t.code=function(){function e(e,t,n){var o=(t||"").match(/\S*/)[0];if(this.options.highlight){var r=this.options.highlight(e,o);null!=r&&r!==e&&(n=!0,e=r)}return e=e.replace(/\n$/,"")+"\n",o?'<pre><code class="'+this.options.langPrefix+re(o,!0)+'">'+(n?e:re(e,!0))+"</code></pre>\n":"<pre><code>"+(n?e:re(e,!0))+"</code></pre>\n"}return e}(),t.blockquote=function(){function e(e){return"<blockquote>\n"+e+"</blockquote>\n"}return e}(),t.html=function(){function e(e){return e}return e}(),t.heading=function(){function e(e,t,n,o){return this.options.headerIds?"<h"+t+' id="'+this.options.headerPrefix+o.slug(n)+'">'+e+"</h"+t+">\n":"<h"+t+">"+e+"</h"+t+">\n"}return e}(),t.hr=function(){function e(){return this.options.xhtml?"<hr/>\n":"<hr>\n"}return e}(),t.list=function(){function e(e,t,n){var o=t?"ol":"ul";return"<"+o+(t&&1!==n?' start="'+n+'"':"")+">\n"+e+"</"+o+">\n"}return e}(),t.listitem=function(){function e(e){return"<li>"+e+"</li>\n"}return e}(),t.checkbox=function(){function e(e){return"<input "+(e?'checked="" ':"")+'disabled="" type="checkbox"'+(this.options.xhtml?" /":"")+"> "}return e}(),t.paragraph=function(){function e(e){return"<p>"+e+"</p>\n"}return e}(),t.table=function(){function e(e,t){return t&&(t="<tbody>"+t+"</tbody>"),"<table>\n<thead>\n"+e+"</thead>\n"+t+"</table>\n"}return e}(),t.tablerow=function(){function e(e){return"<tr>\n"+e+"</tr>\n"}return e}(),t.tablecell=function(){function e(e,t){var n=t.header?"th":"td";return(t.align?"<"+n+' align="'+t.align+'">':"<"+n+">")+e+"</"+n+">\n"}return e}(),t.strong=function(){function e(e){return"<strong>"+e+"</strong>"}return e}(),t.em=function(){function e(e){return"<em>"+e+"</em>"}return e}(),t.codespan=function(){function e(e){return"<code>"+e+"</code>"}return e}(),t.br=function(){function e(){return this.options.xhtml?"<br/>":"<br>"}return e}(),t.del=function(){function e(e){return"<del>"+e+"</del>"}return e}(),t.link=function(){function e(e,t,n){if(null===(e=oe(this.options.sanitize,this.options.baseUrl,e)))return n;var o='<a href="'+re(e)+'"';return t&&(o+=' title="'+t+'"'),o+=">"+n+"</a>"}return e}(),t.image=function(){function e(e,t,n){if(null===(e=oe(this.options.sanitize,this.options.baseUrl,e)))return n;var o='<img src="'+e+'" alt="'+n+'"';return t&&(o+=' title="'+t+'"'),o+=this.options.xhtml?"/>":">"}return e}(),t.text=function(){function e(e){return e}return e}(),e}(),ie=function(){function e(){}var t=e.prototype;return t.strong=function(){function e(e){return e}return e}(),t.em=function(){function e(e){return e}return e}(),t.codespan=function(){function e(e){return e}return e}(),t.del=function(){function e(e){return e}return e}(),t.html=function(){function e(e){return e}return e}(),t.text=function(){function e(e){return e}return e}(),t.link=function(){function e(e,t,n){return""+n}return e}(),t.image=function(){function e(e,t,n){return""+n}return e}(),t.br=function(){function e(){return""}return e}(),e}(),ce=function(){function e(){this.seen={}}var t=e.prototype;return t.serialize=function(){function e(e){return e.toLowerCase().trim().replace(/<[!\/a-z].*?>/gi,"").replace(/[\u2000-\u206F\u2E00-\u2E7F\\'!"#$%&()*+,./:;<=>?@[\]^`{|}~]/g,"").replace(/\s/g,"-")}return e}(),t.getNextSafeSlug=function(){function e(e,t){var n=e,o=0;if(this.seen.hasOwnProperty(n)){o=this.seen[e];do{n=e+"-"+ ++o}while(this.seen.hasOwnProperty(n))}return t||(this.seen[e]=o,this.seen[n]=0),n}return e}(),t.slug=function(){function e(e,t){void 0===t&&(t={});var n=this.serialize(e);return this.getNextSafeSlug(n,t.dryrun)}return e}(),e}(),le=ae,ue=ie,de=ce,se=a.exports.defaults,pe=T.unescape,me=te,fe=function(){function e(e){this.options=e||se,this.options.renderer=this.options.renderer||new le,this.renderer=this.options.renderer,this.renderer.options=this.options,this.textRenderer=new ue,this.slugger=new de}e.parse=function(){function t(t,n){return new e(n).parse(t)}return t}(),e.parseInline=function(){function t(t,n){return new e(n).parseInline(t)}return t}();var t=e.prototype;return t.parse=function(){function e(e,t){void 0===t&&(t=!0);var n,o,r,a,i,c,l,u,d,s,p,m,f,h,g,C,N,v,b,V="",y=e.length;for(n=0;n<y;n++)if(s=e[n],!(this.options.extensions&&this.options.extensions.renderers&&this.options.extensions.renderers[s.type])||!1===(b=this.options.extensions.renderers[s.type].call(this,s))&&["space","hr","heading","code","table","blockquote","list","html","paragraph","text"].includes(s.type))switch(s.type){case"space":continue;case"hr":V+=this.renderer.hr();continue;case"heading":V+=this.renderer.heading(this.parseInline(s.tokens),s.depth,pe(this.parseInline(s.tokens,this.textRenderer)),this.slugger);continue;case"code":V+=this.renderer.code(s.text,s.lang,s.escaped);continue;case"table":for(u="",l="",a=s.header.length,o=0;o<a;o++)l+=this.renderer.tablecell(this.parseInline(s.tokens.header[o]),{header:!0,align:s.align[o]});for(u+=this.renderer.tablerow(l),d="",a=s.cells.length,o=0;o<a;o++){for(l="",i=(c=s.tokens.cells[o]).length,r=0;r<i;r++)l+=this.renderer.tablecell(this.parseInline(c[r]),{header:!1,align:s.align[r]});d+=this.renderer.tablerow(l)}V+=this.renderer.table(u,d);continue;case"blockquote":d=this.parse(s.tokens),V+=this.renderer.blockquote(d);continue;case"list":for(p=s.ordered,m=s.start,f=s.loose,a=s.items.length,d="",o=0;o<a;o++)C=(g=s.items[o]).checked,N=g.task,h="",g.task&&(v=this.renderer.checkbox(C),f?g.tokens.length>0&&"text"===g.tokens[0].type?(g.tokens[0].text=v+" "+g.tokens[0].text,g.tokens[0].tokens&&g.tokens[0].tokens.length>0&&"text"===g.tokens[0].tokens[0].type&&(g.tokens[0].tokens[0].text=v+" "+g.tokens[0].tokens[0].text)):g.tokens.unshift({type:"text",text:v}):h+=v),h+=this.parse(g.tokens,f),d+=this.renderer.listitem(h,N,C);V+=this.renderer.list(d,p,m);continue;case"html":V+=this.renderer.html(s.text);continue;case"paragraph":V+=this.renderer.paragraph(this.parseInline(s.tokens));continue;case"text":for(d=s.tokens?this.parseInline(s.tokens):s.text;n+1<y&&"text"===e[n+1].type;)d+="\n"+((s=e[++n]).tokens?this.parseInline(s.tokens):s.text);V+=t?this.renderer.paragraph(d):d;continue;default:var x='Token with "'+s.type+'" type was not found.';if(this.options.silent)return;throw new Error(x)}else V+=b||"";return V}return e}(),t.parseInline=function(){function e(e,t){t=t||this.renderer;var n,o,r,a="",i=e.length;for(n=0;n<i;n++)if(o=e[n],!(this.options.extensions&&this.options.extensions.renderers&&this.options.extensions.renderers[o.type])||!1===(r=this.options.extensions.renderers[o.type].call(this,o))&&["escape","html","link","image","strong","em","codespan","br","del","text"].includes(o.type))switch(o.type){case"escape":case"text":a+=t.text(o.text);break;case"html":a+=t.html(o.text);break;case"link":a+=t.link(o.href,o.title,this.parseInline(o.tokens,t));break;case"image":a+=t.image(o.href,o.title,o.text);break;case"strong":a+=t.strong(this.parseInline(o.tokens,t));break;case"em":a+=t.em(this.parseInline(o.tokens,t));break;case"codespan":a+=t.codespan(o.text);break;case"br":a+=t.br();break;case"del":a+=t.del(this.parseInline(o.tokens,t));break;default:var c='Token with "'+o.type+'" type was not found.';if(this.options.silent)return;throw new Error(c)}else a+=r||"";return a}return e}(),e}(),he=z,ge=ae,Ce=ie,Ne=ce,ve=T.merge,be=T.checkSanitizeDeprecation,Ve=T.escape,ye=a.exports.getDefaults,xe=a.exports.changeDefaults,Ie=a.exports.defaults;function ke(e,t,n){if(null==e)throw new Error("marked(): input parameter is undefined or null");if("string"!=typeof e)throw new Error("marked(): input parameter is of type "+Object.prototype.toString.call(e)+", string expected");if("function"==typeof t&&(n=t,t=null),t=ve({},ke.defaults,t||{}),be(t),n){var o,r=t.highlight;try{o=me.lex(e,t)}catch(l){return n(l)}var a=function(){function e(e){var a;if(!e)try{t.walkTokens&&ke.walkTokens(o,t.walkTokens),a=fe.parse(o,t)}catch(l){e=l}return t.highlight=r,e?n(e):n(null,a)}return e}();if(!r||r.length<3)return a();if(delete t.highlight,!o.length)return a();var i=0;return ke.walkTokens(o,(function(e){"code"===e.type&&(i++,setTimeout((function(){r(e.text,e.lang,(function(t,n){if(t)return a(t);null!=n&&n!==e.text&&(e.text=n,e.escaped=!0),0==--i&&a()}))}),0))})),void(0===i&&a())}try{var c=me.lex(e,t);return t.walkTokens&&ke.walkTokens(c,t.walkTokens),fe.parse(c,t)}catch(l){if(l.message+="\nPlease report this to https://github.com/markedjs/marked.",t.silent)return"<p>An error occurred:</p><pre>"+Ve(l.message+"",!0)+"</pre>";throw l}}return ke.options=ke.setOptions=function(e){return ve(ke.defaults,e),xe(ke.defaults),ke},ke.getDefaults=ye,ke.defaults=Ie,ke.use=function(){for(var e=this,t=arguments.length,n=new Array(t),o=0;o<t;o++)n[o]=arguments[o];var r,a=ve.apply(void 0,[{}].concat(n)),i=ke.defaults.extensions||{renderers:{},childTokens:{}};n.forEach((function(t){if(t.extensions&&(r=!0,t.extensions.forEach((function(e){if(!e.name)throw new Error("extension name required");if(e.renderer){var t=i.renderers?i.renderers[e.name]:null;i.renderers[e.name]=t?function(){for(var n=arguments.length,o=new Array(n),r=0;r<n;r++)o[r]=arguments[r];var a=e.renderer.apply(this,o);return!1===a&&(a=t.apply(this,o)),a}:e.renderer}if(e.tokenizer){if(!e.level||"block"!==e.level&&"inline"!==e.level)throw new Error("extension level must be 'block' or 'inline'");i[e.level]?i[e.level].unshift(e.tokenizer):i[e.level]=[e.tokenizer],e.start&&("block"===e.level?i.startBlock?i.startBlock.push(e.start):i.startBlock=[e.start]:"inline"===e.level&&(i.startInline?i.startInline.push(e.start):i.startInline=[e.start]))}e.childTokens&&(i.childTokens[e.name]=e.childTokens)}))),t.renderer&&function(){var e=ke.defaults.renderer||new ge,n=function(){function n(n){var o=e[n];e[n]=function(){for(var r=arguments.length,a=new Array(r),i=0;i<r;i++)a[i]=arguments[i];var c=t.renderer[n].apply(e,a);return!1===c&&(c=o.apply(e,a)),c}}return n}();for(var o in t.renderer)n(o);a.renderer=e}(),t.tokenizer&&function(){var e=ke.defaults.tokenizer||new he,n=function(){function n(n){var o=e[n];e[n]=function(){for(var r=arguments.length,a=new Array(r),i=0;i<r;i++)a[i]=arguments[i];var c=t.tokenizer[n].apply(e,a);return!1===c&&(c=o.apply(e,a)),c}}return n}();for(var o in t.tokenizer)n(o);a.tokenizer=e}(),t.walkTokens){var n=ke.defaults.walkTokens;a.walkTokens=function(o){t.walkTokens.call(e,o),n&&n(o)}}r&&(a.extensions=i),ke.setOptions(a)}))},ke.walkTokens=function(e,t){for(var n,o=function(){function e(){var e=n.value;switch(t(e),e.type){case"table":for(var o,a=r(e.tokens.header);!(o=a()).done;){var i=o.value;ke.walkTokens(i,t)}for(var c,l=r(e.tokens.cells);!(c=l()).done;)for(var u,d=r(c.value);!(u=d()).done;){var s=u.value;ke.walkTokens(s,t)}break;case"list":ke.walkTokens(e.items,t);break;default:ke.defaults.extensions&&ke.defaults.extensions.childTokens&&ke.defaults.extensions.childTokens[e.type]?ke.defaults.extensions.childTokens[e.type].forEach((function(n){ke.walkTokens(e[n],t)})):e.tokens&&ke.walkTokens(e.tokens,t)}}return e}(),a=r(e);!(n=a()).done;)o()},ke.parseInline=function(e,t){if(null==e)throw new Error("marked.parseInline(): input parameter is undefined or null");if("string"!=typeof e)throw new Error("marked.parseInline(): input parameter is of type "+Object.prototype.toString.call(e)+", string expected");t=ve({},ke.defaults,t||{}),be(t);try{var n=me.lexInline(e,t);return t.walkTokens&&ke.walkTokens(n,t.walkTokens),fe.parseInline(n,t)}catch(o){if(o.message+="\nPlease report this to https://github.com/markedjs/marked.",t.silent)return"<p>An error occurred:</p><pre>"+Ve(o.message+"",!0)+"</pre>";throw o}},ke.Parser=fe,ke.parser=fe.parse,ke.Renderer=ge,ke.TextRenderer=Ce,ke.Lexer=me,ke.lexer=me.lex,ke.Tokenizer=he,ke.Slugger=Ne,ke.parse=ke,ke}()},69838:function(e){"use strict";var t=function(e){var t,n=Object.prototype,o=n.hasOwnProperty,r="function"==typeof Symbol?Symbol:{},a=r.iterator||"@@iterator",i=r.asyncIterator||"@@asyncIterator",c=r.toStringTag||"@@toStringTag";function l(e,t,n){return Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}),e[t]}try{l({},"")}catch(B){l=function(e,t,n){return e[t]=n}}function u(e,t,n,o){var r=t&&t.prototype instanceof g?t:g,a=Object.create(r.prototype),i=new _(o||[]);return a._invoke=function(e,t,n){var o=s;return function(){function r(r,a){if(o===m)throw new Error("Generator is already running");if(o===f){if("throw"===r)throw a;return D()}for(n.method=r,n.arg=a;;){var i=n.delegate;if(i){var c=k(i,n);if(c){if(c===h)continue;return c}}if("next"===n.method)n.sent=n._sent=n.arg;else if("throw"===n.method){if(o===s)throw o=f,n.arg;n.dispatchException(n.arg)}else"return"===n.method&&n.abrupt("return",n.arg);o=m;var l=d(e,t,n);if("normal"===l.type){if(o=n.done?f:p,l.arg===h)continue;return{value:l.arg,done:n.done}}"throw"===l.type&&(o=f,n.method="throw",n.arg=l.arg)}}return r}()}(e,n,i),a}function d(e,t,n){try{return{type:"normal",arg:e.call(t,n)}}catch(B){return{type:"throw",arg:B}}}e.wrap=u;var s="suspendedStart",p="suspendedYield",m="executing",f="completed",h={};function g(){}function C(){}function N(){}var v={};l(v,a,(function(){return this}));var b=Object.getPrototypeOf,V=b&&b(b(M([])));V&&V!==n&&o.call(V,a)&&(v=V);var y=N.prototype=g.prototype=Object.create(v);function x(e){["next","throw","return"].forEach((function(t){l(e,t,(function(e){return this._invoke(t,e)}))}))}function I(e,t){function n(r,a,i,c){var l=d(e[r],e,a);if("throw"!==l.type){var u=l.arg,s=u.value;return s&&"object"==typeof s&&o.call(s,"__await")?t.resolve(s.__await).then((function(e){n("next",e,i,c)}),(function(e){n("throw",e,i,c)})):t.resolve(s).then((function(e){u.value=e,i(u)}),(function(e){return n("throw",e,i,c)}))}c(l.arg)}var r;this._invoke=function(e,o){function a(){return new t((function(t,r){n(e,o,t,r)}))}return r=r?r.then(a,a):a()}}function k(e,n){var o=e.iterator[n.method];if(o===t){if(n.delegate=null,"throw"===n.method){if(e.iterator["return"]&&(n.method="return",n.arg=t,k(e,n),"throw"===n.method))return h;n.method="throw",n.arg=new TypeError("The iterator does not provide a 'throw' method")}return h}var r=d(o,e.iterator,n.arg);if("throw"===r.type)return n.method="throw",n.arg=r.arg,n.delegate=null,h;var a=r.arg;return a?a.done?(n[e.resultName]=a.value,n.next=e.nextLoc,"return"!==n.method&&(n.method="next",n.arg=t),n.delegate=null,h):a:(n.method="throw",n.arg=new TypeError("iterator result is not an object"),n.delegate=null,h)}function w(e){var t={tryLoc:e[0]};1 in e&&(t.catchLoc=e[1]),2 in e&&(t.finallyLoc=e[2],t.afterLoc=e[3]),this.tryEntries.push(t)}function S(e){var t=e.completion||{};t.type="normal",delete t.arg,e.completion=t}function _(e){this.tryEntries=[{tryLoc:"root"}],e.forEach(w,this),this.reset(!0)}function M(e){if(e){var n=e[a];if(n)return n.call(e);if("function"==typeof e.next)return e;if(!isNaN(e.length)){var r=-1,i=function n(){for(;++r<e.length;)if(o.call(e,r))return n.value=e[r],n.done=!1,n;return n.value=t,n.done=!0,n};return i.next=i}}return{next:D}}function D(){return{value:t,done:!0}}return C.prototype=N,l(y,"constructor",N),l(N,"constructor",C),C.displayName=l(N,c,"GeneratorFunction"),e.isGeneratorFunction=function(e){var t="function"==typeof e&&e.constructor;return!!t&&(t===C||"GeneratorFunction"===(t.displayName||t.name))},e.mark=function(e){return Object.setPrototypeOf?Object.setPrototypeOf(e,N):(e.__proto__=N,l(e,c,"GeneratorFunction")),e.prototype=Object.create(y),e},e.awrap=function(e){return{__await:e}},x(I.prototype),l(I.prototype,i,(function(){return this})),e.AsyncIterator=I,e.async=function(t,n,o,r,a){void 0===a&&(a=Promise);var i=new I(u(t,n,o,r),a);return e.isGeneratorFunction(n)?i:i.next().then((function(e){return e.done?e.value:i.next()}))},x(y),l(y,c,"Generator"),l(y,a,(function(){return this})),l(y,"toString",(function(){return"[object Generator]"})),e.keys=function(e){var t=[];for(var n in e)t.push(n);return t.reverse(),function o(){for(;t.length;){var n=t.pop();if(n in e)return o.value=n,o.done=!1,o}return o.done=!0,o}},e.values=M,_.prototype={constructor:_,reset:function(e){if(this.prev=0,this.next=0,this.sent=this._sent=t,this.done=!1,this.delegate=null,this.method="next",this.arg=t,this.tryEntries.forEach(S),!e)for(var n in this)"t"===n.charAt(0)&&o.call(this,n)&&!isNaN(+n.slice(1))&&(this[n]=t)},stop:function(){this.done=!0;var e=this.tryEntries[0].completion;if("throw"===e.type)throw e.arg;return this.rval},dispatchException:function(e){if(this.done)throw e;var n=this;function r(o,r){return c.type="throw",c.arg=e,n.next=o,r&&(n.method="next",n.arg=t),!!r}for(var a=this.tryEntries.length-1;a>=0;--a){var i=this.tryEntries[a],c=i.completion;if("root"===i.tryLoc)return r("end");if(i.tryLoc<=this.prev){var l=o.call(i,"catchLoc"),u=o.call(i,"finallyLoc");if(l&&u){if(this.prev<i.catchLoc)return r(i.catchLoc,!0);if(this.prev<i.finallyLoc)return r(i.finallyLoc)}else if(l){if(this.prev<i.catchLoc)return r(i.catchLoc,!0)}else{if(!u)throw new Error("try statement without catch or finally");if(this.prev<i.finallyLoc)return r(i.finallyLoc)}}}},abrupt:function(e,t){for(var n=this.tryEntries.length-1;n>=0;--n){var r=this.tryEntries[n];if(r.tryLoc<=this.prev&&o.call(r,"finallyLoc")&&this.prev<r.finallyLoc){var a=r;break}}a&&("break"===e||"continue"===e)&&a.tryLoc<=t&&t<=a.finallyLoc&&(a=null);var i=a?a.completion:{};return i.type=e,i.arg=t,a?(this.method="next",this.next=a.finallyLoc,h):this.complete(i)},complete:function(e,t){if("throw"===e.type)throw e.arg;return"break"===e.type||"continue"===e.type?this.next=e.arg:"return"===e.type?(this.rval=this.arg=e.arg,this.method="return",this.next="end"):"normal"===e.type&&t&&(this.next=t),h},finish:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var n=this.tryEntries[t];if(n.finallyLoc===e)return this.complete(n.completion,n.afterLoc),S(n),h}},"catch":function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var n=this.tryEntries[t];if(n.tryLoc===e){var o=n.completion;if("throw"===o.type){var r=o.arg;S(n)}return r}}throw new Error("illegal catch attempt")},delegateYield:function(e,n,o){return this.delegate={iterator:M(e),resultName:n,nextLoc:o},"next"===this.method&&(this.arg=t),h}},e}(e.exports);try{regeneratorRuntime=t}catch(n){"object"==typeof globalThis?globalThis.regeneratorRuntime=t:Function("r","regeneratorRuntime = r")(t)}},96250:function(){"use strict";self.fetch||(self.fetch=function(e,t){return t=t||{},new Promise((function(n,o){var r=new XMLHttpRequest,a=[],i=[],c={},l=function d(){return{ok:2==(r.status/100|0),statusText:r.statusText,status:r.status,url:r.responseURL,text:function(){return Promise.resolve(r.responseText)},json:function(){return Promise.resolve(r.responseText).then(JSON.parse)},blob:function(){return Promise.resolve(new Blob([r.response]))},clone:d,headers:{keys:function(){return a},entries:function(){return i},get:function(e){return c[e.toLowerCase()]},has:function(e){return e.toLowerCase()in c}}}};for(var u in r.open(t.method||"get",e,!0),r.onload=function(){r.getAllResponseHeaders().replace(/^(.*?):[^\S\n]*([\s\S]*?)$/gm,(function(e,t,n){a.push(t=t.toLowerCase()),i.push([t,n]),c[t]=c[t]?c[t]+","+n:n})),n(l())},r.onerror=o,r.withCredentials="include"==t.credentials,t.headers)r.setRequestHeader(u,t.headers[u]);r.send(t.body||null)}))})},88243:function(e,t){"use strict";t.__esModule=!0,t.modifier=t.element=t.block=void 0;t.block=function(e,t){return e+"-"+t};t.element=function(e,t){return e+"__"+t};t.modifier=function(e,t){return e+"--"+t}},1397:function(e,t){"use strict";t.__esModule=!0,t.binaryInsertWith=t.zipWith=t.zip=t.uniq=t.uniqBy=t.reduce=t.range=t.sortStrings=t.sort=t.sortBy=t.map=t.filter=void 0;t.filter=function(e){return function(t){if(null===t||t===undefined)return t;if(Array.isArray(t)){for(var n=[],o=0;o<t.length;o++){var r=t[o];e(r,o,t)&&n.push(r)}return n}throw new Error("filter() can't iterate on type "+typeof t)}};var n=function(e){return function(t){if(null===t||t===undefined)return t;if(Array.isArray(t)){for(var n=[],o=0;o<t.length;o++)n.push(e(t[o],o,t));return n}if("object"==typeof t){var r=Object.prototype.hasOwnProperty,a=[];for(var i in t)r.call(t,i)&&a.push(e(t[i],i,t));return a}throw new Error("map() can't iterate on type "+typeof t)}};t.map=n;var o=function(e,t){for(var n=e.criteria,o=t.criteria,r=n.length,a=0;a<r;a++){var i=n[a],c=o[a];if(i<c)return-1;if(i>c)return 1}return 0},r=function(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];return function(e){if(!Array.isArray(e))return e;for(var n=e.length,r=[],a=function(n){var o=e[n];r.push({criteria:t.map((function(e){return e(o)})),value:o})},i=0;i<n;i++)a(i);r.sort(o);for(var c=[];n--;)c[n]=r[n].value;return c}};t.sortBy=r;var a=r();t.sort=a;var i=r();t.sortStrings=i;t.range=function(e,t){return new Array(t-e).fill(null).map((function(t,n){return n+e}))};t.reduce=function(e,t){return function(n){var o,r,a=n.length;for(t===undefined?(o=1,r=n[0]):(o=0,r=t);o<a;o++)r=e(r,n[o],o,n);return r}};var c=function(e){return function(t){var n=t.length,o=[],r=e?[]:o,a=-1;e:for(;++a<n;){var i=t[a],c=e?e(i):i;if(c==c){for(var l=r.length;l--;)if(r[l]===c)continue e;e&&r.push(c),o.push(i)}else r.includes(c)||(r!==o&&r.push(c),o.push(i))}return o}};t.uniqBy=c;var l=c();t.uniq=l;var u=function(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];if(0===t.length)return[];for(var o=t.length,r=t[0].length,a=[],i=0;i<r;i++){for(var c=[],l=0;l<o;l++)c.push(t[l][i]);a.push(c)}return a};t.zip=u;t.zipWith=function(e){return function(){return n((function(t){return e.apply(void 0,t)}))(u.apply(void 0,arguments))}};t.binaryInsertWith=function(e){return function(t,n){var o=[].concat(t);return o.splice(function(e,t,n){if(0===t.length)return 0;for(var o=e(n),r=[0,t.length],a=r[0],i=r[1],c=undefined,l=0;a<i;)if((c=e(t[l=a+i>>1]))<o)a=l+1;else{if(c===o)return l;i=l}return c>o?l:l+1}(e,t,n),0,n),o}}},89295:function(e,t){"use strict";t.__esModule=!0,t.validHex=t.hsvaToHsv=t.hslaToHsl=t.rgbaToRgb=t.roundHsva=t.rgbaToHsva=t.rgbaToHex=t.rgbStringToHsva=t.rgbaStringToHsva=t.hsvStringToHsva=t.hsvaStringToHsva=t.hsvaToRgbaString=t.hsvaToRgbString=t.hsvaToRgba=t.hsvaToHslaString=t.hsvaToHsvaString=t.hsvaToHsvString=t.hsvaToHslString=t.hsvaToHsla=t.hsvaToHex=t.hslaToHsva=t.hslStringToHsva=t.hslaStringToHsva=t.parseHue=t.hexToRgba=t.hexToHsva=t.Color=void 0;var n=1e-4,o=function(){function e(e,t,n,o){void 0===e&&(e=0),void 0===t&&(t=0),void 0===n&&(n=0),void 0===o&&(o=1),this.r=void 0,this.g=void 0,this.b=void 0,this.a=void 0,this.r=e,this.g=t,this.b=n,this.a=o}return e.prototype.toString=function(){return"rgba("+(0|this.r)+", "+(0|this.g)+", "+(0|this.b)+", "+(0|this.a)+")"},e.fromHex=function(t){return new e(parseInt(t.substr(1,2),16),parseInt(t.substr(3,2),16),parseInt(t.substr(5,2),16))},e.lerp=function(t,n,o){return new e((n.r-t.r)*o+t.r,(n.g-t.g)*o+t.g,(n.b-t.b)*o+t.b,(n.a-t.a)*o+t.a)},e.lookup=function(t,o){void 0===o&&(o=[]);var r=o.length;if(r<2)throw new Error("Needs at least two colors!");var a=t*(r-1);if(t<n)return o[0];if(t>=.9999)return o[r-1];var i=a%1,c=0|a;return e.lerp(o[c],o[c+1],i)},e}();t.Color=o;var r=function(e,t,n){return void 0===t&&(t=0),void 0===n&&(n=Math.pow(10,t)),Math.round(n*e)/n},a={grad:.9,turn:360,rad:360/(2*Math.PI)};t.hexToHsva=function(e){return v(i(e))};var i=function(e){return e?("#"===e[0]&&(e=e.substring(1)),e.length<6?{r:parseInt(e[0]+e[0],16),g:parseInt(e[1]+e[1],16),b:parseInt(e[2]+e[2],16),a:4===e.length?r(parseInt(e[3]+e[3],16)/255,2):1}:{r:parseInt(e.substring(0,2),16),g:parseInt(e.substring(2,4),16),b:parseInt(e.substring(4,6),16),a:8===e.length?r(parseInt(e.substring(6,8),16)/255,2):1}):{r:0,g:0,b:0,a:0}};t.hexToRgba=i;var c=function(e,t){return void 0===t&&(t="deg"),Number(e)*(a[t]||1)};t.parseHue=c;var l=function(e){var t=/hsla?\(?\s*(-?\d*\.?\d+)(deg|rad|grad|turn)?[,\s]+(-?\d*\.?\d+)%?[,\s]+(-?\d*\.?\d+)%?,?\s*[/\s]*(-?\d*\.?\d+)?(%)?\s*\)?/i.exec(e);return t?d({h:c(t[1],t[2]),s:Number(t[3]),l:Number(t[4]),a:t[5]===undefined?1:Number(t[5])/(t[6]?100:1)}):{h:0,s:0,v:0,a:1}};t.hslaStringToHsva=l;var u=l;t.hslStringToHsva=u;var d=function(e){var t=e.h,n=e.s,o=e.l;return{h:t,s:(n*=(o<50?o:100-o)/100)>0?2*n/(o+n)*100:0,v:o+n,a:e.a}};t.hslaToHsva=d;t.hsvaToHex=function(e){return N(p(e))};var s=function(e){var t=e.h,n=e.s,o=e.v,a=e.a,i=(200-n)*o/100;return{h:r(t),s:r(i>0&&i<200?n*o/100/(i<=100?i:200-i)*100:0),l:r(i/2),a:r(a,2)}};t.hsvaToHsla=s;t.hsvaToHslString=function(e){var t=s(e);return"hsl("+t.h+", "+t.s+"%, "+t.l+"%)"};t.hsvaToHsvString=function(e){var t=b(e);return"hsv("+t.h+", "+t.s+"%, "+t.v+"%)"};t.hsvaToHsvaString=function(e){var t=b(e);return"hsva("+t.h+", "+t.s+"%, "+t.v+"%, "+t.a+")"};t.hsvaToHslaString=function(e){var t=s(e);return"hsla("+t.h+", "+t.s+"%, "+t.l+"%, "+t.a+")"};var p=function(e){var t=e.h,n=e.s,o=e.v,a=e.a;t=t/360*6,n/=100,o/=100;var i=Math.floor(t),c=o*(1-n),l=o*(1-(t-i)*n),u=o*(1-(1-t+i)*n),d=i%6;return{r:255*[o,l,c,c,u,o][d],g:255*[u,o,o,l,c,c][d],b:255*[c,c,u,o,o,l][d],a:r(a,2)}};t.hsvaToRgba=p;t.hsvaToRgbString=function(e){var t=p(e),n=t.r,o=t.g,a=t.b;return"rgb("+r(n)+", "+r(o)+", "+r(a)+")"};t.hsvaToRgbaString=function(e){var t=p(e),n=t.r,o=t.g,a=t.b,i=t.a;return"rgba("+r(n)+", "+r(o)+", "+r(a)+", "+r(i,2)+")"};var m=function(e){var t=/hsva?\(?\s*(-?\d*\.?\d+)(deg|rad|grad|turn)?[,\s]+(-?\d*\.?\d+)%?[,\s]+(-?\d*\.?\d+)%?,?\s*[/\s]*(-?\d*\.?\d+)?(%)?\s*\)?/i.exec(e);return t?b({h:c(t[1],t[2]),s:Number(t[3]),v:Number(t[4]),a:t[5]===undefined?1:Number(t[5])/(t[6]?100:1)}):{h:0,s:0,v:0,a:1}};t.hsvaStringToHsva=m;var f=m;t.hsvStringToHsva=f;var h=function(e){var t=/rgba?\(?\s*(-?\d*\.?\d+)(%)?[,\s]+(-?\d*\.?\d+)(%)?[,\s]+(-?\d*\.?\d+)(%)?,?\s*[/\s]*(-?\d*\.?\d+)?(%)?\s*\)?/i.exec(e);return t?v({r:Number(t[1])/(t[2]?100/255:1),g:Number(t[3])/(t[4]?100/255:1),b:Number(t[5])/(t[6]?100/255:1),a:t[7]===undefined?1:Number(t[7])/(t[8]?100:1)}):{h:0,s:0,v:0,a:1}};t.rgbaStringToHsva=h;var g=h;t.rgbStringToHsva=g;var C=function(e){var t=e.toString(16);return t.length<2?"0"+t:t},N=function(e){var t=e.r,n=e.g,o=e.b,a=e.a,i=a<1?C(r(255*a)):"";return"#"+C(r(t))+C(r(n))+C(r(o))+i};t.rgbaToHex=N;var v=function(e){var t=e.r,n=e.g,o=e.b,r=e.a,a=Math.max(t,n,o),i=a-Math.min(t,n,o),c=i?a===t?(n-o)/i:a===n?2+(o-t)/i:4+(t-n)/i:0;return{h:60*(c<0?c+6:c),s:a?i/a*100:0,v:a/255*100,a:r}};t.rgbaToHsva=v;var b=function(e){return{h:r(e.h),s:r(e.s),v:r(e.v),a:r(e.a,2)}};t.roundHsva=b;t.rgbaToRgb=function(e){return{r:e.r,g:e.g,b:e.b}};t.hslaToHsl=function(e){return{h:e.h,s:e.s,l:e.l}};t.hsvaToHsv=function(e){var t=b(e);return{h:t.h,s:t.s,v:t.v}};var V=/^#?([0-9A-F]{3,8})$/i;t.validHex=function(e,t){var n=V.exec(e),o=n?n[1].length:0;return 3===o||6===o||!!t&&4===o||!!t&&8===o}},52844:function(e,t){"use strict";t.__esModule=!0,t.EventEmitter=void 0;var n=function(){function e(){this.listeners={}}var t=e.prototype;return t.on=function(e,t){this.listeners[e]=this.listeners[e]||[],this.listeners[e].push(t)},t.off=function(e,t){var n=this.listeners[e];if(!n)throw new Error('There is no listeners for "'+e+'"');this.listeners[e]=n.filter((function(e){return e!==t}))},t.emit=function(e){var t=this.listeners[e];if(t){for(var n=arguments.length,o=new Array(n>1?n-1:0),r=1;r<n;r++)o[r-1]=arguments[r];for(var a=0,i=t.length;a<i;a+=1)t[a].apply(void 0,o)}},t.clear=function(){this.listeners={}},e}();t.EventEmitter=n},32416:function(e,t){"use strict";function n(e,t){var n="undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(n)return(n=n.call(e)).next.bind(n);if(Array.isArray(e)||(n=function(e,t){if(!e)return;if("string"==typeof e)return o(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);"Object"===n&&e.constructor&&(n=e.constructor.name);if("Map"===n||"Set"===n)return Array.from(e);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return o(e,t)}(e))||t&&e&&"number"==typeof e.length){n&&(e=n);var r=0;return function(){return r>=e.length?{done:!0}:{done:!1,value:e[r++]}}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}function o(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,o=new Array(t);n<t;n++)o[n]=e[n];return o}t.__esModule=!0,t.compose=t.flow=void 0;t.flow=function r(){for(var e=arguments.length,t=new Array(e),o=0;o<e;o++)t[o]=arguments[o];return function(e){for(var o=e,a=arguments.length,i=new Array(a>1?a-1:0),c=1;c<a;c++)i[c-1]=arguments[c];for(var l,u=n(t);!(l=u()).done;){var d=l.value;Array.isArray(d)?o=r.apply(void 0,d).apply(void 0,[o].concat(i)):d&&(o=d.apply(void 0,[o].concat(i)))}return o}};t.compose=function(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];return 0===t.length?function(e){return e}:1===t.length?t[0]:t.reduce((function(e,t){return function(n){for(var o=arguments.length,r=new Array(o>1?o-1:0),a=1;a<o;a++)r[a-1]=arguments[a];return e.apply(void 0,[t.apply(void 0,[n].concat(r))].concat(r))}}))}},57890:function(e,t){"use strict";t.__esModule=!0,t.KEY_QUOTE=t.KEY_RIGHT_BRACKET=t.KEY_BACKSLASH=t.KEY_LEFT_BRACKET=t.KEY_SLASH=t.KEY_PERIOD=t.KEY_MINUS=t.KEY_COMMA=t.KEY_EQUAL=t.KEY_SEMICOLON=t.KEY_F12=t.KEY_F11=t.KEY_F10=t.KEY_F9=t.KEY_F8=t.KEY_F7=t.KEY_F6=t.KEY_F5=t.KEY_F4=t.KEY_F3=t.KEY_F2=t.KEY_F1=t.KEY_Z=t.KEY_Y=t.KEY_X=t.KEY_W=t.KEY_V=t.KEY_U=t.KEY_T=t.KEY_S=t.KEY_R=t.KEY_Q=t.KEY_P=t.KEY_O=t.KEY_N=t.KEY_M=t.KEY_L=t.KEY_K=t.KEY_J=t.KEY_I=t.KEY_H=t.KEY_G=t.KEY_F=t.KEY_E=t.KEY_D=t.KEY_C=t.KEY_B=t.KEY_A=t.KEY_9=t.KEY_8=t.KEY_7=t.KEY_6=t.KEY_5=t.KEY_4=t.KEY_3=t.KEY_2=t.KEY_1=t.KEY_0=t.KEY_DELETE=t.KEY_INSERT=t.KEY_DOWN=t.KEY_RIGHT=t.KEY_UP=t.KEY_LEFT=t.KEY_HOME=t.KEY_END=t.KEY_PAGEDOWN=t.KEY_PAGEUP=t.KEY_SPACE=t.KEY_ESCAPE=t.KEY_CAPSLOCK=t.KEY_PAUSE=t.KEY_ALT=t.KEY_CTRL=t.KEY_SHIFT=t.KEY_ENTER=t.KEY_TAB=t.KEY_BACKSPACE=void 0;t.KEY_BACKSPACE=8;t.KEY_TAB=9;t.KEY_ENTER=13;t.KEY_SHIFT=16;t.KEY_CTRL=17;t.KEY_ALT=18;t.KEY_PAUSE=19;t.KEY_CAPSLOCK=20;t.KEY_ESCAPE=27;t.KEY_SPACE=32;t.KEY_PAGEUP=33;t.KEY_PAGEDOWN=34;t.KEY_END=35;t.KEY_HOME=36;t.KEY_LEFT=37;t.KEY_UP=38;t.KEY_RIGHT=39;t.KEY_DOWN=40;t.KEY_INSERT=45;t.KEY_DELETE=46;t.KEY_0=48;t.KEY_1=49;t.KEY_2=50;t.KEY_3=51;t.KEY_4=52;t.KEY_5=53;t.KEY_6=54;t.KEY_7=55;t.KEY_8=56;t.KEY_9=57;t.KEY_A=65;t.KEY_B=66;t.KEY_C=67;t.KEY_D=68;t.KEY_E=69;t.KEY_F=70;t.KEY_G=71;t.KEY_H=72;t.KEY_I=73;t.KEY_J=74;t.KEY_K=75;t.KEY_L=76;t.KEY_M=77;t.KEY_N=78;t.KEY_O=79;t.KEY_P=80;t.KEY_Q=81;t.KEY_R=82;t.KEY_S=83;t.KEY_T=84;t.KEY_U=85;t.KEY_V=86;t.KEY_W=87;t.KEY_X=88;t.KEY_Y=89;t.KEY_Z=90;t.KEY_F1=112;t.KEY_F2=113;t.KEY_F3=114;t.KEY_F4=115;t.KEY_F5=116;t.KEY_F6=117;t.KEY_F7=118;t.KEY_F8=119;t.KEY_F9=120;t.KEY_F10=121;t.KEY_F11=122;t.KEY_F12=123;t.KEY_SEMICOLON=186;t.KEY_EQUAL=187;t.KEY_COMMA=188;t.KEY_MINUS=189;t.KEY_PERIOD=190;t.KEY_SLASH=191;t.KEY_LEFT_BRACKET=219;t.KEY_BACKSLASH=220;t.KEY_RIGHT_BRACKET=221;t.KEY_QUOTE=222},97622:function(e,t){"use strict";t.__esModule=!0,t.numberOfDecimalDigits=t.keyOfMatchingRange=t.inRange=t.toFixed=t.round=t.scale=t.clamp01=t.clamp=void 0;t.clamp=function(e,t,n){return e<t?t:e>n?n:e};t.clamp01=function(e){return e<0?0:e>1?1:e};t.scale=function(e,t,n){return(e-t)/(n-t)};t.round=function(e,t){return!e||isNaN(e)?e:(t|=0,a=+((e*=n=Math.pow(10,t))>0)|-(e<0),r=Math.abs(e%1)>=.4999999999854481,o=Math.floor(e),r&&(e=o+(a>0)),(r?e:Math.round(e))/n);var n,o,r,a};t.toFixed=function(e,t){return void 0===t&&(t=0),Number(e).toFixed(Math.max(t,0))};var n=function(e,t){return t&&e>=t[0]&&e<=t[1]};t.inRange=n;t.keyOfMatchingRange=function(e,t){for(var o=0,r=Object.keys(t);o<r.length;o++){var a=r[o],i=t[a];if(n(e,i))return a}};t.numberOfDecimalDigits=function(e){return Math.floor(e)!==e&&e.toString().split(".")[1].length||0}},28440:function(e,t){"use strict";var n;t.__esModule=!0,t.perf=void 0;null==(n=window.performance)||n.now;var o={mark:function(e,t){0},measure:function(e,t){}};t.perf=o},1060:function(e,t){"use strict";t.__esModule=!0,t.canRender=t.pureComponentHooks=t.shallowDiffers=t.normalizeChildren=t.classes=void 0;t.classes=function(e){for(var t="",n=0;n<e.length;n++){var o=e[n];"string"==typeof o&&(t+=o+" ")}return t};t.normalizeChildren=function(e){return Array.isArray(e)?e.flat().filter((function(e){return e})):"object"==typeof e?[e]:[]};var n=function(e,t){var n;for(n in e)if(!(n in t))return!0;for(n in t)if(e[n]!==t[n])return!0;return!1};t.shallowDiffers=n;var o={onComponentShouldUpdate:function(e,t){return n(e,t)}};t.pureComponentHooks=o;t.canRender=function(e){return e!==undefined&&null!==e&&"boolean"!=typeof e}},465:function(e,t,n){"use strict";t.__esModule=!0,t.useSelector=t.useDispatch=t.createAction=t.combineReducers=t.applyMiddleware=t.createStore=void 0;var o=n(32416);function r(e,t){var n="undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(n)return(n=n.call(e)).next.bind(n);if(Array.isArray(e)||(n=function(e,t){if(!e)return;if("string"==typeof e)return a(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);"Object"===n&&e.constructor&&(n=e.constructor.name);if("Map"===n||"Set"===n)return Array.from(e);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return a(e,t)}(e))||t&&e&&"number"==typeof e.length){n&&(e=n);var o=0;return function(){return o>=e.length?{done:!0}:{done:!1,value:e[o++]}}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}function a(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,o=new Array(t);n<t;n++)o[n]=e[n];return o}t.createStore=function i(e,t){if(t)return t(i)(e);var n,o=[],r=function(t){n=e(n,t);for(var r=0;r<o.length;r++)o[r]()};return r({type:"@@INIT"}),{dispatch:r,subscribe:function(e){o.push(e)},getState:function(){return n}}};t.applyMiddleware=function(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];return function(e){return function(n){for(var r=arguments.length,a=new Array(r>1?r-1:0),i=1;i<r;i++)a[i-1]=arguments[i];var c=e.apply(void 0,[n].concat(a)),l=function(){throw new Error("Dispatching while constructing your middleware is not allowed.")},u={getState:c.getState,dispatch:function(e){for(var t=arguments.length,n=new Array(t>1?t-1:0),o=1;o<t;o++)n[o-1]=arguments[o];return l.apply(void 0,[e].concat(n))}},d=t.map((function(e){return e(u)}));return l=o.compose.apply(void 0,d)(c.dispatch),Object.assign({},c,{dispatch:l})}}};t.combineReducers=function(e){var t=Object.keys(e),n=!1;return function(o,a){void 0===o&&(o={});for(var i,c=Object.assign({},o),l=r(t);!(i=l()).done;){var u=i.value,d=e[u],s=o[u],p=d(s,a);s!==p&&(n=!0,c[u]=p)}return n?c:o}};t.createAction=function(e,t){void 0===t&&(t=null);var n=function(){if(!t)return{type:e,payload:arguments.length<=0?undefined:arguments[0]};var n=t.apply(void 0,arguments);if(!n)throw new Error("prepare function did not return an object");var o={type:e};return"payload"in n&&(o.payload=n.payload),"meta"in n&&(o.meta=n.meta),o};return n.toString=function(){return""+e},n.type=e,n.match=function(t){return t.type===e},n};t.useDispatch=function(e){return e.store.dispatch};t.useSelector=function(e,t){return t(e.store.getState())}},7151:function(e,t){"use strict";function n(e,t,n,o,r,a,i){try{var c=e[a](i),l=c.value}catch(u){return void n(u)}c.done?t(l):Promise.resolve(l).then(o,r)}function o(e){return function(){var t=this,o=arguments;return new Promise((function(r,a){var i=e.apply(t,o);function c(e){n(i,r,a,c,l,"next",e)}function l(e){n(i,r,a,c,l,"throw",e)}c(undefined)}))}}t.__esModule=!0,t.storage=t.IMPL_INDEXED_DB=t.IMPL_LOCAL_STORAGE=t.IMPL_MEMORY=void 0;t.IMPL_MEMORY=0;t.IMPL_LOCAL_STORAGE=1;t.IMPL_INDEXED_DB=2;var r="storage-v1",a="readwrite",i=function(e){return function(){try{return Boolean(e())}catch(t){return!1}}},c=i((function(){return window.localStorage&&window.localStorage.getItem})),l=i((function(){return(window.indexedDB||window.msIndexedDB)&&(window.IDBTransaction||window.msIDBTransaction)})),u=function(){function e(){this.impl=0,this.store={}}var t=e.prototype;return t.get=function(e){return this.store[e]},t.set=function(e,t){this.store[e]=t},t.remove=function(e){this.store[e]=undefined},t.clear=function(){this.store={}},e}(),d=function(){function e(){this.impl=1,this.store={}}var t=e.prototype;return t.get=function(e){var t=localStorage.getItem(e);if("string"==typeof t)return JSON.parse(t)},t.set=function(e,t){localStorage.setItem(e,JSON.stringify(t))},t.remove=function(e){localStorage.removeItem(e)},t.clear=function(){localStorage.clear()},e}(),s=function(){function e(){this.impl=2,this.dbPromise=new Promise((function(e,t){var n=(window.indexedDB||window.msIndexedDB).open("tgui",1);n.onupgradeneeded=function(){try{n.result.createObjectStore(r)}catch(e){t(new Error("Failed to upgrade IDB: "+n.error))}},n.onsuccess=function(){return e(n.result)},n.onerror=function(){t(new Error("Failed to open IDB: "+n.error))}}))}var t=e.prototype;return t.getStore=function(e){return this.dbPromise.then((function(t){return t.transaction(r,e).objectStore(r)}))},t.get=function(){var e=o(regeneratorRuntime.mark((function t(e){var n;return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,this.getStore("readonly");case 2:return n=t.sent,t.abrupt("return",new Promise((function(t,o){var r=n.get(e);r.onsuccess=function(){return t(r.result)},r.onerror=function(){return o(r.error)}})));case 4:case"end":return t.stop()}}),t,this)})));return function(t){return e.apply(this,arguments)}}(),t.set=function(){var e=o(regeneratorRuntime.mark((function t(e,n){return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return null===n&&(n=undefined),t.next=3,this.getStore(a);case 3:t.sent.put(n,e);case 5:case"end":return t.stop()}}),t,this)})));return function(t,n){return e.apply(this,arguments)}}(),t.remove=function(){var e=o(regeneratorRuntime.mark((function t(e){return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,this.getStore(a);case 2:t.sent["delete"](e);case 4:case"end":return t.stop()}}),t,this)})));return function(t){return e.apply(this,arguments)}}(),t.clear=function(){var e=o(regeneratorRuntime.mark((function t(){return regeneratorRuntime.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,this.getStore(a);case 2:e.sent.clear();case 4:case"end":return e.stop()}}),t,this)})));return function(){return e.apply(this,arguments)}}(),e}(),p=function(){function e(){this.backendPromise=o(regeneratorRuntime.mark((function e(){var t;return regeneratorRuntime.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(!l()){e.next=10;break}return e.prev=1,t=new s,e.next=5,t.dbPromise;case 5:return e.abrupt("return",t);case 8:e.prev=8,e.t0=e["catch"](1);case 10:if(!c()){e.next=12;break}return e.abrupt("return",new d);case 12:return e.abrupt("return",new u);case 13:case"end":return e.stop()}}),e,null,[[1,8]])})))()}var t=e.prototype;return t.get=function(){var e=o(regeneratorRuntime.mark((function t(e){var n;return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,this.backendPromise;case 2:return n=t.sent,t.abrupt("return",n.get(e));case 4:case"end":return t.stop()}}),t,this)})));return function(t){return e.apply(this,arguments)}}(),t.set=function(){var e=o(regeneratorRuntime.mark((function t(e,n){var o;return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,this.backendPromise;case 2:return o=t.sent,t.abrupt("return",o.set(e,n));case 4:case"end":return t.stop()}}),t,this)})));return function(t,n){return e.apply(this,arguments)}}(),t.remove=function(){var e=o(regeneratorRuntime.mark((function t(e){var n;return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,this.backendPromise;case 2:return n=t.sent,t.abrupt("return",n.remove(e));case 4:case"end":return t.stop()}}),t,this)})));return function(t){return e.apply(this,arguments)}}(),t.clear=function(){var e=o(regeneratorRuntime.mark((function t(){var e;return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,this.backendPromise;case 2:return e=t.sent,t.abrupt("return",e.clear());case 4:case"end":return t.stop()}}),t,this)})));return function(){return e.apply(this,arguments)}}(),e}(),m=new p;t.storage=m},21118:function(e,t){"use strict";function n(e,t){var n="undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(n)return(n=n.call(e)).next.bind(n);if(Array.isArray(e)||(n=function(e,t){if(!e)return;if("string"==typeof e)return o(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);"Object"===n&&e.constructor&&(n=e.constructor.name);if("Map"===n||"Set"===n)return Array.from(e);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return o(e,t)}(e))||t&&e&&"number"==typeof e.length){n&&(e=n);var r=0;return function(){return r>=e.length?{done:!0}:{done:!1,value:e[r++]}}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}function o(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,o=new Array(t);n<t;n++)o[n]=e[n];return o}t.__esModule=!0,t.buildQueryString=t.decodeHtmlEntities=t.toTitleCase=t.capitalize=t.createSearch=t.createGlobPattern=t.multiline=void 0;t.multiline=function r(e){if(Array.isArray(e))return r(e.join(""));for(var t,o,a=e.split("\n"),i=n(a);!(o=i()).done;)for(var c=o.value,l=0;l<c.length;l++){if(" "!==c[l]){(t===undefined||l<t)&&(t=l);break}}return t||(t=0),a.map((function(e){return e.substr(t).trimRight()})).join("\n").trim()};t.createGlobPattern=function(e){var t=new RegExp("^"+e.split(/\*+/).map((function(e){return e.replace(/[|\\{}()[\]^$+*?.]/g,"\\$&")})).join(".*")+"$");return function(e){return t.test(e)}};t.createSearch=function(e,t){var n=e.toLowerCase().trim();return function(e){if(!n)return!0;var o=t?t(e):e;return!!o&&o.toLowerCase().includes(n)}};t.capitalize=function a(e){return Array.isArray(e)?e.map(a):e.charAt(0).toUpperCase()+e.slice(1).toLowerCase()};t.toTitleCase=function i(e){if(Array.isArray(e))return e.map(i);if("string"!=typeof e)return e;for(var t=e.replace(/([^\W_]+[^\s-]*) */g,(function(e){return e.charAt(0).toUpperCase()+e.substr(1).toLowerCase()})),n=0,o=["A","An","And","As","At","But","By","For","For","From","In","Into","Near","Nor","Of","On","Onto","Or","The","To","With"];n<o.length;n++){var r=new RegExp("\\s"+o[n]+"\\s","g");t=t.replace(r,(function(e){return e.toLowerCase()}))}for(var a=0,c=["Id","Tv"];a<c.length;a++){var l=new RegExp("\\b"+c[a]+"\\b","g");t=t.replace(l,(function(e){return e.toLowerCase()}))}return t};t.decodeHtmlEntities=function(e){if(!e)return e;var t={nbsp:" ",amp:"&",quot:'"',lt:"<",gt:">",apos:"'"};return e.replace(/<br>/gi,"\n").replace(/<\/?[a-z0-9-_]+[^>]*>/gi,"").replace(/&(nbsp|amp|quot|lt|gt|apos);/g,(function(e,n){return t[n]})).replace(/&#?([0-9]+);/gi,(function(e,t){var n=parseInt(t,10);return String.fromCharCode(n)})).replace(/&#x?([0-9a-f]+);/gi,(function(e,t){var n=parseInt(t,16);return String.fromCharCode(n)}))};t.buildQueryString=function(e){return Object.keys(e).map((function(t){return encodeURIComponent(t)+"="+encodeURIComponent(e[t])})).join("&")}},53538:function(e,t){"use strict";t.__esModule=!0,t.sleep=t.debounce=void 0;t.debounce=function(e,t,n){var o;return void 0===n&&(n=!1),function(){for(var r=arguments.length,a=new Array(r),i=0;i<r;i++)a[i]=arguments[i];var c=n&&!o;clearTimeout(o),o=setTimeout((function(){o=null,n||e.apply(void 0,a)}),t),c&&e.apply(void 0,a)}};t.sleep=function(e){return new Promise((function(t){return setTimeout(t,e)}))}},67288:function(e,t,n){"use strict";t.__esModule=!0,t.vecNormalize=t.vecLength=t.vecInverse=t.vecScale=t.vecDivide=t.vecMultiply=t.vecSubtract=t.vecAdd=void 0;var o=n(1397),r=function(e,t){return e+t},a=function(e,t){return e-t},i=function(e,t){return e*t},c=function(e,t){return e/t};t.vecAdd=function(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];return(0,o.reduce)((function(e,t){return(0,o.zipWith)(r)(e,t)}))(t)};t.vecSubtract=function(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];return(0,o.reduce)((function(e,t){return(0,o.zipWith)(a)(e,t)}))(t)};t.vecMultiply=function(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];return(0,o.reduce)((function(e,t){return(0,o.zipWith)(i)(e,t)}))(t)};var l=function(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];return(0,o.reduce)((function(e,t){return(0,o.zipWith)(c)(e,t)}))(t)};t.vecDivide=l;t.vecScale=function(e,t){return(0,o.map)((function(e){return e*t}))(e)};t.vecInverse=function(e){return(0,o.map)((function(e){return-e}))(e)};var u=function(e){return Math.sqrt((0,o.reduce)(r)((0,o.zipWith)(i)(e,e)))};t.vecLength=u;t.vecNormalize=function(e){return l(e,u(e))}},88280:function(){"use strict";!function(e){if("undefined"!=typeof e.setAttribute){var t=function(e){return e.replace(/-[a-z]/g,(function(e){return e[1].toUpperCase()}))};e.setProperty=function(e,n){var o=t(e);if(!n)return this.removeAttribute(o);var r=String(n);return this.setAttribute(o,r)},e.getPropertyValue=function(e){var n=t(e);return this.getAttribute(n)||null},e.removeProperty=function(e){var n=t(e),o=this.getAttribute(n);return this.removeAttribute(n),o}}}(CSSStyleDeclaration.prototype)},15511:function(){"use strict";!function(e){function t(){return s.createDocumentFragment()}function n(e){return s.createElement(e)}function o(e,t){if(!e)throw new Error("Failed to construct "+t+": 1 argument required, but only 0 present.")}function r(e){if(1===e.length)return a(e[0]);for(var n=t(),o=T.call(e),r=0;r<e.length;r++)n.appendChild(a(o[r]));return n}function a(e){return"object"==typeof e?e:s.createTextNode(e)}for(var i,c,l,u,d,s=e.document,p=Object.prototype.hasOwnProperty,m=Object.defineProperty||function(e,t,n){return p.call(n,"value")?e[t]=n.value:(p.call(n,"get")&&e.__defineGetter__(t,n.get),p.call(n,"set")&&e.__defineSetter__(t,n.set)),e},f=[].indexOf||function(e){for(var t=this.length;t--&&this[t]!==e;);return t},h=function(e){var t="undefined"==typeof e.className,n=t?e.getAttribute("class")||"":e.className,o=t||"object"==typeof n,r=(o?t?n:n.baseVal:n).replace(C,"");r.length&&A.push.apply(this,r.split(N)),this._isSVG=o,this._=e},g={get:function(){return new h(this)},set:function(){}},C=/^\s+|\s+$/g,N=/\s+/,v="classList",b=function(e,t){return this.contains(e)?t||this.remove(e):(t===undefined||t)&&(t=!0,this.add(e)),!!t},V=e.DocumentFragment&&DocumentFragment.prototype,y=e.Node,x=(y||Element).prototype,I=e.CharacterData||y,k=I&&I.prototype,w=e.DocumentType,S=w&&w.prototype,_=(e.Element||y||e.HTMLElement).prototype,M=e.HTMLSelectElement||n("select").constructor,D=M.prototype.remove,B=e.SVGElement,A=["matches",_.matchesSelector||_.webkitMatchesSelector||_.khtmlMatchesSelector||_.mozMatchesSelector||_.msMatchesSelector||_.oMatchesSelector||function(e){var t=this.parentNode;return!!t&&-1<f.call(t.querySelectorAll(e),this)},"closest",function(e){for(var t,n=this;(t=n&&n.matches)&&!n.matches(e);)n=n.parentNode;return t?n:null},"prepend",function(){var e=this.firstChild,t=r(arguments);e?this.insertBefore(t,e):this.appendChild(t)},"append",function(){this.appendChild(r(arguments))},"before",function(){var e=this.parentNode;e&&e.insertBefore(r(arguments),this)},"after",function(){var e=this.parentNode,t=this.nextSibling,n=r(arguments);e&&(t?e.insertBefore(n,t):e.appendChild(n))},"toggleAttribute",function(e,t){var n=this.hasAttribute(e);return 1<arguments.length?n&&!t?this.removeAttribute(e):t&&!n&&this.setAttribute(e,""):n?this.removeAttribute(e):this.setAttribute(e,""),this.hasAttribute(e)},"replace",function(){this.replaceWith.apply(this,arguments)},"replaceWith",function(){var e=this.parentNode;e&&e.replaceChild(r(arguments),this)},"remove",function(){var e=this.parentNode;e&&e.removeChild(this)}],T=A.slice,L=A.length;L;L-=2)if((c=A[L-2])in _||(_[c]=A[L-1]),"remove"!==c||D._dom4||((M.prototype[c]=function(){return 0<arguments.length?D.apply(this,arguments):_.remove.call(this)})._dom4=!0),/^(?:before|after|replace|replaceWith|remove)$/.test(c)&&(I&&!(c in k)&&(k[c]=A[L-1]),w&&!(c in S)&&(S[c]=A[L-1])),/^(?:append|prepend)$/.test(c))if(V)c in V||(V[c]=A[L-1]);else try{t().constructor.prototype[c]=A[L-1]}catch(j){}var E;n("a").matches("a")||(_[c]=(E=_[c],function(e){return E.call(this.parentNode?this:t().appendChild(this),e)})),h.prototype={length:0,add:function(){for(var e,t=0;t<arguments.length;t++)e=arguments[t],this.contains(e)||A.push.call(this,c);this._isSVG?this._.setAttribute("class",""+this):this._.className=""+this},contains:function(e){return function(t){return-1<(L=e.call(this,c=function(e){if(!e)throw"SyntaxError";if(N.test(e))throw"InvalidCharacterError";return e}(t)))}}([].indexOf||function(e){for(L=this.length;L--&&this[L]!==e;);return L}),item:function(e){return this[e]||null},remove:function(){for(var e,t=0;t<arguments.length;t++)e=arguments[t],this.contains(e)&&A.splice.call(this,L,1);this._isSVG?this._.setAttribute("class",""+this):this._.className=""+this},toggle:b,toString:function(){return A.join.call(this," ")}},B&&!(v in B.prototype)&&m(B.prototype,v,g),v in s.documentElement?((u=n("div")[v]).add("a","b","a"),"a b"!=u&&("add"in(l=u.constructor.prototype)||(l=e.TemporaryTokenList.prototype),d=function(e){return function(){for(var t=0;t<arguments.length;)e.call(this,arguments[t++])}},l.add=d(l.add),l.remove=d(l.remove),l.toggle=b)):m(_,v,g),"contains"in x||m(x,"contains",{value:function(e){for(;e&&e!==this;)e=e.parentNode;return this===e}}),"head"in s||m(s,"head",{get:function(){return i||(i=s.getElementsByTagName("head")[0])}}),function(){for(var t,n=e.requestAnimationFrame,o=e.cancelAnimationFrame,r=["o","ms","moz","webkit"],a=r.length;!o&&a--;)n=n||e[r[a]+"RequestAnimationFrame"],o=e[r[a]+"CancelAnimationFrame"]||e[r[a]+"CancelRequestAnimationFrame"];o||(n?(t=n,n=function(e){var n=!0;return t((function(){n&&e.apply(this,arguments)})),function(){n=!1}},o=function(e){e()}):(n=function(e){return setTimeout(e,15,15)},o=function(e){clearTimeout(e)})),e.requestAnimationFrame=n,e.cancelAnimationFrame=o}();try{new e.CustomEvent("?")}catch(j){e.CustomEvent=function(e,t){function n(e,t,n,o){this.initEvent(e,t,n),this.detail=o}return function(o,r){var a=s.createEvent(e);if("string"!=typeof o)throw new Error("An event name must be provided");return"Event"==e&&(a.initCustomEvent=n),null==r&&(r=t),a.initCustomEvent(o,r.bubbles,r.cancelable,r.detail),a}}(e.CustomEvent?"CustomEvent":"Event",{bubbles:!1,cancelable:!1,detail:null})}try{new Event("_")}catch(j){j=function(e){function t(e,t){o(arguments.length,"Event");var n=s.createEvent("Event");return t||(t={}),n.initEvent(e,!!t.bubbles,!!t.cancelable),n}return t.prototype=e.prototype,t}(e.Event||function(){}),m(e,"Event",{value:j}),Event!==j&&(Event=j)}try{new KeyboardEvent("_",{})}catch(j){j=function(t){var n,r=0,a={char:"",key:"",location:0,ctrlKey:!1,shiftKey:!1,altKey:!1,metaKey:!1,altGraphKey:!1,repeat:!1,locale:navigator.language,detail:0,bubbles:!1,cancelable:!1,keyCode:0,charCode:0,which:0};try{var i=s.createEvent("KeyboardEvent");i.initKeyboardEvent("keyup",!1,!1,e,"+",3,!0,!1,!0,!1,!1),r="+"==(i.keyIdentifier||i.key)&&3==(i.keyLocation||i.location)&&(i.ctrlKey?i.altKey?1:3:i.shiftKey?2:4)||9}catch(j){}function c(e,t,n){try{t[e]=n[e]}catch(j){}}function l(t,i){o(arguments.length,"KeyboardEvent"),i=function(e,t){for(var n in t)t.hasOwnProperty(n)&&!t.hasOwnProperty.call(e,n)&&(e[n]=t[n]);return e}(i||{},a);var l,u=s.createEvent(n),d=i.ctrlKey,p=i.shiftKey,m=i.altKey,f=i.metaKey,h=i.altGraphKey,g=r>3?function(e){for(var t=[],n=["ctrlKey","Control","shiftKey","Shift","altKey","Alt","metaKey","Meta","altGraphKey","AltGraph"],o=0;o<n.length;o+=2)e[n[o]]&&t.push(n[o+1]);return t.join(" ")}(i):null,C=String(i.key),N=String(i.char),v=i.location,b=i.keyCode||(i.keyCode=C)&&C.charCodeAt(0)||0,V=i.charCode||(i.charCode=N)&&N.charCodeAt(0)||0,y=i.bubbles,x=i.cancelable,I=i.repeat,k=i.locale,w=i.view||e;if(i.which||(i.which=i.keyCode),"initKeyEvent"in u)u.initKeyEvent(t,y,x,w,d,m,p,f,b,V);else if(0<r&&"initKeyboardEvent"in u){switch(l=[t,y,x,w],r){case 1:l.push(C,v,d,p,m,f,h);break;case 2:l.push(d,m,p,f,b,V);break;case 3:l.push(C,v,d,m,p,f,h);break;case 4:l.push(C,v,g,I,k);break;default:l.push(char,C,v,g,I,k)}u.initKeyboardEvent.apply(u,l)}else u.initEvent(t,y,x);for(C in u)a.hasOwnProperty(C)&&u[C]!==i[C]&&c(C,u,i);return u}return n=0<r?"KeyboardEvent":"Event",l.prototype=t.prototype,l}(e.KeyboardEvent||function(){}),m(e,"KeyboardEvent",{value:j}),KeyboardEvent!==j&&(KeyboardEvent=j)}try{new MouseEvent("_",{})}catch(j){j=function(t){function n(t,n){o(arguments.length,"MouseEvent");var r=s.createEvent("MouseEvent");return n||(n={}),r.initMouseEvent(t,!!n.bubbles,!!n.cancelable,n.view||e,n.detail||1,n.screenX||0,n.screenY||0,n.clientX||0,n.clientY||0,!!n.ctrlKey,!!n.altKey,!!n.shiftKey,!!n.metaKey,n.button||0,n.relatedTarget||null),r}return n.prototype=t.prototype,n}(e.MouseEvent||function(){}),m(e,"MouseEvent",{value:j}),MouseEvent!==j&&(MouseEvent=j)}s.querySelectorAll("*").forEach||function(){function e(e){var t=e.querySelectorAll;e.querySelectorAll=function(e){var n=t.call(this,e);return n.forEach=Array.prototype.forEach,n}}e(s),e(Element.prototype)}();try{s.querySelector(":scope *")}catch(j){!function(){var e="data-scope-"+(1e9*Math.random()>>>0),t=Element.prototype,n=t.querySelector,o=t.querySelectorAll;function r(t,n,o){t.setAttribute(e,null);var r=n.call(t,String(o).replace(/(^|,\s*)(:scope([ >]|$))/g,(function(t,n,o,r){return n+"["+e+"]"+(r||" ")})));return t.removeAttribute(e),r}t.querySelector=function(e){return r(this,n,e)},t.querySelectorAll=function(e){return r(this,o,e)}}()}}(window),function(e){var t=e.WeakMap||function(){var e,t=0,n=!1,o=!1;function r(t,r,a){o=a,n=!1,e=undefined,t.dispatchEvent(r)}function a(e){this.value=e}function c(){t++,this.__ce__=new i("@DOMMap:"+t+Math.random())}return a.prototype.handleEvent=function(t){n=!0,o?t.currentTarget.removeEventListener(t.type,this,!1):e=this.value},c.prototype={constructor:c,"delete":function(e){return r(e,this.__ce__,!0),n},get:function(t){r(t,this.__ce__,!1);var n=e;return e=undefined,n},has:function(e){return r(e,this.__ce__,!1),n},set:function(e,t){return r(e,this.__ce__,!0),e.addEventListener(this.__ce__.type,new a(t),!1),this}},c}();function n(){}function o(e,t,n){function r(e){r.once&&(e.currentTarget.removeEventListener(e.type,t,r),r.removed=!0),r.passive&&(e.preventDefault=o.preventDefault),"function"==typeof r.callback?r.callback.call(this,e):r.callback&&r.callback.handleEvent(e),r.passive&&delete e.preventDefault}return r.type=e,r.callback=t,r.capture=!!n.capture,r.passive=!!n.passive,r.once=!!n.once,r.removed=!1,r}n.prototype=(Object.create||Object)(null),o.preventDefault=function(){};var r,a,i=e.CustomEvent,c=e.dispatchEvent,l=e.addEventListener,u=e.removeEventListener,d=0,s=function(){d++},p=[].indexOf||function(e){for(var t=this.length;t--&&this[t]!==e;);return t},m=function(e){return"".concat(e.capture?"1":"0",e.passive?"1":"0",e.once?"1":"0")};try{l("_",s,{once:!0}),c(new i("_")),c(new i("_")),u("_",s,{once:!0})}catch(f){}1!==d&&(a=new t,r=function(e){if(e){var t=e.prototype;t.addEventListener=function(e){return function(t,r,i){if(i&&"boolean"!=typeof i){var c,l,u,d=a.get(this),s=m(i);d||a.set(this,d=new n),t in d||(d[t]={handler:[],wrap:[]}),l=d[t],(c=p.call(l.handler,r))<0?(c=l.handler.push(r)-1,l.wrap[c]=u=new n):u=l.wrap[c],s in u||(u[s]=o(t,r,i),e.call(this,t,u[s],u[s].capture))}else e.call(this,t,r,i)}}(t.addEventListener),t.removeEventListener=function(e){return function(t,n,o){if(o&&"boolean"!=typeof o){var r,i,c,l,u=a.get(this);if(u&&t in u&&(c=u[t],-1<(i=p.call(c.handler,n))&&(r=m(o))in(l=c.wrap[i]))){for(r in e.call(this,t,l[r],l[r].capture),delete l[r],l)return;c.handler.splice(i,1),c.wrap.splice(i,1),0===c.handler.length&&delete u[t]}}else e.call(this,t,n,o)}}(t.removeEventListener)}},e.EventTarget?r(EventTarget):(r(e.Text),r(e.Element||e.HTMLElement),r(e.HTMLDocument),r(e.Window||{prototype:e}),r(e.XMLHttpRequest)))}(window)},25513:function(e){"use strict";!function(t,n){var o,r,a=t.html5||{},i=/^<|^(?:button|map|select|textarea|object|iframe|option|optgroup)$/i,c=/^(?:a|b|code|div|fieldset|h1|h2|h3|h4|h5|h6|i|label|li|ol|p|q|span|strong|style|table|tbody|td|th|tr|ul)$/i,l="_html5shiv",u=0,d={};function s(){var e=h.elements;return"string"==typeof e?e.split(" "):e}function p(e){var t=d[e[l]];return t||(t={},u++,e[l]=u,d[u]=t),t}function m(e,t,o){return t||(t=n),r?t.createElement(e):(o||(o=p(t)),!(a=o.cache[e]?o.cache[e].cloneNode():c.test(e)?(o.cache[e]=o.createElem(e)).cloneNode():o.createElem(e)).canHaveChildren||i.test(e)||a.tagUrn?a:o.frag.appendChild(a));var a}function f(e){e||(e=n);var t=p(e);return!h.shivCSS||o||t.hasCSS||(t.hasCSS=!!function(e,t){var n=e.createElement("p"),o=e.getElementsByTagName("head")[0]||e.documentElement;return n.innerHTML="x<style>"+t+"</style>",o.insertBefore(n.lastChild,o.firstChild)}(e,"article,aside,dialog,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}mark{background:#FF0;color:#000}template{display:none}")),r||function(e,t){t.cache||(t.cache={},t.createElem=e.createElement,t.createFrag=e.createDocumentFragment,t.frag=t.createFrag()),e.createElement=function(n){return h.shivMethods?m(n,e,t):t.createElem(n)},e.createDocumentFragment=Function("h,f","return function(){var n=f.cloneNode(),c=n.createElement;h.shivMethods&&("+s().join().replace(/[\w\-:]+/g,(function(e){return t.createElem(e),t.frag.createElement(e),'c("'+e+'")'}))+");return n}")(h,t.frag)}(e,t),e}!function(){try{var e=n.createElement("a");e.innerHTML="<xyz></xyz>",o="hidden"in e,r=1==e.childNodes.length||function(){n.createElement("a");var e=n.createDocumentFragment();return"undefined"==typeof e.cloneNode||"undefined"==typeof e.createDocumentFragment||"undefined"==typeof e.createElement}()}catch(t){o=!0,r=!0}}();var h={elements:a.elements||"abbr article aside audio bdi canvas data datalist details dialog figcaption figure footer header hgroup main mark meter nav output picture progress section summary template time video",version:"3.7.3",shivCSS:!1!==a.shivCSS,supportsUnknownElements:r,shivMethods:!1!==a.shivMethods,type:"default",shivDocument:f,createElement:m,createDocumentFragment:function(e,t){if(e||(e=n),r)return e.createDocumentFragment();for(var o=(t=t||p(e)).frag.cloneNode(),a=0,i=s(),c=i.length;a<c;a++)o.createElement(i[a]);return o},addElements:function(e,t){var n=h.elements;"string"!=typeof n&&(n=n.join(" ")),"string"!=typeof e&&(e=e.join(" ")),h.elements=n+" "+e,f(t)}};t.html5=h,f(n),e.exports&&(e.exports=h)}(window,document)},72090:function(){"use strict";!function(e){if(!document.createEvent){var t,n=!0,o=!1,r="onreadystatechange",a="DOMContentLoaded",i="__IE8__"+Math.random(),c=Object.defineProperty||function(e,t,n){e[t]=n.value},l=Object.defineProperties||function(t,n){for(var o in n)if(d.call(n,o))try{c(t,o,n[o])}catch(r){e.console}},u=Object.getOwnPropertyDescriptor,d=Object.prototype.hasOwnProperty,s=e.Element.prototype,p=e.Text.prototype,m=/^[a-z]+$/,f=/loaded|complete/,h={},g=document.createElement("div"),C=document.documentElement,N=C.removeAttribute,v=C.setAttribute,b=function(e){return{enumerable:!0,writable:!0,configurable:!0,value:e}};k(e.HTMLCommentElement.prototype,s,"nodeValue"),k(e.HTMLScriptElement.prototype,null,"text"),k(p,null,"nodeValue"),k(e.HTMLTitleElement.prototype,null,"text"),c(e.HTMLStyleElement.prototype,"textContent",(t=u(e.CSSStyleSheet.prototype,"cssText"),I((function(){return t.get.call(this.styleSheet)}),(function(e){t.set.call(this.styleSheet,e)}))));var V=/\b\s*alpha\s*\(\s*opacity\s*=\s*(\d+)\s*\)/;c(e.CSSStyleDeclaration.prototype,"opacity",{get:function(){var e=this.filter.match(V);return e?(e[1]/100).toString():""},set:function(e){this.zoom=1;var t=!1;e=e<1?" alpha(opacity="+Math.round(100*e)+")":"",this.filter=this.filter.replace(V,(function(){return t=!0,e})),!t&&e&&(this.filter+=e)}}),l(s,{textContent:{get:S,set:B},firstElementChild:{get:function(){for(var e=this.childNodes||[],t=0,n=e.length;t<n;t++)if(1==e[t].nodeType)return e[t]}},lastElementChild:{get:function(){for(var e=this.childNodes||[],t=e.length;t--;)if(1==e[t].nodeType)return e[t]}},oninput:{get:function(){return this._oninput||null},set:function(e){this._oninput&&(this.removeEventListener("input",this._oninput),this._oninput=e,e&&this.addEventListener("input",e))}},previousElementSibling:{get:function(){for(var e=this.previousSibling;e&&1!=e.nodeType;)e=e.previousSibling;return e}},nextElementSibling:{get:function(){for(var e=this.nextSibling;e&&1!=e.nodeType;)e=e.nextSibling;return e}},childElementCount:{get:function(){for(var e=0,t=this.childNodes||[],n=t.length;n--;e+=1==t[n].nodeType);return e}},addEventListener:b((function(e,t,n){if("function"==typeof t||"object"==typeof t){var o,r,a=this,l="on"+e,u=a[i]||c(a,i,{value:{}})[i],s=u[l]||(u[l]={}),p=s.h||(s.h=[]);if(!d.call(s,"w")){if(s.w=function(e){return e[i]||x(a,A(0,e),p,!1)},!d.call(h,l))if(m.test(e)){try{(o=document.createEventObject())[i]=!0,9!=a.nodeType&&(null==a.parentNode&&g.appendChild(a),(r=a.getAttribute(l))&&N.call(a,l)),a.fireEvent(l,o),h[l]=!0}catch(f){for(h[l]=!1;g.hasChildNodes();)g.removeChild(g.firstChild)}null!=r&&v.call(a,l,r)}else h[l]=!1;(s.n=h[l])&&a.attachEvent(l,s.w)}w(p,t)<0&&p[n?"unshift":"push"](t),"input"===e&&a.attachEvent("onkeyup",_)}})),dispatchEvent:b((function(e){var t,n=this,o="on"+e.type,r=n[i],a=r&&r[o],c=!!a;return e.target||(e.target=n),c?a.n?n.fireEvent(o,e):x(n,e,a.h,!0):!(t=n.parentNode)||t.dispatchEvent(e),!e.defaultPrevented})),removeEventListener:b((function(e,t,n){if("function"==typeof t||"object"==typeof t){var o="on"+e,r=this[i],a=r&&r[o],c=a&&a.h,l=c?w(c,t):-1;-1<l&&c.splice(l,1)}}))}),l(p,{addEventListener:b(s.addEventListener),dispatchEvent:b(s.dispatchEvent),removeEventListener:b(s.removeEventListener)}),l(e.XMLHttpRequest.prototype,{addEventListener:b((function(e,t,n){var o=this,r="on"+e,a=o[i]||c(o,i,{value:{}})[i],l=a[r]||(a[r]={}),u=l.h||(l.h=[]);w(u,t)<0&&(o[r]||(o[r]=function(){var t=document.createEvent("Event");t.initEvent(e,!0,!0),o.dispatchEvent(t)}),u[n?"unshift":"push"](t))})),dispatchEvent:b((function(e){var t=this,n="on"+e.type,o=t[i],r=o&&o[n];return!!r&&(r.n?t.fireEvent(n,e):x(t,e,r.h,!0))})),removeEventListener:b(s.removeEventListener)});var y=u(Event.prototype,"button").get;l(e.Event.prototype,{bubbles:b(!0),cancelable:b(!0),preventDefault:b((function(){this.cancelable&&(this.returnValue=!1)})),stopPropagation:b((function(){this.stoppedPropagation=!0,this.cancelBubble=!0})),stopImmediatePropagation:b((function(){this.stoppedImmediatePropagation=!0,this.stopPropagation()})),initEvent:b((function(e,t,n){this.type=e,this.bubbles=!!t,this.cancelable=!!n,this.bubbles||this.stopPropagation()})),pageX:{get:function(){return this._pageX||(this._pageX=this.clientX+e.scrollX-(C.clientLeft||0))}},pageY:{get:function(){return this._pageY||(this._pageY=this.clientY+e.scrollY-(C.clientTop||0))}},which:{get:function(){return this.keyCode?this.keyCode:isNaN(this.button)?undefined:this.button+1}},charCode:{get:function(){return this.keyCode&&"keypress"==this.type?this.keyCode:0}},buttons:{get:function(){return y.call(this)}},button:{get:function(){var e=this.buttons;return 1&e?0:2&e?2:4&e?1:undefined}},defaultPrevented:{get:function(){var e=this.returnValue;return!(void 0===e||e)}},relatedTarget:{get:function(){var e=this.type;return"mouseover"===e?this.fromElement:"mouseout"===e?this.toElement:null}}}),l(e.HTMLDocument.prototype,{defaultView:{get:function(){return this.parentWindow}},textContent:{get:function(){return 11===this.nodeType?S.call(this):null},set:function(e){11===this.nodeType&&B.call(this,e)}},addEventListener:b((function(t,o,i){var c=this;s.addEventListener.call(c,t,o,i),n&&t===a&&!f.test(c.readyState)&&(n=!1,c.attachEvent(r,M),e==top&&function l(e){try{c.documentElement.doScroll("left"),M()}catch(t){setTimeout(l,50)}}())})),dispatchEvent:b(s.dispatchEvent),removeEventListener:b(s.removeEventListener),createEvent:b((function(e){var t;if("Event"!==e)throw new Error("unsupported "+e);return(t=document.createEventObject()).timeStamp=(new Date).getTime(),t}))}),l(e.Window.prototype,{getComputedStyle:b(function(){var e=/^(?:[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|))(?!px)[a-z%]+$/,t=/^(top|right|bottom|left)$/,n=/\-([a-z])/g,o=function(e,t){return t.toUpperCase()};function r(e){this._=e}function a(){}return r.prototype.getPropertyValue=function(r){var a,i,c,l=this._,u=l.style,d=l.currentStyle,s=l.runtimeStyle;return"opacity"==r?u.opacity||"1":(r=("float"===r?"style-float":r).replace(n,o),a=d?d[r]:u[r],e.test(a)&&!t.test(r)&&(i=u.left,(c=s&&s.left)&&(s.left=d.left),u.left="fontSize"===r?"1em":a,a=u.pixelLeft+"px",u.left=i,c&&(s.left=c)),null==a?a:a+""||"auto")},a.prototype.getPropertyValue=function(){return null},function(e,t){return t?new a(e):new r(e)}}()),addEventListener:b((function(t,n,o){var r,a=e,c="on"+t;a[c]||(a[c]=function(e){return x(a,A(0,e),r,!1)&&undefined}),w(r=a[c][i]||(a[c][i]=[]),n)<0&&r[o?"unshift":"push"](n)})),dispatchEvent:b((function(t){var n=e["on"+t.type];return!n||!1!==n.call(e,t)&&!t.defaultPrevented})),removeEventListener:b((function(t,n,o){var r=(e["on"+t]||Object)[i],a=r?w(r,n):-1;-1<a&&r.splice(a,1)})),pageXOffset:{get:D("scrollLeft")},pageYOffset:{get:D("scrollTop")},scrollX:{get:D("scrollLeft")},scrollY:{get:D("scrollTop")},innerWidth:{get:D("clientWidth")},innerHeight:{get:D("clientHeight")}}),e.HTMLElement=e.Element,function(e,t,n){for(n=0;n<t.length;n++)document.createElement(t[n]);e.length||document.createStyleSheet(""),e[0].addRule(t.join(","),"display:block;")}(document.styleSheets,["header","nav","section","article","aside","footer"]),function(){if(!document.createRange){document.createRange=function(){return new n};var e=n.prototype;e.cloneContents=function(){for(var e=this._start.ownerDocument.createDocumentFragment(),n=t(this._start,this._end),o=0,r=n.length;o<r;o++)e.appendChild(n[o].cloneNode(!0));return e},e.cloneRange=function(){var e=new n;return e._start=this._start,e._end=this._end,e},e.deleteContents=function(){for(var e=this._start.parentNode,n=t(this._start,this._end),o=0,r=n.length;o<r;o++)e.removeChild(n[o])},e.extractContents=function(){for(var e=this._start.ownerDocument.createDocumentFragment(),n=t(this._start,this._end),o=0,r=n.length;o<r;o++)e.appendChild(n[o]);return e},e.setEndAfter=function(e){this._end=e},e.setEndBefore=function(e){this._end=e.previousSibling},e.setStartAfter=function(e){this._start=e.nextSibling},e.setStartBefore=function(e){this._start=e}}function t(e,t){for(var n=[e];e!==t;)n.push(e=e.nextSibling);return n}function n(){}}()}function x(e,t,n,o){for(var r,a,i=n.slice(),c=function(e,t){return e.currentTarget=t,e.eventPhase=e.target===e.currentTarget?2:3,e}(t,e),l=0,u=i.length;l<u&&("object"==typeof(r=i[l])?"function"==typeof r.handleEvent&&r.handleEvent(c):r.call(e,c),!c.stoppedImmediatePropagation);l++);return a=!c.stoppedPropagation,o&&a&&e.parentNode?e.parentNode.dispatchEvent(c):!c.defaultPrevented}function I(e,t){return{configurable:!0,get:e,set:t}}function k(e,t,n){var o=u(t||e,n);c(e,"textContent",I((function(){return o.get.call(this)}),(function(e){o.set.call(this,e)})))}function w(e,t){for(var n=e.length;n--&&e[n]!==t;);return n}function S(){if("BR"===this.tagName)return"\n";for(var e=this.firstChild,t=[];e;)8!==e.nodeType&&7!==e.nodeType&&t.push(e.textContent),e=e.nextSibling;return t.join("")}function _(e){var t=document.createEvent("Event");t.initEvent("input",!0,!0),(e.srcElement||e.fromElement||document).dispatchEvent(t)}function M(e){!o&&f.test(document.readyState)&&(o=!o,document.detachEvent(r,M),(e=document.createEvent("Event")).initEvent(a,!0,!0),document.dispatchEvent(e))}function D(e){return function(){return C[e]||document.body&&document.body[e]||0}}function B(e){for(var t;t=this.lastChild;)this.removeChild(t);null!=e&&this.appendChild(document.createTextNode(e))}function A(t,n){return n||(n=e.event),n.target||(n.target=n.srcElement||n.fromElement||document),n.timeStamp||(n.timeStamp=(new Date).getTime()),n}}(window)},37283:function(){"use strict";window.Int32Array||(window.Int32Array=Array)},57723:function(e,t){"use strict";t.__esModule=!0,t.assetMiddleware=t.resolveAsset=void 0;var n=[/v4shim/i],o={};t.resolveAsset=function(e){return o[e]||e};t.assetMiddleware=function(e){return function(e){return function(t){var r=t.type,a=t.payload;if("asset/stylesheet"!==r)if("asset/mappings"!==r)e(t);else for(var i=function(){var e=l[c];if(n.some((function(t){return t.test(e)})))return"continue";var t=a[e],r=e.split(".").pop();o[e]=t,"css"===r&&Byond.loadCss(t),"js"===r&&Byond.loadJs(t)},c=0,l=Object.keys(a);c<l.length;c++)i();else Byond.loadCss(a)}}}},31246:function(e,t,n){"use strict";t.__esModule=!0,t.useSharedState=t.useLocalState=t.useBackend=t.selectBackend=t.sendAct=t.sendMessage=t.backendMiddleware=t.backendReducer=t.backendSuspendSuccess=t.backendSuspendStart=t.backendSetSharedState=t.backendUpdate=void 0;var o=n(28440),r=n(465),a=n(41410),i=n(40509),c=n(79926),l=n(77960),u=["payload"];var d=(0,c.createLogger)("backend"),s=(0,r.createAction)("backend/update");t.backendUpdate=s;var p=(0,r.createAction)("backend/setSharedState");t.backendSetSharedState=p;var m=(0,r.createAction)("backend/suspendStart");t.backendSuspendStart=m;var f=function(){return{type:"backend/suspendSuccess",payload:{timestamp:Date.now()}}};t.backendSuspendSuccess=f;var h={config:{},data:{},shared:{},suspended:Date.now(),suspending:!1};t.backendReducer=function(e,t){void 0===e&&(e=h);var n=t.type,o=t.payload;if("backend/update"===n){var r=Object.assign({},e.config,o.config),a=Object.assign({},e.data,o.static_data,o.data),i=Object.assign({},e.shared);if(o.shared)for(var c=0,l=Object.keys(o.shared);c<l.length;c++){var u=l[c],d=o.shared[u];i[u]=""===d?undefined:JSON.parse(d)}return Object.assign({},e,{config:r,data:a,shared:i,suspended:!1})}if("backend/setSharedState"===n){var s,p=o.key,m=o.nextState;return Object.assign({},e,{shared:Object.assign({},e.shared,(s={},s[p]=m,s))})}if("backend/suspendStart"===n)return Object.assign({},e,{suspending:!0});if("backend/suspendSuccess"===n){var f=o.timestamp;return Object.assign({},e,{data:{},shared:{},config:Object.assign({},e.config,{title:"",status:1}),suspending:!1,suspended:f})}return e};t.backendMiddleware=function(e){var t,n;return function(r){return function(c){var u=N(e.getState()).suspended,p=c.type,m=c.payload;if("update"!==p)if("suspend"!==p){if("ping"!==p){if("backend/suspendStart"===p&&!n){d.log("suspending ("+window.__windowId__+")");var h=function(){return g({type:"suspend"})};h(),n=setInterval(h,2e3)}if("backend/suspendSuccess"===p&&((0,l.suspendRenderer)(),clearInterval(n),n=undefined,Byond.winset(window.__windowId__,{"is-visible":!1}),setImmediate((function(){(0,i.hasWindowFocus)()&&(0,i.focusMap)()}))),"backend/update"===p){var C,v,b=null==(C=m.config)||null==(v=C.window)?void 0:v.fancy;t===undefined?t=b:t!==b&&(d.log("changing fancy mode to",b),t=b,Byond.winset(window.__windowId__,{titlebar:!b,"can-resize":!b}))}return"backend/update"===p&&u&&(d.log("backend/update",m),(0,l.resumeRenderer)(),(0,a.setupDrag)(),setImmediate((function(){o.perf.mark("resume/start"),N(e.getState()).suspended||(Byond.winset(window.__windowId__,{"is-visible":!0}),o.perf.mark("resume/finish"))}))),r(c)}g({type:"pingReply"})}else e.dispatch(f());else e.dispatch(s(m))}}};var g=function(e){void 0===e&&(e={});var t=e,n=t.payload,o=function(e,t){if(null==e)return{};var n,o,r={},a=Object.keys(e);for(o=0;o<a.length;o++)n=a[o],t.indexOf(n)>=0||(r[n]=e[n]);return r}(t,u),r=Object.assign({tgui:1,window_id:window.__windowId__},o);null!==n&&n!==undefined&&(r.payload=JSON.stringify(n)),Byond.topic(r)};t.sendMessage=g;var C=function(e,t){void 0===t&&(t={}),"object"!=typeof t||null===t||Array.isArray(t)?d.error("Payload for act() must be an object, got this:",t):g({type:"act/"+e,payload:t})};t.sendAct=C;var N=function(e){return e.backend||{}};t.selectBackend=N;t.useBackend=function(e){var t=e.store,n=N(t.getState());return Object.assign({},n,{act:C})};t.useLocalState=function(e,t,n){var o,r=e.store,a=null!=(o=N(r.getState()).shared)?o:{},i=t in a?a[t]:n;return[i,function(e){r.dispatch(p({key:t,nextState:"function"==typeof e?e(i):e}))}]};t.useSharedState=function(e,t,n){var o,r=e.store,a=null!=(o=N(r.getState()).shared)?o:{},i=t in a?a[t]:n;return[i,function(e){g({type:"setSharedState",key:t,value:JSON.stringify("function"==typeof e?e(i):e)||""})}]}},54642:function(e,t,n){"use strict";t.__esModule=!0,t.AnimatedNumber=void 0;var o=n(96323),r=n(97622);function a(e,t){return a=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e},a(e,t)}var i=function(e){return"number"==typeof e&&Number.isFinite(e)&&!Number.isNaN(e)},c=.8333,l=function(e){var t,n;function l(t){var n;(n=e.call(this,t)||this).ref=(0,o.createRef)(),n.interval=void 0,n.currentValue=0;var r=t.initial,a=t.value;return r!==undefined&&i(r)?n.currentValue=r:i(a)&&(n.currentValue=a),n}n=e,(t=l).prototype=Object.create(n.prototype),t.prototype.constructor=t,a(t,n);var u=l.prototype;return u.componentDidMount=function(){this.currentValue!==this.props.value&&this.startTicking()},u.componentWillUnmount=function(){this.stopTicking()},u.shouldComponentUpdate=function(e){return e.value!==this.props.value&&this.startTicking(),!1},u.startTicking=function(){var e=this;this.interval===undefined&&(this.interval=setInterval((function(){return e.tick()}),16.666666666666668))},u.stopTicking=function(){this.interval!==undefined&&(clearInterval(this.interval),this.interval=undefined)},u.tick=function(){var e=this.currentValue,t=this.props.value;i(t)?this.currentValue=e*c+t*(1-c):this.stopTicking(),Math.abs(t-this.currentValue)<Math.max(.001,.001*t)&&(this.currentValue=t,this.stopTicking()),this.ref.current&&(this.ref.current.textContent=this.getText())},u.getText=function(){var e=this.props,t=this.currentValue,n=e.format,o=e.value;if(!i(o))return String(o);if(n)return n(this.currentValue);var a=String(o).split(".")[1],c=a?a.length:0;return(0,r.toFixed)(t,(0,r.clamp)(c,0,8))},u.render=function(){return(0,o.createVNode)(1,"span",null,this.getText(),0,null,null,this.ref)},l}(o.Component);t.AnimatedNumber=l},75434:function(e,t,n){"use strict";t.__esModule=!0,t.Autofocus=void 0;var o=n(96323);function r(e,t){return r=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e},r(e,t)}var a=function(e){var t,n;function a(){for(var t,n=arguments.length,r=new Array(n),a=0;a<n;a++)r[a]=arguments[a];return(t=e.call.apply(e,[this].concat(r))||this).ref=(0,o.createRef)(),t}n=e,(t=a).prototype=Object.create(n.prototype),t.prototype.constructor=t,r(t,n);var i=a.prototype;return i.componentDidMount=function(){var e=this;setTimeout((function(){var t;null==(t=e.ref.current)||t.focus()}),1)},i.render=function(){return(0,o.createVNode)(1,"div",null,this.props.children,0,{tabIndex:-1},null,this.ref)},a}(o.Component);t.Autofocus=a},90297:function(e,t,n){"use strict";t.__esModule=!0,t.Blink=void 0;var o=n(96323);function r(e,t){return r=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e},r(e,t)}var a=function(e){var t,n;function a(){var t;return(t=e.call(this)||this).state={hidden:!1},t}n=e,(t=a).prototype=Object.create(n.prototype),t.prototype.constructor=t,r(t,n);var i=a.prototype;return i.createTimer=function(){var e=this,t=this.props,n=t.interval,o=void 0===n?1e3:n,r=t.time,a=void 0===r?1e3:r;clearInterval(this.interval),clearTimeout(this.timer),this.setState({hidden:!1}),this.interval=setInterval((function(){e.setState({hidden:!0}),e.timer=setTimeout((function(){e.setState({hidden:!1})}),a)}),o+a)},i.componentDidMount=function(){this.createTimer()},i.componentDidUpdate=function(e){e.interval===this.props.interval&&e.time===this.props.time||this.createTimer()},i.componentWillUnmount=function(){clearInterval(this.interval),clearTimeout(this.timer)},i.render=function(e){return(0,o.createVNode)(1,"span",null,e.children,0,{style:{visibility:this.state.hidden?"hidden":"visible"}})},a}(o.Component);t.Blink=a},7149:function(e,t,n){"use strict";t.__esModule=!0,t.BlockQuote=void 0;var o=n(96323),r=n(1060),a=n(54425),i=["className"];t.BlockQuote=function(e){var t=e.className,n=function(e,t){if(null==e)return{};var n,o,r={},a=Object.keys(e);for(o=0;o<a.length;o++)n=a[o],t.indexOf(n)>=0||(r[n]=e[n]);return r}(e,i);return(0,o.normalizeProps)((0,o.createComponentVNode)(2,a.Box,Object.assign({className:(0,r.classes)(["BlockQuote",t])},n)))}},54425:function(e,t,n){"use strict";t.__esModule=!0,t.Box=t.computeBoxClassName=t.computeBoxProps=t.halfUnit=t.unit=void 0;var o=n(1060),r=n(96323),a=n(10648),i=n(84200),c=["as","className","children"];var l=function(e){return"string"==typeof e?e.endsWith("px")&&!Byond.IS_LTE_IE8?parseFloat(e)/12+"rem":e:"number"==typeof e?Byond.IS_LTE_IE8?12*e+"px":e+"rem":void 0};t.unit=l;var u=function(e){return"string"==typeof e?l(e):"number"==typeof e?l(.5*e):void 0};t.halfUnit=u;var d=function(e){return"string"==typeof e&&i.CSS_COLORS.includes(e)},s=function(e){return function(t,n){"number"!=typeof n&&"string"!=typeof n||(t[e]=n)}},p=function(e,t){return function(n,o){"number"!=typeof o&&"string"!=typeof o||(n[e]=t(o))}},m=function(e,t){return function(n,o){o&&(n[e]=t)}},f=function(e,t,n){return function(o,r){if("number"==typeof r||"string"==typeof r)for(var a=0;a<n.length;a++)o[e+"-"+n[a]]=t(r)}},h=function(e){return function(t,n){d(n)||(t[e]=n)}},g={position:s("position"),overflow:s("overflow"),overflowX:s("overflow-x"),overflowY:s("overflow-y"),top:p("top",l),bottom:p("bottom",l),left:p("left",l),right:p("right",l),width:p("width",l),minWidth:p("min-width",l),maxWidth:p("max-width",l),height:p("height",l),minHeight:p("min-height",l),maxHeight:p("max-height",l),fontSize:p("font-size",l),fontFamily:s("font-family"),lineHeight:function(e,t){"number"==typeof t?e["line-height"]=t:"string"==typeof t&&(e["line-height"]=l(t))},opacity:s("opacity"),textAlign:s("text-align"),verticalAlign:s("vertical-align"),inline:m("display","inline-block"),bold:m("font-weight","bold"),italic:m("font-style","italic"),nowrap:m("white-space","nowrap"),preserveWhitespace:m("white-space","pre-wrap"),m:f("margin",u,["top","bottom","left","right"]),mx:f("margin",u,["left","right"]),my:f("margin",u,["top","bottom"]),mt:p("margin-top",u),mb:p("margin-bottom",u),ml:p("margin-left",u),mr:p("margin-right",u),p:f("padding",u,["top","bottom","left","right"]),px:f("padding",u,["left","right"]),py:f("padding",u,["top","bottom"]),pt:p("padding-top",u),pb:p("padding-bottom",u),pl:p("padding-left",u),pr:p("padding-right",u),color:h("color"),textColor:h("color"),backgroundColor:h("background-color"),fillPositionedParent:function(e,t){t&&(e.position="absolute",e.top=0,e.bottom=0,e.left=0,e.right=0)}},C=function(e){for(var t={},n={},o=0,r=Object.keys(e);o<r.length;o++){var a=r[o];if("style"!==a)if(Byond.IS_LTE_IE8&&"onClick"===a)t.onclick=e[a];else{var i=e[a],c=g[a];c?c(n,i):t[a]=i}}for(var l="",u=0,d=Object.keys(n);u<d.length;u++){var s=d[u];l+=s+":"+n[s]+";"}if(e.style)for(var p=0,m=Object.keys(e.style);p<m.length;p++){var f=m[p];l+=f+":"+e.style[f]+";"}return l.length>0&&(t.style=l),t};t.computeBoxProps=C;var N=function(e){var t=e.textColor||e.color,n=e.backgroundColor;return(0,o.classes)([d(t)&&"color-"+t,d(n)&&"color-bg-"+n])};t.computeBoxClassName=N;var v=function(e){var t=e.as,n=void 0===t?"div":t,o=e.className,i=e.children,l=function(e,t){if(null==e)return{};var n,o,r={},a=Object.keys(e);for(o=0;o<a.length;o++)n=a[o],t.indexOf(n)>=0||(r[n]=e[n]);return r}(e,c);if("function"==typeof i)return i(C(e));var u="string"==typeof o?o+" "+N(l):N(l),d=C(l);return(0,r.createVNode)(a.VNodeFlags.HtmlElement,n,u,i,a.ChildFlags.UnknownChildren,d,undefined)};t.Box=v,v.defaultHooks=o.pureComponentHooks},25808:function(e,t,n){"use strict";t.__esModule=!0,t.ButtonInput=t.ButtonConfirm=t.ButtonCheckbox=t.Button=void 0;var o=n(96323),r=n(57890),a=n(1060),i=n(79926),c=n(54425),l=n(65743),u=n(59463),d=["className","fluid","icon","iconRotation","iconSpin","iconColor","iconPosition","color","disabled","selected","tooltip","tooltipPosition","ellipsis","compact","circular","content","children","onclick","onClick","verticalAlignContent"],s=["checked"],p=["confirmContent","confirmColor","confirmIcon","icon","color","content","onClick"],m=["fluid","content","icon","iconRotation","iconSpin","tooltip","tooltipPosition","color","placeholder","maxLength"];function f(e,t){e.prototype=Object.create(t.prototype),e.prototype.constructor=e,h(e,t)}function h(e,t){return h=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e},h(e,t)}function g(e,t){if(null==e)return{};var n,o,r={},a=Object.keys(e);for(o=0;o<a.length;o++)n=a[o],t.indexOf(n)>=0||(r[n]=e[n]);return r}var C=(0,i.createLogger)("Button"),N=function(e){var t=e.className,n=e.fluid,i=e.icon,s=e.iconRotation,p=e.iconSpin,m=e.iconColor,f=e.iconPosition,h=e.color,N=e.disabled,v=e.selected,b=e.tooltip,V=e.tooltipPosition,y=e.ellipsis,x=e.compact,I=e.circular,k=e.content,w=e.children,S=e.onclick,_=e.onClick,M=e.verticalAlignContent,D=g(e,d),B=!(!k&&!w);S&&C.warn("Lowercase 'onclick' is not supported on Button and lowercase prop names are discouraged in general. Please use a camelCase'onClick' instead and read: https://infernojs.org/docs/guides/event-handling"),D.onClick=function(e){!N&&_&&_(e)},Byond.IS_LTE_IE8&&(D.unselectable=!0);var A=(0,o.normalizeProps)((0,o.createComponentVNode)(2,c.Box,Object.assign({className:(0,a.classes)(["Button",n&&"Button--fluid",N&&"Button--disabled",v&&"Button--selected",B&&"Button--hasContent",y&&"Button--ellipsis",I&&"Button--circular",x&&"Button--compact",f&&"Button--iconPosition--"+f,M&&"Button--flex",M&&n&&"Button--flex--fluid",M&&"Button--verticalAlignContent--"+M,h&&"string"==typeof h?"Button--color--"+h:"Button--color--default",t]),tabIndex:!N&&"0",onKeyUp:function(t){if(!1!==e.captureKeys){var n=window.event?t.which:t.keyCode;if(n===r.KEY_SPACE||n===r.KEY_ENTER)return t.preventDefault(),void(!N&&_&&_(t));n!==r.KEY_ESCAPE||t.preventDefault()}}},D,{children:(0,o.createVNode)(1,"div","Button__content",[i&&"right"!==f&&(0,o.createComponentVNode)(2,l.Icon,{name:i,color:m,rotation:s,spin:p}),k,w,i&&"right"===f&&(0,o.createComponentVNode)(2,l.Icon,{name:i,color:m,rotation:s,spin:p})],0)})));return b&&(A=(0,o.createComponentVNode)(2,u.Tooltip,{content:b,position:V,children:A})),A};t.Button=N,N.defaultHooks=a.pureComponentHooks;var v=function(e){var t=e.checked,n=g(e,s);return(0,o.normalizeProps)((0,o.createComponentVNode)(2,N,Object.assign({color:"transparent",icon:t?"check-square-o":"square-o",selected:t},n)))};t.ButtonCheckbox=v,N.Checkbox=v;var b=function(e){function t(){var t;return(t=e.call(this)||this).state={clickedOnce:!1},t.handleClick=function(){t.state.clickedOnce&&t.setClickedOnce(!1)},t}f(t,e);var n=t.prototype;return n.setClickedOnce=function(e){var t=this;this.setState({clickedOnce:e}),e?setTimeout((function(){return window.addEventListener("click",t.handleClick)})):window.removeEventListener("click",this.handleClick)},n.render=function(){var e=this,t=this.props,n=t.confirmContent,r=void 0===n?"Confirm?":n,a=t.confirmColor,i=void 0===a?"bad":a,c=t.confirmIcon,l=t.icon,u=t.color,d=t.content,s=t.onClick,m=g(t,p);return(0,o.normalizeProps)((0,o.createComponentVNode)(2,N,Object.assign({content:this.state.clickedOnce?r:d,icon:this.state.clickedOnce?c:l,color:this.state.clickedOnce?i:u,onClick:function(){return e.state.clickedOnce?s():e.setClickedOnce(!0)}},m)))},t}(o.Component);t.ButtonConfirm=b,N.Confirm=b;var V=function(e){function t(){var t;return(t=e.call(this)||this).inputRef=(0,o.createRef)(),t.state={inInput:!1},t}f(t,e);var n=t.prototype;return n.setInInput=function(e){if(this.setState({inInput:e}),this.inputRef){var t=this.inputRef.current;if(e){t.value=this.props.currentValue||"";try{t.focus(),t.select()}catch(n){}}}},n.commitResult=function(e){if(this.inputRef){var t=this.inputRef.current;if(""!==t.value)return void this.props.onCommit(e,t.value);if(!this.props.defaultValue)return;this.props.onCommit(e,this.props.defaultValue)}},n.render=function(){var e=this,t=this.props,n=t.fluid,i=t.content,d=t.icon,s=t.iconRotation,p=t.iconSpin,f=t.tooltip,h=t.tooltipPosition,C=t.color,N=void 0===C?"default":C,v=(t.placeholder,t.maxLength,g(t,m)),b=(0,o.normalizeProps)((0,o.createComponentVNode)(2,c.Box,Object.assign({className:(0,a.classes)(["Button",n&&"Button--fluid","Button--color--"+N])},v,{onClick:function(){return e.setInInput(!0)},children:[d&&(0,o.createComponentVNode)(2,l.Icon,{name:d,rotation:s,spin:p}),(0,o.createVNode)(1,"div",null,i,0),(0,o.createVNode)(64,"input","NumberInput__input",null,1,{style:{display:this.state.inInput?undefined:"none","text-align":"left"},onBlur:function(t){e.state.inInput&&(e.setInInput(!1),e.commitResult(t))},onKeyDown:function(t){if(t.keyCode===r.KEY_ENTER)return e.setInInput(!1),void e.commitResult(t);t.keyCode===r.KEY_ESCAPE&&e.setInInput(!1)}},null,this.inputRef)]})));return f&&(b=(0,o.createComponentVNode)(2,u.Tooltip,{content:f,position:h,children:b})),b},t}(o.Component);t.ButtonInput=V,N.Input=V},44051:function(e,t,n){"use strict";t.__esModule=!0,t.ByondUi=void 0;var o=n(96323),r=n(1060),a=n(53538),i=n(79926),c=n(54425),l=["params"],u=["params"],d=["params"];function s(e,t){if(null==e)return{};var n,o,r={},a=Object.keys(e);for(o=0;o<a.length;o++)n=a[o],t.indexOf(n)>=0||(r[n]=e[n]);return r}function p(e,t){return p=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e},p(e,t)}var m=(0,i.createLogger)("ByondUi"),f=[];window.addEventListener("beforeunload",(function(){for(var e=0;e<f.length;e++){var t=f[e];"string"==typeof t&&(m.log("unmounting '"+t+"' (beforeunload)"),f[e]=null,Byond.winset(t,{"is-visible":"false"}))}}));var h=function(e){var t,n;function i(t){var n,r;(r=e.call(this,t)||this).containerRef=(0,o.createRef)(),r.byondUiElement=function(e){var t=f.length;f.push(null);var n=e||"byondui_"+t;return m.log("allocated '"+n+"'"),{render:function(e){f[t]=n,e["is-visible"]="true",Byond.winset(n,e)},unmount:function(){m.log("unmounting '"+n+"'"),f[t]=null,Byond.winset(n,{"is-visible":"false"})}}}(null==(n=t.params)?void 0:n.id),r.handleResize=(0,a.debounce)((function(){r.forceUpdate()}),100);var i=!1;return r.handleScroll=function(){i||(window.requestAnimationFrame((function(){r.componentDidUpdate(),i=!1})),i=!0)},r}n=e,(t=i).prototype=Object.create(n.prototype),t.prototype.constructor=t,p(t,n);var h=i.prototype;return h.shouldComponentUpdate=function(e){var t=this.props,n=t.params,o=void 0===n?{}:n,a=s(t,l),i=e.params,c=void 0===i?{}:i,d=s(e,u);return(0,r.shallowDiffers)(o,c)||(0,r.shallowDiffers)(a,d)},h.componentDidMount=function(){Byond.IS_LTE_IE10||(window.addEventListener("resize",this.handleResize),window.addEventListener("scroll",this.handleScroll,!0),this.componentDidUpdate(),this.handleResize())},h.componentDidUpdate=function(){if(!Byond.IS_LTE_IE10){var e,t,n=this.props,o=n.params,r=void 0===o?{}:o,a=n.hideOnScroll;if(this.containerRef.current){var i=(e=this.containerRef.current,{pos:[(t=e.getBoundingClientRect()).left,t.top],size:[t.right-t.left,t.bottom-t.top]});if(m.debug("bounding box",i),a&&i.pos[1]<32)return void this.byondUiElement.unmount();this.byondUiElement.render(Object.assign({parent:window.__windowId__},r,{pos:i.pos[0]+","+i.pos[1],size:i.size[0]+"x"+i.size[1]}))}}},h.componentWillUnmount=function(){Byond.IS_LTE_IE10||(window.removeEventListener("resize",this.handleResize),window.removeEventListener("scroll",this.handleScroll,!0),this.byondUiElement.unmount())},h.render=function(){var e=this.props,t=(e.params,s(e,d)),n=(0,c.computeBoxProps)(t);return(0,o.normalizeProps)((0,o.createVNode)(1,"div",null,(0,o.createVNode)(1,"div",null,null,1,{style:{"min-height":"22px"}}),0,Object.assign({},n),null,this.containerRef))},i}(o.Component);t.ByondUi=h},64726:function(e,t,n){"use strict";t.__esModule=!0,t.Chart=void 0;var o=n(96323),r=n(1397),a=n(1060),i=n(54425),c=["data","rangeX","rangeY","fillColor","strokeColor","strokeWidth"];function l(e,t){return l=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e},l(e,t)}var u=function(e){var t,n;function a(t){var n;return(n=e.call(this,t)||this).ref=(0,o.createRef)(),n.state={viewBox:[600,200]},n.handleResize=function(){var e=n.ref.current;n.setState({viewBox:[e.offsetWidth,e.offsetHeight]})},n}n=e,(t=a).prototype=Object.create(n.prototype),t.prototype.constructor=t,l(t,n);var u=a.prototype;return u.componentDidMount=function(){window.addEventListener("resize",this.handleResize),this.handleResize()},u.componentWillUnmount=function(){window.removeEventListener("resize",this.handleResize)},u.render=function(){var e=this,t=this.props,n=t.data,a=void 0===n?[]:n,l=t.rangeX,u=t.rangeY,d=t.fillColor,s=void 0===d?"none":d,p=t.strokeColor,m=void 0===p?"#ffffff":p,f=t.strokeWidth,h=void 0===f?2:f,g=function(e,t){if(null==e)return{};var n,o,r={},a=Object.keys(e);for(o=0;o<a.length;o++)n=a[o],t.indexOf(n)>=0||(r[n]=e[n]);return r}(t,c),C=this.state.viewBox,N=function(e,t,n,o){if(0===e.length)return[];var a=(0,r.zipWith)(Math.min).apply(void 0,e),i=(0,r.zipWith)(Math.max).apply(void 0,e);return n!==undefined&&(a[0]=n[0],i[0]=n[1]),o!==undefined&&(a[1]=o[0],i[1]=o[1]),(0,r.map)((function(e){return(0,r.zipWith)((function(e,t,n,o){return(e-t)/(n-t)*o}))(e,a,i,t)}))(e)}(a,C,l,u);if(N.length>0){var v=N[0],b=N[N.length-1];N.push([C[0]+h,b[1]]),N.push([C[0]+h,-h]),N.push([-h,-h]),N.push([-h,v[1]])}var V=function(e){for(var t="",n=0;n<e.length;n++){var o=e[n];t+=o[0]+","+o[1]+" "}return t}(N);return(0,o.normalizeProps)((0,o.createComponentVNode)(2,i.Box,Object.assign({position:"relative"},g,{children:function(t){return(0,o.normalizeProps)((0,o.createVNode)(1,"div",null,(0,o.createVNode)(32,"svg",null,(0,o.createVNode)(32,"polyline",null,null,1,{transform:"scale(1, -1) translate(0, -"+C[1]+")",fill:s,stroke:m,"stroke-width":h,points:V}),2,{viewBox:"0 0 "+C[0]+" "+C[1],preserveAspectRatio:"none",style:{position:"absolute",top:0,left:0,right:0,bottom:0,overflow:"hidden"}}),2,Object.assign({},t),null,e.ref))}})))},a}(o.Component);u.defaultHooks=a.pureComponentHooks;var d={Line:Byond.IS_LTE_IE8?function(e){return null}:u};t.Chart=d},49751:function(e,t,n){"use strict";t.__esModule=!0,t.Collapsible=void 0;var o=n(96323),r=n(54425),a=n(25808),i=["children","color","title","buttons"];function c(e,t){return c=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e},c(e,t)}var l=function(e){var t,n;function l(t){var n;n=e.call(this,t)||this;var o=t.open;return n.state={open:o||!1},n}return n=e,(t=l).prototype=Object.create(n.prototype),t.prototype.constructor=t,c(t,n),l.prototype.render=function(){var e=this,t=this.props,n=this.state.open,c=t.children,l=t.color,u=void 0===l?"default":l,d=t.title,s=t.buttons,p=function(e,t){if(null==e)return{};var n,o,r={},a=Object.keys(e);for(o=0;o<a.length;o++)n=a[o],t.indexOf(n)>=0||(r[n]=e[n]);return r}(t,i);return(0,o.createComponentVNode)(2,r.Box,{mb:1,children:[(0,o.createVNode)(1,"div","Table",[(0,o.createVNode)(1,"div","Table__cell",(0,o.normalizeProps)((0,o.createComponentVNode)(2,a.Button,Object.assign({fluid:!0,color:u,icon:n?"chevron-down":"chevron-right",onClick:function(){return e.setState({open:!n})}},p,{children:d}))),2),s&&(0,o.createVNode)(1,"div","Table__cell Table__cell--collapsing",s,0)],0),n&&(0,o.createComponentVNode)(2,r.Box,{mt:1,children:c})]})},l}(o.Component);t.Collapsible=l},47233:function(e,t,n){"use strict";t.__esModule=!0,t.ColorBox=void 0;var o=n(96323),r=n(1060),a=n(54425),i=["content","children","className","color","backgroundColor"];var c=function(e){var t=e.content,n=(e.children,e.className),c=e.color,l=e.backgroundColor,u=function(e,t){if(null==e)return{};var n,o,r={},a=Object.keys(e);for(o=0;o<a.length;o++)n=a[o],t.indexOf(n)>=0||(r[n]=e[n]);return r}(e,i);return u.color=t?null:"transparent",u.backgroundColor=c||l,(0,o.normalizeProps)((0,o.createVNode)(1,"div",(0,r.classes)(["ColorBox",n,(0,a.computeBoxClassName)(u)]),t||".",0,Object.assign({},(0,a.computeBoxProps)(u))))};t.ColorBox=c,c.defaultHooks=r.pureComponentHooks},93913:function(e,t,n){"use strict";t.__esModule=!0,t.Dimmer=void 0;var o=n(96323),r=n(1060),a=n(54425),i=["className","children","full"];t.Dimmer=function(e){var t=e.className,n=e.children,c=e.full,l=function(e,t){if(null==e)return{};var n,o,r={},a=Object.keys(e);for(o=0;o<a.length;o++)n=a[o],t.indexOf(n)>=0||(r[n]=e[n]);return r}(e,i);return(0,o.normalizeProps)((0,o.createComponentVNode)(2,a.Box,Object.assign({className:(0,r.classes)(["Dimmer",!!c&&"Dimmer--full"].concat(t))},l,{children:(0,o.createVNode)(1,"div","Dimmer__inner",n,0)})))}},22755:function(e,t,n){"use strict";t.__esModule=!0,t.Divider=void 0;var o=n(96323),r=n(1060);t.Divider=function(e){var t=e.vertical,n=e.hidden;return(0,o.createVNode)(1,"div",(0,r.classes)(["Divider",n&&"Divider--hidden",t?"Divider--vertical":"Divider--horizontal"]))}},42833:function(e,t,n){"use strict";t.__esModule=!0,t.DraggableControl=void 0;var o=n(96323),r=n(97622),a=n(1060),i=n(54642);function c(e,t){return c=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e},c(e,t)}var l=function(e,t){return e.screenX*t[0]+e.screenY*t[1]},u=function(e){var t,n;function a(t){var n;return(n=e.call(this,t)||this).inputRef=(0,o.createRef)(),n.state={value:t.value,dragging:!1,editing:!1,internalValue:null,origin:null,suppressingFlicker:!1},n.flickerTimer=null,n.suppressFlicker=function(){var e=n.props.suppressFlicker;e>0&&(n.setState({suppressingFlicker:!0}),clearTimeout(n.flickerTimer),n.flickerTimer=setTimeout((function(){return n.setState({suppressingFlicker:!1})}),e))},n.handleDragStart=function(e){var t=n.props,o=t.value,r=t.dragMatrix;n.state.editing||(document.body.style["pointer-events"]="none",n.ref=e.target,n.setState({dragging:!1,origin:l(e,r),value:o,internalValue:o}),n.timer=setTimeout((function(){n.setState({dragging:!0})}),250),n.dragInterval=setInterval((function(){var t=n.state,o=t.dragging,r=t.value,a=n.props.onDrag;o&&a&&a(e,r)}),n.props.updateRate||400),document.addEventListener("mousemove",n.handleDragMove),document.addEventListener("mouseup",n.handleDragEnd))},n.handleDragMove=function(e){var t=n.props,o=t.minValue,a=t.maxValue,i=t.step,c=t.stepPixelSize,u=t.dragMatrix;n.setState((function(t){var n=Object.assign({},t),d=l(e,u)-n.origin;if(t.dragging){var s=Number.isFinite(o)?o%i:0;n.internalValue=(0,r.clamp)(n.internalValue+d*i/c,o-i,a+i),n.value=(0,r.clamp)(n.internalValue-n.internalValue%i+s,o,a),n.origin=l(e,u)}else Math.abs(d)>4&&(n.dragging=!0);return n}))},n.handleDragEnd=function(e){var t=n.props,o=t.onChange,r=t.onDrag,a=n.state,i=a.dragging,c=a.value,l=a.internalValue;if(document.body.style["pointer-events"]="auto",clearTimeout(n.timer),clearInterval(n.dragInterval),n.setState({dragging:!1,editing:!i,origin:null}),document.removeEventListener("mousemove",n.handleDragMove),document.removeEventListener("mouseup",n.handleDragEnd),i)n.suppressFlicker(),o&&o(e,c),r&&r(e,c);else if(n.inputRef){var u=n.inputRef.current;u.value=l;try{u.focus(),u.select()}catch(d){}}},n}return n=e,(t=a).prototype=Object.create(n.prototype),t.prototype.constructor=t,c(t,n),a.prototype.render=function(){var e=this,t=this.state,n=t.dragging,a=t.editing,c=t.value,l=t.suppressingFlicker,u=this.props,d=u.animated,s=u.value,p=u.unit,m=u.minValue,f=u.maxValue,h=u.unclamped,g=u.format,C=u.onChange,N=u.onDrag,v=u.children,b=u.height,V=u.lineHeight,y=u.fontSize,x=s;(n||l)&&(x=c);var I=function(e){return e+(p?" "+p:"")},k=d&&!n&&!l&&(0,o.createComponentVNode)(2,i.AnimatedNumber,{value:x,format:g,children:I})||I(g?g(x):x),w=(0,o.createVNode)(64,"input","NumberInput__input",null,1,{style:{display:a?undefined:"none",height:b,"line-height":V,"font-size":y},onBlur:function(t){if(a){var n;if(h)n=t.target.value;else if(n=(0,r.clamp)(parseFloat(t.target.value),m,f),Number.isNaN(n))return void e.setState({editing:!1});e.setState({editing:!1,value:n}),e.suppressFlicker(),C&&C(t,n),N&&N(t,n)}},onKeyDown:function(t){if(13===t.keyCode){var n;if(h)n=t.target.value;else if(n=(0,r.clamp)(parseFloat(t.target.value),m,f),Number.isNaN(n))return void e.setState({editing:!1});return e.setState({editing:!1,value:n}),e.suppressFlicker(),C&&C(t,n),void(N&&N(t,n))}27!==t.keyCode||e.setState({editing:!1})}},null,this.inputRef);return v({dragging:n,editing:a,value:s,displayValue:x,displayElement:k,inputElement:w,handleDragStart:this.handleDragStart})},a}(o.Component);t.DraggableControl=u,u.defaultHooks=a.pureComponentHooks,u.defaultProps={minValue:-Infinity,maxValue:+Infinity,step:1,stepPixelSize:1,suppressFlicker:50,dragMatrix:[1,0]}},12489:function(e,t,n){"use strict";t.__esModule=!0,t.Dropdown=void 0;var o=n(96323),r=n(1060),a=n(54425),i=n(65743),c=["icon","iconRotation","iconSpin","clipSelectedText","color","dropdownStyle","over","noscroll","nochevron","width","onClick","onOpen","selected","disabled","displayText"],l=["className"];function u(e,t){if(null==e)return{};var n,o,r={},a=Object.keys(e);for(o=0;o<a.length;o++)n=a[o],t.indexOf(n)>=0||(r[n]=e[n]);return r}function d(e,t){return d=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e},d(e,t)}var s=function(e){var t,n;function s(t){var n;return(n=e.call(this,t)||this).state={selected:t.selected,open:!1},n.handleClick=function(){n.state.open&&n.setOpen(!1)},n}n=e,(t=s).prototype=Object.create(n.prototype),t.prototype.constructor=t,d(t,n);var p=s.prototype;return p.componentWillUnmount=function(){window.removeEventListener("click",this.handleClick)},p.setOpen=function(e){var t=this;this.setState({open:e}),e?(setTimeout((function(){return window.addEventListener("click",t.handleClick)})),this.menuRef.focus()):window.removeEventListener("click",this.handleClick)},p.setSelected=function(e){this.setState({selected:e}),this.setOpen(!1),this.props.onSelected(e)},p.buildMenu=function(){var e=this,t=this.props.options,n=(void 0===t?[]:t).map((function(t){var n,r;return"string"==typeof t?(n=t,r=t):(n=t.displayText,r=t.value),(0,o.createComponentVNode)(2,a.Box,{className:"Dropdown__menuentry",onClick:function(){e.setSelected(r)},children:n},r)}));return n.length?n:"No Options Found"},p.render=function(){var e=this,t=this.props,n=t.icon,d=t.iconRotation,s=t.iconSpin,p=t.clipSelectedText,m=void 0===p||p,f=t.color,h=void 0===f?"default":f,g=t.dropdownStyle,C=t.over,N=t.noscroll,v=t.nochevron,b=t.width,V=(t.onClick,t.onOpen,t.selected,t.disabled),y=t.displayText,x=u(t,c),I=x.className,k=u(x,l),w=C?!this.state.open:this.state.open,S=this.state.open?(0,o.createVNode)(1,"div",(0,r.classes)([N?"Dropdown__menu-noscroll":"Dropdown__menu",C&&"Dropdown__over"]),this.buildMenu(),0,{tabIndex:"-1",style:{width:b}},null,(function(t){e.menuRef=t})):null;return(0,o.createVNode)(1,"div","Dropdown",[(0,o.normalizeProps)((0,o.createComponentVNode)(2,a.Box,Object.assign({width:b,className:(0,r.classes)(["Dropdown__control","Button","Button--color--"+h,V&&"Button--disabled",I])},k,{onClick:function(n){V&&!e.state.open||(e.setOpen(!e.state.open),t.onOpen&&t.onOpen(n))},children:[n&&(0,o.createComponentVNode)(2,i.Icon,{name:n,rotation:d,spin:s,mr:1}),(0,o.createVNode)(1,"span","Dropdown__selected-text",y||this.state.selected,0,{style:{overflow:m?"hidden":"visible"}}),!!v||(0,o.createVNode)(1,"span","Dropdown__arrow-button",(0,o.createComponentVNode)(2,i.Icon,{name:w?"chevron-up":"chevron-down"}),2)]}))),S],0,{style:g})},s}(o.Component);t.Dropdown=s},67486:function(e,t,n){"use strict";t.__esModule=!0,t.computeFlexItemProps=t.computeFlexItemClassName=t.Flex=t.computeFlexProps=t.computeFlexClassName=void 0;var o=n(96323),r=n(1060),a=n(54425),i=["className","direction","wrap","align","justify","inline"],c=["className"],l=["className","style","grow","order","shrink","basis","align"],u=["className"];function d(e,t){if(null==e)return{};var n,o,r={},a=Object.keys(e);for(o=0;o<a.length;o++)n=a[o],t.indexOf(n)>=0||(r[n]=e[n]);return r}var s=function(e){return(0,r.classes)(["Flex",e.inline&&"Flex--inline",Byond.IS_LTE_IE10&&"Flex--iefix",Byond.IS_LTE_IE10&&"column"===e.direction&&"Flex--iefix--column",(0,a.computeBoxClassName)(e)])};t.computeFlexClassName=s;var p=function(e){e.className;var t=e.direction,n=e.wrap,o=e.align,r=e.justify,c=(e.inline,d(e,i));return(0,a.computeBoxProps)(Object.assign({style:Object.assign({},c.style,{"flex-direction":t,"flex-wrap":!0===n?"wrap":n,"align-items":o,"justify-content":r})},c))};t.computeFlexProps=p;var m=function(e){var t=e.className,n=d(e,c);return(0,o.normalizeProps)((0,o.createVNode)(1,"div",(0,r.classes)([t,s(n)]),null,1,Object.assign({},p(n))))};t.Flex=m,m.defaultHooks=r.pureComponentHooks;var f=function(e){return(0,r.classes)(["Flex__item",Byond.IS_LTE_IE10&&"Flex__item--iefix",(0,a.computeBoxClassName)(e)])};t.computeFlexItemClassName=f;var h=function(e){e.className;var t,n=e.style,o=e.grow,r=e.order,i=e.shrink,c=e.basis,u=e.align,s=d(e,l),p=null!=(t=null!=c?c:e.width)?t:o!==undefined?0:undefined;return(0,a.computeBoxProps)(Object.assign({style:Object.assign({},n,{"flex-grow":o!==undefined&&Number(o),"flex-shrink":i!==undefined&&Number(i),"flex-basis":(0,a.unit)(p),order:r,"align-self":u})},s))};t.computeFlexItemProps=h;var g=function(e){var t=e.className,n=d(e,u);return(0,o.normalizeProps)((0,o.createVNode)(1,"div",(0,r.classes)([t,f(e)]),null,1,Object.assign({},h(n))))};g.defaultHooks=r.pureComponentHooks,m.Item=g},28408:function(e,t,n){"use strict";t.__esModule=!0,t.GridColumn=t.Grid=void 0;var o=n(96323),r=n(28581),a=n(1060),i=["children"],c=["size","style"];function l(e,t){if(null==e)return{};var n,o,r={},a=Object.keys(e);for(o=0;o<a.length;o++)n=a[o],t.indexOf(n)>=0||(r[n]=e[n]);return r}var u=function(e){var t=e.children,n=l(e,i);return(0,o.normalizeProps)((0,o.createComponentVNode)(2,r.Table,Object.assign({},n,{children:(0,o.createComponentVNode)(2,r.Table.Row,{children:t})})))};t.Grid=u,u.defaultHooks=a.pureComponentHooks;var d=function(e){var t=e.size,n=void 0===t?1:t,a=e.style,i=l(e,c);return(0,o.normalizeProps)((0,o.createComponentVNode)(2,r.Table.Cell,Object.assign({style:Object.assign({width:n+"%"},a)},i)))};t.GridColumn=d,u.defaultHooks=a.pureComponentHooks,u.Column=d},65743:function(e,t,n){"use strict";t.__esModule=!0,t.IconStack=t.Icon=void 0;var o=n(96323),r=n(1060),a=n(54425),i=["name","size","spin","className","style","rotation","inverse"],c=["className","style","children"];function l(e,t){if(null==e)return{};var n,o,r={},a=Object.keys(e);for(o=0;o<a.length;o++)n=a[o],t.indexOf(n)>=0||(r[n]=e[n]);return r}var u=/-o$/,d=function(e){var t=e.name,n=e.size,c=e.spin,d=e.className,s=e.style,p=void 0===s?{}:s,m=e.rotation,f=(e.inverse,l(e,i));n&&(p["font-size"]=100*n+"%"),"number"==typeof m&&(p.transform="rotate("+m+"deg)");var h=u.test(t),g=t.replace(u,"");return(0,o.normalizeProps)((0,o.createComponentVNode)(2,a.Box,Object.assign({as:"i",className:(0,r.classes)(["Icon",d,h?"fa-regular":"fa-solid","fa-"+g,c&&"fa-spin"]),style:p},f)))};t.Icon=d,d.defaultHooks=r.pureComponentHooks;var s=function(e){var t=e.className,n=e.style,i=void 0===n?{}:n,u=e.children,d=l(e,c);return(0,o.normalizeProps)((0,o.createComponentVNode)(2,a.Box,Object.assign({as:"span","class":(0,r.classes)(["IconStack",t]),style:i},d,{children:u})))};t.IconStack=s,d.Stack=s},94261:function(e,t,n){"use strict";t.__esModule=!0,t.Image=void 0;var o=n(96323),r=n(1060),a=n(54425),i=["pixelated","className"];t.Image=function(e){var t=e.pixelated,n=e.className,c=function(e,t){if(null==e)return{};var n,o,r={},a=Object.keys(e);for(o=0;o<a.length;o++)n=a[o],t.indexOf(n)>=0||(r[n]=e[n]);return r}(e,i);return(0,o.normalizeProps)((0,o.createComponentVNode)(2,a.Box,Object.assign({as:"img"},c,{style:t&&{"-ms-interpolation-mode":"nearest-neighbor"},className:(0,r.classes)("Image",n)})))}},77863:function(e,t,n){"use strict";t.__esModule=!0,t.Input=t.toInputValue=void 0;var o=n(96323),r=n(1060),a=n(54425),i=n(57890),c=["selfClear","onInput","onChange","onEnter","value","maxLength","placeholder"],l=["className","fluid","monospace"];function u(e,t){if(null==e)return{};var n,o,r={},a=Object.keys(e);for(o=0;o<a.length;o++)n=a[o],t.indexOf(n)>=0||(r[n]=e[n]);return r}function d(e,t){return d=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e},d(e,t)}var s=function(e){return"number"!=typeof e&&"string"!=typeof e?"":String(e)};t.toInputValue=s;var p=function(e){var t,n;function p(){var t;return(t=e.call(this)||this).inputRef=(0,o.createRef)(),t.state={editing:!1,history:[],historyIndex:0},t.handleInput=function(e){var n=t.state.editing,o=t.props.onInput;n||t.setEditing(!0),o&&o(e,e.target.value)},t.handleFocus=function(e){t.state.editing||t.setEditing(!0)},t.handleBlur=function(e){var n=t.state.editing,o=t.props.onChange;n&&(t.setEditing(!1),o&&o(e,e.target.value))},t.navigateHistory=function(e,n){var o=t.state.historyIndex+e,r=!1;(e>0&&o<t.state.history.length||e<0&&o>=0)&&(r=!0),r?(n.target.value=t.state.history[o],t.state.historyIndex=o):e>0&&(n.target.value="",t.state.historyIndex=t.state.history.length)},t.appendHistory=function(e){this.state.history[this.state.history.length-1]!==e&&this.state.history.push(e),this.state.historyIndex=this.state.history.length},t.handleKeyDown=function(e){var n=t.props,o=n.onInput,r=n.onChange,a=n.onEnter,c=n.history;return e.keyCode===i.KEY_ENTER?(t.setEditing(!1),r&&r(e,e.target.value),o&&o(e,e.target.value),a&&a(e,e.target.value),c&&t.appendHistory(e.target.value),void(t.props.selfClear?e.target.value="":e.target.blur())):e.keyCode===i.KEY_ESCAPE?t.props.onEscape?void t.props.onEscape(e):(t.setEditing(!1),e.target.value=s(t.props.value),void e.target.blur()):void(c&&(e.keyCode===i.KEY_UP?t.navigateHistory(-1,e):e.keyCode===i.KEY_DOWN&&t.navigateHistory(1,e)))},t}n=e,(t=p).prototype=Object.create(n.prototype),t.prototype.constructor=t,d(t,n);var m=p.prototype;return m.componentDidMount=function(){var e=this,t=this.props.value,n=this.inputRef.current;n&&(n.value=s(t)),(this.props.autoFocus||this.props.autoSelect)&&setTimeout((function(){n.focus(),e.props.autoSelect&&n.select()}),1)},m.componentDidUpdate=function(e,t){var n=this.state.editing,o=e.value,r=this.props.value,a=this.inputRef.current;a&&!n&&o!==r&&(a.value=s(r))},m.setEditing=function(e){this.setState({editing:e})},m.render=function(){var e=this.props,t=(e.selfClear,e.onInput,e.onChange,e.onEnter,e.value,e.maxLength),n=e.placeholder,i=u(e,c),d=i.className,s=i.fluid,p=i.monospace,m=u(i,l);return(0,o.normalizeProps)((0,o.createComponentVNode)(2,a.Box,Object.assign({className:(0,r.classes)(["Input",s&&"Input--fluid",p&&"Input--monospace",d])},m,{children:[(0,o.createVNode)(1,"div","Input__baseline",".",16),(0,o.createVNode)(64,"input","Input__input",null,1,{placeholder:n,onInput:this.handleInput,onFocus:this.handleFocus,onBlur:this.handleBlur,onKeyDown:this.handleKeyDown,maxLength:t},null,this.inputRef)]})))},p}(o.Component);t.Input=p},54291:function(e,t,n){"use strict";t.__esModule=!0,t.Interactive=void 0;var o=n(96323),r=n(97622);function a(e,t){return a=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e},a(e,t)}var i=function(e){return e&&e.ownerDocument.defaultView||self},c=function(e,t){var n=e.getBoundingClientRect(),o=t;return{left:(0,r.clamp)((o.pageX-(n.left+i(e).pageXOffset))/n.width,0,1),top:(0,r.clamp)((o.pageY-(n.top+i(e).pageYOffset))/n.height,0,1)}},l=function(e){var t,n;function r(t){var n;return(n=e.call(this)||this).containerRef=void 0,n.props=void 0,n.handleMoveStart=function(e){var t,o=null==(t=n.containerRef)?void 0:t.current;o&&(e.preventDefault(),o.focus(),n.props.onMove(c(o,e)),n.toggleDocumentEvents(!0))},n.handleMove=function(e){var t;e.preventDefault(),e.buttons>0&&null!=(t=n.containerRef)&&t.current?n.props.onMove(c(n.containerRef.current,e)):n.toggleDocumentEvents(!1)},n.handleMoveEnd=function(){n.toggleDocumentEvents(!1)},n.handleKeyDown=function(e){var t=e.which||e.keyCode;t<37||t>40||(e.preventDefault(),n.props.onKey({left:39===t?.05:37===t?-.05:0,top:40===t?.05:38===t?-.05:0}))},n.props=t,n.containerRef=(0,o.createRef)(),n}n=e,(t=r).prototype=Object.create(n.prototype),t.prototype.constructor=t,a(t,n);var l=r.prototype;return l.toggleDocumentEvents=function(e){var t,n=null==(t=this.containerRef)?void 0:t.current,o=i(n),r=e?o.addEventListener:o.removeEventListener;r("mousemove",this.handleMove),r("mouseup",this.handleMoveEnd)},l.componentDidMount=function(){this.toggleDocumentEvents(!0)},l.componentWillUnmount=function(){this.toggleDocumentEvents(!1)},l.render=function(){return(0,o.normalizeProps)((0,o.createVNode)(1,"div","react-colorful__interactive",this.props.children,0,Object.assign({},this.props,{style:this.props.style,onMouseDown:this.handleMoveStart,onKeyDown:this.handleKeyDown,tabIndex:0,role:"slider"}),null,this.containerRef))},r}(o.Component);t.Interactive=l},14274:function(e,t,n){"use strict";t.__esModule=!0,t.Knob=void 0;var o=n(96323),r=n(97622),a=n(1060),i=n(54425),c=n(42833),l=n(97667),u=["animated","format","maxValue","minValue","unclamped","onChange","onDrag","step","stepPixelSize","suppressFlicker","unit","value","className","style","fillValue","color","ranges","size","bipolar","children"];t.Knob=function(e){if(Byond.IS_LTE_IE8)return(0,o.normalizeProps)((0,o.createComponentVNode)(2,l.NumberInput,Object.assign({},e)));var t=e.animated,n=e.format,d=e.maxValue,s=e.minValue,p=e.unclamped,m=e.onChange,f=e.onDrag,h=e.step,g=e.stepPixelSize,C=e.suppressFlicker,N=e.unit,v=e.value,b=e.className,V=e.style,y=e.fillValue,x=e.color,I=e.ranges,k=void 0===I?{}:I,w=e.size,S=void 0===w?1:w,_=e.bipolar,M=(e.children,function(e,t){if(null==e)return{};var n,o,r={},a=Object.keys(e);for(o=0;o<a.length;o++)n=a[o],t.indexOf(n)>=0||(r[n]=e[n]);return r}(e,u));return(0,o.normalizeProps)((0,o.createComponentVNode)(2,c.DraggableControl,Object.assign({dragMatrix:[0,-1]},{animated:t,format:n,maxValue:d,minValue:s,unclamped:p,onChange:m,onDrag:f,step:h,stepPixelSize:g,suppressFlicker:C,unit:N,value:v},{children:function(e){var t=e.dragging,n=(e.editing,e.value),c=e.displayValue,l=e.displayElement,u=e.inputElement,p=e.handleDragStart,m=(0,r.scale)(null!=y?y:c,s,d),f=(0,r.scale)(c,s,d),h=x||(0,r.keyOfMatchingRange)(null!=y?y:n,k)||"default",g=Math.min(270*(f-.5),225);return(0,o.normalizeProps)((0,o.createVNode)(1,"div",(0,a.classes)(["Knob","Knob--color--"+h,_&&"Knob--bipolar",b,(0,i.computeBoxClassName)(M)]),[(0,o.createVNode)(1,"div","Knob__circle",(0,o.createVNode)(1,"div","Knob__cursorBox",(0,o.createVNode)(1,"div","Knob__cursor"),2,{style:{transform:"rotate("+g+"deg)"}}),2),t&&(0,o.createVNode)(1,"div","Knob__popupValue",l,0),(0,o.createVNode)(32,"svg","Knob__ring Knob__ringTrackPivot",(0,o.createVNode)(32,"circle","Knob__ringTrack",null,1,{cx:"50",cy:"50",r:"50"}),2,{viewBox:"0 0 100 100"}),(0,o.createVNode)(32,"svg","Knob__ring Knob__ringFillPivot",(0,o.createVNode)(32,"circle","Knob__ringFill",null,1,{style:{"stroke-dashoffset":Math.max(((_?2.75:2)-1.5*m)*Math.PI*50,0)},cx:"50",cy:"50",r:"50"}),2,{viewBox:"0 0 100 100"}),u],0,Object.assign({},(0,i.computeBoxProps)(Object.assign({style:Object.assign({"font-size":S+"em"},V)},M)),{onMouseDown:p})))}})))}},95592:function(e,t,n){"use strict";t.__esModule=!0,t.LabeledControls=void 0;var o=n(96323),r=n(67486),a=["children","wrap"],i=["label","children","mx"];function c(e,t){if(null==e)return{};var n,o,r={},a=Object.keys(e);for(o=0;o<a.length;o++)n=a[o],t.indexOf(n)>=0||(r[n]=e[n]);return r}var l=function(e){var t=e.children,n=e.wrap,i=c(e,a);return(0,o.normalizeProps)((0,o.createComponentVNode)(2,r.Flex,Object.assign({mx:-.5,wrap:n,align:"stretch",justify:"space-between"},i,{children:t})))};t.LabeledControls=l;l.Item=function(e){var t=e.label,n=e.children,a=e.mx,l=void 0===a?1:a,u=c(e,i);return(0,o.createComponentVNode)(2,r.Flex.Item,{mx:l,children:(0,o.normalizeProps)((0,o.createComponentVNode)(2,r.Flex,Object.assign({height:"100%",direction:"column",align:"center",textAlign:"center",justify:"space-between"},u,{children:[(0,o.createComponentVNode)(2,r.Flex.Item),(0,o.createComponentVNode)(2,r.Flex.Item,{children:n}),(0,o.createComponentVNode)(2,r.Flex.Item,{color:"label",children:t})]})))})}},21173:function(e,t,n){"use strict";t.__esModule=!0,t.LabeledList=void 0;var o=n(96323),r=n(1060),a=n(54425),i=n(22755),c=function(e){var t=e.children;return(0,o.createVNode)(1,"table","LabeledList",t,0)};t.LabeledList=c,c.defaultHooks=r.pureComponentHooks;var l=function(e){var t=e.className,n=e.label,i=e.labelColor,c=void 0===i?"label":i,l=e.labelWrap,u=e.color,d=e.textAlign,s=e.buttons,p=e.content,m=e.children,f=e.verticalAlign,h=void 0===f?"baseline":f;return(0,o.createVNode)(1,"tr",(0,r.classes)(["LabeledList__row",t]),[(0,o.createComponentVNode)(2,a.Box,{as:"td",color:c,className:(0,r.classes)(["LabeledList__cell",!l&&"LabeledList__label--nowrap"]),verticalAlign:h,children:n?n+":":null}),(0,o.createComponentVNode)(2,a.Box,{as:"td",color:u,textAlign:d,className:(0,r.classes)(["LabeledList__cell","LabeledList__content"]),colSpan:s?undefined:2,verticalAlign:h,children:[p,m]}),s&&(0,o.createVNode)(1,"td","LabeledList__cell LabeledList__buttons",s,0)],0)};l.defaultHooks=r.pureComponentHooks;var u=function(e){var t=e.size?(0,a.unit)(Math.max(0,e.size-1)):0;return(0,o.createVNode)(1,"tr","LabeledList__row",(0,o.createVNode)(1,"td",null,(0,o.createComponentVNode)(2,i.Divider),2,{colSpan:3,style:{"padding-top":t,"padding-bottom":t}}),2)};u.defaultHooks=r.pureComponentHooks,c.Item=l,c.Divider=u},89416:function(e,t,n){"use strict";t.__esModule=!0,t.Modal=void 0;var o=n(96323),r=n(1060),a=n(54425),i=n(93913),c=["className","children","full"];t.Modal=function(e){var t=e.className,n=e.children,l=e.full,u=function(e,t){if(null==e)return{};var n,o,r={},a=Object.keys(e);for(o=0;o<a.length;o++)n=a[o],t.indexOf(n)>=0||(r[n]=e[n]);return r}(e,c);return(0,o.createComponentVNode)(2,i.Dimmer,{full:l,children:(0,o.normalizeProps)((0,o.createVNode)(1,"div",(0,r.classes)(["Modal",t,(0,a.computeBoxClassName)(u)]),n,0,Object.assign({},(0,a.computeBoxProps)(u))))})}},23257:function(e,t,n){"use strict";t.__esModule=!0,t.NoticeBox=void 0;var o=n(96323),r=n(1060),a=n(54425),i=["className","color","info","warning","success","danger"];var c=function(e){var t=e.className,n=e.color,c=e.info,l=(e.warning,e.success),u=e.danger,d=function(e,t){if(null==e)return{};var n,o,r={},a=Object.keys(e);for(o=0;o<a.length;o++)n=a[o],t.indexOf(n)>=0||(r[n]=e[n]);return r}(e,i);return(0,o.normalizeProps)((0,o.createComponentVNode)(2,a.Box,Object.assign({className:(0,r.classes)(["NoticeBox",n&&"NoticeBox--color--"+n,c&&"NoticeBox--type--info",l&&"NoticeBox--type--success",u&&"NoticeBox--type--danger",t])},d)))};t.NoticeBox=c,c.defaultHooks=r.pureComponentHooks},97667:function(e,t,n){"use strict";t.__esModule=!0,t.NumberInput=void 0;var o=n(96323),r=n(97622),a=n(1060),i=n(54642),c=n(54425);function l(e,t){return l=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e},l(e,t)}var u=function(e){var t,n;function u(t){var n;n=e.call(this,t)||this;var a=t.value;return n.inputRef=(0,o.createRef)(),n.state={value:a,dragging:!1,editing:!1,internalValue:null,origin:null,suppressingFlicker:!1},n.flickerTimer=null,n.suppressFlicker=function(){var e=n.props.suppressFlicker;e>0&&(n.setState({suppressingFlicker:!0}),clearTimeout(n.flickerTimer),n.flickerTimer=setTimeout((function(){return n.setState({suppressingFlicker:!1})}),e))},n.handleDragStart=function(e){var t=n.props.value;n.state.editing||(document.body.style["pointer-events"]="none",n.ref=e.target,n.setState({dragging:!1,origin:e.screenY,value:t,internalValue:t}),n.timer=setTimeout((function(){n.setState({dragging:!0})}),250),n.dragInterval=setInterval((function(){var t=n.state,o=t.dragging,r=t.value,a=n.props.onDrag;o&&a&&a(e,r)}),n.props.updateRate||400),document.addEventListener("mousemove",n.handleDragMove),document.addEventListener("mouseup",n.handleDragEnd))},n.handleDragMove=function(e){var t=n.props,o=t.minValue,a=t.maxValue,i=t.step,c=t.stepPixelSize;n.setState((function(t){var n=Object.assign({},t),l=n.origin-e.screenY;if(t.dragging){var u=Number.isFinite(o)?o%i:0;n.internalValue=(0,r.clamp)(n.internalValue+l*i/c,o-i,a+i),n.value=(0,r.clamp)(n.internalValue-n.internalValue%i+u,o,a),n.origin=e.screenY}else Math.abs(l)>4&&(n.dragging=!0);return n}))},n.handleDragEnd=function(e){var t=n.props,o=t.onChange,r=t.onDrag,a=n.state,i=a.dragging,c=a.value,l=a.internalValue;if(document.body.style["pointer-events"]="auto",clearTimeout(n.timer),clearInterval(n.dragInterval),n.setState({dragging:!1,editing:!i,origin:null}),document.removeEventListener("mousemove",n.handleDragMove),document.removeEventListener("mouseup",n.handleDragEnd),i)n.suppressFlicker(),o&&o(e,c),r&&r(e,c);else if(n.inputRef){var u=n.inputRef.current;u.value=l;try{u.focus(),u.select()}catch(d){}}},n}return n=e,(t=u).prototype=Object.create(n.prototype),t.prototype.constructor=t,l(t,n),u.prototype.render=function(){var e=this,t=this.state,n=t.dragging,l=t.editing,u=t.value,d=t.suppressingFlicker,s=this.props,p=s.className,m=s.fluid,f=s.animated,h=s.value,g=s.unit,C=s.minValue,N=s.maxValue,v=s.height,b=s.width,V=s.lineHeight,y=s.fontSize,x=s.format,I=s.onChange,k=s.onDrag,w=h;(n||d)&&(w=u);var S=function(e){return(0,o.createVNode)(1,"div","NumberInput__content",e+(g?" "+g:""),0,{unselectable:Byond.IS_LTE_IE8})},_=f&&!n&&!d&&(0,o.createComponentVNode)(2,i.AnimatedNumber,{value:w,format:x,children:S})||S(x?x(w):w);return(0,o.createComponentVNode)(2,c.Box,{className:(0,a.classes)(["NumberInput",m&&"NumberInput--fluid",p]),minWidth:b,minHeight:v,lineHeight:V,fontSize:y,onMouseDown:this.handleDragStart,children:[(0,o.createVNode)(1,"div","NumberInput__barContainer",(0,o.createVNode)(1,"div","NumberInput__bar",null,1,{style:{height:(0,r.clamp)((w-C)/(N-C)*100,0,100)+"%"}}),2),_,(0,o.createVNode)(64,"input","NumberInput__input",null,1,{style:{opacity:l?undefined:0,height:v,"line-height":V,"font-size":y},onFocus:function(t){e.setState({editing:!0}),I&&I(t,h)},onBlur:function(t){if(l){var n=(0,r.clamp)(parseFloat(t.target.value),C,N);Number.isNaN(n)?e.setState({editing:!1}):(e.setState({editing:!1,value:n}),e.suppressFlicker(),I&&I(t,n),k&&k(t,n))}},onKeyDown:function(t){if(13===t.keyCode){var n=(0,r.clamp)(parseFloat(t.target.value),C,N);return Number.isNaN(n)?void e.setState({editing:!1}):(e.setState({editing:!1,value:n}),e.suppressFlicker(),I&&I(t,n),void(k&&k(t,n)))}27!==t.keyCode||e.setState({editing:!1})}},null,this.inputRef)]})},u}(o.Component);t.NumberInput=u,u.defaultHooks=a.pureComponentHooks,u.defaultProps={minValue:-Infinity,maxValue:+Infinity,step:1,stepPixelSize:1,suppressFlicker:50}},76776:function(e,t,n){"use strict";t.__esModule=!0,t.Pointer=void 0;var o=n(96323),r=n(1060);t.Pointer=function(e){var t=e.className,n=e.color,a=e.left,i=e.top,c=void 0===i?.5:i,l=(0,r.classes)(["react-colorful__pointer",t]),u={top:100*c+"%",left:100*a+"%"};return(0,o.createVNode)(1,"div",l,(0,o.createVNode)(1,"div","react-colorful__pointer-fill",null,1,{style:{"background-color":n}}),2,{style:u})}},16513:function(e,t,n){"use strict";t.__esModule=!0,t.Popper=void 0;var o=n(34739),r=n(96323);function a(e,t){return a=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e},a(e,t)}var i=function(e){var t,n;function i(){var t;return(t=e.call(this)||this).renderedContent=void 0,t.popperInstance=void 0,i.id+=1,t}n=e,(t=i).prototype=Object.create(n.prototype),t.prototype.constructor=t,a(t,n);var c=i.prototype;return c.componentDidMount=function(){var e=this,t=this.props,n=t.additionalStyles,a=t.options;if(this.renderedContent=document.createElement("div"),n)for(var i=0,c=Object.entries(n);i<c.length;i++){var l=c[i],u=l[0],d=l[1];this.renderedContent.style[u]=d}this.renderPopperContent((function(){document.body.appendChild(e.renderedContent);var t=(0,r.findDOMfromVNode)(e.$LI,!0);t&&(e.popperInstance=(0,o.createPopper)(t,e.renderedContent,a))}))},c.componentDidUpdate=function(){var e=this;this.renderPopperContent((function(){var t;return null==(t=e.popperInstance)?void 0:t.update()}))},c.componentWillUnmount=function(){var e;null==(e=this.popperInstance)||e.destroy(),this.renderedContent.remove()},c.renderPopperContent=function(e){(0,r.render)(this.props.popperContent,this.renderedContent,e)},c.render=function(){return this.props.children},i}(r.Component);t.Popper=i,i.id=0},12194:function(e,t,n){"use strict";t.__esModule=!0,t.ProgressBar=void 0;var o=n(96323),r=n(97622),a=n(1060),i=n(54425),c=n(84200),l=["className","value","minValue","maxValue","color","textColor","ranges","children"];var u=function(e){var t=e.className,n=e.value,u=e.minValue,d=void 0===u?0:u,s=e.maxValue,p=void 0===s?1:s,m=e.color,f=e.textColor,h=e.ranges,g=void 0===h?{}:h,C=e.children,N=function(e,t){if(null==e)return{};var n,o,r={},a=Object.keys(e);for(o=0;o<a.length;o++)n=a[o],t.indexOf(n)>=0||(r[n]=e[n]);return r}(e,l),v=(0,r.scale)(n,d,p),b=C!==undefined,V=m||(0,r.keyOfMatchingRange)(n,g)||"default",y=(0,i.computeBoxProps)(N),x=["ProgressBar",t,(0,i.computeBoxClassName)(N)],I={width:100*(0,r.clamp01)(v)+"%"};return c.CSS_COLORS.includes(V)||"default"===V?x.push("ProgressBar--color--"+V):(y.style=(y.style||"")+"border-color: "+V+";",I["background-color"]=V),(0,o.normalizeProps)((0,o.createVNode)(1,"div",(0,a.classes)(x),[(0,o.createVNode)(1,"div","ProgressBar__fill ProgressBar__fill--animated",null,1,{style:I}),(0,o.createVNode)(1,"div","ProgressBar__content",b?C:(0,r.toFixed)(100*v)+"%",0,{style:f&&{color:f}})],4,Object.assign({},y)))};t.ProgressBar=u,u.defaultHooks=a.pureComponentHooks},94709:function(e,t,n){"use strict";t.__esModule=!0,t.RoundGauge=void 0;var o=n(96323),r=n(97622),a=n(1060),i=n(54642),c=n(54425),l=["value","minValue","maxValue","ranges","alertAfter","alertBefore","format","size","className","style"];t.RoundGauge=function(e){if(Byond.IS_LTE_IE8)return(0,o.normalizeProps)((0,o.createComponentVNode)(2,i.AnimatedNumber,Object.assign({},e)));var t=e.value,n=e.minValue,u=void 0===n?1:n,d=e.maxValue,s=void 0===d?1:d,p=e.ranges,m=e.alertAfter,f=e.alertBefore,h=e.format,g=e.size,C=void 0===g?1:g,N=e.className,v=e.style,b=function(e,t){if(null==e)return{};var n,o,r={},a=Object.keys(e);for(o=0;o<a.length;o++)n=a[o],t.indexOf(n)>=0||(r[n]=e[n]);return r}(e,l),V=(0,r.scale)(t,u,s),y=(0,r.clamp01)(V),x=p?{}:{primary:[0,1]};p&&Object.keys(p).forEach((function(e){var t=p[e];x[e]=[(0,r.scale)(t[0],u,s),(0,r.scale)(t[1],u,s)]}));var I=function(){if(m&&f&&m<f){if(m<t&&f>t)return!0}else if(m<t||f>t)return!0;return!1}()&&(0,r.keyOfMatchingRange)(y,x);return(0,o.createComponentVNode)(2,c.Box,{inline:!0,children:[(0,o.normalizeProps)((0,o.createVNode)(1,"div",(0,a.classes)(["RoundGauge",N,(0,c.computeBoxClassName)(b)]),(0,o.createVNode)(32,"svg",null,[(m||f)&&(0,o.createVNode)(32,"g",(0,a.classes)(["RoundGauge__alert",I?"active RoundGauge__alert--"+I:""]),(0,o.createVNode)(32,"path",null,null,1,{d:"M48.211,14.578C48.55,13.9 49.242,13.472 50,13.472C50.758,13.472 51.45,13.9 51.789,14.578C54.793,20.587 60.795,32.589 63.553,38.106C63.863,38.726 63.83,39.462 63.465,40.051C63.101,40.641 62.457,41 61.764,41C55.996,41 44.004,41 38.236,41C37.543,41 36.899,40.641 36.535,40.051C36.17,39.462 36.137,38.726 36.447,38.106C39.205,32.589 45.207,20.587 48.211,14.578ZM50,34.417C51.426,34.417 52.583,35.574 52.583,37C52.583,38.426 51.426,39.583 50,39.583C48.574,39.583 47.417,38.426 47.417,37C47.417,35.574 48.574,34.417 50,34.417ZM50,32.75C50,32.75 53,31.805 53,22.25C53,20.594 51.656,19.25 50,19.25C48.344,19.25 47,20.594 47,22.25C47,31.805 50,32.75 50,32.75Z"}),2),(0,o.createVNode)(32,"g",null,(0,o.createVNode)(32,"circle","RoundGauge__ringTrack",null,1,{cx:"50",cy:"50",r:"45"}),2),(0,o.createVNode)(32,"g",null,Object.keys(x).map((function(e,t){var n=x[e];return(0,o.createVNode)(32,"circle","RoundGauge__ringFill RoundGauge--color--"+e,null,1,{style:{"stroke-dashoffset":Math.max((2-(n[1]-n[0]))*Math.PI*50,0)},transform:"rotate("+(180+180*n[0])+" 50 50)",cx:"50",cy:"50",r:"45"},t)})),0),(0,o.createVNode)(32,"g","RoundGauge__needle",[(0,o.createVNode)(32,"polygon","RoundGauge__needleLine",null,1,{points:"46,50 50,0 54,50"}),(0,o.createVNode)(32,"circle","RoundGauge__needleMiddle",null,1,{cx:"50",cy:"50",r:"8"})],4,{transform:"rotate("+(180*y-90)+" 50 50)"})],0,{viewBox:"0 0 100 50"}),2,Object.assign({},(0,c.computeBoxProps)(Object.assign({style:Object.assign({"font-size":C+"em"},v)},b))))),(0,o.createComponentVNode)(2,i.AnimatedNumber,{value:t,format:h,size:C})]})}},77381:function(e,t,n){"use strict";t.__esModule=!0,t.Section=void 0;var o=n(96323),r=n(1060),a=n(99397),i=n(54425),c=["className","title","buttons","fill","fitted","scrollable","children"];function l(e,t){return l=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e},l(e,t)}var u=function(e){var t,n;function u(t){var n;return(n=e.call(this,t)||this).scrollableRef=void 0,n.scrollable=void 0,n.scrollableRef=(0,o.createRef)(),n.scrollable=t.scrollable,n}n=e,(t=u).prototype=Object.create(n.prototype),t.prototype.constructor=t,l(t,n);var d=u.prototype;return d.componentDidMount=function(){this.scrollable&&(0,a.addScrollableNode)(this.scrollableRef.current)},d.componentWillUnmount=function(){this.scrollable&&(0,a.removeScrollableNode)(this.scrollableRef.current)},d.render=function(){var e=this.props,t=e.className,n=e.title,a=e.buttons,l=e.fill,u=e.fitted,d=e.scrollable,s=e.children,p=function(e,t){if(null==e)return{};var n,o,r={},a=Object.keys(e);for(o=0;o<a.length;o++)n=a[o],t.indexOf(n)>=0||(r[n]=e[n]);return r}(e,c),m=(0,r.canRender)(n)||(0,r.canRender)(a);return(0,o.normalizeProps)((0,o.createVNode)(1,"div",(0,r.classes)(["Section",Byond.IS_LTE_IE8&&"Section--iefix",l&&"Section--fill",u&&"Section--fitted",d&&"Section--scrollable",t,(0,i.computeBoxClassName)(p)]),[m&&(0,o.createVNode)(1,"div","Section__title",[(0,o.createVNode)(1,"span","Section__titleText",n,0),(0,o.createVNode)(1,"div","Section__buttons",a,0)],4),(0,o.createVNode)(1,"div","Section__rest",(0,o.createVNode)(1,"div","Section__content",s,0,null,null,this.scrollableRef),2)],0,Object.assign({},(0,i.computeBoxProps)(p))))},u}(o.Component);t.Section=u},4482:function(e,t,n){"use strict";t.__esModule=!0,t.Slider=void 0;var o=n(96323),r=n(97622),a=n(1060),i=n(54425),c=n(42833),l=n(97667),u=["animated","format","maxValue","minValue","onChange","onDrag","step","stepPixelSize","suppressFlicker","unit","value","className","fillValue","color","ranges","children"];t.Slider=function(e){if(Byond.IS_LTE_IE8)return(0,o.normalizeProps)((0,o.createComponentVNode)(2,l.NumberInput,Object.assign({},e)));var t=e.animated,n=e.format,d=e.maxValue,s=e.minValue,p=e.onChange,m=e.onDrag,f=e.step,h=e.stepPixelSize,g=e.suppressFlicker,C=e.unit,N=e.value,v=e.className,b=e.fillValue,V=e.color,y=e.ranges,x=void 0===y?{}:y,I=e.children,k=function(e,t){if(null==e)return{};var n,o,r={},a=Object.keys(e);for(o=0;o<a.length;o++)n=a[o],t.indexOf(n)>=0||(r[n]=e[n]);return r}(e,u),w=I!==undefined;return(0,o.normalizeProps)((0,o.createComponentVNode)(2,c.DraggableControl,Object.assign({dragMatrix:[1,0]},{animated:t,format:n,maxValue:d,minValue:s,onChange:p,onDrag:m,step:f,stepPixelSize:h,suppressFlicker:g,unit:C,value:N},{children:function(e){var t=e.dragging,n=(e.editing,e.value),c=e.displayValue,l=e.displayElement,u=e.inputElement,p=e.handleDragStart,m=b!==undefined&&null!==b,f=((0,r.scale)(n,s,d),(0,r.scale)(null!=b?b:c,s,d)),h=(0,r.scale)(c,s,d),g=V||(0,r.keyOfMatchingRange)(null!=b?b:n,x)||"default";return(0,o.normalizeProps)((0,o.createVNode)(1,"div",(0,a.classes)(["Slider","ProgressBar","ProgressBar--color--"+g,v,(0,i.computeBoxClassName)(k)]),[(0,o.createVNode)(1,"div",(0,a.classes)(["ProgressBar__fill",m&&"ProgressBar__fill--animated"]),null,1,{style:{width:100*(0,r.clamp01)(f)+"%",opacity:.4}}),(0,o.createVNode)(1,"div","ProgressBar__fill",null,1,{style:{width:100*(0,r.clamp01)(Math.min(f,h))+"%"}}),(0,o.createVNode)(1,"div","Slider__cursorOffset",[(0,o.createVNode)(1,"div","Slider__cursor"),(0,o.createVNode)(1,"div","Slider__pointer"),t&&(0,o.createVNode)(1,"div","Slider__popupValue",l,0)],0,{style:{width:100*(0,r.clamp01)(h)+"%"}}),(0,o.createVNode)(1,"div","ProgressBar__content",w?I:l,0),u],0,Object.assign({},(0,i.computeBoxProps)(k),{onMouseDown:p})))}})))}},4033:function(e,t,n){"use strict";t.__esModule=!0,t.Stack=void 0;var o=n(96323),r=n(1060),a=n(67486),i=["className","vertical","fill","zebra"],c=["className","innerRef"],l=["className","hidden"];function u(e,t){if(null==e)return{};var n,o,r={},a=Object.keys(e);for(o=0;o<a.length;o++)n=a[o],t.indexOf(n)>=0||(r[n]=e[n]);return r}var d=function(e){var t=e.className,n=e.vertical,c=e.fill,l=e.zebra,d=u(e,i);return(0,o.normalizeProps)((0,o.createVNode)(1,"div",(0,r.classes)(["Stack",c&&"Stack--fill",n?"Stack--vertical":"Stack--horizontal",l&&"Stack--zebra",t,(0,a.computeFlexClassName)(e)]),null,1,Object.assign({},(0,a.computeFlexProps)(Object.assign({direction:n?"column":"row"},d)))))};t.Stack=d;d.Item=function(e){var t=e.className,n=e.innerRef,i=u(e,c);return(0,o.normalizeProps)((0,o.createVNode)(1,"div",(0,r.classes)(["Stack__item",t,(0,a.computeFlexItemClassName)(i)]),null,1,Object.assign({},(0,a.computeFlexItemProps)(i)),null,n))};d.Divider=function(e){var t=e.className,n=e.hidden,i=u(e,l);return(0,o.normalizeProps)((0,o.createVNode)(1,"div",(0,r.classes)(["Stack__item","Stack__divider",n&&"Stack__divider--hidden",t,(0,a.computeFlexItemClassName)(i)]),null,1,Object.assign({},(0,a.computeFlexItemProps)(i))))}},28581:function(e,t,n){"use strict";t.__esModule=!0,t.TableCell=t.TableRow=t.Table=void 0;var o=n(96323),r=n(1060),a=n(54425),i=["className","collapsing","children"],c=["className","header"],l=["className","collapsing","header"];function u(e,t){if(null==e)return{};var n,o,r={},a=Object.keys(e);for(o=0;o<a.length;o++)n=a[o],t.indexOf(n)>=0||(r[n]=e[n]);return r}var d=function(e){var t=e.className,n=e.collapsing,c=e.children,l=u(e,i);return(0,o.normalizeProps)((0,o.createVNode)(1,"table",(0,r.classes)(["Table",n&&"Table--collapsing",t,(0,a.computeBoxClassName)(l)]),(0,o.createVNode)(1,"tbody",null,c,0),2,Object.assign({},(0,a.computeBoxProps)(l))))};t.Table=d,d.defaultHooks=r.pureComponentHooks;var s=function(e){var t=e.className,n=e.header,i=u(e,c);return(0,o.normalizeProps)((0,o.createVNode)(1,"tr",(0,r.classes)(["Table__row",n&&"Table__row--header",t,(0,a.computeBoxClassName)(e)]),null,1,Object.assign({},(0,a.computeBoxProps)(i))))};t.TableRow=s,s.defaultHooks=r.pureComponentHooks;var p=function(e){var t=e.className,n=e.collapsing,i=e.header,c=u(e,l);return(0,o.normalizeProps)((0,o.createVNode)(1,"td",(0,r.classes)(["Table__cell",n&&"Table__cell--collapsing",i&&"Table__cell--header",t,(0,a.computeBoxClassName)(e)]),null,1,Object.assign({},(0,a.computeBoxProps)(c))))};t.TableCell=p,p.defaultHooks=r.pureComponentHooks,d.Row=s,d.Cell=p},60839:function(e,t,n){"use strict";t.__esModule=!0,t.Tabs=void 0;var o=n(96323),r=n(1060),a=n(54425),i=n(65743),c=["className","vertical","fill","fluid","children"],l=["className","selected","color","icon","leftSlot","rightSlot","children"];function u(e,t){if(null==e)return{};var n,o,r={},a=Object.keys(e);for(o=0;o<a.length;o++)n=a[o],t.indexOf(n)>=0||(r[n]=e[n]);return r}var d=function(e){var t=e.className,n=e.vertical,i=e.fill,l=e.fluid,d=e.children,s=u(e,c);return(0,o.normalizeProps)((0,o.createVNode)(1,"div",(0,r.classes)(["Tabs",n?"Tabs--vertical":"Tabs--horizontal",i&&"Tabs--fill",l&&"Tabs--fluid",t,(0,a.computeBoxClassName)(s)]),d,0,Object.assign({},(0,a.computeBoxProps)(s))))};t.Tabs=d;d.Tab=function(e){var t=e.className,n=e.selected,c=e.color,d=e.icon,s=e.leftSlot,p=e.rightSlot,m=e.children,f=u(e,l);return(0,o.normalizeProps)((0,o.createVNode)(1,"div",(0,r.classes)(["Tab","Tabs__Tab","Tab--color--"+c,n&&"Tab--selected",t].concat((0,a.computeBoxClassName)(f))),[(0,r.canRender)(s)&&(0,o.createVNode)(1,"div","Tab__left",s,0)||!!d&&(0,o.createVNode)(1,"div","Tab__left",(0,o.createComponentVNode)(2,i.Icon,{name:d}),2),(0,o.createVNode)(1,"div","Tab__text",m,0),(0,r.canRender)(p)&&(0,o.createVNode)(1,"div","Tab__right",p,0)],0,Object.assign({},(0,a.computeBoxProps)(f))))}},51129:function(e,t,n){"use strict";t.__esModule=!0,t.TextArea=void 0;var o=n(96323),r=n(1060),a=n(54425),i=n(77863),c=n(57890),l=["onChange","onKeyDown","onKeyPress","onInput","onFocus","onBlur","onEnter","value","maxLength","placeholder"],u=["className","fluid"];function d(e,t){if(null==e)return{};var n,o,r={},a=Object.keys(e);for(o=0;o<a.length;o++)n=a[o],t.indexOf(n)>=0||(r[n]=e[n]);return r}function s(e,t){return s=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e},s(e,t)}var p=function(e){var t,n;function p(t,n){var r;(r=e.call(this,t,n)||this).textareaRef=(0,o.createRef)(),r.fillerRef=(0,o.createRef)(),r.state={editing:!1};var a=t.dontUseTabForIndent,l=void 0!==a&&a;return r.handleOnInput=function(e){var t=r.state.editing,n=r.props.onInput;t||r.setEditing(!0),n&&n(e,e.target.value)},r.handleOnChange=function(e){var t=r.state.editing,n=r.props.onChange;t&&r.setEditing(!1),n&&n(e,e.target.value)},r.handleKeyPress=function(e){var t=r.state.editing,n=r.props.onKeyPress;t||r.setEditing(!0),n&&n(e,e.target.value)},r.handleKeyDown=function(e){var t=r.state.editing,n=r.props.onKeyDown;if(e.keyCode===c.KEY_ESCAPE)return r.setEditing(!1),e.target.value=(0,i.toInputValue)(r.props.value),void e.target.blur();if((t||r.setEditing(!0),!l)&&9===(e.keyCode||e.which)){e.preventDefault();var o=e.target,a=o.value,u=o.selectionStart,d=o.selectionEnd;e.target.value=a.substring(0,u)+"\t"+a.substring(d),e.target.selectionEnd=u+1}n&&n(e,e.target.value)},r.handleFocus=function(e){r.state.editing||r.setEditing(!0)},r.handleBlur=function(e){var t=r.state.editing,n=r.props.onChange;t&&(r.setEditing(!1),n&&n(e,e.target.value))},r}n=e,(t=p).prototype=Object.create(n.prototype),t.prototype.constructor=t,s(t,n);var m=p.prototype;return m.componentDidMount=function(){var e=this.props.value,t=this.textareaRef.current;t&&(t.value=(0,i.toInputValue)(e))},m.componentDidUpdate=function(e,t){var n=this.state.editing,o=e.value,r=this.props.value,a=this.textareaRef.current;a&&!n&&o!==r&&(a.value=(0,i.toInputValue)(r))},m.setEditing=function(e){this.setState({editing:e})},m.getValue=function(){return this.textareaRef.current&&this.textareaRef.current.value},m.render=function(){var e=this.props,t=(e.onChange,e.onKeyDown,e.onKeyPress,e.onInput,e.onFocus,e.onBlur,e.onEnter,e.value,e.maxLength),n=e.placeholder,i=d(e,l),c=i.className,s=i.fluid,p=d(i,u);return(0,o.normalizeProps)((0,o.createComponentVNode)(2,a.Box,Object.assign({className:(0,r.classes)(["TextArea",s&&"TextArea--fluid",c])},p,{children:(0,o.createVNode)(128,"textarea","TextArea__textarea",null,1,{placeholder:n,onChange:this.handleOnChange,onKeyDown:this.handleKeyDown,onKeyPress:this.handleKeyPress,onInput:this.handleOnInput,onFocus:this.handleFocus,onBlur:this.handleBlur,maxLength:t},null,this.textareaRef)})))},p}(o.Component);t.TextArea=p},92464:function(e,t,n){"use strict";t.__esModule=!0,t.TimeDisplay=void 0;var o=n(97622),r=n(96323);function a(e,t){return a=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e},a(e,t)}var i=function(e){return"number"==typeof e&&Number.isFinite(e)&&!Number.isNaN(e)},c=function(e){var t,n;function r(t){var n;return(n=e.call(this,t)||this).timer=null,n.timing=!1,n.format=null,n.last_seen_value=undefined,n.state={value:0},i(t.value)&&(n.state.value=Number(t.value),n.last_seen_value=Number(t.value)),n}n=e,(t=r).prototype=Object.create(n.prototype),t.prototype.constructor=t,a(t,n);var c=r.prototype;return c.componentDidUpdate=function(){var e=this;this.props.timing&&(clearInterval(this.timer),this.timer=setInterval((function(){return e.tick()}),1e3))},c.tick=function(){var e=Number(this.state.value);this.props.value!==this.last_seen_value&&(this.last_seen_value=this.props.value,e=this.props.value);var t="up"===this.props.auto?10:-10,n=Math.max(0,e+t);this.setState({value:n})},c.componentDidMount=function(){var e=this;this.props.timing&&(this.timer=setInterval((function(){return e.tick()}),1e3))},c.componentWillUnmount=function(){clearInterval(this.timer)},r.getDerivedStateFromProps=function(e){return e.timing?null:{value:e.value}},r.defaultFormat=function(e){var t=(0,o.toFixed)(Math.floor(e/10%60)).padStart(2,"0"),n=(0,o.toFixed)(Math.floor(e/600%60)).padStart(2,"0");return(0,o.toFixed)(Math.floor(e/36e3%24)).padStart(2,"0")+":"+n+":"+t},c.render=function(){var e=this.state.value;return i(e)?this.props.format?this.props.format(e):r.defaultFormat(e):this.state.value||null},r}(r.Component);t.TimeDisplay=c},59463:function(e,t,n){"use strict";t.__esModule=!0,t.Tooltip=void 0;var o=n(96323),r=n(34739);function a(e,t){return a=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e},a(e,t)}var i={modifiers:[{name:"eventListeners",enabled:!1}]},c={width:0,height:0,top:0,right:0,bottom:0,left:0,x:0,y:0,toJSON:function(){return null}},l=function(e){var t,n;function c(){return e.apply(this,arguments)||this}n=e,(t=c).prototype=Object.create(n.prototype),t.prototype.constructor=t,a(t,n);var l=c.prototype;return l.getDOMNode=function(){return(0,o.findDOMfromVNode)(this.$LI,!0)},l.componentDidMount=function(){var e=this,t=this.getDOMNode();t&&(t.addEventListener("mouseenter",(function(){var n=c.renderedTooltip;n===undefined&&((n=document.createElement("div")).className="Tooltip",document.body.appendChild(n),c.renderedTooltip=n),c.currentHoveredElement=t,n.style.opacity="1",e.renderPopperContent()})),t.addEventListener("mouseleave",(function(){e.fadeOut()})))},l.fadeOut=function(){c.currentHoveredElement===this.getDOMNode()&&(c.currentHoveredElement=undefined,c.renderedTooltip.style.opacity="0")},l.renderPopperContent=function(){var e=this,t=c.renderedTooltip;t&&(0,o.render)((0,o.createVNode)(1,"span",null,this.props.content,0),t,(function(){var n=c.singletonPopper;n===undefined?(n=(0,r.createPopper)(c.virtualElement,t,Object.assign({},i,{placement:e.props.position||"auto"})),c.singletonPopper=n):(n.setOptions(Object.assign({},i,{placement:e.props.position||"auto"})),n.update())}),this.context)},l.componentDidUpdate=function(){c.currentHoveredElement===this.getDOMNode()&&this.renderPopperContent()},l.componentWillUnmount=function(){this.fadeOut()},l.render=function(){return this.props.children},c}(o.Component);t.Tooltip=l,l.renderedTooltip=void 0,l.singletonPopper=void 0,l.currentHoveredElement=void 0,l.virtualElement={getBoundingClientRect:function(){var e,t;return null!=(e=null==(t=l.currentHoveredElement)?void 0:t.getBoundingClientRect())?e:c}}},16422:function(e,t,n){"use strict";t.__esModule=!0,t.ColorButton=void 0;var o=n(96323),r=n(54425),a=n(25808),i=n(47233),c=["color"];t.ColorButton=function(e){var t=e.color,n=function(e,t){if(null==e)return{};var n,o,r={},a=Object.keys(e);for(o=0;o<a.length;o++)n=a[o],t.indexOf(n)>=0||(r[n]=e[n]);return r}(e,c);return(0,o.normalizeProps)((0,o.createComponentVNode)(2,a.Button,Object.assign({},n,{children:[(0,o.createComponentVNode)(2,i.ColorBox,{color:t,mr:"5px"}),(0,o.createComponentVNode)(2,r.Box,{as:"code",children:t})]})))}},88344:function(e,t,n){"use strict";t.__esModule=!0,t.ItemList=void 0;var o=n(96323),r=n(26949);t.ItemList=function(e){var t=e.items,n=e.nothing_text,a=void 0===n?"Nothing":n;return t===undefined||0===t.length?""+a:t.map((function(e,t,n){return(0,o.createComponentVNode)(2,r.Flex,{inline:!0,align:"center",children:[!!e.iconBase64&&(0,o.createComponentVNode)(2,r.Flex.Item,{children:(0,o.createComponentVNode)(2,r.Image,{height:"32px",width:"32px",pixelated:!0,src:"data:image/png;base64,"+e.iconBase64})}),(0,o.createComponentVNode)(2,r.Flex.Item,{pr:1,pl:.5,children:[e.name,t===n.length-1?"":", "+(t===n.length-2?"and ":"")]})]},t)}))}},44516:function(e,t,n){"use strict";t.__esModule=!0,t.Placeholder=void 0;var o=n(96323),r=n(1060),a=n(54425),i=["children","className"];t.Placeholder=function(e){var t=e.children,n=void 0===t?"No results found":t,c=e.className,l=function(e,t){if(null==e)return{};var n,o,r={},a=Object.keys(e);for(o=0;o<a.length;o++)n=a[o],t.indexOf(n)>=0||(r[n]=e[n]);return r}(e,i),u=(0,r.classes)(["placeholder",c]);return(0,o.normalizeProps)((0,o.createComponentVNode)(2,a.Box,Object.assign({className:u,color:"label",italic:!0},l,{children:n})))}},99120:function(e,t,n){"use strict";t.__esModule=!0,t.SectionEx=void 0;var o=n(96323),r=n(1060),a=n(54425),i=n(77381),c=["className","capitalize"];t.SectionEx=function(e){var t=e.className,n=e.capitalize,l=function(e,t){if(null==e)return{};var n,o,r={},a=Object.keys(e);for(o=0;o<a.length;o++)n=a[o],t.indexOf(n)>=0||(r[n]=e[n]);return r}(e,c);return(0,o.normalizeProps)((0,o.createComponentVNode)(2,i.Section,Object.assign({className:(0,r.classes)(["SectionEx",n&&"SectionEx__capitalize",t,(0,a.computeBoxClassName)(l)])},l)))}},26949:function(e,t,n){"use strict";t.__esModule=!0,t.Tooltip=t.TimeDisplay=t.TextArea=t.Tabs=t.Table=t.Stack=t.Slider=t.SectionEx=t.Section=t.RoundGauge=t.Pointer=t.Popper=t.ProgressBar=t.Placeholder=t.NumberInput=t.NoticeBox=t.Modal=t.LabeledList=t.LabeledControls=t.Knob=t.ItemList=t.Interactive=t.Input=t.Image=t.Icon=t.Grid=t.Flex=t.Dropdown=t.DraggableControl=t.Divider=t.Dimmer=t.ColorButton=t.ColorBox=t.Collapsible=t.Chart=t.ByondUi=t.Button=t.Box=t.BlockQuote=t.Blink=t.Autofocus=t.AnimatedNumber=void 0;var o=n(54642);t.AnimatedNumber=o.AnimatedNumber;var r=n(75434);t.Autofocus=r.Autofocus;var a=n(90297);t.Blink=a.Blink;var i=n(7149);t.BlockQuote=i.BlockQuote;var c=n(54425);t.Box=c.Box;var l=n(25808);t.Button=l.Button;var u=n(44051);t.ByondUi=u.ByondUi;var d=n(64726);t.Chart=d.Chart;var s=n(49751);t.Collapsible=s.Collapsible;var p=n(47233);t.ColorBox=p.ColorBox;var m=n(16422);t.ColorButton=m.ColorButton;var f=n(93913);t.Dimmer=f.Dimmer;var h=n(22755);t.Divider=h.Divider;var g=n(42833);t.DraggableControl=g.DraggableControl;var C=n(12489);t.Dropdown=C.Dropdown;var N=n(67486);t.Flex=N.Flex;var v=n(28408);t.Grid=v.Grid;var b=n(65743);t.Icon=b.Icon;var V=n(94261);t.Image=V.Image;var y=n(77863);t.Input=y.Input;var x=n(54291);t.Interactive=x.Interactive;var I=n(88344);t.ItemList=I.ItemList;var k=n(14274);t.Knob=k.Knob;var w=n(95592);t.LabeledControls=w.LabeledControls;var S=n(21173);t.LabeledList=S.LabeledList;var _=n(89416);t.Modal=_.Modal;var M=n(23257);t.NoticeBox=M.NoticeBox;var D=n(97667);t.NumberInput=D.NumberInput;var B=n(44516);t.Placeholder=B.Placeholder;var A=n(12194);t.ProgressBar=A.ProgressBar;var T=n(16513);t.Popper=T.Popper;var L=n(76776);t.Pointer=L.Pointer;var E=n(94709);t.RoundGauge=E.RoundGauge;var j=n(77381);t.Section=j.Section;var P=n(99120);t.SectionEx=P.SectionEx;var O=n(4482);t.Slider=O.Slider;var F=n(4033);t.Stack=F.Stack;var R=n(28581);t.Table=R.Table;var z=n(60839);t.Tabs=z.Tabs;var W=n(51129);t.TextArea=W.TextArea;var U=n(92464);t.TimeDisplay=U.TimeDisplay;var H=n(59463);t.Tooltip=H.Tooltip},84200:function(e,t){"use strict";t.__esModule=!0,t.getGasColor=t.getGasLabel=t.RADIO_CHANNELS=t.CSS_COLORS=t.COLORS=t.UI_CLOSE=t.UI_DISABLED=t.UI_UPDATE=t.UI_INTERACTIVE=void 0;t.UI_INTERACTIVE=2;t.UI_UPDATE=1;t.UI_DISABLED=0;t.UI_CLOSE=-1;t.COLORS={department:{captain:"#548b55",security:"#e74c3c",medbay:"#3498db",science:"#9b59b6",engineering:"#f1c40f",cargo:"#f39c12",centcom:"#00c100",other:"#c38312"},damageType:{oxy:"#3498db",toxin:"#2ecc71",burn:"#e67e22",brute:"#e74c3c"},damageTypeFill:{oxy:"rgba(52, 152, 219, 0.5)",toxin:"rgba(46, 204, 113, 0.5)",burn:"rgba(230, 126, 34, 0.5)",brute:"rgba(231, 76, 60, 0.5)"}};t.CSS_COLORS=["black","white","red","orange","yellow","olive","green","teal","blue","violet","purple","pink","brown","grey","good","average","bad","label"];t.RADIO_CHANNELS=[{name:"Syndicate",freq:1352,color:"#BB3333"},{name:"CentCom",freq:1451,color:"#2681a5"},{name:"Catering",freq:1485,color:"#C16082"},{name:"Civilian",freq:1355,color:"#6ca729"},{name:"Research",freq:1354,color:"#153E9E"},{name:"Command",freq:1356,color:"#5177ff"},{name:"Medical",freq:1445,color:"#57b8f0"},{name:"Engineering",freq:1441,color:"#BBBB00"},{name:"Security",freq:1485,color:"#dd3535"},{name:"AI",freq:1447,color:"#333399"},{name:"Bridge",freq:1442,color:"#339933"}];var n=[{id:"o2",name:"Oxygen",label:"O\u2082",color:"blue"},{id:"n2",name:"Nitrogen",label:"N\u2082",color:"red"},{id:"co2",name:"Carbon Dioxide",label:"CO\u2082",color:"grey"},{id:"plasma",name:"Plasma",label:"Plasma",color:"pink"},{id:"n2o",name:"Nitrous Oxide",label:"N\u2082O",color:"red"}];t.getGasLabel=function(e,t){var o=String(e).toLowerCase(),r=n.find((function(e){return e.id===o||e.name.toLowerCase()===o}));return r&&r.label||t||e};t.getGasColor=function(e){var t=String(e).toLowerCase(),o=n.find((function(e){return e.id===t||e.name.toLowerCase()===t}));return o&&o.color}},71224:function(e,t,n){"use strict";t.__esModule=!0,t.KitchenSink=void 0;var o=n(96323),r=n(31246),a=n(26949),i=n(2381),c=n(69321);t.KitchenSink=function(e,t){var n=e.panel,l=(0,r.useLocalState)(t,"kitchenSinkTheme")[0],u=(0,r.useLocalState)(t,"pageIndex",0),d=u[0],s=u[1],p=c.keys().map((function(e){return c(e)})),m=p[d],f=n?i.Pane:i.Window;return(0,o.createComponentVNode)(2,f,{title:"Kitchen Sink",width:600,height:500,theme:l,children:(0,o.createComponentVNode)(2,a.Flex,{height:"100%",children:[(0,o.createComponentVNode)(2,a.Flex.Item,{m:1,mr:0,children:(0,o.createComponentVNode)(2,a.Section,{fill:!0,fitted:!0,children:(0,o.createComponentVNode)(2,a.Tabs,{vertical:!0,children:p.map((function(e,t){return(0,o.createComponentVNode)(2,a.Tabs.Tab,{color:"transparent",selected:t===d,onClick:function(){return s(t)},children:e.meta.title},t)}))})})}),(0,o.createComponentVNode)(2,a.Flex.Item,{position:"relative",grow:1,children:(0,o.createComponentVNode)(2,f.Content,{scrollable:!0,children:m.meta.render()})})]})})}},98069:function(e,t,n){"use strict";t.__esModule=!0,t.openExternalBrowser=t.toggleDebugLayout=t.toggleKitchenSink=void 0;var o=n(465),r=(0,o.createAction)("debug/toggleKitchenSink");t.toggleKitchenSink=r;var a=(0,o.createAction)("debug/toggleDebugLayout");t.toggleDebugLayout=a;var i=(0,o.createAction)("debug/openExternalBrowser");t.openExternalBrowser=i},35177:function(e,t,n){"use strict";t.__esModule=!0,t.useDebug=void 0;var o=n(465),r=n(12184);t.useDebug=function(e){return(0,o.useSelector)(e,r.selectDebug)}},27157:function(e,t,n){"use strict";t.__esModule=!0,t.debugReducer=t.relayMiddleware=t.debugMiddleware=t.KitchenSink=t.useDebug=void 0;var o=n(35177);t.useDebug=o.useDebug;var r=n(71224);t.KitchenSink=r.KitchenSink;var a=n(46656);t.debugMiddleware=a.debugMiddleware,t.relayMiddleware=a.relayMiddleware;var i=n(7124);t.debugReducer=i.debugReducer},46656:function(e,t,n){"use strict";t.__esModule=!0,t.relayMiddleware=t.debugMiddleware=void 0;var o=n(57890),r=n(99397),a=n(6965),i=n(98069),c=["backend/update","chat/message"];t.debugMiddleware=function(e){return(0,a.acquireHotKey)(o.KEY_F11),(0,a.acquireHotKey)(o.KEY_F12),r.globalEvents.on("keydown",(function(t){t.code===o.KEY_F11&&e.dispatch((0,i.toggleDebugLayout)()),t.code===o.KEY_F12&&e.dispatch((0,i.toggleKitchenSink)()),t.ctrl&&t.alt&&t.code===o.KEY_BACKSPACE&&setTimeout((function(){throw new Error("OOPSIE WOOPSIE!! UwU We made a fucky wucky!! A wittle fucko boingo! The code monkeys at our headquarters are working VEWY HAWD to fix this!")}))})),function(e){return function(t){return e(t)}}};t.relayMiddleware=function(e){var t=n(82252),l="?external"===location.search;return l?t.subscribe((function(t){var n=t.type,o=t.payload;"relay"===n&&o.windowId===window.__windowId__&&e.dispatch(Object.assign({},o.action,{relayed:!0}))})):((0,a.acquireHotKey)(o.KEY_F10),r.globalEvents.on("keydown",(function(t){t===o.KEY_F10&&e.dispatch((0,i.openExternalBrowser)())}))),function(e){return function(n){var o=n.type,r=(n.payload,n.relayed);if(o!==i.openExternalBrowser.type)return!c.includes(o)||r||l||t.sendMessage({type:"relay",payload:{windowId:window.__windowId__,action:n}}),e(n);window.open(location.href+"?external","_blank")}}}},7124:function(e,t){"use strict";t.__esModule=!0,t.debugReducer=void 0;t.debugReducer=function(e,t){void 0===e&&(e={});var n=t.type;t.payload;return"debug/toggleKitchenSink"===n?Object.assign({},e,{kitchenSink:!e.kitchenSink}):"debug/toggleDebugLayout"===n?Object.assign({},e,{debugLayout:!e.debugLayout}):e}},12184:function(e,t){"use strict";t.__esModule=!0,t.selectDebug=void 0;t.selectDebug=function(e){return e.debug}},41410:function(e,t,n){"use strict";t.__esModule=!0,t.resizeStartHandler=t.dragStartHandler=t.setupDrag=t.recallWindowGeometry=t.storeWindowGeometry=t.getScreenSize=t.getScreenPosition=t.setWindowSize=t.setWindowPosition=t.getWindowSize=t.getWindowPosition=t.setWindowKey=void 0;var o=n(7151),r=n(67288);function a(e,t,n,o,r,a,i){try{var c=e[a](i),l=c.value}catch(u){return void n(u)}c.done?t(l):Promise.resolve(l).then(o,r)}function i(e){return function(){var t=this,n=arguments;return new Promise((function(o,r){var i=e.apply(t,n);function c(e){a(i,o,r,c,l,"next",e)}function l(e){a(i,o,r,c,l,"throw",e)}c(undefined)}))}}var c,l,u,d,s,p=(0,n(79926).createLogger)("drag"),m=window.__windowId__,f=!1,h=!1,g=[0,0];t.setWindowKey=function(e){m=e};var C=function(){return[window.screenLeft,window.screenTop]};t.getWindowPosition=C;var N=function(){return[window.innerWidth,window.innerHeight]};t.getWindowSize=N;var v=function(e){var t=(0,r.vecAdd)(e,g);return Byond.winset(window.__windowId__,{pos:t[0]+","+t[1]})};t.setWindowPosition=v;var b=function(e){return Byond.winset(window.__windowId__,{size:e[0]+"x"+e[1]})};t.setWindowSize=b;var V=function(){return[0-g[0],0-g[1]]};t.getScreenPosition=V;var y=function(){return[window.screen.availWidth,window.screen.availHeight]};t.getScreenSize=y;var x=function(e,t,n){void 0===n&&(n=50);for(var o,r=[t],a=0;a<e.length;a++){var i=e[a];i!==t&&(r.length<n?r.push(i):o=i)}return[r,o]},I=function(){var e=i(regeneratorRuntime.mark((function t(){var e,n,r,a;return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return p.log("storing geometry"),e={pos:C(),size:N()},o.storage.set(m,e),t.t0=x,t.next=6,o.storage.get("geometries");case 6:if(t.t1=t.sent,t.t1){t.next=9;break}t.t1=[];case 9:t.t2=t.t1,t.t3=m,n=(0,t.t0)(t.t2,t.t3),r=n[0],(a=n[1])&&o.storage.remove(a),o.storage.set("geometries",r);case 16:case"end":return t.stop()}}),t)})));return function(){return e.apply(this,arguments)}}();t.storeWindowGeometry=I;var k=function(){var e=i(regeneratorRuntime.mark((function t(e){var n,a,i,l;return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:if(void 0===e&&(e={}),t.t0=e.fancy,!t.t0){t.next=6;break}return t.next=5,o.storage.get(m);case 5:t.t0=t.sent;case 6:return(n=t.t0)&&p.log("recalled geometry:",n),a=(null==n?void 0:n.pos)||e.pos,i=e.size,t.next=12,c;case 12:l=[window.screen.availWidth,window.screen.availHeight],i&&(i=[Math.min(l[0],i[0]),Math.min(l[1],i[1])],b(i)),a?(i&&e.locked&&(a=S(a,i)[1]),v(a)):i&&(a=(0,r.vecAdd)((0,r.vecScale)(l,.5),(0,r.vecScale)(i,-.5),(0,r.vecScale)(g,-1)),v(a));case 15:case"end":return t.stop()}}),t)})));return function(t){return e.apply(this,arguments)}}();t.recallWindowGeometry=k;var w=function(){var e=i(regeneratorRuntime.mark((function t(){return regeneratorRuntime.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return c=Byond.winget(window.__windowId__,"pos").then((function(e){return[e.x-window.screenLeft,e.y-window.screenTop]})),e.next=3,c;case 3:g=e.sent,p.debug("screen offset",g);case 5:case"end":return e.stop()}}),t)})));return function(){return e.apply(this,arguments)}}();t.setupDrag=w;var S=function(e,t){for(var n=V(),o=y(),r=[e[0],e[1]],a=!1,i=0;i<2;i++){var c=n[i],l=n[i]+o[i];e[i]<c?(r[i]=c,a=!0):e[i]+t[i]>l&&(r[i]=l-t[i],a=!0)}return[a,r]};t.dragStartHandler=function(e){p.log("drag start"),f=!0,l=[window.screenLeft-e.screenX,window.screenTop-e.screenY],document.addEventListener("mousemove",M),document.addEventListener("mouseup",_),M(e)};var _=function A(e){p.log("drag end"),f=!1,M(e),document.removeEventListener("mousemove",M),document.removeEventListener("mouseup",A),I()},M=function T(e){if(f){if(0===e.buttons)return p.log("emergency drag end"),document.removeEventListener("mousemove",T),document.removeEventListener("mouseup",_),f=!1,void I();e.preventDefault(),v((0,r.vecAdd)([e.screenX,e.screenY],l))}};t.resizeStartHandler=function(e,t){return function(n){u=[e,t],p.log("resize start",u),h=!0,l=[window.screenLeft-n.screenX,window.screenTop-n.screenY],d=[window.innerWidth,window.innerHeight],document.addEventListener("mousemove",B),document.addEventListener("mouseup",D),B(n)}};var D=function L(e){p.log("resize end",s),B(e),document.removeEventListener("mousemove",B),document.removeEventListener("mouseup",L),h=!1,I()},B=function(e){h&&(e.preventDefault(),(s=(0,r.vecAdd)(d,(0,r.vecMultiply)(u,(0,r.vecAdd)([e.screenX,e.screenY],(0,r.vecInverse)([window.screenLeft,window.screenTop]),l,[1,1]))))[0]=Math.max(s[0],150),s[1]=Math.max(s[1],50),b(s))}},99397:function(e,t,n){"use strict";t.__esModule=!0,t.KeyEvent=t.removeScrollableNode=t.addScrollableNode=t.canStealFocus=t.setupGlobalEvents=t.globalEvents=void 0;var o=n(52844),r=n(57890),a=new o.EventEmitter;t.globalEvents=a;var i,c=!1;t.setupGlobalEvents=function(e){void 0===e&&(e={}),c=!!e.ignoreWindowFocus};var l=!0,u=function N(e,t){c?l=!0:(i&&(clearTimeout(i),i=null),t?i=setTimeout((function(){return N(e)})):l!==e&&(l=e,a.emit(e?"window-focus":"window-blur"),a.emit("window-focus-change",e)))},d=null,s=function(e){var t=String(e.tagName).toLowerCase();return"input"===t||"textarea"===t};t.canStealFocus=s;var p=function v(){d&&(d.removeEventListener("blur",v),d=null)},m=null,f=null,h=[];t.addScrollableNode=function(e){h.push(e)};t.removeScrollableNode=function(e){var t=h.indexOf(e);t>=0&&h.splice(t,1)};window.addEventListener("mousemove",(function(e){var t=e.target;t!==f&&(f=t,function(e){if(!d&&l)for(var t=document.body;e&&e!==t;){if(h.includes(e)){if(e.contains(m))return;return m=e,void e.focus()}e=e.parentNode}}(t))})),window.addEventListener("focusin",(function(e){if(f=null,m=e.target,u(!0),s(e.target))return t=e.target,p(),void(d=t).addEventListener("blur",p);var t})),window.addEventListener("focusout",(function(e){f=null,u(!1,!0)})),window.addEventListener("blur",(function(e){f=null,u(!1,!0)})),window.addEventListener("beforeunload",(function(e){u(!1)}));var g={},C=function(){function e(e,t,n){this.event=e,this.type=t,this.code=window.event?e.which:e.keyCode,this.ctrl=e.ctrlKey,this.shift=e.shiftKey,this.alt=e.altKey,this.repeat=!!n}var t=e.prototype;return t.hasModifierKeys=function(){return this.ctrl||this.alt||this.shift},t.isModifierKey=function(){return this.code===r.KEY_CTRL||this.code===r.KEY_SHIFT||this.code===r.KEY_ALT},t.isDown=function(){return"keydown"===this.type},t.isUp=function(){return"keyup"===this.type},t.toString=function(){return this._str||(this._str="",this.ctrl&&(this._str+="Ctrl+"),this.alt&&(this._str+="Alt+"),this.shift&&(this._str+="Shift+"),this.code>=48&&this.code<=90?this._str+=String.fromCharCode(this.code):this.code>=r.KEY_F1&&this.code<=r.KEY_F12?this._str+="F"+(this.code-111):this._str+="["+this.code+"]"),this._str},e}();t.KeyEvent=C,document.addEventListener("keydown",(function(e){if(!s(e.target)){var t=e.keyCode,n=new C(e,"keydown",g[t]);a.emit("keydown",n),a.emit("key",n),g[t]=!0}})),document.addEventListener("keyup",(function(e){if(!s(e.target)){var t=e.keyCode,n=new C(e,"keyup");a.emit("keyup",n),a.emit("key",n),g[t]=!1}}))},40509:function(e,t){"use strict";t.__esModule=!0,t.hasWindowFocus=t.focusWindow=t.focusMap=void 0;t.focusMap=function(){Byond.winset("mapwindow.map",{focus:!0})};t.focusWindow=function(){Byond.winset(window.__windowId__,{focus:!0})};t.hasWindowFocus=function(){return document.hasFocus()}},1033:function(e,t,n){"use strict";t.__esModule=!0,t.formatFrequency=t.truncate=t.formatPressure=t.formatTime=t.formatDb=t.formatMoney=t.formatPower=t.formatSiUnit=void 0;var o=n(97622),r=["f","p","n","\u03bc","m"," ","k","M","G","T","P","E","Z","Y"],a=r.indexOf(" "),i=function(e,t,n){if(void 0===t&&(t=-a),void 0===n&&(n=""),"number"!=typeof e||!Number.isFinite(e))return e;var i=Math.floor(Math.log10(e)),c=Math.floor(Math.max(3*t,i)),l=Math.floor(i/3),u=Math.floor(c/3),d=(0,o.clamp)(a+u,0,r.length),s=r[d],p=e/Math.pow(1e3,u),m=l>t?2+3*u-c:0;return((0,o.toFixed)(p,m)+" "+s+n).trim()};t.formatSiUnit=i;t.formatPower=function(e,t){return void 0===t&&(t=0),i(e,t,"W")};t.formatMoney=function(e,t){if(void 0===t&&(t=0),!Number.isFinite(e))return e;var n=(0,o.round)(e,t);t>0&&(n=(0,o.toFixed)(e,t));var r=(n=String(n)).length,a=n.indexOf(".");-1===a&&(a=r);for(var i="",c=0;c<r;c++)c>0&&c<a&&(a-c)%3==0&&(i+=","),i+=n.charAt(c);return i};t.formatDb=function(e){var t=20*Math.log(e)/Math.log(10),n=t>=0?"+":"\u2013",r=Math.abs(t);return n+(r=r===Infinity?"Inf":(0,o.toFixed)(r,2))+" dB"};t.formatTime=function(e,t){void 0===t&&(t="");var n=Math.floor(e/10%60),o=Math.floor((e/10-n)/60);return e<=0&&""!==t?t:(n<10&&(n="0"+n),o<10&&(o="0"+o),o+":"+n)};t.formatPressure=function(e){return e<1e4?(0,o.toFixed)(e)+" kPa":i(1e3*e,1,"Pa")};t.truncate=function(e,t){return void 0===t&&(t=25),e.length>t?e.substr(0,t-1)+"\u2026":e};t.formatFrequency=function(e){return e=Math.round(e),Math.floor(e/10)+"."+e%10}},6965:function(e,t,n){"use strict";t.__esModule=!0,t.listenForKeyEvents=t.setupHotKeys=t.releaseHeldKeys=t.releaseHotKey=t.acquireHotKey=void 0;var o=function(e,t){if(!t&&e&&e.__esModule)return e;if(null===e||"object"!=typeof e&&"function"!=typeof e)return{"default":e};var n=a(t);if(n&&n.has(e))return n.get(e);var o={},r=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var i in e)if("default"!==i&&Object.prototype.hasOwnProperty.call(e,i)){var c=r?Object.getOwnPropertyDescriptor(e,i):null;c&&(c.get||c.set)?Object.defineProperty(o,i,c):o[i]=e[i]}o["default"]=e,n&&n.set(e,o);return o}(n(57890)),r=n(99397);function a(e){if("function"!=typeof WeakMap)return null;var t=new WeakMap,n=new WeakMap;return(a=function(e){return e?n:t})(e)}function i(e,t){var n="undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(n)return(n=n.call(e)).next.bind(n);if(Array.isArray(e)||(n=function(e,t){if(!e)return;if("string"==typeof e)return c(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);"Object"===n&&e.constructor&&(n=e.constructor.name);if("Map"===n||"Set"===n)return Array.from(e);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return c(e,t)}(e))||t&&e&&"number"==typeof e.length){n&&(e=n);var o=0;return function(){return o>=e.length?{done:!0}:{done:!1,value:e[o++]}}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}function c(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,o=new Array(t);n<t;n++)o[n]=e[n];return o}var l=(0,n(79926).createLogger)("hotkeys"),u={},d=[o.KEY_ESCAPE,o.KEY_ENTER,o.KEY_SPACE,o.KEY_TAB,o.KEY_CTRL,o.KEY_SHIFT,o.KEY_UP,o.KEY_DOWN,o.KEY_LEFT,o.KEY_RIGHT,o.KEY_F5],s={},p=[],m=function(e){var t=String(e);if("Ctrl+F5"!==t&&"Ctrl+R"!==t){if("Ctrl+F"!==t&&!(e.event.defaultPrevented||e.isModifierKey()||d.includes(e.code))){var n,o=16===(n=e.code)?"Shift":17===n?"Ctrl":18===n?"Alt":33===n?"Northeast":34===n?"Southeast":35===n?"Southwest":36===n?"Northwest":37===n?"West":38===n?"North":39===n?"East":40===n?"South":45===n?"Insert":46===n?"Delete":n>=48&&n<=57||n>=65&&n<=90?String.fromCharCode(n):n>=96&&n<=105?"Numpad"+(n-96):n>=112&&n<=123?"F"+(n-111):188===n?",":189===n?"-":190===n?".":void 0;if(o){var r=u[o];if(r)return l.debug("macro",r),Byond.command(r);if(e.isDown()&&!s[o]){s[o]=!0;var a='.keydown "'+o+'"';return l.debug(a),Byond.command(a)}if(e.isUp()&&s[o]){s[o]=!1;var i='.force_keyup "'+o+'"';return l.debug(i),Byond.command(i)}}}}else location.reload()};t.acquireHotKey=function(e){d.push(e)};t.releaseHotKey=function(e){var t=d.indexOf(e);t>=0&&d.splice(t,1)};var f=function(){for(var e=0,t=Object.keys(s);e<t.length;e++){var n=t[e];s[n]&&(s[n]=!1,l.log('releasing key "'+n+'"'),Byond.command('.force_keyup "'+n+'"'))}};t.releaseHeldKeys=f;t.setupHotKeys=function(){Byond.winget("default.*").then((function(e){for(var t={},n=0,o=Object.keys(e);n<o.length;n++){var r=o[n],a=r.split("."),i=a[1],c=a[2];i&&c&&(t[i]||(t[i]={}),t[i][c]=e[r])}for(var d=/\\"/g,s=function(e){return e.substring(1,e.length-1).replace(d,'"')},p=0,m=Object.keys(t);p<m.length;p++){var f=t[m[p]],h=s(f.name);u[h]=s(f.command)}l.debug("loaded macros",u)})),r.globalEvents.on("window-blur",(function(){f()})),r.globalEvents.on("key",(function(e){for(var t,n=i(p);!(t=n()).done;){(0,t.value)(e)}m(e)}))};t.listenForKeyEvents=function(e){p.push(e);var t=!1;return function(){t||(t=!0,p.splice(p.indexOf(e),1))}}},36525:function(e,t,n){"use strict";t.__esModule=!0,t.AIRack=void 0;var o=n(96323),r=n(31246),a=n(26949),i=n(2381);t.AIRack=function(e,t){var n=(0,r.useBackend)(t),c=n.act,l=n.data,u=l.lawTitles,d=l.lawText,s=l.welded,p=l.screwed;return(0,o.createComponentVNode)(2,i.Window,{resizable:!0,title:"AI Law Rack",width:600,height:800,children:(0,o.createComponentVNode)(2,i.Window.Content,{scrollable:!0,children:(0,o.createComponentVNode)(2,a.Section,{children:(0,o.createComponentVNode)(2,a.Box,{children:u.map((function(e,t){return(0,o.createComponentVNode)(2,a.Collapsible,{title:e?u[t]:"Empty",open:!!e,children:[(0,o.createComponentVNode)(2,a.BlockQuote,{preserveWhitespace:!0,children:e?d[t]:"<Empty Slot>"}),(0,o.createComponentVNode)(2,a.Button,{icon:e?"circle":"circle-o",content:e?"Remove":"Empty",onClick:function(){return c("rack",{rack_index:t+1})},disabled:s[t]||p[t]}),(0,o.createComponentVNode)(2,a.Button,{icon:s[t]?"circle":"circle-o",content:s[t]?"Welded":"Not Welded",onClick:function(){return c("weld",{rack_index:t+1})},color:s[t]?"red":"green"}),(0,o.createComponentVNode)(2,a.Button,{icon:p[t]?"circle":"circle-o",content:p[t]?"Screwed In":"Not Screwed In",onClick:function(){return c("screw",{rack_index:t+1})},color:p[t]?"red":"green"})]},t)}))})})})})}},50687:function(e,t,n){"use strict";t.__esModule=!0,t.AbilityManager=void 0;var o=n(96323),r=n(31246),a=n(26949),i=n(2381),c=function(e){var t=e.number,n=e.unit,r=e.onChange,i=e.abilityRef;return(0,o.createComponentVNode)(2,a.Table.Cell,{py:"0.5em",collapsing:!0,children:(0,o.createComponentVNode)(2,a.Box,{align:"center",children:(0,o.createComponentVNode)(2,a.NumberInput,{minValue:0,unit:n,width:"5em",value:t,onChange:function(e,t){return r(i,t)}})})})},l=function(e){var t=e.children;return(0,o.createComponentVNode)(2,a.Table.Cell,{py:"0.5em",textAlign:"center",children:t})},u=function(){return(0,o.createComponentVNode)(2,a.Table.Row,{bold:!0,children:[(0,o.createComponentVNode)(2,l,{children:"Name"}),(0,o.createComponentVNode)(2,l,{children:"Subtype"}),(0,o.createComponentVNode)(2,l,{children:"Cost"}),(0,o.createComponentVNode)(2,l,{children:"Cooldown"}),(0,o.createComponentVNode)(2,l,{children:"Actions"})]})};t.AbilityManager=function(e,t){var n=(0,r.useBackend)(t),l=n.act,d=n.data,s=d.abilities,p=d.target_name,m=function(e,t){return l("updatePointCost",{abilityRef:e,value:t})},f=function(e,t){return l("updateCooldown",{abilityRef:e,value:t})};return(0,o.createComponentVNode)(2,i.Window,{title:"Ability Manager",width:"750",height:"300",children:(0,o.createComponentVNode)(2,i.Window.Content,{children:(0,o.createComponentVNode)(2,a.Section,{title:"Abilities of "+p,scrollable:!0,fill:!0,buttons:(0,o.createComponentVNode)(2,a.Button,{icon:"plus",onClick:function(){return l("addAbility")},children:"Add Ability"}),children:(0,o.createComponentVNode)(2,a.Table,{children:[(0,o.createComponentVNode)(2,u),(null==s?void 0:s.length)>0?s.map((function(e){return(0,o.createComponentVNode)(2,a.Table.Row,{children:[(0,o.createComponentVNode)(2,a.Table.Cell,{py:"0.5em",children:e.name}),(0,o.createComponentVNode)(2,a.Table.Cell,{py:"0.5em",children:e.subtype}),(0,o.createComponentVNode)(2,c,{number:e.pointCost,onChange:m,abilityRef:e.abilityRef}),(0,o.createComponentVNode)(2,c,{number:e.cooldown,unit:"ds",onChange:f,abilityRef:e.abilityRef}),(0,o.createComponentVNode)(2,a.Table.Cell,{py:"0.5em",collapsing:!0,children:(0,o.createComponentVNode)(2,a.Box,{direction:"row",align:"center",nowrap:!0,children:[(0,o.createComponentVNode)(2,a.Button,{tooltip:"View Variables",tooltipPosition:"top",align:"left",icon:"gear",onClick:function(){return t=e.abilityRef,l("manageAbility",{abilityRef:t});var t}}),(0,o.createComponentVNode)(2,a.Button,{tooltip:"Rename",tooltipPosition:"top",align:"left",icon:"pen",onClick:function(){return t=e.abilityRef,l("renameAbility",{abilityRef:t});var t}}),(0,o.createComponentVNode)(2,a.Button.Confirm,{tooltip:"Remove",tooltipPosition:"top",align:"left",icon:"trash",color:"bad",onClick:function(){return t=e.abilityRef,l("deleteAbility",{abilityRef:t});var t}})]})})]},e.abilityRef)})):null]})})})})}},24782:function(e,t,n){"use strict";t.__esModule=!0,t.GasInfo=t.AirAlarm=void 0;var o=n(96323),r=n(31246),a=n(26949),i=n(2381),c=n(1033),l=n(48175);t.AirAlarm=function(e,t){var n=(0,r.useBackend)(t),c=(n.act,n.data),d=c.boundaries,s=c.gasses,p=c.temperature,m=c.safe;return(0,o.createComponentVNode)(2,i.Window,{width:300,height:350,children:(0,o.createComponentVNode)(2,i.Window.Content,{children:[(0,o.createComponentVNode)(2,a.Section,{title:"Status",children:[0===m&&(0,o.createComponentVNode)(2,a.Box,{align:"center",fontSize:2,color:"red",children:"ALERT!"}),1===m&&(0,o.createComponentVNode)(2,a.Box,{align:"center",fontSize:2,color:"orange",children:"CAUTION"}),2===m&&(0,o.createComponentVNode)(2,a.Box,{align:"center",fontSize:2,color:"green",children:"OPTIMAL"}),(0,o.createComponentVNode)(2,a.Box,{align:"center",nowrap:!0,p:1,fontSize:1,color:(0,l.getTemperatureColor)(p),children:[(0,o.createComponentVNode)(2,a.Box,{fontSize:1,children:"Atmospheric Temperature"}),(0,o.createComponentVNode)(2,a.Icon,{name:(0,l.getTemperatureIcon)(p),pr:.5}),(0,o.createComponentVNode)(2,a.AnimatedNumber,{value:p})," K"]})]}),(0,o.createComponentVNode)(2,a.Section,{title:"Gasses",children:[(0,o.createComponentVNode)(2,a.Flex,{children:d.slice(0,4).map((function(e,t){return(0,o.createComponentVNode)(2,u,{partial_pressure:s[e.varname],boundary:e,gas_index:t},e.varname)}))}),(0,o.createVNode)(1,"br"),(0,o.createComponentVNode)(2,a.Flex,{children:d.slice(4,8).map((function(e,t){return(0,o.createComponentVNode)(2,u,{partial_pressure:s[e.varname],boundary:e,gas_index:t},e.varname)}))})]})]})})};var u=function(e){var t=e.partial_pressure,n=e.boundary,r=(e.gas_index,100);return(0,o.createComponentVNode)(2,a.Flex.Item,{grow:!0,children:[(0,o.createComponentVNode)(2,a.Box,{align:"center",children:n.friend_name}),(0,o.createComponentVNode)(2,a.Box,{align:"center",children:(0,o.createComponentVNode)(2,a.RoundGauge,{align:"center",size:1.75,value:t,minValue:0,maxValue:r,alertAfter:isFinite(n.safe_max)?n.safe_max:r,alertBefore:isFinite(n.safe_min)?n.safe_min:0,ranges:{bad:[0,r],average:[isFinite(n.safe_min)?n.safe_min:0,isFinite(n.safe_max)?n.safe_max:r],good:[isFinite(n.good_min)?n.good_min:0,isFinite(n.good_max)?n.good_max:r]},format:c.formatPressure})})]})};t.GasInfo=u},89375:function(e,t,n){"use strict";t.__esModule=!0,t.AirVendor=void 0;var o=n(96323),r=n(31246),a=n(26949),i=n(2381),c=n(72638),l=n(5394),u=function(e,t){var n=(0,r.useBackend)(t),i=n.act,c=n.data,l=c.air_cost,u=c.bankMoney,d=c.cash,s=c.current_fill,p=c.fill_cost,m=c.max_pressure,f=c.min_pressure,h=c.target_pressure,g=c.vend_type,C=function(e){return i("o2_changepressure",{pressure:e})},N=!l,v=N||p>0&&(u>=p||d>=p);return(0,o.createComponentVNode)(2,a.Section,{title:"Buy "+g+"!",children:(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Cost",verticalAlign:"middle",children:(0,o.createComponentVNode)(2,a.Button,{content:N?"Free!":(p||0)+"\u2abd",color:v?"green":undefined,disabled:!v,onClick:function(){return i("o2_fill")}})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Pressure",verticalAlign:"middle",children:(0,o.createComponentVNode)(2,a.Stack,{children:[(0,o.createComponentVNode)(2,a.Stack.Item,{children:(0,o.createComponentVNode)(2,a.Button,{disabled:h===f,onClick:function(){return C(f)},content:"Min"})}),(0,o.createComponentVNode)(2,a.Stack.Item,{grow:!0,children:(0,o.createComponentVNode)(2,a.Slider,{value:h,fillValue:Math.min(s,m),minValue:f,maxValue:m,step:10,stepPixelSize:4,onChange:function(e,t){return C(t)}})}),(0,o.createComponentVNode)(2,a.Stack.Item,{children:(0,o.createComponentVNode)(2,a.Button,{disabled:h===m,onClick:function(){return C(m)},content:"Max"})})]})})]})})},d=function(e,t){var n=(0,r.useBackend)(t),i=n.act,c=n.data,u=c.holding,d=c.holding_pressure,s=c.max_pressure;return(0,o.createComponentVNode)(2,a.Section,{title:"Holding Tank",buttons:(0,o.createComponentVNode)(2,a.Button,{onClick:function(){return i("o2_eject")},icon:"eject",disabled:!u,children:"Eject"}),children:[(0,o.createComponentVNode)(2,l.GasTankInfo,{pressure:d||0,maxPressure:s||1,name:u||"N/A"}),!u&&(0,o.createComponentVNode)(2,a.Dimmer,{children:(0,o.createComponentVNode)(2,a.Button,{icon:"eject",fontSize:1.5,onClick:function(){return i("o2_insert")},bold:!0,children:"Insert Gas Tank"})})]})};t.AirVendor=function(e,t){var n=(0,r.useBackend)(t),a=n.act,l=n.data,s=l.cash,p=l.cardname,m=l.bankMoney;return(0,o.createComponentVNode)(2,i.Window,{width:350,height:320,children:(0,o.createComponentVNode)(2,i.Window.Content,{children:[(0,o.createComponentVNode)(2,u),(0,o.createComponentVNode)(2,d),(0,o.createComponentVNode)(2,c.VendorCashTable,{cardname:p,onCardClick:function(){return a("logout")},bankMoney:m,cash:s,onCashClick:function(){return a("returncash")}})]})})}},22704:function(e,t,n){"use strict";t.__esModule=!0,t.AccessPanel=t.Airlock=t.uiCurrentUserPermissions=void 0;var o=n(96323),r=n(31246),a=n(1033),i=n(26949),c=n(2381),l=function(e){var t=e.panelOpen,n=e.userStates;return{airlock:n.isBorg||n.isAi,accessPanel:n.isBorg&&n.distance<=1&&t||t&&!n.isBorg&&!n.isAi}};t.uiCurrentUserPermissions=l;t.Airlock=function(e,t){var n=(0,r.useBackend)(t).data,a=l(n);return(0,o.createComponentVNode)(2,c.Window,{theme:"ntos",children:(0,o.createComponentVNode)(2,c.Window.Content,{children:[!a.airlock&&!a.accessPanel&&(0,o.createComponentVNode)(2,i.Modal,{textAlign:"center",fontSize:"24px",children:(0,o.createComponentVNode)(2,i.Box,{width:25,height:5,align:"center",children:"Access Panel is Closed"})}),!!a.airlock&&!!a.accessPanel&&(0,o.createComponentVNode)(2,u)||!!a.airlock&&(0,o.createComponentVNode)(2,d)||!!a.accessPanel&&(0,o.createComponentVNode)(2,s)]})})};var u=function(e,t){var n=(0,r.useBackend)(t).data,l=n.name,u=n.canAiControl,d=n.hackMessage,s=n.canAiHack,C=n.noPower,N=(0,r.useLocalState)(t,"tabIndex",1),v=N[0],b=N[1];return(0,o.createComponentVNode)(2,c.Window,{width:354,height:495,title:"Airlock - "+(0,a.truncate)(l,19),children:(0,o.createComponentVNode)(2,c.Window.Content,{children:[(0,o.createComponentVNode)(2,i.Tabs,{children:[(0,o.createComponentVNode)(2,i.Tabs.Tab,{selected:1===v,onClick:function(){b(1)},children:"Airlock Controls"}),(0,o.createComponentVNode)(2,i.Tabs.Tab,{selected:2===v,onClick:function(){b(2)},children:"Access Panel"})]}),1===v&&(0,o.createFragment)([(0,o.createComponentVNode)(2,i.Section,{fitted:!0,backgroundColor:"transparent",children:[(!u||!!C)&&(0,o.createComponentVNode)(2,i.Modal,{textAlign:"center",fontSize:"24px",children:(0,o.createComponentVNode)(2,i.Box,{width:20,height:5,algin:"center",children:d||"Airlock Controls Disabled"})}),(0,o.createComponentVNode)(2,p),(0,o.createComponentVNode)(2,m),(0,o.createComponentVNode)(2,f)]}),!!s&&(0,o.createComponentVNode)(2,h)],0),2===v&&(0,o.createComponentVNode)(2,g)]})})},d=function(e,t){var n=(0,r.useBackend)(t).data,l=n.name,u=n.canAiControl,d=n.hackMessage,s=n.canAiHack,g=n.noPower;return(0,o.createComponentVNode)(2,c.Window,{width:315,height:380,title:"Airlock - "+(0,a.truncate)(l,19),children:(0,o.createComponentVNode)(2,c.Window.Content,{children:[(!u||!!g)&&(0,o.createComponentVNode)(2,i.Modal,{textAlign:"center",fontSize:"26px",children:[(0,o.createComponentVNode)(2,i.Box,{width:20,height:5,algin:"center",children:d||"Airlock Controls Disabled"}),!!s&&(0,o.createComponentVNode)(2,h)]}),(0,o.createComponentVNode)(2,p),(0,o.createComponentVNode)(2,m),(0,o.createComponentVNode)(2,f)]})})},s=function(e,t){var n=(0,r.useBackend)(t).data.name;return(0,o.createComponentVNode)(2,c.Window,{width:354,height:465,title:"Airlock - "+(0,a.truncate)(n,19),children:(0,o.createComponentVNode)(2,c.Window.Content,{children:(0,o.createComponentVNode)(2,g)})})},p=function(e,t){var n=(0,r.useBackend)(t),a=n.act,c=n.data,l=c.mainTimeLeft,u=c.backupTimeLeft,d=c.wires,s=c.netId,p=c.accessCode,m={width:6.7,textAlign:"center"};return(0,o.createComponentVNode)(2,i.Section,{title:"Power Status",children:[(0,o.createComponentVNode)(2,i.Box,{children:["Access sensor reports the net identifer is:"," ",(0,o.createComponentVNode)(2,i.Box,{inline:!0,italic:!0,children:s})]}),(0,o.createComponentVNode)(2,i.Box,{children:["Net access code:"," ",(0,o.createComponentVNode)(2,i.Box,{inline:!0,italic:!0,children:p})]}),(0,o.createComponentVNode)(2,i.Divider),(0,o.createComponentVNode)(2,i.LabeledList,{children:[(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Main",color:l?"bad":"good",buttons:(0,o.normalizeProps)((0,o.createComponentVNode)(2,i.Button,Object.assign({},m,{color:"bad",icon:"plug",disabled:!!l,onClick:function(){return a("disruptMain")},children:"Disrupt"}))),children:[l?"Offline":"Online"," ",d.main_1&&d.main_2?l>0&&"["+l+"s]":"[Wires cut!]"]}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Backup",color:u?"bad":"good",buttons:(0,o.normalizeProps)((0,o.createComponentVNode)(2,i.Button,Object.assign({},m,{mt:.5,color:"bad",icon:"plug",disabled:!!u,onClick:function(){return a("disruptBackup")},children:"Disrupt"}))),children:[u?"Offline":"Online"," ",d.backup_1&&d.backup_2?u>0&&"["+u+"s]":"[Wires cut!]"]})]})]})},m=function(e,t){var n=(0,r.useBackend)(t),a=n.act,c=n.data,l=c.mainTimeLeft,u=c.backupTimeLeft,d=c.wires,s=c.idScanner,p=c.boltsAreUp,m=c.opened,f=c.welded,h={width:6.7,textAlign:"center"};return(0,o.createComponentVNode)(2,i.Section,{title:"Access and Door Control",pt:1,children:(0,o.createComponentVNode)(2,i.LabeledList,{children:[(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"ID Scan",color:"bad",buttons:(0,o.normalizeProps)((0,o.createComponentVNode)(2,i.Button,Object.assign({},h,{color:s?"good":"bad",icon:s?"power-off":"times",disabled:!d.idScanner||l&&u,onClick:function(){return a("idScanToggle")},children:s?"Enabled":"Disabled"}))),children:!d.idScanner&&"[Wires cut!]"}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Door Bolts",color:"bad",buttons:(0,o.normalizeProps)((0,o.createComponentVNode)(2,i.Button,Object.assign({mt:.5},h,{color:p?"good":"bad",icon:p?"lock":"unlock",disabled:!d.bolts||l&&u,onClick:function(){return a("boltToggle")},children:p?"Raised":"Lowered"}))),children:!d.bolts&&"[Wires cut!]"}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Door Control",color:"bad",buttons:(0,o.normalizeProps)((0,o.createComponentVNode)(2,i.Button,Object.assign({},h,{mt:.5,color:m?"bad":"good",icon:m?"sign-out-alt":"sign-in-alt",disabled:!p||f||l&&u,onClick:function(){return a("openClose")},children:m?"Open":"Closed"}))),children:!(p&&!f)&&(0,o.createVNode)(1,"span",null,[(0,o.createTextVNode)("["),!p&&"Bolted",!p&&f&&" & ",f&&"Welded",(0,o.createTextVNode)("!]")],0)})]})})},f=function(e,t){var n=(0,r.useBackend)(t),a=n.act,c=n.data,l=c.mainTimeLeft,u=c.backupTimeLeft,d=c.wires,s=c.shockTimeLeft;return(0,o.createComponentVNode)(2,i.NoticeBox,{backgroundColor:"#601B1B",children:(0,o.createComponentVNode)(2,i.LabeledList,{children:[(0,o.createComponentVNode)(2,i.LabeledList.Item,{labelColor:"white",color:s?"average":"good",label:"Electrify",children:[s?"Electrified":"Safe"," ",(d.shock?s>0&&"["+s+"s]":"[Wires cut!]")||-1===s&&"[Permanent]"]}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{color:s?"Bad":"Average",children:(0,o.createComponentVNode)(2,i.Box,{pl:s?18:0,pt:.5,children:[!s&&(0,o.createComponentVNode)(2,i.Button.Confirm,{width:9,p:.5,align:"center",color:"average",content:"Temporary",confirmContent:"Are you sure?",icon:"bolt",disabled:!d.shock||l&&u,onClick:function(){return a("shockTemp")}}),(0,o.createComponentVNode)(2,i.Button.Confirm,{width:9,p:.5,align:"center",color:s?"good":"bad",icon:"bolt",confirmContent:"Are you sure?",content:s?"Restore":"Permanent",disabled:!d.shock||l&&u,onClick:s?function(){return a("shockRestore")}:function(){return a("shockPerm")}})]})})]})})},h=function(e,t){var n=(0,r.useBackend)(t),a=n.act,c=n.data,l=c.aiHacking,u=c.hackingProgression;return(0,o.createComponentVNode)(2,i.Box,{fitted:!0,py:.5,pt:2,align:"center",children:[!l&&(0,o.createComponentVNode)(2,i.Button,{className:"Airlock-hack-button",fontSize:"29px",backgroundColor:"#00FF00",disabled:l,textColor:"black",textAlign:"center",width:16,onClick:function(){return a("hackAirlock")},children:"HACK"}),!!l&&(0,o.createComponentVNode)(2,i.ProgressBar,{ranges:{good:[6,Infinity],average:[2,5],bad:[-Infinity,1]},minValue:0,maxValue:6,value:u})]})},g=function(e,t){var n=(0,r.useBackend)(t),a=n.act,c=n.data,l=c.signalers,u=c.wireColors,d=c.wireStates,s=c.netId,p=c.powerIsOn,m=c.boltsAreUp,f=c.canAiControl,h=c.aiControlVar,g=c.safety,C=c.panelOpen,N=c.accessCode,v=function(e,t){a(t,{wireColorIndex:e})},b=Object.keys(u);return(0,o.createComponentVNode)(2,i.Section,{title:"Access Panel",children:[!C&&(0,o.createComponentVNode)(2,i.Modal,{textAlign:"center",fontSize:"24px",children:"Access Panel is Closed"}),(0,o.createComponentVNode)(2,i.Box,{children:["An identifier is engraved under the airlock's card sensors:"," ",(0,o.createComponentVNode)(2,i.Box,{inline:!0,italic:!0,children:s})]}),(0,o.createComponentVNode)(2,i.Box,{children:["A display shows net access code:"," ",(0,o.createComponentVNode)(2,i.Box,{inline:!0,italic:!0,children:N})]}),(0,o.createComponentVNode)(2,i.Divider),(0,o.createComponentVNode)(2,i.LabeledList,{children:b.map((function(e,t){return(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:e+" wire",labelColor:e.toLowerCase(),children:d[t]?(0,o.createComponentVNode)(2,i.Button,{color:"green",height:1.8,onClick:function(){return v(t,"mend")},children:"Mend"}):(0,o.createComponentVNode)(2,i.Box,{height:1.8,children:[(0,o.createComponentVNode)(2,i.Button,{icon:"cut",onClick:function(){return v(t,"cut")},children:"Cut"}),(0,o.createComponentVNode)(2,i.Button,{icon:"bolt",onClick:function(){return v(t,"pulse")},children:"Pulse"}),(0,o.createComponentVNode)(2,i.Button,{icon:"broadcast-tower",width:10.5,className:"AccessPanel-wires-btn",selected:l[t],onClick:function(){return v(t,"signaler")},children:l[t]?"Detach Signaler":"Attach Signaler"})]})},e)}))}),(0,o.createComponentVNode)(2,i.Divider),(0,o.createComponentVNode)(2,i.Flex,{direction:"row",children:[(0,o.createComponentVNode)(2,i.Flex.Item,{children:(0,o.createComponentVNode)(2,i.LabeledList,{children:[(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Door bolts",color:m?"green":"red",children:m?"Disengaged":"Engaged"}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Test light",color:p?"green":"red",children:p?"Active":"Inactive"})]})}),(0,o.createComponentVNode)(2,i.Flex.Item,{children:(0,o.createComponentVNode)(2,i.LabeledList,{children:[(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"AI control",color:f?2===h?"orange":"green":"red",children:f?"Enabled":"Disabled"}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Safety light",color:g?"green":"red",children:g?"Active":"Inactive"})]})})]})]})};t.AccessPanel=g},78403:function(e,t,n){"use strict";t.__esModule=!0,t.getAlertContentWindow=void 0;var o=n(43469);t.getAlertContentWindow=function(e){if("tgControls"===e)return o.tgControls}},43469:function(e,t,n){"use strict";t.__esModule=!0,t.tgControls=void 0;var o=n(96323),r=n(26949),a={width:470,height:320,title:"Use /tg/ style interface?",content:(0,o.createFragment)([(0,o.createComponentVNode)(2,r.Box,{children:"Would you rather use a /tg/ style interface? If so, checkout the options in the drop-down menu at the top of the screen - 'Game'."}),(0,o.createComponentVNode)(2,r.Box,{my:1.5,children:"Save your profile in Character Setup to dismiss this alert."})],0)};t.tgControls=a},89037:function(){},458:function(e,t,n){"use strict";t.__esModule=!0,t.AlertModal=void 0;var o=n(96323),r=n(55631),a=n(31246),i=n(57890),c=n(26949),l=n(2381),u=n(78403);t.AlertModal=function(e,t){var n=(0,a.useBackend)(t),s=n.act,p=n.data,m=p.autofocus,f=p.items,h=void 0===f?[]:f,g=p.message,C=void 0===g?"":g,N=p.content_window,v=void 0===N?"":N,b=p.timeout,V=p.title,y=p.theme,x=(0,a.useLocalState)(t,"selected",0),I=x[0],k=x[1],w=v?(0,u.getAlertContentWindow)(v):null,S=w?w.height:115+(C.length>30?Math.ceil(C.length/4):0),_=w?w.width:325+(h.length>2?55:0),M=function(e){0===I&&-1===e?k(h.length-1):I===h.length-1&&1===e?k(0):k(I+e)};return(0,o.createComponentVNode)(2,l.Window,{height:S,title:w?w.title:V,width:_,theme:y||"nanotrasen",children:[!!b&&(0,o.createComponentVNode)(2,r.Loader,{value:b}),(0,o.createComponentVNode)(2,l.Window.Content,{onKeyDown:function(e){var t=window.event?e.which:e.keyCode;t===i.KEY_SPACE||t===i.KEY_ENTER?s("choose",{choice:h[I]}):t===i.KEY_ESCAPE?s("cancel"):t===i.KEY_LEFT?(e.preventDefault(),M(-1)):t!==i.KEY_TAB&&t!==i.KEY_RIGHT||(e.preventDefault(),M(1))},children:(0,o.createComponentVNode)(2,c.Section,{fill:!0,children:(0,o.createComponentVNode)(2,c.Stack,{fill:!0,vertical:!0,children:[(0,o.createComponentVNode)(2,c.Stack.Item,{grow:!0,m:1,children:(0,o.createComponentVNode)(2,c.Box,{color:"label",overflow:"hidden",children:w?w.content:C})}),(0,o.createComponentVNode)(2,c.Stack.Item,{children:[!!m&&(0,o.createComponentVNode)(2,c.Autofocus),(0,o.createComponentVNode)(2,d,{selected:I})]})]})})})]})};var d=function(e,t){var n=(0,a.useBackend)(t).data.items,r=void 0===n?[]:n,i=e.selected;return(0,o.createComponentVNode)(2,c.Flex,{align:"center",direction:"row",fill:!0,justify:"space-around",wrap:!0,children:null==r?void 0:r.map((function(e,t){return(0,o.createComponentVNode)(2,c.Flex.Item,{children:(0,o.createComponentVNode)(2,s,{button:e,id:t.toString(),selected:i===t})},t)}))})},s=function(e,t){var n=(0,a.useBackend)(t),r=n.act,i=(n.data,e.button),l=e.selected,u=i.length>7?i.length:7;return(0,o.createComponentVNode)(2,c.Button,{onClick:function(){return r("choose",{choice:i})},m:.5,pl:2,pr:2,pt:0,selected:l,textAlign:"center",width:u,children:i})}},20920:function(e,t,n){"use strict";t.__esModule=!0,t.AntagonistTypeTabBody=void 0;var o=n(96323),r=n(31246),a=n(21118),i=n(26949);t.AntagonistTypeTabBody=function(e){return(0,o.createComponentVNode)(2,i.Box,{children:e.currentTabSections?e.currentTabSections.map((function(e,t){return(0,o.normalizeProps)((0,o.createComponentVNode)(2,l,Object.assign({},e),t))})):(0,o.normalizeProps)((0,o.createComponentVNode)(2,c,Object.assign({},e)))})};var c=function(e){return(0,o.createFragment)([(0,o.createComponentVNode)(2,i.Section,{children:(0,o.createComponentVNode)(2,i.Stack,{vertical:!0,align:"center",my:3,children:[(0,o.createComponentVNode)(2,i.Stack.Item,{mb:-2.5,italic:!0,children:"The Game Mode Is:"}),(0,o.createComponentVNode)(2,i.Stack.Item,{fontSize:2.75,bold:!0,children:(0,a.toTitleCase)(e.gameMode)})]})}),(0,o.createComponentVNode)(2,i.Stack,{justify:"space-around",children:[(0,o.createComponentVNode)(2,i.Stack.Item,{grow:!0,children:(0,o.createComponentVNode)(2,i.Section,{title:"Antagonist Mortality Rate",children:[(0,o.createComponentVNode)(2,i.ProgressBar,{minValue:0,maxValue:e.mortalityRates.antagonistsAlive+e.mortalityRates.antagonistsDead||1,value:e.mortalityRates.antagonistsDead,color:"red",backgroundColor:"green",mb:1}),(0,o.createComponentVNode)(2,i.LabeledList,{children:[(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Alive Antagonists",children:e.mortalityRates.antagonistsAlive}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Dead Antagonists",children:e.mortalityRates.antagonistsDead})]})]})}),(0,o.createComponentVNode)(2,i.Stack.Item,{grow:!0,children:(0,o.createComponentVNode)(2,i.Section,{title:"Crew Mortality Rate",children:[(0,o.createComponentVNode)(2,i.ProgressBar,{minValue:0,maxValue:e.mortalityRates.crewAlive+e.mortalityRates.crewDead||1,value:e.mortalityRates.crewDead,color:"red",backgroundColor:"green",mb:1}),(0,o.createComponentVNode)(2,i.LabeledList,{children:[(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Alive Crew",children:e.mortalityRates.crewAlive}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Dead Crew",children:e.mortalityRates.crewDead})]})]})})]})],4)},l=function(e){var t=V(e.sectionType);return(0,o.normalizeProps)((0,o.createComponentVNode)(2,t,Object.assign({},e)))},u=function(){return(0,o.createComponentVNode)(2,i.Table.Row,{children:[(0,o.createComponentVNode)(2,i.Table.Cell,{children:[" ",(0,o.createComponentVNode)(2,i.Divider)," "]}),(0,o.createComponentVNode)(2,i.Table.Cell,{children:[" ",(0,o.createComponentVNode)(2,i.Divider)," "]}),(0,o.createComponentVNode)(2,i.Table.Cell,{children:[" ",(0,o.createComponentVNode)(2,i.Divider)," "]})]})},d=function(e,t){var n,a=(0,r.useBackend)(t),c=a.act,l=a.data,u=(null==(n=l.subordinateAntagonists[e.antagonist_datum])?void 0:n.sort((function(e,t){return e.real_name.localeCompare(t.real_name)})))||[];return(0,o.createFragment)([(0,o.createComponentVNode)(2,i.Table.Row,{children:[(0,o.createComponentVNode)(2,i.Table.Cell,{py:"0.5em",children:(0,o.createComponentVNode)(2,i.Tooltip,{content:(0,o.createComponentVNode)(2,i.LabeledList,{children:[(0,o.normalizeProps)((0,o.createComponentVNode)(2,p,Object.assign({},e))),(0,o.normalizeProps)((0,o.createComponentVNode)(2,m,Object.assign({},e)))]}),children:(0,o.createComponentVNode)(2,i.Box,{inline:!0,children:[!!e.has_subordinate_antagonists&&(0,o.createComponentVNode)(2,i.Button,{width:2,textAlign:"center",my:-.5,mr:.8,icon:l.subordinateAntagonists[e.antagonist_datum]?"chevron-down":"chevron-right",onClick:function(){return c(l.subordinateAntagonists[e.antagonist_datum]?"unrequest_subordinate_antagonist_data":"request_subordinate_antagonist_data",{antagonist_datum:e.antagonist_datum})},tooltip:"Subordinate Antagonists"}),(0,o.normalizeProps)((0,o.createComponentVNode)(2,f,Object.assign({},e)))]})})}),(0,o.normalizeProps)((0,o.createComponentVNode)(2,h,Object.assign({mind_ref:e.mind_ref},l.mindLocations[e.mind_ref]))),(0,o.normalizeProps)((0,o.createComponentVNode)(2,g,Object.assign({},e)))]}),u.map((function(e,t){return(0,o.createComponentVNode)(2,i.Table.Row,{children:[(0,o.createComponentVNode)(2,i.Table.Cell,{py:"0.5em",pl:1.6,children:(0,o.createComponentVNode)(2,i.Tooltip,{content:(0,o.createComponentVNode)(2,i.LabeledList,{children:[(0,o.normalizeProps)((0,o.createComponentVNode)(2,s,Object.assign({},e))),(0,o.normalizeProps)((0,o.createComponentVNode)(2,p,Object.assign({},e))),(0,o.normalizeProps)((0,o.createComponentVNode)(2,m,Object.assign({},e)))]}),children:(0,o.createComponentVNode)(2,i.Box,{inline:!0,children:[(0,o.createComponentVNode)(2,i.Icon,{name:"caret-right",mr:1.6}),(0,o.normalizeProps)((0,o.createComponentVNode)(2,f,Object.assign({},e)))]})})}),(0,o.normalizeProps)((0,o.createComponentVNode)(2,h,Object.assign({},e))),(0,o.normalizeProps)((0,o.createComponentVNode)(2,g,Object.assign({},e)))]},t)}))],0)},s=function(e){e.display_name;return(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Antagonist Role",children:(0,a.toTitleCase)(e.display_name)})},p=function(e){e.ckey;return(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Client",children:e.ckey?e.ckey:(0,o.createComponentVNode)(2,i.Box,{inline:!0,italic:!0,children:"No Client"})})},m=function(e){e.job;return(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Job",children:e.job?e.job:(0,o.createComponentVNode)(2,i.Box,{inline:!0,italic:!0,children:"N/A"})})},f=function(e){e.real_name,e.ckey,e.dead;return(0,o.createComponentVNode)(2,i.Box,{inline:!0,children:[!!e.dead&&(0,o.createComponentVNode)(2,i.Icon,{name:"skull"})," ",e.real_name+" ",!e.ckey&&(0,o.createComponentVNode)(2,i.Box,{inline:!0,italic:!0,children:"(no client)"})]})},h=function(e,t){var n=(0,r.useBackend)(t).act,a=(e.mind_ref,e.area),c=e.coordinates;return(0,o.createComponentVNode)(2,i.Table.Cell,{children:[a,(0,o.createComponentVNode)(2,i.Button,{color:"transparent",content:c,onClick:function(){return n("jump_to",{target:e.mind_ref})},tooltip:"Jump To Position"})]})},g=function(e){return(0,o.createComponentVNode)(2,i.Table.Cell,{children:[(0,o.normalizeProps)((0,o.createComponentVNode)(2,C,Object.assign({},e))),(0,o.normalizeProps)((0,o.createComponentVNode)(2,N,Object.assign({},e))),(0,o.normalizeProps)((0,o.createComponentVNode)(2,v,Object.assign({},e)))]})},C=function(e,t){var n=(0,r.useBackend)(t).act;e.mind_ref;return(0,o.createComponentVNode)(2,i.Button,{content:"PM",onClick:function(){return n("admin_pm",{mind_ref:e.mind_ref})},tooltip:"Admin PM",mr:1})},N=function(e,t){var n=(0,r.useBackend)(t).act;e.mind_ref;return(0,o.createComponentVNode)(2,i.Button,{width:2,textAlign:"center",icon:"user-gear",onClick:function(){return n("player_options",{mind_ref:e.mind_ref})},tooltip:"Player Options",mr:1})},v=function(e,t){var n=(0,r.useBackend)(t).act;e.antagonist_datum;return(0,o.createComponentVNode)(2,i.Button,{width:2,textAlign:"center",icon:"gear",onClick:function(){return n("view_variables",{antagonist_datum:e.antagonist_datum})},tooltip:"Antagonist Datum Vars"})},b=function(e,t){var n=(0,r.useBackend)(t),c=n.data;n.act;return(0,o.createComponentVNode)(2,i.Table.Row,{children:[(0,o.createComponentVNode)(2,i.Table.Cell,{py:"0.5em",children:(0,a.toTitleCase)(e.role)}),(0,o.createComponentVNode)(2,i.Table.Cell,{children:(0,o.createComponentVNode)(2,i.Tooltip,{content:(0,o.createComponentVNode)(2,i.LabeledList,{children:(0,o.normalizeProps)((0,o.createComponentVNode)(2,p,Object.assign({},e)))}),children:(0,o.createComponentVNode)(2,i.Box,{inline:!0,children:[" ",(0,o.normalizeProps)((0,o.createComponentVNode)(2,f,Object.assign({},e)))," "]})})}),(0,o.normalizeProps)((0,o.createComponentVNode)(2,h,Object.assign({mind_ref:e.mind_ref},c.mindLocations[e.mind_ref]))),(0,o.createComponentVNode)(2,i.Table.Cell,{children:[(0,o.normalizeProps)((0,o.createComponentVNode)(2,C,Object.assign({},e))),(0,o.normalizeProps)((0,o.createComponentVNode)(2,N,Object.assign({},e)))]})]})},V=function(e){if(e!==undefined)return e in y?y[e]:void 0},y={AntagonistList:function(e){var t=e.sectionData;if(t.length){var n=t.sort((function(e,t){return e.real_name.localeCompare(t.real_name)}))||[];return(0,o.createComponentVNode)(2,i.Section,{children:(0,o.createComponentVNode)(2,i.Table,{fill:!0,vertical:!0,children:[(0,o.createComponentVNode)(2,i.Table.Row,{bold:!0,children:[(0,o.createComponentVNode)(2,i.Table.Cell,{children:[" ",e.sectionName?e.sectionName:"Name"," "]}),(0,o.createComponentVNode)(2,i.Table.Cell,{children:" Location "}),(0,o.createComponentVNode)(2,i.Table.Cell,{children:" Commands "})]}),(0,o.createComponentVNode)(2,u),null==n?void 0:n.map((function(e,t){return(0,o.normalizeProps)((0,o.createComponentVNode)(2,d,Object.assign({},e),t))}))]})})}},NuclearBombReadout:function(e,t){if(e.sectionData){var n=(0,r.useBackend)(t).act,c=e.sectionData;return(0,o.createComponentVNode)(2,i.Section,{title:(0,a.toTitleCase)(e.sectionName),children:(0,o.createComponentVNode)(2,i.Stack,{align:"center",children:[(0,o.createComponentVNode)(2,i.Stack.Item,{children:(0,o.createComponentVNode)(2,i.Box,{textAlign:"center",textColor:"red",fontFamily:"Consolas",fontSize:5,m:.5,mr:2,children:c.timeRemaining})}),(0,o.createComponentVNode)(2,i.Stack.Item,{grow:!0,children:(0,o.createComponentVNode)(2,i.LabeledList,{children:[(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Health",verticalAlign:"middle",children:(0,o.createComponentVNode)(2,i.ProgressBar,{minValue:0,maxValue:c.maxHealth,value:c.health,color:"green",backgroundColor:"red",mb:1})}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Location",verticalAlign:"middle",children:[c.area,(0,o.createComponentVNode)(2,i.Button,{color:"transparent",content:c.coordinates,onClick:function(){return n("jump_to",{target:c.nuclearBomb})},tooltip:"Jump To Position"})]})]})})]})})}},HeadsList:function(e){var t=e.sectionData;if(t.length){var n=["Captain","Head of Personnel","Head of Security","Chief Engineer","Research Director","Medical Director"],r=t.sort((function(e,t){return n.indexOf(e.role)-n.indexOf(t.role)}))||[];return(0,o.createComponentVNode)(2,i.Section,{children:(0,o.createComponentVNode)(2,i.Table,{fill:!0,vertical:!0,children:[(0,o.createComponentVNode)(2,i.Table.Row,{bold:!0,children:[(0,o.createComponentVNode)(2,i.Table.Cell,{children:" Role "}),(0,o.createComponentVNode)(2,i.Table.Cell,{children:" Name "}),(0,o.createComponentVNode)(2,i.Table.Cell,{children:" Location "}),(0,o.createComponentVNode)(2,i.Table.Cell,{children:" Commands "})]}),(0,o.createComponentVNode)(2,i.Table.Row,{children:[(0,o.createComponentVNode)(2,i.Table.Cell,{children:[" ",(0,o.createComponentVNode)(2,i.Divider)," "]}),(0,o.createComponentVNode)(2,i.Table.Cell,{children:[" ",(0,o.createComponentVNode)(2,i.Divider)," "]}),(0,o.createComponentVNode)(2,i.Table.Cell,{children:[" ",(0,o.createComponentVNode)(2,i.Divider)," "]}),(0,o.createComponentVNode)(2,i.Table.Cell,{children:[" ",(0,o.createComponentVNode)(2,i.Divider)," "]})]}),null==r?void 0:r.map((function(e,t){return(0,o.normalizeProps)((0,o.createComponentVNode)(2,b,Object.assign({},e),t))}))]})})}},GangReadout:function(e){var t=e.sectionData;if(t.length)return(0,o.createComponentVNode)(2,i.Section,{title:e.sectionName,children:t.map((function(e,t){return(0,o.normalizeProps)((0,o.createComponentVNode)(2,l,Object.assign({},e),t))}))})},GangLockerReadout:function(e,t){if(e.sectionData){var n=(0,r.useBackend)(t).act,c=e.sectionData;return(0,o.createComponentVNode)(2,i.Section,{children:[(0,o.createComponentVNode)(2,i.Box,{bold:!0,children:(0,a.toTitleCase)(e.sectionName)}),(0,o.createComponentVNode)(2,i.Divider),(0,o.createComponentVNode)(2,i.LabeledList,{children:[(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Health",verticalAlign:"middle",children:(0,o.createComponentVNode)(2,i.ProgressBar,{minValue:0,maxValue:c.maxHealth,value:c.health,color:"green",backgroundColor:"red",mb:1})}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Location",verticalAlign:"middle",children:[c.area,(0,o.createComponentVNode)(2,i.Button,{color:"transparent",content:c.coordinates,onClick:function(){return n("jump_to",{target:c.gangLocker})},tooltip:"Jump To Position"})]})]})]})}}}},56444:function(e,t,n){"use strict";t.__esModule=!0,t.AntagonistTypeTabs=void 0;var o=n(96323),r=n(31246),a=n(21118),i=n(26949);t.AntagonistTypeTabs=function(e,t){var n=(0,r.useBackend)(t),c=n.data,l=n.act,u=(0,r.useLocalState)(t,"tabIndex",c.tabToOpenOn),d=u[0],s=u[1],p=c.tabs.sort((function(e,t){return e.tabName.localeCompare(t.tabName)}))||[],m=function(e){s(e),l("set_tab",{index:e})};return(0,o.createComponentVNode)(2,i.Section,{inline:!0,fill:!0,children:(0,o.createComponentVNode)(2,i.Tabs,{vertical:!0,children:[(0,o.createComponentVNode)(2,i.Tabs.Tab,{selected:null===d,onClick:function(){return m(null)},width:12,my:.2,children:"General"}),(0,o.createComponentVNode)(2,i.Box,{my:-.5,children:(0,o.createComponentVNode)(2,i.Divider)}),p.map((function(e,t){return(0,o.createComponentVNode)(2,i.Tabs.Tab,{selected:d===e.index,onClick:function(){return m(e.index)},width:12,my:.2,children:(0,a.toTitleCase)(e.tabName)},t)}))]})})}},20636:function(e,t,n){"use strict";t.__esModule=!0,t.AntagonistPanel=void 0;var o=n(96323),r=n(31246),a=n(2381),i=n(26949),c=n(56444),l=n(20920);t.AntagonistPanel=function(e,t){var n=(0,r.useBackend)(t).data;return(0,o.createComponentVNode)(2,a.Window,{title:"Antagonist Panel",width:750,height:500,children:(0,o.createComponentVNode)(2,a.Window.Content,{scrollable:!0,children:(0,o.createComponentVNode)(2,i.Stack,{fill:!0,children:[(0,o.createComponentVNode)(2,i.Stack.Item,{children:(0,o.normalizeProps)((0,o.createComponentVNode)(2,c.AntagonistTypeTabs,Object.assign({},n)))}),(0,o.createComponentVNode)(2,i.Stack.Item,{grow:!0,children:(0,o.normalizeProps)((0,o.createComponentVNode)(2,l.AntagonistTypeTabBody,Object.assign({},n)))})]})})})}},5562:function(){},20065:function(e,t,n){"use strict";t.__esModule=!0,t.AccessPanelSection=void 0;var o=n(96323),r=n(31246),a=n(26949),i=n(63687);t.AccessPanelSection=function(e,t){var n=(0,r.useBackend)(t).data,c=n.net_id,l=n.locked,u=n.shorted,d=n.aidisabled;return(0,o.createComponentVNode)(2,a.Section,{title:"Access Panel",children:[(0,o.createComponentVNode)(2,a.Box,{children:["An identifier is engraved above the APC's wires:"," ",(0,o.createComponentVNode)(2,a.Box,{inline:!0,italic:!0,children:c})]}),(0,o.createComponentVNode)(2,a.Divider),(0,o.createComponentVNode)(2,i.WireList),(0,o.createComponentVNode)(2,a.Divider),(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Controls",color:l?"green":"red",children:l?"Locked":"Unlocked"}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Circuitry",color:u?"red":"green",children:u?"Shorted":"Working"}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"AI Control",color:d?"red":"green",children:d?"Disabled":"Enabled"})]})]})}},65005:function(e,t,n){"use strict";t.__esModule=!0,t.CellDisplay=void 0;var o=n(96323),r=n(31246),a=n(26949),i=n(94104);t.CellDisplay=function(e,t){var n=(0,r.useBackend)(t),c=n.act,l=n.data,u=l.cell_percent,d=l.cell_present,s=l.chargecount,p=l.chargemode,m=l.charging,f=(0,i.getHasPermission)(l),h=function(e,t){switch(e){case 0:return t?"Performing self-test":"Not charging";case 1:return"Charging";default:return"Fully Charged"}}(m,s),g=function(e){return function(){return c("onChargeModeChange",{chargemode:e})}};return(0,o.createFragment)([(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Charging",textAlign:"right",buttons:(0,o.createFragment)([(0,o.createComponentVNode)(2,a.Button,{onClick:g(0),disabled:!f&&0!==p,selected:0===p,children:"Off"}),(0,o.createComponentVNode)(2,a.Button,{onClick:g(1),disabled:!f&&1!==p,selected:1===p,children:"Auto"})],4),children:["(",d?h:"Not Connected",")"]}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Cell Power",verticalAlign:"middle",children:(0,o.createComponentVNode)(2,a.ProgressBar,{value:u,minValue:0,maxValue:100,color:u<20?"red":u<50?"yellow":"green"})})],4)}},54187:function(e,t,n){"use strict";t.__esModule=!0,t.MainSection=void 0;var o,r,a=n(96323),i=n(31246),c=n(26949),l=n(65005),u=n(94104);!function(e){e[e.None=0]="None",e[e.Low=1]="Low",e[e.Good=2]="Good"}(r||(r={}));var d=((o={})[r.None]={name:"None",color:"red"},o[r.Low]={name:"Low",color:"yellow"},o[r.Good]={name:"Good",color:"green"},o),s=function(e){var t=e.mainStatus,n=d[t];return(0,a.createComponentVNode)(2,c.LabeledList.Item,{label:"External Power",color:n.color,textAlign:"right",children:n.name})};t.MainSection=function(e,t){var n=(0,i.useBackend)(t),o=n.act,r=n.data,d=r.area_name,p=r.host_id,m=r.locked,f=r.main_status,h=r.operating,g=(0,u.getHasPermission)(r),C=(0,u.getIsLocalAccess)(r),N=function(e){return o("onOperatingChange",{operating:e})};return(0,a.createComponentVNode)(2,c.Section,{title:d,children:[C&&(0,a.createFragment)([(0,a.createComponentVNode)(2,c.Box,{align:"center",bold:!0,fill:!0,children:["Swipe ID card to ",m?"unlock":"lock"," interface"]}),(0,a.createComponentVNode)(2,c.Divider)],4),(0,a.createComponentVNode)(2,c.LabeledList,{children:[(0,a.createComponentVNode)(2,c.LabeledList.Item,{label:"Main Breaker",buttons:(0,a.createFragment)([(0,a.createComponentVNode)(2,c.Button,{disabled:!g&&h,onClick:function(){return N(!1)},selected:!h,children:"Off"}),(0,a.createComponentVNode)(2,c.Button,{disabled:!g&&!h,onClick:function(){return N(!0)},selected:h,children:"On"})],4)}),(0,a.createComponentVNode)(2,l.CellDisplay),(0,a.createComponentVNode)(2,s,{mainStatus:f}),C&&(0,a.createComponentVNode)(2,c.LabeledList.Item,{label:"Host Connection",color:p?"green":"red",textAlign:"right",children:p?"OK":"NONE"})]})]})}},42947:function(e,t,n){"use strict";t.__esModule=!0,t.PowerChannelSection=void 0;var o,r,a=n(96323),i=n(31246),c=n(26949),l=n(94104);!function(e){e[e.Equipment=1]="Equipment",e[e.Lighting=2]="Lighting",e[e.Environmental=3]="Environmental"}(o||(o={})),function(e){e[e.Off=0]="Off",e[e.AutoOff=1]="AutoOff",e[e.On=2]="On",e[e.AutoOn=3]="AutoOn"}(r||(r={}));var u=[r.AutoOff,r.AutoOn],d=[{id:o.Equipment,label:"Equipment",getPower:function(e){return e.lastused_equip},getStatus:function(e){return e.equipment},statusChangeAction:"onPowerChannelEquipmentStatusChange"},{id:o.Lighting,label:"Lighting",getPower:function(e){return e.lastused_light},getStatus:function(e){return e.lighting},statusChangeAction:"onPowerChannelLightingStatusChange"},{id:o.Environmental,label:"Environmental",getPower:function(e){return e.lastused_environ},getStatus:function(e){return e.environ},statusChangeAction:"onPowerChannelEnvironStatusChange"}].reduce((function(e,t){var n;return Object.assign({},e,((n={})[t.id]=t,n))}),{}),s=function(e,t){var n,o,s=e.powerChannel,p=(0,i.useBackend)(t),m=p.act,f=p.data,h=(0,l.getHasPermission)(f),g=d[s],C=null!=(n=g.label)?n:"Unknown",N=g.getStatus(f),v=(o=N,u.includes(o)),b=g.getPower(f),V=g.statusChangeAction,y=function(e){V&&m(V,{status:e})};return(0,a.createComponentVNode)(2,c.LabeledList.Item,{label:C,textAlign:"right",buttons:(0,a.createFragment)([(0,a.createComponentVNode)(2,c.Button,{disabled:!h&&N!==r.Off,onClick:function(){return y(r.Off)},selected:N===r.Off,children:"Off"}),(0,a.createComponentVNode)(2,c.Button,{disabled:!h&&N!==r.On,onClick:function(){return y(r.On)},selected:N===r.On,children:"On"}),(0,a.createComponentVNode)(2,c.Button,{disabled:!h&&!v,onClick:function(){return y(r.AutoOn)},selected:v,children:"Auto"})],4),children:(0,l.formatWatts)(b)})};t.PowerChannelSection=function(e,t){var n=(0,i.useBackend)(t).data.lastused_total;return(0,a.createComponentVNode)(2,c.Section,{title:"Power Channel",children:(0,a.createComponentVNode)(2,c.LabeledList,{children:[(0,a.createComponentVNode)(2,s,{powerChannel:o.Equipment}),(0,a.createComponentVNode)(2,s,{powerChannel:o.Lighting}),(0,a.createComponentVNode)(2,s,{powerChannel:o.Environmental}),(0,a.createComponentVNode)(2,c.LabeledList.Item,{label:"Total Load",textAlign:"right",buttons:!0,children:(0,l.formatWatts)(n)})]})})}},63687:function(e,t,n){"use strict";t.__esModule=!0,t.WireListItem=t.WireList=void 0;var o,r=n(96323),a=n(31246),i=n(26949);!function(e){e[e.Orange=1]="Orange",e[e.DarkRed=2]="DarkRed",e[e.White=3]="White",e[e.Yellow=4]="Yellow"}(o||(o={}));var c=[{id:o.Orange,name:"Orange",color:"orange",getIsCut:function(e){return!!e.orange_cut}},{id:o.DarkRed,name:"Dark red",color:"darkred",getIsCut:function(e){return!!e.dark_red_cut}},{id:o.White,name:"White",color:"white",getIsCut:function(e){return!!e.white_cut}},{id:o.Yellow,name:"Yellow",color:"yellow",getIsCut:function(e){return!!e.yellow_cut}}];t.WireList=function(e,t){var n=(0,a.useBackend)(t),o=n.act,u=n.data;return(0,r.createComponentVNode)(2,i.LabeledList,{children:c.map((function(e){var t=e.color,n=e.getIsCut,a=e.id,i=e.name;return(0,r.createComponentVNode)(2,l,{color:t,isCut:n(u),name:i,onBite:function(){return o("onBiteWire",{wire:a})},onCut:function(){return o("onCutWire",{wire:a})},onMend:function(){return o("onMendWire",{wire:a})},onPulse:function(){return o("onPulseWire",{wire:a})}},a)}))})};var l=function(e){var t=e.color,n=e.isCut,o=e.name,a=e.onBite,c=e.onCut,l=e.onMend,u=e.onPulse,d=n?(0,r.createComponentVNode)(2,i.Button,{content:"Mend",onClick:l,selected:!0}):(0,r.createFragment)([(0,r.createComponentVNode)(2,i.Button,{icon:"cut",onClick:c,children:"Cut"}),(0,r.createComponentVNode)(2,i.Button,{icon:"bolt",onClick:u,children:"Pulse"}),(0,r.createComponentVNode)(2,i.Button,{icon:"tooth",onClick:a,children:"Bite"})],4);return(0,r.createComponentVNode)(2,i.LabeledList.Item,{label:o+" wire",labelColor:t,buttons:d})};t.WireListItem=l},91690:function(e,t,n){"use strict";t.__esModule=!0,t.Apc=void 0;var o=n(96323),r=n(31246),a=n(26949),i=n(2381),c=n(20065),l=n(54187),u=n(42947),d=n(94104),s=function(e){var t=e.coverlocked,n=e.hasPermission,r=e.onCoverLockedChange;return(0,o.createFragment)([(0,o.createComponentVNode)(2,a.Button,{disabled:!n&&!!t,onClick:function(){return r(!1)},selected:!t,children:"Off"}),(0,o.createComponentVNode)(2,a.Button,{disabled:!n&&!t,onClick:function(){return r(!0)},selected:!!t,children:"On"})],4)};t.Apc=function(e,t){return(0,r.useBackend)(t).data.area_requires_power?(0,o.createComponentVNode)(2,p):(0,o.createComponentVNode)(2,m)};var p=function(e,t){var n=(0,r.useBackend)(t),p=n.act,m=n.data,f=m.area_requires_power,h=m.can_access_remotely,g=m.coverlocked,C=(0,d.getIsLocalAccess)(m),N=(0,d.getHasPermission)(m),v=!!h,b=(0,d.getIsAccessPanelVisible)(m),V=(0,d.calculateWindowHeight)(f,!0,!0,v,b,C);return(0,o.createComponentVNode)(2,i.Window,{title:"Area Power Controller",width:360,height:V,theme:"ntos",children:(0,o.createComponentVNode)(2,i.Window.Content,{children:[(0,o.createComponentVNode)(2,l.MainSection),(0,o.createComponentVNode)(2,u.PowerChannelSection),(0,o.createComponentVNode)(2,a.Section,{children:(0,o.createComponentVNode)(2,a.LabeledList,{children:(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Cover Lock",buttons:(0,o.createComponentVNode)(2,s,{coverlocked:g,hasPermission:N,onCoverLockedChange:function(e){return p("onCoverLockedChange",{coverlocked:e})}})})})}),v&&(0,o.createComponentVNode)(2,a.Section,{children:(0,o.createComponentVNode)(2,a.Button,{align:"center",color:"red",fluid:!0,icon:"bolt",onClick:function(){return p("onOverload")},children:"Overload Lighting Circuit"})}),b&&(0,o.createComponentVNode)(2,c.AccessPanelSection)]})})},m=function(e,t){var n=(0,r.useBackend)(t).data,l=n.area_name,u=n.area_requires_power,s=(0,d.getIsAccessPanelVisible)(n),p=(0,d.calculateWindowHeight)(u,!1,!1,!1,s,!1);return(0,o.createComponentVNode)(2,i.Window,{title:"Area Power Controller",width:360,height:p,theme:"ntos",children:(0,o.createComponentVNode)(2,i.Window.Content,{children:[(0,o.createComponentVNode)(2,a.Section,{title:"Area Power Controller ("+l+")",children:(0,o.createComponentVNode)(2,a.Box,{children:"This APC has no configurable settings."})}),s&&(0,o.createComponentVNode)(2,c.AccessPanelSection)]})})}},73020:function(e,t){"use strict";var n;t.__esModule=!0,t.InterfaceType=void 0,t.InterfaceType=n,function(e){e[e.LocalOnly=0]="LocalOnly",e[e.LocalAndNetwork=1]="LocalAndNetwork",e[e.NetworkOnly=2]="NetworkOnly"}(n||(t.InterfaceType=n={}))},94104:function(e,t,n){"use strict";t.__esModule=!0,t.calculateWindowHeight=t.getIsLocalAccess=t.getIsAccessPanelVisible=t.getHasPermission=t.formatWatts=void 0;var o=n(73020);t.formatWatts=function(e){return(isNaN(e)?0:Math.floor(e))+" W"};t.getHasPermission=function(e){var t=e.is_ai,n=e.is_silicon,o=e.can_access_remotely,r=e.aidisabled,a=e.locked;return t||n||o?!r:!a};t.getIsAccessPanelVisible=function(e){var t=e.is_ai;return!!e.wiresexposed&&!t};var r=[o.InterfaceType.LocalOnly,o.InterfaceType.LocalAndNetwork];t.getIsLocalAccess=function(e){var t=e.can_access_remotely,n=e.setup_networkapc;return r.includes(n)&&!t};t.calculateWindowHeight=function(e,t,n,o,r,a){var i=function(e,t){return 6+(e?t?181:132:62)}(e,a);return 32+i+(n?136:0)+(t?42:0)+(o?42:0)+(r?254:0)+12}},52403:function(e,t,n){"use strict";t.__esModule=!0,t.ArtifactPaper=void 0;var o=n(96323),r=n(31246),a=n(26949),i=n(2381);t.ArtifactPaper=function(e,t){var n=(0,r.useBackend)(t),c=n.act,l=n.data,u=l.artifactName,d=l.artifactOrigin,s=l.artifactType,p=l.artifactTriggers,m=l.artifactFaults,f=l.artifactDetails,h=l.allArtifactOrigins,g=l.allArtifactTypes,C=l.allArtifactTriggers,N=l.hasPen;return(0,o.createComponentVNode)(2,i.Window,{title:"Nanotrasen Alien Artifact Analysis Form",theme:"paper",width:800,height:835,children:(0,o.createComponentVNode)(2,i.Window.Content,{children:(0,o.createComponentVNode)(2,a.Section,{children:[(0,o.createVNode)(1,"h3",null,"Artifact Name",16),(0,o.createVNode)(1,"h4",null,""===u?"unknown":u,0),(0,o.createVNode)(1,"h3",null,"Artifact Origin",16),(0,o.createComponentVNode)(2,a.Flex,{direction:"column",wrap:"wrap",height:3,children:h.map((function(e){return(0,o.createComponentVNode)(2,a.Flex.Item,{onClick:function(t,n){return c("origin",{newOrigin:e,hasPen:N})},children:[(0,o.createComponentVNode)(2,a.Button.Checkbox,{checked:d===e}),(0,o.createVNode)(1,"a",null,e,0)]},e.id)}))}),(0,o.createVNode)(1,"h3",null,"Artifact Type",16),(0,o.createComponentVNode)(2,a.Flex,{direction:"column",wrap:"wrap",height:25,justify:"space-evenly",children:g.map((function(e){return(0,o.createComponentVNode)(2,a.Flex.Item,{className:"artifactType"+e[1],onClick:function(t,n){return c("type",{newType:e[0],hasPen:N})},children:[(0,o.createComponentVNode)(2,a.Button.Checkbox,{checked:s===e[0]}),(0,o.createVNode)(1,"a",null,e[0],0)]},e[0].id)}))}),(0,o.createVNode)(1,"h3",null,"Artifact Triggers (If Applicable)",16),(0,o.createComponentVNode)(2,a.Flex,{direction:"column",wrap:"wrap",height:5,children:C.map((function(e){return(0,o.createComponentVNode)(2,a.Flex.Item,{onClick:function(t,n){return c("trigger",{newTriggers:e,hasPen:N})},children:[(0,o.createComponentVNode)(2,a.Button.Checkbox,{checked:p===e}),(0,o.createVNode)(1,"a",null,e,0)]},e.id)}))}),(0,o.createVNode)(1,"h3",null,"Artifact Faults",16),(0,o.createComponentVNode)(2,a.TextArea,{value:m,fluid:!0,height:5,onChange:function(e,t){return c("fault",{newFaults:t,hasPen:N})}}),(0,o.createVNode)(1,"h3",null,"Additional Information",16),(0,o.createComponentVNode)(2,a.TextArea,{value:f,fluid:!0,height:10,onChange:function(e,t){return c("detail",{newDetail:t,hasPen:N})}})]})})})}},7171:function(e,t,n){"use strict";t.__esModule=!0,t.Atm=void 0;var o=n(96323),r=n(31246),a=n(26949),i=n(2381),c=n(3382),l=["type"];var u=2,d="danger",s="info",p="success",m=function(e){var t=e.type,n=function(e,t){if(null==e)return{};var n,o,r={},a=Object.keys(e);for(o=0;o<a.length;o++)n=a[o],t.indexOf(n)>=0||(r[n]=e[n]);return r}(e,l),r=Object.assign({},t===d?{danger:!0}:{},t===s?{info:!0}:{},t===p?{success:!0}:{});return(0,o.createComponentVNode)(2,a.Box,{children:[(0,o.createComponentVNode)(2,a.Divider),(0,o.normalizeProps)((0,o.createComponentVNode)(2,a.NoticeBox,Object.assign({},r,n)))]})};t.Atm=function(e,t){var n=(0,r.useBackend)(t).data.name,l=(0,r.useLocalState)(t,"tabIndex",c.AtmTabKeys.Teller),u=l[0],d=l[1];return(0,o.createComponentVNode)(2,i.Window,{title:n,width:375,height:420,children:(0,o.createComponentVNode)(2,i.Window.Content,{children:(0,o.createComponentVNode)(2,a.Stack,{vertical:!0,fill:!0,children:[(0,o.createComponentVNode)(2,a.Stack.Item,{children:(0,o.createComponentVNode)(2,a.Tabs,{fluid:!0,children:[(0,o.createComponentVNode)(2,a.Tabs.Tab,{icon:"money-bills",selected:u===c.AtmTabKeys.Teller,onClick:function(){return d(c.AtmTabKeys.Teller)},children:"ATM"}),(0,o.createComponentVNode)(2,a.Tabs.Tab,{icon:"coins",selected:u===c.AtmTabKeys.Spacebux,onClick:function(){return d(c.AtmTabKeys.Spacebux)},children:"Spacebux"})]})}),(0,o.createComponentVNode)(2,a.Stack.Item,{children:[u===c.AtmTabKeys.Teller&&(0,o.createComponentVNode)(2,f),u===c.AtmTabKeys.Spacebux&&(0,o.createComponentVNode)(2,h)]})]})})})};var f=function(e,t){var n=(0,r.useBackend)(t),i=n.act,c=n.data,l=c.accountBalance,d=c.accountName,s=c.loggedIn,p=c.scannedCard,f=c.message||{text:"",status:"",position:""};return(0,o.createComponentVNode)(2,a.Stack,{vertical:!0,fill:!0,children:[(0,o.createComponentVNode)(2,a.Stack.Item,{children:(0,o.createComponentVNode)(2,a.Section,{title:"Automatic Teller Machine",children:(0,o.createComponentVNode)(2,a.Stack,{vertical:!0,fill:!0,children:[(0,o.createComponentVNode)(2,a.Stack.Item,{children:[!p&&(0,o.createComponentVNode)(2,a.NoticeBox,{info:!0,children:"Please swipe card and enter PIN to access your account."}),(0,o.createComponentVNode)(2,a.Button,{icon:"id-card",content:p||"Swipe ID",onClick:p?function(){return i("logout")}:function(){return i("insert_card")}}),f.text&&"splash"===f.position&&(0,o.createComponentVNode)(2,m,{type:f.status,children:f.text})]}),s===u?(0,o.createFragment)([(0,o.createComponentVNode)(2,a.Divider),(0,o.createComponentVNode)(2,a.Stack.Item,{children:(0,o.createComponentVNode)(2,a.Stack,{vertical:!0,fill:!0,children:[(0,o.createComponentVNode)(2,a.Stack.Item,{children:["Welcome, ",(0,o.createVNode)(1,"strong",null,[d,(0,o.createTextVNode)(".")],0)]}),(0,o.createComponentVNode)(2,a.Stack.Item,{children:["Your account balance is ",(0,o.createVNode)(1,"strong",null,[l,(0,o.createTextVNode)("\u2abd.")],0)]}),(0,o.createComponentVNode)(2,a.Stack.Item,{children:[(0,o.createComponentVNode)(2,a.Divider),(0,o.createComponentVNode)(2,a.Button,{icon:"money-bill",content:"Withdraw cash",onClick:function(){return i("withdraw_cash")}}),f.text&&"atm"===f.position&&(0,o.createComponentVNode)(2,m,{type:f.status,children:f.text})]})]})})],4):p&&(0,o.createComponentVNode)(2,a.Stack.Item,{children:[(0,o.createComponentVNode)(2,a.Button,{icon:"sign-out-alt",content:"Enter PIN",onClick:function(){return i("login_attempt")}}),f.text&&"login"===f.position&&(0,o.createComponentVNode)(2,m,{type:f.status,children:f.text})]})]})})}),(0,o.createComponentVNode)(2,a.Stack.Item,{children:s===u&&(0,o.createComponentVNode)(2,a.Section,{title:"Lottery",children:[(0,o.createComponentVNode)(2,a.NoticeBox,{info:!0,children:"To claim your winnings, you must insert your lottery ticket."}),(0,o.createComponentVNode)(2,a.Divider),(0,o.createComponentVNode)(2,a.Button,{icon:"ticket-alt",content:"Purchase Lottery Ticket (100\u2abd)",onClick:function(){return i("buy")}}),f.text&&"lottery"===f.position&&(0,o.createComponentVNode)(2,m,{type:f.status,children:f.text})]})})]})},h=function(e,t){var n=(0,r.useBackend)(t),i=n.act,c=n.data,l=c.clientKey,u=c.spacebuxBalance;return(0,o.createComponentVNode)(2,a.Section,{title:l+"'s Spacebux Menu",children:(0,o.createComponentVNode)(2,a.Stack,{vertical:!0,fill:!0,children:[(0,o.createComponentVNode)(2,a.Stack.Item,{children:[(0,o.createComponentVNode)(2,a.NoticeBox,{info:!0,children:"This menu is only visible to you. Deposit Spacebux into your account by inserting a token."}),(0,o.createComponentVNode)(2,a.Divider)]}),(0,o.createComponentVNode)(2,a.Stack.Item,{children:["Your Spacebux balance is currently"," ",(0,o.createVNode)(1,"strong",null,[u,(0,o.createTextVNode)(" "),(0,o.createComponentVNode)(2,a.Icon,{name:"fa-solid fa-coins"})],0)]}),(0,o.createComponentVNode)(2,a.Stack.Item,{children:[(0,o.createComponentVNode)(2,a.Divider),(0,o.createComponentVNode)(2,a.Button,{icon:"coins",content:"Withdraw Spacebux",onClick:function(){return i("withdraw_spacebux")}})]}),(0,o.createComponentVNode)(2,a.Stack.Item,{children:(0,o.createComponentVNode)(2,a.Button,{icon:"envelope",content:"Securely send Spacebux",onClick:function(){return i("transfer_spacebux")}})})]})})}},3382:function(e,t){"use strict";var n;t.__esModule=!0,t.AtmTabKeys=void 0,t.AtmTabKeys=n,function(e){e[e.Teller=0]="Teller",e[e.Spacebux=1]="Spacebux"}(n||(t.AtmTabKeys=n={}))},46837:function(e,t,n){"use strict";t.__esModule=!0,t.AutoInjector=void 0;var o=n(96323),r=n(31246),a=n(26949),i=n(2381),c=n(51418);t.AutoInjector=function(e,t){var n=(0,r.useBackend)(t),l=n.act,u=n.data,d=u.injectionAmount,s=u.reagentData,p=u.minimumTime,m=u.condition,f=u.conditionTreshold,h=u.conditionDamage,g=u.conditions;return(0,o.createComponentVNode)(2,i.Window,{width:360,height:520,theme:"neutral",children:(0,o.createComponentVNode)(2,i.Window.Content,{children:[(0,o.createComponentVNode)(2,a.Section,{title:"Contents",buttons:(0,o.createComponentVNode)(2,a.Button,{title:"Eject",icon:"eject",disabled:!s,onClick:function(){return l("remove_cont")},children:"Eject"}),children:s?(0,o.createFragment)([(0,o.createComponentVNode)(2,c.ReagentGraph,{container:s}),(0,o.createComponentVNode)(2,c.ReagentList,{container:s})],4):"Please attach a beaker"}),(0,o.createComponentVNode)(2,a.Section,{title:"Condition",children:[(0,o.createComponentVNode)(2,a.Dropdown,{options:g,selected:m?m.name:"None",onSelected:function(e){return l("sel_cond",{condition:e})},noscroll:!0,width:"130px"}),f?(0,o.createFragment)([h?(0,o.createComponentVNode)(2,a.Dropdown,{options:["brute","burn","toxin","oxygen"],selected:h.damagetype,onSelected:function(e){return l("sel_damage_type",{damagetype:e})},noscroll:!0,width:"75px",mt:"0.5rem"}):null,(0,o.createComponentVNode)(2,a.Slider,{value:f.currentValue,format:function(e){return e+f.suffix},minValue:f.minValue,maxValue:f.maxValue,step:1,onChange:function(e,t){return l("changeConditionValue",{conditionValue:t})},mt:"0.5rem"})],0):null,m?(0,o.createComponentVNode)(2,a.Box,{mt:"0.5rem",children:m.desc}):null]}),s?(0,o.createComponentVNode)(2,a.Section,{title:"Injection Amount",children:(0,o.createComponentVNode)(2,a.Slider,{value:d,format:function(e){return e+"u"},minValue:1,maxValue:s.maxVolume,step:1,onChange:function(e,t){return l("changeAmount",{amount:t})}})}):null,(0,o.createComponentVNode)(2,a.Section,{title:"Min. time between activations",children:(0,o.createComponentVNode)(2,a.Slider,{value:p,format:function(e){return e+" seconds"},minValue:3,maxValue:300,step:1,onChange:function(e,t){return l("changeMintime",{mintime:t})}})})]})})}},36443:function(e,t,n){"use strict";t.__esModule=!0,t.BarberingMenu=void 0;var o=n(96323),r=n(31246),a=n(26949),i=n(2381),c="200px";t.BarberingMenu=function(e,t){var n=(0,r.useBackend)(t).data,l=(0,r.useLocalState)(t,"searchText",""),d=l[0],s=l[1],p=n.available_styles,m=Object.keys(p);return(0,o.createComponentVNode)(2,i.Window,{width:700,height:500,title:"Barber",children:(0,o.createComponentVNode)(2,i.Window.Content,{scrollable:!0,m:0,children:(0,o.createComponentVNode)(2,a.Stack,{children:[(0,o.createComponentVNode)(2,a.Stack.Item,{width:c,children:(0,o.createComponentVNode)(2,a.Box,{position:"fixed",width:c,children:(0,o.createComponentVNode)(2,f,{onSearchTextInput:s})})}),(0,o.createComponentVNode)(2,a.Stack.Item,{grow:!0,children:(0,o.createComponentVNode)(2,u,{searchText:d,allHairNames:m,allHairStyles:p})})]})})})};var l=function(e){var t=e.onInput;return(0,o.createComponentVNode)(2,a.Stack,{children:[(0,o.createComponentVNode)(2,a.Stack.Item,{children:(0,o.createComponentVNode)(2,a.Icon,{name:"magnifying-glass"})}),(0,o.createComponentVNode)(2,a.Stack.Item,{grow:!0,children:(0,o.createComponentVNode)(2,a.Input,{style:{width:"100%"},onInput:function(e,n){return t(n)},placeholder:"Search..."})})]})},u=function(e){var t=e.searchText,n=e.allHairNames,r=e.allHairStyles,i=t.toLowerCase(),c=n.filter((function(e){return e.toLowerCase().includes(i)}));return(0,o.createComponentVNode)(2,a.Stack,{wrap:!0,children:c.map((function(e){return(0,o.createComponentVNode)(2,a.Stack.Item,{m:1,children:(0,o.createComponentVNode)(2,p,{hairStyle:r[e],hairName:e})},r[e].id)}))})},d=function(e,t){var n=(0,r.useBackend)(t).act;return(0,o.createComponentVNode)(2,a.Button,{fluid:!0,icon:"cut",color:"red",bold:!0,onClick:function(){return n("do_hair",{style_id:null})},children:"Create Wig"})},s=function(e,t){var n=(0,r.useBackend)(t).act;return(0,o.createComponentVNode)(2,a.Button,{fluid:!0,icon:"rotate-left",color:"red",onClick:function(){return n("update_preview",{action:"reset"})},children:"Reset"})},p=function(e,t){var n=(0,r.useBackend)(t).act,i=e.hairStyle,c=e.hairName;return(0,o.createComponentVNode)(2,a.Section,{width:"140px",align:"center",children:(0,o.createComponentVNode)(2,a.Stack,{vertical:!0,children:[(0,o.createComponentVNode)(2,a.Stack.Item,{children:(0,o.createComponentVNode)(2,a.Image,{pixelated:!0,width:"60px",height:"100px",src:""+i.hair_icon})}),(0,o.createComponentVNode)(2,a.Stack.Item,{children:c}),(0,o.createComponentVNode)(2,a.Stack.Item,{children:[(0,o.createComponentVNode)(2,a.Button,{color:"blue",icon:"cut",onClick:function(){return n("do_hair",{style_id:i.hair_id})},children:"Cut"}),(0,o.createComponentVNode)(2,a.Button,{color:"blue",icon:"eye",onClick:function(){return n("update_preview",{action:"new_hair",style_id:i.hair_id})},children:"Preview"})]})]})})},m=function(e,t){var n=(0,r.useBackend)(t).act;return(0,o.createComponentVNode)(2,a.Stack,{justify:"space-around",children:[(0,o.createComponentVNode)(2,a.Stack.Item,{align:"center",children:(0,o.createComponentVNode)(2,a.Button,{icon:"rotate-left",onClick:function(){return n("update_preview",{action:"change_direction",direction:-90})}})}),(0,o.createComponentVNode)(2,a.Stack.Item,{align:"center",children:(0,o.createComponentVNode)(2,a.Button,{icon:"rotate-right",onClick:function(){return n("update_preview",{action:"change_direction",direction:90})}})})]})},f=function(e,t){var n=(0,r.useBackend)(t).data.preview,i=e.onSearchTextInput;return(0,o.createComponentVNode)(2,a.Section,{children:(0,o.createComponentVNode)(2,a.Stack,{vertical:!0,children:[(0,o.createComponentVNode)(2,a.Stack.Item,{children:(0,o.createComponentVNode)(2,l,{onInput:i})}),(0,o.createComponentVNode)(2,a.Stack.Divider),(0,o.createComponentVNode)(2,a.Stack.Item,{children:(0,o.createComponentVNode)(2,g)}),(0,o.createComponentVNode)(2,a.Stack.Divider,{mt:0}),(0,o.createComponentVNode)(2,a.Stack.Item,{align:"center",style:{width:"100%"},children:[(0,o.createComponentVNode)(2,a.Box,{style:{width:"100%"},align:"center",children:(0,o.createComponentVNode)(2,a.ByondUi,{params:{id:n,type:"map"},style:{width:"80px",height:"160px"}})}),(0,o.createComponentVNode)(2,s)]}),(0,o.createComponentVNode)(2,a.Stack.Divider),(0,o.createComponentVNode)(2,a.Stack.Item,{children:(0,o.createComponentVNode)(2,m)}),(0,o.createComponentVNode)(2,a.Stack.Divider),(0,o.createComponentVNode)(2,a.Stack.Item,{children:(0,o.createComponentVNode)(2,d)})]})})},h=function(e,t){var n=e.children,i=e.hairPortion,c=e.icon,l=(0,r.useBackend)(t),u=l.act,d=l.data,s=d.current_hair_style,p=d.selected_hair_portion,m=(0,o.createComponentVNode)(2,a.Box,{align:"right",children:s[i]});return(0,o.createComponentVNode)(2,a.Tabs.Tab,{icon:c,rightSlot:m,selected:p===i,onClick:function(){return u("change_hair_portion",{new_portion:i})},children:n})},g=function(){return(0,o.createComponentVNode)(2,a.Tabs,{vertical:!0,mb:0,children:[(0,o.createComponentVNode)(2,h,{hairPortion:"top",icon:"arrows-up-to-line",children:"Top"}),(0,o.createComponentVNode)(2,h,{hairPortion:"middle",icon:"arrow-down-up-across-line",children:"Middle"}),(0,o.createComponentVNode)(2,h,{hairPortion:"bottom",icon:"arrows-down-to-line",children:"Bottom"})]})}},8844:function(e,t,n){"use strict";t.__esModule=!0,t.BarcodeComputer=void 0;var o=n(96323),r=n(31246),a=n(26949),i=n(2381),c=function(e,t){var n=e.title,r=e.destinations,i=e.act,c=e.amount;return(0,o.createComponentVNode)(2,a.Section,{title:n,children:r.map((function(e){var t=e.crate_tag,n=e.name;return(0,o.createComponentVNode)(2,a.Button,{width:"100%",align:"center",content:n||t,onClick:function(){return i("print",{crate_tag:t,amount:c})}},t)}))})},l=function(e,t){if(e.card){var n=e.card,r=e.act;return(0,o.createComponentVNode)(2,a.Button,{icon:"eject",content:n.name+" ("+n.role+")",tooltip:"Clear scanned card",tooltipPosition:"bottom-end",onClick:function(){r("reset_id")}})}};t.BarcodeComputer=function(e,t){var n=(0,r.useBackend)(t),u=n.act,d=n.data,s=d.sections,p=d.card,m=(0,r.useLocalState)(t,"amount",1),f=m[0],h=m[1];return(0,o.createComponentVNode)(2,i.Window,{title:"Barcode computer",width:600,height:450,children:(0,o.createComponentVNode)(2,i.Window.Content,{scrollable:!0,children:[(0,o.createComponentVNode)(2,a.Stack,{children:[(0,o.createComponentVNode)(2,a.Stack.Item,{grow:1,children:(0,o.createComponentVNode)(2,a.Section,{title:"Amount to print",fill:!0,children:(0,o.createComponentVNode)(2,a.Box,{align:"center",children:(0,o.createComponentVNode)(2,a.NumberInput,{value:f,minValue:1,maxValue:5,stepPixelSize:15,unit:"Barcodes",onDrag:function(e,t){return h(t)}})})})}),(0,o.createComponentVNode)(2,a.Stack.Item,{grow:1,children:(0,o.createComponentVNode)(2,a.Section,{title:"Scanned ID card",fill:!0,children:(0,o.createComponentVNode)(2,a.Box,{align:"center",children:[(0,o.createComponentVNode)(2,l,{card:p,act:u}),(0,o.createVNode)(1,"br"),p?"Account balance: "+p.balance+"\u2abd":null]})})})]}),(0,o.createVNode)(1,"br"),(0,o.createComponentVNode)(2,a.Stack,{children:s.map((function(e){var t=e.title,n=e.destinations;return(0,o.createComponentVNode)(2,a.Stack.Item,{width:"33%",children:(0,o.createComponentVNode)(2,c,{title:t,destinations:n,act:u,amount:f})},t)}))})]})})}},45027:function(e,t,n){"use strict";t.__esModule=!0,t.BioEffectManager=void 0;var o=n(96323),r=n(31246),a=n(26949),i=n(2381),c=function(e){var t=e.checked,n=e.onClick,r=e.id;return(0,o.createComponentVNode)(2,a.Table.Cell,{py:"0.5em",collapsing:!0,children:(0,o.createComponentVNode)(2,a.Box,{align:"center",children:(0,o.createComponentVNode)(2,a.Button.Checkbox,{checked:t,width:"5em",onClick:function(){return n(r)}})})})},l=function(e){var t=e.number,n=e.unit,r=e.onChange,i=e.id;return(0,o.createComponentVNode)(2,a.Table.Cell,{py:"0.5em",collapsing:!0,children:(0,o.createComponentVNode)(2,a.Box,{align:"center",children:(0,o.createComponentVNode)(2,a.NumberInput,{minValue:0,unit:n,width:"5em",value:t,onChange:function(e,t){return r(i,t)}})})})},u=function(e){var t=e.children;return(0,o.createComponentVNode)(2,a.Table.Cell,{py:"0.5em",textAlign:"center",children:t})},d=function(){return(0,o.createComponentVNode)(2,a.Table.Row,{bold:!0,children:[(0,o.createComponentVNode)(2,u,{children:"Name"}),(0,o.createComponentVNode)(2,u,{children:"ID"}),(0,o.createComponentVNode)(2,u,{children:"Stable"}),(0,o.createComponentVNode)(2,u,{children:"Reinforced"}),(0,o.createComponentVNode)(2,u,{children:"Boosted"}),(0,o.createComponentVNode)(2,u,{children:"Synced"}),(0,o.createComponentVNode)(2,u,{children:"Cooldown"}),(0,o.createComponentVNode)(2,u,{children:"Actions"})]})};t.BioEffectManager=function(e,t){var n=(0,r.useBackend)(t),u=n.act,s=n.data,p=s.bioEffects,m=s.stability,f=s.target_name,h=function(e,t){return u("updateCooldown",{id:e,value:t})},g=function(e){return u("toggleBoosted",{id:e})},C=function(e){return u("toggleReinforced",{id:e})},N=function(e){return u("toggleStabilized",{id:e})},v=function(e){return u("toggleSynced",{id:e})};return(0,o.createComponentVNode)(2,i.Window,{title:"Bioeffect Manager",width:"750",height:"300",children:(0,o.createComponentVNode)(2,i.Window.Content,{children:(0,o.createComponentVNode)(2,a.Section,{title:"Bioeffects of "+f,scrollable:!0,fill:!0,buttons:(0,o.createFragment)([(0,o.createTextVNode)("Stability:"),(0,o.createComponentVNode)(2,a.NumberInput,{minValue:0,width:"5em",placeholder:100,value:m,onChange:function(e,t){return function(e){return u("updateStability",{value:e})}(t)}}),(0,o.createComponentVNode)(2,a.Button,{icon:"plus",onClick:function(){return u("addBioEffect")},children:"Add Bioeffect"})],0),children:(0,o.createComponentVNode)(2,a.Table,{children:[(0,o.createComponentVNode)(2,d),(null==p?void 0:p.length)>0?p.map((function(e){return(0,o.createComponentVNode)(2,a.Table.Row,{children:[(0,o.createComponentVNode)(2,a.Table.Cell,{py:"0.5em",children:e.name}),(0,o.createComponentVNode)(2,a.Table.Cell,{py:"0.5em",collapsing:!0,children:e.id}),(0,o.createComponentVNode)(2,c,{checked:e.stabilized,onClick:N,id:e.id}),(0,o.createComponentVNode)(2,c,{checked:e.reinforced,onClick:C,id:e.id}),(0,o.createComponentVNode)(2,c,{checked:e.boosted,onClick:g,id:e.id}),(0,o.createComponentVNode)(2,c,{checked:e.synced,onClick:v,id:e.id}),(0,o.createComponentVNode)(2,l,{number:e.cooldown,unit:"ds",onChange:h,id:e.id}),(0,o.createComponentVNode)(2,a.Table.Cell,{py:"0.5em",collapsing:!0,children:(0,o.createComponentVNode)(2,a.Box,{direction:"row",align:"center",nowrap:!0,children:[(0,o.createComponentVNode)(2,a.Button,{tooltip:"View Variables",tooltipPosition:"top",align:"left",icon:"gear",onClick:function(){return t=e.id,u("manageBioEffect",{id:t});var t}}),(0,o.createComponentVNode)(2,a.Button.Confirm,{tooltip:"Remove",tooltipPosition:"top",align:"left",icon:"trash",color:"bad",onClick:function(){return t=e.id,u("deleteBioEffect",{id:t});var t}})]})})]},e.id)})):null]})})})})}},34116:function(e,t,n){"use strict";t.__esModule=!0,t["default"]=void 0;var o=n(96323),r=n(31246),a=n(65844),i=function(){return(0,o.createVNode)(32,"defs",null,(0,o.createVNode)(32,"marker",null,(0,o.createVNode)(32,"path",null,null,1,{d:"M0,0 L0,6 L9,3 z",fill:"orange",stroke:"none"}),2,{id:"arrow",markerWidth:"10",markerHeight:"10",refX:"0",refY:"3",orient:"auto",markerUnits:"strokeWidth"}),2)},c=function(e,t){var n=(0,r.useBackend)(t).data,c=(0,a.useStates)(t),l=c.mouseCoords,u=c.tileSize,d=c.isFlipped,s=n.boardInfo,p=s.width,m=s.height,f=n.currentUser;if(!f||!f.selected)return null;var h=n.pieces[f.selected];if(!h)return null;var g=h.x*u.width+u.width/2,C=h.y*u.height+u.height/2,N=l.x-20,v=l.y-54,b=Math.floor(N/u.width)*u.width,V=Math.floor(v/u.height)*u.height,y=b+u.width/2,x=V+u.height/2,I=y-g,k=x-C,w=Math.sqrt(I*I+k*k),S=w>u.width/2&&w>u.height/2,_=y-40*(I/w),M=x-40*(k/w);return(0,o.createVNode)(32,"svg","boardgame__board-ggrenderer",[(0,o.createVNode)(32,"rect",null,null,1,{x:b,y:V,width:u.width,height:u.height,fill:"red","fill-opacity":"0.4"}),(0,o.createVNode)(32,"rect",null,null,1,{x:d?p*u.width-g-u.width/2:g-u.width/2,y:d?m*u.height-C-u.height/2:C-u.height/2,width:u.width,height:u.height,fill:S?"red":"none","fill-opacity":"0.4"}),S&&(0,o.createComponentVNode)(2,i),S&&(0,o.createVNode)(32,"line",null,null,1,{x1:g,y1:C,x2:_,y2:M,stroke:"orange",fill:"none","stroke-width":"3","marker-end":"url(#arrow)"})],0,{width:"100%",height:"100%"})};t["default"]=c},9149:function(e,t,n){"use strict";t.__esModule=!0,t["default"]=void 0;var o=n(96323),r=n(31246),a=n(86489),i=n(65844),c=n(26949),l=function(e,t){var n=e.pieces,l=(0,r.useBackend)(t),u=l.act,d=l.data,s=d.currentUser,p=d.users,m=(0,i.useStates)(t),f=m.isFlipped,h=m.tileSize,g=(0,i.useActions)(u),C=g.pieceSelect,N=g.pieceRemove,v=g.piecePlace,b=d.boardInfo,V=b.width,y=b.height,x=(0,a.codeRecordFromPieces)((0,a.fetchPieces)());return(0,o.createComponentVNode)(2,c.Box,{className:"boardgame__board-gprenderer",children:Object.keys(n).map((function(e,t){var r,a=n[e],i=a.x,c=a.y,l=(a.prevX,a.prevY,a.code),u=a.selected,d=x[l],m=u&&s!==u,g=i*h.width,b=c*h.height;f&&(g=(V-i-1)*h.width,b=(y-c-1)*h.height);var I=(null==(r=p[u])?void 0:r.name)||"";return(0,o.createVNode)(1,"div","boardgame__board-gprenderer-piece",[(0,o.createVNode)(1,"img",null,null,1,{style:{width:h.width+"px",height:h.width+"px"},src:d.image}),u&&(0,o.createVNode)(1,"span",null,I,0)],0,{onmousedown:function(t){0!==t.button||u||(s.palette&&v(s.ckey,i,c),s.selected&&!m&&v(s.ckey,i,c),s.selected||C(s.ckey,e)),2===t.button&&(u||N(e))},onmouseup:function(e){s.palette&&v(s.ckey,i,c),s.selected&&!m&&v(s.ckey,i,c)},style:{left:g+"px",top:b+"px",width:h.width+"px",height:h.height+"px"}},t)}))})};t["default"]=l},83702:function(e,t){"use strict";t.__esModule=!0,t.screenToBoard=void 0;t.screenToBoard=function(e,t,n){return[e/n.width,t/n.height]}},66508:function(e,t,n){"use strict";t.__esModule=!0,t.Board=void 0;var o,r=n(96323),a=n(29678),i=n(26949),c=n(31246),l=n(65844),u=(o=n(45208))&&o.__esModule?o:{"default":o};t.Board=function(e,t){var n=(0,c.useBackend)(t),o=n.act,u=n.data,s=(0,l.useActions)(o).pieceDeselect;return(0,r.createComponentVNode)(2,i.Flex,{className:"boardgame__wrapper",children:(0,r.createComponentVNode)(2,i.Box,{className:"boardgame__board-inner",children:[(0,r.createComponentVNode)(2,a.HorizontalNotations),(0,r.createComponentVNode)(2,i.Flex,{className:"boardgame__board",children:[(0,r.createComponentVNode)(2,a.VerticalNotations),(0,r.createComponentVNode)(2,i.Flex.Item,{grow:!0,onmouseleave:function(){var e;null!=(e=u.currentUser)&&e.selected&&s(u.currentUser.ckey)},children:(0,r.createComponentVNode)(2,d)}),(0,r.createComponentVNode)(2,a.VerticalNotations)]}),(0,r.createComponentVNode)(2,a.HorizontalNotations)]})})};var d=function(e,t){var n=(0,c.useBackend)(t).data.boardInfo.boardstyle;return"checkerboard"===n?(0,r.createComponentVNode)(2,u["default"],{interactable:!0}):(0,r.createVNode)(1,"div",null,[(0,r.createTextVNode)("Unknown design: "),n],0)}},84894:function(e,t,n){"use strict";t.__esModule=!0,t["default"]=void 0;var o=n(96323),r=n(31246),a=function(e,t){var n=(0,r.useBackend)(t).data,a=n.styling,i=a.tileColor1,c=a.tileColor2,l=100/n.boardInfo.width,u=100/n.boardInfo.height;return(0,o.createVNode)(32,"svg",null,[(0,o.createVNode)(32,"pattern",null,[(0,o.createVNode)(32,"rect",null,null,1,{width:l+"%",height:u+"%",fill:i}),(0,o.createVNode)(32,"rect",null,null,1,{x:l+"%",y:u+"%",width:l+"%",height:u+"%",fill:i}),(0,o.createVNode)(32,"rect",null,null,1,{x:l+"%",width:l+"%",height:u+"%",fill:c}),(0,o.createVNode)(32,"rect",null,null,1,{y:u+"%",width:l+"%",height:u+"%",fill:c})],4,{id:"checkerboardpattern",x:"0",y:"0",width:2*l+"%",height:2*u+"%",patternUnits:"userSpaceOnUse"}),(0,o.createVNode)(32,"rect",null,null,1,{width:"100%",height:"100%",fill:"url(#checkerboardpattern)"})],4,{width:"100%",height:"100%"})};t["default"]=a},45208:function(e,t,n){"use strict";t.__esModule=!0,t["default"]=t.CheckerBoard=void 0;var o=n(96323),r=n(31246),a=n(65844),i=u(n(34116)),c=u(n(9149)),l=u(n(84894));function u(e){return e&&e.__esModule?e:{"default":e}}var d=function(e,t){var n=(0,r.useBackend)(t),u=n.act,d=n.data,s=d.pieces,p=d.currentUser,m=d.styling.tileColor2,f=(0,a.useStates)(t),h=f.tileSize,g=f.isFlipped,C=f.mouseCoords,N=h.width,v=h.height,b=(0,a.useActions)(u).piecePlace,V=(0,o.createRef)(),y=function(){var e=C.x,t=C.y;if(!V)return[-1,-1];var n=V.current.getBoundingClientRect(),o=e-n.left,r=t-n.top,a=Math.floor(o/N),i=Math.floor(r/v);return g&&(a=d.boardInfo.width-a-1,i=d.boardInfo.height-i-1),[a,i]};return(0,o.createVNode)(1,"div","boardgame__board-checkerboard",[(0,o.createComponentVNode)(2,l["default"]),(0,o.createComponentVNode)(2,i["default"]),(0,o.createComponentVNode)(2,c["default"],{pieces:s})],4,{style:{"background-color":m},onMouseDown:function(e){if(0===e.button&&(p.palette||p.selected)){var t=y(),n=t[0],o=t[1];b(p.ckey,n,o)}},onMouseUp:function(e){if(0===e.button){var t=y(),n=t[0],o=t[1];if(p.palette)return void b(p.ckey,n,o);if(p.selected){var r=s[p.selected];r.x===n&&r.y===o||b(p.ckey,n,o)}}}},null,V)};t.CheckerBoard=d;var s=d;t["default"]=s},51891:function(){},25540:function(e,t,n){"use strict";t.__esModule=!0,t.BoardgameContents=void 0;var o=n(96323),r=n(66508),a=n(2381),i=n(29678),c=n(65844);t.BoardgameContents=function(e,t){var n=(0,c.useStates)(t).mouseCoordsSet;return(0,o.createComponentVNode)(2,a.Window.Content,{onMouseMove:function(e){n({x:e.clientX,y:e.clientY})},fitted:!0,className:"boardgame__window",children:[(0,o.createComponentVNode)(2,r.Board),(0,o.createComponentVNode)(2,i.Palettes)]})}},75022:function(e,t,n){"use strict";t.__esModule=!0,t.ButtonConfirm=void 0;var o=n(96323),r=n(26949),a=["icon","color","onConfirm","tooltipContent","confirmText"];function i(e,t){return i=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e},i(e,t)}var c=function(e){var t,n;function c(){for(var t,n=arguments.length,o=new Array(n),r=0;r<n;r++)o[r]=arguments[r];return(t=e.call.apply(e,[this].concat(o))||this).state={confirmState:!1},t.setConfirmState=function(e){t.setState({confirmState:e})},t}return n=e,(t=c).prototype=Object.create(n.prototype),t.prototype.constructor=t,i(t,n),c.prototype.render=function(){var e=this,t=this.props,n=t.icon,i=t.color,c=t.onConfirm,l=t.tooltipContent,u=t.confirmText,d=void 0===u?"Confirm":u,s=function(e,t){if(null==e)return{};var n,o,r={},a=Object.keys(e);for(o=0;o<a.length;o++)n=a[o],t.indexOf(n)>=0||(r[n]=e[n]);return r}(t,a);return(0,o.normalizeProps)((0,o.createComponentVNode)(2,r.Button,Object.assign({icon:n,color:this.state.confirmState?"orange":i,tooltip:this.state.confirmState?d:l,onMouseOut:function(){return e.setConfirmState(!1)},onClick:function(){e.state.confirmState?(c(),e.setConfirmState(!1)):e.setConfirmState(!0)}},s)))},c}(o.Component);t.ButtonConfirm=c},68035:function(e,t,n){"use strict";t.__esModule=!0,t.HeldPieceRenderer=void 0;var o=n(96323),r=n(26949),a=n(31246),i=n(65844),c=n(86489);t.HeldPieceRenderer=function(e,t){var n=(0,a.useBackend)(t),l=(n.act,n.data);if(!l.currentUser)return null;var u=(0,i.useStates)(t).mouseCoords,d=u.x,s=u.y,p=l.currentUser.palette||l.currentUser.selected;if(!p)return null;var m=(0,c.fetchPieces)(),f=(0,c.codeRecordFromPieces)(m)[p];return f?(0,o.createComponentVNode)(2,r.Box,{className:"boardgame__heldpiece",style:{top:s+"px",left:d+"px",width:"120px",height:"120px"},children:[(0,o.createComponentVNode)(2,r.Box,{className:"boardgame__heldpiece-inner",children:(0,o.createVNode)(1,"img",null,null,1,{src:f.image})}),(0,o.createComponentVNode)(2,r.Box,{style:{"font-size":"12px","font-weight":"bold","text-shadow":"0 0 2px black"},children:"Right click to cancel"})]}):null}},41541:function(e,t,n){"use strict";t.__esModule=!0,t.VerticalNotations=t.HorizontalNotations=void 0;var o=n(96323),r=n(31246),a=n(26949),i=n(65844);t.HorizontalNotations=function(e,t){var n=(0,r.useBackend)(t).data,c=n.boardInfo.width,l=n.styling,u=l.border,d=l.tileColor1,s=l.tileColor2,p=(0,i.useStates)(t).isFlipped,m=u||s||"black",f=d||"white",h=(0,i.generateBoardNotationLetters)(c);return p&&(h=h.reverse()),(0,o.createComponentVNode)(2,a.Flex,{style:{"background-color":m,color:f},className:"boardgame__notations boardgame__notations-horizontal",children:h.map((function(e,t){return(0,o.createComponentVNode)(2,a.Flex.Item,{grow:1,children:(0,o.createComponentVNode)(2,a.Box,{className:"boardgame__notation-letter",children:e})},t)}))})};t.VerticalNotations=function(e,t){var n=(0,r.useBackend)(t).data,c=n.boardInfo.height,l=n.styling,u=l.border,d=l.tileColor1,s=l.tileColor2,p=(0,i.useStates)(t).isFlipped,m=u||s||"black",f=d||"white",h=Array.from(Array(c).keys());return p&&(h=h.reverse()),(0,o.createComponentVNode)(2,a.Flex,{style:{"background-color":m,color:f},className:"boardgame__notations boardgame__notations-vertical",children:h.map((function(e,t){return(0,o.createComponentVNode)(2,a.Flex.Item,{className:"boardgame__notations-number",grow:1,children:p?t+1:c-t},t)}))})}},75750:function(e,t,n){"use strict";t.__esModule=!0,t.Palettes=void 0;var o=n(96323),r=n(31246),a=n(86489),i=n(65844),c=n(26949);t.Palettes=function(e,t){var n=(0,r.useBackend)(t),d=(n.act,n.data,(0,i.useStates)(t).isExpanded);return(0,o.createComponentVNode)(2,c.Box,{className:"boardgame__palettes",children:(0,a.fetchPalettes)().map((function(e,t){return(0,o.createComponentVNode)(2,c.Box,{children:[(0,o.createComponentVNode)(2,c.Box,{className:"boardgame__palettes-header",children:(0,o.createComponentVNode)(2,u,{index:t,setId:e.name})}),(0,o.createComponentVNode)(2,c.Flex,{className:"boardgame__palettes-set "+(d(t)?"":"boardgame__palettes-set-minimized"),children:e.pieces.map((function(e,t){return(0,o.createComponentVNode)(2,l,{piece:e},t)}))})]},e.name)}))})};var l=function(e,t){var n=e.piece,a=(0,r.useBackend)(t),l=a.act,u=a.data.currentUser,d=(0,i.useActions)(l).paletteSet;return(0,o.createComponentVNode)(2,c.Flex.Item,{className:"boardgame__palettes-set-piece",onMouseDown:function(){return d(u.ckey,n.code)},children:(0,o.createVNode)(1,"img",null,null,1,{src:n.image})},n.name)},u=function(e,t){var n=e.index,r=e.setId,a=(0,i.useStates)(t),l=a.isExpanded,u=a.togglePalette;return(0,o.createComponentVNode)(2,c.Button.Checkbox,{className:"boardgame__palettes-set-toggle",checked:l(n),onClick:function(){return u(n)},children:r})}},15237:function(e,t,n){"use strict";t.__esModule=!0,t["default"]=t.TitleBar=void 0;var o=n(96323),r=n(31246),a=n(26949),i=n(75022),c=n(65844),l=function(e,t){var n=(0,r.useBackend)(t).act,l=(0,c.useStates)(t),u=l.isFlipped,d=l.toggleFlip,s=l.helpModalOpen,p=l.helpModalClose,m=l.isHelpModalOpen,f=(0,c.useActions)(n),h=f.boardClear,g=f.applyGNot;return(0,o.createComponentVNode)(2,a.Box,{className:"boardgame__titlebar",children:[(0,o.createComponentVNode)(2,a.Button,{tooltip:m?"Close":"Help",color:m?"orange":"default",icon:m?"times":"question",onClick:function(){return m?p():s()}}),(0,o.createComponentVNode)(2,a.Button,{tooltip:"Flip board",color:u?"orange":"default",icon:"repeat",onClick:d}),(0,o.createComponentVNode)(2,i.ButtonConfirm,{tooltipContent:"Clear board",icon:"trash",onConfirm:function(){h()}}),(0,o.createComponentVNode)(2,i.ButtonConfirm,{tooltipContent:"Load Chess Preset",icon:"chess",onConfirm:function(){g("r,n,b,q,k,b,n,r,p,p,p,p,p,p,p,p,32,P,P,P,P,P,P,P,P,R,N,B,Q,K,B,N,R")}}),(0,o.createComponentVNode)(2,i.ButtonConfirm,{tooltipContent:"Load Draughts Preset",icon:"ring",onConfirm:function(){g("1,d,1,d,1,d,1,d,d,1,d,1,d,1,d,2,d,1,d,1,d,1,d,16,D,1,D,1,D,1,D,2,D,1,D,1,D,1,D,D,1,D,1,D,1,D")}})]})};t.TitleBar=l;var u=l;t["default"]=u},29678:function(e,t,n){"use strict";t.__esModule=!0;var o=n(41541);t.HorizontalNotations=o.HorizontalNotations,t.VerticalNotations=o.VerticalNotations;var r=n(68035);t.HeldPieceRenderer=r.HeldPieceRenderer;var a=n(75750);t.Palettes=a.Palettes},95102:function(e,t,n){"use strict";t.__esModule=!0,t["default"]=t.kit=void 0;var o,r=(o=n(86364))&&o.__esModule?o:{"default":o};var a={pieces:r["default"],palettes:[{name:"Chess",pieces:r["default"]}]};t.kit=a;var i=a;t["default"]=i},86364:function(e,t){"use strict";t.__esModule=!0,t["default"]=void 0;var n=[];n.push({code:"k",name:"King (Black)",game:"chess",image:"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+DQo8IURPQ1RZUEUgc3ZnIFBVQkxJQyAiLS8vVzNDLy9EVEQgU1ZHIDEuMS8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9HcmFwaGljcy9TVkcvMS4xL0RURC9zdmcxMS5kdGQiPg0KPHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZlcnNpb249IjEuMSIgd2lkdGg9IjQ1IiBoZWlnaHQ9IjQ1IiB2aWV3Qm94PSIwIDAgNDUgNDUiPg0KICA8ZyBzdHlsZT0iZmlsbDpub25lOyBmaWxsLW9wYWNpdHk6MTsgZmlsbC1ydWxlOmV2ZW5vZGQ7IHN0cm9rZTojMDAwMDAwOyBzdHJva2Utd2lkdGg6MS41OyBzdHJva2UtbGluZWNhcDpyb3VuZDtzdHJva2UtbGluZWpvaW46cm91bmQ7c3Ryb2tlLW1pdGVybGltaXQ6NDsgc3Ryb2tlLWRhc2hhcnJheTpub25lOyBzdHJva2Utb3BhY2l0eToxOyI+DQogICAgPHBhdGggZD0iTSAyMi41LDExLjYzIEwgMjIuNSw2IiBzdHlsZT0iZmlsbDpub25lOyBzdHJva2U6IzAwMDAwMDsgc3Ryb2tlLWxpbmVqb2luOm1pdGVyOyIgaWQ9InBhdGg2NTcwIi8+DQogICAgPHBhdGggZD0iTSAyMi41LDI1IEMgMjIuNSwyNSAyNywxNy41IDI1LjUsMTQuNSBDIDI1LjUsMTQuNSAyNC41LDEyIDIyLjUsMTIgQyAyMC41LDEyIDE5LjUsMTQuNSAxOS41LDE0LjUgQyAxOCwxNy41IDIyLjUsMjUgMjIuNSwyNSIgc3R5bGU9ImZpbGw6IzAwMDAwMDtmaWxsLW9wYWNpdHk6MTsgc3Ryb2tlLWxpbmVjYXA6YnV0dDsgc3Ryb2tlLWxpbmVqb2luOm1pdGVyOyIvPg0KICAgIDxwYXRoIGQ9Ik0gMTIuNSwzNyBDIDE4LDQwLjUgMjcsNDAuNSAzMi41LDM3IEwgMzIuNSwzMCBDIDMyLjUsMzAgNDEuNSwyNS41IDM4LjUsMTkuNSBDIDM0LjUsMTMgMjUsMTYgMjIuNSwyMy41IEwgMjIuNSwyNyBMIDIyLjUsMjMuNSBDIDIwLDE2IDEwLjUsMTMgNi41LDE5LjUgQyAzLjUsMjUuNSAxMi41LDMwIDEyLjUsMzAgTCAxMi41LDM3IiBzdHlsZT0iZmlsbDojMDAwMDAwOyBzdHJva2U6IzAwMDAwMDsiLz4NCiAgICA8cGF0aCBkPSJNIDIwLDggTCAyNSw4IiBzdHlsZT0iZmlsbDpub25lOyBzdHJva2U6IzAwMDAwMDsgc3Ryb2tlLWxpbmVqb2luOm1pdGVyOyIvPg0KICAgIDxwYXRoIGQ9Ik0gMzIsMjkuNSBDIDMyLDI5LjUgNDAuNSwyNS41IDM4LjAzLDE5Ljg1IEMgMzQuMTUsMTQgMjUsMTggMjIuNSwyNC41IEwgMjIuNSwyNi42IEwgMjIuNSwyNC41IEMgMjAsMTggMTAuODUsMTQgNi45NywxOS44NSBDIDQuNSwyNS41IDEzLDI5LjUgMTMsMjkuNSIgc3R5bGU9ImZpbGw6bm9uZTsgc3Ryb2tlOiNmZmZmZmY7Ii8+DQogICAgPHBhdGggZD0iTSAxMi41LDMwIEMgMTgsMjcgMjcsMjcgMzIuNSwzMCBNIDEyLjUsMzMuNSBDIDE4LDMwLjUgMjcsMzAuNSAzMi41LDMzLjUgTSAxMi41LDM3IEMgMTgsMzQgMjcsMzQgMzIuNSwzNyIgc3R5bGU9ImZpbGw6bm9uZTsgc3Ryb2tlOiNmZmZmZmY7Ii8+DQogIDwvZz4NCjwvc3ZnPg=="}),n.push({code:"K",name:"King (White)",game:"chess",image:"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+DQo8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgd2lkdGg9IjQ1IiBoZWlnaHQ9IjQ1IiB2aWV3Qm94PSIwIDAgNDUgNDUiPg0KICA8ZyBmaWxsPSJub25lIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIHN0cm9rZT0iIzAwMCIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIiBzdHJva2Utd2lkdGg9IjEuNSI+DQogICAgPHBhdGggc3Ryb2tlLWxpbmVqb2luPSJtaXRlciIgZD0iTTIyLjUgMTEuNjNWNk0yMCA4aDUiLz4NCiAgICA8cGF0aCBmaWxsPSIjZmZmIiBzdHJva2UtbGluZWNhcD0iYnV0dCIgc3Ryb2tlLWxpbmVqb2luPSJtaXRlciIgZD0iTTIyLjUgMjVzNC41LTcuNSAzLTEwLjVjMCAwLTEtMi41LTMtMi41cy0zIDIuNS0zIDIuNWMtMS41IDMgMyAxMC41IDMgMTAuNSIvPg0KICAgIDxwYXRoIGZpbGw9IiNmZmYiIGQ9Ik0xMi41IDM3YzUuNSAzLjUgMTQuNSAzLjUgMjAgMHYtN3M5LTQuNSA2LTEwLjVjLTQtNi41LTEzLjUtMy41LTE2IDRWMjd2LTMuNWMtMi41LTcuNS0xMi0xMC41LTE2LTQtMyA2IDYgMTAuNSA2IDEwLjV2NyIvPg0KICAgIDxwYXRoIGQ9Ik0xMi41IDMwYzUuNS0zIDE0LjUtMyAyMCAwbS0yMCAzLjVjNS41LTMgMTQuNS0zIDIwIDBtLTIwIDMuNWM1LjUtMyAxNC41LTMgMjAgMCIvPg0KICA8L2c+DQo8L3N2Zz4="}),n.push({code:"q",name:"Queen (Black)",game:"chess",image:"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+DQo8IURPQ1RZUEUgc3ZnIFBVQkxJQyAiLS8vVzNDLy9EVEQgU1ZHIDEuMS8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9HcmFwaGljcy9TVkcvMS4xL0RURC9zdmcxMS5kdGQiPg0KPHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZlcnNpb249IjEuMSIgd2lkdGg9IjQ1IiBoZWlnaHQ9IjQ1IiB2aWV3Qm94PSIwIDAgNDUgNDUiPg0KICA8ZyBzdHlsZT0iZmlsbDojMDAwMDAwO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDoxLjU7IHN0cm9rZS1saW5lY2FwOnJvdW5kO3N0cm9rZS1saW5lam9pbjpyb3VuZCI+DQoNCiAgICA8cGF0aCBkPSJNIDksMjYgQyAxNy41LDI0LjUgMzAsMjQuNSAzNiwyNiBMIDM4LjUsMTMuNSBMIDMxLDI1IEwgMzAuNywxMC45IEwgMjUuNSwyNC41IEwgMjIuNSwxMCBMIDE5LjUsMjQuNSBMIDE0LjMsMTAuOSBMIDE0LDI1IEwgNi41LDEzLjUgTCA5LDI2IHoiIHN0eWxlPSJzdHJva2UtbGluZWNhcDpidXR0O2ZpbGw6IzAwMDAwMCIvPg0KICAgIDxwYXRoIGQ9Im0gOSwyNiBjIDAsMiAxLjUsMiAyLjUsNCAxLDEuNSAxLDEgMC41LDMuNSAtMS41LDEgLTEsMi41IC0xLDIuNSAtMS41LDEuNSAwLDIuNSAwLDIuNSA2LjUsMSAxNi41LDEgMjMsMCAwLDAgMS41LC0xIDAsLTIuNSAwLDAgMC41LC0xLjUgLTEsLTIuNSAtMC41LC0yLjUgLTAuNSwtMiAwLjUsLTMuNSAxLC0yIDIuNSwtMiAyLjUsLTQgLTguNSwtMS41IC0xOC41LC0xLjUgLTI3LDAgeiIvPg0KICAgIDxwYXRoIGQ9Ik0gMTEuNSwzMCBDIDE1LDI5IDMwLDI5IDMzLjUsMzAiLz4NCiAgICA8cGF0aCBkPSJtIDEyLDMzLjUgYyA2LC0xIDE1LC0xIDIxLDAiLz4NCiAgICA8Y2lyY2xlIGN4PSI2IiBjeT0iMTIiIHI9IjIiLz4NCiAgICA8Y2lyY2xlIGN4PSIxNCIgY3k9IjkiIHI9IjIiLz4NCiAgICA8Y2lyY2xlIGN4PSIyMi41IiBjeT0iOCIgcj0iMiIvPg0KICAgIDxjaXJjbGUgY3g9IjMxIiBjeT0iOSIgcj0iMiIvPg0KICAgIDxjaXJjbGUgY3g9IjM5IiBjeT0iMTIiIHI9IjIiLz4NCiAgICA8cGF0aCBkPSJNIDExLDM4LjUgQSAzNSwzNSAxIDAgMCAzNCwzOC41IiBzdHlsZT0iZmlsbDpub25lOyBzdHJva2U6IzAwMDAwMDtzdHJva2UtbGluZWNhcDpidXR0OyIvPg0KICAgIDxnIHN0eWxlPSJmaWxsOm5vbmU7IHN0cm9rZTojZmZmZmZmOyI+DQogICAgICA8cGF0aCBkPSJNIDExLDI5IEEgMzUsMzUgMSAwIDEgMzQsMjkiLz4NCiAgICAgIDxwYXRoIGQ9Ik0gMTIuNSwzMS41IEwgMzIuNSwzMS41Ii8+DQogICAgICA8cGF0aCBkPSJNIDExLjUsMzQuNSBBIDM1LDM1IDEgMCAwIDMzLjUsMzQuNSIvPg0KICAgICAgPHBhdGggZD0iTSAxMC41LDM3LjUgQSAzNSwzNSAxIDAgMCAzNC41LDM3LjUiLz4NCiAgICA8L2c+DQogIDwvZz4NCjwvc3ZnPg=="}),n.push({code:"Q",name:"Queen (White)",game:"chess",image:"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+DQo8IURPQ1RZUEUgc3ZnIFBVQkxJQyAiLS8vVzNDLy9EVEQgU1ZHIDEuMS8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9HcmFwaGljcy9TVkcvMS4xL0RURC9zdmcxMS5kdGQiPg0KPHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZlcnNpb249IjEuMSIgd2lkdGg9IjQ1IiBoZWlnaHQ9IjQ1IiB2aWV3Qm94PSIwIDAgNDUgNDUiPg0KICA8ZyBzdHlsZT0iZmlsbDojZmZmZmZmO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDoxLjU7c3Ryb2tlLWxpbmVqb2luOnJvdW5kIj4NCiAgICA8cGF0aCBkPSJNIDksMjYgQyAxNy41LDI0LjUgMzAsMjQuNSAzNiwyNiBMIDM4LjUsMTMuNSBMIDMxLDI1IEwgMzAuNywxMC45IEwgMjUuNSwyNC41IEwgMjIuNSwxMCBMIDE5LjUsMjQuNSBMIDE0LjMsMTAuOSBMIDE0LDI1IEwgNi41LDEzLjUgTCA5LDI2IHoiLz4NCiAgICA8cGF0aCBkPSJNIDksMjYgQyA5LDI4IDEwLjUsMjggMTEuNSwzMCBDIDEyLjUsMzEuNSAxMi41LDMxIDEyLDMzLjUgQyAxMC41LDM0LjUgMTEsMzYgMTEsMzYgQyA5LjUsMzcuNSAxMSwzOC41IDExLDM4LjUgQyAxNy41LDM5LjUgMjcuNSwzOS41IDM0LDM4LjUgQyAzNCwzOC41IDM1LjUsMzcuNSAzNCwzNiBDIDM0LDM2IDM0LjUsMzQuNSAzMywzMy41IEMgMzIuNSwzMSAzMi41LDMxLjUgMzMuNSwzMCBDIDM0LjUsMjggMzYsMjggMzYsMjYgQyAyNy41LDI0LjUgMTcuNSwyNC41IDksMjYgeiIvPg0KICAgIDxwYXRoIGQ9Ik0gMTEuNSwzMCBDIDE1LDI5IDMwLDI5IDMzLjUsMzAiIHN0eWxlPSJmaWxsOm5vbmUiLz4NCiAgICA8cGF0aCBkPSJNIDEyLDMzLjUgQyAxOCwzMi41IDI3LDMyLjUgMzMsMzMuNSIgc3R5bGU9ImZpbGw6bm9uZSIvPg0KICAgIDxjaXJjbGUgY3g9IjYiIGN5PSIxMiIgcj0iMiIvPg0KICAgIDxjaXJjbGUgY3g9IjE0IiBjeT0iOSIgcj0iMiIvPg0KICAgIDxjaXJjbGUgY3g9IjIyLjUiIGN5PSI4IiByPSIyIi8+DQogICAgPGNpcmNsZSBjeD0iMzEiIGN5PSI5IiByPSIyIi8+DQogICAgPGNpcmNsZSBjeD0iMzkiIGN5PSIxMiIgcj0iMiIvPg0KICA8L2c+DQo8L3N2Zz4="}),n.push({code:"r",name:"Rook (Black)",game:"chess",image:"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+DQo8IURPQ1RZUEUgc3ZnIFBVQkxJQyAiLS8vVzNDLy9EVEQgU1ZHIDEuMS8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9HcmFwaGljcy9TVkcvMS4xL0RURC9zdmcxMS5kdGQiPg0KPHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZlcnNpb249IjEuMSIgd2lkdGg9IjQ1IiBoZWlnaHQ9IjQ1IiB2aWV3Qm94PSIwIDAgNDUgNDUiPg0KICA8ZyBzdHlsZT0ib3BhY2l0eToxOyBmaWxsOiMwMDAwMDA7IGZpbGwtb3BhY2l0eToxOyBmaWxsLXJ1bGU6ZXZlbm9kZDsgc3Ryb2tlOiMwMDAwMDA7IHN0cm9rZS13aWR0aDoxLjU7IHN0cm9rZS1saW5lY2FwOnJvdW5kO3N0cm9rZS1saW5lam9pbjpyb3VuZDtzdHJva2UtbWl0ZXJsaW1pdDo0OyBzdHJva2UtZGFzaGFycmF5Om5vbmU7IHN0cm9rZS1vcGFjaXR5OjE7IiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgwLDAuMykiPg0KICAgIDxwYXRoIGQ9Ik0gOSwzOSBMIDM2LDM5IEwgMzYsMzYgTCA5LDM2IEwgOSwzOSB6ICIgc3R5bGU9InN0cm9rZS1saW5lY2FwOmJ1dHQ7Ii8+DQogICAgPHBhdGggZD0iTSAxMi41LDMyIEwgMTQsMjkuNSBMIDMxLDI5LjUgTCAzMi41LDMyIEwgMTIuNSwzMiB6ICIgc3R5bGU9InN0cm9rZS1saW5lY2FwOmJ1dHQ7Ii8+DQogICAgPHBhdGggZD0iTSAxMiwzNiBMIDEyLDMyIEwgMzMsMzIgTCAzMywzNiBMIDEyLDM2IHogIiBzdHlsZT0ic3Ryb2tlLWxpbmVjYXA6YnV0dDsiLz4NCiAgICA8cGF0aCBkPSJNIDE0LDI5LjUgTCAxNCwxNi41IEwgMzEsMTYuNSBMIDMxLDI5LjUgTCAxNCwyOS41IHogIiBzdHlsZT0ic3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7Ii8+DQogICAgPHBhdGggZD0iTSAxNCwxNi41IEwgMTEsMTQgTCAzNCwxNCBMIDMxLDE2LjUgTCAxNCwxNi41IHogIiBzdHlsZT0ic3Ryb2tlLWxpbmVjYXA6YnV0dDsiLz4NCiAgICA8cGF0aCBkPSJNIDExLDE0IEwgMTEsOSBMIDE1LDkgTCAxNSwxMSBMIDIwLDExIEwgMjAsOSBMIDI1LDkgTCAyNSwxMSBMIDMwLDExIEwgMzAsOSBMIDM0LDkgTCAzNCwxNCBMIDExLDE0IHogIiBzdHlsZT0ic3Ryb2tlLWxpbmVjYXA6YnV0dDsiLz4NCiAgICA8cGF0aCBkPSJNIDEyLDM1LjUgTCAzMywzNS41IEwgMzMsMzUuNSIgc3R5bGU9ImZpbGw6bm9uZTsgc3Ryb2tlOiNmZmZmZmY7IHN0cm9rZS13aWR0aDoxOyBzdHJva2UtbGluZWpvaW46bWl0ZXI7Ii8+DQogICAgPHBhdGggZD0iTSAxMywzMS41IEwgMzIsMzEuNSIgc3R5bGU9ImZpbGw6bm9uZTsgc3Ryb2tlOiNmZmZmZmY7IHN0cm9rZS13aWR0aDoxOyBzdHJva2UtbGluZWpvaW46bWl0ZXI7Ii8+DQogICAgPHBhdGggZD0iTSAxNCwyOS41IEwgMzEsMjkuNSIgc3R5bGU9ImZpbGw6bm9uZTsgc3Ryb2tlOiNmZmZmZmY7IHN0cm9rZS13aWR0aDoxOyBzdHJva2UtbGluZWpvaW46bWl0ZXI7Ii8+DQogICAgPHBhdGggZD0iTSAxNCwxNi41IEwgMzEsMTYuNSIgc3R5bGU9ImZpbGw6bm9uZTsgc3Ryb2tlOiNmZmZmZmY7IHN0cm9rZS13aWR0aDoxOyBzdHJva2UtbGluZWpvaW46bWl0ZXI7Ii8+DQogICAgPHBhdGggZD0iTSAxMSwxNCBMIDM0LDE0IiBzdHlsZT0iZmlsbDpub25lOyBzdHJva2U6I2ZmZmZmZjsgc3Ryb2tlLXdpZHRoOjE7IHN0cm9rZS1saW5lam9pbjptaXRlcjsiLz4NCiAgPC9nPg0KPC9zdmc+"}),n.push({code:"R",name:"Rook (White)",game:"chess",image:"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+DQo8IURPQ1RZUEUgc3ZnIFBVQkxJQyAiLS8vVzNDLy9EVEQgU1ZHIDEuMS8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9HcmFwaGljcy9TVkcvMS4xL0RURC9zdmcxMS5kdGQiPg0KPHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZlcnNpb249IjEuMSIgd2lkdGg9IjQ1IiBoZWlnaHQ9IjQ1IiB2aWV3Qm94PSIwIDAgNDUgNDUiPg0KICA8ZyBzdHlsZT0ib3BhY2l0eToxOyBmaWxsOiNmZmZmZmY7IGZpbGwtb3BhY2l0eToxOyBmaWxsLXJ1bGU6ZXZlbm9kZDsgc3Ryb2tlOiMwMDAwMDA7IHN0cm9rZS13aWR0aDoxLjU7IHN0cm9rZS1saW5lY2FwOnJvdW5kO3N0cm9rZS1saW5lam9pbjpyb3VuZDtzdHJva2UtbWl0ZXJsaW1pdDo0OyBzdHJva2UtZGFzaGFycmF5Om5vbmU7IHN0cm9rZS1vcGFjaXR5OjE7IiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgwLDAuMykiPg0KICAgIDxwYXRoIGQ9Ik0gOSwzOSBMIDM2LDM5IEwgMzYsMzYgTCA5LDM2IEwgOSwzOSB6ICIgc3R5bGU9InN0cm9rZS1saW5lY2FwOmJ1dHQ7Ii8+DQogICAgPHBhdGggZD0iTSAxMiwzNiBMIDEyLDMyIEwgMzMsMzIgTCAzMywzNiBMIDEyLDM2IHogIiBzdHlsZT0ic3Ryb2tlLWxpbmVjYXA6YnV0dDsiLz4NCiAgICA8cGF0aCBkPSJNIDExLDE0IEwgMTEsOSBMIDE1LDkgTCAxNSwxMSBMIDIwLDExIEwgMjAsOSBMIDI1LDkgTCAyNSwxMSBMIDMwLDExIEwgMzAsOSBMIDM0LDkgTCAzNCwxNCIgc3R5bGU9InN0cm9rZS1saW5lY2FwOmJ1dHQ7Ii8+DQogICAgPHBhdGggZD0iTSAzNCwxNCBMIDMxLDE3IEwgMTQsMTcgTCAxMSwxNCIvPg0KICAgIDxwYXRoIGQ9Ik0gMzEsMTcgTCAzMSwyOS41IEwgMTQsMjkuNSBMIDE0LDE3IiBzdHlsZT0ic3Ryb2tlLWxpbmVjYXA6YnV0dDsgc3Ryb2tlLWxpbmVqb2luOm1pdGVyOyIvPg0KICAgIDxwYXRoIGQ9Ik0gMzEsMjkuNSBMIDMyLjUsMzIgTCAxMi41LDMyIEwgMTQsMjkuNSIvPg0KICAgIDxwYXRoIGQ9Ik0gMTEsMTQgTCAzNCwxNCIgc3R5bGU9ImZpbGw6bm9uZTsgc3Ryb2tlOiMwMDAwMDA7IHN0cm9rZS1saW5lam9pbjptaXRlcjsiLz4NCiAgPC9nPg0KPC9zdmc+"}),n.push({code:"b",name:"Bishop (Black)",game:"chess",image:"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+DQo8IURPQ1RZUEUgc3ZnIFBVQkxJQyAiLS8vVzNDLy9EVEQgU1ZHIDEuMS8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9HcmFwaGljcy9TVkcvMS4xL0RURC9zdmcxMS5kdGQiPg0KPHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZlcnNpb249IjEuMSIgd2lkdGg9IjQ1IiBoZWlnaHQ9IjQ1IiB2aWV3Qm94PSIwIDAgNDUgNDUiPg0KICA8ZyBzdHlsZT0ib3BhY2l0eToxOyBmaWxsOm5vbmU7IGZpbGwtcnVsZTpldmVub2RkOyBmaWxsLW9wYWNpdHk6MTsgc3Ryb2tlOiMwMDAwMDA7IHN0cm9rZS13aWR0aDoxLjU7IHN0cm9rZS1saW5lY2FwOnJvdW5kOyBzdHJva2UtbGluZWpvaW46cm91bmQ7IHN0cm9rZS1taXRlcmxpbWl0OjQ7IHN0cm9rZS1kYXNoYXJyYXk6bm9uZTsgc3Ryb2tlLW9wYWNpdHk6MTsiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDAsMC42KSI+DQogICAgPGcgc3R5bGU9ImZpbGw6IzAwMDAwMDsgc3Ryb2tlOiMwMDAwMDA7IHN0cm9rZS1saW5lY2FwOmJ1dHQ7Ij4NCiAgICAgIDxwYXRoIGQ9Ik0gOSwzNiBDIDEyLjM5LDM1LjAzIDE5LjExLDM2LjQzIDIyLjUsMzQgQyAyNS44OSwzNi40MyAzMi42MSwzNS4wMyAzNiwzNiBDIDM2LDM2IDM3LjY1LDM2LjU0IDM5LDM4IEMgMzguMzIsMzguOTcgMzcuMzUsMzguOTkgMzYsMzguNSBDIDMyLjYxLDM3LjUzIDI1Ljg5LDM4Ljk2IDIyLjUsMzcuNSBDIDE5LjExLDM4Ljk2IDEyLjM5LDM3LjUzIDksMzguNSBDIDcuNjUsMzguOTkgNi42OCwzOC45NyA2LDM4IEMgNy4zNSwzNi41NCA5LDM2IDksMzYgeiIvPg0KICAgICAgPHBhdGggZD0iTSAxNSwzMiBDIDE3LjUsMzQuNSAyNy41LDM0LjUgMzAsMzIgQyAzMC41LDMwLjUgMzAsMzAgMzAsMzAgQyAzMCwyNy41IDI3LjUsMjYgMjcuNSwyNiBDIDMzLDI0LjUgMzMuNSwxNC41IDIyLjUsMTAuNSBDIDExLjUsMTQuNSAxMiwyNC41IDE3LjUsMjYgQyAxNy41LDI2IDE1LDI3LjUgMTUsMzAgQyAxNSwzMCAxNC41LDMwLjUgMTUsMzIgeiIvPg0KICAgICAgPHBhdGggZD0iTSAyNSA4IEEgMi41IDIuNSAwIDEgMSAgMjAsOCBBIDIuNSAyLjUgMCAxIDEgIDI1IDggeiIvPg0KICAgIDwvZz4NCiAgICA8cGF0aCBkPSJNIDE3LjUsMjYgTCAyNy41LDI2IE0gMTUsMzAgTCAzMCwzMCBNIDIyLjUsMTUuNSBMIDIyLjUsMjAuNSBNIDIwLDE4IEwgMjUsMTgiIHN0eWxlPSJmaWxsOm5vbmU7IHN0cm9rZTojZmZmZmZmOyBzdHJva2UtbGluZWpvaW46bWl0ZXI7Ii8+DQogIDwvZz4NCjwvc3ZnPg=="}),n.push({code:"B",name:"Bishop (White)",game:"chess",image:"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+DQo8IURPQ1RZUEUgc3ZnIFBVQkxJQyAiLS8vVzNDLy9EVEQgU1ZHIDEuMS8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9HcmFwaGljcy9TVkcvMS4xL0RURC9zdmcxMS5kdGQiPg0KPHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZlcnNpb249IjEuMSIgd2lkdGg9IjQ1IiBoZWlnaHQ9IjQ1IiB2aWV3Qm94PSIwIDAgNDUgNDUiPg0KICA8ZyBzdHlsZT0ib3BhY2l0eToxOyBmaWxsOm5vbmU7IGZpbGwtcnVsZTpldmVub2RkOyBmaWxsLW9wYWNpdHk6MTsgc3Ryb2tlOiMwMDAwMDA7IHN0cm9rZS13aWR0aDoxLjU7IHN0cm9rZS1saW5lY2FwOnJvdW5kOyBzdHJva2UtbGluZWpvaW46cm91bmQ7IHN0cm9rZS1taXRlcmxpbWl0OjQ7IHN0cm9rZS1kYXNoYXJyYXk6bm9uZTsgc3Ryb2tlLW9wYWNpdHk6MTsiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDAsMC42KSI+DQogICAgPGcgc3R5bGU9ImZpbGw6I2ZmZmZmZjsgc3Ryb2tlOiMwMDAwMDA7IHN0cm9rZS1saW5lY2FwOmJ1dHQ7Ij4NCiAgICAgIDxwYXRoIGQ9Ik0gOSwzNiBDIDEyLjM5LDM1LjAzIDE5LjExLDM2LjQzIDIyLjUsMzQgQyAyNS44OSwzNi40MyAzMi42MSwzNS4wMyAzNiwzNiBDIDM2LDM2IDM3LjY1LDM2LjU0IDM5LDM4IEMgMzguMzIsMzguOTcgMzcuMzUsMzguOTkgMzYsMzguNSBDIDMyLjYxLDM3LjUzIDI1Ljg5LDM4Ljk2IDIyLjUsMzcuNSBDIDE5LjExLDM4Ljk2IDEyLjM5LDM3LjUzIDksMzguNSBDIDcuNjUsMzguOTkgNi42OCwzOC45NyA2LDM4IEMgNy4zNSwzNi41NCA5LDM2IDksMzYgeiIvPg0KICAgICAgPHBhdGggZD0iTSAxNSwzMiBDIDE3LjUsMzQuNSAyNy41LDM0LjUgMzAsMzIgQyAzMC41LDMwLjUgMzAsMzAgMzAsMzAgQyAzMCwyNy41IDI3LjUsMjYgMjcuNSwyNiBDIDMzLDI0LjUgMzMuNSwxNC41IDIyLjUsMTAuNSBDIDExLjUsMTQuNSAxMiwyNC41IDE3LjUsMjYgQyAxNy41LDI2IDE1LDI3LjUgMTUsMzAgQyAxNSwzMCAxNC41LDMwLjUgMTUsMzIgeiIvPg0KICAgICAgPHBhdGggZD0iTSAyNSA4IEEgMi41IDIuNSAwIDEgMSAgMjAsOCBBIDIuNSAyLjUgMCAxIDEgIDI1IDggeiIvPg0KICAgIDwvZz4NCiAgICA8cGF0aCBkPSJNIDE3LjUsMjYgTCAyNy41LDI2IE0gMTUsMzAgTCAzMCwzMCBNIDIyLjUsMTUuNSBMIDIyLjUsMjAuNSBNIDIwLDE4IEwgMjUsMTgiIHN0eWxlPSJmaWxsOm5vbmU7IHN0cm9rZTojMDAwMDAwOyBzdHJva2UtbGluZWpvaW46bWl0ZXI7Ii8+DQogIDwvZz4NCjwvc3ZnPg=="}),n.push({code:"n",name:"Knight (White)",game:"chess",image:"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+DQo8IURPQ1RZUEUgc3ZnIFBVQkxJQyAiLS8vVzNDLy9EVEQgU1ZHIDEuMS8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9HcmFwaGljcy9TVkcvMS4xL0RURC9zdmcxMS5kdGQiPg0KPHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZlcnNpb249IjEuMSIgd2lkdGg9IjQ1IiBoZWlnaHQ9IjQ1IiB2aWV3Qm94PSIwIDAgNDUgNDUiPg0KICA8ZyBzdHlsZT0ib3BhY2l0eToxOyBmaWxsOm5vbmU7IGZpbGwtb3BhY2l0eToxOyBmaWxsLXJ1bGU6ZXZlbm9kZDsgc3Ryb2tlOiMwMDAwMDA7IHN0cm9rZS13aWR0aDoxLjU7IHN0cm9rZS1saW5lY2FwOnJvdW5kO3N0cm9rZS1saW5lam9pbjpyb3VuZDtzdHJva2UtbWl0ZXJsaW1pdDo0OyBzdHJva2UtZGFzaGFycmF5Om5vbmU7IHN0cm9rZS1vcGFjaXR5OjE7IiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgwLDAuMykiPg0KICAgIDxwYXRoIGQ9Ik0gMjIsMTAgQyAzMi41LDExIDM4LjUsMTggMzgsMzkgTCAxNSwzOSBDIDE1LDMwIDI1LDMyLjUgMjMsMTgiIHN0eWxlPSJmaWxsOiMwMDAwMDA7IHN0cm9rZTojMDAwMDAwOyIvPg0KICAgIDxwYXRoIGQ9Ik0gMjQsMTggQyAyNC4zOCwyMC45MSAxOC40NSwyNS4zNyAxNiwyNyBDIDEzLDI5IDEzLjE4LDMxLjM0IDExLDMxIEMgOS45NTgsMzAuMDYgMTIuNDEsMjcuOTYgMTEsMjggQyAxMCwyOCAxMS4xOSwyOS4yMyAxMCwzMCBDIDksMzAgNS45OTcsMzEgNiwyNiBDIDYsMjQgMTIsMTQgMTIsMTQgQyAxMiwxNCAxMy44OSwxMi4xIDE0LDEwLjUgQyAxMy4yNyw5LjUwNiAxMy41LDguNSAxMy41LDcuNSBDIDE0LjUsNi41IDE2LjUsMTAgMTYuNSwxMCBMIDE4LjUsMTAgQyAxOC41LDEwIDE5LjI4LDguMDA4IDIxLDcgQyAyMiw3IDIyLDEwIDIyLDEwIiBzdHlsZT0iZmlsbDojMDAwMDAwOyBzdHJva2U6IzAwMDAwMDsiLz4NCiAgICA8cGF0aCBkPSJNIDkuNSAyNS41IEEgMC41IDAuNSAwIDEgMSA4LjUsMjUuNSBBIDAuNSAwLjUgMCAxIDEgOS41IDI1LjUgeiIgc3R5bGU9ImZpbGw6I2ZmZmZmZjsgc3Ryb2tlOiNmZmZmZmY7Ii8+DQogICAgPHBhdGggZD0iTSAxNSAxNS41IEEgMC41IDEuNSAwIDEgMSAgMTQsMTUuNSBBIDAuNSAxLjUgMCAxIDEgIDE1IDE1LjUgeiIgdHJhbnNmb3JtPSJtYXRyaXgoMC44NjYsMC41LC0wLjUsMC44NjYsOS42OTMsLTUuMTczKSIgc3R5bGU9ImZpbGw6I2ZmZmZmZjsgc3Ryb2tlOiNmZmZmZmY7Ii8+DQogICAgPHBhdGggZD0iTSAyNC41NSwxMC40IEwgMjQuMSwxMS44NSBMIDI0LjYsMTIgQyAyNy43NSwxMyAzMC4yNSwxNC40OSAzMi41LDE4Ljc1IEMgMzQuNzUsMjMuMDEgMzUuNzUsMjkuMDYgMzUuMjUsMzkgTCAzNS4yLDM5LjUgTCAzNy40NSwzOS41IEwgMzcuNSwzOSBDIDM4LDI4Ljk0IDM2LjYyLDIyLjE1IDM0LjI1LDE3LjY2IEMgMzEuODgsMTMuMTcgMjguNDYsMTEuMDIgMjUuMDYsMTAuNSBMIDI0LjU1LDEwLjQgeiAiIHN0eWxlPSJmaWxsOiNmZmZmZmY7IHN0cm9rZTpub25lOyIvPg0KICA8L2c+DQo8L3N2Zz4="}),n.push({code:"N",name:"Knight (White)",game:"chess",image:"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+DQo8IURPQ1RZUEUgc3ZnIFBVQkxJQyAiLS8vVzNDLy9EVEQgU1ZHIDEuMS8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9HcmFwaGljcy9TVkcvMS4xL0RURC9zdmcxMS5kdGQiPg0KPHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZlcnNpb249IjEuMSIgd2lkdGg9IjQ1IiBoZWlnaHQ9IjQ1IiB2aWV3Qm94PSIwIDAgNDUgNDUiPg0KICA8ZyBzdHlsZT0ib3BhY2l0eToxOyBmaWxsOm5vbmU7IGZpbGwtb3BhY2l0eToxOyBmaWxsLXJ1bGU6ZXZlbm9kZDsgc3Ryb2tlOiMwMDAwMDA7IHN0cm9rZS13aWR0aDoxLjU7IHN0cm9rZS1saW5lY2FwOnJvdW5kO3N0cm9rZS1saW5lam9pbjpyb3VuZDtzdHJva2UtbWl0ZXJsaW1pdDo0OyBzdHJva2UtZGFzaGFycmF5Om5vbmU7IHN0cm9rZS1vcGFjaXR5OjE7IiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgwLDAuMykiPg0KICAgIDxwYXRoIGQ9Ik0gMjIsMTAgQyAzMi41LDExIDM4LjUsMTggMzgsMzkgTCAxNSwzOSBDIDE1LDMwIDI1LDMyLjUgMjMsMTgiIHN0eWxlPSJmaWxsOiNmZmZmZmY7IHN0cm9rZTojMDAwMDAwOyIvPg0KICAgIDxwYXRoIGQ9Ik0gMjQsMTggQyAyNC4zOCwyMC45MSAxOC40NSwyNS4zNyAxNiwyNyBDIDEzLDI5IDEzLjE4LDMxLjM0IDExLDMxIEMgOS45NTgsMzAuMDYgMTIuNDEsMjcuOTYgMTEsMjggQyAxMCwyOCAxMS4xOSwyOS4yMyAxMCwzMCBDIDksMzAgNS45OTcsMzEgNiwyNiBDIDYsMjQgMTIsMTQgMTIsMTQgQyAxMiwxNCAxMy44OSwxMi4xIDE0LDEwLjUgQyAxMy4yNyw5LjUwNiAxMy41LDguNSAxMy41LDcuNSBDIDE0LjUsNi41IDE2LjUsMTAgMTYuNSwxMCBMIDE4LjUsMTAgQyAxOC41LDEwIDE5LjI4LDguMDA4IDIxLDcgQyAyMiw3IDIyLDEwIDIyLDEwIiBzdHlsZT0iZmlsbDojZmZmZmZmOyBzdHJva2U6IzAwMDAwMDsiLz4NCiAgICA8cGF0aCBkPSJNIDkuNSAyNS41IEEgMC41IDAuNSAwIDEgMSA4LjUsMjUuNSBBIDAuNSAwLjUgMCAxIDEgOS41IDI1LjUgeiIgc3R5bGU9ImZpbGw6IzAwMDAwMDsgc3Ryb2tlOiMwMDAwMDA7Ii8+DQogICAgPHBhdGggZD0iTSAxNSAxNS41IEEgMC41IDEuNSAwIDEgMSAgMTQsMTUuNSBBIDAuNSAxLjUgMCAxIDEgIDE1IDE1LjUgeiIgdHJhbnNmb3JtPSJtYXRyaXgoMC44NjYsMC41LC0wLjUsMC44NjYsOS42OTMsLTUuMTczKSIgc3R5bGU9ImZpbGw6IzAwMDAwMDsgc3Ryb2tlOiMwMDAwMDA7Ii8+DQogIDwvZz4NCjwvc3ZnPg=="}),n.push({code:"p",name:"Pawn (Black)",game:"chess",image:"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+DQo8IURPQ1RZUEUgc3ZnIFBVQkxJQyAiLS8vVzNDLy9EVEQgU1ZHIDEuMS8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9HcmFwaGljcy9TVkcvMS4xL0RURC9zdmcxMS5kdGQiPg0KPHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZlcnNpb249IjEuMSIgd2lkdGg9IjQ1IiBoZWlnaHQ9IjQ1IiB2aWV3Qm94PSIwIDAgNDUgNDUiPg0KICA8cGF0aCBkPSJtIDIyLjUsOSBjIC0yLjIxLDAgLTQsMS43OSAtNCw0IDAsMC44OSAwLjI5LDEuNzEgMC43OCwyLjM4IEMgMTcuMzMsMTYuNSAxNiwxOC41OSAxNiwyMSBjIDAsMi4wMyAwLjk0LDMuODQgMi40MSw1LjAzIEMgMTUuNDEsMjcuMDkgMTEsMzEuNTggMTEsMzkuNSBIIDM0IEMgMzQsMzEuNTggMjkuNTksMjcuMDkgMjYuNTksMjYuMDMgMjguMDYsMjQuODQgMjksMjMuMDMgMjksMjEgMjksMTguNTkgMjcuNjcsMTYuNSAyNS43MiwxNS4zOCAyNi4yMSwxNC43MSAyNi41LDEzLjg5IDI2LjUsMTMgYyAwLC0yLjIxIC0xLjc5LC00IC00LC00IHoiIHN0eWxlPSJvcGFjaXR5OjE7IGZpbGw6IzAwMDAwMDsgZmlsbC1vcGFjaXR5OjE7IGZpbGwtcnVsZTpub256ZXJvOyBzdHJva2U6IzAwMDAwMDsgc3Ryb2tlLXdpZHRoOjEuNTsgc3Ryb2tlLWxpbmVjYXA6cm91bmQ7IHN0cm9rZS1saW5lam9pbjptaXRlcjsgc3Ryb2tlLW1pdGVybGltaXQ6NDsgc3Ryb2tlLWRhc2hhcnJheTpub25lOyBzdHJva2Utb3BhY2l0eToxOyIvPg0KPC9zdmc+"}),n.push({code:"P",name:"Pawn (White)",game:"chess",image:"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+DQo8IURPQ1RZUEUgc3ZnIFBVQkxJQyAiLS8vVzNDLy9EVEQgU1ZHIDEuMS8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9HcmFwaGljcy9TVkcvMS4xL0RURC9zdmcxMS5kdGQiPg0KPHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZlcnNpb249IjEuMSIgd2lkdGg9IjQ1IiBoZWlnaHQ9IjQ1IiB2aWV3Qm94PSIwIDAgNDUgNDUiPg0KICA8cGF0aCBkPSJtIDIyLjUsOSBjIC0yLjIxLDAgLTQsMS43OSAtNCw0IDAsMC44OSAwLjI5LDEuNzEgMC43OCwyLjM4IEMgMTcuMzMsMTYuNSAxNiwxOC41OSAxNiwyMSBjIDAsMi4wMyAwLjk0LDMuODQgMi40MSw1LjAzIEMgMTUuNDEsMjcuMDkgMTEsMzEuNTggMTEsMzkuNSBIIDM0IEMgMzQsMzEuNTggMjkuNTksMjcuMDkgMjYuNTksMjYuMDMgMjguMDYsMjQuODQgMjksMjMuMDMgMjksMjEgMjksMTguNTkgMjcuNjcsMTYuNSAyNS43MiwxNS4zOCAyNi4yMSwxNC43MSAyNi41LDEzLjg5IDI2LjUsMTMgYyAwLC0yLjIxIC0xLjc5LC00IC00LC00IHoiIHN0eWxlPSJvcGFjaXR5OjE7IGZpbGw6I2ZmZmZmZjsgZmlsbC1vcGFjaXR5OjE7IGZpbGwtcnVsZTpub256ZXJvOyBzdHJva2U6IzAwMDAwMDsgc3Ryb2tlLXdpZHRoOjEuNTsgc3Ryb2tlLWxpbmVjYXA6cm91bmQ7IHN0cm9rZS1saW5lam9pbjptaXRlcjsgc3Ryb2tlLW1pdGVybGltaXQ6NDsgc3Ryb2tlLWRhc2hhcnJheTpub25lOyBzdHJva2Utb3BhY2l0eToxOyIvPg0KPC9zdmc+"});var o=n;t["default"]=o},85867:function(e,t,n){"use strict";t.__esModule=!0,t["default"]=t.kit=void 0;var o,r=(o=n(77896))&&o.__esModule?o:{"default":o};var a={pieces:r["default"],palettes:[{name:"Draughts",pieces:r["default"]}]};t.kit=a;var i=a;t["default"]=i},77896:function(e,t){"use strict";t.__esModule=!0,t["default"]=void 0;var n=[];n.push({code:"d",name:"Man (Black)",game:"draughts",image:"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPHN2ZyB3aWR0aD0iOS43OW1tIiBoZWlnaHQ9IjkuNzltbSIgdmVyc2lvbj0iMS4xIiB2aWV3Qm94PSIwIDAgOS43OSA5Ljc5IiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOmNjPSJodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy9ucyMiIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4KIDxtZXRhZGF0YT4KICA8cmRmOlJERj4KICAgPGNjOldvcmsgcmRmOmFib3V0PSIiPgogICAgPGRjOmZvcm1hdD5pbWFnZS9zdmcreG1sPC9kYzpmb3JtYXQ+CiAgICA8ZGM6dHlwZSByZGY6cmVzb3VyY2U9Imh0dHA6Ly9wdXJsLm9yZy9kYy9kY21pdHlwZS9TdGlsbEltYWdlIi8+CiAgICA8ZGM6dGl0bGUvPgogICA8L2NjOldvcms+CiAgPC9yZGY6UkRGPgogPC9tZXRhZGF0YT4KIDxnIHRyYW5zZm9ybT0idHJhbnNsYXRlKC0zMCAtMzIuNzg2KSI+CiAgPGcgZmlsbD0iI2ZmZiIgc3Ryb2tlPSIjMDAwIiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiIHN0cm9rZS13aWR0aD0iLjM5NyI+CiAgIDxjaXJjbGUgY3g9IjM0Ljg5NSIgY3k9IjI1Ljg5NSIgcj0iNC44OTUiLz4KICAgPGNpcmNsZSBjeD0iMzQuODk1IiBjeT0iMjUuODk1IiByPSIzIi8+CiAgPC9nPgogIDxnPgogICA8Y2lyY2xlIGN4PSIzNC44OTUiIGN5PSIzNy42ODEiIHI9IjQuODk1Ii8+CiAgIDxjaXJjbGUgY3g9IjM0Ljg5NSIgY3k9IjM3LjY4MSIgcj0iMyIgc3Ryb2tlPSIjZmZmIiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiIHN0cm9rZS13aWR0aD0iLjM5NyIvPgogIDwvZz4KICA8Zz4KICAgPGNpcmNsZSBjeD0iNDcuMzAzIiBjeT0iMzcuNjgxIiByPSI0Ljg5NSIvPgogICA8Y2lyY2xlIGN4PSI0Ny4zMDMiIGN5PSIzNy42ODEiIHI9IjMiIHN0cm9rZT0iI2ZmZiIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIiBzdHJva2Utd2lkdGg9Ii4zOTciLz4KICAgPGcgdHJhbnNmb3JtPSJtYXRyaXgoLjExNTc2IDAgMCAuMTE1NzYgNDQuNjk4IDM1LjA0MSkiIGZpbGwtcnVsZT0iZXZlbm9kZCIgc3Ryb2tlPSIjZmZmIiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiIHN0cm9rZS13aWR0aD0iMS41Ij4KICAgIDxwYXRoIGQ9Im0yMi41IDExLjYzdi01LjYzbS0yLjUgMmg1IiBzdHJva2UtbGluZWpvaW49Im1pdGVyIi8+CiAgICA8cGF0aCBkPSJtMjIuNSAyNXM0LjUtNy41IDMtMTAuNWMwIDAtMS0yLjUtMy0yLjVzLTMgMi41LTMgMi41Yy0xLjUgMyAzIDEwLjUgMyAxMC41IiBzdHJva2UtbGluZWNhcD0iYnV0dCIgc3Ryb2tlLWxpbmVqb2luPSJtaXRlciIvPgogICAgPHBhdGggZD0ibTEyLjUgMzdjNS41IDMuNSAxNC41IDMuNSAyMCAwdi03czktNC41IDYtMTAuNWMtNC02LjUtMTMuNS0zLjUtMTYgNHYzLjUtMy41Yy0yLjUtNy41LTEyLTEwLjUtMTYtNC0zIDYgNiAxMC41IDYgMTAuNXY3Ii8+CiAgICA8cGF0aCBkPSJtMTIuNSAzMGM1LjUtMyAxNC41LTMgMjAgMG0tMjAgMy41YzUuNS0zIDE0LjUtMyAyMCAwbS0yMCAzLjVjNS41LTMgMTQuNS0zIDIwIDAiLz4KICAgPC9nPgogIDwvZz4KICA8ZyBmaWxsPSIjZmZmIiBzdHJva2U9IiMwMDAiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCI+CiAgIDxjaXJjbGUgY3g9IjQ3LjMwMyIgY3k9IjI1Ljg5NSIgcj0iNC44OTUiIHN0cm9rZS13aWR0aD0iLjM5NyIvPgogICA8Y2lyY2xlIGN4PSI0Ny4zMDMiIGN5PSIyNS44OTUiIHI9IjMiIHN0cm9rZS13aWR0aD0iLjM5NyIvPgogICA8ZyB0cmFuc2Zvcm09Im1hdHJpeCguMTE1NzYgMCAwIC4xMTU3NiA0NC43NTYgMjMuMDY4KSIgZmlsbC1ydWxlPSJldmVub2RkIiBzdHJva2Utd2lkdGg9IjEuNSI+CiAgICA8cGF0aCBkPSJtMjIuNSAxMS42M3YtNS42M20tMi41IDJoNSIgc3Ryb2tlLWxpbmVqb2luPSJtaXRlciIvPgogICAgPHBhdGggZD0ibTIyLjUgMjVzNC41LTcuNSAzLTEwLjVjMCAwLTEtMi41LTMtMi41cy0zIDIuNS0zIDIuNWMtMS41IDMgMyAxMC41IDMgMTAuNSIgc3Ryb2tlLWxpbmVjYXA9ImJ1dHQiIHN0cm9rZS1saW5lam9pbj0ibWl0ZXIiLz4KICAgIDxwYXRoIGQ9Im0xMi41IDM3YzUuNSAzLjUgMTQuNSAzLjUgMjAgMHYtN3M5LTQuNSA2LTEwLjVjLTQtNi41LTEzLjUtMy41LTE2IDR2My41LTMuNWMtMi41LTcuNS0xMi0xMC41LTE2LTQtMyA2IDYgMTAuNSA2IDEwLjV2NyIvPgogICAgPHBhdGggZD0ibTEyLjUgMzBjNS41LTMgMTQuNS0zIDIwIDBtLTIwIDMuNWM1LjUtMyAxNC41LTMgMjAgMG0tMjAgMy41YzUuNS0zIDE0LjUtMyAyMCAwIi8+CiAgIDwvZz4KICA8L2c+CiA8L2c+Cjwvc3ZnPgo"}),n.push({code:"m",name:"King (Black)",game:"draughts",image:"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPHN2ZyB3aWR0aD0iOS43OW1tIiBoZWlnaHQ9IjkuNzltbSIgdmVyc2lvbj0iMS4xIiB2aWV3Qm94PSIwIDAgOS43OSA5Ljc5IiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOmNjPSJodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy9ucyMiIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4KIDxtZXRhZGF0YT4KICA8cmRmOlJERj4KICAgPGNjOldvcmsgcmRmOmFib3V0PSIiPgogICAgPGRjOmZvcm1hdD5pbWFnZS9zdmcreG1sPC9kYzpmb3JtYXQ+CiAgICA8ZGM6dHlwZSByZGY6cmVzb3VyY2U9Imh0dHA6Ly9wdXJsLm9yZy9kYy9kY21pdHlwZS9TdGlsbEltYWdlIi8+CiAgICA8ZGM6dGl0bGUvPgogICA8L2NjOldvcms+CiAgPC9yZGY6UkRGPgogPC9tZXRhZGF0YT4KIDxnIHRyYW5zZm9ybT0idHJhbnNsYXRlKC00Mi40MDggLTMyLjc4NikiPgogIDxnIGZpbGw9IiNmZmYiIHN0cm9rZT0iIzAwMCIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIiBzdHJva2Utd2lkdGg9Ii4zOTciPgogICA8Y2lyY2xlIGN4PSIzNC44OTUiIGN5PSIyNS44OTUiIHI9IjQuODk1Ii8+CiAgIDxjaXJjbGUgY3g9IjM0Ljg5NSIgY3k9IjI1Ljg5NSIgcj0iMyIvPgogIDwvZz4KICA8Zz4KICAgPGNpcmNsZSBjeD0iMzQuODk1IiBjeT0iMzcuNjgxIiByPSI0Ljg5NSIvPgogICA8Y2lyY2xlIGN4PSIzNC44OTUiIGN5PSIzNy42ODEiIHI9IjMiIHN0cm9rZT0iI2ZmZiIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIiBzdHJva2Utd2lkdGg9Ii4zOTciLz4KICA8L2c+CiAgPGc+CiAgIDxjaXJjbGUgY3g9IjQ3LjMwMyIgY3k9IjM3LjY4MSIgcj0iNC44OTUiLz4KICAgPGNpcmNsZSBjeD0iNDcuMzAzIiBjeT0iMzcuNjgxIiByPSIzIiBzdHJva2U9IiNmZmYiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIgc3Ryb2tlLXdpZHRoPSIuMzk3Ii8+CiAgIDxnIHRyYW5zZm9ybT0ibWF0cml4KC4xMTU3NiAwIDAgLjExNTc2IDQ0LjY5OCAzNS4wNDEpIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIHN0cm9rZT0iI2ZmZiIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIiBzdHJva2Utd2lkdGg9IjEuNSI+CiAgICA8cGF0aCBkPSJtMjIuNSAxMS42M3YtNS42M20tMi41IDJoNSIgc3Ryb2tlLWxpbmVqb2luPSJtaXRlciIvPgogICAgPHBhdGggZD0ibTIyLjUgMjVzNC41LTcuNSAzLTEwLjVjMCAwLTEtMi41LTMtMi41cy0zIDIuNS0zIDIuNWMtMS41IDMgMyAxMC41IDMgMTAuNSIgc3Ryb2tlLWxpbmVjYXA9ImJ1dHQiIHN0cm9rZS1saW5lam9pbj0ibWl0ZXIiLz4KICAgIDxwYXRoIGQ9Im0xMi41IDM3YzUuNSAzLjUgMTQuNSAzLjUgMjAgMHYtN3M5LTQuNSA2LTEwLjVjLTQtNi41LTEzLjUtMy41LTE2IDR2My41LTMuNWMtMi41LTcuNS0xMi0xMC41LTE2LTQtMyA2IDYgMTAuNSA2IDEwLjV2NyIvPgogICAgPHBhdGggZD0ibTEyLjUgMzBjNS41LTMgMTQuNS0zIDIwIDBtLTIwIDMuNWM1LjUtMyAxNC41LTMgMjAgMG0tMjAgMy41YzUuNS0zIDE0LjUtMyAyMCAwIi8+CiAgIDwvZz4KICA8L2c+CiAgPGcgZmlsbD0iI2ZmZiIgc3Ryb2tlPSIjMDAwIiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiPgogICA8Y2lyY2xlIGN4PSI0Ny4zMDMiIGN5PSIyNS44OTUiIHI9IjQuODk1IiBzdHJva2Utd2lkdGg9Ii4zOTciLz4KICAgPGNpcmNsZSBjeD0iNDcuMzAzIiBjeT0iMjUuODk1IiByPSIzIiBzdHJva2Utd2lkdGg9Ii4zOTciLz4KICAgPGcgdHJhbnNmb3JtPSJtYXRyaXgoLjExNTc2IDAgMCAuMTE1NzYgNDQuNzU2IDIzLjA2OCkiIGZpbGwtcnVsZT0iZXZlbm9kZCIgc3Ryb2tlLXdpZHRoPSIxLjUiPgogICAgPHBhdGggZD0ibTIyLjUgMTEuNjN2LTUuNjNtLTIuNSAyaDUiIHN0cm9rZS1saW5lam9pbj0ibWl0ZXIiLz4KICAgIDxwYXRoIGQ9Im0yMi41IDI1czQuNS03LjUgMy0xMC41YzAgMC0xLTIuNS0zLTIuNXMtMyAyLjUtMyAyLjVjLTEuNSAzIDMgMTAuNSAzIDEwLjUiIHN0cm9rZS1saW5lY2FwPSJidXR0IiBzdHJva2UtbGluZWpvaW49Im1pdGVyIi8+CiAgICA8cGF0aCBkPSJtMTIuNSAzN2M1LjUgMy41IDE0LjUgMy41IDIwIDB2LTdzOS00LjUgNi0xMC41Yy00LTYuNS0xMy41LTMuNS0xNiA0djMuNS0zLjVjLTIuNS03LjUtMTItMTAuNS0xNi00LTMgNiA2IDEwLjUgNiAxMC41djciLz4KICAgIDxwYXRoIGQ9Im0xMi41IDMwYzUuNS0zIDE0LjUtMyAyMCAwbS0yMCAzLjVjNS41LTMgMTQuNS0zIDIwIDBtLTIwIDMuNWM1LjUtMyAxNC41LTMgMjAgMCIvPgogICA8L2c+CiAgPC9nPgogPC9nPgo8L3N2Zz4K"}),n.push({code:"D",name:"Man (White)",game:"draughts",image:"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPHN2ZyB3aWR0aD0iMTAuMTg3bW0iIGhlaWdodD0iMTAuMTg3bW0iIHZlcnNpb249IjEuMSIgdmlld0JveD0iMCAwIDEwLjE4NyAxMC4xODciIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6Y2M9Imh0dHA6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnL25zIyIgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPgogPG1ldGFkYXRhPgogIDxyZGY6UkRGPgogICA8Y2M6V29yayByZGY6YWJvdXQ9IiI+CiAgICA8ZGM6Zm9ybWF0PmltYWdlL3N2Zyt4bWw8L2RjOmZvcm1hdD4KICAgIDxkYzp0eXBlIHJkZjpyZXNvdXJjZT0iaHR0cDovL3B1cmwub3JnL2RjL2RjbWl0eXBlL1N0aWxsSW1hZ2UiLz4KICAgIDxkYzp0aXRsZS8+CiAgIDwvY2M6V29yaz4KICA8L3JkZjpSREY+CiA8L21ldGFkYXRhPgogPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoLTI5LjgwMiAtMjAuODAyKSI+CiAgPGcgZmlsbD0iI2ZmZiIgc3Ryb2tlPSIjMDAwIiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiIHN0cm9rZS13aWR0aD0iLjM5NyI+CiAgIDxjaXJjbGUgY3g9IjM0Ljg5NSIgY3k9IjI1Ljg5NSIgcj0iNC44OTUiLz4KICAgPGNpcmNsZSBjeD0iMzQuODk1IiBjeT0iMjUuODk1IiByPSIzIi8+CiAgPC9nPgogIDxnPgogICA8Y2lyY2xlIGN4PSIzNC44OTUiIGN5PSIzNy42ODEiIHI9IjQuODk1Ii8+CiAgIDxjaXJjbGUgY3g9IjM0Ljg5NSIgY3k9IjM3LjY4MSIgcj0iMyIgc3Ryb2tlPSIjZmZmIiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiIHN0cm9rZS13aWR0aD0iLjM5NyIvPgogIDwvZz4KICA8Zz4KICAgPGNpcmNsZSBjeD0iNDcuMzAzIiBjeT0iMzcuNjgxIiByPSI0Ljg5NSIvPgogICA8Y2lyY2xlIGN4PSI0Ny4zMDMiIGN5PSIzNy42ODEiIHI9IjMiIHN0cm9rZT0iI2ZmZiIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIiBzdHJva2Utd2lkdGg9Ii4zOTciLz4KICAgPGcgdHJhbnNmb3JtPSJtYXRyaXgoLjExNTc2IDAgMCAuMTE1NzYgNDQuNjk4IDM1LjA0MSkiIGZpbGwtcnVsZT0iZXZlbm9kZCIgc3Ryb2tlPSIjZmZmIiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiIHN0cm9rZS13aWR0aD0iMS41Ij4KICAgIDxwYXRoIGQ9Im0yMi41IDExLjYzdi01LjYzbS0yLjUgMmg1IiBzdHJva2UtbGluZWpvaW49Im1pdGVyIi8+CiAgICA8cGF0aCBkPSJtMjIuNSAyNXM0LjUtNy41IDMtMTAuNWMwIDAtMS0yLjUtMy0yLjVzLTMgMi41LTMgMi41Yy0xLjUgMyAzIDEwLjUgMyAxMC41IiBzdHJva2UtbGluZWNhcD0iYnV0dCIgc3Ryb2tlLWxpbmVqb2luPSJtaXRlciIvPgogICAgPHBhdGggZD0ibTEyLjUgMzdjNS41IDMuNSAxNC41IDMuNSAyMCAwdi03czktNC41IDYtMTAuNWMtNC02LjUtMTMuNS0zLjUtMTYgNHYzLjUtMy41Yy0yLjUtNy41LTEyLTEwLjUtMTYtNC0zIDYgNiAxMC41IDYgMTAuNXY3Ii8+CiAgICA8cGF0aCBkPSJtMTIuNSAzMGM1LjUtMyAxNC41LTMgMjAgMG0tMjAgMy41YzUuNS0zIDE0LjUtMyAyMCAwbS0yMCAzLjVjNS41LTMgMTQuNS0zIDIwIDAiLz4KICAgPC9nPgogIDwvZz4KICA8ZyBmaWxsPSIjZmZmIiBzdHJva2U9IiMwMDAiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCI+CiAgIDxjaXJjbGUgY3g9IjQ3LjMwMyIgY3k9IjI1Ljg5NSIgcj0iNC44OTUiIHN0cm9rZS13aWR0aD0iLjM5NyIvPgogICA8Y2lyY2xlIGN4PSI0Ny4zMDMiIGN5PSIyNS44OTUiIHI9IjMiIHN0cm9rZS13aWR0aD0iLjM5NyIvPgogICA8ZyB0cmFuc2Zvcm09Im1hdHJpeCguMTE1NzYgMCAwIC4xMTU3NiA0NC43NTYgMjMuMDY4KSIgZmlsbC1ydWxlPSJldmVub2RkIiBzdHJva2Utd2lkdGg9IjEuNSI+CiAgICA8cGF0aCBkPSJtMjIuNSAxMS42M3YtNS42M20tMi41IDJoNSIgc3Ryb2tlLWxpbmVqb2luPSJtaXRlciIvPgogICAgPHBhdGggZD0ibTIyLjUgMjVzNC41LTcuNSAzLTEwLjVjMCAwLTEtMi41LTMtMi41cy0zIDIuNS0zIDIuNWMtMS41IDMgMyAxMC41IDMgMTAuNSIgc3Ryb2tlLWxpbmVjYXA9ImJ1dHQiIHN0cm9rZS1saW5lam9pbj0ibWl0ZXIiLz4KICAgIDxwYXRoIGQ9Im0xMi41IDM3YzUuNSAzLjUgMTQuNSAzLjUgMjAgMHYtN3M5LTQuNSA2LTEwLjVjLTQtNi41LTEzLjUtMy41LTE2IDR2My41LTMuNWMtMi41LTcuNS0xMi0xMC41LTE2LTQtMyA2IDYgMTAuNSA2IDEwLjV2NyIvPgogICAgPHBhdGggZD0ibTEyLjUgMzBjNS41LTMgMTQuNS0zIDIwIDBtLTIwIDMuNWM1LjUtMyAxNC41LTMgMjAgMG0tMjAgMy41YzUuNS0zIDE0LjUtMyAyMCAwIi8+CiAgIDwvZz4KICA8L2c+CiA8L2c+Cjwvc3ZnPgo="}),n.push({code:"M",name:"King (White)",game:"draughts",image:"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPHN2ZyB3aWR0aD0iMTAuMTg3bW0iIGhlaWdodD0iMTAuMTg3bW0iIHZlcnNpb249IjEuMSIgdmlld0JveD0iMCAwIDEwLjE4NyAxMC4xODciIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6Y2M9Imh0dHA6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnL25zIyIgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPgogPG1ldGFkYXRhPgogIDxyZGY6UkRGPgogICA8Y2M6V29yayByZGY6YWJvdXQ9IiI+CiAgICA8ZGM6Zm9ybWF0PmltYWdlL3N2Zyt4bWw8L2RjOmZvcm1hdD4KICAgIDxkYzp0eXBlIHJkZjpyZXNvdXJjZT0iaHR0cDovL3B1cmwub3JnL2RjL2RjbWl0eXBlL1N0aWxsSW1hZ2UiLz4KICAgIDxkYzp0aXRsZS8+CiAgIDwvY2M6V29yaz4KICA8L3JkZjpSREY+CiA8L21ldGFkYXRhPgogPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoLTQyLjIwOSAtMjAuODAyKSI+CiAgPGcgZmlsbD0iI2ZmZiIgc3Ryb2tlPSIjMDAwIiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiIHN0cm9rZS13aWR0aD0iLjM5NyI+CiAgIDxjaXJjbGUgY3g9IjM0Ljg5NSIgY3k9IjI1Ljg5NSIgcj0iNC44OTUiLz4KICAgPGNpcmNsZSBjeD0iMzQuODk1IiBjeT0iMjUuODk1IiByPSIzIi8+CiAgPC9nPgogIDxnPgogICA8Y2lyY2xlIGN4PSIzNC44OTUiIGN5PSIzNy42ODEiIHI9IjQuODk1Ii8+CiAgIDxjaXJjbGUgY3g9IjM0Ljg5NSIgY3k9IjM3LjY4MSIgcj0iMyIgc3Ryb2tlPSIjZmZmIiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiIHN0cm9rZS13aWR0aD0iLjM5NyIvPgogIDwvZz4KICA8Zz4KICAgPGNpcmNsZSBjeD0iNDcuMzAzIiBjeT0iMzcuNjgxIiByPSI0Ljg5NSIvPgogICA8Y2lyY2xlIGN4PSI0Ny4zMDMiIGN5PSIzNy42ODEiIHI9IjMiIHN0cm9rZT0iI2ZmZiIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIiBzdHJva2Utd2lkdGg9Ii4zOTciLz4KICAgPGcgdHJhbnNmb3JtPSJtYXRyaXgoLjExNTc2IDAgMCAuMTE1NzYgNDQuNjk4IDM1LjA0MSkiIGZpbGwtcnVsZT0iZXZlbm9kZCIgc3Ryb2tlPSIjZmZmIiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiIHN0cm9rZS13aWR0aD0iMS41Ij4KICAgIDxwYXRoIGQ9Im0yMi41IDExLjYzdi01LjYzbS0yLjUgMmg1IiBzdHJva2UtbGluZWpvaW49Im1pdGVyIi8+CiAgICA8cGF0aCBkPSJtMjIuNSAyNXM0LjUtNy41IDMtMTAuNWMwIDAtMS0yLjUtMy0yLjVzLTMgMi41LTMgMi41Yy0xLjUgMyAzIDEwLjUgMyAxMC41IiBzdHJva2UtbGluZWNhcD0iYnV0dCIgc3Ryb2tlLWxpbmVqb2luPSJtaXRlciIvPgogICAgPHBhdGggZD0ibTEyLjUgMzdjNS41IDMuNSAxNC41IDMuNSAyMCAwdi03czktNC41IDYtMTAuNWMtNC02LjUtMTMuNS0zLjUtMTYgNHYzLjUtMy41Yy0yLjUtNy41LTEyLTEwLjUtMTYtNC0zIDYgNiAxMC41IDYgMTAuNXY3Ii8+CiAgICA8cGF0aCBkPSJtMTIuNSAzMGM1LjUtMyAxNC41LTMgMjAgMG0tMjAgMy41YzUuNS0zIDE0LjUtMyAyMCAwbS0yMCAzLjVjNS41LTMgMTQuNS0zIDIwIDAiLz4KICAgPC9nPgogIDwvZz4KICA8ZyBmaWxsPSIjZmZmIiBzdHJva2U9IiMwMDAiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCI+CiAgIDxjaXJjbGUgY3g9IjQ3LjMwMyIgY3k9IjI1Ljg5NSIgcj0iNC44OTUiIHN0cm9rZS13aWR0aD0iLjM5NyIvPgogICA8Y2lyY2xlIGN4PSI0Ny4zMDMiIGN5PSIyNS44OTUiIHI9IjMiIHN0cm9rZS13aWR0aD0iLjM5NyIvPgogICA8ZyB0cmFuc2Zvcm09Im1hdHJpeCguMTE1NzYgMCAwIC4xMTU3NiA0NC43NTYgMjMuMDY4KSIgZmlsbC1ydWxlPSJldmVub2RkIiBzdHJva2Utd2lkdGg9IjEuNSI+CiAgICA8cGF0aCBkPSJtMjIuNSAxMS42M3YtNS42M20tMi41IDJoNSIgc3Ryb2tlLWxpbmVqb2luPSJtaXRlciIvPgogICAgPHBhdGggZD0ibTIyLjUgMjVzNC41LTcuNSAzLTEwLjVjMCAwLTEtMi41LTMtMi41cy0zIDIuNS0zIDIuNWMtMS41IDMgMyAxMC41IDMgMTAuNSIgc3Ryb2tlLWxpbmVjYXA9ImJ1dHQiIHN0cm9rZS1saW5lam9pbj0ibWl0ZXIiLz4KICAgIDxwYXRoIGQ9Im0xMi41IDM3YzUuNSAzLjUgMTQuNSAzLjUgMjAgMHYtN3M5LTQuNSA2LTEwLjVjLTQtNi41LTEzLjUtMy41LTE2IDR2My41LTMuNWMtMi41LTcuNS0xMi0xMC41LTE2LTQtMyA2IDYgMTAuNSA2IDEwLjV2NyIvPgogICAgPHBhdGggZD0ibTEyLjUgMzBjNS41LTMgMTQuNS0zIDIwIDBtLTIwIDMuNWM1LjUtMyAxNC41LTMgMjAgMG0tMjAgMy41YzUuNS0zIDE0LjUtMyAyMCAwIi8+CiAgIDwvZz4KICA8L2c+CiA8L2c+Cjwvc3ZnPgo="});var o=n;t["default"]=o},86489:function(e,t,n){"use strict";t.__esModule=!0,t.fetchPalettes=t.palettes=t.fetchPieces=t.codeRecordFromPieces=t.getPiecesByGame=t.getPiece=t.pushPieces=void 0;var o=n(8250),r=[];o.kits.forEach((function(e){r.push.apply(r,e.pieces)}));t.pushPieces=function(e){return r.push.apply(r,e)};t.getPiece=function(e,t){return r.find((function(n){return n.code===e&&n.game===t}))};t.getPiecesByGame=function(e){return r.filter((function(t){return t.game===e}))};t.codeRecordFromPieces=function(e){return e.reduce((function(e,t){return e[t.code]=t,e}),{})};t.fetchPieces=function(){return r};var a=[];t.palettes=a,o.kits.forEach((function(e){a.push.apply(a,e.palettes)}));t.fetchPalettes=function(){return a}},8250:function(e,t,n){"use strict";t.__esModule=!0,t.kits=void 0;var o=a(n(95102)),r=a(n(85867));function a(e){return e&&e.__esModule?e:{"default":e}}var i=[o["default"],r["default"]];t.kits=i},10522:function(e,t,n){"use strict";t.__esModule=!0,t.Boardgame=void 0;var o=n(96323),r=n(2381),a=n(31246),i=n(44135),c=n(26949),l=n(65844),u=n(15237),d=n(68035),s=n(25540);function p(e,t){return p=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e},p(e,t)}var m=function(e){var t,n;function c(t){return e.call(this,t)||this}n=e,(t=c).prototype=Object.create(n.prototype),t.prototype.constructor=t,p(t,n);var l=c.prototype;return l.componentDidUpdate=function(){(0,i.handleEvents)(this.context),(0,i.adjustSizes)(this.context)},l.render=function(){var e,t=(0,a.useBackend)(this.context).data,n=(null==t||null==(e=t.boardInfo)?void 0:e.name)||"Boardgame";return(0,o.createComponentVNode)(2,r.Window,{title:n,width:580,height:512,children:[(0,o.createComponentVNode)(2,f),(0,o.createComponentVNode)(2,u.TitleBar),(0,o.createComponentVNode)(2,d.HeldPieceRenderer),(0,o.createComponentVNode)(2,s.BoardgameContents)]})},c}(o.Component);t.Boardgame=m;var f=function(e,t){var n=(0,l.useStates)(t),r=n.helpModalClose;return n.isHelpModalOpen?(0,o.createComponentVNode)(2,c.Dimmer,{className:"boardgame__helpmodal",onClick:r,children:(0,o.createComponentVNode)(2,c.Box,{children:[(0,o.createVNode)(1,"p",null,(0,o.createVNode)(1,"strong",null,"Help",16),2),(0,o.createVNode)(1,"p",null,[(0,o.createComponentVNode)(2,c.Icon,{name:"mouse"}),(0,o.createTextVNode)(" Click on a piece to select it, click on a tile to move it there.")],4),(0,o.createVNode)(1,"p",null,"Pieces may also be click-dragged to a target tile.",16),(0,o.createVNode)(1,"p",null,"Moving a piece onto a tile occupied by another piece will replace/capture the piece already on that tile.",16),(0,o.createVNode)(1,"p",null,"Right click a piece to delete it.",16)]})}):null}},65844:function(e,t,n){"use strict";t.__esModule=!0,t.generateBoardNotationLetters=t.numToBoardNotation=t.PalleteExpandType=t.SizeType=t.XYType=t.TileSizeType=t.UserDataType=t.PieceDataType=t.BoardgameData=t.StylingType=t.BoardInfoType=t.useStates=t.useActions=void 0;var o=n(51887);t.useActions=o.useActions;var r=n(31463);t.useStates=r.useStates;var a=n(76434);t.BoardInfoType=a.BoardInfoType,t.StylingType=a.StylingType,t.BoardgameData=a.BoardgameData,t.PieceDataType=a.PieceDataType,t.UserDataType=a.UserDataType,t.TileSizeType=a.TileSizeType,t.XYType=a.XYType,t.SizeType=a.SizeType,t.PalleteExpandType=a.PalleteExpandType;var i=n(43785);t.numToBoardNotation=i.numToBoardNotation,t.generateBoardNotationLetters=i.generateBoardNotationLetters},43785:function(e,t){"use strict";t.__esModule=!0,t.generateBoardNotationLetters=t.numToBoardNotation=void 0;var n=function(e){for(var t="",n=e;n>=0;){var o=n%26;t=String.fromCharCode(65+o)+t,n=Math.floor(n/26)-1}return t};t.numToBoardNotation=n;t.generateBoardNotationLetters=function(e,t){for(var o=[],r=0;r<e;r++)t?o.push(n(e-r)):o.push(n(r));return o}},76434:function(){},51887:function(e,t){"use strict";t.__esModule=!0,t.useActions=void 0;t.useActions=function(e){return{pieceCreate:function(t,n,o){e("pieceCreate",{code:t,x:n,y:o})},pieceRemove:function(t){e("pieceRemove",{piece:t})},pieceRemoveHeld:function(t){e("pieceRemoveHeld",{ckey:t})},pieceSelect:function(t,n){e("pieceSelect",{ckey:t,piece:n})},pieceDeselect:function(t){e("pieceDeselect",{ckey:t})},piecePlace:function(t,n,o){e("piecePlace",{ckey:t,x:n,y:o})},applyGNot:function(t){e("applyGNot",{gnot:t})},paletteSet:function(t,n){e("paletteSet",{ckey:t,code:n})},paletteClear:function(t){e("paletteClear",{ckey:t})},boardClear:function(){e("applyGNot",{gnot:""})}}}},31463:function(e,t,n){"use strict";t.__esModule=!0,t.useStates=t.STATES=t.DEFAULT_STATES=void 0;var o=n(31246),r={FLIP:!1,ZOOM:1,MOUSE_COORDS:{x:0,y:0}};t.DEFAULT_STATES=r;var a=function(e){return{flip:(0,o.useLocalState)(e,"flip",r.FLIP),zoom:(0,o.useLocalState)(e,"zoom",r.ZOOM),mouseCoords:(0,o.useLocalState)(e,"mouseCoords",r.MOUSE_COORDS),palettesExpanded:(0,o.useLocalState)(e,"palettesExpanded",{}),paletteLastElement:(0,o.useLocalState)(e,"paletteLastElement",null),tileSize:(0,o.useLocalState)(e,"tileSize",{width:0,height:0}),helpModalOpen:(0,o.useLocalState)(e,"helpModalOpen",!1)}};t.STATES=a;t.useStates=function(e){var t=a(e);return{paletteLastElementSet:function(e){(0,t.paletteLastElement[1])(e)},paletteLastElement:t.paletteLastElement[0],mouseCoordsSet:function(e){(0,t.mouseCoords[1])({x:e.x,y:e.y})},mouseCoords:t.mouseCoords[0],toggleFlip:function(){var e=t.flip,n=e[0];(0,e[1])(!n)},isFlipped:t.flip[0],helpModalClose:function(){(0,t.helpModalOpen[1])(!1)},helpModalOpen:function(){(0,t.helpModalOpen[1])(!0)},isHelpModalOpen:t.helpModalOpen[0],expandPalette:function(e){var n;(0,t.palettesExpanded[1])(Object.assign({},t.palettesExpanded[0],((n={})[e]=!0,n)))},togglePalette:function(e){var n;(0,t.palettesExpanded[1])(Object.assign({},t.palettesExpanded[0],((n={})[e]=!t.palettesExpanded[0][e],n)))},isExpanded:function(e){return!!t.palettesExpanded[0][e]},setTileSizeType:function(e){(0,t.tileSize[1])(e)},tileSize:t.tileSize[0]}}},44135:function(e,t,n){"use strict";t.__esModule=!0,t.handleEvents=t.adjustSizes=void 0;var o=n(31246),r=n(65844);t.adjustSizes=function(e){a(e),i(e)};var a=function(e){var t=(0,o.useBackend)(e).data,n=(0,r.useStates)(e),a=n.setTileSizeType,i=n.tileSize,c=document.getElementsByClassName("boardgame__board-inner")[0],l=0,u=0;if(c){var d=c.getBoundingClientRect(),s=d.width-40,p=d.height-40;l=s/t.boardInfo.width,u=p/t.boardInfo.height}l===i.width&&u===i.height||a({width:l,height:u})},i=function(e){var t=(0,o.useBackend)(e).data.styling.aspectRatio,n=500,r=400,a=document.getElementsByClassName("boardgame__window")[0];if(a){var i=a.getBoundingClientRect(),c=i.width,l=i.height;if(c===n&&l===r)return;var u=c<l?c:l;n=u+100,r=u+32.25,t&&(n=u*t+100,r=u+32.25)}Byond.winset(window.__windowId__,{size:n+"x"+r})};t.handleEvents=function(e){var t=(0,o.useBackend)(e),n=t.act,a=t.data,i=(0,r.useActions)(n),c=i.paletteClear,l=i.pieceDeselect;document.body.oncontextmenu=function(e){var t,n;(e.preventDefault(),2===e.button)&&(null!=(t=a.currentUser)&&t.palette&&c(a.currentUser.ckey),null!=(n=a.currentUser)&&n.selected&&l(a.currentUser.ckey));return!1},document.body.onmouseleave=function(){var e;null!=(e=a.currentUser)&&e.palette&&c(a.currentUser.ckey)}}},15094:function(e,t,n){"use strict";t.__esModule=!0,t.BugReportForm=t.InputTitle=t.Textarea=void 0;var o=n(96323),r=n(31246),a=n(26949),i=n(25808),c=n(2381),l=function(e,t){return(0,o.createVNode)(128,"textarea",null,e.defaultText,0,{rows:4,style:{"overflow-y":"hidden",width:"100%","background-color":"black",border:"solid 1px #6992c2",color:"white"},onInput:function(e){e.target.style.height="auto",e.target.style.height=e.target.scrollHeight+"px"},id:e.id,placeholder:e.placeholder})};t.Textarea=l;var u=function(e,t){return(0,o.createVNode)(1,"h2",null,[e.children,e.required&&(0,o.createVNode)(1,"span",null," *",0,{style:{color:"red"}})],0)};t.InputTitle=u;t.BugReportForm=function(e,t){var n=(0,r.useBackend)(t),d=n.act,s=(n.data,(0,r.useLocalState)(t,"is_secret",!1)),p=s[0],m=s[1],f=(0,r.useLocalState)(t,"tag","MINOR"),h=f[0],g=f[1];return(0,o.createComponentVNode)(2,c.Window,{title:"Bug Report Form",width:600,height:700,children:(0,o.createComponentVNode)(2,c.Window.Content,{children:(0,o.createComponentVNode)(2,a.Section,{fill:!0,scrollable:!0,children:(0,o.createComponentVNode)(2,a.Flex,{direction:"column",height:"100%",children:[(0,o.createComponentVNode)(2,a.Flex.Item,{style:{"text-align":"center"},children:(0,o.createVNode)(1,"a",null,"If you have a GitHub account click here instead",16,{href:"https://github.com/goonstation/goonstation/issues/new?assignees=&labels=&template=bug_report.yml",target:"_blank",rel:"noreferrer",style:{color:"#6992c2"}})}),(0,o.createComponentVNode)(2,a.Flex.Item,{children:[(0,o.createComponentVNode)(2,u,{required:!0,children:"Title"}),(0,o.createComponentVNode)(2,a.Input,{width:"100%",id:"title"})]}),(0,o.createComponentVNode)(2,a.Flex.Item,{my:2,children:[(0,o.createVNode)(1,"h2",null,"Tags",0),[["Trivial","TRIVIAL","A bug that is extremely trivial, such as a spelling issue."],["Minor","MINOR","A bug that does not impact usage of a feature. These are often visual issues."],["Major","MAJOR","A bug that significantly impacts the usage of a feature."],["Critical","CRITICAL","A bug that significantly impacts the progression of the round."]].map((function(e){return(0,o.createComponentVNode)(2,i.ButtonCheckbox,{checked:e[1]===h,onClick:function(){return g(e[1])},tooltip:e[2],tooltipPosition:"bottom",children:e[0]},e[1])}))]}),(0,o.createComponentVNode)(2,a.Flex.Item,{my:2,children:[(0,o.createComponentVNode)(2,u,{required:!0,children:"Description"}),"Give a short description of the bug",(0,o.createComponentVNode)(2,a.Input,{width:"100%",id:"description"})]}),(0,o.createComponentVNode)(2,a.Flex.Item,{my:2,children:[(0,o.createComponentVNode)(2,u,{required:!0,children:"Steps To Reproduce"}),"Give a list of steps to reproduce this issue",(0,o.createComponentVNode)(2,l,{id:"steps",placeholder:"1.\n2.\n3."})]}),(0,o.createComponentVNode)(2,a.Flex.Item,{my:2,children:[(0,o.createComponentVNode)(2,u,{required:!0,children:"Expected Behavior"}),"Give a short description of what you expected to happen",(0,o.createComponentVNode)(2,a.Input,{width:"100%",id:"expected_behavior"})]}),(0,o.createComponentVNode)(2,a.Flex.Item,{my:2,children:[(0,o.createVNode)(1,"h2",null,"Additional Information & Screenshots",0),"Add screenshots and any other information here",(0,o.createComponentVNode)(2,l,{id:"additional"})]}),(0,o.createComponentVNode)(2,a.Flex.Item,{my:2,children:[(0,o.createVNode)(1,"h2",null,"Is this bug an exploit or related to secret content?",0),(0,o.createComponentVNode)(2,i.ButtonCheckbox,{checked:p,onClick:function(){m(!p)},children:"Exploit / Secret"})]}),(0,o.createComponentVNode)(2,a.Flex.Item,{my:2,children:(0,o.createComponentVNode)(2,a.Flex,{style:{"justify-content":"center"},children:[(0,o.createComponentVNode)(2,a.Flex.Item,{mx:1,children:(0,o.createVNode)(1,"div","Button Button--color--default","Submit",0,{onClick:function(){var e={};e.secret=p,e.tags=[h],e.steps=document.getElementById("steps").value,e.additional=document.getElementById("additional").value,e.title=document.getElementById("title").getElementsByTagName("input")[0].value,e.description=document.getElementById("description").getElementsByTagName("input")[0].value,e.expected_behavior=document.getElementById("expected_behavior").getElementsByTagName("input")[0].value,e.title&&e.description&&e.expected_behavior&&e.steps?d("confirm",e):alert("Please fill out all required fields!")}})}),(0,o.createComponentVNode)(2,a.Flex.Item,{mx:1,children:(0,o.createVNode)(1,"div","Button Button--color--default","Cancel",0,{onClick:function(){return d("cancel")}})})]})})]})})})})}},65101:function(e,t,n){"use strict";t.__esModule=!0,t.CAViewer=void 0;var o=n(96323),r=n(31246),a=n(26949),i=n(2381);t.CAViewer=function(e,t){var n=(0,r.useBackend)(t),c=n.act,l=n.data,u=l.CAType,d=l.CAData,s=(l.viewWidth,l.typeData),p=l.settings;return(0,o.createComponentVNode)(2,i.Window,{title:"Cellular Automata Viewer",width:900,height:800,children:(0,o.createComponentVNode)(2,i.Window.Content,{scrollable:!0,children:(0,o.createComponentVNode)(2,a.Section,{title:(0,o.createComponentVNode)(2,a.Box,{inline:!0,children:u}),buttons:(0,o.createComponentVNode)(2,a.Dropdown,{displayText:"CA Type",width:20,options:Object.keys(s),onSelected:function(e){return c("set_ca",{name:"default",priority:10,type:e})}}),children:[(0,o.createComponentVNode)(2,a.Flex,{direction:"row",children:[(0,o.createComponentVNode)(2,a.Flex.Item,{ml:2}),(0,o.createComponentVNode)(2,a.Flex.Item,{ml:1,children:(0,o.createComponentVNode)(2,a.Section,{title:"Description",children:"Description Goes here?"})}),(0,o.createComponentVNode)(2,a.Flex.Item,{ml:4}),u&&s[u].options&&Object.keys(s[u].options).length?Object.keys(s[u].options).map((function(e,t){return(0,o.createComponentVNode)(2,a.Section,{title:s[u].options[e],children:(0,o.createComponentVNode)(2,a.NumberInput,{value:p[s[u].options[e]],minValue:0,maxValue:500,stepPixelSize:5,width:"39px",onDrag:function(t,n){return c("settings",{name:s[u].options[e],data:n})}})},t)})):""]}),(0,o.createComponentVNode)(2,a.Box,{m:1,children:(0,o.createComponentVNode)(2,a.Button,{fluid:!0,onClick:function(){return c("generate")},children:"Generate"})}),(0,o.createComponentVNode)(2,a.Section,{children:(0,o.createComponentVNode)(2,a.Box,{preserveWhitespace:!0,fontFamily:"Consolas",children:d.replace(/0/g,"-").replace(/(.{100})/g,"$1\n")})})]})})})}},57399:function(e,t,n){"use strict";t.__esModule=!0,t.Cashreg=void 0;var o=n(96323),r=n(1060),a=n(31246),i=n(26949),c=n(2381);t.Cashreg=function(e,t){var n=(0,a.useBackend)(t),r=n.act,u=n.data,d=u.active_transaction,s=u.amount,p=u.is_authorised,m=u.is_owner,f=u.name,h=u.owner,g=u.tip_proportion;return(0,o.createComponentVNode)(2,c.Window,{title:f,theme:"ntos",height:240,width:300,children:(0,o.createComponentVNode)(2,c.Window.Content,{children:(0,o.createComponentVNode)(2,i.Stack,{vertical:!0,fill:!0,children:[(0,o.createComponentVNode)(2,i.Stack.Item,{children:(0,o.createComponentVNode)(2,i.Button,{className:"cashreg__ownerbutton",color:"blue",disabled:d,onClick:h?(p||m)&&function(){return r("reset")}:function(){return r("swipe_owner")},tooltip:h&&(p||m)&&"Click to remove ownership",width:"100%",children:h?"Owner: "+h:"Swipe ID to own"})}),(0,o.createComponentVNode)(2,i.Stack.Item,{grow:!0,children:m?(0,o.createComponentVNode)(2,i.Tooltip,{content:s?"Click to clear transaction":"Click to set price",children:(0,o.createComponentVNode)(2,l)}):(0,o.createComponentVNode)(2,l)}),h&&(0,o.createComponentVNode)(2,i.Stack.Item,{children:(0,o.createComponentVNode)(2,i.Stack,{fill:!0,children:[(0,o.createComponentVNode)(2,i.Stack.Item,{grow:!0,children:(0,o.createComponentVNode)(2,i.Button,{align:"center",className:"cashreg__tip",color:"blue",disabled:!s||d,onClick:function(){return r("set_tip")},width:"100%",children:"Tip: "+100*g+"%"})}),(0,o.createComponentVNode)(2,i.Stack.Item,{grow:!0,children:(0,o.createComponentVNode)(2,i.Button,{align:"center",className:"cashreg__pay",color:"blue",disabled:!s||d,onClick:function(){return r("swipe_payer")},width:"100%",children:"Swipe ID to pay"})})]})})]})})})};var l=function(e,t){var n=(0,a.useBackend)(t),c=n.act,l=n.data,u=l.amount,d=l.is_owner,s=l.owner,p=l.tip_amount,m=l.tip_proportion,f=l.total;return(0,o.createComponentVNode)(2,i.Stack,{fill:!0,vertical:!0,align:"center",justify:"space-around",className:(0,r.classes)(["cashreg__centerpart",s&&d&&"cashreg__amount"]),onClick:s&&d&&(u?function(){return c("clear_transaction")}:function(){return c("set_amount")}),children:s?u?(0,o.createVNode)(1,"table","cashreg__table",(0,o.createVNode)(1,"tbody",null,[(0,o.createVNode)(1,"tr",null,[(0,o.createVNode)(1,"td",null,"Amount",0),(0,o.createVNode)(1,"td","cashreg__table_cellright",u+"\u2abd",0)],4),!!m&&(0,o.createFragment)([(0,o.createVNode)(1,"tr",null,[(0,o.createVNode)(1,"td",null,"Tip (%)",0),(0,o.createVNode)(1,"td","cashreg__table_cellright",100*m+"%",0)],4),(0,o.createVNode)(1,"tr",null,[(0,o.createVNode)(1,"td",null,"Tip (\u2abd)",0),(0,o.createVNode)(1,"td","cashreg__table_cellright",p+"\u2abd",0)],4)],4),(0,o.createVNode)(1,"tr",null,[(0,o.createVNode)(1,"td",null,"Total",0),(0,o.createVNode)(1,"td","cashreg__table_cellright",f+"\u2abd",0)],4)],0),2):(0,o.createComponentVNode)(2,i.Stack.Item,{align:"center",children:d?"Enter amount":"Owner must enter amount"}):(0,o.createComponentVNode)(2,i.Stack.Item,{align:"center",children:"Please register owner"})})}},48341:function(e,t,n){"use strict";t.__esModule=!0,t.CentComViewer=void 0;var o=n(96323),r=n(31246),a=n(26949),i=n(2381);function c(e,t){var n="undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(n)return(n=n.call(e)).next.bind(n);if(Array.isArray(e)||(n=function(e,t){if(!e)return;if("string"==typeof e)return l(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);"Object"===n&&e.constructor&&(n=e.constructor.name);if("Map"===n||"Set"===n)return Array.from(e);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return l(e,t)}(e))||t&&e&&"number"==typeof e.length){n&&(e=n);var o=0;return function(){return o>=e.length?{done:!0}:{done:!1,value:e[o++]}}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}function l(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,o=new Array(t);n<t;n++)o[n]=e[n];return o}var u=function(e,t){for(var n,o=36e5,r=864e5,a=[{interval:1e3,label:"second"},{interval:6e4,label:"minute"},{interval:o,label:"hour"},{interval:r,label:"day"},{interval:2592e6,label:"month"},{interval:31536e6,label:"year"}],i=new Date(t)-new Date(e),l=c(a.reverse());!(n=l()).done;){var u=n.value,d=u.interval,s=u.label;if(i>=d){var p=Number((i/d).toFixed(2));return p+" "+s+(1===p?"":"s")}}return"Permanent"},d=function(e){var t=e.ban,n=t.bannedOn,r=t.expires,i=t.jobs,c=t.reason,l=t.sourceName,d=t.type,s=t.unbannedBy,p=new Date(r)<new Date,m="";return t.active&&!p?m="Banned":!s&&p?m="Expired":s&&(m="Unbanned"),(0,o.createComponentVNode)(2,a.Section,{title:d+" Ban | "+l,children:(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Banned",children:new Date(n).toLocaleString("en-US",{year:"numeric",month:"long",day:"2-digit",hour:"2-digit",minute:"2-digit",second:"2-digit"})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Length",children:u(n,r)}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Reason",children:c}),i&&(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Jobs",children:i.join(", ")}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Status",color:"Banned"===m?"bad":"Expired"===m?"average":"good",children:m})]})})},s=function(e){var t=e.banData,n=e.filterInactive?t.filter((function(e){return e.active})):t;return(0,o.createComponentVNode)(2,a.Stack,{fill:!0,vertical:!0,children:n.map((function(e,t){return(0,o.createComponentVNode)(2,a.Stack.Item,{children:(0,o.createComponentVNode)(2,d,{ban:e})},t)}))})},p=function(e,t){var n=(0,r.useBackend)(t).data,a=n.banData,i=n.filterInactive;return(0,o.createComponentVNode)(2,s,{banData:a,filterInactive:i})};t.CentComViewer=function(e,t){var n=(0,r.useBackend)(t),c=n.act,l=n.data,u=l.key,d=l.filterInactive;return(0,o.createComponentVNode)(2,i.Window,{title:"CentCom Viewer",width:"650",height:"500",children:(0,o.createComponentVNode)(2,i.Window.Content,{children:(0,o.createComponentVNode)(2,a.Stack,{fill:!0,vertical:!0,children:[(0,o.createComponentVNode)(2,a.Stack.Item,{children:(0,o.createComponentVNode)(2,a.Section,{title:(0,o.createFragment)(["Ban Data for ",(0,o.createComponentVNode)(2,a.Input,{width:"50vw",value:u,onChange:function(e,t){return c("updateKey",{value:t})}})],0),buttons:(0,o.createComponentVNode)(2,a.Button.Checkbox,{checked:d,onClick:function(){return c("toggle-filterInactive")},children:"Filter Inactive"})})}),(0,o.createComponentVNode)(2,a.Stack.Item,{grow:!0,children:(0,o.createComponentVNode)(2,a.Section,{scrollable:!0,fill:!0,children:(0,o.createComponentVNode)(2,a.Stack,{vertical:!0,children:(0,o.createComponentVNode)(2,p)})})})]})})})}},96074:function(e,t,n){"use strict";t.__esModule=!0,t.CharacterTab=void 0;var o=n(96323),r=n(31246),a=n(26949),i=function(e,t){var n=e.id,i=e.color,c=e.style,l=(0,r.useBackend)(t),u=l.act;l.data;return(0,o.createFragment)([(0,o.createComponentVNode)(2,a.ColorButton,{color:i,onClick:function(){return u("update-detail-color",{id:n})}}),(0,o.createComponentVNode)(2,a.Button,{icon:"chevron-left",onClick:function(){return u("update-detail-style-cycle",{id:n,direction:-1})}}),(0,o.createComponentVNode)(2,a.Button,{icon:"chevron-right",onClick:function(){return u("update-detail-style-cycle",{id:n,direction:1})}}),(0,o.createComponentVNode)(2,a.Button,{onClick:function(){return u("update-detail-style",{id:n})},children:c})],4)},c=function(e,t){var n=e.slot_id,i=(0,r.useBackend)(t),c=i.act,l=i.data;return(0,o.createComponentVNode)(2,a.Button,{onClick:function(){return c("pick_part",{slot_id:n})},tooltip:l.partsData[n].name,children:(0,o.createComponentVNode)(2,a.Image,{pixelated:!0,width:"64px",height:"64px",src:"data:image/png;base64,"+l.partsData[n].img,backgroundColor:"transparent"})})};t.CharacterTab=function(e,t){var n=(0,r.useBackend)(t),l=n.act,u=n.data;return(0,o.createFragment)([(0,o.createComponentVNode)(2,a.Section,{title:"Appearance",buttons:(0,o.createComponentVNode)(2,a.Button.Checkbox,{checked:u.randomAppearance,onClick:function(){return l("update-randomAppearance")},children:"Random appearance"}),children:(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Skin Tone",children:[(0,o.createComponentVNode)(2,a.ColorButton,{color:u.skinTone,onClick:function(){return l("update-skinTone")}}),(0,o.createComponentVNode)(2,a.Button,{icon:"angle-double-left",onClick:function(){return l("decrease-skinTone",{alot:1})}}),(0,o.createComponentVNode)(2,a.Button,{icon:"chevron-left",onClick:function(){return l("decrease-skinTone")}}),(0,o.createComponentVNode)(2,a.Button,{icon:"chevron-right",onClick:function(){return l("increase-skinTone")}}),(0,o.createComponentVNode)(2,a.Button,{icon:"angle-double-right",onClick:function(){return l("increase-skinTone",{alot:1})}})]}),(0,o.createComponentVNode)(2,a.LabeledList.Divider),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Eye Color",children:(0,o.createComponentVNode)(2,a.ColorButton,{color:u.eyeColor,onClick:function(){return l("update-eyeColor")}})}),(0,o.createComponentVNode)(2,a.LabeledList.Divider),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Top Detail",children:(0,o.createComponentVNode)(2,i,{id:"custom3",color:u.customColor3,style:u.customStyle3})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Middle Detail",children:(0,o.createComponentVNode)(2,i,{id:"custom2",color:u.customColor2,style:u.customStyle2})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Bottom Detail",children:(0,o.createComponentVNode)(2,i,{id:"custom1",color:u.customColor1,style:u.customStyle1})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Special Style",children:(0,o.createComponentVNode)(2,a.Button,{onClick:function(){return l("update-specialStyle")},children:u.specialStyle||"default"})}),(0,o.createComponentVNode)(2,a.LabeledList.Divider),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Underwear",children:(0,o.createComponentVNode)(2,i,{id:"underwear",color:u.underwearColor,style:u.underwearStyle})}),(0,o.createComponentVNode)(2,a.LabeledList.Divider),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Bionics",children:[(0,o.createComponentVNode)(2,c,{slot_id:"r_arm"}),(0,o.createComponentVNode)(2,c,{slot_id:"l_arm"}),(0,o.createComponentVNode)(2,a.Box,{children:["Trait points:"," ",(0,o.createComponentVNode)(2,a.Box,{as:"span",color:u.traitsPointsTotal>0?"good":"bad",children:u.traitsPointsTotal})]})]}),(0,o.createComponentVNode)(2,a.LabeledList.Divider)]})}),(0,o.createComponentVNode)(2,a.Section,{title:"Sounds",children:(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Fart",children:[(0,o.createComponentVNode)(2,a.Button,{onClick:function(){return l("update-fartsound")},children:u.fartsound}),(0,o.createComponentVNode)(2,a.Button,{icon:"volume-up",onClick:function(){return l("previewSound",{fartsound:1})},children:"Preview"})]}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Scream",children:[(0,o.createComponentVNode)(2,a.Button,{onClick:function(){return l("update-screamsound")},children:u.screamsound}),(0,o.createComponentVNode)(2,a.Button,{icon:"volume-up",onClick:function(){return l("previewSound",{screamsound:1})},children:"Preview"})]}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Chat",children:[(0,o.createComponentVNode)(2,a.Button,{onClick:function(){return l("update-chatsound")},children:u.chatsound}),(0,o.createComponentVNode)(2,a.Button,{icon:"volume-up",onClick:function(){return l("previewSound",{chatsound:1})},children:"Preview"})]})]})})],4)}},56374:function(e,t,n){"use strict";t.__esModule=!0,t.GameSettingsTab=void 0;var o=n(96323),r=n(31246),a=n(26949),i=n(59576);t.GameSettingsTab=function(e,t){var n=(0,r.useBackend)(t),c=n.act,l=n.data;return(0,o.createComponentVNode)(2,a.Section,{children:(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Popup Font Size",buttons:(0,o.createComponentVNode)(2,a.Button,{onClick:function(){return c("update-fontSize",{reset:1})},children:"Reset"}),children:[(0,o.createComponentVNode)(2,a.Box,{mb:"5px",color:"label",children:"Changes the font size used in popup windows. Only works when CHUI is disabled."}),(0,o.createComponentVNode)(2,a.Button,{onClick:function(){return c("update-fontSize")},children:l.fontSize?l.fontSize+"%":"Default"})]}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Messages",children:[(0,o.createComponentVNode)(2,a.Box,{mb:"5px",color:"label",children:"Toggles if certain messages are shown in the chat window by default. You can change these mid-round by using the Toggle OOC/LOOC commands under the Commands tab in the top right."}),l.isMentor?(0,o.createComponentVNode)(2,a.Box,{mb:"5px",children:(0,o.createComponentVNode)(2,a.Button.Checkbox,{checked:l.seeMentorPms,onClick:function(){return c("update-seeMentorPms")},children:"Display Mentorhelp"})}):null,(0,o.createComponentVNode)(2,a.Box,{mb:"5px",children:(0,o.createComponentVNode)(2,a.Button.Checkbox,{checked:l.listenOoc,onClick:function(){return c("update-listenOoc")},tooltip:"Out-of-Character chat. This mostly just shows up on the RP server and at the end of rounds.",children:"Display OOC chat"})}),(0,o.createComponentVNode)(2,a.Box,{mb:"5px",children:(0,o.createComponentVNode)(2,a.Button.Checkbox,{checked:l.listenLooc,onClick:function(){return c("update-listenLooc")},tooltip:"Local Out-of-Character is OOC chat, but only appears for nearby players. This is basically only used on the RP server.",children:"Display LOOC chat"})}),(0,o.createComponentVNode)(2,a.Box,{mb:"5px",children:(0,o.createComponentVNode)(2,a.Button.Checkbox,{checked:!l.flyingChatHidden,onClick:function(){return c("update-flyingChatHidden")},tooltip:"Chat messages will appear over characters as they're talking.",children:"See chat above people's heads"})}),(0,o.createComponentVNode)(2,a.Box,{mb:"5px",children:(0,o.createComponentVNode)(2,a.Button.Checkbox,{checked:l.autoCapitalization,onClick:function(){return c("update-autoCapitalization")},tooltip:"Chat messages you send will be automatically capitalized.",children:"Auto-capitalize your messages"})}),(0,o.createComponentVNode)(2,a.Box,{mb:"5px",children:(0,o.createComponentVNode)(2,a.Button.Checkbox,{checked:l.localDeadchat,onClick:function(){return c("update-localDeadchat")},tooltip:"You'll only hear chat messages from living people on your screen as a ghost.",children:"Local ghost hearing"})})]}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"HUD Theme",children:[(0,o.createComponentVNode)(2,a.Box,{mb:"5px",children:(0,o.createComponentVNode)(2,a.Button,{onClick:function(){return c("update-hudTheme")},children:"Change"})}),(0,o.createComponentVNode)(2,a.Box,{children:(0,o.createComponentVNode)(2,a.Image,{pixelated:!0,src:"data:image/png;base64,"+l.hudThemePreview,width:"32px",height:"32px"})})]}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Targeting Cursor",children:[(0,o.createComponentVNode)(2,a.Box,{mb:"5px",children:(0,o.createComponentVNode)(2,a.Button,{onClick:function(){return c("update-targetingCursor")},children:"Change"})}),(0,o.createComponentVNode)(2,a.Box,{children:(0,o.createComponentVNode)(2,a.Image,{pixelated:!0,src:"data:image/png;base64,"+l.targetingCursorPreview,width:"32px",height:"32px"})})]}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Tooltips",children:[(0,o.createComponentVNode)(2,a.Box,{mb:"5px",color:"label",children:"Tooltips can appear when hovering over items. These tooltips can provide bits of information about the item, such as attack strength, special moves, etc."}),(0,o.createComponentVNode)(2,a.Box,{mb:"5px",children:(0,o.createComponentVNode)(2,a.Button.Checkbox,{checked:l.tooltipOption===i.CharacterPreferencesTooltip.Always,onClick:function(){return c("update-tooltipOption",{value:i.CharacterPreferencesTooltip.Always})},children:"Show Always"})}),(0,o.createComponentVNode)(2,a.Box,{mb:"5px",children:(0,o.createComponentVNode)(2,a.Button.Checkbox,{checked:l.tooltipOption===i.CharacterPreferencesTooltip.Alt,onClick:function(){return c("update-tooltipOption",{value:i.CharacterPreferencesTooltip.Alt})},children:"Show When ALT is held"})}),(0,o.createComponentVNode)(2,a.Box,{mb:"5px",children:(0,o.createComponentVNode)(2,a.Button.Checkbox,{checked:l.tooltipOption===i.CharacterPreferencesTooltip.Never,onClick:function(){return c("update-tooltipOption",{value:i.CharacterPreferencesTooltip.Never})},children:"Never Show"})})]}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"tgui",children:[(0,o.createComponentVNode)(2,a.Box,{mb:"5px",color:"label",children:"TGUI is the UI framework we use for some game windows, and it comes with options!"}),(0,o.createComponentVNode)(2,a.Box,{mb:"5px",children:(0,o.createComponentVNode)(2,a.Button.Checkbox,{checked:l.tguiFancy,onClick:function(){return c("update-tguiFancy")},children:"Makes TGUI windows look better, at the cost of compatibility."})}),(0,o.createComponentVNode)(2,a.Box,{mb:"5px",children:(0,o.createComponentVNode)(2,a.Button.Checkbox,{checked:l.tguiLock,onClick:function(){return c("update-tguiLock")},children:"Locks TGUI windows to your main monitor."})})]}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Popups",children:[(0,o.createComponentVNode)(2,a.Box,{mb:"5px",color:"label",children:"These options toggle the popups that appear when logging in and at the end of a round."}),(0,o.createComponentVNode)(2,a.Box,{mb:"5px",children:(0,o.createComponentVNode)(2,a.Button.Checkbox,{checked:l.viewChangelog,onClick:function(){return c("update-viewChangelog")},tooltip:"The changelog can be shown at any time by using the 'Changelog' command, under the Commands tab in the top right.",tooltipPosition:"top",children:"Auto-open changelog"})}),(0,o.createComponentVNode)(2,a.Box,{mb:"5px",children:(0,o.createComponentVNode)(2,a.Button.Checkbox,{checked:l.viewScore,onClick:function(){return c("update-viewScore")},tooltip:"The end-of-round scoring shows various stats on how the round went. If this option is off, you won't be able to see it.",tooltipPosition:"top",children:"Auto-open end-of-round score"})}),(0,o.createComponentVNode)(2,a.Box,{mb:"5px",children:(0,o.createComponentVNode)(2,a.Button.Checkbox,{checked:l.viewTickets,onClick:function(){return c("update-viewTickets")},tooltip:"The end-of-round ticketing summary shows the various tickets and fines that were handed out. If this option is off, you can still see them on Goonhub (goonhub.com).",tooltipPosition:"top",children:"Auto-open end-of-round ticket summary"})})]}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Controls",children:[(0,o.createComponentVNode)(2,a.Box,{mb:"5px",color:"label",children:"Various options for how you control your character and the game."}),(0,o.createComponentVNode)(2,a.Box,{mb:"5px",children:(0,o.createComponentVNode)(2,a.Button.Checkbox,{checked:l.useClickBuffer,onClick:function(){return c("update-useClickBuffer")},tooltip:"There is a cooldown after clicking on things in-game. When enabled, if you click something during this cooldown, the game will apply that click after the cooldown. Otherwise, the click is ignored.",tooltipPosition:"top",children:"Queue Combat Clicks"})}),(0,o.createComponentVNode)(2,a.Box,{mb:"5px",children:(0,o.createComponentVNode)(2,a.Button.Checkbox,{checked:l.useWasd,onClick:function(){return c("update-useWasd")},tooltip:"Enabling this allows you to use WASD to move instead of the arrow keys, and enables a few other hotkeys.",tooltipPosition:"top",children:"Use WASD Mode"})}),(0,o.createComponentVNode)(2,a.Box,{mb:"5px",children:(0,o.createComponentVNode)(2,a.Button.Checkbox,{checked:l.useAzerty,onClick:function(){return c("update-useAzerty")},tooltip:"If you have an AZERTY keyboard, enable this. Yep. This sure is a tooltip.",tooltipPosition:"top",children:"Use AZERTY Keyboard Layout"})}),(0,o.createComponentVNode)(2,a.Box,{color:"label",children:"Familiar with /tg/station controls? You can enable/disable them under the Game/Interface menu in the top left."})]}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Scroll Targeting",children:[(0,o.createComponentVNode)(2,a.Box,{mb:"5px",color:"label",children:"This option allows you to change which limb to target with the scroll wheel."}),(0,o.createComponentVNode)(2,a.Box,{mb:"5px",children:(0,o.createComponentVNode)(2,a.Button.Checkbox,{checked:l.scrollWheelTargeting===i.CharacterPreferencesScrollTarget.Always,onClick:function(){return c("update-scrollWheelTargeting",{value:i.CharacterPreferencesScrollTarget.Always})},children:"Always"})}),(0,o.createComponentVNode)(2,a.Box,{mb:"5px",children:(0,o.createComponentVNode)(2,a.Button.Checkbox,{checked:l.scrollWheelTargeting===i.CharacterPreferencesScrollTarget.Hover,onClick:function(){return c("update-scrollWheelTargeting",{value:i.CharacterPreferencesScrollTarget.Hover})},children:"When hovering over targeting doll"})}),(0,o.createComponentVNode)(2,a.Box,{mb:"5px",children:(0,o.createComponentVNode)(2,a.Button.Checkbox,{checked:l.scrollWheelTargeting===i.CharacterPreferencesScrollTarget.Never,onClick:function(){return c("update-scrollWheelTargeting",{value:i.CharacterPreferencesScrollTarget.Never})},children:"Never"})})]}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Preferred Map",children:(0,o.createComponentVNode)(2,a.Button,{onClick:function(){return c("update-preferredMap")},children:l.preferredMap?l.preferredMap:(0,o.createComponentVNode)(2,a.Box,{italic:!0,children:"None"})})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Examine help",children:(0,o.createComponentVNode)(2,a.Button.Checkbox,{checked:l.helpTextInExamine,onClick:function(){return c("update-helpTextInExamine")},tooltip:"If help messages in examine text annoy you, you can turn them off here. They will still be available by alt+doubleclicking the item or in the right click menu.",tooltipPosition:"top",children:"See help messages when you examine?"})})]})})}},57368:function(e,t,n){"use strict";t.__esModule=!0,t.GeneralTab=void 0;var o=n(96323),r=n(21118),a=n(31246),i=n(26949);t.GeneralTab=function(e,t){var n,c=(0,a.useBackend)(t),l=c.act,u=c.data,d=function(e){return e.length>200?e.substring(0,200)+"\u2026":e};return(0,o.createFragment)([(0,o.createComponentVNode)(2,i.Section,{title:"Records",children:(0,o.createComponentVNode)(2,i.LabeledList,{children:[(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Name",buttons:(0,o.createComponentVNode)(2,i.Button.Checkbox,{checked:u.randomName,onClick:function(){return l("update-randomName")},children:"Random"}),children:[(0,o.createComponentVNode)(2,i.Button,{onClick:function(){return l("update-nameFirst")},children:u.nameFirst}),(0,o.createComponentVNode)(2,i.Button,{onClick:function(){return l("update-nameMiddle")},color:""===u.nameMiddle?"grey":"default",children:""!==u.nameMiddle?u.nameMiddle:(0,o.createComponentVNode)(2,i.Box,{italic:!0,children:"None"})}),(0,o.createComponentVNode)(2,i.Button,{onClick:function(){return l("update-nameLast")},children:u.nameLast})]}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Gender",children:(0,o.createComponentVNode)(2,i.Button,{onClick:function(){return l("update-gender")},children:u.gender})}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Pronouns",children:(0,o.createComponentVNode)(2,i.Button,{onClick:function(){return l("update-pronouns")},children:u.pronouns})}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Age",children:(0,o.createComponentVNode)(2,i.Button,{onClick:function(){return l("update-age")},children:u.age})}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Blood Type",children:(0,o.createComponentVNode)(2,i.Button,{onClick:function(){return l("update-bloodType")},children:u.bloodRandom?(0,o.createComponentVNode)(2,i.Box,{as:"span",italic:!0,children:"Random"}):u.bloodType})}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Bank PIN",buttons:(0,o.createComponentVNode)(2,i.Button.Checkbox,{checked:!u.pin,onClick:function(){return l("update-pin",{random:!!u.pin})},children:"Random"}),children:(0,o.createComponentVNode)(2,i.Button,{onClick:function(){return l("update-pin")},children:null!=(n=u.pin)?n:(0,o.createComponentVNode)(2,i.Box,{as:"span",italic:!0,children:"Random"})})}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Flavor Text",buttons:(0,o.createComponentVNode)(2,i.Button,{onClick:function(){return l("update-flavorText")},icon:"wrench",children:"Edit"}),children:(0,o.createComponentVNode)(2,i.BlockQuote,{children:u.flavorText?(0,r.decodeHtmlEntities)(u.flavorText):(0,o.createComponentVNode)(2,i.Box,{italic:!0,children:"None"})})}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Security Note",buttons:(0,o.createComponentVNode)(2,i.Button,{onClick:function(){return l("update-securityNote")},icon:"wrench",children:"Edit"}),children:(0,o.createComponentVNode)(2,i.BlockQuote,{children:u.securityNote?(0,r.decodeHtmlEntities)(u.securityNote):(0,o.createComponentVNode)(2,i.Box,{italic:!0,children:"None"})})}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Medical Note",buttons:(0,o.createComponentVNode)(2,i.Button,{onClick:function(){return l("update-medicalNote")},icon:"wrench",children:"Edit"}),children:(0,o.createComponentVNode)(2,i.BlockQuote,{children:u.medicalNote?(0,r.decodeHtmlEntities)(u.medicalNote):(0,o.createComponentVNode)(2,i.Box,{italic:!0,children:"None"})})}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Syndicate Intelligence",buttons:(0,o.createComponentVNode)(2,i.Button,{onClick:function(){return l("update-syndintNote")},icon:"wrench",children:"Edit"}),children:(0,o.createComponentVNode)(2,i.BlockQuote,{children:u.syndintNote?d((0,r.decodeHtmlEntities)(u.syndintNote)):(0,o.createComponentVNode)(2,i.Box,{italic:!0,children:"None"})})})]})}),(0,o.createComponentVNode)(2,i.Section,{title:"Other names",children:(0,o.createComponentVNode)(2,i.LabeledList,{children:(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Preferred Cyborg Name",children:(0,o.createComponentVNode)(2,i.Button,{onClick:function(){return l("update-robotName")},color:u.robotName?"default":"grey",children:u.robotName?u.robotName:(0,o.createComponentVNode)(2,i.Box,{italic:!0,children:"None"})})})})}),(0,o.createComponentVNode)(2,i.Section,{title:"PDA",children:(0,o.createComponentVNode)(2,i.LabeledList,{children:[(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Ringtone",children:[(0,o.createComponentVNode)(2,i.Button,{onClick:function(){return l("update-pdaRingtone")},children:u.pdaRingtone}),(0,o.createComponentVNode)(2,i.Button,{onClick:function(){return l("previewSound",{pdaRingtone:1})},icon:"volume-up",children:"Preview"})]}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Background Color",children:(0,o.createComponentVNode)(2,i.ColorButton,{color:u.pdaColor,onClick:function(){return l("update-pdaColor")}})})]})})],4)}},70712:function(e,t,n){"use strict";t.__esModule=!0,t.SavesTab=void 0;var o=n(96323),r=n(31246),a=n(26949);t.SavesTab=function(e,t){var n=(0,r.useBackend)(t),c=n.act,l=n.data;return(0,o.createComponentVNode)(2,a.Section,{title:"Cloud Saves",children:l.cloudSaves?(0,o.createFragment)([l.cloudSaves.map((function(e,t){return(0,o.createFragment)([(0,o.createComponentVNode)(2,i,{name:e,index:t}),(0,o.createComponentVNode)(2,a.Divider)],4,e)})),(0,o.createComponentVNode)(2,a.Box,{mt:"5px",children:(0,o.createComponentVNode)(2,a.Button,{onClick:function(){return c("cloud-new")},children:"Create new save"})})],0):(0,o.createComponentVNode)(2,a.Box,{italic:!0,color:"label",children:"Cloud saves could not be loaded."})})};var i=function(e,t){var n=e.name,i=e.index,c=(0,r.useBackend)(t).act;return(0,o.createComponentVNode)(2,a.LabeledList,{children:(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Cloud save "+(i+1),buttons:(0,o.createFragment)([(0,o.createComponentVNode)(2,a.Button,{onClick:function(){return c("cloud-load",{name:n})},children:"Load"}),(0,o.createTextVNode)(" -"),(0,o.createTextVNode)(" "),(0,o.createComponentVNode)(2,a.Button,{onClick:function(){return c("cloud-save",{name:n})},children:"Save"}),(0,o.createTextVNode)(" -"),(0,o.createTextVNode)(" "),(0,o.createComponentVNode)(2,a.Button.Confirm,{onClick:function(){return c("cloud-delete",{name:n})},content:"Delete"})],0),children:n})})}},30709:function(e,t,n){"use strict";t.__esModule=!0,t.TraitsTab=void 0;var o=n(96323),r=n(21118),a=n(31246),i=n(26949),c=n(25808);function l(e,t){var n="undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(n)return(n=n.call(e)).next.bind(n);if(Array.isArray(e)||(n=function(e,t){if(!e)return;if("string"==typeof e)return u(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);"Object"===n&&e.constructor&&(n=e.constructor.name);if("Map"===n||"Set"===n)return Array.from(e);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return u(e,t)}(e))||t&&e&&"number"==typeof e.length){n&&(e=n);var o=0;return function(){return o>=e.length?{done:!0}:{done:!1,value:e[o++]}}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}function u(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,o=new Array(t);n<t;n++)o[n]=e[n];return o}var d=function(e,t){return e.name.localeCompare(t.name,"en",{sensitivity:"base"})};t.TraitsTab=function(e,t){for(var n,r=(0,a.useBackend)(t),u=r.act,p=r.data,m=(0,a.useLocalState)(t,"filter-available",!1),f=m[0],h=m[1],g={},C=p.traitsAvailable.map((function(e){return Object.assign({},e,p.traitsData[e.id])})),N=l(C);!(n=N()).done;)for(var v,b=n.value,V=l(b.category&&b.category.length>0?b.category:["uncategorized"]);!(v=V()).done;){var y=v.value;g[y]||(g[y]=[]),g[y].push(b)}var x=Object.keys(g).sort();x.includes("uncategorized")&&(x=[].concat(x.filter((function(e){return"uncategorized"!==e})),["uncategorized"]));var I=p.traitsAvailable.filter((function(e){return e.selected})).length;return(0,o.createComponentVNode)(2,i.Section,{fill:!0,children:(0,o.createComponentVNode)(2,i.Stack,{vertical:!0,fill:!0,children:[(0,o.createComponentVNode)(2,i.Stack.Item,{children:[(0,o.createComponentVNode)(2,i.Box,{children:["Available points:"," ",(0,o.createComponentVNode)(2,i.Box,{as:"span",color:p.traitsPointsTotal>0?"good":"bad",children:p.traitsPointsTotal})]}),(0,o.createComponentVNode)(2,i.Divider)]}),(0,o.createComponentVNode)(2,i.Stack.Item,{grow:!0,children:(0,o.createComponentVNode)(2,i.Stack,{fill:!0,children:[(0,o.createComponentVNode)(2,i.Stack.Item,{grow:!0,basis:0,children:(0,o.createComponentVNode)(2,i.Section,{title:"Available",fill:!0,scrollable:!0,buttons:(0,o.createComponentVNode)(2,c.ButtonCheckbox,{checked:f,onClick:function(){return h(!f)},children:"Filter available"}),children:x.map((function(e){var t=g[e];return(0,o.createComponentVNode)(2,s,{category:e,traits:t.filter((function(e){return!e.selected})).filter((function(e){return!f||e.available})).sort(d)},e)}))})}),(0,o.createComponentVNode)(2,i.Stack.Item,{children:(0,o.createComponentVNode)(2,i.Divider,{vertical:!0})}),(0,o.createComponentVNode)(2,i.Stack.Item,{grow:!0,basis:0,children:(0,o.createComponentVNode)(2,i.Section,{title:"Selected ("+I+"/"+p.traitsMax+")",fill:!0,scrollable:!0,buttons:(0,o.createComponentVNode)(2,i.Button,{onClick:function(){return u("reset-traits")},children:"Reset traits"}),children:x.map((function(e){var t=g[e];return(0,o.createComponentVNode)(2,s,{category:e,traits:t.filter((function(e){return e.selected})).sort(d)},e)}))})})]})})]})})};var s=function(e,t){var n=e.category,a=e.traits;return 0===a.length?null:(0,o.createComponentVNode)(2,i.Collapsible,{title:(0,r.toTitleCase)(n),open:!0,children:a.map((function(e,t){return(0,o.createFragment)([0!==t&&(0,o.createComponentVNode)(2,i.Divider),(0,o.normalizeProps)((0,o.createComponentVNode)(2,p,Object.assign({},e)))],0,e.id)}))})},p=function(e,t){var n=(0,a.useBackend)(t).act,r=e.id,c=e.name,l=e.desc,u=e.points,d=e.selected,s=e.available,p=e.img;return(0,o.createComponentVNode)(2,i.Stack,{children:[(0,o.createComponentVNode)(2,i.Stack.Item,{children:(0,o.createComponentVNode)(2,i.Image,{pixelated:!0,width:"32px",height:"32px",src:"data:image/png;base64,"+p,backgroundColor:"transparent"})}),(0,o.createComponentVNode)(2,i.Stack.Item,{grow:1,children:[(0,o.createComponentVNode)(2,i.Stack,{align:"center",mb:1,children:[(0,o.createComponentVNode)(2,i.Stack.Item,{grow:!0,children:[c," ",(0,o.createComponentVNode)(2,i.Box,{as:"span",color:u<0?"bad":u>0?"good":"label",children:["(",u>0?"+":"",u,")"]})]}),(0,o.createComponentVNode)(2,i.Stack.Item,{children:(0,o.createComponentVNode)(2,i.Button,{disabled:!s,icon:d?"minus":"plus",onClick:function(){return n(d?"unselect-trait":"select-trait",{id:r})},children:d?"Remove":"Add"})})]}),(0,o.createComponentVNode)(2,i.BlockQuote,{children:l})]})]})}},4098:function(e,t,n){"use strict";t.__esModule=!0,t.CharacterPreferences=void 0;var o=n(96323),r=n(57890),a=n(31246),i=n(26949),c=n(2381),l=n(96074),u=n(56374),d=n(57368),s=n(70712),p=n(30709),m=n(59576),f=0;t.CharacterPreferences=function(e,t){var n=(0,a.useBackend)(t),g=n.act,C=n.data,N=(0,a.useLocalState)(t,"menu",m.CharacterPreferencesTabKeys.General),v=N[0],b=N[1];return(0,o.createComponentVNode)(2,c.Window,{width:600,height:750,title:"Character Setup",children:(0,o.createComponentVNode)(2,c.Window.Content,{onKeyDown:function(e){if(!(v!==m.CharacterPreferencesTabKeys.General&&v!==m.CharacterPreferencesTabKeys.Character||e.keyCode!==r.KEY_LEFT&&e.keyCode!==r.KEY_RIGHT)){if(e.preventDefault(),f>performance.now())return;f=performance.now()+125;var t="rotate-counter-clockwise";e.keyCode===r.KEY_RIGHT&&(t="rotate-clockwise"),g(t)}},children:(0,o.createComponentVNode)(2,i.Stack,{vertical:!0,fill:!0,children:[(0,o.createComponentVNode)(2,i.Stack.Item,{children:(0,o.createComponentVNode)(2,h)}),(0,o.createComponentVNode)(2,i.Stack.Item,{children:(0,o.createComponentVNode)(2,i.Tabs,{children:[(0,o.createComponentVNode)(2,i.Tabs.Tab,{selected:v===m.CharacterPreferencesTabKeys.General,onClick:function(){return b(m.CharacterPreferencesTabKeys.General)},children:"General"}),(0,o.createComponentVNode)(2,i.Tabs.Tab,{selected:v===m.CharacterPreferencesTabKeys.Character,onClick:function(){return b(m.CharacterPreferencesTabKeys.Character)},children:"Appearance"}),(0,o.createComponentVNode)(2,i.Tabs.Tab,{onClick:function(){return g("open-occupation-window")},children:"Occupation"}),(0,o.createComponentVNode)(2,i.Tabs.Tab,{selected:v===m.CharacterPreferencesTabKeys.Traits,onClick:function(){return b(m.CharacterPreferencesTabKeys.Traits)},children:"Traits"}),(0,o.createComponentVNode)(2,i.Tabs.Tab,{selected:v===m.CharacterPreferencesTabKeys.GameSettings,onClick:function(){return b(m.CharacterPreferencesTabKeys.GameSettings)},children:"Game Settings"}),(0,o.createComponentVNode)(2,i.Tabs.Tab,{selected:v===m.CharacterPreferencesTabKeys.Saves,onClick:function(){return b(m.CharacterPreferencesTabKeys.Saves)},children:"Cloud Saves"})]})}),(0,o.createComponentVNode)(2,i.Stack.Item,{grow:"1",children:[(v===m.CharacterPreferencesTabKeys.General||v===m.CharacterPreferencesTabKeys.Character)&&(0,o.createComponentVNode)(2,i.Stack,{fill:!0,children:[(0,o.createComponentVNode)(2,i.Stack.Item,{basis:0,grow:"1",children:(0,o.createComponentVNode)(2,i.Section,{scrollable:!0,fill:!0,children:[v===m.CharacterPreferencesTabKeys.General&&(0,o.createComponentVNode)(2,d.GeneralTab),v===m.CharacterPreferencesTabKeys.Character&&(0,o.createComponentVNode)(2,l.CharacterTab)]})}),(0,o.createComponentVNode)(2,i.Stack.Item,{children:(0,o.createComponentVNode)(2,i.Section,{fill:!0,children:[(0,o.createComponentVNode)(2,i.ByondUi,{params:{id:C.preview,type:"map"},style:{width:"64px",height:"128px"}}),(0,o.createComponentVNode)(2,i.Box,{textAlign:"center",mt:"5px",children:[(0,o.createComponentVNode)(2,i.Button,{icon:"chevron-left",onClick:function(){return g("rotate-counter-clockwise")}}),(0,o.createComponentVNode)(2,i.Button,{icon:"chevron-right",onClick:function(){return g("rotate-clockwise")}})]})]})})]}),(v===m.CharacterPreferencesTabKeys.GameSettings||v===m.CharacterPreferencesTabKeys.Saves)&&(0,o.createComponentVNode)(2,i.Section,{scrollable:!0,fill:!0,children:[v===m.CharacterPreferencesTabKeys.GameSettings&&(0,o.createComponentVNode)(2,u.GameSettingsTab),v===m.CharacterPreferencesTabKeys.Saves&&(0,o.createComponentVNode)(2,s.SavesTab)]}),v===m.CharacterPreferencesTabKeys.Traits&&(0,o.createComponentVNode)(2,p.TraitsTab)]}),(0,o.createComponentVNode)(2,i.Stack.Item,{children:(0,o.createComponentVNode)(2,i.Section,{children:(0,o.createComponentVNode)(2,i.Button.Confirm,{content:"Reset All",onClick:function(){return g("reset")}})})})]})})})};var h=function(e,t){var n=(0,a.useBackend)(t),r=n.act,c=n.data,l=c.profiles.findIndex((function(e){return e.active}));return(0,o.createComponentVNode)(2,i.Stack,{vertical:!0,children:[(0,o.createComponentVNode)(2,i.Stack.Item,{children:(0,o.createComponentVNode)(2,i.Stack,{children:c.profiles.map((function(e,t){return(0,o.createComponentVNode)(2,i.Stack.Item,{basis:0,grow:1,children:(0,o.createComponentVNode)(2,g,{profile:e,index:t})},t)}))})}),(0,o.createComponentVNode)(2,i.Stack.Item,{children:(0,o.createComponentVNode)(2,i.Section,{children:(0,o.createComponentVNode)(2,i.LabeledList,{children:(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Profile Name",buttons:l>-1?(0,o.createFragment)([(0,o.createComponentVNode)(2,i.Button,{onClick:function(){return r("load",{index:l+1})},children:"Reload"})," - ",(0,o.createComponentVNode)(2,i.Button,{onClick:function(){return r("save",{index:l+1})},icon:c.profileModified?"exclamation-triangle":undefined,color:c.profileModified?"danger":undefined,tooltip:c.profileModified?"You may have unsaved changes! Any unsaved changes will take effect for this round only.":undefined,tooltipPosition:"left",children:"Save"})],0):null,children:(0,o.createComponentVNode)(2,i.Button,{onClick:function(){return r("update-profileName")},children:c.profileName?c.profileName:(0,o.createComponentVNode)(2,i.Box,{italic:!0,children:"None"})})})})})})]})},g=function(e,t){var n=e.index,r=e.profile,c=(0,a.useBackend)(t).act;return(0,o.createComponentVNode)(2,i.Section,{title:"Profile "+(n+1),textAlign:"center",backgroundColor:r.active?"rgba(0, 0, 0, 0.10)":null,fill:!0,children:(0,o.createComponentVNode)(2,i.Stack,{vertical:!0,fill:!0,justify:"space-between",children:[(0,o.createComponentVNode)(2,i.Stack.Item,{children:(0,o.createComponentVNode)(2,i.Box,{children:r.name?(0,o.createComponentVNode)(2,i.Box,{children:r.name}):(0,o.createComponentVNode)(2,i.Box,{italic:!0,color:"label",children:"Empty"})})}),(0,o.createComponentVNode)(2,i.Stack.Item,{children:[(0,o.createComponentVNode)(2,i.Button,{disabled:!r.name,onClick:function(){return c("load",{index:n+1})},children:"Load"})," - ",(0,o.createComponentVNode)(2,i.Button,{onClick:function(){return c("save",{index:n+1})},children:"Save"})]})]})})}},59576:function(e,t){"use strict";var n,o,r;t.__esModule=!0,t.CharacterPreferencesScrollTarget=t.CharacterPreferencesTooltip=t.CharacterPreferencesTabKeys=void 0,t.CharacterPreferencesTabKeys=n,function(e){e[e.Saves=0]="Saves",e[e.General=1]="General",e[e.Character=2]="Character",e[e.Traits=3]="Traits",e[e.GameSettings=4]="GameSettings"}(n||(t.CharacterPreferencesTabKeys=n={})),t.CharacterPreferencesTooltip=o,function(e){e[e.Always=1]="Always",e[e.Never=2]="Never",e[e.Alt=3]="Alt"}(o||(t.CharacterPreferencesTooltip=o={})),t.CharacterPreferencesScrollTarget=r,function(e){e[e.Never=1]="Never",e[e.Hover=2]="Hover",e[e.Always=3]="Always"}(r||(t.CharacterPreferencesScrollTarget=r={}))},78979:function(e,t,n){"use strict";t.__esModule=!0,t.ChemChute=void 0;var o=n(96323),r=n(31246),a=n(26949),i=n(2381);t.ChemChute=function(e,t){var n=(0,r.useBackend)(t),c=(n.act,n.data.productList);return(0,o.createComponentVNode)(2,i.Window,{title:"Medical supply chute console",width:355,height:500,children:(0,o.createComponentVNode)(2,i.Window.Content,{children:(0,o.createComponentVNode)(2,a.Section,{fill:!0,scrollable:!0,title:"Dispensary interlink stock view",height:"100%",children:c.map((function(e){return(0,o.createComponentVNode)(2,a.Flex,{justify:"space-between",align:"stretch",style:{"border-bottom":"1px #555 solid"},children:[(0,o.createComponentVNode)(2,a.Flex.Item,{direction:"row",children:e.img&&(0,o.createComponentVNode)(2,a.Box,{style:{overflow:"show",height:"24px"},children:(0,o.createVNode)(1,"img",null,null,1,{src:"data:image/png;base64,"+e.img,style:{transform:"translate(0, -4px)"}})})}),(0,o.createComponentVNode)(2,a.Flex.Item,{direction:"row",grow:!0,style:{display:"flex","justify-content":"center","flex-direction":"column"},children:(0,o.createComponentVNode)(2,a.Box,{children:[(0,o.createComponentVNode)(2,a.Box,{inline:!0,italic:!0,children:[e.amount+" x","\xa0"]}),(0,o.createComponentVNode)(2,a.Box,{inline:!0,children:e.name})]})}),(0,o.createComponentVNode)(2,a.Flex.Item,{bold:!0,direction:"row",style:{"margin-left":"5px",display:"flex","justify-content":"center","flex-direction":"column"}})]},e.name)}))})})})}},28487:function(){},56915:function(e,t,n){"use strict";t.__esModule=!0,t.ChemGroups=t.BeakerContentsGraph=t.Beaker=t.ReagentDispenser=t.ChemDispenser=void 0;var o=n(96323),r=n(31246),a=n(26949),i=n(2381),c=n(51418),l=n(48175),u=[{id:0,icon:"sort-amount-down",contents:"",compareFunction:function(e,t){return t.volume-e.volume}},{id:1,icon:"sort-amount-up",contents:"",compareFunction:function(e,t){return e.volume-t.volume}},{id:2,contents:"Density",compareFunction:function(e,t){return e.state-t.state}},{id:3,contents:"Order Added",compareFunction:function(){return 1}}];t.ChemDispenser=function(e,t){return(0,o.createComponentVNode)(2,i.Window,{width:570,height:730,theme:"ntos",children:(0,o.createComponentVNode)(2,i.Window.Content,{scrollable:!0,children:(0,o.createComponentVNode)(2,a.Box,{children:[(0,o.createComponentVNode)(2,d),(0,o.createComponentVNode)(2,s),(0,o.createComponentVNode)(2,p),(0,o.createComponentVNode)(2,m)]})})})};var d=function(e,t){var n=(0,r.useBackend)(t),i=n.act,l=n.data,u=l.beakerName,d=l.container,s=(0,r.useSharedState)(t,"addAmount",10),p=s[0],m=s[1],f=(0,r.useSharedState)(t,"iconToggle",!1),h=f[0],g=f[1],C=(0,r.useLocalState)(t,"hoverOver",""),N=C[0],v=C[1],b=l.dispensableReagents||[];return(0,o.createComponentVNode)(2,a.Section,{fontSize:"12px",title:(0,o.createFragment)([(0,o.createTextVNode)("Dispense"),(0,o.createComponentVNode)(2,a.Box,{as:"span",ml:18,children:["Icons:",(0,o.createComponentVNode)(2,a.Button,{width:2,textAlign:"center",backgroundColor:"rgba(0, 0, 0, 0)",textColor:h?"rgba(255, 255, 255, 0.5)":"rgba(255, 255, 255, 1)",onClick:function(){return g(!1)},children:(0,o.createComponentVNode)(2,a.Icon,{mr:1,name:"circle"})}),(0,o.createComponentVNode)(2,a.Button,{width:2,backgroundColor:"rgba(0, 0, 0, 0)",textColor:h?"rgba(255, 255, 255, 1)":"rgba(255, 255, 255, 0.5)",onClick:function(){return g(!0)},children:(0,o.createComponentVNode)(2,a.Icon,{name:"tint"})})]})],4),buttons:(0,o.createComponentVNode)(2,a.Box,{children:["Dispense Amount: ",(0,o.createComponentVNode)(2,a.NumberInput,{value:p,format:function(e){return e+"u"},width:4,minValue:1,maxValue:100,onDrag:function(e,t){return m(t)}})]}),children:[(0,o.createComponentVNode)(2,a.Section,{fitted:!0,backgroundColor:"rgba(0,0,0,0)",children:[!d||d.maxVolume===d.totalVolume&&(0,o.createComponentVNode)(2,a.Modal,{className:"chem-dispenser__labels",fontSize:"20px",mr:2,p:3,children:(0,o.createComponentVNode)(2,a.Box,{children:d?d.name+" Full":"No "+u+" Inserted"})}),b.map((function(e,t){return(0,o.createComponentVNode)(2,a.Button,{className:"chem-dispenser__dispense-buttons",align:"left",width:"130px",onMouseEnter:function(){return v(e.id)},onMouseLeave:function(){return v("")},disabled:(null==d?void 0:d.maxVolume)===(null==d?void 0:d.totalVolume),lineHeight:1.75,onClick:function(){return i("dispense",{amount:p,reagentId:e.id})},children:[(0,o.createComponentVNode)(2,a.Icon,{color:"rgba("+e.colorR+","+e.colorG+", "+e.colorB+", 1)",name:h?c.MatterStateIconMap[e.state].icon:"circle",pt:1,style:{"text-shadow":"0 0 3px #000"}}),e.name]},t)}))]}),(0,o.createComponentVNode)(2,a.Box,{italic:!0,pt:.5,children:[" ","Reagent ID: "+N]})]})};t.ReagentDispenser=d;var s=function(e,t){var n=(0,r.useBackend)(t),i=n.act,l=n.data,u=l.beakerName,d=l.container,s=(0,r.useSharedState)(t,"iconToggle",!1)[0],p=(0,r.useSharedState)(t,"removeAmount",10),m=p[0],f=p[1],h=[m,10,5,1];return(0,o.createComponentVNode)(2,a.Section,{fontSize:"12px",title:(0,o.createComponentVNode)(2,a.Button,{className:"chem-dispenser__buttons",icon:"eject",onClick:function(){return i("eject")},children:d?"Eject "+d.name+" ("+d.totalVolume+"/"+d.maxVolume+")":"Insert "+u}),buttons:(0,o.createComponentVNode)(2,a.Box,{align:"left",as:"span",children:["Remove Amount: ",(0,o.createComponentVNode)(2,a.NumberInput,{width:4,format:function(e){return e+"u"},value:m,minValue:1,maxValue:100,onDrag:function(e,t){return f(t)}})]}),children:[(0,o.createComponentVNode)(2,a.Table.Row,{children:[(0,o.createComponentVNode)(2,a.Table.Cell,{bold:!0,collapsing:!0,textAlign:"center"}),(0,o.createComponentVNode)(2,a.Table.Cell,{collapsing:!0})]}),(0,o.createComponentVNode)(2,c.ReagentList,{container:d,height:"auto",showState:s,renderButtons:function(e){return(0,o.createFragment)([(0,o.createComponentVNode)(2,a.Button,{icon:"filter",onClick:function(){return i("isolate",{reagentId:e.id})},children:"Isolate"}),(0,o.createComponentVNode)(2,a.Button,{icon:"minus",onClick:function(){return i("all",{amount:m,reagentId:e.id})},children:"All"}),h.map((function(t,n){return(0,o.createComponentVNode)(2,a.Button,{icon:"minus",onClick:function(){return i("remove",{amount:t,reagentId:e.id})},children:t},n)}))],0)},renderButtonsDeps:m})]})};t.Beaker=s;var p=function(e,t){var n=(0,r.useBackend)(t).data,i=(0,r.useSharedState)(t,"sort",1),d=i[0],s=i[1],p=n.container;return(0,o.createComponentVNode)(2,a.Section,{align:"center",p:.5,title:(0,o.createComponentVNode)(2,a.Tabs,{children:u.map((function(e,t){return(0,o.createComponentVNode)(2,a.Tabs.Tab,{fontSize:"11px",textAlign:"center",align:"center",selected:d===e.id,onClick:function(){return s(e.id)},children:[e.icon&&(0,o.createComponentVNode)(2,a.Icon,{name:e.icon}),e.contents]},t)}))}),children:[(0,o.createComponentVNode)(2,c.ReagentGraph,{container:p,sort:u[d].compareFunction}),!(!p||!p.totalVolume)&&(0,o.createComponentVNode)(2,a.Box,{fontSize:2,color:(0,l.getTemperatureColor)(p.temperature),className:"ChemHeater__TemperatureNumber",children:[(0,o.createComponentVNode)(2,a.Icon,{name:(0,l.getTemperatureIcon)(p.temperature),pr:.5}),(0,o.createComponentVNode)(2,a.AnimatedNumber,{value:p.temperature})," K"]})]})};t.BeakerContentsGraph=p;var m=function(e,t){var n=(0,r.useBackend)(t),i=n.act,c=n.data,l=(0,r.useLocalState)(t,"groupName",""),u=l[0],d=l[1],s=(0,r.useLocalState)(t,"reagents",""),p=s[0],m=s[1],f=c.groupList,h=c.idCardName,g=c.idCardInserted,C=c.isRecording,N=c.activeRecording;return(0,o.createFragment)([(0,o.createComponentVNode)(2,a.Section,{title:"Reagent Groups",buttons:(0,o.createComponentVNode)(2,a.Box,{children:[(0,o.createComponentVNode)(2,a.Button,{className:"chem-dispenser__buttons",icon:"eject",onClick:function(){return i("card")},children:g?"Eject ID: "+h:"Insert ID"}),(0,o.createComponentVNode)(2,a.Button,{color:"red",className:"chem-dispenser__buttons",icon:"circle",onClick:function(){return i("record")},children:C?"Stop":"Record"}),(0,o.createComponentVNode)(2,a.Button,{color:"red",className:"chem-dispenser__buttons",icon:"eraser",disabled:!N,onClick:function(){return i("clear_recording")},children:"Clear"})]}),children:[(0,o.createComponentVNode)(2,a.Box,{children:[(0,o.createComponentVNode)(2,a.Box,{children:(0,o.createComponentVNode)(2,a.Box,{pt:1,pr:7,as:"span",children:"Group Name:"})}),(0,o.createComponentVNode)(2,a.Input,{pl:5,placeholder:"Name",value:u,onInput:function(e,t){return d(t)}}),(0,o.createComponentVNode)(2,a.Box,{as:"span",children:(0,o.createComponentVNode)(2,a.Button,{icon:"plus-circle",lineHeight:1.75,onClick:function(){i("newGroup",{reagents:p,groupName:u}),d(""),m("")},children:"Add Group"})})]}),(0,o.createComponentVNode)(2,a.Box,{pt:.5,italic:!N,color:N?"default":"grey",children:N||"Recording Empty"})]}),!!f.length&&(0,o.createComponentVNode)(2,a.Section,{children:f.map((function(e,t){return(0,o.createComponentVNode)(2,a.Box,{children:[(0,o.createComponentVNode)(2,a.Button,{icon:"tint",lineHeight:1.75,onClick:function(){return i("groupDispense",{selectedGroup:e.ref})},children:e.name},t),(0,o.createComponentVNode)(2,a.Button,{icon:"trash",lineHeight:1.75,onClick:function(){return i("deleteGroup",{selectedGroup:e.ref})},children:"Delete"})," "+e.info]},t)}))})],0)};t.ChemGroups=m},95348:function(e,t,n){"use strict";t.__esModule=!0,t.ChemHeater=void 0;var o=n(96323),r=n(1060),a=n(31246),i=n(26949),c=n(2381),l=n(48175),u=n(51418);t.ChemHeater=function(e,t){var n=(0,a.useBackend)(t),r=n.act,u=n.data,s=u.containerData,p=u.isActive,m=u.targetTemperature;return(0,o.createComponentVNode)(2,c.Window,{title:"Reagent Heater/Cooler",width:320,height:385,children:(0,o.createComponentVNode)(2,c.Window.Content,{children:[(0,o.createComponentVNode)(2,d,{container:s,targetTemperature:m,active:p}),(0,o.createComponentVNode)(2,i.Section,{title:"Temperature Control",children:(0,o.createComponentVNode)(2,i.Stack,{align:"center",children:[(0,o.createComponentVNode)(2,i.Stack.Item,{children:(0,o.createComponentVNode)(2,i.Knob,{animated:!0,size:2,value:m,minValue:0,maxValue:1e3,format:function(e){return e+" K"},onDrag:function(e,t){return r("adjustTemp",{temperature:t})}})}),(0,o.createComponentVNode)(2,i.Stack.Item,{grow:!0,basis:0,overflow:"hidden",children:(0,o.createComponentVNode)(2,i.Box,{className:"ChemHeater__TemperatureNumber",nowrap:!0,p:1,fontSize:1.5,color:(0,l.getTemperatureColor)(m),backgroundColor:"black",children:[(0,o.createComponentVNode)(2,i.Box,{fontSize:1,children:"Target"}),(0,o.createComponentVNode)(2,i.Icon,{name:(0,l.getTemperatureIcon)(m),pr:.5}),(0,o.createComponentVNode)(2,i.AnimatedNumber,{value:m})," K"]})}),(0,o.createComponentVNode)(2,i.Stack.Item,{basis:9.6,align:"center",children:(0,o.createComponentVNode)(2,i.Button,{icon:"power-off",disabled:!(null!=s&&s.totalVolume),color:p?"red":"green",fluid:!0,height:"100%",fontSize:1.25,textAlign:"center",onClick:function(){return r(p?"stop":"start")},children:p?"Deactivate":"Activate"})})]})})]})})};var d=function(e,t){var n,c=(0,a.useBackend)(t).act,d=e.active,s=void 0!==d&&d,p=e.targetTemperature,m=void 0===p?l.freezeTemperature:p,f=null!=(n=e.container)?n:u.NoContainer,h=s&&!f.fake,g=f.temperature,C=f.totalVolume;return(0,o.createComponentVNode)(2,i.SectionEx,{capitalize:!0,title:f.name,buttons:(0,o.createComponentVNode)(2,i.Button,{icon:"eject",disabled:!e.container,onClick:function(){return c("eject")},children:"Eject"}),children:[(0,o.createComponentVNode)(2,u.ReagentGraph,{container:f}),(0,o.createComponentVNode)(2,u.ReagentList,{container:f}),(0,o.createComponentVNode)(2,i.Box,{className:(0,r.classes)(["ChemHeater__TemperatureBox",h&&"ChemHeater__TemperatureBox__"+(0,l.getTemperatureChangeName)(g,m)]),children:!C||(0,o.createComponentVNode)(2,i.Box,{fontSize:2,color:(0,l.getTemperatureColor)(g),className:"ChemHeater__TemperatureNumber",children:[(0,o.createComponentVNode)(2,i.Icon,{name:"long-arrow-alt-down",className:(0,r.classes)(["ChemHeater__TemperatureArrow",h&&"ChemHeater__TemperatureArrow__"+(0,l.getTemperatureChangeName)(g,m)]),pt:"2px",pr:.25,style:{transform:s?"scaleY("+Math.sign(g-m)+")":"scaleY(0)"}}),(0,o.createComponentVNode)(2,i.Icon,{name:(0,l.getTemperatureIcon)(g),pr:.5}),(0,o.createComponentVNode)(2,i.AnimatedNumber,{value:g})," K"]})}),!e.container&&(0,o.createComponentVNode)(2,i.Dimmer,{children:(0,o.createComponentVNode)(2,i.Button,{icon:"eject",fontSize:1.5,onClick:function(){return c("insert")},bold:!0,children:"Insert Beaker"})})]})}},45747:function(e,t,n){"use strict";t.__esModule=!0,t.ChemMaster=t.OperationsSection=t.MakePatches=t.MakePatch=t.MakeBottle=t.MakePills=t.MakePill=t.CheckboxControl=t.MakeButtonControl=t.AmountInputControl=t.IconButtonControl=t.SelectIconModal=t.ReagentDisplay=void 0;var o=n(96323),r=n(31246),a=n(26949),i=n(2381),c=n(51418),l=function(e,t){var n=(0,r.useBackend)(t).act,i=e.max_volume,l=e.container||c.NoContainer,u=(0,r.useSharedState)(t,"remove_amount",10),d=u[0],s=u[1];return(0,o.createComponentVNode)(2,a.SectionEx,{capitalize:!0,title:l.name,buttons:(0,o.createFragment)([(0,o.createComponentVNode)(2,a.Button,{title:"Flush All",icon:"times",color:"red",disabled:!l.totalVolume,onClick:function(){return n("flushall")}}),(0,o.createComponentVNode)(2,a.Button,{title:"Eject",icon:"eject",disabled:!e.container,onClick:function(){return n("eject")}}),(0,o.createComponentVNode)(2,a.Box,{align:"left",as:"span",children:["Remove Amount: ",(0,o.createComponentVNode)(2,a.NumberInput,{width:4,format:function(e){return e+"u"},value:d,minValue:1,maxValue:i,onDrag:function(e,t){return s(Math.round(t))}})]})],4),children:[!!e.container||(0,o.createComponentVNode)(2,a.Dimmer,{children:(0,o.createComponentVNode)(2,a.Button,{icon:"eject",fontSize:1.5,onClick:function(){return n("insert")},bold:!0,children:"Insert Beaker"})}),(0,o.createComponentVNode)(2,c.ReagentGraph,{container:l}),(0,o.createComponentVNode)(2,c.ReagentList,{container:l,renderButtons:function(e){return(0,o.createFragment)([(0,o.createComponentVNode)(2,a.Button,{px:.75,mr:1.5,icon:"search",color:"green",title:"Analyze",onClick:function(){return n("analyze",{reagent_id:e.id})}}),(0,o.createComponentVNode)(2,a.Button,{px:.75,mr:1.5,icon:"filter",color:"red",title:"Isolate",onClick:function(){return n("isolate",{reagent_id:e.id})}}),(0,o.createComponentVNode)(2,a.Button,{px:.75,mr:1.5,icon:"times",color:"red",title:"Flush all",onClick:function(){return n("flush",{reagent_id:e.id})}}),(0,o.createComponentVNode)(2,a.Button,{px:.75,icon:"minus",color:"yellow",title:"Flush variable amount of units",bold:!0,onClick:function(){return n("flushinput",{reagent_id:e.id,amount:d})},children:[d,"u"]})],4)},renderButtonsDeps:d})]})};t.ReagentDisplay=l;var u=function(e,t){var n,i,c,l=(0,r.useBackend)(t).data,u=null!=(n=l.pill_icons)?n:[],d=null!=(i=l.bottle_icons)?i:[],s=null!=(c=l.patch_icons)?c:[],p=e.icon_list,m=e.set_icon,f=e.cancel_modal,h=(0,o.createComponentVNode)(2,a.Button,{title:"Cancel",icon:"times",color:"red",mr:1,onClick:function(){return f()}}),g=function(e,t){return(0,o.createComponentVNode)(2,a.Button,{onClick:function(){m(t)},children:[(0,o.createComponentVNode)(2,a.Image,{height:"32px",width:"32px",pixelated:!0,src:"data:image/png;base64,"+(0!==p?e[1]:e),style:{"vertical-align":"middle","horizontal-align":"middle"}}),0!==p&&(0,o.createComponentVNode)(2,a.Box,{textAlign:"center",bold:!0,children:[e[0],"u"]})]},t)};return(0,o.createComponentVNode)(2,a.Modal,{full:!0,mx:"auto",backgroundColor:"#1c2734",children:[0===p&&(0,o.createComponentVNode)(2,a.SectionEx,{capitalize:!0,title:"Select pill",buttons:h,minWidth:10,children:u.map(g)}),1===p&&(0,o.createComponentVNode)(2,a.SectionEx,{capitalize:!0,title:"Select bottle",buttons:h,minWidth:12,children:d.map(g)}),2===p&&(0,o.createComponentVNode)(2,a.SectionEx,{capitalize:!0,title:"Select patch",buttons:h,minWidth:12,children:s.map(g)})]})};t.SelectIconModal=u;var d=function(e){var t=e.modal_function,n=e.imageb64;return(0,o.createComponentVNode)(2,a.LabeledControls.Item,{children:(0,o.createComponentVNode)(2,a.Button,{tooltip:"Change type",tooltipPosition:"top",onClick:function(){return t(!0)},children:(0,o.createComponentVNode)(2,a.Image,{height:"32px",width:"32px",pixelated:!0,src:"data:image/png;base64,"+n,style:{"vertical-align":"middle","horizontal-align":"middle"}})})})};t.IconButtonControl=d;var s=function(e){var t=e.set_amount,n=e.current_amount,r=e.max_amount;return(0,o.createComponentVNode)(2,a.LabeledControls.Item,{children:(0,o.createComponentVNode)(2,a.NumberInput,{width:5,format:function(e){return e+"u"},value:n,minValue:5,maxValue:r,onDrag:function(e,n){return t(Math.round(n))}})})};t.AmountInputControl=s;var p=function(e){var t=e.text,n=e.onClick;return(0,o.createComponentVNode)(2,a.LabeledControls.Item,{children:(0,o.createComponentVNode)(2,a.Button,{onClick:n,width:13,children:t})})};t.MakeButtonControl=p;var m=function(e){var t=e.label,n=e.checked,r=e.set_function;return(0,o.createComponentVNode)(2,a.LabeledControls.Item,{children:(0,o.createComponentVNode)(2,a.Button.Checkbox,{checked:n,onClick:function(){return r(!n)},children:t})})};t.CheckboxControl=m;var f=function(e,t){var n=(0,r.useBackend)(t),i=n.act,c=n.data,l=e.item_name,m=e.max_volume,f=(0,r.useSharedState)(t,"single_pill_amount",m),h=f[0],g=f[1],C=c.pill_icons,N=(0,r.useLocalState)(t,"modal_singlepill",!1),v=N[0],b=N[1],V=(0,r.useSharedState)(t,"icon_singlepill",0),y=V[0],x=V[1],I=function(){return b(!1)};return(0,o.createComponentVNode)(2,a.Box,{children:[v&&(0,o.createComponentVNode)(2,u,{icon_list:0,set_icon:function(e){x(e),I()},cancel_modal:I}),(0,o.createComponentVNode)(2,a.LabeledControls,{width:0,children:[(0,o.createComponentVNode)(2,d,{modal_function:b,imageb64:C?C[y]:undefined}),(0,o.createComponentVNode)(2,p,{text:"Create single pill",onClick:function(){return i("makepill",{item_name:l,amount:h,icon:y})}}),(0,o.createComponentVNode)(2,s,{set_amount:g,current_amount:h,max_amount:m})]})]})};t.MakePill=f;var h=function(e,t){var n=(0,r.useBackend)(t),i=n.act,c=n.data,l=e.item_name,f=e.max_volume,h=(0,r.useSharedState)(t,"use_bottle",!0),g=h[0],C=h[1],N=(0,r.useSharedState)(t,"multiple_pills_amount",5),v=N[0],b=N[1],V=c.pill_icons,y=(0,r.useLocalState)(t,"modal_multiplepills",!1),x=y[0],I=y[1],k=(0,r.useSharedState)(t,"icon_multiplepills",0),w=k[0],S=k[1],_=function(){return I(!1)};return(0,o.createComponentVNode)(2,a.Box,{children:[x&&(0,o.createComponentVNode)(2,u,{icon_list:0,set_icon:function(e){S(e),_()},cancel_modal:_}),(0,o.createComponentVNode)(2,a.LabeledControls,{width:0,children:[(0,o.createComponentVNode)(2,d,{modal_function:I,imageb64:V?V[w]:undefined}),(0,o.createComponentVNode)(2,p,{text:"Create multiple pills",onClick:function(){return i("makepills",{item_name:l,amount:v,use_bottle:g,icon:w})}}),(0,o.createComponentVNode)(2,s,{set_amount:b,current_amount:v,max_amount:f}),(0,o.createComponentVNode)(2,m,{label:"Use bottle",checked:g,set_function:C})]})]})};t.MakePills=h;var g=function(e,t){var n=(0,r.useBackend)(t),i=n.act,c=n.data,l=(0,r.useSharedState)(t,"bottle_amount",50),m=l[0],f=l[1],h=e.item_name,g=c.bottle_icons,C=(0,r.useLocalState)(t,"modal_bottle",!1),N=C[0],v=C[1],b=(0,r.useSharedState)(t,"icon_bottle",2),V=b[0],y=b[1],x=function(){return v(!1)};return(0,o.createComponentVNode)(2,a.Box,{children:[N&&(0,o.createComponentVNode)(2,u,{icon_list:1,set_icon:function(e){y(e),f(g[e][0]),x()},cancel_modal:x}),(0,o.createComponentVNode)(2,a.LabeledControls,{width:0,children:[(0,o.createComponentVNode)(2,d,{modal_function:v,imageb64:g?g[V][1]:undefined}),(0,o.createComponentVNode)(2,p,{text:"Create bottle",onClick:function(){return i("makebottle",{item_name:h,amount:m,bottle:V})}}),(0,o.createComponentVNode)(2,s,{set_amount:f,current_amount:m,max_amount:g?g[V][0]:50})]})]})};t.MakeBottle=g;var C=function(e,t){var n=(0,r.useBackend)(t),i=n.act,c=n.data,l=(0,r.useSharedState)(t,"single_patch_amount",30),m=l[0],f=l[1],h=e.item_name,g=c.patch_icons,C=(0,r.useLocalState)(t,"modal_singlepatch",!1),N=C[0],v=C[1],b=(0,r.useSharedState)(t,"icon_singlepatch",1),V=b[0],y=b[1],x=function(){return v(!1)};return(0,o.createComponentVNode)(2,a.Box,{children:[N&&(0,o.createComponentVNode)(2,u,{icon_list:2,set_icon:function(e){y(e),f(g[e][0]),x()},cancel_modal:x}),(0,o.createComponentVNode)(2,a.LabeledControls,{width:0,children:[(0,o.createComponentVNode)(2,d,{modal_function:v,imageb64:g?g[V][1]:undefined}),(0,o.createComponentVNode)(2,p,{text:"Create single patch",onClick:function(){return i("makepatch",{item_name:h,amount:m,patch:V})}}),(0,o.createComponentVNode)(2,s,{set_amount:f,current_amount:m,max_amount:g?g[V][0]:30})]})]})};t.MakePatch=C;var N=function(e,t){var n=(0,r.useBackend)(t),i=n.act,c=n.data,l=(0,r.useSharedState)(t,"use_box",!0),f=l[0],h=l[1],g=(0,r.useSharedState)(t,"multiple_patches_amount",30),C=g[0],N=g[1],v=e.item_name,b=c.patch_icons,V=(0,r.useLocalState)(t,"modal_multiplepatches",!1),y=V[0],x=V[1],I=(0,r.useSharedState)(t,"icon_multiplepatches",1),k=I[0],w=I[1],S=function(){return x(!1)};return(0,o.createComponentVNode)(2,a.Box,{children:[y&&(0,o.createComponentVNode)(2,u,{icon_list:2,set_icon:function(e){w(e),N(b[e][0]),S()},cancel_modal:S}),(0,o.createComponentVNode)(2,a.LabeledControls,{width:0,children:[(0,o.createComponentVNode)(2,d,{modal_function:x,imageb64:b?b[k][1]:undefined}),(0,o.createComponentVNode)(2,p,{text:"Create multiple patches",onClick:function(){return i("makepatches",{item_name:v,amount:C,use_box:f,patch:k})}}),(0,o.createComponentVNode)(2,s,{set_amount:N,current_amount:C,max_amount:b?b[k][0]:30}),(0,o.createComponentVNode)(2,m,{label:"Use patch box",checked:f,set_function:h})]})]})};t.MakePatches=N;var v=function(e,t){(0,r.useBackend)(t).act;var n=e.placeholder,i=e.item_name,c=e.set_item_name,l=e.max_volume,u=-.5;return(0,o.createComponentVNode)(2,a.SectionEx,{capitalize:!0,title:"Operations",buttons:(0,o.createComponentVNode)(2,a.Box,{align:"left",as:"span",children:["Name: ",(0,o.createComponentVNode)(2,a.Input,{value:i,placeholder:n,onChange:function(e,t){c(t)}})]}),children:(0,o.createComponentVNode)(2,a.Stack,{vertical:!0,children:[(0,o.createComponentVNode)(2,a.Stack.Item,{mb:u,height:3,children:(0,o.createComponentVNode)(2,f,{max_volume:l,item_name:i})}),(0,o.createComponentVNode)(2,a.Stack.Item,{mb:u,height:3,children:(0,o.createComponentVNode)(2,h,{max_volume:l,item_name:i})}),(0,o.createComponentVNode)(2,a.Stack.Item,{mb:u,height:3,children:(0,o.createComponentVNode)(2,g,{item_name:i})}),(0,o.createComponentVNode)(2,a.Stack.Item,{mb:u,height:3,children:(0,o.createComponentVNode)(2,C,{item_name:i})}),(0,o.createComponentVNode)(2,a.Stack.Item,{mb:u,height:3,children:(0,o.createComponentVNode)(2,N,{item_name:i})})]})})};t.OperationsSection=v;t.ChemMaster=function(e,t){var n,a=(0,r.useBackend)(t).data,c=null!=(n=a.default_name)?n:null,u=(0,r.useLocalState)(t,"item_name",""),d=u[0],s=u[1],p=a.container?a.container.maxVolume:100;return(0,o.createComponentVNode)(2,i.Window,{width:435,height:480,theme:"ntos",children:(0,o.createComponentVNode)(2,i.Window.Content,{children:[(0,o.createComponentVNode)(2,l,{container:a.container,max_volume:p}),(0,o.createComponentVNode)(2,v,{container:a.container,max_volume:p,item_name:d,set_item_name:s,placeholder:c})]})})}},48230:function(e,t,n){"use strict";t.__esModule=!0,t.ChemRequestReceiver=void 0;var o=n(96323),r=n(31246),a=n(26949),i=n(2381),c=n(21118),l=function(e,t){var n=(0,r.useBackend)(t).act,i=e.name,l=e.id,u=e.reagent_name,d=e.reagent_color,s=e.volume,p=e.notes,m=e.area,f=e.state,h=e.interactable,g=e.age,C="rgba("+d[0]+","+d[1]+", "+d[2]+", 1)";return(0,o.createComponentVNode)(2,a.Section,{children:(0,o.createComponentVNode)(2,a.Flex,{direction:"column",height:10,children:[(0,o.createComponentVNode)(2,a.Flex.Item,{grow:1,children:(0,o.createComponentVNode)(2,a.Stack,{vertical:!0,children:[(0,o.createComponentVNode)(2,a.Stack.Item,{children:[i," requested"]}),(0,o.createComponentVNode)(2,a.Stack.Item,{align:"center",children:(0,o.createComponentVNode)(2,a.Box,{width:16,textAlign:"center",children:[(0,o.createComponentVNode)(2,a.Icon,{color:C,name:"circle",pt:1,style:{"text-shadow":"0 0 3px #000"}})," "+(0,c.capitalize)(u)," (",s,"u)"]})}),(0,o.createComponentVNode)(2,a.Stack.Item,{children:["from ",m," ",g," ago. ",(0,o.createVNode)(1,"br")," ",p&&"Notes: "+p]})]})}),(0,o.createComponentVNode)(2,a.Flex.Item,{children:(0,o.createComponentVNode)(2,a.Box,{children:["pending"===f&&(0,o.createFragment)([(0,o.createComponentVNode)(2,a.Button,{disabled:!h,align:"center",width:"49.5%",color:"red",icon:"ban",onClick:function(){n("deny",{id:l})},children:"Deny"}),(0,o.createComponentVNode)(2,a.Button,{disabled:!h,align:"center",width:"49.5%",icon:"check",onClick:function(){n("fulfil",{id:l})},children:"Mark as fulfilled"})],4),"pending"!==f&&(0,o.createComponentVNode)(2,a.Box,{align:"center",backgroundColor:"denied"===f?"red":"green",children:(0,c.capitalize)(f)})]})})]})})};t.ChemRequestReceiver=function(e,t){var n=(0,r.useBackend)(t),c=(n.act,n.data),u=(0,r.useLocalState)(t,"tabIndex",1),d=u[0],s=u[1],p=c.requests,m=c.allowed,f=0;return(0,o.createComponentVNode)(2,i.Window,{title:"Chemical requests",width:600,height:600,children:(0,o.createComponentVNode)(2,i.Window.Content,{scrollable:!0,children:[(0,o.createComponentVNode)(2,a.Tabs,{children:[(0,o.createComponentVNode)(2,a.Tabs.Tab,{selected:1===d,onClick:function(){return s(1)},children:"Pending"}),(0,o.createComponentVNode)(2,a.Tabs.Tab,{selected:2===d,onClick:function(){return s(2)},children:"History"})]}),(0,o.createComponentVNode)(2,a.Stack,{wrap:"wrap",children:p.map((function(e){if("pending"===e.state&&1===d||"pending"!==e.state&&2===d)return(0,o.createComponentVNode)(2,a.Stack.Item,{py:1,width:23,ml:0==f++?1:undefined,children:(0,o.normalizeProps)((0,o.createComponentVNode)(2,l,Object.assign({interactable:m},e)))},e.id)}))})]})})}},20938:function(e,t,n){"use strict";t.__esModule=!0,t.ChemRequester=void 0;var o=n(96323),r=n(31246),a=n(26949),i=n(2381),c=n(21118),l=n(36814),u=n(8095),d=function(e,t){var n=(0,r.useBackend)(t).act,a=e.chemicals,i=(0,r.useLocalState)(t,"searchText",""),c=i[0],u=i[1],d=Object.keys(a).filter((function(e){return e.includes(c)}));return(0,o.createComponentVNode)(2,l.ListSearch,{autoFocus:!0,currentSearch:c,options:d,onSearch:u,onSelect:function(e){n("set_reagent",{reagent_name:e,reagent_id:a[e]}),u("")}})};t.ChemRequester=function(e,t){var n=(0,r.useBackend)(t),l=n.act,s=n.data,p=s.chemicals,m=s.card,f=s.selected_reagent,h=s.volume,g=s.max_volume,C=s.notes,N=s.silicon_user,v=(0,r.useLocalState)(t,"notesText",""),b=v[0],V=v[1];return(0,o.createComponentVNode)(2,i.Window,{title:"Chemical request",width:400,height:600,children:(0,o.createComponentVNode)(2,i.Window.Content,{align:"center",children:[!!m&&(0,o.createComponentVNode)(2,a.Stack,{vertical:!0,children:[(0,o.createComponentVNode)(2,a.Stack.Item,{children:(0,o.createComponentVNode)(2,u.IDCard,{card:m,onEject:function(){l("reset_id")}})}),(0,o.createComponentVNode)(2,a.Stack.Item,{children:[!f&&(0,o.createComponentVNode)(2,a.Section,{height:36,fill:!0,scrollable:!0,children:(0,o.createComponentVNode)(2,d,{chemicals:p})}),!!f&&(0,o.createComponentVNode)(2,a.Button,{onClick:function(){l("set_reagent",{reagent:null})},children:(0,c.capitalize)(f)})]}),(0,o.createComponentVNode)(2,a.Stack.Item,{children:(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Amount",children:(0,o.createComponentVNode)(2,a.NumberInput,{align:"left",unit:"u",minValue:5,step:5,maxValue:g,value:h,onChange:function(e,t){l("set_volume",{volume:t})}})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Notes",children:(0,o.createComponentVNode)(2,a.Input,{width:"100%",value:b,maxLength:65,onInput:V,onChange:function(e,t){l("set_notes",{notes:t})},children:C})})]})}),(0,o.createComponentVNode)(2,a.Stack.Item,{children:(0,o.createComponentVNode)(2,a.Button,{onClick:function(){l("submit"),V("")},children:"Submit request"})})]}),!m&&!N&&(0,o.createComponentVNode)(2,a.Section,{children:"Please swipe ID to place request."}),!m&&!!N&&(0,o.createComponentVNode)(2,a.Section,{children:(0,o.createComponentVNode)(2,a.Button,{onClick:function(){return l("silicon_login")},children:"Login to place request."})})]})})}},6542:function(e,t,n){"use strict";t.__esModule=!0,t.CloningConsole=t.shortenNumber=void 0;var o=n(96323),r=n(31246),a=n(26949),i=n(2381),c=n(65751),l=n(97622),u=["type"];var d=["","k","M","B","T"],s=function(e,t){void 0===t&&(t=0);var n=Math.log10(Math.abs(e))/3|0;return n===t?e:""+Math.round(e/Math.pow(10,3*n))+d[n]};t.shortenNumber=s;var p=["#17d568","#2ecc71","#e67e22","#ed5100","#e74c3c","#ed2814"],m="functions",f="records",h="pods",g="danger",C="info",N="success",v=function(e){var t=e.type,n=function(e,t){if(null==e)return{};var n,o,r={},a=Object.keys(e);for(o=0;o<a.length;o++)n=a[o],t.indexOf(n)>=0||(r[n]=e[n]);return r}(e,u),r=Object.assign({},t===g?{danger:!0}:{},t===C?{info:!0}:{},t===N?{success:!0}:{});return(0,o.normalizeProps)((0,o.createComponentVNode)(2,a.NoticeBox,Object.assign({},r,n)))};t.CloningConsole=function(e,t){var n=(0,r.useBackend)(t),c=n.data,l=n.act,u=c.balance,d=c.cloneHack,s=c.clonesForCash,p=c.cloningWithRecords,g=c.allowedToDelete,C=(0,r.useLocalState)(t,"deletionTarget",""),N=C[0],v=C[1],I=(0,r.useLocalState)(t,"viewingNote",""),k=I[0],w=I[1],S=(0,r.useSharedState)(t,"tab",f),_=S[0],M=S[1];return p||_!==f||M(h),(0,o.createComponentVNode)(2,i.Window,{theme:d.some(Boolean)?"syndicate":"ntos",width:540,height:595,children:(0,o.createComponentVNode)(2,i.Window.Content,{children:[N&&(0,o.createComponentVNode)(2,a.Modal,{mx:7,fontSize:"31px",children:[(0,o.createComponentVNode)(2,a.Flex,{align:"center",children:[(0,o.createComponentVNode)(2,a.Flex.Item,{mr:2,mt:1,children:(0,o.createComponentVNode)(2,a.Icon,{name:"trash"})}),(0,o.createComponentVNode)(2,a.Flex.Item,{children:"Delete Record?"})]}),(0,o.createComponentVNode)(2,a.Box,{mt:2,textAlign:"center",fontSize:"24px",children:[(0,o.createComponentVNode)(2,a.Button,{lineHeight:"40px",icon:"check",color:"good",onClick:function(){l("delete",{id:N}),v("")},children:"Yes"}),(0,o.createComponentVNode)(2,a.Button,{width:8,align:"center",mt:2,ml:5,lineHeight:"40px",icon:"times",color:"bad",onClick:function(){return v("")},children:"No"})]})]}),k&&(0,o.createComponentVNode)(2,a.Modal,{mx:7,width:25,fontSize:"15px",children:[(0,o.createComponentVNode)(2,a.Button,{fontSize:"26px",color:"blue",onClick:function(){return w("")},style:{position:"absolute",top:"5px",right:"5px"},children:"X"}),k.note,!!g&&(0,o.createComponentVNode)(2,a.Button,{color:"bad",icon:"trash",mx:1,onClick:function(){w(""),l("deleteNote",{id:k.id})}})]}),(0,o.createComponentVNode)(2,a.Stack,{vertical:!0,fill:!0,children:[(0,o.createComponentVNode)(2,a.Stack.Item,{children:(0,o.createComponentVNode)(2,a.Section,{fitted:!0,children:(0,o.createComponentVNode)(2,a.Tabs,{children:[!!p&&(0,o.createComponentVNode)(2,a.Tabs.Tab,{icon:"list",selected:_===f,onClick:function(){return M(f)},children:"Records"}),(0,o.createComponentVNode)(2,a.Tabs.Tab,{icon:"box",selected:_===h,onClick:function(){return M(h)},children:"Pods"}),(0,o.createComponentVNode)(2,a.Tabs.Tab,{icon:"wrench",selected:_===m,onClick:function(){return M(m)},children:"Functions"})]})})}),!!s&&(0,o.createComponentVNode)(2,a.Stack.Item,{children:(0,o.createComponentVNode)(2,a.Section,{children:["Current machine credit: ",u]})}),(0,o.createComponentVNode)(2,a.Stack.Item,{children:(0,o.createComponentVNode)(2,V)}),(0,o.createComponentVNode)(2,a.Stack.Item,{grow:1,children:[_===f&&!!p&&(0,o.createComponentVNode)(2,y),_===h&&(0,o.createComponentVNode)(2,x),_===m&&(0,o.createComponentVNode)(2,b)]})]})]})})};var b=function(e,t){var n=(0,r.useBackend)(t),i=n.act,c=n.data,l=c.allowMindErasure,u=c.disk,d=c.diskReadOnly,s=c.geneticAnalysis,p=c.mindWipe,m=c.cloningWithRecords;return(0,o.createFragment)([(0,o.createComponentVNode)(2,a.Section,{title:"Advanced Genetic Analysis",children:[(0,o.createComponentVNode)(2,a.Box,{children:[(0,o.createComponentVNode)(2,a.Box,{bold:!0,children:"Notice:"}),(0,o.createComponentVNode)(2,a.Box,{children:"Enabling this feature will prompt the attached clone pod to transfer active genetic mutations from the genetic record to the subject during cloning."}),(0,o.createComponentVNode)(2,a.Box,{children:"The cloning process will be slightly slower as a result."})]}),(0,o.createComponentVNode)(2,a.Box,{pt:2,children:(0,o.createComponentVNode)(2,a.Button,{textAlign:"center",width:6.7,icon:s?"toggle-on":"toggle-off",color:s?"good":"bad",onClick:function(){return i("toggleGeneticAnalysis")},children:s?"Enabled":"Disabled"})})]}),!!l&&(0,o.createComponentVNode)(2,a.Section,{title:"Criminal Rehabilitation Controls",children:[(0,o.createComponentVNode)(2,a.Box,{children:[(0,o.createComponentVNode)(2,a.Box,{bold:!0,children:"Notice:"}),(0,o.createComponentVNode)(2,a.Box,{children:"Enabling this feature will enable an experimental criminal rehabilitation routine."}),(0,o.createComponentVNode)(2,a.Box,{bold:!0,children:"Human use is specifically forbidden by the Space Geneva convention."})]}),(0,o.createComponentVNode)(2,a.Box,{pt:2,children:(0,o.createComponentVNode)(2,a.Button,{textAlign:"center",width:6.7,icon:p?"toggle-on":"toggle-off",color:p?"good":"bad",onClick:function(){return i("mindWipeToggle")},children:p?"Enabled":"Disabled"})})]}),!!u&&(0,o.createComponentVNode)(2,a.Section,{title:"Disk Controls",buttons:(0,o.createFragment)([m?(0,o.createComponentVNode)(2,a.Button,{icon:"upload",color:"blue",onClick:function(){return i("load")},children:"Load from disk"}):(0,o.createComponentVNode)(2,a.Button,{icon:"upload",color:"blue",onClick:function(){return i("loadAndClone")},children:"Clone from disk"}),(0,o.createComponentVNode)(2,a.Button,{icon:"eject",color:"bad",onClick:function(){return i("eject")},children:"Eject Disk"})],0),children:(0,o.createComponentVNode)(2,a.Box,{children:[(0,o.createComponentVNode)(2,a.Icon,{color:d?"bad":"good",name:"check"})," ",d?"Disk is read only.":"Disk is writeable."]})})],0)},V=function(e,t){var n=(0,r.useBackend)(t),i=n.act,c=n.data,l=c.scannerLocked,u=c.occupantScanned,d=c.scannerOccupied,s=c.scannerGone,p=c.cloningWithRecords,m=c.message||{text:"",status:""};return(0,o.createFragment)([(0,o.createComponentVNode)(2,a.Section,{title:"Status Messages",height:7,children:m.text&&(0,o.createComponentVNode)(2,v,{type:m.status,textColor:"white",height:3.17,align:"center",style:{"vertical-align":"middle","horizontal-align":"middle"},children:(0,o.createComponentVNode)(2,a.Box,{style:{position:"relative",left:"50%",top:"50%",transform:"translate(-50%, -50%)"},children:m.text})})}),(0,o.createComponentVNode)(2,a.Section,{title:"Scanner Controls",buttons:(0,o.createComponentVNode)(2,a.Button,{width:7,icon:l?"unlock":"lock-open",align:"center",color:l?"bad":"good",onClick:function(){return i("toggleLock")},children:l?"Locked":"Unlocked"}),children:[!!p&&(!!s||!!u||!d)&&(0,o.createComponentVNode)(2,a.Box,{children:[(0,o.createComponentVNode)(2,a.Icon,{color:s||!d?"bad":"good",name:s||!d?"times":"check"})," ",!!s&&"No scanner detected.",!s&&(d?"Occupant scanned.":"Scanner has no occupant.")]}),!s&&!u&&!!d&&!!p&&(0,o.createComponentVNode)(2,a.Button,{width:s?8:7,icon:"dna",align:"center",color:s?"bad":"good",disabled:u||s,onClick:function(){return i("scan")},children:"Scan"}),!s&&!!d&&!p&&(0,o.createComponentVNode)(2,a.Button,{icon:"dna",align:"center",color:"good",onClick:function(){return i("scanAndClone")},children:"Scan & Clone"})]})],4)},y=function(e,t){var n=(0,r.useBackend)(t),i=n.act,u=n.data,d=u.disk,m=u.diskReadOnly,f=u.allowedToDelete,h=u.meatLevels,g=u.cloneRecords||[],C=(0,r.useLocalState)(t,"deletionTarget","")[1],N=(0,r.useLocalState)(t,"viewingNote",""),v=(N[0],N[1]);return(0,o.createComponentVNode)(2,a.Flex,{direction:"column",height:"100%",children:[(0,o.createComponentVNode)(2,a.Flex.Item,{children:(0,o.createComponentVNode)(2,a.Section,{mb:0,title:"Records",style:{"border-bottom":"2px solid rgba(51, 51, 51, 0.4);"},children:(0,o.createComponentVNode)(2,a.Flex,{className:"cloning-console__flex__head",children:(0,o.createComponentVNode)(2,a.Flex.Item,{className:"cloning-console__head__row",mr:2,children:[(0,o.createComponentVNode)(2,a.Flex.Item,{className:"cloning-console__head__item",style:{width:"190px"},children:"Name"}),(0,o.createComponentVNode)(2,a.Flex.Item,{className:"cloning-console__head__item",style:{width:"160px"},children:[(0,o.createComponentVNode)(2,a.Box,{children:"Damage"}),(0,o.createComponentVNode)(2,a.Box,{style:{position:"absolute",left:"50%",top:"20%",transform:"translate(-40%, 22px)"},fontSize:"9px",children:"OXY / TOX / BURN / BRUTE"})]}),(0,o.createComponentVNode)(2,a.Flex.Item,{className:"cloning-console__head__item",style:{width:"180px"},children:"Actions"})]})})})}),(0,o.createComponentVNode)(2,a.Flex.Item,{grow:1,children:(0,o.createComponentVNode)(2,a.Section,{scrollable:!0,fill:!0,children:(0,o.createComponentVNode)(2,a.Flex,{children:(0,o.createComponentVNode)(2,a.Flex.Item,{className:"cloning-console__flex__table",children:(0,o.createComponentVNode)(2,a.Flex.Item,{children:g.map((function(e){return(0,o.createComponentVNode)(2,a.Flex.Item,{className:"cloning-console__body__row",children:[(0,o.createComponentVNode)(2,a.Flex.Item,{inline:!0,className:"cloning-console__body__item",style:{width:"190px"},children:e.name}),(0,o.createComponentVNode)(2,a.Flex.Item,{className:"cloning-console__body__item",style:{width:"160px"},children:[(0,o.createComponentVNode)(2,a.ColorBox,{mr:1,color:(t=e.health.OXY,n=e.health.TOX,r=e.health.BURN,u=e.health.BRUTE,g=t+n+r+u,N=(0,l.clamp)(Math.ceil(g/25),0,5),p[N])}),e.implant&&e.health.OXY>=0?(0,o.createComponentVNode)(2,a.Box,{inline:!0,children:[(0,o.createComponentVNode)(2,c.HealthStat,{inline:!0,align:"center",type:"oxy",width:2,children:s(e.health.OXY)}),"/",(0,o.createComponentVNode)(2,c.HealthStat,{inline:!0,align:"center",type:"toxin",width:2,children:s(e.health.TOX)}),"/",(0,o.createComponentVNode)(2,c.HealthStat,{inline:!0,align:"center",type:"burn",width:2,children:s(e.health.BURN)}),"/",(0,o.createComponentVNode)(2,c.HealthStat,{inline:!0,align:"center",type:"brute",width:2,children:s(e.health.BRUTE)})]}):"No Implant Detected"]}),(0,o.createComponentVNode)(2,a.Flex.Item,{align:"baseline",className:"cloning-console__body__item",style:{width:"180px"},children:[!!f&&(0,o.createFragment)([(0,o.createComponentVNode)(2,a.Button,{icon:"trash",color:"bad",onClick:function(){return C(e.id)}}),(0,o.createComponentVNode)(2,a.Button,{icon:"pencil",color:"blue",onClick:function(){return i("editNote",{id:e.id})},tooltip:"Edit note"})],4),!!d&&(0,o.createComponentVNode)(2,a.Button,{icon:m||e.saved?"":"save",color:"blue",alignText:"center",width:"22px",disabled:e.saved||m,onClick:function(){return i("saveToDisk",{id:e.id})},children:[!m&&!!e.saved&&(0,o.createComponentVNode)(2,a.Icon,{color:"black",name:"check"}),!!m&&(0,o.createComponentVNode)(2,a.Icon.Stack,{children:[(0,o.createComponentVNode)(2,a.Icon,{color:"black",name:"pen"}),(0,o.createComponentVNode)(2,a.Icon,{color:"black",name:"slash"})]})]}),(0,o.createComponentVNode)(2,a.Button,{icon:"dna",color:"good",disabled:!h.length,onClick:function(){return i("clone",{id:e.id})},children:"Clone"}),!!e.note&&(0,o.createComponentVNode)(2,a.Button,{color:"blue",circular:!0,icon:"circle-exclamation",onClick:function(){return v({note:e.note,id:e.id})},tooltip:"View note"})]})]},e.id);var t,n,r,u,g,N}))})})})})})]})},x=function(e,t){var n=(0,r.useBackend)(t).data,i=n.completion,c=n.meatLevels,l=n.podNames;return c.length?c.map((function(e,t){return(0,o.createComponentVNode)(2,a.Section,{title:l[t].replace(/cloning pod/,"Cloning Pod")+" Status",children:(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Completion",children:(0,o.createComponentVNode)(2,a.ProgressBar,{value:i[t],maxValue:100,minValue:0,ranges:{good:[90,Infinity],average:[25,90],bad:[-Infinity,25]}})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Bio-Matter",children:(0,o.createComponentVNode)(2,a.ProgressBar,{value:e,maxValue:100,minValue:0,ranges:{good:[50,100],average:[25,50],bad:[0,25]}})})]})},"pod"+t)})):(0,o.createComponentVNode)(2,a.Section,{title:"Cloning Pod Status",children:(0,o.createComponentVNode)(2,a.Box,{children:[(0,o.createComponentVNode)(2,a.Icon,{color:"bad",name:"times"})," No Pod Detected"]})})}},78826:function(e,t,n){"use strict";t.__esModule=!0,t.ClothingBooth=void 0;var o=n(96323),r=n(1060),a=n(31246),i=n(26949),c=n(2381),l=n(18331);t.ClothingBooth=function(e,t){var n=(0,a.useBackend)(t).data,r=n.clothingBoothCategories||[],l=(0,a.useLocalState)(t,"selectedCategory",r[0]),p=l[0],m=l[1],f=p.items;return(0,o.createComponentVNode)(2,c.Window,{title:n.name,width:300,height:500,children:(0,o.createComponentVNode)(2,c.Window.Content,{children:(0,o.createComponentVNode)(2,i.Stack,{fill:!0,vertical:!0,children:[(0,o.createComponentVNode)(2,i.Stack.Item,{children:(0,o.createComponentVNode)(2,i.Section,{fill:!0,children:(0,o.createComponentVNode)(2,i.Stack,{fill:!0,align:"center",justify:"space-between",children:[(0,o.createComponentVNode)(2,i.Stack.Item,{bold:!0,children:"Cash: "+n.money+"\u2abd"}),(0,o.createComponentVNode)(2,i.Stack.Item,{children:(0,o.createComponentVNode)(2,i.Dropdown,{className:"clothingbooth__dropdown",options:r.map((function(e){return e.category})),selected:p.category,onSelected:function(e){return m(r[r.findIndex((function(t){return t.category===e}))])}})})]})})}),(0,o.createComponentVNode)(2,i.Stack.Item,{grow:1,children:(0,o.createComponentVNode)(2,i.Stack,{fill:!0,vertical:!0,children:(0,o.createComponentVNode)(2,i.Stack.Item,{grow:1,children:(0,o.createComponentVNode)(2,i.Section,{fill:!0,scrollable:!0,children:f.map((function(e){return(0,o.createComponentVNode)(2,u,{item:e},e.name)}))})})})}),(0,o.createComponentVNode)(2,i.Stack.Item,{children:(0,o.createComponentVNode)(2,i.Stack,{children:[(0,o.createComponentVNode)(2,i.Stack.Item,{align:"center",children:(0,o.createComponentVNode)(2,i.Section,{fill:!0,children:(0,o.createComponentVNode)(2,d)})}),(0,o.createComponentVNode)(2,i.Stack.Item,{grow:1,children:(0,o.createComponentVNode)(2,i.Section,{fill:!0,title:"Purchase Info",children:(0,o.createComponentVNode)(2,i.Stack,{fill:!0,vertical:!0,justify:"space-around",children:(0,o.createComponentVNode)(2,i.Stack.Item,{children:(0,o.createComponentVNode)(2,s)})})})})]})})]})})})};var u=function(e,t){var n=(0,a.useBackend)(t),c=n.act,u=n.data,d=e.item;return(0,o.createFragment)([(0,o.createComponentVNode)(2,i.Stack,{align:"center",className:(0,r.classes)(["clothingbooth__boothitem",d.name===u.selectedItemName&&"clothingbooth__boothitem-selected"]),onClick:function(){return c("select",{path:d.path})},children:[(0,o.createComponentVNode)(2,i.Stack.Item,{children:(0,o.createVNode)(1,"img",null,null,1,{src:"data:image/png;base64,"+d.img})}),(0,o.createComponentVNode)(2,i.Stack.Item,{grow:1,children:(0,o.createComponentVNode)(2,i.Box,{bold:!0,children:(0,l.capitalize)(d.name)})}),(0,o.createComponentVNode)(2,i.Stack.Item,{bold:!0,children:d.cost+"\u2abd"})]}),(0,o.createComponentVNode)(2,i.Divider)],4)},d=function(e,t){var n=(0,a.useBackend)(t),r=n.act,c=n.data;return(0,o.createComponentVNode)(2,i.Stack,{vertical:!0,align:"center",children:[(0,o.createComponentVNode)(2,i.Stack.Item,{textAlign:!0,children:(0,o.createComponentVNode)(2,i.Image,{height:2*c.previewHeight+"px",pixelated:!0,src:"data:image/png;base64,"+c.previewIcon})}),(0,o.createComponentVNode)(2,i.Stack.Item,{children:[(0,o.createComponentVNode)(2,i.Button,{icon:"chevron-left",tooltip:"Clockwise",tooltipPosition:"right",onClick:function(){return r("rotate-cw")}}),(0,o.createComponentVNode)(2,i.Button,{icon:"chevron-right",tooltip:"Counter-clockwise",tooltipPosition:"right",onClick:function(){return r("rotate-ccw")}})]})]})},s=function(e,t){var n=(0,a.useBackend)(t),r=n.act,c=n.data;return(0,o.createComponentVNode)(2,i.Stack,{bold:!0,vertical:!0,textAlign:"center",children:c.selectedItemName?(0,o.createFragment)([(0,o.createComponentVNode)(2,i.Stack.Item,{children:"Selected: "+c.selectedItemName}),(0,o.createComponentVNode)(2,i.Stack.Item,{children:"Price: "+c.selectedItemCost+"\u2abd"}),(0,o.createComponentVNode)(2,i.Stack.Item,{children:(0,o.createComponentVNode)(2,i.Button,{color:"green",disabled:c.selectedItemCost>c.money,onClick:function(){return r("purchase")},children:c.selectedItemCost>c.money?"Insufficient Cash":"Purchase"})})],4):(0,o.createComponentVNode)(2,i.Stack.Item,{children:"Please select an item."})})}},41717:function(){},70855:function(e,t,n){"use strict";t.__esModule=!0,t.ColorMatrixEditor=void 0;var o=n(96323),r=n(31246),a=n(97622),i=n(26949),c=n(2381);t.ColorMatrixEditor=function(e,t){var n=(0,r.useBackend)(t),l=n.act,u=n.data,d=u.currentColor,s=d[0],p=(s[0],s[1],s[2],s[3],d[1]),m=(p[0],p[1],p[2],p[3],d[2]),f=(m[0],m[1],m[2],m[3],d[3]),h=(f[0],f[1],f[2],f[3],d[4]),g=(h[0],h[1],h[2],h[3],["r","g","b","a","c"]);return(0,o.createComponentVNode)(2,c.Window,{title:"Color Matrix Editor",width:560,height:245,children:(0,o.createComponentVNode)(2,c.Window.Content,{children:(0,o.createComponentVNode)(2,i.Stack,{fill:!0,children:[(0,o.createComponentVNode)(2,i.Stack.Item,{align:"center",children:(0,o.createComponentVNode)(2,i.Stack,{fill:!0,vertical:!0,children:[(0,o.createComponentVNode)(2,i.Stack.Item,{grow:!0}),(0,o.createComponentVNode)(2,i.Stack.Item,{children:(0,o.createComponentVNode)(2,i.Section,{children:(0,o.createComponentVNode)(2,i.Stack,{children:[0,1,2,3].map((function(e,t){return(0,o.createComponentVNode)(2,i.Stack.Item,{children:(0,o.createComponentVNode)(2,i.Stack,{vertical:!0,children:[0,1,2,3,4].map((function(t,n){return(0,o.createComponentVNode)(2,i.Stack.Item,{children:[(0,o.createComponentVNode)(2,i.Box,{inline:!0,textColor:"label",width:"2.1rem",children:""+g[t]+g[e]+":"}),(0,o.createComponentVNode)(2,i.NumberInput,{inline:!0,value:u.currentColor[4*t+e],step:.01,width:"50px",format:function(e){return(0,a.toFixed)(e,2)},onDrag:function(n,o){var r=u.currentColor;r[4*t+e]=o,l("transition_color",{color:r})}})]},n)}))})},t)}))})})}),(0,o.createComponentVNode)(2,i.Stack.Item,{grow:!0}),(0,o.createComponentVNode)(2,i.Stack.Item,{align:"left",children:[(0,o.createComponentVNode)(2,i.Button.Confirm,{content:"Confirm",confirmContent:"Confirm?",onClick:function(){return l("confirm")}}),u.targetIsClient?(0,o.createFragment)([(0,o.createComponentVNode)(2,i.Button,{content:"Preview Color",onClick:function(){return l("client-preview")}}),(0,o.createComponentVNode)(2,i.Button,{content:"Reset Your Color",onClick:function(){return l("client-reset")}})],4):""]})]})}),(0,o.createComponentVNode)(2,i.Stack.Item,{grow:!0,children:(0,o.createComponentVNode)(2,i.ByondUi,{params:{id:u.previewRef,type:"map"},style:{height:"100%"}})})]})})})}},21018:function(e,t,n){"use strict";t.__esModule=!0,t.ColorInput=t.HexColorInput=t.ColorSelector=t.ColorPickerModal=void 0;var o=n(96323),r=n(55631),a=n(31246),i=n(26949),c=n(2381),l=n(97622),u=n(89295),d=n(54291),s=n(1060),p=n(79926),m=n(34277),f=["prefixed","alpha","color","fluid","onChange"];function h(e,t){return h=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e},h(e,t)}t.ColorPickerModal=function(e,t){var n=(0,a.useBackend)(t).data,l=n.timeout,d=n.message,s=n.title,p=n.autofocus,f=n.default_color,h=void 0===f?"#000000":f,C=(0,a.useLocalState)(t,"color_picker_choice",(0,u.hexToHsva)(h)),N=C[0],v=C[1];return(0,o.createComponentVNode)(2,c.Window,{height:400,title:s,width:600,theme:"generic",children:[!!l&&(0,o.createComponentVNode)(2,r.Loader,{value:l}),(0,o.createComponentVNode)(2,c.Window.Content,{children:(0,o.createComponentVNode)(2,i.Stack,{fill:!0,vertical:!0,children:[d&&(0,o.createComponentVNode)(2,i.Stack.Item,{m:1,children:(0,o.createComponentVNode)(2,i.Section,{fill:!0,children:(0,o.createComponentVNode)(2,i.Box,{color:"label",overflow:"hidden",children:d})})}),(0,o.createComponentVNode)(2,i.Stack.Item,{grow:!0,children:(0,o.createComponentVNode)(2,i.Section,{fill:!0,children:[!!p&&(0,o.createComponentVNode)(2,i.Autofocus),(0,o.createComponentVNode)(2,g,{color:N,setColor:v,defaultColor:h})]})}),(0,o.createComponentVNode)(2,i.Stack.Item,{children:(0,o.createComponentVNode)(2,m.InputButtons,{input:(0,u.hsvaToHex)(N)})})]})})]})};var g=function(e,t){var n=e.color,r=e.setColor,a=e.defaultColor,c=function(e){r((function(t){return Object.assign({},t,e)}))},l=(0,u.hsvaToRgba)(n),d=(0,u.hsvaToHex)(n);return(0,o.createComponentVNode)(2,i.Flex,{direction:"row",children:[(0,o.createComponentVNode)(2,i.Flex.Item,{mr:2,children:(0,o.createComponentVNode)(2,i.Stack,{vertical:!0,children:[(0,o.createComponentVNode)(2,i.Stack.Item,{children:(0,o.createVNode)(1,"div","react-colorful",[(0,o.createComponentVNode)(2,V,{hsva:n,onChange:c}),(0,o.createComponentVNode)(2,y,{hue:n.h,onChange:c,className:"react-colorful__last-control"})],4)}),(0,o.createComponentVNode)(2,i.Stack.Item,{children:[(0,o.createComponentVNode)(2,i.Box,{inline:!0,width:"100px",height:"20px",textAlign:"center",children:"Current"}),(0,o.createComponentVNode)(2,i.Box,{inline:!0,width:"100px",height:"20px",textAlign:"center",children:"Previous"}),(0,o.createVNode)(1,"br"),(0,o.createComponentVNode)(2,i.Tooltip,{content:d,position:"bottom",children:(0,o.createComponentVNode)(2,i.Box,{inline:!0,width:"100px",height:"30px",backgroundColor:d})}),(0,o.createComponentVNode)(2,i.Tooltip,{content:a,position:"bottom",children:(0,o.createComponentVNode)(2,i.Box,{inline:!0,width:"100px",height:"30px",backgroundColor:a})})]})]})}),(0,o.createComponentVNode)(2,i.Flex.Item,{grow:!0,fontSize:"15px",lineHeight:"24px",children:(0,o.createComponentVNode)(2,i.Stack,{vertical:!0,children:[(0,o.createComponentVNode)(2,i.Stack.Item,{children:(0,o.createComponentVNode)(2,i.Stack,{children:[(0,o.createComponentVNode)(2,i.Stack.Item,{children:(0,o.createComponentVNode)(2,i.Box,{textColor:"label",children:"Hex:"})}),(0,o.createComponentVNode)(2,i.Stack.Item,{grow:!0,height:"24px",children:(0,o.createComponentVNode)(2,v,{fluid:!0,color:(0,u.hsvaToHex)(n).substring(1),onChange:function(e){p.logger.info(e),r((0,u.hexToHsva)(e))},prefixed:!0})})]})}),(0,o.createComponentVNode)(2,i.Stack.Divider),(0,o.createComponentVNode)(2,i.Stack.Item,{children:(0,o.createComponentVNode)(2,i.Stack,{children:[(0,o.createComponentVNode)(2,i.Stack.Item,{width:"25px",children:(0,o.createComponentVNode)(2,i.Box,{textColor:"label",children:"H:"})}),(0,o.createComponentVNode)(2,i.Stack.Item,{grow:!0,children:(0,o.createComponentVNode)(2,y,{hue:n.h,onChange:c})}),(0,o.createComponentVNode)(2,i.Stack.Item,{children:(0,o.createComponentVNode)(2,C,{value:n.h,callback:function(e,t){return c({h:t})},max:360,unit:"\xb0"})})]})}),(0,o.createComponentVNode)(2,i.Stack.Item,{children:(0,o.createComponentVNode)(2,i.Stack,{children:[(0,o.createComponentVNode)(2,i.Stack.Item,{width:"25px",children:(0,o.createComponentVNode)(2,i.Box,{textColor:"label",children:"S:"})}),(0,o.createComponentVNode)(2,i.Stack.Item,{grow:!0,children:(0,o.createComponentVNode)(2,x,{color:n,onChange:c})}),(0,o.createComponentVNode)(2,i.Stack.Item,{children:(0,o.createComponentVNode)(2,C,{value:n.s,callback:function(e,t){return c({s:t})},unit:"%"})})]})}),(0,o.createComponentVNode)(2,i.Stack.Item,{children:(0,o.createComponentVNode)(2,i.Stack,{children:[(0,o.createComponentVNode)(2,i.Stack.Item,{width:"25px",children:(0,o.createComponentVNode)(2,i.Box,{textColor:"label",children:"V:"})}),(0,o.createComponentVNode)(2,i.Stack.Item,{grow:!0,children:(0,o.createComponentVNode)(2,I,{color:n,onChange:c})}),(0,o.createComponentVNode)(2,i.Stack.Item,{children:(0,o.createComponentVNode)(2,C,{value:n.v,callback:function(e,t){return c({v:t})},unit:"%"})})]})}),(0,o.createComponentVNode)(2,i.Stack.Divider),(0,o.createComponentVNode)(2,i.Stack.Item,{children:(0,o.createComponentVNode)(2,i.Stack,{children:[(0,o.createComponentVNode)(2,i.Stack.Item,{width:"25px",children:(0,o.createComponentVNode)(2,i.Box,{textColor:"label",children:"R:"})}),(0,o.createComponentVNode)(2,i.Stack.Item,{grow:!0,children:(0,o.createComponentVNode)(2,k,{color:n,onChange:c,target:"r"})}),(0,o.createComponentVNode)(2,i.Stack.Item,{children:(0,o.createComponentVNode)(2,C,{value:l.r,callback:function(e,t){l.r=t,c((0,u.rgbaToHsva)(l))},max:255})})]})}),(0,o.createComponentVNode)(2,i.Stack.Item,{children:(0,o.createComponentVNode)(2,i.Stack,{children:[(0,o.createComponentVNode)(2,i.Stack.Item,{width:"25px",children:(0,o.createComponentVNode)(2,i.Box,{textColor:"label",children:"G:"})}),(0,o.createComponentVNode)(2,i.Stack.Item,{grow:!0,children:(0,o.createComponentVNode)(2,k,{color:n,onChange:c,target:"g"})}),(0,o.createComponentVNode)(2,i.Stack.Item,{children:(0,o.createComponentVNode)(2,C,{value:l.g,callback:function(e,t){l.g=t,c((0,u.rgbaToHsva)(l))},max:255})})]})}),(0,o.createComponentVNode)(2,i.Stack.Item,{children:(0,o.createComponentVNode)(2,i.Stack,{children:[(0,o.createComponentVNode)(2,i.Stack.Item,{width:"25px",children:(0,o.createComponentVNode)(2,i.Box,{textColor:"label",children:"B:"})}),(0,o.createComponentVNode)(2,i.Stack.Item,{grow:!0,children:(0,o.createComponentVNode)(2,k,{color:n,onChange:c,target:"b"})}),(0,o.createComponentVNode)(2,i.Stack.Item,{children:(0,o.createComponentVNode)(2,C,{value:l.b,callback:function(e,t){l.b=t,c((0,u.rgbaToHsva)(l))},max:255})})]})})]})})]})};t.ColorSelector=g;var C=function(e){var t=e.value,n=e.callback,r=e.min,a=void 0===r?0:r,c=e.max,l=void 0===c?100:c,u=e.unit;return(0,o.createComponentVNode)(2,i.NumberInput,{width:"70px",value:Math.round(t),step:1,minValue:a,maxValue:l,onChange:n,unit:u})},N=function(e){return"#"+e},v=function(e){var t=e.prefixed,n=e.alpha,r=e.color,a=e.fluid,i=e.onChange,c=function(e,t){if(null==e)return{};var n,o,r={},a=Object.keys(e);for(o=0;o<a.length;o++)n=a[o],t.indexOf(n)>=0||(r[n]=e[n]);return r}(e,f);return(0,o.normalizeProps)((0,o.createComponentVNode)(2,b,Object.assign({},c,{fluid:a,color:r,onChange:i,escape:function(e){return e.replace(/([^0-9A-F]+)/gi,"").substring(0,n?8:6)},format:t?N:undefined,validate:function(e){return(0,u.validHex)(e,n)}})))};t.HexColorInput=v;var b=function(e){var t,n;function r(t){var n;return(n=e.call(this)||this).props=void 0,n.state=void 0,n.handleInput=function(e){var t=n.props.escape(e.currentTarget.value);n.setState({localValue:t})},n.handleBlur=function(e){e.currentTarget&&(n.props.validate(e.currentTarget.value)?n.props.onChange(n.props.escape?n.props.escape(e.currentTarget.value):e.currentTarget.value):n.setState({localValue:n.props.escape(n.props.color)}))},n.props=t,n.state={localValue:n.props.escape(n.props.color)},n}n=e,(t=r).prototype=Object.create(n.prototype),t.prototype.constructor=t,h(t,n);var a=r.prototype;return a.componentDidUpdate=function(e,t){e.color!==this.props.color&&this.setStateValue()},a.setStateValue=function(){this.setState({localValue:this.props.escape(this.props.color)})},a.render=function(){return(0,o.createComponentVNode)(2,i.Box,{className:(0,s.classes)(["Input",this.props.fluid&&"Input--fluid"]),children:[(0,o.createVNode)(1,"div","Input__baseline",".",16),(0,o.createVNode)(64,"input","Input__input",null,1,{value:this.props.format?this.props.format(this.state.localValue):this.state.localValue,onInput:this.handleInput,onBlur:this.handleBlur})]})},r}(o.Component);t.ColorInput=b;var V=function(e){var t=e.hsva,n=e.onChange,r={"background-color":(0,u.hsvaToHslString)({h:t.h,s:100,v:100,a:1})+" !important"};return(0,o.createVNode)(1,"div","react-colorful__saturation_value",(0,o.createComponentVNode)(2,d.Interactive,{onMove:function(e){n({s:100*e.left,v:100-100*e.top})},onKey:function(e){n({s:(0,l.clamp)(t.s+100*e.left,0,100),v:(0,l.clamp)(t.v-100*e.top,0,100)})},"aria-label":"Color","aria-valuetext":"Saturation "+Math.round(t.s)+"%, Brightness "+Math.round(t.v)+"%",children:(0,o.createComponentVNode)(2,i.Pointer,{className:"react-colorful__saturation_value-pointer",top:1-t.v/100,left:t.s/100,color:(0,u.hsvaToHslString)(t)})}),2,{style:r})},y=function(e){var t=e.className,n=e.hue,r=e.onChange,a=(0,s.classes)(["react-colorful__hue",t]);return(0,o.createVNode)(1,"div",a,(0,o.createComponentVNode)(2,d.Interactive,{onMove:function(e){r({h:360*e.left})},onKey:function(e){r({h:(0,l.clamp)(n+360*e.left,0,360)})},"aria-label":"Hue","aria-valuenow":Math.round(n),"aria-valuemax":"360","aria-valuemin":"0",children:(0,o.createComponentVNode)(2,i.Pointer,{className:"react-colorful__hue-pointer",left:n/360,color:(0,u.hsvaToHslString)({h:n,s:100,v:100,a:1})})}),2)},x=function(e){var t=e.className,n=e.color,r=e.onChange,a=(0,s.classes)(["react-colorful__saturation",t]);return(0,o.createVNode)(1,"div",a,(0,o.createComponentVNode)(2,d.Interactive,{style:{background:"linear-gradient(to right, "+(0,u.hsvaToHslString)({h:n.h,s:0,v:n.v,a:1})+", "+(0,u.hsvaToHslString)({h:n.h,s:100,v:n.v,a:1})+")"},onMove:function(e){r({s:100*e.left})},onKey:function(e){r({s:(0,l.clamp)(n.s+100*e.left,0,100)})},"aria-label":"Saturation","aria-valuenow":Math.round(n.s),"aria-valuemax":"100","aria-valuemin":"0",children:(0,o.createComponentVNode)(2,i.Pointer,{className:"react-colorful__saturation-pointer",left:n.s/100,color:(0,u.hsvaToHslString)({h:n.h,s:n.s,v:n.v,a:1})})}),2)},I=function(e){var t=e.className,n=e.color,r=e.onChange,a=(0,s.classes)(["react-colorful__value",t]);return(0,o.createVNode)(1,"div",a,(0,o.createComponentVNode)(2,d.Interactive,{style:{background:"linear-gradient(to right, "+(0,u.hsvaToHslString)({h:n.h,s:n.s,v:0,a:1})+", "+(0,u.hsvaToHslString)({h:n.h,s:n.s,v:100,a:1})+")"},onMove:function(e){r({v:100*e.left})},onKey:function(e){r({v:(0,l.clamp)(n.v+100*e.left,0,100)})},"aria-label":"Value","aria-valuenow":Math.round(n.s),"aria-valuemax":"100","aria-valuemin":"0",children:(0,o.createComponentVNode)(2,i.Pointer,{className:"react-colorful__value-pointer",left:n.v/100,color:(0,u.hsvaToHslString)({h:n.h,s:n.s,v:n.v,a:1})})}),2)},k=function(e){var t=e.className,n=e.color,r=e.onChange,a=e.target,c=(0,u.hsvaToRgba)(n),p=function(e){c[a]=e,r((0,u.rgbaToHsva)(c))},m=(0,s.classes)(["react-colorful__"+a,t]),f="r"===a?"rgb("+Math.round(c.r)+",0,0)":"g"===a?"rgb(0,"+Math.round(c.g)+",0)":"rgb(0,0,"+Math.round(c.b)+")";return(0,o.createVNode)(1,"div",m,(0,o.createComponentVNode)(2,d.Interactive,{onMove:function(e){p(255*e.left)},onKey:function(e){p((0,l.clamp)(c[a]+255*e.left,0,255))},"aria-valuenow":c[a],"aria-valuemax":"100","aria-valuemin":"0",children:(0,o.createComponentVNode)(2,i.Pointer,{className:"react-colorful__"+a+"-pointer",left:c[a]/255,color:f})}),2)}},22049:function(e,t,n){"use strict";t.__esModule=!0,t.ComUplink=void 0;var o=n(96323),r=n(31246),a=n(26949),i=n(2381),c=n(18331);t.ComUplink=function(e,t){var n=(0,r.useBackend)(t).data;return(0,o.createComponentVNode)(2,i.Window,{theme:"syndicate",title:"Syndicate Commander Uplink",width:500,height:500,children:(0,o.createComponentVNode)(2,i.Window.Content,{scrollable:!0,children:[(0,o.createComponentVNode)(2,a.Stack,{className:"ComUplink"}),(0,o.createComponentVNode)(2,a.Stack.Item,{children:(0,o.createComponentVNode)(2,a.Section,{fill:!0,children:(0,o.createComponentVNode)(2,a.LabeledList,{children:(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Points",children:(0,o.createComponentVNode)(2,a.Box,{inline:!0,bold:!0,color:"green",mr:"5px",className:"ComUplink__Points--commander",children:n.points},n.points)})})})}),(0,o.createComponentVNode)(2,a.Stack.Item,{grow:1,children:[(0,o.createComponentVNode)(2,a.Section,{fill:!0,scrollable:!0,title:"Uplink Items"}),(0,o.createComponentVNode)(2,a.Collapsible,{className:"ComUplink__Category--Main",title:"Equipment",open:!0,color:"Main",children:(0,o.createComponentVNode)(2,a.Table,{children:n.stock.filter((function(e){return"Main"===e.category})).map((function(e){return(0,o.createComponentVNode)(2,l,{stock:e},e.name)}))})})]})]})})};var l=function(e,t){var n=e.stock,i=(0,r.useBackend)(t),l=i.data,u=i.act;return(0,o.createComponentVNode)(2,a.Table.Row,{className:"ComUplink__Row",opacity:n.cost>l.points[n.category]?.5:1,children:[(0,o.createComponentVNode)(2,a.Table.Cell,{className:"ComUplink__Cell",py:"5px",children:[(0,o.createComponentVNode)(2,a.Box,{mb:"5px",bold:!0,children:n.name}),(0,o.createComponentVNode)(2,a.Box,{children:n.description})]}),(0,o.createComponentVNode)(2,a.Table.Cell,{className:"ComUplink__Cell",py:"5px",textAlign:"right",children:(0,o.createComponentVNode)(2,a.Button,{disabled:n.cost>l.points,onClick:function(){return u("redeem",{ref:n.ref})},children:["Purchase ",n.cost," ",(0,c.pluralize)("point",n.cost)]})})]})}},20254:function(){},65208:function(e,t,n){"use strict";t.__esModule=!0,t.ContributorRewards=void 0;var o=n(96323),r=n(31246),a=n(26949),i=n(2381);t.ContributorRewards=function(e,t){var n=(0,r.useBackend)(t),c=n.act,l=n.data,u=l.rewardTitles,d=l.rewardDescs;return(0,o.createComponentVNode)(2,i.Window,{resizable:!0,title:"Contributor Rewards",width:350,height:200,children:(0,o.createComponentVNode)(2,i.Window.Content,{scrollable:!0,children:["Howdy, contributor! These rewards don't revert until you respawn somehow.",(0,o.createComponentVNode)(2,a.Section,{children:(0,o.createComponentVNode)(2,a.Box,{children:u.map((function(e,t){return(0,o.createComponentVNode)(2,a.Collapsible,{title:u[t],open:!0,children:[d[t],(0,o.createComponentVNode)(2,a.Button,{ml:1,icon:"check-circle",content:"Redeem",onClick:function(){return c("redeem",{reward_idx:t+1})}})]},t)}))})})]})})}},19812:function(e,t,n){"use strict";t.__esModule=!0,t.AntagonistsTab=void 0;var o=n(96323),r=n(31246),a=n(26949);t.AntagonistsTab=function(e,t){var n,l=(0,r.useBackend)(t).data;return(0,o.createFragment)([(0,o.createComponentVNode)(2,i,{game_mode:l.game_mode}),null==(n=l.verbose_antagonist_data)?void 0:n.map((function(e,t){return(0,o.normalizeProps)((0,o.createComponentVNode)(2,c,Object.assign({},e),t))})),!!l.succinct_antagonist_data.length&&(0,o.createComponentVNode)(2,a.Section,{title:"Other Antagonists",children:(0,o.createComponentVNode)(2,f,{succinct_antagonist_data:l.succinct_antagonist_data})})],0)};var i=function(e){var t=e.game_mode;return(0,o.createComponentVNode)(2,a.Section,{children:(0,o.createComponentVNode)(2,a.Stack,{vertical:!0,align:"center",my:3,children:[(0,o.createComponentVNode)(2,a.Stack.Item,{mb:-2.5,italic:!0,children:"The Game Mode Was:"}),(0,o.createComponentVNode)(2,a.Stack.Item,{fontSize:2.75,bold:!0,children:t})]})})},c=function(e){var t=e.antagonist_roles,n=e.real_name,r=e.player,i=e.job_role,c=e.status,d=e.objectives,s=e.antagonist_statistics,p=e.subordinate_antagonists;return(0,o.createComponentVNode)(2,a.Box,{my:2,children:(0,o.createComponentVNode)(2,a.Collapsible,{title:n+" (played by "+r+") - "+t,fontSize:1.2,bold:!0,children:(0,o.createComponentVNode)(2,a.Section,{mt:-1.1,children:[(0,o.createComponentVNode)(2,a.Box,{fontSize:1.1,bold:!0,children:"General"}),(0,o.createComponentVNode)(2,a.Divider),(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Job",children:i}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Status",children:c})]}),!!d.length&&(0,o.createComponentVNode)(2,l,{objectives:d}),!!s.length&&(0,o.createComponentVNode)(2,u,{antagonist_statistics:s}),!!p.length&&(0,o.createComponentVNode)(2,m,{subordinate_antagonists:p})]})})})},l=function(e){var t=e.objectives;return(0,o.createFragment)([(0,o.createComponentVNode)(2,a.Box,{fontSize:1.1,bold:!0,mt:3,children:"Objectives"}),(0,o.createComponentVNode)(2,a.Divider),(0,o.createComponentVNode)(2,a.Stack,{vertical:!0,ml:.5,children:null==t?void 0:t.map((function(e,t){return(0,o.createComponentVNode)(2,a.Stack.Item,{color:e.completed?"green":"red",children:(0,o.createComponentVNode)(2,a.Stack,{children:[(0,o.createComponentVNode)(2,a.Stack.Item,{minWidth:.9,textAlign:"center",children:(0,o.createComponentVNode)(2,a.Icon,{name:e.completed?"check":"xmark"})}),(0,o.createComponentVNode)(2,a.Stack.Item,{children:e.explanation_text})]})},t)}))})],4)},u=function(e){var t=e.antagonist_statistics;return(0,o.createFragment)([(0,o.createComponentVNode)(2,a.Box,{fontSize:1.1,bold:!0,mt:3,children:"Statistics"}),(0,o.createComponentVNode)(2,a.Divider),(0,o.createComponentVNode)(2,a.LabeledList,{children:null==t?void 0:t.map((function(e,t){return(0,o.createComponentVNode)(2,d,{name:e.name,type:e.type,value:e.value},t)}))})],4)},d=function(e){var t=e.name,n=e.type,r=e.value,i=s(n);return(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:t,verticalAlign:"middle",children:(0,o.createComponentVNode)(2,i,{type:n,items:r,nothing_text:"Nothing."})})},s=function(e){return e===undefined?function(e){return e.items}:e in p?p[e]:void 0},p={itemList:a.ItemList},m=function(e){var t=e.subordinate_antagonists;return(0,o.createFragment)([(0,o.createComponentVNode)(2,a.Box,{fontSize:1.1,bold:!0,mt:3,children:"Subordinate Antagonists"}),(0,o.createComponentVNode)(2,a.Divider),(0,o.createComponentVNode)(2,f,{succinct_antagonist_data:t})],4)},f=function(e){var t=e.succinct_antagonist_data;return(0,o.createComponentVNode)(2,a.Stack,{fill:!0,vertical:!0,children:null==t?void 0:t.map((function(e,t){return(0,o.createComponentVNode)(2,a.Stack.Item,{children:(0,o.createComponentVNode)(2,a.Stack,{fill:!0,justify:"space-between",children:[(0,o.createComponentVNode)(2,a.Stack.Item,{grow:!0,children:e.antagonist_role}),(0,o.createComponentVNode)(2,a.Stack.Item,{shrink:!0,textAlign:"right",children:[!!e.dead&&(0,o.createComponentVNode)(2,a.Icon,{name:"skull"})," ",e.real_name," (played by ",e.player,")"]})]})},t)}))})}},99407:function(e,t,n){"use strict";t.__esModule=!0,t.CrewTab=void 0;var o=n(96323),r=n(31246),a=n(26949);t.CrewTab=function(e,t){var n,c=(0,r.useBackend)(t).data;return(0,o.createComponentVNode)(2,a.Box,{children:null==(n=c.groups)?void 0:n.map((function(e,t){return c.groups[t].crew.length>0&&(0,o.createComponentVNode)(2,i,{title:e.title,crew:e.crew},t)}))})};var i=function(e){var t=e.title,n=e.crew,r=null==n?void 0:n.filter((function(e){return e.head})),i=null==n?void 0:n.filter((function(e){return!e.head}));return(0,o.createComponentVNode)(2,a.Section,{title:t,children:(0,o.createComponentVNode)(2,a.Stack,{fill:!0,vertical:!0,children:[null==r?void 0:r.map((function(e,t){return(0,o.createComponentVNode)(2,c,{real_name:e.real_name,dead:e.dead,player:e.player,role:e.role,head:!0},"head"+t)})),null==i?void 0:i.map((function(e,t){return(0,o.createComponentVNode)(2,c,{real_name:e.real_name,dead:e.dead,player:e.player,role:e.role},t)}))]})})},c=function(e){var t=e.real_name,n=e.dead,r=e.player,i=e.role,c=e.head;return(0,o.createComponentVNode)(2,a.Stack.Item,{children:(0,o.createComponentVNode)(2,a.Stack,{fill:!0,bold:c,justify:"space-between",children:[(0,o.createComponentVNode)(2,a.Stack.Item,{grow:!0,children:i}),(0,o.createComponentVNode)(2,a.Stack.Item,{shrink:!0,textAlign:"right",children:[!!n&&(0,o.createComponentVNode)(2,a.Icon,{name:"skull"})," ",t," (played by ",r,")"]})]})})}},21187:function(e,t,n){"use strict";t.__esModule=!0,t.ScoreTab=void 0;var o=n(96323),r=n(31246),a=n(26949);t.ScoreTab=function(e,t){var n=(0,r.useBackend)(t).data,l=n.score_groups,u=n.total_score,s=n.grade,p=n.victory_body,m=n.victory_headline,f=(0,o.createComponentVNode)(2,d,{items:u});return(0,o.createFragment)([!!m&&(0,o.createComponentVNode)(2,i,{preamble:"Round Result:",headline:m,body:p,children:" "}),!m&&(0,o.createComponentVNode)(2,i,{preamble:"Total Score:",headline:f,body:s,children:" "}),(0,o.createComponentVNode)(2,a.Section,{children:null==l?void 0:l.map((function(e,t){return!!e.entries.length&&(0,o.normalizeProps)((0,o.createComponentVNode)(2,c,Object.assign({},e),t))}))})],0)};var i=function(e){var t=e.preamble,n=e.headline,r=e.body;return(0,o.createComponentVNode)(2,a.Section,{children:(0,o.createComponentVNode)(2,a.Stack,{vertical:!0,align:"center",my:3,children:[(0,o.createComponentVNode)(2,a.Stack.Item,{italic:!0,mt:0,mb:-2.5,children:t}),(0,o.createComponentVNode)(2,a.Stack.Item,{fontSize:2.75,bold:!0,children:n}),(0,o.createComponentVNode)(2,a.Stack.Item,{mb:-2.5,children:r})]})})},c=function(e){var t=e.title,n=e.entries;return(0,o.createComponentVNode)(2,a.Section,{title:t,children:(0,o.createComponentVNode)(2,a.LabeledList,{children:null==n?void 0:n.map((function(e,t){return(0,o.createComponentVNode)(2,l,{name:e.name,type:e.type,value:e.value},t)}))})})},l=function(e){var t=e.name,n=e.type,r=e.value,i=u(n);return(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:t,verticalAlign:"middle",children:(0,o.createComponentVNode)(2,i,{type:n,items:r,nothing_text:"N/A"})})},u=function(e){return e===undefined?function(e){return e.items}:e in s?s[e]:void 0},d=function(e){var t=e.items,n="white";return t<0?n="purple":t<30?n="brown":t<60?n="red":t<70?n="orange":t<80?n="yellow":t<90?n="yellowgreen":t<100?n="chartreuse":100===t?n="lime":t>100&&(n="teal"),(0,o.createComponentVNode)(2,a.Box,{color:n,children:[t,"%"]})},s={itemList:a.ItemList,colorPercent:d}},57119:function(e,t,n){"use strict";t.__esModule=!0,t.CrewCredits=void 0;var o=n(96323),r=n(31246),a=n(26949),i=n(2381),c=n(99407),l=n(19812),u=n(37538),d=n(21187);t.CrewCredits=function(e,t){var n=(0,r.useLocalState)(t,"menu",u.CrewCreditsTabKeys.General),s=n[0],p=n[1];return(0,o.createComponentVNode)(2,i.Window,{title:"Crew Credits",width:600,height:600,children:(0,o.createComponentVNode)(2,i.Window.Content,{scrollable:!0,children:(0,o.createComponentVNode)(2,a.Stack,{vertical:!0,fill:!0,children:[(0,o.createComponentVNode)(2,a.Stack.Item,{children:(0,o.createComponentVNode)(2,a.Tabs,{children:[(0,o.createComponentVNode)(2,a.Tabs.Tab,{selected:s===u.CrewCreditsTabKeys.General,onClick:function(){return p(u.CrewCreditsTabKeys.General)},children:"General"}),(0,o.createComponentVNode)(2,a.Tabs.Tab,{selected:s===u.CrewCreditsTabKeys.Antagonists,onClick:function(){return p(u.CrewCreditsTabKeys.Antagonists)},children:"Antagonists"}),(0,o.createComponentVNode)(2,a.Tabs.Tab,{selected:s===u.CrewCreditsTabKeys.Score,onClick:function(){return p(u.CrewCreditsTabKeys.Score)},children:"Station Score"})]})}),(0,o.createComponentVNode)(2,a.Stack.Item,{children:[s===u.CrewCreditsTabKeys.General&&(0,o.createComponentVNode)(2,c.CrewTab),s===u.CrewCreditsTabKeys.Antagonists&&(0,o.createComponentVNode)(2,l.AntagonistsTab),s===u.CrewCreditsTabKeys.Score&&(0,o.createComponentVNode)(2,d.ScoreTab)]})]})})})}},37538:function(e,t){"use strict";var n;t.__esModule=!0,t.CrewCreditsTabKeys=void 0,t.CrewCreditsTabKeys=n,function(e){e[e.General=0]="General",e[e.Antagonists=1]="Antagonists",e[e.Score=2]="Score"}(n||(t.CrewCreditsTabKeys=n={}))},75859:function(e,t,n){"use strict";t.__esModule=!0,t.Beaker=t.CryoCell=void 0;var o=n(96323),r=n(31246),a=n(26949),i=n(2381),c=n(48175),l=n(51418),u=n(65751),d=n(90881),s=n(9720);t.CryoCell=function(e,t){return(0,o.createComponentVNode)(2,i.Window,{width:485,height:575,children:(0,o.createComponentVNode)(2,i.Window.Content,{scrollable:!0,children:[(0,o.createComponentVNode)(2,p),(0,o.createComponentVNode)(2,m),(0,o.createComponentVNode)(2,f)]})})};var p=function(e,t){var n=(0,r.useBackend)(t),i=n.act,l=n.data,u=l.cellTemp,d=l.status;return(0,o.createComponentVNode)(2,a.Section,{title:"Cryo Cell Control System",children:(0,o.createComponentVNode)(2,a.Box,{textAlign:"center",children:["Current Cell Temperature",(0,o.createComponentVNode)(2,a.Box,{fontSize:2,color:(0,c.getTemperatureColor)(u),mb:"1rem",children:[(0,o.createComponentVNode)(2,a.Icon,{name:(0,c.getTemperatureIcon)(u),pr:.5}),(0,o.createComponentVNode)(2,a.AnimatedNumber,{value:(u-273.15).toPrecision(4)})," \xb0C"]}),(0,o.createComponentVNode)(2,a.Button,{icon:"power-off",color:d?"green":"red",fontSize:1.25,textAlign:"center",onClick:function(){return i("start")},children:d?"Activated":"Deactivated"})]})})},m=function(e,t){var n=(0,r.useBackend)(t),i=n.act,c=n.data,p=c.occupant,m=c.reagentScanEnabled,f=c.reagentScanActive,h=c.hasDefib,g=p?d.MobStatuses[p.occupantStat]:null;return(0,o.createComponentVNode)(2,a.Section,{title:"Occupant",buttons:(0,o.createFragment)([!!m&&(0,o.createComponentVNode)(2,a.Button,{onClick:function(){return i("reagent_scan_active")},icon:f?"eye-slash":"eye",children:[f?"Hide":"Show"," Reagents"]}),h&&(0,o.createComponentVNode)(2,a.Button,{onClick:function(){return i("defib")},icon:"bolt",color:"yellow",children:"Defibrillate"}),(0,o.createComponentVNode)(2,a.Button,{onClick:function(){return i("eject_occupant")},icon:"eject",disabled:!p,color:"green",children:"Eject"})],0),children:[!!p&&(0,o.createFragment)([(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Status",children:[(0,o.createComponentVNode)(2,a.Icon,{color:g.color,name:g.icon})," ",g.name]}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Overall Health",children:(0,o.createComponentVNode)(2,a.ProgressBar,{value:p.health,ranges:{good:[.9,Infinity],average:[.5,.9],bad:[-Infinity,.5]}})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Damage Breakdown",children:[(0,o.createComponentVNode)(2,u.HealthStat,{inline:!0,align:"center",type:"oxy",width:5,children:(0,u.damageNum)(p.oxyDamage)}),"/",(0,o.createComponentVNode)(2,u.HealthStat,{inline:!0,align:"center",type:"toxin",width:5,children:(0,u.damageNum)(p.toxDamage)}),"/",(0,o.createComponentVNode)(2,u.HealthStat,{inline:!0,align:"center",type:"burn",width:5,children:(0,u.damageNum)(p.burnDamage)}),"/",(0,o.createComponentVNode)(2,u.HealthStat,{inline:!0,align:"center",type:"brute",width:5,children:(0,u.damageNum)(p.bruteDamage)})]})]}),(0,o.createComponentVNode)(2,a.Section,{title:"Key Health Indicators",mt:"0.5rem",children:[(0,o.createComponentVNode)(2,s.KeyHealthIndicators,{mobData:p}),!!p.hasRoboticOrgans&&(0,o.createComponentVNode)(2,a.Box,{textAlign:"center",children:(0,o.createComponentVNode)(2,a.Box,{bold:!0,fontSize:1.2,color:"purple",children:"Unknown augmented organs detected."})})]})],4),p&&p.reagents&&(0,o.createFragment)([(0,o.createComponentVNode)(2,l.ReagentGraph,{container:p.reagents,mt:"0.5rem"}),(0,o.createComponentVNode)(2,l.ReagentList,{container:p.reagents})],4),!p&&(0,o.createVNode)(1,"em",null,"Unoccupied",16)]})},f=function(e,t){var n=(0,r.useBackend)(t),i=n.act,u=n.data,d=u.showBeakerContents,s=u.containerData;return(0,o.createComponentVNode)(2,a.Section,{title:"Beaker",buttons:(0,o.createFragment)([(0,o.createComponentVNode)(2,a.Button,{onClick:function(){return i("show_beaker_contents")},icon:d?"eye-slash":"eye",children:[d?"Hide":"Show"," Contents"]}),(0,o.createComponentVNode)(2,a.Button,{onClick:function(){return i("eject")},icon:"eject",disabled:!s,color:"green",children:"Eject"})],4),children:!!d&&(0,o.createFragment)([s&&(0,o.createFragment)([(0,o.createComponentVNode)(2,l.ReagentGraph,{container:s}),(0,o.createComponentVNode)(2,l.ReagentList,{container:s}),(0,o.createComponentVNode)(2,a.Box,{fontSize:2,color:(0,c.getTemperatureColor)(s.temperature),textAlign:"center",children:[(0,o.createComponentVNode)(2,a.Icon,{name:(0,c.getTemperatureIcon)(s.temperature),pr:.5}),(0,o.createComponentVNode)(2,a.AnimatedNumber,{value:s.temperature})," K"]})],4),!s&&(0,o.createComponentVNode)(2,a.Dimmer,{height:"5rem",children:(0,o.createComponentVNode)(2,a.Button,{icon:"eject",fontSize:1.5,onClick:function(){return i("insert")},bold:!0,children:"Insert Beaker"})})],0)})};t.Beaker=f},56445:function(e,t,n){"use strict";t.__esModule=!0,t.CyborgDockingStation=void 0;var o=n(96323),r=n(31246),a=n(84200),i=n(26949),c=n(2381),l=["disabled"];t.CyborgDockingStation=function(e,t){var n=(0,r.useBackend)(t),a=n.act,l=n.data,d=(0,r.useLocalState)(t,"tabIndex",1),s=d[0],p=d[1];return(0,o.createComponentVNode)(2,c.Window,{width:500,height:640,title:"Cyborg Docking Station",theme:l.conversion_chamber&&"human"===l.occupant.kind?"syndicate":"neutral",children:(0,o.createComponentVNode)(2,c.Window.Content,{scrollable:!0,children:[(0,o.createComponentVNode)(2,u),(0,o.createComponentVNode)(2,i.Stack,{children:[(0,o.createComponentVNode)(2,i.Stack.Item,{children:(0,o.createComponentVNode)(2,i.Tabs,{vertical:!0,width:"100px",children:[(0,o.createComponentVNode)(2,i.Tabs.Tab,{selected:1===s,onClick:function(){return p(1)},children:"Occupant"}),(0,o.createComponentVNode)(2,i.Tabs.Tab,{selected:2===s,onClick:function(){return p(2)},children:"Supplies"})]})}),(0,o.createComponentVNode)(2,i.Stack.Item,{grow:1,basis:0,children:(0,o.createComponentVNode)(2,_,{data:l,act:a,tabIndex:s})})]})]})})};var u=function(e,t){var n=(0,r.useBackend)(t),a=(n.act,n.data);if(a.disabled)return(0,o.createFragment)([(0,o.createComponentVNode)(2,i.Box,{backgroundColor:"#773333",p:"5px",mb:"5px",bold:!0,textAlign:"center",children:[a.viewer_is_robot&&!a.viewer_is_occupant?"You must be inside the docking station to use the functions.":"",a.viewer_is_occupant&&!a.viewer_is_robot?"Non-cyborgs cannot use the docking station functions.":"",a.viewer_is_occupant&&!a.allow_self_service?"Self-service has been disabled at this station.":""]}),(0,o.createComponentVNode)(2,i.Divider)],4)},d=function(e,t){var n=e.disabled,a=function(e,t){if(null==e)return{};var n,o,r={},a=Object.keys(e);for(o=0;o<a.length;o++)n=a[o],t.indexOf(n)>=0||(r[n]=e[n]);return r}(e,l),c=(0,r.useBackend)(t),u=(c.act,c.data);return(0,o.normalizeProps)((0,o.createComponentVNode)(2,i.Button,Object.assign({disabled:n||u.disabled},a)))},s=function(e){var t=e.occupant,n=e.fuel,r=e.cabling,a=e.act;return(0,o.createComponentVNode)(2,i.Section,{title:"Occupant",children:(0,o.createComponentVNode)(2,i.Stack,{children:(0,o.createComponentVNode)(2,i.Stack.Item,{grow:1,children:(0,o.createComponentVNode)(2,p,{occupant:t,act:a,fuel:n,cabling:r})})})})},p=function(e){var t=e.occupant,n=e.fuel,r=e.cabling,a=e.act;return t.name?(0,o.createFragment)([(0,o.createComponentVNode)(2,i.LabeledList,{children:[(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Name",buttons:(0,o.createFragment)(["robot"===t.kind&&(0,o.createComponentVNode)(2,d,{onClick:function(){return a("occupant-rename")},icon:"edit",tooltip:"Change the occupant's designation"}),(0,o.createComponentVNode)(2,d,{onClick:function(){return a("occupant-eject")},icon:"eject",tooltip:"Eject the occupant"})],0),children:t.name}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Type",children:(0,o.createComponentVNode)(2,g,{kind:t.kind,user:t.user})})]}),(0,o.createComponentVNode)(2,i.Section,{title:"Status",children:["robot"===t.kind&&(0,o.createComponentVNode)(2,m,{occupant:t,fuel:n,cabling:r,act:a}),"human"===t.kind&&(0,o.createComponentVNode)(2,f,{occupant:t}),"eyebot"===t.kind&&(0,o.createComponentVNode)(2,h,{occupant:t})]})],4):(0,o.createVNode)(1,"div",null,"No occupant",16)},m=function(e){var t=e.occupant,n=e.fuel,r=e.cabling,a=e.act;return(0,o.createFragment)([(0,o.createComponentVNode)(2,i.LabeledList,{children:[(0,o.createComponentVNode)(2,k,{cellData:t.cell,act:a}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Module",buttons:(0,o.createComponentVNode)(2,d,{onClick:function(){return a("module-remove")},icon:"minus",tooltip:"Remove the occupant's module",disabled:!t.module}),children:t.module||(0,o.createComponentVNode)(2,i.Box,{as:"span",color:"red",children:"No Module Installed"})})]}),(0,o.createComponentVNode)(2,v,{parts:t.parts,fuel:n,cabling:r,act:a}),(0,o.createComponentVNode)(2,S,{upgrades:t.upgrades,upgrades_max:t.upgrades_max,act:a}),(0,o.createComponentVNode)(2,N,{cosmetics:t.cosmetics,act:a}),(0,o.createComponentVNode)(2,C,{clothes:t.clothing,act:a})],4)},f=function(e){var t=e.occupant;return(0,o.createComponentVNode)(2,i.LabeledList,{children:(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Converting",children:(0,o.createComponentVNode)(2,i.ProgressBar,{value:(t.max_health-t.health)/t.max_health,ranges:{good:[.5,Infinity],average:[.25,.5],bad:[-Infinity,.25]},children:[Math.floor((t.max_health-t.health)/t.max_health*100),"%"]})})})},h=function(e){var t=e.occupant;return(0,o.createComponentVNode)(2,i.LabeledList,{children:(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:t.cell.name,children:(0,o.createComponentVNode)(2,w,{cellData:t.cell})})})},g=function(e){var t=e.kind,n=e.user;switch(t){case"robot":if("brain"===n)return(0,o.createFragment)([(0,o.createTextVNode)("Mk.2-Type Cyborg")],4);if("ai"===n)return(0,o.createFragment)([(0,o.createTextVNode)("Mk.2-Type AI Shell")],4);break;case"human":return(0,o.createFragment)([(0,o.createTextVNode)("Mk.2-Type Carbon")],4);case"eyebot":return(0,o.createFragment)([(0,o.createTextVNode)("Mk.1-Type Eyebot")],4);default:return(0,o.createFragment)([(0,o.createTextVNode)("Unknown type")],4)}},C=function(e){var t=e.clothes,n=e.act;return(0,o.createComponentVNode)(2,i.Section,{title:"Clothing",children:t.length>0?t.map((function(e){return(0,o.createComponentVNode)(2,i.Box,{children:[e.name," ",(0,o.createComponentVNode)(2,d,{onClick:function(){return n("clothing-remove",{clothingRef:e.ref})},icon:"minus-circle",color:"transparent",tooltip:"Remove from occupant"})]},e.ref)})):(0,o.createComponentVNode)(2,i.Box,{children:"No Clothing"})})},N=function(e){var t=e.cosmetics,n=e.act;return(0,o.createComponentVNode)(2,i.Section,{title:"Decoration",children:(0,o.createComponentVNode)(2,i.LabeledList,{children:[(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Head",buttons:(0,o.createComponentVNode)(2,d,{icon:"sync-alt",tooltip:"Change head decoration",onClick:function(){return n("cosmetic-change-head")}}),children:t.head||"None"}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Chest",buttons:(0,o.createComponentVNode)(2,d,{icon:"sync-alt",tooltip:"Change chest decoration",onClick:function(){return n("cosmetic-change-chest")}}),children:t.chest||"None"}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Arms",buttons:(0,o.createComponentVNode)(2,d,{icon:"sync-alt",tooltip:"Change arms decoration",onClick:function(){return n("cosmetic-change-arms")}}),children:t.arms||"None"}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Legs",buttons:(0,o.createComponentVNode)(2,d,{icon:"sync-alt",tooltip:"Change legs decoration",onClick:function(){return n("cosmetic-change-legs")}}),children:t.legs||"None"}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Paint",buttons:(0,o.createFragment)([!t.paint&&(0,o.createComponentVNode)(2,d,{icon:"plus",tooltip:"Add paint",onClick:function(){return n("occupant-paint-add")}}),t.paint&&(0,o.createComponentVNode)(2,d,{icon:"tint",tooltip:"Change colour",onClick:function(){return n("occupant-paint-change")}}),t.paint&&(0,o.createComponentVNode)(2,d,{icon:"minus",tooltip:"Remove paint",onClick:function(){return n("occupant-paint-remove")}})],0),children:t.paint?(0,o.createComponentVNode)(2,i.ColorBox,{color:t.paint}):"No paint applied"}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Eyes",buttons:(0,o.createComponentVNode)(2,d,{icon:"tint",tooltip:"Change eye glow",onClick:function(){return n("occupant-fx")}}),children:(0,o.createComponentVNode)(2,i.ColorBox,{color:"rgb("+t.fx[0]+","+t.fx[1]+","+t.fx[2]+")"})})]})})},v=function(e){var t=e.parts,n=e.fuel,r=e.cabling,c=e.act;return(0,o.createComponentVNode)(2,i.Section,{title:"Damage Report",buttons:(0,o.createFragment)([(0,o.createComponentVNode)(2,d,{disabled:n<1,icon:"wrench",backgroundColor:a.COLORS.damageType.brute,tooltip:"Fix structural damage",onClick:function(){return c("repair-fuel")}}),(0,o.createComponentVNode)(2,d,{disabled:r<1,icon:"fire",backgroundColor:a.COLORS.damageType.burn,tooltip:"Fix wiring damage",onClick:function(){return c("repair-wiring")}})],4),children:(0,o.createComponentVNode)(2,i.LabeledList,{children:[(0,o.createComponentVNode)(2,b,{label:"Head",partData:t.head}),(0,o.createComponentVNode)(2,b,{label:"Chest",partData:t.chest}),(0,o.createComponentVNode)(2,b,{label:"Left Arm",partData:t.arm_l}),(0,o.createComponentVNode)(2,b,{label:"Right Arm",partData:t.arm_r}),(0,o.createComponentVNode)(2,b,{label:"Left Leg",partData:t.leg_l}),(0,o.createComponentVNode)(2,b,{label:"Right Leg",partData:t.leg_r})]})})},b=function(e){var t=e.label,n=e.partData;if(0===n.exists)return(0,o.createComponentVNode)(2,i.LabeledList.Item,{color:"red",label:t,children:(0,o.createComponentVNode)(2,i.Box,{bold:!0,children:"MISSING!"})});var r=Math.floor(n.dmg_blunt/n.max_health*100),c=Math.floor(n.dmg_burns/n.max_health*100);return r||c?(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:t,children:(0,o.createComponentVNode)(2,i.Flex,{children:[(0,o.createComponentVNode)(2,i.Flex.Item,{grow:1,children:(0,o.createComponentVNode)(2,i.Flex,{children:[(0,o.createComponentVNode)(2,i.Flex.Item,{backgroundColor:a.COLORS.damageType.brute,width:r+"%"}),(0,o.createComponentVNode)(2,i.Flex.Item,{backgroundColor:a.COLORS.damageType.burn,width:c+"%"}),(0,o.createComponentVNode)(2,i.Flex.Item,{grow:1,backgroundColor:"#000000",stretch:!0,children:"\xa0"})]})}),(0,o.createComponentVNode)(2,i.Flex.Item,{shrink:!0,children:(0,o.createComponentVNode)(2,i.Flex,{children:[(0,o.createComponentVNode)(2,i.Flex.Item,{shrink:!0,width:"25px",backgroundColor:"#330000",color:a.COLORS.damageType.brute,bold:!0,children:(0,o.createComponentVNode)(2,i.Box,{textAlign:"center",children:r>0?r:"--"})}),(0,o.createComponentVNode)(2,i.Flex.Item,{shrink:!0,width:"25px",backgroundColor:"#331100",color:a.COLORS.damageType.burn,bold:!0,children:(0,o.createComponentVNode)(2,i.Box,{textAlign:"center",children:c>0?c:"--"})})]})})]})}):void 0},V=function(e){var t=e.cells,n=e.act;return(0,o.createComponentVNode)(2,i.Section,{title:"Power Cells",children:t.length>0?(0,o.createComponentVNode)(2,i.LabeledList,{children:[" ",t.map((function(e){return(0,o.createVNode)(1,"div",null,(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:e.name,buttons:(0,o.createFragment)([(0,o.createComponentVNode)(2,d,{onClick:function(){return n("cell-install",{cellRef:e.ref})},icon:"plus",tooltip:"Add to occupant"}),(0,o.createComponentVNode)(2,d,{onClick:function(){return n("cell-eject",{cellRef:e.ref})},icon:"eject",tooltip:"Eject from station"})],4),children:(0,o.createComponentVNode)(2,w,{cellData:e})}),2,null,e.ref)}))]}):(0,o.createComponentVNode)(2,i.Box,{as:"div",children:"None Stored"})})},y=function(e){var t=e.modules,n=e.act;return(0,o.createComponentVNode)(2,i.Section,{title:"Modules",children:[" ",t.length>0?t.map((function(e){return(0,o.createVNode)(1,"div",null,[e.name,(0,o.createComponentVNode)(2,d,{onClick:function(){return n("module-install",{moduleRef:e.ref})},icon:"plus-circle",color:"transparent",tooltip:"Add to occupant"}),(0,o.createComponentVNode)(2,d,{onClick:function(){return n("module-eject",{moduleRef:e.ref})},icon:"eject",color:"transparent",tooltip:"Eject from station"})],0,null,e.ref)})):(0,o.createComponentVNode)(2,i.Box,{as:"div",children:"None Stored"})]})},x=function(e){var t=e.upgrades,n=e.act;return(0,o.createComponentVNode)(2,i.Section,{title:"Upgrades",children:[" ",t.length>0?t.map((function(e){return(0,o.createVNode)(1,"div",null,[e.name,(0,o.createComponentVNode)(2,d,{onClick:function(){return n("upgrade-install",{upgradeRef:e.ref})},icon:"plus-circle",color:"transparent",tooltip:"Add to occupant"}),(0,o.createComponentVNode)(2,d,{onClick:function(){return n("upgrade-eject",{upgradeRef:e.ref})},icon:"eject",color:"transparent",tooltip:"Eject from station"})],0,null,e.ref)})):(0,o.createComponentVNode)(2,i.Box,{as:"div",children:"None Stored"})]})},I=function(e){var t=e.clothes,n=e.act;return(0,o.createComponentVNode)(2,i.Section,{title:"Clothing",children:[" ",t.length>0?t.map((function(e){return(0,o.createComponentVNode)(2,i.Box,{children:[e.name,(0,o.createComponentVNode)(2,d,{onClick:function(){return n("clothing-install",{clothingRef:e.ref})},icon:"plus-circle",color:"transparent",tooltip:"Add to occupant"}),(0,o.createComponentVNode)(2,d,{onClick:function(){return n("clothing-eject",{clothingRef:e.ref})},icon:"eject",color:"transparent",tooltip:"Eject from station"})]},e.ref)})):(0,o.createComponentVNode)(2,i.Box,{as:"div",children:"None Stored"})]})},k=function(e){var t=e.cellData,n=e.act;return(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Power Cell",color:t?"white":"red",buttons:(0,o.createComponentVNode)(2,d,{onClick:function(){return n("cell-remove")},icon:"minus",tooltip:"Remove the occupant's power cell",disabled:!t}),children:[t&&(0,o.createComponentVNode)(2,w,{cellData:t}),!t&&(0,o.createComponentVNode)(2,i.Box,{bold:!0,children:"No Power Cell Installed"})]})},w=function(e){var t=e.cellData,n=t.current/t.max;return(0,o.createComponentVNode)(2,i.Tooltip,{position:"bottom",content:Math.floor(t.current)+"/"+t.max,children:(0,o.createComponentVNode)(2,i.ProgressBar,{position:"relative",value:n,ranges:{good:[.5,Infinity],average:[.25,.5],bad:[-Infinity,.25]},children:[Math.floor(100*n),"%"]})})},S=function(e){var t=e.upgrades,n=e.upgrades_max,r=e.act,a="Upgrades ("+t.length+" / "+n+" installed)";return(0,o.createComponentVNode)(2,i.Section,{title:a,children:(0,o.createVNode)(1,"div",null,t.map((function(e){return(0,o.createComponentVNode)(2,i.Stack,{children:[(0,o.createComponentVNode)(2,i.Stack.Item,{children:e.name}),(0,o.createComponentVNode)(2,i.Stack.Item,{children:(0,o.createComponentVNode)(2,d,{compact:!0,icon:"minus-circle",color:"transparent",tooltip:"Remove "+e.name,onClick:function(){return r("upgrade-remove",{upgradeRef:e.ref})}})})]},e.ref)})),0)})},_=function(e){var t=e.tabIndex,n=e.data,r=e.act;switch(t){case 1:return(0,o.createComponentVNode)(2,s,{occupant:n.occupant,cabling:n.cabling,fuel:n.fuel,act:r});case 2:return(0,o.createComponentVNode)(2,i.Section,{title:"Supplies",children:[(0,o.createComponentVNode)(2,i.LabeledList,{children:[(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Welding Fuel",children:n.fuel}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Wire Cabling",children:n.cabling}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Self Service",children:[(0,o.createComponentVNode)(2,i.Button.Checkbox,{tooltip:"Toggle self-service.",checked:n.allow_self_service,disabled:n.viewer_is_robot,onClick:function(){return r("self-service")}})," ",n.allow_self_service?"Enabled":"Disabled"]})]}),(0,o.createComponentVNode)(2,y,{modules:n.modules,act:r}),(0,o.createComponentVNode)(2,x,{upgrades:n.upgrades,act:r}),(0,o.createComponentVNode)(2,V,{cells:n.cells,act:r}),(0,o.createComponentVNode)(2,I,{clothes:n.clothes,act:r})]})}}},89974:function(){},44616:function(e,t,n){"use strict";t.__esModule=!0,t.EmptyPlaceholder=void 0;var o=n(96323),r=n(1060),a=function(e,t){if(!t&&e&&e.__esModule)return e;if(null===e||"object"!=typeof e&&"function"!=typeof e)return{"default":e};var n=i(t);if(n&&n.has(e))return n.get(e);var o={},r=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var a in e)if("default"!==a&&Object.prototype.hasOwnProperty.call(e,a)){var c=r?Object.getOwnPropertyDescriptor(e,a):null;c&&(c.get||c.set)?Object.defineProperty(o,a,c):o[a]=e[a]}o["default"]=e,n&&n.set(e,o);return o}(n(67044));function i(e){if("function"!=typeof WeakMap)return null;var t=new WeakMap,n=new WeakMap;return(i=function(e){return e?n:t})(e)}var c=function(e){var t=e.children,n=e.className,i=(0,r.classes)([a.EmptyPlaceholder,n]);return(0,o.createVNode)(1,"div",i,t,0)};t.EmptyPlaceholder=c,c.defaultHooks=r.pureComponentHooks},94241:function(e,t,n){"use strict";t.__esModule=!0,t.ModuleDetail=void 0;var o=n(96323),r=n(31246),a=n(26949),i=n(5880),c=[{id:"brobocop",name:"Brobocop"},{id:"science",name:"Science"},{id:"civilian",name:"Civilian"},{id:"engineering",name:"Engineering"},{id:"medical",name:"Medical"},{id:"mining",name:"Mining"}];t.ModuleDetail=function(e,t){var n,u=e.onMoveToolDown,d=e.onMoveToolUp,s=e.onRemoveTool,p=e.onResetModule,m=e.tools,f=(0,r.useLocalState)(t,"selectedToolRef",undefined),h=f[0],g=f[1],C=h&&(null==(n=m.find((function(e){return e.ref===h})))?void 0:n.ref);h&&!C&&g(undefined);var N=(0,o.createComponentVNode)(2,l,{itemRef:C,onMoveDown:u,onMoveUp:d,onRemove:function(e){var t,n=m.findIndex((function(t){return t.ref===e}));g(null==(t=m[n+1])?void 0:t.ref),s(e)}});return(0,o.createComponentVNode)(2,a.Stack,{vertical:!0,fill:!0,children:[(0,o.createComponentVNode)(2,a.Stack.Item,{children:(0,o.createComponentVNode)(2,a.Section,{title:"Reset",children:c.map((function(e){var t=e.id,n=e.name;return(0,o.createComponentVNode)(2,a.Button,{onClick:function(){return p(t)},title:n,children:n},t)}))})}),(0,o.createComponentVNode)(2,a.Stack.Item,{grow:!0,children:(0,o.createComponentVNode)(2,a.Section,{fill:!0,scrollable:!0,title:"Tools",buttons:N,children:(0,o.createComponentVNode)(2,i.Tools,{tools:m,selectedToolRef:C,onSelectTool:g})})})]})};var l=function(e){var t=e.onMoveDown,n=e.onMoveUp,r=e.onRemove,i=e.itemRef,c=!!i;return(0,o.createFragment)([(0,o.createComponentVNode)(2,a.Button,{icon:"arrow-up",disabled:!c,onClick:function(){return n(i)},title:"Move Up"}),(0,o.createComponentVNode)(2,a.Button,{icon:"arrow-down",disabled:!c,onClick:function(){return t(i)},title:"Move Down"}),(0,o.createComponentVNode)(2,a.Button,{icon:"trash",disabled:!c,onClick:function(){return r(i)},title:"Remove"})],4)}},5880:function(e,t,n){"use strict";t.__esModule=!0,t.Tools=void 0;var o=n(96323),r=n(26949),a=n(44616),i=function(e){var t=e.children,n=e.onClick,a=e.selected;return(0,o.createComponentVNode)(2,r.Tabs.Tab,{onClick:n,selected:a,children:t})};t.Tools=function(e){var t=e.onSelectTool,n=e.selectedToolRef,c=e.tools,l=void 0===c?[]:c;return 0===l.length?(0,o.createComponentVNode)(2,a.EmptyPlaceholder,{children:"Module has no tools"}):(0,o.createComponentVNode)(2,r.Tabs,{vertical:!0,children:l.map((function(e){var r=e.name,a=e.ref;return(0,o.createComponentVNode)(2,i,{onClick:function(){return t(a)},selected:a===n,children:r},a)}))})}},25526:function(e,t,n){"use strict";t.__esModule=!0,t.ModuleView=void 0;var o=n(96323),r=n(26949),a=n(44616),i=n(94241);t.ModuleView=function(e){var t=e.modules,n=(t=void 0===t?{}:t).available,c=void 0===n?[]:n,l=t.selected,u=e.onEjectModule,d=e.onMoveToolDown,s=e.onMoveToolUp,p=e.onRemoveTool,m=e.onResetModule,f=e.onSelectModule,h=l||{},g=h.ref,C=h.tools,N=void 0===C?[]:C;return 0===c.length?(0,o.createComponentVNode)(2,r.Section,{fill:!0,children:(0,o.createComponentVNode)(2,a.EmptyPlaceholder,{children:"No modules inserted"})}):(0,o.createComponentVNode)(2,r.Stack,{fill:!0,children:[(0,o.createComponentVNode)(2,r.Stack.Item,{width:20,children:(0,o.createComponentVNode)(2,r.Section,{title:"Modules",scrollable:!0,fill:!0,children:(0,o.createComponentVNode)(2,r.Tabs,{vertical:!0,children:c.map((function(e){var t=e.ref,n=e.name,a=(0,o.createComponentVNode)(2,r.Button,{icon:"eject",color:"transparent",onClick:function(){return u(t)},title:"Eject "+n});return(0,o.createComponentVNode)(2,r.Tabs.Tab,{onClick:function(){return f(t)},rightSlot:a,selected:t===g,children:n},t)}))})})}),(0,o.createComponentVNode)(2,r.Stack.Item,{grow:!0,children:g?(0,o.createComponentVNode)(2,i.ModuleDetail,{onMoveToolDown:function(e){return d(g,e)},onMoveToolUp:function(e){return s(g,e)},onRemoveTool:function(e){return p(g,e)},onResetModule:function(e){return m(g,e)},tools:N}):(0,o.createComponentVNode)(2,r.Section,{fill:!0,children:(0,o.createComponentVNode)(2,a.EmptyPlaceholder,{children:"No module selected"})})})]})}},83709:function(e,t,n){"use strict";t.__esModule=!0,t.selectModule=t.resetModule=t.removeTool=t.moveTool=t.ejectModule=void 0;var o=n(95502),r=function(e){return function(t,n){return t(e,n)}},a=r(o.Action.EjectModule);t.ejectModule=a;var i=r(o.Action.MoveTool);t.moveTool=i;var c=r(o.Action.RemoveTool);t.removeTool=c;var l=r(o.Action.ResetModule);t.resetModule=l;var u=r(o.Action.SelectModule);t.selectModule=u},85175:function(e,t,n){"use strict";t.__esModule=!0,t.CyborgModuleRewriter=void 0;var o=n(96323),r=n(31246),a=n(2381),i=n(25526),c=n(83709),l=function(e,t){if(!t&&e&&e.__esModule)return e;if(null===e||"object"!=typeof e&&"function"!=typeof e)return{"default":e};var n=d(t);if(n&&n.has(e))return n.get(e);var o={},r=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var a in e)if("default"!==a&&Object.prototype.hasOwnProperty.call(e,a)){var i=r?Object.getOwnPropertyDescriptor(e,a):null;i&&(i.get||i.set)?Object.defineProperty(o,a,i):o[a]=e[a]}o["default"]=e,n&&n.set(e,o);return o}(n(67044)),u=n(95502);function d(e){if("function"!=typeof WeakMap)return null;var t=new WeakMap,n=new WeakMap;return(d=function(e){return e?n:t})(e)}t.CyborgModuleRewriter=function(e,t){var n=(0,r.useBackend)(t),d=n.act,s=n.data.modules;return(0,o.createComponentVNode)(2,a.Window,{width:670,height:640,children:(0,o.createComponentVNode)(2,a.Window.Content,{className:l.Block,children:(0,o.createComponentVNode)(2,i.ModuleView,{modules:s,onEjectModule:function(e){return(0,c.ejectModule)(d,{moduleRef:e})},onMoveToolDown:function(e,t){return(0,c.moveTool)(d,{dir:u.Direction.Down,moduleRef:e,toolRef:t})},onMoveToolUp:function(e,t){return(0,c.moveTool)(d,{dir:u.Direction.Up,moduleRef:e,toolRef:t})},onRemoveTool:function(e,t){return(0,c.removeTool)(d,{moduleRef:e,toolRef:t})},onResetModule:function(e,t){return(0,c.resetModule)(d,{moduleId:t,moduleRef:e})},onSelectModule:function(e){return(0,c.selectModule)(d,{moduleRef:e})}})})})}},67044:function(e,t,n){"use strict";t.__esModule=!0,t.EmptyPlaceholder=t.ToolLabel=t.ModuleView=t.Block=void 0;var o=n(88243),r="cyborg-module-rewriter-interface";t.Block=r;var a=(0,o.block)(r,"module-view");t.ModuleView=a;var i=(0,o.element)(a,"tool-label");t.ToolLabel=i;var c=(0,o.block)(r,"empty-placeholder");t.EmptyPlaceholder=c},95502:function(e,t){"use strict";var n,o;t.__esModule=!0,t.Direction=t.Action=void 0,t.Action=n,function(e){e.EjectModule="module-eject",e.MoveTool="tool-move",e.RemoveTool="tool-remove",e.ResetModule="module-reset",e.SelectModule="module-select"}(n||(t.Action=n={})),t.Direction=o,function(e){e.Up="up",e.Down="down"}(o||(t.Direction=o={}))},9299:function(e,t,n){"use strict";t.__esModule=!0,t.DJPanel=void 0;var o=n(96323),r=n(97622),a=n(1033),i=n(31246),c=n(26949),l=n(2381);t.DJPanel=function(e,t){var n=(0,i.useBackend)(t),r=n.act,d=n.data,s=d.loadedSound,m=d.adminChannel,f=d.preloadedSounds;return(0,o.createComponentVNode)(2,l.Window,{width:430,height:306,title:"DJ Panel",children:(0,o.createComponentVNode)(2,l.Window.Content,{children:[(0,o.createComponentVNode)(2,c.Section,{children:[(0,o.createComponentVNode)(2,c.Box,{children:[(0,o.createVNode)(1,"strong",null,"Active Soundfile: ",16),(0,o.createComponentVNode)(2,c.Button,{icon:s?"file-audio":"upload",selected:!s,content:s?(0,a.truncate)(s,38):"Upload",tooltip:s,onClick:function(){return r("set-file")}})]}),(0,o.createComponentVNode)(2,c.Divider),(0,o.createComponentVNode)(2,p)]}),(0,o.createComponentVNode)(2,c.Section,{children:(0,o.createComponentVNode)(2,c.Box,{children:[(0,o.createComponentVNode)(2,c.Button,{icon:"music",selected:s,disabled:!s,content:"Play Music",onClick:function(){return r("play-music")}}),(0,o.createComponentVNode)(2,c.Button,{icon:"volume-up",selected:s,disabled:!s,content:"Play Sound",onClick:function(){return r("play-sound")}}),(0,o.createComponentVNode)(2,c.Button,{icon:"record-vinyl",selected:s,disabled:!s,content:"Play Ambience",onClick:function(){return r("play-ambience")}}),(0,o.createComponentVNode)(2,c.Box,{as:"span",color:"grey",textAlign:"right",pl:1,children:[(0,o.createComponentVNode)(2,c.Icon,{name:"satellite"})," Channel: ",(0,o.createVNode)(1,"em",null,1024-m,0)]})]})}),(0,o.createComponentVNode)(2,c.Section,{children:[(0,o.createComponentVNode)(2,c.Box,{children:[(0,o.createComponentVNode)(2,c.Button,{content:"Play Remote",onClick:function(){return r("play-remote")}}),(0,o.createComponentVNode)(2,c.Button,{disabled:!s,content:"Play To Player",onClick:function(){return r("play-player")}})]}),(0,o.createComponentVNode)(2,c.Box,{children:[(0,o.createComponentVNode)(2,c.Button,{disabled:!s,content:"Preload Sound",onClick:function(){return r("preload-sound")}}),(0,o.createComponentVNode)(2,c.Button,{disabled:!Object.keys(f).length,content:"Play Preloaded Sound",onClick:function(){return r("play-preloaded")}})]}),(0,o.createComponentVNode)(2,c.Box,{children:[(0,o.createComponentVNode)(2,c.Button,{color:"yellow",content:"Toggle DJ Announcements",onClick:function(){return r("toggle-announce")}}),(0,o.createComponentVNode)(2,c.Button,{color:"yellow",content:"Toggle DJ For Player",onClick:function(){return r("toggle-player-dj")}})]}),(0,o.createComponentVNode)(2,c.Box,{children:[(0,o.createComponentVNode)(2,c.Button,{icon:"stop",color:"red",content:"Stop Last Sound",onClick:function(){return r("stop-sound")}}),(0,o.createComponentVNode)(2,c.Button,{icon:"broadcast-tower",color:"red",content:"Stop The Radio For Everyone",onClick:function(){return r("stop-radio")}})]})]}),(0,o.createComponentVNode)(2,u)]})})};var u=function(e,t){if((0,i.useBackend)(t).data.announceMode)return(0,o.createComponentVNode)(2,c.NoticeBox,{info:!0,children:"Announce Mode Enabled"})},d=function(e){return(0,r.toFixed)(2*e)+"%"},s=function(e){return(0,r.toFixed)(100*e)+"%"},p=function(e,t){var n=(0,i.useBackend)(t),r=n.act,a=n.data,l=a.loadedSound,u=a.volume,p=a.frequency,m=function(e,t){return r("set-volume",{volume:t})},f=function(e,t){return r("set-freq",{frequency:t})};return(0,o.createComponentVNode)(2,c.Box,{children:(0,o.createComponentVNode)(2,c.LabeledControls,{children:[(0,o.createComponentVNode)(2,c.LabeledControls.Item,{label:"Volume",children:(0,o.createComponentVNode)(2,c.NumberInput,{animated:!0,value:u,minValue:0,maxValue:100,format:d,onDrag:m})}),(0,o.createComponentVNode)(2,c.LabeledControls.Item,{children:[(0,o.createComponentVNode)(2,c.Knob,{minValue:0,maxValue:100,ranges:{primary:[20,80],average:[10,90],bad:[0,100]},value:u,format:d,onDrag:m}),(0,o.createComponentVNode)(2,c.Button,{icon:"sync-alt",top:"0.3em",content:"Reset",onClick:function(e,t){return r("set-volume",{volume:"reset"})}})]}),(0,o.createComponentVNode)(2,c.LabeledControls.Item,{label:"Frequency",children:(0,o.createComponentVNode)(2,c.NumberInput,{animated:!0,value:p,step:.1,minValue:-100,maxValue:100,format:s,onDrag:f})}),(0,o.createComponentVNode)(2,c.LabeledControls.Item,{children:[(0,o.createComponentVNode)(2,c.Knob,{disabled:!l,minValue:-100,maxValue:100,step:.1,stepPixelSize:.1,ranges:{primary:[-40,40],average:[-70,70],bad:[-100,100]},value:p,format:s,onDrag:f}),(0,o.createComponentVNode)(2,c.Button,{icon:"sync-alt",top:"0.3em",content:"Reset",onClick:function(e,t){return r("set-freq",{frequency:"reset"})}})]})]})})}},64640:function(e,t,n){"use strict";t.__esModule=!0,t.DisposalChute=void 0;var o,r=n(96323),a=n(31246),i=n(26949),c=n(2381),l=n(36814),u=n(9389),d=((o={})[u.DisposalChuteState.Off]={pumpColor:"bad",pumpText:"Inactive"},o[u.DisposalChuteState.Charging]={pumpColor:"average",pumpText:"Pressurizing"},o[u.DisposalChuteState.Charged]={pumpColor:"good",pumpText:"Ready"},o);t.DisposalChute=function(e,t){var n=(0,a.useBackend)(t),o=n.act,l=n.data,u=l.name,p=l.destinations,m=void 0===p?null:p,f=l.destinationTag,h=l.flush,g=l.mode,C=l.pressure,N=d[g],v=N.pumpColor,b=N.pumpText;return(0,r.createComponentVNode)(2,c.Window,{title:u,width:355,height:m?350:140,children:(0,r.createComponentVNode)(2,c.Window.Content,{className:"disposal-chute-interface",scrollable:!!m,children:[(0,r.createComponentVNode)(2,i.Stack,{vertical:!0,children:[(0,r.createComponentVNode)(2,i.Stack.Item,{children:(0,r.createComponentVNode)(2,i.LabeledList,{children:(0,r.createComponentVNode)(2,i.LabeledList.Item,{label:"Current Pressure"})})}),(0,r.createComponentVNode)(2,i.Stack.Item,{children:(0,r.createComponentVNode)(2,i.ProgressBar,{ranges:{good:[1,Infinity],average:[.75,1],bad:[-Infinity,.75]},value:C})})]}),(0,r.createComponentVNode)(2,i.Divider),(0,r.createComponentVNode)(2,i.LabeledList,{children:[(0,r.createComponentVNode)(2,i.LabeledList.Item,{label:"Air Pump",buttons:(0,r.createComponentVNode)(2,i.Button,{icon:"power-off",content:g?"Enabled":"Disabled",color:g?"green":"red",onClick:function(){return o("togglePump")}}),children:(0,r.createComponentVNode)(2,i.Box,{color:v,children:b})}),(0,r.createComponentVNode)(2,i.LabeledList.Item,{label:"Chute Handle",buttons:(0,r.createComponentVNode)(2,i.Button,{icon:m?"envelope":"trash-alt",content:h?"Flushing":"Flush",color:h?"":"red",onClick:function(){return o("toggleHandle")}}),children:(0,r.createComponentVNode)(2,i.Button,{content:"Eject Contents",icon:"eject",onClick:function(){return o("eject")}})})]}),!!m&&(0,r.createFragment)([(0,r.createComponentVNode)(2,i.Divider),(0,r.createComponentVNode)(2,i.Stack,{vertical:!0,children:[(0,r.createComponentVNode)(2,i.Stack.Item,{children:(0,r.createComponentVNode)(2,i.LabeledList,{children:(0,r.createComponentVNode)(2,i.LabeledList.Item,{label:"Destination",buttons:(0,r.createComponentVNode)(2,i.Button,{icon:"search",content:"Rescan",onClick:function(){return o("rescanDest")}}),children:f})})}),(0,r.createComponentVNode)(2,i.Stack.Item,{children:(0,r.createComponentVNode)(2,s,{destinations:m,destinationTag:f})})]})],4)]})})};var s=function(e,t){var n=e.destinations,o=void 0===n?[]:n,i=e.destinationTag,c=void 0===i?null:i,u=(0,a.useBackend)(t).act,d=(0,a.useLocalState)(t,"searchText",""),s=d[0],p=d[1],m=o.filter((function(e){return e.includes(s)}));return(0,r.createComponentVNode)(2,l.ListSearch,{autoFocus:!0,currentSearch:s,onSearch:p,onSelect:function(e){return u("select-destination",{destination:e})},options:m,selectedOption:c})}},9389:function(e,t){"use strict";var n;t.__esModule=!0,t.DisposalChuteState=void 0,t.DisposalChuteState=n,function(e){e[e.Off=0]="Off",e[e.Charging=1]="Charging",e[e.Charged=2]="Charged"}(n||(t.DisposalChuteState=n={}))},84430:function(e,t,n){"use strict";t.__esModule=!0,t.DoorTimer=void 0;var o=n(96323),r=n(31246),a=n(26949),i=n(1033),c=n(2381);t.DoorTimer=function(e,t){var n=(0,r.useBackend)(t),l=n.act,u=n.data;return(0,o.createComponentVNode)(2,c.Window,{width:260,height:u.flasher?279:207,children:(0,o.createComponentVNode)(2,c.Window.Content,{children:(0,o.createComponentVNode)(2,a.Stack,{vertical:!0,fill:!0,justify:"stretch",children:[(0,o.createComponentVNode)(2,a.Stack.Item,{grow:1,children:(0,o.createComponentVNode)(2,a.Section,{title:"Timer",fill:!0,children:(0,o.createComponentVNode)(2,a.LabeledControls,{justify:"start",children:[(0,o.createComponentVNode)(2,a.LabeledControls.Item,{label:"Time",children:(0,o.createComponentVNode)(2,a.Stack,{align:"center",children:[(0,o.createComponentVNode)(2,a.Stack.Item,{children:(0,o.createComponentVNode)(2,a.Knob,{animated:!0,minValue:0,maxValue:u.maxTime,value:u.time,format:function(e){return(0,i.formatTime)(10*e)},onDrag:function(e,t){return l("set-time",{time:t})},onChange:function(e,t){return l("set-time",{time:t,finish:!0})}})}),(0,o.createComponentVNode)(2,a.Stack.Item,{children:(0,o.createComponentVNode)(2,a.TimeDisplay,{value:10*u.time,timing:u.timing,format:i.formatTime})})]})}),(0,o.createComponentVNode)(2,a.LabeledControls.Item,{children:(0,o.createComponentVNode)(2,a.Button,{onClick:function(){return l("toggle-timing")},children:u.timing?"Stop":"Start"})})]})})}),!!u.flusher&&(0,o.createComponentVNode)(2,a.Stack.Item,{children:(0,o.createComponentVNode)(2,a.Section,{title:"Floor Flusher",fill:!0,children:(0,o.createComponentVNode)(2,a.Button,{onClick:function(){return l("toggle-flusher")},backgroundColor:u.opening?"orange":undefined,children:u.opening?u.flusheropen?"Opening...":"Closing...":u.flusheropen?"Close Flusher":"Open Flusher"})})}),!!u.flasher&&(0,o.createComponentVNode)(2,a.Stack.Item,{children:(0,o.createComponentVNode)(2,a.Section,{title:"Flasher",fill:!0,children:(0,o.createComponentVNode)(2,a.Button,{onClick:function(){return l("activate-flasher")},backgroundColor:u.recharging?"orange":undefined,children:["Flash Cell ",!!u.recharging&&"(Recharging)"]})})})]})})})}},9494:function(){},29259:function(e,t,n){"use strict";t.__esModule=!0,t.DyeDispenser=void 0;var o=n(96323),r=n(31246),a=n(2381),i=n(26949),c=n(21018),l=n(89295),u="#FFFFFF";t.DyeDispenser=function(e,t){var n=(0,r.useBackend)(t),d=n.act,s=n.data,p=s.bottle,m=s.uses_left,f=s.bottle_color,h=p&&m>0,g=(0,r.useLocalState)(t,"color_picker_choice",(0,l.hexToHsva)(f||u)),C=g[0],N=g[1];return(0,o.createComponentVNode)(2,a.Window,{width:500,height:340,children:(0,o.createComponentVNode)(2,a.Window.Content,{children:[(0,o.createComponentVNode)(2,i.Stack,{mb:1,textAlign:"center",children:[(0,o.createComponentVNode)(2,i.Stack.Item,{grow:!0,children:(0,o.createComponentVNode)(2,i.Button,{fontSize:1.5,bold:!0,width:"100%",onClick:function(){return d("fillb",{selectedColor:(0,l.hsvaToHex)(C)})},children:[(0,o.createComponentVNode)(2,i.ColorBox,{color:(0,l.hsvaToHex)(C),mr:1}),"Fill"]})}),(0,o.createComponentVNode)(2,i.Stack.Item,{grow:!0,children:(0,o.createComponentVNode)(2,i.Button,{fontSize:1.5,bold:!0,width:"100%",onClick:function(){return d("emptyb",{})},icon:"broom",disabled:!h,children:"Empty"})}),(0,o.createComponentVNode)(2,i.Stack.Item,{grow:!0,children:(0,o.createComponentVNode)(2,i.Button,{fontSize:1.5,bold:!0,width:"100%",onClick:function(){return d("eject",{})},icon:"eject",children:"Eject"})})]}),(0,o.createComponentVNode)(2,c.ColorSelector,{color:C,setColor:N,defaultColor:f||u}),!p&&(0,o.createComponentVNode)(2,i.Dimmer,{children:(0,o.createComponentVNode)(2,i.Button,{fontSize:1.5,bold:!0,onClick:function(){return d("insertb",{})},icon:"eject",children:"Insert Dye Bottle"})})]})})}},87339:function(e,t,n){"use strict";t.__esModule=!0,t.Elevator=void 0;var o=n(96323),r=n(31246),a=n(2381),i=n(26949);t.Elevator=function(e,t){var n=(0,r.useBackend)(t),c=n.act,l=n.data,u=l.location,d=l.active;return(0,o.createComponentVNode)(2,a.Window,{theme:"ntos",width:400,height:130,children:(0,o.createComponentVNode)(2,a.Window.Content,{textAlign:"center",children:[(0,o.createComponentVNode)(2,i.Section,{width:"70%",mx:"auto",children:["Location: ",(0,o.createVNode)(1,"em",null,u,0)]}),(0,o.createComponentVNode)(2,i.Section,{width:"70%",mx:"auto",fontSize:"16px",children:(0,o.createComponentVNode)(2,i.Button,{onClick:function(){return c("send",{})},enabled:!d,color:d?"grey":"green",icon:"elevator",fluid:!0,children:d?"Moving":"Move Elevator"})})]})})}},20316:function(e,t,n){"use strict";t.__esModule=!0,t.EngineStats=void 0;var o=n(96323),r=n(31246),a=n(26949),i=n(2381),c=n(1033),l=n(818),u=function(e){return Object.entries(e).map((function(e,t){var n=e[0],r=e[1];return(0,o.createComponentVNode)(2,a.Stack.Item,{mt:.5,ml:0===t?1:undefined,children:[(0,o.createComponentVNode)(2,a.Box,{children:[n.split("|")[0],":\xa0",0===r[r.length-1][1]?"No Data":(0,c.formatSiUnit)(r[r.length-1][1],0,n.split("|")[1])]}),(0,o.createComponentVNode)(2,a.Chart.Line,{height:"3.5em",width:"20em",data:r,rangeX:[0,r.length-1],rangeY:[0,(0,l.getStatsMax)(r)],strokeColor:"\trgba(55,170,25, 1)",fillColor:"rgba(55,170,25, 0.25)"})]},n)}))};t.EngineStats=function(e,t){var n=(0,r.useBackend)(t),c=n.act,d=n.data,s=d.turnedOn,p=d.tegData,m=d.chamberData,f=(0,l.processStatsData)(p),h=(0,l.processStatsData)(m);return(0,o.createComponentVNode)(2,i.Window,{height:"560",width:"760",theme:"retro-dark",title:"Engine Statistics",children:(0,o.createComponentVNode)(2,i.Window.Content,{children:s&&f&&h?(0,o.createComponentVNode)(2,a.Box,{children:[(0,o.createComponentVNode)(2,a.Section,{title:(0,o.createComponentVNode)(2,a.Box,{children:["TEG Data",(0,o.createComponentVNode)(2,a.Button,{tooltip:"Power",icon:"power-off",color:"caution",position:"absolute",right:.25,top:.25,onClick:function(){return c("toggle-power")}})]}),children:(0,o.createComponentVNode)(2,a.Stack,{wrap:"wrap",justify:"space-around",ml:-1,children:u(f)})}),(0,o.createComponentVNode)(2,a.Section,{title:"Combustion Chamber Data",children:(0,o.createComponentVNode)(2,a.Stack,{wrap:"wrap",justify:"space-around",ml:-1,children:u(h)})})]}):(0,o.createComponentVNode)(2,a.Modal,{textAlign:"center",width:20,height:5,fontSize:2,fontFamily:"Courier",children:["POWER ON",(0,o.createComponentVNode)(2,a.Button,{tooltip:"Power",icon:"power-off",selected:s,color:"caution",ml:3,onClick:function(){return c("toggle-power")}})]})})})}},65203:function(e,t,n){"use strict";t.__esModule=!0,t.EspressoMachine=t.DrinkContainer=t.ReagentBlocks=t.ContainerButtons=t.DrinksList=void 0;var o=n(96323),r=n(31246),a=n(26949),i=n(2381),c=function(e,t){var n=(0,r.useBackend)(t).act,i=e.drinks;return(0,o.createComponentVNode)(2,a.Flex,{wrap:!0,children:i.map((function(e){return(0,o.createComponentVNode)(2,a.Flex.Item,{children:(0,o.createComponentVNode)(2,a.Button,{m:"2px",fontSize:"1.4rem",backgroundColor:"brown",textAlign:"center",onClick:function(){return n("pour",{drink_name:e})},children:e},e)},e)}))})};t.DrinksList=c;var l=function(e,t){var n=(0,r.useBackend)(t).act,i=e.index;return(0,o.createComponentVNode)(2,a.Flex,{children:(0,o.createComponentVNode)(2,a.Flex.Item,{nowrap:!0,children:[(0,o.createComponentVNode)(2,a.Button,{icon:"eject",color:"blue",title:"Eject",mr:"10px",onClick:function(){return n("eject",{cup_index:i})}}),(0,o.createComponentVNode)(2,a.Button,{icon:"times",color:"red",title:"Flush All",onClick:function(){return n("flush",{cup_index:i})}})]})})};t.ContainerButtons=l;var u=function(e){var t=e.capacity,n=e.total,r=e.reagents;return(0,o.createComponentVNode)(2,a.Flex,{mt:"5px",children:[r.map((function(e){return(0,o.createComponentVNode)(2,a.Flex.Item,{grow:e.amount/t,children:(0,o.createComponentVNode)(2,a.Tooltip,{content:e.name+" ("+e.amount+"u)",position:"bottom",children:(0,o.createComponentVNode)(2,a.Box,{width:"100%",height:"30px",px:0,my:0,backgroundColor:e.colour})})},e.name)})),(0,o.createComponentVNode)(2,a.Flex.Item,{grow:(t-n)/t,children:(0,o.createComponentVNode)(2,a.Tooltip,{content:"Nothing ("+(t-n)+"u)",position:"bottom",children:(0,o.createComponentVNode)(2,a.NoticeBox,{width:"100%",height:"30px",px:0,my:0,backgroundColor:"rgba(0, 0, 0, 0)"})})},"nothing")]})};t.ReagentBlocks=u;var d=function(e,t){(0,r.useBackend)(t).act;var n=e.cup;return(0,o.createComponentVNode)(2,a.Flex,{direction:"column",mt:"10px",children:[(0,o.createComponentVNode)(2,a.Flex,{children:[(0,o.createComponentVNode)(2,l,{index:n.index}),(0,o.createComponentVNode)(2,a.Box,{as:"span",fontSize:"1.3rem",ml:"15px",children:n.total+" / "+n.capacity})]}),(0,o.createComponentVNode)(2,u,{capacity:n.capacity,total:n.total,reagents:n.reagents})]})};t.DrinkContainer=d;t.EspressoMachine=function(e,t){var n=(0,r.useBackend)(t).data,l=n.drinks,u=n.containers.map((function(e){return{capacity:e.capacity,index:e.index,total:e.reagents.reduce((function(e,t){return e+t[1]}),0),reagents:e.reagents.map((function(e){return{name:e[0],amount:e[1],colour:"rgb("+e[2]+","+e[3]+","+e[4]+")"}}))}}));return(0,o.createComponentVNode)(2,i.Window,{title:"Espresso Machine",width:500,height:400,theme:"ntos",children:(0,o.createComponentVNode)(2,i.Window.Content,{children:[(0,o.createComponentVNode)(2,a.Section,{title:"Drinks",children:(0,o.createComponentVNode)(2,c,{drinks:l})}),(0,o.createComponentVNode)(2,a.Section,{title:"Cups",children:(0,o.createComponentVNode)(2,a.Flex,{direction:"column",children:u.map((function(e){return(0,o.createComponentVNode)(2,d,{cup:e},e.index)}))})})]})})}},53600:function(e,t,n){"use strict";t.__esModule=!0,t.Filteriffic=void 0;var o=n(96323),r=n(31246),a=n(26949),i=n(2381),c=n(1397),l=n(97622),u=n(97622),d=["type","priority"];var s=function(e,t){var n=e.value,i=e.name,c=e.filterName,l=(0,r.useBackend)(t).act;return(0,o.createComponentVNode)(2,a.NumberInput,{value:n,minValue:-500,maxValue:500,stepPixelSize:5,width:"39px",onDrag:function(e,t){var n;return l("modify_filter_value",{name:c,new_data:(n={},n[i]=t,n)})}})},p=function(e,t){var n=e.value,i=e.name,c=e.filterName,d=(0,r.useBackend)(t).act,s=(0,r.useLocalState)(t,c+"-"+i,.01),p=s[0],m=s[1];return(0,o.createFragment)([(0,o.createComponentVNode)(2,a.NumberInput,{value:n,minValue:-500,maxValue:500,stepPixelSize:4,step:p,format:function(e){return(0,l.toFixed)(e,(0,u.numberOfDecimalDigits)(p))},width:"80px",onDrag:function(e,t){var n;return d("transition_filter_value",{name:c,new_data:(n={},n[i]=t,n)})}}),(0,o.createComponentVNode)(2,a.Box,{inline:!0,ml:2,mr:1,children:"Step:"}),(0,o.createComponentVNode)(2,a.NumberInput,{value:p,step:.001,format:function(e){return(0,l.toFixed)(e,4)},width:"70px",onChange:function(e,t){return m(t)}})],4)},m=function(e,t){var n=e.value,i=e.name,c=e.filterName,l=(0,r.useBackend)(t).act;return(0,o.createComponentVNode)(2,a.Input,{value:n,width:"250px",onInput:function(e,t){var n;return l("modify_filter_value",{name:c,new_data:(n={},n[i]=t,n)})}})},f=function(e,t){var n=e.value,i=e.name,c=e.filterName,u=(0,r.useBackend)(t).act,d=n;return null===d&&(d=Array(1,0,0,0,1,0)),(0,o.createFragment)([(0,o.createTextVNode)("Matrix:"),(0,o.createComponentVNode)(2,a.Stack,{children:[0,1,2].map((function(e,t){return(0,o.createComponentVNode)(2,a.Stack.Item,{children:(0,o.createComponentVNode)(2,a.Stack,{vertical:!0,children:[0,1,2].map((function(t,n){return(0,o.createComponentVNode)(2,a.Stack.Item,{children:[2===e&&t<2&&0,2===e&&2===t&&1,e<2&&(0,o.createComponentVNode)(2,a.NumberInput,{inline:!0,value:d[3*e+t],step:.01,width:"50px",format:function(e){return(0,l.toFixed)(e,2)},onDrag:function(n,o){var r,a=d;a[3*e+t]=o,u("transition_filter_value",{name:c,new_data:(r={},r[i]=a,r)})}})]},n)}))})},t)}))})],4)},h=function(e,t){var n=e.value,i=e.filterName,c=e.name,u=(0,r.useBackend)(t).act,d=["r","g","b","a","c"];if(Array.isArray(n)){var s=n;if(s.length<20){for(;s.length<12;)s.push(0);for(s=Array(s[0],s[1],s[2],0,s[3],s[4],s[5],0,s[6],s[7],s[8],0,0,0,0,1,s[9],s[10],s[11],0);s.length<20;)s.push(0)}return(0,o.createFragment)([(0,o.createComponentVNode)(2,a.Button,{icon:"pencil-alt",onClick:function(){return u("modify_color_value",{name:i})}}),(0,o.createComponentVNode)(2,a.Stack,{children:[0,1,2,3].map((function(e,t){return(0,o.createComponentVNode)(2,a.Stack.Item,{children:(0,o.createComponentVNode)(2,a.Stack,{vertical:!0,children:[0,1,2,3,4].map((function(t,n){return(0,o.createComponentVNode)(2,a.Stack.Item,{children:[(0,o.createComponentVNode)(2,a.Box,{inline:!0,textColor:"label",width:"2.1rem",children:""+d[t]+d[e]+":"}),(0,o.createComponentVNode)(2,a.NumberInput,{inline:!0,value:s[4*t+e],step:.01,width:"50px",format:function(e){return(0,l.toFixed)(e,2)},onDrag:function(n,o){var r,a=s;a[4*t+e]=o,u("transition_filter_value",{name:i,new_data:(r={},r[c]=a,r)})}})]},n)}))})},t)}))})],4)}return(0,o.createFragment)([n.type,(0,o.createComponentVNode)(2,a.Button,{icon:"pencil-alt",onClick:function(){return u("modify_color_value",{name:i})}}),(0,o.createComponentVNode)(2,a.ColorBox,{color:n,mr:.5}),(0,o.createComponentVNode)(2,a.Input,{value:n,width:"90px",onInput:function(e,t){var n;return u("transition_filter_value",{name:i,new_data:(n={},n[c]=t,n)})}}),(0,o.createComponentVNode)(2,a.Button,{content:"Convert to color matrix",onClick:function(){return u("convert_color_value_matrix",{name:i})}})],0)},g=function(e,t){var n=e.value,i=e.filterName,c=(0,r.useBackend)(t).act;return(0,o.createFragment)([(0,o.createComponentVNode)(2,a.Button,{icon:"pencil-alt",onClick:function(){return c("modify_icon_value",{name:i})}}),(0,o.createComponentVNode)(2,a.Box,{inline:!0,ml:1,children:n})],4)},C=function(e,t){var n=e.name,i=e.value,l=e.filterName,u=e.filterType,d=(0,r.useBackend)(t),s=d.act,p=d.data.filter_info[u].flags;return(0,c.map)((function(e,t){return(0,o.createComponentVNode)(2,a.Button.Checkbox,{checked:i&e,content:t,onClick:function(){var t;return s("modify_filter_value",{name:l,new_data:(t={},t[n]=i^e,t)})}})}))(p)},N=function(e,t){var n=e.name,i=e.value,l=e.filterName,u=e.filterType,d=(0,r.useBackend)(t),s=d.act,p=d.data.filter_info[u].space;return(0,c.map)((function(e,t){return(0,o.createComponentVNode)(2,a.Button.Checkbox,{checked:i===e,content:t,onClick:function(){var t;return s("modify_filter_value",{name:l,new_data:(t={},t[n]=e,t)})}})}))(p)},v=function(e,t){var n=e.name,i=e.value,l=e.filterName,u=e.filterType,d=(0,r.useBackend)(t),s=d.act,p=d.data.filter_info[u].blend_mode;return(0,c.map)((function(e,t){return(0,o.createComponentVNode)(2,a.Button.Checkbox,{checked:i===e,content:t,onClick:function(){var t;return s("modify_filter_value",{name:l,new_data:(t={},t[n]=e,t)})}})}))(p)},b=function(e,t){var n=e.name,r=(e.value,e.hasValue),i=(e.filterName,{int:(0,o.normalizeProps)((0,o.createComponentVNode)(2,s,Object.assign({},e))),float:(0,o.normalizeProps)((0,o.createComponentVNode)(2,p,Object.assign({},e))),string:(0,o.normalizeProps)((0,o.createComponentVNode)(2,m,Object.assign({},e))),color:(0,o.normalizeProps)((0,o.createComponentVNode)(2,h,Object.assign({},e))),icon:(0,o.normalizeProps)((0,o.createComponentVNode)(2,g,Object.assign({},e))),flags:(0,o.normalizeProps)((0,o.createComponentVNode)(2,C,Object.assign({},e))),space:(0,o.normalizeProps)((0,o.createComponentVNode)(2,N,Object.assign({},e))),blendmode:(0,o.normalizeProps)((0,o.createComponentVNode)(2,v,Object.assign({},e))),matrix:(0,o.normalizeProps)((0,o.createComponentVNode)(2,f,Object.assign({},e)))});return(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:n,children:[i[{x:"float",y:"float",icon:"icon",render_source:"string",flags:"flags",size:"float",color:"color",offset:"float",radius:"float",space:"space",falloff:"float",density:"int",threshold:"float",factor:"float",repeat:"int",transform:"matrix",blend_mode:"blendmode"}[n]]||"Not Found (This is an error)"," ",!r&&(0,o.createComponentVNode)(2,a.Box,{inline:!0,color:"average",children:"(Default)"})]})},V=function(e,t){var n=(0,r.useBackend)(t),i=n.act,c=n.data,l=e.name,u=e.filterDataEntry,s=u.type,p=u.priority,m=function(e,t){if(null==e)return{};var n,o,r={},a=Object.keys(e);for(o=0;o<a.length;o++)n=a[o],t.indexOf(n)>=0||(r[n]=e[n]);return r}(u,d),f=c.filter_info,h=Object.keys(f[s].defaults);return(0,o.createComponentVNode)(2,a.Collapsible,{title:l+" ("+s+")",buttons:(0,o.createFragment)([(0,o.createComponentVNode)(2,a.NumberInput,{value:p,stepPixelSize:10,width:"60px",onChange:function(e,t){return i("change_priority",{name:l,new_priority:t})}}),(0,o.createComponentVNode)(2,a.Button.Input,{content:"Rename",placeholder:l,onCommit:function(e,t){return i("rename_filter",{name:l,new_name:t})},width:"90px"}),(0,o.createComponentVNode)(2,a.Button.Confirm,{icon:"minus",onClick:function(){return i("remove_filter",{name:l})}})],4),children:(0,o.createComponentVNode)(2,a.Section,{level:2,children:(0,o.createComponentVNode)(2,a.LabeledList,{children:h.map((function(e){var t=f[s].defaults,n=m[e]||t[e],r=n!==t[e];return(0,o.createComponentVNode)(2,b,{filterName:l,filterType:s,name:e,value:n,hasValue:r},e)}))})})})};t.Filteriffic=function(e,t){var n=(0,r.useBackend)(t),l=n.act,u=n.data,d=u.target_name||"Unknown Object",s=u.target_filter_data||{},p=s!=={},m=u.filter_info,f=(0,r.useLocalState)(t,"massApplyPath",""),h=f[0],g=f[1],C=(0,r.useLocalState)(t,"hidden",!1),N=C[0],v=C[1];return(0,o.createComponentVNode)(2,i.Window,{width:500,height:500,title:"Filteriffic",resizable:!0,children:(0,o.createComponentVNode)(2,i.Window.Content,{scrollable:!0,children:[(0,o.createComponentVNode)(2,a.NoticeBox,{danger:!0,children:"DO NOT MESS WITH EXISTING FILTERS IF YOU DO NOT KNOW THE CONSEQUENCES. YOU HAVE BEEN WARNED."}),(0,o.createComponentVNode)(2,a.Section,{title:N?(0,o.createFragment)([(0,o.createComponentVNode)(2,a.Box,{mr:.5,inline:!0,children:"MASS EDIT:"}),(0,o.createComponentVNode)(2,a.Input,{value:h,width:"100px",onInput:function(e,t){return g(t)}}),(0,o.createComponentVNode)(2,a.Button.Confirm,{content:"Apply",confirmContent:"ARE YOU SURE?",onClick:function(){return l("mass_apply",{path:h})}})],4):(0,o.createComponentVNode)(2,a.Box,{inline:!0,onDblClick:function(){return v(!0)},children:d}),buttons:(0,o.createComponentVNode)(2,a.Dropdown,{icon:"plus",displayText:"Add Filter",nochevron:!0,options:Object.keys(m),onSelected:function(e){return l("add_filter",{name:"default",priority:10,type:e})}}),children:p?(0,c.map)((function(e,t){return(0,o.createComponentVNode)(2,V,{filterDataEntry:e,name:t},t)}))(s):(0,o.createComponentVNode)(2,a.Box,{children:"No filters"})})]})})}},21980:function(e,t,n){"use strict";t.__esModule=!0,t.Flamethrower=void 0;var o=n(96323),r=n(31246),a=n(41161),i=n(26949),c=n(51418),l=n(48175),u=n(2381),d=function(e,t){var n=(0,r.useBackend)(t).act,a=e.lit,c=e.maxTemp,u=e.minTemp,d=e.sprayTemp;return(0,o.createComponentVNode)(2,i.Section,{fill:!0,title:"Pilot Light",children:(0,o.createComponentVNode)(2,i.Stack,{justify:"center",align:"center",children:[(0,o.createComponentVNode)(2,i.Stack.Item,{children:(0,o.createComponentVNode)(2,i.Button,{icon:"fire",color:a?"orange":null,iconColor:a?"yellow":null,onClick:function(){return n("light")},align:"center",width:"5em",fontSize:1.25,children:a?"Lit":"Unlit"})}),(0,o.createComponentVNode)(2,i.Stack.Item,{children:(0,o.createComponentVNode)(2,i.Knob,{animated:!0,size:2,value:d,minValue:u,maxValue:c,format:function(e){return Math.floor(e-l.freezeTemperature)+" C"},onChange:function(e,t){return n("change_temperature",{temperature:t})}})}),(0,o.createComponentVNode)(2,i.Stack.Item,{children:(0,o.createComponentVNode)(2,i.Box,{className:"ChemHeater__TemperatureNumber",nowrap:!0,p:1,fontSize:1.5,color:(0,l.getTemperatureColor)(d),backgroundColor:"black",children:[(0,o.createComponentVNode)(2,i.Box,{fontSize:1,children:"Temperature"}),(0,o.createComponentVNode)(2,i.Icon,{name:(0,l.getTemperatureIcon)(d),pr:.5}),(0,o.createComponentVNode)(2,i.AnimatedNumber,{value:Math.floor(d-l.freezeTemperature)}),"C"]})})]})})},s=function(e,t){var n=(0,r.useBackend)(t).act,a=e.mode,c=e.minVolume,l=e.maxVolume,u=e.chamberVolume;return(0,o.createComponentVNode)(2,i.Section,{fill:!0,title:"Fuel Control",children:(0,o.createComponentVNode)(2,i.Stack,{vertical:!0,children:[(0,o.createComponentVNode)(2,i.Stack.Item,{children:["Fire mode: ",(0,o.createComponentVNode)(2,i.Button,{selected:"auto"===a,onClick:function(){return n("change_mode",{mode:"auto"})},children:"Full Auto"}),(0,o.createComponentVNode)(2,i.Button,{selected:"burst"===a,onClick:function(){return n("change_mode",{mode:"burst"})},children:"Wide Burst"}),(0,o.createComponentVNode)(2,i.Button,{selected:"semi_auto"===a,onClick:function(){return n("change_mode",{mode:"semi_auto"})},children:"Semi Auto"})]}),(0,o.createComponentVNode)(2,i.Stack.Item,{children:["Chamber volume: ",(0,o.createComponentVNode)(2,i.NumberInput,{value:u,minValue:c,maxValue:l,onChange:function(e,t){return n("change_volume",{volume:t})}})]})]})})};t.Flamethrower=function(e,t){var n=(0,r.useBackend)(t),l=n.act,p=n.data,m=p.gasTank,f=p.fuelTank;return(0,o.createComponentVNode)(2,u.Window,{width:580,height:270,theme:"ntos",title:"Flamethrower",children:(0,o.createComponentVNode)(2,u.Window.Content,{children:(0,o.createComponentVNode)(2,i.Stack,{vertical:!0,children:[(0,o.createComponentVNode)(2,i.Stack.Item,{children:(0,o.createComponentVNode)(2,i.Stack,{justify:"center",children:[(0,o.createComponentVNode)(2,i.Stack.Item,{width:"21em",children:(0,o.normalizeProps)((0,o.createComponentVNode)(2,d,Object.assign({},p)))}),(0,o.createComponentVNode)(2,i.Stack.Item,{grow:!0,children:(0,o.normalizeProps)((0,o.createComponentVNode)(2,s,Object.assign({},p)))})]})}),(0,o.createComponentVNode)(2,i.Stack.Item,{children:(0,o.createComponentVNode)(2,i.Stack,{children:[(0,o.createComponentVNode)(2,i.Stack.Item,{width:"21em",children:(0,o.createComponentVNode)(2,a.PortableHoldingTank,{title:"Gas Tank",holding:m,onEjectTank:function(){return l("remove_gas")}})}),(0,o.createComponentVNode)(2,i.Stack.Item,{grow:!0,children:(0,o.createComponentVNode)(2,i.Section,{title:"Fuel Tank",fill:!0,buttons:(0,o.createComponentVNode)(2,i.Button,{icon:"eject",content:"Eject",disabled:!f,onClick:function(){return l("remove_fuel")}}),children:f&&(0,o.createComponentVNode)(2,c.ReagentBar,{container:f,height:"5em"})})})]})})]})})})}},72758:function(e,t,n){"use strict";t.__esModule=!0,t.FlockPanel=void 0;var o=n(96323),r=n(31246),a=n(26949),i=n(2381),c=function(e,t){var n=(0,r.useBackend)(t).act,i=e.partitions;return(0,o.createComponentVNode)(2,a.Stack,{vertical:!0,children:i.map((function(e){return(0,o.createComponentVNode)(2,a.Stack.Item,{children:(0,o.createComponentVNode)(2,a.Stack,{align:"center",height:"100%",children:[(0,o.createComponentVNode)(2,a.Stack.Item,{width:"20%",height:"100%",children:(0,o.createComponentVNode)(2,a.Section,{align:"center",height:"100%",children:e.name})}),(0,o.createComponentVNode)(2,a.Stack.Item,{height:"100%",grow:1,children:(0,o.createComponentVNode)(2,a.Section,{height:"100%",children:e.host&&(0,o.createComponentVNode)(2,a.Stack,{children:[(0,o.createComponentVNode)(2,a.Stack.Item,{children:(0,o.createComponentVNode)(2,a.Icon,{name:"wifi",size:3})}),(0,o.createComponentVNode)(2,a.Stack.Item,{children:(0,o.createComponentVNode)(2,a.Stack,{vertical:!0,align:"center",children:[(0,o.createComponentVNode)(2,a.Stack.Item,{children:e.host}),(0,o.createComponentVNode)(2,a.Stack.Item,{children:[e.health,(0,o.createComponentVNode)(2,a.Icon,{name:"heart"})]})]})})]})})}),(0,o.createComponentVNode)(2,a.Stack.Item,{height:"100%",children:(0,o.createComponentVNode)(2,a.Section,{height:"100%",children:(0,o.createComponentVNode)(2,a.Stack,{children:[e.host&&(0,o.createComponentVNode)(2,a.Stack.Item,{children:(0,o.createComponentVNode)(2,a.Button,{onClick:function(){return n("eject_trace",{origin:e.ref})},children:"Eject"})}),(0,o.createComponentVNode)(2,a.Stack.Item,{children:(0,o.createComponentVNode)(2,a.Button,{onClick:function(){return n("promote_trace",{origin:e.ref})},children:"Promote sentience"})}),(0,o.createComponentVNode)(2,a.Stack.Item,{children:(0,o.createComponentVNode)(2,a.Button,{onClick:function(){return n("delete_trace",{origin:e.ref})},children:"Remove sentience"})}),(0,o.createComponentVNode)(2,a.Stack.Item,{children:(0,o.createComponentVNode)(2,a.Button,{onClick:function(){return n("jump_to",{origin:e.ref})},children:"Jump"})})]})})})]})},e.ref)}))})},l={thinking:"brain",shooting:"bolt",rummaging:"dumpster",wandering:"route",building:"hammer",nesting:"hammer",harvesting:"cogs",controlled:"wifi",replicating:"egg",rallying:"map-marker","opening container":"box-open",butchering:"recycle",repairing:"tools",capturing:"bars",depositing:"border-style",observing:"eye",deconstructing:"trash",hibernating:"stop-circle"},u=function(e,t){var n=(0,r.useBackend)(t).act,i=e.drones,c=e.sortBy;return(0,o.createComponentVNode)(2,a.Stack,{vertical:!0,children:i.sort((function(e,t){return function(e,t,n){return isNaN(e[n])||isNaN(t[n])?(""+e[n]).localeCompare(t[n]):t[n]-e[n]}(e,t,c)})).map((function(e){return(0,o.createComponentVNode)(2,a.Stack.Item,{children:(0,o.createComponentVNode)(2,a.Stack,{children:[(0,o.createComponentVNode)(2,a.Stack.Item,{width:"20%",children:(0,o.createComponentVNode)(2,a.Section,{height:"100%",children:(0,o.createComponentVNode)(2,a.Stack,{vertical:!0,align:"center",children:[(0,o.createComponentVNode)(2,a.Stack.Item,{children:e.name}),(0,o.createComponentVNode)(2,a.Stack.Item,{children:[e.health,(0,o.createComponentVNode)(2,a.Icon,{name:"heart"})," ",e.resources,(0,o.createComponentVNode)(2,a.Icon,{name:"cog"})]})]})})}),(0,o.createComponentVNode)(2,a.Stack.Item,{grow:1,children:(0,o.createComponentVNode)(2,a.Section,{height:"100%",children:(0,o.createComponentVNode)(2,a.Stack,{align:"center",children:[(0,o.createComponentVNode)(2,a.Stack.Item,{width:"50px",children:(0,o.createComponentVNode)(2,a.Box,{align:"center",children:(r=e.task,i=l[r],i?(0,o.createComponentVNode)(2,a.Icon,{size:3,name:i}):"")})}),(0,o.createComponentVNode)(2,a.Stack.Item,{children:[(0,o.createVNode)(1,"b",null,e.area,0)," ",(0,o.createVNode)(1,"br")," ",e.task&&(t=e.task,t.charAt(0).toUpperCase()+t.slice(1))]})]})})}),(0,o.createComponentVNode)(2,a.Stack.Item,{children:(0,o.createComponentVNode)(2,a.Section,{height:"100%",children:(0,o.createComponentVNode)(2,a.Stack,{children:["controlled"===e.task&&(0,o.createComponentVNode)(2,a.Stack.Item,{children:(0,o.createComponentVNode)(2,a.Button,{onClick:function(){return n("eject_trace",{origin:e.controller_ref})},children:"Eject Trace"})}),(0,o.createComponentVNode)(2,a.Stack.Item,{children:(0,o.createComponentVNode)(2,a.Button,{onClick:function(){return n("rally",{origin:e.ref})},children:"Rally"})}),(0,o.createComponentVNode)(2,a.Stack.Item,{children:(0,o.createComponentVNode)(2,a.Button,{onClick:function(){return n("jump_to",{origin:e.ref})},children:"Jump"})})]})})})]})},e.ref);var t,r,i}))})},d=function(e,t){var n=(0,r.useBackend)(t).act,i=e.structures;return(0,o.createComponentVNode)(2,a.Stack,{vertical:!0,children:i.map((function(e){return(0,o.createComponentVNode)(2,a.Stack.Item,{children:(0,o.createComponentVNode)(2,a.Stack,{children:[(0,o.createComponentVNode)(2,a.Stack.Item,{width:"30%",children:(0,o.createComponentVNode)(2,a.Tooltip,{position:"bottom",content:e.desc,children:(0,o.createComponentVNode)(2,a.Section,{position:"relative",children:(0,o.createComponentVNode)(2,a.Stack,{vertical:!0,align:"center",children:[(0,o.createComponentVNode)(2,a.Stack.Item,{children:e.name}),(0,o.createComponentVNode)(2,a.Stack.Item,{children:[e.health," ",(0,o.createComponentVNode)(2,a.Icon,{name:"heart"})]})]})})})}),(0,o.createComponentVNode)(2,a.Stack.Item,{grow:1,children:(0,o.createComponentVNode)(2,a.Section,{height:"100%",children:e.compute>0&&"Compute provided: "+e.compute})}),(0,o.createComponentVNode)(2,a.Stack.Item,{children:(0,o.createComponentVNode)(2,a.Section,{height:"100%",children:(0,o.createComponentVNode)(2,a.Stack,{children:["Construction Tealprint"===e.name&&(0,o.createComponentVNode)(2,a.Stack.Item,{children:(0,o.createComponentVNode)(2,a.Button,{onClick:function(){return n("cancel_tealprint",{origin:e.ref})},children:"Cancel"})}),(0,o.createComponentVNode)(2,a.Stack.Item,{children:(0,o.createComponentVNode)(2,a.Button,{onClick:function(){return n("jump_to",{origin:e.ref})},children:"Jump"})})]})})})]})},e.ref)}))})},s=function(e,t){var n=(0,r.useBackend)(t).act,i=e.enemies;return(0,o.createComponentVNode)(2,a.Stack,{vertical:!0,children:i.map((function(e){return(0,o.createComponentVNode)(2,a.Stack.Item,{children:(0,o.createComponentVNode)(2,a.Stack,{children:[(0,o.createComponentVNode)(2,a.Stack.Item,{width:"30%",children:(0,o.createComponentVNode)(2,a.Section,{height:"100%",children:e.name})}),(0,o.createComponentVNode)(2,a.Stack.Item,{grow:1,children:(0,o.createComponentVNode)(2,a.Section,{height:"100%",children:(0,o.createComponentVNode)(2,a.Stack,{children:(0,o.createComponentVNode)(2,a.Stack.Item,{grow:1,children:(0,o.createVNode)(1,"b",null,e.area,0)})})})}),(0,o.createComponentVNode)(2,a.Stack.Item,{children:(0,o.createComponentVNode)(2,a.Section,{height:"100%",children:(0,o.createComponentVNode)(2,a.Stack,{children:[(0,o.createComponentVNode)(2,a.Stack.Item,{children:(0,o.createComponentVNode)(2,a.Button,{icon:"times",onClick:function(){return n("remove_enemy",{origin:e.ref})},children:"Remove"})}),(0,o.createComponentVNode)(2,a.Stack.Item,{children:(0,o.createComponentVNode)(2,a.Button,{onClick:function(){return n("jump_to",{origin:e.ref})},children:"Jump"})})]})})})]})},e.ref)}))})},p=function(e,t){var n=e.stats;return(0,o.createComponentVNode)(2,a.Stack,{vertical:!0,children:n.map((function(e){return(0,o.createComponentVNode)(2,a.Stack.Item,{children:(0,o.createComponentVNode)(2,a.Stack,{children:(0,o.createComponentVNode)(2,a.Stack.Item,{width:"100%",children:(0,o.createComponentVNode)(2,a.Section,{height:"100%",children:(0,o.createComponentVNode)(2,a.Stack,{vertical:!0,align:"left",children:(0,o.createComponentVNode)(2,a.Stack.Item,{children:[e.name," ",e.value]})})})})})},e.name)}))})};t.FlockPanel=function(e,t){var n=(0,r.useBackend)(t),l=n.data,m=n.act,f=(0,r.useLocalState)(t,"sortBy","resources"),h=f[0],g=f[1],C=l.vitals,N=l.partitions,v=l.drones,b=l.structures,V=l.enemies,y=l.stats,x=l.category_lengths,I=l.category;return(0,o.createComponentVNode)(2,i.Window,{theme:"flock",title:"Flockmind "+C.name,width:600,height:450,children:(0,o.createComponentVNode)(2,i.Window.Content,{scrollable:!0,children:[(0,o.createComponentVNode)(2,a.Tabs,{children:[(0,o.createComponentVNode)(2,a.Tabs.Tab,{selected:"drones"===I,onClick:function(){m("change_tab",{tab:"drones"})},children:["Drones ","("+x.drones+")"]}),(0,o.createComponentVNode)(2,a.Tabs.Tab,{selected:"traces"===I,onClick:function(){m("change_tab",{tab:"traces"})},children:["Partitions ","("+x.traces+")"]}),(0,o.createComponentVNode)(2,a.Tabs.Tab,{selected:"structures"===I,onClick:function(){m("change_tab",{tab:"structures"})},children:["Structures ","("+x.structures+")"]}),(0,o.createComponentVNode)(2,a.Tabs.Tab,{selected:"enemies"===I,onClick:function(){m("change_tab",{tab:"enemies"})},children:["Enemies ","("+x.enemies+")"]}),(0,o.createComponentVNode)(2,a.Tabs.Tab,{selected:"stats"===I,onClick:function(){m("change_tab",{tab:"stats"})},children:"Stats"})]}),"drones"===I&&(0,o.createComponentVNode)(2,a.Box,{children:[(0,o.createComponentVNode)(2,a.Dropdown,{options:["name","health","resources","area"],selected:"resources",onSelected:function(e){return g(e)}}),(0,o.createComponentVNode)(2,u,{drones:v,sortBy:h})]}),"traces"===I&&(0,o.createComponentVNode)(2,c,{partitions:N}),"structures"===I&&(0,o.createComponentVNode)(2,d,{structures:b}),"enemies"===I&&(0,o.createComponentVNode)(2,s,{enemies:V}),"stats"===I&&(0,o.createComponentVNode)(2,p,{stats:y})]})})}},57576:function(e,t,n){"use strict";t.__esModule=!0,t.FlockStructures=void 0;var o=n(96323),r=n(31246),a=n(26949),i=n(2381);t.FlockStructures=function(e,t){var n=(0,r.useBackend)(t),c=(n.act,n.data.structures);return(0,o.createComponentVNode)(2,i.Window,{title:"Flock structures",width:500,height:600,children:(0,o.createComponentVNode)(2,i.Window.Content,{scrollable:!0,children:(0,o.createComponentVNode)(2,a.Stack,{vertical:!0,children:c.map((function(e){var t=e.name,n=e.icon,r=e.description,i=e.cost;return(0,o.createComponentVNode)(2,a.Stack.Item,{children:(0,o.createComponentVNode)(2,a.Stack,{height:"100%",children:[(0,o.createComponentVNode)(2,a.Stack.Item,{width:9,children:(0,o.createComponentVNode)(2,a.Section,{align:"center",children:(0,o.createComponentVNode)(2,a.Stack,{vertical:!0,children:[(0,o.createComponentVNode)(2,a.Stack.Item,{children:t}),(0,o.createComponentVNode)(2,a.Stack.Item,{children:(0,o.createComponentVNode)(2,a.Image,{pixelated:!0,height:"64px",width:"64px",src:"data:image/png;base64,"+n})})]})})}),(0,o.createComponentVNode)(2,a.Stack.Item,{width:29,children:(0,o.createComponentVNode)(2,a.Section,{height:"100%",children:(0,o.createComponentVNode)(2,a.Stack,{vertical:!0,children:[(0,o.createComponentVNode)(2,a.Stack.Item,{children:r}),(0,o.createComponentVNode)(2,a.Stack.Item,{children:!!i&&"Cost: "+i})]})})})]})},t)}))})})})}},11653:function(e,t,n){"use strict";t.__esModule=!0,t.Freezer=void 0;var o=n(96323),r=n(31246),a=n(48175),i=n(26949),c=n(2381),l=n(1033);t.Freezer=function(e,t){var n=(0,r.useBackend)(t),u=n.act,d=n.data,s=d.target_temperature,p=d.active,m=d.air_temperature,f=d.air_pressure;return(0,o.createComponentVNode)(2,c.Window,{title:"Freezer",width:320,height:215,children:(0,o.createComponentVNode)(2,c.Window.Content,{children:[(0,o.createComponentVNode)(2,i.Section,{title:"Temperature Control",children:(0,o.createComponentVNode)(2,i.Stack,{align:"center",children:[(0,o.createComponentVNode)(2,i.Stack.Item,{children:(0,o.createComponentVNode)(2,i.Knob,{animated:!0,size:2,value:s,minValue:73.15,maxValue:293.15,format:function(e){return e+" K"},onDrag:function(e,t){return u("set_target_temperature",{value:t})}})}),(0,o.createComponentVNode)(2,i.Stack.Item,{grow:!0,basis:0,overflow:"hidden",children:(0,o.createComponentVNode)(2,i.Box,{className:"ChemHeater__TemperatureNumber",nowrap:!0,p:1,fontSize:1.5,color:(0,a.getTemperatureColor)(s),backgroundColor:"black",children:[(0,o.createComponentVNode)(2,i.Box,{fontSize:1,children:"Target"}),(0,o.createComponentVNode)(2,i.Icon,{name:(0,a.getTemperatureIcon)(s),pr:.5}),(0,o.createComponentVNode)(2,i.AnimatedNumber,{value:s})," K"]})}),(0,o.createComponentVNode)(2,i.Stack.Item,{basis:9.6,align:"center",children:(0,o.createComponentVNode)(2,i.Button,{icon:"power-off",color:0===p?"red":"green",fluid:!0,height:"100%",fontSize:1.15,textAlign:"center",onClick:function(){return u("active_toggle")},children:0===p?"Deactivated":"Activated"})})]})}),(0,o.createComponentVNode)(2,i.Section,{children:(0,o.createComponentVNode)(2,i.Stack,{align:"center",children:[(0,o.createComponentVNode)(2,i.Stack.Item,{children:(0,o.createComponentVNode)(2,i.Box,{className:"ChemHeater__TemperatureNumber",nowrap:!0,p:1,width:"50%",fontSize:1.3,color:(0,a.getTemperatureColor)(m),children:[(0,o.createComponentVNode)(2,i.Box,{fontSize:1,children:"Current Temperature"}),(0,o.createComponentVNode)(2,i.Icon,{name:(0,a.getTemperatureIcon)(m),pr:.5}),(0,o.createComponentVNode)(2,i.AnimatedNumber,{value:m})," K"]})}),(0,o.createComponentVNode)(2,i.Stack.Item,{children:(0,o.createComponentVNode)(2,i.Box,{nowrap:!0,p:1,width:"50%",fontSize:1.3,children:[(0,o.createComponentVNode)(2,i.Box,{fontSize:1,children:"Current Pressure"}),(0,o.createComponentVNode)(2,i.AnimatedNumber,{value:(0,l.formatPressure)(f)})]})})]})})]})})}},6482:function(e,t,n){"use strict";t.__esModule=!0,t.Gameclock=void 0;var o=n(96323),r=n(31246),a=n(26949),i=n(2381),c=n(1033);t.Gameclock=function(e,t){var n=(0,r.useBackend)(t).data.clockStatic.name,c=(0,r.useLocalState)(t,"configModalOpen",!1)[0],d=(0,r.useLocalState)(t,"swap",!1)[0],f=(0,r.useLocalState)(t,"helpModalOpen",!1),h=f[0],g=f[1];return(0,o.createComponentVNode)(2,i.Window,{title:n,width:220,height:380,children:(0,o.createComponentVNode)(2,i.Window.Content,{className:"gameclock__window",fitted:!0,children:[c&&(0,o.createComponentVNode)(2,l),h&&(0,o.createComponentVNode)(2,u),(0,o.createComponentVNode)(2,a.Box,{className:"gameclock__help",children:(0,o.createComponentVNode)(2,a.Button,{className:"gameclock__helpbutton",tooltip:h?"Close":"Help",icon:h?"xmark":"question",color:h&&"orange",onClick:!c&&function(){g(!h)}})}),(0,o.createComponentVNode)(2,s,{team:d?"white":"black"}),(0,o.createComponentVNode)(2,p,{team:d?"white":"black"}),(0,o.createComponentVNode)(2,m),(0,o.createComponentVNode)(2,p,{team:d?"black":"white"}),(0,o.createComponentVNode)(2,s,{team:d?"black":"white"})]})})};var l=function(e,t){var n=(0,r.useBackend)(t),i=n.data,c=n.act,l=i.clockStatic.defaultTime,u=(0,r.useLocalState)(t,"configModalOpen",!1)[1],s=(0,r.useLocalState)(t,"whiteTimeBuffer",0),p=s[0],m=s[1],f=(0,r.useLocalState)(t,"blackTimeBuffer",0),h=f[0],g=f[1];return(0,o.createComponentVNode)(2,a.Dimmer,{className:"gameclock__configmodal",children:[(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Time (White)",children:(0,o.createComponentVNode)(2,d,{team:"white"})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Time (Black)",children:(0,o.createComponentVNode)(2,d,{team:"black"})})]}),(0,o.createComponentVNode)(2,a.Box,{className:"gameclock__configmodalbuttoncontainer",children:[(0,o.createComponentVNode)(2,a.Button,{content:"Reset to default",onClick:function(){m(l),g(l)}}),(0,o.createComponentVNode)(2,a.Button,{content:"Apply",onClick:function(){u(!1),c("set_time",{whiteTime:10*p,blackTime:10*h})}}),(0,o.createComponentVNode)(2,a.Button,{content:"Cancel",onClick:function(){return u(!1)}})]})]})},u=function(){return(0,o.createComponentVNode)(2,a.Dimmer,{children:(0,o.createComponentVNode)(2,a.Section,{children:[(0,o.createVNode)(1,"p",null,(0,o.createVNode)(1,"strong",null,"Help",16),2),(0,o.createVNode)(1,"p",null,"These clocks are used in two-player games where the players move in turns.",16),(0,o.createVNode)(1,"p",null,"Click on the clock face corresponding to your color to end your turn.",16),(0,o.createVNode)(1,"p",null,"The time value (in seconds) for each clock can be set using the Clocks Setup button.",16),(0,o.createVNode)(1,"p",null,"Before starting the clock, ensure that the Current Turn is set to the correct side.",16),(0,o.createVNode)(1,"p",null,"The positions of the White and Black clocks can be swapped on your client using the rotate view button.",16)]})})},d=function(e,t){var n=(0,r.useBackend)(t).data.clockStatic,i=n.minTime,l=n.maxTime,u=e.team,d=(0,r.useLocalState)(t,"whiteTimeBuffer",0),s=d[0],p=d[1],m=(0,r.useLocalState)(t,"blackTimeBuffer",0),f=m[0],h=m[1];return(0,o.createComponentVNode)(2,a.NumberInput,{onDrag:function(e,t){"white"===u?p(t):h(t)},format:function(e){return(0,c.formatTime)(10*e)},value:"white"===u?s:f,minValue:i,maxValue:l,step:15,stepPixelSize:2})},s=function(e,t){var n=e.team;return(0,o.createComponentVNode)(2,a.Stack,{direction:"column",children:(0,o.createComponentVNode)(2,a.Tooltip,{content:"white"===n?"White":"Black",children:(0,o.createComponentVNode)(2,a.Icon,{className:"gameclock__teamicon",name:"circle"+("white"===n?"":"-o")})})})},p=function(e,t){var n=(0,r.useBackend)(t),i=n.data,l=n.act,u=e.team;return(0,o.createComponentVNode)(2,a.Stack,{direction:"column",fill:!0,className:"gameclock__sidepart",children:(0,o.createComponentVNode)(2,a.Button,{color:"orange",disabled:!i.timing||(i.turn?"black"===u:"white"===u),className:"gameclock__timebutton",onClick:function(){return l("end_turn")},children:(0,o.createComponentVNode)(2,a.Stack,{className:"gameclock__timeflex",children:(0,o.createComponentVNode)(2,a.AnimatedNumber,{value:"white"===u?i.whiteTime:i.blackTime,format:function(e){return(0,c.formatTime)(10*e)}})})})})},m=function(e,t){var n=(0,r.useBackend)(t),i=n.data,c=n.act,l=(0,r.useLocalState)(t,"configModalOpen",!1)[1],u=(0,r.useLocalState)(t,"whiteTimeBuffer",0)[1],d=(0,r.useLocalState)(t,"blackTimeBuffer",0)[1],s=(0,r.useLocalState)(t,"swap",!1),p=s[0],m=s[1];return(0,o.createComponentVNode)(2,a.Stack,{direction:"row",className:"gameclock__mid",children:[(0,o.createComponentVNode)(2,a.Box,{children:(0,o.createComponentVNode)(2,a.Button,{className:"gameclock__utilbutton",disabled:i.timing,tooltip:"Clocks Setup",tooltipPosition:"top",icon:"cog",onClick:function(){l(!0),u(i.whiteTime),d(i.blackTime)}})}),(0,o.createComponentVNode)(2,a.Box,{children:(0,o.createComponentVNode)(2,a.Button,{className:"gameclock__utilbutton",disabled:i.timing,tooltip:"Current Turn: "+(i.turn?"White":"Black"),tooltipPosition:"top",icon:"flag",color:i.turn?"white":"black",onClick:function(){return c("set_turn")}})}),(0,o.createComponentVNode)(2,a.Box,{children:(0,o.createComponentVNode)(2,a.Button,{className:"gameclock__utilbutton",disabled:0===i.whiteTime||0===i.blackTime,tooltip:i.timing?"Pause":"Unpause",tooltipPosition:"top",icon:i.timing?"pause":"play",color:i.timing?"orange":"",onClick:function(){return c("toggle_timing")}})}),(0,o.createComponentVNode)(2,a.Box,{children:(0,o.createComponentVNode)(2,a.Button,{className:"gameclock__utilbutton",tooltip:"Rotate view",tooltipPosition:"top",icon:"rotate",onClick:function(){return m(!p)}})})]})}},69658:function(){},16484:function(e,t,n){"use strict";t.__esModule=!0,t.Detonator=void 0;var o=n(96323),r=n(26949),a=n(41834);t.Detonator=function(e){var t=e.detonator,n=e.detonatorAttachments,a=e.onToggleAnchor,l=e.onToggleSafety,u=e.onWireInteract,d=e.onPrimeDetonator,s=e.onTriggerActivate,p=e.onSetTimer;return(0,o.createComponentVNode)(2,r.Section,{title:"Detonator",children:[(0,o.createComponentVNode)(2,i,{detonator:t,onWireInteract:u,onSetTimer:p}),(0,o.createComponentVNode)(2,r.Divider),(0,o.createComponentVNode)(2,c,{detonator:t,detonatorAttachments:n,onToggleAnchor:a,onToggleSafety:l,onPrimeDetonator:d,onTriggerActivate:s})]})};var i=function(e){var t=e.detonator,n=(t=void 0===t?{}:t).wireNames,i=t.wireStatus,c=t.time,l=t.isPrimed,u=e.onWireInteract,d=e.onSetTimer;return(0,o.createComponentVNode)(2,r.Flex,{children:[(0,o.createComponentVNode)(2,r.Flex.Item,{children:(0,o.createComponentVNode)(2,r.LabeledList,{children:n.map((function(e,t){return(0,o.createComponentVNode)(2,r.LabeledList.Item,{label:e,children:(0,o.createComponentVNode)(2,r.Box,{height:1.7,children:i&&i[t]?(0,o.createFragment)([(0,o.createComponentVNode)(2,r.Button,{icon:"cut",content:"Cut",onClick:function(){return u("cut",t)}}),(0,o.createComponentVNode)(2,r.Button,{icon:"bolt",content:"Pulse",onClick:function(){return u("pulse",t)}})],4):(0,o.createComponentVNode)(2,r.Box,{color:"average",minHeight:1.4,children:"Cut"})})},e+t)}))})}),(0,o.createComponentVNode)(2,r.Flex.Item,{mr:2,mt:2,children:(0,o.createComponentVNode)(2,r.Flex,{direction:"column",align:"center",children:[(0,o.createComponentVNode)(2,r.Flex.Item,{children:(0,o.createComponentVNode)(2,a.DetonatorTimer,{time:c,isPrimed:l})}),(0,o.createComponentVNode)(2,r.Flex.Item,{children:[(0,o.createComponentVNode)(2,r.Button,{mt:1,disabled:l,icon:"fast-backward",onClick:function(){return d(c-300)}}),(0,o.createComponentVNode)(2,r.Button,{mt:1,disabled:l,icon:"backward",onClick:function(){return d(c-10)}}),(0,o.createComponentVNode)(2,r.Button,{mt:1,disabled:l,icon:"forward",onClick:function(){return d(c+10)}}),(0,o.createComponentVNode)(2,r.Button,{mt:1,disabled:l,icon:"fast-forward",onClick:function(){return d(c+300)}})]})]})})]})},c=function(e){var t=e.detonator,n=(t=void 0===t?{}:t).isAnchored,a=t.trigger,i=t.safetyIsOn,c=t.isPrimed,l=e.detonatorAttachments,u=e.onToggleAnchor,d=e.onToggleSafety,s=e.onPrimeDetonator,p=e.onTriggerActivate;return(0,o.createComponentVNode)(2,r.LabeledList,{children:[(0,o.createComponentVNode)(2,r.LabeledList.Item,{className:"gas-canister-detonator-utility__list-item",label:"Anchor Status",children:n?"Anchored. There are no controls for undoing this.":(0,o.createComponentVNode)(2,r.Button,{icon:"anchor",content:"Anchor",onClick:u})}),(0,o.createComponentVNode)(2,r.LabeledList.Item,{className:"gas-canister-detonator-utility__list-item",label:"Trigger",children:a?(0,o.createComponentVNode)(2,r.Button,{onClick:p,children:a}):"There is no trigger attached."}),(0,o.createComponentVNode)(2,r.LabeledList.Item,{className:"gas-canister-detonator-utility__list-item",label:"Safety",children:i?(0,o.createComponentVNode)(2,r.Button,{color:"average",icon:"power-off",content:"Turn Off",onClick:d}):(0,o.createComponentVNode)(2,r.Box,{color:"average",children:"Off"})}),(0,o.createComponentVNode)(2,r.LabeledList.Item,{className:"gas-canister-detonator-utility__list-item",label:"Arming",children:i?"The safety is on, therefore, you cannot prime the bomb.":c?(0,o.createComponentVNode)(2,r.Box,{bold:!0,color:"red",children:"PRIMED"}):(0,o.createComponentVNode)(2,r.Button,{color:"danger",icon:"bomb",content:"Prime",onClick:s})}),(0,o.createComponentVNode)(2,r.LabeledList.Item,{label:"Attachments",className:"gas-canister-detonator-utility__list-item",children:l&&l.length>0?l.map((function(e,t){return(0,o.createComponentVNode)(2,r.Box,{className:"gas-canister-detonator-utility__attachment-item",children:l[t]},e+t)})):"There are no additional attachments to the detonator."})]})}},41834:function(e,t,n){"use strict";t.__esModule=!0,t.DetonatorTimer=void 0;var o=n(96323),r=n(26949),a=n(1033);t.DetonatorTimer=function(e){var t=e.time,n=e.isPrimed,i=e.warningThreshold,c=void 0===i?300:i,l=e.dangerThreshold,u=void 0===l?100:l,d=e.explosionMessage,s=void 0===d?"BO:OM":d,p="green";return t<=u?p="red":t<=c&&(p="orange"),(0,o.createComponentVNode)(2,r.Box,{p:1,textAlign:"center",backgroundColor:"black",color:p,maxWidth:"90px",width:"90px",fontSize:"20px",children:(0,o.createComponentVNode)(2,r.TimeDisplay,{value:t,timing:n,format:function(e){return(0,a.formatTime)(e,s)}})})}},52709:function(e,t,n){"use strict";t.__esModule=!0,t.GasCanister=void 0;var o=n(96323),r=n(31246),a=n(26949),i=n(2381),c=n(41161),l=n(75015),u=n(69412),d=n(16484);function s(e,t){return s=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e},s(e,t)}t.GasCanister=function(e,t){var n=(0,r.useBackend)(t),u=n.act,s=n.data,m=s.connected,f=s.holding,h=s.hasValve,g=s.valveIsOpen,C=s.pressure,N=s.maxPressure,v=s.releasePressure,b=s.minRelease,V=s.maxRelease,y=s.detonator,x=s.detonatorAttachments,I=s.hasPaper,k=!!y;return(0,o.createComponentVNode)(2,i.Window,{width:k?I?880:470:305,height:k?685:340,children:(0,o.createComponentVNode)(2,i.Window.Content,{children:(0,o.createComponentVNode)(2,a.Flex,{children:[(0,o.createComponentVNode)(2,a.Flex.Item,{width:"480px",children:[(0,o.createComponentVNode)(2,c.PortableBasicInfo,{connected:m,pressure:C,maxPressure:N,children:[(0,o.createComponentVNode)(2,a.Divider),h?(0,o.createComponentVNode)(2,l.ReleaseValve,{valveIsOpen:g,releasePressure:v,minRelease:b,maxRelease:V,onToggleValve:function(){u("toggle-valve")},onSetPressure:function(e){u("set-pressure",{releasePressure:e})}}):(0,o.createComponentVNode)(2,a.Box,{color:"average",children:"The release valve is missing."})]}),y?(0,o.createComponentVNode)(2,d.Detonator,{detonator:y,detonatorAttachments:x,onToggleAnchor:function(){u("anchor")},onToggleSafety:function(){u("safety")},onWireInteract:function(e,t){u("wire-interact",{index:t,toolAction:e})},onPrimeDetonator:function(){u("prime")},onTriggerActivate:function(){u("trigger")},onSetTimer:function(e){u("timer",{newTime:e})}}):(0,o.createComponentVNode)(2,c.PortableHoldingTank,{holding:f,onEjectTank:function(){u("eject-tank")}})]}),!!I&&(0,o.createComponentVNode)(2,a.Flex.Item,{width:"410px",children:(0,o.createComponentVNode)(2,p)})]})})})};var p=function(e){var t,n;function i(t,n){var o;return(o=e.call(this,t)||this).el=document.createElement("div"),o}return n=e,(t=i).prototype=Object.create(n.prototype),t.prototype.constructor=t,s(t,n),i.prototype.render=function(){var e=(0,r.useBackend)(this.context).data.paperData,t=e.text,n=e.stamps;return(0,o.createComponentVNode)(2,a.Section,{scrollable:!0,width:"400px",height:"518px",backgroundColor:"white",style:{"overflow-wrap":"break-word"},children:(0,o.createComponentVNode)(2,u.PaperSheetView,{value:t||"",stamps:n,readOnly:!0})})},i}(o.Component)},5394:function(e,t,n){"use strict";t.__esModule=!0,t.GasTankInfo=t.GasTank=void 0;var o=n(96323),r=n(31246),a=n(26949),i=n(2381),c=n(1033),l=n(75015);t.GasTank=function(e,t){var n=(0,r.useBackend)(t),c=n.act,d=n.data,s=d.pressure,p=d.maxPressure,m=d.valveIsOpen,f=d.releasePressure,h=d.maxRelease;return(0,o.createComponentVNode)(2,i.Window,{width:400,height:220,children:(0,o.createComponentVNode)(2,i.Window.Content,{children:[(0,o.createComponentVNode)(2,a.Section,{title:"Status",children:(0,o.createComponentVNode)(2,u,{pressure:s,maxPressure:p})}),(0,o.createComponentVNode)(2,a.Section,{children:(0,o.createComponentVNode)(2,l.ReleaseValve,{valveIsOpen:m,releasePressure:f,maxRelease:h,onToggleValve:function(){c("toggle-valve")},onSetPressure:function(e){c("set-pressure",{releasePressure:e})}})})]})})};var u=function(e){var t=e.pressure,n=e.maxPressure,r=e.name;return(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Pressure",children:(0,o.createComponentVNode)(2,a.RoundGauge,{size:1.75,value:t,minValue:0,maxValue:n,alertAfter:.7*n,ranges:{good:[0,.7*n],average:[.7*n,.85*n],bad:[.85*n,n]},format:c.formatPressure})}),r?(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Label",children:r}):null]})};t.GasTankInfo=u},92526:function(e,t,n){"use strict";t.__esModule=!0,t.GeneTek=void 0;var o=n(96323),r=n(31246),a=n(26949),i=n(2381),c=n(33012),l=function(e){return e>0?(e/10).toFixed(0)+"s":"Ready"};t.GeneTek=function(e,t){var n=(0,r.useBackend)(t),u=n.data,d=n.act,s=(0,r.useSharedState)(t,"menu","research"),p=s[0],m=s[1],f=(0,r.useSharedState)(t,"buymats",null),h=f[0],g=f[1],C=(0,r.useSharedState)(t,"iscombining",!1)[0],N=u.materialCur,v=u.materialMax,b=u.currentResearch,V=u.equipmentCooldown,y=u.subject,x=u.costPerMaterial,I=u.budget,k=u.record,w=u.scannerAlert,S=u.scannerError,_=u.allowed,M=y||{},D=M.name,B=M.stat,A=M.health,T=M.stability,L=Math.min(v-N,Math.floor(I/x));return(0,o.createComponentVNode)(2,i.Window,{theme:_?"genetek":"genetek-disabled",width:730,height:415,children:(0,o.createComponentVNode)(2,a.Flex,{height:"100%",children:[(0,o.createComponentVNode)(2,a.Flex.Item,{width:"245px",height:"100%",style:{padding:"5px 5px 5px 5px"},children:(0,o.createComponentVNode)(2,a.Flex,{direction:"column",height:"100%",children:[!_&&(0,o.createFragment)([(0,o.createVNode)(1,"div",null,"Insufficient access to interact.",16,{style:{color:"#ff3333","text-align":"center"}}),(0,o.createComponentVNode)(2,a.Divider)],4),(0,o.createComponentVNode)(2,a.Flex,{children:[(0,o.createComponentVNode)(2,a.ProgressBar,{value:N,maxValue:v,mb:1,children:[(0,o.createComponentVNode)(2,a.Box,{position:"absolute",bold:!0,children:"Materials"}),N," / ",v]}),(0,o.createComponentVNode)(2,a.Flex.Item,{grow:0,shrink:0,ml:1,children:(0,o.createComponentVNode)(2,a.Button,{circular:!0,compact:!0,icon:"dollar-sign",disabled:L<=0,onClick:function(){return g(1)}})})]}),y&&(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Occupant",children:D}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Health",children:(0,o.createComponentVNode)(2,a.ProgressBar,{ranges:{bad:[-Infinity,.15],average:[.15,.75],good:[.75,Infinity]},value:A,children:B<2?A<=0?(0,o.createComponentVNode)(2,a.Box,{color:"bad",children:[(0,o.createComponentVNode)(2,a.Icon,{name:"exclamation-triangle"})," Critical"]}):(100*A).toFixed(0)+"%":(0,o.createComponentVNode)(2,a.Box,{children:[(0,o.createComponentVNode)(2,a.Icon,{name:"skull"})," Deceased"]})})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Stability",children:(0,o.createComponentVNode)(2,a.ProgressBar,{ranges:{bad:[-Infinity,15],average:[15,75],good:[75,Infinity]},value:T,maxValue:100})})]}),(0,o.createComponentVNode)(2,a.Divider),(0,o.createComponentVNode)(2,a.Flex.Item,{grow:1,style:{overflow:"hidden"},children:b.map((function(e){return(0,o.createComponentVNode)(2,a.ProgressBar,{value:e.total-e.current,maxValue:e.total,mb:1,children:[(0,o.createComponentVNode)(2,a.Box,{position:"absolute",children:e.name}),(0,o.createComponentVNode)(2,a.TimeDisplay,{timing:!0,value:e.current,format:l})]},e.ref)}))}),!!w&&(0,o.createComponentVNode)(2,a.NoticeBox,{info:!S,danger:!!S,children:w}),(0,o.createComponentVNode)(2,a.Divider),(0,o.createComponentVNode)(2,a.LabeledList,{children:V.map((function(e){return(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:e.label,children:e.cooldown<0?"Ready":(0,o.createComponentVNode)(2,a.TimeDisplay,{timing:!0,value:e.cooldown,format:l})},e.label)}))})]})}),(0,o.createComponentVNode)(2,i.Window.Content,{scrollable:!0,children:(0,o.createComponentVNode)(2,a.Flex.Item,{children:(0,o.createComponentVNode)(2,a.Box,{ml:"250px",children:[(0,o.createComponentVNode)(2,a.Tabs,{children:[(0,o.createComponentVNode)(2,a.Tabs.Tab,{icon:"flask",selected:"research"===p,onClick:function(){return m("research")},children:"Research"}),(0,o.createComponentVNode)(2,a.Tabs.Tab,{icon:"radiation",selected:"mutations"===p,onClick:function(){return m("mutations")},children:"Mutations"}),(0,o.createComponentVNode)(2,a.Tabs.Tab,{icon:"server",selected:"storage"===p||!k&&"record"===p,onClick:function(){return m("storage")},children:"Storage"}),!!k&&(0,o.createComponentVNode)(2,a.Tabs.Tab,{icon:"save",selected:"record"===p,onClick:function(){return m("record")},rightSlot:"record"===p&&(0,o.createComponentVNode)(2,a.Button,{circular:!0,compact:!0,color:"transparent",icon:"times",onClick:function(){return d("clearrecord")}}),children:"Record"}),y&&(0,o.createComponentVNode)(2,a.Tabs.Tab,{icon:"dna",selected:"scanner"===p,onClick:function(){return m("scanner")},children:"Scanner"})]}),null!==h&&(0,o.createComponentVNode)(2,c.BuyMaterialsModal,{maxAmount:L}),!!C&&(0,o.createComponentVNode)(2,c.CombineGenesModal),"research"===p&&(0,o.createComponentVNode)(2,c.ResearchTab,{maxBuyMats:L,setBuyMats:g}),"mutations"===p&&(0,o.createComponentVNode)(2,c.MutationsTab),"storage"===p&&(0,o.createComponentVNode)(2,c.StorageTab),"record"===p&&(k?(0,o.createComponentVNode)(2,c.RecordTab):(0,o.createComponentVNode)(2,c.StorageTab)),"scanner"===p&&(0,o.createComponentVNode)(2,c.ScannerTab)]})})})]})})}},92195:function(e,t,n){"use strict";t.__esModule=!0,t.AppearanceEditor=void 0;var o=n(96323),r=n(31246),a=n(26949);t.AppearanceEditor=function(e,t){var n=(0,r.useBackend)(t).act,c=e.preview,l=e.hairStyles,u=e.skin,d=e.eyes,s=e.color1,p=e.color2,m=e.color3,f=e.style1,h=e.style2,g=e.style3,C=e.fixColors,N=e.hasEyes,v=e.hasSkin,b=e.hasHair,V=e.channels;return(0,o.createComponentVNode)(2,a.Section,{title:"Appearance Editor",buttons:(0,o.createFragment)([(0,o.createComponentVNode)(2,a.Button,{onClick:function(){return n("editappearance",{apply:!0})},icon:"user",color:"good",children:"Apply Changes"}),(0,o.createComponentVNode)(2,a.Button,{onClick:function(){return n("editappearance",{cancel:!0})},icon:"times",color:"bad"})],4),children:(0,o.createComponentVNode)(2,a.Flex,{children:[(0,o.createComponentVNode)(2,a.Flex.Item,{shrink:"1",children:(0,o.createComponentVNode)(2,a.LabeledList,{children:[!!v&&(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Skin Tone",children:(0,o.createComponentVNode)(2,i,{color:u,onChange:function(e){return n("editappearance",{skin:e})}})}),!!N&&(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Eye Color",children:(0,o.createComponentVNode)(2,i,{color:d,onChange:function(e){return n("editappearance",{eyes:e})}})}),!(!v&&!N||!V[0])&&(0,o.createComponentVNode)(2,a.LabeledList.Divider),!!V[0]&&!!b&&(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:V[0],children:(0,o.createComponentVNode)(2,a.Dropdown,{width:20,selected:f,onSelected:function(e){return n("editappearance",{style1:e})},options:l})}),!!V[0]&&(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:V[0].replace(/ Detail$/,"")+" Color",children:(0,o.createComponentVNode)(2,i,{color:s,onChange:function(e){return n("editappearance",{color1:e})},fix:C})}),!!V[1]&&(0,o.createComponentVNode)(2,a.LabeledList.Divider),!!V[1]&&!!b&&(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:V[1],children:(0,o.createComponentVNode)(2,a.Dropdown,{width:20,selected:h,onSelected:function(e){return n("editappearance",{style2:e})},options:l})}),!!V[1]&&(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:V[1].replace(/ Detail$/,"")+" Color",children:(0,o.createComponentVNode)(2,i,{color:p,onChange:function(e){return n("editappearance",{color2:e})},fix:C})}),!!V[2]&&(0,o.createComponentVNode)(2,a.LabeledList.Divider),!!V[2]&&!!b&&(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:V[2],children:(0,o.createComponentVNode)(2,a.Dropdown,{width:20,selected:g,onSelected:function(e){return n("editappearance",{style3:e})},options:l})}),!!V[2]&&(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:V[2].replace(/ Detail$/,"")+" Color",children:(0,o.createComponentVNode)(2,i,{color:m,onChange:function(e){return n("editappearance",{color3:e})},fix:C})})]})}),(0,o.createComponentVNode)(2,a.Flex.Item,{basis:"80px",shrink:"0",children:(0,o.createComponentVNode)(2,a.ByondUi,{params:{id:c,type:"map"},style:{width:"80px",height:"160px"}})})]})})};var i=function(e,t){var n=e.color,r=e.onChange,i=e.fix,c=parseInt(n.substr(1,2),16),l=parseInt(n.substr(3,2),16),u=parseInt(n.substr(5,2),16),d=function(e,t,n){r&&r("#"+e.toString(16).padStart(2,"0")+t.toString(16).padStart(2,"0")+n.toString(16).padStart(2,"0"))};return(0,o.createComponentVNode)(2,a.Box,{children:[(0,o.createComponentVNode)(2,a.ColorBox,{color:n}),(0,o.createComponentVNode)(2,a.Knob,{inline:!0,ml:1,minValue:i?50:0,maxValue:i?190:255,value:c,color:"red",onChange:function(e,t){return d(Math.round(t),l,u)}}),(0,o.createComponentVNode)(2,a.Knob,{inline:!0,ml:1,minValue:i?50:0,maxValue:i?190:255,value:l,color:"green",onChange:function(e,t){return d(c,Math.round(t),u)}}),(0,o.createComponentVNode)(2,a.Knob,{inline:!0,ml:1,minValue:i?50:0,maxValue:i?190:255,value:u,color:"blue",onChange:function(e,t){return d(c,l,Math.round(t))}})]})}},11265:function(e,t,n){"use strict";t.__esModule=!0,t.GeneList=t.Description=t.BioEffect=t.onCooldown=t.haveDevice=t.ResearchLevel=void 0;var o=n(96323),r=n(31246),a=n(26949),i=n(89613),c=n(59450),l=n(43024),u=["genes","noSelection","noGenes"];function d(e,t){var n="undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(n)return(n=n.call(e)).next.bind(n);if(Array.isArray(e)||(n=function(e,t){if(!e)return;if("string"==typeof e)return s(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);"Object"===n&&e.constructor&&(n=e.constructor.name);if("Map"===n||"Set"===n)return Array.from(e);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return s(e,t)}(e))||t&&e&&"number"==typeof e.length){n&&(e=n);var o=0;return function(){return o>=e.length?{done:!0}:{done:!1,value:e[o++]}}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}function s(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,o=new Array(t);n<t;n++)o[n]=e[n];return o}var p={None:0,InProgress:1,Done:2,Activated:3};t.ResearchLevel=p;var m=function(e,t){for(var n,o=d(e);!(n=o()).done;){var r=n.value,a=r.label;r.cooldown;if(a===t)return!0}return!1};t.haveDevice=m;var f=function(e,t){for(var n,o=d(e);!(n=o()).done;){var r=n.value,a=r.label,i=r.cooldown;if(a===t)return i>0}return!0};t.onCooldown=f;var h=function(e,t){var n=(0,r.useBackend)(t),u=n.data,d=n.act,s=(0,r.useSharedState)(t,"booth",null),p=s[0],h=s[1],C=u.materialCur,N=u.researchCost,v=u.equipmentCooldown,b=u.saveSlots,V=u.savedMutations,y=u.subject,x=u.boothCost,I=u.injectorCost,k=u.precisionEmitter,w=u.toSplice,S=e.gene,_=e.showSequence,M=e.isSample,D=e.isPotential,B=e.isActive,A=e.isStorage,T=S.ref,L=S.name,E=S.desc,j=S.icon,P=S.research,O=S.canResearch,F=S.canInject,R=S.canScramble,z=S.canReclaim,W=S.spliceError,U=S.dna,H=U.every((function(e){return!e.style})),G=U.every((function(e){return!e.style||"locked"===e.marker})),Y=B||A;return(0,o.createComponentVNode)(2,a.Section,{title:L,buttons:(0,o.createComponentVNode)(2,l.GeneIcon,{name:j,size:1.5}),children:[p&&p.ref===T&&(0,o.createComponentVNode)(2,a.Modal,{full:!0,children:(0,o.createComponentVNode)(2,a.Section,{width:35,title:L,style:{margin:"-10px","margin-right":"2px"},buttons:(0,o.createComponentVNode)(2,l.GeneIcon,{name:j,size:4,style:{"margin-top":"-2px","margin-right":"-4px"}}),children:[(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Price",children:(0,o.createComponentVNode)(2,a.NumberInput,{minValue:0,maxValue:999999,width:5,value:p.price,onChange:function(e,t){return h({ref:p.ref,price:t,desc:p.desc})}})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Description",children:(0,o.createComponentVNode)(2,a.Input,{width:25,value:p.desc,onChange:function(e,t){return h({ref:p.ref,price:p.price,desc:t})}})})]}),(0,o.createComponentVNode)(2,a.Box,{inline:!0,width:"50%",textAlign:"center",mt:2,children:(0,o.createComponentVNode)(2,a.Button,{icon:"person-booth",color:"good",disabled:x>C,onClick:function(){return d("booth",p)},children:"Send to Booth"})}),(0,o.createComponentVNode)(2,a.Box,{inline:!0,width:"50%",textAlign:"center",children:(0,o.createComponentVNode)(2,a.Button,{icon:"times",color:"bad",onClick:function(){return h(null)},children:"Cancel"})})]})}),(0,o.createComponentVNode)(2,i.UnlockModal),(0,o.createComponentVNode)(2,a.Box,{textAlign:"right",children:[(0,o.createComponentVNode)(2,a.Box,{mr:1,style:{float:"left"},children:[(0,o.createComponentVNode)(2,a.Icon,{color:P>=3?"good":P>=2?"teal":P>=1?"average":"bad",name:P>=2?"flask":P>=1?"hourglass":"times"}),P>=2?" Researched":P>=1?" In Progress":" Not Researched"]}),!B&&!!O&&0===P&&(0,o.createComponentVNode)(2,a.Button,{icon:"flask",disabled:N>C,onClick:function(){return d("researchmut",{ref:T,sample:!!M})},color:"teal",children:"Research"}),D&&(0,o.createComponentVNode)(2,a.Button,{icon:"check",disabled:!H,onClick:function(){return d("activate",{ref:T})},color:"blue",children:"Activate"}),P>=3&&!H&&(0,o.createComponentVNode)(2,a.Button,{icon:"magic",disabled:G,onClick:function(){return d("autocomplete",{ref:T})},children:"Autocomplete DNA"}),m(v,"Analyzer")&&!H&&D&&(0,o.createComponentVNode)(2,a.Button,{disabled:f(v,"Analyzer"),icon:"microscope",color:"average",onClick:function(){return d("analyze",{ref:T})},children:"Check Stability"}),m(v,"Reclaimer")&&Y&&!!z&&(0,o.createComponentVNode)(2,a.Button,{disabled:f(v,"Reclaimer"),icon:"times",color:"bad",onClick:function(){return d("reclaim",{ref:T})},children:"Reclaim"}),x>=0&&P>=2&&Y&&(0,o.createComponentVNode)(2,a.Button,{disabled:C<x,icon:"person-booth",color:"good",onClick:function(){return h({ref:T,price:200,desc:""})},children:"Sell at Booth"}),!!k&&P>=2&&D&&!!R&&(0,o.createComponentVNode)(2,a.Button,{icon:"radiation",disabled:f(v,"Emitter")||y.stat>0,color:"bad",onClick:function(){return d("precisionemitter",{ref:T})},children:"Scramble Gene"}),b>0&&P>=2&&B&&(0,o.createComponentVNode)(2,a.Button,{disabled:b<=V.length,icon:"save",color:"average",onClick:function(){return d("save",{ref:T})},children:"Store"}),P>=2&&!!F&&m(v,"Injectors")&&(0,o.createComponentVNode)(2,a.Button,{disabled:f(v,"Injectors"),icon:"syringe",onClick:function(){return d("activator",{ref:T})},children:"Activator"}),P>=2&&!!F&&I>=0&&Y&&(0,o.createComponentVNode)(2,a.Button,{disabled:f(v,"Injectors")||C<I,icon:"syringe",onClick:function(){return d("injector",{ref:T})},color:"bad",children:"Injector"}),Y&&!!w&&(0,o.createComponentVNode)(2,a.Button,{disabled:!!W,icon:"map-marker-alt",onClick:function(){return d("splicegene",{ref:T})},tooltip:W,tooltipPosition:"left",children:"Splice"}),A&&y&&(0,o.createComponentVNode)(2,a.Button,{icon:"check",onClick:function(){return d("addstored",{ref:T})},color:"blue",children:"Add to Occupant"}),A&&(0,o.createComponentVNode)(2,a.Button,{icon:"trash",onClick:function(){return d("deletegene",{ref:T})},color:"bad"}),(0,o.createComponentVNode)(2,a.Box,{inline:!0})]}),(0,o.createComponentVNode)(2,g,{text:E}),_&&(0,o.normalizeProps)((0,o.createComponentVNode)(2,c.DNASequence,Object.assign({},e)))]})};t.BioEffect=h;var g=function(e,t){return e.text.split(/<br ?\/?>/g).map((function(e,t){return(0,o.createVNode)(1,"p",null,e,0,null,t)}))};t.Description=g;t.GeneList=function(e,t){var n,i=(0,r.useBackend)(t),c=i.data,l=i.act,d=c.activeGene,s=e.genes,m=e.noSelection,f=e.noGenes,g=function(e,t){if(null==e)return{};var n,o,r={},a=Object.keys(e);for(o=0;o<a.length;o++)n=a[o],t.indexOf(n)>=0||(r[n]=e[n]);return r}(e,u),C=s.find((function(e){return e.ref===d})),N=((n={})[p.None]={icon:"question",color:"grey"},n[p.InProgress]={icon:"hourglass",color:"average"},n[p.Done]={icon:"flask",color:"teal"},n[p.Activated]={icon:"flask",color:"good"},n);return(0,o.createFragment)([(0,o.createComponentVNode)(2,a.Flex,{wrap:!0,mb:1,children:s.map((function(e){return(0,o.createComponentVNode)(2,a.Flex.Item,{grow:1,textAlign:"center",children:(0,o.createComponentVNode)(2,a.Button,{icon:N[e.research].icon,color:e.ref===d?"black":N[e.research].color,onClick:function(){return l("setgene",{ref:e.ref})},tooltip:e.research===p.InProgress?"Researching...":e.name,tooltipPosition:"left",width:"80%"})},e.ref)}))}),!s.length&&(f||"No genes found."),!!s.length&&!C&&(m||"Select a gene to view it."),C&&(0,o.normalizeProps)((0,o.createComponentVNode)(2,h,Object.assign({gene:C,showSequence:!0},g),C.ref))],0)}},59450:function(e,t,n){"use strict";t.__esModule=!0,t.Nucleotide=t.DNASequence=void 0;var o=n(96323),r=n(31246),a=n(26949),i=["letter","type","mark","useLetterColor"];var c={"?":"grey",A:"red",T:"blue",C:"yellow",G:"green"},l={"":"good",X:"grey",1:"good",2:"olive",3:"average",4:"orange",5:"bad"};t.DNASequence=function(e,t){for(var n=(0,r.useBackend)(t).act,i=e.gene,c=e.isPotential,d=i.dna,s=!0,p=[],m=0;m<d.length;m++)m%4==0&&p.push([]),p[p.length-1].push(d[m]),d[m].style&&(s=!1);var f=function(e){c&&n("advancepair",{ref:i.ref,pair:e})};return p.map((function(e,t){return(0,o.createVNode)(1,"table",null,[(0,o.createVNode)(1,"tr",null,e.map((function(e,n){return(0,o.createVNode)(1,"td",null,(0,o.createComponentVNode)(2,u,{letter:e.pair.charAt(0),type:e.style,mark:e.marker,useLetterColor:s,onClick:function(){return f(4*t+n+1)}}),2,null,n)})),0),(0,o.createVNode)(1,"tr",null,e.map((function(e,n){return(0,o.createVNode)(1,"td",null,s?"|":"locked"===e.marker?(0,o.createComponentVNode)(2,a.Icon,{name:"lock",color:"average",onClick:function(){return f(4*t+n+1)}}):(0,o.createComponentVNode)(2,a.Icon,{name:""===e.style?"check":"5"===e.style?"times":"question",color:l[e.style]}),0,{style:{"text-align":"center"}},n)})),0),(0,o.createVNode)(1,"tr",null,e.map((function(e,n){return(0,o.createVNode)(1,"td",null,(0,o.createComponentVNode)(2,u,{letter:e.pair.charAt(1),type:e.style,mark:e.marker,useLetterColor:s,onClick:function(){return f(4*t+n+1)}}),2,null,n)})),0)],4,{style:{display:"inline-table","margin-top":"1em","margin-left":t%4==0?"0":"0.25em","margin-right":t%4==3?"0":"0.25em"}},t)}))};var u=function(e){var t=e.letter,n=e.type,r=(e.mark,e.useLetterColor),u=function(e,t){if(null==e)return{};var n,o,r={},a=Object.keys(e);for(o=0;o<a.length;o++)n=a[o],t.indexOf(n)>=0||(r[n]=e[n]);return r}(e,i),d=r?c[t]:l[n];return(0,o.normalizeProps)((0,o.createComponentVNode)(2,a.Button,Object.assign({width:"1.75em",textAlign:"center",color:d},u,{children:t})))};t.Nucleotide=u},43024:function(e,t,n){"use strict";t.__esModule=!0,t.GeneIcon=void 0;var o=n(96323),r=n(1060),a=n(54425),i=["name","size","style"];var c=function(e){var t=e.name,n=e.size,c=e.style,l=void 0===c?{}:c,u=function(e,t){if(null==e)return{};var n,o,r={},a=Object.keys(e);for(o=0;o<a.length;o++)n=a[o],t.indexOf(n)>=0||(r[n]=e[n]);return r}(e,i);return n&&(l["font-size"]=100*n+"%"),(0,o.normalizeProps)((0,o.createComponentVNode)(2,a.Box,Object.assign({as:"i",className:(0,r.classes)(["GeneIcon","GeneIcon--"+t]),style:l},u)))};t.GeneIcon=c,c.defaultHooks=r.pureComponentHooks},33012:function(e,t,n){"use strict";t.__esModule=!0,t.StorageTab=t.RecordTab=t.ScannerTab=t.ResearchTab=t.MutationsTab=t.UnlockModal=t.CombineGenesModal=t.BuyMaterialsModal=void 0;var o=n(78368);t.BuyMaterialsModal=o.BuyMaterialsModal;var r=n(39961);t.CombineGenesModal=r.CombineGenesModal;var a=n(89613);t.UnlockModal=a.UnlockModal;var i=n(22675);t.MutationsTab=i.MutationsTab;var c=n(93847);t.ResearchTab=c.ResearchTab;var l=n(49445);t.ScannerTab=l.ScannerTab;var u=n(64477);t.RecordTab=u.RecordTab,t.StorageTab=u.StorageTab},78368:function(e,t,n){"use strict";t.__esModule=!0,t.BuyMaterialsModal=void 0;var o=n(96323),r=n(31246),a=n(26949);t.BuyMaterialsModal=function(e,t){var n=(0,r.useBackend)(t),i=n.data,c=n.act,l=(0,r.useSharedState)(t,"buymats",null),u=l[0],d=l[1],s=e.maxAmount,p=i.budget,m=i.costPerMaterial,f=Math.min(u,s);return(0,o.createComponentVNode)(2,a.Modal,{full:!0,children:(0,o.createComponentVNode)(2,a.Box,{position:"relative",width:18,children:[(0,o.createComponentVNode)(2,a.Box,{position:"absolute",right:1,top:0,children:(0,o.createComponentVNode)(2,a.Knob,{inline:!0,value:f,onChange:function(e,t){return d(t)},minValue:1,maxValue:s})}),(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Purchase",children:[f,1===f?" Material":" Materials"]}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Budget",children:p+" Credits"}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Cost",children:f*m+" Credits"}),(0,o.createComponentVNode)(2,a.LabeledList.Divider),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Remainder",children:[(0,o.createComponentVNode)(2,a.Box,{inline:!0,color:p-f*m<0&&"bad",children:p-f*m})," Credits"]})]}),(0,o.createComponentVNode)(2,a.Divider,{hidden:!0}),(0,o.createComponentVNode)(2,a.Box,{inline:!0,width:"50%",textAlign:"center",children:(0,o.createComponentVNode)(2,a.Button,{color:"good",icon:"dollar-sign",disabled:f<=0,onClick:function(){c("purchasematerial",{amount:f}),d(null)},children:"Submit"})}),(0,o.createComponentVNode)(2,a.Box,{inline:!0,width:"50%",textAlign:"center",children:(0,o.createComponentVNode)(2,a.Button,{color:"bad",icon:"times",onClick:function(){return d(null)},children:"Cancel"})})]})})}},39961:function(e,t,n){"use strict";t.__esModule=!0,t.CombineGenesModal=void 0;var o=n(96323),r=n(31246),a=n(26949);t.CombineGenesModal=function(e,t){var n=(0,r.useBackend)(t),i=n.data,c=n.act,l=(0,r.useSharedState)(t,"iscombining",!1),u=(l[0],l[1]),d=i.savedMutations,s=i.combining,p=void 0===s?[]:s;return(0,o.createComponentVNode)(2,a.Modal,{full:!0,width:20,children:[(0,o.createComponentVNode)(2,a.Section,{title:"Select",children:(0,o.createComponentVNode)(2,a.Stack,{vertical:!0,children:d.map((function(e){return(0,o.createComponentVNode)(2,a.Stack.Item,{children:(0,o.createComponentVNode)(2,a.Button.Checkbox,{checked:p.indexOf(e.ref)>=0,onClick:function(){return c("togglecombine",{ref:e.ref})},children:e.name})},e.ref)}))})}),(0,o.createComponentVNode)(2,a.Box,{textAlign:"center",children:[(0,o.createComponentVNode)(2,a.Button,{color:"bad",icon:"times",onClick:function(){return u(!1)},children:"Cancel"}),(0,o.createComponentVNode)(2,a.Button,{icon:"sitemap",disabled:!p.length,onClick:function(){c("combinegenes"),u(!1)},children:"Combine"})]})]})}},89613:function(e,t,n){"use strict";t.__esModule=!0,t.UnlockModal=void 0;var o=n(96323),r=n(31246),a=n(26949);t.UnlockModal=function(e,t){var n=(0,r.useBackend)(t),i=n.data,c=n.act,l=(0,r.useSharedState)(t,"unlockcode",""),u=l[0],d=l[1],s=i.autoDecryptors,p=i.unlock;if(p)return(0,o.createComponentVNode)(2,a.Modal,{full:!0,children:(0,o.createComponentVNode)(2,a.Box,{width:22,mr:2,children:[(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Detected Length",children:[p.length," characters"]}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Possible Characters",children:p.chars.join(" ")}),(0,o.createComponentVNode)(2,a.LabeledList.Divider),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Enter Unlock Code",children:(0,o.createComponentVNode)(2,a.Input,{value:u,onChange:function(e,t){return d(t.toUpperCase())}})}),(0,o.createComponentVNode)(2,a.LabeledList.Divider),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Correct Characters",children:[p.correctChar," of ",p.length]}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Correct Positions",children:[p.correctPos," of ",p.length]}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Attempts Remaining",children:[p.tries," before mutation"]})]}),(0,o.createComponentVNode)(2,a.Box,{textAlign:"right",mt:2,children:(0,o.createComponentVNode)(2,a.Button,{icon:"magic",color:"average",tooltip:"Auto-Decryptors Available: "+s,disabled:s<1,onClick:function(){d(""),c("unlock",{code:"UNLOCK"})},children:"Use Auto-Decryptor"})}),(0,o.createComponentVNode)(2,a.Box,{textAlign:"right",mt:1,children:[(0,o.createComponentVNode)(2,a.Button,{mr:1,icon:"check",color:"good",tooltip:u.length!==p.length?"Code is the wrong length.":u.split("").some((function(e){return-1===p.chars.indexOf(e)}))?"Invalid character in code.":"",disabled:u.length!==p.length||u.split("").some((function(e){return-1===p.chars.indexOf(e)})),onClick:function(){d(""),c("unlock",{code:u})},children:"Attempt Decryption"}),(0,o.createComponentVNode)(2,a.Button,{icon:"times",color:"bad",onClick:function(){d(""),c("unlock",{code:null})},children:"Cancel"})]})]})})}},22675:function(e,t,n){"use strict";t.__esModule=!0,t.MutationsTab=void 0;var o=n(96323),r=n(31246),a=n(26949),i=n(11265);t.MutationsTab=function(e,t){var n=(0,r.useBackend)(t).data,c=(0,r.useSharedState)(t,"mutsortmode","time"),l=c[0],u=c[1],d=(0,r.useSharedState)(t,"showSequence",!1),s=d[0],p=d[1],m=(n.bioEffects||[]).slice(0);return"time"===l?m.sort((function(e,t){return e.time-t.time})):"alpha"===l&&m.sort((function(e,t){return e.name>t.name?1:e.name<t.name?-1:0})),(0,o.createFragment)([(0,o.createComponentVNode)(2,a.Section,{children:[(0,o.createComponentVNode)(2,a.Button,{icon:"time"===l?"clock":"sort-alpha-down",onClick:function(){return u("time"===l?"alpha":"time")},children:"Sort Mode"}),(0,o.createComponentVNode)(2,a.Button.Checkbox,{inline:!0,content:"Show Sequence",checked:s,onClick:function(){return p(!s)}})]}),m.map((function(e){return(0,o.createComponentVNode)(2,i.BioEffect,{gene:e,showSequence:s},e.ref)}))],0)}},93847:function(e,t,n){"use strict";t.__esModule=!0,t.ResearchTab=void 0;var o=n(96323),r=n(31246),a=n(26949),i=n(11265);t.ResearchTab=function(e,t){var n=(0,r.useBackend)(t),c=n.data,l=n.act,u=c.materialCur,d=c.materialMax,s=c.budget,p=c.mutationsResearched,m=c.autoDecryptors,f=c.saveSlots,h=c.availableResearch,g=c.finishedResearch,C=c.savedMutations,N=c.research,v=e.maxBuyMats,b=e.setBuyMats;return(0,o.createFragment)([(0,o.createComponentVNode)(2,a.Section,{title:"Statistics",buttons:(0,o.createComponentVNode)(2,a.Button,{icon:"dollar-sign",disabled:v<=0,onClick:function(){return b(1)},children:"Purchase Additional Materials"}),children:(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Research Materials",children:[u," / ",d]}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Research Budget",children:[(0,o.createComponentVNode)(2,a.AnimatedNumber,{value:s})," Credits"]}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Mutations Researched",children:p}),f>0&&(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Mutations Stored",children:[C.length," / ",f]}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Auto-Decryptors",children:m})]})}),(0,o.createComponentVNode)(2,a.Section,{title:"Available Research",children:h.map((function(e,t){return(0,o.createComponentVNode)(2,a.Section,{title:"Tier "+(t+1),children:e.length?e.map((function(e){return(0,o.createComponentVNode)(2,a.Section,{title:N[e.ref].name,buttons:(0,o.createComponentVNode)(2,a.Button,{icon:"flask",disabled:u<e.cost,onClick:function(){return l("research",{ref:e.ref})},color:"teal",children:"Research ("+e.cost+" mat, "+e.time+"s)"}),children:(0,o.createComponentVNode)(2,i.Description,{text:N[e.ref].desc})},e.ref)})):"No research is currently available at this tier."},t)}))}),(0,o.createComponentVNode)(2,a.Section,{title:"Finished Research",children:g.map((function(e,t){return(0,o.createComponentVNode)(2,a.Section,{title:"Tier "+(t+1),children:e.length?e.map((function(e){return(0,o.createComponentVNode)(2,a.Section,{title:N[e.ref].name,children:(0,o.createComponentVNode)(2,i.Description,{text:N[e.ref].desc})},N[e.ref].name)})):"No research has been completed at this tier."},t)}))})],4)}},49445:function(e,t,n){"use strict";t.__esModule=!0,t.ScannerTab=void 0;var o=n(96323),r=n(31246),a=n(26949),i=n(92195),c=n(11265),l=n(43024);t.ScannerTab=function(e,t){var n=(0,r.useBackend)(t),u=n.data,d=n.act,s=(0,r.useSharedState)(t,"changingmutantrace",!1),p=s[0],m=s[1],f=(0,r.useSharedState)(t,"togglePreview",!1),h=f[0],g=f[1],C=u.haveScanner,N=u.subject,v=u.modifyAppearance,b=u.equipmentCooldown,V=u.mutantRaces,y=N||{},x=y.preview,I=y.name,k=y.health,w=y.human,S=y.age,_=y.bloodType,M=y.mutantRace,D=y.canAppearance,B=y.premature,A=y.potential,T=y.active;return!p||N&&w&&!B||(p=!1,m(!1)),N?(0,o.createFragment)([!!p&&(0,o.createComponentVNode)(2,a.Modal,{full:!0,children:[(0,o.createComponentVNode)(2,a.Box,{bold:!0,width:20,mb:.5,children:"Change to which body type?"}),V.map((function(e){return(0,o.createComponentVNode)(2,a.Box,{children:(0,o.createComponentVNode)(2,a.Button,{color:"blue",disabled:M===e.name,mt:.5,onClick:function(){m(!1),d("mutantrace",{ref:e.ref})},children:[(0,o.createComponentVNode)(2,l.GeneIcon,{name:e.icon,size:1.5,style:{margin:"-4px","margin-right":"4px"}}),e.name]})},e.ref)})),(0,o.createComponentVNode)(2,a.Box,{mt:1,textAlign:"right",children:(0,o.createComponentVNode)(2,a.Button,{color:"bad",icon:"times",onClick:function(){return m(!1)},children:"Cancel"})})]}),v?(0,o.normalizeProps)((0,o.createComponentVNode)(2,i.AppearanceEditor,Object.assign({},v))):(0,o.createFragment)([(0,o.createComponentVNode)(2,a.Section,{title:"Occupant",children:(0,o.createComponentVNode)(2,a.Flex,{children:[(0,o.createComponentVNode)(2,a.Flex.Item,{mr:1,children:(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Name",buttons:(0,c.haveDevice)(b,"Emitter")&&(0,o.createComponentVNode)(2,a.Button,{icon:"radiation",disabled:(0,c.onCooldown)(b,"Emitter")||k<=0,color:"bad",onClick:function(){return d("emitter")},children:"Scramble DNA"}),children:I}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Body Type",buttons:!!w&&(0,o.createFragment)([(0,o.createComponentVNode)(2,a.Button,{icon:"user",color:"blue",disabled:!!B,onClick:function(){return m(!0)},children:"Change"}),(0,o.createComponentVNode)(2,a.Button,{icon:"wrench",color:"average",disabled:!D,onClick:function(){return d("editappearance")}})],4),children:M}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Physical Age",buttons:!!w&&(0,o.createComponentVNode)(2,a.Button.Checkbox,{inline:!0,color:"good",content:"DNA Render",checked:h,onClick:function(){return g(!h)}}),children:[S," years"]}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Blood Type",children:_})]})}),w&&h&&(0,o.createComponentVNode)(2,a.Flex.Item,{grow:0,shrink:0,children:(0,o.createComponentVNode)(2,a.ByondUi,{params:{id:x,type:"map"},style:{width:"64px",height:"128px"},hideOnScroll:!0})})]})}),(0,o.createComponentVNode)(2,a.Section,{title:"Potential Genes",children:(0,o.createComponentVNode)(2,c.GeneList,{genes:A,noGenes:"All detected potential mutations are active.",isPotential:!0})}),(0,o.createComponentVNode)(2,a.Section,{title:"Active Mutations",children:(0,o.createComponentVNode)(2,c.GeneList,{genes:T,noGenes:"Subject has no detected mutations.",isActive:!0})})],4)],0):(0,o.createComponentVNode)(2,a.Section,{title:"Scanner Error",children:C?"Subject has absconded.":"Check connection to scanner."})}},64477:function(e,t,n){"use strict";t.__esModule=!0,t.RecordTab=t.StorageTab=void 0;var o=n(96323),r=n(31246),a=n(11265),i=n(26949);t.StorageTab=function(e,t){var n=(0,r.useBackend)(t),c=n.data,l=n.act,u=(0,r.useSharedState)(t,"menu","research"),d=(u[0],u[1]),s=(0,r.useSharedState)(t,"iscombining",!1),p=(s[0],s[1]),m=c.saveSlots,f=c.samples,h=c.savedMutations,g=c.savedChromosomes,C=c.toSplice,N=Object.values(g.reduce((function(e,t){return e[t.name]||(e[t.name]={name:t.name,desc:t.desc,count:0}),e[t.name].count++,e[t.name].ref=t.ref,e}),{}));return N.sort((function(e,t){return e.name>t.name?1:-1})),(0,o.createFragment)([m>0&&(0,o.createComponentVNode)(2,i.Section,{title:"Stored Mutations",buttons:(0,o.createComponentVNode)(2,i.Button,{icon:"sitemap",onClick:function(){return p(!0)},children:"Combine"}),children:h.length?h.map((function(e){return(0,o.createComponentVNode)(2,a.BioEffect,{gene:e,showSequence:!0,isStorage:!0},e.ref)})):"There are no mutations in storage."}),(0,o.createComponentVNode)(2,i.Section,{title:"Stored Chromosomes",children:N.length?(0,o.createComponentVNode)(2,i.LabeledList,{children:N.map((function(e){return(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:e.name,buttons:(0,o.createFragment)([(0,o.createComponentVNode)(2,i.Button,{disabled:e.name===C,icon:"map-marker-alt",onClick:function(){return l("splicechromosome",{ref:e.ref})},children:"Splice"}),(0,o.createComponentVNode)(2,i.Button,{color:"bad",icon:"trash",onClick:function(){return l("deletechromosome",{ref:e.ref})}})],4),children:[e.desc,(0,o.createComponentVNode)(2,i.Box,{mt:.5,children:[(0,o.createComponentVNode)(2,i.Box,{inline:!0,color:"grey",children:"Stored Copies:"})," ",e.count]})]},e.ref)}))}):"There are no chromosomes in storage."}),(0,o.createComponentVNode)(2,i.Section,{title:"DNA Samples",children:(0,o.createComponentVNode)(2,i.LabeledList,{children:f.map((function(e){return(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:e.name,buttons:(0,o.createComponentVNode)(2,i.Button,{icon:"save",onClick:function(){l("setrecord",{ref:e.ref}),d("record")},children:"View Record"}),children:(0,o.createVNode)(1,"tt",null,e.uid,0)},e.ref)}))})})],0)};t.RecordTab=function(e,t){var n=(0,r.useBackend)(t).data.record;if(n){var c=n.name,l=n.uid,u=n.genes;return(0,o.createFragment)([(0,o.createComponentVNode)(2,i.Section,{title:c,children:(0,o.createComponentVNode)(2,i.LabeledList,{children:(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Genetic Signature",children:(0,o.createVNode)(1,"tt",null,l,0)})})}),(0,o.createComponentVNode)(2,i.Section,{children:(0,o.createComponentVNode)(2,a.GeneList,{genes:u,noGenes:"No genes found in sample.",isSample:!0})})],4)}}},12302:function(e,t,n){"use strict";t.__esModule=!0,t.GimmickObject=void 0;var o=n(96323),r=n(31246),a=n(26949),i=n(2381);t.GimmickObject=function(e,t){var n=(0,r.useBackend)(t),c=n.act,l=n.data,u=l.eventList,d=l.interactiveTypes,s=l.activeStage;l.icon,l.iconState;return(0,o.createComponentVNode)(2,i.Window,{title:"Gimmick Object Editor",width:675,height:600,children:(0,o.createComponentVNode)(2,i.Window.Content,{scrollable:!0,children:(0,o.createComponentVNode)(2,a.Section,{title:(0,o.createComponentVNode)(2,a.Box,{inline:!0,children:"Edit Interactive Steps"}),children:[(0,o.createComponentVNode)(2,a.Flex,{direction:"column",children:Object.keys(u).map((function(e,t){return(0,o.createComponentVNode)(2,a.Flex.Item,{children:(0,o.createComponentVNode)(2,a.Section,{title:t,children:(0,o.createComponentVNode)(2,a.Flex.Item,{mb:1,children:[(0,o.createComponentVNode)(2,a.Tooltip,{content:"Move Step Down",children:(0,o.createComponentVNode)(2,a.Button,{icon:"angle-down",disabled:parseInt(e,10)>=u.length-1,onClick:function(){return c("move-down",{event:t})}})}),(0,o.createComponentVNode)(2,a.Tooltip,{content:"Move Step Down",children:(0,o.createComponentVNode)(2,a.Button,{icon:"angle-up",disabled:parseInt(e,10)<=0,onClick:function(){return c("move-up",{event:t})}})}),(0,o.createComponentVNode)(2,a.Tooltip,{content:"Make Active Step",children:(0,o.createComponentVNode)(2,a.Button,{icon:"play",disabled:parseInt(e,10)===parseInt(s,10)-1,onClick:function(){return c("active_step",{event:t})}})}),(0,o.createComponentVNode)(2,a.Tooltip,{content:"Remove step from Gimmick",children:(0,o.createComponentVNode)(2,a.Button,{icon:"trash",color:"red",onClick:function(){return c("delete_event",{event:t})}})}),(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.Tooltip,{content:"Set Tool Interactive Flags (Blank will be AttackHand)",children:(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Interactive Flags",children:Object.keys(d).map((function(n,r){return(0,o.createComponentVNode)(2,a.Button,{selected:u[e].interaction&d[n],onClick:function(){return c("interaction",{event:t,value:d[n]})},children:n},r)}))})}),(0,o.createComponentVNode)(2,a.Tooltip,{content:"Hint appended to examine text",children:(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Description",children:(0,o.createComponentVNode)(2,a.Input,{fluid:!0,value:u[e].description,onInput:function(e,n){return c("description",{event:t,value:n})}})})}),(0,o.createComponentVNode)(2,a.Tooltip,{content:"Actionbar Duration",children:(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Duration",children:[(0,o.createComponentVNode)(2,a.NumberInput,{animated:!0,width:"7em",value:u[e].duration,minValue:1,maxValue:9e4,onChange:function(e,n){return c("duration",{event:t,value:n})}}),"Seconds"]})}),(0,o.createComponentVNode)(2,a.Tooltip,{content:"Visible Text Appended after [src]",children:(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Visible Message",children:(0,o.createComponentVNode)(2,a.Input,{fluid:!0,value:u[e].message,onInput:function(e,n){return c("message",{event:t,value:n})}})})})]}),(0,o.createComponentVNode)(2,a.Tooltip,{content:"Notify in-game admins that action was performed",children:(0,o.createComponentVNode)(2,a.Button,{icon:"flag",selected:u[e].notify,onClick:function(){return c("notify",{event:t,value:!u[e].notify})},children:"Notify Admins"})})]})})},t)}))}),(0,o.createComponentVNode)(2,a.Box,{m:1,children:(0,o.createComponentVNode)(2,a.Button,{onClick:function(){return c("add_new")},children:"Add Event"})})]})})})}},96608:function(e,t,n){"use strict";t.__esModule=!0,t.GlassRecycler=void 0;var o=n(96323),r=n(31246),a=n(26949),i=n(2381),c=n(18331),l=function(e){var t=e.product,n=t.name,r=t.cost,i=t.img,l=e.disabled,u=e.onClick;return(0,o.createFragment)([(0,o.createComponentVNode)(2,a.Flex,{direction:"row",align:"center",children:[(0,o.createComponentVNode)(2,a.Flex.Item,{children:(0,o.createVNode)(1,"img",null,null,1,{src:"data:image/png;base64,"+i,style:{"vertical-align":"middle","horizontal-align":"middle"}})}),(0,o.createComponentVNode)(2,a.Flex.Item,{grow:1,children:[(0,o.createComponentVNode)(2,a.Box,{bold:!0,children:(0,c.capitalize)(n)}),(0,o.createComponentVNode)(2,a.Box,{children:"Cost: "+r+" "+(0,c.pluralize)("Unit",r)})]}),(0,o.createComponentVNode)(2,a.Flex.Item,{children:(0,o.createComponentVNode)(2,a.Button,{onClick:u,disabled:l,children:"Create"})})]}),(0,o.createComponentVNode)(2,a.Divider)],4)};t.GlassRecycler=function(e,t){var n=(0,r.useBackend)(t),u=n.act,d=n.data,s=d.glassAmt,p=d.products,m=(0,r.useLocalState)(t,"filter-available",!1),f=m[0],h=m[1];return(0,o.createComponentVNode)(2,i.Window,{title:"Glass Recycler",width:300,height:400,children:(0,o.createComponentVNode)(2,i.Window.Content,{children:(0,o.createComponentVNode)(2,a.Stack,{vertical:!0,fill:!0,children:[(0,o.createComponentVNode)(2,a.Stack.Item,{children:(0,o.createComponentVNode)(2,a.Section,{children:(0,o.createComponentVNode)(2,a.Flex,{direction:"row",align:"center",children:[(0,o.createComponentVNode)(2,a.Flex.Item,{grow:1,children:(0,o.createComponentVNode)(2,a.Box,{children:"Glass: "+s+" "+(0,c.pluralize)("Unit",s)})}),(0,o.createComponentVNode)(2,a.Flex.Item,{children:(0,o.createComponentVNode)(2,a.Button.Checkbox,{checked:f,onClick:function(){return h(!f)},children:"Filter Available"})})]})})}),(0,o.createComponentVNode)(2,a.Stack.Item,{grow:1,children:(0,o.createComponentVNode)(2,a.Section,{fill:!0,scrollable:!0,title:"Products",children:p.filter((function(e){var t=e.cost;return!f||s>=t})).map((function(e){var t=e.cost,n=e.type;return(0,o.createComponentVNode)(2,l,{product:e,disabled:s<t,onClick:function(){return u("create",{type:n})}},n)}))})})]})})})}},21381:function(e,t,n){"use strict";t.__esModule=!0,t.HumanInventory=void 0;var o=n(96323),r=n(31246),a=n(26949),i=n(2381),c={slot_head:"Head",slot_wear_mask:"Mask",slot_glasses:"Eyes",slot_ears:"Ears",slot_l_hand:"Left Hand",slot_r_hand:"Right Hand",slot_gloves:"Gloves",slot_shoes:"Shoes",slot_belt:"Belt",slot_w_uniform:"Uniform",slot_wear_suit:"Outer Suit",slot_back:"Back",slot_wear_id:"ID",slot_l_store:"Left Pocket",slot_r_store:"Right Pocket"};t.HumanInventory=function(e,t){var n=(0,r.useBackend)(t),u=n.data,d=n.act;return(0,o.createComponentVNode)(2,i.Window,{width:300,height:490,title:u.name,children:(0,o.createComponentVNode)(2,i.Window.Content,{children:(0,o.createComponentVNode)(2,a.Stack,{fill:!0,vertical:!0,children:[(0,o.createComponentVNode)(2,a.Stack.Item,{grow:!0,children:(0,o.createComponentVNode)(2,a.Section,{scrollable:!0,fill:!0,children:(0,o.createComponentVNode)(2,a.LabeledList,{children:Object.entries(c).map((function(e){var t=e[0],n=e[1],r=u.slots.find((function(e){return e.id===t}));return(0,o.createComponentVNode)(2,l,{name:n,slot:r},t)}))})})}),Boolean(u.handcuffed||u.canSetInternal||u.internal)&&(0,o.createComponentVNode)(2,a.Stack.Item,{children:(0,o.createComponentVNode)(2,a.Section,{children:[Boolean(u.handcuffed)&&(0,o.createComponentVNode)(2,a.Button,{onClick:function(){return d("remove-handcuffs")},children:"Remove handcuffs"}),Boolean(u.canSetInternal)&&(0,o.createComponentVNode)(2,a.Button,{onClick:function(){return d("access-internals")},children:"Set internals"}),Boolean(u.internal)&&(0,o.createComponentVNode)(2,a.Button,{onClick:function(){return d("access-internals")},children:"Remove internals"})]})})]})})})};var l=function(e,t){var n=(0,r.useBackend)(t).act,i=e.slot,c=e.name,l=i.id,u=i.item;return(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:c,children:(0,o.createComponentVNode)(2,a.Button,{color:u?"default":"transparent",fluid:!0,onClick:function(){return n("access-slot",{id:l})},children:u||"Nothing"})})}},59818:function(){},92354:function(e,t,n){"use strict";t.__esModule=!0,t.Hypospray=void 0;var o=n(96323),r=n(31246),a=n(26949),i=n(2381),c=n(51418),l=n(18331);t.Hypospray=function(e,t){var n=(0,r.useBackend)(t),u=n.act,d=n.data,s=d.emagged,p=d.injectionAmount,m=d.reagentData;return(0,o.createComponentVNode)(2,i.Window,{width:320,height:300,theme:s?"syndicate":"nanotrasen",children:(0,o.createComponentVNode)(2,i.Window.Content,{children:[(0,o.createComponentVNode)(2,a.Section,{title:s?(0,l.glitch)("Contents",3):"Contents",buttons:(0,o.createComponentVNode)(2,a.Button,{icon:"times",color:"red",disabled:!m.totalVolume,onClick:function(){return u("dump")},children:"Dump"}),children:[(0,o.createComponentVNode)(2,c.ReagentGraph,{container:m}),(0,o.createComponentVNode)(2,c.ReagentList,{container:m})]}),(0,o.createComponentVNode)(2,a.Section,{title:"Injection Amount",children:(0,o.createComponentVNode)(2,a.Slider,{value:p,format:function(e){return e+"u"},minValue:1,maxValue:m.maxVolume,step:1,stepPixelSize:10,onChange:function(e,t){return u("changeAmount",{amount:t})}})})]})})}},26513:function(e,t,n){"use strict";t.__esModule=!0,t.IDComputer=void 0;var o=n(96323),r=n(31246),a=n(26949),i=n(2381),c=function(e,t){var n=(0,r.useBackend)(t).act,i=e.name,c=e.colour,l=e.jobs,u=e.current_job,d=e.isCustomRank,s=e.accesses,p=e.target_accesses;return(0,o.createComponentVNode)(2,a.Section,{title:i,"class":"IDComputer__DeptBox "+(c&&"IDComputer__DeptBox_color_"+c),mb:"0.25rem",children:[l&&l.map((function(e,t){return(0,o.createFragment)([!d&&(0,o.createComponentVNode)(2,a.Button,{onClick:function(){return n("assign",{assign:e,colour:c})},selected:e===u,children:e},e),d&&(0,o.createFragment)([e,(0,o.createComponentVNode)(2,a.Button,{icon:"save",tooltip:"Save",onClick:function(){return n("save",{save:t+1})},pl:"10px",mx:"0.2rem"}),(0,o.createComponentVNode)(2,a.Button,{icon:"check",tooltip:"Apply",onClick:function(){return n("apply",{apply:t+1})},pl:"10px",mx:"0.2rem",mr:"1rem"})],0)],0)})),s&&s.map((function(e){return(0,o.createComponentVNode)(2,a.Button,{onClick:function(){return n("access",{access:e.id,allowed:!p.includes(e.id)})},selected:p.includes(e.id),children:e.name},e.id)}))]})};t.IDComputer=function(e,t){var n=(0,r.useBackend)(t),l=n.act,u=n.data,d=u.mode,s=u.manifest,p=u.target_name,m=u.target_owner,f=u.target_rank,h=u.target_card_look,g=u.scan_name,C=u.pronouns,N=u.custom_names,v=u.target_accesses,b=u.standard_jobs,V=u.accesses_by_area,y=u.icons;return(0,o.createComponentVNode)(2,i.Window,{width:620,height:780,children:(0,o.createComponentVNode)(2,i.Window.Content,{scrollable:!0,children:(0,o.createComponentVNode)(2,a.Section,{children:[(0,o.createComponentVNode)(2,a.Tabs,{children:[(0,o.createComponentVNode)(2,a.Tabs.Tab,{selected:"manifest"!==d,onClick:function(){return l("mode",{mode:0})},children:"ID Modification"}),(0,o.createComponentVNode)(2,a.Tabs.Tab,{selected:"manifest"===d,onClick:function(){return l("mode",{mode:1})},children:"Crew Manifest"})]}),"manifest"===d&&(0,o.createFragment)([(0,o.createVNode)(1,"h1",null,"Crew Manifest:",16),(0,o.createVNode)(1,"em",null,"Please use the security record computer to modify entries.",16),(0,o.createComponentVNode)(2,a.Box,{my:"0.5rem",dangerouslySetInnerHTML:{__html:s}}),(0,o.createComponentVNode)(2,a.Button,{onClick:function(){return l("print")},icon:"print",children:"Print"})],4),"manifest"!==d&&(0,o.createFragment)([(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Confirm identity",children:(0,o.createComponentVNode)(2,a.Button,{onClick:function(){return l("scan")},icon:"eject",preserveWhitespace:!0,children:g||"Insert card"})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Target",children:(0,o.createComponentVNode)(2,a.Button,{onClick:function(){return l("modify")},icon:"eject",preserveWhitespace:!0,children:p||"Insert card or implant"})})]}),"authenticated"===d&&(0,o.createFragment)([(0,o.createVNode)(1,"hr"),(0,o.createComponentVNode)(2,a.Stack,{children:[(0,o.createComponentVNode)(2,a.Stack.Item,{grow:2,children:(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Registered",children:(0,o.createComponentVNode)(2,a.Button,{onClick:function(){return l("reg")},preserveWhitespace:!0,children:m&&m.trim()||"(blank)"})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Assignment",children:(0,o.createComponentVNode)(2,a.Button,{onClick:function(){return l("assign",{assign:"Custom Assignment"})},preserveWhitespace:!0,children:f&&f.trim()||"Unassigned"})})]})}),(0,o.createComponentVNode)(2,a.Stack.Item,{children:(0,o.createComponentVNode)(2,a.Divider,{vertical:!0})}),(0,o.createComponentVNode)(2,a.Stack.Item,{grow:1,children:(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Pronouns",children:[(0,o.createComponentVNode)(2,a.Button,{onClick:function(){return l("pronouns",{pronouns:"next"})},children:C||"None"}),C&&(0,o.createComponentVNode)(2,a.Button,{onClick:function(){return l("pronouns",{pronouns:"remove"})},icon:"trash",tooltip:"Remove"})]}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"PIN",children:(0,o.createComponentVNode)(2,a.Button,{onClick:function(){return l("pin")},children:"****"})})]})})]}),(0,o.createComponentVNode)(2,a.Section,{title:"Standard Job Assignment",children:[b.map((function(e){return e.jobs&&(0,o.createComponentVNode)(2,c,{name:e.name,colour:e.color,current_job:f,jobs:e.jobs},e.name)})),(0,o.createComponentVNode)(2,c,{name:"Custom",current_job:f,jobs:N,isCustomRank:!0})]}),(0,o.createComponentVNode)(2,a.Section,{title:"Specific Area Access",children:V.map((function(e){return e.accesses.length>0&&(0,o.createComponentVNode)(2,c,{name:e.name,colour:e.color,accesses:e.accesses,target_accesses:v},e.name)}))}),(0,o.createComponentVNode)(2,a.Section,{title:"Custom Card Look",children:y.map((function(e){return(0,o.createComponentVNode)(2,a.Button,{onClick:function(){return l("colour",{colour:e.style})},selected:e.card_look===h,children:[(0,o.createComponentVNode)(2,a.Image,{verticalAlign:"middle",my:"0.2rem",mr:"0.5rem",height:"24px",width:"24px",src:"data:image/png;base64,"+e.icon}),e.name]},e.style)}))})],0),"unauthenticated"===d&&g&&p&&(0,o.createComponentVNode)(2,a.NoticeBox,{mt:"0.5rem",warning:!0,children:["Identity ",(0,o.createVNode)(1,"em",null,g,0)," unauthorized to perform ID modifications."]})],0)]})})})}},23255:function(e,t,n){"use strict";t.__esModule=!0,t.Laundry=void 0;var o=n(96323),r=n(31246),a=n(26949),i=n(2381);t.Laundry=function(e,t){var n=(0,r.useBackend)(t).data.on;return(0,o.createComponentVNode)(2,i.Window,{title:"Washman 550",width:400,height:100,children:(0,o.createComponentVNode)(2,i.Window.Content,{children:[(0,o.createComponentVNode)(2,a.Box,{textAlign:"center",mb:1,children:n?(0,o.createComponentVNode)(2,c):(0,o.createComponentVNode)(2,l)}),(0,o.createComponentVNode)(2,a.Box,{textAlign:"center",children:[(0,o.createComponentVNode)(2,u),(0,o.createComponentVNode)(2,d)]})]})})};var c=function(e,t){return(0,o.createComponentVNode)(2,a.NoticeBox,{warning:!0,children:"Please wait, machine is currently running."})},l=function(e,t){return(0,o.createComponentVNode)(2,a.NoticeBox,{info:!0,children:'Insert items and press "Turn On" to start.'})},u=function(e,t){var n=(0,r.useBackend)(t),i=n.act,c=n.data.on;return(0,o.createComponentVNode)(2,a.Button,{disabled:c,color:c?"":"good",icon:"fas fa-power-off",content:"Turn On",onClick:function(){return i("cycle")}})},d=function(e,t){var n=(0,r.useBackend)(t),i=n.act,c=n.data,l=c.on,u=c.door;return(0,o.createComponentVNode)(2,a.Button,{disabled:l,color:u?"orange":"",icon:u?"fas fa-door-open":"fas fa-door-closed",content:u?"Open":"Closed",onClick:function(){return i("door")}})}},84696:function(e,t,n){"use strict";t.__esModule=!0,t.ListInputModal=void 0;var o=n(96323),r=n(55631),a=n(34277),i=n(26949),c=n(57890),l=n(2381),u=n(31246);function d(e,t){var n="undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(n)return(n=n.call(e)).next.bind(n);if(Array.isArray(e)||(n=function(e,t){if(!e)return;if("string"==typeof e)return s(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);"Object"===n&&e.constructor&&(n=e.constructor.name);if("Map"===n||"Set"===n)return Array.from(e);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return s(e,t)}(e))||t&&e&&"number"==typeof e.length){n&&(e=n);var o=0;return function(){return o>=e.length?{done:!0}:{done:!1,value:e[o++]}}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}function s(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,o=new Array(t);n<t;n++)o[n]=e[n];return o}var p="undefined"!=typeof Promise?Promise.resolve().then.bind(Promise.resolve()):function(e){window.setTimeout(e,0)},m=function(e,t){var n=(f||(f=document.createElement("canvas"))).getContext("2d");return n.font=t,n.measureText(e).width},f=null,h=function(e,t){return window.getComputedStyle(e,null).getPropertyValue(t)};t.ListInputModal=function(e,t){var n=(0,u.useBackend)(t),s=n.act,f=n.data,N=f.items,v=void 0===N?[]:N,b=f.message,V=f.init_value,y=f.timeout,x=f.title,I=f.start_with_search,k=f.capitalize,w=f.theme,S=(0,u.useLocalState)(t,"selected",v.indexOf(V)),_=S[0],M=S[1],D=(0,u.useLocalState)(t,"searchBarVisible",1===I),B=D[0],A=D[1],T=(0,u.useLocalState)(t,"searchQuery",""),L=T[0],E=T[1],j=(0,u.useLocalState)(t,"windowWidth",null),P=j[0],O=j[1],F=function(e){if(e!==L){var t,n=R[_],o=v.filter((function(t){return t.toLowerCase().includes(e.toLowerCase())})),r=o.indexOf(n);if(-1===r&&o.length>0)M(0),null==(t=document.getElementById("0"))||t.scrollIntoView();else if(0!==o.length){var a;M(r),null==(a=document.getElementById(r.toString()))||a.scrollIntoView()}E(e)}},R=v.filter((function(e){return null==e?void 0:e.toLowerCase().includes(L.toLowerCase())})),z=325+Math.ceil((null==b?void 0:b.length)/3);B||setTimeout((function(){var e;return null==(e=document.getElementById(_.toString()))?void 0:e.focus()}),1);var W,U=P;if(null===P){for(var H,G=325,Y=(void 0===W&&(W=document.body),(h(W,"font-weight")||"normal")+" "+(h(W,"font-size")||"16px")+" "+(h(W,"font-family")||"Times New Roman")),Z=d(v);!(H=Z()).done;){var K=H.value;G=Math.max(G,m(K,Y))}p((function(){return O(G)})),U=G}return(0,o.createComponentVNode)(2,l.Window,{title:x,width:U,height:z,theme:w||"nanotrasen",children:[y&&(0,o.createComponentVNode)(2,r.Loader,{value:y}),(0,o.createComponentVNode)(2,l.Window.Content,{onkeydown:function(e){var t,n,o,r,a=B?document.getElementById("search_bar").getElementsByTagName("input")[0]:null,i=document.activeElement===a,l=R.length-1,u=window.event?e.which:e.keyCode,d=String.fromCharCode(e.keyCode).toLowerCase();if(u===c.KEY_DOWN||u===c.KEY_UP||u===c.KEY_PAGEUP||u===c.KEY_PAGEDOWN)e.preventDefault(),function(e){var t,n=R.length-1,o=-1;switch(e){case c.KEY_UP:o=-1;break;case c.KEY_DOWN:o=1;break;case c.KEY_PAGEUP:o=-10;break;case c.KEY_PAGEDOWN:o=10}var r=_+o;r<0&&1===Math.abs(o)&&(r=n),r>n&&1===Math.abs(o)&&(r=0),r<0&&(r=0),r>n&&(r=n),M(r),null==(t=document.getElementById(r.toString()))||t.focus()}(u);else{if("f"===d&&e.ctrlKey)return B||p((function(){return document.getElementById("search_bar").getElementsByTagName("input")[0].focus()})),A(!B),E(""),void e.preventDefault();if(u===c.KEY_ENTER)e.preventDefault(),s("submit",{entry:R[_]});else if(u===c.KEY_ESCAPE)e.preventDefault(),s("cancel");else if(u===c.KEY_END){var m;M(l),null==(m=document.getElementById(l.toString()))||m.focus(),e.preventDefault()}else if(u===c.KEY_HOME){var f;M(0),null==(f=document.getElementById("0"))||f.focus(),e.preventDefault()}else if(u===c.KEY_TAB&&B){var h=document.getElementById(_.toString());i&&h?h.focus():a&&!i&&a.focus(),e.preventDefault()}else!B&&u>=c.KEY_A&&u<=c.KEY_Z&&!e.ctrlKey&&(e.preventDefault(),e.stopPropagation(),t=u,o=String.fromCharCode(t),r=v.findIndex((function(e,t){return(null==e?void 0:e.toLowerCase().startsWith(null==o?void 0:o.toLowerCase()))&&t>_})),-1===r&&(r=v.findIndex((function(e,t){return(null==e?void 0:e.toLowerCase().startsWith(null==o?void 0:o.toLowerCase()))&&t<=_}))),-1!==r&&(M(r),null==(n=document.getElementById(r.toString()))||n.focus()))}},children:(0,o.createComponentVNode)(2,i.Section,{buttons:(0,o.createComponentVNode)(2,i.Button,{compact:!0,icon:B?"search":"font",selected:!0,tooltip:B?"Search Mode. Type to search or use arrow keys to select manually.":"Hotkey Mode. Type a letter to jump to the first match. Enter to select.",tooltipPosition:"left",onClick:function(){return A(!B),void E("")}}),className:"ListInput__Section",fill:!0,title:b,children:(0,o.createComponentVNode)(2,i.Stack,{fill:!0,vertical:!0,children:[(0,o.createComponentVNode)(2,i.Stack.Item,{grow:!0,children:(0,o.createComponentVNode)(2,g,{filteredItems:R,onClick:function(e){e!==_&&M(e)},onFocusSearch:function(e){var t=B?document.getElementById("search_bar").getElementsByTagName("input")[0]:null;t.focus(),t.value+=e,F(t.value)},searchBarVisible:B,selected:_,capitalize:k})}),B&&(0,o.createComponentVNode)(2,C,{filteredItems:R,onSearch:F,searchQuery:L,selected:_}),(0,o.createComponentVNode)(2,i.Stack.Item,{children:(0,o.createComponentVNode)(2,a.InputButtons,{input:R[_]})})]})})})]})};var g=function(e,t){var n=(0,u.useBackend)(t).act,r=e.filteredItems,a=e.onClick,c=e.onFocusSearch,l=e.searchBarVisible,d=e.selected,s=e.capitalize;return(0,o.createComponentVNode)(2,i.Section,{fill:!0,scrollable:!0,tabIndex:0,children:r.map((function(e,t){return(0,o.createComponentVNode)(2,i.Button,{color:"transparent",fluid:!0,id:t,onClick:function(){return a(t)},onDblClick:function(e){e.preventDefault(),n("submit",{entry:r[d]})},onkeydown:function(e){var t=window.event?e.which:e.keyCode,n=String.fromCharCode(t);e.shiftKey||(n=n.toLowerCase()),l&&1===e.key.length&&(e.preventDefault(),e.stopPropagation(),c(n))},selected:t===d,style:{animation:"none",transition:"none"},children:s?e.replace(/^\w/,(function(e){return e.toUpperCase()})):e},t)}))})},C=function(e,t){var n=(0,u.useBackend)(t).act,r=e.filteredItems,a=e.onSearch,c=e.searchQuery,l=e.selected;return(0,o.createComponentVNode)(2,i.Input,{autoFocus:!0,autoSelect:!0,fluid:!0,id:"search_bar",onEnter:function(e){e.preventDefault(),n("submit",{entry:r[l]})},onInput:function(e,t){return a(t)},placeholder:"Search...",value:c})}},56596:function(e,t,n){"use strict";t.__esModule=!0,t.LocalGenerator=void 0;var o=n(96323),r=n(31246),a=n(2381),i=n(26949),c=n(41161);t.LocalGenerator=function(e,t){var n=(0,r.useBackend)(t),l=n.act,u=n.data,d=u.name,s=u.holding,p=u.internalCell,m=u.connectedAPC,f=u.chargeAPC,h=u.boltsStatus,g=u.generatorStatus;return(0,o.createComponentVNode)(2,a.Window,{title:d,width:300,height:470,children:(0,o.createComponentVNode)(2,a.Window.Content,{children:(0,o.createComponentVNode)(2,i.Stack,{vertical:!0,children:[(0,o.createComponentVNode)(2,i.Section,{title:"Generator",children:(0,o.createComponentVNode)(2,i.Stack,{vertical:!0,children:[(0,o.createComponentVNode)(2,i.Stack.Item,{children:(0,o.createComponentVNode)(2,i.Stack,{align:"baseline",children:[(0,o.createComponentVNode)(2,i.Stack.Item,{basis:"50%",children:(0,o.createComponentVNode)(2,i.Button,{width:11.4,onClick:function(){l("toggle-bolts")},icon:h?"toggle-on":"toggle-off",children:"Toggle Floor Bolts"})}),(0,o.createComponentVNode)(2,i.Stack.Item,{children:"Status:"}),h?(0,o.createComponentVNode)(2,i.Stack.Item,{color:"good",children:"ACTIVE"}):(0,o.createComponentVNode)(2,i.Stack.Item,{color:"average",children:"INACTIVE"})]})}),(0,o.createComponentVNode)(2,i.Stack.Item,{children:(0,o.createComponentVNode)(2,i.Stack,{align:"baseline",children:[(0,o.createComponentVNode)(2,i.Stack.Item,{basis:"50%",children:(0,o.createComponentVNode)(2,i.Button,{width:11.4,onClick:function(){l("toggle-generator")},icon:g?"toggle-on":"toggle-off",children:"Toggle Generator"})}),(0,o.createComponentVNode)(2,i.Stack.Item,{children:"Status:"}),g?(0,o.createComponentVNode)(2,i.Stack.Item,{color:"good",children:"ACTIVE"}):(0,o.createComponentVNode)(2,i.Stack.Item,{color:"average",children:"INACTIVE"})]})}),(0,o.createComponentVNode)(2,i.Stack.Item,{children:(0,o.createComponentVNode)(2,i.Stack,{align:"baseline",children:[(0,o.createComponentVNode)(2,i.Stack.Item,{basis:"50%",children:(0,o.createComponentVNode)(2,i.Button,{width:11.4,onClick:function(){l("swap-target")},icon:"bolt",children:"Change Target"})}),(0,o.createComponentVNode)(2,i.Stack.Item,{children:"Target:"}),f?(0,o.createComponentVNode)(2,i.Stack.Item,{color:"good",children:"APC"}):(0,o.createComponentVNode)(2,i.Stack.Item,{color:"good",children:"CELL"})]})})]})}),(0,o.createComponentVNode)(2,c.PortableHoldingTank,{holding:s,onEjectTank:function(){l("eject-tank")}}),(0,o.createComponentVNode)(2,i.Section,{title:"Internal Cell",height:7.25,buttons:(0,o.createComponentVNode)(2,i.Button,{icon:"eject",disabled:!p,onClick:function(){l("eject-cell")},children:"Eject"}),children:p?(0,o.createComponentVNode)(2,i.Stack,{vertical:!0,children:[(0,o.createComponentVNode)(2,i.Stack.Item,{children:(0,o.createComponentVNode)(2,i.Box,{children:p.name})}),(0,o.createComponentVNode)(2,i.Stack.Item,{children:(0,o.createComponentVNode)(2,i.ProgressBar,{value:p.chargePercent,minValue:0,maxValue:100,color:p.chargePercent<20?"red":p.chargePercent<50?"yellow":"green"})})]}):(0,o.createComponentVNode)(2,i.Box,{color:"average",children:"No cell"})}),(0,o.createComponentVNode)(2,i.Section,{title:"Local APC",height:7.25,buttons:(0,o.createComponentVNode)(2,i.Button,{icon:"wifi",disabled:!s,onClick:function(){l("connect-APC")},children:"Connect"}),children:m?(0,o.createComponentVNode)(2,i.Stack,{vertical:!0,children:[(0,o.createComponentVNode)(2,i.Stack.Item,{children:(0,o.createComponentVNode)(2,i.Box,{children:m.name})}),(0,o.createComponentVNode)(2,i.Stack.Item,{children:(0,o.createComponentVNode)(2,i.ProgressBar,{value:m.chargePercent,minValue:0,maxValue:100,color:m.chargePercent<20?"red":m.chargePercent<50?"yellow":"green"})})]}):(0,o.createComponentVNode)(2,i.Box,{color:"average",children:"No connected APC"})})]})})})}},83329:function(){},56403:function(e,t,n){"use strict";t.__esModule=!0,t.LongRangeTeleporter=void 0;var o=n(96323),r=n(31246),a=n(26949),i=n(2381);t.LongRangeTeleporter=function(e,t){var n=(0,r.useBackend)(t),c=n.act,l=n.data,u=l.destinations,d=l.receive_allowed,s=l.send_allowed,p=l.syndicate;return(0,o.createComponentVNode)(2,i.Window,{theme:p?"syndicate":"ntos",width:390,height:380,children:(0,o.createComponentVNode)(2,i.Window.Content,{children:(0,o.createComponentVNode)(2,a.Section,{title:"Destinations",children:(0,o.createComponentVNode)(2,a.LabeledList,{children:u.length?u.map((function(e){return(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:e.destination,children:[!!s&&(0,o.createComponentVNode)(2,a.Button,{icon:"sign-out-alt",onClick:function(){return c("send",{target:e.ref,name:e.destination})},children:"Send"}),!!d&&(0,o.createComponentVNode)(2,a.Button,{icon:"sign-in-alt",onClick:function(){return c("receive",{target:e.ref,name:e.destination})},children:"Receive"})]},e.destination)})):(0,o.createComponentVNode)(2,a.LabeledList.Item,{children:"No destinations are currently available."})})})})})}},46045:function(e,t,n){"use strict";t.__esModule=!0,t.MechanicalDropper=void 0;var o=n(96323),r=n(2381),a=n(31246),i=n(51418),c=n(97622),l=n(26949),u=function(e){var t=e.transferMode,n=e.onTransferModeChange;return(0,o.createComponentVNode)(2,l.Section,{fitted:!0,py:.6,pl:.6,pr:1.2,children:(0,o.createComponentVNode)(2,l.Tabs,{vertical:!0,children:[(0,o.createComponentVNode)(2,l.Tabs.Tab,{selected:0===t,color:"green",onClick:function(){return n(0)},children:"Draw"}),(0,o.createComponentVNode)(2,l.Tabs.Tab,{selected:1===t,color:"red",onClick:function(){return n(1)},children:"Drop"})]})})},d=function(e){var t=e.curTransferAmt,n=e.minTransferAmt,r=e.maxTransferAmt,a=e.onTransferAmtChange,c=e.reagents;return(0,o.createComponentVNode)(2,l.Section,{children:[(0,o.createComponentVNode)(2,i.ReagentBar,{container:c}),(0,o.createComponentVNode)(2,l.Stack,{align:"center",children:[(0,o.createComponentVNode)(2,l.Stack.Item,{children:(0,o.createComponentVNode)(2,l.Button,{textAlign:"center",width:"3em",content:"Min",onClick:function(){return a(n)}})}),(0,o.createComponentVNode)(2,l.Stack.Item,{grow:!0,children:(0,o.createComponentVNode)(2,l.Slider,{minValue:n,maxValue:r,stepPixelSize:20,step:1,value:t,onChange:function(e,t){return a(t)}})}),(0,o.createComponentVNode)(2,l.Stack.Item,{children:(0,o.createComponentVNode)(2,l.Button,{textAlign:"center",width:"3em",content:"Max",onClick:function(){return a(r)}})})]})]})};t.MechanicalDropper=function(e,t){var n=(0,a.useBackend)(t),i=n.act,s=n.data,p=s.curTransferAmt,m=s.minTransferAmt,f=s.maxTransferAmt,h=s.transferMode,g=s.reagents;return(0,o.createComponentVNode)(2,r.Window,{title:"Mechanical Dropper",width:400,height:105,children:(0,o.createComponentVNode)(2,r.Window.Content,{children:(0,o.createComponentVNode)(2,l.Stack,{children:[(0,o.createComponentVNode)(2,l.Stack.Item,{align:"center",children:(0,o.createComponentVNode)(2,u,{transferMode:h,onTransferModeChange:function(e){i("mode",{mode:e})}})}),(0,o.createComponentVNode)(2,l.Stack.Item,{grow:!0,children:(0,o.createComponentVNode)(2,d,{curTransferAmt:p,minTransferAmt:m,maxTransferAmt:f,onTransferAmtChange:function(e){e=(0,c.round)((0,c.clamp)(e,m,f),1),i("amt",{amt:e})},reagents:g})})]})})})}},17526:function(e,t,n){"use strict";t.__esModule=!0,t.MineralMagnet=void 0;var o=n(96323),r=n(31246),a=n(26949),i=n(1033),c=n(2381);t.MineralMagnet=function(e,t){var n,l=(0,r.useBackend)(t),u=l.act,d=l.data,s=d.isLinked,p=d.magnetActive,m=d.magnetAutomaticMode,f=d.magnetCooldownOverride,h=d.magnetHealth,g=d.magnetLastUsed,C=d.time,N=d.linkedMagnets||[],v=d.miningEncounters||[],b=g>C,V=(0,r.useLocalState)(t,"viewEncounters",!1),y=V[0],x=V[1];return(0,o.createComponentVNode)(2,c.Window,{width:300,height:240,children:(0,o.createComponentVNode)(2,c.Window.Content,{children:[(0,o.createComponentVNode)(2,a.Section,{title:"Magnet Status",children:[(0,o.createComponentVNode)(2,a.Box,{children:["Condition: ",s?(n=h,n>=95?(0,o.createComponentVNode)(2,a.Box,{inline:!0,color:"good",children:"Optimal"}):n>=70?(0,o.createComponentVNode)(2,a.Box,{inline:!0,color:"olive",children:"Mild Structural Damage"}):n>=40?(0,o.createComponentVNode)(2,a.Box,{inline:!0,color:"yellow",children:"Heavy Structural Damage"}):n>=10?(0,o.createComponentVNode)(2,a.Box,{inline:!0,color:"average",children:"Extreme Structural Damage"}):(0,o.createComponentVNode)(2,a.Box,{inline:!0,color:"bad",children:"Destruction Imminent"})):(0,o.createComponentVNode)(2,a.Box,{inline:!0,color:"bad",children:"No Magnet Linked"})]}),(0,o.createComponentVNode)(2,a.Box,{children:["Status: ",p?"Pulling New Mineral Source":b?(0,o.createFragment)([(0,o.createTextVNode)("Cooling Down: "),(0,o.createComponentVNode)(2,a.TimeDisplay,{value:Math.max(g-C,0),timing:!0,format:function(e){return(0,i.formatTime)(e)}})],4):"Idle"]})]}),(0,o.createComponentVNode)(2,a.Section,{title:"Magnet Controls",buttons:(0,o.createComponentVNode)(2,a.Button,{textAlign:"center",icon:"rss",onClick:function(){return u("geoscan")},children:"Scan"}),children:[(!!p||b&&!f)&&(0,o.createComponentVNode)(2,a.Dimmer,{fontSize:1.75,pb:2,children:p?"Magnet Active":"On Cooldown"}),(0,o.createComponentVNode)(2,a.Button,{textAlign:"center",color:b&&f&&"average",icon:"magnet",onClick:function(){return u("activatemagnet")},fluid:!0,children:"Activate Magnet"}),(0,o.createComponentVNode)(2,a.Button,{textAlign:"center",color:b&&f&&"average",icon:"search",disabled:!v.length,onClick:function(){return x(!0)},fluid:!0,children:"Activate telescope location"}),(0,o.createComponentVNode)(2,a.Button.Checkbox,{checked:f,onClick:function(){return u("overridecooldown")},style:{"z-index":"1"},children:"Override Cooldown"}),(0,o.createComponentVNode)(2,a.Button.Checkbox,{checked:m,onClick:function(){return u("automode")},style:{"z-index":"1"},children:"Automatic Mode"})]}),y&&(0,o.createComponentVNode)(2,a.Modal,{full:!0,ml:1,width:"230px",height:"200px",children:(0,o.createComponentVNode)(2,a.Stack,{vertical:!0,fill:!0,children:[(0,o.createComponentVNode)(2,a.Stack.Item,{grow:!0,children:(0,o.createComponentVNode)(2,a.Section,{scrollable:!0,fill:!0,children:v.map((function(e){return(0,o.createComponentVNode)(2,a.Button,{onClick:function(){u("activateselectable",{encounter_id:e.id}),x(!1)},fluid:!0,children:e.name},e.id)}))})}),(0,o.createComponentVNode)(2,a.Stack.Item,{children:(0,o.createComponentVNode)(2,a.Flex,{children:[(0,o.createComponentVNode)(2,a.Flex.Item,{grow:!0,pt:.5,color:"label",children:[(0,o.createComponentVNode)(2,a.Icon,{name:"search"})," Choose a location"]}),(0,o.createComponentVNode)(2,a.Flex.Item,{children:(0,o.createComponentVNode)(2,a.Button,{color:"bad",icon:"times",onClick:function(){return x(!1)},children:"Cancel"})})]})})]})}),!!s||(0,o.createComponentVNode)(2,a.Modal,{full:!0,ml:1,width:"270px",height:"200px",children:(0,o.createComponentVNode)(2,a.Section,{title:"Choose Linked Magnet",scrollable:!0,fill:!0,children:[(0,o.createComponentVNode)(2,a.Button,{textAlign:"center",icon:"rss",fluid:!0,onClick:function(){return u("magnetscan")},children:"Scan for Magnets"}),(0,o.createComponentVNode)(2,a.Divider),N.map((function(e){var t;return(0,o.createComponentVNode)(2,a.Button,{icon:e.angle===undefined?"circle":"arrow-right",iconRotation:null!=(t=e.angle)?t:0,textAlign:"center",fluid:!0,onClick:function(){return u("linkmagnet",e)},children:e.name+" at ("+e.x+", "+e.y+")"},e.ref)}))]})})]})})}},2960:function(e,t,n){"use strict";t.__esModule=!0,t.Minimap=void 0;var o=n(96323),r=n(31246),a=n(26949),i=n(2381);t.Minimap=function(e,t){var n=(0,r.useBackend)(t).data,c=n.title,l=n.theme,u=n.minimap_id;return(0,o.createComponentVNode)(2,i.Window,{title:c,theme:l,width:610,height:640,children:(0,o.createComponentVNode)(2,i.Window.Content,{children:(0,o.createComponentVNode)(2,a.ByondUi,{params:{id:u,type:"map"},style:{width:"600px",height:"600px"}})})})}},3082:function(e,t,n){"use strict";t.__esModule=!0,t.MinimapController=void 0;var o=n(96323),r=n(31246),a=n(26949),i=n(2381),c=n(18331);t.MinimapController=function(e,t){var n=(0,r.useBackend)(t),l=n.act,u=n.data,d=u.title,s=u.theme,p=u.minimap_id,m=u.markers_visible,f=u.selecting_coordinates,h=u.minimap_markers,g=u.placable_marker_states,C=u.placable_marker_images,N=u.icon,v=u.image,b=u.pos_x,V=u.pos_y,y=(0,r.useLocalState)(t,"name"),x=y[0],I=y[1],k=(0,r.useLocalState)(t,"show_menu",!1),w=k[0],S=k[1];return(0,o.createComponentVNode)(2,i.Window,{title:d,theme:s,width:750,height:390,children:(0,o.createComponentVNode)(2,i.Window.Content,{children:(0,o.createComponentVNode)(2,a.Stack,{justify:"center",children:[(0,o.createComponentVNode)(2,a.Stack.Item,{children:(0,o.createComponentVNode)(2,a.Section,{title:"Minimap",fill:!0,buttons:(0,o.createComponentVNode)(2,a.Button,{icon:"undo",color:"green",content:"Reset Map Scale",onClick:function(){return l("reset_scale")}}),children:(0,o.createComponentVNode)(2,a.Flex,{children:(0,o.createComponentVNode)(2,a.Flex.Item,{children:(0,o.createComponentVNode)(2,a.ByondUi,{params:{id:p,type:"map"},style:{width:"300px",height:"300px"}})})})})}),(0,o.createComponentVNode)(2,a.Stack.Item,{grow:!0,children:(0,o.createComponentVNode)(2,a.Section,{title:"Minimap Markers",fill:!0,buttons:(0,o.createComponentVNode)(2,a.Box,{children:[(0,o.createComponentVNode)(2,a.Button,{icon:"plus",color:"green",content:"New",onClick:function(){return S(!w)}}),(0,o.createComponentVNode)(2,a.Button,{icon:m?"eye-slash":"eye",color:m?"red":"green",content:m?"Hide All":"Show All",onClick:function(){return l("toggle_visibility_all")}})]}),children:[!!w&&(0,o.createComponentVNode)(2,a.Modal,{mr:2,children:(0,o.createComponentVNode)(2,a.Box,{children:(0,o.createComponentVNode)(2,a.Flex,{children:[(0,o.createComponentVNode)(2,a.Flex.Item,{backgroundColor:"black",children:(0,o.createComponentVNode)(2,a.Image,{pixelated:!0,height:"150px",width:"150px",src:"data:image/png;base64,"+v})}),(0,o.createComponentVNode)(2,a.Flex.Item,{ml:"10px",children:[(0,o.createComponentVNode)(2,a.Input,{placeholder:"Marker Name",fluid:!0,value:x,onChange:function(e,t){return I(t)}}),(0,o.createComponentVNode)(2,a.Dropdown,{selected:N,width:"150px",options:g,onSelected:function(e){return function(e){u.icon=e,u.image=C[e],l("update_icon",{icon:e})}(e)},mt:"10px"}),(0,o.createComponentVNode)(2,a.Flex,{mt:"10px",justify:"space-between",children:[(0,o.createComponentVNode)(2,a.Flex.Item,{children:(0,o.createComponentVNode)(2,a.NumberInput,{className:"minimap-controller__number-inputs",minValue:1,maxValue:300,value:b,format:function(e){return"x, "+e},onDrag:function(e,t){return function(e){u.pos_x=e}(t)}})}),(0,o.createComponentVNode)(2,a.Flex.Item,{children:(0,o.createComponentVNode)(2,a.NumberInput,{className:"minimap-controller__number-inputs",minValue:1,maxValue:300,value:V,format:function(e){return"y, "+e},onDrag:function(e,t){return function(e){u.pos_y=e}(t)}})})]}),(0,o.createComponentVNode)(2,a.Button,{fluid:!0,textAlign:"center",color:f?"orange":"default",content:f?"Select Position":"Select (x, y) From Map",onClick:function(){return l("location_from_minimap")},mt:"10px"}),(0,o.createComponentVNode)(2,a.Flex,{mt:"20px",justify:"space-between",children:[(0,o.createComponentVNode)(2,a.Flex.Item,{children:(0,o.createComponentVNode)(2,a.Button,{icon:"check",color:"green",content:"Confirm",onClick:function(){return S(!w),void l("new_marker",{name:x,icon:N,pos_x:b,pos_y:V})}})}),(0,o.createComponentVNode)(2,a.Flex.Item,{children:(0,o.createComponentVNode)(2,a.Button,{icon:"xmark",color:"red",content:"Cancel",onClick:function(){return S(!w),void l("cancel_new_marker")}})})]})]})]})})}),(0,o.createComponentVNode)(2,a.Section,{scrollable:!0,fill:!0,children:(0,o.createComponentVNode)(2,a.Flex,{direction:"column",children:(0,o.createComponentVNode)(2,a.Flex.Item,{children:(0,o.createComponentVNode)(2,a.Flex.Item,{children:Object.keys(h).map((function(e){return(0,o.createComponentVNode)(2,a.Flex,{className:"minimap-controller__marker-list",children:[(0,o.createComponentVNode)(2,a.Flex.Item,{inline:!0,children:[(0,o.createComponentVNode)(2,a.Flex.Item,{fontSize:1.1,bold:!0,children:(0,c.capitalize)(u.minimap_markers[e].name)}),(0,o.createComponentVNode)(2,a.Flex.Item,{inline:!0,lineHeight:1.7,children:u.minimap_markers[e].pos})]}),(0,o.createComponentVNode)(2,a.Flex.Item,{inline:!0,children:[(0,o.createComponentVNode)(2,a.Button,{className:"minimap-controller__buttons",icon:u.minimap_markers[e].visible?"eye":"eye-slash",color:u.minimap_markers[e].visible?"green":"red",onClick:function(){return l("toggle_visibility",{index:u.minimap_markers[e].index})}}),(0,o.createComponentVNode)(2,a.Button,{className:"minimap-controller__buttons",icon:"trash-alt",color:"red",disabled:!u.minimap_markers[e].can_be_deleted,onClick:function(){return l("delete_marker",{index:u.minimap_markers[e].index})}})]})]},u.minimap_markers[e])}))})})})})]})})]})})})}},5244:function(e,t,n){"use strict";t.__esModule=!0,t.MixingDesk=void 0;var o=n(96323),r=n(31246),a=n(26949),i=n(2381),c=n(1033);t.MixingDesk=function(e,t){var n=(0,r.useBackend)(t),l=n.act,u=n.data,d=u.voices,s=u.selected_voice,p=u.say_popup,m=(0,r.useSharedState)(t,"message",null),f=m[0],h=m[1];return(0,o.createComponentVNode)(2,i.Window,{height:375,width:370,children:(0,o.createComponentVNode)(2,i.Window.Content,{onkeydown:function(e){var t=String.fromCharCode(e.keyCode),n=!0;if("T"===t)l("say_popup");else if(27===e.keyCode&&p)l("cancel_say"),h("");else if(p)n=!1;else{var o=Number(t);String(o)===t?l("switch_voice",{id:o}):n=!1}n&&e.stopPropagation()},children:[!!p&&(0,o.createComponentVNode)(2,a.Modal,{children:["Say as ",s>0&&s<=d.length?d[s-1].name:"yourself",":",(0,o.createVNode)(1,"br"),(0,o.createComponentVNode)(2,a.Box,{pt:"5px",pr:"10px",textAlign:"center",children:(0,o.createComponentVNode)(2,a.Input,{autoFocus:!0,selfClear:!0,width:20,value:f,onEnter:function(e,t){window.focus(),l("say",{message:t}),h("")},onChange:function(e,t){return h(t)}})}),(0,o.createVNode)(1,"br"),(0,o.createComponentVNode)(2,a.Box,{textAlign:"center",children:[(0,o.createComponentVNode)(2,a.Button,{onClick:function(){l("say",{message:f}),h("")},children:"Say"}),(0,o.createComponentVNode)(2,a.Button,{onClick:function(){l("cancel_say"),h("")},children:"Cancel"})]})]}),(0,o.createComponentVNode)(2,a.Section,{title:"Voice Synthesizer",children:[(0,o.createComponentVNode)(2,a.Divider),(0,o.createComponentVNode)(2,a.LabeledList,{children:[d.map((function(e,t){return(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:t+1+" "+(0,c.truncate)(e.name,18)+(e.accent?" ["+e.accent+"]":""),labelColor:t+1===s?"red":"label",children:[(0,o.createComponentVNode)(2,a.Button,{icon:"trash-alt",onClick:function(){return l("remove_voice",{id:t+1})}}),(0,o.createComponentVNode)(2,a.Button,{icon:"bullhorn",onClick:function(){return l("say_popup",{id:t+1})}})]},e.name)})),(0,o.createComponentVNode)(2,a.LabeledList.Item,{children:(0,o.createComponentVNode)(2,a.Stack,{align:"center",children:[(0,o.createComponentVNode)(2,a.Stack.Item,{children:(0,o.createComponentVNode)(2,a.Button,{icon:"plus",onClick:function(){return l("add_voice")},disabled:d.length>=9})}),(0,o.createComponentVNode)(2,a.Stack.Item,{children:(0,o.createComponentVNode)(2,a.Tooltip,{position:"right",content:"Press T to talk and 1-9 keys to switch voices. Press 0 to reset to your normal voice.",children:(0,o.createComponentVNode)(2,a.Icon,{name:"question-circle"})})})]})})]})]})]})})}},71417:function(e,t,n){"use strict";t.__esModule=!0,t.MusicInstrument=void 0;var o=n(96323),r=n(1060),a=n(31246),i=n(26949),c=n(2381);t.MusicInstrument=function(e,t){var n=(0,a.useBackend)(t),l=n.act,u=n.data,d=u.name,s=u.notes,p=u.volume,m=u.transpose,f=u.keybindToggle,h=u.noteKeysString,g=(0,a.useLocalState)(t,"keyboardBindingsOrder",h.split("")),C=g[0],N=g[1],v=(0,a.useLocalState)(t,"keyboardActivekeys",{}),b=v[0],V=v[1],y=(0,a.useLocalState)(t,"keyOffset",0),x=y[0],I=y[1],k=function(){l(!f?"play_keyboard_on":"play_keyboard_off")},w=function(e){return e+m>=0&&e+m<s.length},S=function(e){if(w(e)&&!b[e]){l("play_note",{note:e+m,volume:p});var t=b;t[s[e]]=!0,V(t)}},_=function(e){if(w(e)){var t=b;t[s[e]]=!1,V(t)}},M=function(e){var t=x+C.findIndex((function(t){return t===e}));return t>=0?t:-1};return(0,o.createComponentVNode)(2,c.Window,{title:d,width:50+30*s.length,height:410,children:(0,o.createComponentVNode)(2,c.Window.Content,{onKeyUp:function(e){if(f){var t=M(e.key);_(t)}},onKeyDown:function(e){if(f){var t=M(e.key);S(t)}"Control"===e.key&&k()},children:(0,o.createComponentVNode)(2,i.Box,{className:"instrument__keyboardwrapper",children:[(0,o.createComponentVNode)(2,i.Box,{className:"instrument__outerpanel",children:[(0,o.createComponentVNode)(2,i.Box,{className:"instrument__speaker"}),(0,o.createComponentVNode)(2,i.Flex,{direction:"column",children:[(0,o.createComponentVNode)(2,i.Box,{className:"instrument__panel",children:[(0,o.createComponentVNode)(2,i.Box,{className:"instrument__keyboardsupport",children:[(0,o.createComponentVNode)(2,i.Button,{className:"instrument__toggle-keyboard-button",title:"Toggle keyboard support (toggle with ctrl)",onClick:k,icon:"keyboard"}),(0,o.createComponentVNode)(2,i.Box,{className:"instrument__keybind-indicator",style:{"box-shadow":"0px 0px 5px "+(f?"#1b9b37":"#5a1919"),background:f?"#1b9b37":"#5a1919"}})]}),(0,o.createComponentVNode)(2,i.Box,{className:"instrument__panel-input",children:[(0,o.createComponentVNode)(2,i.Knob,{animated:!0,stepPixelSize:24,minValue:-24,maxValue:24,value:x,onDrag:function(e,t){return I(t)},title:"Keybind offset"}),(0,o.createVNode)(1,"span",null,"Offset",16)]}),(0,o.createComponentVNode)(2,i.Box,{className:"instrument_panel-info",children:(0,o.createVNode)(1,"h1",null,d.toUpperCase(),0,{style:{"text-align":"center"}})}),(0,o.createComponentVNode)(2,i.Box,{className:"instrument__panel-input",children:[(0,o.createComponentVNode)(2,i.Knob,{animated:!0,stepPixelSize:1,minValue:0,maxValue:100,title:"Volume",value:p,onDrag:function(e,t){l("set_volume",{value:t})}}),(0,o.createVNode)(1,"span",null,"Volume",16)]}),(0,o.createComponentVNode)(2,i.Box,{className:"instrument__panel-input",children:[(0,o.createComponentVNode)(2,i.Knob,{animated:!0,stepPixelSize:6,minValue:-12,maxValue:12,title:"Transpose",value:m,onDrag:function(e,t){l("set_transpose",{value:t})}}),(0,o.createVNode)(1,"span",null,"Transpose",16)]})]}),(0,o.createComponentVNode)(2,i.Box,{className:"instrument__keyorder",children:[(0,o.createComponentVNode)(2,i.Box,{className:"instrument__instructions",fontSize:"1.1em",children:"Key binding order for keyboard input"}),(0,o.createComponentVNode)(2,i.Input,{className:"instrument__input_keyorder",value:C.join(""),onInput:function(e,t){return N(t.split(""))}}),(0,o.createComponentVNode)(2,i.Box,{className:"instrument__instructions",fontSize:"0.8em",bold:!0,children:"Type in the order you wish the keybindings to be placed"})]})]}),(0,o.createComponentVNode)(2,i.Box,{className:"instrument__speaker"})]}),(0,o.createVNode)(1,"ul","instruments__piano",s.map((function(e,t){var n=e.includes("-"),a=C[t-x],c=n?"instruments__piano-key-black":"instruments__piano-key-white",l=["d","e","g","a","b"].includes(e.split("")[0])&&!n?"instruments__piano-key-white-offset":"";return(0,o.createVNode)(1,"li",(0,r.classes)(["instruments__piano-key",c,l,b[s[t]]?n?"instruments__piano-key-black-active":"instruments__piano-key-white-active":""]),(0,o.createComponentVNode)(2,i.Box,{className:"instruments__notedetails",children:[a&&(0,o.createComponentVNode)(2,i.Box,{className:"instruments__notekey",children:a}),(0,o.createComponentVNode)(2,i.Box,{className:"instruments__notename",children:e.replace("-","#")})]}),2,{onMouseDown:function(){return S(t)},onMouseLeave:function(){return _(t)},onMouseUp:function(){return _(t)}},t)})),0)]})})})}},14086:function(e,t,n){"use strict";t.__esModule=!0,t.NuclearReactor=void 0;var o=n(96323),r=n(31246),a=n(26949),i=n(2381),c=n(18331),l=n(48175),u=n(97622),d=273.15,s=function(e){var t=e.onClick,n=e.components,r=e.rowID,i=e.emptySlotIcon;return(0,o.createComponentVNode)(2,a.Table.Row,{children:n.map((function(e,n){if(null===e)return(0,o.createComponentVNode)(2,a.Table.Cell,{children:(0,o.createComponentVNode)(2,a.Button,{fluid:!0,color:"transparent",m:1,onClick:function(){return t("slot",{x:r+1,y:n+1})},children:(0,o.createVNode)(1,"img",null,null,1,{src:"data:image/png;base64,"+i,style:{"vertical-align":"middle","border-color":"#AAAAAA","border-style":"solid","border-radius":"4px","horizontal-align":"middle"}})},name)});var s=e.x,p=e.y,m=e.name,f=e.img,h=e.temp,g=e.extra,C=e.flux;return(0,o.createComponentVNode)(2,a.Table.Cell,{children:(0,o.createComponentVNode)(2,a.Button,{fluid:!0,tooltip:(0,o.createFragment)([(0,c.capitalize)(m),(0,o.createVNode)(1,"br"),(0,u.round)(h-d,2),(0,o.createTextVNode)(" \xb0C"),""!==g?(0,o.createFragment)([(0,o.createVNode)(1,"br"),g],0):"",null!==C?(0,o.createFragment)([(0,o.createVNode)(1,"br"),C,(0,o.createTextVNode)(" Neutrons")],0):""],0),color:"transparent",m:1,onClick:function(){return t("slot",{x:s,y:p})},children:(0,o.createVNode)(1,"img",null,null,1,{src:"data:image/png;base64,"+f,style:{"box-shadow":"0px 0px 20px "+(0,l.getTemperatureColor)(h,2e3),"vertical-align":"middle","border-color":""+(0,l.getTemperatureColor)(h,2e3),"border-style":"solid","border-radius":"4px","horizontal-align":"middle"}})},m)})}))})},p=function(e){var t=e.onClick,n=e.components,r=e.emptySlotIcon;return(0,o.createComponentVNode)(2,a.Table,{children:n.map((function(e,n){e.comp;return(0,o.createComponentVNode)(2,a.Table.Row,{children:(0,o.createComponentVNode)(2,s,{rowID:n,components:e,onClick:t,emptySlotIcon:r})},!0)}))})};t.NuclearReactor=function(e,t){var n=(0,r.useBackend)(t),c=n.act,l=n.data,s=l.gridW,m=l.gridH,f=l.emptySlotIcon,h=l.components,g=l.reactorTemp,C=l.reactorRads,N=l.configuredControlRodLevel,v=l.actualControlRodLevel;return(0,o.createComponentVNode)(2,i.Window,{resizable:!0,title:"Nuclear Reactor",width:500,height:700,children:(0,o.createComponentVNode)(2,i.Window.Content,{children:[(0,o.createComponentVNode)(2,a.Section,{children:(0,o.createComponentVNode)(2,p,{gridW:s,gridH:m,onClick:c,components:h,emptySlotIcon:f})}),(0,o.createComponentVNode)(2,a.Section,{children:(0,o.createComponentVNode)(2,a.Flex,{justify:"space-between",align:"center",children:[(0,o.createComponentVNode)(2,a.Flex.Item,{children:[(0,o.createComponentVNode)(2,a.Box,{children:"Reactor Temperature:"}),(0,o.createComponentVNode)(2,a.RoundGauge,{minValue:0-d,maxValue:1500,size:5,value:g,format:function(e){return(0,u.round)(e-d,2)+" \xb0C"},alertAfter:1200,ranges:{good:[0-d,1e3],average:[1e3,1200],bad:[1200,1500]}})]}),(0,o.createComponentVNode)(2,a.Flex.Item,{children:[(0,o.createComponentVNode)(2,a.Box,{children:"Radiation Level:"}),(0,o.createComponentVNode)(2,a.RoundGauge,{minValue:0,maxValue:100,size:5,value:C,format:function(e){return(0,u.round)(e,1)+" clicks"},alertAfter:15,ranges:{good:[0,5],average:[5,50],bad:[50,100]}})]})]})}),(0,o.createComponentVNode)(2,a.Section,{children:(0,o.createComponentVNode)(2,a.Flex,{justify:"space-between",align:"center",children:[(0,o.createComponentVNode)(2,a.Flex.Item,{children:[(0,o.createComponentVNode)(2,a.Box,{children:"Control Rod Insertion:"}),(0,o.createComponentVNode)(2,a.RoundGauge,{minValue:0,maxValue:100,size:5,value:v,format:function(e){return(0,u.round)(e,1)+"%"},alertBefore:20,ranges:{bad:[0,20],average:[20,80],good:[80,100]}})]}),(0,o.createComponentVNode)(2,a.Flex.Item,{children:[(0,o.createComponentVNode)(2,a.Button,{color:"transparent",icon:"angle-double-left",onClick:function(){return c("adjustCR",{crvalue:0})}}),(0,o.createComponentVNode)(2,a.Button,{color:"transparent",icon:"angle-left",onClick:function(){return c("adjustCR",{crvalue:N-5})}}),N," %",(0,o.createComponentVNode)(2,a.Button,{color:"transparent",icon:"angle-right",onClick:function(){return c("adjustCR",{crvalue:N+5})}}),(0,o.createComponentVNode)(2,a.Button,{color:"transparent",icon:"angle-double-right",onClick:function(){return c("adjustCR",{crvalue:100})}}),(0,o.createComponentVNode)(2,a.Knob,{animated:!0,size:3,value:N,minValue:0,maxValue:100,format:function(e){return e+"%"},onDrag:function(e,t){return c("adjustCR",{crvalue:t})}})]})]})})]})})}},12660:function(e,t,n){"use strict";t.__esModule=!0,t.NumberInputModal=void 0;var o=n(96323),r=n(55631),a=n(34277),i=n(57890),c=n(31246),l=n(26949),u=n(2381);t.NumberInputModal=function(e,t){var n=(0,c.useBackend)(t),s=n.act,p=n.data,m=p.message,f=p.init_value,h=p.round_input,g=p.timeout,C=p.title,N=p.theme,v=(0,c.useLocalState)(t,"input",f),b=v[0],V=v[1],y=125+Math.ceil((null==m?void 0:m.length)/3);return(0,o.createComponentVNode)(2,u.Window,{title:C,width:270,height:y,theme:N||"nanotrasen",children:[g&&(0,o.createComponentVNode)(2,r.Loader,{value:g}),(0,o.createComponentVNode)(2,u.Window.Content,{onKeyDown:function(e){var t=window.event?e.which:e.keyCode;t===i.KEY_ENTER&&s("submit",{entry:b}),t===i.KEY_ESCAPE&&s("cancel")},children:(0,o.createComponentVNode)(2,l.Section,{fill:!0,children:(0,o.createComponentVNode)(2,l.Stack,{fill:!0,vertical:!0,children:[(0,o.createComponentVNode)(2,l.Stack.Item,{children:(0,o.createComponentVNode)(2,l.Box,{color:"label",children:m})}),(0,o.createComponentVNode)(2,l.Stack.Item,{children:(0,o.createComponentVNode)(2,d,{input:b,onClick:function(e){V(h?Math.round(e):e)},onChange:function(e){V(h?Math.round(e):e)}})}),(0,o.createComponentVNode)(2,l.Stack.Item,{pl:4,pr:4,children:(0,o.createComponentVNode)(2,a.InputButtons,{input:b})})]})})})]})};var d=function(e,t){var n=(0,c.useBackend)(t).data,r=n.min_value,a=n.max_value,i=n.init_value,u=e.input,d=e.onClick,s=e.onChange;return(0,o.createComponentVNode)(2,l.Stack,{fill:!0,children:[(0,o.createComponentVNode)(2,l.Stack.Item,{children:(0,o.createComponentVNode)(2,l.Button,{icon:"angle-double-left",onClick:function(){return d(r||0)},tooltip:"Minimum"})}),(0,o.createComponentVNode)(2,l.Stack.Item,{grow:!0,children:(0,o.createComponentVNode)(2,l.NumberInput,{autoFocus:!0,autoSelect:!0,fluid:!0,minValue:r,maxValue:a,onChange:function(e,t){return s(t)},onDrag:function(e,t){return s(t)},value:null!==u?u:i})}),(0,o.createComponentVNode)(2,l.Stack.Item,{children:(0,o.createComponentVNode)(2,l.Button,{icon:"angle-double-right",onClick:function(){return d(null!==a?a:1e4)},tooltip:"Max"})}),(0,o.createComponentVNode)(2,l.Stack.Item,{children:(0,o.createComponentVNode)(2,l.Button,{icon:"redo",onClick:function(){return d(i||0)},tooltip:"Reset"})})]})}},55223:function(e,t,n){"use strict";t.__esModule=!0,t.ObserverMenu=void 0;var o=n(96323),r=n(31246),a=n(2381),i=n(26949),c=function(e,t){var n=(0,r.useBackend)(t).act,a=e.obsObject,c=null,l=a.name,u=null;return a.dead&&(c="skull"),a.name!==a.real_name&&(l+=" ("+a.real_name+")"),null!==a.job&&(u="Job: "+a.job),a.dup_name_count>0&&(l+=" #"+a.dup_name_count),a.ghost_count>0&&(c="ghost",l=a.ghost_count+" "+l),null!==a.antag&&(l+=" ["+a.antag+"]"),(0,o.createComponentVNode)(2,i.Button,{icon:c,onClick:function(){return n("observe",{targetref:a.ref})},tooltip:u,children:l},a.ref)};t.ObserverMenu=function(e,t){var n=(0,r.useBackend)(t),l=n.act,u=n.data,d=(0,r.useLocalState)(t,"searchQuery",""),s=d[0],p=d[1],m=u.mydata.filter((function(e){var t,n,o,r;return(null==e||null==(t=e.name)?void 0:t.toLowerCase().includes(s.toLowerCase()))||(null==e||null==(n=e.real_name)?void 0:n.toLowerCase().includes(s.toLowerCase()))||(null==e||null==(o=e.job)?void 0:o.toLowerCase().includes(s.toLowerCase()))||(null==e||null==(r=e.antag)?void 0:r.toLowerCase().includes(s.toLowerCase()))})),f=(0,r.useLocalState)(t,"filterDead",!1),h=f[0],g=f[1];return(0,o.createComponentVNode)(2,a.Window,{title:"Choose something to observe",width:600,height:600,children:(0,o.createComponentVNode)(2,a.Window.Content,{scrollable:!0,children:(0,o.createComponentVNode)(2,i.Section,{fill:!0,title:"Observables",buttons:(0,o.createComponentVNode)(2,i.Flex,{children:[(0,o.createComponentVNode)(2,i.Button,{fluid:!0,id:"random_observe_button",disabled:0===u.mydata.filter((function(e){return e.player&&!e.dead})).length,onClick:function(){var e,t,n;return l("observe",{targetref:null==(t=u.mydata,n=t.filter((function(e){return e.player&&!e.dead})),e=n[Math.floor(Math.random()*n.length)])?void 0:e.ref})},icon:"random",tooltip:"Observe a random player"}),(0,o.createComponentVNode)(2,i.Button.Checkbox,{fluid:!0,icon:"skull",tooltip:h?"Show dead mobs":"Hide dead mobs",id:"dead_filter_button",checked:!h,onClick:function(){return g(!h)}}),(0,o.createComponentVNode)(2,i.Input,{width:20,autoFocus:!0,autoSelect:!0,fluid:!0,id:"search_bar",onInput:function(e,t){var n;(n=t)!==s&&p(n)},placeholder:"Search by name or job",value:s})]}),children:[(0,o.createComponentVNode)(2,i.Collapsible,{title:"Antagonists",open:!!u.dnrset,color:"red",children:[!u.dnrset&&(0,o.createComponentVNode)(2,i.BlockQuote,{children:"You must set DNR to view the antagonists"}),m.filter((function(e){return null!==e.antag&&!(e.dead&&h)})).map((function(e){return(0,o.createComponentVNode)(2,c,{obsObject:e},e.ref)}))]},"Antags"),(0,o.createComponentVNode)(2,i.Collapsible,{title:"Players",open:!0,color:"green",children:m.filter((function(e){return e.player&&!(e.dead&&h)})).map((function(e){return(0,o.createComponentVNode)(2,c,{obsObject:e},e.ref)}))},"Players"),(0,o.createComponentVNode)(2,i.Collapsible,{title:"NPCs",color:"blue",children:m.filter((function(e){return e.npc&&!(e.dead&&h)})).map((function(e){return(0,o.createComponentVNode)(2,c,{obsObject:e},e.ref)}))},"NPCs"),(0,o.createComponentVNode)(2,i.Collapsible,{title:"Objects",color:"brown",children:m.filter((function(e){return!e.npc&&!e.player})).map((function(e){return(0,o.createComponentVNode)(2,c,{obsObject:e},e.ref)}))},"Objects")]})})})}},35851:function(e,t,n){"use strict";t.__esModule=!0,t.OperatingComputer=void 0;var o=n(96323),r=n(31246),a=n(26949),i=n(2381),c=n(65751),l=n(84200),u=n(51418),d=n(818),s=n(18331),p=n(9720);t.OperatingComputer=function(e,t){var n=(0,r.useSharedState)(t,"tabIndex",1),c=n[0],l=n[1];return(0,o.createComponentVNode)(2,i.Window,{title:"Operating Computer",width:"560",height:"760",children:(0,o.createComponentVNode)(2,i.Window.Content,{scrollable:!0,children:[(0,o.createComponentVNode)(2,a.Tabs,{children:(0,o.createComponentVNode)(2,a.Tabs.Tab,{selected:1===c,onClick:function(){return l(1)},children:"Patient Health"})}),(0,o.createComponentVNode)(2,m,{tabIndex:c})]})})};var m=function(e){if(1===e.tabIndex)return(0,o.createComponentVNode)(2,g)},f=function(e){var t=e.occupied,n=e.patient_status,r=e.isCrit,i="NONE",c="grey";return t&&(2===n?(i="DEAD",c="red"):r?(i="CRIT",c="orange"):0!==n&&n?1===n&&(i="UNCON",c="yellow"):(i="STABLE",c="green")),(0,o.createComponentVNode)(2,a.Stack.Item,{width:20,textAlign:"right",children:[(0,o.createComponentVNode)(2,a.Box,{fontSize:1,children:"Status"}),(0,o.createComponentVNode)(2,a.Box,{fontSize:1.5,children:(0,o.createComponentVNode)(2,a.Box,{color:c,children:i})})]})},h=function(e){var t=e.health_text,n=e.health_color;return(0,o.createComponentVNode)(2,a.Stack.Item,{width:20,textAlign:"right",children:[(0,o.createComponentVNode)(2,a.Box,{fontSize:1,children:"Overall Health"}),(0,o.createComponentVNode)(2,a.Box,{fontSize:1.5,children:(0,o.createComponentVNode)(2,a.Box,{color:n,children:[t,(0,o.createComponentVNode)(2,a.Box,{as:"span",color:"white",children:"%"})]})})]})},g=function(e,t){var n=(0,r.useBackend)(t).data;return(0,o.createComponentVNode)(2,a.Section,{children:[(0,o.createComponentVNode)(2,w,{occupied:n.occupied,patient_name:n.patient_name,patient_health:n.current_health,patient_max_health:n.max_health,patient_status:n.patient_status}),(0,o.createComponentVNode)(2,y),(0,o.createComponentVNode)(2,a.Section,{title:"Key Health Indicators",children:(0,o.createComponentVNode)(2,p.KeyHealthIndicators,{mobData:n})}),(0,o.createComponentVNode)(2,x,{occupied:n.occupied,organs:n.organ_status,limbs:n.limb_status}),(0,o.createComponentVNode)(2,I,{occupied:n.occupied,reagent_container:n.reagent_container}),(0,o.createComponentVNode)(2,k,{occupied:n.occupied,age:n.age,blood_type:n.blood_type,blood_color_value:n.blood_color_value,blood_color_name:n.blood_color_name,clone_generation:n.clone_generation,cloner_defect_count:n.cloner_defect_count,genetic_stability:n.genetic_stability})]})},C=function(e){var t=e.metric,n=e.value,r=e.metric_data,i=e.title;return(0,o.createComponentVNode)(2,a.Stack.Item,{width:25,children:(0,o.createComponentVNode)(2,c.HealthStat,{type:t,children:[i,(0,o.createVNode)(1,"br"),(0,o.createComponentVNode)(2,a.Box,{fontSize:4,children:n}),(0,o.createComponentVNode)(2,a.Box,{children:(0,o.createComponentVNode)(2,a.Chart.Line,{mt:"5px",height:"5em",data:r,rangeX:[0,r.length-1],rangeY:[0,Math.max(100,(0,d.getStatsMax)(r))],strokeColor:l.COLORS.damageType[t],fillColor:l.COLORS.damageTypeFill[t]})})]})})},N=function(e){var t=e.occupied,n=e.organs;if(t)return(0,o.createComponentVNode)(2,a.Stack.Item,{width:20,children:(0,o.createComponentVNode)(2,a.Table,{children:[(0,o.createComponentVNode)(2,a.Table.Row,{children:[(0,o.createComponentVNode)(2,a.Table.Cell,{header:!0,textAlign:"right",children:"Organ"}),(0,o.createComponentVNode)(2,a.Table.Cell,{header:!0,children:"Status"})]}),n.map((function(e){return(0,o.createComponentVNode)(2,v,{organ:e.organ,state:e.state,color:e.color,special:e.special},e.organ)}))]})})},v=function(e){var t=e.organ,n=e.state,r=e.color,i=e.special;if("Okay"!==n||i)return(0,o.createComponentVNode)(2,a.Table.Row,{children:[(0,o.createComponentVNode)(2,a.Table.Cell,{header:!0,textAlign:"right",width:10,children:[(0,s.capitalize)((0,s.spaceUnderscores)(t)),":"]}),(0,o.createComponentVNode)(2,a.Table.Cell,{width:10,color:r,bold:"Missing"===n||"Dead"===n||"Critical"===n,children:["Okay"!==n&&n,i&&(0,o.createComponentVNode)(2,a.Box,{color:"white",children:i})]})]})},b=function(e){var t=e.occupied,n=e.limbs;if(t)return(0,o.createComponentVNode)(2,a.Stack.Item,{width:20,children:(0,o.createComponentVNode)(2,a.Table,{children:[(0,o.createComponentVNode)(2,a.Table.Row,{children:[(0,o.createComponentVNode)(2,a.Table.Cell,{header:!0,textAlign:"right",children:"Limb"}),(0,o.createComponentVNode)(2,a.Table.Cell,{header:!0,children:"Status"})]}),n.map((function(e){return(0,o.createComponentVNode)(2,V,{limb:e.limb,status:e.status},e.limb)}))]})})},V=function(e){var t=e.limb,n=e.status;if("Okay"!==n)return(0,o.createComponentVNode)(2,a.Table.Row,{children:[(0,o.createComponentVNode)(2,a.Table.Cell,{header:!0,textAlign:"right",width:10,children:[(0,s.capitalize)((0,s.spaceUnderscores)(t)),":"]}),(0,o.createComponentVNode)(2,a.Table.Cell,{width:10,color:"Missing"===n?"red":"white",bold:"Missing"===n,children:n})]})},y=function(e,t){var n=(0,r.useBackend)(t).data,i=(0,d.processStatsData)(n.patient_data),c=n.occupied?Math.floor(n.oxygen).toString():"--",l=n.occupied&&i?i.oxygen:[],u=n.occupied?Math.floor(n.toxin).toString():"--",s=n.occupied&&i?i.toxin:[],p=n.occupied?Math.floor(n.burn).toString():"--",m=n.occupied&&i?i.burn:[],f=n.occupied?Math.floor(n.brute).toString():"--",h=n.occupied&&i?i.brute:[];return(0,o.createComponentVNode)(2,a.Section,{title:"Vitals",children:(0,o.createComponentVNode)(2,a.Stack,{textAlign:"center",children:[(0,o.createComponentVNode)(2,C,{title:"Suffocation",value:c,metric_data:l,metric:"oxy"}),(0,o.createComponentVNode)(2,C,{title:"Toxin",value:u,metric_data:s,metric:"toxin"}),(0,o.createComponentVNode)(2,C,{title:"Burn",value:p,metric_data:m,metric:"burn"}),(0,o.createComponentVNode)(2,C,{title:"Brute",value:f,metric_data:h,metric:"brute"})]})})},x=function(e){var t=e.occupied,n=e.organs,r=e.limbs;return(0,o.createComponentVNode)(2,a.Section,{title:"Anatomical Anomalies",color:!t&&"grey",children:(0,o.createComponentVNode)(2,a.Stack,{children:[!!t&&(0,o.createComponentVNode)(2,N,{occupied:t,organs:n}),!!t&&(0,o.createComponentVNode)(2,b,{occupied:t,limbs:r}),!t&&"No Patient Detected"]})})},I=function(e){var t=e.occupied,n=e.reagent_container;return(0,o.createComponentVNode)(2,a.Section,{title:"Bloodstream Contents",children:[!!t&&(0,o.createComponentVNode)(2,u.ReagentGraph,{container:n}),!t&&"No Patient Detected"]})},k=function(e){var t=e.occupied,n=e.age,r=e.blood_type,i=e.blood_color_value,c=e.blood_color_name,l=e.clone_generation,u=e.cloner_defect_count,d=e.genetic_stability;return t?(0,o.createComponentVNode)(2,a.Section,{title:"Genetic Analysis",children:(0,o.createComponentVNode)(2,a.Stack,{children:[(0,o.createComponentVNode)(2,a.Stack.Item,{width:20,children:(0,o.createComponentVNode)(2,a.Table,{children:[(0,o.createComponentVNode)(2,a.Table.Row,{children:[(0,o.createComponentVNode)(2,a.Table.Cell,{header:!0,textAlign:"right",children:"Age:"}),(0,o.createComponentVNode)(2,a.Table.Cell,{children:n})]}),(0,o.createComponentVNode)(2,a.Table.Row,{children:[(0,o.createComponentVNode)(2,a.Table.Cell,{header:!0,textAlign:"right",children:"Blood Type:"}),(0,o.createComponentVNode)(2,a.Table.Cell,{children:r})]}),(0,o.createComponentVNode)(2,a.Table.Row,{children:[(0,o.createComponentVNode)(2,a.Table.Cell,{header:!0,textAlign:"right",children:"Blood Color:"}),(0,o.createComponentVNode)(2,a.Table.Cell,{children:[(0,o.createComponentVNode)(2,a.ColorBox,{backgroundColor:i})," ",(0,o.createVNode)(1,"span",null,c,0)]})]})]})}),(0,o.createComponentVNode)(2,a.Stack.Item,{width:14,children:(0,o.createComponentVNode)(2,a.Table,{children:[(0,o.createComponentVNode)(2,a.Table.Row,{children:[(0,o.createComponentVNode)(2,a.Table.Cell,{header:!0,textAlign:"right",children:"Clone Generation:"}),(0,o.createComponentVNode)(2,a.Table.Cell,{children:l})]}),(0,o.createComponentVNode)(2,a.Table.Row,{children:[(0,o.createComponentVNode)(2,a.Table.Cell,{header:!0,textAlign:"right",children:"Genetic Defects:"}),(0,o.createComponentVNode)(2,a.Table.Cell,{children:u})]}),(0,o.createComponentVNode)(2,a.Table.Row,{children:[(0,o.createComponentVNode)(2,a.Table.Cell,{header:!0,textAlign:"right",children:"Genetic Stability:"}),(0,o.createComponentVNode)(2,a.Table.Cell,{children:d})]})]})})]})}):(0,o.createComponentVNode)(2,a.Section,{title:"Genetic Analysis",color:"grey",children:"No Patient Detected"})},w=function(e){var t=e.occupied,n=e.patient_name,r=e.patient_health,i=e.patient_max_health,c=e.patient_status,l=t?"white":"grey",u=t&&r<0,d=t?Math.floor(100*r/i):0,s="--",p="grey";return t&&(i<=0?(p="purple",s="???"):(s=d.toString(),p=d>=51&&d<=100?"green":d>=1&&d<=50?"yellow":"red")),(0,o.createComponentVNode)(2,a.Stack,{children:[(0,o.createComponentVNode)(2,a.Stack.Item,{width:60,children:[(0,o.createComponentVNode)(2,a.Box,{fontSize:1,children:"Patient Name"}),(0,o.createComponentVNode)(2,a.Box,{fontSize:1.5,color:l,children:[!!n&&n,!n&&"No Patient Detected"]})]}),(0,o.createComponentVNode)(2,h,{health_text:s,health_color:p}),(0,o.createComponentVNode)(2,f,{occupied:t,patient_status:c,isCrit:u})]})}},36273:function(){},69412:function(e,t,n){"use strict";t.__esModule=!0,t.PaperSheet=t.PaperSheetView=void 0;var o,r=n(96323),a=n(57723),i=(o=n(12800))&&o.__esModule?o:{"default":o},c=n(31246),l=n(26949),u=n(2381),d=n(97622),s=n(81890);function p(e,t){e.prototype=Object.create(t.prototype),e.prototype.constructor=e,g(e,t)}function m(e,t){var n="undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(n)return(n=n.call(e)).next.bind(n);if(Array.isArray(e)||(n=function(e,t){if(!e)return;if("string"==typeof e)return f(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);"Object"===n&&e.constructor&&(n=e.constructor.name);if("Map"===n||"Set"===n)return Array.from(e);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return f(e,t)}(e))||t&&e&&"number"==typeof e.length){n&&(e=n);var o=0;return function(){return o>=e.length?{done:!0}:{done:!1,value:e[o++]}}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}function f(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,o=new Array(t);n<t;n++)o[n]=e[n];return o}function h(){h=function(e,t){return new n(e,undefined,t)};var e=RegExp.prototype,t=new WeakMap;function n(e,o,r){var a=new RegExp(e,o);return t.set(a,r||t.get(e)),g(a,n.prototype)}function o(e,n){var o=t.get(n);return Object.keys(o).reduce((function(t,n){return t[n]=e[o[n]],t}),Object.create(null))}return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),t&&g(e,t)}(n,RegExp),n.prototype.exec=function(t){var n=e.exec.call(this,t);return n&&(n.groups=o(n,this)),n},n.prototype[Symbol.replace]=function(n,r){if("string"==typeof r){var a=t.get(this);return e[Symbol.replace].call(this,n,r.replace(/\$<([^>]+)>/g,(function(e,t){return"$"+a[t]})))}if("function"==typeof r){var i=this;return e[Symbol.replace].call(this,n,(function(){var e=arguments;return"object"!=typeof e[e.length-1]&&(e=[].slice.call(e)).push(o(e,i)),r.apply(this,e)}))}return e[Symbol.replace].call(this,n,r)},h.apply(this,arguments)}function g(e,t){return g=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e},g(e,t)}var C=5e3,N=function(e,t,n,o){return void 0===o&&(o=!1),'<span style="color:'+n+";font-family:"+t+";"+(o?"font-weight: bold;":"")+'">'+e+"</span>"},v=/\[(_+)\]/g,b=h(/\[<input[\t-\r \xA0\u1680\u2000-\u200A\u2028\u2029\u202F\u205F\u3000\uFEFF]+(?!disabled)(.*?)[\t-\r \xA0\u1680\u2000-\u200A\u2028\u2029\u202F\u205F\u3000\uFEFF]+id="(paperfield_[0-9]+)"(.*?)\/>\]/gm,{id:2}),V=/%s(?:ign)?(?=\\s|$)?/gim,y=function(e,t,n,o,r){var a=e.replace(v,(function(e,a,i,c){var l=function(e,t,n){t=n+"x "+t;var o=document.createElement("canvas").getContext("2d");return o.font=t,o.measureText(e).width}(e,t,n)+"px";return function(e,t,n,o,r,a){return'[<input type="text" style="font:\''+o+"x "+n+"';color:'"+r+"';min-width:"+t+";max-width:"+t+';" id="'+a+'" maxlength='+e+" size="+e+" />]"}(a.length,l,t,n,o,"paperfield_"+r++)}));return{counter:r,text:a}},x=function(e,t){var n=e.image,o=e.opacity,i=e.activeStamp,c={left:n.x+"px",top:n.y+"px",transform:"rotate("+n.rotate+"deg)",opacity:o||1};return n.sprite.match("stamp-.*")?(0,r.createVNode)(1,"img","paper__stamp",null,1,{id:i&&"stamp",style:c,src:(0,a.resolveAsset)(n.sprite)}):(0,r.createComponentVNode)(2,l.Box,{id:i&&"stamp",style:c,className:"paper__stamp-text",children:n.sprite})},I=function(e,t){var n,o,a=e.value,i=void 0===a?"":a,c=e.stamps,u=void 0===c?[]:c,d=e.backgroundColor,s=e.readOnly,p=u||[],m={__html:'<span class="paper-text">'+(n=i,o=s,(o?n.replace(/<input\s[^d]/g,"<input disabled "):n.replace(/<input\sdisabled\s/g,"<input "))+"</span>")};return(0,r.createComponentVNode)(2,l.Box,{className:"paper__page",position:"relative",backgroundColor:d,width:"100%",height:"100%",children:[(0,r.createComponentVNode)(2,l.Box,{color:"black",backgroundColor:d,fillPositionedParent:!0,width:"100%",height:"100%",dangerouslySetInnerHTML:m,p:"10px"}),p.map((function(e,t){return(0,r.createComponentVNode)(2,x,{image:{sprite:e[0],x:e[1],y:e[2],rotate:e[3]}},e[0]+t)}))]})};t.PaperSheetView=I;var k=function(e){function t(t,n){var o;return(o=e.call(this,t,n)||this).state={x:0,y:0,rotate:0},o.style=null,o.handleMouseMove=function(e){var t=o.findStampPosition(e);t&&(!function(e){e.stopPropagation&&e.stopPropagation(),e.preventDefault&&e.preventDefault(),e.cancelBubble=!0,e.returnValue=!1}(e),o.setState({x:t[0],y:t[1],rotate:t[2]}))},o.handleMouseClick=function(e){e.pageY<=30||(0,(0,c.useBackend)(o.context).act)("stamp",{x:o.state.x,y:o.state.y,r:o.state.rotate})},o}p(t,e);var n=t.prototype;return n.findStampPosition=function(e){var t,n=document.querySelector(".Layout__content");e.shiftKey&&(t=!0);var o=document.getElementById("stamp");if(o){var r=o.clientHeight,a=o.clientWidth,i=t?this.state.y:e.pageY+n.scrollTop-r,c=t?this.state.x:e.pageX-a/2,l=n.clientWidth-a,u=n.clientHeight+n.scrollTop-r,s=Math.atan2(e.pageX-c,e.pageY-i),p=t?s*(180/Math.PI)*-1:this.state.rotate;return[(0,d.clamp)(c,0,l),(0,d.clamp)(i,0,u),p]}},n.componentDidMount=function(){document.addEventListener("mousemove",this.handleMouseMove),document.addEventListener("click",this.handleMouseClick)},n.componentWillUnmount=function(){document.removeEventListener("mousemove",this.handleMouseMove),document.removeEventListener("click",this.handleMouseClick)},n.render=function(){var e=this.props,t=e.value,n=e.stampClass,o=e.stamps||[],a={sprite:n,x:this.state.x,y:this.state.y,rotate:this.state.rotate};return(0,r.createFragment)([(0,r.createComponentVNode)(2,I,{readOnly:!0,value:t,stamps:o}),(0,r.createComponentVNode)(2,x,{activeStamp:!0,opacity:.5,image:a})],4)},t}(r.Component),w=function(e){function t(t,n){var o;return(o=e.call(this,t,n)||this).state={previewSelected:"Preview",oldText:t.value||"",textAreaText:"",combinedText:t.value||"",showingHelpTip:!1},o}p(t,e);var n=t.prototype;return n.createPreview=function(e,t){void 0===t&&(t=!1);var n,o,r=(0,c.useBackend)(this.context).data,a=r.text,l=r.penColor,u=r.penFont,d=r.isCrayon,p=r.fieldCounter,f=r.editUsr,h={text:a};if((e=e.trim()).length>0){var g=(0,s.sanitizeText)(e),C=(n=l,o=f,g.replace(V,(function(){return N(o,"Times New Roman",n,!0)}))),v=y(C,u,12,l,p),x=function(e){return(0,i["default"])(e,{breaks:!0,smartypants:!0,smartLists:!0,walkTokens:function(e){switch(e.type){case"url":case"autolink":case"reflink":case"link":case"image":e.type="text",e.href=""}},baseUrl:"thisshouldbreakhttp"})}(v.text),I=N(x,u,l,d);h.text+=I,h.fieldCounter=v.counter}if(t){var k=function(e,t,n,o,r){var a;void 0===r&&(r=!1);for(var i={},c=[];null!==(a=b.exec(e));){var l=a[0],u=a.groups.id;if(u){var d=document.getElementById(u);if(0===(d&&d.value?d.value:"").length)continue;var p=(0,s.sanitizeText)(d.value.trim(),[]);if(0===p.length)continue;var f=d.cloneNode(!0);p.match(V)?(f.style.fontFamily="Times New Roman",r=!0,f.defaultValue=o):(f.style.fontFamily=t,f.defaultValue=p),r&&(f.style.fontWeight="bold"),f.style.color=n,f.disabled=!0;var h=document.createElement("div");h.appendChild(f),i[u]=p,c.push({value:"["+h.innerHTML+"]",rawText:l})}}if(c.length>0)for(var g,C=m(c);!(g=C()).done;){var N=g.value;e=e.replace(N.rawText,N.value)}return{text:e,fields:i}}(h.text,u,l,f,d);h.text=k.text,h.formFields=k.fields}return h},n.onInputHandler=function(e,t){var n=this;if(t!==this.state.textAreaText){var o=this.state.oldText.length+this.state.textAreaText.length;if(o>C&&(t=o-C>=t.length?"":t.substr(0,t.length-(o-C)))===this.state.textAreaText)return;this.setState((function(){return{textAreaText:t,combinedText:n.createPreview(t)}}))}},n.finalUpdate=function(e){var t=(0,c.useBackend)(this.context).act,n=this.createPreview(e,!0);t("save",n),this.setState((function(){return{textAreaText:"",previewSelected:"save",combinedText:n.text}}))},n.render=function(){var e=this,t=this.props,n=t.textColor,o=t.fontFamily,a=t.stamps,i=t.backgroundColor;return(0,r.createComponentVNode)(2,l.Flex,{direction:"column",fillPositionedParent:!0,children:[(0,r.createComponentVNode)(2,l.Flex.Item,{children:(0,r.createComponentVNode)(2,l.Tabs,{size:"100%",children:[(0,r.createComponentVNode)(2,l.Tabs.Tab,{textColor:"black",backgroundColor:"Edit"===this.state.previewSelected?"grey":"white",selected:"Edit"===this.state.previewSelected,onClick:function(){return e.setState({previewSelected:"Edit"})},children:"Edit"},"marked_edit"),(0,r.createComponentVNode)(2,l.Tabs.Tab,{textColor:"black",backgroundColor:"Preview"===this.state.previewSelected?"grey":"white",selected:"Preview"===this.state.previewSelected,onClick:function(){return e.setState((function(){return{previewSelected:"Preview",textAreaText:e.state.textAreaText,combinedText:e.createPreview(e.state.textAreaText).text}}))},children:"Preview"},"marked_preview"),(0,r.createComponentVNode)(2,l.Tabs.Tab,{textColor:"black",backgroundColor:"confirm"===this.state.previewSelected?"red":"save"===this.state.previewSelected?"grey":"white",selected:"confirm"===this.state.previewSelected||"save"===this.state.previewSelected,onClick:function(){"confirm"===e.state.previewSelected?e.finalUpdate(e.state.textAreaText):"Edit"===e.state.previewSelected?e.setState((function(){return{previewSelected:"confirm",textAreaText:e.state.textAreaText,combinedText:e.createPreview(e.state.textAreaText).text}})):e.setState({previewSelected:"confirm"})},children:"confirm"===this.state.previewSelected?"Confirm":"Save"},"marked_done"),(0,r.createComponentVNode)(2,l.Tabs.Tab,{textColor:"black",backgroundColor:"white",icon:"question-circle-o",onmouseover:function(){e.setState({showingHelpTip:!0})},onmouseout:function(){e.setState({showingHelpTip:!1})},children:"Help"},"marked_help")]})}),(0,r.createComponentVNode)(2,l.Flex.Item,{grow:1,basis:1,children:"Edit"===this.state.previewSelected&&(0,r.createComponentVNode)(2,l.TextArea,{value:this.state.textAreaText,textColor:n,fontFamily:o,height:window.innerHeight-60+"px",backgroundColor:i,onInput:this.onInputHandler.bind(this)})||(0,r.createComponentVNode)(2,I,{value:this.state.combinedText,stamps:a,fontFamily:o,textColor:n})}),this.state.showingHelpTip&&(0,r.createComponentVNode)(2,S)]})},t}(r.Component);t.PaperSheet=function(e,t){var n=(0,c.useBackend)(t).data,o=n.editMode,a=n.text,i=n.paperColor,d=void 0===i?"white":i,s=n.penColor,p=void 0===s?"black":s,m=n.penFont,f=void 0===m?"Verdana":m,h=n.stamps,g=n.stampClass,C=n.sizeX,N=n.sizeY,v=n.name,b=h||[];return(0,r.createComponentVNode)(2,u.Window,{title:v,theme:"paper",width:C||400,height:N||500,children:(0,r.createComponentVNode)(2,u.Window.Content,{backgroundColor:d,scrollable:!0,children:(0,r.createComponentVNode)(2,l.Box,{id:"page",fitted:!0,fillPositionedParent:!0,children:function(e){switch(e){case 0:return(0,r.createComponentVNode)(2,I,{value:a,stamps:b,readOnly:!0});case 1:return(0,r.createComponentVNode)(2,w,{value:a,textColor:p,fontFamily:f,stamps:b,backgroundColor:d});case 2:return(0,r.createComponentVNode)(2,k,{value:a,stamps:b,stampClass:g});default:return"ERROR ERROR WE CANNOT BE HERE!!"}}(o)})})})};var S=function(){return(0,r.createComponentVNode)(2,l.Box,{position:"absolute",left:"10px",top:"25px",width:"300px",height:"350px",backgroundColor:"#E8E4C9",textAlign:"center",children:[(0,r.createVNode)(1,"h3",null,"Markdown Syntax",16),(0,r.createComponentVNode)(2,l.Table,{children:[(0,r.createComponentVNode)(2,l.Table.Row,{children:[(0,r.createComponentVNode)(2,l.Table.Cell,{children:[(0,r.createComponentVNode)(2,l.Box,{children:"Heading"}),"====="]}),(0,r.createComponentVNode)(2,l.Table.Cell,{children:(0,r.createVNode)(1,"h2",null,"Heading",16)})]}),(0,r.createComponentVNode)(2,l.Table.Row,{children:[(0,r.createComponentVNode)(2,l.Table.Cell,{children:[(0,r.createComponentVNode)(2,l.Box,{children:"Sub Heading"}),"------"]}),(0,r.createComponentVNode)(2,l.Table.Cell,{children:(0,r.createVNode)(1,"h4",null,"Sub Heading",16)})]}),(0,r.createComponentVNode)(2,l.Table.Row,{children:[(0,r.createComponentVNode)(2,l.Table.Cell,{children:"_Italic Text_"}),(0,r.createComponentVNode)(2,l.Table.Cell,{children:(0,r.createVNode)(1,"i",null,"Italic Text",16)})]}),(0,r.createComponentVNode)(2,l.Table.Row,{children:[(0,r.createComponentVNode)(2,l.Table.Cell,{children:"**Bold Text**"}),(0,r.createComponentVNode)(2,l.Table.Cell,{children:(0,r.createVNode)(1,"b",null,"Bold Text",16)})]}),(0,r.createComponentVNode)(2,l.Table.Row,{children:[(0,r.createComponentVNode)(2,l.Table.Cell,{children:"`Code Text`"}),(0,r.createComponentVNode)(2,l.Table.Cell,{children:(0,r.createVNode)(1,"code",null,"Code Text",16)})]}),(0,r.createComponentVNode)(2,l.Table.Row,{children:[(0,r.createComponentVNode)(2,l.Table.Cell,{children:"~~Strikethrough Text~~"}),(0,r.createComponentVNode)(2,l.Table.Cell,{children:(0,r.createVNode)(1,"s",null,"Strikethrough Text",16)})]}),(0,r.createComponentVNode)(2,l.Table.Row,{children:[(0,r.createComponentVNode)(2,l.Table.Cell,{children:[(0,r.createComponentVNode)(2,l.Box,{children:"Horizontal Rule"}),"---"]}),(0,r.createComponentVNode)(2,l.Table.Cell,{children:["Horizontal Rule",(0,r.createVNode)(1,"hr")]})]}),(0,r.createComponentVNode)(2,l.Table.Row,{children:[(0,r.createComponentVNode)(2,l.Table.Cell,{children:(0,r.createComponentVNode)(2,l.Table,{children:[(0,r.createComponentVNode)(2,l.Table.Row,{children:"* List Element 1"}),(0,r.createComponentVNode)(2,l.Table.Row,{children:"* List Element 2"}),(0,r.createComponentVNode)(2,l.Table.Row,{children:"* Etc..."})]})}),(0,r.createComponentVNode)(2,l.Table.Cell,{children:(0,r.createVNode)(1,"ul",null,[(0,r.createVNode)(1,"li",null,"List Element 1",16),(0,r.createVNode)(1,"li",null,"List Element 2",16),(0,r.createVNode)(1,"li",null,"Etc...",16)],4)})]}),(0,r.createComponentVNode)(2,l.Table.Row,{children:[(0,r.createComponentVNode)(2,l.Table.Cell,{children:(0,r.createComponentVNode)(2,l.Table,{children:[(0,r.createComponentVNode)(2,l.Table.Row,{children:"1. List Element 1"}),(0,r.createComponentVNode)(2,l.Table.Row,{children:"2. List Element 2"}),(0,r.createComponentVNode)(2,l.Table.Row,{children:"3. Etc..."})]})}),(0,r.createComponentVNode)(2,l.Table.Cell,{children:(0,r.createVNode)(1,"ol",null,[(0,r.createVNode)(1,"li",null,"List Element 1",16),(0,r.createVNode)(1,"li",null,"List Element 2",16),(0,r.createVNode)(1,"li",null,"Etc...",16)],4)})]})]})]})}},21293:function(e,t,n){"use strict";t.__esModule=!0,t.Particool=void 0;var o=n(96323),r=n(97622),a=n(97622),i=n(31246),c=n(26949),l=n(2381),u=n(79926),d=function(e,t){var n=e.value,r=e.tooltip,a=e.name,l=(0,i.useBackend)(t).act;return(0,o.createComponentVNode)(2,c.Tooltip,{position:"bottom",content:r,children:(0,o.createComponentVNode)(2,c.NumberInput,{value:n,stepPixelSize:5,width:"39px",onDrag:function(e,t){return l("modify_particle_value",{new_data:{name:a,value:t,type:"int"}})}})})},s=function(e,t){var n=e.value,r=e.tooltip,a=e.name,l=(0,i.useBackend)(t).act;return n=n||[1,0,0,1,0,0],(0,o.createComponentVNode)(2,c.Tooltip,{position:"bottom",content:r,children:(0,o.createComponentVNode)(2,c.Flex,{children:(0,o.createComponentVNode)(2,c.Flex.Item,{children:n.map((function(e,t){return(0,o.createComponentVNode)(2,c.NumberInput,{value:e,onDrag:function(e,o){n[t]=o,l("modify_particle_value",{new_data:{name:a,value:n,type:"matrix"}})}},t)}))})})})},p=function(e,t){var n=e.value,r=e.tooltip,a=e.name,l=(0,i.useBackend)(t).act,u=null,d="string"==typeof n;return u=d?N(e,t):m(e,t),(0,o.createComponentVNode)(2,c.Tooltip,{position:"bottom",content:r,children:(0,o.createComponentVNode)(2,c.Flex,{children:[(0,o.createComponentVNode)(2,c.Flex.Item,{children:u}),(0,o.createComponentVNode)(2,c.Flex.Item,{align:"right",children:(0,o.createComponentVNode)(2,c.Button.Checkbox,{checked:d,content:"generator",onClick:function(){return l("modify_particle_value",{new_data:{name:a,value:d?0:{genType:"num",a:n,b:n,rand:"UNIFORM_RAND"},type:d?"float":"generator"}})}})})]})})},m=function(e,t){var n=e.value,l=e.tooltip,u=e.name,d=(0,i.useBackend)(t).act,s=(0,i.useLocalState)(t,"particleFloatStep",.01),p=s[0];s[1];return(0,o.createComponentVNode)(2,c.Tooltip,{position:"bottom",content:l,children:(0,o.createComponentVNode)(2,c.NumberInput,{value:n,stepPixelSize:4,step:p,format:function(e){return(0,r.toFixed)(e,(0,a.numberOfDecimalDigits)(p))},width:"80px",onDrag:function(e,t){return d("modify_particle_value",{new_data:{name:u,value:t,type:"float"}})}})})},f=function(e,t){var n=e.value,r=e.tooltip,a=e.name,l=(0,i.useBackend)(t).act,u=null,d="string"==typeof n;return u=d?N(e,t):g(e,t),(0,o.createComponentVNode)(2,c.Tooltip,{position:"bottom",content:r,children:(0,o.createComponentVNode)(2,c.Flex,{children:[(0,o.createComponentVNode)(2,c.Flex.Item,{children:u}),(0,o.createComponentVNode)(2,c.Flex.Item,{align:"right",children:(0,o.createComponentVNode)(2,c.Button.Checkbox,{checked:d,content:"generator",onClick:function(){return l("modify_particle_value",{new_data:{name:a,value:d?[0,0,0]:{genType:"box",a:n,b:n,rand:"UNIFORM_RAND"},type:d?"vector":"generator"}})}})})]})})},h=function(e){return function(t,n){var r=t.value,a=t.tooltip,l=t.name,u=(0,i.useBackend)(n).act;return r=r||Array(e).fill(0),isNaN(r)||(r=Array(e).fill(r)),r=r.slice(0,e),(0,o.createComponentVNode)(2,c.Tooltip,{position:"bottom",content:a,children:(0,o.createComponentVNode)(2,c.Flex,{children:(0,o.createComponentVNode)(2,c.Flex.Item,{children:r.map((function(e,t){return(0,o.createComponentVNode)(2,c.NumberInput,{value:e,width:"40px",onDrag:function(e,n){r[t]=n,u("modify_particle_value",{new_data:{name:l,value:r,type:"vector"}})}},t)}))})})})}},g=h(3),C=function(e,t){var n=e.value,r=e.tooltip,a=e.name,l=(0,i.useBackend)(t).act,u=null,d="string"==typeof n;return u=d?N(e,t):h(2)(e,t),(0,o.createComponentVNode)(2,c.Tooltip,{position:"bottom",content:r,children:(0,o.createComponentVNode)(2,c.Flex,{children:[(0,o.createComponentVNode)(2,c.Flex.Item,{children:u}),(0,o.createComponentVNode)(2,c.Flex.Item,{align:"right",children:(0,o.createComponentVNode)(2,c.Button.Checkbox,{checked:d,content:"generator",onClick:function(){return l("modify_particle_value",{new_data:{name:a,value:d?[0,0]:{genType:"box",a:n,b:n,rand:"UNIFORM_RAND"},type:d?"vector":"generator"}})}})})]})})},N=function(e,t){var n=e.value,r=e.name,a=(0,i.useBackend)(t).act,l="",d="",s="",p="";if(u.logger.log(n),n){var m=n.match(/\((.*)\)/);if(4===(m=(m=m||["","","",""])[1].split(", ")).length){l=m[0].replace(/['"]+/g,"");var f=m[1].match(/\((.*)\)/);d=f?f[1]:m[1].replace(/['"]+/g,"");var h=m[2].match(/\((.*)\)/);s=h?h[1]:m[2].replace(/['"]+/g,""),p=m[3]}}var g=(0,i.useLocalState)(t,r+"genType",l),C=g[0],N=g[1],v=(0,i.useLocalState)(t,r+"a",d),b=v[0],V=v[1],y=(0,i.useLocalState)(t,r+"b",s),x=y[0],I=y[1],k=(0,i.useLocalState)(t,r+"rand",p),w=k[0],S=k[1];return(0,o.createComponentVNode)(2,c.Collapsible,{title:"Generator Settings - Hit Set to save",children:(0,o.createComponentVNode)(2,c.Section,{level:2,children:[(0,o.createComponentVNode)(2,c.LabeledList,{children:[(0,o.createComponentVNode)(2,c.LabeledList.Item,{label:"type",children:(0,o.createComponentVNode)(2,c.Tooltip,{position:"bottom",content:""+["num","vector","box","color","circle","sphere","square","cube"].join(", "),children:(0,o.createComponentVNode)(2,c.Input,{value:C,onInput:function(e,t){return N(t)}})})}),(0,o.createComponentVNode)(2,c.LabeledList.Item,{label:"A",children:(0,o.createComponentVNode)(2,c.Input,{value:b,onInput:function(e,t){return V(t)}})}),(0,o.createComponentVNode)(2,c.LabeledList.Item,{label:"B",children:(0,o.createComponentVNode)(2,c.Input,{value:x,onInput:function(e,t){return I(t)}})}),(0,o.createComponentVNode)(2,c.LabeledList.Item,{label:"Rand Type",children:(0,o.createComponentVNode)(2,c.Tooltip,{position:"bottom",content:""+["UNIFORM_RAND","NORMAL_RAND","LINEAR_RAND","SQUARE_RAND"].join(", "),children:(0,o.createComponentVNode)(2,c.Input,{value:w,onInput:function(e,t){return S(t)}})})})]}),(0,o.createComponentVNode)(2,c.Button,{content:"Set",onClick:function(){return u.logger.log(C),void a("modify_particle_value",{new_data:{name:r,value:{genType:C,a:b,b:x,rand:w},type:"generator"}})}})]})})},v=function(e,t){var n=e.value,r=e.tooltip,a=e.name,l=(0,i.useBackend)(t).act;return(0,o.createComponentVNode)(2,c.Tooltip,{position:"bottom",content:r,children:(0,o.createComponentVNode)(2,c.Input,{value:n,width:"250px",onInput:function(e,t){return l("modify_particle_value",{new_data:{name:a,value:t,type:"text"}})}})})},b=function(e,t){var n=e.value,r=e.tooltip,a=e.name,l=(0,i.useBackend)(t).act,u=n?Object.keys(n).map((function(e){return n[e]})):[];return(0,o.createComponentVNode)(2,c.Tooltip,{position:"bottom",content:r,children:(0,o.createComponentVNode)(2,c.Input,{value:u.join(","),width:"250px",onInput:function(e,t){return l("modify_particle_value",{new_data:{name:a,value:t,type:"numList"}})}})})},V=function(e,t){var n=e.value,r=e.tooltip,a=e.name,l=(0,i.useBackend)(t).act,u=n?Object.keys(n).map((function(e){return n[e]})):[];return(0,o.createComponentVNode)(2,c.Tooltip,{position:"bottom",content:r,children:(0,o.createComponentVNode)(2,c.Input,{value:u.join(","),width:"250px",onInput:function(e,t){return l("modify_particle_value",{new_data:{name:a,value:t,type:"list"}})}})})},y=function(e,t){var n=e.value,r=e.tooltip,a=e.name,l=(0,i.useBackend)(t).act,u=null,d="string"==typeof n&&"#"!==n.charAt(0);return u=d?N(e,t):function(e,t){var n=e.value,r=e.tooltip,a=e.name,l=(0,i.useBackend)(t).act;return(0,o.createComponentVNode)(2,c.Tooltip,{position:"bottom",content:r,children:[(0,o.createComponentVNode)(2,c.Button,{icon:"pencil-alt",onClick:function(){return l("modify_color_value")}}),(0,o.createComponentVNode)(2,c.ColorBox,{color:n,mr:.5}),(0,o.createComponentVNode)(2,c.Input,{value:n,width:"90px",onInput:function(e,t){return l("modify_particle_value",{new_data:{name:a,value:t,type:"color"}})}})]})}(e,t),(0,o.createComponentVNode)(2,c.Tooltip,{position:"bottom",content:r,children:(0,o.createComponentVNode)(2,c.Flex,{children:[(0,o.createComponentVNode)(2,c.Flex.Item,{children:u}),(0,o.createComponentVNode)(2,c.Flex.Item,{align:"right",children:(0,o.createComponentVNode)(2,c.Button.Checkbox,{checked:d,content:"generator",onClick:function(){return l("modify_particle_value",{new_data:{name:a,value:d?"#ffffff":{genType:"color",a:n,b:n,rand:"UNIFORM_RAND"},type:d?"color":"generator"}})}})})]})})},x=function(e,t){var n=e.value,r=e.tooltip,a=(0,i.useBackend)(t).act;return(0,o.createComponentVNode)(2,c.Tooltip,{position:"bottom",content:r,children:[(0,o.createComponentVNode)(2,c.Button,{icon:"pencil-alt",onClick:function(){return a("modify_icon_value")}}),(0,o.createComponentVNode)(2,c.Box,{inline:!0,ml:1,children:n})]})},I={width:{type:"float_nongen",tooltip:"Width of particle image in pixels"},height:{type:"float_nongen",tooltip:"Height of particle image in pixels"},count:{type:"int",tooltip:"Maximum particle count"},spawning:{type:"float_nongen",tooltip:"Number of particles to spawn per tick (can be fractional)"},bound1:{type:"vector_nongen",tooltip:"Minimum particle position in x,y,z space"},bound2:{type:"vector_nongen",tooltip:"Maximum particle position in x,y,z space"},gravity:{type:"vector_nongen",tooltip:"Constant acceleration applied to all particles in this set (pixels per squared tick)"},gradient:{type:"list",tooltip:"Color gradient used, if any"},transform:{type:"matrix",tooltip:"Transform done to all particles, if any (can be higher than 2D)"},lifespan:{type:"float",tooltip:"Maximum life of the particle, in ticks"},fade:{type:"float",tooltip:"Fade-out time at end of lifespan, in ticks"},fadein:{type:"float",tooltip:"Fade-in time, in ticks"},icon:{type:"icon",tooltip:"Icon to use, if any; no icon means this particle will be a dot"},icon_state:{type:"list",tooltip:"Icon state to use, if any"},color:{type:"color",tooltip:"Particle color; can be a number if a gradient is used"},color_change:{type:"float",tooltip:"Color change per tick; only applies if gradient is used"},position:{type:"vector",tooltip:"x,y,z position, from center in pixels"},velocity:{type:"vector",tooltip:"x,y,z velocity, in pixels"},scale:{type:"vector2",tooltip:"(2D)\tScale applied to icon, if used; defaults to list(1,1)"},grow:{type:"vector2",tooltip:"Change in scale per tick; defaults to list(0,0)"},rotation:{type:"float",tooltip:"Angle of rotation (clockwise); applies only if using an icon"},spin:{type:"float",tooltip:"Change in rotation per tick"},friction:{type:"float",tooltip:"Amount of velocity to shed (0 to 1) per tick, also applied to acceleration from drift"},drift:{type:"vector",tooltip:"Added acceleration every tick; e.g. a circle or sphere generator can be applied to produce snow or ember effects"}},k=function(e,t){var n=e.name,r={int:(0,o.normalizeProps)((0,o.createComponentVNode)(2,d,Object.assign({},e))),float:(0,o.normalizeProps)((0,o.createComponentVNode)(2,p,Object.assign({},e))),float_nongen:(0,o.normalizeProps)((0,o.createComponentVNode)(2,m,Object.assign({},e))),string:(0,o.normalizeProps)((0,o.createComponentVNode)(2,v,Object.assign({},e))),numlist:(0,o.normalizeProps)((0,o.createComponentVNode)(2,b,Object.assign({},e))),list:(0,o.normalizeProps)((0,o.createComponentVNode)(2,V,Object.assign({},e))),color:(0,o.normalizeProps)((0,o.createComponentVNode)(2,y,Object.assign({},e))),icon:(0,o.normalizeProps)((0,o.createComponentVNode)(2,x,Object.assign({},e))),generator:(0,o.normalizeProps)((0,o.createComponentVNode)(2,N,Object.assign({},e))),matrix:(0,o.normalizeProps)((0,o.createComponentVNode)(2,s,Object.assign({},e))),vector:(0,o.normalizeProps)((0,o.createComponentVNode)(2,f,Object.assign({},e))),vector_nongen:(0,o.normalizeProps)((0,o.createComponentVNode)(2,g,Object.assign({},e))),vector2:(0,o.normalizeProps)((0,o.createComponentVNode)(2,C,Object.assign({},e)))};return(0,o.createComponentVNode)(2,c.LabeledList.Item,{label:n,children:r[I[n].type]||I[n].type||"Not Found (This is an error)"})},w=function(e,t){var n=e.particle;return(0,o.createComponentVNode)(2,c.LabeledList,{children:Object.keys(I).map((function(e){var t=n[e],r=I[e].tooltip||"Oh Bees! Tooltip is missing.";return(0,o.createComponentVNode)(2,k,{name:e,tooltip:r,value:t},e)}))})},S=function(){return(0,o.createComponentVNode)(2,c.Collapsible,{title:"Generator Help",children:[(0,o.createComponentVNode)(2,c.Section,{level:2}),(0,o.createComponentVNode)(2,c.Section,{level:2,children:(0,o.createVNode)(1,"table",null,(0,o.createVNode)(1,"tbody",null,[(0,o.createVNode)(1,"tr",null,[(0,o.createVNode)(1,"td",null,"Generator type",16),(0,o.createVNode)(1,"td",null,"Result type",16),(0,o.createVNode)(1,"td",null,"Description",16)],4),(0,o.createVNode)(1,"tr",null,[(0,o.createVNode)(1,"td",null,"num",16),(0,o.createVNode)(1,"td",null,"num",16),(0,o.createVNode)(1,"td",null,"A random number between A and B.",16)],4),(0,o.createVNode)(1,"tr",null,[(0,o.createVNode)(1,"td",null,"vector",16),(0,o.createVNode)(1,"td",null,"vector",16),(0,o.createVNode)(1,"td",null,"A random vector on a line between A and B.",16)],4),(0,o.createVNode)(1,"tr",null,[(0,o.createVNode)(1,"td",null,"box",16),(0,o.createVNode)(1,"td",null,"vector",16),(0,o.createVNode)(1,"td",null,"A random vector within a box whose corners are at A and B.",16)],4),(0,o.createVNode)(1,"tr",null,[(0,o.createVNode)(1,"td",null,"color",16),(0,o.createVNode)(1,"td",null,"color (string) or color matrix",16),(0,o.createVNode)(1,"td",null,"Result type depends on whether A or B are matrices or not. The result is interpolated between A and B; components are not randomized separately.",16)],4),(0,o.createVNode)(1,"tr",null,[(0,o.createVNode)(1,"td",null,"circle",16),(0,o.createVNode)(1,"td",null,"vector",16),(0,o.createVNode)(1,"td",null,"A random XY-only vector in a ring between radius A and B, centered at 0,0.",16)],4),(0,o.createVNode)(1,"tr",null,[(0,o.createVNode)(1,"td",null,"sphere",16),(0,o.createVNode)(1,"td",null,"vector",16),(0,o.createVNode)(1,"td",null,"A random vector in a spherical shell between radius A and B, centered at 0,0,0.",16)],4),(0,o.createVNode)(1,"tr",null,[(0,o.createVNode)(1,"td",null,"square",16),(0,o.createVNode)(1,"td",null,"vector",16),(0,o.createVNode)(1,"td",null,"A random XY-only vector between squares of sizes A and B. (The length of the square is between A*2 and B*2, centered at 0,0.)",16)],4),(0,o.createVNode)(1,"tr",null,[(0,o.createVNode)(1,"td",null,"cube",16),(0,o.createVNode)(1,"td",null,"vector",16),(0,o.createVNode)(1,"td",null,"A random vector between cubes of sizes A and B. (The length of the cube is between A*2 and B*2, centered at 0,0,0.)",16)],4)],4),2)})]})};t.Particool=function(e,t){var n=(0,i.useBackend)(t),u=n.act,d=n.data,s=d.target_particle||{},p=s&&Object.keys(s).length>0,m=(0,i.useLocalState)(t,"particleFloatStep",.01),f=m[0],h=m[1],g=(0,i.useLocalState)(t,"hidden",!1),C=g[0],N=g[1];return(0,o.createComponentVNode)(2,l.Window,{title:"Particool",width:700,height:500,children:(0,o.createComponentVNode)(2,l.Window.Content,{scrollable:!0,children:[!!C&&(0,o.createComponentVNode)(2,c.NoticeBox,{danger:!0,children:[" ",String(Date.now())," ",(0,o.createVNode)(1,"br"),"Particles? ",p.toString()," -",(null===d.target_particle).toString()," ",(0,o.createVNode)(1,"br"),"Json - ",JSON.stringify(d.target_particle)]}),(0,o.createComponentVNode)(2,c.Section,{title:(0,o.createComponentVNode)(2,c.Box,{inline:!0,onDblClick:function(){return N(!0)},children:"Particle"}),buttons:(0,o.createFragment)([!!p&&(0,o.createFragment)([(0,o.createComponentVNode)(2,c.Button,{icon:"save",content:"Save Particle",onClick:function(){return u("save_particle")}}),(0,o.createComponentVNode)(2,c.Button,{icon:"file-image",content:"Save Particle + Icon",onClick:function(){return u("save_particle_with_icon")}}),(0,o.createTextVNode)(" ")],0),(0,o.createComponentVNode)(2,c.Button,{icon:"upload",content:"Load Particle",onClick:function(){return u("load_particle")}}),p?(0,o.createComponentVNode)(2,c.Button.Confirm,{icon:"minus",content:"Remove Particle",onClick:function(){return u("remove_particle")}}):(0,o.createComponentVNode)(2,c.Button,{icon:"plus",content:"Add Particle",onClick:function(){return u("add_particle")}}),(0,o.createComponentVNode)(2,c.Button)],0),children:[(0,o.createComponentVNode)(2,S),(0,o.createComponentVNode)(2,c.Box,{mt:2,mb:2,children:[(0,o.createComponentVNode)(2,c.Box,{inline:!0,mr:1,children:"Float change step:"}),(0,o.createComponentVNode)(2,c.NumberInput,{value:f,step:.001,format:function(e){return(0,r.toFixed)(e,(0,a.numberOfDecimalDigits)(f))},width:"70px",onChange:function(e,t){return h(t)}})]}),p?(0,o.createComponentVNode)(2,w,{particle:s}):(0,o.createComponentVNode)(2,c.Box,{children:"No particle"})]})]})})}},85344:function(e,t,n){"use strict";t.__esModule=!0,t.Phone=void 0;var o=n(96323),r=n(31246),a=n(26949),i=n(18331),c=n(2381),l=[{department:"bridge",color:"green"},{department:"engineering",color:"yellow"},{department:"medical",color:"blue"},{department:"research",color:"purple"},{department:"security",color:"red"},{department:"uncategorized",color:"brown"}],u=function(e,t){return e.category.localeCompare(t.category)},d=function(e,t){return e.id.localeCompare(t.id)};t.Phone=function(e,t){var n=(0,r.useBackend)(t).data,i=n.dialing,l=n.inCall,d=n.lastCalled,p=n.name,m=n.phonebook.sort(u)||[];return(0,o.createComponentVNode)(2,c.Window,{title:p,width:250,height:350,children:(0,o.createComponentVNode)(2,c.Window.Content,{children:[(i||l)&&(0,o.createComponentVNode)(2,a.Dimmer,{children:(0,o.createVNode)(1,"h1",null,"LINE BUSY",16)}),(0,o.createComponentVNode)(2,a.Stack,{vertical:!0,fill:!0,children:[(0,o.createComponentVNode)(2,a.Stack.Item,{children:(0,o.createComponentVNode)(2,a.Section,{fill:!0,children:(0,o.createComponentVNode)(2,a.LabeledList,{children:(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Last Called",children:d?""+d:"None"})})})}),(0,o.createComponentVNode)(2,a.Stack.Item,{grow:1,children:(0,o.createComponentVNode)(2,a.Section,{title:"Phonebook",fill:!0,scrollable:!0,children:m.map((function(e){return(0,o.createComponentVNode)(2,s,{phonebook:e},e.category)}))})})]})]})})};var s=function(e,t){var n=e.phonebook,c=(0,r.useBackend)(t).act,u=(0,i.capitalize)(n.category),s=n.phones.sort(d),p=l[l.findIndex((function(e){return e.department===n.category}))].color;return(0,o.createComponentVNode)(2,a.Collapsible,{title:u,color:!!p&&p,children:s.map((function(e){return(0,o.createComponentVNode)(2,a.Button,{fluid:!0,content:e.id,onClick:function(){return c("call",{target:e.id})},textAlign:"center",className:"phone__button"},e.id)}))})}},85990:function(){},41245:function(e,t,n){"use strict";t.__esModule=!0,t.AutoPipeLaying=t.DisposalPipeRow=t.PipeDispenser=void 0;var o=n(96323),r=n(31246),a=n(26949),i=n(2381);t.PipeDispenser=function(e,t){var n=(0,r.useBackend)(t).data,u=n.disposalpipes||[],d=n.dispenser_ready,s=n.windowName,p=n.mobile,m=n.removing_pipe,f=n.laying_pipe,h=n.max_disposal_pipes;return(0,o.createComponentVNode)(2,i.Window,{title:s,width:"325",height:p?365:270,children:(0,o.createComponentVNode)(2,i.Window.Content,{scrollable:!0,children:[(0,o.createComponentVNode)(2,a.Section,{children:u.map((function(e){return(0,o.createComponentVNode)(2,c,{dispenser_ready:d,max_disposal_pipes:h,disposalpipe:e},e.disposaltype)}))}),!!p&&(0,o.createComponentVNode)(2,l,{laying_pipe:f,removing_pipe:m})]})})};var c=function(e,t){var n=(0,r.useBackend)(t).act,i=(0,r.useLocalState)(t,"amount",1),c=i[0],l=i[1],u=e.dispenser_ready,d=e.max_disposal_pipes,s=e.disposalpipe;return(0,o.createComponentVNode)(2,a.Stack,{style:{"border-bottom":"1px #555 solid"},children:[s.image&&(0,o.createComponentVNode)(2,a.Stack.Item,{children:(0,o.createComponentVNode)(2,a.Box,{style:{overflow:"show",height:"32px"},children:(0,o.createComponentVNode)(2,a.Image,{pixelated:!0,src:"data:image/png;base64,"+s.image})})}),(0,o.createComponentVNode)(2,a.Stack.Item,{grow:!0,children:s.disposaltype}),(0,o.createComponentVNode)(2,a.Stack.Item,{style:{display:"flex","justify-content":"center","flex-direction":"column"},children:["Amount:",(0,o.createComponentVNode)(2,a.NumberInput,{value:c,minValue:1,maxValue:d,onChange:function(e,t){return l(Math.round(t))}})]}),(0,o.createComponentVNode)(2,a.Stack.Item,{style:{"margin-left":"5px",display:"flex","justify-content":"center","flex-direction":"column"},children:(0,o.createComponentVNode)(2,a.Button,{color:u?"green":"grey",content:"Dispense",disabled:!u,style:{width:"70px","text-align":"center"},onClick:function(){return n("dmake",{disposal_type:s.disposaltype,amount:c})}})})]})};t.DisposalPipeRow=c;var l=function(e,t){var n=(0,r.useBackend)(t).act,i=e.laying_pipe,c=e.removing_pipe;return(0,o.createComponentVNode)(2,a.Section,{title:"Automatic Pipe Options",children:[(0,o.createComponentVNode)(2,a.Button,{color:i?"average":"green",content:i?"Stop Laying Pipe Automatically":"Start Laying Pipe Automatically",fluid:!0,align:"center",onClick:function(){return n("toggle_laying")}}),(0,o.createComponentVNode)(2,a.Button,{color:c?"average":"green",content:c?"Stop Removing Pipe Automatically":"Start Removing Pipe Automatically",fluid:!0,align:"center",onClick:function(){return n("toggle_removing")}})]})};t.AutoPipeLaying=l},38837:function(e,t,n){"use strict";t.__esModule=!0,t.PixelOffset=void 0;var o=n(96323),r=n(31246),a=n(26949),i=n(2381);t.PixelOffset=function(e,t){var n=(0,r.useBackend)(t),c=n.act,l=n.data,u=l.x,d=l.y,s=l.thing_name;return(0,o.createComponentVNode)(2,i.Window,{title:"Pixel Offsets for "+s,width:400,height:180,children:(0,o.createComponentVNode)(2,i.Window.Content,{children:(0,o.createComponentVNode)(2,a.Stack,{vertical:!0,children:[(0,o.createComponentVNode)(2,a.Stack.Item,{children:(0,o.createComponentVNode)(2,a.Stack,{children:[(0,o.createComponentVNode)(2,a.Stack.Item,{children:(0,o.createComponentVNode)(2,a.Box,{fontSize:"3em",width:"1.3em",children:"X:"})}),(0,o.createComponentVNode)(2,a.Stack.Item,{children:[(0,o.createComponentVNode)(2,a.Button,{icon:"plus",fontSize:"1.5em",onClick:function(){return c("set_x",{x:u+1})}}),(0,o.createComponentVNode)(2,a.Button,{icon:"minus",fontSize:"1.5em",onClick:function(){return c("set_x",{x:u-1})}}),(0,o.createComponentVNode)(2,a.NumberInput,{value:u,fontSize:"35px",stepPixelSize:7,width:"2.7em",onDrag:function(e,t){return c("set_x",{x:t})}}),(0,o.createComponentVNode)(2,a.Button,{icon:"sync-alt",color:"red",fontSize:"1.5em",onClick:function(){return c("set_x",{x:0})}})]})]})}),(0,o.createComponentVNode)(2,a.Stack.Item,{children:(0,o.createComponentVNode)(2,a.Stack,{children:[(0,o.createComponentVNode)(2,a.Stack.Item,{children:(0,o.createComponentVNode)(2,a.Box,{fontSize:"3em",width:"1.3em",children:"Y:"})}),(0,o.createComponentVNode)(2,a.Stack.Item,{children:[(0,o.createComponentVNode)(2,a.Button,{icon:"plus",fontSize:"1.5em",onClick:function(){return c("set_y",{y:d+1})}}),(0,o.createComponentVNode)(2,a.Button,{icon:"minus",fontSize:"1.5em",onClick:function(){return c("set_y",{y:d-1})}}),(0,o.createComponentVNode)(2,a.NumberInput,{value:d,fontSize:"35px",width:"2.7em",stepPixelSize:7,onDrag:function(e,t){return c("set_y",{y:t})}}),(0,o.createComponentVNode)(2,a.Button,{icon:"sync-alt",color:"red",fontSize:"1.5em",onClick:function(){return c("set_y",{y:0})}})]})]})})]})})})}},51884:function(e,t,n){"use strict";t.__esModule=!0,t.Plantmaster=void 0;var o=n(96323),r=n(31246),a=n(26949),i=n(2381),c=n(51418),l=n(28581),u=n(97622),d=n(18331),s=n(1033),p=["name","species","damage","genome","generation","maturity rate","production rate","lifespan","yield","potency","endurance","controls"],m=["name","species","damage","genome","generation","growtime","harvesttime","lifespan","cropsize","potency","endurance",""];t.Plantmaster=function(e,t){var n=(0,r.useBackend)(t),c=n.act,l=n.data,u=l.extractables,d=l.seeds,s=l.category,p=l.category_lengths,m=l.inserted,f=l.inserted_container,h=l.seedoutput,C=l.splice_chance,N=l.show_splicing,V=l.splice_seeds,y=l.sortBy,x=l.sortAsc;return(0,o.createComponentVNode)(2,i.Window,{resizable:!0,title:"Plantmaster Mk4",width:1100,height:450,children:(0,o.createComponentVNode)(2,i.Window.Content,{children:[(0,o.createComponentVNode)(2,a.Tabs,{children:[(0,o.createComponentVNode)(2,a.Tabs.Tab,{selected:"overview"===s,onClick:function(){c("change_tab",{tab:"overview"})},children:"Overview"}),(0,o.createComponentVNode)(2,a.Tabs.Tab,{selected:"extractables"===s,onClick:function(){c("change_tab",{tab:"extractables"})},children:["Seed Extraction (",p[0],")"]}),(0,o.createComponentVNode)(2,a.Tabs.Tab,{selected:"seedlist"===s,onClick:function(){c("change_tab",{tab:"seedlist"})},children:["Seeds (",p[1],")"]}),(0,o.createComponentVNode)(2,a.Tabs.Tab,{backgroundColor:null!==f?"green":"blue",selected:null!==f,icon:"eject",onClick:function(){return c(null!==f?"ejectbeaker":"insertbeaker")},bold:!0,children:null!==f?m:"Insert Beaker"})]}),"overview"===s&&(0,o.createComponentVNode)(2,g,{cat_lens:p,container:m?f:null,seedoutput:h}),"extractables"===s&&(0,o.createComponentVNode)(2,b,{seedoutput:h,produce:u,sortBy:y,sortAsc:x}),"seedlist"===s&&(0,o.createComponentVNode)(2,v,{seeds:d,seedoutput:h,splicing:N,splice_chance:C,splice_seeds:V,sortBy:y,sortAsc:x})]})})};var f=function(e,t,n,o){var r,a,i,c;return"name"===n||"species"===n?o?(null!=(r=e[n])?r:"").toString().localeCompare(null!=(a=t[n])?a:""):(null!=(i=t[n])?i:"").toString().localeCompare(null!=(c=e[n])?c:""):o?parseFloat(e[n])-parseFloat(t[n]):parseFloat(t[n])-parseFloat(e[n])},h=function(e,t){var n=(0,r.useBackend)(t).act,i=e.container||c.NoContainer;return(0,o.createComponentVNode)(2,a.SectionEx,{capitalize:!0,title:i.name,children:[!!e.container||(0,o.createComponentVNode)(2,a.Dimmer,{children:(0,o.createComponentVNode)(2,a.Button,{icon:"eject",fontSize:1.5,onClick:function(){return n("insertbeaker")},bold:!0,children:"Insert Beaker"})}),(0,o.createComponentVNode)(2,c.ReagentGraph,{container:i}),(0,o.createComponentVNode)(2,c.ReagentList,{container:i})]})},g=function(e,t){(0,r.useBackend)(t).act;var n=e.cat_lens,i=e.container;return(0,o.createComponentVNode)(2,a.SectionEx,{capitalize:!0,title:"Overview",children:(0,o.createComponentVNode)(2,a.Flex,{height:"100%",direction:"column",children:(0,o.createComponentVNode)(2,a.Flex.Item,{grow:!0,children:[(0,o.createComponentVNode)(2,a.Box,{children:["Items ready for extraction: ",(0,o.createVNode)(1,"b",null,n[0],0)," ",(0,o.createVNode)(1,"br"),"Seeds ready for experimentation: ",(0,o.createVNode)(1,"b",null,n[1],0)]}),(0,o.createComponentVNode)(2,h,{container:i})]})})})},C=function(e,t){var n=(0,r.useBackend)(t).act,i=e.show_damage,c=e.sortBy,u=e.sortAsc;return(0,o.createComponentVNode)(2,l.TableRow,{children:p.map((function(e,t){return(i||"damage"!==e)&&(0,o.createComponentVNode)(2,l.TableCell,{textAlign:"center",children:(0,o.createComponentVNode)(2,a.Button,{color:"transparent",icon:""!==c&&c===m[t]?u?"angle-up":"angle-down":"",onClick:function(){return n("sort",{sortBy:m[t],asc:c===m[t]?!u:u})},children:(0,o.createVNode)(1,"b",null,(0,d.capitalize)(e),0)})},e)}))})},N=function(e,t){var n=(0,r.useBackend)(t).act,i=e.extractable,c=e.show_damage,u=e.infuse,d=e.extract,p=e.splice,m=e.splice_disable;return(0,o.createFragment)([(0,o.createComponentVNode)(2,l.TableRow,{children:[(0,o.createComponentVNode)(2,l.TableCell,{width:"100px",textAlign:"center",children:(0,o.createComponentVNode)(2,a.Button.Input,{width:"100px",tooltip:"Click to rename",color:"transparent",textColor:"#FFFFFF",content:(0,s.truncate)(i.name[0],10),defaultValue:i.name[0],currentValue:i.name[0],onCommit:function(e,t){return n("label",{label_ref:i.ref[0],label_new:t})}})}),(0,o.createComponentVNode)(2,l.TableCell,{width:"100px",textAlign:"center",bold:i.species[1],backgroundColor:i.species[1]?"#333333":"",children:i.species[0]}),c&&(0,o.createComponentVNode)(2,l.TableCell,{textAlign:"center",bold:i.damage[1],backgroundColor:i.damage[1]?"#333333":"",children:[i.damage[0],"%"]}),(0,o.createComponentVNode)(2,l.TableCell,{textAlign:"center",bold:i.genome[1],backgroundColor:i.genome[1]?"#333333":"",children:i.genome[0]}),(0,o.createComponentVNode)(2,l.TableCell,{textAlign:"center",bold:i.generation[1],backgroundColor:i.generation[1]?"#333333":"",children:i.generation[0]}),(0,o.createComponentVNode)(2,l.TableCell,{textAlign:"center",bold:i.growtime[1],backgroundColor:i.growtime[1]?"#333333":"",children:i.growtime[0]}),(0,o.createComponentVNode)(2,l.TableCell,{textAlign:"center",bold:i.harvesttime[1],backgroundColor:i.harvesttime[1]?"#333333":"",children:i.harvesttime[0]}),(0,o.createComponentVNode)(2,l.TableCell,{textAlign:"center",bold:i.lifespan[1],backgroundColor:i.lifespan[1]?"#333333":"",children:i.lifespan[0]}),(0,o.createComponentVNode)(2,l.TableCell,{textAlign:"center",bold:i.cropsize[1],backgroundColor:i.cropsize[1]?"#333333":"",children:i.cropsize[0]}),(0,o.createComponentVNode)(2,l.TableCell,{textAlign:"center",bold:i.potency[1],backgroundColor:i.potency[1]?"#333333":"",children:i.potency[0]}),(0,o.createComponentVNode)(2,l.TableCell,{textAlign:"center",bold:i.endurance[1],backgroundColor:i.endurance[1]?"#333333":"",children:i.endurance[0]}),(0,o.createComponentVNode)(2,l.TableCell,{textAlign:"center",children:(0,o.createComponentVNode)(2,a.Flex,{children:(0,o.createComponentVNode)(2,a.Flex.Item,{nowrap:!0,children:[u&&(0,o.createComponentVNode)(2,a.Button,{icon:"fill-drip",title:"Infuse",fontSize:1.1,disabled:!i.allow_infusion[1],onClick:function(){return n("infuse",{infuse_ref:i.ref[0]})}}),d&&(0,o.createComponentVNode)(2,a.Button,{icon:"seedling",title:"Extract Seeds",fontSize:1.1,onClick:function(){return n("extract",{extract_ref:i.ref[0]})}}),p&&(0,o.createComponentVNode)(2,a.Button,{disabled:!i.splicing[1]&&m,icon:i.splicing[1]?"window-close":"code-branch",color:i.splicing[1]?"red":"",title:i.splicing[1]?"Cancel Splice":"Splice",fontSize:1.1,onClick:function(){return n("splice_select",{splice_select_ref:i.ref[0]})}}),(0,o.createComponentVNode)(2,a.Button,{icon:"search",title:"Analyze",fontSize:1.1,onClick:function(){return n("analyze",{analyze_ref:i.ref[0]})}}),(0,o.createComponentVNode)(2,a.Button,{icon:"eject",title:"Eject",fontSize:1.1,onClick:function(){return n("eject",{eject_ref:i.ref[0]})}})]})})})]}),(0,o.createComponentVNode)(2,a.Divider)],4,i.ref[1])},v=function(e,t){var n=(0,r.useBackend)(t).act,i=e.seedoutput,c=e.seeds,l=e.splicing,d=e.splice_seeds,s=e.splice_chance,p=e.sortBy,m=e.sortAsc,h=(c||[]).sort((function(e,t){return f(e,t,p,m)})),g=l?7:10,v=(0,r.useLocalState)(t,"page",1),b=v[0],V=v[1],y=Math.max(1,Math.ceil(h.length/g));(b<1||b>y)&&V((0,u.clamp)(b,1,y));var x=h.slice(g*(b-1),g*(b-1)+g),I=null!==d[0]&&null!==d[1];return(0,o.createComponentVNode)(2,a.Section,{fill:!0,title:"Seeds",buttons:(0,o.createComponentVNode)(2,a.Flex.Item,{textAlign:"center",basis:1.5,children:[(0,o.createComponentVNode)(2,a.Button,{icon:"eject",tooltip:"All seeds will be ejected from the Plantmaster",onClick:function(){return n("ejectseeds")},children:"Eject All"}),(0,o.createComponentVNode)(2,a.Button,{icon:"caret-left",title:"Previous Page",disabled:b<2,onClick:function(){return V(b-1)}}),(0,o.createComponentVNode)(2,a.NumberInput,{value:b,format:function(e){return"Page "+e+"/"+y},minValue:1,maxValue:y,stepPixelSize:15,onChange:function(e,t){return V(t)}}),(0,o.createComponentVNode)(2,a.Button,{icon:"caret-right",title:"Next Page",disabled:b>y-1,onClick:function(){return V(b+1)}}),(0,o.createComponentVNode)(2,a.Button.Checkbox,{checked:!i,tooltip:"Seeds will be extracted into the Plantmaster.",onClick:function(){return n("outputmode")},children:"Output Internally"})]}),children:(0,o.createComponentVNode)(2,a.Flex,{height:"100%",direction:"column",children:[(0,o.createComponentVNode)(2,a.Flex.Item,{height:l?"60%":"100%",children:(0,o.createComponentVNode)(2,a.Table,{children:[(0,o.createComponentVNode)(2,C,{show_damage:!0,sortBy:p,sortAsc:m}),x.map((function(e,t){return(0,o.createComponentVNode)(2,N,{extractable:e,show_damage:!0,infuse:!0,splice:!0,splice_disable:I},e.ref[1])}))]})}),l&&(0,o.createComponentVNode)(2,a.Flex.Item,{height:"30%",children:(0,o.createComponentVNode)(2,a.Section,{title:"Splicing",buttons:(0,o.createComponentVNode)(2,a.Flex.Item,{textAlign:"center",basis:1.5,children:["Splice Chance: ",s,"%\xa0",(0,o.createComponentVNode)(2,a.Button,{onClick:function(){return n("splice")},children:"Splice"})]}),children:(0,o.createComponentVNode)(2,a.Table,{children:[(0,o.createComponentVNode)(2,C,{show_damage:!0,sortBy:p,sortAsc:m}),d.filter((function(e){return null!==e})).sort((function(e,t){return f(e,t,p,m)})).map((function(e,t){return(0,o.createComponentVNode)(2,N,{extractable:e,show_damage:!0,infuse:!0,splice:!0},e.ref[1])}))]})})})]})})},b=function(e,t){var n=(0,r.useBackend)(t).act,i=e.seedoutput,c=e.produce,l=e.sortBy,d=e.sortAsc,s=(c||[]).sort((function(e,t){return f(e,t,l,d)})),p=(0,r.useLocalState)(t,"page",1),m=p[0],h=p[1],g=Math.max(1,Math.ceil(s.length/10));(m<1||m>g)&&h((0,u.clamp)(m,1,g));var v=s.slice(10*(m-1),10*(m-1)+10);return(0,o.createComponentVNode)(2,a.Section,{fill:!0,title:"Extractable Items",buttons:(0,o.createComponentVNode)(2,a.Flex.Item,{textAlign:"center",basis:1.5,children:[(0,o.createComponentVNode)(2,a.Button,{icon:"eject",tooltip:"All produce will be ejected from the Plantmaster",onClick:function(){return n("ejectextractables")},children:"Eject All"}),(0,o.createComponentVNode)(2,a.Button,{icon:"caret-left",title:"Previous Page",disabled:m<2,onClick:function(){return h(m-1)}}),(0,o.createComponentVNode)(2,a.NumberInput,{value:m,format:function(e){return"Page "+e+"/"+g},minValue:1,maxValue:g,stepPixelSize:15,onChange:function(e,t){return h(t)}}),(0,o.createComponentVNode)(2,a.Button,{icon:"caret-right",title:"Next Page",disabled:m>g-1,onClick:function(){return h(m+1)}}),(0,o.createComponentVNode)(2,a.Button.Checkbox,{checked:!i,tooltip:"Seeds will be extracted into the Plantmaster.",onClick:function(){return n("outputmode")},children:"Output Internally"})]}),children:(0,o.createComponentVNode)(2,a.Flex,{height:"100%",direction:"column",children:(0,o.createComponentVNode)(2,a.Flex.Item,{grow:!0,children:(0,o.createComponentVNode)(2,a.Table,{children:[(0,o.createComponentVNode)(2,C,{sortBy:l,sortAsc:d}),v.map((function(e,t){return(0,o.createComponentVNode)(2,N,{extractable:e,extract:!0},e.ref[1])}))]})})})})}},53302:function(e,t,n){"use strict";t.__esModule=!0,t.Header=void 0;var o=n(96323),r=n(26949),a=n(22706),i=["children","onSortClick","sortDirection"];t.Header=function(e){var t=e.children,n=e.onSortClick,c=e.sortDirection,l=function(e,t){if(null==e)return{};var n,o,r={},a=Object.keys(e);for(o=0;o<a.length;o++)n=a[o],t.indexOf(n)>=0||(r[n]=e[n]);return r}(e,i),u=c?c===a.SortDirection.Asc?"sort-alpha-down":"sort-alpha-up":"sort";return(0,o.normalizeProps)((0,o.createComponentVNode)(2,r.Stack,Object.assign({style:{cursor:"pointer"},onClick:n},l,{children:[(0,o.createComponentVNode)(2,r.Stack.Item,{children:t}),n&&(0,o.createComponentVNode)(2,r.Stack.Item,{children:(0,o.createComponentVNode)(2,r.Icon,{name:u,unselectable:!0})})]})))}},22706:function(e,t){"use strict";var n,o;t.__esModule=!0,t.SortDirection=t.Action=void 0,t.Action=n,function(e){e.JumpToPlayerLocation="jump-to-player-loc",e.OpenPlayerOptions="open-player-options",e.PrivateMessagePlayer="private-message-player"}(n||(t.Action=n={})),t.SortDirection=o,function(e){e.Asc="asc",e.Desc="desc"}(o||(t.SortDirection=o={}))},78927:function(e,t,n){"use strict";t.__esModule=!0,t.PlayerPanel=void 0;var o=n(96323),r=n(31246),a=n(26949),i=n(2381),c=n(53302),l=n(22706),u=function(e){return""+e.value},d=function(e,t){return e.localeCompare(t)},s=function(e){return Number(e.split(".").map((function(e){return("00"+e).slice(-3)})).join(""))},p=function(e){return function(t){return t.row[e]}},m=function(e){return{id:e,sorter:d,template:u,valueSelector:p(e)}},f=[Object.assign({},m("ckey"),{name:"CKey",template:function(e){var t=e.act,n=e.row,r=e.value;return(0,o.createFragment)([(0,o.createComponentVNode)(2,a.Button,{onClick:function(){return t(l.Action.OpenPlayerOptions,{ckey:r,mobRef:n.mobRef})},children:r}),(0,o.createComponentVNode)(2,a.Button,{icon:"envelope",color:"bad",onClick:function(){return t(l.Action.PrivateMessagePlayer,{ckey:r,mobRef:n.mobRef})}})],4)}}),Object.assign({},m("name"),{name:"Name"}),Object.assign({},m("realName"),{name:"Real Name"}),Object.assign({},m("assignedRole"),{name:"Assigned Role"}),Object.assign({},m("specialRole"),{name:"Special Role"}),Object.assign({},m("playerType"),{name:"Player Type"}),Object.assign({},m("computerId"),{name:"CID"}),Object.assign({},m("ip"),{name:"IP",sorter:function(e,t){return s(e)-s(t)}}),Object.assign({},m("joined"),{name:"Join Date",sorter:function(e,t){var n=e.split("-").map(parseFloat),o=t.split("-").map(parseFloat);return n>o?1:n<o?-1:0}}),Object.assign({},m("playerLocation"),{name:"Player Location",template:function(e){var t=e.act,n=e.row,r=e.value;return(0,o.createComponentVNode)(2,a.Button,{onClick:function(){return t(l.Action.JumpToPlayerLocation,{ckey:n.ckey,mobRef:n.mobRef})},children:r})}}),Object.assign({},m("ping"),{name:"Ping",sorter:function(e,t){return e-t}})];t.PlayerPanel=function(e,t){var n=(0,r.useBackend)(t),u=n.act,d=n.data.players,s=(0,r.useLocalState)(t,"search",""),p=s[0],m=s[1],h=(0,r.useLocalState)(t,"sort",null),g=h[0],C=h[1],N=Object.keys(d).map((function(e){return d[e]})),v=N.reduce((function(e,t){return e[t.ckey]=f.reduce((function(e,n){var o=n.id,r=n.valueSelector;return e[o]=r({column:n,row:t}),e}),{}),e}),{});if(p){var b=p.toLowerCase();N=N.filter((function(e){return Object.values(v[e.ckey]).some((function(e){return"string"==typeof e&&e.toLowerCase().includes(b)}))}))}if(g){var V=f.find((function(e){return e.id===g.id}));V&&N.sort((function(e,t){var n=V.sorter(v[e.ckey][V.id],v[t.ckey][V.id]);return g.dir===l.SortDirection.Desc&&(n*=-1),n}))}return(0,o.createComponentVNode)(2,i.Window,{width:1100,height:640,title:"Player Panel",children:(0,o.createComponentVNode)(2,i.Window.Content,{scrollable:!0,children:[(0,o.createComponentVNode)(2,a.Input,{autoFocus:!0,mb:1,placeholder:"Search...",onInput:function(e,t){return m(t)},value:p}),(0,o.createComponentVNode)(2,a.Table,{children:[(0,o.createComponentVNode)(2,a.Table.Row,{header:!0,children:f.map((function(e){var t=(null==g?void 0:g.id)===e.id?g:null;return(0,o.createComponentVNode)(2,a.Table.Cell,{children:(0,o.createComponentVNode)(2,c.Header,{onSortClick:e.sorter?function(){return C({dir:null!=t&&t.dir&&t.dir===l.SortDirection.Asc?l.SortDirection.Desc:l.SortDirection.Asc,id:e.id})}:null,sortDirection:null==t?void 0:t.dir,children:e.name})},e.field)}))}),N.map((function(e){var t=e.ckey;return(0,o.createComponentVNode)(2,a.Table.Row,{children:f.map((function(n){var r=n.id,i=n.template;return(0,o.createComponentVNode)(2,a.Table.Cell,{children:i({act:u,column:n,row:e,value:v[t][r]})},r)}))},t)}))]})]})})}},43771:function(){},13484:function(e,t,n){"use strict";t.__esModule=!0,t.PortablePump=void 0;var o=n(96323),r=n(31246),a=n(26949),i=n(2381),c=n(41161);t.PortablePump=function(e,t){var n=(0,r.useBackend)(t),l=n.act,u=n.data,d=u.connected,s=u.on,p=u.direction_out,m=u.holding,f=u.pressure,h=u.targetPressure,g=u.maxPressure,C=u.minRelease,N=u.maxRelease;return(0,o.createComponentVNode)(2,i.Window,{width:305,height:365,children:(0,o.createComponentVNode)(2,i.Window.Content,{children:[(0,o.createComponentVNode)(2,c.PortableBasicInfo,{connected:d,pressure:f,maxPressure:g,children:[(0,o.createComponentVNode)(2,a.Divider),(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Pump Power",children:(0,o.createComponentVNode)(2,a.Button,{content:s?"On":"Off",color:s?"average":"default",onClick:function(){return l("toggle-power")}})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Target Pressure",children:[(0,o.createComponentVNode)(2,a.Button,{onClick:function(){return l("set-pressure",{targetPressure:C})},content:"Min"}),(0,o.createComponentVNode)(2,a.NumberInput,{animated:!0,width:"7em",value:h,minValue:C,maxValue:N,onChange:function(e,t){return l("set-pressure",{targetPressure:t})}}),(0,o.createComponentVNode)(2,a.Button,{onClick:function(){return l("set-pressure",{targetPressure:N})},content:"Max"})]}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Pump Direction",children:(0,o.createComponentVNode)(2,a.Button,{content:p?"Out":"In",color:p?"yellow":"blue",onClick:function(){return l("toggle-pump")}})})]})]}),(0,o.createComponentVNode)(2,c.PortableHoldingTank,{holding:m,onEjectTank:function(){return l("eject-tank")}})]})})}},54652:function(e,t,n){"use strict";t.__esModule=!0,t.PortableScrubber=void 0;var o=n(96323),r=n(31246),a=n(26949),i=n(2381),c=n(41161),l=n(51418);t.PortableScrubber=function(e,t){var n=(0,r.useBackend)(t),u=n.act,d=n.data,s=d.connected,p=d.on,m=d.holding,f=d.pressure,h=d.inletFlow,g=d.maxPressure,C=d.minFlow,N=d.maxFlow,v=d.reagent_container;return(0,o.createComponentVNode)(2,i.Window,{width:305,height:450,children:(0,o.createComponentVNode)(2,i.Window.Content,{children:[(0,o.createComponentVNode)(2,c.PortableBasicInfo,{connected:s,pressure:f,maxPressure:g,children:[(0,o.createComponentVNode)(2,a.Divider),(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Scrubber Power",children:(0,o.createComponentVNode)(2,a.Button,{content:p?"On":"Off",color:p?"average":"default",onClick:function(){return u("toggle-power")}})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Inlet Flow",children:[(0,o.createComponentVNode)(2,a.Button,{onClick:function(){return u("set-inlet-flow",{inletFlow:C})},content:"Min"}),(0,o.createComponentVNode)(2,a.NumberInput,{animated:!0,width:"7em",value:h,minValue:C,maxValue:N,onChange:function(e,t){return u("set-inlet-flow",{inletFlow:t})}}),(0,o.createComponentVNode)(2,a.Button,{onClick:function(){return u("set-inlet-flow",{inletFlow:N})},content:"Max"})]})]})]}),(0,o.createComponentVNode)(2,c.PortableHoldingTank,{holding:m,onEjectTank:function(){return u("eject-tank")}}),(0,o.createComponentVNode)(2,a.Section,{title:"Fluid Tank",children:(0,o.createComponentVNode)(2,l.ReagentGraph,{container:v})})]})})}},15264:function(e,t,n){"use strict";t.__esModule=!0,t.PowerDebug=t.MachineData=t.AreaData=void 0;var o=n(96323),r=n(31246),a=n(26949),i=n(2381),c=function(e){var t=e.areaData;return(0,o.createComponentVNode)(2,a.Flex.Item,{mb:1,children:(0,o.createComponentVNode)(2,a.Flex,{direction:"column",children:Object.keys(t).map((function(e,n){return(0,o.createComponentVNode)(2,a.Flex.Item,{mb:1,children:[(0,o.createComponentVNode)(2,a.Section,{title:t[e].name,children:t[e].total?(0,o.createComponentVNode)(2,a.Flex,{justify:"space-between",children:[(0,o.createComponentVNode)(2,a.Flex.Item,{children:["Total:",t[e].total," "]}),(0,o.createComponentVNode)(2,a.Flex.Item,{children:["Equip:",t[e].equip]}),(0,o.createComponentVNode)(2,a.Flex.Item,{children:["Light:",t[e].light," "]}),(0,o.createComponentVNode)(2,a.Flex.Item,{children:["Environ:",t[e].environ]})]}):"NO APC"}),(0,o.createComponentVNode)(2,l,{machineData:t[e].machines})]},n)}))})})};t.AreaData=c;var l=function(e,t){var n=(0,r.useBackend)(t).act,i=e.machineData;return Object.keys(i).map((function(e,t){return(0,o.createComponentVNode)(2,a.Flex,{direction:"row",children:[(0,o.createComponentVNode)(2,a.Flex.Item,{children:(0,o.createComponentVNode)(2,a.Button,{onClick:function(){n("jmp",{ref:e})},children:"JMP"})}),(0,o.createComponentVNode)(2,a.Flex.Item,{basis:20,children:i[e].name}),(0,o.createComponentVNode)(2,a.Flex.Item,{basis:8,children:i[e].data}),(0,o.createComponentVNode)(2,a.Flex.Item,{children:i[e].power_usage})]},t)}))};t.MachineData=l;t.PowerDebug=function(e,t){var n=(0,r.useBackend)(t),l=(n.act,n.data.areaData);return(0,o.createComponentVNode)(2,i.Window,{title:"PowerDebug",width:500,height:600,children:(0,o.createComponentVNode)(2,i.Window.Content,{scrollable:!0,children:(0,o.createComponentVNode)(2,a.Section,{title:(0,o.createComponentVNode)(2,a.Box,{inline:!0,children:"Power Debug"}),children:(0,o.createComponentVNode)(2,a.Flex,{direction:"row",children:(0,o.createComponentVNode)(2,c,{areaData:l})})})})})}},4914:function(e,t,n){"use strict";t.__esModule=!0,t.PowerMonitorApcTableRows=t.PowerMonitorApcTableHeader=t.PowerMonitorApcGlobal=void 0;var o,r,a=n(96323),i=n(31246),c=n(26949),l=n(1033),u=((o={})[0]="Off",o[1]=(0,a.createComponentVNode)(2,c.Box,{inline:!0,children:["Off"," ",(0,a.createComponentVNode)(2,c.Box,{inline:!0,color:"grey",children:"(Auto)"})]}),o[2]="On",o[3]=(0,a.createComponentVNode)(2,c.Box,{inline:!0,children:["On"," ",(0,a.createComponentVNode)(2,c.Box,{inline:!0,color:"grey",children:"(Auto)"})]}),o),d=((r={})[0]="Discharging",r[1]="Charging",r[2]="Charged",r);t.PowerMonitorApcGlobal=function(e,t){var n=(0,i.useBackend)(t).data,o=n.history.map((function(e){return e[0]})),r=o.map((function(e,t){return[t,e]})),u=n.history.map((function(e){return e[1]})),d=u.map((function(e,t){return[t,e]})),s=Math.max.apply(Math,o.concat(u));return(0,a.createComponentVNode)(2,c.Stack,{fill:!0,children:[(0,a.createComponentVNode)(2,c.Stack.Item,{width:"50%",children:[(0,a.createComponentVNode)(2,c.LabeledList,{children:(0,a.createComponentVNode)(2,c.LabeledList.Item,{label:"Total Power",children:(0,l.formatPower)(n.available)})}),(0,a.createComponentVNode)(2,c.Chart.Line,{mt:"5px",height:"5em",data:r,rangeX:[0,r.length-1],rangeY:[0,s],strokeColor:"rgba(1, 184, 170, 1)",fillColor:"rgba(1, 184, 170, 0.25)"})]}),(0,a.createComponentVNode)(2,c.Stack.Item,{width:"50%",children:[(0,a.createComponentVNode)(2,c.LabeledList,{children:(0,a.createComponentVNode)(2,c.LabeledList.Item,{label:"Total Load",children:(0,l.formatPower)(n.load)})}),(0,a.createComponentVNode)(2,c.Chart.Line,{mt:"5px",height:"5em",data:d,rangeX:[0,d.length-1],rangeY:[0,s],strokeColor:"rgba(1, 184, 170, 1)",fillColor:"rgba(1, 184, 170, 0.25)"})]})]})};t.PowerMonitorApcTableHeader=function(){return(0,a.createFragment)([(0,a.createComponentVNode)(2,c.Table.Cell,{header:!0,children:"Area"}),(0,a.createComponentVNode)(2,c.Tooltip,{content:"Equipment",children:(0,a.createComponentVNode)(2,c.Table.Cell,{header:!0,collapsing:!0,children:"Eqp."})}),(0,a.createComponentVNode)(2,c.Tooltip,{content:"Lighting",children:(0,a.createComponentVNode)(2,c.Table.Cell,{header:!0,collapsing:!0,children:"Lgt."})}),(0,a.createComponentVNode)(2,c.Tooltip,{content:"Environment",children:(0,a.createComponentVNode)(2,c.Table.Cell,{header:!0,collapsing:!0,children:"Env."})}),(0,a.createComponentVNode)(2,c.Table.Cell,{header:!0,textAlign:"right",children:"Load"}),(0,a.createComponentVNode)(2,c.Table.Cell,{header:!0,textAlign:"right",children:"Cell Charge"}),(0,a.createComponentVNode)(2,c.Table.Cell,{header:!0,children:"Cell State"})],4)};t.PowerMonitorApcTableRows=function(e,t){var n=e.search,o=(0,i.useBackend)(t).data;return(0,a.createFragment)(o.apcs.map((function(e){return(0,a.createComponentVNode)(2,s,{apc:e,search:n},e[0])})),0)};var s=function(e,t){var n,o=e.apc,r=e.search,u=o[0],s=o[1],m=o[2],f=o[3],h=o[4],g=o[5],C=o[6],N=null!=(n=(0,i.useBackend)(t).data.apcNames[u])?n:"N/A";return r&&!N.toLowerCase().includes(r.toLowerCase())?null:(0,a.createComponentVNode)(2,c.Table.Row,{children:[(0,a.createComponentVNode)(2,c.Table.Cell,{children:N}),(0,a.createComponentVNode)(2,p,{state:s}),(0,a.createComponentVNode)(2,p,{state:m}),(0,a.createComponentVNode)(2,p,{state:f}),(0,a.createComponentVNode)(2,c.Table.Cell,{textAlign:"right",nowrap:!0,children:(0,l.formatPower)(h)}),"number"==typeof g?(0,a.createFragment)([(0,a.createComponentVNode)(2,c.Table.Cell,{textAlign:"right",nowrap:!0,children:[g,"%"]}),(0,a.createComponentVNode)(2,c.Table.Cell,{color:C>0?1===C?"average":"good":"bad",nowrap:!0,children:d[C]})],4):(0,a.createFragment)([(0,a.createComponentVNode)(2,c.Table.Cell),(0,a.createComponentVNode)(2,c.Table.Cell,{color:"bad",children:"N/A"})],4)]})},p=function(e){var t=e.state;return(0,a.createComponentVNode)(2,c.Table.Cell,{nowrap:!0,color:t>=2?"good":"bad",children:u[t]})}},8954:function(e,t,n){"use strict";t.__esModule=!0,t.PowerMonitorSmesTableRows=t.PowerMonitorSmesTableHeader=t.PowerMonitorSmesGlobal=void 0;var o=n(96323),r=n(31246),a=n(26949),i=n(1033);t.PowerMonitorSmesGlobal=function(e,t){var n=(0,r.useBackend)(t).data,c=n.history.map((function(e){return e[0]})),l=c.map((function(e,t){return[t,e]})),u=n.history.map((function(e){return e[1]})),d=u.map((function(e,t){return[t,e]})),s=Math.max.apply(Math,c.concat(u));return(0,o.createComponentVNode)(2,a.Stack,{fill:!0,children:[(0,o.createComponentVNode)(2,a.Stack.Item,{width:"50%",children:[(0,o.createComponentVNode)(2,a.LabeledList,{children:(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Engine Output",children:(0,i.formatPower)(n.available)})}),(0,o.createComponentVNode)(2,a.Chart.Line,{mt:"5px",height:"5em",data:l,rangeX:[0,l.length-1],rangeY:[0,s],strokeColor:"rgba(1, 184, 170, 1)",fillColor:"rgba(1, 184, 170, 0.25)"})]}),(0,o.createComponentVNode)(2,a.Stack.Item,{width:"50%",children:[(0,o.createComponentVNode)(2,a.LabeledList,{children:(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"SMES/PTL Draw",children:(0,i.formatPower)(n.load)})}),(0,o.createComponentVNode)(2,a.Chart.Line,{mt:"5px",height:"5em",data:d,rangeX:[0,d.length-1],rangeY:[0,s],strokeColor:"rgba(1, 184, 170, 1)",fillColor:"rgba(1, 184, 170, 0.25)"})]})]})};t.PowerMonitorSmesTableHeader=function(e,t){return(0,o.createFragment)([(0,o.createComponentVNode)(2,a.Table.Cell,{header:!0,children:"Area"}),(0,o.createComponentVNode)(2,a.Table.Cell,{header:!0,children:"Stored Power"}),(0,o.createComponentVNode)(2,a.Table.Cell,{header:!0,children:"Charging"}),(0,o.createComponentVNode)(2,a.Table.Cell,{header:!0,children:"Input"}),(0,o.createComponentVNode)(2,a.Table.Cell,{header:!0,children:"Output"}),(0,o.createComponentVNode)(2,a.Table.Cell,{header:!0,children:"Active"}),(0,o.createComponentVNode)(2,a.Table.Cell,{header:!0,children:"Load"})],4)};t.PowerMonitorSmesTableRows=function(e,t){var n=e.search,a=(0,r.useBackend)(t).data;return(0,o.createFragment)(a.units.map((function(e){return(0,o.createComponentVNode)(2,c,{unit:e,search:n},e[0])})),0)};var c=function(e,t){var n,c=e.unit,l=e.search,u=c[0],d=c[1],s=c[2],p=c[3],m=c[4],f=c[5],h=c[6],g=null!=(n=(0,r.useBackend)(t).data.unitNames[u])?n:"N/A";return l&&!g.toLowerCase().includes(l.toLowerCase())?null:(0,o.createComponentVNode)(2,a.Table.Row,{children:[(0,o.createComponentVNode)(2,a.Table.Cell,{children:g}),(0,o.createComponentVNode)(2,a.Table.Cell,{children:[d,"%"]}),(0,o.createComponentVNode)(2,a.Table.Cell,{color:s?"good":"bad",children:s?"Yes":"No"}),(0,o.createComponentVNode)(2,a.Table.Cell,{children:(0,i.formatPower)(p)}),(0,o.createComponentVNode)(2,a.Table.Cell,{children:(0,i.formatPower)(m)}),(0,o.createComponentVNode)(2,a.Table.Cell,{color:f?"good":"bad",children:f?"Yes":"No"}),(0,o.createComponentVNode)(2,a.Table.Cell,{children:h?(0,i.formatPower)(h):"N/A"})]})}},84699:function(e,t,n){"use strict";t.__esModule=!0,t.PowerMonitor=void 0;var o=n(96323),r=n(31246),a=n(26949),i=n(2381),c=n(4914),l=n(8954),u=n(2441);t.PowerMonitor=function(e,t){var n=(0,r.useBackend)(t).data,d=(0,r.useSharedState)(t,"search",""),s=d[0],p=d[1];return(0,o.createComponentVNode)(2,i.Window,{width:700,height:700,theme:"retro-dark",children:(0,o.createComponentVNode)(2,i.Window.Content,{children:(0,o.createComponentVNode)(2,a.Stack,{vertical:!0,fill:!0,children:[(0,o.createComponentVNode)(2,a.Stack.Item,{children:(0,o.createComponentVNode)(2,a.Section,{children:[(0,u.isDataForApc)(n)&&(0,o.createComponentVNode)(2,c.PowerMonitorApcGlobal),(0,u.isDataForSmes)(n)&&(0,o.createComponentVNode)(2,l.PowerMonitorSmesGlobal)]})}),(0,o.createComponentVNode)(2,a.Stack.Item,{children:(0,o.createComponentVNode)(2,a.Section,{children:(0,o.createComponentVNode)(2,a.LabeledList,{children:(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Search",children:(0,o.createComponentVNode)(2,a.Input,{value:s,onInput:function(e,t){return p(t)}})})})})}),(0,o.createComponentVNode)(2,a.Stack.Item,{grow:1,children:(0,o.createComponentVNode)(2,a.Section,{fill:!0,scrollable:!0,children:(0,o.createComponentVNode)(2,a.Table,{children:[(0,o.createComponentVNode)(2,a.Table.Row,{header:!0,children:(0,u.isDataForApc)(n)&&(0,o.createComponentVNode)(2,c.PowerMonitorApcTableHeader)}),(0,u.isDataForApc)(n)&&(0,o.createComponentVNode)(2,c.PowerMonitorApcTableRows,{search:s}),(0,o.createComponentVNode)(2,a.Table.Row,{header:!0,children:(0,u.isDataForSmes)(n)&&(0,o.createComponentVNode)(2,l.PowerMonitorSmesTableHeader)}),(0,u.isDataForSmes)(n)&&(0,o.createComponentVNode)(2,l.PowerMonitorSmesTableRows,{search:s})]})})})]})})})}},2441:function(e,t){"use strict";var n;t.__esModule=!0,t.isDataForSmes=t.isDataForApc=t.PowerMonitorType=void 0,t.PowerMonitorType=n,function(e){e.Apc="apc",e.Smes="smes"}(n||(t.PowerMonitorType=n={}));t.isDataForApc=function(e){return e.type===n.Apc};t.isDataForSmes=function(e){return e.type===n.Smes}},36476:function(e,t,n){"use strict";t.__esModule=!0,t.PowerTransmissionLaser=void 0;var o=n(96323),r=n(31246),a=n(26949),i=n(1033),c=n(2381);t.PowerTransmissionLaser=function(e,t){var n=(0,r.useBackend)(t).data,s=n.lifetimeEarnings,p=n.name,m=void 0===p?"Power Transmission Laser":p;return(0,o.createComponentVNode)(2,c.Window,{title:m,width:"310",height:"485",children:(0,o.createComponentVNode)(2,c.Window.Content,{children:[(0,o.createComponentVNode)(2,l),(0,o.createComponentVNode)(2,u),(0,o.createComponentVNode)(2,d),(0,o.createComponentVNode)(2,a.NoticeBox,{success:!0,children:["Earned Credits : ",(0,i.formatMoney)(s)]})]})})};var l=function(e,t){var n=(0,r.useBackend)(t).data,c=n.capacity,l=n.charge,u=n.gridLoad,d=n.totalGridPower;return(0,o.createComponentVNode)(2,a.Section,{title:"Status",children:[(0,o.createComponentVNode)(2,a.LabeledList,{children:(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Reserve Power",children:(0,i.formatSiUnit)(l,0,"J")})}),(0,o.createComponentVNode)(2,a.ProgressBar,{mt:"0.5em",mb:"0.5em",ranges:{good:[.8,Infinity],average:[.5,.8],bad:[-Infinity,.5]},value:l/c}),(0,o.createComponentVNode)(2,a.LabeledList,{children:(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Grid Saturation"})}),(0,o.createComponentVNode)(2,a.ProgressBar,{mt:"0.5em",ranges:{good:[.8,Infinity],average:[.5,.8],bad:[-Infinity,.5]},value:d?u/d:0})]})},u=function(e,t){var n=(0,r.useBackend)(t),c=n.act,l=n.data,u=l.isChargingEnabled,d=l.excessPower,s=l.isCharging,p=l.inputLevel,m=l.inputNumber,f=l.inputMultiplier;return(0,o.createComponentVNode)(2,a.Section,{title:"Input Controls",children:[(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Input Circuit",buttons:(0,o.createComponentVNode)(2,a.Button,{icon:"power-off",content:u?"Enabled":"Disabled",color:u?"green":"red",onClick:function(){return c("toggleInput")}}),children:(0,o.createComponentVNode)(2,a.Box,{color:(s?"good":u&&"average")||"bad",children:(s?"Online":u&&"Idle")||"Offline"})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Input Level",children:(0,i.formatPower)(p)}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Optimal",children:(0,i.formatPower)(d)})]}),(0,o.createComponentVNode)(2,a.Box,{mt:"0.5em",children:[(0,o.createComponentVNode)(2,a.Knob,{mr:"0.5em",animated:!0,size:1.25,inline:!0,step:5,stepPixelSize:2,minValue:0,maxValue:999,value:m,onDrag:function(e,t){return c("setInput",{setInput:t})}}),(0,o.createComponentVNode)(2,a.Button,{content:"W",selected:1===f,onClick:function(){return c("inputW")}}),(0,o.createComponentVNode)(2,a.Button,{content:"kW",selected:f===Math.pow(10,3),onClick:function(){return c("inputkW")}}),(0,o.createComponentVNode)(2,a.Button,{content:"MW",selected:f===Math.pow(10,6),onClick:function(){return c("inputMW")}}),(0,o.createComponentVNode)(2,a.Button,{content:"GW",selected:f===Math.pow(10,9),onClick:function(){return c("inputGW")}}),(0,o.createComponentVNode)(2,a.Button,{content:"TW",selected:f===Math.pow(10,12),onClick:function(){return c("inputTW")}})]})]})},d=function(e,t){var n=(0,r.useBackend)(t),c=n.act,l=n.data,u=l.isEmagged,d=l.isFiring,s=l.isLaserEnabled,p=l.outputLevel,m=l.outputNumber,f=l.outputMultiplier;return(0,o.createComponentVNode)(2,a.Section,{title:"Output Controls",children:[(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Laser Circuit",buttons:(0,o.createComponentVNode)(2,a.Button,{icon:"power-off",content:s?"Enabled":"Disabled",color:s?"green":"red",onClick:function(){return c("toggleOutput")}}),children:(0,o.createComponentVNode)(2,a.Box,{color:(d?"good":s&&"average")||"bad",children:(d?"Online":s&&"Idle")||"Offline"})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Output Level",children:m<0?"-"+(0,i.formatPower)(Math.abs(p)):(0,i.formatPower)(p)})]}),(0,o.createComponentVNode)(2,a.Box,{mt:"0.5em",children:[(0,o.createComponentVNode)(2,a.Knob,{mr:"0.5em",size:1.25,animated:!0,bipolar:u,inline:!0,step:5,stepPixelSize:2,minValue:u?-999:0,maxValue:999,ranges:{bad:[-Infinity,-1]},value:m,onDrag:function(e,t){return c("setOutput",{setOutput:t})}}),(0,o.createComponentVNode)(2,a.Button,{content:"MW",selected:f===Math.pow(10,6),onClick:function(){return c("outputMW")}}),(0,o.createComponentVNode)(2,a.Button,{content:"GW",selected:f===Math.pow(10,9),onClick:function(){return c("outputGW")}}),(0,o.createComponentVNode)(2,a.Button,{content:"TW",selected:f===Math.pow(10,12),onClick:function(){return c("outputTW")}})]})]})}},61221:function(e,t,n){"use strict";t.__esModule=!0,t.Precipitation=void 0;var o=n(96323),r=n(31246),a=n(26949),i=n(2381),c=n(51418);t.Precipitation=function(e,t){var n=(0,r.useBackend)(t),l=n.act,u=n.data,d=u.probability,s=u.cooldown,p=u.poolDepth,m=u.containerData;return(0,o.createComponentVNode)(2,i.Window,{title:"Precipitation",width:300,height:425,children:(0,o.createComponentVNode)(2,i.Window.Content,{scrollable:!0,children:(0,o.createComponentVNode)(2,a.Section,{title:(0,o.createComponentVNode)(2,a.Box,{inline:!0,children:"Precipitation"}),children:[(0,o.createComponentVNode)(2,a.Tooltip,{content:"Cooldown for how fast ATOMs can be rained on.",children:(0,o.createComponentVNode)(2,a.Box,{m:1,children:["Cooldown",(0,o.createComponentVNode)(2,a.NumberInput,{value:s,width:4,minValue:0,onChange:function(e,t){return l("set-cooldown",{value:t})}})]})}),(0,o.createComponentVNode)(2,a.Tooltip,{content:"Chance of being rained on entering turf.",children:(0,o.createComponentVNode)(2,a.Box,{m:1,children:["Probability",(0,o.createComponentVNode)(2,a.NumberInput,{value:d,width:4,minValue:0,maxValue:100,onChange:function(e,t){return l("set-probability",{value:t})}})]})}),(0,o.createComponentVNode)(2,a.Tooltip,{content:"Maximum fluid size/depth on the tile. (0 means no pooling will form)",children:(0,o.createComponentVNode)(2,a.Box,{m:1,children:["Maximum Pool Depth",(0,o.createComponentVNode)(2,a.NumberInput,{value:p,width:4,minValue:0,maxValue:100,onChange:function(e,t){return l("set-poolDepth",{value:t})}})]})}),(0,o.createComponentVNode)(2,a.Section,{title:"Reagents",children:[(0,o.createComponentVNode)(2,c.ReagentList,{container:m,renderButtons:function(e){return(0,o.createFragment)([(0,o.createComponentVNode)(2,a.Button,{px:.75,mr:1.5,icon:"filter",color:"red",title:"Isolate",onClick:function(){return l("isolate",{container_id:m.id,reagent_id:e.id})}}),(0,o.createComponentVNode)(2,a.Button,{px:.75,icon:"times",color:"red",title:"Flush",onClick:function(){return l("flush_reagent",{container_id:m.id,reagent_id:e.id})}})],4)}}),(0,o.createComponentVNode)(2,a.Box,{m:1,children:[(0,o.createComponentVNode)(2,a.Button,{ml:1,onClick:function(){return l("add_reagents")},children:"Add Reagents"}),(0,o.createComponentVNode)(2,a.Button,{ml:1,onClick:function(){return l("flush")},children:"Clear Reagents"})]})]}),(0,o.createComponentVNode)(2,a.Section,{title:"Particle",children:(0,o.createComponentVNode)(2,a.Box,{m:1,children:(0,o.createComponentVNode)(2,a.Button,{fluid:!0,onClick:function(){return l("particle_editor")},children:"Edit Particle"})})})]})})})}},90227:function(e,t,n){"use strict";t.__esModule=!0,t.Pressurizer=void 0;var o=n(96323),r=n(31246),a=n(26949),i=n(2381),c=n(41161),l=0,u=1,d=2,s={good:[1,Infinity],average:[.75,1],bad:[-Infinity,.75]};t.Pressurizer=function(e,t){var n=(0,r.useBackend)(t),p=n.act,m=n.data,f=m.airSafe,h=m.blastArmed,g=m.blastDelay,C=m.connected,N=m.emagged,v=m.fanState,b=m.materialsCount,V=m.materialsProgress,y=m.maxArmDelay,x=m.maxPressure,I=m.maxRelease,k=m.minArmDelay,w=m.minBlastPercent,S=m.minRelease,_=m.pressure,M=m.processRate,D=m.releasePressure,B=function(e){p("set-pressure",{releasePressure:e})},A=function(e){p("set-blast-delay",{blastDelay:e})},T=function(e){p("set-process_rate",{processRate:e})},L=function(e){p("fan",{fanState:e})},E=_<x*w;return(0,o.createComponentVNode)(2,i.Window,{theme:N?"syndicate":"ntos",width:390,height:380,children:(0,o.createComponentVNode)(2,i.Window.Content,{children:[(0,o.createComponentVNode)(2,c.PortableBasicInfo,{connected:C,pressure:_,maxPressure:x,children:[(0,o.createComponentVNode)(2,a.Divider),(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Emergency Blast Release",children:(0,o.createComponentVNode)(2,a.Button,{fluid:!0,textAlign:"center",icon:"circle",content:E?"Insufficient Pressure":f?h?"Armed":"Ready":"AIR UNSAFE - Locked",disabled:E||!f,color:h?"bad":"average",onClick:function(){p("arm")}})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Delay",children:[(0,o.createComponentVNode)(2,a.Button,{onClick:function(){return A(k)},children:"Min"}),(0,o.createComponentVNode)(2,a.NumberInput,{animated:!0,width:"7em",value:g,minValue:k,maxValue:y,onChange:function(e,t){return A(t)}}),(0,o.createComponentVNode)(2,a.Button,{onClick:function(){return A(y)},children:"Max"})]})]}),(0,o.createComponentVNode)(2,a.Divider),(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Fan Status",children:[(0,o.createComponentVNode)(2,a.Button,{color:v===l?"bad":"default",onClick:function(){return L(l)},children:"Off"}),(0,o.createComponentVNode)(2,a.Button,{selected:v===u,onClick:function(){return L(u)},children:"In"}),(0,o.createComponentVNode)(2,a.Button,{selected:v===d,onClick:function(){return L(d)},children:"Out"})]}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Release Pressure",children:[(0,o.createComponentVNode)(2,a.Button,{onClick:function(){return B(S)},children:"Min"}),(0,o.createComponentVNode)(2,a.NumberInput,{animated:!0,width:"7em",value:D,minValue:S,maxValue:I,onChange:function(e,t){return B(t)}}),(0,o.createComponentVNode)(2,a.Button,{onClick:function(){return B(I)},children:"Max"})]})]})]}),(0,o.createComponentVNode)(2,a.Section,{title:"Material Processing",buttons:(0,o.createComponentVNode)(2,a.Button,{icon:"eject",disabled:0===b,onClick:function(){p("eject-materials")},children:"Eject"}),children:(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Speed",children:[(0,o.createComponentVNode)(2,a.Button,{selected:1===M,onClick:function(){return T(1)},children:"1"}),(0,o.createComponentVNode)(2,a.Button,{selected:2===M,onClick:function(){return T(2)},children:"2"}),(0,o.createComponentVNode)(2,a.Button,{selected:3===M,onClick:function(){return T(3)},children:"3"}),!!N&&(0,o.createFragment)([(0,o.createComponentVNode)(2,a.Button,{selected:4===M,onClick:function(){return T(4)},children:"4"}),(0,o.createComponentVNode)(2,a.Button,{selected:5===M,onClick:function(){return T(5)},children:"5"})],4)]}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Progress",children:(0,o.createComponentVNode)(2,a.ProgressBar,{ranges:s,value:V/100})})]})})]})})}},62376:function(e,t,n){"use strict";t.__esModule=!0,t.ProcCall=void 0;var o=n(96323),r=n(31246),a=n(26949),i=n(48916),c=n(2381);t.ProcCall=function(e,t){var n=(0,r.useBackend)(t),l=n.act,u=n.data,d=u.name,s=u.options;return(0,o.createComponentVNode)(2,c.Window,{title:"Proc Call",width:700,height:600,children:(0,o.createComponentVNode)(2,c.Window.Content,{scrollable:!0,children:(0,o.createComponentVNode)(2,a.Section,{title:(0,o.createComponentVNode)(2,a.Box,{inline:!0,children:d}),children:[(0,o.createComponentVNode)(2,a.Flex,{direction:"row",children:(0,o.createComponentVNode)(2,a.Flex.Item,{ml:1,children:(0,o.createComponentVNode)(2,i.DataInputOptions,{options:s})})}),(0,o.createComponentVNode)(2,a.Box,{m:1,children:(0,o.createComponentVNode)(2,a.Button,{fluid:!0,onClick:function(){return l("activate")},children:"Confirm Event"})})]})})})}},42626:function(e,t,n){"use strict";t.__esModule=!0,t.Radio=void 0;var o=n(96323),r=n(31246),a=n(26949),i=n(1033),c=n(2381),l=n(39582);t.Radio=function(e,t){var n=(0,r.useBackend)(t),u=n.data,d=n.act,s=function(e,t){d("set-frequency",{value:e,finish:t})},p=function(e,t){d("set-code",{value:e,finish:t})};return(0,o.createComponentVNode)(2,c.Window,{width:"280",height:"400",title:u.name,children:(0,o.createComponentVNode)(2,c.Window.Content,{children:(0,o.createComponentVNode)(2,a.Stack,{vertical:!0,fill:!0,children:[(0,o.createComponentVNode)(2,a.Stack.Item,{children:(0,o.createComponentVNode)(2,a.Section,{children:(0,o.createComponentVNode)(2,a.LabeledList,{children:[!!u.hasToggleButton&&(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Power",children:(0,o.createComponentVNode)(2,a.Button.Checkbox,{checked:u.power,onClick:function(){return d("toggle-power")},children:u.power?"Powered on":"Powered off"})}),!!u.hasMicrophone&&(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Microphone",children:(0,o.createComponentVNode)(2,a.Button.Checkbox,{checked:u.broadcasting,onClick:function(){return d("toggle-broadcasting")},children:u.broadcasting?"Engaged":"Disengaged"})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Speaker",children:(0,o.createComponentVNode)(2,a.Button.Checkbox,{checked:u.listening,onClick:function(){return d("toggle-listening")},children:u.listening?"Engaged":"Disengaged"})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Frequency",children:(0,o.createComponentVNode)(2,a.Stack,{align:"center",children:[(0,o.createComponentVNode)(2,a.Stack.Item,{children:!u.lockedFrequency&&(0,o.createComponentVNode)(2,a.Knob,{animated:!0,value:u.frequency,minValue:1441,maxValue:1489,stepPixelSize:2,format:i.formatFrequency,onDrag:function(e,t){return s(t,!1)},onChange:function(e,t){return s(t,!0)}})}),(0,o.createComponentVNode)(2,a.Stack.Item,{children:(0,o.createComponentVNode)(2,a.AnimatedNumber,{value:u.frequency,format:i.formatFrequency})})]})}),!!u.code&&(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Code",children:(0,o.createComponentVNode)(2,a.Stack,{align:"center",children:[(0,o.createComponentVNode)(2,a.Stack.Item,{children:(0,o.createComponentVNode)(2,a.Knob,{animated:!0,value:u.code,minValue:1,maxValue:100,stepPixelSize:1,onDrag:function(e,t){return p(t,!1)},onChange:function(e,t){return p(t,!0)}})}),(0,o.createComponentVNode)(2,a.Stack.Item,{children:(0,o.createComponentVNode)(2,a.AnimatedNumber,{value:u.code})})]})}),!!u.sendButton&&(0,o.createComponentVNode)(2,a.LabeledList.Item,{children:(0,o.createComponentVNode)(2,a.Button,{align:"center",onClick:function(){d("send")},children:"Send signal"})})]})})}),u.secureFrequencies.length>0&&(0,o.createComponentVNode)(2,a.Stack.Item,{grow:1,children:(0,o.createComponentVNode)(2,a.Section,{title:"Supplementary Channels",fill:!0,scrollable:!0,children:(0,o.createComponentVNode)(2,a.Table,{children:[(0,o.createComponentVNode)(2,a.Table.Row,{header:!0,children:[(0,o.createComponentVNode)(2,a.Table.Cell,{header:!0,children:"Channel"}),(0,o.createComponentVNode)(2,a.Table.Cell,{header:!0,children:"Frequency"}),(0,o.createComponentVNode)(2,a.Table.Cell,{header:!0,children:"Prefix"})]}),u.secureFrequencies.map((function(e){return(0,o.createComponentVNode)(2,a.Table.Row,{children:[(0,o.createComponentVNode)(2,a.Table.Cell,{children:e.channel}),(0,o.createComponentVNode)(2,a.Table.Cell,{children:e.frequency}),(0,o.createComponentVNode)(2,a.Table.Cell,{children:(0,o.createComponentVNode)(2,a.Box,{as:"code",children:e.sayToken})})]},e.frequency)}))]})})}),!!u.modifiable&&(0,o.createComponentVNode)(2,a.Stack.Item,{children:(0,o.createComponentVNode)(2,a.Section,{title:"Access Panel",children:(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Green Wire",labelColor:"green",children:(0,o.createComponentVNode)(2,a.Button,{color:"green",onClick:function(){return d("toggle-wire",{wire:l.RadioWires.Transmit})},children:u.wires&l.RadioWires.Transmit?"Cut":"Mend"})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Red Wire",labelColor:"red",children:(0,o.createComponentVNode)(2,a.Button,{color:"red",onClick:function(){return d("toggle-wire",{wire:l.RadioWires.Receive})},children:u.wires&l.RadioWires.Receive?"Cut":"Mend"})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Blue Wire",labelColor:"blue",children:(0,o.createComponentVNode)(2,a.Button,{color:"blue",onClick:function(){return d("toggle-wire",{wire:l.RadioWires.Signal})},children:u.wires&l.RadioWires.Signal?"Cut":"Mend"})})]})})})]})})})}},39582:function(e,t){"use strict";var n;t.__esModule=!0,t.RadioWires=void 0,t.RadioWires=n,function(e){e[e.Signal=1]="Signal",e[e.Receive=2]="Receive",e[e.Transmit=4]="Transmit"}(n||(t.RadioWires=n={}))},16710:function(e,t,n){"use strict";t.__esModule=!0,t.RandomEvent=void 0;var o=n(96323),r=n(31246),a=n(26949),i=n(48916),c=n(2381);t.RandomEvent=function(e,t){var n=(0,r.useBackend)(t),l=n.act,u=n.data,d=u.eventName,s=u.eventOptions;return(0,o.createComponentVNode)(2,c.Window,{title:"Random Event",width:700,height:600,children:(0,o.createComponentVNode)(2,c.Window.Content,{scrollable:!0,children:(0,o.createComponentVNode)(2,a.Section,{title:(0,o.createComponentVNode)(2,a.Box,{inline:!0,children:d}),children:[(0,o.createComponentVNode)(2,a.Flex,{direction:"row",children:(0,o.createComponentVNode)(2,a.Flex.Item,{ml:1,children:(0,o.createComponentVNode)(2,i.DataInputOptions,{options:s})})}),(0,o.createComponentVNode)(2,a.Box,{m:1,children:(0,o.createComponentVNode)(2,a.Button,{fluid:!0,onClick:function(){return l("activate")},children:"Confirm Event"})})]})})})}},63777:function(e,t,n){"use strict";t.__esModule=!0,t.ReagentExtractor=void 0;var o=n(96323),r=n(31246),a=n(26949),i=n(2381),c=n(51418);t.ReagentExtractor=function(e,t){var n=(0,r.useBackend)(t).data.containersData,c=n.inserted,d=n.storage_tank_1,s=n.storage_tank_2;return(0,o.createComponentVNode)(2,i.Window,{title:"Reagent Extractor",width:500,height:739,theme:"ntos",children:(0,o.createComponentVNode)(2,i.Window.Content,{children:(0,o.createComponentVNode)(2,a.Stack,{vertical:!0,fill:!0,children:[(0,o.createComponentVNode)(2,a.Stack.Item,{basis:19.5,children:(0,o.createComponentVNode)(2,l,{container:c,insertable:!0})}),(0,o.createComponentVNode)(2,a.Stack.Item,{grow:!0,basis:"auto",children:(0,o.createComponentVNode)(2,a.Stack,{fill:!0,children:[(0,o.createComponentVNode)(2,a.Stack.Item,{grow:!0,children:(0,o.createComponentVNode)(2,u)}),(0,o.createComponentVNode)(2,a.Stack.Item,{basis:18,children:(0,o.createComponentVNode)(2,a.Stack,{vertical:!0,fill:!0,children:[(0,o.createComponentVNode)(2,a.Stack.Item,{basis:19.5,grow:!0,children:(0,o.createComponentVNode)(2,l,{container:d})}),(0,o.createComponentVNode)(2,a.Stack.Item,{basis:19.5,children:(0,o.createComponentVNode)(2,l,{container:s})})]})})]})})]})})})};var l=function(e,t){var n=(0,r.useBackend)(t).act,i=e.insertable,l=e.container||c.NoContainer,u=(0,r.useSharedState)(t,"transferAmount_"+l.id,10),d=u[0],s=u[1];return(0,o.createComponentVNode)(2,a.SectionEx,{capitalize:!0,title:l.name,buttons:(0,o.createFragment)([(0,o.createComponentVNode)(2,a.Button,{title:"Flush All",icon:"times",color:"red",disabled:!l.totalVolume,onClick:function(){return n("flush",{container_id:l.id})}}),!i||(0,o.createComponentVNode)(2,a.Button,{title:"Eject",icon:"eject",disabled:!e.container,onClick:function(){return n("ejectcontainer")}})],0),children:[!!e.container||(0,o.createComponentVNode)(2,a.Dimmer,{children:(0,o.createComponentVNode)(2,a.Button,{icon:"eject",fontSize:1.5,onClick:function(){return n("insertcontainer")},bold:!0,children:"Insert Beaker"})}),(0,o.createComponentVNode)(2,c.ReagentGraph,{container:l}),(0,o.createComponentVNode)(2,c.ReagentList,{container:l,renderButtons:function(e){return(0,o.createFragment)([(0,o.createComponentVNode)(2,a.Button,{px:.75,mr:1.5,icon:"filter",color:"red",title:"Isolate",onClick:function(){return n("isolate",{container_id:l.id,reagent_id:e.id})}}),(0,o.createComponentVNode)(2,a.Button,{px:.75,icon:"times",color:"red",title:"Flush",onClick:function(){return n("flush_reagent",{container_id:l.id,reagent_id:e.id})}})],4)}}),(0,o.createComponentVNode)(2,a.Flex,{wrap:!0,justify:"center",children:[(0,o.createComponentVNode)(2,a.Flex.Item,{grow:!0}),(0,o.createComponentVNode)(2,a.Flex.Item,{grow:!0,basis:"auto",children:(0,o.createComponentVNode)(2,a.Button,{mb:.5,width:17,textAlign:"center",selected:l.selected,title:"Select Extraction and Transfer Target",icon:l.selected?"check-square-o":"square-o",onClick:function(){return n("extractto",{container_id:l.id})},children:"Select"})}),(0,o.createComponentVNode)(2,a.Flex.Item,{children:(0,o.createComponentVNode)(2,a.Flex,{width:17,children:[(0,o.createComponentVNode)(2,a.Flex.Item,{grow:!0,children:[(0,o.createComponentVNode)(2,a.Button,{disabled:l.selected,onClick:function(){return n("chemtransfer",{container_id:l.id,amount:d})},children:"Transfer"}),(0,o.createComponentVNode)(2,a.NumberInput,{value:d,format:function(e){return e+"u"},minValue:1,maxValue:500,onDrag:function(e,t){return s(t)}})]}),(0,o.createComponentVNode)(2,a.Flex.Item,{children:(0,o.createComponentVNode)(2,a.Button,{disabled:l.selected,onClick:function(){return n("chemtransfer",{container_id:l.id,amount:500})},children:"Transfer All"})})]})})]})]})},u=function(e,t){var n,i,c,l=(0,r.useBackend)(t),u=l.act,d=l.data,s=d.autoextract,p=d.ingredientsData||[],m=(0,r.useLocalState)(t,"page",1),f=m[0],h=m[1],g=Math.max(1,Math.ceil(p.length/25));(f<1||f>g)&&h((n=f,i=1,c=g,Math.min(Math.max(i,n),c)));var C=p.slice(25*(f-1),25*(f-1)+25);return(0,o.createComponentVNode)(2,a.Section,{fill:!0,title:"Extractable Items",buttons:(0,o.createComponentVNode)(2,a.Button.Checkbox,{checked:s,tooltip:"Items will be extracted into the selected container automatically upon insertion.",onClick:function(){return u("autoextract")},children:"Auto-Extract"}),children:(0,o.createComponentVNode)(2,a.Flex,{height:"100%",direction:"column",children:[(0,o.createComponentVNode)(2,a.Flex.Item,{grow:!0,children:(0,o.createComponentVNode)(2,a.Section,{scrollable:!0,fill:!0,children:C.map((function(e,t){return(0,o.createFragment)([(0,o.createComponentVNode)(2,a.Flex,{children:[(0,o.createComponentVNode)(2,a.Flex.Item,{grow:!0,children:e.name}),(0,o.createComponentVNode)(2,a.Flex.Item,{nowrap:!0,children:[(0,o.createComponentVNode)(2,a.Button,{onClick:function(){return u("extractingredient",{ingredient_id:e.id})},children:"Extract"}),(0,o.createComponentVNode)(2,a.Button,{icon:"eject",title:"Eject",onClick:function(){return u("ejectingredient",{ingredient_id:e.id})}})]})]}),(0,o.createComponentVNode)(2,a.Divider)],4,e.id)}))})}),g<2||(0,o.createComponentVNode)(2,a.Flex.Item,{textAlign:"center",basis:1.5,children:[(0,o.createComponentVNode)(2,a.Button,{icon:"caret-left",title:"Previous Page",disabled:f<2,onClick:function(){return h(f-1)}}),(0,o.createComponentVNode)(2,a.NumberInput,{value:f,format:function(e){return"Page "+e+"/"+g},minValue:1,maxValue:g,stepPixelSize:15,onChange:function(e,t){return h(t)}}),(0,o.createComponentVNode)(2,a.Button,{icon:"caret-right",title:"Next Page",disabled:f>g-1,onClick:function(){return h(f+1)}})]})]})})}},89971:function(e,t,n){"use strict";t.__esModule=!0,t.Rockbox=void 0;var o=n(96323),r=n(31246),a=n(26949),i=n(25808),c=n(2381);t.Rockbox=function(e,t){var n=(0,r.useBackend)(t),l=n.act,u=n.data,d=u.default_price,s=u.autosell,p=(0,r.useLocalState)(t,"takeAmount",1),m=p[0],f=p[1];return(0,o.createComponentVNode)(2,c.Window,{title:"Rockbox",width:375,height:400,children:(0,o.createComponentVNode)(2,c.Window.Content,{children:(0,o.createComponentVNode)(2,a.Stack,{vertical:!0,fill:!0,children:[(0,o.createComponentVNode)(2,a.Stack.Item,{children:(0,o.createComponentVNode)(2,a.Section,{fill:!0,children:[(0,o.createComponentVNode)(2,a.Box,{children:["Amount to eject: ",(0,o.createComponentVNode)(2,a.NumberInput,{value:m,width:4,minValue:1,onDrag:function(e,t){return f(t)},onChange:function(e,t){return f(t)}})]}),(0,o.createComponentVNode)(2,a.Divider),(0,o.createComponentVNode)(2,a.Tooltip,{content:"Default price for new ore entries.",position:"bottom",children:(0,o.createComponentVNode)(2,a.Box,{as:"span",children:[" ","Default Price: ",(0,o.createComponentVNode)(2,a.NumberInput,{value:d,width:4,minValue:0,format:function(e){return e+"\u2abd"},onChange:function(e,t){return l("set-default-price",{newPrice:t})}})]})}),(0,o.createComponentVNode)(2,a.Button.Checkbox,{checked:s,tooltip:"Mark new ore entries for sale automatically.",onClick:function(){return l("toggle-auto-sell")},children:"Auto-Sell"})]})}),(0,o.createComponentVNode)(2,a.Stack.Item,{grow:1,children:(0,o.createComponentVNode)(2,a.Section,{fill:!0,scrollable:!0,children:u.ores.length?(0,o.createComponentVNode)(2,a.Box,{children:u.ores.map((function(e){return(0,o.createFragment)([(0,o.createComponentVNode)(2,a.Tooltip,{position:"bottom",content:e.stats,children:(0,o.createComponentVNode)(2,a.Table,{children:(0,o.createComponentVNode)(2,a.Table.Row,{children:[(0,o.createComponentVNode)(2,a.Table.Cell,{style:{"vertical-align":"top"},children:(0,o.createComponentVNode)(2,a.Box,{children:e.name+": "+e.amount})}),(0,o.createComponentVNode)(2,a.Table.Cell,{textAlign:"right",children:(0,o.createComponentVNode)(2,a.Stack,{vertical:!0,textAlign:"left",inline:!0,children:[(0,o.createComponentVNode)(2,a.Stack.Item,{children:["Price: ",(0,o.createComponentVNode)(2,a.NumberInput,{value:e.price,width:4,minValue:0,format:function(e){return e+"\u2abd"},onChange:function(t,n){return l("set-ore-price",{newPrice:n,ore:e.name})}}),(0,o.createComponentVNode)(2,i.ButtonCheckbox,{content:"For Sale",color:e.forSale?"green":"red",checked:e.forSale,onClick:function(){return l("toggle-ore-sell-status",{ore:e.name})}}),(0,o.createComponentVNode)(2,a.Button,{color:e.amount<m?"orange":"default",disabled:0===e.amount,onClick:function(){return l("dispense-ore",{ore:e.name,take:m})},children:"Eject"})]}),(0,o.createComponentVNode)(2,a.Stack.Item,{children:!!e.amountSold&&(0,o.createComponentVNode)(2,a.Box,{children:"Amount sold: "+e.amountSold})})]})})]})})}),(0,o.createComponentVNode)(2,a.Divider)],4,e.name)}))}):(0,o.createComponentVNode)(2,a.Box,{children:"No ores stored"})})})]})})})}},95285:function(e,t,n){"use strict";t.__esModule=!0,t.SecureSafe=void 0;var o=n(96323),r=n(31246),a=n(26949),i=n(2381),c=n(18331),l=[["7","8","9","A"],["4","5","6","B"],["1","2","3","C"],["0","F","E","D"]],u=function(e,t){var n=e.attempt,r=e.codeLen,i=e.disabled,l=e.emagged,u=e.padMsg,d=(e.theme,u||function(e,t){return e.padEnd(t,"*").split("").join(" ")}(n,r));return i&&(d="NO ACCESS"),l&&(d=(0,c.glitch)(d,2)),(0,o.createComponentVNode)(2,a.Box,{fontSize:"25px",fontFamily:"Courier",bold:!0,textAlign:"center",padding:"3px",backgroundColor:"#342210",style:{"border-width":"0.1em","border-style":"solid","border-radius":"0.16em","border-color":"#FC8E1F"},children:d})},d=function(e,t){var n=e.act;return(0,o.createFragment)([(0,o.createComponentVNode)(2,a.Flex.Item,{children:l.map((function(e,t){var r=e.length;return(0,o.createComponentVNode)(2,a.Flex,{justify:"space-between",mt:1,children:e.map((function(e,t){return(0,o.createComponentVNode)(2,a.Flex.Item,{grow:1,mr:t<r-1?1:0,children:(0,o.createComponentVNode)(2,a.Button,{fluid:!0,textAlign:"center",fontSize:"25px",fontFamily:"Courier",bold:!0,content:e,onClick:function(){return n("input",{input:e})}})},e)}))},"row-"+t)}))}),(0,o.createComponentVNode)(2,a.Flex.Item,{mt:1,children:(0,o.createComponentVNode)(2,a.Flex,{justify:"space-between",children:[(0,o.createComponentVNode)(2,a.Flex.Item,{grow:1,mr:1,children:(0,o.createComponentVNode)(2,a.Button,{fluid:!0,textAlign:"center",fontSize:"20px",fontFamily:"Courier",bold:!0,content:"ENTER",onClick:function(){return n("enter")}})}),(0,o.createComponentVNode)(2,a.Flex.Item,{grow:1,children:(0,o.createComponentVNode)(2,a.Button,{fluid:!0,textAlign:"center",fontSize:"20px",fontFamily:"Courier",bold:!0,content:"RESET",onClick:function(){return n("reset")}})})]})})],4)};t.SecureSafe=function(e,t){var n=(0,r.useBackend)(t),l=n.act,s=n.data,p=s.attempt,m=s.codeLen,f=s.disabled,h=s.emagged,g=s.padMsg,C=s.safeName,N=s.theme;return(0,o.createComponentVNode)(2,i.Window,{title:(0,c.capitalize)(C),width:200,height:328,theme:N||"retro-dark",children:(0,o.createComponentVNode)(2,i.Window.Content,{children:(0,o.createComponentVNode)(2,a.Section,{fill:!0,children:(0,o.createComponentVNode)(2,a.Stack,{vertical:!0,children:[(0,o.createComponentVNode)(2,u,{attempt:p,codeLen:m,disabled:f,emagged:h,padMsg:g}),(0,o.createComponentVNode)(2,d,{act:l})]})})})})}},19172:function(e,t,n){"use strict";t.__esModule=!0,t.SeedFabricator=void 0;var o=n(96323),r=n(31246),a=n(26949),i=n(2381),c=n(18331),l={Fruit:1,Vegetable:2,Herb:3,Flower:4,Miscellaneous:5,Other:6},u=function(e,t){return(l[e.name]||l.Other)-(l[t.name]||l.Other)};t.SeedFabricator=function(e,t){var n=(0,r.useBackend)(t).data,l=n.canVend,d=n.isWorking,p=n.maxSeed,m=n.name,f=n.seedCount,h=n.seedCategories||[];h.sort(u);var g=(0,r.useLocalState)(t,"dispenseAmount",1),C=g[0],N=g[1];return(0,o.createComponentVNode)(2,i.Window,{title:m,width:500,height:600,children:(0,o.createComponentVNode)(2,i.Window.Content,{children:[!d&&(0,o.createComponentVNode)(2,a.Modal,{textAlign:"center",width:35,height:10,fontSize:3,fontFamily:"Courier",color:"red",children:[(0,o.createComponentVNode)(2,a.Blink,{time:500,children:[(0,o.createComponentVNode)(2,a.Icon,{name:"exclamation-triangle",pr:1.5}),"MALFUNCTION",(0,o.createComponentVNode)(2,a.Icon,{name:"exclamation-triangle",pl:1.5})]}),"CHECK WIRES"]}),(0,o.createComponentVNode)(2,a.Section,{children:(0,o.createComponentVNode)(2,a.Flex,{children:[(0,o.createComponentVNode)(2,a.Flex.Item,{bold:!0,pr:1,children:"Dispense:"}),(0,o.createComponentVNode)(2,a.Flex.Item,{basis:6,grow:!0,children:(0,o.createComponentVNode)(2,a.NumberInput,{value:C,format:function(e){return e+(0,c.pluralize)(" seed",e)},minValue:1,maxValue:10,onDrag:function(e,t){return N(t)}})}),(0,o.createComponentVNode)(2,a.Flex.Item,{grow:2,children:(0,o.createComponentVNode)(2,a.ProgressBar,{value:Math.max(0,p-f),maxValue:p,ranges:{yellow:[5,Infinity],bad:[-Infinity,5]},children:(0,o.createComponentVNode)(2,a.Icon,{name:"bolt"})})})]})}),(0,o.createComponentVNode)(2,a.Section,{children:[!l&&(0,o.createComponentVNode)(2,a.Modal,{textAlign:"center",width:25,height:5,fontSize:2,fontFamily:"Courier",color:"yellow",children:[(0,o.createComponentVNode)(2,a.Blink,{interval:500,time:500,children:(0,o.createComponentVNode)(2,a.Icon,{name:"bolt",pr:1.5})}),"UNIT RECHARGING"]}),h.map((function(e){return(0,o.createComponentVNode)(2,s,{category:e,dispenseAmount:C},e.name)}))]})]})})};var d=function(e,t){return e.name.localeCompare(t.name)},s=function(e,t){var n=(0,r.useBackend)(t).act,i=e.category,c=e.dispenseAmount,l=i.name,u=i.seeds;if(!u)return null;var s=u.sort(d);return(0,o.createComponentVNode)(2,a.Collapsible,{title:l,children:s.map((function(e){return(0,o.createComponentVNode)(2,a.Box,{as:"span",children:(0,o.createComponentVNode)(2,a.Button,{width:"155px",height:"32px",px:0,m:.25,onClick:function(){return n("disp",{path:e.path,amount:c})},children:(0,o.createComponentVNode)(2,a.Flex,{direction:"row",align:"center",children:[(0,o.createComponentVNode)(2,a.Flex.Item,{children:e.img?(0,o.createVNode)(1,"img",null,null,1,{style:{"vertical-align":"middle","horizontal-align":"middle"},height:"32px",width:"32px",src:"data:image/png;base64,"+e.img}):(0,o.createComponentVNode)(2,a.Icon,{style:{"vertical-align":"middle","horizontal-align":"middle"},height:"32px",width:"32px",name:"question-circle-o",pl:"8px",pt:"4px",fontSize:"24px"})}),(0,o.createComponentVNode)(2,a.Flex.Item,{overflow:"hidden",style:{"text-overflow":"ellipsis"},title:e.name,children:e.name})]})})},e.name)}))})}},70535:function(e,t,n){"use strict";t.__esModule=!0,t.SheetCrafting=void 0;var o=n(96323),r=n(31246),a=n(26949),i=n(2381);t.SheetCrafting=function(e,t){var n=(0,r.useBackend)(t).data,l=n.availableAmount,u=n.labeledAvailableAmount,d=n.itemList;return(0,o.createComponentVNode)(2,i.Window,{width:360,height:760,children:(0,o.createComponentVNode)(2,i.Window.Content,{children:(0,o.createComponentVNode)(2,a.Stack,{vertical:!0,fill:!0,children:[(0,o.createComponentVNode)(2,a.Stack.Item,{grow:1,children:(0,o.createComponentVNode)(2,a.Section,{title:"Recipes",fill:!0,scrollable:!0,children:d.map((function(e){return(0,o.createComponentVNode)(2,c,{item:e,disabled:l<e.sheetCost},e.recipeID)}))})}),(0,o.createComponentVNode)(2,a.Stack.Item,{children:(0,o.createComponentVNode)(2,a.Section,{title:"Amount Left",children:u})})]})})})};var c=function(e,t){var n=(0,r.useBackend)(t).act,i=e.item,c=i.recipeID,l=i.name,u=i.sheetCost,d=i.itemYield,s=i.img;return(0,o.createComponentVNode)(2,a.Button,{disabled:e.disabled,fluid:!0,onClick:function(){return n("make",{recipeID:c})},m:"0.5rem",children:[(0,o.createComponentVNode)(2,a.Image,{verticalAlign:"middle",my:"0.2rem",mr:"0.5rem",height:"32px",width:"32px",src:"data:image/png;base64,"+s}),d>1?(0,o.createVNode)(1,"em",null,[d,(0,o.createTextVNode)("x ")],0):null,l,u>1?(0,o.createVNode)(1,"em",null,[(0,o.createTextVNode)(" ("),u,(0,o.createTextVNode)(" sheets)")],0):null]})}},24258:function(e,t,n){"use strict";t.__esModule=!0,t.Sleeper=void 0;var o,r=n(96323),a=n(31246),i=n(26949),c=n(2381),l=n(1033),u=n(65751),d=function(e){return e<=0?"0":e.toFixed(1)},s=1,p=2,m=((o={})[0]={name:"Conscious",color:"good",icon:"check"},o[s]={name:"Unconscious",color:"average",icon:"bed"},o[p]={name:"Dead",color:"bad",icon:"skull"},o);t.Sleeper=function(e,t){var n=(0,a.useBackend)(t),o=n.data,s=n.act,p=o.sleeperGone,f=o.hasOccupant,h=o.occupantStat,g=o.health,C=o.oxyDamage,N=o.toxDamage,v=o.burnDamage,b=o.bruteDamage,V=o.recharging,y=o.rejuvinators,x=o.isTiming,I=o.time,k=o.timeStarted,w=o.timeNow,S=o.maxTime,_=Math.max(k?(I||0)+k-w:I||0,0),M=f&&!x&&!V&&h<2,D=m[h];return(0,r.createComponentVNode)(2,c.Window,{theme:"ntos",width:440,height:440,children:(0,r.createComponentVNode)(2,c.Window.Content,{children:[(0,r.createComponentVNode)(2,i.Section,{title:"Occupant Statistics",buttons:(0,r.createComponentVNode)(2,i.Button,{icon:"eject",align:"center",color:"good",disabled:!f||!!x,onClick:function(){return s("eject")},children:"Eject"}),children:[!f&&(p?"Check connection to sleeper pod.":"The sleeper is unoccupied."),!!f&&(0,r.createComponentVNode)(2,i.LabeledList,{children:[(0,r.createComponentVNode)(2,i.LabeledList.Item,{label:"Status",children:[(0,r.createComponentVNode)(2,i.Icon,{color:D.color,name:D.icon})," ",D.name]}),(0,r.createComponentVNode)(2,i.LabeledList.Item,{label:"Overall Health",children:(0,r.createComponentVNode)(2,i.ProgressBar,{value:g,ranges:{good:[.9,Infinity],average:[.5,.9],bad:[-Infinity,.5]}})}),(0,r.createComponentVNode)(2,i.LabeledList.Item,{label:"Damage Breakdown",children:[(0,r.createComponentVNode)(2,u.HealthStat,{inline:!0,align:"center",type:"oxy",width:5,children:d(C)}),"/",(0,r.createComponentVNode)(2,u.HealthStat,{inline:!0,align:"center",type:"toxin",width:5,children:d(N)}),"/",(0,r.createComponentVNode)(2,u.HealthStat,{inline:!0,align:"center",type:"burn",width:5,children:d(v)}),"/",(0,r.createComponentVNode)(2,u.HealthStat,{inline:!0,align:"center",type:"brute",width:5,children:d(b)})]})]})]}),!!f&&(0,r.createComponentVNode)(2,i.Section,{title:"Detected Rejuvinators",buttons:(0,r.createComponentVNode)(2,i.Button,{icon:"syringe",align:"center",color:"good",disabled:!M,onClick:function(){return s("inject")},children:"Inject"}),children:[(0,r.createComponentVNode)(2,i.Section,{height:10,scrollable:!0,children:y.length?(0,r.createComponentVNode)(2,i.LabeledList,{children:y.map((function(e){return(0,r.createComponentVNode)(2,i.LabeledList.Item,{label:e.name,children:[(0,r.createComponentVNode)(2,i.Icon,{name:!e.od||e.volume<e.od?"circle":"skull",color:e.color})," "+e.volume.toFixed(3),!!e.od&&e.volume>=e.od&&(0,r.createComponentVNode)(2,i.Box,{inline:!0,color:"bad",pl:1,children:"(Overdose!)"})]},e.name)}))}):"No rejuvinators detected in occupant's bloodstream."}),(0,r.createComponentVNode)(2,i.Box,{italic:!0,textAlign:"center",color:"label",mt:2,children:"Use separate reagent scanner for complete analysis."})]}),(0,r.createComponentVNode)(2,i.Section,{title:"Occupant Alarm Clock",buttons:(0,r.createComponentVNode)(2,i.Button,{width:8,icon:"clock",align:"center",color:x?"bad":"good",disabled:!f||h>1||I<=0,onClick:function(){return s("timer")},children:x?"Stop Timer":"Start Timer"}),children:(0,r.createComponentVNode)(2,i.Flex,{children:[(0,r.createComponentVNode)(2,i.Flex.Item,{children:(0,r.createComponentVNode)(2,i.Knob,{mr:"0.5em",animated:!0,size:1.25,step:5,stepPixelSize:2,minValue:0,maxValue:S/10,value:_/10,onDrag:function(e,t){return s("time_add",{tp:t-_/10})}})}),(0,r.createComponentVNode)(2,i.Flex.Item,{children:(0,r.createComponentVNode)(2,i.Box,{p:1,textAlign:"center",backgroundColor:"black",color:"good",maxWidth:"90px",width:"90px",fontSize:"20px",children:(0,r.createComponentVNode)(2,i.TimeDisplay,{value:_,timing:!!x,format:function(e){return(0,l.formatTime)(e)}})})}),(0,r.createComponentVNode)(2,i.Flex.Item,{shrink:1,children:(0,r.createComponentVNode)(2,i.Box,{italic:!0,textAlign:"center",color:"label",pl:1,children:"System will inject rejuvenators automatically when occupant is in hibernation."})})]})})]})})}},82930:function(e,t,n){"use strict";t.__esModule=!0,t.SlotMachine=void 0;var o=n(96323),r=n(31246),a=n(26949),i=n(2381);t.SlotMachine=function(e,t){var n=(0,r.useBackend)(t).data,a=n.busy,d=n.scannedCard;return(0,o.createComponentVNode)(2,i.Window,{title:"Slot Machine",width:375,height:220,children:(0,o.createComponentVNode)(2,i.Window.Content,{children:d?a?(0,o.createComponentVNode)(2,u):(0,o.createComponentVNode)(2,l):(0,o.createComponentVNode)(2,c)})})};var c=function(e,t){var n=(0,r.useBackend)(t).act;return(0,o.createFragment)([(0,o.createComponentVNode)(2,a.NoticeBox,{danger:!0,children:"You must insert your ID to continue!"}),(0,o.createComponentVNode)(2,a.Button,{icon:"id-card",onClick:function(){return n("insert_card")},children:"Insert ID"})],4)},l=function(e,t){var n=(0,r.useBackend)(t),i=n.act,c=n.data,l=c.account_funds,u=c.money,d=c.plays,s=c.scannedCard,p=c.wager;return(0,o.createFragment)([(0,o.createComponentVNode)(2,a.NoticeBox,{success:!0,children:(0,o.createVNode)(1,"marquee",null," Wager some credits! ",16)}),(0,o.createComponentVNode)(2,a.Stack,{vertical:!0,children:[(0,o.createComponentVNode)(2,a.Stack.Item,{children:[(0,o.createVNode)(1,"strong",null,"Your card: ",16),(0,o.createComponentVNode)(2,a.Button,{icon:"eject",content:s,tooltip:"Pull Funds and Eject Card",tooltipPosition:"bottom-end",onClick:function(){return i("eject")}})]}),(0,o.createComponentVNode)(2,a.Stack.Item,{children:(0,o.createComponentVNode)(2,a.Stack,{align:"center",children:[(0,o.createComponentVNode)(2,a.Stack.Item,{children:(0,o.createVNode)(1,"strong",null,"Account Balance:",16)}),(0,o.createComponentVNode)(2,a.Stack.Item,{children:[(0,o.createComponentVNode)(2,a.Icon,{name:"dollar-sign"})," ",l]}),(0,o.createComponentVNode)(2,a.Stack.Item,{children:(0,o.createComponentVNode)(2,a.Button,{tooltip:"Add Funds",tooltipPosition:"bottom",onClick:function(){return i("cashin")},children:"Cash In"})}),(0,o.createComponentVNode)(2,a.Stack.Item,{children:(0,o.createComponentVNode)(2,a.Button,{tooltip:"Pull Funds",tooltipPosition:"bottom",onClick:function(){return i("cashout")},children:"Cash Out"})})]})}),(0,o.createComponentVNode)(2,a.Stack.Item,{children:(0,o.createComponentVNode)(2,a.Stack,{align:"center",children:[(0,o.createComponentVNode)(2,a.Stack.Item,{children:"Amount Wagered:"}),(0,o.createComponentVNode)(2,a.Stack.Item,{children:(0,o.createComponentVNode)(2,a.NumberInput,{minValue:20,maxValue:1e3,value:p,format:function(e){return e+"\u2abd"},onDrag:function(e,t){return i("set_wager",{bet:t})}})})]})}),(0,o.createComponentVNode)(2,a.Stack.Item,{children:(0,o.createComponentVNode)(2,a.Stack,{align:"center",children:[(0,o.createComponentVNode)(2,a.Stack.Item,{children:(0,o.createVNode)(1,"strong",null,"Credits Remaining:",16)}),(0,o.createComponentVNode)(2,a.Stack.Item,{children:[(0,o.createComponentVNode)(2,a.Icon,{name:"dollar-sign"})," ",u]})]})}),(0,o.createComponentVNode)(2,a.Stack.Item,{children:(0,o.createComponentVNode)(2,a.BlockQuote,{children:[d," attempts have been made today!"]})}),(0,o.createComponentVNode)(2,a.Stack.Divider),(0,o.createComponentVNode)(2,a.Stack.Item,{children:(0,o.createComponentVNode)(2,a.Button,{icon:"dice",tooltip:"Pull the lever",tooltipPosition:"right",onClick:function(){return i("play",{bet:p})},children:"Play!"})})]})],4)},u=function(){return(0,o.createComponentVNode)(2,a.NoticeBox,{warning:!0,children:"The Machine is busy, please wait!"})}},68952:function(e,t,n){"use strict";t.__esModule=!0,t.Smes=void 0;var o=n(96323),r=n(31246),a=n(26949),i=n(1033),c=n(2381),l=1e3;t.Smes=function(e,t){var n=(0,r.useBackend)(t),u=n.act,d=n.data,s=d.charge,p=d.capacity,m=d.inputAttempt,f=d.inputting,h=d.inputLevel,g=d.inputLevelMax,C=d.inputAvailable,N=d.outputAttempt,v=d.outputting,b=d.outputLevel,V=d.outputLevelMax,y=(s/p>=1?"good":f&&h&&"average")||"bad",x=(N&&v?"good":s>0&&"average")||"bad";return(0,o.createComponentVNode)(2,c.Window,{width:340,height:360,children:(0,o.createComponentVNode)(2,c.Window.Content,{children:[(0,o.createComponentVNode)(2,a.Section,{title:"Stored Energy",children:[(0,o.createComponentVNode)(2,a.LabeledList,{children:(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Stored Energy",children:(0,i.formatSiUnit)(s,0,"J")})}),(0,o.createComponentVNode)(2,a.ProgressBar,{mt:"0.5em",value:s/p,ranges:{good:[.5,Infinity],average:[.15,.5],bad:[-Infinity,.15]}})]}),(0,o.createComponentVNode)(2,a.Section,{title:"Input",children:(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Charge Mode",buttons:(0,o.createComponentVNode)(2,a.Button,{icon:"power-off",color:m?"green":"red",onClick:function(){return u("toggle-input")},children:m?"On":"Off"}),children:(0,o.createComponentVNode)(2,a.Box,{color:y,children:(s/p>=1?"Fully Charged":m&&h&&!f&&"Initializing")||m&&h&&f&&"Charging"||m&&f&&"Idle"||"Not Charging"})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Target Input",children:(0,o.createComponentVNode)(2,a.Flex,{inline:!0,width:"100%",children:[(0,o.createComponentVNode)(2,a.Flex.Item,{children:[(0,o.createComponentVNode)(2,a.Button,{icon:"fast-backward",disabled:0===h,onClick:function(){return u("set-input",{target:"min"})}}),(0,o.createComponentVNode)(2,a.Button,{icon:"backward",disabled:0===h,onClick:function(){return u("set-input",{adjust:-1e4})}})]}),(0,o.createComponentVNode)(2,a.Flex.Item,{grow:1,mx:1,children:(0,o.createComponentVNode)(2,a.Slider,{value:h/l,fillValue:C/l,minValue:0,maxValue:g/l,step:5,stepPixelSize:4,format:function(e){return(0,i.formatPower)(e*l,1)},onDrag:function(e,t){return u("set-input",{target:t*l})}})}),(0,o.createComponentVNode)(2,a.Flex.Item,{children:[(0,o.createComponentVNode)(2,a.Button,{icon:"forward",disabled:h===g,onClick:function(){return u("set-input",{adjust:1e4})}}),(0,o.createComponentVNode)(2,a.Button,{icon:"fast-forward",disabled:h===g,onClick:function(){return u("set-input",{target:"max"})}})]})]})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Available",children:(0,i.formatPower)(C)})]})}),(0,o.createComponentVNode)(2,a.Section,{title:"Output",children:(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Output Mode",buttons:(0,o.createComponentVNode)(2,a.Button,{icon:"power-off",color:N?"green":"red",onClick:function(){return u("toggle-output")},children:N?"On":"Off"}),children:(0,o.createComponentVNode)(2,a.Box,{color:x,children:(v&&N?"Enabled":N&&"Idle")||s&&"Disabled"||"No Charge"})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Target Output",children:(0,o.createComponentVNode)(2,a.Flex,{inline:!0,width:"100%",children:[(0,o.createComponentVNode)(2,a.Flex.Item,{children:[(0,o.createComponentVNode)(2,a.Button,{icon:"fast-backward",disabled:0===b,onClick:function(){return u("set-output",{target:"min"})}}),(0,o.createComponentVNode)(2,a.Button,{icon:"backward",disabled:0===b,onClick:function(){return u("set-output",{adjust:-1e4})}})]}),(0,o.createComponentVNode)(2,a.Flex.Item,{grow:1,mx:1,children:(0,o.createComponentVNode)(2,a.Slider,{value:b/l,minValue:0,maxValue:V/l,step:5,stepPixelSize:4,format:function(e){return(0,i.formatPower)(e*l,1)},onDrag:function(e,t){return u("set-output",{target:t*l})}})}),(0,o.createComponentVNode)(2,a.Flex.Item,{children:[(0,o.createComponentVNode)(2,a.Button,{icon:"forward",disabled:b===V,onClick:function(){return u("set-output",{adjust:1e4})}}),(0,o.createComponentVNode)(2,a.Button,{icon:"fast-forward",disabled:b===V,onClick:function(){return u("set-output",{target:"max"})}})]})]})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Outputting",children:(0,i.formatPower)(v)})]})})]})})}},54016:function(e,t,n){"use strict";t.__esModule=!0,t.SpawnEvent=void 0;var o=n(96323),r=n(31246),a=n(26949),i=n(25808),c=n(2381);t.SpawnEvent=function(e,t){var n=(0,r.useBackend)(t),l=n.act,u=n.data,d=u.thing_to_spawn,s=u.thing_name,p=u.spawn_directly,m=u.spawn_loc,f=u.ghost_confirmation_delay,h=u.amount_to_spawn,g=u.antag_role,C=u.objective_text,N=u.spawn_type,v=u.loc_type,b=u.incompatible_antag,V=u.equip_antag,y=u.ask_permission,x=u.allow_dnr,I=u.eligible_player_count;return(0,o.createComponentVNode)(2,c.Window,{title:"Ghost Spawn Editor",width:500,height:330,children:(0,o.createComponentVNode)(2,c.Window.Content,{children:[(0,o.createComponentVNode)(2,a.Section,{children:(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Thing to spawn",children:[(0,o.createComponentVNode)(2,a.Button,{selected:s&&"mob_ref"===N,onClick:function(){return l("select_mob")},tooltip:"mob_ref"===N&&s?d:"",children:"mob_ref"===N?s:"Mob ref"}),(0,o.createComponentVNode)(2,a.Button,{selected:s&&"mob_type"===N,onClick:function(){return l("select_mob_type")},tooltip:"mob_type"===N&&s?d:"",children:"mob_type"===N?s:"Mob type"}),(0,o.createComponentVNode)(2,a.Button,{selected:s&&"job"===N,onClick:function(){return l("select_job")},tooltip:"job"===N&&s?d:"",children:"job"===N?s:"Job"})]}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Accept delay",children:[!!y&&(0,o.createComponentVNode)(2,a.NumberInput,{value:f/10,minValue:0,maxValue:120,onDrag:function(e,t){return l("set_spawn_delay",{spawn_delay:10*t})},disabled:!y}),(0,o.createComponentVNode)(2,a.Button.Checkbox,{checked:y,onClick:function(){return l("set_ask_permission",{ask_permission:!y})},tooltip:"Do we ask permission or just spawn them directly?",children:"Ask permission."})]}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Amount to spawn",children:[(0,o.createComponentVNode)(2,a.NumberInput,{value:h,minValue:1,maxValue:100,onDrag:function(e,t){return l("set_amount",{amount:t})}}),"/",I," ",(0,o.createComponentVNode)(2,a.Button,{icon:"refresh",onClick:function(){return l("refresh_player_count")}}),1===h&&"mob_ref"===N&&s&&(0,o.createComponentVNode)(2,i.ButtonCheckbox,{checked:p,onClick:function(){return l("set_spawn_directly",{spawn_directly:!p})},tooltip:"Puts the ghost mind directly into the original mob instead of copying it.",children:"Spawn as original"})]}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Spawn location",children:[(0,o.createComponentVNode)(2,a.Button,{disabled:p,selected:m&&"turf_ref"===v,onClick:function(){return l("select_turf")},children:"turf_ref"===v?m:"Turf ref"}),(0,o.createComponentVNode)(2,a.Button,{disabled:p,selected:m&&"landmark"===v,onClick:function(){return l("select_landmark")},children:"landmark"===v?m:"Landmark"})]}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Antagonist status",children:[(0,o.createComponentVNode)(2,a.Button,{selected:g,onClick:function(){return l("select_antag")},children:g||"Antag role"}),g&&(0,o.createFragment)([(0,o.createComponentVNode)(2,a.Button,{color:"red",onClick:function(){return l("clear_antag")},children:"x"}),(0,o.createComponentVNode)(2,i.ButtonCheckbox,{checked:V,tooltip:"Give antag default equipment and abilities? Will overwrite anything already equipped in those slots.",onClick:function(){return l("set_equip",{equip_antag:!V})},children:"Equip antags"})],4),!!b&&(0,o.createComponentVNode)(2,a.Button,{color:"yellow",circular:!0,icon:"circle-exclamation",tooltip:"Some antagonists are only compatible with human mobs, this may not work properly."})]}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"DNR",children:(0,o.createComponentVNode)(2,i.ButtonCheckbox,{checked:x,tooltip:"Allow players who have set DNR to respawn in this event",onClick:function(){return l("set_allow_dnr",{allow_dnr:!x})},children:"Allow DNR players"})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Objective text",children:(0,o.createComponentVNode)(2,a.TextArea,{value:C,fluid:!0,height:5,onChange:function(e,t){return l("set_objective_text",{objective_text:t})}})})]})}),(0,o.createComponentVNode)(2,a.Section,{align:"center",children:(0,o.createComponentVNode)(2,a.Button,{onClick:function(){return l("spawn")},disabled:!d||"[0x0]"===d,children:"Spawn"})})]})})}},19378:function(e,t,n){"use strict";t.__esModule=!0,t.SpendSpacebux=void 0;var o=n(96323),r=n(31246),a=n(26949),i=n(2381),c=function(e){var t=e.product,n=t.pname,r=t.cost,i=t.img,c=e.disabled,l=e.onClick;return(0,o.createFragment)([(0,o.createComponentVNode)(2,a.Flex,{direction:"row",align:"center",children:[(0,o.createComponentVNode)(2,a.Flex.Item,{children:(0,o.createVNode)(1,"img",null,null,1,{src:"data:image/png;base64,"+i,style:{"vertical-align":"middle","horizontal-align":"middle"}})}),(0,o.createComponentVNode)(2,a.Flex.Item,{grow:1,children:[(0,o.createComponentVNode)(2,a.Box,{bold:!0,children:n}),(0,o.createComponentVNode)(2,a.Box,{children:["Cost: "+r," ",(0,o.createVNode)(1,"i","fa-solid fa-coins")]})]}),(0,o.createComponentVNode)(2,a.Flex.Item,{children:(0,o.createComponentVNode)(2,a.Button,{onClick:l,disabled:c,children:"Buy"})})]}),(0,o.createComponentVNode)(2,a.Divider)],4)};t.SpendSpacebux=function(e,t){var n=(0,r.useBackend)(t),l=n.act,u=n.data,d=u.purchasables,s=u.held,p=u.balance,m=u.truebalance,f=(0,r.useLocalState)(t,"filter-available",!1),h=f[0],g=f[1];return(0,o.createComponentVNode)(2,i.Window,{resizable:!0,title:"Spend Spacebux",width:300,height:600,children:(0,o.createComponentVNode)(2,i.Window.Content,{scrollable:!0,children:(0,o.createComponentVNode)(2,a.Section,{children:[(0,o.createComponentVNode)(2,a.BlockQuote,{children:"Purchase an item for the upcoming round. Earn more cash by completing rounds. A purchased item will persist until you die or fail to escape the station. If you have a Held Item, buying a new one will replace it."}),(0,o.createComponentVNode)(2,a.Stack,{vertical:!0,fill:!0,children:[s?(0,o.createComponentVNode)(2,a.Stack.Item,{children:(0,o.createComponentVNode)(2,a.Box,{children:["Held Item: ",s]})}):"",(0,o.createComponentVNode)(2,a.Stack.Item,{children:(0,o.createComponentVNode)(2,a.Section,{children:(0,o.createComponentVNode)(2,a.Flex,{direction:"row",align:"center",children:[(0,o.createComponentVNode)(2,a.Flex.Item,{grow:1,children:(0,o.createComponentVNode)(2,a.Box,{children:["Balance: ",p," ",(0,o.createVNode)(1,"i","fa-solid fa-coins")]})}),(0,o.createComponentVNode)(2,a.Flex.Item,{children:(0,o.createComponentVNode)(2,a.Button.Checkbox,{checked:h,onClick:function(){return g(!h)},children:"Filter Affordable"})})]})})}),(0,o.createComponentVNode)(2,a.Stack.Item,{children:d.filter((function(e){var t=e.cost;return!(h&&m<t)})).map((function(e){var t=e.pname,n=e.cost;return(0,o.createComponentVNode)(2,c,{product:e,disabled:m<n,onClick:function(){return l("purchase",{pname:t})}},t)}))})]})]})})})}},79387:function(e,t,n){"use strict";t.__esModule=!0,t.SwingSign=void 0;var o=n(96323),r=n(31246),a=n(26949),i=n(2381);t.SwingSign=function(e,t){var n=(0,r.useBackend)(t),c=n.act,l=n.data,u=l.message,d=l.maxRows,s=l.maxCols;return(0,o.createComponentVNode)(2,i.Window,{width:30+8*s,height:95+15*d,title:"Swing sign",children:(0,o.createComponentVNode)(2,i.Window.Content,{children:(0,o.createComponentVNode)(2,a.Section,{children:(0,o.createComponentVNode)(2,a.Stack,{vertical:!0,fill:!0,children:[(0,o.createComponentVNode)(2,a.Stack.Item,{children:(0,o.createComponentVNode)(2,a.Button,{content:"Save",onClick:function(){l.message=document.getElementById("messageTA").value,c("save_message",l)}})}),(0,o.createComponentVNode)(2,a.Stack.Item,{children:(0,o.createVNode)(128,"textarea",null,u,0,{id:"messageTA",cols:s,rows:d,maxlength:s*d+d-1,style:{overflow:"hidden",background:"#0A0A0A",color:"#FFFFFF",outline:"1px #6A93C3",textalign:"center",wrap:"hard"},placeholder:"Your message goes here...",onInput:function(e){for(var t=e.target.value.split(/\n/g),n=0;n<t.length;n++)if(t[n]&&t[n].length>s){var o=t[n].substring(0,s);t[n]=t[n].substring(s,t[n].length),t.splice(n,0,o)}t&&t.length>d&&t.splice(d,t.length-d),e.target.value=t.join("\n")}})})]})})})})}},44001:function(e,t,n){"use strict";t.__esModule=!0,t.SwingSignTIM=void 0;var o=n(96323),r=n(34277),a=n(31246),i=n(26949),c=n(2381);t.SwingSignTIM=function(e,t){var n=(0,a.useBackend)(t).data,s=n.max_length,p=n.message,m=n.placeholder,f=n.title,h=n.allowEmpty,g=n.rows,C=n.columns,N=(0,a.useLocalState)(t,"input",m),v=N[0],b=N[1],V=(0,a.useLocalState)(t,"inputIsValid",{isValid:h||!!p,error:null}),y=V[0],x=V[1],I=130+Math.ceil(p.length/5)+75;return(0,o.createComponentVNode)(2,c.Window,{title:f,width:325,height:I,children:(0,o.createComponentVNode)(2,c.Window.Content,{children:(0,o.createComponentVNode)(2,i.Section,{fill:!0,children:(0,o.createComponentVNode)(2,i.Stack,{fill:!0,vertical:!0,children:[(0,o.createComponentVNode)(2,i.Stack.Item,{children:(0,o.createComponentVNode)(2,i.Box,{color:"label",children:p})}),(0,o.createComponentVNode)(2,l,{input:v,inputIsValid:y,onType:function(e){e.preventDefault();var t=e.target;t.value=d(t.value,g,C),x(u(t.value,s,g)),b(t.value)}}),(0,o.createComponentVNode)(2,i.Stack.Item,{pl:5,pr:5,children:(0,o.createComponentVNode)(2,r.InputButtons,{input:v,inputIsValid:y})})]})})})})};var l=function(e,t){var n=(0,a.useBackend)(t),r=n.act,c=(n.data,e.input),l=(e.inputIsValid,e.onType);return(0,o.createComponentVNode)(2,i.Stack.Item,{grow:!0,children:(0,o.createComponentVNode)(2,i.TextArea,{autoFocus:!0,height:"100%",textAlign:"center",fontFamily:"Consolas",onInput:function(e){return l(e)},onEnter:function(){r("submit",{entry:c})},placeholder:"Type something...",style:{overflow:"hidden",whiteSpace:"pre-line",wrap:"hard",textAlignLast:"center"},value:c})})},u=function(e,t,n){return t&&e.length>t||n&&e.split(/\n/g).length>n?{isValid:!1,error:"Too long!"}:{isValid:!0,error:null}},d=function(e,t,n){for(var o=e.split(/\n/g),r=0;r<o.length;r++)if(o[r]&&o[r].length>n){var a=o[r].substring(0,n);o[r]=o[r].substring(n,o[r].length),o.splice(r,0,a)}return o.join("\n")}},13634:function(e,t,n){"use strict";t.__esModule=!0,t.TEG=void 0;var o=n(96323),r=n(31246),a=n(26949),i=n(1033),c=n(2381);t.TEG=function(e,t){var n=(0,r.useBackend)(t),l=(n.act,n.data),u=l.output,d=l.history,s=l.hotCircStatus,p=l.hotInletTemp,m=l.hotOutletTemp,f=l.hotInletPres,h=l.hotOutletPres,g=l.coldCircStatus,C=l.coldInletTemp,N=l.coldOutletTemp,v=l.coldInletPres,b=l.coldOutletPres,V=d.map((function(e,t){return[t,e]})),y=Math.max.apply(Math,d),x=function(e){return(e>=1e3?e.toExponential(3):e)+" K"};return(0,o.createComponentVNode)(2,c.Window,{height:"520",width:"300",children:(0,o.createComponentVNode)(2,c.Window.Content,{children:[(0,o.createComponentVNode)(2,a.Section,{title:"Status",children:[(0,o.createComponentVNode)(2,a.LabeledList,{children:(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Output History"})}),(0,o.createComponentVNode)(2,a.Chart.Line,{height:"5em",data:V,rangeX:[0,V.length-1],rangeY:[0,y],strokeColor:"rgba(1, 184, 170, 1)",fillColor:"rgba(1, 184, 170, 0.25)"}),(0,o.createComponentVNode)(2,a.Divider),(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Energy Output",textAlign:"right",children:(0,i.formatPower)(u)}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Hot Gas Circulator",textAlign:"right",children:(0,o.createComponentVNode)(2,a.Box,{color:(s&&p?"good":s&&"average")||"bad",children:(s&&p?"OK":s&&"Idle")||"ERROR"})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Cold Gas Circulator",textAlign:"right",children:(0,o.createComponentVNode)(2,a.Box,{color:(g&&C?"good":g&&"average")||"bad",children:(g&&C?"OK":g&&"Idle")||"ERROR"})})]})]}),(0,o.createComponentVNode)(2,a.Section,{title:"Hot Loop",children:(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Inlet Temp",textAlign:"right",children:x(p)}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Outlet Temp",textAlign:"right",children:x(m)}),(0,o.createComponentVNode)(2,a.LabeledList.Divider),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Inlet Pressure",textAlign:"right",children:(0,i.formatSiUnit)(Math.max(f,0),1,"Pa")}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Outlet Pressure",textAlign:"right",children:(0,i.formatSiUnit)(h,1,"Pa")})]})}),(0,o.createComponentVNode)(2,a.Section,{title:"Cold Loop",children:(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Inlet Temp",textAlign:"right",children:x(C)}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Outlet Temp",textAlign:"right",children:x(N)}),(0,o.createComponentVNode)(2,a.LabeledList.Divider),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Inlet Pressure",textAlign:"right",children:(0,i.formatSiUnit)(Math.max(v,0),1,"Pa")}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Outlet Pressure",textAlign:"right",children:(0,i.formatSiUnit)(b,1,"Pa")})]})})]})})}},99714:function(e,t,n){"use strict";t.__esModule=!0,t.TankDispenser=void 0;var o=n(96323),r=n(31246),a=n(26949),i=n(2381);t.TankDispenser=function(e,t){var n=(0,r.useBackend)(t),c=n.act,l=n.data;return(0,o.createComponentVNode)(2,i.Window,{width:280,height:105,children:(0,o.createComponentVNode)(2,i.Window.Content,{children:(0,o.createComponentVNode)(2,a.Section,{children:(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Plasma",buttons:(0,o.createComponentVNode)(2,a.Button,{icon:l.plasma?"circle":"circle-o",content:"Dispense",disabled:!l.plasma,onClick:function(){return c("dispense-plasma")}}),children:l.plasma}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Oxygen",buttons:(0,o.createComponentVNode)(2,a.Button,{icon:l.oxygen?"circle":"circle-o",content:"Dispense",disabled:!l.oxygen,onClick:function(){return c("dispense-oxygen")}}),children:l.oxygen})]})})})})}},87221:function(e,t,n){"use strict";t.__esModule=!0,t.BookmarksSection=void 0;var o=n(96323),r=n(21118),a=n(31246),i=n(26949),c=n(581);t.BookmarksSection=function(e,t){var n=e.bookmarks,l=e.maxBookmarks,u=e.onAddBookmark,d=e.onDeleteBookmark,s=e.onRestoreBookmark,p=e.targetCoords,m=(0,a.useLocalState)(t,"newBookmarkName",""),f=m[0],h=m[1],g=function(e){u(e),h("")};return(0,o.createComponentVNode)(2,i.Section,{title:"Bookmarks",children:(0,o.createComponentVNode)(2,i.LabeledList,{children:[n.map((function(e){return(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:(0,c.formatCoordinates)(e.x,e.y,e.z),buttons:(0,o.createComponentVNode)(2,i.Button,{icon:"trash",color:"red",onClick:function(){return d(e.ref)}}),children:(0,o.createComponentVNode)(2,i.Button,{icon:"bookmark",onClick:function(){return s(e.ref)},children:(0,r.decodeHtmlEntities)(e.name)})},e.ref)})),!!(n.length<l)&&(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:c.formatCoordinates.apply(void 0,p),buttons:(0,o.createComponentVNode)(2,i.Button,{icon:"plus",onClick:function(){return g(f)}}),children:(0,o.createComponentVNode)(2,i.Input,{width:"100%",value:f,onInput:function(e,t){return h(t)},placeholder:"New bookmark",onEnter:function(e,t){return g(t)},maxLength:32})},"new")]})})}},75461:function(e,t,n){"use strict";t.__esModule=!0,t.ConnectionSection=void 0;var o=n(96323),r=n(26949);t.ConnectionSection=function(e){var t=e.isConnected,n=e.isPanelOpen,a=e.onCyclePad,i=e.onReset,c=e.onRetry,l=e.padNum,u=t?(0,o.createComponentVNode)(2,r.Button,{icon:"power-off",color:"red",onClick:i,children:"Reset"}):(0,o.createComponentVNode)(2,r.Button,{icon:"power-off",color:"green",onClick:c,children:"Retry"});return(0,o.createComponentVNode)(2,r.Section,{children:(0,o.createComponentVNode)(2,r.LabeledList,{children:[(0,o.createComponentVNode)(2,r.LabeledList.Item,{label:"Connection",buttons:u,children:t?(0,o.createComponentVNode)(2,r.Box,{color:"green",children:"Connected"}):(0,o.createComponentVNode)(2,r.Box,{color:"red",children:"No connection to host"})}),n&&(0,o.createComponentVNode)(2,r.LabeledList.Item,{label:"Linked Pad",buttons:(0,o.createComponentVNode)(2,r.Button,{icon:"arrows-spin",onClick:a,children:"Cycle"}),children:l})]})})}},12703:function(e,t,n){"use strict";t.__esModule=!0,t.CoordinatesSection=void 0;var o=n(96323),r=n(31246),a=n(26949),i=n(34545),c=n(581);t.CoordinatesSection=function(e,t){var n=(0,r.useBackend)(t),l=n.act,u=n.data,d=u.xTarget,s=u.yTarget,p=u.zTarget;return(0,o.createComponentVNode)(2,a.Section,{title:"Target",children:(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"X",children:(0,o.createComponentVNode)(2,i.SteppedSlider,{format:c.formatDecimal,maxValue:500,minValue:0,nudgeAmount:.25,skipAmount:10,stepAmount:1,step:.25,onChange:function(e){return l("setX",{value:e})},value:d})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Y",children:(0,o.createComponentVNode)(2,i.SteppedSlider,{format:c.formatDecimal,maxValue:500,minValue:0,nudgeAmount:.25,skipAmount:10,stepAmount:1,step:.25,onChange:function(e){return l("setY",{value:e})},value:s})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Z",children:(0,o.createComponentVNode)(2,i.SteppedSlider,{maxValue:14,minValue:0,onChange:function(e){return l("setZ",{value:e})},stepPixelSize:16,value:p})})]})})}},34545:function(e,t,n){"use strict";t.__esModule=!0,t.SteppedSlider=void 0;var o=n(96323),r=n(97622),a=n(26949),i=["format","maxValue","minValue","onAdjust","onChange","nudgeAmount","skipAmount","step","stepAmount","value"];t.SteppedSlider=function(e){var t,n=e.format,c=e.maxValue,l=e.minValue,u=e.onAdjust,d=e.onChange,s=e.nudgeAmount,p=e.skipAmount,m=e.step,f=e.stepAmount,h=e.value,g=function(e,t){if(null==e)return{};var n,o,r={},a=Object.keys(e);for(o=0;o<a.length;o++)n=a[o],t.indexOf(n)>=0||(r[n]=e[n]);return r}(e,i),C=null!=(t=null!=f?f:m)?t:1,N=function(e){u?u(e):d((0,r.clamp)(h+e,l,c))};return(0,o.createComponentVNode)(2,a.Stack,{inline:!0,width:"100%",children:[(0,o.createComponentVNode)(2,a.Stack.Item,{children:[(0,o.createComponentVNode)(2,a.Button,{icon:"backward-fast",onClick:function(){return d(l)},tooltip:"Minimum ("+l+")",tooltipPosition:"bottom"}),!!p&&(0,o.createComponentVNode)(2,a.Button,{icon:"backward",onClick:function(){return N(-p)},tooltip:"Skip Down ("+-p+")",tooltipPosition:"bottom"}),(0,o.createComponentVNode)(2,a.Button,{icon:"backward-step",onClick:function(){return N(-C)},tooltip:"Step Down ("+-C+")",tooltipPosition:"bottom"}),!!s&&(0,o.createComponentVNode)(2,a.Button,{onClick:function(){return N(-s)},tooltip:"Nudge Down ("+-s+")",tooltipPosition:"bottom",children:(0,o.createComponentVNode)(2,a.Icon,{name:"play",rotation:180})})]}),(0,o.createComponentVNode)(2,a.Stack.Item,{grow:1,children:(0,o.normalizeProps)((0,o.createComponentVNode)(2,a.Slider,Object.assign({},g,{format:n,maxValue:c,minValue:l,onChange:function(e,t){return d(t)},step:m,value:h})))}),(0,o.createComponentVNode)(2,a.Stack.Item,{children:[!!s&&(0,o.createComponentVNode)(2,a.Button,{icon:"play",onClick:function(){return N(s)},tooltip:"Nudge Up (+"+s+")",tooltipPosition:"bottom"}),(0,o.createComponentVNode)(2,a.Button,{icon:"forward-step",onClick:function(){return N(C)},tooltip:"Step Up (+"+C+")",tooltipPosition:"bottom"}),!!p&&(0,o.createComponentVNode)(2,a.Button,{icon:"forward",onClick:function(){return N(p)},tooltip:"Skip Up (+"+p+")",tooltipPosition:"bottom"}),(0,o.createComponentVNode)(2,a.Button,{icon:"fast-forward",onClick:function(){return d(c)},tooltip:"Maximum ("+c+")",tooltipPosition:"bottom"})]})]})}},79268:function(e,t,n){"use strict";t.__esModule=!0,t.TeleConsole=void 0;var o=n(96323),r=n(31246),a=n(26949),i=n(2381),c=n(87221),l=n(75461),u=n(12703),d=n(581);t.TeleConsole=function(e,t){var n=(0,r.useBackend)(t),s=n.act,p=n.data,m=p.xTarget,f=p.yTarget,h=p.zTarget,g=p.hostId,C=p.bookmarks,N=p.readout,v=p.isPanelOpen,b=p.padNum,V=p.maxBookmarks,y=!!g;return(0,o.createComponentVNode)(2,i.Window,{theme:"ntos",width:400,height:515,children:(0,o.createComponentVNode)(2,i.Window.Content,{textAlign:"center",children:[(0,o.createComponentVNode)(2,u.CoordinatesSection),(0,o.createComponentVNode)(2,a.Section,{children:[(0,o.createComponentVNode)(2,a.Button,{icon:"sign-out-alt",onClick:function(){return s("send")},disabled:!y,children:"Send"}),(0,o.createComponentVNode)(2,a.Button,{icon:"sign-in-alt",onClick:function(){return s("receive")},disabled:!y,children:"Receive"}),(0,o.createComponentVNode)(2,a.Button,{onClick:function(){return s("portal")},disabled:!y,children:[(0,o.createComponentVNode)(2,a.Icon,{name:"ring",rotation:90}),"Toggle Portal"]}),(0,o.createComponentVNode)(2,a.Button,{icon:"magnifying-glass",onClick:function(){return s("scan")},disabled:!y,children:"Scan"})]}),N&&(0,o.createComponentVNode)(2,a.Section,{children:(0,d.formatReadout)(N)}),(0,o.createComponentVNode)(2,c.BookmarksSection,{bookmarks:C,maxBookmarks:V,onAddBookmark:function(e){return s("addbookmark",{value:e})},onDeleteBookmark:function(e){return s("deletebookmark",{value:e})},onRestoreBookmark:function(e){return s("restorebookmark",{value:e})},targetCoords:[m,f,h]}),(0,o.createComponentVNode)(2,l.ConnectionSection,{isConnected:y,isPanelOpen:!!v,onCyclePad:function(){return s("setpad")},onReset:function(){return s("reconnect",{value:2})},onRetry:function(){return s("reconnect",{value:1})},padNum:b})]})})}},65087:function(){},581:function(e,t,n){"use strict";t.__esModule=!0,t.formatReadout=t.formatCoordinates=t.formatDecimal=void 0;var o=n(97622),r=n(21118),a=function(e){return(0,o.toFixed)(e,2)};t.formatDecimal=a;t.formatCoordinates=function(e,t,n){return a(e)+" / "+a(t)+" / "+n};t.formatReadout=function(e){return(0,r.decodeHtmlEntities)(e)}},73354:function(e,t,n){"use strict";t.__esModule=!0,t.InputAndButtonsSection=void 0;var o=n(96323),r=n(31246),a=n(26949);t.InputAndButtonsSection=function(e,t){var n=(0,r.useBackend)(t),i=n.act,c=n.data.TermActive;return(0,o.createComponentVNode)(2,a.Section,{fitted:!0,children:(0,o.createComponentVNode)(2,a.Flex,{align:"center",children:[(0,o.createComponentVNode)(2,a.Flex.Item,{grow:!0,children:(0,o.createComponentVNode)(2,a.Input,{id:"terminalInput",placeholder:"Type Here",selfClear:!0,fluid:!0,mr:"0.5rem",onEnter:function(e,t){i("text",{value:t})},history:!0})}),(0,o.createComponentVNode)(2,a.Flex.Item,{children:(0,o.createComponentVNode)(2,a.Tooltip,{content:"Enter",children:(0,o.createComponentVNode)(2,a.Button,{icon:"share",color:c?"green":"red",onClick:function(){var e=document.querySelector("#terminalInput .Input__input");i("text",{value:e.value}),e.value=""},mr:"0.5rem",my:.25})})}),(0,o.createComponentVNode)(2,a.Flex.Item,{children:(0,o.createComponentVNode)(2,a.Tooltip,{content:"Restart",children:(0,o.createComponentVNode)(2,a.Button,{icon:"repeat",color:c?"green":"red",onClick:function(){return i("restart")},my:.25})})})]})})}},58084:function(e,t,n){"use strict";t.__esModule=!0,t.PheripheralsSection=void 0;var o=n(96323),r=n(31246),a=n(26949);t.PheripheralsSection=function(e,t){var n=(0,r.useBackend)(t),i=n.act,c=n.data.peripherals||[];return(0,o.createComponentVNode)(2,a.Section,{fitted:!0,children:c.map((function(e){return(0,o.createComponentVNode)(2,a.Button,{icon:e.icon,content:e.label,fontFamily:e.Clown?"Comic Sans MS":"Consolas",color:e.color?"green":"grey",onClick:function(){return function(e){return i("buttonPressed",{card:e.card,index:e.index})}(e)}},e.card)}))})}},98341:function(e,t,n){"use strict";t.__esModule=!0,t.TerminalOutputSection=void 0;var o=n(96323),r=n(31246),a=n(26949);t.TerminalOutputSection=function(e,t){var n=(0,r.useBackend)(t).data,i=n.fontColor,c=n.bgColor,l=e.displayHTML;return(0,o.createComponentVNode)(2,a.Section,{backgroundColor:c,scrollable:!0,fill:!0,id:"terminalOutput",children:(0,o.createComponentVNode)(2,a.Box,{fontFamily:"Consolas",fill:!0,color:i,dangerouslySetInnerHTML:{__html:l}})})}},14831:function(e,t,n){"use strict";t.__esModule=!0,t.Terminal=void 0;var o=n(96323),r=n(31246),a=n(2381),i=n(98341),c=n(73354),l=n(58084),u=n(26949);t.Terminal=function(e,t){var n=(0,r.useBackend)(t).data,d=n.windowName,s=n.displayHTML,p=function(){var e=document.querySelector("#terminalOutput .Section__content");e&&(e.scrollTop=e.scrollHeight)};return(0,o.createComponentVNode)(2,a.Window,{theme:"retro-dark",title:d,fontFamily:"Consolas",width:"380",height:"350",children:(0,o.createComponentVNode)(2,a.Window.Content,{children:(0,o.createComponentVNode)(2,u.Stack,{vertical:!0,fill:!0,children:[(0,o.createComponentVNode)(2,u.Stack.Item,{grow:!0,children:(0,o.createComponentVNode)(2,i.TerminalOutputSection,{displayHTML:s},null,{onComponentDidMount:p,onComponentDidUpdate:function(e,t){e.displayHTML!==t.displayHTML&&p()}})}),(0,o.createComponentVNode)(2,u.Stack.Item,{children:(0,o.createComponentVNode)(2,c.InputAndButtonsSection)}),(0,o.createComponentVNode)(2,u.Stack.Item,{children:(0,o.createComponentVNode)(2,l.PheripheralsSection)})]})})})}},55230:function(){},14081:function(e,t,n){"use strict";t.__esModule=!0,t.Terrainify=t.TerrainOptions=t.TerrainToggles=t.TerrainVehicleChoice=t.TerrainChoice=void 0;var o=n(96323),r=n(31246),a=n(26949),i=n(2381),c=function(e){var t=e.typeData,n=e.terrain,r=e.onTerrainValue;return(0,o.createComponentVNode)(2,a.Flex.Item,{mb:1,children:(0,o.createComponentVNode)(2,a.Flex,{direction:"column",children:(0,o.createComponentVNode)(2,a.Section,{title:"Types",children:Object.keys(t).map((function(e,i){return(0,o.createComponentVNode)(2,a.Flex.Item,{mb:1,children:(0,o.createComponentVNode)(2,a.Button,{fluid:!0,selected:n===e,onClick:function(){return r(e)},children:t[e].name})},i)}))})})})};t.TerrainChoice=c;var l=function(e){var t=e.fabricator,n=e.cars,r=e.allowVehicles,i=e.onToggleFabricators,c=e.onToggleCars,l=e.onToggleAllowVehicles;return(0,o.createComponentVNode)(2,a.Flex.Item,{children:(0,o.createComponentVNode)(2,a.Section,{title:"Vehicle Options",children:[(0,o.createComponentVNode)(2,a.Button.Checkbox,{checked:t,content:"Add Subs to Fabricators",onClick:function(){return i()}}),(0,o.createVNode)(1,"br"),(0,o.createComponentVNode)(2,a.Button.Checkbox,{checked:n,content:"Convert some Cars",onClick:function(){return c()}}),(0,o.createComponentVNode)(2,a.Button.Checkbox,{checked:r,content:"Allow Pods",onClick:function(){return l()}})]})})};t.TerrainVehicleChoice=l;var u=function(e){var t=e.terrain,n=e.typeData,r=e.activeToggles,i=e.onToggle;return t&&n[t].toggles&&Object.keys(n[t].toggles).length?(0,o.createComponentVNode)(2,a.Section,{title:"Toggles",children:Object.keys(n[t].toggles).map((function(e,t){return(0,o.createComponentVNode)(2,a.Flex.Item,{mb:1,children:(0,o.createComponentVNode)(2,a.Button.Checkbox,{checked:r[e],content:e,onClick:function(){return i(e)}})},t)}))}):""};t.TerrainToggles=u;var d=function(e){var t=e.terrain,n=e.typeData,r=e.activeOptions,i=e.onSelect;return t&&n[t].options&&Object.keys(n[t].options).length?Object.keys(n[t].options).map((function(e,c){return(0,o.createComponentVNode)(2,a.Section,{title:e,children:n[t].options[e].map((function(t,n){return(0,o.createComponentVNode)(2,a.Flex.Item,{mb:1,children:(0,o.createComponentVNode)(2,a.Button,{fluid:!0,selected:r[e]===t,onClick:function(){return i(e,t)},children:t})},n)}))},c)})):""};t.TerrainOptions=d;t.Terrainify=function(e,t){var n=(0,r.useBackend)(t),s=n.act,p=n.data,m=p.typeData,f=p.terrain,h=p.fabricator,g=p.cars,C=p.allowVehicles,N=p.locked,v=p.activeOptions,b=p.activeToggles;return(0,o.createComponentVNode)(2,i.Window,{title:"Terrainify",width:500,height:600,children:(0,o.createComponentVNode)(2,i.Window.Content,{scrollable:!0,children:(0,o.createComponentVNode)(2,a.Section,{title:(0,o.createComponentVNode)(2,a.Box,{inline:!0,children:"Terrainify"}),children:[(0,o.createComponentVNode)(2,a.Flex,{direction:"row",children:[(0,o.createComponentVNode)(2,c,{typeData:m,terrain:f,onTerrainValue:function(e){s("terrain",{terrain:e})}}),(0,o.createComponentVNode)(2,a.Flex.Item,{ml:2}),(0,o.createComponentVNode)(2,a.Flex.Item,{ml:1,children:[(0,o.createComponentVNode)(2,a.Section,{title:"Description",children:f?m[f].description:"..."}),(0,o.createComponentVNode)(2,l,{fabricator:h,cars:g,allowVehicles:C,onToggleAllowVehicles:function(){s("allowVehicles")},onToggleFabricators:function(){s("fabricator")},onToggleCars:function(){s("cars")}}),(0,o.createComponentVNode)(2,u,{typeData:m,terrain:f,activeToggles:b,onToggle:function(e){s("toggle",{toggle:e})}}),(0,o.createComponentVNode)(2,d,{typeData:m,terrain:f,activeOptions:v,onSelect:function(e,t){s("option",{key:e,value:t})}})]})]}),(0,o.createComponentVNode)(2,a.Box,{m:1,children:(0,o.createComponentVNode)(2,a.Button,{fluid:!0,disabled:N,onClick:function(){return s("activate")},children:"Transform Station"})})]})})})}},81235:function(e,t,n){"use strict";t.__esModule=!0,t.TextInputModal=void 0;var o=n(96323),r=n(55631),a=n(34277),i=n(31246),c=n(26949),l=n(2381);t.TextInputModal=function(e,t){var n=(0,i.useBackend)(t).data,s=n.max_length,p=n.message,m=n.multiline,f=n.placeholder,h=n.timeout,g=n.title,C=n.allowEmpty,N=n.theme,v=(0,i.useLocalState)(t,"input",f),b=v[0],V=v[1],y=(0,i.useLocalState)(t,"inputIsValid",{isValid:C||!!p,error:null}),x=y[0],I=y[1],k=130+Math.ceil(p.length/5)+(m?75:0);return(0,o.createComponentVNode)(2,l.Window,{title:g,width:325,height:k,theme:N||"nanotrasen",children:[h&&(0,o.createComponentVNode)(2,r.Loader,{value:h}),(0,o.createComponentVNode)(2,l.Window.Content,{children:(0,o.createComponentVNode)(2,c.Section,{fill:!0,children:(0,o.createComponentVNode)(2,c.Stack,{fill:!0,vertical:!0,children:[(0,o.createComponentVNode)(2,c.Stack.Item,{children:(0,o.createComponentVNode)(2,c.Box,{color:"label",children:p})}),(0,o.createComponentVNode)(2,u,{input:b,inputIsValid:x,onType:function(e){e.preventDefault();var t=e.target;I(d(t.value,s,C)),V(t.value)}}),(0,o.createComponentVNode)(2,c.Stack.Item,{pl:5,pr:5,children:(0,o.createComponentVNode)(2,a.InputButtons,{input:b,inputIsValid:x})})]})})})]})};var u=function(e,t){var n=(0,i.useBackend)(t),r=n.act,a=n.data.multiline,l=e.input,u=e.inputIsValid,d=e.onType;return a?(0,o.createComponentVNode)(2,c.Stack.Item,{grow:!0,children:(0,o.createComponentVNode)(2,c.TextArea,{autoFocus:!0,height:"100%",onInput:function(e){return d(e)},onEnter:function(){r("submit",{entry:l})},placeholder:"Type something...",value:l})}):(0,o.createComponentVNode)(2,c.Stack.Item,{children:(0,o.createComponentVNode)(2,c.Input,{autoFocus:!0,fluid:!0,onInput:function(e){return d(e)},onEnter:function(){u&&r("submit",{entry:l})},placeholder:"Type something...",value:l})})},d=function(e,t,n){return t&&e.length>t?{isValid:!1,error:"Too long!"}:0!==e.length||n?{isValid:!0,error:null}:{isValid:!1,error:null}}},80480:function(e,t,n){"use strict";t.__esModule=!0,t.Timer=void 0;var o=n(96323),r=n(31246),a=n(26949),i=n(2381),c=n(1033);t.Timer=function(e,t){var n=(0,r.useBackend)(t),l=n.data,u=n.act,d=function(e){u("set-time",{value:10*e})},s=function(e){return(0,c.formatTime)(10*e)};return(0,o.createComponentVNode)(2,i.Window,{width:"280",height:"200",title:l.name,children:(0,o.createComponentVNode)(2,i.Window.Content,{children:(0,o.createComponentVNode)(2,a.Section,{children:(0,o.createComponentVNode)(2,a.LabeledList,{children:[!!l.armButton&&(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Armed",children:(0,o.createComponentVNode)(2,a.Button.Checkbox,{checked:l.armed,onClick:function(){return u("toggle-armed")},children:l.armed?"Armed":"Not armed"})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Timing",children:(0,o.createComponentVNode)(2,a.Button.Checkbox,{checked:l.timing,onClick:function(){return u("toggle-timing")},children:l.timing?"Timing":"Not timing"})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Time",children:(0,o.createComponentVNode)(2,a.Stack,{align:"center",children:[(0,o.createComponentVNode)(2,a.Stack.Item,{children:(0,o.createComponentVNode)(2,a.Knob,{animated:!0,value:l.time,minValue:l.minTime,maxValue:600,stepPixelSize:1,format:s,onDrag:function(e,t){return d(t)},onChange:function(e,t){return d(t)}})}),(0,o.createComponentVNode)(2,a.Stack.Item,{children:(0,o.createComponentVNode)(2,a.AnimatedNumber,{value:l.time,format:s})})]})})]})})})})}},5051:function(e,t,n){"use strict";t.__esModule=!0,t.TransitShuttle=void 0;var o=n(96323),r=n(31246),a=n(26949),i=n(2381);t.TransitShuttle=function(e,t){var n=(0,r.useBackend)(t),c=n.act,l=n.data,u=l.destinations||[],d=l.currentlocation||[],s=l.endlocation||[],p=l.shuttlename,m=l.moving,f=l.locked,h="the "+p+" is currently at "+d.name;return m&&s&&(h+=" moving to "+s.name),(0,o.createComponentVNode)(2,i.Window,{height:"520",width:"300",title:p,children:[(0,o.createComponentVNode)(2,a.BlockQuote,{style:{margin:"5px"},children:h}),(0,o.createComponentVNode)(2,a.Section,{fill:!0,scrollable:!0,height:"100%",children:u.map((function(e){return(0,o.createFragment)([(0,o.createComponentVNode)(2,a.Table,{direction:"row",align:"center",children:(0,o.createComponentVNode)(2,a.Table.Row,{children:(0,o.createComponentVNode)(2,a.Table.Cell,{children:(0,o.createComponentVNode)(2,a.Button,{content:e.name,disabled:f||m||d.type===e.type,onClick:function(){return c("callto",{dest:e.type})}})})})},e.type),(0,o.createComponentVNode)(2,a.Divider)],8)}))})]})}},73128:function(e,t,n){"use strict";t.__esModule=!0,t.TrscArray=void 0;var o=n(96323),r=n(2381),a=n(31246),i=n(26949),c=n(1033);t.TrscArray=function(e,t){var n=(0,a.useBackend)(t),l=n.act,u=n.data,d=u.apcCellStat,s=u.apcCellDiff,p=u.arrayCellStat,m=u.arrayCellDiff,f=u.sendsSafe,h=u.sendsMax,g=u.failsafeThreshold,C=u.failsafeStat,N=u.arrayImage,v=u.arrayHealth,b=u.drawRateTarget,V=u.surplusThreshold;return(0,o.createComponentVNode)(2,r.Window,{width:400,height:525,title:"Transception Systems",children:(0,o.createComponentVNode)(2,r.Window.Content,{children:[(0,o.createComponentVNode)(2,i.Section,{title:"Array Status",textAlign:"center",children:(0,o.createComponentVNode)(2,i.Box,{children:(0,o.createComponentVNode)(2,i.Flex,{justify:"space-around",children:[(0,o.createComponentVNode)(2,i.Flex.Item,{children:(0,o.createComponentVNode)(2,i.Flex,{height:21,direction:"column",justify:"space-around",children:[(0,o.createComponentVNode)(2,i.Flex.Item,{children:[(0,o.createVNode)(1,"strong",null,"Area Cell Power:",16),(0,o.createVNode)(1,"br"),(0,o.createVNode)(1,"h3",null,d,0),(0,o.createComponentVNode)(2,i.ProgressBar,{value:s,color:"#f9ae00"})]}),(0,o.createComponentVNode)(2,i.Flex.Item,{children:[(0,o.createVNode)(1,"strong",null,"Internal Capacitor:",16),(0,o.createVNode)(1,"br"),(0,o.createVNode)(1,"h3",null,p,0),(0,o.createComponentVNode)(2,i.ProgressBar,{value:m,color:"#76B9D3"})]}),(0,o.createComponentVNode)(2,i.Flex.Item,{children:[(0,o.createVNode)(1,"strong",null,[(0,o.createTextVNode)("Transceptions Remaining"),(0,o.createVNode)(1,"br"),(0,o.createTextVNode)("(Standard / Maximum)"),(0,o.createVNode)(1,"br")],4),(0,o.createVNode)(1,"h2",null,[f,(0,o.createTextVNode)(" | "),h],0)]})]})}),(0,o.createComponentVNode)(2,i.Flex.Item,{backgroundColor:"#A37933",children:(0,o.createComponentVNode)(2,i.Box,{mb:1,mx:.5,height:19,backgroundColor:"#101020",children:(0,o.createComponentVNode)(2,i.Flex,{mx:2,my:2,height:18,direction:"column",justify:"space-around",children:[(0,o.createComponentVNode)(2,i.Flex.Item,{children:[(0,o.createComponentVNode)(2,i.Image,{pixelated:!0,width:"96px",height:"96px",src:"data:image/png;base64,"+N,backgroundColor:"transparent"}),(0,o.createVNode)(1,"br")]}),(0,o.createComponentVNode)(2,i.Flex.Item,{children:[(0,o.createVNode)(1,"strong",null,"Array Condition:",16),(0,o.createVNode)(1,"br"),(0,o.createVNode)(1,"h2",null,v,0)]})]})})})]})})}),(0,o.createComponentVNode)(2,i.Divider),(0,o.createComponentVNode)(2,i.Section,{title:"Transception Systems",textAlign:"center",children:(0,o.createComponentVNode)(2,i.Flex,{justify:"space-around",children:[(0,o.createComponentVNode)(2,i.Flex.Item,{children:(0,o.createVNode)(1,"strong",null,[(0,o.createTextVNode)("Transception Capability:"),(0,o.createVNode)(1,"br"),C],0)}),(0,o.createComponentVNode)(2,i.Flex.Item,{children:[(0,o.createVNode)(1,"strong",null,[(0,o.createTextVNode)("Power Loss Failsafe:"),(0,o.createVNode)(1,"br"),g,(0,o.createTextVNode)(" | ")],0),(0,o.createComponentVNode)(2,i.Button,{content:"Toggle",onClick:function(){return l("toggle_failsafe")}})]})]})}),(0,o.createComponentVNode)(2,i.Section,{title:"Internal Capacitor Control",textAlign:"center",children:(0,o.createComponentVNode)(2,i.Flex,{justify:"space-around",children:[(0,o.createComponentVNode)(2,i.Flex.Item,{children:[(0,o.createVNode)(1,"strong",null,[(0,o.createTextVNode)("Target Charge Rate:"),(0,o.createVNode)(1,"br")],4),(0,o.createComponentVNode)(2,i.Slider,{value:b,minValue:0,maxValue:5e4,step:1e3,stepPixelSize:4,format:function(e){return(0,c.formatPower)(e)},onDrag:function(e,t){return l("set_draw_rate",{drawRateTarget:t})}})]}),(0,o.createComponentVNode)(2,i.Flex.Item,{children:[(0,o.createVNode)(1,"strong",null,[(0,o.createTextVNode)("Required Surplus:"),(0,o.createVNode)(1,"br")],4),(0,o.createComponentVNode)(2,i.Slider,{value:V,minValue:1e4,maxValue:2e5,step:5e3,stepPixelSize:4,format:function(e){return(0,c.formatPower)(e)},onDrag:function(e,t){return l("set_surplus",{surplusThreshold:t})}})]})]})})]})})}},73248:function(e,t,n){"use strict";t.__esModule=!0,t.TurbineControl=void 0;var o=n(96323),r=n(31246),a=n(26949),i=n(1033),c=n(2381);t.TurbineControl=function(e,t){var n=(0,r.useBackend)(t),l=n.act,u=n.data,d=u.rpm,s=u.load,p=u.power,m=u.volume,f=u.history,h=u.overspeed,g=u.overtemp,C=u.undertemp,N=f.map((function(e){return e[0]})),v=N.map((function(e,t){return[t,e]})),b=f.map((function(e){return e[1]})),V=b.map((function(e,t){return[t,e]})),y=f.map((function(e){return e[2]})),x=y.map((function(e,t){return[t,e]})),I=Math.max.apply(Math,y),k=Math.max.apply(Math,N),w=Math.max.apply(Math,b);return(0,o.createComponentVNode)(2,c.Window,{width:375,height:400,children:(0,o.createComponentVNode)(2,c.Window.Content,{children:(0,o.createComponentVNode)(2,a.Stack,{vertical:!0,fill:!0,children:[(0,o.createComponentVNode)(2,a.Stack.Item,{children:[(0,o.createComponentVNode)(2,a.LabeledList,{children:(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Turbine Output",children:(0,i.formatPower)(p)})}),(0,o.createComponentVNode)(2,a.Chart.Line,{mt:"5px",height:"5em",data:x,rangeX:[0,x.length-1],rangeY:[0,I],strokeColor:"rgba(1, 184, 170, 1)",fillColor:"rgba(1, 184, 170, 0.25)"})]}),(0,o.createComponentVNode)(2,a.Stack.Item,{children:[(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Turbine Speed",children:[d," RPM"]}),h?(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"ALERT",color:"#FF0000",children:"OVERSPEED"}):"",g?(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"ALERT",color:"#FF0000",children:"OVER TEMPERATURE"}):"",C?(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"ALERT",color:"#FF0000",children:"UNDER TEMPERATURE"}):""]}),(0,o.createComponentVNode)(2,a.Chart.Line,{mt:"5px",height:"5em",data:v,rangeX:[0,v.length-1],rangeY:[0,k],strokeColor:"rgba(1, 184, 170, 1)",fillColor:"rgba(1, 184, 170, 0.25)"})]}),(0,o.createComponentVNode)(2,a.Stack.Item,{children:[(0,o.createComponentVNode)(2,a.LabeledList,{children:(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Turbine Load",children:[s," Joules/Revolution"]})}),(0,o.createComponentVNode)(2,a.Chart.Line,{mt:"5px",height:"5em",data:V,rangeX:[0,V.length-1],rangeY:[0,w],strokeColor:"rgba(1, 184, 170, 1)",fillColor:"rgba(1, 184, 170, 0.25)"})]}),(0,o.createComponentVNode)(2,a.Stack.Item,{children:["Stator Load:",(0,o.createComponentVNode)(2,a.NumberInput,{minValue:1,value:s,format:function(e){return e+" Joules/Revolution"},onChange:function(e,t){return l("loadChange",{newVal:t})}})]}),(0,o.createComponentVNode)(2,a.Stack.Item,{children:["Coolant Volume:",(0,o.createComponentVNode)(2,a.NumberInput,{minValue:1,value:m,format:function(e){return e+" L"},onChange:function(e,t){return l("volChange",{newVal:t})}})]})]})})})}},40620:function(e,t,n){"use strict";t.__esModule=!0,t.TurretControl=void 0;var o=n(96323),r=n(2381),a=n(31246),i=n(26949),c=n(96794),l=n(18331),u=function(e){for(var t=[],n=0;n<e;n++)Math.random()>.3?t.push("Kill. "):t.push("KILL. ");return t.map((function(e,t){return(0,o.createComponentVNode)(2,i.Box,{inline:!0,preserveWhitespace:!0,fontSize:(0,c.randInt)(11,25)+"px",children:e},t)}))};t.TurretControl=function(e,t){var n=(0,a.useBackend)(t),c=n.act,d=n.data,s=d.enabled,p=d.lethal,m=d.emagged,f=d.area,h=d.locked,g=function(e){c("setLethal",{lethal:e})},C=function(e){c("setEnabled",{enabled:e})};return(0,o.createComponentVNode)(2,r.Window,{title:m?"FATAL ERROR":"Turret control ("+f+")",theme:m?"syndicate":"ntos",width:400,height:160,children:(0,o.createComponentVNode)(2,r.Window.Content,{align:"center",children:(0,o.createComponentVNode)(2,i.Box,{py:"6px",children:[!m&&!h&&(0,o.createComponentVNode)(2,i.Box,{fontSize:"16px",children:[(0,o.createComponentVNode)(2,i.Section,{width:"70%",children:(0,o.createComponentVNode)(2,i.Stack,{children:[(0,o.createComponentVNode)(2,i.Stack.Item,{width:"50%",children:(0,o.createComponentVNode)(2,i.Button,{icon:"exclamation-triangle",fluid:!0,selected:s,onClick:function(){return C(!0)},children:"Enabled"})}),(0,o.createComponentVNode)(2,i.Stack.Item,{width:"50%",children:(0,o.createComponentVNode)(2,i.Button,{icon:"power-off",fluid:!0,selected:!s,onClick:function(){return C(!1)},children:"Disabled"})})]})}),(0,o.createComponentVNode)(2,i.Section,{width:"70%",children:(0,o.createComponentVNode)(2,i.Stack,{children:[(0,o.createComponentVNode)(2,i.Stack.Item,{width:"50%",children:(0,o.createComponentVNode)(2,i.Button,{icon:"bolt",fluid:!0,selected:!p,onClick:function(){return g(!1)},children:"Stun"})}),(0,o.createComponentVNode)(2,i.Stack.Item,{width:"50%",children:(0,o.createComponentVNode)(2,i.Button,{icon:"skull-crossbones",fluid:!0,selected:p,onClick:function(){return g(!0)},children:"Lethal"})})]})})]}),!m&&!!h&&(0,o.createComponentVNode)(2,i.Section,{children:"Panel locked, swipe ID card to unlock."}),!!m&&(0,o.createComponentVNode)(2,i.Box,{py:"20px",children:[(0,o.createComponentVNode)(2,i.Box,{align:"center",fontFamily:"Courier New",children:(0,l.glitch)("ERROR: UNABLE TO READ AUTHORIZATION",12)}),(0,o.createComponentVNode)(2,i.Box,{align:"center",style:{"font-size":"20px"},children:u(7)})]})]})})})}},97170:function(e,t,n){"use strict";t.__esModule=!0,t.Vendors=void 0;var o=n(96323),r=n(31246),a=n(2381),i=n(26949),c=n(26949),l=n(72638);t.Vendors=function(e,t){var n=(0,r.useBackend)(t),u=n.act,d=n.data,s=d.wiresList||[],p=d.productList||[],m=d.lightColors||[],f=d.windowName,h=d.wiresOpen,g=d.cash,C=d.bankMoney,N=d.requiresMoney,v=d.cardname,b=d.playerBuilt,V=d.name,y=d.owner,x=d.unlocked,I=d.loading,k=d.busy,w=d.busyphrase,S=d.currentlyVending,_=function(e){return(e.cost<=g||e.cost<=C||!N)&&e.amount>0},M=function(e){return e.cost&&N?e.cost+"\u2abd":"Vend"};return(0,o.createComponentVNode)(2,a.Window,{title:f,width:"500",height:"600",fontFamily:"Consolas","font-size":"10pt",children:(0,o.createComponentVNode)(2,a.Window.Content,{children:(0,o.createComponentVNode)(2,c.Stack,{vertical:!0,fill:!0,minHeight:"1%",maxHeight:"100%",children:[h&&(0,o.createComponentVNode)(2,c.Stack.Item,{children:(0,o.createComponentVNode)(2,c.Collapsible,{mb:"1%",title:"Wire Panel",children:[h&&s.map((function(e){return(0,o.createComponentVNode)(2,c.Flex,{textColor:e.color,children:[(0,o.createComponentVNode)(2,c.Flex.Item,{grow:!0,bold:!0,children:e.name}),(0,o.createComponentVNode)(2,c.Flex.Item,{mr:"5%",children:(0,o.createComponentVNode)(2,i.Button,{ml:"10%",my:"1%",content:"Pulse",onClick:function(){return u("pulsewire",{wire:e.name})}})}),(0,o.createComponentVNode)(2,c.Flex.Item,{children:(0,o.createComponentVNode)(2,i.Button,{m:"1%",content:e.uncut?"Cut":"Mend",onClick:function(){return u(e.uncut?"cutwire":"mendwire",{wire:e.name})}})})]},e.name)})),(0,o.createComponentVNode)(2,c.Divider),b&&(0,o.createFragment)([(0,o.createComponentVNode)(2,i.Button,{content:"Owner: "+y+" ("+(x?"Unlocked":"Locked")+")",onClick:function(){return u("togglelock")}}),(0,o.createComponentVNode)(2,i.Button,{content:"Loading Chute",disabled:!x,color:I?"green":"red",onClick:function(){return u("togglechute")}}),(0,o.createComponentVNode)(2,i.Button.Input,{content:V,defaultValue:V,onCommit:function(e,t){return u("rename",{name:t})}})],4),(0,o.createComponentVNode)(2,c.Flex,{justify:"space-between",align:"stretch",children:[(0,o.createComponentVNode)(2,c.Flex.Item,{direction:"row",children:(0,o.createComponentVNode)(2,c.LabeledList,{children:[(0,o.createComponentVNode)(2,c.LabeledList.Item,{label:"AI Control",children:m.ai_control?"Enabled":"Disabled"}),(0,o.createComponentVNode)(2,c.LabeledList.Item,{label:"Electrification",children:m.electrified?"Yes":"No"})]})}),(0,o.createComponentVNode)(2,c.Flex.Item,{direction:"row",children:[(0,o.createComponentVNode)(2,c.LabeledList.Item,{label:"Inventory",children:m.extendedinventory?"Expanded":"Standard"}),(0,o.createComponentVNode)(2,c.LabeledList.Item,{label:"Safety Light",children:m.shootinventory?"On":"Off"})]})]})]})}),(0,o.createComponentVNode)(2,c.Stack.Item,{grow:!0,minHeight:"1%",maxHeight:"100%",children:(0,o.createComponentVNode)(2,i.Section,{fill:!0,scrollable:!0,height:"100%",children:[!k&&p.map((function(e){return(0,o.createComponentVNode)(2,c.Flex,{justify:"space-between",align:"stretch",style:{"border-bottom":"1px #555 solid"},children:[(0,o.createComponentVNode)(2,c.Flex.Item,{direction:"row",children:e.img&&(0,o.createComponentVNode)(2,i.Box,{style:{overflow:"show",height:"24px"},children:(0,o.createVNode)(1,"img",null,null,1,{src:"data:image/png;base64,"+e.img,style:{transform:"translate(0, -4px)"}})})}),(0,o.createComponentVNode)(2,c.Flex.Item,{direction:"row",grow:!0,style:{display:"flex","justify-content":"center","flex-direction":"column"},children:(0,o.createComponentVNode)(2,i.Box,{children:[(0,o.createComponentVNode)(2,i.Box,{inline:!0,italic:!0,children:[!e.infinite&&e.amount+" x","\xa0"]}),(0,o.createComponentVNode)(2,i.Box,{inline:!0,children:[e.name,b&&h&&(0,o.createComponentVNode)(2,i.Button,{inline:!0,color:"green",icon:"images",style:{"margin-left":"5px"},onClick:function(){return u("setIcon",{target:e.ref})}})]})]})}),(0,o.createComponentVNode)(2,c.Flex.Item,{bold:!0,direction:"row",style:{"margin-left":"5px",display:"flex","justify-content":"center","flex-direction":"column"},children:b&&x?(0,o.createComponentVNode)(2,i.Button.Input,{color:_(e)?"green":"grey",content:M(e),style:{width:"50px","text-align":"center"},onCommit:function(t,n){return u("setPrice",{target:e.ref,cost:n})}}):(0,o.createComponentVNode)(2,i.Button,{color:_(e)?"green":"grey",content:M(e),disabled:!_(e),style:{width:"50px","text-align":"center",padding:"0px"},onClick:function(){return u("vend",{target:e.ref,cost:e.cost,amount:e.amount})}})})]},e.name)})),!!k&&(0,o.createComponentVNode)(2,c.Stack,{vertical:!0,children:[(0,o.createComponentVNode)(2,c.Stack.Item,{align:"center",children:(0,o.createComponentVNode)(2,i.Image,{height:"128px",width:"128px",pixelated:!0,src:"data:image/png;base64,"+p.find((function(e){return e.name===S})).img})}),(0,o.createComponentVNode)(2,c.Stack.Item,{align:"center",children:w})]})]})}),N>0&&(0,o.createComponentVNode)(2,c.Stack.Item,{children:(0,o.createComponentVNode)(2,l.VendorCashTable,{cardname:v,onCardClick:function(){return u("logout")},bankMoney:C,cash:g,onCashClick:function(){return u("returncash")}})})]})})})}},96880:function(e,t,n){"use strict";t.__esModule=!0,t.WeaponVendor=void 0;var o=n(96323),r=n(21118),a=n(31246),i=n(26949),c=n(2381),l=n(18331);t.WeaponVendor=function(e,t){var n=(0,a.useBackend)(t).data,r=(0,a.useLocalState)(t,"filter-available",!1),d=r[0],s=r[1];return(0,o.createComponentVNode)(2,c.Window,{width:550,height:700,children:(0,o.createComponentVNode)(2,c.Window.Content,{children:(0,o.createComponentVNode)(2,i.Stack,{className:"WeaponVendor",vertical:!0,fill:!0,children:[(0,o.createComponentVNode)(2,i.Stack.Item,{children:(0,o.createComponentVNode)(2,i.Section,{fill:!0,children:(0,o.createComponentVNode)(2,i.LabeledList,{children:(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Balance",children:Object.entries(n.credits).map((function(e,t){var r=e[0],a=e[1];return(0,o.createComponentVNode)(2,i.Box,{inline:!0,mr:"5px",className:"WeaponVendor__Credits--"+r,children:[a," ",r," ",(0,l.pluralize)("credit",a),t+1!==Object.keys(n.credits).length?", ":""]},r)}))})})})}),(0,o.createComponentVNode)(2,i.Stack.Item,{grow:1,children:(0,o.createComponentVNode)(2,i.Section,{fill:!0,scrollable:!0,title:"Materiel",buttons:(0,o.createComponentVNode)(2,i.Button.Checkbox,{checked:d,onClick:function(){return s(!d)},children:"Filter Available"}),children:Object.keys(n.credits).map((function(e){return(0,o.createComponentVNode)(2,u,{category:e,filterAvailable:d},e)}))})})]})})})};var u=function(e,t){var n=e.category,c=e.filterAvailable,l=(0,a.useBackend)(t).data,u=l.stock.filter((function(e){return e.category===n}));return c&&(u=u.filter((function(e){return e.cost<=l.credits[e.category]}))),0===u.length?null:(0,o.createComponentVNode)(2,i.Collapsible,{className:"WeaponVendor__Category--"+n,title:(0,r.toTitleCase)(n),open:!0,color:n,children:(0,o.createComponentVNode)(2,i.Table,{children:l.stock.filter((function(e){return e.category===n})).map((function(e){return(0,o.createComponentVNode)(2,d,{stock:e},e.name)}))})})},d=function(e,t){var n=e.stock,r=(0,a.useBackend)(t),c=r.data,u=r.act;return(0,o.createComponentVNode)(2,i.Table.Row,{className:"WeaponVendor__Row",opacity:n.cost>c.credits[n.category]?.5:1,children:[(0,o.createComponentVNode)(2,i.Table.Cell,{className:"WeaponVendor__Cell",py:"5px",children:[(0,o.createComponentVNode)(2,i.Box,{mb:"5px",bold:!0,children:n.name}),(0,o.createComponentVNode)(2,i.Box,{children:n.description})]}),(0,o.createComponentVNode)(2,i.Table.Cell,{className:"WeaponVendor__Cell",py:"5px",textAlign:"right",children:(0,o.createComponentVNode)(2,i.Button,{disabled:n.cost>c.credits[n.category],color:n.category,onClick:function(){return u("redeem",{ref:n.ref})},children:["Redeem ",n.cost," ",(0,l.pluralize)("credit",n.cost)]})})]})}},10661:function(){},57361:function(e,t,n){"use strict";t.__esModule=!0,t.BeakerContents=void 0;var o=n(96323),r=n(26949);t.BeakerContents=function(e){var t=e.beakerLoaded,n=e.beakerContents;return(0,o.createComponentVNode)(2,r.Box,{children:[!t&&(0,o.createComponentVNode)(2,r.Box,{color:"label",children:"No beaker loaded."})||0===n.length&&(0,o.createComponentVNode)(2,r.Box,{color:"label",children:"Beaker is empty."}),n.map((function(e){return(0,o.createComponentVNode)(2,r.Box,{color:"label",children:[e.volume," units of ",e.name]},e.name)}))]})}},48916:function(e,t,n){"use strict";t.__esModule=!0,t.DataInputOptions=void 0;var o=n(96323),r=n(31246),a=n(26949);t.DataInputOptions=function(e){var t=e.options;return t&&Object.keys(t).length?Object.keys(t).map((function(e,n){return(0,o.createComponentVNode)(2,i,{type:t[e].type,name:e,description:t[e].description,value:t[e].value,tooltip:t[e].description,list:t[e].list,a:t[e].a,b:t[e].b},e)})):""};var i=function(e,t){var n=e.name,i=e.description,m=e.type,f=(0,r.useBackend)(t).act,h={Number:(0,o.normalizeProps)((0,o.createComponentVNode)(2,d,Object.assign({},e))),Color:(0,o.normalizeProps)((0,o.createComponentVNode)(2,u,Object.assign({},e))),Text:(0,o.normalizeProps)((0,o.createComponentVNode)(2,p,Object.assign({},e))),Ref:(0,o.normalizeProps)((0,o.createComponentVNode)(2,l,Object.assign({},e))),"Mob Reference":(0,o.normalizeProps)((0,o.createComponentVNode)(2,l,Object.assign({},e))),"Reference Picker":(0,o.normalizeProps)((0,o.createComponentVNode)(2,l,Object.assign({},e))),Boolean:(0,o.normalizeProps)((0,o.createComponentVNode)(2,s,Object.assign({},e))),"Children of Type":(0,o.normalizeProps)((0,o.createComponentVNode)(2,c,Object.assign({},e))),"List Var":(0,o.normalizeProps)((0,o.createComponentVNode)(2,c,Object.assign({},e))),List:(0,o.normalizeProps)((0,o.createComponentVNode)(2,c,Object.assign({},e)))};return(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:i,children:h[m]||f("unsupported_type",{name:n,type:m})})},c=function(e,t){var n=e.value,i=(e.tooltip,e.name),c=e.type,l=e.list,u=(0,r.useBackend)(t).act;return(0,o.createComponentVNode)(2,a.Section,{fill:!0,scrollable:!0,height:15,children:l.map((function(e,t){return(0,o.createComponentVNode)(2,a.Button,{fluid:!0,selected:e===n,color:"transparent",onClick:function(){return u("modify_value",{name:i,value:e,type:c})},children:e},t)}))})},l=function(e,t){var n=e.value,i=e.tooltip,c=e.name,l=e.type,u=(0,r.useBackend)(t).act;return(0,o.createComponentVNode)(2,a.Tooltip,{position:"bottom",content:i,children:(0,o.createComponentVNode)(2,a.Button,{icon:"location-crosshairs",onClick:function(){return u("modify_ref_value",{name:c,type:l})},children:n})})},u=function(e,t){var n=e.value,i=e.tooltip,c=e.name,l=e.type,u=(0,r.useBackend)(t).act;return(0,o.createComponentVNode)(2,a.Tooltip,{position:"bottom",content:i,children:[(0,o.createComponentVNode)(2,a.Button,{icon:"pencil-alt",onClick:function(){return u("modify_color_value",{name:c,type:l})}}),(0,o.createComponentVNode)(2,a.ColorBox,{color:n,mr:.5}),(0,o.createComponentVNode)(2,a.Input,{value:n,width:"90px",onInput:function(e,t){return u("modify_value",{name:c,value:t,type:l})}})]})},d=function(e,t){var n=e.value,i=e.tooltip,c=e.name,l=e.type,u=e.a,d=e.b,s=(0,r.useBackend)(t).act;return(0,o.createComponentVNode)(2,a.Tooltip,{position:"bottom",content:i,children:(0,o.createComponentVNode)(2,a.NumberInput,{value:n,minValue:0|u,maxValue:100|d,stepPixelSize:5,width:"39px",onDrag:function(e,t){return s("modify_value",{name:c,value:t,type:l})}})})},s=function(e,t){var n=e.value,i=e.tooltip,c=e.name,l=e.type,u=(0,r.useBackend)(t).act;return(0,o.createComponentVNode)(2,a.Tooltip,{position:"bottom",content:i,children:(0,o.createComponentVNode)(2,a.Button.Checkbox,{checked:n,onClick:function(){return u("modify_value",{name:c,value:!n,type:l})}})})},p=function(e,t){var n=e.value,i=e.tooltip,c=e.name,l=e.type,u=(0,r.useBackend)(t).act;return(0,o.createComponentVNode)(2,a.Tooltip,{position:"bottom",content:i,children:(0,o.createComponentVNode)(2,a.Input,{value:n,width:"200px",onInput:function(e,t){return u("modify_value",{name:c,value:t,type:l})}})})}},65751:function(e,t,n){"use strict";t.__esModule=!0,t.damageNum=t.HealthStat=void 0;var o=n(96323),r=n(1060),a=n(84200),i=n(54425),c=["type","children","className"];t.HealthStat=function(e){var t=e.type,n=e.children,l=e.className,u=function(e,t){if(null==e)return{};var n,o,r={},a=Object.keys(e);for(o=0;o<a.length;o++)n=a[o],t.indexOf(n)>=0||(r[n]=e[n]);return r}(e,c);return u.color=a.COLORS.damageType[t]&a.COLORS.damageType[t],(0,o.normalizeProps)((0,o.createComponentVNode)(2,i.Box,Object.assign({},u,{className:(0,r.classes)(["HealthStat",l,(0,i.computeBoxClassName)(u)]),color:a.COLORS.damageType[t],children:n})))};t.damageNum=function(e){return!e||e<=0?"0":e.toFixed(1)}},8095:function(e,t,n){"use strict";t.__esModule=!0,t.IDCard=void 0;var o=n(96323),r=n(26949);t.IDCard=function(e,t){if(e.card){var n=e.card,a=e.onEject;return(0,o.createComponentVNode)(2,r.Button,{icon:"eject",content:n.name+" ("+n.role+")",tooltip:"Clear scanned card",tooltipPosition:"bottom-end",onClick:a})}}},34277:function(e,t,n){"use strict";t.__esModule=!0,t.InputButtons=void 0;var o=n(96323),r=n(31246),a=n(26949);t.InputButtons=function(e,t){var n=(0,r.useBackend)(t).act,i=e.input,c=e.inputIsValid,l=(0,o.createComponentVNode)(2,a.Button,{color:"good",disabled:c&&!c.isValid,fluid:!1,onClick:function(){return n("submit",{entry:i})},pt:0,textAlign:"center",tooltip:(null==c?void 0:c.error)||null,width:6,children:"Submit"}),u=(0,o.createComponentVNode)(2,a.Button,{color:"bad",fluid:!1,onClick:function(){return n("cancel")},pt:0,textAlign:"center",width:6,children:"Cancel"}),d=l;return(0,o.createComponentVNode)(2,a.Stack,{children:[(0,o.createComponentVNode)(2,a.Stack.Item,{children:u}),(0,o.createComponentVNode)(2,a.Stack.Item,{grow:!0,children:c&&!c.isValid&&c.error&&(0,o.createComponentVNode)(2,a.Box,{color:"average",nowrap:!0,textAlign:"center",children:c.error})}),(0,o.createComponentVNode)(2,a.Stack.Item,{children:d})]})}},9720:function(e,t,n){"use strict";t.__esModule=!0,t.KeyHealthIndicators=void 0;var o=n(96323),r=n(26949),a=n(18331);t.KeyHealthIndicators=function(e){var t=e.mobData,n=t.occupied,a=t.patient_status,l=t.blood_pressure_rendered,u=t.blood_pressure_status,m=t.blood_volume,f=t.body_temp,h=t.optimal_temp,g=t.embedded_objects,C=t.rad_stage,N=t.rad_dose,v=t.brain_damage;return(0,o.createFragment)([(0,o.createComponentVNode)(2,r.Table,{children:[(0,o.createComponentVNode)(2,i,{occupied:n,patient_status:a,blood_pressure_rendered:l,blood_pressure_status:u,blood_volume:m}),(0,o.createComponentVNode)(2,c,{occupied:n,body_temp:f,optimal_temp:h,embedded_objects:g}),!!n&&(0,o.createComponentVNode)(2,d,{rad_stage:C,rad_dose:N}),(0,o.createComponentVNode)(2,s,{occupied:n,status:v})]}),!!n&&(0,o.createComponentVNode)(2,p,{embedded_objects:g})],0)};var i=function(e){var t=e.occupied,n=e.patient_status,a=e.blood_pressure_rendered,i=e.blood_pressure_status,c=e.blood_volume,l="grey";return t&&(l=c<=299?"red":c<=414?"yellow":c<=584?"green":c<=665?"yellow":"red"),(0,o.createComponentVNode)(2,r.Table.Row,{children:[(0,o.createComponentVNode)(2,r.Table.Cell,{header:!0,textAlign:"right",width:10,nowrap:!0,children:"Blood Pressure:"}),(0,o.createComponentVNode)(2,r.Table.Cell,{width:10,color:l,nowrap:!0,children:[!!t&&2!==n&&a+" ("+i+")",!t&&"--/--"]}),(0,o.createComponentVNode)(2,r.Table.Cell,{header:!0,textAlign:"right",width:10,nowrap:!0,children:"number"==typeof c&&(0,o.createFragment)([(0,o.createTextVNode)("Blood Volume:")],4)}),(0,o.createComponentVNode)(2,r.Table.Cell,{width:10,color:l,children:"number"==typeof c&&(0,o.createFragment)([t?c.toString():"--",(0,o.createTextVNode)(" units")],0)})]})},c=function(e){var t=e.occupied,n=e.body_temp,a=e.optimal_temp,i=e.embedded_objects;return(0,o.createComponentVNode)(2,r.Table.Row,{children:[(0,o.createComponentVNode)(2,l,{occupied:t,body_temp:n,optimal_temp:a}),(0,o.createComponentVNode)(2,u,{occupied:t,embedded_objects:i})]})},l=function(e){var t=e.occupied,n=e.body_temp,a=e.optimal_temp,i="grey";return t&&(i=n>=a+60?"red":n>=a+30?"yellow":n<=a-60?"purple":n<=a-30?"blue":"green"),(0,o.createFragment)([(0,o.createComponentVNode)(2,r.Table.Cell,{header:!0,textAlign:"right",children:"Temperature:"}),(0,o.createComponentVNode)(2,r.Table.Cell,{color:i,nowrap:!0,children:[!!t&&(n-273.15).toPrecision(4)+"\xb0C / "+(1.8*(n-273.15)+32).toPrecision(4)+"\xb0F",!t&&"--\xb0C / --\xb0F"]})],4)},u=function(e){var t=e.embedded_objects,n=e.occupied;return(0,o.createFragment)([(0,o.createComponentVNode)(2,r.Table.Cell,{header:!0,textAlign:"right",children:"Implants:"}),(0,o.createComponentVNode)(2,r.Table.Cell,{color:n?"white":"grey",children:[!!n&&t.implant_count+" "+(0,a.pluralize)("implant",t.implant_count),!n&&"--"]})],4)},d=function(e){var t=e.rad_stage,n=e.rad_dose,a=null,i=!1;if(t>0){switch(t){case 1:a="yellow";break;case 2:a="orange";break;case 3:a="orange",i=!0;break;case 4:case 5:case 6:a="red",i=!0}return(0,o.createComponentVNode)(2,r.Table.Row,{children:[(0,o.createComponentVNode)(2,r.Table.Cell,{header:!0,textAlign:"right",color:"yellow",width:10,children:"Radiation:"}),(0,o.createComponentVNode)(2,r.Table.Cell,{width:10,color:a,bold:i,children:["Stage ",t]}),(0,o.createComponentVNode)(2,r.Table.Cell,{header:!0,textAlign:"right",width:10,children:"Effective Dose:"}),(0,o.createComponentVNode)(2,r.Table.Cell,{width:10,nowrap:!0,children:[n.toPrecision(6)," Sv"]})]})}},s=function(e){var t=e.occupied,n=e.status;if(t&&"Okay"!==n.desc&&"Missing"!==n.desc)return(0,o.createComponentVNode)(2,r.Table.Row,{children:[(0,o.createComponentVNode)(2,r.Table.Cell,{header:!0,textAlign:"right",color:"pink",width:10,children:"Brain Damage:"}),(0,o.createComponentVNode)(2,r.Table.Cell,{width:10,color:n.color,children:n.desc}),(0,o.createComponentVNode)(2,r.Table.Cell,{header:!0,textAlign:"right",width:10,nowrap:!0,children:"Neuron Cohesion:"}),(0,o.createComponentVNode)(2,r.Table.Cell,{children:[((120-n.value)/120*100).toFixed(2),"%"]})]})},p=function(e){var t=e.embedded_objects;return(0,o.createComponentVNode)(2,r.Box,{textAlign:"center",children:[!!t.has_chest_object&&(0,o.createComponentVNode)(2,r.Box,{bold:!0,fontSize:1.2,color:"red",children:"Sizable foreign object located below sternum!"}),!!t.foreign_object_count&&(0,o.createComponentVNode)(2,r.Box,{bold:!0,fontSize:1.2,color:"red",children:["Foreign ",""+(0,a.pluralize)("object",t.foreign_object_count)," detected!"]})]})}},68397:function(){},36814:function(e,t,n){"use strict";t.__esModule=!0,t.ListSearch=void 0;var o=n(96323),r=n(1060),a=n(26949);t.ListSearch=function(e){var t=e.autoFocus,n=e.className,i=e.currentSearch,c=e.noResultsPlaceholder,l=e.onSearch,u=e.onSelect,d=e.options,s=e.searchPlaceholder,p=void 0===s?"Search...":s,m=e.selectedOption,f=void 0===m?null:m,h=(0,r.classes)(["list-search-interface",n]);return(0,o.createComponentVNode)(2,a.Stack,{className:h,vertical:!0,children:[(0,o.createComponentVNode)(2,a.Stack.Item,{children:(0,o.createComponentVNode)(2,a.Input,{autoFocus:t,fluid:!0,onInput:function(e,t){l(t)},placeholder:p,value:i})}),(0,o.createComponentVNode)(2,a.Stack.Item,{children:[0===d.length&&(0,o.createComponentVNode)(2,a.Placeholder,{mx:1,py:.5,children:c}),d.map((function(e){return(0,o.createVNode)(1,"div",(0,r.classes)(["list-search-interface__search-option","Button","Button--fluid","Button--color--transparent","Button--ellipsis",f&&e===f&&"Button--selected"]),e,0,{onClick:function(){return u(e)},title:e},e)}))]})]})}},55631:function(e,t,n){"use strict";t.__esModule=!0,t.Loader=void 0;var o=n(96323),r=n(26949),a=n(97622);t.Loader=function(e){var t=e.value;return(0,o.createVNode)(1,"div","AlertModal__Loader",(0,o.createComponentVNode)(2,r.Box,{className:"AlertModal__LoaderProgress",style:{width:100*(0,a.clamp01)(t)+"%"}}),2)}},90881:function(e,t){"use strict";var n;t.__esModule=!0,t.MobStatuses=t.MobStatus=void 0;var o={Conscious:0,Unconscious:1,Dead:2};t.MobStatus=o;var r=((n={})[o.Conscious]={name:"Conscious",color:"good",icon:"check"},n[o.Unconscious]={name:"Unconscious",color:"average",icon:"bed"},n[o.Dead]={name:"Dead",color:"bad",icon:"skull"},n);t.MobStatuses=r},41161:function(e,t,n){"use strict";t.__esModule=!0,t.PortableHoldingTank=t.PortableBasicInfo=void 0;var o=n(96323),r=n(26949),a=n(1033);t.PortableBasicInfo=function(e){var t=e.connected,n=e.pressure,i=e.maxPressure,c=e.children;return(0,o.createComponentVNode)(2,r.Section,{title:"Status",children:[(0,o.createComponentVNode)(2,r.LabeledList,{children:[(0,o.createComponentVNode)(2,r.LabeledList.Item,{label:"Pressure",children:(0,o.createComponentVNode)(2,r.RoundGauge,{size:1.75,value:n,minValue:0,maxValue:i,alertAfter:.7*i,ranges:{good:[0,.7*i],average:[.7*i,.85*i],bad:[.85*i,i]},format:a.formatPressure})}),(0,o.createComponentVNode)(2,r.LabeledList.Item,{label:"Port",color:t?"good":"average",children:t?"Connected":"Not Connected"})]}),c]})};t.PortableHoldingTank=function(e){var t=e.holding,n=e.onEjectTank,i=e.title;return(0,o.createComponentVNode)(2,r.Section,{title:i||"Holding Tank",minHeight:"115px",buttons:(0,o.createComponentVNode)(2,r.Button,{icon:"eject",content:"Eject",disabled:!t,onClick:function(){return n()}}),children:t?(0,o.createComponentVNode)(2,r.LabeledList,{children:[(0,o.createComponentVNode)(2,r.LabeledList.Item,{label:"Pressure",children:(0,o.createComponentVNode)(2,r.RoundGauge,{size:1.75,value:t.pressure,minValue:0,maxValue:t.maxPressure,alertAfter:.7*t.maxPressure,ranges:{good:[0,.7*t.maxPressure],average:[.7*t.maxPressure,.85*t.maxPressure],bad:[.85*t.maxPressure,t.maxPressure]},format:a.formatPressure})}),(0,o.createComponentVNode)(2,r.LabeledList.Item,{label:"Label",children:t.name})]}):(0,o.createComponentVNode)(2,r.Box,{color:"average",children:["No ",i?i.toLowerCase():"holding tank"]})})}},51418:function(e,t,n){"use strict";t.__esModule=!0,t.ReagentBar=t.ReagentList=t.ReagentGraph=t.NoContainer=t.MatterStateIconMap=t.MatterState=void 0;var o,r,a=n(96323),i=n(26949),c=n(48175),l=["className","height","sort"],u=["className","renderButtons","sort","showState","height"],d=["className","container"];function s(e,t){if(null==e)return{};var n,o,r={},a=Object.keys(e);for(o=0;o<a.length;o++)n=a[o],t.indexOf(n)>=0||(r[n]=e[n]);return r}t.MatterState=r,function(e){e[e.Solid=1]="Solid",e[e.Liquid=2]="Liquid",e[e.Gas=3]="Gas"}(r||(t.MatterState=r={}));var p=((o={})[r.Solid]={icon:"square",pr:.5},o[r.Liquid]={icon:"tint",pr:.9},o[r.Gas]={icon:"wind",pr:.5},o);t.MatterStateIconMap=p;var m={name:"No Beaker Inserted",contents:[],id:"inserted",maxVolume:100,totalVolume:0,finalColor:"#000000",temperature:c.freezeTemperature,fake:!0};t.NoContainer=m;var f=function(e){e.className;var t,n=e.height,o=e.sort,r=s(e,l),c=null!=(t=e.container)?t:m,u=c.maxVolume,d=c.totalVolume,p=c.finalColor,f=o?c.contents.slice().sort(o):c.contents||[];return r.height=n||"50px",(0,a.normalizeProps)((0,a.createComponentVNode)(2,i.Box,Object.assign({},r,{children:(0,a.createComponentVNode)(2,i.Flex,{height:"100%",direction:"column",children:[(0,a.createComponentVNode)(2,i.Flex.Item,{grow:!0,children:(0,a.createComponentVNode)(2,i.Flex,{height:"100%",children:[f.map((function(e){return(0,a.createComponentVNode)(2,i.Flex.Item,{grow:e.volume/u,children:(0,a.createComponentVNode)(2,i.Tooltip,{content:e.name+" ("+e.volume+"u)",position:"bottom",children:(0,a.createComponentVNode)(2,i.Box,{px:0,my:0,height:"100%",backgroundColor:"rgb("+e.colorR+", "+e.colorG+", "+e.colorB+")"})})},e.id)})),(0,a.createComponentVNode)(2,i.Flex.Item,{grow:(u-d)/u,children:(0,a.createComponentVNode)(2,i.Tooltip,{content:"Nothing"+(c.fake?"":" ("+(u-d)+"u)"),position:"bottom",children:(0,a.createComponentVNode)(2,i.NoticeBox,{px:0,my:0,height:"100%",backgroundColor:"rgba(0, 0, 0, 0)"})})})]})}),(0,a.createComponentVNode)(2,i.Flex.Item,{children:(0,a.createComponentVNode)(2,i.Tooltip,{content:(0,a.createComponentVNode)(2,i.Box,{children:[(0,a.createComponentVNode)(2,i.ColorBox,{color:p})," Current Mixture Color"]}),position:"bottom",children:(0,a.createComponentVNode)(2,i.Box,{height:"14px",backgroundColor:f.length?p:"rgba(0, 0, 0, 0.1)",textAlign:"center",children:c.fake||(0,a.createComponentVNode)(2,i.Box,{as:"span",backgroundColor:"rgba(0, 0, 0, 0.5)",px:1,children:d+"/"+u})})})})]})})))};t.ReagentGraph=f;var h=function(e){e.className;var t,n=e.renderButtons,o=e.sort,r=e.showState,c=e.height,l=s(e,u),d=null!=(t=e.container)?t:m,f=o?d.contents.slice().sort(o):d.contents||[];return l.height=c||6,(0,a.createComponentVNode)(2,i.Section,{scrollable:"auto"!==c,children:(0,a.normalizeProps)((0,a.createComponentVNode)(2,i.Box,Object.assign({},l,{children:f.length?f.map((function(e){return(0,a.createComponentVNode)(2,i.Flex,{mb:.2,align:"center",children:[(0,a.createComponentVNode)(2,i.Flex.Item,{grow:!0,children:[(0,a.createComponentVNode)(2,i.Icon,{pr:r?p[e.state].pr:.9,name:r?p[e.state].icon:"circle",style:{"text-shadow":"0 0 3px #000;"},color:"rgb("+e.colorR+", "+e.colorG+", "+e.colorB+")"}),"( "+e.volume+"u ) "+e.name]}),n&&(0,a.createComponentVNode)(2,i.Flex.Item,{nowrap:!0,children:n(e)})]},e.id)})):(0,a.createComponentVNode)(2,i.Box,{color:"label",children:[(0,a.createComponentVNode)(2,i.Icon,{pr:.9,name:"circle-o",style:{"text-shadow":"0 0 3px #000;"}}),"Empty"]})})))})};t.ReagentList=h;var g=function(e,t){return e!==t&&(!e||!t||e.volume!==t.volume||e.name!==t.name||e.id!==t.id||e.colorR!==t.colorR||e.colorG!==t.colorG||e.colorB!==t.colorB)},C=function(e,t){var n,o;if(e===t)return!1;if(null===e||null===t)return!0;if(e.totalVolume!==t.totalVolume||e.finalColor!==t.finalColor||e.maxVolume!==t.maxVolume)return!0;if((null==(n=e.contents)?void 0:n.length)!==(null==(o=t.contents)?void 0:o.length))return!0;for(var r in e)if(g(e.contents[r],t.contents[r]))return!0;return!1};f.defaultHooks={onComponentShouldUpdate:function(e,t){var n;for(n in e)if("container"!==n&&!(n in t))return!0;for(n in t)if("container"!==n&&e[n]!==t[n])return!0;return C(e.container,t.container)}},h.defaultHooks={onComponentShouldUpdate:function(e,t){var n;for(n in e)if("container"!==n&&"renderButtons"!==n&&!(n in t))return!0;for(n in t)if("container"!==n&&"renderButtons"!==n)if("renderButtonsDeps"!==n||"object"!=typeof e.renderButtonsDeps||"object"!=typeof t.renderButtonsDeps){if(e[n]!==t[n])return!0}else{var o=e.renderButtonsDeps,r=t.renderButtonsDeps;if(o.length!==r.length)return!0;var a=void 0;for(a in o)if(o[a]!==r[a])return!0}return C(e.container,t.container)}};t.ReagentBar=function(e){e.className;var t=e.container,n=s(e,d),o=t.maxVolume,r=t.totalVolume,c=t.finalColor;return(0,a.createComponentVNode)(2,i.Stack,{align:"center",pb:1,children:[(0,a.createComponentVNode)(2,i.Stack.Item,{children:(0,a.createComponentVNode)(2,i.Box,{textAlign:"right",width:"3em",children:r+"u"})}),(0,a.createComponentVNode)(2,i.Stack.Item,{grow:!0,children:(0,a.normalizeProps)((0,a.createComponentVNode)(2,i.ProgressBar,Object.assign({value:r,minValue:0,maxValue:o,color:c},n)))}),(0,a.createComponentVNode)(2,i.Stack.Item,{children:(0,a.createComponentVNode)(2,i.Box,{textAlign:"left",width:"3em",children:o+"u"})})]})}},75015:function(e,t,n){"use strict";t.__esModule=!0,t.ReleaseValve=void 0;var o=n(96323),r=n(26949);t.ReleaseValve=function(e){var t=e.valveIsOpen,n=e.releasePressure,a=void 0===n?0:n,i=e.minRelease,c=void 0===i?0:i,l=e.maxRelease,u=void 0===l?0:l,d=e.onToggleValve,s=e.onSetPressure;return(0,o.createComponentVNode)(2,r.LabeledList,{children:[(0,o.createComponentVNode)(2,r.LabeledList.Item,{label:"Release valve",children:(0,o.createComponentVNode)(2,r.Button,{content:t?"Open":"Closed",color:t?"average":"default",onClick:d})}),(0,o.createComponentVNode)(2,r.LabeledList.Item,{label:"Release pressure",children:[(0,o.createComponentVNode)(2,r.Button,{onClick:function(){return s(c)},content:"Min"}),(0,o.createComponentVNode)(2,r.NumberInput,{animated:!0,width:"7em",value:a,minValue:c,maxValue:u,onChange:function(e,t){return s(t)}}),(0,o.createComponentVNode)(2,r.Button,{onClick:function(){return s(u)},content:"Max"})]})]})}},72638:function(e,t,n){"use strict";t.__esModule=!0,t.VendorCashTable=void 0;var o=n(96323),r=n(26949);t.VendorCashTable=function(e){var t=e.cardname,n=e.onCardClick,a=e.bankMoney,i=e.cash,c=e.onCashClick;return(0,o.createComponentVNode)(2,r.Table,{"font-size":"9pt",direction:"row",style:{maxWidth:"100%","table-layout":"fixed"},children:[(0,o.createComponentVNode)(2,r.Table.Row,{children:(0,o.createComponentVNode)(2,r.Table.Cell,{bold:!0,children:[t&&(0,o.createComponentVNode)(2,r.Button,{icon:"id-card",mr:"100%",content:t||"",title:t||"",onClick:n,ellipsis:!0,maxWidth:"100%"}),t&&a>=0&&"Money on account: "+a+"\u2abd"]})}),(0,o.createComponentVNode)(2,r.Table.Row,{children:(0,o.createComponentVNode)(2,r.Table.Cell,{bold:!0,direction:"row",children:[i>0&&"Cash: "+i+"\u2abd",i>0&&i&&(0,o.createComponentVNode)(2,r.Button,{icon:"eject",ml:"1%",content:"eject",onClick:c})]})})]})}},818:function(e,t){"use strict";t.__esModule=!0,t.getStatsMax=t.processStatsData=void 0;t.processStatsData=function(e){if(0===(null!=e?e:[]).length)return null;for(var t=Object.keys(e[0]),n=t.reduce((function(e,t){return e[t]=[],e}),{}),o=0;o<e.length;o++)for(var r=e[o],a=0;a<t.length;a++){var i,c=t[a];n[c].push([o,null!=(i=r[c])?i:0])}return n};t.getStatsMax=function(e){var t=0;for(var n in e){var o=e[n][1];o>t&&(t=o)}return t}},96794:function(e,t){"use strict";t.__esModule=!0,t.randInt=void 0;t.randInt=function(e,t){return Math.floor(Math.random()*(t-e+1))+e}},18331:function(e,t,n){"use strict";t.__esModule=!0,t.glitch=t.spaceUnderscores=t.capitalize=t.pluralize=void 0;var o=n(96794);t.pluralize=function(e,t){return 1!==t?e+"s":e};t.capitalize=function(e){return e.replace(/(^\w{1})|(\s+\w{1})/g,(function(e){return e.toUpperCase()}))};t.spaceUnderscores=function(e){return e.replace(/[_]/g,(function(e){return" "}))};var r=["$","{","]","%","^","?",">","\xac","\u03c0",";","\u0438","\u046b","/","#","~"];t.glitch=function(e,t){for(var n=e.split(""),a=0;a<t;a++){n[(0,o.randInt)(0,n.length?n.length-1:0)]=r[(0,o.randInt)(0,r.length-1)]}return n.join("")}},48175:function(e,t,n){"use strict";t.__esModule=!0,t.getTemperatureChangeName=t.getTemperatureIcon=t.getTemperatureColor=t.neutralTemperature=t.freezeTemperature=t.TemperatureColors=void 0;var o=n(89295),r={cold:new o.Color(66,194,255),neutral:new o.Color(170,170,170),hot:new o.Color(255,120,0),veryhot:new o.Color(255,0,0)};t.TemperatureColors=r;t.freezeTemperature=273.15;var a=293.15;t.neutralTemperature=a;var i=493.15;t.getTemperatureColor=function(e,t){void 0===t&&(t=1e3);var n=r.cold,c=r.neutral,l=r.hot,u=r.veryhot;return e<i?o.Color.lookup((e-a)/400+.5,[n,c,l]).toString():o.Color.lookup((e-i)/(t-i),[l,u]).toString()};t.getTemperatureIcon=function(e){switch(Math.round(e/200)){case 0:return"thermometer-empty";case 1:return"thermometer-quarter";case 2:return"thermometer-half";case 3:return"thermometer-three-quarters";default:return"thermometer-full"}};t.getTemperatureChangeName=function(e,t){return e<t?"heating":e>t?"cooling":"neutral"}},30041:function(e,t,n){"use strict";t.__esModule=!0,t.Layout=void 0;var o=n(96323),r=n(1060),a=n(54425),i=n(99397),c=["className","theme","mode","children"],l=["className","scrollable","children"];function u(e,t){if(null==e)return{};var n,o,r={},a=Object.keys(e);for(o=0;o<a.length;o++)n=a[o],t.indexOf(n)>=0||(r[n]=e[n]);return r}var d=function(e){var t=e.className,n=e.theme,i=void 0===n?"nanotrasen":n,l=e.mode,d=void 0===l?"dark":l,s=e.children,p=u(e,c);return(0,o.createVNode)(1,"div",(0,r.classes)(["theme-"+i,"mode-"+d]),(0,o.normalizeProps)((0,o.createVNode)(1,"div",(0,r.classes)(["Layout",t,(0,a.computeBoxClassName)(p)]),s,0,Object.assign({},(0,a.computeBoxProps)(p)))),2)};t.Layout=d;var s=function(e){var t=e.className,n=e.scrollable,i=e.children,c=u(e,l);return(0,o.normalizeProps)((0,o.createVNode)(1,"div",(0,r.classes)(["Layout__content",n&&"Layout__content--scrollable",t,(0,a.computeBoxClassName)(c)]),i,0,Object.assign({},(0,a.computeBoxProps)(c))))};s.defaultHooks={onComponentDidMount:function(e){return(0,i.addScrollableNode)(e)},onComponentWillUnmount:function(e){return(0,i.removeScrollableNode)(e)}},d.Content=s},76738:function(e,t,n){"use strict";t.__esModule=!0,t.NtosWindow=void 0;var o=n(96323),r=n(57723),a=n(31246),i=n(26949),c=n(34881),l=function(e,t){var n=e.title,l=e.width,u=void 0===l?575:l,d=e.height,s=void 0===d?700:d,p=e.theme,m=void 0===p?"ntos":p,f=e.children,h=(0,a.useBackend)(t),g=h.act,C=h.data,N=C.PC_device_theme,v=C.PC_batteryicon,b=C.PC_showbatteryicon,V=C.PC_batterypercent,y=C.PC_ntneticon,x=C.PC_apclinkicon,I=C.PC_stationtime,k=C.PC_programheaders,w=void 0===k?[]:k,S=C.PC_showexitprogram;return(0,o.createComponentVNode)(2,c.Window,{title:n,width:u,height:s,theme:m,children:(0,o.createVNode)(1,"div","NtosWindow",[(0,o.createVNode)(1,"div","NtosWindow__header NtosHeader",[(0,o.createVNode)(1,"div","NtosHeader__left",[(0,o.createComponentVNode)(2,i.Box,{inline:!0,bold:!0,mr:2,children:I}),(0,o.createComponentVNode)(2,i.Box,{inline:!0,italic:!0,mr:2,opacity:.33,children:["ntos"===N&&"NtOS","syndicate"===N&&"Syndix"]})],4),(0,o.createVNode)(1,"div","NtosHeader__right",[w.map((function(e){return(0,o.createComponentVNode)(2,i.Box,{inline:!0,mr:1,children:(0,o.createVNode)(1,"img","NtosHeader__icon",null,1,{src:(0,r.resolveAsset)(e.icon)})},e.icon)})),(0,o.createComponentVNode)(2,i.Box,{inline:!0,children:y&&(0,o.createVNode)(1,"img","NtosHeader__icon",null,1,{src:(0,r.resolveAsset)(y)})}),!(!b||!v)&&(0,o.createComponentVNode)(2,i.Box,{inline:!0,mr:1,children:[(0,o.createVNode)(1,"img","NtosHeader__icon",null,1,{src:(0,r.resolveAsset)(v)}),V&&V]}),x&&(0,o.createComponentVNode)(2,i.Box,{inline:!0,mr:1,children:(0,o.createVNode)(1,"img","NtosHeader__icon",null,1,{src:(0,r.resolveAsset)(x)})}),!!S&&(0,o.createComponentVNode)(2,i.Button,{width:"26px",lineHeight:"22px",textAlign:"center",color:"transparent",icon:"window-minimize-o",tooltip:"Minimize",tooltipPosition:"bottom",onClick:function(){return g("PC_minimize")}}),!!S&&(0,o.createComponentVNode)(2,i.Button,{mr:"-3px",width:"26px",lineHeight:"22px",textAlign:"center",color:"transparent",icon:"window-close-o",tooltip:"Close",tooltipPosition:"bottom-start",onClick:function(){return g("PC_exit")}}),!S&&(0,o.createComponentVNode)(2,i.Button,{mr:"-3px",width:"26px",lineHeight:"22px",textAlign:"center",color:"transparent",icon:"power-off",tooltip:"Power off",tooltipPosition:"bottom-start",onClick:function(){return g("PC_shutdown")}})],0)],4),f],0)})};t.NtosWindow=l;l.Content=function(e){return(0,o.createVNode)(1,"div","NtosWindow__content",(0,o.normalizeProps)((0,o.createComponentVNode)(2,c.Window.Content,Object.assign({},e))),2)}},52243:function(e,t,n){"use strict";t.__esModule=!0,t.Pane=void 0;var o=n(96323),r=n(1060),a=n(31246),i=n(26949),c=n(27157),l=n(30041),u=["theme","children","className"],d=["className","fitted","children"];function s(e,t){if(null==e)return{};var n,o,r={},a=Object.keys(e);for(o=0;o<a.length;o++)n=a[o],t.indexOf(n)>=0||(r[n]=e[n]);return r}var p=function(e,t){var n=e.theme,d=e.children,p=e.className,m=s(e,u),f=(0,a.useBackend)(t).suspended,h=(0,c.useDebug)(t).debugLayout;return(0,o.normalizeProps)((0,o.createComponentVNode)(2,l.Layout,Object.assign({className:(0,r.classes)(["Window",p]),theme:n},m,{children:(0,o.createComponentVNode)(2,i.Box,{fillPositionedParent:!0,className:h&&"debug-layout",children:!f&&d})})))};t.Pane=p;p.Content=function(e){var t=e.className,n=e.fitted,a=e.children,i=s(e,d);return(0,o.normalizeProps)((0,o.createComponentVNode)(2,l.Layout.Content,Object.assign({className:(0,r.classes)(["Window__content",t])},i,{children:n&&a||(0,o.createVNode)(1,"div","Window__contentPadding",a,0)})))}},34881:function(e,t,n){"use strict";t.__esModule=!0,t.Window=void 0;var o=n(96323),r=n(1060),a=n(465),i=n(21118),c=n(31246),l=n(26949),u=n(84200),d=n(27157),s=(n(98069),n(41410)),p=n(79926),m=n(30041),f=["className","fitted","children"];function h(e,t){return h=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e},h(e,t)}var g=(0,p.createLogger)("Window"),C=[400,600],N=function(e){var t,n;function l(){return e.apply(this,arguments)||this}n=e,(t=l).prototype=Object.create(n.prototype),t.prototype.constructor=t,h(t,n);var p=l.prototype;return p.componentDidMount=function(){var e=(0,c.useBackend)(this.context).suspended,t=this.props.canClose,n=void 0===t||t;e||(Byond.winset(window.__windowId__,{"can-close":Boolean(n)}),g.log("mounting"),this.updateGeometry())},p.componentDidUpdate=function(e){(this.props.width!==e.width||this.props.height!==e.height)&&this.updateGeometry()},p.updateGeometry=function(){var e,t=(0,c.useBackend)(this.context).config,n=Object.assign({size:C},t.window);this.props.width&&this.props.height&&(n.size=[this.props.width,this.props.height]),null!=(e=t.window)&&e.key&&(0,s.setWindowKey)(t.window.key),(0,s.recallWindowGeometry)(n)},p.render=function(){var e,t,n=this.props,l=n.canClose,p=void 0===l||l,f=n.theme,h=n.title,C=n.children,N=(0,c.useBackend)(this.context),v=N.config,V=N.suspended,y=(0,d.useDebug)(this.context).debugLayout,x=(0,a.useDispatch)(this.context),I=null==(e=v.window)?void 0:e.fancy,k=null==(t=v.window)?void 0:t.mode,w=v.user&&(v.user.observer?v.status<u.UI_DISABLED:v.status<u.UI_INTERACTIVE);return(0,o.createComponentVNode)(2,m.Layout,{className:"Window",theme:f,mode:k,children:[(0,o.createComponentVNode)(2,b,{className:"Window__titleBar",title:!V&&(h||(0,i.decodeHtmlEntities)(v.title)),status:v.status,fancy:I,onDragStart:s.dragStartHandler,onClose:function(){g.log("pressed close"),x((0,c.backendSuspendStart)())},canClose:p}),(0,o.createVNode)(1,"div",(0,r.classes)(["Window__rest",y&&"debug-layout"]),[!V&&C,w&&(0,o.createVNode)(1,"div","Window__dimmer")],0),I&&(0,o.createFragment)([(0,o.createVNode)(1,"div","Window__resizeHandle__e",null,1,{onMousedown:(0,s.resizeStartHandler)(1,0)}),(0,o.createVNode)(1,"div","Window__resizeHandle__s",null,1,{onMousedown:(0,s.resizeStartHandler)(0,1)}),(0,o.createVNode)(1,"div","Window__resizeHandle__se",null,1,{onMousedown:(0,s.resizeStartHandler)(1,1)})],4)]})},l}(o.Component);t.Window=N;N.Content=function(e){var t=e.className,n=e.fitted,a=e.children,i=function(e,t){if(null==e)return{};var n,o,r={},a=Object.keys(e);for(o=0;o<a.length;o++)n=a[o],t.indexOf(n)>=0||(r[n]=e[n]);return r}(e,f);return(0,o.normalizeProps)((0,o.createComponentVNode)(2,m.Layout.Content,Object.assign({className:(0,r.classes)(["Window__content",t])},i,{children:n&&a||(0,o.createVNode)(1,"div","Window__contentPadding",a,0)})))};var v=function(e){switch(e){case u.UI_INTERACTIVE:return"good";case u.UI_UPDATE:return"average";case u.UI_DISABLED:default:return"bad"}},b=function(e,t){var n=e.className,c=e.title,u=e.status,d=e.canClose,s=e.fancy,p=e.onDragStart,m=e.onClose;(0,a.useDispatch)(t);return(0,o.createVNode)(1,"div",(0,r.classes)(["TitleBar",n]),[u===undefined&&(0,o.createComponentVNode)(2,l.Icon,{className:"TitleBar__statusIcon",name:"tools",opacity:.5})||(0,o.createComponentVNode)(2,l.Icon,{className:"TitleBar__statusIcon",color:v(u),name:"eye"}),(0,o.createVNode)(1,"div","TitleBar__title","string"==typeof c&&c===c.toLowerCase()&&(0,i.toTitleCase)(c)||c,0),(0,o.createVNode)(1,"div","TitleBar__dragZone",null,1,{onMousedown:function(e){return s&&p(e)}}),!1,Boolean(s&&d)&&(0,o.createVNode)(1,"div","TitleBar__close TitleBar__clickable",Byond.IS_LTE_IE8?"x":"\xd7",0,{onclick:m})],0)}},2381:function(e,t,n){"use strict";t.__esModule=!0,t.Window=t.Pane=t.NtosWindow=t.Layout=void 0;var o=n(30041);t.Layout=o.Layout;var r=n(76738);t.NtosWindow=r.NtosWindow;var a=n(52243);t.Pane=a.Pane;var i=n(34881);t.Window=i.Window},13952:function(e,t){"use strict";t.__esModule=!0,t.captureExternalLinks=void 0;t.captureExternalLinks=function(){document.addEventListener("click",(function(e){for(var t=e.target;;){if(!t||t===document.body)return;if("a"===String(t.tagName).toLowerCase())break;t=t.parentElement}var n=t.getAttribute("href")||"";if(!("?"===n.charAt(0)||n.startsWith("byond://"))){e.preventDefault();var o=n;o.toLowerCase().startsWith("www")&&(o="https://"+o),Byond.topic({tgui:1,window_id:window.__windowId__,type:"openLink",url:o})}}))}},79926:function(e,t,n){"use strict";t.__esModule=!0,t.logger=t.createLogger=void 0;n(82252);var o=0,r=1,a=2,i=3,c=4,l=function(e,t){for(var n=arguments.length,o=new Array(n>2?n-2:0),r=2;r<n;r++)o[r-2]=arguments[r];if(e>=a){var i=[t].concat(o).map((function(e){return"string"==typeof e?e:e instanceof Error?e.stack||String(e):JSON.stringify(e)})).filter((function(e){return e})).join(" ")+"\nUser Agent: "+navigator.userAgent;Byond.topic({tgui:1,window_id:window.__windowId__,type:"log",ns:t,message:i})}},u=function(e){return{debug:function(){for(var t=arguments.length,n=new Array(t),r=0;r<t;r++)n[r]=arguments[r];return l.apply(void 0,[o,e].concat(n))},log:function(){for(var t=arguments.length,n=new Array(t),o=0;o<t;o++)n[o]=arguments[o];return l.apply(void 0,[r,e].concat(n))},info:function(){for(var t=arguments.length,n=new Array(t),o=0;o<t;o++)n[o]=arguments[o];return l.apply(void 0,[a,e].concat(n))},warn:function(){for(var t=arguments.length,n=new Array(t),o=0;o<t;o++)n[o]=arguments[o];return l.apply(void 0,[i,e].concat(n))},error:function(){for(var t=arguments.length,n=new Array(t),o=0;o<t;o++)n[o]=arguments[o];return l.apply(void 0,[c,e].concat(n))}}};t.createLogger=u;var d=u();t.logger=d},77960:function(e,t,n){"use strict";t.__esModule=!0,t.createRenderer=t.suspendRenderer=t.resumeRenderer=void 0;var o,r=n(28440),a=n(96323),i=((0,n(79926).createLogger)("renderer"),!0),c=!1;t.resumeRenderer=function(){i=i||"resumed",c=!1};t.suspendRenderer=function(){c=!0};t.createRenderer=function(e){return function(){r.perf.mark("render/start"),o||(o=document.getElementById("react-root")),(0,a.render)(e(),o),r.perf.mark("render/finish"),c||i&&(i=!1)}}},91199:function(e,t,n){"use strict";t.__esModule=!0,t.getRoutedComponent=void 0;var o=n(96323),r=n(31246),a=(n(12184),n(2381)),i=n(8156),c=function(e,t){return function(){return(0,o.createComponentVNode)(2,a.Window,{children:(0,o.createComponentVNode)(2,a.Window.Content,{scrollable:!0,children:["notFound"===e&&(0,o.createVNode)(1,"div",null,[(0,o.createTextVNode)("Interface "),(0,o.createVNode)(1,"b",null,t,0),(0,o.createTextVNode)(" was not found.")],4),"missingExport"===e&&(0,o.createVNode)(1,"div",null,[(0,o.createTextVNode)("Interface "),(0,o.createVNode)(1,"b",null,t,0),(0,o.createTextVNode)(" is missing an export.")],4)]})})}},l=function(){return(0,o.createComponentVNode)(2,a.Window,{children:(0,o.createComponentVNode)(2,a.Window.Content,{scrollable:!0})})};t.getRoutedComponent=function(e){var t=e.getState(),n=(0,r.selectBackend)(t),o=n.suspended,a=n.config;if(o)return l;for(var u,d=null==a?void 0:a["interface"],s=[function(e){return"./"+e+".tsx"},function(e){return"./"+e+".js"},function(e){return"./"+e+"/index.tsx"},function(e){return"./"+e+"/index.js"}];!u&&s.length>0;){var p=s.shift()(d);try{u=i(p)}catch(f){if("MODULE_NOT_FOUND"!==f.code)throw f}}if(!u)return c("notFound",d);var m=u[d];return m||c("missingExport",d)}},81890:function(e,t,n){"use strict";t.__esModule=!0,t.sanitizeText=void 0;var o,r=(o=n(42950))&&o.__esModule?o:{"default":o};var a=["b","br","center","code","div","font","hr","i","li","menu","ol","p","pre","span","table","td","th","tr","u","ul"],i=["class","style"];t.sanitizeText=function(e,t,n){return void 0===t&&(t=a),void 0===n&&(n=i),r["default"].sanitize(e,{ALLOWED_TAGS:t,FORBID_ATTR:n})}},18749:function(e,t,n){"use strict";t.__esModule=!0,t.StoreProvider=t.configureStore=void 0;var o=n(32416),r=n(465),a=n(96323),i=n(57723),c=n(31246),l=n(27157);function u(e,t){return u=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e},u(e,t)}var d=(0,n(79926).createLogger)("store");t.configureStore=function(e){var t,n;void 0===e&&(e={});var a=(0,o.flow)([(0,r.combineReducers)({debug:l.debugReducer,backend:c.backendReducer}),e.reducer]),u=[].concat((null==(t=e.middleware)?void 0:t.pre)||[],[i.assetMiddleware,c.backendMiddleware],(null==(n=e.middleware)?void 0:n.post)||[]);var d=r.applyMiddleware.apply(void 0,u),p=(0,r.createStore)(a,d);return window.__store__=p,window.__augmentStack__=s(p),p};var s=function(e){return function(t,n){var o,r;n?"object"!=typeof n||n.stack||(n.stack=t):(n=new Error(t.split("\n")[0])).stack=t,d.log("FatalError:",n);var a=e.getState(),i=null==a||null==(o=a.backend)?void 0:o.config,c=t;return c+="\nUser Agent: "+navigator.userAgent,c+="\nState: "+JSON.stringify({ckey:null==i||null==(r=i.client)?void 0:r.ckey,"interface":null==i?void 0:i["interface"],window:null==i?void 0:i.window})}},p=function(e){var t,n;function o(){return e.apply(this,arguments)||this}n=e,(t=o).prototype=Object.create(n.prototype),t.prototype.constructor=t,u(t,n);var r=o.prototype;return r.getChildContext=function(){return{store:this.props.store}},r.render=function(){return this.props.children},o}(a.Component);t.StoreProvider=p},88428:function(e,t,n){"use strict";t.__esModule=!0,t.meta=void 0;var o=n(96323),r=n(26949),a={title:"Blink",render:function(){return(0,o.createComponentVNode)(2,i)}};t.meta=a;var i=function(e,t){return(0,o.createComponentVNode)(2,r.Section,{children:(0,o.createComponentVNode)(2,r.Blink,{children:"Blink"})})}},9184:function(e,t,n){"use strict";t.__esModule=!0,t.meta=void 0;var o=n(96323),r=n(26949),a=n(87758),i={title:"BlockQuote",render:function(){return(0,o.createComponentVNode)(2,c)}};t.meta=i;var c=function(e,t){return(0,o.createComponentVNode)(2,r.Section,{children:(0,o.createComponentVNode)(2,r.BlockQuote,{children:(0,o.createComponentVNode)(2,a.BoxWithSampleText)})})}},36801:function(e,t,n){"use strict";t.__esModule=!0,t.meta=void 0;var o=n(96323),r=n(26949),a={title:"Box",render:function(){return(0,o.createComponentVNode)(2,i)}};t.meta=a;var i=function(e,t){return(0,o.createComponentVNode)(2,r.Section,{children:[(0,o.createComponentVNode)(2,r.Box,{bold:!0,children:"bold"}),(0,o.createComponentVNode)(2,r.Box,{italic:!0,children:"italic"}),(0,o.createComponentVNode)(2,r.Box,{opacity:.5,children:"opacity 0.5"}),(0,o.createComponentVNode)(2,r.Box,{opacity:.25,children:"opacity 0.25"}),(0,o.createComponentVNode)(2,r.Box,{m:2,children:"m: 2"}),(0,o.createComponentVNode)(2,r.Box,{textAlign:"left",children:"left"}),(0,o.createComponentVNode)(2,r.Box,{textAlign:"center",children:"center"}),(0,o.createComponentVNode)(2,r.Box,{textAlign:"right",children:"right"})]})}},3750:function(e,t,n){"use strict";t.__esModule=!0,t.meta=void 0;var o=n(96323),r=n(26949),a={title:"Button",render:function(){return(0,o.createComponentVNode)(2,l)}};t.meta=a;var i=["red","orange","yellow","olive","green","teal","blue","violet","purple","pink","brown","grey"],c=["good","average","bad","black","white"],l=function(e,t){return(0,o.createComponentVNode)(2,r.Section,{children:[(0,o.createComponentVNode)(2,r.Box,{mb:1,children:[(0,o.createComponentVNode)(2,r.Button,{content:"Simple"}),(0,o.createComponentVNode)(2,r.Button,{selected:!0,content:"Selected"}),(0,o.createComponentVNode)(2,r.Button,{altSelected:!0,content:"Alt Selected"}),(0,o.createComponentVNode)(2,r.Button,{disabled:!0,content:"Disabled"}),(0,o.createComponentVNode)(2,r.Button,{color:"transparent",content:"Transparent"}),(0,o.createComponentVNode)(2,r.Button,{icon:"cog",content:"Icon"}),(0,o.createComponentVNode)(2,r.Button,{icon:"power-off"}),(0,o.createComponentVNode)(2,r.Button,{fluid:!0,content:"Fluid"}),(0,o.createComponentVNode)(2,r.Button,{my:1,lineHeight:2,minWidth:15,textAlign:"center",content:"With Box props"})]}),(0,o.createComponentVNode)(2,r.Box,{mb:1,children:[c.map((function(e){return(0,o.createComponentVNode)(2,r.Button,{color:e,content:e},e)})),(0,o.createVNode)(1,"br"),i.map((function(e){return(0,o.createComponentVNode)(2,r.Button,{color:e,content:e},e)})),(0,o.createVNode)(1,"br"),i.map((function(e){return(0,o.createComponentVNode)(2,r.Box,{inline:!0,mx:"7px",color:e,children:e},e)}))]})]})}},68696:function(e,t,n){"use strict";t.__esModule=!0,t.meta=void 0;var o=n(96323),r=n(31246),a=n(26949),i=n(79926),c={title:"ByondUi",render:function(){return(0,o.createComponentVNode)(2,l)}};t.meta=c;var l=function(e,t){var n=(0,r.useLocalState)(t,"byondUiEvalCode","Byond.winset('"+window.__windowId__+"', {\n 'is-visible': true,\n})"),c=n[0],l=n[1];return(0,o.createFragment)([(0,o.createComponentVNode)(2,a.Section,{title:"Button",children:(0,o.createComponentVNode)(2,a.ByondUi,{params:{type:"button",text:"Button"}})}),(0,o.createComponentVNode)(2,a.Section,{title:"Make BYOND calls",buttons:(0,o.createComponentVNode)(2,a.Button,{icon:"chevron-right",onClick:function(){return setImmediate((function(){try{var e=new Function("return ("+c+")")();e&&e.then?(i.logger.log("Promise"),e.then(i.logger.log)):i.logger.log(e)}catch(t){i.logger.log(t)}}))},children:"Evaluate"}),children:(0,o.createComponentVNode)(2,a.Box,{as:"textarea",width:"100%",height:"10em",onChange:function(e){return l(e.target.value)},children:c})})],4)}},88835:function(e,t,n){"use strict";t.__esModule=!0,t.meta=void 0;var o=n(96323),r=n(26949),a=n(87758),i={title:"Collapsible",render:function(){return(0,o.createComponentVNode)(2,c)}};t.meta=i;var c=function(e,t){return(0,o.createComponentVNode)(2,r.Section,{children:(0,o.createComponentVNode)(2,r.Collapsible,{title:"Collapsible Demo",buttons:(0,o.createComponentVNode)(2,r.Button,{icon:"cog"}),children:(0,o.createComponentVNode)(2,a.BoxWithSampleText)})})}},34458:function(e,t,n){"use strict";t.__esModule=!0,t.meta=void 0;var o=n(96323),r=n(31246),a=n(26949),i={title:"Flex & Sections",render:function(){return(0,o.createComponentVNode)(2,c)}};t.meta=i;var c=function(e,t){var n=(0,r.useLocalState)(t,"fs_grow",1),i=n[0],c=n[1],l=(0,r.useLocalState)(t,"fs_direction","column"),u=l[0],d=l[1],s=(0,r.useLocalState)(t,"fs_fill",!0),p=s[0],m=s[1],f=(0,r.useLocalState)(t,"fs_title",!0),h=f[0],g=f[1];return(0,o.createComponentVNode)(2,a.Flex,{height:"100%",direction:"column",children:[(0,o.createComponentVNode)(2,a.Flex.Item,{mb:1,children:(0,o.createComponentVNode)(2,a.Section,{children:[(0,o.createComponentVNode)(2,a.Button,{fluid:!0,onClick:function(){return d("column"===u?"row":"column")},children:'Flex direction="'+u+'"'}),(0,o.createComponentVNode)(2,a.Button,{fluid:!0,onClick:function(){return c(Number(!i))},children:"Flex.Item grow={"+i+"}"}),(0,o.createComponentVNode)(2,a.Button,{fluid:!0,onClick:function(){return m(!p)},children:"Section fill={"+String(p)+"}"}),(0,o.createComponentVNode)(2,a.Button,{fluid:!0,selected:h,onClick:function(){return g(!h)},children:"Section title"})]})}),(0,o.createComponentVNode)(2,a.Flex.Item,{grow:1,children:(0,o.createComponentVNode)(2,a.Flex,{height:"100%",direction:u,children:[(0,o.createComponentVNode)(2,a.Flex.Item,{mr:"row"===u&&1,mb:"column"===u&&1,grow:i,children:(0,o.createComponentVNode)(2,a.Section,{title:h&&"Section 1",fill:p,children:"Content"})}),(0,o.createComponentVNode)(2,a.Flex.Item,{grow:i,children:(0,o.createComponentVNode)(2,a.Section,{title:h&&"Section 2",fill:p,children:"Content"})})]})})]})}},23148:function(e,t,n){"use strict";t.__esModule=!0,t.meta=void 0;var o=n(96323),r=n(31246),a=n(26949),i={title:"Input",render:function(){return(0,o.createComponentVNode)(2,c)}};t.meta=i;var c=function(e,t){var n=(0,r.useLocalState)(t,"number",0),i=n[0],c=n[1],l=(0,r.useLocalState)(t,"text","Sample text"),u=l[0],d=l[1];return(0,o.createComponentVNode)(2,a.Section,{children:(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Input (onChange)",children:(0,o.createComponentVNode)(2,a.Input,{value:u,onChange:function(e,t){return d(t)}})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Input (onInput)",children:(0,o.createComponentVNode)(2,a.Input,{value:u,onInput:function(e,t){return d(t)}})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"NumberInput (onChange)",children:(0,o.createComponentVNode)(2,a.NumberInput,{animated:!0,width:"40px",step:1,stepPixelSize:5,value:i,minValue:-100,maxValue:100,onChange:function(e,t){return c(t)}})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"NumberInput (onDrag)",children:(0,o.createComponentVNode)(2,a.NumberInput,{animated:!0,width:"40px",step:1,stepPixelSize:5,value:i,minValue:-100,maxValue:100,onDrag:function(e,t){return c(t)}})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Slider (onDrag)",children:(0,o.createComponentVNode)(2,a.Slider,{step:1,stepPixelSize:5,value:i,minValue:-100,maxValue:100,onDrag:function(e,t){return c(t)}})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Knob (onDrag)",children:[(0,o.createComponentVNode)(2,a.Knob,{inline:!0,size:1,step:1,stepPixelSize:2,value:i,minValue:-100,maxValue:100,onDrag:function(e,t){return c(t)}}),(0,o.createComponentVNode)(2,a.Knob,{ml:1,inline:!0,bipolar:!0,size:1,step:1,stepPixelSize:2,value:i,minValue:-100,maxValue:100,onDrag:function(e,t){return c(t)}})]}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Rotating Icon",children:(0,o.createComponentVNode)(2,a.Box,{inline:!0,position:"relative",children:(0,o.createComponentVNode)(2,a.DraggableControl,{value:i,minValue:-100,maxValue:100,dragMatrix:[0,-1],step:1,stepPixelSize:5,onDrag:function(e,t){return c(t)},children:function(e){return(0,o.createComponentVNode)(2,a.Box,{onMouseDown:e.handleDragStart,children:[(0,o.createComponentVNode)(2,a.Icon,{size:4,color:"yellow",name:"times",rotation:4*e.displayValue}),e.inputElement]})}})})})]})})}},23613:function(e,t,n){"use strict";t.__esModule=!0,t.meta=void 0;var o=n(96323),r=n(26949),a={title:"Popper",render:function(){return(0,o.createComponentVNode)(2,i)}};t.meta=a;var i=function(){return(0,o.createFragment)([(0,o.createComponentVNode)(2,r.Popper,{popperContent:(0,o.createComponentVNode)(2,r.Box,{style:{background:"white",border:"2px solid blue"},children:"Loogatme!"}),options:{placement:"bottom"},children:(0,o.createComponentVNode)(2,r.Box,{style:{border:"5px solid white",height:"300px",width:"200px"}})}),(0,o.createComponentVNode)(2,r.Popper,{popperContent:(0,o.createComponentVNode)(2,r.Box,{style:{background:"white",border:"2px solid blue"},children:"I am on the right!"}),options:{placement:"right"},children:(0,o.createComponentVNode)(2,r.Box,{style:{border:"5px solid white",height:"500px",width:"100px"}})})],4)}},9093:function(e,t,n){"use strict";t.__esModule=!0,t.meta=void 0;var o=n(96323),r=n(31246),a=n(26949),i={title:"ProgressBar",render:function(){return(0,o.createComponentVNode)(2,c)}};t.meta=i;var c=function(e,t){var n=(0,r.useLocalState)(t,"progress",.5),i=n[0],c=n[1],l=(0,r.useLocalState)(t,"color",""),u=l[0],d=l[1],s=u?{color:u}:{ranges:{good:[.5,Infinity],bad:[-Infinity,.1],average:[0,.5]}};return(0,o.createComponentVNode)(2,a.Section,{children:[(0,o.normalizeProps)((0,o.createComponentVNode)(2,a.ProgressBar,Object.assign({},s,{minValue:-1,maxValue:1,value:i,children:["Value: ",Number(i).toFixed(1)]}))),(0,o.createComponentVNode)(2,a.Box,{mt:1,children:(0,o.createComponentVNode)(2,a.LabeledList,{mt:"2em",children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Adjust value",children:[(0,o.createComponentVNode)(2,a.Button,{content:"-0.1",onClick:function(){return c(i-.1)}}),(0,o.createComponentVNode)(2,a.Button,{content:"+0.1",onClick:function(){return c(i+.1)}})]}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Override color",children:(0,o.createComponentVNode)(2,a.Input,{value:u,onChange:function(e,t){return d(t)}})})]})})]})}},86482:function(e,t,n){"use strict";t.__esModule=!0,t.meta=void 0;var o=n(96323),r=n(26949),a={title:"Stack",render:function(){return(0,o.createComponentVNode)(2,l)}};t.meta=a;var i=function(){return(0,o.createComponentVNode)(2,r.Box,{inline:!0,width:1,height:1,children:"A"})},c=function(){return(0,o.createFragment)([(0,o.createComponentVNode)(2,r.Stack.Item,{children:(0,o.createComponentVNode)(2,i)}),(0,o.createComponentVNode)(2,r.Stack.Divider),(0,o.createComponentVNode)(2,r.Stack.Item,{children:(0,o.createComponentVNode)(2,i)})],4)},l=function(e,t){return(0,o.createComponentVNode)(2,r.Section,{fill:!0,children:(0,o.createComponentVNode)(2,r.Stack,{fill:!0,className:"debug-layout",children:[(0,o.createComponentVNode)(2,c),(0,o.createComponentVNode)(2,r.Stack.Item,{grow:1,children:(0,o.createComponentVNode)(2,r.Stack,{fill:!0,zebra:!0,vertical:!0,children:[(0,o.createComponentVNode)(2,c),(0,o.createComponentVNode)(2,r.Stack.Item,{children:(0,o.createComponentVNode)(2,r.Stack,{fill:!0,children:[(0,o.createComponentVNode)(2,c),(0,o.createComponentVNode)(2,r.Stack.Item,{grow:1}),(0,o.createComponentVNode)(2,c),(0,o.createComponentVNode)(2,c)]})}),(0,o.createComponentVNode)(2,r.Stack.Item,{grow:1}),(0,o.createComponentVNode)(2,c)]})})]})})}},63900:function(e,t,n){"use strict";t.__esModule=!0,t.meta=void 0;var o=n(96323),r=n(7151),a=n(26949),i=n(1033),c={title:"Storage",render:function(){return(0,o.createComponentVNode)(2,l)}};t.meta=c;var l=function(e,t){return window.localStorage?(0,o.createComponentVNode)(2,a.Section,{title:"Local Storage",buttons:(0,o.createComponentVNode)(2,a.Button,{icon:"recycle",onClick:function(){localStorage.clear(),r.storage.clear()},children:"Clear"}),children:(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Keys in use",children:localStorage.length}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Remaining space",children:(0,i.formatSiUnit)(localStorage.remainingSpace,0,"B")})]})}):(0,o.createComponentVNode)(2,a.NoticeBox,{children:"Local storage is not available."})}},88209:function(e,t,n){"use strict";t.__esModule=!0,t.meta=void 0;var o=n(96323),r=n(31246),a=n(26949),i={title:"Tabs",render:function(){return(0,o.createComponentVNode)(2,l)}};t.meta=i;var c=["Tab #1","Tab #2","Tab #3","Tab #4"],l=function(e,t){var n=(0,r.useLocalState)(t,"tabProps",{}),i=n[0],c=n[1];return(0,o.createFragment)([(0,o.createComponentVNode)(2,a.Section,{children:[(0,o.createComponentVNode)(2,a.Button.Checkbox,{inline:!0,content:"vertical",checked:i.vertical,onClick:function(){return c(Object.assign({},i,{vertical:!i.vertical}))}}),(0,o.createComponentVNode)(2,a.Button.Checkbox,{inline:!0,content:"leftSlot",checked:i.leftSlot,onClick:function(){return c(Object.assign({},i,{leftSlot:!i.leftSlot}))}}),(0,o.createComponentVNode)(2,a.Button.Checkbox,{inline:!0,content:"rightSlot",checked:i.rightSlot,onClick:function(){return c(Object.assign({},i,{rightSlot:!i.rightSlot}))}}),(0,o.createComponentVNode)(2,a.Button.Checkbox,{inline:!0,content:"icon",checked:i.icon,onClick:function(){return c(Object.assign({},i,{icon:!i.icon}))}}),(0,o.createComponentVNode)(2,a.Button.Checkbox,{inline:!0,content:"fluid",checked:i.fluid,onClick:function(){return c(Object.assign({},i,{fluid:!i.fluid}))}}),(0,o.createComponentVNode)(2,a.Button.Checkbox,{inline:!0,content:"centered",checked:i.centered,onClick:function(){return c(Object.assign({},i,{centered:!i.centered}))}})]}),(0,o.createComponentVNode)(2,a.Section,{fitted:!0,children:(0,o.createComponentVNode)(2,u)}),(0,o.createComponentVNode)(2,a.Section,{title:"Normal section",children:[(0,o.createComponentVNode)(2,u),"Some text"]}),(0,o.createComponentVNode)(2,a.Section,{children:"Section-less tabs appear the same as tabs in a fitted section:"}),(0,o.createComponentVNode)(2,u)],4)},u=function(e,t){var n=(0,r.useLocalState)(t,"tabIndex",0),i=n[0],l=n[1],u=(0,r.useLocalState)(t,"tabProps",{})[0];return(0,o.createComponentVNode)(2,a.Tabs,{vertical:u.vertical,fluid:u.fluid,textAlign:u.centered&&"center",children:c.map((function(e,t){return(0,o.createComponentVNode)(2,a.Tabs.Tab,{selected:t===i,icon:u.icon&&"info-circle",leftSlot:u.leftSlot&&(0,o.createComponentVNode)(2,a.Button,{circular:!0,compact:!0,color:"transparent",icon:"times"}),rightSlot:u.rightSlot&&(0,o.createComponentVNode)(2,a.Button,{circular:!0,compact:!0,color:"transparent",icon:"times"}),onClick:function(){return l(t)},children:e},t)}))})}},38200:function(e,t,n){"use strict";t.__esModule=!0,t.meta=void 0;var o=n(96323),r=n(31246),a=n(26949),i={title:"Themes",render:function(){return(0,o.createComponentVNode)(2,c)}};t.meta=i;var c=function(e,t){var n=(0,r.useLocalState)(t,"kitchenSinkTheme"),i=n[0],c=n[1];return(0,o.createComponentVNode)(2,a.Section,{children:(0,o.createComponentVNode)(2,a.LabeledList,{children:(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Use theme",children:(0,o.createComponentVNode)(2,a.Input,{placeholder:"theme_name",value:i,onInput:function(e,t){return c(t)}})})})})}},48181:function(e,t,n){"use strict";t.__esModule=!0,t.meta=void 0;var o=n(96323),r=n(26949),a={title:"Tooltip",render:function(){return(0,o.createComponentVNode)(2,i)}};t.meta=a;var i=function(){return(0,o.createComponentVNode)(2,r.Section,{children:[(0,o.createComponentVNode)(2,r.Box,{children:[(0,o.createComponentVNode)(2,r.Tooltip,{content:"Tooltip text.",children:(0,o.createComponentVNode)(2,r.Box,{inline:!0,position:"relative",mr:1,children:"Box (hover me)."})}),(0,o.createComponentVNode)(2,r.Button,{tooltip:"Tooltip text.",content:"Button"})]}),(0,o.createComponentVNode)(2,r.Box,{mt:1,children:["top","left","right","bottom","bottom-start","bottom-end"].map((function(e){return(0,o.createComponentVNode)(2,r.Button,{color:"transparent",tooltip:"Tooltip text.",tooltipPosition:e,content:e},e)}))})]})}},87758:function(e,t,n){"use strict";t.__esModule=!0,t.BoxWithSampleText=void 0;var o=n(96323),r=n(26949);t.BoxWithSampleText=function(e){return(0,o.normalizeProps)((0,o.createComponentVNode)(2,r.Box,Object.assign({},e,{children:[(0,o.createComponentVNode)(2,r.Box,{italic:!0,children:"Jackdaws love my big sphinx of quartz."}),(0,o.createComponentVNode)(2,r.Box,{mt:1,bold:!0,children:"The wide electrification of the southern provinces will give a powerful impetus to the growth of agriculture."})]})))}},33603:function(){},28553:function(){},68885:function(){},19210:function(){},44951:function(){},22031:function(){},44576:function(){},21805:function(){},50222:function(){},74199:function(){},8156:function(e,t,n){var o={"./AIRack":36525,"./AIRack.js":36525,"./AbilityManager":50687,"./AbilityManager.js":50687,"./AirAlarm":24782,"./AirAlarm.js":24782,"./AirVendor":89375,"./AirVendor.tsx":89375,"./Airlock":22704,"./Airlock.js":22704,"./AlertContentWindows":78403,"./AlertContentWindows/":78403,"./AlertContentWindows/index":78403,"./AlertContentWindows/index.ts":78403,"./AlertContentWindows/tgControls":43469,"./AlertContentWindows/tgControls.tsx":43469,"./AlertContentWindows/types":89037,"./AlertContentWindows/types.ts":89037,"./AlertModal":458,"./AlertModal.tsx":458,"./AntagonistPanel":20636,"./AntagonistPanel/":20636,"./AntagonistPanel/AntagonistTypeTabBody":20920,"./AntagonistPanel/AntagonistTypeTabBody.tsx":20920,"./AntagonistPanel/AntagonistTypeTabs":56444,"./AntagonistPanel/AntagonistTypeTabs.tsx":56444,"./AntagonistPanel/index":20636,"./AntagonistPanel/index.tsx":20636,"./AntagonistPanel/type":5562,"./AntagonistPanel/type.ts":5562,"./Apc":91690,"./Apc/":91690,"./Apc/AccessPanelSection":20065,"./Apc/AccessPanelSection.tsx":20065,"./Apc/CellDisplay":65005,"./Apc/CellDisplay.tsx":65005,"./Apc/MainSection":54187,"./Apc/MainSection.tsx":54187,"./Apc/PowerChannelSection":42947,"./Apc/PowerChannelSection.tsx":42947,"./Apc/WireList":63687,"./Apc/WireList.tsx":63687,"./Apc/index":91690,"./Apc/index.tsx":91690,"./Apc/types":73020,"./Apc/types.ts":73020,"./Apc/util":94104,"./Apc/util.ts":94104,"./ArtifactPaper":52403,"./ArtifactPaper.js":52403,"./Atm":7171,"./Atm/":7171,"./Atm/index":7171,"./Atm/index.tsx":7171,"./Atm/types":3382,"./Atm/types.ts":3382,"./AutoInjector":46837,"./AutoInjector.js":46837,"./BarberingMenu":36443,"./BarberingMenu.js":36443,"./BarcodeComputer":8844,"./BarcodeComputer.js":8844,"./BioEffectManager":45027,"./BioEffectManager.js":45027,"./Boardgame":10522,"./Boardgame/":10522,"./Boardgame/Components":29678,"./Boardgame/Components/":29678,"./Boardgame/Components/board":66508,"./Boardgame/Components/board/":66508,"./Boardgame/Components/board/common/GridGuideRenderer":34116,"./Boardgame/Components/board/common/GridGuideRenderer.tsx":34116,"./Boardgame/Components/board/common/GridPieceRenderer":9149,"./Boardgame/Components/board/common/GridPieceRenderer.tsx":9149,"./Boardgame/Components/board/helpers":83702,"./Boardgame/Components/board/helpers.ts":83702,"./Boardgame/Components/board/index":66508,"./Boardgame/Components/board/index.tsx":66508,"./Boardgame/Components/board/styles/checkerboard":45208,"./Boardgame/Components/board/styles/checkerboard/":45208,"./Boardgame/Components/board/styles/checkerboard/CheckerBoardPattern":84894,"./Boardgame/Components/board/styles/checkerboard/CheckerBoardPattern.tsx":84894,"./Boardgame/Components/board/styles/checkerboard/index":45208,"./Boardgame/Components/board/styles/checkerboard/index.tsx":45208,"./Boardgame/Components/board/styles/types":51891,"./Boardgame/Components/board/styles/types.ts":51891,"./Boardgame/Components/common/BoardgameContents":25540,"./Boardgame/Components/common/BoardgameContents.tsx":25540,"./Boardgame/Components/common/ButtonConfirm":75022,"./Boardgame/Components/common/ButtonConfirm.tsx":75022,"./Boardgame/Components/common/HeldPieceRenderer":68035,"./Boardgame/Components/common/HeldPieceRenderer.tsx":68035,"./Boardgame/Components/common/Notations":41541,"./Boardgame/Components/common/Notations.tsx":41541,"./Boardgame/Components/common/Palettes":75750,"./Boardgame/Components/common/Palettes.tsx":75750,"./Boardgame/Components/common/TitleBar":15237,"./Boardgame/Components/common/TitleBar.tsx":15237,"./Boardgame/Components/index":29678,"./Boardgame/Components/index.tsx":29678,"./Boardgame/games":86489,"./Boardgame/games/":86489,"./Boardgame/games/chess":95102,"./Boardgame/games/chess/":95102,"./Boardgame/games/chess/index":95102,"./Boardgame/games/chess/index.tsx":95102,"./Boardgame/games/chess/pieces":86364,"./Boardgame/games/chess/pieces.tsx":86364,"./Boardgame/games/draughts":85867,"./Boardgame/games/draughts/":85867,"./Boardgame/games/draughts/index":85867,"./Boardgame/games/draughts/index.tsx":85867,"./Boardgame/games/draughts/pieces":77896,"./Boardgame/games/draughts/pieces.tsx":77896,"./Boardgame/games/index":86489,"./Boardgame/games/index.ts":86489,"./Boardgame/games/kits":8250,"./Boardgame/games/kits.ts":8250,"./Boardgame/index":10522,"./Boardgame/index.tsx":10522,"./Boardgame/utils":65844,"./Boardgame/utils/":65844,"./Boardgame/utils/index":65844,"./Boardgame/utils/index.ts":65844,"./Boardgame/utils/notations":43785,"./Boardgame/utils/notations.ts":43785,"./Boardgame/utils/types":76434,"./Boardgame/utils/types.ts":76434,"./Boardgame/utils/useActions":51887,"./Boardgame/utils/useActions.ts":51887,"./Boardgame/utils/useStates":31463,"./Boardgame/utils/useStates.ts":31463,"./Boardgame/utils/window":44135,"./Boardgame/utils/window.ts":44135,"./BugReportForm":15094,"./BugReportForm.js":15094,"./CAViewer":65101,"./CAViewer.js":65101,"./Cashreg":57399,"./Cashreg.tsx":57399,"./CentComViewer":48341,"./CentComViewer.js":48341,"./CharacterPreferences":4098,"./CharacterPreferences/":4098,"./CharacterPreferences/CharacterTab":96074,"./CharacterPreferences/CharacterTab.tsx":96074,"./CharacterPreferences/GameSettingsTab":56374,"./CharacterPreferences/GameSettingsTab.tsx":56374,"./CharacterPreferences/GeneralTab":57368,"./CharacterPreferences/GeneralTab.tsx":57368,"./CharacterPreferences/SavesTab":70712,"./CharacterPreferences/SavesTab.tsx":70712,"./CharacterPreferences/TraitsTab":30709,"./CharacterPreferences/TraitsTab.tsx":30709,"./CharacterPreferences/index":4098,"./CharacterPreferences/index.tsx":4098,"./CharacterPreferences/type":59576,"./CharacterPreferences/type.ts":59576,"./ChemChute":78979,"./ChemChute/":78979,"./ChemChute/index":78979,"./ChemChute/index.tsx":78979,"./ChemChute/type":28487,"./ChemChute/type.ts":28487,"./ChemDispenser":56915,"./ChemDispenser.tsx":56915,"./ChemHeater":95348,"./ChemHeater.js":95348,"./ChemMaster":45747,"./ChemMaster.js":45747,"./ChemRequestReceiver":48230,"./ChemRequestReceiver.js":48230,"./ChemRequester":20938,"./ChemRequester.js":20938,"./CloningConsole":6542,"./CloningConsole.js":6542,"./ClothingBooth":78826,"./ClothingBooth/":78826,"./ClothingBooth/index":78826,"./ClothingBooth/index.tsx":78826,"./ClothingBooth/type":41717,"./ClothingBooth/type.ts":41717,"./ColorMatrixEditor":70855,"./ColorMatrixEditor.tsx":70855,"./ColorPickerModal":21018,"./ColorPickerModal.tsx":21018,"./ComUplink":22049,"./ComUplink/":22049,"./ComUplink/index":22049,"./ComUplink/index.tsx":22049,"./ComUplink/type":20254,"./ComUplink/type.ts":20254,"./ContributorRewards":65208,"./ContributorRewards.js":65208,"./CrewCredits":57119,"./CrewCredits/":57119,"./CrewCredits/AntagonistsTab":19812,"./CrewCredits/AntagonistsTab.tsx":19812,"./CrewCredits/CrewTab":99407,"./CrewCredits/CrewTab.tsx":99407,"./CrewCredits/ScoreTab":21187,"./CrewCredits/ScoreTab.tsx":21187,"./CrewCredits/index":57119,"./CrewCredits/index.tsx":57119,"./CrewCredits/type":37538,"./CrewCredits/type.ts":37538,"./CryoCell":75859,"./CryoCell.js":75859,"./CyborgDockingStation":56445,"./CyborgDockingStation/":56445,"./CyborgDockingStation/index":56445,"./CyborgDockingStation/index.tsx":56445,"./CyborgDockingStation/type":89974,"./CyborgDockingStation/type.ts":89974,"./CyborgModuleRewriter":85175,"./CyborgModuleRewriter/":85175,"./CyborgModuleRewriter/EmptyPlaceholder":44616,"./CyborgModuleRewriter/EmptyPlaceholder.tsx":44616,"./CyborgModuleRewriter/ModuleView":25526,"./CyborgModuleRewriter/ModuleView/":25526,"./CyborgModuleRewriter/ModuleView/ModuleDetail":94241,"./CyborgModuleRewriter/ModuleView/ModuleDetail.tsx":94241,"./CyborgModuleRewriter/ModuleView/Tools":5880,"./CyborgModuleRewriter/ModuleView/Tools.tsx":5880,"./CyborgModuleRewriter/ModuleView/index":25526,"./CyborgModuleRewriter/ModuleView/index.tsx":25526,"./CyborgModuleRewriter/action":83709,"./CyborgModuleRewriter/action.ts":83709,"./CyborgModuleRewriter/index":85175,"./CyborgModuleRewriter/index.tsx":85175,"./CyborgModuleRewriter/style":67044,"./CyborgModuleRewriter/style.ts":67044,"./CyborgModuleRewriter/type":95502,"./CyborgModuleRewriter/type.ts":95502,"./DJPanel":9299,"./DJPanel.js":9299,"./DisposalChute":64640,"./DisposalChute/":64640,"./DisposalChute/index":64640,"./DisposalChute/index.tsx":64640,"./DisposalChute/type":9389,"./DisposalChute/type.ts":9389,"./DoorTimer":84430,"./DoorTimer/":84430,"./DoorTimer/index":84430,"./DoorTimer/index.tsx":84430,"./DoorTimer/type":9494,"./DoorTimer/type.ts":9494,"./DyeDispenser":29259,"./DyeDispenser.tsx":29259,"./Elevator":87339,"./Elevator.tsx":87339,"./EngineStats":20316,"./EngineStats.js":20316,"./EspressoMachine":65203,"./EspressoMachine.js":65203,"./Filteriffic":53600,"./Filteriffic.js":53600,"./Flamethrower":21980,"./Flamethrower.js":21980,"./FlockPanel":72758,"./FlockPanel.js":72758,"./FlockStructures":57576,"./FlockStructures.js":57576,"./Freezer":11653,"./Freezer.tsx":11653,"./Gameclock":6482,"./Gameclock/":6482,"./Gameclock/index":6482,"./Gameclock/index.tsx":6482,"./Gameclock/types":69658,"./Gameclock/types.tsx":69658,"./GasCanister":52709,"./GasCanister/":52709,"./GasCanister/Detonator":16484,"./GasCanister/Detonator.js":16484,"./GasCanister/DetonatorTimer":41834,"./GasCanister/DetonatorTimer.js":41834,"./GasCanister/index":52709,"./GasCanister/index.js":52709,"./GasTank":5394,"./GasTank.js":5394,"./GeneTek":92526,"./GeneTek.js":92526,"./GeneTek/":33012,"./GeneTek/AppearanceEditor":92195,"./GeneTek/AppearanceEditor.js":92195,"./GeneTek/BioEffect":11265,"./GeneTek/BioEffect.js":11265,"./GeneTek/DNASequence":59450,"./GeneTek/DNASequence.js":59450,"./GeneTek/GeneIcon":43024,"./GeneTek/GeneIcon.js":43024,"./GeneTek/index":33012,"./GeneTek/index.js":33012,"./GeneTek/modals/BuyMaterialsModal":78368,"./GeneTek/modals/BuyMaterialsModal.js":78368,"./GeneTek/modals/CombineGenesModal":39961,"./GeneTek/modals/CombineGenesModal.js":39961,"./GeneTek/modals/UnlockModal":89613,"./GeneTek/modals/UnlockModal.js":89613,"./GeneTek/tabs/MutationsTab":22675,"./GeneTek/tabs/MutationsTab.js":22675,"./GeneTek/tabs/ResearchTab":93847,"./GeneTek/tabs/ResearchTab.js":93847,"./GeneTek/tabs/ScannerTab":49445,"./GeneTek/tabs/ScannerTab.js":49445,"./GeneTek/tabs/StorageTab":64477,"./GeneTek/tabs/StorageTab.js":64477,"./GimmickObject":12302,"./GimmickObject.js":12302,"./GlassRecycler":96608,"./GlassRecycler.js":96608,"./HumanInventory":21381,"./HumanInventory/":21381,"./HumanInventory/index":21381,"./HumanInventory/index.tsx":21381,"./HumanInventory/types":59818,"./HumanInventory/types.ts":59818,"./Hypospray":92354,"./Hypospray.js":92354,"./IDComputer":26513,"./IDComputer.js":26513,"./Laundry":23255,"./Laundry.js":23255,"./ListInputModal":84696,"./ListInputModal.tsx":84696,"./LocalGenerator":56596,"./LocalGenerator/":56596,"./LocalGenerator/index":56596,"./LocalGenerator/index.tsx":56596,"./LocalGenerator/type":83329,"./LocalGenerator/type.ts":83329,"./LongRangeTeleporter":56403,"./LongRangeTeleporter.js":56403,"./MechanicalDropper":46045,"./MechanicalDropper.js":46045,"./MineralMagnet":17526,"./MineralMagnet.js":17526,"./Minimap":2960,"./Minimap.js":2960,"./MinimapController":3082,"./MinimapController.js":3082,"./MixingDesk":5244,"./MixingDesk.js":5244,"./MusicInstrument":71417,"./MusicInstrument.tsx":71417,"./NuclearReactor":14086,"./NuclearReactor.js":14086,"./NumberInputModal":12660,"./NumberInputModal.tsx":12660,"./ObserverMenu":55223,"./ObserverMenu.tsx":55223,"./OperatingComputer":35851,"./OperatingComputer/":35851,"./OperatingComputer/index":35851,"./OperatingComputer/index.tsx":35851,"./OperatingComputer/type":36273,"./OperatingComputer/type.ts":36273,"./PaperSheet":69412,"./PaperSheet.js":69412,"./Particool":21293,"./Particool.js":21293,"./Phone":85344,"./Phone/":85344,"./Phone/index":85344,"./Phone/index.tsx":85344,"./Phone/type":85990,"./Phone/type.ts":85990,"./PipeDispenser":41245,"./PipeDispenser.js":41245,"./PixelOffset":38837,"./PixelOffset.js":38837,"./Plantmaster":51884,"./Plantmaster.js":51884,"./PlayerPanel":78927,"./PlayerPanel/":78927,"./PlayerPanel/Header":53302,"./PlayerPanel/Header.tsx":53302,"./PlayerPanel/constant":22706,"./PlayerPanel/constant.ts":22706,"./PlayerPanel/index":78927,"./PlayerPanel/index.tsx":78927,"./PlayerPanel/type":43771,"./PlayerPanel/type.ts":43771,"./PortablePump":13484,"./PortablePump.js":13484,"./PortableScrubber":54652,"./PortableScrubber.js":54652,"./PowerDebug":15264,"./PowerDebug.js":15264,"./PowerMonitor":84699,"./PowerMonitor/":84699,"./PowerMonitor/Apc":4914,"./PowerMonitor/Apc.tsx":4914,"./PowerMonitor/Smes":8954,"./PowerMonitor/Smes.tsx":8954,"./PowerMonitor/index":84699,"./PowerMonitor/index.tsx":84699,"./PowerMonitor/type":2441,"./PowerMonitor/type.ts":2441,"./PowerTransmissionLaser":36476,"./PowerTransmissionLaser.js":36476,"./Precipitation":61221,"./Precipitation.js":61221,"./Pressurizer":90227,"./Pressurizer.js":90227,"./ProcCall":62376,"./ProcCall.js":62376,"./Radio":42626,"./Radio/":42626,"./Radio/index":42626,"./Radio/index.tsx":42626,"./Radio/type":39582,"./Radio/type.ts":39582,"./RandomEvent":16710,"./RandomEvent.js":16710,"./ReagentExtractor":63777,"./ReagentExtractor.js":63777,"./Rockbox":89971,"./Rockbox.js":89971,"./SecureSafe":95285,"./SecureSafe.js":95285,"./SeedFabricator":19172,"./SeedFabricator.js":19172,"./SheetCrafting":70535,"./SheetCrafting.js":70535,"./Sleeper":24258,"./Sleeper.js":24258,"./SlotMachine":82930,"./SlotMachine.js":82930,"./Smes":68952,"./Smes.js":68952,"./SpawnEvent":54016,"./SpawnEvent.js":54016,"./SpendSpacebux":19378,"./SpendSpacebux.js":19378,"./SwingSign":79387,"./SwingSign.js":79387,"./SwingSignTIM":44001,"./SwingSignTIM.tsx":44001,"./TEG":13634,"./TEG.js":13634,"./TankDispenser":99714,"./TankDispenser.js":99714,"./TeleConsole":79268,"./TeleConsole/":79268,"./TeleConsole/BookmarksSection":87221,"./TeleConsole/BookmarksSection.tsx":87221,"./TeleConsole/ConnectionSection":75461,"./TeleConsole/ConnectionSection.tsx":75461,"./TeleConsole/CoordinatesSection":12703,"./TeleConsole/CoordinatesSection.tsx":12703,"./TeleConsole/SteppedSlider":34545,"./TeleConsole/SteppedSlider.tsx":34545,"./TeleConsole/index":79268,"./TeleConsole/index.tsx":79268,"./TeleConsole/types":65087,"./TeleConsole/types.ts":65087,"./TeleConsole/util":581,"./TeleConsole/util.ts":581,"./Terminal":14831,"./Terminal/":14831,"./Terminal/InputAndButtonsSection":73354,"./Terminal/InputAndButtonsSection.tsx":73354,"./Terminal/PheripheralsSection":58084,"./Terminal/PheripheralsSection.tsx":58084,"./Terminal/TerminalOutputSection":98341,"./Terminal/TerminalOutputSection.tsx":98341,"./Terminal/index":14831,"./Terminal/index.tsx":14831,"./Terminal/types":55230,"./Terminal/types.ts":55230,"./Terrainify":14081,"./Terrainify.js":14081,"./TextInputModal":81235,"./TextInputModal.tsx":81235,"./Timer":80480,"./Timer.js":80480,"./TransitShuttle":5051,"./TransitShuttle.js":5051,"./TrscArray":73128,"./TrscArray.js":73128,"./TurbineControl":73248,"./TurbineControl.js":73248,"./TurretControl":40620,"./TurretControl.js":40620,"./Vendors":97170,"./Vendors.js":97170,"./WeaponVendor":96880,"./WeaponVendor/":96880,"./WeaponVendor/index":96880,"./WeaponVendor/index.tsx":96880,"./WeaponVendor/type":10661,"./WeaponVendor/type.ts":10661,"./common/BeakerContents":57361,"./common/BeakerContents.js":57361,"./common/DataInput":48916,"./common/DataInput.js":48916,"./common/HealthStat":65751,"./common/HealthStat.js":65751,"./common/IDCard":8095,"./common/IDCard.js":8095,"./common/InputButtons":34277,"./common/InputButtons.tsx":34277,"./common/KeyHealthIndicators":9720,"./common/KeyHealthIndicators/":9720,"./common/KeyHealthIndicators/index":9720,"./common/KeyHealthIndicators/index.tsx":9720,"./common/KeyHealthIndicators/type":68397,"./common/KeyHealthIndicators/type.ts":68397,"./common/ListSearch":36814,"./common/ListSearch.tsx":36814,"./common/Loader":55631,"./common/Loader.tsx":55631,"./common/MobStatus":90881,"./common/MobStatus.js":90881,"./common/PortableAtmos":41161,"./common/PortableAtmos.js":41161,"./common/ReagentInfo":51418,"./common/ReagentInfo.tsx":51418,"./common/ReleaseValve":75015,"./common/ReleaseValve.js":75015,"./common/VendorCashTable":72638,"./common/VendorCashTable.tsx":72638,"./common/graphUtils":818,"./common/graphUtils.js":818,"./common/mathUtils":96794,"./common/mathUtils.ts":96794,"./common/stringUtils":18331,"./common/stringUtils.ts":18331,"./common/temperatureUtils":48175,"./common/temperatureUtils.js":48175};function r(e){var t=a(e);return n(t)}function a(e){if(!n.o(o,e)){var t=new Error("Cannot find module '"+e+"'");throw t.code="MODULE_NOT_FOUND",t}return o[e]}r.keys=function(){return Object.keys(o)},r.resolve=a,e.exports=r,r.id=8156},69321:function(e,t,n){var o={"./Blink.stories.js":88428,"./BlockQuote.stories.js":9184,"./Box.stories.js":36801,"./Button.stories.js":3750,"./ByondUi.stories.js":68696,"./Collapsible.stories.js":88835,"./Flex.stories.js":34458,"./Input.stories.js":23148,"./Popper.stories.js":23613,"./ProgressBar.stories.js":9093,"./Stack.stories.js":86482,"./Storage.stories.js":63900,"./Tabs.stories.js":88209,"./Themes.stories.js":38200,"./Tooltip.stories.js":48181};function r(e){var t=a(e);return n(t)}function a(e){if(!n.o(o,e)){var t=new Error("Cannot find module '"+e+"'");throw t.code="MODULE_NOT_FOUND",t}return o[e]}r.keys=function(){return Object.keys(o)},r.resolve=a,e.exports=r,r.id=69321},82252:function(e){"use strict";var t=[];e.exports={subscribe:function(e){return t.push(e)},sendMessage:function(e){},sendLogEntry:function(e,t){},setupHotReloading:function(){0}}}},t={};function n(o){var r=t[o];if(r!==undefined)return r.exports;var a=t[o]={exports:{}};return e[o](a,a.exports,n),a.exports}n.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},function(){"use strict";n(65379),n(43674),n(69656),n(72411),n(24467),n(37493),n(87420),n(9480),n(66171),n(53276),n(71852),n(59045),n(70887),n(72906),n(24835),n(14653),n(58139),n(34049),n(38356),n(72494),n(31699),n(3263),n(81520),n(80036),n(60515),n(94330),n(96553),n(99139),n(98215),n(32617),n(80186),n(31149),n(71827),n(79770),n(32099),n(72667),n(94920),n(64683),n(26189),n(41185),n(51008),n(47112),n(86e3),n(15196),n(95993),n(25079),n(87143),n(72499),n(73676),n(76746),n(19),n(17038),n(46360),n(16835),n(96683),n(7756),n(21842),n(1613),n(65115),n(27115),n(13280),n(21019),n(66619),n(75469),n(90967),n(35022),n(22604),n(41843),n(86810),n(54670),n(16580),n(31304),n(13078),n(45128),n(31938),n(90958),n(88885),n(45017),n(59743),n(47560),n(31569),n(6134),n(12622),n(60852),n(99085),n(75180),n(79437),n(75370),n(61022),n(50580),n(5301),n(76438),n(97307),n(34016),n(86944),n(60687),n(86957),n(59163),n(34128),n(24267),n(39816),n(4239),n(8381),n(63669),n(25779),n(84580),n(33198),n(71895),n(44910),n(95962),n(73769),n(14962),n(80345),n(18438),n(70552),n(46356),n(57128),n(83588),n(47057),n(67092),n(59478),n(69203),n(27879),n(71507),n(39021),n(8641),n(83064),n(93115),n(33362),n(45090),n(12654),n(58870),n(76581),n(4567),n(28638),n(60314),n(71595),n(98954),n(91332),n(79445),n(36493),n(24476),n(78192),n(58660),n(56592),n(69957),n(9747),n(13578),n(3684),n(19209),n(56737),n(67586),n(7743),n(15890),n(34651),n(18037),n(48415),n(54950),n(76102),n(47816),n(30037),n(54705),n(75831),n(96958),n(75344),n(87853),n(25865),n(1150),n(50444),n(11220),n(6636),n(37650),n(12424),n(64346),n(27553),n(49007),n(17621),n(71078),n(20500),n(85923),n(38956),n(49264),n(70448),n(5775),n(45164),n(83762),n(67265),n(56058),n(87001),n(23535),n(18617),n(70595),n(76820),n(33357),n(38215),n(37281),n(99584),n(43582),n(15378),n(31213),n(19275),n(59),n(43849),n(69838),n(25513),n(72090),n(15511),n(88280),n(37283),n(96250)}(),function(){"use strict";var e=n(96323);n(33603),n(22031),n(44951),n(44576),n(21805),n(50222),n(74199),n(19210),n(28553),n(68885);var t,o,r=n(28440),a=(n(82252),n(6965)),i=n(13952),c=n(77960),l=n(18749),u=n(99397);r.perf.mark("inception",null==(t=window.performance)||null==(o=t.timing)?void 0:o.navigationStart),r.perf.mark("init");var d=(0,l.configureStore)(),s=(0,c.createRenderer)((function(){var t=(0,n(91199).getRoutedComponent)(d);return(0,e.createComponentVNode)(2,l.StoreProvider,{store:d,children:(0,e.createComponentVNode)(2,t)})}));!function p(){if("loading"!==document.readyState){for((0,u.setupGlobalEvents)(),(0,a.setupHotKeys)(),(0,i.captureExternalLinks)(),d.subscribe(s),window.update=function(e){return d.dispatch(Byond.parseJson(e))};;){var e=window.__updateQueue__.shift();if(!e)break;window.update(e)}0}else document.addEventListener("DOMContentLoaded",p)}()}()}(); \ No newline at end of file +!function(){var e={92179:function(e,t,n){"use strict";t.__esModule=!0,t.popperGenerator=h,t.createPopper=void 0;var o=p(n(30505)),r=p(n(43545)),a=p(n(46213)),i=p(n(32440)),c=(p(n(61131)),p(n(45700))),l=p(n(68369)),u=(p(n(38574)),p(n(25435)),p(n(22709)),p(n(36284))),d=p(n(19574));t.detectOverflow=d["default"];var s=n(67458);n(56728);function p(e){return e&&e.__esModule?e:{"default":e}}var m={placement:"bottom",modifiers:[],strategy:"absolute"};function f(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];return!t.some((function(e){return!(e&&"function"==typeof e.getBoundingClientRect)}))}function h(e){void 0===e&&(e={});var t=e,n=t.defaultModifiers,d=void 0===n?[]:n,p=t.defaultOptions,h=void 0===p?m:p;return function(e,t,n){void 0===n&&(n=h);var p={placement:"bottom",orderedModifiers:[],options:Object.assign({},m,h),modifiersData:{},elements:{reference:e,popper:t},attributes:{},styles:{}},C=[],g=!1,N={state:p,setOptions:function(n){v(),p.options=Object.assign({},h,p.options,n),p.scrollParents={reference:(0,s.isElement)(e)?(0,a["default"])(e):e.contextElement?(0,a["default"])(e.contextElement):[],popper:(0,a["default"])(t)};var o=(0,c["default"])((0,u["default"])([].concat(d,p.options.modifiers)));return p.orderedModifiers=o.filter((function(e){return e.enabled})),p.orderedModifiers.forEach((function(e){var t=e.name,n=e.options,o=void 0===n?{}:n,r=e.effect;if("function"==typeof r){var a=r({state:p,name:t,instance:N,options:o}),i=function(){function e(){}return e}();C.push(a||i)}})),N.update()},forceUpdate:function(){if(!g){var e=p.elements,t=e.reference,n=e.popper;if(f(t,n)){p.rects={reference:(0,o["default"])(t,(0,i["default"])(n),"fixed"===p.options.strategy),popper:(0,r["default"])(n)},p.reset=!1,p.placement=p.options.placement,p.orderedModifiers.forEach((function(e){return p.modifiersData[e.name]=Object.assign({},e.data)}));for(var a=0;a<p.orderedModifiers.length;a++)if(!0!==p.reset){var c=p.orderedModifiers[a],l=c.fn,u=c.options,d=void 0===u?{}:u,s=c.name;"function"==typeof l&&(p=l({state:p,options:d,name:s,instance:N})||p)}else p.reset=!1,a=-1}}},update:(0,l["default"])((function(){return new Promise((function(e){N.forceUpdate(),e(p)}))})),destroy:function(){v(),g=!0}};if(!f(e,t))return N;function v(){C.forEach((function(e){return e()})),C=[]}return N.setOptions(n).then((function(e){!g&&n.onFirstUpdate&&n.onFirstUpdate(e)})),N}}var C=h();t.createPopper=C},97607:function(e,t,n){"use strict";t.__esModule=!0,t["default"]=function(e,t){var n=t.getRootNode&&t.getRootNode();if(e.contains(t))return!0;if(n&&(0,o.isShadowRoot)(n)){var r=t;do{if(r&&e.isSameNode(r))return!0;r=r.parentNode||r.host}while(r)}return!1};var o=n(67458)},94294:function(e,t,n){"use strict";t.__esModule=!0,t["default"]=function(e,t){void 0===t&&(t=!1);var n=e.getBoundingClientRect(),a=1,i=1;(0,o.isHTMLElement)(e)&&t&&(a=n.width/e.offsetWidth||1,i=n.height/e.offsetHeight||1);return{width:r(n.width/a),height:r(n.height/i),top:r(n.top/i),right:r(n.right/a),bottom:r(n.bottom/i),left:r(n.left/a),x:r(n.left/a),y:r(n.top/i)}};var o=n(67458),r=Math.round},48162:function(e,t,n){"use strict";t.__esModule=!0,t["default"]=function(e,t,n){var o="clippingParents"===t?function(e){var t=(0,i["default"])((0,p["default"])(e)),n=["absolute","fixed"].indexOf((0,u["default"])(e).position)>=0,o=n&&(0,d.isHTMLElement)(e)?(0,c["default"])(e):e;if(!(0,d.isElement)(o))return[];return t.filter((function(e){return(0,d.isElement)(e)&&(0,m["default"])(e,o)&&"body"!==(0,f["default"])(e)}))}(e):[].concat(t),r=[].concat(o,[n]),a=r[0],l=r.reduce((function(t,n){var o=N(e,n);return t.top=(0,C.max)(o.top,t.top),t.right=(0,C.min)(o.right,t.right),t.bottom=(0,C.min)(o.bottom,t.bottom),t.left=(0,C.max)(o.left,t.left),t}),N(e,a));return l.width=l.right-l.left,l.height=l.bottom-l.top,l.x=l.left,l.y=l.top,l};var o=n(56728),r=g(n(78331)),a=g(n(68692)),i=g(n(46213)),c=g(n(32440)),l=g(n(58386)),u=g(n(61131)),d=n(67458),s=g(n(94294)),p=g(n(31613)),m=g(n(97607)),f=g(n(99624)),h=g(n(20935)),C=n(62836);function g(e){return e&&e.__esModule?e:{"default":e}}function N(e,t){return t===o.viewport?(0,h["default"])((0,r["default"])(e)):(0,d.isHTMLElement)(t)?function(e){var t=(0,s["default"])(e);return t.top=t.top+e.clientTop,t.left=t.left+e.clientLeft,t.bottom=t.top+e.clientHeight,t.right=t.left+e.clientWidth,t.width=e.clientWidth,t.height=e.clientHeight,t.x=t.left,t.y=t.top,t}(t):(0,h["default"])((0,a["default"])((0,l["default"])(e)))}},30505:function(e,t,n){"use strict";t.__esModule=!0,t["default"]=function(e,t,n){void 0===n&&(n=!1);var d=(0,i.isHTMLElement)(t),s=(0,i.isHTMLElement)(t)&&function(e){var t=e.getBoundingClientRect(),n=t.width/e.offsetWidth||1,o=t.height/e.offsetHeight||1;return 1!==n||1!==o}(t),p=(0,l["default"])(t),m=(0,o["default"])(e,s),f={scrollLeft:0,scrollTop:0},h={x:0,y:0};(d||!d&&!n)&&(("body"!==(0,a["default"])(t)||(0,u["default"])(p))&&(f=(0,r["default"])(t)),(0,i.isHTMLElement)(t)?((h=(0,o["default"])(t,!0)).x+=t.clientLeft,h.y+=t.clientTop):p&&(h.x=(0,c["default"])(p)));return{x:m.left+f.scrollLeft-h.x,y:m.top+f.scrollTop-h.y,width:m.width,height:m.height}};var o=d(n(94294)),r=d(n(71942)),a=d(n(99624)),i=n(67458),c=d(n(45471)),l=d(n(58386)),u=d(n(37229));function d(e){return e&&e.__esModule?e:{"default":e}}},61131:function(e,t,n){"use strict";t.__esModule=!0,t["default"]=function(e){return(0,r["default"])(e).getComputedStyle(e)};var o,r=(o=n(31677))&&o.__esModule?o:{"default":o}},58386:function(e,t,n){"use strict";t.__esModule=!0,t["default"]=function(e){return(((0,o.isElement)(e)?e.ownerDocument:e.document)||window.document).documentElement};var o=n(67458)},68692:function(e,t,n){"use strict";t.__esModule=!0,t["default"]=function(e){var t,n=(0,o["default"])(e),l=(0,i["default"])(e),u=null==(t=e.ownerDocument)?void 0:t.body,d=(0,c.max)(n.scrollWidth,n.clientWidth,u?u.scrollWidth:0,u?u.clientWidth:0),s=(0,c.max)(n.scrollHeight,n.clientHeight,u?u.scrollHeight:0,u?u.clientHeight:0),p=-l.scrollLeft+(0,a["default"])(e),m=-l.scrollTop;"rtl"===(0,r["default"])(u||n).direction&&(p+=(0,c.max)(n.clientWidth,u?u.clientWidth:0)-d);return{width:d,height:s,x:p,y:m}};var o=l(n(58386)),r=l(n(61131)),a=l(n(45471)),i=l(n(1255)),c=n(62836);function l(e){return e&&e.__esModule?e:{"default":e}}},50552:function(e,t){"use strict";t.__esModule=!0,t["default"]=function(e){return{scrollLeft:e.scrollLeft,scrollTop:e.scrollTop}}},43545:function(e,t,n){"use strict";t.__esModule=!0,t["default"]=function(e){var t=(0,r["default"])(e),n=e.offsetWidth,o=e.offsetHeight;Math.abs(t.width-n)<=1&&(n=t.width);Math.abs(t.height-o)<=1&&(o=t.height);return{x:e.offsetLeft,y:e.offsetTop,width:n,height:o}};var o,r=(o=n(94294))&&o.__esModule?o:{"default":o}},99624:function(e,t){"use strict";t.__esModule=!0,t["default"]=function(e){return e?(e.nodeName||"").toLowerCase():null}},71942:function(e,t,n){"use strict";t.__esModule=!0,t["default"]=function(e){return e!==(0,r["default"])(e)&&(0,a.isHTMLElement)(e)?(0,i["default"])(e):(0,o["default"])(e)};var o=c(n(1255)),r=c(n(31677)),a=n(67458),i=c(n(50552));function c(e){return e&&e.__esModule?e:{"default":e}}},32440:function(e,t,n){"use strict";t.__esModule=!0,t["default"]=function(e){var t=(0,o["default"])(e),n=d(e);for(;n&&(0,c["default"])(n)&&"static"===(0,a["default"])(n).position;)n=d(n);if(n&&("html"===(0,r["default"])(n)||"body"===(0,r["default"])(n)&&"static"===(0,a["default"])(n).position))return t;return n||function(e){var t=-1!==navigator.userAgent.toLowerCase().indexOf("firefox");if(-1!==navigator.userAgent.indexOf("Trident")&&(0,i.isHTMLElement)(e)){if("fixed"===(0,a["default"])(e).position)return null}var n=(0,l["default"])(e);for(;(0,i.isHTMLElement)(n)&&["html","body"].indexOf((0,r["default"])(n))<0;){var o=(0,a["default"])(n);if("none"!==o.transform||"none"!==o.perspective||"paint"===o.contain||-1!==["transform","perspective"].indexOf(o.willChange)||t&&"filter"===o.willChange||t&&o.filter&&"none"!==o.filter)return n;n=n.parentNode}return null}(e)||t};var o=u(n(31677)),r=u(n(99624)),a=u(n(61131)),i=n(67458),c=u(n(79130)),l=u(n(31613));function u(e){return e&&e.__esModule?e:{"default":e}}function d(e){return(0,i.isHTMLElement)(e)&&"fixed"!==(0,a["default"])(e).position?e.offsetParent:null}},31613:function(e,t,n){"use strict";t.__esModule=!0,t["default"]=function(e){if("html"===(0,o["default"])(e))return e;return e.assignedSlot||e.parentNode||((0,a.isShadowRoot)(e)?e.host:null)||(0,r["default"])(e)};var o=i(n(99624)),r=i(n(58386)),a=n(67458);function i(e){return e&&e.__esModule?e:{"default":e}}},66055:function(e,t,n){"use strict";t.__esModule=!0,t["default"]=function l(e){if(["html","body","#document"].indexOf((0,a["default"])(e))>=0)return e.ownerDocument.body;if((0,i.isHTMLElement)(e)&&(0,r["default"])(e))return e;return l((0,o["default"])(e))};var o=c(n(31613)),r=c(n(37229)),a=c(n(99624)),i=n(67458);function c(e){return e&&e.__esModule?e:{"default":e}}},78331:function(e,t,n){"use strict";t.__esModule=!0,t["default"]=function(e){var t=(0,o["default"])(e),n=(0,r["default"])(e),i=t.visualViewport,c=n.clientWidth,l=n.clientHeight,u=0,d=0;i&&(c=i.width,l=i.height,/^((?!chrome|android).)*safari/i.test(navigator.userAgent)||(u=i.offsetLeft,d=i.offsetTop));return{width:c,height:l,x:u+(0,a["default"])(e),y:d}};var o=i(n(31677)),r=i(n(58386)),a=i(n(45471));function i(e){return e&&e.__esModule?e:{"default":e}}},31677:function(e,t){"use strict";t.__esModule=!0,t["default"]=function(e){if(null==e)return window;if("[object Window]"!==e.toString()){var t=e.ownerDocument;return t&&t.defaultView||window}return e}},1255:function(e,t,n){"use strict";t.__esModule=!0,t["default"]=function(e){var t=(0,r["default"])(e),n=t.pageXOffset,o=t.pageYOffset;return{scrollLeft:n,scrollTop:o}};var o,r=(o=n(31677))&&o.__esModule?o:{"default":o}},45471:function(e,t,n){"use strict";t.__esModule=!0,t["default"]=function(e){return(0,o["default"])((0,r["default"])(e)).left+(0,a["default"])(e).scrollLeft};var o=i(n(94294)),r=i(n(58386)),a=i(n(1255));function i(e){return e&&e.__esModule?e:{"default":e}}},67458:function(e,t,n){"use strict";t.__esModule=!0,t.isElement=function(e){var t=(0,r["default"])(e).Element;return e instanceof t||e instanceof Element},t.isHTMLElement=function(e){var t=(0,r["default"])(e).HTMLElement;return e instanceof t||e instanceof HTMLElement},t.isShadowRoot=function(e){if("undefined"==typeof ShadowRoot)return!1;var t=(0,r["default"])(e).ShadowRoot;return e instanceof t||e instanceof ShadowRoot};var o,r=(o=n(31677))&&o.__esModule?o:{"default":o}},37229:function(e,t,n){"use strict";t.__esModule=!0,t["default"]=function(e){var t=(0,r["default"])(e),n=t.overflow,o=t.overflowX,a=t.overflowY;return/auto|scroll|overlay|hidden/.test(n+a+o)};var o,r=(o=n(61131))&&o.__esModule?o:{"default":o}},79130:function(e,t,n){"use strict";t.__esModule=!0,t["default"]=function(e){return["table","td","th"].indexOf((0,r["default"])(e))>=0};var o,r=(o=n(99624))&&o.__esModule?o:{"default":o}},46213:function(e,t,n){"use strict";t.__esModule=!0,t["default"]=function l(e,t){var n;void 0===t&&(t=[]);var c=(0,o["default"])(e),u=c===(null==(n=e.ownerDocument)?void 0:n.body),d=(0,a["default"])(c),s=u?[d].concat(d.visualViewport||[],(0,i["default"])(c)?c:[]):c,p=t.concat(s);return u?p:p.concat(l((0,r["default"])(s)))};var o=c(n(66055)),r=c(n(31613)),a=c(n(31677)),i=c(n(37229));function c(e){return e&&e.__esModule?e:{"default":e}}},56728:function(e,t){"use strict";t.__esModule=!0,t.modifierPhases=t.afterWrite=t.write=t.beforeWrite=t.afterMain=t.main=t.beforeMain=t.afterRead=t.read=t.beforeRead=t.placements=t.variationPlacements=t.reference=t.popper=t.viewport=t.clippingParents=t.end=t.start=t.basePlacements=t.auto=t.left=t.right=t.bottom=t.top=void 0;t.top="top";var n="bottom";t.bottom=n;var o="right";t.right=o;var r="left";t.left=r;var a="auto";t.auto=a;var i=["top",n,o,r];t.basePlacements=i;var c="start";t.start=c;var l="end";t.end=l;t.clippingParents="clippingParents";t.viewport="viewport";t.popper="popper";t.reference="reference";var u=i.reduce((function(e,t){return e.concat([t+"-"+c,t+"-"+l])}),[]);t.variationPlacements=u;var d=[].concat(i,[a]).reduce((function(e,t){return e.concat([t,t+"-"+c,t+"-"+l])}),[]);t.placements=d;var s="beforeRead";t.beforeRead=s;var p="read";t.read=p;var m="afterRead";t.afterRead=m;var f="beforeMain";t.beforeMain=f;var h="main";t.main=h;var C="afterMain";t.afterMain=C;var g="beforeWrite";t.beforeWrite=g;var N="write";t.write=N;var v="afterWrite";t.afterWrite=v;var b=[s,p,m,f,h,C,g,N,v];t.modifierPhases=b},34739:function(e,t,n){"use strict";t.__esModule=!0;var o={popperGenerator:!0,detectOverflow:!0,createPopperBase:!0,createPopper:!0,createPopperLite:!0};t.createPopperLite=t.createPopper=t.createPopperBase=t.detectOverflow=t.popperGenerator=void 0;var r=n(56728);Object.keys(r).forEach((function(e){"default"!==e&&"__esModule"!==e&&(Object.prototype.hasOwnProperty.call(o,e)||e in t&&t[e]===r[e]||(t[e]=r[e]))}));var a=n(18726);Object.keys(a).forEach((function(e){"default"!==e&&"__esModule"!==e&&(Object.prototype.hasOwnProperty.call(o,e)||e in t&&t[e]===a[e]||(t[e]=a[e]))}));var i=n(92179);t.popperGenerator=i.popperGenerator,t.detectOverflow=i.detectOverflow,t.createPopperBase=i.createPopper;var c=n(48069);t.createPopper=c.createPopper;var l=n(39030);t.createPopperLite=l.createPopper},34559:function(e,t,n){"use strict";t.__esModule=!0,t["default"]=void 0;var o,r=(o=n(99624))&&o.__esModule?o:{"default":o},a=n(67458);var i={name:"applyStyles",enabled:!0,phase:"write",fn:function(e){var t=e.state;Object.keys(t.elements).forEach((function(e){var n=t.styles[e]||{},o=t.attributes[e]||{},i=t.elements[e];(0,a.isHTMLElement)(i)&&(0,r["default"])(i)&&(Object.assign(i.style,n),Object.keys(o).forEach((function(e){var t=o[e];!1===t?i.removeAttribute(e):i.setAttribute(e,!0===t?"":t)})))}))},effect:function(e){var t=e.state,n={popper:{position:t.options.strategy,left:"0",top:"0",margin:"0"},arrow:{position:"absolute"},reference:{}};return Object.assign(t.elements.popper.style,n.popper),t.styles=n,t.elements.arrow&&Object.assign(t.elements.arrow.style,n.arrow),function(){Object.keys(t.elements).forEach((function(e){var o=t.elements[e],i=t.attributes[e]||{},c=Object.keys(t.styles.hasOwnProperty(e)?t.styles[e]:n[e]).reduce((function(e,t){return e[t]="",e}),{});(0,a.isHTMLElement)(o)&&(0,r["default"])(o)&&(Object.assign(o.style,c),Object.keys(i).forEach((function(e){o.removeAttribute(e)})))}))}},requires:["computeStyles"]};t["default"]=i},76340:function(e,t,n){"use strict";t.__esModule=!0,t["default"]=void 0;var o=p(n(22709)),r=p(n(43545)),a=p(n(97607)),i=p(n(32440)),c=p(n(16615)),l=p(n(52534)),u=p(n(32055)),d=p(n(76294)),s=n(56728);n(67458);function p(e){return e&&e.__esModule?e:{"default":e}}var m=function(e,t){return e="function"==typeof e?e(Object.assign({},t.rects,{placement:t.placement})):e,(0,u["default"])("number"!=typeof e?e:(0,d["default"])(e,s.basePlacements))};var f={name:"arrow",enabled:!0,phase:"main",fn:function(e){var t,n=e.state,a=e.name,u=e.options,d=n.elements.arrow,p=n.modifiersData.popperOffsets,f=(0,o["default"])(n.placement),h=(0,c["default"])(f),C=[s.left,s.right].indexOf(f)>=0?"height":"width";if(d&&p){var g=m(u.padding,n),N=(0,r["default"])(d),v="y"===h?s.top:s.left,b="y"===h?s.bottom:s.right,V=n.rects.reference[C]+n.rects.reference[h]-p[h]-n.rects.popper[C],y=p[h]-n.rects.reference[h],x=(0,i["default"])(d),k=x?"y"===h?x.clientHeight||0:x.clientWidth||0:0,S=V/2-y/2,I=g[v],w=k-N[C]-g[b],_=k/2-N[C]/2+S,D=(0,l["default"])(I,_,w),M=h;n.modifiersData[a]=((t={})[M]=D,t.centerOffset=D-_,t)}},effect:function(e){var t=e.state,n=e.options.element,o=void 0===n?"[data-popper-arrow]":n;null!=o&&("string"!=typeof o||(o=t.elements.popper.querySelector(o)))&&(0,a["default"])(t.elements.popper,o)&&(t.elements.arrow=o)},requires:["popperOffsets"],requiresIfExists:["preventOverflow"]};t["default"]=f},11300:function(e,t,n){"use strict";t.__esModule=!0,t.mapToStyles=p,t["default"]=void 0;var o=n(56728),r=d(n(32440)),a=d(n(31677)),i=d(n(58386)),c=d(n(61131)),l=d(n(22709)),u=n(62836);function d(e){return e&&e.__esModule?e:{"default":e}}var s={top:"auto",right:"auto",bottom:"auto",left:"auto"};function p(e){var t,n=e.popper,l=e.popperRect,d=e.placement,p=e.offsets,m=e.position,f=e.gpuAcceleration,h=e.adaptive,C=e.roundOffsets,g=!0===C?function(e){var t=e.x,n=e.y,o=window.devicePixelRatio||1;return{x:(0,u.round)((0,u.round)(t*o)/o)||0,y:(0,u.round)((0,u.round)(n*o)/o)||0}}(p):"function"==typeof C?C(p):p,N=g.x,v=void 0===N?0:N,b=g.y,V=void 0===b?0:b,y=p.hasOwnProperty("x"),x=p.hasOwnProperty("y"),k=o.left,S=o.top,I=window;if(h){var w=(0,r["default"])(n),_="clientHeight",D="clientWidth";w===(0,a["default"])(n)&&(w=(0,i["default"])(n),"static"!==(0,c["default"])(w).position&&(_="scrollHeight",D="scrollWidth")),d===o.top&&(S=o.bottom,V-=w[_]-l.height,V*=f?1:-1),d===o.left&&(k=o.right,v-=w[D]-l.width,v*=f?1:-1)}var M,B=Object.assign({position:m},h&&s);return f?Object.assign({},B,((M={})[S]=x?"0":"",M[k]=y?"0":"",M.transform=(I.devicePixelRatio||1)<2?"translate("+v+"px, "+V+"px)":"translate3d("+v+"px, "+V+"px, 0)",M)):Object.assign({},B,((t={})[S]=x?V+"px":"",t[k]=y?v+"px":"",t.transform="",t))}var m={name:"computeStyles",enabled:!0,phase:"beforeWrite",fn:function(e){var t=e.state,n=e.options,o=n.gpuAcceleration,r=void 0===o||o,a=n.adaptive,i=void 0===a||a,c=n.roundOffsets,u=void 0===c||c,d={placement:(0,l["default"])(t.placement),popper:t.elements.popper,popperRect:t.rects.popper,gpuAcceleration:r};null!=t.modifiersData.popperOffsets&&(t.styles.popper=Object.assign({},t.styles.popper,p(Object.assign({},d,{offsets:t.modifiersData.popperOffsets,position:t.options.strategy,adaptive:i,roundOffsets:u})))),null!=t.modifiersData.arrow&&(t.styles.arrow=Object.assign({},t.styles.arrow,p(Object.assign({},d,{offsets:t.modifiersData.arrow,position:"absolute",adaptive:!1,roundOffsets:u})))),t.attributes.popper=Object.assign({},t.attributes.popper,{"data-popper-placement":t.placement})},data:{}};t["default"]=m},27020:function(e,t,n){"use strict";t.__esModule=!0,t["default"]=void 0;var o,r=(o=n(31677))&&o.__esModule?o:{"default":o};var a={passive:!0};var i={name:"eventListeners",enabled:!0,phase:"write",fn:function(){},effect:function(e){var t=e.state,n=e.instance,o=e.options,i=o.scroll,c=void 0===i||i,l=o.resize,u=void 0===l||l,d=(0,r["default"])(t.elements.popper),s=[].concat(t.scrollParents.reference,t.scrollParents.popper);return c&&s.forEach((function(e){e.addEventListener("scroll",n.update,a)})),u&&d.addEventListener("resize",n.update,a),function(){c&&s.forEach((function(e){e.removeEventListener("scroll",n.update,a)})),u&&d.removeEventListener("resize",n.update,a)}},data:{}};t["default"]=i},45922:function(e,t,n){"use strict";t.__esModule=!0,t["default"]=void 0;var o=d(n(70045)),r=d(n(22709)),a=d(n(28916)),i=d(n(19574)),c=d(n(31565)),l=n(56728),u=d(n(45412));function d(e){return e&&e.__esModule?e:{"default":e}}var s={name:"flip",enabled:!0,phase:"main",fn:function(e){var t=e.state,n=e.options,d=e.name;if(!t.modifiersData[d]._skip){for(var s=n.mainAxis,p=void 0===s||s,m=n.altAxis,f=void 0===m||m,h=n.fallbackPlacements,C=n.padding,g=n.boundary,N=n.rootBoundary,v=n.altBoundary,b=n.flipVariations,V=void 0===b||b,y=n.allowedAutoPlacements,x=t.options.placement,k=(0,r["default"])(x),S=h||(k===x||!V?[(0,o["default"])(x)]:function(e){if((0,r["default"])(e)===l.auto)return[];var t=(0,o["default"])(e);return[(0,a["default"])(e),t,(0,a["default"])(t)]}(x)),I=[x].concat(S).reduce((function(e,n){return e.concat((0,r["default"])(n)===l.auto?(0,c["default"])(t,{placement:n,boundary:g,rootBoundary:N,padding:C,flipVariations:V,allowedAutoPlacements:y}):n)}),[]),w=t.rects.reference,_=t.rects.popper,D=new Map,M=!0,B=I[0],A=0;A<I.length;A++){var T=I[A],L=(0,r["default"])(T),E=(0,u["default"])(T)===l.start,P=[l.top,l.bottom].indexOf(L)>=0,j=P?"width":"height",O=(0,i["default"])(t,{placement:T,boundary:g,rootBoundary:N,altBoundary:v,padding:C}),F=P?E?l.right:l.left:E?l.bottom:l.top;w[j]>_[j]&&(F=(0,o["default"])(F));var R=(0,o["default"])(F),z=[];if(p&&z.push(O[L]<=0),f&&z.push(O[F]<=0,O[R]<=0),z.every((function(e){return e}))){B=T,M=!1;break}D.set(T,z)}if(M)for(var W=function(e){var t=I.find((function(t){var n=D.get(t);if(n)return n.slice(0,e).every((function(e){return e}))}));if(t)return B=t,"break"},U=V?3:1;U>0;U--){if("break"===W(U))break}t.placement!==B&&(t.modifiersData[d]._skip=!0,t.placement=B,t.reset=!0)}},requiresIfExists:["offset"],data:{_skip:!1}};t["default"]=s},82860:function(e,t,n){"use strict";t.__esModule=!0,t["default"]=void 0;var o,r=n(56728),a=(o=n(19574))&&o.__esModule?o:{"default":o};function i(e,t,n){return void 0===n&&(n={x:0,y:0}),{top:e.top-t.height-n.y,right:e.right-t.width+n.x,bottom:e.bottom-t.height+n.y,left:e.left-t.width-n.x}}function c(e){return[r.top,r.right,r.bottom,r.left].some((function(t){return e[t]>=0}))}var l={name:"hide",enabled:!0,phase:"main",requiresIfExists:["preventOverflow"],fn:function(e){var t=e.state,n=e.name,o=t.rects.reference,r=t.rects.popper,l=t.modifiersData.preventOverflow,u=(0,a["default"])(t,{elementContext:"reference"}),d=(0,a["default"])(t,{altBoundary:!0}),s=i(u,o),p=i(d,r,l),m=c(s),f=c(p);t.modifiersData[n]={referenceClippingOffsets:s,popperEscapeOffsets:p,isReferenceHidden:m,hasPopperEscaped:f},t.attributes.popper=Object.assign({},t.attributes.popper,{"data-popper-reference-hidden":m,"data-popper-escaped":f})}};t["default"]=l},18726:function(e,t,n){"use strict";t.__esModule=!0,t.preventOverflow=t.popperOffsets=t.offset=t.hide=t.flip=t.eventListeners=t.computeStyles=t.arrow=t.applyStyles=void 0;var o=p(n(34559));t.applyStyles=o["default"];var r=p(n(76340));t.arrow=r["default"];var a=p(n(11300));t.computeStyles=a["default"];var i=p(n(27020));t.eventListeners=i["default"];var c=p(n(45922));t.flip=c["default"];var l=p(n(82860));t.hide=l["default"];var u=p(n(33310));t.offset=u["default"];var d=p(n(74371));t.popperOffsets=d["default"];var s=p(n(21532));function p(e){return e&&e.__esModule?e:{"default":e}}t.preventOverflow=s["default"]},33310:function(e,t,n){"use strict";t.__esModule=!0,t.distanceAndSkiddingToXY=i,t["default"]=void 0;var o,r=(o=n(22709))&&o.__esModule?o:{"default":o},a=n(56728);function i(e,t,n){var o=(0,r["default"])(e),i=[a.left,a.top].indexOf(o)>=0?-1:1,c="function"==typeof n?n(Object.assign({},t,{placement:e})):n,l=c[0],u=c[1];return l=l||0,u=(u||0)*i,[a.left,a.right].indexOf(o)>=0?{x:u,y:l}:{x:l,y:u}}var c={name:"offset",enabled:!0,phase:"main",requires:["popperOffsets"],fn:function(e){var t=e.state,n=e.options,o=e.name,r=n.offset,c=void 0===r?[0,0]:r,l=a.placements.reduce((function(e,n){return e[n]=i(n,t.rects,c),e}),{}),u=l[t.placement],d=u.x,s=u.y;null!=t.modifiersData.popperOffsets&&(t.modifiersData.popperOffsets.x+=d,t.modifiersData.popperOffsets.y+=s),t.modifiersData[o]=l}};t["default"]=c},74371:function(e,t,n){"use strict";t.__esModule=!0,t["default"]=void 0;var o,r=(o=n(17175))&&o.__esModule?o:{"default":o};var a={name:"popperOffsets",enabled:!0,phase:"read",fn:function(e){var t=e.state,n=e.name;t.modifiersData[n]=(0,r["default"])({reference:t.rects.reference,element:t.rects.popper,strategy:"absolute",placement:t.placement})},data:{}};t["default"]=a},21532:function(e,t,n){"use strict";t.__esModule=!0,t["default"]=void 0;var o=n(56728),r=f(n(22709)),a=f(n(16615)),i=f(n(82898)),c=f(n(52534)),l=f(n(43545)),u=f(n(32440)),d=f(n(19574)),s=f(n(45412)),p=f(n(41801)),m=n(62836);function f(e){return e&&e.__esModule?e:{"default":e}}var h={name:"preventOverflow",enabled:!0,phase:"main",fn:function(e){var t=e.state,n=e.options,f=e.name,h=n.mainAxis,C=void 0===h||h,g=n.altAxis,N=void 0!==g&&g,v=n.boundary,b=n.rootBoundary,V=n.altBoundary,y=n.padding,x=n.tether,k=void 0===x||x,S=n.tetherOffset,I=void 0===S?0:S,w=(0,d["default"])(t,{boundary:v,rootBoundary:b,padding:y,altBoundary:V}),_=(0,r["default"])(t.placement),D=(0,s["default"])(t.placement),M=!D,B=(0,a["default"])(_),A=(0,i["default"])(B),T=t.modifiersData.popperOffsets,L=t.rects.reference,E=t.rects.popper,P="function"==typeof I?I(Object.assign({},t.rects,{placement:t.placement})):I,j={x:0,y:0};if(T){if(C||N){var O="y"===B?o.top:o.left,F="y"===B?o.bottom:o.right,R="y"===B?"height":"width",z=T[B],W=T[B]+w[O],U=T[B]-w[F],H=k?-E[R]/2:0,G=D===o.start?L[R]:E[R],Y=D===o.start?-E[R]:-L[R],Z=t.elements.arrow,K=k&&Z?(0,l["default"])(Z):{width:0,height:0},Q=t.modifiersData["arrow#persistent"]?t.modifiersData["arrow#persistent"].padding:(0,p["default"])(),$=Q[O],J=Q[F],X=(0,c["default"])(0,L[R],K[R]),q=M?L[R]/2-H-X-$-P:G-X-$-P,ee=M?-L[R]/2+H+X+J+P:Y+X+J+P,te=t.elements.arrow&&(0,u["default"])(t.elements.arrow),ne=te?"y"===B?te.clientTop||0:te.clientLeft||0:0,oe=t.modifiersData.offset?t.modifiersData.offset[t.placement][B]:0,re=T[B]+q-oe-ne,ae=T[B]+ee-oe;if(C){var ie=(0,c["default"])(k?(0,m.min)(W,re):W,z,k?(0,m.max)(U,ae):U);T[B]=ie,j[B]=ie-z}if(N){var ce="x"===B?o.top:o.left,le="x"===B?o.bottom:o.right,ue=T[A],de=ue+w[ce],se=ue-w[le],pe=(0,c["default"])(k?(0,m.min)(de,re):de,ue,k?(0,m.max)(se,ae):se);T[A]=pe,j[A]=pe-ue}}t.modifiersData[f]=j}},requiresIfExists:["offset"]};t["default"]=h},39030:function(e,t,n){"use strict";t.__esModule=!0,t.defaultModifiers=t.createPopper=void 0;var o=n(92179);t.popperGenerator=o.popperGenerator,t.detectOverflow=o.detectOverflow;var r=l(n(27020)),a=l(n(74371)),i=l(n(11300)),c=l(n(34559));function l(e){return e&&e.__esModule?e:{"default":e}}var u=[r["default"],a["default"],i["default"],c["default"]];t.defaultModifiers=u;var d=(0,o.popperGenerator)({defaultModifiers:u});t.createPopper=d},48069:function(e,t,n){"use strict";t.__esModule=!0;var o={createPopper:!0,createPopperLite:!0,defaultModifiers:!0,popperGenerator:!0,detectOverflow:!0};t.defaultModifiers=t.createPopperLite=t.createPopper=void 0;var r=n(92179);t.popperGenerator=r.popperGenerator,t.detectOverflow=r.detectOverflow;var a=C(n(27020)),i=C(n(74371)),c=C(n(11300)),l=C(n(34559)),u=C(n(33310)),d=C(n(45922)),s=C(n(21532)),p=C(n(76340)),m=C(n(82860)),f=n(39030);t.createPopperLite=f.createPopper;var h=n(18726);function C(e){return e&&e.__esModule?e:{"default":e}}Object.keys(h).forEach((function(e){"default"!==e&&"__esModule"!==e&&(Object.prototype.hasOwnProperty.call(o,e)||e in t&&t[e]===h[e]||(t[e]=h[e]))}));var g=[a["default"],i["default"],c["default"],l["default"],u["default"],d["default"],s["default"],p["default"],m["default"]];t.defaultModifiers=g;var N=(0,r.popperGenerator)({defaultModifiers:g});t.createPopperLite=t.createPopper=N},31565:function(e,t,n){"use strict";t.__esModule=!0,t["default"]=function(e,t){void 0===t&&(t={});var n=t,c=n.placement,l=n.boundary,u=n.rootBoundary,d=n.padding,s=n.flipVariations,p=n.allowedAutoPlacements,m=void 0===p?r.placements:p,f=(0,o["default"])(c),h=f?s?r.variationPlacements:r.variationPlacements.filter((function(e){return(0,o["default"])(e)===f})):r.basePlacements,C=h.filter((function(e){return m.indexOf(e)>=0}));0===C.length&&(C=h);var g=C.reduce((function(t,n){return t[n]=(0,a["default"])(e,{placement:n,boundary:l,rootBoundary:u,padding:d})[(0,i["default"])(n)],t}),{});return Object.keys(g).sort((function(e,t){return g[e]-g[t]}))};var o=c(n(45412)),r=n(56728),a=c(n(19574)),i=c(n(22709));function c(e){return e&&e.__esModule?e:{"default":e}}},17175:function(e,t,n){"use strict";t.__esModule=!0,t["default"]=function(e){var t,n=e.reference,c=e.element,l=e.placement,u=l?(0,o["default"])(l):null,d=l?(0,r["default"])(l):null,s=n.x+n.width/2-c.width/2,p=n.y+n.height/2-c.height/2;switch(u){case i.top:t={x:s,y:n.y-c.height};break;case i.bottom:t={x:s,y:n.y+n.height};break;case i.right:t={x:n.x+n.width,y:p};break;case i.left:t={x:n.x-c.width,y:p};break;default:t={x:n.x,y:n.y}}var m=u?(0,a["default"])(u):null;if(null!=m){var f="y"===m?"height":"width";switch(d){case i.start:t[m]=t[m]-(n[f]/2-c[f]/2);break;case i.end:t[m]=t[m]+(n[f]/2-c[f]/2)}}return t};var o=c(n(22709)),r=c(n(45412)),a=c(n(16615)),i=n(56728);function c(e){return e&&e.__esModule?e:{"default":e}}},68369:function(e,t){"use strict";t.__esModule=!0,t["default"]=function(e){var t;return function(){return t||(t=new Promise((function(n){Promise.resolve().then((function(){t=undefined,n(e())}))}))),t}}},19574:function(e,t,n){"use strict";t.__esModule=!0,t["default"]=function(e,t){void 0===t&&(t={});var n=t,p=n.placement,m=void 0===p?e.placement:p,f=n.boundary,h=void 0===f?l.clippingParents:f,C=n.rootBoundary,g=void 0===C?l.viewport:C,N=n.elementContext,v=void 0===N?l.popper:N,b=n.altBoundary,V=void 0!==b&&b,y=n.padding,x=void 0===y?0:y,k=(0,d["default"])("number"!=typeof x?x:(0,s["default"])(x,l.basePlacements)),S=v===l.popper?l.reference:l.popper,I=e.elements.reference,w=e.rects.popper,_=e.elements[V?S:v],D=(0,r["default"])((0,u.isElement)(_)?_:_.contextElement||(0,a["default"])(e.elements.popper),h,g),M=(0,o["default"])(I),B=(0,i["default"])({reference:M,element:w,strategy:"absolute",placement:m}),A=(0,c["default"])(Object.assign({},w,B)),T=v===l.popper?A:M,L={top:D.top-T.top+k.top,bottom:T.bottom-D.bottom+k.bottom,left:D.left-T.left+k.left,right:T.right-D.right+k.right},E=e.modifiersData.offset;if(v===l.popper&&E){var P=E[m];Object.keys(L).forEach((function(e){var t=[l.right,l.bottom].indexOf(e)>=0?1:-1,n=[l.top,l.bottom].indexOf(e)>=0?"y":"x";L[e]+=P[n]*t}))}return L};var o=p(n(94294)),r=p(n(48162)),a=p(n(58386)),i=p(n(17175)),c=p(n(20935)),l=n(56728),u=n(67458),d=p(n(32055)),s=p(n(76294));function p(e){return e&&e.__esModule?e:{"default":e}}},76294:function(e,t){"use strict";t.__esModule=!0,t["default"]=function(e,t){return t.reduce((function(t,n){return t[n]=e,t}),{})}},41434:function(e,t){"use strict";t.__esModule=!0,t["default"]=function(e){for(var t=arguments.length,n=new Array(t>1?t-1:0),o=1;o<t;o++)n[o-1]=arguments[o];return[].concat(n).reduce((function(e,t){return e.replace(/%s/,t)}),e)}},82898:function(e,t){"use strict";t.__esModule=!0,t["default"]=function(e){return"x"===e?"y":"x"}},22709:function(e,t,n){"use strict";t.__esModule=!0,t["default"]=function(e){return e.split("-")[0]};n(56728)},41801:function(e,t){"use strict";t.__esModule=!0,t["default"]=function(){return{top:0,right:0,bottom:0,left:0}}},16615:function(e,t){"use strict";t.__esModule=!0,t["default"]=function(e){return["top","bottom"].indexOf(e)>=0?"x":"y"}},70045:function(e,t){"use strict";t.__esModule=!0,t["default"]=function(e){return e.replace(/left|right|bottom|top/g,(function(e){return n[e]}))};var n={left:"right",right:"left",bottom:"top",top:"bottom"}},28916:function(e,t){"use strict";t.__esModule=!0,t["default"]=function(e){return e.replace(/start|end/g,(function(e){return n[e]}))};var n={start:"end",end:"start"}},45412:function(e,t){"use strict";t.__esModule=!0,t["default"]=function(e){return e.split("-")[1]}},62836:function(e,t){"use strict";t.__esModule=!0,t.round=t.min=t.max=void 0;var n=Math.max;t.max=n;var o=Math.min;t.min=o;var r=Math.round;t.round=r},36284:function(e,t){"use strict";t.__esModule=!0,t["default"]=function(e){var t=e.reduce((function(e,t){var n=e[t.name];return e[t.name]=n?Object.assign({},n,t,{options:Object.assign({},n.options,t.options),data:Object.assign({},n.data,t.data)}):t,e}),{});return Object.keys(t).map((function(e){return t[e]}))}},32055:function(e,t,n){"use strict";t.__esModule=!0,t["default"]=function(e){return Object.assign({},(0,r["default"])(),e)};var o,r=(o=n(41801))&&o.__esModule?o:{"default":o}},45700:function(e,t,n){"use strict";t.__esModule=!0,t["default"]=function(e){var t=function(e){var t=new Map,n=new Set,o=[];function r(e){n.add(e.name),[].concat(e.requires||[],e.requiresIfExists||[]).forEach((function(e){if(!n.has(e)){var o=t.get(e);o&&r(o)}})),o.push(e)}return e.forEach((function(e){t.set(e.name,e)})),e.forEach((function(e){n.has(e.name)||r(e)})),o}(e);return o.modifierPhases.reduce((function(e,n){return e.concat(t.filter((function(e){return e.phase===n})))}),[])};var o=n(56728)},20935:function(e,t){"use strict";t.__esModule=!0,t["default"]=function(e){return Object.assign({},e,{left:e.x,top:e.y,right:e.x+e.width,bottom:e.y+e.height})}},25435:function(e,t){"use strict";t.__esModule=!0,t["default"]=function(e,t){var n=new Set;return e.filter((function(e){var o=t(e);if(!n.has(o))return n.add(o),!0}))}},38574:function(e,t,n){"use strict";t.__esModule=!0,t["default"]=function(e){e.forEach((function(t){Object.keys(t).forEach((function(n){switch(n){case"name":t.name;break;case"enabled":t.enabled;case"phase":r.modifierPhases.indexOf(t.phase);break;case"fn":t.fn;break;case"effect":t.effect;break;case"requires":Array.isArray(t.requires);break;case"requiresIfExists":Array.isArray(t.requiresIfExists)}t.requires&&t.requires.forEach((function(t){e.find((function(e){return e.name===t}))}))}))}))};(o=n(41434))&&o.__esModule;var o,r=n(56728)},52534:function(e,t,n){"use strict";t.__esModule=!0,t["default"]=function(e,t,n){return(0,o.max)(e,(0,o.min)(t,n))};var o=n(62836)},83923:function(e){"use strict";e.exports=function(e){if("function"!=typeof e)throw TypeError(String(e)+" is not a function");return e}},1372:function(e,t,n){"use strict";var o=n(35611);e.exports=function(e){if(!o(e)&&null!==e)throw TypeError("Can't set "+String(e)+" as a prototype");return e}},36910:function(e,t,n){"use strict";var o=n(17657),r=n(83681),a=n(74217),i=o("unscopables"),c=Array.prototype;c[i]==undefined&&a.f(c,i,{configurable:!0,value:r(null)}),e.exports=function(e){c[i][e]=!0}},69953:function(e,t,n){"use strict";var o=n(37015).charAt;e.exports=function(e,t,n){return t+(n?o(e,t).length:1)}},50997:function(e){"use strict";e.exports=function(e,t,n){if(!(e instanceof t))throw TypeError("Incorrect "+(n?n+" ":"")+"invocation");return e}},63518:function(e,t,n){"use strict";var o=n(35611);e.exports=function(e){if(!o(e))throw TypeError(String(e)+" is not an object");return e}},32977:function(e){"use strict";e.exports="undefined"!=typeof ArrayBuffer&&"undefined"!=typeof DataView},19216:function(e,t,n){"use strict";var o,r,a,i=n(32977),c=n(75592),l=n(84253),u=n(35611),d=n(28919),s=n(47953),p=n(52188),m=n(11807),f=n(74217).f,h=n(6863),C=n(18444),g=n(17657),N=n(41080),v=l.Int8Array,b=v&&v.prototype,V=l.Uint8ClampedArray,y=V&&V.prototype,x=v&&h(v),k=b&&h(b),S=Object.prototype,I=S.isPrototypeOf,w=g("toStringTag"),_=N("TYPED_ARRAY_TAG"),D=N("TYPED_ARRAY_CONSTRUCTOR"),M=i&&!!C&&"Opera"!==s(l.opera),B=!1,A={Int8Array:1,Uint8Array:1,Uint8ClampedArray:1,Int16Array:2,Uint16Array:2,Int32Array:4,Uint32Array:4,Float32Array:4,Float64Array:8},T={BigInt64Array:8,BigUint64Array:8},L=function(e){if(!u(e))return!1;var t=s(e);return"DataView"===t||d(A,t)||d(T,t)},E=function(e){if(!u(e))return!1;var t=s(e);return d(A,t)||d(T,t)};for(o in A)(a=(r=l[o])&&r.prototype)?p(a,D,r):M=!1;for(o in T)(a=(r=l[o])&&r.prototype)&&p(a,D,r);if((!M||"function"!=typeof x||x===Function.prototype)&&(x=function(){throw TypeError("Incorrect invocation")},M))for(o in A)l[o]&&C(l[o],x);if((!M||!k||k===S)&&(k=x.prototype,M))for(o in A)l[o]&&C(l[o].prototype,k);if(M&&h(y)!==k&&C(y,k),c&&!d(k,w))for(o in B=!0,f(k,w,{get:function(){return u(this)?this[_]:undefined}}),A)l[o]&&p(l[o],_,o);e.exports={NATIVE_ARRAY_BUFFER_VIEWS:M,TYPED_ARRAY_CONSTRUCTOR:D,TYPED_ARRAY_TAG:B&&_,aTypedArray:function(e){if(E(e))return e;throw TypeError("Target is not a typed array")},aTypedArrayConstructor:function(e){if(C&&!I.call(x,e))throw TypeError("Target is not a typed array constructor");return e},exportTypedArrayMethod:function(e,t,n){if(c){if(n)for(var o in A){var r=l[o];if(r&&d(r.prototype,e))try{delete r.prototype[e]}catch(a){}}k[e]&&!n||m(k,e,n?t:M&&b[e]||t)}},exportTypedArrayStaticMethod:function(e,t,n){var o,r;if(c){if(C){if(n)for(o in A)if((r=l[o])&&d(r,e))try{delete r[e]}catch(a){}if(x[e]&&!n)return;try{return m(x,e,n?t:M&&x[e]||t)}catch(a){}}for(o in A)!(r=l[o])||r[e]&&!n||m(r,e,t)}},isView:L,isTypedArray:E,TypedArray:x,TypedArrayPrototype:k}},80246:function(e,t,n){"use strict";var o=n(84253),r=n(75592),a=n(32977),i=n(52188),c=n(3993),l=n(69691),u=n(50997),d=n(3997),s=n(39570),p=n(77559),m=n(16567),f=n(6863),h=n(18444),C=n(78870).f,g=n(74217).f,N=n(22051),v=n(29108),b=n(79947),V=b.get,y=b.set,x="ArrayBuffer",k="DataView",S="prototype",I="Wrong index",w=o[x],_=w,D=o[k],M=D&&D[S],B=Object.prototype,A=o.RangeError,T=m.pack,L=m.unpack,E=function(e){return[255&e]},P=function(e){return[255&e,e>>8&255]},j=function(e){return[255&e,e>>8&255,e>>16&255,e>>24&255]},O=function(e){return e[3]<<24|e[2]<<16|e[1]<<8|e[0]},F=function(e){return T(e,23,4)},R=function(e){return T(e,52,8)},z=function(e,t){g(e[S],t,{get:function(){return V(this)[t]}})},W=function(e,t,n,o){var r=p(n),a=V(e);if(r+t>a.byteLength)throw A(I);var i=V(a.buffer).bytes,c=r+a.byteOffset,l=i.slice(c,c+t);return o?l:l.reverse()},U=function(e,t,n,o,r,a){var i=p(n),c=V(e);if(i+t>c.byteLength)throw A(I);for(var l=V(c.buffer).bytes,u=i+c.byteOffset,d=o(+r),s=0;s<t;s++)l[u+s]=d[a?s:t-s-1]};if(a){if(!l((function(){w(1)}))||!l((function(){new w(-1)}))||l((function(){return new w,new w(1.5),new w(NaN),w.name!=x}))){for(var H,G=(_=function(e){return u(this,_),new w(p(e))})[S]=w[S],Y=C(w),Z=0;Y.length>Z;)(H=Y[Z++])in _||i(_,H,w[H]);G.constructor=_}h&&f(M)!==B&&h(M,B);var K=new D(new _(2)),Q=M.setInt8;K.setInt8(0,2147483648),K.setInt8(1,2147483649),!K.getInt8(0)&&K.getInt8(1)||c(M,{setInt8:function(e,t){Q.call(this,e,t<<24>>24)},setUint8:function(e,t){Q.call(this,e,t<<24>>24)}},{unsafe:!0})}else _=function(e){u(this,_,x);var t=p(e);y(this,{bytes:N.call(new Array(t),0),byteLength:t}),r||(this.byteLength=t)},D=function(e,t,n){u(this,D,k),u(e,_,k);var o=V(e).byteLength,a=d(t);if(a<0||a>o)throw A("Wrong offset");if(a+(n=n===undefined?o-a:s(n))>o)throw A("Wrong length");y(this,{buffer:e,byteLength:n,byteOffset:a}),r||(this.buffer=e,this.byteLength=n,this.byteOffset=a)},r&&(z(_,"byteLength"),z(D,"buffer"),z(D,"byteLength"),z(D,"byteOffset")),c(D[S],{getInt8:function(e){return W(this,1,e)[0]<<24>>24},getUint8:function(e){return W(this,1,e)[0]},getInt16:function(e){var t=W(this,2,e,arguments.length>1?arguments[1]:undefined);return(t[1]<<8|t[0])<<16>>16},getUint16:function(e){var t=W(this,2,e,arguments.length>1?arguments[1]:undefined);return t[1]<<8|t[0]},getInt32:function(e){return O(W(this,4,e,arguments.length>1?arguments[1]:undefined))},getUint32:function(e){return O(W(this,4,e,arguments.length>1?arguments[1]:undefined))>>>0},getFloat32:function(e){return L(W(this,4,e,arguments.length>1?arguments[1]:undefined),23)},getFloat64:function(e){return L(W(this,8,e,arguments.length>1?arguments[1]:undefined),52)},setInt8:function(e,t){U(this,1,e,E,t)},setUint8:function(e,t){U(this,1,e,E,t)},setInt16:function(e,t){U(this,2,e,P,t,arguments.length>2?arguments[2]:undefined)},setUint16:function(e,t){U(this,2,e,P,t,arguments.length>2?arguments[2]:undefined)},setInt32:function(e,t){U(this,4,e,j,t,arguments.length>2?arguments[2]:undefined)},setUint32:function(e,t){U(this,4,e,j,t,arguments.length>2?arguments[2]:undefined)},setFloat32:function(e,t){U(this,4,e,F,t,arguments.length>2?arguments[2]:undefined)},setFloat64:function(e,t){U(this,8,e,R,t,arguments.length>2?arguments[2]:undefined)}});v(_,x),v(D,k),e.exports={ArrayBuffer:_,DataView:D}},59571:function(e,t,n){"use strict";var o=n(12104),r=n(55205),a=n(39570),i=Math.min;e.exports=[].copyWithin||function(e,t){var n=o(this),c=a(n.length),l=r(e,c),u=r(t,c),d=arguments.length>2?arguments[2]:undefined,s=i((d===undefined?c:r(d,c))-u,c-l),p=1;for(u<l&&l<u+s&&(p=-1,u+=s-1,l+=s-1);s-- >0;)u in n?n[l]=n[u]:delete n[l],l+=p,u+=p;return n}},22051:function(e,t,n){"use strict";var o=n(12104),r=n(55205),a=n(39570);e.exports=function(e){for(var t=o(this),n=a(t.length),i=arguments.length,c=r(i>1?arguments[1]:undefined,n),l=i>2?arguments[2]:undefined,u=l===undefined?n:r(l,n);u>c;)t[c++]=e;return t}},90369:function(e,t,n){"use strict";var o=n(69033).forEach,r=n(37902)("forEach");e.exports=r?[].forEach:function(e){return o(this,e,arguments.length>1?arguments[1]:undefined)}},11955:function(e){"use strict";e.exports=function(e,t){for(var n=0,o=t.length,r=new e(o);o>n;)r[n]=t[n++];return r}},28213:function(e,t,n){"use strict";var o=n(74271),r=n(12104),a=n(32648),i=n(14195),c=n(39570),l=n(39241),u=n(3170);e.exports=function(e){var t,n,d,s,p,m,f=r(e),h="function"==typeof this?this:Array,C=arguments.length,g=C>1?arguments[1]:undefined,N=g!==undefined,v=u(f),b=0;if(N&&(g=o(g,C>2?arguments[2]:undefined,2)),v==undefined||h==Array&&i(v))for(n=new h(t=c(f.length));t>b;b++)m=N?g(f[b],b):f[b],l(n,b,m);else for(p=(s=v.call(f)).next,n=new h;!(d=p.call(s)).done;b++)m=N?a(s,g,[d.value,b],!0):d.value,l(n,b,m);return n.length=b,n}},25945:function(e,t,n){"use strict";var o=n(26553),r=n(39570),a=n(55205),i=function(e){return function(t,n,i){var c,l=o(t),u=r(l.length),d=a(i,u);if(e&&n!=n){for(;u>d;)if((c=l[d++])!=c)return!0}else for(;u>d;d++)if((e||d in l)&&l[d]===n)return e||d||0;return!e&&-1}};e.exports={includes:i(!0),indexOf:i(!1)}},69033:function(e,t,n){"use strict";var o=n(74271),r=n(50990),a=n(12104),i=n(39570),c=n(77454),l=[].push,u=function(e){var t=1==e,n=2==e,u=3==e,d=4==e,s=6==e,p=7==e,m=5==e||s;return function(f,h,C,g){for(var N,v,b=a(f),V=r(b),y=o(h,C,3),x=i(V.length),k=0,S=g||c,I=t?S(f,x):n||p?S(f,0):undefined;x>k;k++)if((m||k in V)&&(v=y(N=V[k],k,b),e))if(t)I[k]=v;else if(v)switch(e){case 3:return!0;case 5:return N;case 6:return k;case 2:l.call(I,N)}else switch(e){case 4:return!1;case 7:l.call(I,N)}return s?-1:u||d?d:I}};e.exports={forEach:u(0),map:u(1),filter:u(2),some:u(3),every:u(4),find:u(5),findIndex:u(6),filterReject:u(7)}},41183:function(e,t,n){"use strict";var o=n(26553),r=n(3997),a=n(39570),i=n(37902),c=Math.min,l=[].lastIndexOf,u=!!l&&1/[1].lastIndexOf(1,-0)<0,d=i("lastIndexOf"),s=u||!d;e.exports=s?function(e){if(u)return l.apply(this,arguments)||0;var t=o(this),n=a(t.length),i=n-1;for(arguments.length>1&&(i=c(i,r(arguments[1]))),i<0&&(i=n+i);i>=0;i--)if(i in t&&t[i]===e)return i||0;return-1}:l},93537:function(e,t,n){"use strict";var o=n(69691),r=n(17657),a=n(12338),i=r("species");e.exports=function(e){return a>=51||!o((function(){var t=[];return(t.constructor={})[i]=function(){return{foo:1}},1!==t[e](Boolean).foo}))}},37902:function(e,t,n){"use strict";var o=n(69691);e.exports=function(e,t){var n=[][e];return!!n&&o((function(){n.call(null,t||function(){throw 1},1)}))}},28249:function(e,t,n){"use strict";var o=n(83923),r=n(12104),a=n(50990),i=n(39570),c=function(e){return function(t,n,c,l){o(n);var u=r(t),d=a(u),s=i(u.length),p=e?s-1:0,m=e?-1:1;if(c<2)for(;;){if(p in d){l=d[p],p+=m;break}if(p+=m,e?p<0:s<=p)throw TypeError("Reduce of empty array with no initial value")}for(;e?p>=0:s>p;p+=m)p in d&&(l=n(l,d[p],p,u));return l}};e.exports={left:c(!1),right:c(!0)}},58737:function(e){"use strict";var t=Math.floor,n=function(e,t){for(var n,o,r=e.length,a=1;a<r;){for(o=a,n=e[a];o&&t(e[o-1],n)>0;)e[o]=e[--o];o!==a++&&(e[o]=n)}return e},o=function(e,t,n){for(var o=e.length,r=t.length,a=0,i=0,c=[];a<o||i<r;)a<o&&i<r?c.push(n(e[a],t[i])<=0?e[a++]:t[i++]):c.push(a<o?e[a++]:t[i++]);return c};e.exports=function r(e,a){var i=e.length,c=t(i/2);return i<8?n(e,a):o(r(e.slice(0,c),a),r(e.slice(c),a),a)}},73612:function(e,t,n){"use strict";var o=n(35611),r=n(89999),a=n(17657)("species");e.exports=function(e){var t;return r(e)&&("function"!=typeof(t=e.constructor)||t!==Array&&!r(t.prototype)?o(t)&&null===(t=t[a])&&(t=undefined):t=undefined),t===undefined?Array:t}},77454:function(e,t,n){"use strict";var o=n(73612);e.exports=function(e,t){return new(o(e))(0===t?0:t)}},32648:function(e,t,n){"use strict";var o=n(63518),r=n(61781);e.exports=function(e,t,n,a){try{return a?t(o(n)[0],n[1]):t(n)}catch(i){throw r(e),i}}},68762:function(e,t,n){"use strict";var o=n(17657)("iterator"),r=!1;try{var a=0,i={next:function(){return{done:!!a++}},"return":function(){r=!0}};i[o]=function(){return this},Array.from(i,(function(){throw 2}))}catch(c){}e.exports=function(e,t){if(!t&&!r)return!1;var n=!1;try{var a={};a[o]=function(){return{next:function(){return{done:n=!0}}}},e(a)}catch(c){}return n}},77e3:function(e){"use strict";var t={}.toString;e.exports=function(e){return t.call(e).slice(8,-1)}},47953:function(e,t,n){"use strict";var o=n(64910),r=n(77e3),a=n(17657)("toStringTag"),i="Arguments"==r(function(){return arguments}());e.exports=o?r:function(e){var t,n,o;return e===undefined?"Undefined":null===e?"Null":"string"==typeof(n=function(e,t){try{return e[t]}catch(n){}}(t=Object(e),a))?n:i?r(t):"Object"==(o=r(t))&&"function"==typeof t.callee?"Arguments":o}},74568:function(e,t,n){"use strict";var o=n(74217).f,r=n(83681),a=n(3993),i=n(74271),c=n(50997),l=n(56342),u=n(71179),d=n(64157),s=n(75592),p=n(40421).fastKey,m=n(79947),f=m.set,h=m.getterFor;e.exports={getConstructor:function(e,t,n,u){var d=e((function(e,o){c(e,d,t),f(e,{type:t,index:r(null),first:undefined,last:undefined,size:0}),s||(e.size=0),o!=undefined&&l(o,e[u],{that:e,AS_ENTRIES:n})})),m=h(t),C=function(e,t,n){var o,r,a=m(e),i=g(e,t);return i?i.value=n:(a.last=i={index:r=p(t,!0),key:t,value:n,previous:o=a.last,next:undefined,removed:!1},a.first||(a.first=i),o&&(o.next=i),s?a.size++:e.size++,"F"!==r&&(a.index[r]=i)),e},g=function(e,t){var n,o=m(e),r=p(t);if("F"!==r)return o.index[r];for(n=o.first;n;n=n.next)if(n.key==t)return n};return a(d.prototype,{clear:function(){for(var e=m(this),t=e.index,n=e.first;n;)n.removed=!0,n.previous&&(n.previous=n.previous.next=undefined),delete t[n.index],n=n.next;e.first=e.last=undefined,s?e.size=0:this.size=0},"delete":function(e){var t=this,n=m(t),o=g(t,e);if(o){var r=o.next,a=o.previous;delete n.index[o.index],o.removed=!0,a&&(a.next=r),r&&(r.previous=a),n.first==o&&(n.first=r),n.last==o&&(n.last=a),s?n.size--:t.size--}return!!o},forEach:function(e){for(var t,n=m(this),o=i(e,arguments.length>1?arguments[1]:undefined,3);t=t?t.next:n.first;)for(o(t.value,t.key,this);t&&t.removed;)t=t.previous},has:function(e){return!!g(this,e)}}),a(d.prototype,n?{get:function(e){var t=g(this,e);return t&&t.value},set:function(e,t){return C(this,0===e?0:e,t)}}:{add:function(e){return C(this,e=0===e?0:e,e)}}),s&&o(d.prototype,"size",{get:function(){return m(this).size}}),d},setStrong:function(e,t,n){var o=t+" Iterator",r=h(t),a=h(o);u(e,t,(function(e,t){f(this,{type:o,target:e,state:r(e),kind:t,last:undefined})}),(function(){for(var e=a(this),t=e.kind,n=e.last;n&&n.removed;)n=n.previous;return e.target&&(e.last=n=n?n.next:e.state.first)?"keys"==t?{value:n.key,done:!1}:"values"==t?{value:n.value,done:!1}:{value:[n.key,n.value],done:!1}:(e.target=undefined,{value:undefined,done:!0})}),n?"entries":"values",!n,!0),d(t)}}},57396:function(e,t,n){"use strict";var o=n(3993),r=n(40421).getWeakData,a=n(63518),i=n(35611),c=n(50997),l=n(56342),u=n(69033),d=n(28919),s=n(79947),p=s.set,m=s.getterFor,f=u.find,h=u.findIndex,C=0,g=function(e){return e.frozen||(e.frozen=new N)},N=function(){this.entries=[]},v=function(e,t){return f(e.entries,(function(e){return e[0]===t}))};N.prototype={get:function(e){var t=v(this,e);if(t)return t[1]},has:function(e){return!!v(this,e)},set:function(e,t){var n=v(this,e);n?n[1]=t:this.entries.push([e,t])},"delete":function(e){var t=h(this.entries,(function(t){return t[0]===e}));return~t&&this.entries.splice(t,1),!!~t}},e.exports={getConstructor:function(e,t,n,u){var s=e((function(e,o){c(e,s,t),p(e,{type:t,id:C++,frozen:undefined}),o!=undefined&&l(o,e[u],{that:e,AS_ENTRIES:n})})),f=m(t),h=function(e,t,n){var o=f(e),i=r(a(t),!0);return!0===i?g(o).set(t,n):i[o.id]=n,e};return o(s.prototype,{"delete":function(e){var t=f(this);if(!i(e))return!1;var n=r(e);return!0===n?g(t)["delete"](e):n&&d(n,t.id)&&delete n[t.id]},has:function(e){var t=f(this);if(!i(e))return!1;var n=r(e);return!0===n?g(t).has(e):n&&d(n,t.id)}}),o(s.prototype,n?{get:function(e){var t=f(this);if(i(e)){var n=r(e);return!0===n?g(t).get(e):n?n[t.id]:undefined}},set:function(e,t){return h(this,e,t)}}:{add:function(e){return h(this,e,!0)}}),s}}},42006:function(e,t,n){"use strict";var o=n(56174),r=n(84253),a=n(41441),i=n(11807),c=n(40421),l=n(56342),u=n(50997),d=n(35611),s=n(69691),p=n(68762),m=n(29108),f=n(22285);e.exports=function(e,t,n){var h=-1!==e.indexOf("Map"),C=-1!==e.indexOf("Weak"),g=h?"set":"add",N=r[e],v=N&&N.prototype,b=N,V={},y=function(e){var t=v[e];i(v,e,"add"==e?function(e){return t.call(this,0===e?0:e),this}:"delete"==e?function(e){return!(C&&!d(e))&&t.call(this,0===e?0:e)}:"get"==e?function(e){return C&&!d(e)?undefined:t.call(this,0===e?0:e)}:"has"==e?function(e){return!(C&&!d(e))&&t.call(this,0===e?0:e)}:function(e,n){return t.call(this,0===e?0:e,n),this})};if(a(e,"function"!=typeof N||!(C||v.forEach&&!s((function(){(new N).entries().next()})))))b=n.getConstructor(t,e,h,g),c.enable();else if(a(e,!0)){var x=new b,k=x[g](C?{}:-0,1)!=x,S=s((function(){x.has(1)})),I=p((function(e){new N(e)})),w=!C&&s((function(){for(var e=new N,t=5;t--;)e[g](t,t);return!e.has(-0)}));I||((b=t((function(t,n){u(t,b,e);var o=f(new N,t,b);return n!=undefined&&l(n,o[g],{that:o,AS_ENTRIES:h}),o}))).prototype=v,v.constructor=b),(S||w)&&(y("delete"),y("has"),h&&y("get")),(w||k)&&y(g),C&&v.clear&&delete v.clear}return V[e]=b,o({global:!0,forced:b!=N},V),m(b,e),C||n.setStrong(b,e,h),b}},49957:function(e,t,n){"use strict";var o=n(28919),r=n(28482),a=n(22245),i=n(74217);e.exports=function(e,t){for(var n=r(t),c=i.f,l=a.f,u=0;u<n.length;u++){var d=n[u];o(e,d)||c(e,d,l(t,d))}}},93937:function(e,t,n){"use strict";var o=n(17657)("match");e.exports=function(e){var t=/./;try{"/./"[e](t)}catch(n){try{return t[o]=!1,"/./"[e](t)}catch(r){}}return!1}},28954:function(e,t,n){"use strict";var o=n(69691);e.exports=!o((function(){function e(){}return e.prototype.constructor=null,Object.getPrototypeOf(new e)!==e.prototype}))},34141:function(e,t,n){"use strict";var o=n(44184),r=n(92082),a=/"/g;e.exports=function(e,t,n,i){var c=r(o(e)),l="<"+t;return""!==n&&(l+=" "+n+'="'+r(i).replace(a,""")+'"'),l+">"+c+"</"+t+">"}},38415:function(e,t,n){"use strict";var o=n(39881).IteratorPrototype,r=n(83681),a=n(39160),i=n(29108),c=n(82723),l=function(){return this};e.exports=function(e,t,n){var u=t+" Iterator";return e.prototype=r(o,{next:a(1,n)}),i(e,u,!1,!0),c[u]=l,e}},52188:function(e,t,n){"use strict";var o=n(75592),r=n(74217),a=n(39160);e.exports=o?function(e,t,n){return r.f(e,t,a(1,n))}:function(e,t,n){return e[t]=n,e}},39160:function(e){"use strict";e.exports=function(e,t){return{enumerable:!(1&e),configurable:!(2&e),writable:!(4&e),value:t}}},39241:function(e,t,n){"use strict";var o=n(14613),r=n(74217),a=n(39160);e.exports=function(e,t,n){var i=o(t);i in e?r.f(e,i,a(0,n)):e[i]=n}},79873:function(e,t,n){"use strict";var o=n(69691),r=n(47497).start,a=Math.abs,i=Date.prototype,c=i.getTime,l=i.toISOString;e.exports=o((function(){return"0385-07-25T07:06:39.999Z"!=l.call(new Date(-50000000000001))}))||!o((function(){l.call(new Date(NaN))}))?function(){if(!isFinite(c.call(this)))throw RangeError("Invalid time value");var e=this,t=e.getUTCFullYear(),n=e.getUTCMilliseconds(),o=t<0?"-":t>9999?"+":"";return o+r(a(t),o?6:4,0)+"-"+r(e.getUTCMonth()+1,2,0)+"-"+r(e.getUTCDate(),2,0)+"T"+r(e.getUTCHours(),2,0)+":"+r(e.getUTCMinutes(),2,0)+":"+r(e.getUTCSeconds(),2,0)+"."+r(n,3,0)+"Z"}:l},57763:function(e,t,n){"use strict";var o=n(63518),r=n(28734);e.exports=function(e){if(o(this),"string"===e||"default"===e)e="string";else if("number"!==e)throw TypeError("Incorrect hint");return r(this,e)}},71179:function(e,t,n){"use strict";var o=n(56174),r=n(38415),a=n(6863),i=n(18444),c=n(29108),l=n(52188),u=n(11807),d=n(17657),s=n(1986),p=n(82723),m=n(39881),f=m.IteratorPrototype,h=m.BUGGY_SAFARI_ITERATORS,C=d("iterator"),g="keys",N="values",v="entries",b=function(){return this};e.exports=function(e,t,n,d,m,V,y){r(n,t,d);var x,k,S,I=function(e){if(e===m&&B)return B;if(!h&&e in D)return D[e];switch(e){case g:case N:case v:return function(){return new n(this,e)}}return function(){return new n(this)}},w=t+" Iterator",_=!1,D=e.prototype,M=D[C]||D["@@iterator"]||m&&D[m],B=!h&&M||I(m),A="Array"==t&&D.entries||M;if(A&&(x=a(A.call(new e)),f!==Object.prototype&&x.next&&(s||a(x)===f||(i?i(x,f):"function"!=typeof x[C]&&l(x,C,b)),c(x,w,!0,!0),s&&(p[w]=b))),m==N&&M&&M.name!==N&&(_=!0,B=function(){return M.call(this)}),s&&!y||D[C]===B||l(D,C,B),p[t]=B,m)if(k={values:I(N),keys:V?B:I(g),entries:I(v)},y)for(S in k)(h||_||!(S in D))&&u(D,S,k[S]);else o({target:t,proto:!0,forced:h||_},k);return k}},55282:function(e,t,n){"use strict";var o=n(65781),r=n(28919),a=n(3444),i=n(74217).f;e.exports=function(e){var t=o.Symbol||(o.Symbol={});r(t,e)||i(t,e,{value:a.f(e)})}},75592:function(e,t,n){"use strict";var o=n(69691);e.exports=!o((function(){return 7!=Object.defineProperty({},1,{get:function(){return 7}})[1]}))},21477:function(e,t,n){"use strict";var o=n(84253),r=n(35611),a=o.document,i=r(a)&&r(a.createElement);e.exports=function(e){return i?a.createElement(e):{}}},20967:function(e,t,n){"use strict";var o=n(72319).match(/firefox\/(\d+)/i);e.exports=!!o&&+o[1]},46392:function(e){"use strict";e.exports="object"==typeof window},85749:function(e,t,n){"use strict";var o=n(72319);e.exports=/MSIE|Trident/.test(o)},20037:function(e,t,n){"use strict";var o=n(72319),r=n(84253);e.exports=/iphone|ipod|ipad/i.test(o)&&r.Pebble!==undefined},24542:function(e,t,n){"use strict";var o=n(72319);e.exports=/(?:iphone|ipod|ipad).*applewebkit/i.test(o)},41488:function(e,t,n){"use strict";var o=n(77e3),r=n(84253);e.exports="process"==o(r.process)},47501:function(e,t,n){"use strict";var o=n(72319);e.exports=/web0s(?!.*chrome)/i.test(o)},72319:function(e,t,n){"use strict";var o=n(69808);e.exports=o("navigator","userAgent")||""},12338:function(e,t,n){"use strict";var o,r,a=n(84253),i=n(72319),c=a.process,l=a.Deno,u=c&&c.versions||l&&l.version,d=u&&u.v8;d?r=(o=d.split("."))[0]<4?1:o[0]+o[1]:i&&(!(o=i.match(/Edge\/(\d+)/))||o[1]>=74)&&(o=i.match(/Chrome\/(\d+)/))&&(r=o[1]),e.exports=r&&+r},12200:function(e,t,n){"use strict";var o=n(72319).match(/AppleWebKit\/(\d+)\./);e.exports=!!o&&+o[1]},23344:function(e){"use strict";e.exports=["constructor","hasOwnProperty","isPrototypeOf","propertyIsEnumerable","toLocaleString","toString","valueOf"]},56174:function(e,t,n){"use strict";var o=n(84253),r=n(22245).f,a=n(52188),i=n(11807),c=n(30889),l=n(49957),u=n(41441);e.exports=function(e,t){var n,d,s,p,m,f=e.target,h=e.global,C=e.stat;if(n=h?o:C?o[f]||c(f,{}):(o[f]||{}).prototype)for(d in t){if(p=t[d],s=e.noTargetGet?(m=r(n,d))&&m.value:n[d],!u(h?d:f+(C?".":"#")+d,e.forced)&&s!==undefined){if(typeof p==typeof s)continue;l(p,s)}(e.sham||s&&s.sham)&&a(p,"sham",!0),i(n,d,p,e)}}},69691:function(e){"use strict";e.exports=function(e){try{return!!e()}catch(t){return!0}}},68880:function(e,t,n){"use strict";n(12654);var o=n(11807),r=n(71841),a=n(69691),i=n(17657),c=n(52188),l=i("species"),u=RegExp.prototype;e.exports=function(e,t,n,d){var s=i(e),p=!a((function(){var t={};return t[s]=function(){return 7},7!=""[e](t)})),m=p&&!a((function(){var t=!1,n=/a/;return"split"===e&&((n={}).constructor={},n.constructor[l]=function(){return n},n.flags="",n[s]=/./[s]),n.exec=function(){return t=!0,null},n[s](""),!t}));if(!p||!m||n){var f=/./[s],h=t(s,""[e],(function(e,t,n,o,a){var i=t.exec;return i===r||i===u.exec?p&&!a?{done:!0,value:f.call(t,n,o)}:{done:!0,value:e.call(n,t,o)}:{done:!1}}));o(String.prototype,e,h[0]),o(u,s,h[1])}d&&c(u[s],"sham",!0)}},904:function(e,t,n){"use strict";var o=n(89999),r=n(39570),a=n(74271);e.exports=function i(e,t,n,c,l,u,d,s){for(var p,m=l,f=0,h=!!d&&a(d,s,3);f<c;){if(f in n){if(p=h?h(n[f],f,t):n[f],u>0&&o(p))m=i(e,t,p,r(p.length),m,u-1)-1;else{if(m>=9007199254740991)throw TypeError("Exceed the acceptable array length");e[m]=p}m++}f++}return m}},7056:function(e,t,n){"use strict";var o=n(69691);e.exports=!o((function(){return Object.isExtensible(Object.preventExtensions({}))}))},74271:function(e,t,n){"use strict";var o=n(83923);e.exports=function(e,t,n){if(o(e),t===undefined)return e;switch(n){case 0:return function(){return e.call(t)};case 1:return function(n){return e.call(t,n)};case 2:return function(n,o){return e.call(t,n,o)};case 3:return function(n,o,r){return e.call(t,n,o,r)}}return function(){return e.apply(t,arguments)}}},68719:function(e,t,n){"use strict";var o=n(83923),r=n(35611),a=[].slice,i={};e.exports=Function.bind||function(e){var t=o(this),n=a.call(arguments,1),c=function(){var o=n.concat(a.call(arguments));return this instanceof c?function(e,t,n){if(!(t in i)){for(var o=[],r=0;r<t;r++)o[r]="a["+r+"]";i[t]=Function("C,a","return new C("+o.join(",")+")")}return i[t](e,n)}(t,o.length,o):t.apply(e,o)};return r(t.prototype)&&(c.prototype=t.prototype),c}},69808:function(e,t,n){"use strict";var o=n(84253);e.exports=function(e,t){return arguments.length<2?"function"==typeof(n=o[e])?n:undefined:o[e]&&o[e][t];var n}},3170:function(e,t,n){"use strict";var o=n(47953),r=n(82723),a=n(17657)("iterator");e.exports=function(e){if(e!=undefined)return e[a]||e["@@iterator"]||r[o(e)]}},55444:function(e,t,n){"use strict";var o=n(12104),r=Math.floor,a="".replace,i=/\$([$&'`]|\d{1,2}|<[^>]*>)/g,c=/\$([$&'`]|\d{1,2})/g;e.exports=function(e,t,n,l,u,d){var s=n+e.length,p=l.length,m=c;return u!==undefined&&(u=o(u),m=i),a.call(d,m,(function(o,a){var i;switch(a.charAt(0)){case"$":return"$";case"&":return e;case"`":return t.slice(0,n);case"'":return t.slice(s);case"<":i=u[a.slice(1,-1)];break;default:var c=+a;if(0===c)return o;if(c>p){var d=r(c/10);return 0===d?o:d<=p?l[d-1]===undefined?a.charAt(1):l[d-1]+a.charAt(1):o}i=l[c-1]}return i===undefined?"":i}))}},84253:function(e,t,n){"use strict";var o=function(e){return e&&e.Math==Math&&e};e.exports=o("object"==typeof globalThis&&globalThis)||o("object"==typeof window&&window)||o("object"==typeof self&&self)||o("object"==typeof n.g&&n.g)||function(){return this}()||Function("return this")()},28919:function(e,t,n){"use strict";var o=n(12104),r={}.hasOwnProperty;e.exports=Object.hasOwn||function(e,t){return r.call(o(e),t)}},90311:function(e){"use strict";e.exports={}},21419:function(e,t,n){"use strict";var o=n(84253);e.exports=function(e,t){var n=o.console;n&&n.error&&(1===arguments.length?n.error(e):n.error(e,t))}},2369:function(e,t,n){"use strict";var o=n(69808);e.exports=o("document","documentElement")},78251:function(e,t,n){"use strict";var o=n(75592),r=n(69691),a=n(21477);e.exports=!o&&!r((function(){return 7!=Object.defineProperty(a("div"),"a",{get:function(){return 7}}).a}))},16567:function(e){"use strict";var t=Math.abs,n=Math.pow,o=Math.floor,r=Math.log,a=Math.LN2;e.exports={pack:function(e,i,c){var l,u,d,s=new Array(c),p=8*c-i-1,m=(1<<p)-1,f=m>>1,h=23===i?n(2,-24)-n(2,-77):0,C=e<0||0===e&&1/e<0?1:0,g=0;for((e=t(e))!=e||e===Infinity?(u=e!=e?1:0,l=m):(l=o(r(e)/a),e*(d=n(2,-l))<1&&(l--,d*=2),(e+=l+f>=1?h/d:h*n(2,1-f))*d>=2&&(l++,d/=2),l+f>=m?(u=0,l=m):l+f>=1?(u=(e*d-1)*n(2,i),l+=f):(u=e*n(2,f-1)*n(2,i),l=0));i>=8;s[g++]=255&u,u/=256,i-=8);for(l=l<<i|u,p+=i;p>0;s[g++]=255&l,l/=256,p-=8);return s[--g]|=128*C,s},unpack:function(e,t){var o,r=e.length,a=8*r-t-1,i=(1<<a)-1,c=i>>1,l=a-7,u=r-1,d=e[u--],s=127&d;for(d>>=7;l>0;s=256*s+e[u],u--,l-=8);for(o=s&(1<<-l)-1,s>>=-l,l+=t;l>0;o=256*o+e[u],u--,l-=8);if(0===s)s=1-c;else{if(s===i)return o?NaN:d?-Infinity:Infinity;o+=n(2,t),s-=c}return(d?-1:1)*o*n(2,s-t)}}},50990:function(e,t,n){"use strict";var o=n(69691),r=n(77e3),a="".split;e.exports=o((function(){return!Object("z").propertyIsEnumerable(0)}))?function(e){return"String"==r(e)?a.call(e,""):Object(e)}:Object},22285:function(e,t,n){"use strict";var o=n(35611),r=n(18444);e.exports=function(e,t,n){var a,i;return r&&"function"==typeof(a=t.constructor)&&a!==n&&o(i=a.prototype)&&i!==n.prototype&&r(e,i),e}},89853:function(e,t,n){"use strict";var o=n(55935),r=Function.toString;"function"!=typeof o.inspectSource&&(o.inspectSource=function(e){return r.call(e)}),e.exports=o.inspectSource},40421:function(e,t,n){"use strict";var o=n(56174),r=n(90311),a=n(35611),i=n(28919),c=n(74217).f,l=n(78870),u=n(59995),d=n(41080),s=n(7056),p=!1,m=d("meta"),f=0,h=Object.isExtensible||function(){return!0},C=function(e){c(e,m,{value:{objectID:"O"+f++,weakData:{}}})},g=e.exports={enable:function(){g.enable=function(){},p=!0;var e=l.f,t=[].splice,n={};n[m]=1,e(n).length&&(l.f=function(n){for(var o=e(n),r=0,a=o.length;r<a;r++)if(o[r]===m){t.call(o,r,1);break}return o},o({target:"Object",stat:!0,forced:!0},{getOwnPropertyNames:u.f}))},fastKey:function(e,t){if(!a(e))return"symbol"==typeof e?e:("string"==typeof e?"S":"P")+e;if(!i(e,m)){if(!h(e))return"F";if(!t)return"E";C(e)}return e[m].objectID},getWeakData:function(e,t){if(!i(e,m)){if(!h(e))return!0;if(!t)return!1;C(e)}return e[m].weakData},onFreeze:function(e){return s&&p&&h(e)&&!i(e,m)&&C(e),e}};r[m]=!0},79947:function(e,t,n){"use strict";var o,r,a,i=n(82911),c=n(84253),l=n(35611),u=n(52188),d=n(28919),s=n(55935),p=n(85152),m=n(90311),f="Object already initialized",h=c.WeakMap;if(i||s.state){var C=s.state||(s.state=new h),g=C.get,N=C.has,v=C.set;o=function(e,t){if(N.call(C,e))throw new TypeError(f);return t.facade=e,v.call(C,e,t),t},r=function(e){return g.call(C,e)||{}},a=function(e){return N.call(C,e)}}else{var b=p("state");m[b]=!0,o=function(e,t){if(d(e,b))throw new TypeError(f);return t.facade=e,u(e,b,t),t},r=function(e){return d(e,b)?e[b]:{}},a=function(e){return d(e,b)}}e.exports={set:o,get:r,has:a,enforce:function(e){return a(e)?r(e):o(e,{})},getterFor:function(e){return function(t){var n;if(!l(t)||(n=r(t)).type!==e)throw TypeError("Incompatible receiver, "+e+" required");return n}}}},14195:function(e,t,n){"use strict";var o=n(17657),r=n(82723),a=o("iterator"),i=Array.prototype;e.exports=function(e){return e!==undefined&&(r.Array===e||i[a]===e)}},89999:function(e,t,n){"use strict";var o=n(77e3);e.exports=Array.isArray||function(e){return"Array"==o(e)}},41441:function(e,t,n){"use strict";var o=n(69691),r=/#|\.prototype\./,a=function(e,t){var n=c[i(e)];return n==u||n!=l&&("function"==typeof t?o(t):!!t)},i=a.normalize=function(e){return String(e).replace(r,".").toLowerCase()},c=a.data={},l=a.NATIVE="N",u=a.POLYFILL="P";e.exports=a},93624:function(e,t,n){"use strict";var o=n(35611),r=Math.floor;e.exports=function(e){return!o(e)&&isFinite(e)&&r(e)===e}},35611:function(e){"use strict";e.exports=function(e){return"object"==typeof e?null!==e:"function"==typeof e}},1986:function(e){"use strict";e.exports=!1},86133:function(e,t,n){"use strict";var o=n(35611),r=n(77e3),a=n(17657)("match");e.exports=function(e){var t;return o(e)&&((t=e[a])!==undefined?!!t:"RegExp"==r(e))}},78253:function(e,t,n){"use strict";var o=n(69808),r=n(40647);e.exports=r?function(e){return"symbol"==typeof e}:function(e){var t=o("Symbol");return"function"==typeof t&&Object(e)instanceof t}},56342:function(e,t,n){"use strict";var o=n(63518),r=n(14195),a=n(39570),i=n(74271),c=n(3170),l=n(61781),u=function(e,t){this.stopped=e,this.result=t};e.exports=function(e,t,n){var d,s,p,m,f,h,C,g=n&&n.that,N=!(!n||!n.AS_ENTRIES),v=!(!n||!n.IS_ITERATOR),b=!(!n||!n.INTERRUPTED),V=i(t,g,1+N+b),y=function(e){return d&&l(d),new u(!0,e)},x=function(e){return N?(o(e),b?V(e[0],e[1],y):V(e[0],e[1])):b?V(e,y):V(e)};if(v)d=e;else{if("function"!=typeof(s=c(e)))throw TypeError("Target is not iterable");if(r(s)){for(p=0,m=a(e.length);m>p;p++)if((f=x(e[p]))&&f instanceof u)return f;return new u(!1)}d=s.call(e)}for(h=d.next;!(C=h.call(d)).done;){try{f=x(C.value)}catch(k){throw l(d),k}if("object"==typeof f&&f&&f instanceof u)return f}return new u(!1)}},61781:function(e,t,n){"use strict";var o=n(63518);e.exports=function(e){var t=e["return"];if(t!==undefined)return o(t.call(e)).value}},39881:function(e,t,n){"use strict";var o,r,a,i=n(69691),c=n(6863),l=n(52188),u=n(28919),d=n(17657),s=n(1986),p=d("iterator"),m=!1;[].keys&&("next"in(a=[].keys())?(r=c(c(a)))!==Object.prototype&&(o=r):m=!0);var f=o==undefined||i((function(){var e={};return o[p].call(e)!==e}));f&&(o={}),s&&!f||u(o,p)||l(o,p,(function(){return this})),e.exports={IteratorPrototype:o,BUGGY_SAFARI_ITERATORS:m}},82723:function(e){"use strict";e.exports={}},19997:function(e){"use strict";var t=Math.expm1,n=Math.exp;e.exports=!t||t(10)>22025.465794806718||t(10)<22025.465794806718||-2e-17!=t(-2e-17)?function(e){return 0==(e=+e)?e:e>-1e-6&&e<1e-6?e+e*e/2:n(e)-1}:t},43334:function(e,t,n){"use strict";var o=n(24305),r=Math.abs,a=Math.pow,i=a(2,-52),c=a(2,-23),l=a(2,127)*(2-c),u=a(2,-126);e.exports=Math.fround||function(e){var t,n,a=r(e),d=o(e);return a<u?d*(a/u/c+1/i-1/i)*u*c:(n=(t=(1+c/i)*a)-(t-a))>l||n!=n?d*Infinity:d*n}},83659:function(e){"use strict";var t=Math.log;e.exports=Math.log1p||function(e){return(e=+e)>-1e-8&&e<1e-8?e-e*e/2:t(1+e)}},24305:function(e){"use strict";e.exports=Math.sign||function(e){return 0==(e=+e)||e!=e?e:e<0?-1:1}},80909:function(e,t,n){"use strict";var o,r,a,i,c,l,u,d,s=n(84253),p=n(22245).f,m=n(33453).set,f=n(24542),h=n(20037),C=n(47501),g=n(41488),N=s.MutationObserver||s.WebKitMutationObserver,v=s.document,b=s.process,V=s.Promise,y=p(s,"queueMicrotask"),x=y&&y.value;x||(o=function(){var e,t;for(g&&(e=b.domain)&&e.exit();r;){t=r.fn,r=r.next;try{t()}catch(n){throw r?i():a=undefined,n}}a=undefined,e&&e.enter()},f||g||C||!N||!v?!h&&V&&V.resolve?((u=V.resolve(undefined)).constructor=V,d=u.then,i=function(){d.call(u,o)}):i=g?function(){b.nextTick(o)}:function(){m.call(s,o)}:(c=!0,l=v.createTextNode(""),new N(o).observe(l,{characterData:!0}),i=function(){l.data=c=!c})),e.exports=x||function(e){var t={fn:e,next:undefined};a&&(a.next=t),r||(r=t,i()),a=t}},4302:function(e,t,n){"use strict";var o=n(84253);e.exports=o.Promise},54772:function(e,t,n){"use strict";var o=n(12338),r=n(69691);e.exports=!!Object.getOwnPropertySymbols&&!r((function(){var e=Symbol();return!String(e)||!(Object(e)instanceof Symbol)||!Symbol.sham&&o&&o<41}))},82911:function(e,t,n){"use strict";var o=n(84253),r=n(89853),a=o.WeakMap;e.exports="function"==typeof a&&/native code/.test(r(a))},82101:function(e,t,n){"use strict";var o=n(83923),r=function(e){var t,n;this.promise=new e((function(e,o){if(t!==undefined||n!==undefined)throw TypeError("Bad Promise constructor");t=e,n=o})),this.resolve=o(t),this.reject=o(n)};e.exports.f=function(e){return new r(e)}},18774:function(e,t,n){"use strict";var o=n(86133);e.exports=function(e){if(o(e))throw TypeError("The method doesn't accept regular expressions");return e}},64630:function(e,t,n){"use strict";var o=n(84253).isFinite;e.exports=Number.isFinite||function(e){return"number"==typeof e&&o(e)}},78025:function(e,t,n){"use strict";var o=n(84253),r=n(92082),a=n(84703).trim,i=n(65181),c=o.parseFloat,l=1/c(i+"-0")!=-Infinity;e.exports=l?function(e){var t=a(r(e)),n=c(t);return 0===n&&"-"==t.charAt(0)?-0:n}:c},55092:function(e,t,n){"use strict";var o=n(84253),r=n(92082),a=n(84703).trim,i=n(65181),c=o.parseInt,l=/^[+-]?0[Xx]/,u=8!==c(i+"08")||22!==c(i+"0x16");e.exports=u?function(e,t){var n=a(r(e));return c(n,t>>>0||(l.test(n)?16:10))}:c},64905:function(e,t,n){"use strict";var o=n(75592),r=n(69691),a=n(84547),i=n(21061),c=n(77659),l=n(12104),u=n(50990),d=Object.assign,s=Object.defineProperty;e.exports=!d||r((function(){if(o&&1!==d({b:1},d(s({},"a",{enumerable:!0,get:function(){s(this,"b",{value:3,enumerable:!1})}}),{b:2})).b)return!0;var e={},t={},n=Symbol(),r="abcdefghijklmnopqrst";return e[n]=7,r.split("").forEach((function(e){t[e]=e})),7!=d({},e)[n]||a(d({},t)).join("")!=r}))?function(e,t){for(var n=l(e),r=arguments.length,d=1,s=i.f,p=c.f;r>d;)for(var m,f=u(arguments[d++]),h=s?a(f).concat(s(f)):a(f),C=h.length,g=0;C>g;)m=h[g++],o&&!p.call(f,m)||(n[m]=f[m]);return n}:d},83681:function(e,t,n){"use strict";var o,r=n(63518),a=n(91543),i=n(23344),c=n(90311),l=n(2369),u=n(21477),d=n(85152),s="prototype",p="script",m=d("IE_PROTO"),f=function(){},h=function(e){return"<"+p+">"+e+"</"+p+">"},C=function(e){e.write(h("")),e.close();var t=e.parentWindow.Object;return e=null,t},g=function(){try{o=new ActiveXObject("htmlfile")}catch(t){}g=document.domain&&o?C(o):function(){var e,t=u("iframe"),n="java"+p+":";if(t.style)return t.style.display="none",l.appendChild(t),t.src=String(n),(e=t.contentWindow.document).open(),e.write(h("document.F=Object")),e.close(),e.F}()||C(o);for(var e=i.length;e--;)delete g[s][i[e]];return g()};c[m]=!0,e.exports=Object.create||function(e,t){var n;return null!==e?(f[s]=r(e),n=new f,f[s]=null,n[m]=e):n=g(),t===undefined?n:a(n,t)}},91543:function(e,t,n){"use strict";var o=n(75592),r=n(74217),a=n(63518),i=n(84547);e.exports=o?Object.defineProperties:function(e,t){a(e);for(var n,o=i(t),c=o.length,l=0;c>l;)r.f(e,n=o[l++],t[n]);return e}},74217:function(e,t,n){"use strict";var o=n(75592),r=n(78251),a=n(63518),i=n(14613),c=Object.defineProperty;t.f=o?c:function(e,t,n){if(a(e),t=i(t),a(n),r)try{return c(e,t,n)}catch(o){}if("get"in n||"set"in n)throw TypeError("Accessors not supported");return"value"in n&&(e[t]=n.value),e}},22245:function(e,t,n){"use strict";var o=n(75592),r=n(77659),a=n(39160),i=n(26553),c=n(14613),l=n(28919),u=n(78251),d=Object.getOwnPropertyDescriptor;t.f=o?d:function(e,t){if(e=i(e),t=c(t),u)try{return d(e,t)}catch(n){}if(l(e,t))return a(!r.f.call(e,t),e[t])}},59995:function(e,t,n){"use strict";var o=n(26553),r=n(78870).f,a={}.toString,i="object"==typeof window&&window&&Object.getOwnPropertyNames?Object.getOwnPropertyNames(window):[];e.exports.f=function(e){return i&&"[object Window]"==a.call(e)?function(e){try{return r(e)}catch(t){return i.slice()}}(e):r(o(e))}},78870:function(e,t,n){"use strict";var o=n(3613),r=n(23344).concat("length","prototype");t.f=Object.getOwnPropertyNames||function(e){return o(e,r)}},21061:function(e,t){"use strict";t.f=Object.getOwnPropertySymbols},6863:function(e,t,n){"use strict";var o=n(28919),r=n(12104),a=n(85152),i=n(28954),c=a("IE_PROTO"),l=Object.prototype;e.exports=i?Object.getPrototypeOf:function(e){return e=r(e),o(e,c)?e[c]:"function"==typeof e.constructor&&e instanceof e.constructor?e.constructor.prototype:e instanceof Object?l:null}},3613:function(e,t,n){"use strict";var o=n(28919),r=n(26553),a=n(25945).indexOf,i=n(90311);e.exports=function(e,t){var n,c=r(e),l=0,u=[];for(n in c)!o(i,n)&&o(c,n)&&u.push(n);for(;t.length>l;)o(c,n=t[l++])&&(~a(u,n)||u.push(n));return u}},84547:function(e,t,n){"use strict";var o=n(3613),r=n(23344);e.exports=Object.keys||function(e){return o(e,r)}},77659:function(e,t){"use strict";var n={}.propertyIsEnumerable,o=Object.getOwnPropertyDescriptor,r=o&&!n.call({1:2},1);t.f=r?function(e){var t=o(this,e);return!!t&&t.enumerable}:n},47339:function(e,t,n){"use strict";var o=n(1986),r=n(84253),a=n(69691),i=n(12200);e.exports=o||!a((function(){if(!(i&&i<535)){var e=Math.random();__defineSetter__.call(null,e,(function(){})),delete r[e]}}))},18444:function(e,t,n){"use strict";var o=n(63518),r=n(1372);e.exports=Object.setPrototypeOf||("__proto__"in{}?function(){var e,t=!1,n={};try{(e=Object.getOwnPropertyDescriptor(Object.prototype,"__proto__").set).call(n,[]),t=n instanceof Array}catch(a){}return function(n,a){return o(n),r(a),t?e.call(n,a):n.__proto__=a,n}}():undefined)},3e4:function(e,t,n){"use strict";var o=n(75592),r=n(84547),a=n(26553),i=n(77659).f,c=function(e){return function(t){for(var n,c=a(t),l=r(c),u=l.length,d=0,s=[];u>d;)n=l[d++],o&&!i.call(c,n)||s.push(e?[n,c[n]]:c[n]);return s}};e.exports={entries:c(!0),values:c(!1)}},13966:function(e,t,n){"use strict";var o=n(64910),r=n(47953);e.exports=o?{}.toString:function(){return"[object "+r(this)+"]"}},28734:function(e,t,n){"use strict";var o=n(35611);e.exports=function(e,t){var n,r;if("string"===t&&"function"==typeof(n=e.toString)&&!o(r=n.call(e)))return r;if("function"==typeof(n=e.valueOf)&&!o(r=n.call(e)))return r;if("string"!==t&&"function"==typeof(n=e.toString)&&!o(r=n.call(e)))return r;throw TypeError("Can't convert object to primitive value")}},28482:function(e,t,n){"use strict";var o=n(69808),r=n(78870),a=n(21061),i=n(63518);e.exports=o("Reflect","ownKeys")||function(e){var t=r.f(i(e)),n=a.f;return n?t.concat(n(e)):t}},65781:function(e,t,n){"use strict";var o=n(84253);e.exports=o},47673:function(e){"use strict";e.exports=function(e){try{return{error:!1,value:e()}}catch(t){return{error:!0,value:t}}}},48141:function(e,t,n){"use strict";var o=n(63518),r=n(35611),a=n(82101);e.exports=function(e,t){if(o(e),r(t)&&t.constructor===e)return t;var n=a.f(e);return(0,n.resolve)(t),n.promise}},3993:function(e,t,n){"use strict";var o=n(11807);e.exports=function(e,t,n){for(var r in t)o(e,r,t[r],n);return e}},11807:function(e,t,n){"use strict";var o=n(84253),r=n(52188),a=n(28919),i=n(30889),c=n(89853),l=n(79947),u=l.get,d=l.enforce,s=String(String).split("String");(e.exports=function(e,t,n,c){var l,u=!!c&&!!c.unsafe,p=!!c&&!!c.enumerable,m=!!c&&!!c.noTargetGet;"function"==typeof n&&("string"!=typeof t||a(n,"name")||r(n,"name",t),(l=d(n)).source||(l.source=s.join("string"==typeof t?t:""))),e!==o?(u?!m&&e[t]&&(p=!0):delete e[t],p?e[t]=n:r(e,t,n)):p?e[t]=n:i(t,n)})(Function.prototype,"toString",(function(){return"function"==typeof this&&u(this).source||c(this)}))},5641:function(e,t,n){"use strict";var o=n(77e3),r=n(71841);e.exports=function(e,t){var n=e.exec;if("function"==typeof n){var a=n.call(e,t);if("object"!=typeof a)throw TypeError("RegExp exec method returned something other than an Object or null");return a}if("RegExp"!==o(e))throw TypeError("RegExp#exec called on incompatible receiver");return r.call(e,t)}},71841:function(e,t,n){"use strict";var o,r,a=n(92082),i=n(5105),c=n(1864),l=n(27364),u=n(83681),d=n(79947).get,s=n(8368),p=n(2229),m=RegExp.prototype.exec,f=l("native-string-replace",String.prototype.replace),h=m,C=(o=/a/,r=/b*/g,m.call(o,"a"),m.call(r,"a"),0!==o.lastIndex||0!==r.lastIndex),g=c.UNSUPPORTED_Y||c.BROKEN_CARET,N=/()??/.exec("")[1]!==undefined;(C||N||g||s||p)&&(h=function(e){var t,n,o,r,c,l,s,p=this,v=d(p),b=a(e),V=v.raw;if(V)return V.lastIndex=p.lastIndex,t=h.call(V,b),p.lastIndex=V.lastIndex,t;var y=v.groups,x=g&&p.sticky,k=i.call(p),S=p.source,I=0,w=b;if(x&&(-1===(k=k.replace("y","")).indexOf("g")&&(k+="g"),w=b.slice(p.lastIndex),p.lastIndex>0&&(!p.multiline||p.multiline&&"\n"!==b.charAt(p.lastIndex-1))&&(S="(?: "+S+")",w=" "+w,I++),n=new RegExp("^(?:"+S+")",k)),N&&(n=new RegExp("^"+S+"$(?!\\s)",k)),C&&(o=p.lastIndex),r=m.call(x?n:p,w),x?r?(r.input=r.input.slice(I),r[0]=r[0].slice(I),r.index=p.lastIndex,p.lastIndex+=r[0].length):p.lastIndex=0:C&&r&&(p.lastIndex=p.global?r.index+r[0].length:o),N&&r&&r.length>1&&f.call(r[0],n,(function(){for(c=1;c<arguments.length-2;c++)arguments[c]===undefined&&(r[c]=undefined)})),r&&y)for(r.groups=l=u(null),c=0;c<y.length;c++)l[(s=y[c])[0]]=r[s[1]];return r}),e.exports=h},5105:function(e,t,n){"use strict";var o=n(63518);e.exports=function(){var e=o(this),t="";return e.global&&(t+="g"),e.ignoreCase&&(t+="i"),e.multiline&&(t+="m"),e.dotAll&&(t+="s"),e.unicode&&(t+="u"),e.sticky&&(t+="y"),t}},1864:function(e,t,n){"use strict";var o=n(69691),r=function(e,t){return RegExp(e,t)};t.UNSUPPORTED_Y=o((function(){var e=r("a","y");return e.lastIndex=2,null!=e.exec("abcd")})),t.BROKEN_CARET=o((function(){var e=r("^r","gy");return e.lastIndex=2,null!=e.exec("str")}))},8368:function(e,t,n){"use strict";var o=n(69691);e.exports=o((function(){var e=RegExp(".","string".charAt(0));return!(e.dotAll&&e.exec("\n")&&"s"===e.flags)}))},2229:function(e,t,n){"use strict";var o=n(69691);e.exports=o((function(){var e=RegExp("(?<a>b)","string".charAt(5));return"b"!==e.exec("b").groups.a||"bc"!=="b".replace(e,"$<a>c")}))},44184:function(e){"use strict";e.exports=function(e){if(e==undefined)throw TypeError("Can't call method on "+e);return e}},61398:function(e){"use strict";e.exports=Object.is||function(e,t){return e===t?0!==e||1/e==1/t:e!=e&&t!=t}},30889:function(e,t,n){"use strict";var o=n(84253);e.exports=function(e,t){try{Object.defineProperty(o,e,{value:t,configurable:!0,writable:!0})}catch(n){o[e]=t}return t}},64157:function(e,t,n){"use strict";var o=n(69808),r=n(74217),a=n(17657),i=n(75592),c=a("species");e.exports=function(e){var t=o(e),n=r.f;i&&t&&!t[c]&&n(t,c,{configurable:!0,get:function(){return this}})}},29108:function(e,t,n){"use strict";var o=n(74217).f,r=n(28919),a=n(17657)("toStringTag");e.exports=function(e,t,n){e&&!r(e=n?e:e.prototype,a)&&o(e,a,{configurable:!0,value:t})}},85152:function(e,t,n){"use strict";var o=n(27364),r=n(41080),a=o("keys");e.exports=function(e){return a[e]||(a[e]=r(e))}},55935:function(e,t,n){"use strict";var o=n(84253),r=n(30889),a="__core-js_shared__",i=o[a]||r(a,{});e.exports=i},27364:function(e,t,n){"use strict";var o=n(1986),r=n(55935);(e.exports=function(e,t){return r[e]||(r[e]=t!==undefined?t:{})})("versions",[]).push({version:"3.16.1",mode:o?"pure":"global",copyright:"\xa9 2021 Denis Pushkarev (zloirock.ru)"})},24345:function(e,t,n){"use strict";var o=n(63518),r=n(83923),a=n(17657)("species");e.exports=function(e,t){var n,i=o(e).constructor;return i===undefined||(n=o(i)[a])==undefined?t:r(n)}},26096:function(e,t,n){"use strict";var o=n(69691);e.exports=function(e){return o((function(){var t=""[e]('"');return t!==t.toLowerCase()||t.split('"').length>3}))}},37015:function(e,t,n){"use strict";var o=n(3997),r=n(92082),a=n(44184),i=function(e){return function(t,n){var i,c,l=r(a(t)),u=o(n),d=l.length;return u<0||u>=d?e?"":undefined:(i=l.charCodeAt(u))<55296||i>56319||u+1===d||(c=l.charCodeAt(u+1))<56320||c>57343?e?l.charAt(u):i:e?l.slice(u,u+2):c-56320+(i-55296<<10)+65536}};e.exports={codeAt:i(!1),charAt:i(!0)}},43331:function(e,t,n){"use strict";var o=n(72319);e.exports=/Version\/10(?:\.\d+){1,2}(?: [\w./]+)?(?: Mobile\/\w+)? Safari\//.test(o)},47497:function(e,t,n){"use strict";var o=n(39570),r=n(92082),a=n(9811),i=n(44184),c=Math.ceil,l=function(e){return function(t,n,l){var u,d,s=r(i(t)),p=s.length,m=l===undefined?" ":r(l),f=o(n);return f<=p||""==m?s:(u=f-p,(d=a.call(m,c(u/m.length))).length>u&&(d=d.slice(0,u)),e?s+d:d+s)}};e.exports={start:l(!1),end:l(!0)}},9811:function(e,t,n){"use strict";var o=n(3997),r=n(92082),a=n(44184);e.exports=function(e){var t=r(a(this)),n="",i=o(e);if(i<0||i==Infinity)throw RangeError("Wrong number of repetitions");for(;i>0;(i>>>=1)&&(t+=t))1&i&&(n+=t);return n}},3035:function(e,t,n){"use strict";var o=n(69691),r=n(65181);e.exports=function(e){return o((function(){return!!r[e]()||"\u200b\x85\u180e"!="\u200b\x85\u180e"[e]()||r[e].name!==e}))}},84703:function(e,t,n){"use strict";var o=n(44184),r=n(92082),a="["+n(65181)+"]",i=RegExp("^"+a+a+"*"),c=RegExp(a+a+"*$"),l=function(e){return function(t){var n=r(o(t));return 1&e&&(n=n.replace(i,"")),2&e&&(n=n.replace(c,"")),n}};e.exports={start:l(1),end:l(2),trim:l(3)}},33453:function(e,t,n){"use strict";var o,r,a,i,c=n(84253),l=n(69691),u=n(74271),d=n(2369),s=n(21477),p=n(24542),m=n(41488),f=c.setImmediate,h=c.clearImmediate,C=c.process,g=c.MessageChannel,N=c.Dispatch,v=0,b={},V="onreadystatechange";try{o=c.location}catch(I){}var y=function(e){if(b.hasOwnProperty(e)){var t=b[e];delete b[e],t()}},x=function(e){return function(){y(e)}},k=function(e){y(e.data)},S=function(e){c.postMessage(String(e),o.protocol+"//"+o.host)};f&&h||(f=function(e){for(var t=[],n=arguments.length,o=1;n>o;)t.push(arguments[o++]);return b[++v]=function(){("function"==typeof e?e:Function(e)).apply(undefined,t)},r(v),v},h=function(e){delete b[e]},m?r=function(e){C.nextTick(x(e))}:N&&N.now?r=function(e){N.now(x(e))}:g&&!p?(i=(a=new g).port2,a.port1.onmessage=k,r=u(i.postMessage,i,1)):c.addEventListener&&"function"==typeof postMessage&&!c.importScripts&&o&&"file:"!==o.protocol&&!l(S)?(r=S,c.addEventListener("message",k,!1)):r=V in s("script")?function(e){d.appendChild(s("script"))[V]=function(){d.removeChild(this),y(e)}}:function(e){setTimeout(x(e),0)}),e.exports={set:f,clear:h}},81687:function(e,t,n){"use strict";var o=n(77e3);e.exports=function(e){if("number"!=typeof e&&"Number"!=o(e))throw TypeError("Incorrect invocation");return+e}},55205:function(e,t,n){"use strict";var o=n(3997),r=Math.max,a=Math.min;e.exports=function(e,t){var n=o(e);return n<0?r(n+t,0):a(n,t)}},77559:function(e,t,n){"use strict";var o=n(3997),r=n(39570);e.exports=function(e){if(e===undefined)return 0;var t=o(e),n=r(t);if(t!==n)throw RangeError("Wrong length or index");return n}},26553:function(e,t,n){"use strict";var o=n(50990),r=n(44184);e.exports=function(e){return o(r(e))}},3997:function(e){"use strict";var t=Math.ceil,n=Math.floor;e.exports=function(e){return isNaN(e=+e)?0:(e>0?n:t)(e)}},39570:function(e,t,n){"use strict";var o=n(3997),r=Math.min;e.exports=function(e){return e>0?r(o(e),9007199254740991):0}},12104:function(e,t,n){"use strict";var o=n(44184);e.exports=function(e){return Object(o(e))}},95740:function(e,t,n){"use strict";var o=n(80425);e.exports=function(e,t){var n=o(e);if(n%t)throw RangeError("Wrong offset");return n}},80425:function(e,t,n){"use strict";var o=n(3997);e.exports=function(e){var t=o(e);if(t<0)throw RangeError("The argument can't be less than 0");return t}},94673:function(e,t,n){"use strict";var o=n(35611),r=n(78253),a=n(28734),i=n(17657)("toPrimitive");e.exports=function(e,t){if(!o(e)||r(e))return e;var n,c=e[i];if(c!==undefined){if(t===undefined&&(t="default"),n=c.call(e,t),!o(n)||r(n))return n;throw TypeError("Can't convert object to primitive value")}return t===undefined&&(t="number"),a(e,t)}},14613:function(e,t,n){"use strict";var o=n(94673),r=n(78253);e.exports=function(e){var t=o(e,"string");return r(t)?t:String(t)}},64910:function(e,t,n){"use strict";var o={};o[n(17657)("toStringTag")]="z",e.exports="[object z]"===String(o)},92082:function(e,t,n){"use strict";var o=n(78253);e.exports=function(e){if(o(e))throw TypeError("Cannot convert a Symbol value to a string");return String(e)}},17576:function(e,t,n){"use strict";var o=n(56174),r=n(84253),a=n(75592),i=n(29023),c=n(19216),l=n(80246),u=n(50997),d=n(39160),s=n(52188),p=n(93624),m=n(39570),f=n(77559),h=n(95740),C=n(14613),g=n(28919),N=n(47953),v=n(35611),b=n(78253),V=n(83681),y=n(18444),x=n(78870).f,k=n(76182),S=n(69033).forEach,I=n(64157),w=n(74217),_=n(22245),D=n(79947),M=n(22285),B=D.get,A=D.set,T=w.f,L=_.f,E=Math.round,P=r.RangeError,j=l.ArrayBuffer,O=l.DataView,F=c.NATIVE_ARRAY_BUFFER_VIEWS,R=c.TYPED_ARRAY_CONSTRUCTOR,z=c.TYPED_ARRAY_TAG,W=c.TypedArray,U=c.TypedArrayPrototype,H=c.aTypedArrayConstructor,G=c.isTypedArray,Y="BYTES_PER_ELEMENT",Z="Wrong length",K=function(e,t){for(var n=0,o=t.length,r=new(H(e))(o);o>n;)r[n]=t[n++];return r},Q=function(e,t){T(e,t,{get:function(){return B(this)[t]}})},$=function(e){var t;return e instanceof j||"ArrayBuffer"==(t=N(e))||"SharedArrayBuffer"==t},J=function(e,t){return G(e)&&!b(t)&&t in e&&p(+t)&&t>=0},X=function(e,t){return t=C(t),J(e,t)?d(2,e[t]):L(e,t)},q=function(e,t,n){return t=C(t),!(J(e,t)&&v(n)&&g(n,"value"))||g(n,"get")||g(n,"set")||n.configurable||g(n,"writable")&&!n.writable||g(n,"enumerable")&&!n.enumerable?T(e,t,n):(e[t]=n.value,e)};a?(F||(_.f=X,w.f=q,Q(U,"buffer"),Q(U,"byteOffset"),Q(U,"byteLength"),Q(U,"length")),o({target:"Object",stat:!0,forced:!F},{getOwnPropertyDescriptor:X,defineProperty:q}),e.exports=function(e,t,n){var a=e.match(/\d+$/)[0]/8,c=e+(n?"Clamped":"")+"Array",l="get"+e,d="set"+e,p=r[c],C=p,g=C&&C.prototype,N={},b=function(e,t){T(e,t,{get:function(){return function(e,t){var n=B(e);return n.view[l](t*a+n.byteOffset,!0)}(this,t)},set:function(e){return function(e,t,o){var r=B(e);n&&(o=(o=E(o))<0?0:o>255?255:255&o),r.view[d](t*a+r.byteOffset,o,!0)}(this,t,e)},enumerable:!0})};F?i&&(C=t((function(e,t,n,o){return u(e,C,c),M(v(t)?$(t)?o!==undefined?new p(t,h(n,a),o):n!==undefined?new p(t,h(n,a)):new p(t):G(t)?K(C,t):k.call(C,t):new p(f(t)),e,C)})),y&&y(C,W),S(x(p),(function(e){e in C||s(C,e,p[e])})),C.prototype=g):(C=t((function(e,t,n,o){u(e,C,c);var r,i,l,d=0,s=0;if(v(t)){if(!$(t))return G(t)?K(C,t):k.call(C,t);r=t,s=h(n,a);var p=t.byteLength;if(o===undefined){if(p%a)throw P(Z);if((i=p-s)<0)throw P(Z)}else if((i=m(o)*a)+s>p)throw P(Z);l=i/a}else l=f(t),r=new j(i=l*a);for(A(e,{buffer:r,byteOffset:s,byteLength:i,length:l,view:new O(r)});d<l;)b(e,d++)})),y&&y(C,W),g=C.prototype=V(U)),g.constructor!==C&&s(g,"constructor",C),s(g,R,C),z&&s(g,z,c),N[c]=C,o({global:!0,forced:C!=p,sham:!F},N),Y in C||s(C,Y,a),Y in g||s(g,Y,a),I(c)}):e.exports=function(){}},29023:function(e,t,n){"use strict";var o=n(84253),r=n(69691),a=n(68762),i=n(19216).NATIVE_ARRAY_BUFFER_VIEWS,c=o.ArrayBuffer,l=o.Int8Array;e.exports=!i||!r((function(){l(1)}))||!r((function(){new l(-1)}))||!a((function(e){new l,new l(null),new l(1.5),new l(e)}),!0)||r((function(){return 1!==new l(new c(2),1,undefined).length}))},16688:function(e,t,n){"use strict";var o=n(11955),r=n(25198);e.exports=function(e,t){return o(r(e),t)}},76182:function(e,t,n){"use strict";var o=n(12104),r=n(39570),a=n(3170),i=n(14195),c=n(74271),l=n(19216).aTypedArrayConstructor;e.exports=function(e){var t,n,u,d,s,p,m=o(e),f=arguments.length,h=f>1?arguments[1]:undefined,C=h!==undefined,g=a(m);if(g!=undefined&&!i(g))for(p=(s=g.call(m)).next,m=[];!(d=p.call(s)).done;)m.push(d.value);for(C&&f>2&&(h=c(h,arguments[2],2)),n=r(m.length),u=new(l(this))(n),t=0;n>t;t++)u[t]=C?h(m[t],t):m[t];return u}},25198:function(e,t,n){"use strict";var o=n(19216),r=n(24345),a=o.TYPED_ARRAY_CONSTRUCTOR,i=o.aTypedArrayConstructor;e.exports=function(e){return i(r(e,e[a]))}},41080:function(e){"use strict";var t=0,n=Math.random();e.exports=function(e){return"Symbol("+String(e===undefined?"":e)+")_"+(++t+n).toString(36)}},40647:function(e,t,n){"use strict";var o=n(54772);e.exports=o&&!Symbol.sham&&"symbol"==typeof Symbol.iterator},3444:function(e,t,n){"use strict";var o=n(17657);t.f=o},17657:function(e,t,n){"use strict";var o=n(84253),r=n(27364),a=n(28919),i=n(41080),c=n(54772),l=n(40647),u=r("wks"),d=o.Symbol,s=l?d:d&&d.withoutSetter||i;e.exports=function(e){return a(u,e)&&(c||"string"==typeof u[e])||(c&&a(d,e)?u[e]=d[e]:u[e]=s("Symbol."+e)),u[e]}},65181:function(e){"use strict";e.exports="\t\n\x0B\f\r \xa0\u1680\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u202f\u205f\u3000\u2028\u2029\ufeff"},15196:function(e,t,n){"use strict";var o=n(56174),r=n(84253),a=n(80246),i=n(64157),c="ArrayBuffer",l=a[c];o({global:!0,forced:r[c]!==l},{ArrayBuffer:l}),i(c)},95993:function(e,t,n){"use strict";var o=n(56174),r=n(19216);o({target:"ArrayBuffer",stat:!0,forced:!r.NATIVE_ARRAY_BUFFER_VIEWS},{isView:r.isView})},25079:function(e,t,n){"use strict";var o=n(56174),r=n(69691),a=n(80246),i=n(63518),c=n(55205),l=n(39570),u=n(24345),d=a.ArrayBuffer,s=a.DataView,p=d.prototype.slice;o({target:"ArrayBuffer",proto:!0,unsafe:!0,forced:r((function(){return!new d(2).slice(1,undefined).byteLength}))},{slice:function(e,t){if(p!==undefined&&t===undefined)return p.call(i(this),e);for(var n=i(this).byteLength,o=c(e,n),r=c(t===undefined?n:t,n),a=new(u(this,d))(l(r-o)),m=new s(this),f=new s(a),h=0;o<r;)f.setUint8(h++,m.getUint8(o++));return a}})},24835:function(e,t,n){"use strict";var o=n(56174),r=n(69691),a=n(89999),i=n(35611),c=n(12104),l=n(39570),u=n(39241),d=n(77454),s=n(93537),p=n(17657),m=n(12338),f=p("isConcatSpreadable"),h=9007199254740991,C="Maximum allowed index exceeded",g=m>=51||!r((function(){var e=[];return e[f]=!1,e.concat()[0]!==e})),N=s("concat"),v=function(e){if(!i(e))return!1;var t=e[f];return t!==undefined?!!t:a(e)};o({target:"Array",proto:!0,forced:!g||!N},{concat:function(e){var t,n,o,r,a,i=c(this),s=d(i,0),p=0;for(t=-1,o=arguments.length;t<o;t++)if(v(a=-1===t?i:arguments[t])){if(p+(r=l(a.length))>h)throw TypeError(C);for(n=0;n<r;n++,p++)n in a&&u(s,p,a[n])}else{if(p>=h)throw TypeError(C);u(s,p++,a)}return s.length=p,s}})},14653:function(e,t,n){"use strict";var o=n(56174),r=n(59571),a=n(36910);o({target:"Array",proto:!0},{copyWithin:r}),a("copyWithin")},58139:function(e,t,n){"use strict";var o=n(56174),r=n(69033).every;o({target:"Array",proto:!0,forced:!n(37902)("every")},{every:function(e){return r(this,e,arguments.length>1?arguments[1]:undefined)}})},34049:function(e,t,n){"use strict";var o=n(56174),r=n(22051),a=n(36910);o({target:"Array",proto:!0},{fill:r}),a("fill")},38356:function(e,t,n){"use strict";var o=n(56174),r=n(69033).filter;o({target:"Array",proto:!0,forced:!n(93537)("filter")},{filter:function(e){return r(this,e,arguments.length>1?arguments[1]:undefined)}})},31699:function(e,t,n){"use strict";var o=n(56174),r=n(69033).findIndex,a=n(36910),i="findIndex",c=!0;i in[]&&Array(1)[i]((function(){c=!1})),o({target:"Array",proto:!0,forced:c},{findIndex:function(e){return r(this,e,arguments.length>1?arguments[1]:undefined)}}),a(i)},72494:function(e,t,n){"use strict";var o=n(56174),r=n(69033).find,a=n(36910),i="find",c=!0;i in[]&&Array(1)[i]((function(){c=!1})),o({target:"Array",proto:!0,forced:c},{find:function(e){return r(this,e,arguments.length>1?arguments[1]:undefined)}}),a(i)},81520:function(e,t,n){"use strict";var o=n(56174),r=n(904),a=n(12104),i=n(39570),c=n(83923),l=n(77454);o({target:"Array",proto:!0},{flatMap:function(e){var t,n=a(this),o=i(n.length);return c(e),(t=l(n,0)).length=r(t,n,n,o,0,1,e,arguments.length>1?arguments[1]:undefined),t}})},3263:function(e,t,n){"use strict";var o=n(56174),r=n(904),a=n(12104),i=n(39570),c=n(3997),l=n(77454);o({target:"Array",proto:!0},{flat:function(){var e=arguments.length?arguments[0]:undefined,t=a(this),n=i(t.length),o=l(t,0);return o.length=r(o,t,t,n,0,e===undefined?1:c(e)),o}})},80036:function(e,t,n){"use strict";var o=n(56174),r=n(90369);o({target:"Array",proto:!0,forced:[].forEach!=r},{forEach:r})},60515:function(e,t,n){"use strict";var o=n(56174),r=n(28213);o({target:"Array",stat:!0,forced:!n(68762)((function(e){Array.from(e)}))},{from:r})},94330:function(e,t,n){"use strict";var o=n(56174),r=n(25945).includes,a=n(36910);o({target:"Array",proto:!0},{includes:function(e){return r(this,e,arguments.length>1?arguments[1]:undefined)}}),a("includes")},96553:function(e,t,n){"use strict";var o=n(56174),r=n(25945).indexOf,a=n(37902),i=[].indexOf,c=!!i&&1/[1].indexOf(1,-0)<0,l=a("indexOf");o({target:"Array",proto:!0,forced:c||!l},{indexOf:function(e){return c?i.apply(this,arguments)||0:r(this,e,arguments.length>1?arguments[1]:undefined)}})},99139:function(e,t,n){"use strict";n(56174)({target:"Array",stat:!0},{isArray:n(89999)})},98215:function(e,t,n){"use strict";var o=n(26553),r=n(36910),a=n(82723),i=n(79947),c=n(71179),l="Array Iterator",u=i.set,d=i.getterFor(l);e.exports=c(Array,"Array",(function(e,t){u(this,{type:l,target:o(e),index:0,kind:t})}),(function(){var e=d(this),t=e.target,n=e.kind,o=e.index++;return!t||o>=t.length?(e.target=undefined,{value:undefined,done:!0}):"keys"==n?{value:o,done:!1}:"values"==n?{value:t[o],done:!1}:{value:[o,t[o]],done:!1}}),"values"),a.Arguments=a.Array,r("keys"),r("values"),r("entries")},32617:function(e,t,n){"use strict";var o=n(56174),r=n(50990),a=n(26553),i=n(37902),c=[].join,l=r!=Object,u=i("join",",");o({target:"Array",proto:!0,forced:l||!u},{join:function(e){return c.call(a(this),e===undefined?",":e)}})},80186:function(e,t,n){"use strict";var o=n(56174),r=n(41183);o({target:"Array",proto:!0,forced:r!==[].lastIndexOf},{lastIndexOf:r})},31149:function(e,t,n){"use strict";var o=n(56174),r=n(69033).map;o({target:"Array",proto:!0,forced:!n(93537)("map")},{map:function(e){return r(this,e,arguments.length>1?arguments[1]:undefined)}})},71827:function(e,t,n){"use strict";var o=n(56174),r=n(69691),a=n(39241);o({target:"Array",stat:!0,forced:r((function(){function e(){}return!(Array.of.call(e)instanceof e)}))},{of:function(){for(var e=0,t=arguments.length,n=new("function"==typeof this?this:Array)(t);t>e;)a(n,e,arguments[e++]);return n.length=t,n}})},32099:function(e,t,n){"use strict";var o=n(56174),r=n(28249).right,a=n(37902),i=n(12338),c=n(41488);o({target:"Array",proto:!0,forced:!a("reduceRight")||!c&&i>79&&i<83},{reduceRight:function(e){return r(this,e,arguments.length,arguments.length>1?arguments[1]:undefined)}})},79770:function(e,t,n){"use strict";var o=n(56174),r=n(28249).left,a=n(37902),i=n(12338),c=n(41488);o({target:"Array",proto:!0,forced:!a("reduce")||!c&&i>79&&i<83},{reduce:function(e){return r(this,e,arguments.length,arguments.length>1?arguments[1]:undefined)}})},72667:function(e,t,n){"use strict";var o=n(56174),r=n(89999),a=[].reverse,i=[1,2];o({target:"Array",proto:!0,forced:String(i)===String(i.reverse())},{reverse:function(){return r(this)&&(this.length=this.length),a.call(this)}})},94920:function(e,t,n){"use strict";var o=n(56174),r=n(35611),a=n(89999),i=n(55205),c=n(39570),l=n(26553),u=n(39241),d=n(17657),s=n(93537)("slice"),p=d("species"),m=[].slice,f=Math.max;o({target:"Array",proto:!0,forced:!s},{slice:function(e,t){var n,o,d,s=l(this),h=c(s.length),C=i(e,h),g=i(t===undefined?h:t,h);if(a(s)&&("function"!=typeof(n=s.constructor)||n!==Array&&!a(n.prototype)?r(n)&&null===(n=n[p])&&(n=undefined):n=undefined,n===Array||n===undefined))return m.call(s,C,g);for(o=new(n===undefined?Array:n)(f(g-C,0)),d=0;C<g;C++,d++)C in s&&u(o,d,s[C]);return o.length=d,o}})},64683:function(e,t,n){"use strict";var o=n(56174),r=n(69033).some;o({target:"Array",proto:!0,forced:!n(37902)("some")},{some:function(e){return r(this,e,arguments.length>1?arguments[1]:undefined)}})},26189:function(e,t,n){"use strict";var o=n(56174),r=n(83923),a=n(12104),i=n(39570),c=n(92082),l=n(69691),u=n(58737),d=n(37902),s=n(20967),p=n(85749),m=n(12338),f=n(12200),h=[],C=h.sort,g=l((function(){h.sort(undefined)})),N=l((function(){h.sort(null)})),v=d("sort"),b=!l((function(){if(m)return m<70;if(!(s&&s>3)){if(p)return!0;if(f)return f<603;var e,t,n,o,r="";for(e=65;e<76;e++){switch(t=String.fromCharCode(e),e){case 66:case 69:case 70:case 72:n=3;break;case 68:case 71:n=4;break;default:n=2}for(o=0;o<47;o++)h.push({k:t+o,v:n})}for(h.sort((function(e,t){return t.v-e.v})),o=0;o<h.length;o++)t=h[o].k.charAt(0),r.charAt(r.length-1)!==t&&(r+=t);return"DGBEFHACIJK"!==r}}));o({target:"Array",proto:!0,forced:g||!N||!v||!b},{sort:function(e){e!==undefined&&r(e);var t=a(this);if(b)return e===undefined?C.call(t):C.call(t,e);var n,o,l=[],d=i(t.length);for(o=0;o<d;o++)o in t&&l.push(t[o]);for(l=u(l,function(e){return function(t,n){return n===undefined?-1:t===undefined?1:e!==undefined?+e(t,n)||0:c(t)>c(n)?1:-1}}(e)),n=l.length,o=0;o<n;)t[o]=l[o++];for(;o<d;)delete t[o++];return t}})},41185:function(e,t,n){"use strict";n(64157)("Array")},51008:function(e,t,n){"use strict";var o=n(56174),r=n(55205),a=n(3997),i=n(39570),c=n(12104),l=n(77454),u=n(39241),d=n(93537)("splice"),s=Math.max,p=Math.min;o({target:"Array",proto:!0,forced:!d},{splice:function(e,t){var n,o,d,m,f,h,C=c(this),g=i(C.length),N=r(e,g),v=arguments.length;if(0===v?n=o=0:1===v?(n=0,o=g-N):(n=v-2,o=p(s(a(t),0),g-N)),g+n-o>9007199254740991)throw TypeError("Maximum allowed length exceeded");for(d=l(C,o),m=0;m<o;m++)(f=N+m)in C&&u(d,m,C[f]);if(d.length=o,n<o){for(m=N;m<g-o;m++)h=m+n,(f=m+o)in C?C[h]=C[f]:delete C[h];for(m=g;m>g-o+n;m--)delete C[m-1]}else if(n>o)for(m=g-o;m>N;m--)h=m+n-1,(f=m+o-1)in C?C[h]=C[f]:delete C[h];for(m=0;m<n;m++)C[m+N]=arguments[m+2];return C.length=g-o+n,d}})},86e3:function(e,t,n){"use strict";n(36910)("flatMap")},47112:function(e,t,n){"use strict";n(36910)("flat")},87143:function(e,t,n){"use strict";var o=n(56174),r=n(80246);o({global:!0,forced:!n(32977)},{DataView:r.DataView})},72499:function(e,t,n){"use strict";n(56174)({target:"Date",stat:!0},{now:function(){return(new Date).getTime()}})},73676:function(e,t,n){"use strict";var o=n(56174),r=n(79873);o({target:"Date",proto:!0,forced:Date.prototype.toISOString!==r},{toISOString:r})},76746:function(e,t,n){"use strict";var o=n(56174),r=n(69691),a=n(12104),i=n(94673);o({target:"Date",proto:!0,forced:r((function(){return null!==new Date(NaN).toJSON()||1!==Date.prototype.toJSON.call({toISOString:function(){return 1}})}))},{toJSON:function(e){var t=a(this),n=i(t,"number");return"number"!=typeof n||isFinite(n)?t.toISOString():null}})},19:function(e,t,n){"use strict";var o=n(52188),r=n(57763),a=n(17657)("toPrimitive"),i=Date.prototype;a in i||o(i,a,r)},17038:function(e,t,n){"use strict";var o=n(11807),r=Date.prototype,a="Invalid Date",i="toString",c=r[i],l=r.getTime;String(new Date(NaN))!=a&&o(r,i,(function(){var e=l.call(this);return e==e?c.call(this):a}))},46360:function(e,t,n){"use strict";n(56174)({target:"Function",proto:!0},{bind:n(68719)})},16835:function(e,t,n){"use strict";var o=n(35611),r=n(74217),a=n(6863),i=n(17657)("hasInstance"),c=Function.prototype;i in c||r.f(c,i,{value:function(e){if("function"!=typeof this||!o(e))return!1;if(!o(this.prototype))return e instanceof this;for(;e=a(e);)if(this.prototype===e)return!0;return!1}})},96683:function(e,t,n){"use strict";var o=n(75592),r=n(74217).f,a=Function.prototype,i=a.toString,c=/^\s*function ([^ (]*)/,l="name";o&&!(l in a)&&r(a,l,{configurable:!0,get:function(){try{return i.call(this).match(c)[1]}catch(e){return""}}})},7756:function(e,t,n){"use strict";var o=n(84253);n(29108)(o.JSON,"JSON",!0)},21842:function(e,t,n){"use strict";var o=n(42006),r=n(74568);e.exports=o("Map",(function(e){return function(){return e(this,arguments.length?arguments[0]:undefined)}}),r)},1613:function(e,t,n){"use strict";var o=n(56174),r=n(83659),a=Math.acosh,i=Math.log,c=Math.sqrt,l=Math.LN2;o({target:"Math",stat:!0,forced:!a||710!=Math.floor(a(Number.MAX_VALUE))||a(Infinity)!=Infinity},{acosh:function(e){return(e=+e)<1?NaN:e>94906265.62425156?i(e)+l:r(e-1+c(e-1)*c(e+1))}})},65115:function(e,t,n){"use strict";var o=n(56174),r=Math.asinh,a=Math.log,i=Math.sqrt;o({target:"Math",stat:!0,forced:!(r&&1/r(0)>0)},{asinh:function c(e){return isFinite(e=+e)&&0!=e?e<0?-c(-e):a(e+i(e*e+1)):e}})},27115:function(e,t,n){"use strict";var o=n(56174),r=Math.atanh,a=Math.log;o({target:"Math",stat:!0,forced:!(r&&1/r(-0)<0)},{atanh:function(e){return 0==(e=+e)?e:a((1+e)/(1-e))/2}})},13280:function(e,t,n){"use strict";var o=n(56174),r=n(24305),a=Math.abs,i=Math.pow;o({target:"Math",stat:!0},{cbrt:function(e){return r(e=+e)*i(a(e),1/3)}})},21019:function(e,t,n){"use strict";var o=n(56174),r=Math.floor,a=Math.log,i=Math.LOG2E;o({target:"Math",stat:!0},{clz32:function(e){return(e>>>=0)?31-r(a(e+.5)*i):32}})},66619:function(e,t,n){"use strict";var o=n(56174),r=n(19997),a=Math.cosh,i=Math.abs,c=Math.E;o({target:"Math",stat:!0,forced:!a||a(710)===Infinity},{cosh:function(e){var t=r(i(e)-1)+1;return(t+1/(t*c*c))*(c/2)}})},75469:function(e,t,n){"use strict";var o=n(56174),r=n(19997);o({target:"Math",stat:!0,forced:r!=Math.expm1},{expm1:r})},90967:function(e,t,n){"use strict";n(56174)({target:"Math",stat:!0},{fround:n(43334)})},35022:function(e,t,n){"use strict";var o=n(56174),r=Math.hypot,a=Math.abs,i=Math.sqrt;o({target:"Math",stat:!0,forced:!!r&&r(Infinity,NaN)!==Infinity},{hypot:function(e,t){for(var n,o,r=0,c=0,l=arguments.length,u=0;c<l;)u<(n=a(arguments[c++]))?(r=r*(o=u/n)*o+1,u=n):r+=n>0?(o=n/u)*o:n;return u===Infinity?Infinity:u*i(r)}})},22604:function(e,t,n){"use strict";var o=n(56174),r=n(69691),a=Math.imul;o({target:"Math",stat:!0,forced:r((function(){return-5!=a(4294967295,5)||2!=a.length}))},{imul:function(e,t){var n=65535,o=+e,r=+t,a=n&o,i=n&r;return 0|a*i+((n&o>>>16)*i+a*(n&r>>>16)<<16>>>0)}})},41843:function(e,t,n){"use strict";var o=n(56174),r=Math.log,a=Math.LOG10E;o({target:"Math",stat:!0},{log10:function(e){return r(e)*a}})},86810:function(e,t,n){"use strict";n(56174)({target:"Math",stat:!0},{log1p:n(83659)})},54670:function(e,t,n){"use strict";var o=n(56174),r=Math.log,a=Math.LN2;o({target:"Math",stat:!0},{log2:function(e){return r(e)/a}})},16580:function(e,t,n){"use strict";n(56174)({target:"Math",stat:!0},{sign:n(24305)})},31304:function(e,t,n){"use strict";var o=n(56174),r=n(69691),a=n(19997),i=Math.abs,c=Math.exp,l=Math.E;o({target:"Math",stat:!0,forced:r((function(){return-2e-17!=Math.sinh(-2e-17)}))},{sinh:function(e){return i(e=+e)<1?(a(e)-a(-e))/2:(c(e-1)-c(-e-1))*(l/2)}})},13078:function(e,t,n){"use strict";var o=n(56174),r=n(19997),a=Math.exp;o({target:"Math",stat:!0},{tanh:function(e){var t=r(e=+e),n=r(-e);return t==Infinity?1:n==Infinity?-1:(t-n)/(a(e)+a(-e))}})},45128:function(e,t,n){"use strict";n(29108)(Math,"Math",!0)},31938:function(e,t,n){"use strict";var o=n(56174),r=Math.ceil,a=Math.floor;o({target:"Math",stat:!0},{trunc:function(e){return(e>0?a:r)(e)}})},90958:function(e,t,n){"use strict";var o=n(75592),r=n(84253),a=n(41441),i=n(11807),c=n(28919),l=n(77e3),u=n(22285),d=n(78253),s=n(94673),p=n(69691),m=n(83681),f=n(78870).f,h=n(22245).f,C=n(74217).f,g=n(84703).trim,N="Number",v=r[N],b=v.prototype,V=l(m(b))==N,y=function(e){if(d(e))throw TypeError("Cannot convert a Symbol value to a number");var t,n,o,r,a,i,c,l,u=s(e,"number");if("string"==typeof u&&u.length>2)if(43===(t=(u=g(u)).charCodeAt(0))||45===t){if(88===(n=u.charCodeAt(2))||120===n)return NaN}else if(48===t){switch(u.charCodeAt(1)){case 66:case 98:o=2,r=49;break;case 79:case 111:o=8,r=55;break;default:return+u}for(i=(a=u.slice(2)).length,c=0;c<i;c++)if((l=a.charCodeAt(c))<48||l>r)return NaN;return parseInt(a,o)}return+u};if(a(N,!v(" 0o1")||!v("0b1")||v("+0x1"))){for(var x,k=function(e){var t=arguments.length<1?0:e,n=this;return n instanceof k&&(V?p((function(){b.valueOf.call(n)})):l(n)!=N)?u(new v(y(t)),n,k):y(t)},S=o?f(v):"MAX_VALUE,MIN_VALUE,NaN,NEGATIVE_INFINITY,POSITIVE_INFINITY,EPSILON,isFinite,isInteger,isNaN,isSafeInteger,MAX_SAFE_INTEGER,MIN_SAFE_INTEGER,parseFloat,parseInt,isInteger,fromString,range".split(","),I=0;S.length>I;I++)c(v,x=S[I])&&!c(k,x)&&C(k,x,h(v,x));k.prototype=b,b.constructor=k,i(r,N,k)}},88885:function(e,t,n){"use strict";n(56174)({target:"Number",stat:!0},{EPSILON:Math.pow(2,-52)})},45017:function(e,t,n){"use strict";n(56174)({target:"Number",stat:!0},{isFinite:n(64630)})},59743:function(e,t,n){"use strict";n(56174)({target:"Number",stat:!0},{isInteger:n(93624)})},47560:function(e,t,n){"use strict";n(56174)({target:"Number",stat:!0},{isNaN:function(e){return e!=e}})},31569:function(e,t,n){"use strict";var o=n(56174),r=n(93624),a=Math.abs;o({target:"Number",stat:!0},{isSafeInteger:function(e){return r(e)&&a(e)<=9007199254740991}})},6134:function(e,t,n){"use strict";n(56174)({target:"Number",stat:!0},{MAX_SAFE_INTEGER:9007199254740991})},12622:function(e,t,n){"use strict";n(56174)({target:"Number",stat:!0},{MIN_SAFE_INTEGER:-9007199254740991})},60852:function(e,t,n){"use strict";var o=n(56174),r=n(78025);o({target:"Number",stat:!0,forced:Number.parseFloat!=r},{parseFloat:r})},99085:function(e,t,n){"use strict";var o=n(56174),r=n(55092);o({target:"Number",stat:!0,forced:Number.parseInt!=r},{parseInt:r})},75180:function(e,t,n){"use strict";var o=n(56174),r=n(3997),a=n(81687),i=n(9811),c=n(69691),l=1..toFixed,u=Math.floor,d=function f(e,t,n){return 0===t?n:t%2==1?f(e,t-1,n*e):f(e*e,t/2,n)},s=function(e,t,n){for(var o=-1,r=n;++o<6;)r+=t*e[o],e[o]=r%1e7,r=u(r/1e7)},p=function(e,t){for(var n=6,o=0;--n>=0;)o+=e[n],e[n]=u(o/t),o=o%t*1e7},m=function(e){for(var t=6,n="";--t>=0;)if(""!==n||0===t||0!==e[t]){var o=String(e[t]);n=""===n?o:n+i.call("0",7-o.length)+o}return n};o({target:"Number",proto:!0,forced:l&&("0.000"!==8e-5.toFixed(3)||"1"!==.9.toFixed(0)||"1.25"!==1.255.toFixed(2)||"1000000000000000128"!==(0xde0b6b3a7640080).toFixed(0))||!c((function(){l.call({})}))},{toFixed:function(e){var t,n,o,c,l=a(this),u=r(e),f=[0,0,0,0,0,0],h="",C="0";if(u<0||u>20)throw RangeError("Incorrect fraction digits");if(l!=l)return"NaN";if(l<=-1e21||l>=1e21)return String(l);if(l<0&&(h="-",l=-l),l>1e-21)if(n=(t=function(e){for(var t=0,n=e;n>=4096;)t+=12,n/=4096;for(;n>=2;)t+=1,n/=2;return t}(l*d(2,69,1))-69)<0?l*d(2,-t,1):l/d(2,t,1),n*=4503599627370496,(t=52-t)>0){for(s(f,0,n),o=u;o>=7;)s(f,1e7,0),o-=7;for(s(f,d(10,o,1),0),o=t-1;o>=23;)p(f,1<<23),o-=23;p(f,1<<o),s(f,1,1),p(f,2),C=m(f)}else s(f,0,n),s(f,1<<-t,0),C=m(f)+i.call("0",u);return C=u>0?h+((c=C.length)<=u?"0."+i.call("0",u-c)+C:C.slice(0,c-u)+"."+C.slice(c-u)):h+C}})},79437:function(e,t,n){"use strict";var o=n(56174),r=n(69691),a=n(81687),i=1..toPrecision;o({target:"Number",proto:!0,forced:r((function(){return"1"!==i.call(1,undefined)}))||!r((function(){i.call({})}))},{toPrecision:function(e){return e===undefined?i.call(a(this)):i.call(a(this),e)}})},75370:function(e,t,n){"use strict";var o=n(56174),r=n(64905);o({target:"Object",stat:!0,forced:Object.assign!==r},{assign:r})},61022:function(e,t,n){"use strict";n(56174)({target:"Object",stat:!0,sham:!n(75592)},{create:n(83681)})},50580:function(e,t,n){"use strict";var o=n(56174),r=n(75592),a=n(47339),i=n(12104),c=n(83923),l=n(74217);r&&o({target:"Object",proto:!0,forced:a},{__defineGetter__:function(e,t){l.f(i(this),e,{get:c(t),enumerable:!0,configurable:!0})}})},5301:function(e,t,n){"use strict";var o=n(56174),r=n(75592);o({target:"Object",stat:!0,forced:!r,sham:!r},{defineProperties:n(91543)})},76438:function(e,t,n){"use strict";var o=n(56174),r=n(75592);o({target:"Object",stat:!0,forced:!r,sham:!r},{defineProperty:n(74217).f})},97307:function(e,t,n){"use strict";var o=n(56174),r=n(75592),a=n(47339),i=n(12104),c=n(83923),l=n(74217);r&&o({target:"Object",proto:!0,forced:a},{__defineSetter__:function(e,t){l.f(i(this),e,{set:c(t),enumerable:!0,configurable:!0})}})},34016:function(e,t,n){"use strict";var o=n(56174),r=n(3e4).entries;o({target:"Object",stat:!0},{entries:function(e){return r(e)}})},86944:function(e,t,n){"use strict";var o=n(56174),r=n(7056),a=n(69691),i=n(35611),c=n(40421).onFreeze,l=Object.freeze;o({target:"Object",stat:!0,forced:a((function(){l(1)})),sham:!r},{freeze:function(e){return l&&i(e)?l(c(e)):e}})},60687:function(e,t,n){"use strict";var o=n(56174),r=n(56342),a=n(39241);o({target:"Object",stat:!0},{fromEntries:function(e){var t={};return r(e,(function(e,n){a(t,e,n)}),{AS_ENTRIES:!0}),t}})},86957:function(e,t,n){"use strict";var o=n(56174),r=n(69691),a=n(26553),i=n(22245).f,c=n(75592),l=r((function(){i(1)}));o({target:"Object",stat:!0,forced:!c||l,sham:!c},{getOwnPropertyDescriptor:function(e,t){return i(a(e),t)}})},59163:function(e,t,n){"use strict";var o=n(56174),r=n(75592),a=n(28482),i=n(26553),c=n(22245),l=n(39241);o({target:"Object",stat:!0,sham:!r},{getOwnPropertyDescriptors:function(e){for(var t,n,o=i(e),r=c.f,u=a(o),d={},s=0;u.length>s;)(n=r(o,t=u[s++]))!==undefined&&l(d,t,n);return d}})},34128:function(e,t,n){"use strict";var o=n(56174),r=n(69691),a=n(59995).f;o({target:"Object",stat:!0,forced:r((function(){return!Object.getOwnPropertyNames(1)}))},{getOwnPropertyNames:a})},24267:function(e,t,n){"use strict";var o=n(56174),r=n(69691),a=n(12104),i=n(6863),c=n(28954);o({target:"Object",stat:!0,forced:r((function(){i(1)})),sham:!c},{getPrototypeOf:function(e){return i(a(e))}})},4239:function(e,t,n){"use strict";var o=n(56174),r=n(69691),a=n(35611),i=Object.isExtensible;o({target:"Object",stat:!0,forced:r((function(){i(1)}))},{isExtensible:function(e){return!!a(e)&&(!i||i(e))}})},8381:function(e,t,n){"use strict";var o=n(56174),r=n(69691),a=n(35611),i=Object.isFrozen;o({target:"Object",stat:!0,forced:r((function(){i(1)}))},{isFrozen:function(e){return!a(e)||!!i&&i(e)}})},63669:function(e,t,n){"use strict";var o=n(56174),r=n(69691),a=n(35611),i=Object.isSealed;o({target:"Object",stat:!0,forced:r((function(){i(1)}))},{isSealed:function(e){return!a(e)||!!i&&i(e)}})},39816:function(e,t,n){"use strict";n(56174)({target:"Object",stat:!0},{is:n(61398)})},25779:function(e,t,n){"use strict";var o=n(56174),r=n(12104),a=n(84547);o({target:"Object",stat:!0,forced:n(69691)((function(){a(1)}))},{keys:function(e){return a(r(e))}})},84580:function(e,t,n){"use strict";var o=n(56174),r=n(75592),a=n(47339),i=n(12104),c=n(14613),l=n(6863),u=n(22245).f;r&&o({target:"Object",proto:!0,forced:a},{__lookupGetter__:function(e){var t,n=i(this),o=c(e);do{if(t=u(n,o))return t.get}while(n=l(n))}})},33198:function(e,t,n){"use strict";var o=n(56174),r=n(75592),a=n(47339),i=n(12104),c=n(14613),l=n(6863),u=n(22245).f;r&&o({target:"Object",proto:!0,forced:a},{__lookupSetter__:function(e){var t,n=i(this),o=c(e);do{if(t=u(n,o))return t.set}while(n=l(n))}})},71895:function(e,t,n){"use strict";var o=n(56174),r=n(35611),a=n(40421).onFreeze,i=n(7056),c=n(69691),l=Object.preventExtensions;o({target:"Object",stat:!0,forced:c((function(){l(1)})),sham:!i},{preventExtensions:function(e){return l&&r(e)?l(a(e)):e}})},44910:function(e,t,n){"use strict";var o=n(56174),r=n(35611),a=n(40421).onFreeze,i=n(7056),c=n(69691),l=Object.seal;o({target:"Object",stat:!0,forced:c((function(){l(1)})),sham:!i},{seal:function(e){return l&&r(e)?l(a(e)):e}})},95962:function(e,t,n){"use strict";n(56174)({target:"Object",stat:!0},{setPrototypeOf:n(18444)})},73769:function(e,t,n){"use strict";var o=n(64910),r=n(11807),a=n(13966);o||r(Object.prototype,"toString",a,{unsafe:!0})},14962:function(e,t,n){"use strict";var o=n(56174),r=n(3e4).values;o({target:"Object",stat:!0},{values:function(e){return r(e)}})},80345:function(e,t,n){"use strict";var o=n(56174),r=n(78025);o({global:!0,forced:parseFloat!=r},{parseFloat:r})},18438:function(e,t,n){"use strict";var o=n(56174),r=n(55092);o({global:!0,forced:parseInt!=r},{parseInt:r})},46356:function(e,t,n){"use strict";var o=n(56174),r=n(1986),a=n(4302),i=n(69691),c=n(69808),l=n(24345),u=n(48141),d=n(11807);if(o({target:"Promise",proto:!0,real:!0,forced:!!a&&i((function(){a.prototype["finally"].call({then:function(){}},(function(){}))}))},{"finally":function(e){var t=l(this,c("Promise")),n="function"==typeof e;return this.then(n?function(n){return u(t,e()).then((function(){return n}))}:e,n?function(n){return u(t,e()).then((function(){throw n}))}:e)}}),!r&&"function"==typeof a){var s=c("Promise").prototype["finally"];a.prototype["finally"]!==s&&d(a.prototype,"finally",s,{unsafe:!0})}},70552:function(e,t,n){"use strict";var o,r,a,i,c=n(56174),l=n(1986),u=n(84253),d=n(69808),s=n(4302),p=n(11807),m=n(3993),f=n(18444),h=n(29108),C=n(64157),g=n(35611),N=n(83923),v=n(50997),b=n(89853),V=n(56342),y=n(68762),x=n(24345),k=n(33453).set,S=n(80909),I=n(48141),w=n(21419),_=n(82101),D=n(47673),M=n(79947),B=n(41441),A=n(17657),T=n(46392),L=n(41488),E=n(12338),P=A("species"),j="Promise",O=M.get,F=M.set,R=M.getterFor(j),z=s&&s.prototype,W=s,U=z,H=u.TypeError,G=u.document,Y=u.process,Z=_.f,K=Z,Q=!!(G&&G.createEvent&&u.dispatchEvent),$="function"==typeof PromiseRejectionEvent,J="unhandledrejection",X=!1,q=B(j,(function(){var e=b(W),t=e!==String(W);if(!t&&66===E)return!0;if(l&&!U["finally"])return!0;if(E>=51&&/native code/.test(e))return!1;var n=new W((function(e){e(1)})),o=function(e){e((function(){}),(function(){}))};return(n.constructor={})[P]=o,!(X=n.then((function(){}))instanceof o)||!t&&T&&!$})),ee=q||!y((function(e){W.all(e)["catch"]((function(){}))})),te=function(e){var t;return!(!g(e)||"function"!=typeof(t=e.then))&&t},ne=function(e,t){if(!e.notified){e.notified=!0;var n=e.reactions;S((function(){for(var o=e.value,r=1==e.state,a=0;n.length>a;){var i,c,l,u=n[a++],d=r?u.ok:u.fail,s=u.resolve,p=u.reject,m=u.domain;try{d?(r||(2===e.rejection&&ie(e),e.rejection=1),!0===d?i=o:(m&&m.enter(),i=d(o),m&&(m.exit(),l=!0)),i===u.promise?p(H("Promise-chain cycle")):(c=te(i))?c.call(i,s,p):s(i)):p(o)}catch(f){m&&!l&&m.exit(),p(f)}}e.reactions=[],e.notified=!1,t&&!e.rejection&&re(e)}))}},oe=function(e,t,n){var o,r;Q?((o=G.createEvent("Event")).promise=t,o.reason=n,o.initEvent(e,!1,!0),u.dispatchEvent(o)):o={promise:t,reason:n},!$&&(r=u["on"+e])?r(o):e===J&&w("Unhandled promise rejection",n)},re=function(e){k.call(u,(function(){var t,n=e.facade,o=e.value;if(ae(e)&&(t=D((function(){L?Y.emit("unhandledRejection",o,n):oe(J,n,o)})),e.rejection=L||ae(e)?2:1,t.error))throw t.value}))},ae=function(e){return 1!==e.rejection&&!e.parent},ie=function(e){k.call(u,(function(){var t=e.facade;L?Y.emit("rejectionHandled",t):oe("rejectionhandled",t,e.value)}))},ce=function(e,t,n){return function(o){e(t,o,n)}},le=function(e,t,n){e.done||(e.done=!0,n&&(e=n),e.value=t,e.state=2,ne(e,!0))},ue=function se(e,t,n){if(!e.done){e.done=!0,n&&(e=n);try{if(e.facade===t)throw H("Promise can't be resolved itself");var o=te(t);o?S((function(){var n={done:!1};try{o.call(t,ce(se,n,e),ce(le,n,e))}catch(r){le(n,r,e)}})):(e.value=t,e.state=1,ne(e,!1))}catch(r){le({done:!1},r,e)}}};if(q&&(W=function(e){v(this,W,j),N(e),o.call(this);var t=O(this);try{e(ce(ue,t),ce(le,t))}catch(n){le(t,n)}},U=W.prototype,(o=function(e){F(this,{type:j,done:!1,notified:!1,parent:!1,reactions:[],rejection:!1,state:0,value:undefined})}).prototype=m(U,{then:function(e,t){var n=R(this),o=Z(x(this,W));return o.ok="function"!=typeof e||e,o.fail="function"==typeof t&&t,o.domain=L?Y.domain:undefined,n.parent=!0,n.reactions.push(o),0!=n.state&&ne(n,!1),o.promise},"catch":function(e){return this.then(undefined,e)}}),r=function(){var e=new o,t=O(e);this.promise=e,this.resolve=ce(ue,t),this.reject=ce(le,t)},_.f=Z=function(e){return e===W||e===a?new r(e):K(e)},!l&&"function"==typeof s&&z!==Object.prototype)){i=z.then,X||(p(z,"then",(function(e,t){var n=this;return new W((function(e,t){i.call(n,e,t)})).then(e,t)}),{unsafe:!0}),p(z,"catch",U["catch"],{unsafe:!0}));try{delete z.constructor}catch(de){}f&&f(z,U)}c({global:!0,wrap:!0,forced:q},{Promise:W}),h(W,j,!1,!0),C(j),a=d(j),c({target:j,stat:!0,forced:q},{reject:function(e){var t=Z(this);return t.reject.call(undefined,e),t.promise}}),c({target:j,stat:!0,forced:l||q},{resolve:function(e){return I(l&&this===a?W:this,e)}}),c({target:j,stat:!0,forced:ee},{all:function(e){var t=this,n=Z(t),o=n.resolve,r=n.reject,a=D((function(){var n=N(t.resolve),a=[],i=0,c=1;V(e,(function(e){var l=i++,u=!1;a.push(undefined),c++,n.call(t,e).then((function(e){u||(u=!0,a[l]=e,--c||o(a))}),r)})),--c||o(a)}));return a.error&&r(a.value),n.promise},race:function(e){var t=this,n=Z(t),o=n.reject,r=D((function(){var r=N(t.resolve);V(e,(function(e){r.call(t,e).then(n.resolve,o)}))}));return r.error&&o(r.value),n.promise}})},57128:function(e,t,n){"use strict";var o=n(56174),r=n(69808),a=n(83923),i=n(63518),c=n(69691),l=r("Reflect","apply"),u=Function.apply;o({target:"Reflect",stat:!0,forced:!c((function(){l((function(){}))}))},{apply:function(e,t,n){return a(e),i(n),l?l(e,t,n):u.call(e,t,n)}})},83588:function(e,t,n){"use strict";var o=n(56174),r=n(69808),a=n(83923),i=n(63518),c=n(35611),l=n(83681),u=n(68719),d=n(69691),s=r("Reflect","construct"),p=d((function(){function e(){}return!(s((function(){}),[],e)instanceof e)})),m=!d((function(){s((function(){}))})),f=p||m;o({target:"Reflect",stat:!0,forced:f,sham:f},{construct:function(e,t){a(e),i(t);var n=arguments.length<3?e:a(arguments[2]);if(m&&!p)return s(e,t,n);if(e==n){switch(t.length){case 0:return new e;case 1:return new e(t[0]);case 2:return new e(t[0],t[1]);case 3:return new e(t[0],t[1],t[2]);case 4:return new e(t[0],t[1],t[2],t[3])}var o=[null];return o.push.apply(o,t),new(u.apply(e,o))}var r=n.prototype,d=l(c(r)?r:Object.prototype),f=Function.apply.call(e,d,t);return c(f)?f:d}})},47057:function(e,t,n){"use strict";var o=n(56174),r=n(75592),a=n(63518),i=n(14613),c=n(74217);o({target:"Reflect",stat:!0,forced:n(69691)((function(){Reflect.defineProperty(c.f({},1,{value:1}),1,{value:2})})),sham:!r},{defineProperty:function(e,t,n){a(e);var o=i(t);a(n);try{return c.f(e,o,n),!0}catch(r){return!1}}})},67092:function(e,t,n){"use strict";var o=n(56174),r=n(63518),a=n(22245).f;o({target:"Reflect",stat:!0},{deleteProperty:function(e,t){var n=a(r(e),t);return!(n&&!n.configurable)&&delete e[t]}})},69203:function(e,t,n){"use strict";var o=n(56174),r=n(75592),a=n(63518),i=n(22245);o({target:"Reflect",stat:!0,sham:!r},{getOwnPropertyDescriptor:function(e,t){return i.f(a(e),t)}})},27879:function(e,t,n){"use strict";var o=n(56174),r=n(63518),a=n(6863);o({target:"Reflect",stat:!0,sham:!n(28954)},{getPrototypeOf:function(e){return a(r(e))}})},59478:function(e,t,n){"use strict";var o=n(56174),r=n(35611),a=n(63518),i=n(28919),c=n(22245),l=n(6863);o({target:"Reflect",stat:!0},{get:function u(e,t){var n,o,d=arguments.length<3?e:arguments[2];return a(e)===d?e[t]:(n=c.f(e,t))?i(n,"value")?n.value:n.get===undefined?undefined:n.get.call(d):r(o=l(e))?u(o,t,d):void 0}})},71507:function(e,t,n){"use strict";n(56174)({target:"Reflect",stat:!0},{has:function(e,t){return t in e}})},39021:function(e,t,n){"use strict";var o=n(56174),r=n(63518),a=Object.isExtensible;o({target:"Reflect",stat:!0},{isExtensible:function(e){return r(e),!a||a(e)}})},8641:function(e,t,n){"use strict";n(56174)({target:"Reflect",stat:!0},{ownKeys:n(28482)})},83064:function(e,t,n){"use strict";var o=n(56174),r=n(69808),a=n(63518);o({target:"Reflect",stat:!0,sham:!n(7056)},{preventExtensions:function(e){a(e);try{var t=r("Object","preventExtensions");return t&&t(e),!0}catch(n){return!1}}})},33362:function(e,t,n){"use strict";var o=n(56174),r=n(63518),a=n(1372),i=n(18444);i&&o({target:"Reflect",stat:!0},{setPrototypeOf:function(e,t){r(e),a(t);try{return i(e,t),!0}catch(n){return!1}}})},93115:function(e,t,n){"use strict";var o=n(56174),r=n(63518),a=n(35611),i=n(28919),c=n(69691),l=n(74217),u=n(22245),d=n(6863),s=n(39160);o({target:"Reflect",stat:!0,forced:c((function(){var e=function(){},t=l.f(new e,"a",{configurable:!0});return!1!==Reflect.set(e.prototype,"a",1,t)}))},{set:function p(e,t,n){var o,c,m=arguments.length<4?e:arguments[3],f=u.f(r(e),t);if(!f){if(a(c=d(e)))return p(c,t,n,m);f=s(0)}if(i(f,"value")){if(!1===f.writable||!a(m))return!1;if(o=u.f(m,t)){if(o.get||o.set||!1===o.writable)return!1;o.value=n,l.f(m,t,o)}else l.f(m,t,s(0,n));return!0}return f.set!==undefined&&(f.set.call(m,n),!0)}})},45090:function(e,t,n){"use strict";var o=n(75592),r=n(84253),a=n(41441),i=n(22285),c=n(52188),l=n(74217).f,u=n(78870).f,d=n(86133),s=n(92082),p=n(5105),m=n(1864),f=n(11807),h=n(69691),C=n(28919),g=n(79947).enforce,N=n(64157),v=n(17657),b=n(8368),V=n(2229),y=v("match"),x=r.RegExp,k=x.prototype,S=/^\?<[^\s\d!#%&*+<=>@^][^\s!#%&*+<=>@^]*>/,I=/a/g,w=/a/g,_=new x(I)!==I,D=m.UNSUPPORTED_Y,M=o&&(!_||D||b||V||h((function(){return w[y]=!1,x(I)!=I||x(w)==w||"/a/i"!=x(I,"i")})));if(a("RegExp",M)){for(var B=function(e,t){var n,o,r,a,l,u,m=this instanceof B,f=d(e),h=t===undefined,N=[],v=e;if(!m&&f&&h&&e.constructor===B)return e;if((f||e instanceof B)&&(e=e.source,h&&(t="flags"in v?v.flags:p.call(v))),e=e===undefined?"":s(e),t=t===undefined?"":s(t),v=e,b&&"dotAll"in I&&(o=!!t&&t.indexOf("s")>-1)&&(t=t.replace(/s/g,"")),n=t,D&&"sticky"in I&&(r=!!t&&t.indexOf("y")>-1)&&(t=t.replace(/y/g,"")),V&&(a=function(e){for(var t,n=e.length,o=0,r="",a=[],i={},c=!1,l=!1,u=0,d="";o<=n;o++){if("\\"===(t=e.charAt(o)))t+=e.charAt(++o);else if("]"===t)c=!1;else if(!c)switch(!0){case"["===t:c=!0;break;case"("===t:S.test(e.slice(o+1))&&(o+=2,l=!0),r+=t,u++;continue;case">"===t&&l:if(""===d||C(i,d))throw new SyntaxError("Invalid capture group name");i[d]=!0,a.push([d,u]),l=!1,d="";continue}l?d+=t:r+=t}return[r,a]}(e),e=a[0],N=a[1]),l=i(x(e,t),m?this:k,B),(o||r||N.length)&&(u=g(l),o&&(u.dotAll=!0,u.raw=B(function(e){for(var t,n=e.length,o=0,r="",a=!1;o<=n;o++)"\\"!==(t=e.charAt(o))?a||"."!==t?("["===t?a=!0:"]"===t&&(a=!1),r+=t):r+="[\\s\\S]":r+=t+e.charAt(++o);return r}(e),n)),r&&(u.sticky=!0),N.length&&(u.groups=N)),e!==v)try{c(l,"source",""===v?"(?:)":v)}catch(y){}return l},A=function(e){e in B||l(B,e,{configurable:!0,get:function(){return x[e]},set:function(t){x[e]=t}})},T=u(x),L=0;T.length>L;)A(T[L++]);k.constructor=B,B.prototype=k,f(r,"RegExp",B)}N("RegExp")},12654:function(e,t,n){"use strict";var o=n(56174),r=n(71841);o({target:"RegExp",proto:!0,forced:/./.exec!==r},{exec:r})},58870:function(e,t,n){"use strict";var o=n(75592),r=n(74217),a=n(5105),i=n(69691);o&&i((function(){return"sy"!==Object.getOwnPropertyDescriptor(RegExp.prototype,"flags").get.call({dotAll:!0,sticky:!0})}))&&r.f(RegExp.prototype,"flags",{configurable:!0,get:a})},76581:function(e,t,n){"use strict";var o=n(11807),r=n(63518),a=n(92082),i=n(69691),c=n(5105),l="toString",u=RegExp.prototype,d=u[l],s=i((function(){return"/a/b"!=d.call({source:"a",flags:"b"})})),p=d.name!=l;(s||p)&&o(RegExp.prototype,l,(function(){var e=r(this),t=a(e.source),n=e.flags;return"/"+t+"/"+a(n===undefined&&e instanceof RegExp&&!("flags"in u)?c.call(e):n)}),{unsafe:!0})},4567:function(e,t,n){"use strict";var o=n(42006),r=n(74568);e.exports=o("Set",(function(e){return function(){return e(this,arguments.length?arguments[0]:undefined)}}),r)},67586:function(e,t,n){"use strict";var o=n(56174),r=n(34141);o({target:"String",proto:!0,forced:n(26096)("anchor")},{anchor:function(e){return r(this,"a","name",e)}})},7743:function(e,t,n){"use strict";var o=n(56174),r=n(34141);o({target:"String",proto:!0,forced:n(26096)("big")},{big:function(){return r(this,"big","","")}})},15890:function(e,t,n){"use strict";var o=n(56174),r=n(34141);o({target:"String",proto:!0,forced:n(26096)("blink")},{blink:function(){return r(this,"blink","","")}})},34651:function(e,t,n){"use strict";var o=n(56174),r=n(34141);o({target:"String",proto:!0,forced:n(26096)("bold")},{bold:function(){return r(this,"b","","")}})},28638:function(e,t,n){"use strict";var o=n(56174),r=n(37015).codeAt;o({target:"String",proto:!0},{codePointAt:function(e){return r(this,e)}})},60314:function(e,t,n){"use strict";var o,r=n(56174),a=n(22245).f,i=n(39570),c=n(92082),l=n(18774),u=n(44184),d=n(93937),s=n(1986),p="".endsWith,m=Math.min,f=d("endsWith");r({target:"String",proto:!0,forced:!!(s||f||(o=a(String.prototype,"endsWith"),!o||o.writable))&&!f},{endsWith:function(e){var t=c(u(this));l(e);var n=arguments.length>1?arguments[1]:undefined,o=i(t.length),r=n===undefined?o:m(i(n),o),a=c(e);return p?p.call(t,a,r):t.slice(r-a.length,r)===a}})},18037:function(e,t,n){"use strict";var o=n(56174),r=n(34141);o({target:"String",proto:!0,forced:n(26096)("fixed")},{fixed:function(){return r(this,"tt","","")}})},48415:function(e,t,n){"use strict";var o=n(56174),r=n(34141);o({target:"String",proto:!0,forced:n(26096)("fontcolor")},{fontcolor:function(e){return r(this,"font","color",e)}})},54950:function(e,t,n){"use strict";var o=n(56174),r=n(34141);o({target:"String",proto:!0,forced:n(26096)("fontsize")},{fontsize:function(e){return r(this,"font","size",e)}})},71595:function(e,t,n){"use strict";var o=n(56174),r=n(55205),a=String.fromCharCode,i=String.fromCodePoint;o({target:"String",stat:!0,forced:!!i&&1!=i.length},{fromCodePoint:function(e){for(var t,n=[],o=arguments.length,i=0;o>i;){if(t=+arguments[i++],r(t,1114111)!==t)throw RangeError(t+" is not a valid code point");n.push(t<65536?a(t):a(55296+((t-=65536)>>10),t%1024+56320))}return n.join("")}})},98954:function(e,t,n){"use strict";var o=n(56174),r=n(18774),a=n(44184),i=n(92082);o({target:"String",proto:!0,forced:!n(93937)("includes")},{includes:function(e){return!!~i(a(this)).indexOf(i(r(e)),arguments.length>1?arguments[1]:undefined)}})},76102:function(e,t,n){"use strict";var o=n(56174),r=n(34141);o({target:"String",proto:!0,forced:n(26096)("italics")},{italics:function(){return r(this,"i","","")}})},91332:function(e,t,n){"use strict";var o=n(37015).charAt,r=n(92082),a=n(79947),i=n(71179),c="String Iterator",l=a.set,u=a.getterFor(c);i(String,"String",(function(e){l(this,{type:c,string:r(e),index:0})}),(function(){var e,t=u(this),n=t.string,r=t.index;return r>=n.length?{value:undefined,done:!0}:(e=o(n,r),t.index+=e.length,{value:e,done:!1})}))},47816:function(e,t,n){"use strict";var o=n(56174),r=n(34141);o({target:"String",proto:!0,forced:n(26096)("link")},{link:function(e){return r(this,"a","href",e)}})},79445:function(e,t,n){"use strict";var o=n(68880),r=n(63518),a=n(39570),i=n(92082),c=n(44184),l=n(69953),u=n(5641);o("match",(function(e,t,n){return[function(t){var n=c(this),o=t==undefined?undefined:t[e];return o!==undefined?o.call(t,n):new RegExp(t)[e](i(n))},function(e){var o=r(this),c=i(e),d=n(t,o,c);if(d.done)return d.value;if(!o.global)return u(o,c);var s=o.unicode;o.lastIndex=0;for(var p,m=[],f=0;null!==(p=u(o,c));){var h=i(p[0]);m[f]=h,""===h&&(o.lastIndex=l(c,a(o.lastIndex),s)),f++}return 0===f?null:m}]}))},36493:function(e,t,n){"use strict";var o=n(56174),r=n(47497).end;o({target:"String",proto:!0,forced:n(43331)},{padEnd:function(e){return r(this,e,arguments.length>1?arguments[1]:undefined)}})},24476:function(e,t,n){"use strict";var o=n(56174),r=n(47497).start;o({target:"String",proto:!0,forced:n(43331)},{padStart:function(e){return r(this,e,arguments.length>1?arguments[1]:undefined)}})},78192:function(e,t,n){"use strict";var o=n(56174),r=n(26553),a=n(39570),i=n(92082);o({target:"String",stat:!0},{raw:function(e){for(var t=r(e.raw),n=a(t.length),o=arguments.length,c=[],l=0;n>l;)c.push(i(t[l++])),l<o&&c.push(i(arguments[l]));return c.join("")}})},58660:function(e,t,n){"use strict";n(56174)({target:"String",proto:!0},{repeat:n(9811)})},56592:function(e,t,n){"use strict";var o=n(68880),r=n(69691),a=n(63518),i=n(3997),c=n(39570),l=n(92082),u=n(44184),d=n(69953),s=n(55444),p=n(5641),m=n(17657)("replace"),f=Math.max,h=Math.min,C="$0"==="a".replace(/./,"$0"),g=!!/./[m]&&""===/./[m]("a","$0");o("replace",(function(e,t,n){var o=g?"$":"$0";return[function(e,n){var o=u(this),r=e==undefined?undefined:e[m];return r!==undefined?r.call(e,o,n):t.call(l(o),e,n)},function(e,r){var u=a(this),m=l(e);if("string"==typeof r&&-1===r.indexOf(o)&&-1===r.indexOf("$<")){var C=n(t,u,m,r);if(C.done)return C.value}var g="function"==typeof r;g||(r=l(r));var N=u.global;if(N){var v=u.unicode;u.lastIndex=0}for(var b=[];;){var V=p(u,m);if(null===V)break;if(b.push(V),!N)break;""===l(V[0])&&(u.lastIndex=d(m,c(u.lastIndex),v))}for(var y,x="",k=0,S=0;S<b.length;S++){V=b[S];for(var I=l(V[0]),w=f(h(i(V.index),m.length),0),_=[],D=1;D<V.length;D++)_.push((y=V[D])===undefined?y:String(y));var M=V.groups;if(g){var B=[I].concat(_,w,m);M!==undefined&&B.push(M);var A=l(r.apply(undefined,B))}else A=s(I,m,w,_,M,r);w>=k&&(x+=m.slice(k,w)+A,k=w+I.length)}return x+m.slice(k)}]}),!!r((function(){var e=/./;return e.exec=function(){var e=[];return e.groups={a:"7"},e},"7"!=="".replace(e,"$<a>")}))||!C||g)},69957:function(e,t,n){"use strict";var o=n(68880),r=n(63518),a=n(44184),i=n(61398),c=n(92082),l=n(5641);o("search",(function(e,t,n){return[function(t){var n=a(this),o=t==undefined?undefined:t[e];return o!==undefined?o.call(t,n):new RegExp(t)[e](c(n))},function(e){var o=r(this),a=c(e),u=n(t,o,a);if(u.done)return u.value;var d=o.lastIndex;i(d,0)||(o.lastIndex=0);var s=l(o,a);return i(o.lastIndex,d)||(o.lastIndex=d),null===s?-1:s.index}]}))},30037:function(e,t,n){"use strict";var o=n(56174),r=n(34141);o({target:"String",proto:!0,forced:n(26096)("small")},{small:function(){return r(this,"small","","")}})},9747:function(e,t,n){"use strict";var o=n(68880),r=n(86133),a=n(63518),i=n(44184),c=n(24345),l=n(69953),u=n(39570),d=n(92082),s=n(5641),p=n(71841),m=n(1864),f=n(69691),h=m.UNSUPPORTED_Y,C=[].push,g=Math.min,N=4294967295,v=!f((function(){var e=/(?:)/,t=e.exec;e.exec=function(){return t.apply(this,arguments)};var n="ab".split(e);return 2!==n.length||"a"!==n[0]||"b"!==n[1]}));o("split",(function(e,t,n){var o;return o="c"=="abbc".split(/(b)*/)[1]||4!="test".split(/(?:)/,-1).length||2!="ab".split(/(?:ab)*/).length||4!=".".split(/(.?)(.?)/).length||".".split(/()()/).length>1||"".split(/.?/).length?function(e,n){var o=d(i(this)),a=n===undefined?N:n>>>0;if(0===a)return[];if(e===undefined)return[o];if(!r(e))return t.call(o,e,a);for(var c,l,u,s=[],m=(e.ignoreCase?"i":"")+(e.multiline?"m":"")+(e.unicode?"u":"")+(e.sticky?"y":""),f=0,h=new RegExp(e.source,m+"g");(c=p.call(h,o))&&!((l=h.lastIndex)>f&&(s.push(o.slice(f,c.index)),c.length>1&&c.index<o.length&&C.apply(s,c.slice(1)),u=c[0].length,f=l,s.length>=a));)h.lastIndex===c.index&&h.lastIndex++;return f===o.length?!u&&h.test("")||s.push(""):s.push(o.slice(f)),s.length>a?s.slice(0,a):s}:"0".split(undefined,0).length?function(e,n){return e===undefined&&0===n?[]:t.call(this,e,n)}:t,[function(t,n){var r=i(this),a=t==undefined?undefined:t[e];return a!==undefined?a.call(t,r,n):o.call(d(r),t,n)},function(e,r){var i=a(this),p=d(e),m=n(o,i,p,r,o!==t);if(m.done)return m.value;var f=c(i,RegExp),C=i.unicode,v=(i.ignoreCase?"i":"")+(i.multiline?"m":"")+(i.unicode?"u":"")+(h?"g":"y"),b=new f(h?"^(?:"+i.source+")":i,v),V=r===undefined?N:r>>>0;if(0===V)return[];if(0===p.length)return null===s(b,p)?[p]:[];for(var y=0,x=0,k=[];x<p.length;){b.lastIndex=h?0:x;var S,I=s(b,h?p.slice(x):p);if(null===I||(S=g(u(b.lastIndex+(h?x:0)),p.length))===y)x=l(p,x,C);else{if(k.push(p.slice(y,x)),k.length===V)return k;for(var w=1;w<=I.length-1;w++)if(k.push(I[w]),k.length===V)return k;x=y=S}}return k.push(p.slice(y)),k}]}),!v,h)},13578:function(e,t,n){"use strict";var o,r=n(56174),a=n(22245).f,i=n(39570),c=n(92082),l=n(18774),u=n(44184),d=n(93937),s=n(1986),p="".startsWith,m=Math.min,f=d("startsWith");r({target:"String",proto:!0,forced:!!(s||f||(o=a(String.prototype,"startsWith"),!o||o.writable))&&!f},{startsWith:function(e){var t=c(u(this));l(e);var n=i(m(arguments.length>1?arguments[1]:undefined,t.length)),o=c(e);return p?p.call(t,o,n):t.slice(n,n+o.length)===o}})},54705:function(e,t,n){"use strict";var o=n(56174),r=n(34141);o({target:"String",proto:!0,forced:n(26096)("strike")},{strike:function(){return r(this,"strike","","")}})},75831:function(e,t,n){"use strict";var o=n(56174),r=n(34141);o({target:"String",proto:!0,forced:n(26096)("sub")},{sub:function(){return r(this,"sub","","")}})},96958:function(e,t,n){"use strict";var o=n(56174),r=n(34141);o({target:"String",proto:!0,forced:n(26096)("sup")},{sup:function(){return r(this,"sup","","")}})},19209:function(e,t,n){"use strict";var o=n(56174),r=n(84703).end,a=n(3035)("trimEnd"),i=a?function(){return r(this)}:"".trimEnd;o({target:"String",proto:!0,forced:a},{trimEnd:i,trimRight:i})},56737:function(e,t,n){"use strict";var o=n(56174),r=n(84703).start,a=n(3035)("trimStart"),i=a?function(){return r(this)}:"".trimStart;o({target:"String",proto:!0,forced:a},{trimStart:i,trimLeft:i})},3684:function(e,t,n){"use strict";var o=n(56174),r=n(84703).trim;o({target:"String",proto:!0,forced:n(3035)("trim")},{trim:function(){return r(this)}})},69656:function(e,t,n){"use strict";n(55282)("asyncIterator")},43674:function(e,t,n){"use strict";var o=n(56174),r=n(75592),a=n(84253),i=n(28919),c=n(35611),l=n(74217).f,u=n(49957),d=a.Symbol;if(r&&"function"==typeof d&&(!("description"in d.prototype)||d().description!==undefined)){var s={},p=function(){var e=arguments.length<1||arguments[0]===undefined?undefined:String(arguments[0]),t=this instanceof p?new d(e):e===undefined?d():d(e);return""===e&&(s[t]=!0),t};u(p,d);var m=p.prototype=d.prototype;m.constructor=p;var f=m.toString,h="Symbol(test)"==String(d("test")),C=/^Symbol\((.*)\)[^)]+$/;l(m,"description",{configurable:!0,get:function(){var e=c(this)?this.valueOf():this,t=f.call(e);if(i(s,e))return"";var n=h?t.slice(7,-1):t.replace(C,"$1");return""===n?undefined:n}}),o({global:!0,forced:!0},{Symbol:p})}},72411:function(e,t,n){"use strict";n(55282)("hasInstance")},24467:function(e,t,n){"use strict";n(55282)("isConcatSpreadable")},37493:function(e,t,n){"use strict";n(55282)("iterator")},65379:function(e,t,n){"use strict";var o=n(56174),r=n(84253),a=n(69808),i=n(1986),c=n(75592),l=n(54772),u=n(69691),d=n(28919),s=n(89999),p=n(35611),m=n(78253),f=n(63518),h=n(12104),C=n(26553),g=n(14613),N=n(92082),v=n(39160),b=n(83681),V=n(84547),y=n(78870),x=n(59995),k=n(21061),S=n(22245),I=n(74217),w=n(77659),_=n(52188),D=n(11807),M=n(27364),B=n(85152),A=n(90311),T=n(41080),L=n(17657),E=n(3444),P=n(55282),j=n(29108),O=n(79947),F=n(69033).forEach,R=B("hidden"),z="Symbol",W="prototype",U=L("toPrimitive"),H=O.set,G=O.getterFor(z),Y=Object[W],Z=r.Symbol,K=a("JSON","stringify"),Q=S.f,$=I.f,J=x.f,X=w.f,q=M("symbols"),ee=M("op-symbols"),te=M("string-to-symbol-registry"),ne=M("symbol-to-string-registry"),oe=M("wks"),re=r.QObject,ae=!re||!re[W]||!re[W].findChild,ie=c&&u((function(){return 7!=b($({},"a",{get:function(){return $(this,"a",{value:7}).a}})).a}))?function(e,t,n){var o=Q(Y,t);o&&delete Y[t],$(e,t,n),o&&e!==Y&&$(Y,t,o)}:$,ce=function(e,t){var n=q[e]=b(Z[W]);return H(n,{type:z,tag:e,description:t}),c||(n.description=t),n},le=function(e,t,n){e===Y&&le(ee,t,n),f(e);var o=g(t);return f(n),d(q,o)?(n.enumerable?(d(e,R)&&e[R][o]&&(e[R][o]=!1),n=b(n,{enumerable:v(0,!1)})):(d(e,R)||$(e,R,v(1,{})),e[R][o]=!0),ie(e,o,n)):$(e,o,n)},ue=function(e,t){f(e);var n=C(t),o=V(n).concat(fe(n));return F(o,(function(t){c&&!se.call(n,t)||le(e,t,n[t])})),e},de=function(e,t){return t===undefined?b(e):ue(b(e),t)},se=function(e){var t=g(e),n=X.call(this,t);return!(this===Y&&d(q,t)&&!d(ee,t))&&(!(n||!d(this,t)||!d(q,t)||d(this,R)&&this[R][t])||n)},pe=function(e,t){var n=C(e),o=g(t);if(n!==Y||!d(q,o)||d(ee,o)){var r=Q(n,o);return!r||!d(q,o)||d(n,R)&&n[R][o]||(r.enumerable=!0),r}},me=function(e){var t=J(C(e)),n=[];return F(t,(function(e){d(q,e)||d(A,e)||n.push(e)})),n},fe=function(e){var t=e===Y,n=J(t?ee:C(e)),o=[];return F(n,(function(e){!d(q,e)||t&&!d(Y,e)||o.push(q[e])})),o};(l||(Z=function(){if(this instanceof Z)throw TypeError("Symbol is not a constructor");var e=arguments.length&&arguments[0]!==undefined?N(arguments[0]):undefined,t=T(e),n=function o(e){this===Y&&o.call(ee,e),d(this,R)&&d(this[R],t)&&(this[R][t]=!1),ie(this,t,v(1,e))};return c&&ae&&ie(Y,t,{configurable:!0,set:n}),ce(t,e)},D(Z[W],"toString",(function(){return G(this).tag})),D(Z,"withoutSetter",(function(e){return ce(T(e),e)})),w.f=se,I.f=le,S.f=pe,y.f=x.f=me,k.f=fe,E.f=function(e){return ce(L(e),e)},c&&($(Z[W],"description",{configurable:!0,get:function(){return G(this).description}}),i||D(Y,"propertyIsEnumerable",se,{unsafe:!0}))),o({global:!0,wrap:!0,forced:!l,sham:!l},{Symbol:Z}),F(V(oe),(function(e){P(e)})),o({target:z,stat:!0,forced:!l},{"for":function(e){var t=N(e);if(d(te,t))return te[t];var n=Z(t);return te[t]=n,ne[n]=t,n},keyFor:function(e){if(!m(e))throw TypeError(e+" is not a symbol");if(d(ne,e))return ne[e]},useSetter:function(){ae=!0},useSimple:function(){ae=!1}}),o({target:"Object",stat:!0,forced:!l,sham:!c},{create:de,defineProperty:le,defineProperties:ue,getOwnPropertyDescriptor:pe}),o({target:"Object",stat:!0,forced:!l},{getOwnPropertyNames:me,getOwnPropertySymbols:fe}),o({target:"Object",stat:!0,forced:u((function(){k.f(1)}))},{getOwnPropertySymbols:function(e){return k.f(h(e))}}),K)&&o({target:"JSON",stat:!0,forced:!l||u((function(){var e=Z();return"[null]"!=K([e])||"{}"!=K({a:e})||"{}"!=K(Object(e))}))},{stringify:function(e,t,n){for(var o,r=[e],a=1;arguments.length>a;)r.push(arguments[a++]);if(o=t,(p(t)||e!==undefined)&&!m(e))return s(t)||(t=function(e,t){if("function"==typeof o&&(t=o.call(this,e,t)),!m(t))return t}),r[1]=t,K.apply(null,r)}});Z[W][U]||_(Z[W],U,Z[W].valueOf),j(Z,z),A[R]=!0},87420:function(e,t,n){"use strict";n(55282)("match")},9480:function(e,t,n){"use strict";n(55282)("replace")},66171:function(e,t,n){"use strict";n(55282)("search")},53276:function(e,t,n){"use strict";n(55282)("species")},71852:function(e,t,n){"use strict";n(55282)("split")},59045:function(e,t,n){"use strict";n(55282)("toPrimitive")},70887:function(e,t,n){"use strict";n(55282)("toStringTag")},72906:function(e,t,n){"use strict";n(55282)("unscopables")},64346:function(e,t,n){"use strict";var o=n(19216),r=n(59571),a=o.aTypedArray;(0,o.exportTypedArrayMethod)("copyWithin",(function(e,t){return r.call(a(this),e,t,arguments.length>2?arguments[2]:undefined)}))},27553:function(e,t,n){"use strict";var o=n(19216),r=n(69033).every,a=o.aTypedArray;(0,o.exportTypedArrayMethod)("every",(function(e){return r(a(this),e,arguments.length>1?arguments[1]:undefined)}))},49007:function(e,t,n){"use strict";var o=n(19216),r=n(22051),a=o.aTypedArray;(0,o.exportTypedArrayMethod)("fill",(function(e){return r.apply(a(this),arguments)}))},17621:function(e,t,n){"use strict";var o=n(19216),r=n(69033).filter,a=n(16688),i=o.aTypedArray;(0,o.exportTypedArrayMethod)("filter",(function(e){var t=r(i(this),e,arguments.length>1?arguments[1]:undefined);return a(this,t)}))},20500:function(e,t,n){"use strict";var o=n(19216),r=n(69033).findIndex,a=o.aTypedArray;(0,o.exportTypedArrayMethod)("findIndex",(function(e){return r(a(this),e,arguments.length>1?arguments[1]:undefined)}))},71078:function(e,t,n){"use strict";var o=n(19216),r=n(69033).find,a=o.aTypedArray;(0,o.exportTypedArrayMethod)("find",(function(e){return r(a(this),e,arguments.length>1?arguments[1]:undefined)}))},75344:function(e,t,n){"use strict";n(17576)("Float32",(function(e){return function(t,n,o){return e(this,t,n,o)}}))},87853:function(e,t,n){"use strict";n(17576)("Float64",(function(e){return function(t,n,o){return e(this,t,n,o)}}))},85923:function(e,t,n){"use strict";var o=n(19216),r=n(69033).forEach,a=o.aTypedArray;(0,o.exportTypedArrayMethod)("forEach",(function(e){r(a(this),e,arguments.length>1?arguments[1]:undefined)}))},38956:function(e,t,n){"use strict";var o=n(29023);(0,n(19216).exportTypedArrayStaticMethod)("from",n(76182),o)},49264:function(e,t,n){"use strict";var o=n(19216),r=n(25945).includes,a=o.aTypedArray;(0,o.exportTypedArrayMethod)("includes",(function(e){return r(a(this),e,arguments.length>1?arguments[1]:undefined)}))},70448:function(e,t,n){"use strict";var o=n(19216),r=n(25945).indexOf,a=o.aTypedArray;(0,o.exportTypedArrayMethod)("indexOf",(function(e){return r(a(this),e,arguments.length>1?arguments[1]:undefined)}))},1150:function(e,t,n){"use strict";n(17576)("Int16",(function(e){return function(t,n,o){return e(this,t,n,o)}}))},50444:function(e,t,n){"use strict";n(17576)("Int32",(function(e){return function(t,n,o){return e(this,t,n,o)}}))},25865:function(e,t,n){"use strict";n(17576)("Int8",(function(e){return function(t,n,o){return e(this,t,n,o)}}))},5775:function(e,t,n){"use strict";var o=n(84253),r=n(19216),a=n(98215),i=n(17657)("iterator"),c=o.Uint8Array,l=a.values,u=a.keys,d=a.entries,s=r.aTypedArray,p=r.exportTypedArrayMethod,m=c&&c.prototype[i],f=!!m&&("values"==m.name||m.name==undefined),h=function(){return l.call(s(this))};p("entries",(function(){return d.call(s(this))})),p("keys",(function(){return u.call(s(this))})),p("values",h,!f),p(i,h,!f)},45164:function(e,t,n){"use strict";var o=n(19216),r=o.aTypedArray,a=o.exportTypedArrayMethod,i=[].join;a("join",(function(e){return i.apply(r(this),arguments)}))},83762:function(e,t,n){"use strict";var o=n(19216),r=n(41183),a=o.aTypedArray;(0,o.exportTypedArrayMethod)("lastIndexOf",(function(e){return r.apply(a(this),arguments)}))},67265:function(e,t,n){"use strict";var o=n(19216),r=n(69033).map,a=n(25198),i=o.aTypedArray;(0,o.exportTypedArrayMethod)("map",(function(e){return r(i(this),e,arguments.length>1?arguments[1]:undefined,(function(e,t){return new(a(e))(t)}))}))},56058:function(e,t,n){"use strict";var o=n(19216),r=n(29023),a=o.aTypedArrayConstructor;(0,o.exportTypedArrayStaticMethod)("of",(function(){for(var e=0,t=arguments.length,n=new(a(this))(t);t>e;)n[e]=arguments[e++];return n}),r)},23535:function(e,t,n){"use strict";var o=n(19216),r=n(28249).right,a=o.aTypedArray;(0,o.exportTypedArrayMethod)("reduceRight",(function(e){return r(a(this),e,arguments.length,arguments.length>1?arguments[1]:undefined)}))},87001:function(e,t,n){"use strict";var o=n(19216),r=n(28249).left,a=o.aTypedArray;(0,o.exportTypedArrayMethod)("reduce",(function(e){return r(a(this),e,arguments.length,arguments.length>1?arguments[1]:undefined)}))},18617:function(e,t,n){"use strict";var o=n(19216),r=o.aTypedArray,a=o.exportTypedArrayMethod,i=Math.floor;a("reverse",(function(){for(var e,t=this,n=r(t).length,o=i(n/2),a=0;a<o;)e=t[a],t[a++]=t[--n],t[n]=e;return t}))},70595:function(e,t,n){"use strict";var o=n(19216),r=n(39570),a=n(95740),i=n(12104),c=n(69691),l=o.aTypedArray;(0,o.exportTypedArrayMethod)("set",(function(e){l(this);var t=a(arguments.length>1?arguments[1]:undefined,1),n=this.length,o=i(e),c=r(o.length),u=0;if(c+t>n)throw RangeError("Wrong length");for(;u<c;)this[t+u]=o[u++]}),c((function(){new Int8Array(1).set({})})))},76820:function(e,t,n){"use strict";var o=n(19216),r=n(25198),a=n(69691),i=o.aTypedArray,c=o.exportTypedArrayMethod,l=[].slice;c("slice",(function(e,t){for(var n=l.call(i(this),e,t),o=r(this),a=0,c=n.length,u=new o(c);c>a;)u[a]=n[a++];return u}),a((function(){new Int8Array(1).slice()})))},33357:function(e,t,n){"use strict";var o=n(19216),r=n(69033).some,a=o.aTypedArray;(0,o.exportTypedArrayMethod)("some",(function(e){return r(a(this),e,arguments.length>1?arguments[1]:undefined)}))},38215:function(e,t,n){"use strict";var o=n(19216),r=n(84253),a=n(69691),i=n(83923),c=n(39570),l=n(58737),u=n(20967),d=n(85749),s=n(12338),p=n(12200),m=o.aTypedArray,f=o.exportTypedArrayMethod,h=r.Uint16Array,C=h&&h.prototype.sort,g=!!C&&!a((function(){var e=new h(2);e.sort(null),e.sort({})})),N=!!C&&!a((function(){if(s)return s<74;if(u)return u<67;if(d)return!0;if(p)return p<602;var e,t,n=new h(516),o=Array(516);for(e=0;e<516;e++)t=e%4,n[e]=515-e,o[e]=e-2*t+3;for(n.sort((function(e,t){return(e/4|0)-(t/4|0)})),e=0;e<516;e++)if(n[e]!==o[e])return!0}));f("sort",(function(e){var t=this;if(e!==undefined&&i(e),N)return C.call(t,e);m(t);var n,o=c(t.length),r=Array(o);for(n=0;n<o;n++)r[n]=t[n];for(r=l(t,function(e){return function(t,n){return e!==undefined?+e(t,n)||0:n!=n?-1:t!=t?1:0===t&&0===n?1/t>0&&1/n<0?1:-1:t>n}}(e)),n=0;n<o;n++)t[n]=r[n];return t}),!N||g)},37281:function(e,t,n){"use strict";var o=n(19216),r=n(39570),a=n(55205),i=n(25198),c=o.aTypedArray;(0,o.exportTypedArrayMethod)("subarray",(function(e,t){var n=c(this),o=n.length,l=a(e,o);return new(i(n))(n.buffer,n.byteOffset+l*n.BYTES_PER_ELEMENT,r((t===undefined?o:a(t,o))-l))}))},99584:function(e,t,n){"use strict";var o=n(84253),r=n(19216),a=n(69691),i=o.Int8Array,c=r.aTypedArray,l=r.exportTypedArrayMethod,u=[].toLocaleString,d=[].slice,s=!!i&&a((function(){u.call(new i(1))}));l("toLocaleString",(function(){return u.apply(s?d.call(c(this)):c(this),arguments)}),a((function(){return[1,2].toLocaleString()!=new i([1,2]).toLocaleString()}))||!a((function(){i.prototype.toLocaleString.call([1,2])})))},43582:function(e,t,n){"use strict";var o=n(19216).exportTypedArrayMethod,r=n(69691),a=n(84253).Uint8Array,i=a&&a.prototype||{},c=[].toString,l=[].join;r((function(){c.call({})}))&&(c=function(){return l.call(this)});var u=i.toString!=c;o("toString",c,u)},37650:function(e,t,n){"use strict";n(17576)("Uint16",(function(e){return function(t,n,o){return e(this,t,n,o)}}))},12424:function(e,t,n){"use strict";n(17576)("Uint32",(function(e){return function(t,n,o){return e(this,t,n,o)}}))},11220:function(e,t,n){"use strict";n(17576)("Uint8",(function(e){return function(t,n,o){return e(this,t,n,o)}}))},6636:function(e,t,n){"use strict";n(17576)("Uint8",(function(e){return function(t,n,o){return e(this,t,n,o)}}),!0)},15378:function(e,t,n){"use strict";var o,r=n(84253),a=n(3993),i=n(40421),c=n(42006),l=n(57396),u=n(35611),d=n(79947).enforce,s=n(82911),p=!r.ActiveXObject&&"ActiveXObject"in r,m=Object.isExtensible,f=function(e){return function(){return e(this,arguments.length?arguments[0]:undefined)}},h=e.exports=c("WeakMap",f,l);if(s&&p){o=l.getConstructor(f,"WeakMap",!0),i.enable();var C=h.prototype,g=C["delete"],N=C.has,v=C.get,b=C.set;a(C,{"delete":function(e){if(u(e)&&!m(e)){var t=d(this);return t.frozen||(t.frozen=new o),g.call(this,e)||t.frozen["delete"](e)}return g.call(this,e)},has:function(e){if(u(e)&&!m(e)){var t=d(this);return t.frozen||(t.frozen=new o),N.call(this,e)||t.frozen.has(e)}return N.call(this,e)},get:function(e){if(u(e)&&!m(e)){var t=d(this);return t.frozen||(t.frozen=new o),N.call(this,e)?v.call(this,e):t.frozen.get(e)}return v.call(this,e)},set:function(e,t){if(u(e)&&!m(e)){var n=d(this);n.frozen||(n.frozen=new o),N.call(this,e)?b.call(this,e,t):n.frozen.set(e,t)}else b.call(this,e,t);return this}})}},31213:function(e,t,n){"use strict";n(42006)("WeakSet",(function(e){return function(){return e(this,arguments.length?arguments[0]:undefined)}}),n(57396))},19275:function(e,t,n){"use strict";var o=n(56174),r=n(84253),a=n(33453);o({global:!0,bind:!0,enumerable:!0,forced:!r.setImmediate||!r.clearImmediate},{setImmediate:a.set,clearImmediate:a.clear})},59:function(e,t,n){"use strict";var o=n(56174),r=n(84253),a=n(80909),i=n(41488),c=r.process;o({global:!0,enumerable:!0,noTargetGet:!0},{queueMicrotask:function(e){var t=i&&c.domain;a(t?t.bind(e):e)}})},43849:function(e,t,n){"use strict";var o=n(56174),r=n(84253),a=n(72319),i=[].slice,c=function(e){return function(t,n){var o=arguments.length>2,r=o?i.call(arguments,2):undefined;return e(o?function(){("function"==typeof t?t:Function(t)).apply(this,r)}:t,n)}};o({global:!0,bind:!0,forced:/MSIE .\./.test(a)},{setTimeout:c(r.setTimeout),setInterval:c(r.setInterval)})},77249:function(e){"use strict";e.exports=function(){var e=1e3,t=6e4,n=36e5,o="millisecond",r="second",a="minute",i="hour",c="day",l="week",u="month",d="quarter",s="year",p="date",m="Invalid Date",f=/^(\d{4})[-/]?(\d{1,2})?[-/]?(\d{0,2})[Tt\s]*(\d{1,2})?:?(\d{1,2})?:?(\d{1,2})?[.:]?(\d+)?$/,h=/\[([^\]]+)]|Y{1,4}|M{1,4}|D{1,2}|d{1,4}|H{1,2}|h{1,2}|a|A|m{1,2}|s{1,2}|Z{1,2}|SSS/g,C={name:"en",weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),ordinal:function(){function e(e){var t=["th","st","nd","rd"],n=e%100;return"["+e+(t[(n-20)%10]||t[n]||t[0])+"]"}return e}()},g=function(e,t,n){var o=String(e);return!o||o.length>=t?e:""+Array(t+1-o.length).join(n)+e},N={s:g,z:function(){function e(e){var t=-e.utcOffset(),n=Math.abs(t),o=Math.floor(n/60),r=n%60;return(t<=0?"+":"-")+g(o,2,"0")+":"+g(r,2,"0")}return e}(),m:function(){function e(t,n){if(t.date()<n.date())return-e(n,t);var o=12*(n.year()-t.year())+(n.month()-t.month()),r=t.clone().add(o,u),a=n-r<0,i=t.clone().add(o+(a?-1:1),u);return+(-(o+(n-r)/(a?r-i:i-r))||0)}return e}(),a:function(){function e(e){return e<0?Math.ceil(e)||0:Math.floor(e)}return e}(),p:function(){function e(e){return{M:u,y:s,w:l,d:c,D:p,h:i,m:a,s:r,ms:o,Q:d}[e]||String(e||"").toLowerCase().replace(/s$/,"")}return e}(),u:function(){function e(e){return void 0===e}return e}()},v="en",b={};b[v]=C;var V="$isDayjsObject",y=function(e){return e instanceof I||!(!e||!e[V])},x=function(){function e(t,n,o){var r;if(!t)return v;if("string"==typeof t){var a=t.toLowerCase();b[a]&&(r=a),n&&(b[a]=n,r=a);var i=t.split("-");if(!r&&i.length>1)return e(i[0])}else{var c=t.name;b[c]=t,r=c}return!o&&r&&(v=r),r||!o&&v}return e}(),k=function(e,t){if(y(e))return e.clone();var n="object"==typeof t?t:{};return n.date=e,n.args=arguments,new I(n)},S=N;S.l=x,S.i=y,S.w=function(e,t){return k(e,{locale:t.$L,utc:t.$u,x:t.$x,$offset:t.$offset})};var I=function(){function C(e){this.$L=x(e.locale,null,!0),this.parse(e),this.$x=this.$x||e.x||{},this[V]=!0}var g=C.prototype;return g.parse=function(e){this.$d=function(e){var t=e.date,n=e.utc;if(null===t)return new Date(NaN);if(S.u(t))return new Date;if(t instanceof Date)return new Date(t);if("string"==typeof t&&!/Z$/i.test(t)){var o=t.match(f);if(o){var r=o[2]-1||0,a=(o[7]||"0").substring(0,3);return n?new Date(Date.UTC(o[1],r,o[3]||1,o[4]||0,o[5]||0,o[6]||0,a)):new Date(o[1],r,o[3]||1,o[4]||0,o[5]||0,o[6]||0,a)}}return new Date(t)}(e),this.init()},g.init=function(){var e=this.$d;this.$y=e.getFullYear(),this.$M=e.getMonth(),this.$D=e.getDate(),this.$W=e.getDay(),this.$H=e.getHours(),this.$m=e.getMinutes(),this.$s=e.getSeconds(),this.$ms=e.getMilliseconds()},g.$utils=function(){return S},g.isValid=function(){return!(this.$d.toString()===m)},g.isSame=function(e,t){var n=k(e);return this.startOf(t)<=n&&n<=this.endOf(t)},g.isAfter=function(e,t){return k(e)<this.startOf(t)},g.isBefore=function(e,t){return this.endOf(t)<k(e)},g.$g=function(e,t,n){return S.u(e)?this[t]:this.set(n,e)},g.unix=function(){return Math.floor(this.valueOf()/1e3)},g.valueOf=function(){return this.$d.getTime()},g.startOf=function(e,t){var n=this,o=!!S.u(t)||t,d=S.p(e),m=function(e,t){var r=S.w(n.$u?Date.UTC(n.$y,t,e):new Date(n.$y,t,e),n);return o?r:r.endOf(c)},f=function(e,t){return S.w(n.toDate()[e].apply(n.toDate("s"),(o?[0,0,0,0]:[23,59,59,999]).slice(t)),n)},h=this.$W,C=this.$M,g=this.$D,N="set"+(this.$u?"UTC":"");switch(d){case s:return o?m(1,0):m(31,11);case u:return o?m(1,C):m(0,C+1);case l:var v=this.$locale().weekStart||0,b=(h<v?h+7:h)-v;return m(o?g-b:g+(6-b),C);case c:case p:return f(N+"Hours",0);case i:return f(N+"Minutes",1);case a:return f(N+"Seconds",2);case r:return f(N+"Milliseconds",3);default:return this.clone()}},g.endOf=function(e){return this.startOf(e,!1)},g.$set=function(e,t){var n,l=S.p(e),d="set"+(this.$u?"UTC":""),m=(n={},n[c]=d+"Date",n[p]=d+"Date",n[u]=d+"Month",n[s]=d+"FullYear",n[i]=d+"Hours",n[a]=d+"Minutes",n[r]=d+"Seconds",n[o]=d+"Milliseconds",n)[l],f=l===c?this.$D+(t-this.$W):t;if(l===u||l===s){var h=this.clone().set(p,1);h.$d[m](f),h.init(),this.$d=h.set(p,Math.min(this.$D,h.daysInMonth())).$d}else m&&this.$d[m](f);return this.init(),this},g.set=function(e,t){return this.clone().$set(e,t)},g.get=function(e){return this[S.p(e)]()},g.add=function(o,d){var p,m=this;o=Number(o);var f=S.p(d),h=function(e){var t=k(m);return S.w(t.date(t.date()+Math.round(e*o)),m)};if(f===u)return this.set(u,this.$M+o);if(f===s)return this.set(s,this.$y+o);if(f===c)return h(1);if(f===l)return h(7);var C=(p={},p[a]=t,p[i]=n,p[r]=e,p)[f]||1,g=this.$d.getTime()+o*C;return S.w(g,this)},g.subtract=function(e,t){return this.add(-1*e,t)},g.format=function(e){var t=this,n=this.$locale();if(!this.isValid())return n.invalidDate||m;var o=e||"YYYY-MM-DDTHH:mm:ssZ",r=S.z(this),a=this.$H,i=this.$m,c=this.$M,l=n.weekdays,u=n.months,d=n.meridiem,s=function(e,n,r,a){return e&&(e[n]||e(t,o))||r[n].slice(0,a)},p=function(e){return S.s(a%12||12,e,"0")},f=d||function(e,t,n){var o=e<12?"AM":"PM";return n?o.toLowerCase():o};return o.replace(h,(function(e,o){return o||function(e){switch(e){case"YY":return String(t.$y).slice(-2);case"YYYY":return S.s(t.$y,4,"0");case"M":return c+1;case"MM":return S.s(c+1,2,"0");case"MMM":return s(n.monthsShort,c,u,3);case"MMMM":return s(u,c);case"D":return t.$D;case"DD":return S.s(t.$D,2,"0");case"d":return String(t.$W);case"dd":return s(n.weekdaysMin,t.$W,l,2);case"ddd":return s(n.weekdaysShort,t.$W,l,3);case"dddd":return l[t.$W];case"H":return String(a);case"HH":return S.s(a,2,"0");case"h":return p(1);case"hh":return p(2);case"a":return f(a,i,!0);case"A":return f(a,i,!1);case"m":return String(i);case"mm":return S.s(i,2,"0");case"s":return String(t.$s);case"ss":return S.s(t.$s,2,"0");case"SSS":return S.s(t.$ms,3,"0");case"Z":return r}return null}(e)||r.replace(":","")}))},g.utcOffset=function(){return 15*-Math.round(this.$d.getTimezoneOffset()/15)},g.diff=function(o,p,m){var f,h=this,C=S.p(p),g=k(o),N=(g.utcOffset()-this.utcOffset())*t,v=this-g,b=function(){return S.m(h,g)};switch(C){case s:f=b()/12;break;case u:f=b();break;case d:f=b()/3;break;case l:f=(v-N)/6048e5;break;case c:f=(v-N)/864e5;break;case i:f=v/n;break;case a:f=v/t;break;case r:f=v/e;break;default:f=v}return m?f:S.a(f)},g.daysInMonth=function(){return this.endOf(u).$D},g.$locale=function(){return b[this.$L]},g.locale=function(e,t){if(!e)return this.$L;var n=this.clone(),o=x(e,t,!0);return o&&(n.$L=o),n},g.clone=function(){return S.w(this.$d,this)},g.toDate=function(){return new Date(this.valueOf())},g.toJSON=function(){return this.isValid()?this.toISOString():null},g.toISOString=function(){return this.$d.toISOString()},g.toString=function(){return this.$d.toUTCString()},C}(),w=I.prototype;return k.prototype=w,[["$ms",o],["$s",r],["$m",a],["$H",i],["$W",c],["$M",u],["$y",s],["$D",p]].forEach((function(e){w[e[1]]=function(t){return this.$g(t,e[0],e[1])}})),k.extend=function(e,t){return e.$i||(e(t,I,k),e.$i=!0),k},k.locale=x,k.isDayjs=y,k.unix=function(e){return k(1e3*e)},k.en=b[v],k.Ls=b,k.p={},k}()},50282:function(e){"use strict";var t,n,o,r,a,i,c,l,u,d,s,p,m,f,h,C,g,N,v,b;e.exports=(c=/\[([^\]]+)]|Y{1,4}|M{1,4}|D{1,2}|d{1,4}|H{1,2}|h{1,2}|a|A|m{1,2}|s{1,2}|Z{1,2}|SSS/g,d=/^(-|\+)?P(?:([-+]?[0-9,.]*)Y)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)W)?(?:([-+]?[0-9,.]*)D)?(?:T(?:([-+]?[0-9,.]*)H)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)S)?)?$/,s={years:l=31536e6,months:u=2628e6,days:i=864e5,hours:a=36e5,minutes:r=6e4,seconds:o=1e3,milliseconds:1,weeks:6048e5},p=function(e){return e instanceof v},m=function(e,t,n){return new v(e,n,t.$l)},f=function(e){return n.p(e)+"s"},h=function(e){return e<0},C=function(e){return h(e)?Math.ceil(e):Math.floor(e)},g=function(e){return Math.abs(e)},N=function(e,t){return e?h(e)?{negative:!0,format:""+g(e)+t}:{negative:!1,format:""+e+t}:{negative:!1,format:""}},v=function(){function e(e,t,n){var o=this;if(this.$d={},this.$l=n,void 0===e&&(this.$ms=0,this.parseFromMilliseconds()),t)return m(e*s[f(t)],this);if("number"==typeof e)return this.$ms=e,this.parseFromMilliseconds(),this;if("object"==typeof e)return Object.keys(e).forEach((function(t){o.$d[f(t)]=e[t]})),this.calMilliseconds(),this;if("string"==typeof e){var r=e.match(d);if(r){var a=r.slice(2).map((function(e){return null!=e?Number(e):0}));return this.$d.years=a[0],this.$d.months=a[1],this.$d.weeks=a[2],this.$d.days=a[3],this.$d.hours=a[4],this.$d.minutes=a[5],this.$d.seconds=a[6],this.calMilliseconds(),this}}return this}var h=e.prototype;return h.calMilliseconds=function(){var e=this;this.$ms=Object.keys(this.$d).reduce((function(t,n){return t+(e.$d[n]||0)*s[n]}),0)},h.parseFromMilliseconds=function(){var e=this.$ms;this.$d.years=C(e/l),e%=l,this.$d.months=C(e/u),e%=u,this.$d.days=C(e/i),e%=i,this.$d.hours=C(e/a),e%=a,this.$d.minutes=C(e/r),e%=r,this.$d.seconds=C(e/o),e%=o,this.$d.milliseconds=e},h.toISOString=function(){var e=N(this.$d.years,"Y"),t=N(this.$d.months,"M"),n=+this.$d.days||0;this.$d.weeks&&(n+=7*this.$d.weeks);var o=N(n,"D"),r=N(this.$d.hours,"H"),a=N(this.$d.minutes,"M"),i=this.$d.seconds||0;this.$d.milliseconds&&(i+=this.$d.milliseconds/1e3,i=Math.round(1e3*i)/1e3);var c=N(i,"S"),l=e.negative||t.negative||o.negative||r.negative||a.negative||c.negative,u=r.format||a.format||c.format?"T":"",d=(l?"-":"")+"P"+e.format+t.format+o.format+u+r.format+a.format+c.format;return"P"===d||"-P"===d?"P0D":d},h.toJSON=function(){return this.toISOString()},h.format=function(e){var t=e||"YYYY-MM-DDTHH:mm:ss",o={Y:this.$d.years,YY:n.s(this.$d.years,2,"0"),YYYY:n.s(this.$d.years,4,"0"),M:this.$d.months,MM:n.s(this.$d.months,2,"0"),D:this.$d.days,DD:n.s(this.$d.days,2,"0"),H:this.$d.hours,HH:n.s(this.$d.hours,2,"0"),m:this.$d.minutes,mm:n.s(this.$d.minutes,2,"0"),s:this.$d.seconds,ss:n.s(this.$d.seconds,2,"0"),SSS:n.s(this.$d.milliseconds,3,"0")};return t.replace(c,(function(e,t){return t||String(o[e])}))},h.as=function(e){return this.$ms/s[f(e)]},h.get=function(e){var t=this.$ms,n=f(e);return"milliseconds"===n?t%=1e3:t="weeks"===n?C(t/s[n]):this.$d[n],t||0},h.add=function(e,t,n){var o;return o=t?e*s[f(t)]:p(e)?e.$ms:m(e,this).$ms,m(this.$ms+o*(n?-1:1),this)},h.subtract=function(e,t){return this.add(e,t,!0)},h.locale=function(e){var t=this.clone();return t.$l=e,t},h.clone=function(){return m(this.$ms,this)},h.humanize=function(e){return t().add(this.$ms,"ms").locale(this.$l).fromNow(!e)},h.valueOf=function(){return this.asMilliseconds()},h.milliseconds=function(){return this.get("milliseconds")},h.asMilliseconds=function(){return this.as("milliseconds")},h.seconds=function(){return this.get("seconds")},h.asSeconds=function(){return this.as("seconds")},h.minutes=function(){return this.get("minutes")},h.asMinutes=function(){return this.as("minutes")},h.hours=function(){return this.get("hours")},h.asHours=function(){return this.as("hours")},h.days=function(){return this.get("days")},h.asDays=function(){return this.as("days")},h.weeks=function(){return this.get("weeks")},h.asWeeks=function(){return this.as("weeks")},h.months=function(){return this.get("months")},h.asMonths=function(){return this.as("months")},h.years=function(){return this.get("years")},h.asYears=function(){return this.as("years")},e}(),b=function(e,t,n){return e.add(t.years()*n,"y").add(t.months()*n,"M").add(t.days()*n,"d").add(t.hours()*n,"h").add(t.minutes()*n,"m").add(t.seconds()*n,"s").add(t.milliseconds()*n,"ms")},function(e,o,r){t=r,n=r().$utils(),r.duration=function(e,t){var n=r.locale();return m(e,{$l:n},t)},r.isDuration=p;var a=o.prototype.add,i=o.prototype.subtract;o.prototype.add=function(e,t){return p(e)?b(this,e,1):a.bind(this)(e,t)},o.prototype.subtract=function(e,t){return p(e)?b(this,e,-1):i.bind(this)(e,t)}})},78978:function(e){"use strict";e.exports=function(e,t,n){e=e||{};var o=t.prototype,r={future:"in %s",past:"%s ago",s:"a few seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"};function a(e,t,n,r){return o.fromToBase(e,t,n,r)}n.en.relativeTime=r,o.fromToBase=function(t,o,a,i,c){for(var l,u,d,s=a.$locale().relativeTime||r,p=e.thresholds||[{l:"s",r:44,d:"second"},{l:"m",r:89},{l:"mm",r:44,d:"minute"},{l:"h",r:89},{l:"hh",r:21,d:"hour"},{l:"d",r:35},{l:"dd",r:25,d:"day"},{l:"M",r:45},{l:"MM",r:10,d:"month"},{l:"y",r:17},{l:"yy",d:"year"}],m=p.length,f=0;f<m;f+=1){var h=p[f];h.d&&(l=i?n(t).diff(a,h.d,!0):a.diff(t,h.d,!0));var C=(e.rounding||Math.round)(Math.abs(l));if(d=l>0,C<=h.r||!h.r){C<=1&&f>0&&(h=p[f-1]);var g=s[h.l];c&&(C=c(""+C)),u="string"==typeof g?g.replace("%d",C):g(C,o,h.l,d);break}}if(o)return u;var N=d?s.future:s.past;return"function"==typeof N?N(u):N.replace("%s",u)},o.to=function(e,t){return a(e,t,this,!0)},o.from=function(e,t){return a(e,t,this)};var i=function(e){return e.$u?n.utc():n()};o.toNow=function(e){return this.to(i(this),e)},o.fromNow=function(e){return this.from(i(this),e)}}},42950:function(e){"use strict";e.exports=function(){function e(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t<e.length;t++)n[t]=e[t];return n}return Array.from(e)}var t=Object.hasOwnProperty,n=Object.setPrototypeOf,o=Object.isFrozen,r=Object.getPrototypeOf,a=Object.getOwnPropertyDescriptor,i=Object.freeze,c=Object.seal,l=Object.create,u="undefined"!=typeof Reflect&&Reflect,d=u.apply,s=u.construct;d||(d=function(){function e(e,t,n){return e.apply(t,n)}return e}()),i||(i=function(){function e(e){return e}return e}()),c||(c=function(){function e(e){return e}return e}()),s||(s=function(){function t(t,n){return new(Function.prototype.bind.apply(t,[null].concat(e(n))))}return t}());var p=y(Array.prototype.forEach),m=y(Array.prototype.pop),f=y(Array.prototype.push),h=y(String.prototype.toLowerCase),C=y(String.prototype.match),g=y(String.prototype.replace),N=y(String.prototype.indexOf),v=y(String.prototype.trim),b=y(RegExp.prototype.test),V=x(TypeError);function y(e){return function(t){for(var n=arguments.length,o=Array(n>1?n-1:0),r=1;r<n;r++)o[r-1]=arguments[r];return d(e,t,o)}}function x(e){return function(){for(var t=arguments.length,n=Array(t),o=0;o<t;o++)n[o]=arguments[o];return s(e,n)}}function k(e,t){n&&n(e,null);for(var r=t.length;r--;){var a=t[r];if("string"==typeof a){var i=h(a);i!==a&&(o(t)||(t[r]=i),a=i)}e[a]=!0}return e}function S(e){var n=l(null),o=void 0;for(o in e)d(t,e,[o])&&(n[o]=e[o]);return n}function I(e,t){for(;null!==e;){var n=a(e,t);if(n){if(n.get)return y(n.get);if("function"==typeof n.value)return y(n.value)}e=r(e)}function o(e){return null}return o}var w=i(["a","abbr","acronym","address","area","article","aside","audio","b","bdi","bdo","big","blink","blockquote","body","br","button","canvas","caption","center","cite","code","col","colgroup","content","data","datalist","dd","decorator","del","details","dfn","dialog","dir","div","dl","dt","element","em","fieldset","figcaption","figure","font","footer","form","h1","h2","h3","h4","h5","h6","head","header","hgroup","hr","html","i","img","input","ins","kbd","label","legend","li","main","map","mark","marquee","menu","menuitem","meter","nav","nobr","ol","optgroup","option","output","p","picture","pre","progress","q","rp","rt","ruby","s","samp","section","select","shadow","small","source","spacer","span","strike","strong","style","sub","summary","sup","table","tbody","td","template","textarea","tfoot","th","thead","time","tr","track","tt","u","ul","var","video","wbr"]),_=i(["svg","a","altglyph","altglyphdef","altglyphitem","animatecolor","animatemotion","animatetransform","circle","clippath","defs","desc","ellipse","filter","font","g","glyph","glyphref","hkern","image","line","lineargradient","marker","mask","metadata","mpath","path","pattern","polygon","polyline","radialgradient","rect","stop","style","switch","symbol","text","textpath","title","tref","tspan","view","vkern"]),D=i(["feBlend","feColorMatrix","feComponentTransfer","feComposite","feConvolveMatrix","feDiffuseLighting","feDisplacementMap","feDistantLight","feFlood","feFuncA","feFuncB","feFuncG","feFuncR","feGaussianBlur","feMerge","feMergeNode","feMorphology","feOffset","fePointLight","feSpecularLighting","feSpotLight","feTile","feTurbulence"]),M=i(["animate","color-profile","cursor","discard","fedropshadow","feimage","font-face","font-face-format","font-face-name","font-face-src","font-face-uri","foreignobject","hatch","hatchpath","mesh","meshgradient","meshpatch","meshrow","missing-glyph","script","set","solidcolor","unknown","use"]),B=i(["math","menclose","merror","mfenced","mfrac","mglyph","mi","mlabeledtr","mmultiscripts","mn","mo","mover","mpadded","mphantom","mroot","mrow","ms","mspace","msqrt","mstyle","msub","msup","msubsup","mtable","mtd","mtext","mtr","munder","munderover"]),A=i(["maction","maligngroup","malignmark","mlongdiv","mscarries","mscarry","msgroup","mstack","msline","msrow","semantics","annotation","annotation-xml","mprescripts","none"]),T=i(["#text"]),L=i(["accept","action","align","alt","autocapitalize","autocomplete","autopictureinpicture","autoplay","background","bgcolor","border","capture","cellpadding","cellspacing","checked","cite","class","clear","color","cols","colspan","controls","controlslist","coords","crossorigin","datetime","decoding","default","dir","disabled","disablepictureinpicture","disableremoteplayback","download","draggable","enctype","enterkeyhint","face","for","headers","height","hidden","high","href","hreflang","id","inputmode","integrity","ismap","kind","label","lang","list","loading","loop","low","max","maxlength","media","method","min","minlength","multiple","muted","name","noshade","novalidate","nowrap","open","optimum","pattern","placeholder","playsinline","poster","preload","pubdate","radiogroup","readonly","rel","required","rev","reversed","role","rows","rowspan","spellcheck","scope","selected","shape","size","sizes","span","srclang","start","src","srcset","step","style","summary","tabindex","title","translate","type","usemap","valign","value","width","xmlns","slot"]),E=i(["accent-height","accumulate","additive","alignment-baseline","ascent","attributename","attributetype","azimuth","basefrequency","baseline-shift","begin","bias","by","class","clip","clippathunits","clip-path","clip-rule","color","color-interpolation","color-interpolation-filters","color-profile","color-rendering","cx","cy","d","dx","dy","diffuseconstant","direction","display","divisor","dur","edgemode","elevation","end","fill","fill-opacity","fill-rule","filter","filterunits","flood-color","flood-opacity","font-family","font-size","font-size-adjust","font-stretch","font-style","font-variant","font-weight","fx","fy","g1","g2","glyph-name","glyphref","gradientunits","gradienttransform","height","href","id","image-rendering","in","in2","k","k1","k2","k3","k4","kerning","keypoints","keysplines","keytimes","lang","lengthadjust","letter-spacing","kernelmatrix","kernelunitlength","lighting-color","local","marker-end","marker-mid","marker-start","markerheight","markerunits","markerwidth","maskcontentunits","maskunits","max","mask","media","method","mode","min","name","numoctaves","offset","operator","opacity","order","orient","orientation","origin","overflow","paint-order","path","pathlength","patterncontentunits","patterntransform","patternunits","points","preservealpha","preserveaspectratio","primitiveunits","r","rx","ry","radius","refx","refy","repeatcount","repeatdur","restart","result","rotate","scale","seed","shape-rendering","specularconstant","specularexponent","spreadmethod","startoffset","stddeviation","stitchtiles","stop-color","stop-opacity","stroke-dasharray","stroke-dashoffset","stroke-linecap","stroke-linejoin","stroke-miterlimit","stroke-opacity","stroke","stroke-width","style","surfacescale","systemlanguage","tabindex","targetx","targety","transform","text-anchor","text-decoration","text-rendering","textlength","type","u1","u2","unicode","values","viewbox","visibility","version","vert-adv-y","vert-origin-x","vert-origin-y","width","word-spacing","wrap","writing-mode","xchannelselector","ychannelselector","x","x1","x2","xmlns","y","y1","y2","z","zoomandpan"]),P=i(["accent","accentunder","align","bevelled","close","columnsalign","columnlines","columnspan","denomalign","depth","dir","display","displaystyle","encoding","fence","frame","height","href","id","largeop","length","linethickness","lspace","lquote","mathbackground","mathcolor","mathsize","mathvariant","maxsize","minsize","movablelimits","notation","numalign","open","rowalign","rowlines","rowspacing","rowspan","rspace","rquote","scriptlevel","scriptminsize","scriptsizemultiplier","selection","separator","separators","stretchy","subscriptshift","supscriptshift","symmetric","voffset","width","xmlns"]),j=i(["xlink:href","xml:id","xlink:title","xml:space","xmlns:xlink"]),O=c(/\{\{[\s\S]*|[\s\S]*\}\}/gm),F=c(/<%[\s\S]*|[\s\S]*%>/gm),R=c(/^data-[\-\w.\u00B7-\uFFFF]/),z=c(/^aria-[\-\w]+$/),W=c(/^(?:(?:(?:f|ht)tps?|mailto|tel|callto|cid|xmpp):|[^a-z]|[a-z+.\-]+(?:[^a-z+.\-:]|$))/i),U=c(/^(?:\w+script|data):/i),H=c(/[\u0000-\u0020\u00A0\u1680\u180E\u2000-\u2029\u205F\u3000]/g),G="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e};function Y(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t<e.length;t++)n[t]=e[t];return n}return Array.from(e)}var Z=function(){function e(){return"undefined"==typeof window?null:window}return e}(),K=function(){function e(e,t){if("object"!==(void 0===e?"undefined":G(e))||"function"!=typeof e.createPolicy)return null;var n=null,o="data-tt-policy-suffix";t.currentScript&&t.currentScript.hasAttribute(o)&&(n=t.currentScript.getAttribute(o));var r="dompurify"+(n?"#"+n:"");try{return e.createPolicy(r,{createHTML:function(){function e(e){return e}return e}()})}catch(a){return null}}return e}();function Q(){var e=arguments.length>0&&arguments[0]!==undefined?arguments[0]:Z(),t=function(){function e(e){return Q(e)}return e}();if(t.version="2.3.1",t.removed=[],!e||!e.document||9!==e.document.nodeType)return t.isSupported=!1,t;var n=e.document,o=e.document,r=e.DocumentFragment,a=e.HTMLTemplateElement,c=e.Node,l=e.Element,u=e.NodeFilter,d=e.NamedNodeMap,s=d===undefined?e.NamedNodeMap||e.MozNamedAttrMap:d,y=e.Text,x=e.Comment,$=e.DOMParser,J=e.trustedTypes,X=l.prototype,q=I(X,"cloneNode"),ee=I(X,"nextSibling"),te=I(X,"childNodes"),ne=I(X,"parentNode");if("function"==typeof a){var oe=o.createElement("template");oe.content&&oe.content.ownerDocument&&(o=oe.content.ownerDocument)}var re=K(J,n),ae=re&&je?re.createHTML(""):"",ie=o,ce=ie.implementation,le=ie.createNodeIterator,ue=ie.createDocumentFragment,de=ie.getElementsByTagName,se=n.importNode,pe={};try{pe=S(o).documentMode?o.documentMode:{}}catch(Nt){}var me={};t.isSupported="function"==typeof ne&&ce&&"undefined"!=typeof ce.createHTMLDocument&&9!==pe;var fe=O,he=F,Ce=R,ge=z,Ne=U,ve=H,be=W,Ve=null,ye=k({},[].concat(Y(w),Y(_),Y(D),Y(B),Y(T))),xe=null,ke=k({},[].concat(Y(L),Y(E),Y(P),Y(j))),Se=null,Ie=null,we=!0,_e=!0,De=!1,Me=!1,Be=!1,Ae=!1,Te=!1,Le=!1,Ee=!1,Pe=!0,je=!1,Oe=!0,Fe=!0,Re=!1,ze={},We=null,Ue=k({},["annotation-xml","audio","colgroup","desc","foreignobject","head","iframe","math","mi","mn","mo","ms","mtext","noembed","noframes","noscript","plaintext","script","style","svg","template","thead","title","video","xmp"]),He=null,Ge=k({},["audio","video","img","source","image","track"]),Ye=null,Ze=k({},["alt","class","for","id","label","name","pattern","placeholder","role","summary","title","value","style","xmlns"]),Ke="http://www.w3.org/1998/Math/MathML",Qe="http://www.w3.org/2000/svg",$e="http://www.w3.org/1999/xhtml",Je=$e,Xe=!1,qe=null,et=o.createElement("form"),tt=function(){function e(e){qe&&qe===e||(e&&"object"===(void 0===e?"undefined":G(e))||(e={}),e=S(e),Ve="ALLOWED_TAGS"in e?k({},e.ALLOWED_TAGS):ye,xe="ALLOWED_ATTR"in e?k({},e.ALLOWED_ATTR):ke,Ye="ADD_URI_SAFE_ATTR"in e?k(S(Ze),e.ADD_URI_SAFE_ATTR):Ze,He="ADD_DATA_URI_TAGS"in e?k(S(Ge),e.ADD_DATA_URI_TAGS):Ge,We="FORBID_CONTENTS"in e?k({},e.FORBID_CONTENTS):Ue,Se="FORBID_TAGS"in e?k({},e.FORBID_TAGS):{},Ie="FORBID_ATTR"in e?k({},e.FORBID_ATTR):{},ze="USE_PROFILES"in e&&e.USE_PROFILES,we=!1!==e.ALLOW_ARIA_ATTR,_e=!1!==e.ALLOW_DATA_ATTR,De=e.ALLOW_UNKNOWN_PROTOCOLS||!1,Me=e.SAFE_FOR_TEMPLATES||!1,Be=e.WHOLE_DOCUMENT||!1,Le=e.RETURN_DOM||!1,Ee=e.RETURN_DOM_FRAGMENT||!1,Pe=!1!==e.RETURN_DOM_IMPORT,je=e.RETURN_TRUSTED_TYPE||!1,Te=e.FORCE_BODY||!1,Oe=!1!==e.SANITIZE_DOM,Fe=!1!==e.KEEP_CONTENT,Re=e.IN_PLACE||!1,be=e.ALLOWED_URI_REGEXP||be,Je=e.NAMESPACE||$e,Me&&(_e=!1),Ee&&(Le=!0),ze&&(Ve=k({},[].concat(Y(T))),xe=[],!0===ze.html&&(k(Ve,w),k(xe,L)),!0===ze.svg&&(k(Ve,_),k(xe,E),k(xe,j)),!0===ze.svgFilters&&(k(Ve,D),k(xe,E),k(xe,j)),!0===ze.mathMl&&(k(Ve,B),k(xe,P),k(xe,j))),e.ADD_TAGS&&(Ve===ye&&(Ve=S(Ve)),k(Ve,e.ADD_TAGS)),e.ADD_ATTR&&(xe===ke&&(xe=S(xe)),k(xe,e.ADD_ATTR)),e.ADD_URI_SAFE_ATTR&&k(Ye,e.ADD_URI_SAFE_ATTR),e.FORBID_CONTENTS&&(We===Ue&&(We=S(We)),k(We,e.FORBID_CONTENTS)),Fe&&(Ve["#text"]=!0),Be&&k(Ve,["html","head","body"]),Ve.table&&(k(Ve,["tbody"]),delete Se.tbody),i&&i(e),qe=e)}return e}(),nt=k({},["mi","mo","mn","ms","mtext"]),ot=k({},["foreignobject","desc","title","annotation-xml"]),rt=k({},_);k(rt,D),k(rt,M);var at=k({},B);k(at,A);var it=function(){function e(e){var t=ne(e);t&&t.tagName||(t={namespaceURI:$e,tagName:"template"});var n=h(e.tagName),o=h(t.tagName);if(e.namespaceURI===Qe)return t.namespaceURI===$e?"svg"===n:t.namespaceURI===Ke?"svg"===n&&("annotation-xml"===o||nt[o]):Boolean(rt[n]);if(e.namespaceURI===Ke)return t.namespaceURI===$e?"math"===n:t.namespaceURI===Qe?"math"===n&&ot[o]:Boolean(at[n]);if(e.namespaceURI===$e){if(t.namespaceURI===Qe&&!ot[o])return!1;if(t.namespaceURI===Ke&&!nt[o])return!1;var r=k({},["title","style","font","a","script"]);return!at[n]&&(r[n]||!rt[n])}return!1}return e}(),ct=function(){function e(e){f(t.removed,{element:e});try{e.parentNode.removeChild(e)}catch(Nt){try{e.outerHTML=ae}catch(Nt){e.remove()}}}return e}(),lt=function(){function e(e,n){try{f(t.removed,{attribute:n.getAttributeNode(e),from:n})}catch(Nt){f(t.removed,{attribute:null,from:n})}if(n.removeAttribute(e),"is"===e&&!xe[e])if(Le||Ee)try{ct(n)}catch(Nt){}else try{n.setAttribute(e,"")}catch(Nt){}}return e}(),ut=function(){function e(e){var t=void 0,n=void 0;if(Te)e="<remove></remove>"+e;else{var r=C(e,/^[\r\n\t ]+/);n=r&&r[0]}var a=re?re.createHTML(e):e;if(Je===$e)try{t=(new $).parseFromString(a,"text/html")}catch(Nt){}if(!t||!t.documentElement){t=ce.createDocument(Je,"template",null);try{t.documentElement.innerHTML=Xe?"":a}catch(Nt){}}var i=t.body||t.documentElement;return e&&n&&i.insertBefore(o.createTextNode(n),i.childNodes[0]||null),Je===$e?de.call(t,Be?"html":"body")[0]:Be?t.documentElement:i}return e}(),dt=function(){function e(e){return le.call(e.ownerDocument||e,e,u.SHOW_ELEMENT|u.SHOW_COMMENT|u.SHOW_TEXT,null,!1)}return e}(),st=function(){function e(e){return!(e instanceof y||e instanceof x||"string"==typeof e.nodeName&&"string"==typeof e.textContent&&"function"==typeof e.removeChild&&e.attributes instanceof s&&"function"==typeof e.removeAttribute&&"function"==typeof e.setAttribute&&"string"==typeof e.namespaceURI&&"function"==typeof e.insertBefore)}return e}(),pt=function(){function e(e){return"object"===(void 0===c?"undefined":G(c))?e instanceof c:e&&"object"===(void 0===e?"undefined":G(e))&&"number"==typeof e.nodeType&&"string"==typeof e.nodeName}return e}(),mt=function(){function e(e,n,o){me[e]&&p(me[e],(function(e){e.call(t,n,o,qe)}))}return e}(),ft=function(){function e(e){var n=void 0;if(mt("beforeSanitizeElements",e,null),st(e))return ct(e),!0;if(C(e.nodeName,/[\u0080-\uFFFF]/))return ct(e),!0;var o=h(e.nodeName);if(mt("uponSanitizeElement",e,{tagName:o,allowedTags:Ve}),!pt(e.firstElementChild)&&(!pt(e.content)||!pt(e.content.firstElementChild))&&b(/<[/\w]/g,e.innerHTML)&&b(/<[/\w]/g,e.textContent))return ct(e),!0;if("select"===o&&b(/<template/i,e.innerHTML))return ct(e),!0;if(!Ve[o]||Se[o]){if(Fe&&!We[o]){var r=ne(e)||e.parentNode,a=te(e)||e.childNodes;if(a&&r)for(var i=a.length-1;i>=0;--i)r.insertBefore(q(a[i],!0),ee(e))}return ct(e),!0}return e instanceof l&&!it(e)?(ct(e),!0):"noscript"!==o&&"noembed"!==o||!b(/<\/no(script|embed)/i,e.innerHTML)?(Me&&3===e.nodeType&&(n=e.textContent,n=g(n,fe," "),n=g(n,he," "),e.textContent!==n&&(f(t.removed,{element:e.cloneNode()}),e.textContent=n)),mt("afterSanitizeElements",e,null),!1):(ct(e),!0)}return e}(),ht=function(){function e(e,t,n){if(Oe&&("id"===t||"name"===t)&&(n in o||n in et))return!1;if(_e&&!Ie[t]&&b(Ce,t));else if(we&&b(ge,t));else{if(!xe[t]||Ie[t])return!1;if(Ye[t]);else if(b(be,g(n,ve,"")));else if("src"!==t&&"xlink:href"!==t&&"href"!==t||"script"===e||0!==N(n,"data:")||!He[e])if(De&&!b(Ne,g(n,ve,"")));else if(n)return!1}return!0}return e}(),Ct=function(){function e(e){var n=void 0,o=void 0,r=void 0,a=void 0;mt("beforeSanitizeAttributes",e,null);var i=e.attributes;if(i){var c={attrName:"",attrValue:"",keepAttr:!0,allowedAttributes:xe};for(a=i.length;a--;){var l=n=i[a],u=l.name,d=l.namespaceURI;if(o=v(n.value),r=h(u),c.attrName=r,c.attrValue=o,c.keepAttr=!0,c.forceKeepAttr=undefined,mt("uponSanitizeAttribute",e,c),o=c.attrValue,!c.forceKeepAttr&&(lt(u,e),c.keepAttr))if(b(/\/>/i,o))lt(u,e);else{Me&&(o=g(o,fe," "),o=g(o,he," "));var s=e.nodeName.toLowerCase();if(ht(s,r,o))try{d?e.setAttributeNS(d,u,o):e.setAttribute(u,o),m(t.removed)}catch(Nt){}}}mt("afterSanitizeAttributes",e,null)}}return e}(),gt=function(){function e(t){var n=void 0,o=dt(t);for(mt("beforeSanitizeShadowDOM",t,null);n=o.nextNode();)mt("uponSanitizeShadowNode",n,null),ft(n)||(n.content instanceof r&&e(n.content),Ct(n));mt("afterSanitizeShadowDOM",t,null)}return e}();return t.sanitize=function(o,a){var i=void 0,l=void 0,u=void 0,d=void 0,s=void 0;if((Xe=!o)&&(o="\x3c!--\x3e"),"string"!=typeof o&&!pt(o)){if("function"!=typeof o.toString)throw V("toString is not a function");if("string"!=typeof(o=o.toString()))throw V("dirty is not a string, aborting")}if(!t.isSupported){if("object"===G(e.toStaticHTML)||"function"==typeof e.toStaticHTML){if("string"==typeof o)return e.toStaticHTML(o);if(pt(o))return e.toStaticHTML(o.outerHTML)}return o}if(Ae||tt(a),t.removed=[],"string"==typeof o&&(Re=!1),Re);else if(o instanceof c)1===(l=(i=ut("\x3c!----\x3e")).ownerDocument.importNode(o,!0)).nodeType&&"BODY"===l.nodeName||"HTML"===l.nodeName?i=l:i.appendChild(l);else{if(!Le&&!Me&&!Be&&-1===o.indexOf("<"))return re&&je?re.createHTML(o):o;if(!(i=ut(o)))return Le?null:ae}i&&Te&&ct(i.firstChild);for(var p=dt(Re?o:i);u=p.nextNode();)3===u.nodeType&&u===d||ft(u)||(u.content instanceof r&>(u.content),Ct(u),d=u);if(d=null,Re)return o;if(Le){if(Ee)for(s=ue.call(i.ownerDocument);i.firstChild;)s.appendChild(i.firstChild);else s=i;return Pe&&(s=se.call(n,s,!0)),s}var m=Be?i.outerHTML:i.innerHTML;return Me&&(m=g(m,fe," "),m=g(m,he," ")),re&&je?re.createHTML(m):m},t.setConfig=function(e){tt(e),Ae=!0},t.clearConfig=function(){qe=null,Ae=!1},t.isValidAttribute=function(e,t,n){qe||tt({});var o=h(e),r=h(t);return ht(o,r,n)},t.addHook=function(e,t){"function"==typeof t&&(me[e]=me[e]||[],f(me[e],t))},t.removeHook=function(e){me[e]&&m(me[e])},t.removeHooks=function(e){me[e]&&(me[e]=[])},t.removeAllHooks=function(){me={}},t}return Q()}()},92376:function(e,t){"use strict";t.__esModule=!0,t._CI=De,t._HI=O,t._M=Be,t._MCCC=Ee,t._ME=Te,t._MFCC=Pe,t._MP=we,t._MR=ve,t._RFC=Me,t.__render=ze,t.createComponentVNode=function(e,t,n,o,a){var i=new M(1,null,null,e=function(e,t){if(12&e)return e;if(t.prototype&&t.prototype.render)return 4;if(t.render)return 32776;return 8}(e,t),o,function(e,t,n){var o=(32768&e?t.render:t).defaultProps;if(r(o))return n;if(r(n))return u(o,null);return w(n,o)}(e,t,n),function(e,t,n){if(4&e)return n;var o=(32768&e?t.render:t).defaultHooks;if(r(o))return n;if(r(n))return o;return w(n,o)}(e,t,a),t);k.createVNode&&k.createVNode(i);return i},t.createFragment=T,t.createPortal=function(e,t){var n=O(e);return B(1024,1024,null,n,0,null,n.key,t)},t.createRef=function(){return{current:null}},t.createRenderer=function(e){return function(t,n,o,r){e||(e=t),We(n,e,o,r)}},t.createTextVNode=A,t.createVNode=B,t.directClone=L,t.findDOMfromVNode=v,t.forwardRef=function(e){return{render:e}},t.getFlagsForElementVnode=function(e){switch(e){case"svg":return 32;case"input":return 64;case"select":return 256;case"textarea":return 128;case p:return 8192;default:return 1}},t.linkEvent=function(e,t){if(i(t))return{data:e,event:t};return null},t.normalizeProps=function(e){var t=e.props;if(t){var n=e.flags;481&n&&(void 0!==t.children&&r(e.children)&&j(e,t.children),void 0!==t.className&&(e.className=t.className||null,t.className=undefined)),void 0!==t.key&&(e.key=t.key,t.key=undefined),void 0!==t.ref&&(e.ref=8&n?u(e.ref,t.ref):t.ref,t.ref=undefined)}return e},t.render=We,t.rerender=Ke,t.version=t.options=t.Fragment=t.EMPTY_OBJ=t.Component=void 0;var n=Array.isArray;function o(e){var t=typeof e;return"string"===t||"number"===t}function r(e){return null==e}function a(e){return null===e||!1===e||!0===e||void 0===e}function i(e){return"function"==typeof e}function c(e){return"string"==typeof e}function l(e){return null===e}function u(e,t){var n={};if(e)for(var o in e)n[o]=e[o];if(t)for(var r in t)n[r]=t[r];return n}function d(e){return!l(e)&&"object"==typeof e}var s={};t.EMPTY_OBJ=s;var p="$F";function m(e){return e.substr(2).toLowerCase()}function f(e,t){e.appendChild(t)}function h(e,t,n){l(n)?f(e,t):e.insertBefore(t,n)}function C(e,t){e.removeChild(t)}function g(e){for(var t=0;t<e.length;t++)e[t]()}function N(e,t,n){var o=e.children;return 4&n?o.$LI:8192&n?2===e.childFlags?o:o[t?0:o.length-1]:o}function v(e,t){for(var n;e;){if(2033&(n=e.flags))return e.dom;e=N(e,t,n)}return null}function b(e,t){do{var n=e.flags;if(2033&n)return void C(t,e.dom);var o=e.children;if(4&n&&(e=o.$LI),8&n&&(e=o),8192&n){if(2!==e.childFlags){for(var r=0,a=o.length;r<a;++r)b(o[r],t);return}e=o}}while(e)}function V(e,t,n){do{var o=e.flags;if(2033&o)return void h(t,e.dom,n);var r=e.children;if(4&o&&(e=r.$LI),8&o&&(e=r),8192&o){if(2!==e.childFlags){for(var a=0,i=r.length;a<i;++a)V(r[a],t,n);return}e=r}}while(e)}function y(e,t,n){return e.constructor.getDerivedStateFromProps?u(n,e.constructor.getDerivedStateFromProps(t,n)):n}t.Fragment=p;var x={v:!1},k={componentComparator:null,createVNode:null,renderComplete:null};function S(e,t){e.textContent=t}function I(e,t){return d(e)&&e.event===t.event&&e.data===t.data}function w(e,t){for(var n in t)void 0===e[n]&&(e[n]=t[n]);return e}function _(e,t){return!!i(e)&&(e(t),!0)}t.options=k;var D="$";function M(e,t,n,o,r,a,i,c){this.childFlags=e,this.children=t,this.className=n,this.dom=null,this.flags=o,this.key=void 0===r?null:r,this.props=void 0===a?null:a,this.ref=void 0===i?null:i,this.type=c}function B(e,t,n,o,r,a,i,c){var l=void 0===r?1:r,u=new M(l,o,n,e,i,a,c,t);return k.createVNode&&k.createVNode(u),0===l&&j(u,u.children),u}function A(e,t){return new M(1,r(e)||!0===e||!1===e?"":e,null,16,t,null,null,null)}function T(e,t,n){var o=B(8192,8192,null,e,t,null,n,null);switch(o.childFlags){case 1:o.children=E(),o.childFlags=2;break;case 16:o.children=[A(e)],o.childFlags=4}return o}function L(e){var t=-16385&e.flags,n=e.props;if(14&t&&!l(n)){var o=n;for(var r in n={},o)n[r]=o[r]}return 0==(8192&t)?new M(e.childFlags,e.children,e.className,t,e.key,n,e.ref,e.type):function(e){var t=e.children,n=e.childFlags;return T(2===n?L(t):t.map(L),n,e.key)}(e)}function E(){return A("",null)}function P(e,t,r,i){for(var u=e.length;r<u;r++){var d=e[r];if(!a(d)){var s=i+D+r;if(n(d))P(d,t,0,s);else{if(o(d))d=A(d,s);else{var p=d.key,m=c(p)&&p[0]===D;(81920&d.flags||m)&&(d=L(d)),d.flags|=65536,m?p.substring(0,i.length)!==i&&(d.key=i+p):l(p)?d.key=s:d.key=i+p}t.push(d)}}}}function j(e,t){var r,i=1;if(a(t))r=t;else if(o(t))i=16,r=t;else if(n(t)){for(var u=t.length,d=0;d<u;++d){var s=t[d];if(a(s)||n(s)){r=r||t.slice(0,d),P(t,r,d,"");break}if(o(s))(r=r||t.slice(0,d)).push(A(s,D+d));else{var p=s.key,m=(81920&s.flags)>0,f=l(p),h=c(p)&&p[0]===D;m||f||h?(r=r||t.slice(0,d),(m||h)&&(s=L(s)),(f||h)&&(s.key=D+d),r.push(s)):r&&r.push(s),s.flags|=65536}}i=0===(r=r||t).length?1:8}else(r=t).flags|=65536,81920&t.flags&&(r=L(t)),i=2;return e.children=r,e.childFlags=i,e}function O(e){return a(e)||o(e)?A(e,null):n(e)?T(e,0,null):16384&e.flags?L(e):e}var F="http://www.w3.org/1999/xlink",R="http://www.w3.org/XML/1998/namespace",z={"xlink:actuate":F,"xlink:arcrole":F,"xlink:href":F,"xlink:role":F,"xlink:show":F,"xlink:title":F,"xlink:type":F,"xml:base":R,"xml:lang":R,"xml:space":R};function W(e){return{onClick:e,onDblClick:e,onFocusIn:e,onFocusOut:e,onKeyDown:e,onKeyPress:e,onKeyUp:e,onMouseDown:e,onMouseMove:e,onMouseUp:e,onTouchEnd:e,onTouchMove:e,onTouchStart:e}}var U=W(0),H=W(null),G=W(!0);function Y(e,t){var n=t.$EV;return n||(n=t.$EV=W(null)),n[e]||1==++U[e]&&(H[e]=function(e){var t="onClick"===e||"onDblClick"===e?function(e){return function(t){0===t.button?K(t,!0,e,X(t)):t.stopPropagation()}}(e):function(e){return function(t){K(t,!1,e,X(t))}}(e);return document.addEventListener(m(e),t),t}(e)),n}function Z(e,t){var n=t.$EV;n&&n[e]&&(0==--U[e]&&(document.removeEventListener(m(e),H[e]),H[e]=null),n[e]=null)}function K(e,t,n,o){var r=function(e){return i(e.composedPath)?e.composedPath()[0]:e.target}(e);do{if(t&&r.disabled)return;var a=r.$EV;if(a){var c=a[n];if(c&&(o.dom=r,c.event?c.event(c.data,e):c(e),e.cancelBubble))return}r=r.parentNode}while(!l(r))}function Q(){this.cancelBubble=!0,this.immediatePropagationStopped||this.stopImmediatePropagation()}function $(){return this.defaultPrevented}function J(){return this.cancelBubble}function X(e){var t={dom:document};return e.isDefaultPrevented=$,e.isPropagationStopped=J,e.stopPropagation=Q,Object.defineProperty(e,"currentTarget",{configurable:!0,get:function(){return t.dom}}),t}function q(e,t,n){if(e[t]){var o=e[t];o.event?o.event(o.data,n):o(n)}else{var r=t.toLowerCase();e[r]&&e[r](n)}}function ee(e,t){var n=function(n){var o=this.$V;if(o){var r=o.props||s,a=o.dom;if(c(e))q(r,e,n);else for(var l=0;l<e.length;++l)q(r,e[l],n);if(i(t)){var u=this.$V,d=u.props||s;t(d,a,!1,u)}}};return Object.defineProperty(n,"wrapped",{configurable:!1,enumerable:!1,value:!0,writable:!1}),n}function te(e,t,n){var o="$"+t,r=e[o];if(r){if(r[1].wrapped)return;e.removeEventListener(r[0],r[1]),e[o]=null}i(n)&&(e.addEventListener(t,n),e[o]=[t,n])}function ne(e){return"checkbox"===e||"radio"===e}var oe=ee("onInput",ie),re=ee(["onClick","onChange"],ie);function ae(e){e.stopPropagation()}function ie(e,t){var n=e.type,o=e.value,a=e.checked,i=e.multiple,c=e.defaultValue,l=!r(o);n&&n!==t.type&&t.setAttribute("type",n),r(i)||i===t.multiple||(t.multiple=i),r(c)||l||(t.defaultValue=c+""),ne(n)?(l&&(t.value=o),r(a)||(t.checked=a)):l&&t.value!==o?(t.defaultValue=o,t.value=o):r(a)||(t.checked=a)}function ce(e,t){if("option"===e.type)!function(e,t){var o=e.props||s,a=e.dom;a.value=o.value,o.value===t||n(t)&&-1!==t.indexOf(o.value)?a.selected=!0:r(t)&&r(o.selected)||(a.selected=o.selected||!1)}(e,t);else{var o=e.children,a=e.flags;if(4&a)ce(o.$LI,t);else if(8&a)ce(o,t);else if(2===e.childFlags)ce(o,t);else if(12&e.childFlags)for(var i=0,c=o.length;i<c;++i)ce(o[i],t)}}ae.wrapped=!0;var le=ee("onChange",ue);function ue(e,t,n,o){var a=Boolean(e.multiple);r(e.multiple)||a===t.multiple||(t.multiple=a);var i=e.selectedIndex;if(-1===i&&(t.selectedIndex=-1),1!==o.childFlags){var c=e.value;"number"==typeof i&&i>-1&&t.options[i]&&(c=t.options[i].value),n&&r(c)&&(c=e.defaultValue),ce(o,c)}}var de,se,pe=ee("onInput",fe),me=ee("onChange");function fe(e,t,n){var o=e.value,a=t.value;if(r(o)){if(n){var i=e.defaultValue;r(i)||i===a||(t.defaultValue=i,t.value=i)}}else a!==o&&(t.defaultValue=o,t.value=o)}function he(e,t,n,o,r,a){64&e?ie(o,n):256&e?ue(o,n,r,t):128&e&&fe(o,n,r),a&&(n.$V=t)}function Ce(e,t,n){64&e?function(e,t){ne(t.type)?(te(e,"change",re),te(e,"click",ae)):te(e,"input",oe)}(t,n):256&e?function(e){te(e,"change",le)}(t):128&e&&function(e,t){te(e,"input",pe),t.onChange&&te(e,"change",me)}(t,n)}function ge(e){return e.type&&ne(e.type)?!r(e.checked):!r(e.value)}function Ne(e){e&&!_(e,null)&&e.current&&(e.current=null)}function ve(e,t,n){e&&(i(e)||void 0!==e.current)&&n.push((function(){_(e,t)||void 0===e.current||(e.current=t)}))}function be(e,t){Ve(e),b(e,t)}function Ve(e){var t,n=e.flags,o=e.children;if(481&n){t=e.ref;var a=e.props;Ne(t);var c=e.childFlags;if(!l(a))for(var u=Object.keys(a),d=0,p=u.length;d<p;d++){var m=u[d];G[m]&&Z(m,e.dom)}12&c?ye(o):2===c&&Ve(o)}else o&&(4&n?(i(o.componentWillUnmount)&&o.componentWillUnmount(),Ne(e.ref),o.$UN=!0,Ve(o.$LI)):8&n?(!r(t=e.ref)&&i(t.onComponentWillUnmount)&&t.onComponentWillUnmount(v(e,!0),e.props||s),Ve(o)):1024&n?be(o,e.ref):8192&n&&12&e.childFlags&&ye(o))}function ye(e){for(var t=0,n=e.length;t<n;++t)Ve(e[t])}function xe(e){e.textContent=""}function ke(e,t,n){ye(n),8192&t.flags?b(t,e):xe(e)}function Se(e,t,n,o){var a=e&&e.__html||"",i=t&&t.__html||"";a!==i&&(r(i)||function(e,t){var n=document.createElement("i");return n.innerHTML=t,n.innerHTML===e.innerHTML}(o,i)||(l(n)||(12&n.childFlags?ye(n.children):2===n.childFlags&&Ve(n.children),n.children=null,n.childFlags=1),o.innerHTML=i))}function Ie(e,t,n,o,a,l,u){switch(e){case"children":case"childrenType":case"className":case"defaultValue":case"key":case"multiple":case"ref":case"selectedIndex":break;case"autoFocus":o.autofocus=!!n;break;case"allowfullscreen":case"autoplay":case"capture":case"checked":case"controls":case"default":case"disabled":case"hidden":case"indeterminate":case"loop":case"muted":case"novalidate":case"open":case"readOnly":case"required":case"reversed":case"scoped":case"seamless":case"selected":o[e]=!!n;break;case"defaultChecked":case"value":case"volume":if(l&&"value"===e)break;var s=r(n)?"":n;o[e]!==s&&(o[e]=s);break;case"style":!function(e,t,n){if(r(t))n.removeAttribute("style");else{var o,a,i=n.style;if(c(t))i.cssText=t;else if(r(e)||c(e))for(o in t)a=t[o],i.setProperty(o,a);else{for(o in t)(a=t[o])!==e[o]&&i.setProperty(o,a);for(o in e)r(t[o])&&i.removeProperty(o)}}}(t,n,o);break;case"dangerouslySetInnerHTML":Se(t,n,u,o);break;default:G[e]?function(e,t,n,o){if(i(n))Y(e,o)[e]=n;else if(d(n)){if(I(t,n))return;Y(e,o)[e]=n}else Z(e,o)}(e,t,n,o):111===e.charCodeAt(0)&&110===e.charCodeAt(1)?function(e,t,n,o){if(d(n)){if(I(t,n))return;n=function(e){var t=e.event;return function(n){t(e.data,n)}}(n)}te(o,m(e),n)}(e,t,n,o):r(n)?o.removeAttribute(e):a&&z[e]?o.setAttributeNS(z[e],e,n):o.setAttribute(e,n)}}function we(e,t,n,o,r){var a=!1,i=(448&t)>0;for(var c in i&&(a=ge(n))&&Ce(t,o,n),n)Ie(c,null,n[c],o,r,a,null);i&&he(t,e,o,n,!0,a)}function _e(e,t,n){var o=O(e.render(t,e.state,n)),r=n;return i(e.getChildContext)&&(r=u(n,e.getChildContext())),e.$CX=r,o}function De(e,t,n,o,r,a){var c=new t(n,o),u=c.$N=Boolean(t.getDerivedStateFromProps||c.getSnapshotBeforeUpdate);if(c.$SVG=r,c.$L=a,e.children=c,c.$BS=!1,c.context=o,c.props===s&&(c.props=n),u)c.state=y(c,n,c.state);else if(i(c.componentWillMount)){c.$BR=!0,c.componentWillMount();var d=c.$PS;if(!l(d)){var p=c.state;if(l(p))c.state=d;else for(var m in d)p[m]=d[m];c.$PS=null}c.$BR=!1}return c.$LI=_e(c,n,o),c}function Me(e,t){var n=e.props||s;return 32768&e.flags?e.type.render(n,e.ref,t):e.type(n,t)}function Be(e,t,n,o,r,a){var i=e.flags|=16384;481&i?Te(e,t,n,o,r,a):4&i?function(e,t,n,o,r,a){var i=De(e,e.type,e.props||s,n,o,a);Be(i.$LI,t,i.$CX,o,r,a),Ee(e.ref,i,a)}(e,t,n,o,r,a):8&i?(!function(e,t,n,o,r,a){Be(e.children=O(Me(e,n)),t,n,o,r,a)}(e,t,n,o,r,a),Pe(e,a)):512&i||16&i?Ae(e,t,r):8192&i?function(e,t,n,o,r,a){var i=e.children,c=e.childFlags;12&c&&0===i.length&&(c=e.childFlags=2,i=e.children=E());2===c?Be(i,n,r,o,r,a):Le(i,n,t,o,r,a)}(e,n,t,o,r,a):1024&i&&function(e,t,n,o,r){Be(e.children,e.ref,t,!1,null,r);var a=E();Ae(a,n,o),e.dom=a.dom}(e,n,t,r,a)}function Ae(e,t,n){var o=e.dom=document.createTextNode(e.children);l(t)||h(t,o,n)}function Te(e,t,n,o,a,i){var c=e.flags,u=e.props,d=e.className,s=e.childFlags,p=e.dom=function(e,t){return t?document.createElementNS("http://www.w3.org/2000/svg",e):document.createElement(e)}(e.type,o=o||(32&c)>0),m=e.children;if(r(d)||""===d||(o?p.setAttribute("class",d):p.className=d),16===s)S(p,m);else if(1!==s){var f=o&&"foreignObject"!==e.type;2===s?(16384&m.flags&&(e.children=m=L(m)),Be(m,p,n,f,null,i)):8!==s&&4!==s||Le(m,p,n,f,null,i)}l(t)||h(t,p,a),l(u)||we(e,c,u,p,o),ve(e.ref,p,i)}function Le(e,t,n,o,r,a){for(var i=0;i<e.length;++i){var c=e[i];16384&c.flags&&(e[i]=c=L(c)),Be(c,t,n,o,r,a)}}function Ee(e,t,n){ve(e,t,n),i(t.componentDidMount)&&n.push(function(e){return function(){e.componentDidMount()}}(t))}function Pe(e,t){var n=e.ref;r(n)||(_(n.onComponentWillMount,e.props||s),i(n.onComponentDidMount)&&t.push(function(e,t){return function(){e.onComponentDidMount(v(t,!0),t.props||s)}}(n,e)))}function je(e,t,n,o,c,d,p){var m=t.flags|=16384;e.flags!==m||e.type!==t.type||e.key!==t.key||2048&m?16384&e.flags?function(e,t,n,o,r,a){Ve(e),0!=(t.flags&e.flags&2033)?(Be(t,null,o,r,null,a),function(e,t,n){e.replaceChild(t,n)}(n,t.dom,e.dom)):(Be(t,n,o,r,v(e,!0),a),b(e,n))}(e,t,n,o,c,p):Be(t,n,o,c,d,p):481&m?function(e,t,n,o,a,i){var c,l=t.dom=e.dom,u=e.props,d=t.props,p=!1,m=!1;if(o=o||(32&a)>0,u!==d){var f=u||s;if((c=d||s)!==s)for(var h in(p=(448&a)>0)&&(m=ge(c)),c){var C=f[h],g=c[h];C!==g&&Ie(h,C,g,l,o,m,e)}if(f!==s)for(var N in f)r(c[N])&&!r(f[N])&&Ie(N,f[N],null,l,o,m,e)}var v=t.children,b=t.className;e.className!==b&&(r(b)?l.removeAttribute("class"):o?l.setAttribute("class",b):l.className=b);4096&a?function(e,t){e.textContent!==t&&(e.textContent=t)}(l,v):Oe(e.childFlags,t.childFlags,e.children,v,l,n,o&&"foreignObject"!==t.type,null,e,i);p&&he(a,t,l,c,!1,m);var V=t.ref,y=e.ref;y!==V&&(Ne(y),ve(V,l,i))}(e,t,o,c,m,p):4&m?function(e,t,n,o,r,a,c){var d=t.children=e.children;if(l(d))return;d.$L=c;var p=t.props||s,m=t.ref,f=e.ref,h=d.state;if(!d.$N){if(i(d.componentWillReceiveProps)){if(d.$BR=!0,d.componentWillReceiveProps(p,o),d.$UN)return;d.$BR=!1}l(d.$PS)||(h=u(h,d.$PS),d.$PS=null)}Fe(d,h,p,n,o,r,!1,a,c),f!==m&&(Ne(f),ve(m,d,c))}(e,t,n,o,c,d,p):8&m?function(e,t,n,o,a,c,l){var u=!0,d=t.props||s,p=t.ref,m=e.props,f=!r(p),h=e.children;f&&i(p.onComponentShouldUpdate)&&(u=p.onComponentShouldUpdate(m,d));if(!1!==u){f&&i(p.onComponentWillUpdate)&&p.onComponentWillUpdate(m,d);var C=O(Me(t,o));je(h,C,n,o,a,c,l),t.children=C,f&&i(p.onComponentDidUpdate)&&p.onComponentDidUpdate(m,d)}else t.children=h}(e,t,n,o,c,d,p):16&m?function(e,t){var n=t.children,o=t.dom=e.dom;n!==e.children&&(o.nodeValue=n)}(e,t):512&m?t.dom=e.dom:8192&m?function(e,t,n,o,r,a){var i=e.children,c=t.children,l=e.childFlags,u=t.childFlags,d=null;12&u&&0===c.length&&(u=t.childFlags=2,c=t.children=E());var s=0!=(2&u);if(12&l){var p=i.length;(8&l&&8&u||s||!s&&c.length>p)&&(d=v(i[p-1],!1).nextSibling)}Oe(l,u,i,c,n,o,r,d,e,a)}(e,t,n,o,c,p):function(e,t,n,o){var r=e.ref,i=t.ref,c=t.children;if(Oe(e.childFlags,t.childFlags,e.children,c,r,n,!1,null,e,o),t.dom=e.dom,r!==i&&!a(c)){var l=c.dom;C(r,l),f(i,l)}}(e,t,o,p)}function Oe(e,t,n,o,r,a,i,c,l,u){switch(e){case 2:switch(t){case 2:je(n,o,r,a,i,c,u);break;case 1:be(n,r);break;case 16:Ve(n),S(r,o);break;default:!function(e,t,n,o,r,a){Ve(e),Le(t,n,o,r,v(e,!0),a),b(e,n)}(n,o,r,a,i,u)}break;case 1:switch(t){case 2:Be(o,r,a,i,c,u);break;case 1:break;case 16:S(r,o);break;default:Le(o,r,a,i,c,u)}break;case 16:switch(t){case 16:!function(e,t,n){e!==t&&(""!==e?n.firstChild.nodeValue=t:S(n,t))}(n,o,r);break;case 2:xe(r),Be(o,r,a,i,c,u);break;case 1:xe(r);break;default:xe(r),Le(o,r,a,i,c,u)}break;default:switch(t){case 16:ye(n),S(r,o);break;case 2:ke(r,l,n),Be(o,r,a,i,c,u);break;case 1:ke(r,l,n);break;default:var d=0|n.length,s=0|o.length;0===d?s>0&&Le(o,r,a,i,c,u):0===s?ke(r,l,n):8===t&&8===e?function(e,t,n,o,r,a,i,c,l,u){var d,s,p=a-1,m=i-1,f=0,h=e[f],C=t[f];e:{for(;h.key===C.key;){if(16384&C.flags&&(t[f]=C=L(C)),je(h,C,n,o,r,c,u),e[f]=C,++f>p||f>m)break e;h=e[f],C=t[f]}for(h=e[p],C=t[m];h.key===C.key;){if(16384&C.flags&&(t[m]=C=L(C)),je(h,C,n,o,r,c,u),e[p]=C,m--,f>--p||f>m)break e;h=e[p],C=t[m]}}if(f>p){if(f<=m)for(s=(d=m+1)<i?v(t[d],!0):c;f<=m;)16384&(C=t[f]).flags&&(t[f]=C=L(C)),++f,Be(C,n,o,r,s,u)}else if(f>m)for(;f<=p;)be(e[f++],n);else!function(e,t,n,o,r,a,i,c,l,u,d,s,p){var m,f,h,C=0,g=c,N=c,b=a-c+1,y=i-c+1,x=new Int32Array(y+1),k=b===o,S=!1,I=0,w=0;if(r<4||(b|y)<32)for(C=g;C<=a;++C)if(m=e[C],w<y){for(c=N;c<=i;c++)if(f=t[c],m.key===f.key){if(x[c-N]=C+1,k)for(k=!1;g<C;)be(e[g++],l);I>c?S=!0:I=c,16384&f.flags&&(t[c]=f=L(f)),je(m,f,l,n,u,d,p),++w;break}!k&&c>i&&be(m,l)}else k||be(m,l);else{var _={};for(C=N;C<=i;++C)_[t[C].key]=C;for(C=g;C<=a;++C)if(m=e[C],w<y)if(void 0!==(c=_[m.key])){if(k)for(k=!1;C>g;)be(e[g++],l);x[c-N]=C+1,I>c?S=!0:I=c,16384&(f=t[c]).flags&&(t[c]=f=L(f)),je(m,f,l,n,u,d,p),++w}else k||be(m,l);else k||be(m,l)}if(k)ke(l,s,e),Le(t,l,n,u,d,p);else if(S){var D=function(e){var t=0,n=0,o=0,r=0,a=0,i=0,c=0,l=e.length;l>Re&&(Re=l,de=new Int32Array(l),se=new Int32Array(l));for(;n<l;++n)if(0!==(t=e[n])){if(e[o=de[r]]<t){se[n]=o,de[++r]=n;continue}for(a=0,i=r;a<i;)e[de[c=a+i>>1]]<t?a=c+1:i=c;t<e[de[a]]&&(a>0&&(se[n]=de[a-1]),de[a]=n)}a=r+1;var u=new Int32Array(a);i=de[a-1];for(;a-- >0;)u[a]=i,i=se[i],de[a]=0;return u}(x);for(c=D.length-1,C=y-1;C>=0;C--)0===x[C]?(16384&(f=t[I=C+N]).flags&&(t[I]=f=L(f)),Be(f,l,n,u,(h=I+1)<r?v(t[h],!0):d,p)):c<0||C!==D[c]?V(f=t[I=C+N],l,(h=I+1)<r?v(t[h],!0):d):c--}else if(w!==y)for(C=y-1;C>=0;C--)0===x[C]&&(16384&(f=t[I=C+N]).flags&&(t[I]=f=L(f)),Be(f,l,n,u,(h=I+1)<r?v(t[h],!0):d,p))}(e,t,o,a,i,p,m,f,n,r,c,l,u)}(n,o,r,a,i,d,s,c,l,u):function(e,t,n,o,r,a,i,c,l){for(var u,d,s=a>i?i:a,p=0;p<s;++p)u=t[p],d=e[p],16384&u.flags&&(u=t[p]=L(u)),je(d,u,n,o,r,c,l),e[p]=u;if(a<i)for(p=s;p<i;++p)16384&(u=t[p]).flags&&(u=t[p]=L(u)),Be(u,n,o,r,c,l);else if(a>i)for(p=s;p<a;++p)be(e[p],n)}(n,o,r,a,i,d,s,c,u)}}}function Fe(e,t,n,o,r,a,c,l,d){var s=e.state,p=e.props,m=Boolean(e.$N),f=i(e.shouldComponentUpdate);if(m&&(t=y(e,n,t!==s?u(s,t):t)),c||!f||f&&e.shouldComponentUpdate(n,t,r)){!m&&i(e.componentWillUpdate)&&e.componentWillUpdate(n,t,r),e.props=n,e.state=t,e.context=r;var h=null,C=_e(e,n,r);m&&i(e.getSnapshotBeforeUpdate)&&(h=e.getSnapshotBeforeUpdate(p,s)),je(e.$LI,C,o,e.$CX,a,l,d),e.$LI=C,i(e.componentDidUpdate)&&function(e,t,n,o,r){r.push((function(){e.componentDidUpdate(t,n,o)}))}(e,p,s,h,d)}else e.props=n,e.state=t,e.context=r}var Re=0;function ze(e,t,n,o){var a=[],c=t.$V;x.v=!0,r(c)?r(e)||(16384&e.flags&&(e=L(e)),Be(e,t,o,!1,null,a),t.$V=e,c=e):r(e)?(be(c,t),t.$V=null):(16384&e.flags&&(e=L(e)),je(c,e,t,o,!1,null,a),c=t.$V=e),g(a),x.v=!1,i(n)&&n(),i(k.renderComplete)&&k.renderComplete(c,t)}function We(e,t,n,o){void 0===n&&(n=null),void 0===o&&(o=s),ze(e,t,n,o)}"undefined"!=typeof document&&window.Node&&(Node.prototype.$EV=null,Node.prototype.$V=null);var Ue=[],He="undefined"!=typeof Promise?Promise.resolve().then.bind(Promise.resolve()):function(e){window.setTimeout(e,0)},Ge=!1;function Ye(e,t,n,o){var a=e.$PS;if(i(t)&&(t=t(a?u(e.state,a):e.state,e.props,e.context)),r(a))e.$PS=t;else for(var c in t)a[c]=t[c];if(e.$BR)i(n)&&e.$L.push(n.bind(e));else{if(!x.v&&0===Ue.length)return Qe(e,o),void(i(n)&&n.call(e));if(-1===Ue.indexOf(e)&&Ue.push(e),o&&(e.$F=!0),Ge||(Ge=!0,He(Ke)),i(n)){var l=e.$QU;l||(l=e.$QU=[]),l.push(n)}}}function Ze(e){for(var t=e.$QU,n=0;n<t.length;++n)t[n].call(e);e.$QU=null}function Ke(){var e;for(Ge=!1;e=Ue.shift();)if(!e.$UN){var t=e.$F;e.$F=!1,Qe(e,t),e.$QU&&Ze(e)}}function Qe(e,t){if(t||!e.$BR){var n=e.$PS;e.$PS=null;var o=[];x.v=!0,Fe(e,u(e.state,n),e.props,v(e.$LI,!0).parentNode,e.context,e.$SVG,t,null,o),g(o),x.v=!1}else e.state=e.$PS,e.$PS=null}var $e=function(e,t){this.state=null,this.$BR=!1,this.$BS=!0,this.$PS=null,this.$LI=null,this.$UN=!1,this.$CX=null,this.$QU=null,this.$N=!1,this.$L=null,this.$SVG=!1,this.$F=!1,this.props=e||s,this.context=t||s};t.Component=$e,$e.prototype.forceUpdate=function(e){this.$UN||Ye(this,{},e,!0)},$e.prototype.setState=function(e,t){this.$UN||this.$BS||Ye(this,e,t,!1)},$e.prototype.render=function(e,t,n){return null};t.version="7.4.8"},96323:function(e,t,n){"use strict";t.__esModule=!0;var o=n(92376);Object.keys(o).forEach((function(e){"default"!==e&&"__esModule"!==e&&(e in t&&t[e]===o[e]||(t[e]=o[e]))}))},10648:function(e,t){"use strict";var n,o;t.__esModule=!0,t.VNodeFlags=t.ChildFlags=void 0,t.VNodeFlags=n,function(e){e[e.HtmlElement=1]="HtmlElement",e[e.ComponentUnknown=2]="ComponentUnknown",e[e.ComponentClass=4]="ComponentClass",e[e.ComponentFunction=8]="ComponentFunction",e[e.Text=16]="Text",e[e.SvgElement=32]="SvgElement",e[e.InputElement=64]="InputElement",e[e.TextareaElement=128]="TextareaElement",e[e.SelectElement=256]="SelectElement",e[e.Void=512]="Void",e[e.Portal=1024]="Portal",e[e.ReCreate=2048]="ReCreate",e[e.ContentEditable=4096]="ContentEditable",e[e.Fragment=8192]="Fragment",e[e.InUse=16384]="InUse",e[e.ForwardRef=32768]="ForwardRef",e[e.Normalized=65536]="Normalized",e[e.ForwardRefComponent=32776]="ForwardRefComponent",e[e.FormElement=448]="FormElement",e[e.Element=481]="Element",e[e.Component=14]="Component",e[e.DOMRef=2033]="DOMRef",e[e.InUseOrNormalized=81920]="InUseOrNormalized",e[e.ClearInUse=-16385]="ClearInUse",e[e.ComponentKnown=12]="ComponentKnown"}(n||(t.VNodeFlags=n={})),t.ChildFlags=o,function(e){e[e.UnknownChildren=0]="UnknownChildren",e[e.HasInvalidChildren=1]="HasInvalidChildren",e[e.HasVNodeChildren=2]="HasVNodeChildren",e[e.HasNonKeyedChildren=4]="HasNonKeyedChildren",e[e.HasKeyedChildren=8]="HasKeyedChildren",e[e.HasTextChildren=16]="HasTextChildren",e[e.MultipleChildren=12]="MultipleChildren"}(o||(t.ChildFlags=o={}))},12800:function(e){"use strict";e.exports=function(){function e(e,t){for(var n=0;n<t.length;n++){var o=t[n];o.enumerable=o.enumerable||!1,o.configurable=!0,"value"in o&&(o.writable=!0),Object.defineProperty(e,o.key,o)}}function t(t,n,o){return n&&e(t.prototype,n),o&&e(t,o),t}function n(e,t){if(e){if("string"==typeof e)return o(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?o(e,t):void 0}}function o(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,o=new Array(t);n<t;n++)o[n]=e[n];return o}function r(e,t){var o="undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(o)return(o=o.call(e)).next.bind(o);if(Array.isArray(e)||(o=n(e))||t&&e&&"number"==typeof e.length){o&&(e=o);var r=0;return function(){return r>=e.length?{done:!0}:{done:!1,value:e[r++]}}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var a={exports:{}};function i(){return{baseUrl:null,breaks:!1,extensions:null,gfm:!0,headerIds:!0,headerPrefix:"",highlight:null,langPrefix:"language-",mangle:!0,pedantic:!1,renderer:null,sanitize:!1,sanitizer:null,silent:!1,smartLists:!1,smartypants:!1,tokenizer:null,walkTokens:null,xhtml:!1}}function c(e){a.exports.defaults=e}a.exports={defaults:i(),getDefaults:i,changeDefaults:c};var l=/[&<>"']/,u=/[&<>"']/g,d=/[<>"']|&(?!#?\w+;)/,s=/[<>"']|&(?!#?\w+;)/g,p={"&":"&","<":"<",">":">",'"':""","'":"'"},m=function(){function e(e){return p[e]}return e}();function f(e,t){if(t){if(l.test(e))return e.replace(u,m)}else if(d.test(e))return e.replace(s,m);return e}var h=/&(#(?:\d+)|(?:#x[0-9A-Fa-f]+)|(?:\w+));?/gi;function C(e){return e.replace(h,(function(e,t){return"colon"===(t=t.toLowerCase())?":":"#"===t.charAt(0)?"x"===t.charAt(1)?String.fromCharCode(parseInt(t.substring(2),16)):String.fromCharCode(+t.substring(1)):""}))}var g=/(^|[^\[])\^/g;function N(e,t){e=e.source||e,t=t||"";var n={replace:function(){function t(t,o){return o=(o=o.source||o).replace(g,"$1"),e=e.replace(t,o),n}return t}(),getRegex:function(){function n(){return new RegExp(e,t)}return n}()};return n}var v=/[^\w:]/g,b=/^$|^[a-z][a-z0-9+.-]*:|^[?#]/i;function V(e,t,n){if(e){var o;try{o=decodeURIComponent(C(n)).replace(v,"").toLowerCase()}catch(r){return null}if(0===o.indexOf("javascript:")||0===o.indexOf("vbscript:")||0===o.indexOf("data:"))return null}t&&!b.test(n)&&(n=I(t,n));try{n=encodeURI(n).replace(/%25/g,"%")}catch(r){return null}return n}var y={},x=/^[^:]+:\/*[^/]*$/,k=/^([^:]+:)[\s\S]*$/,S=/^([^:]+:\/*[^/]*)[\s\S]*$/;function I(e,t){y[" "+e]||(x.test(e)?y[" "+e]=e+"/":y[" "+e]=D(e,"/",!0));var n=-1===(e=y[" "+e]).indexOf(":");return"//"===t.substring(0,2)?n?t:e.replace(k,"$1")+t:"/"===t.charAt(0)?n?t:e.replace(S,"$1")+t:e+t}function w(e){for(var t,n,o=1;o<arguments.length;o++)for(n in t=arguments[o])Object.prototype.hasOwnProperty.call(t,n)&&(e[n]=t[n]);return e}function _(e,t){var n=e.replace(/\|/g,(function(e,t,n){for(var o=!1,r=t;--r>=0&&"\\"===n[r];)o=!o;return o?"|":" |"})).split(/ \|/),o=0;if(n.length>t)n.splice(t);else for(;n.length<t;)n.push("");for(;o<n.length;o++)n[o]=n[o].trim().replace(/\\\|/g,"|");return n}function D(e,t,n){var o=e.length;if(0===o)return"";for(var r=0;r<o;){var a=e.charAt(o-r-1);if(a!==t||n){if(a===t||!n)break;r++}else r++}return e.substr(0,o-r)}function M(e,t){if(-1===e.indexOf(t[1]))return-1;for(var n=e.length,o=0,r=0;r<n;r++)if("\\"===e[r])r++;else if(e[r]===t[0])o++;else if(e[r]===t[1]&&--o<0)return r;return-1}function B(e){e&&e.sanitize&&e.silent}function A(e,t){if(t<1)return"";for(var n="";t>1;)1&t&&(n+=e),t>>=1,e+=e;return n+e}var T={escape:f,unescape:C,edit:N,cleanUrl:V,resolveUrl:I,noopTest:{exec:function(){function e(){}return e}()},merge:w,splitCells:_,rtrim:D,findClosingBracket:M,checkSanitizeDeprecation:B,repeatString:A},L=a.exports.defaults,E=T.rtrim,P=T.splitCells,j=T.escape,O=T.findClosingBracket;function F(e,t,n){var o=t.href,r=t.title?j(t.title):null,a=e[1].replace(/\\([\[\]])/g,"$1");return"!"!==e[0].charAt(0)?{type:"link",raw:n,href:o,title:r,text:a}:{type:"image",raw:n,href:o,title:r,text:j(a)}}function R(e,t){var n=e.match(/^(\s+)(?:```)/);if(null===n)return t;var o=n[1];return t.split("\n").map((function(e){var t=e.match(/^\s+/);return null===t?e:t[0].length>=o.length?e.slice(o.length):e})).join("\n")}var z=function(){function e(e){this.options=e||L}var t=e.prototype;return t.space=function(){function e(e){var t=this.rules.block.newline.exec(e);if(t)return t[0].length>1?{type:"space",raw:t[0]}:{raw:"\n"}}return e}(),t.code=function(){function e(e){var t=this.rules.block.code.exec(e);if(t){var n=t[0].replace(/^ {1,4}/gm,"");return{type:"code",raw:t[0],codeBlockStyle:"indented",text:this.options.pedantic?n:E(n,"\n")}}}return e}(),t.fences=function(){function e(e){var t=this.rules.block.fences.exec(e);if(t){var n=t[0],o=R(n,t[3]||"");return{type:"code",raw:n,lang:t[2]?t[2].trim():t[2],text:o}}}return e}(),t.heading=function(){function e(e){var t=this.rules.block.heading.exec(e);if(t){var n=t[2].trim();if(/#$/.test(n)){var o=E(n,"#");this.options.pedantic?n=o.trim():o&&!/ $/.test(o)||(n=o.trim())}return{type:"heading",raw:t[0],depth:t[1].length,text:n}}}return e}(),t.nptable=function(){function e(e){var t=this.rules.block.nptable.exec(e);if(t){var n={type:"table",header:P(t[1].replace(/^ *| *\| *$/g,"")),align:t[2].replace(/^ *|\| *$/g,"").split(/ *\| */),cells:t[3]?t[3].replace(/\n$/,"").split("\n"):[],raw:t[0]};if(n.header.length===n.align.length){var o,r=n.align.length;for(o=0;o<r;o++)/^ *-+: *$/.test(n.align[o])?n.align[o]="right":/^ *:-+: *$/.test(n.align[o])?n.align[o]="center":/^ *:-+ *$/.test(n.align[o])?n.align[o]="left":n.align[o]=null;for(r=n.cells.length,o=0;o<r;o++)n.cells[o]=P(n.cells[o],n.header.length);return n}}}return e}(),t.hr=function(){function e(e){var t=this.rules.block.hr.exec(e);if(t)return{type:"hr",raw:t[0]}}return e}(),t.blockquote=function(){function e(e){var t=this.rules.block.blockquote.exec(e);if(t){var n=t[0].replace(/^ *> ?/gm,"");return{type:"blockquote",raw:t[0],text:n}}}return e}(),t.list=function(){function e(e){var t=this.rules.block.list.exec(e);if(t){var n,o,r,a,i,c,l,u,d,s=t[0],p=t[2],m=p.length>1,f={type:"list",raw:s,ordered:m,start:m?+p.slice(0,-1):"",loose:!1,items:[]},h=t[0].match(this.rules.block.item),C=!1,g=h.length;r=this.rules.block.listItemStart.exec(h[0]);for(var N=0;N<g;N++){if(s=n=h[N],this.options.pedantic||(d=n.match(new RegExp("\\n\\s*\\n {0,"+(r[0].length-1)+"}\\S")))&&(i=n.length-d.index+h.slice(N+1).join("\n").length,f.raw=f.raw.substring(0,f.raw.length-i),s=n=n.substring(0,d.index),g=N+1),N!==g-1){if(a=this.rules.block.listItemStart.exec(h[N+1]),this.options.pedantic?a[1].length>r[1].length:a[1].length>=r[0].length||a[1].length>3){h.splice(N,2,h[N]+(!this.options.pedantic&&a[1].length<r[0].length&&!h[N].match(/\n$/)?"":"\n")+h[N+1]),N--,g--;continue}(!this.options.pedantic||this.options.smartLists?a[2][a[2].length-1]!==p[p.length-1]:m===(1===a[2].length))&&(i=h.slice(N+1).join("\n").length,f.raw=f.raw.substring(0,f.raw.length-i),N=g-1),r=a}o=n.length,~(n=n.replace(/^ *([*+-]|\d+[.)]) ?/,"")).indexOf("\n ")&&(o-=n.length,n=this.options.pedantic?n.replace(/^ {1,4}/gm,""):n.replace(new RegExp("^ {1,"+o+"}","gm"),"")),n=E(n,"\n"),N!==g-1&&(s+="\n"),c=C||/\n\n(?!\s*$)/.test(s),N!==g-1&&(C="\n\n"===s.slice(-2),c||(c=C)),c&&(f.loose=!0),this.options.gfm&&(l=/^\[[ xX]\] /.test(n),u=undefined,l&&(u=" "!==n[1],n=n.replace(/^\[[ xX]\] +/,""))),f.items.push({type:"list_item",raw:s,task:l,checked:u,loose:c,text:n})}return f}}return e}(),t.html=function(){function e(e){var t=this.rules.block.html.exec(e);if(t)return{type:this.options.sanitize?"paragraph":"html",raw:t[0],pre:!this.options.sanitizer&&("pre"===t[1]||"script"===t[1]||"style"===t[1]),text:this.options.sanitize?this.options.sanitizer?this.options.sanitizer(t[0]):j(t[0]):t[0]}}return e}(),t.def=function(){function e(e){var t=this.rules.block.def.exec(e);if(t)return t[3]&&(t[3]=t[3].substring(1,t[3].length-1)),{type:"def",tag:t[1].toLowerCase().replace(/\s+/g," "),raw:t[0],href:t[2],title:t[3]}}return e}(),t.table=function(){function e(e){var t=this.rules.block.table.exec(e);if(t){var n={type:"table",header:P(t[1].replace(/^ *| *\| *$/g,"")),align:t[2].replace(/^ *|\| *$/g,"").split(/ *\| */),cells:t[3]?t[3].replace(/\n$/,"").split("\n"):[]};if(n.header.length===n.align.length){n.raw=t[0];var o,r=n.align.length;for(o=0;o<r;o++)/^ *-+: *$/.test(n.align[o])?n.align[o]="right":/^ *:-+: *$/.test(n.align[o])?n.align[o]="center":/^ *:-+ *$/.test(n.align[o])?n.align[o]="left":n.align[o]=null;for(r=n.cells.length,o=0;o<r;o++)n.cells[o]=P(n.cells[o].replace(/^ *\| *| *\| *$/g,""),n.header.length);return n}}}return e}(),t.lheading=function(){function e(e){var t=this.rules.block.lheading.exec(e);if(t)return{type:"heading",raw:t[0],depth:"="===t[2].charAt(0)?1:2,text:t[1]}}return e}(),t.paragraph=function(){function e(e){var t=this.rules.block.paragraph.exec(e);if(t)return{type:"paragraph",raw:t[0],text:"\n"===t[1].charAt(t[1].length-1)?t[1].slice(0,-1):t[1]}}return e}(),t.text=function(){function e(e){var t=this.rules.block.text.exec(e);if(t)return{type:"text",raw:t[0],text:t[0]}}return e}(),t.escape=function(){function e(e){var t=this.rules.inline.escape.exec(e);if(t)return{type:"escape",raw:t[0],text:j(t[1])}}return e}(),t.tag=function(){function e(e,t,n){var o=this.rules.inline.tag.exec(e);if(o)return!t&&/^<a /i.test(o[0])?t=!0:t&&/^<\/a>/i.test(o[0])&&(t=!1),!n&&/^<(pre|code|kbd|script)(\s|>)/i.test(o[0])?n=!0:n&&/^<\/(pre|code|kbd|script)(\s|>)/i.test(o[0])&&(n=!1),{type:this.options.sanitize?"text":"html",raw:o[0],inLink:t,inRawBlock:n,text:this.options.sanitize?this.options.sanitizer?this.options.sanitizer(o[0]):j(o[0]):o[0]}}return e}(),t.link=function(){function e(e){var t=this.rules.inline.link.exec(e);if(t){var n=t[2].trim();if(!this.options.pedantic&&/^</.test(n)){if(!/>$/.test(n))return;var o=E(n.slice(0,-1),"\\");if((n.length-o.length)%2==0)return}else{var r=O(t[2],"()");if(r>-1){var a=(0===t[0].indexOf("!")?5:4)+t[1].length+r;t[2]=t[2].substring(0,r),t[0]=t[0].substring(0,a).trim(),t[3]=""}}var i=t[2],c="";if(this.options.pedantic){var l=/^([^'"]*[^\s])\s+(['"])(.*)\2/.exec(i);l&&(i=l[1],c=l[3])}else c=t[3]?t[3].slice(1,-1):"";return i=i.trim(),/^</.test(i)&&(i=this.options.pedantic&&!/>$/.test(n)?i.slice(1):i.slice(1,-1)),F(t,{href:i?i.replace(this.rules.inline._escapes,"$1"):i,title:c?c.replace(this.rules.inline._escapes,"$1"):c},t[0])}}return e}(),t.reflink=function(){function e(e,t){var n;if((n=this.rules.inline.reflink.exec(e))||(n=this.rules.inline.nolink.exec(e))){var o=(n[2]||n[1]).replace(/\s+/g," ");if(!(o=t[o.toLowerCase()])||!o.href){var r=n[0].charAt(0);return{type:"text",raw:r,text:r}}return F(n,o,n[0])}}return e}(),t.emStrong=function(){function e(e,t,n){void 0===n&&(n="");var o=this.rules.inline.emStrong.lDelim.exec(e);if(o&&(!o[3]||!n.match(/(?:[0-9A-Za-z\xAA\xB2\xB3\xB5\xB9\xBA\xBC-\xBE\xC0-\xD6\xD8-\xF6\xF8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0370-\u0374\u0376\u0377\u037A-\u037D\u037F\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5\u03F7-\u0481\u048A-\u052F\u0531-\u0556\u0559\u0560-\u0588\u05D0-\u05EA\u05EF-\u05F2\u0620-\u064A\u0660-\u0669\u066E\u066F\u0671-\u06D3\u06D5\u06E5\u06E6\u06EE-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07C0-\u07EA\u07F4\u07F5\u07FA\u0800-\u0815\u081A\u0824\u0828\u0840-\u0858\u0860-\u086A\u08A0-\u08B4\u08B6-\u08C7\u0904-\u0939\u093D\u0950\u0958-\u0961\u0966-\u096F\u0971-\u0980\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BD\u09CE\u09DC\u09DD\u09DF-\u09E1\u09E6-\u09F1\u09F4-\u09F9\u09FC\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A59-\u0A5C\u0A5E\u0A66-\u0A6F\u0A72-\u0A74\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD\u0AD0\u0AE0\u0AE1\u0AE6-\u0AEF\u0AF9\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3D\u0B5C\u0B5D\u0B5F-\u0B61\u0B66-\u0B6F\u0B71-\u0B77\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BD0\u0BE6-\u0BF2\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C39\u0C3D\u0C58-\u0C5A\u0C60\u0C61\u0C66-\u0C6F\u0C78-\u0C7E\u0C80\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBD\u0CDE\u0CE0\u0CE1\u0CE6-\u0CEF\u0CF1\u0CF2\u0D04-\u0D0C\u0D0E-\u0D10\u0D12-\u0D3A\u0D3D\u0D4E\u0D54-\u0D56\u0D58-\u0D61\u0D66-\u0D78\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0DE6-\u0DEF\u0E01-\u0E30\u0E32\u0E33\u0E40-\u0E46\u0E50-\u0E59\u0E81\u0E82\u0E84\u0E86-\u0E8A\u0E8C-\u0EA3\u0EA5\u0EA7-\u0EB0\u0EB2\u0EB3\u0EBD\u0EC0-\u0EC4\u0EC6\u0ED0-\u0ED9\u0EDC-\u0EDF\u0F00\u0F20-\u0F33\u0F40-\u0F47\u0F49-\u0F6C\u0F88-\u0F8C\u1000-\u102A\u103F-\u1049\u1050-\u1055\u105A-\u105D\u1061\u1065\u1066\u106E-\u1070\u1075-\u1081\u108E\u1090-\u1099\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u1369-\u137C\u1380-\u138F\u13A0-\u13F5\u13F8-\u13FD\u1401-\u166C\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u16EE-\u16F8\u1700-\u170C\u170E-\u1711\u1720-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17D7\u17DC\u17E0-\u17E9\u17F0-\u17F9\u1810-\u1819\u1820-\u1878\u1880-\u1884\u1887-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191E\u1946-\u196D\u1970-\u1974\u1980-\u19AB\u19B0-\u19C9\u19D0-\u19DA\u1A00-\u1A16\u1A20-\u1A54\u1A80-\u1A89\u1A90-\u1A99\u1AA7\u1B05-\u1B33\u1B45-\u1B4B\u1B50-\u1B59\u1B83-\u1BA0\u1BAE-\u1BE5\u1C00-\u1C23\u1C40-\u1C49\u1C4D-\u1C7D\u1C80-\u1C88\u1C90-\u1CBA\u1CBD-\u1CBF\u1CE9-\u1CEC\u1CEE-\u1CF3\u1CF5\u1CF6\u1CFA\u1D00-\u1DBF\u1E00-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2070\u2071\u2074-\u2079\u207F-\u2089\u2090-\u209C\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2150-\u2189\u2460-\u249B\u24EA-\u24FF\u2776-\u2793\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CEE\u2CF2\u2CF3\u2CFD\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u2E2F\u3005-\u3007\u3021-\u3029\u3031-\u3035\u3038-\u303C\u3041-\u3096\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312F\u3131-\u318E\u3192-\u3195\u31A0-\u31BF\u31F0-\u31FF\u3220-\u3229\u3248-\u324F\u3251-\u325F\u3280-\u3289\u32B1-\u32BF\u3400-\u4DBF\u4E00-\u9FFC\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA62B\uA640-\uA66E\uA67F-\uA69D\uA6A0-\uA6EF\uA717-\uA71F\uA722-\uA788\uA78B-\uA7BF\uA7C2-\uA7CA\uA7F5-\uA801\uA803-\uA805\uA807-\uA80A\uA80C-\uA822\uA830-\uA835\uA840-\uA873\uA882-\uA8B3\uA8D0-\uA8D9\uA8F2-\uA8F7\uA8FB\uA8FD\uA8FE\uA900-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9CF-\uA9D9\uA9E0-\uA9E4\uA9E6-\uA9FE\uAA00-\uAA28\uAA40-\uAA42\uAA44-\uAA4B\uAA50-\uAA59\uAA60-\uAA76\uAA7A\uAA7E-\uAAAF\uAAB1\uAAB5\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAADD\uAAE0-\uAAEA\uAAF2-\uAAF4\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uAB30-\uAB5A\uAB5C-\uAB69\uAB70-\uABE2\uABF0-\uABF9\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC\uFF10-\uFF19\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC]|\uD800[\uDC00-\uDC0B\uDC0D-\uDC26\uDC28-\uDC3A\uDC3C\uDC3D\uDC3F-\uDC4D\uDC50-\uDC5D\uDC80-\uDCFA\uDD07-\uDD33\uDD40-\uDD78\uDD8A\uDD8B\uDE80-\uDE9C\uDEA0-\uDED0\uDEE1-\uDEFB\uDF00-\uDF23\uDF2D-\uDF4A\uDF50-\uDF75\uDF80-\uDF9D\uDFA0-\uDFC3\uDFC8-\uDFCF\uDFD1-\uDFD5]|\uD801[\uDC00-\uDC9D\uDCA0-\uDCA9\uDCB0-\uDCD3\uDCD8-\uDCFB\uDD00-\uDD27\uDD30-\uDD63\uDE00-\uDF36\uDF40-\uDF55\uDF60-\uDF67]|\uD802[\uDC00-\uDC05\uDC08\uDC0A-\uDC35\uDC37\uDC38\uDC3C\uDC3F-\uDC55\uDC58-\uDC76\uDC79-\uDC9E\uDCA7-\uDCAF\uDCE0-\uDCF2\uDCF4\uDCF5\uDCFB-\uDD1B\uDD20-\uDD39\uDD80-\uDDB7\uDDBC-\uDDCF\uDDD2-\uDE00\uDE10-\uDE13\uDE15-\uDE17\uDE19-\uDE35\uDE40-\uDE48\uDE60-\uDE7E\uDE80-\uDE9F\uDEC0-\uDEC7\uDEC9-\uDEE4\uDEEB-\uDEEF\uDF00-\uDF35\uDF40-\uDF55\uDF58-\uDF72\uDF78-\uDF91\uDFA9-\uDFAF]|\uD803[\uDC00-\uDC48\uDC80-\uDCB2\uDCC0-\uDCF2\uDCFA-\uDD23\uDD30-\uDD39\uDE60-\uDE7E\uDE80-\uDEA9\uDEB0\uDEB1\uDF00-\uDF27\uDF30-\uDF45\uDF51-\uDF54\uDFB0-\uDFCB\uDFE0-\uDFF6]|\uD804[\uDC03-\uDC37\uDC52-\uDC6F\uDC83-\uDCAF\uDCD0-\uDCE8\uDCF0-\uDCF9\uDD03-\uDD26\uDD36-\uDD3F\uDD44\uDD47\uDD50-\uDD72\uDD76\uDD83-\uDDB2\uDDC1-\uDDC4\uDDD0-\uDDDA\uDDDC\uDDE1-\uDDF4\uDE00-\uDE11\uDE13-\uDE2B\uDE80-\uDE86\uDE88\uDE8A-\uDE8D\uDE8F-\uDE9D\uDE9F-\uDEA8\uDEB0-\uDEDE\uDEF0-\uDEF9\uDF05-\uDF0C\uDF0F\uDF10\uDF13-\uDF28\uDF2A-\uDF30\uDF32\uDF33\uDF35-\uDF39\uDF3D\uDF50\uDF5D-\uDF61]|\uD805[\uDC00-\uDC34\uDC47-\uDC4A\uDC50-\uDC59\uDC5F-\uDC61\uDC80-\uDCAF\uDCC4\uDCC5\uDCC7\uDCD0-\uDCD9\uDD80-\uDDAE\uDDD8-\uDDDB\uDE00-\uDE2F\uDE44\uDE50-\uDE59\uDE80-\uDEAA\uDEB8\uDEC0-\uDEC9\uDF00-\uDF1A\uDF30-\uDF3B]|\uD806[\uDC00-\uDC2B\uDCA0-\uDCF2\uDCFF-\uDD06\uDD09\uDD0C-\uDD13\uDD15\uDD16\uDD18-\uDD2F\uDD3F\uDD41\uDD50-\uDD59\uDDA0-\uDDA7\uDDAA-\uDDD0\uDDE1\uDDE3\uDE00\uDE0B-\uDE32\uDE3A\uDE50\uDE5C-\uDE89\uDE9D\uDEC0-\uDEF8]|\uD807[\uDC00-\uDC08\uDC0A-\uDC2E\uDC40\uDC50-\uDC6C\uDC72-\uDC8F\uDD00-\uDD06\uDD08\uDD09\uDD0B-\uDD30\uDD46\uDD50-\uDD59\uDD60-\uDD65\uDD67\uDD68\uDD6A-\uDD89\uDD98\uDDA0-\uDDA9\uDEE0-\uDEF2\uDFB0\uDFC0-\uDFD4]|\uD808[\uDC00-\uDF99]|\uD809[\uDC00-\uDC6E\uDC80-\uDD43]|[\uD80C\uD81C-\uD820\uD822\uD840-\uD868\uD86A-\uD86C\uD86F-\uD872\uD874-\uD879\uD880-\uD883][\uDC00-\uDFFF]|\uD80D[\uDC00-\uDC2E]|\uD811[\uDC00-\uDE46]|\uD81A[\uDC00-\uDE38\uDE40-\uDE5E\uDE60-\uDE69\uDED0-\uDEED\uDF00-\uDF2F\uDF40-\uDF43\uDF50-\uDF59\uDF5B-\uDF61\uDF63-\uDF77\uDF7D-\uDF8F]|\uD81B[\uDE40-\uDE96\uDF00-\uDF4A\uDF50\uDF93-\uDF9F\uDFE0\uDFE1\uDFE3]|\uD821[\uDC00-\uDFF7]|\uD823[\uDC00-\uDCD5\uDD00-\uDD08]|\uD82C[\uDC00-\uDD1E\uDD50-\uDD52\uDD64-\uDD67\uDD70-\uDEFB]|\uD82F[\uDC00-\uDC6A\uDC70-\uDC7C\uDC80-\uDC88\uDC90-\uDC99]|\uD834[\uDEE0-\uDEF3\uDF60-\uDF78]|\uD835[\uDC00-\uDC54\uDC56-\uDC9C\uDC9E\uDC9F\uDCA2\uDCA5\uDCA6\uDCA9-\uDCAC\uDCAE-\uDCB9\uDCBB\uDCBD-\uDCC3\uDCC5-\uDD05\uDD07-\uDD0A\uDD0D-\uDD14\uDD16-\uDD1C\uDD1E-\uDD39\uDD3B-\uDD3E\uDD40-\uDD44\uDD46\uDD4A-\uDD50\uDD52-\uDEA5\uDEA8-\uDEC0\uDEC2-\uDEDA\uDEDC-\uDEFA\uDEFC-\uDF14\uDF16-\uDF34\uDF36-\uDF4E\uDF50-\uDF6E\uDF70-\uDF88\uDF8A-\uDFA8\uDFAA-\uDFC2\uDFC4-\uDFCB\uDFCE-\uDFFF]|\uD838[\uDD00-\uDD2C\uDD37-\uDD3D\uDD40-\uDD49\uDD4E\uDEC0-\uDEEB\uDEF0-\uDEF9]|\uD83A[\uDC00-\uDCC4\uDCC7-\uDCCF\uDD00-\uDD43\uDD4B\uDD50-\uDD59]|\uD83B[\uDC71-\uDCAB\uDCAD-\uDCAF\uDCB1-\uDCB4\uDD01-\uDD2D\uDD2F-\uDD3D\uDE00-\uDE03\uDE05-\uDE1F\uDE21\uDE22\uDE24\uDE27\uDE29-\uDE32\uDE34-\uDE37\uDE39\uDE3B\uDE42\uDE47\uDE49\uDE4B\uDE4D-\uDE4F\uDE51\uDE52\uDE54\uDE57\uDE59\uDE5B\uDE5D\uDE5F\uDE61\uDE62\uDE64\uDE67-\uDE6A\uDE6C-\uDE72\uDE74-\uDE77\uDE79-\uDE7C\uDE7E\uDE80-\uDE89\uDE8B-\uDE9B\uDEA1-\uDEA3\uDEA5-\uDEA9\uDEAB-\uDEBB]|\uD83C[\uDD00-\uDD0C]|\uD83E[\uDFF0-\uDFF9]|\uD869[\uDC00-\uDEDD\uDF00-\uDFFF]|\uD86D[\uDC00-\uDF34\uDF40-\uDFFF]|\uD86E[\uDC00-\uDC1D\uDC20-\uDFFF]|\uD873[\uDC00-\uDEA1\uDEB0-\uDFFF]|\uD87A[\uDC00-\uDFE0]|\uD87E[\uDC00-\uDE1D]|\uD884[\uDC00-\uDF4A])/))){var r=o[1]||o[2]||"";if(!r||r&&(""===n||this.rules.inline.punctuation.exec(n))){var a,i,c=o[0].length-1,l=c,u=0,d="*"===o[0][0]?this.rules.inline.emStrong.rDelimAst:this.rules.inline.emStrong.rDelimUnd;for(d.lastIndex=0,t=t.slice(-1*e.length+c);null!=(o=d.exec(t));)if(a=o[1]||o[2]||o[3]||o[4]||o[5]||o[6])if(i=a.length,o[3]||o[4])l+=i;else if(!((o[5]||o[6])&&c%3)||(c+i)%3){if(!((l-=i)>0))return i=Math.min(i,i+l+u),Math.min(c,i)%2?{type:"em",raw:e.slice(0,c+o.index+i+1),text:e.slice(1,c+o.index+i)}:{type:"strong",raw:e.slice(0,c+o.index+i+1),text:e.slice(2,c+o.index+i-1)}}else u+=i}}}return e}(),t.codespan=function(){function e(e){var t=this.rules.inline.code.exec(e);if(t){var n=t[2].replace(/\n/g," "),o=/[^ ]/.test(n),r=/^ /.test(n)&&/ $/.test(n);return o&&r&&(n=n.substring(1,n.length-1)),n=j(n,!0),{type:"codespan",raw:t[0],text:n}}}return e}(),t.br=function(){function e(e){var t=this.rules.inline.br.exec(e);if(t)return{type:"br",raw:t[0]}}return e}(),t.del=function(){function e(e){var t=this.rules.inline.del.exec(e);if(t)return{type:"del",raw:t[0],text:t[2]}}return e}(),t.autolink=function(){function e(e,t){var n,o,r=this.rules.inline.autolink.exec(e);if(r)return o="@"===r[2]?"mailto:"+(n=j(this.options.mangle?t(r[1]):r[1])):n=j(r[1]),{type:"link",raw:r[0],text:n,href:o,tokens:[{type:"text",raw:n,text:n}]}}return e}(),t.url=function(){function e(e,t){var n;if(n=this.rules.inline.url.exec(e)){var o,r;if("@"===n[2])r="mailto:"+(o=j(this.options.mangle?t(n[0]):n[0]));else{var a;do{a=n[0],n[0]=this.rules.inline._backpedal.exec(n[0])[0]}while(a!==n[0]);o=j(n[0]),r="www."===n[1]?"http://"+o:o}return{type:"link",raw:n[0],text:o,href:r,tokens:[{type:"text",raw:o,text:o}]}}}return e}(),t.inlineText=function(){function e(e,t,n){var o,r=this.rules.inline.text.exec(e);if(r)return o=t?this.options.sanitize?this.options.sanitizer?this.options.sanitizer(r[0]):j(r[0]):r[0]:j(this.options.smartypants?n(r[0]):r[0]),{type:"text",raw:r[0],text:o}}return e}(),e}(),W=T.noopTest,U=T.edit,H=T.merge,G={newline:/^(?: *(?:\n|$))+/,code:/^( {4}[^\n]+(?:\n(?: *(?:\n|$))*)?)+/,fences:/^ {0,3}(`{3,}(?=[^`\n]*\n)|~{3,})([^\n]*)\n(?:|([\s\S]*?)\n)(?: {0,3}\1[~`]* *(?:\n+|$)|$)/,hr:/^ {0,3}((?:- *){3,}|(?:_ *){3,}|(?:\* *){3,})(?:\n+|$)/,heading:/^ {0,3}(#{1,6})(?=\s|$)(.*)(?:\n+|$)/,blockquote:/^( {0,3}> ?(paragraph|[^\n]*)(?:\n|$))+/,list:/^( {0,3})(bull) [\s\S]+?(?:hr|def|\n{2,}(?! )(?! {0,3}bull )\n*|\s*$)/,html:"^ {0,3}(?:<(script|pre|style|textarea)[\\s>][\\s\\S]*?(?:</\\1>[^\\n]*\\n+|$)|comment[^\\n]*(\\n+|$)|<\\?[\\s\\S]*?(?:\\?>\\n*|$)|<![A-Z][\\s\\S]*?(?:>\\n*|$)|<!\\[CDATA\\[[\\s\\S]*?(?:\\]\\]>\\n*|$)|</?(tag)(?: +|\\n|/?>)[\\s\\S]*?(?:(?:\\n *)+\\n|$)|<(?!script|pre|style|textarea)([a-z][\\w-]*)(?:attribute)*? */?>(?=[ \\t]*(?:\\n|$))[\\s\\S]*?(?:(?:\\n *)+\\n|$)|</(?!script|pre|style|textarea)[a-z][\\w-]*\\s*>(?=[ \\t]*(?:\\n|$))[\\s\\S]*?(?:(?:\\n *)+\\n|$))",def:/^ {0,3}\[(label)\]: *\n? *<?([^\s>]+)>?(?:(?: +\n? *| *\n *)(title))? *(?:\n+|$)/,nptable:W,table:W,lheading:/^([^\n]+)\n {0,3}(=+|-+) *(?:\n+|$)/,_paragraph:/^([^\n]+(?:\n(?!hr|heading|lheading|blockquote|fences|list|html| +\n)[^\n]+)*)/,text:/^[^\n]+/,_label:/(?!\s*\])(?:\\[\[\]]|[^\[\]])+/,_title:/(?:"(?:\\"?|[^"\\])*"|'[^'\n]*(?:\n[^'\n]+)*\n?'|\([^()]*\))/};G.def=U(G.def).replace("label",G._label).replace("title",G._title).getRegex(),G.bullet=/(?:[*+-]|\d{1,9}[.)])/,G.item=/^( *)(bull) ?[^\n]*(?:\n(?! *bull ?)[^\n]*)*/,G.item=U(G.item,"gm").replace(/bull/g,G.bullet).getRegex(),G.listItemStart=U(/^( *)(bull) */).replace("bull",G.bullet).getRegex(),G.list=U(G.list).replace(/bull/g,G.bullet).replace("hr","\\n+(?=\\1?(?:(?:- *){3,}|(?:_ *){3,}|(?:\\* *){3,})(?:\\n+|$))").replace("def","\\n+(?="+G.def.source+")").getRegex(),G._tag="address|article|aside|base|basefont|blockquote|body|caption|center|col|colgroup|dd|details|dialog|dir|div|dl|dt|fieldset|figcaption|figure|footer|form|frame|frameset|h[1-6]|head|header|hr|html|iframe|legend|li|link|main|menu|menuitem|meta|nav|noframes|ol|optgroup|option|p|param|section|source|summary|table|tbody|td|tfoot|th|thead|title|tr|track|ul",G._comment=/<!--(?!-?>)[\s\S]*?(?:-->|$)/,G.html=U(G.html,"i").replace("comment",G._comment).replace("tag",G._tag).replace("attribute",/ +[a-zA-Z:_][\w.:-]*(?: *= *"[^"\n]*"| *= *'[^'\n]*'| *= *[^\s"'=<>`]+)?/).getRegex(),G.paragraph=U(G._paragraph).replace("hr",G.hr).replace("heading"," {0,3}#{1,6} ").replace("|lheading","").replace("blockquote"," {0,3}>").replace("fences"," {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace("list"," {0,3}(?:[*+-]|1[.)]) ").replace("html","</?(?:tag)(?: +|\\n|/?>)|<(?:script|pre|style|textarea|!--)").replace("tag",G._tag).getRegex(),G.blockquote=U(G.blockquote).replace("paragraph",G.paragraph).getRegex(),G.normal=H({},G),G.gfm=H({},G.normal,{nptable:"^ *([^|\\n ].*\\|.*)\\n {0,3}([-:]+ *\\|[-| :]*)(?:\\n((?:(?!\\n|hr|heading|blockquote|code|fences|list|html).*(?:\\n|$))*)\\n*|$)",table:"^ *\\|(.+)\\n {0,3}\\|?( *[-:]+[-| :]*)(?:\\n *((?:(?!\\n|hr|heading|blockquote|code|fences|list|html).*(?:\\n|$))*)\\n*|$)"}),G.gfm.nptable=U(G.gfm.nptable).replace("hr",G.hr).replace("heading"," {0,3}#{1,6} ").replace("blockquote"," {0,3}>").replace("code"," {4}[^\\n]").replace("fences"," {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace("list"," {0,3}(?:[*+-]|1[.)]) ").replace("html","</?(?:tag)(?: +|\\n|/?>)|<(?:script|pre|style|textarea|!--)").replace("tag",G._tag).getRegex(),G.gfm.table=U(G.gfm.table).replace("hr",G.hr).replace("heading"," {0,3}#{1,6} ").replace("blockquote"," {0,3}>").replace("code"," {4}[^\\n]").replace("fences"," {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace("list"," {0,3}(?:[*+-]|1[.)]) ").replace("html","</?(?:tag)(?: +|\\n|/?>)|<(?:script|pre|style|textarea|!--)").replace("tag",G._tag).getRegex(),G.pedantic=H({},G.normal,{html:U("^ *(?:comment *(?:\\n|\\s*$)|<(tag)[\\s\\S]+?</\\1> *(?:\\n{2,}|\\s*$)|<tag(?:\"[^\"]*\"|'[^']*'|\\s[^'\"/>\\s]*)*?/?> *(?:\\n{2,}|\\s*$))").replace("comment",G._comment).replace(/tag/g,"(?!(?:a|em|strong|small|s|cite|q|dfn|abbr|data|time|code|var|samp|kbd|sub|sup|i|b|u|mark|ruby|rt|rp|bdi|bdo|span|br|wbr|ins|del|img)\\b)\\w+(?!:|[^\\w\\s@]*@)\\b").getRegex(),def:/^ *\[([^\]]+)\]: *<?([^\s>]+)>?(?: +(["(][^\n]+[")]))? *(?:\n+|$)/,heading:/^(#{1,6})(.*)(?:\n+|$)/,fences:W,paragraph:U(G.normal._paragraph).replace("hr",G.hr).replace("heading"," *#{1,6} *[^\n]").replace("lheading",G.lheading).replace("blockquote"," {0,3}>").replace("|fences","").replace("|list","").replace("|html","").getRegex()});var Y={escape:/^\\([!"#$%&'()*+,\-./:;<=>?@\[\]\\^_`{|}~])/,autolink:/^<(scheme:[^\s\x00-\x1f<>]*|email)>/,url:W,tag:"^comment|^</[a-zA-Z][\\w:-]*\\s*>|^<[a-zA-Z][\\w-]*(?:attribute)*?\\s*/?>|^<\\?[\\s\\S]*?\\?>|^<![a-zA-Z]+\\s[\\s\\S]*?>|^<!\\[CDATA\\[[\\s\\S]*?\\]\\]>",link:/^!?\[(label)\]\(\s*(href)(?:\s+(title))?\s*\)/,reflink:/^!?\[(label)\]\[(?!\s*\])((?:\\[\[\]]?|[^\[\]\\])+)\]/,nolink:/^!?\[(?!\s*\])((?:\[[^\[\]]*\]|\\[\[\]]|[^\[\]])*)\](?:\[\])?/,reflinkSearch:"reflink|nolink(?!\\()",emStrong:{lDelim:/^(?:\*+(?:([punct_])|[^\s*]))|^_+(?:([punct*])|([^\s_]))/,rDelimAst:/\_\_[^_*]*?\*[^_*]*?\_\_|[punct_](\*+)(?=[\s]|$)|[^punct*_\s](\*+)(?=[punct_\s]|$)|[punct_\s](\*+)(?=[^punct*_\s])|[\s](\*+)(?=[punct_])|[punct_](\*+)(?=[punct_])|[^punct*_\s](\*+)(?=[^punct*_\s])/,rDelimUnd:/\*\*[^_*]*?\_[^_*]*?\*\*|[punct*](\_+)(?=[\s]|$)|[^punct*_\s](\_+)(?=[punct*\s]|$)|[punct*\s](\_+)(?=[^punct*_\s])|[\s](\_+)(?=[punct*])|[punct*](\_+)(?=[punct*])/},code:/^(`+)([^`]|[^`][\s\S]*?[^`])\1(?!`)/,br:/^( {2,}|\\)\n(?!\s*$)/,del:W,text:/^(`+|[^`])(?:(?= {2,}\n)|[\s\S]*?(?:(?=[\\<!\[`*_]|\b_|$)|[^ ](?= {2,}\n)))/,punctuation:/^([\spunctuation])/,_punctuation:"!\"#$%&'()+\\-.,/:;<=>?@\\[\\]`^{|}~"};Y.punctuation=U(Y.punctuation).replace(/punctuation/g,Y._punctuation).getRegex(),Y.blockSkip=/\[[^\]]*?\]\([^\)]*?\)|`[^`]*?`|<[^>]*?>/g,Y.escapedEmSt=/\\\*|\\_/g,Y._comment=U(G._comment).replace("(?:--\x3e|$)","--\x3e").getRegex(),Y.emStrong.lDelim=U(Y.emStrong.lDelim).replace(/punct/g,Y._punctuation).getRegex(),Y.emStrong.rDelimAst=U(Y.emStrong.rDelimAst,"g").replace(/punct/g,Y._punctuation).getRegex(),Y.emStrong.rDelimUnd=U(Y.emStrong.rDelimUnd,"g").replace(/punct/g,Y._punctuation).getRegex(),Y._escapes=/\\([!"#$%&'()*+,\-./:;<=>?@\[\]\\^_`{|}~])/g,Y._scheme=/[a-zA-Z][a-zA-Z0-9+.-]{1,31}/,Y._email=/[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+(@)[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)+(?![-_])/,Y.autolink=U(Y.autolink).replace("scheme",Y._scheme).replace("email",Y._email).getRegex(),Y._attribute=/\s+[a-zA-Z:_][\w.:-]*(?:\s*=\s*"[^"]*"|\s*=\s*'[^']*'|\s*=\s*[^\s"'=<>`]+)?/,Y.tag=U(Y.tag).replace("comment",Y._comment).replace("attribute",Y._attribute).getRegex(),Y._label=/(?:\[(?:\\.|[^\[\]\\])*\]|\\.|`[^`]*`|[^\[\]\\`])*?/,Y._href=/<(?:\\.|[^\n<>\\])+>|[^\s\x00-\x1f]*/,Y._title=/"(?:\\"?|[^"\\])*"|'(?:\\'?|[^'\\])*'|\((?:\\\)?|[^)\\])*\)/,Y.link=U(Y.link).replace("label",Y._label).replace("href",Y._href).replace("title",Y._title).getRegex(),Y.reflink=U(Y.reflink).replace("label",Y._label).getRegex(),Y.reflinkSearch=U(Y.reflinkSearch,"g").replace("reflink",Y.reflink).replace("nolink",Y.nolink).getRegex(),Y.normal=H({},Y),Y.pedantic=H({},Y.normal,{strong:{start:/^__|\*\*/,middle:/^__(?=\S)([\s\S]*?\S)__(?!_)|^\*\*(?=\S)([\s\S]*?\S)\*\*(?!\*)/,endAst:/\*\*(?!\*)/g,endUnd:/__(?!_)/g},em:{start:/^_|\*/,middle:/^()\*(?=\S)([\s\S]*?\S)\*(?!\*)|^_(?=\S)([\s\S]*?\S)_(?!_)/,endAst:/\*(?!\*)/g,endUnd:/_(?!_)/g},link:U(/^!?\[(label)\]\((.*?)\)/).replace("label",Y._label).getRegex(),reflink:U(/^!?\[(label)\]\s*\[([^\]]*)\]/).replace("label",Y._label).getRegex()}),Y.gfm=H({},Y.normal,{escape:U(Y.escape).replace("])","~|])").getRegex(),_extended_email:/[A-Za-z0-9._+-]+(@)[a-zA-Z0-9-_]+(?:\.[a-zA-Z0-9-_]*[a-zA-Z0-9])+(?![-_])/,url:/^((?:ftp|https?):\/\/|www\.)(?:[a-zA-Z0-9\-]+\.?)+[^\s<]*|^email/,_backpedal:/(?:[^?!.,:;*_~()&]+|\([^)]*\)|&(?![a-zA-Z0-9]+;$)|[?!.,:;*_~)]+(?!$))+/,del:/^(~~?)(?=[^\s~])([\s\S]*?[^\s~])\1(?=[^~]|$)/,text:/^([`~]+|[^`~])(?:(?= {2,}\n)|(?=[a-zA-Z0-9.!#$%&'*+\/=?_`{\|}~-]+@)|[\s\S]*?(?:(?=[\\<!\[`*~_]|\b_|https?:\/\/|ftp:\/\/|www\.|$)|[^ ](?= {2,}\n)|[^a-zA-Z0-9.!#$%&'*+\/=?_`{\|}~-](?=[a-zA-Z0-9.!#$%&'*+\/=?_`{\|}~-]+@)))/}),Y.gfm.url=U(Y.gfm.url,"i").replace("email",Y.gfm._extended_email).getRegex(),Y.breaks=H({},Y.gfm,{br:U(Y.br).replace("{2,}","*").getRegex(),text:U(Y.gfm.text).replace("\\b_","\\b_| {2,}\\n").replace(/\{2,\}/g,"*").getRegex()});var Z={block:G,inline:Y},K=z,Q=a.exports.defaults,$=Z.block,J=Z.inline,X=T.repeatString;function q(e){return e.replace(/---/g,"\u2014").replace(/--/g,"\u2013").replace(/(^|[-\u2014/(\[{"\s])'/g,"$1\u2018").replace(/'/g,"\u2019").replace(/(^|[-\u2014/(\[{\u2018\s])"/g,"$1\u201c").replace(/"/g,"\u201d").replace(/\.{3}/g,"\u2026")}function ee(e){var t,n,o="",r=e.length;for(t=0;t<r;t++)n=e.charCodeAt(t),Math.random()>.5&&(n="x"+n.toString(16)),o+="&#"+n+";";return o}var te=function(){function e(e){this.tokens=[],this.tokens.links=Object.create(null),this.options=e||Q,this.options.tokenizer=this.options.tokenizer||new K,this.tokenizer=this.options.tokenizer,this.tokenizer.options=this.options;var t={block:$.normal,inline:J.normal};this.options.pedantic?(t.block=$.pedantic,t.inline=J.pedantic):this.options.gfm&&(t.block=$.gfm,this.options.breaks?t.inline=J.breaks:t.inline=J.gfm),this.tokenizer.rules=t}e.lex=function(){function t(t,n){return new e(n).lex(t)}return t}(),e.lexInline=function(){function t(t,n){return new e(n).inlineTokens(t)}return t}();var n=e.prototype;return n.lex=function(){function e(e){return e=e.replace(/\r\n|\r/g,"\n").replace(/\t/g," "),this.blockTokens(e,this.tokens,!0),this.inline(this.tokens),this.tokens}return e}(),n.blockTokens=function(){function e(e,t,n){var o,r,a,i,c,l,u=this;for(void 0===t&&(t=[]),void 0===n&&(n=!0),this.options.pedantic&&(e=e.replace(/^ +$/gm,""));e;)if(!(this.options.extensions&&this.options.extensions.block&&this.options.extensions.block.some((function(n){return!!(o=n.call(u,e,t))&&(e=e.substring(o.raw.length),t.push(o),!0)}))))if(o=this.tokenizer.space(e))e=e.substring(o.raw.length),o.type&&t.push(o);else if(o=this.tokenizer.code(e))e=e.substring(o.raw.length),(i=t[t.length-1])&&"paragraph"===i.type?(i.raw+="\n"+o.raw,i.text+="\n"+o.text):t.push(o);else if(o=this.tokenizer.fences(e))e=e.substring(o.raw.length),t.push(o);else if(o=this.tokenizer.heading(e))e=e.substring(o.raw.length),t.push(o);else if(o=this.tokenizer.nptable(e))e=e.substring(o.raw.length),t.push(o);else if(o=this.tokenizer.hr(e))e=e.substring(o.raw.length),t.push(o);else if(o=this.tokenizer.blockquote(e))e=e.substring(o.raw.length),o.tokens=this.blockTokens(o.text,[],n),t.push(o);else if(o=this.tokenizer.list(e)){for(e=e.substring(o.raw.length),a=o.items.length,r=0;r<a;r++)o.items[r].tokens=this.blockTokens(o.items[r].text,[],!1);t.push(o)}else if(o=this.tokenizer.html(e))e=e.substring(o.raw.length),t.push(o);else if(n&&(o=this.tokenizer.def(e)))e=e.substring(o.raw.length),this.tokens.links[o.tag]||(this.tokens.links[o.tag]={href:o.href,title:o.title});else if(o=this.tokenizer.table(e))e=e.substring(o.raw.length),t.push(o);else if(o=this.tokenizer.lheading(e))e=e.substring(o.raw.length),t.push(o);else if(c=e,this.options.extensions&&this.options.extensions.startBlock&&function(){var t=Infinity,n=e.slice(1),o=void 0;u.options.extensions.startBlock.forEach((function(e){"number"==typeof(o=e.call(this,n))&&o>=0&&(t=Math.min(t,o))})),t<Infinity&&t>=0&&(c=e.substring(0,t+1))}(),n&&(o=this.tokenizer.paragraph(c)))i=t[t.length-1],l&&"paragraph"===i.type?(i.raw+="\n"+o.raw,i.text+="\n"+o.text):t.push(o),l=c.length!==e.length,e=e.substring(o.raw.length);else if(o=this.tokenizer.text(e))e=e.substring(o.raw.length),(i=t[t.length-1])&&"text"===i.type?(i.raw+="\n"+o.raw,i.text+="\n"+o.text):t.push(o);else if(e){var d="Infinite loop on byte: "+e.charCodeAt(0);if(this.options.silent)break;throw new Error(d)}return t}return e}(),n.inline=function(){function e(e){var t,n,o,r,a,i,c=e.length;for(t=0;t<c;t++)switch((i=e[t]).type){case"paragraph":case"text":case"heading":i.tokens=[],this.inlineTokens(i.text,i.tokens);break;case"table":for(i.tokens={header:[],cells:[]},r=i.header.length,n=0;n<r;n++)i.tokens.header[n]=[],this.inlineTokens(i.header[n],i.tokens.header[n]);for(r=i.cells.length,n=0;n<r;n++)for(a=i.cells[n],i.tokens.cells[n]=[],o=0;o<a.length;o++)i.tokens.cells[n][o]=[],this.inlineTokens(a[o],i.tokens.cells[n][o]);break;case"blockquote":this.inline(i.tokens);break;case"list":for(r=i.items.length,n=0;n<r;n++)this.inline(i.items[n].tokens)}return e}return e}(),n.inlineTokens=function(){function e(e,t,n,o){var r,a,i,c=this;void 0===t&&(t=[]),void 0===n&&(n=!1),void 0===o&&(o=!1);var l,u,d,s=e;if(this.tokens.links){var p=Object.keys(this.tokens.links);if(p.length>0)for(;null!=(l=this.tokenizer.rules.inline.reflinkSearch.exec(s));)p.includes(l[0].slice(l[0].lastIndexOf("[")+1,-1))&&(s=s.slice(0,l.index)+"["+X("a",l[0].length-2)+"]"+s.slice(this.tokenizer.rules.inline.reflinkSearch.lastIndex))}for(;null!=(l=this.tokenizer.rules.inline.blockSkip.exec(s));)s=s.slice(0,l.index)+"["+X("a",l[0].length-2)+"]"+s.slice(this.tokenizer.rules.inline.blockSkip.lastIndex);for(;null!=(l=this.tokenizer.rules.inline.escapedEmSt.exec(s));)s=s.slice(0,l.index)+"++"+s.slice(this.tokenizer.rules.inline.escapedEmSt.lastIndex);for(;e;)if(u||(d=""),u=!1,!(this.options.extensions&&this.options.extensions.inline&&this.options.extensions.inline.some((function(n){return!!(r=n.call(c,e,t))&&(e=e.substring(r.raw.length),t.push(r),!0)}))))if(r=this.tokenizer.escape(e))e=e.substring(r.raw.length),t.push(r);else if(r=this.tokenizer.tag(e,n,o))e=e.substring(r.raw.length),n=r.inLink,o=r.inRawBlock,(a=t[t.length-1])&&"text"===r.type&&"text"===a.type?(a.raw+=r.raw,a.text+=r.text):t.push(r);else if(r=this.tokenizer.link(e))e=e.substring(r.raw.length),"link"===r.type&&(r.tokens=this.inlineTokens(r.text,[],!0,o)),t.push(r);else if(r=this.tokenizer.reflink(e,this.tokens.links))e=e.substring(r.raw.length),a=t[t.length-1],"link"===r.type?(r.tokens=this.inlineTokens(r.text,[],!0,o),t.push(r)):a&&"text"===r.type&&"text"===a.type?(a.raw+=r.raw,a.text+=r.text):t.push(r);else if(r=this.tokenizer.emStrong(e,s,d))e=e.substring(r.raw.length),r.tokens=this.inlineTokens(r.text,[],n,o),t.push(r);else if(r=this.tokenizer.codespan(e))e=e.substring(r.raw.length),t.push(r);else if(r=this.tokenizer.br(e))e=e.substring(r.raw.length),t.push(r);else if(r=this.tokenizer.del(e))e=e.substring(r.raw.length),r.tokens=this.inlineTokens(r.text,[],n,o),t.push(r);else if(r=this.tokenizer.autolink(e,ee))e=e.substring(r.raw.length),t.push(r);else if(n||!(r=this.tokenizer.url(e,ee))){if(i=e,this.options.extensions&&this.options.extensions.startInline&&function(){var t=Infinity,n=e.slice(1),o=void 0;c.options.extensions.startInline.forEach((function(e){"number"==typeof(o=e.call(this,n))&&o>=0&&(t=Math.min(t,o))})),t<Infinity&&t>=0&&(i=e.substring(0,t+1))}(),r=this.tokenizer.inlineText(i,o,q))e=e.substring(r.raw.length),"_"!==r.raw.slice(-1)&&(d=r.raw.slice(-1)),u=!0,(a=t[t.length-1])&&"text"===a.type?(a.raw+=r.raw,a.text+=r.text):t.push(r);else if(e){var m="Infinite loop on byte: "+e.charCodeAt(0);if(this.options.silent)break;throw new Error(m)}}else e=e.substring(r.raw.length),t.push(r);return t}return e}(),t(e,null,[{key:"rules",get:function(){function e(){return{block:$,inline:J}}return e}()}]),e}(),ne=a.exports.defaults,oe=T.cleanUrl,re=T.escape,ae=function(){function e(e){this.options=e||ne}var t=e.prototype;return t.code=function(){function e(e,t,n){var o=(t||"").match(/\S*/)[0];if(this.options.highlight){var r=this.options.highlight(e,o);null!=r&&r!==e&&(n=!0,e=r)}return e=e.replace(/\n$/,"")+"\n",o?'<pre><code class="'+this.options.langPrefix+re(o,!0)+'">'+(n?e:re(e,!0))+"</code></pre>\n":"<pre><code>"+(n?e:re(e,!0))+"</code></pre>\n"}return e}(),t.blockquote=function(){function e(e){return"<blockquote>\n"+e+"</blockquote>\n"}return e}(),t.html=function(){function e(e){return e}return e}(),t.heading=function(){function e(e,t,n,o){return this.options.headerIds?"<h"+t+' id="'+this.options.headerPrefix+o.slug(n)+'">'+e+"</h"+t+">\n":"<h"+t+">"+e+"</h"+t+">\n"}return e}(),t.hr=function(){function e(){return this.options.xhtml?"<hr/>\n":"<hr>\n"}return e}(),t.list=function(){function e(e,t,n){var o=t?"ol":"ul";return"<"+o+(t&&1!==n?' start="'+n+'"':"")+">\n"+e+"</"+o+">\n"}return e}(),t.listitem=function(){function e(e){return"<li>"+e+"</li>\n"}return e}(),t.checkbox=function(){function e(e){return"<input "+(e?'checked="" ':"")+'disabled="" type="checkbox"'+(this.options.xhtml?" /":"")+"> "}return e}(),t.paragraph=function(){function e(e){return"<p>"+e+"</p>\n"}return e}(),t.table=function(){function e(e,t){return t&&(t="<tbody>"+t+"</tbody>"),"<table>\n<thead>\n"+e+"</thead>\n"+t+"</table>\n"}return e}(),t.tablerow=function(){function e(e){return"<tr>\n"+e+"</tr>\n"}return e}(),t.tablecell=function(){function e(e,t){var n=t.header?"th":"td";return(t.align?"<"+n+' align="'+t.align+'">':"<"+n+">")+e+"</"+n+">\n"}return e}(),t.strong=function(){function e(e){return"<strong>"+e+"</strong>"}return e}(),t.em=function(){function e(e){return"<em>"+e+"</em>"}return e}(),t.codespan=function(){function e(e){return"<code>"+e+"</code>"}return e}(),t.br=function(){function e(){return this.options.xhtml?"<br/>":"<br>"}return e}(),t.del=function(){function e(e){return"<del>"+e+"</del>"}return e}(),t.link=function(){function e(e,t,n){if(null===(e=oe(this.options.sanitize,this.options.baseUrl,e)))return n;var o='<a href="'+re(e)+'"';return t&&(o+=' title="'+t+'"'),o+=">"+n+"</a>"}return e}(),t.image=function(){function e(e,t,n){if(null===(e=oe(this.options.sanitize,this.options.baseUrl,e)))return n;var o='<img src="'+e+'" alt="'+n+'"';return t&&(o+=' title="'+t+'"'),o+=this.options.xhtml?"/>":">"}return e}(),t.text=function(){function e(e){return e}return e}(),e}(),ie=function(){function e(){}var t=e.prototype;return t.strong=function(){function e(e){return e}return e}(),t.em=function(){function e(e){return e}return e}(),t.codespan=function(){function e(e){return e}return e}(),t.del=function(){function e(e){return e}return e}(),t.html=function(){function e(e){return e}return e}(),t.text=function(){function e(e){return e}return e}(),t.link=function(){function e(e,t,n){return""+n}return e}(),t.image=function(){function e(e,t,n){return""+n}return e}(),t.br=function(){function e(){return""}return e}(),e}(),ce=function(){function e(){this.seen={}}var t=e.prototype;return t.serialize=function(){function e(e){return e.toLowerCase().trim().replace(/<[!\/a-z].*?>/gi,"").replace(/[\u2000-\u206F\u2E00-\u2E7F\\'!"#$%&()*+,./:;<=>?@[\]^`{|}~]/g,"").replace(/\s/g,"-")}return e}(),t.getNextSafeSlug=function(){function e(e,t){var n=e,o=0;if(this.seen.hasOwnProperty(n)){o=this.seen[e];do{n=e+"-"+ ++o}while(this.seen.hasOwnProperty(n))}return t||(this.seen[e]=o,this.seen[n]=0),n}return e}(),t.slug=function(){function e(e,t){void 0===t&&(t={});var n=this.serialize(e);return this.getNextSafeSlug(n,t.dryrun)}return e}(),e}(),le=ae,ue=ie,de=ce,se=a.exports.defaults,pe=T.unescape,me=te,fe=function(){function e(e){this.options=e||se,this.options.renderer=this.options.renderer||new le,this.renderer=this.options.renderer,this.renderer.options=this.options,this.textRenderer=new ue,this.slugger=new de}e.parse=function(){function t(t,n){return new e(n).parse(t)}return t}(),e.parseInline=function(){function t(t,n){return new e(n).parseInline(t)}return t}();var t=e.prototype;return t.parse=function(){function e(e,t){void 0===t&&(t=!0);var n,o,r,a,i,c,l,u,d,s,p,m,f,h,C,g,N,v,b,V="",y=e.length;for(n=0;n<y;n++)if(s=e[n],!(this.options.extensions&&this.options.extensions.renderers&&this.options.extensions.renderers[s.type])||!1===(b=this.options.extensions.renderers[s.type].call(this,s))&&["space","hr","heading","code","table","blockquote","list","html","paragraph","text"].includes(s.type))switch(s.type){case"space":continue;case"hr":V+=this.renderer.hr();continue;case"heading":V+=this.renderer.heading(this.parseInline(s.tokens),s.depth,pe(this.parseInline(s.tokens,this.textRenderer)),this.slugger);continue;case"code":V+=this.renderer.code(s.text,s.lang,s.escaped);continue;case"table":for(u="",l="",a=s.header.length,o=0;o<a;o++)l+=this.renderer.tablecell(this.parseInline(s.tokens.header[o]),{header:!0,align:s.align[o]});for(u+=this.renderer.tablerow(l),d="",a=s.cells.length,o=0;o<a;o++){for(l="",i=(c=s.tokens.cells[o]).length,r=0;r<i;r++)l+=this.renderer.tablecell(this.parseInline(c[r]),{header:!1,align:s.align[r]});d+=this.renderer.tablerow(l)}V+=this.renderer.table(u,d);continue;case"blockquote":d=this.parse(s.tokens),V+=this.renderer.blockquote(d);continue;case"list":for(p=s.ordered,m=s.start,f=s.loose,a=s.items.length,d="",o=0;o<a;o++)g=(C=s.items[o]).checked,N=C.task,h="",C.task&&(v=this.renderer.checkbox(g),f?C.tokens.length>0&&"text"===C.tokens[0].type?(C.tokens[0].text=v+" "+C.tokens[0].text,C.tokens[0].tokens&&C.tokens[0].tokens.length>0&&"text"===C.tokens[0].tokens[0].type&&(C.tokens[0].tokens[0].text=v+" "+C.tokens[0].tokens[0].text)):C.tokens.unshift({type:"text",text:v}):h+=v),h+=this.parse(C.tokens,f),d+=this.renderer.listitem(h,N,g);V+=this.renderer.list(d,p,m);continue;case"html":V+=this.renderer.html(s.text);continue;case"paragraph":V+=this.renderer.paragraph(this.parseInline(s.tokens));continue;case"text":for(d=s.tokens?this.parseInline(s.tokens):s.text;n+1<y&&"text"===e[n+1].type;)d+="\n"+((s=e[++n]).tokens?this.parseInline(s.tokens):s.text);V+=t?this.renderer.paragraph(d):d;continue;default:var x='Token with "'+s.type+'" type was not found.';if(this.options.silent)return;throw new Error(x)}else V+=b||"";return V}return e}(),t.parseInline=function(){function e(e,t){t=t||this.renderer;var n,o,r,a="",i=e.length;for(n=0;n<i;n++)if(o=e[n],!(this.options.extensions&&this.options.extensions.renderers&&this.options.extensions.renderers[o.type])||!1===(r=this.options.extensions.renderers[o.type].call(this,o))&&["escape","html","link","image","strong","em","codespan","br","del","text"].includes(o.type))switch(o.type){case"escape":case"text":a+=t.text(o.text);break;case"html":a+=t.html(o.text);break;case"link":a+=t.link(o.href,o.title,this.parseInline(o.tokens,t));break;case"image":a+=t.image(o.href,o.title,o.text);break;case"strong":a+=t.strong(this.parseInline(o.tokens,t));break;case"em":a+=t.em(this.parseInline(o.tokens,t));break;case"codespan":a+=t.codespan(o.text);break;case"br":a+=t.br();break;case"del":a+=t.del(this.parseInline(o.tokens,t));break;default:var c='Token with "'+o.type+'" type was not found.';if(this.options.silent)return;throw new Error(c)}else a+=r||"";return a}return e}(),e}(),he=z,Ce=ae,ge=ie,Ne=ce,ve=T.merge,be=T.checkSanitizeDeprecation,Ve=T.escape,ye=a.exports.getDefaults,xe=a.exports.changeDefaults,ke=a.exports.defaults;function Se(e,t,n){if(null==e)throw new Error("marked(): input parameter is undefined or null");if("string"!=typeof e)throw new Error("marked(): input parameter is of type "+Object.prototype.toString.call(e)+", string expected");if("function"==typeof t&&(n=t,t=null),t=ve({},Se.defaults,t||{}),be(t),n){var o,r=t.highlight;try{o=me.lex(e,t)}catch(l){return n(l)}var a=function(){function e(e){var a;if(!e)try{t.walkTokens&&Se.walkTokens(o,t.walkTokens),a=fe.parse(o,t)}catch(l){e=l}return t.highlight=r,e?n(e):n(null,a)}return e}();if(!r||r.length<3)return a();if(delete t.highlight,!o.length)return a();var i=0;return Se.walkTokens(o,(function(e){"code"===e.type&&(i++,setTimeout((function(){r(e.text,e.lang,(function(t,n){if(t)return a(t);null!=n&&n!==e.text&&(e.text=n,e.escaped=!0),0==--i&&a()}))}),0))})),void(0===i&&a())}try{var c=me.lex(e,t);return t.walkTokens&&Se.walkTokens(c,t.walkTokens),fe.parse(c,t)}catch(l){if(l.message+="\nPlease report this to https://github.com/markedjs/marked.",t.silent)return"<p>An error occurred:</p><pre>"+Ve(l.message+"",!0)+"</pre>";throw l}}return Se.options=Se.setOptions=function(e){return ve(Se.defaults,e),xe(Se.defaults),Se},Se.getDefaults=ye,Se.defaults=ke,Se.use=function(){for(var e=this,t=arguments.length,n=new Array(t),o=0;o<t;o++)n[o]=arguments[o];var r,a=ve.apply(void 0,[{}].concat(n)),i=Se.defaults.extensions||{renderers:{},childTokens:{}};n.forEach((function(t){if(t.extensions&&(r=!0,t.extensions.forEach((function(e){if(!e.name)throw new Error("extension name required");if(e.renderer){var t=i.renderers?i.renderers[e.name]:null;i.renderers[e.name]=t?function(){for(var n=arguments.length,o=new Array(n),r=0;r<n;r++)o[r]=arguments[r];var a=e.renderer.apply(this,o);return!1===a&&(a=t.apply(this,o)),a}:e.renderer}if(e.tokenizer){if(!e.level||"block"!==e.level&&"inline"!==e.level)throw new Error("extension level must be 'block' or 'inline'");i[e.level]?i[e.level].unshift(e.tokenizer):i[e.level]=[e.tokenizer],e.start&&("block"===e.level?i.startBlock?i.startBlock.push(e.start):i.startBlock=[e.start]:"inline"===e.level&&(i.startInline?i.startInline.push(e.start):i.startInline=[e.start]))}e.childTokens&&(i.childTokens[e.name]=e.childTokens)}))),t.renderer&&function(){var e=Se.defaults.renderer||new Ce,n=function(){function n(n){var o=e[n];e[n]=function(){for(var r=arguments.length,a=new Array(r),i=0;i<r;i++)a[i]=arguments[i];var c=t.renderer[n].apply(e,a);return!1===c&&(c=o.apply(e,a)),c}}return n}();for(var o in t.renderer)n(o);a.renderer=e}(),t.tokenizer&&function(){var e=Se.defaults.tokenizer||new he,n=function(){function n(n){var o=e[n];e[n]=function(){for(var r=arguments.length,a=new Array(r),i=0;i<r;i++)a[i]=arguments[i];var c=t.tokenizer[n].apply(e,a);return!1===c&&(c=o.apply(e,a)),c}}return n}();for(var o in t.tokenizer)n(o);a.tokenizer=e}(),t.walkTokens){var n=Se.defaults.walkTokens;a.walkTokens=function(o){t.walkTokens.call(e,o),n&&n(o)}}r&&(a.extensions=i),Se.setOptions(a)}))},Se.walkTokens=function(e,t){for(var n,o=function(){function e(){var e=n.value;switch(t(e),e.type){case"table":for(var o,a=r(e.tokens.header);!(o=a()).done;){var i=o.value;Se.walkTokens(i,t)}for(var c,l=r(e.tokens.cells);!(c=l()).done;)for(var u,d=r(c.value);!(u=d()).done;){var s=u.value;Se.walkTokens(s,t)}break;case"list":Se.walkTokens(e.items,t);break;default:Se.defaults.extensions&&Se.defaults.extensions.childTokens&&Se.defaults.extensions.childTokens[e.type]?Se.defaults.extensions.childTokens[e.type].forEach((function(n){Se.walkTokens(e[n],t)})):e.tokens&&Se.walkTokens(e.tokens,t)}}return e}(),a=r(e);!(n=a()).done;)o()},Se.parseInline=function(e,t){if(null==e)throw new Error("marked.parseInline(): input parameter is undefined or null");if("string"!=typeof e)throw new Error("marked.parseInline(): input parameter is of type "+Object.prototype.toString.call(e)+", string expected");t=ve({},Se.defaults,t||{}),be(t);try{var n=me.lexInline(e,t);return t.walkTokens&&Se.walkTokens(n,t.walkTokens),fe.parseInline(n,t)}catch(o){if(o.message+="\nPlease report this to https://github.com/markedjs/marked.",t.silent)return"<p>An error occurred:</p><pre>"+Ve(o.message+"",!0)+"</pre>";throw o}},Se.Parser=fe,Se.parser=fe.parse,Se.Renderer=Ce,Se.TextRenderer=ge,Se.Lexer=me,Se.lexer=me.lex,Se.Tokenizer=he,Se.Slugger=Ne,Se.parse=Se,Se}()},69838:function(e){"use strict";var t=function(e){var t,n=Object.prototype,o=n.hasOwnProperty,r="function"==typeof Symbol?Symbol:{},a=r.iterator||"@@iterator",i=r.asyncIterator||"@@asyncIterator",c=r.toStringTag||"@@toStringTag";function l(e,t,n){return Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}),e[t]}try{l({},"")}catch(B){l=function(e,t,n){return e[t]=n}}function u(e,t,n,o){var r=t&&t.prototype instanceof C?t:C,a=Object.create(r.prototype),i=new _(o||[]);return a._invoke=function(e,t,n){var o=s;return function(){function r(r,a){if(o===m)throw new Error("Generator is already running");if(o===f){if("throw"===r)throw a;return M()}for(n.method=r,n.arg=a;;){var i=n.delegate;if(i){var c=S(i,n);if(c){if(c===h)continue;return c}}if("next"===n.method)n.sent=n._sent=n.arg;else if("throw"===n.method){if(o===s)throw o=f,n.arg;n.dispatchException(n.arg)}else"return"===n.method&&n.abrupt("return",n.arg);o=m;var l=d(e,t,n);if("normal"===l.type){if(o=n.done?f:p,l.arg===h)continue;return{value:l.arg,done:n.done}}"throw"===l.type&&(o=f,n.method="throw",n.arg=l.arg)}}return r}()}(e,n,i),a}function d(e,t,n){try{return{type:"normal",arg:e.call(t,n)}}catch(B){return{type:"throw",arg:B}}}e.wrap=u;var s="suspendedStart",p="suspendedYield",m="executing",f="completed",h={};function C(){}function g(){}function N(){}var v={};l(v,a,(function(){return this}));var b=Object.getPrototypeOf,V=b&&b(b(D([])));V&&V!==n&&o.call(V,a)&&(v=V);var y=N.prototype=C.prototype=Object.create(v);function x(e){["next","throw","return"].forEach((function(t){l(e,t,(function(e){return this._invoke(t,e)}))}))}function k(e,t){function n(r,a,i,c){var l=d(e[r],e,a);if("throw"!==l.type){var u=l.arg,s=u.value;return s&&"object"==typeof s&&o.call(s,"__await")?t.resolve(s.__await).then((function(e){n("next",e,i,c)}),(function(e){n("throw",e,i,c)})):t.resolve(s).then((function(e){u.value=e,i(u)}),(function(e){return n("throw",e,i,c)}))}c(l.arg)}var r;this._invoke=function(e,o){function a(){return new t((function(t,r){n(e,o,t,r)}))}return r=r?r.then(a,a):a()}}function S(e,n){var o=e.iterator[n.method];if(o===t){if(n.delegate=null,"throw"===n.method){if(e.iterator["return"]&&(n.method="return",n.arg=t,S(e,n),"throw"===n.method))return h;n.method="throw",n.arg=new TypeError("The iterator does not provide a 'throw' method")}return h}var r=d(o,e.iterator,n.arg);if("throw"===r.type)return n.method="throw",n.arg=r.arg,n.delegate=null,h;var a=r.arg;return a?a.done?(n[e.resultName]=a.value,n.next=e.nextLoc,"return"!==n.method&&(n.method="next",n.arg=t),n.delegate=null,h):a:(n.method="throw",n.arg=new TypeError("iterator result is not an object"),n.delegate=null,h)}function I(e){var t={tryLoc:e[0]};1 in e&&(t.catchLoc=e[1]),2 in e&&(t.finallyLoc=e[2],t.afterLoc=e[3]),this.tryEntries.push(t)}function w(e){var t=e.completion||{};t.type="normal",delete t.arg,e.completion=t}function _(e){this.tryEntries=[{tryLoc:"root"}],e.forEach(I,this),this.reset(!0)}function D(e){if(e){var n=e[a];if(n)return n.call(e);if("function"==typeof e.next)return e;if(!isNaN(e.length)){var r=-1,i=function n(){for(;++r<e.length;)if(o.call(e,r))return n.value=e[r],n.done=!1,n;return n.value=t,n.done=!0,n};return i.next=i}}return{next:M}}function M(){return{value:t,done:!0}}return g.prototype=N,l(y,"constructor",N),l(N,"constructor",g),g.displayName=l(N,c,"GeneratorFunction"),e.isGeneratorFunction=function(e){var t="function"==typeof e&&e.constructor;return!!t&&(t===g||"GeneratorFunction"===(t.displayName||t.name))},e.mark=function(e){return Object.setPrototypeOf?Object.setPrototypeOf(e,N):(e.__proto__=N,l(e,c,"GeneratorFunction")),e.prototype=Object.create(y),e},e.awrap=function(e){return{__await:e}},x(k.prototype),l(k.prototype,i,(function(){return this})),e.AsyncIterator=k,e.async=function(t,n,o,r,a){void 0===a&&(a=Promise);var i=new k(u(t,n,o,r),a);return e.isGeneratorFunction(n)?i:i.next().then((function(e){return e.done?e.value:i.next()}))},x(y),l(y,c,"Generator"),l(y,a,(function(){return this})),l(y,"toString",(function(){return"[object Generator]"})),e.keys=function(e){var t=[];for(var n in e)t.push(n);return t.reverse(),function o(){for(;t.length;){var n=t.pop();if(n in e)return o.value=n,o.done=!1,o}return o.done=!0,o}},e.values=D,_.prototype={constructor:_,reset:function(e){if(this.prev=0,this.next=0,this.sent=this._sent=t,this.done=!1,this.delegate=null,this.method="next",this.arg=t,this.tryEntries.forEach(w),!e)for(var n in this)"t"===n.charAt(0)&&o.call(this,n)&&!isNaN(+n.slice(1))&&(this[n]=t)},stop:function(){this.done=!0;var e=this.tryEntries[0].completion;if("throw"===e.type)throw e.arg;return this.rval},dispatchException:function(e){if(this.done)throw e;var n=this;function r(o,r){return c.type="throw",c.arg=e,n.next=o,r&&(n.method="next",n.arg=t),!!r}for(var a=this.tryEntries.length-1;a>=0;--a){var i=this.tryEntries[a],c=i.completion;if("root"===i.tryLoc)return r("end");if(i.tryLoc<=this.prev){var l=o.call(i,"catchLoc"),u=o.call(i,"finallyLoc");if(l&&u){if(this.prev<i.catchLoc)return r(i.catchLoc,!0);if(this.prev<i.finallyLoc)return r(i.finallyLoc)}else if(l){if(this.prev<i.catchLoc)return r(i.catchLoc,!0)}else{if(!u)throw new Error("try statement without catch or finally");if(this.prev<i.finallyLoc)return r(i.finallyLoc)}}}},abrupt:function(e,t){for(var n=this.tryEntries.length-1;n>=0;--n){var r=this.tryEntries[n];if(r.tryLoc<=this.prev&&o.call(r,"finallyLoc")&&this.prev<r.finallyLoc){var a=r;break}}a&&("break"===e||"continue"===e)&&a.tryLoc<=t&&t<=a.finallyLoc&&(a=null);var i=a?a.completion:{};return i.type=e,i.arg=t,a?(this.method="next",this.next=a.finallyLoc,h):this.complete(i)},complete:function(e,t){if("throw"===e.type)throw e.arg;return"break"===e.type||"continue"===e.type?this.next=e.arg:"return"===e.type?(this.rval=this.arg=e.arg,this.method="return",this.next="end"):"normal"===e.type&&t&&(this.next=t),h},finish:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var n=this.tryEntries[t];if(n.finallyLoc===e)return this.complete(n.completion,n.afterLoc),w(n),h}},"catch":function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var n=this.tryEntries[t];if(n.tryLoc===e){var o=n.completion;if("throw"===o.type){var r=o.arg;w(n)}return r}}throw new Error("illegal catch attempt")},delegateYield:function(e,n,o){return this.delegate={iterator:D(e),resultName:n,nextLoc:o},"next"===this.method&&(this.arg=t),h}},e}(e.exports);try{regeneratorRuntime=t}catch(n){"object"==typeof globalThis?globalThis.regeneratorRuntime=t:Function("r","regeneratorRuntime = r")(t)}},96250:function(){"use strict";self.fetch||(self.fetch=function(e,t){return t=t||{},new Promise((function(n,o){var r=new XMLHttpRequest,a=[],i=[],c={},l=function d(){return{ok:2==(r.status/100|0),statusText:r.statusText,status:r.status,url:r.responseURL,text:function(){return Promise.resolve(r.responseText)},json:function(){return Promise.resolve(r.responseText).then(JSON.parse)},blob:function(){return Promise.resolve(new Blob([r.response]))},clone:d,headers:{keys:function(){return a},entries:function(){return i},get:function(e){return c[e.toLowerCase()]},has:function(e){return e.toLowerCase()in c}}}};for(var u in r.open(t.method||"get",e,!0),r.onload=function(){r.getAllResponseHeaders().replace(/^(.*?):[^\S\n]*([\s\S]*?)$/gm,(function(e,t,n){a.push(t=t.toLowerCase()),i.push([t,n]),c[t]=c[t]?c[t]+","+n:n})),n(l())},r.onerror=o,r.withCredentials="include"==t.credentials,t.headers)r.setRequestHeader(u,t.headers[u]);r.send(t.body||null)}))})},88243:function(e,t){"use strict";t.__esModule=!0,t.modifier=t.element=t.block=void 0;t.block=function(e,t){return e+"-"+t};t.element=function(e,t){return e+"__"+t};t.modifier=function(e,t){return e+"--"+t}},1397:function(e,t){"use strict";t.__esModule=!0,t.binaryInsertWith=t.zipWith=t.zip=t.uniq=t.uniqBy=t.reduce=t.range=t.sortStrings=t.sort=t.sortBy=t.map=t.filter=void 0;t.filter=function(e){return function(t){if(null===t||t===undefined)return t;if(Array.isArray(t)){for(var n=[],o=0;o<t.length;o++){var r=t[o];e(r,o,t)&&n.push(r)}return n}throw new Error("filter() can't iterate on type "+typeof t)}};var n=function(e){return function(t){if(null===t||t===undefined)return t;if(Array.isArray(t)){for(var n=[],o=0;o<t.length;o++)n.push(e(t[o],o,t));return n}if("object"==typeof t){var r=Object.prototype.hasOwnProperty,a=[];for(var i in t)r.call(t,i)&&a.push(e(t[i],i,t));return a}throw new Error("map() can't iterate on type "+typeof t)}};t.map=n;var o=function(e,t){for(var n=e.criteria,o=t.criteria,r=n.length,a=0;a<r;a++){var i=n[a],c=o[a];if(i<c)return-1;if(i>c)return 1}return 0},r=function(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];return function(e){if(!Array.isArray(e))return e;for(var n=e.length,r=[],a=function(n){var o=e[n];r.push({criteria:t.map((function(e){return e(o)})),value:o})},i=0;i<n;i++)a(i);r.sort(o);for(var c=[];n--;)c[n]=r[n].value;return c}};t.sortBy=r;var a=r();t.sort=a;var i=r();t.sortStrings=i;t.range=function(e,t){return new Array(t-e).fill(null).map((function(t,n){return n+e}))};t.reduce=function(e,t){return function(n){var o,r,a=n.length;for(t===undefined?(o=1,r=n[0]):(o=0,r=t);o<a;o++)r=e(r,n[o],o,n);return r}};var c=function(e){return function(t){var n=t.length,o=[],r=e?[]:o,a=-1;e:for(;++a<n;){var i=t[a],c=e?e(i):i;if(c==c){for(var l=r.length;l--;)if(r[l]===c)continue e;e&&r.push(c),o.push(i)}else r.includes(c)||(r!==o&&r.push(c),o.push(i))}return o}};t.uniqBy=c;var l=c();t.uniq=l;var u=function(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];if(0===t.length)return[];for(var o=t.length,r=t[0].length,a=[],i=0;i<r;i++){for(var c=[],l=0;l<o;l++)c.push(t[l][i]);a.push(c)}return a};t.zip=u;t.zipWith=function(e){return function(){return n((function(t){return e.apply(void 0,t)}))(u.apply(void 0,arguments))}};t.binaryInsertWith=function(e){return function(t,n){var o=[].concat(t);return o.splice(function(e,t,n){if(0===t.length)return 0;for(var o=e(n),r=[0,t.length],a=r[0],i=r[1],c=undefined,l=0;a<i;)if((c=e(t[l=a+i>>1]))<o)a=l+1;else{if(c===o)return l;i=l}return c>o?l:l+1}(e,t,n),0,n),o}}},89295:function(e,t){"use strict";t.__esModule=!0,t.validHex=t.hsvaToHsv=t.hslaToHsl=t.rgbaToRgb=t.roundHsva=t.rgbaToHsva=t.rgbaToHex=t.rgbStringToHsva=t.rgbaStringToHsva=t.hsvStringToHsva=t.hsvaStringToHsva=t.hsvaToRgbaString=t.hsvaToRgbString=t.hsvaToRgba=t.hsvaToHslaString=t.hsvaToHsvaString=t.hsvaToHsvString=t.hsvaToHslString=t.hsvaToHsla=t.hsvaToHex=t.hslaToHsva=t.hslStringToHsva=t.hslaStringToHsva=t.parseHue=t.hexToRgba=t.hexToHsva=t.Color=void 0;var n=1e-4,o=function(){function e(e,t,n,o){void 0===e&&(e=0),void 0===t&&(t=0),void 0===n&&(n=0),void 0===o&&(o=1),this.r=void 0,this.g=void 0,this.b=void 0,this.a=void 0,this.r=e,this.g=t,this.b=n,this.a=o}return e.prototype.toString=function(){return"rgba("+(0|this.r)+", "+(0|this.g)+", "+(0|this.b)+", "+(0|this.a)+")"},e.fromHex=function(t){return new e(parseInt(t.substr(1,2),16),parseInt(t.substr(3,2),16),parseInt(t.substr(5,2),16))},e.lerp=function(t,n,o){return new e((n.r-t.r)*o+t.r,(n.g-t.g)*o+t.g,(n.b-t.b)*o+t.b,(n.a-t.a)*o+t.a)},e.lookup=function(t,o){void 0===o&&(o=[]);var r=o.length;if(r<2)throw new Error("Needs at least two colors!");var a=t*(r-1);if(t<n)return o[0];if(t>=.9999)return o[r-1];var i=a%1,c=0|a;return e.lerp(o[c],o[c+1],i)},e}();t.Color=o;var r=function(e,t,n){return void 0===t&&(t=0),void 0===n&&(n=Math.pow(10,t)),Math.round(n*e)/n},a={grad:.9,turn:360,rad:360/(2*Math.PI)};t.hexToHsva=function(e){return v(i(e))};var i=function(e){return e?("#"===e[0]&&(e=e.substring(1)),e.length<6?{r:parseInt(e[0]+e[0],16),g:parseInt(e[1]+e[1],16),b:parseInt(e[2]+e[2],16),a:4===e.length?r(parseInt(e[3]+e[3],16)/255,2):1}:{r:parseInt(e.substring(0,2),16),g:parseInt(e.substring(2,4),16),b:parseInt(e.substring(4,6),16),a:8===e.length?r(parseInt(e.substring(6,8),16)/255,2):1}):{r:0,g:0,b:0,a:0}};t.hexToRgba=i;var c=function(e,t){return void 0===t&&(t="deg"),Number(e)*(a[t]||1)};t.parseHue=c;var l=function(e){var t=/hsla?\(?\s*(-?\d*\.?\d+)(deg|rad|grad|turn)?[,\s]+(-?\d*\.?\d+)%?[,\s]+(-?\d*\.?\d+)%?,?\s*[/\s]*(-?\d*\.?\d+)?(%)?\s*\)?/i.exec(e);return t?d({h:c(t[1],t[2]),s:Number(t[3]),l:Number(t[4]),a:t[5]===undefined?1:Number(t[5])/(t[6]?100:1)}):{h:0,s:0,v:0,a:1}};t.hslaStringToHsva=l;var u=l;t.hslStringToHsva=u;var d=function(e){var t=e.h,n=e.s,o=e.l;return{h:t,s:(n*=(o<50?o:100-o)/100)>0?2*n/(o+n)*100:0,v:o+n,a:e.a}};t.hslaToHsva=d;t.hsvaToHex=function(e){return N(p(e))};var s=function(e){var t=e.h,n=e.s,o=e.v,a=e.a,i=(200-n)*o/100;return{h:r(t),s:r(i>0&&i<200?n*o/100/(i<=100?i:200-i)*100:0),l:r(i/2),a:r(a,2)}};t.hsvaToHsla=s;t.hsvaToHslString=function(e){var t=s(e);return"hsl("+t.h+", "+t.s+"%, "+t.l+"%)"};t.hsvaToHsvString=function(e){var t=b(e);return"hsv("+t.h+", "+t.s+"%, "+t.v+"%)"};t.hsvaToHsvaString=function(e){var t=b(e);return"hsva("+t.h+", "+t.s+"%, "+t.v+"%, "+t.a+")"};t.hsvaToHslaString=function(e){var t=s(e);return"hsla("+t.h+", "+t.s+"%, "+t.l+"%, "+t.a+")"};var p=function(e){var t=e.h,n=e.s,o=e.v,a=e.a;t=t/360*6,n/=100,o/=100;var i=Math.floor(t),c=o*(1-n),l=o*(1-(t-i)*n),u=o*(1-(1-t+i)*n),d=i%6;return{r:255*[o,l,c,c,u,o][d],g:255*[u,o,o,l,c,c][d],b:255*[c,c,u,o,o,l][d],a:r(a,2)}};t.hsvaToRgba=p;t.hsvaToRgbString=function(e){var t=p(e),n=t.r,o=t.g,a=t.b;return"rgb("+r(n)+", "+r(o)+", "+r(a)+")"};t.hsvaToRgbaString=function(e){var t=p(e),n=t.r,o=t.g,a=t.b,i=t.a;return"rgba("+r(n)+", "+r(o)+", "+r(a)+", "+r(i,2)+")"};var m=function(e){var t=/hsva?\(?\s*(-?\d*\.?\d+)(deg|rad|grad|turn)?[,\s]+(-?\d*\.?\d+)%?[,\s]+(-?\d*\.?\d+)%?,?\s*[/\s]*(-?\d*\.?\d+)?(%)?\s*\)?/i.exec(e);return t?b({h:c(t[1],t[2]),s:Number(t[3]),v:Number(t[4]),a:t[5]===undefined?1:Number(t[5])/(t[6]?100:1)}):{h:0,s:0,v:0,a:1}};t.hsvaStringToHsva=m;var f=m;t.hsvStringToHsva=f;var h=function(e){var t=/rgba?\(?\s*(-?\d*\.?\d+)(%)?[,\s]+(-?\d*\.?\d+)(%)?[,\s]+(-?\d*\.?\d+)(%)?,?\s*[/\s]*(-?\d*\.?\d+)?(%)?\s*\)?/i.exec(e);return t?v({r:Number(t[1])/(t[2]?100/255:1),g:Number(t[3])/(t[4]?100/255:1),b:Number(t[5])/(t[6]?100/255:1),a:t[7]===undefined?1:Number(t[7])/(t[8]?100:1)}):{h:0,s:0,v:0,a:1}};t.rgbaStringToHsva=h;var C=h;t.rgbStringToHsva=C;var g=function(e){var t=e.toString(16);return t.length<2?"0"+t:t},N=function(e){var t=e.r,n=e.g,o=e.b,a=e.a,i=a<1?g(r(255*a)):"";return"#"+g(r(t))+g(r(n))+g(r(o))+i};t.rgbaToHex=N;var v=function(e){var t=e.r,n=e.g,o=e.b,r=e.a,a=Math.max(t,n,o),i=a-Math.min(t,n,o),c=i?a===t?(n-o)/i:a===n?2+(o-t)/i:4+(t-n)/i:0;return{h:60*(c<0?c+6:c),s:a?i/a*100:0,v:a/255*100,a:r}};t.rgbaToHsva=v;var b=function(e){return{h:r(e.h),s:r(e.s),v:r(e.v),a:r(e.a,2)}};t.roundHsva=b;t.rgbaToRgb=function(e){return{r:e.r,g:e.g,b:e.b}};t.hslaToHsl=function(e){return{h:e.h,s:e.s,l:e.l}};t.hsvaToHsv=function(e){var t=b(e);return{h:t.h,s:t.s,v:t.v}};var V=/^#?([0-9A-F]{3,8})$/i;t.validHex=function(e,t){var n=V.exec(e),o=n?n[1].length:0;return 3===o||6===o||!!t&&4===o||!!t&&8===o}},52844:function(e,t){"use strict";t.__esModule=!0,t.EventEmitter=void 0;var n=function(){function e(){this.listeners={}}var t=e.prototype;return t.on=function(e,t){this.listeners[e]=this.listeners[e]||[],this.listeners[e].push(t)},t.off=function(e,t){var n=this.listeners[e];if(!n)throw new Error('There is no listeners for "'+e+'"');this.listeners[e]=n.filter((function(e){return e!==t}))},t.emit=function(e){var t=this.listeners[e];if(t){for(var n=arguments.length,o=new Array(n>1?n-1:0),r=1;r<n;r++)o[r-1]=arguments[r];for(var a=0,i=t.length;a<i;a+=1)t[a].apply(void 0,o)}},t.clear=function(){this.listeners={}},e}();t.EventEmitter=n},32416:function(e,t){"use strict";function n(e,t){var n="undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(n)return(n=n.call(e)).next.bind(n);if(Array.isArray(e)||(n=function(e,t){if(!e)return;if("string"==typeof e)return o(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);"Object"===n&&e.constructor&&(n=e.constructor.name);if("Map"===n||"Set"===n)return Array.from(e);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return o(e,t)}(e))||t&&e&&"number"==typeof e.length){n&&(e=n);var r=0;return function(){return r>=e.length?{done:!0}:{done:!1,value:e[r++]}}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}function o(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,o=new Array(t);n<t;n++)o[n]=e[n];return o}t.__esModule=!0,t.compose=t.flow=void 0;t.flow=function r(){for(var e=arguments.length,t=new Array(e),o=0;o<e;o++)t[o]=arguments[o];return function(e){for(var o=e,a=arguments.length,i=new Array(a>1?a-1:0),c=1;c<a;c++)i[c-1]=arguments[c];for(var l,u=n(t);!(l=u()).done;){var d=l.value;Array.isArray(d)?o=r.apply(void 0,d).apply(void 0,[o].concat(i)):d&&(o=d.apply(void 0,[o].concat(i)))}return o}};t.compose=function(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];return 0===t.length?function(e){return e}:1===t.length?t[0]:t.reduce((function(e,t){return function(n){for(var o=arguments.length,r=new Array(o>1?o-1:0),a=1;a<o;a++)r[a-1]=arguments[a];return e.apply(void 0,[t.apply(void 0,[n].concat(r))].concat(r))}}))}},57890:function(e,t){"use strict";t.__esModule=!0,t.KEY_QUOTE=t.KEY_RIGHT_BRACKET=t.KEY_BACKSLASH=t.KEY_LEFT_BRACKET=t.KEY_SLASH=t.KEY_PERIOD=t.KEY_MINUS=t.KEY_COMMA=t.KEY_EQUAL=t.KEY_SEMICOLON=t.KEY_F12=t.KEY_F11=t.KEY_F10=t.KEY_F9=t.KEY_F8=t.KEY_F7=t.KEY_F6=t.KEY_F5=t.KEY_F4=t.KEY_F3=t.KEY_F2=t.KEY_F1=t.KEY_Z=t.KEY_Y=t.KEY_X=t.KEY_W=t.KEY_V=t.KEY_U=t.KEY_T=t.KEY_S=t.KEY_R=t.KEY_Q=t.KEY_P=t.KEY_O=t.KEY_N=t.KEY_M=t.KEY_L=t.KEY_K=t.KEY_J=t.KEY_I=t.KEY_H=t.KEY_G=t.KEY_F=t.KEY_E=t.KEY_D=t.KEY_C=t.KEY_B=t.KEY_A=t.KEY_9=t.KEY_8=t.KEY_7=t.KEY_6=t.KEY_5=t.KEY_4=t.KEY_3=t.KEY_2=t.KEY_1=t.KEY_0=t.KEY_DELETE=t.KEY_INSERT=t.KEY_DOWN=t.KEY_RIGHT=t.KEY_UP=t.KEY_LEFT=t.KEY_HOME=t.KEY_END=t.KEY_PAGEDOWN=t.KEY_PAGEUP=t.KEY_SPACE=t.KEY_ESCAPE=t.KEY_CAPSLOCK=t.KEY_PAUSE=t.KEY_ALT=t.KEY_CTRL=t.KEY_SHIFT=t.KEY_ENTER=t.KEY_TAB=t.KEY_BACKSPACE=void 0;t.KEY_BACKSPACE=8;t.KEY_TAB=9;t.KEY_ENTER=13;t.KEY_SHIFT=16;t.KEY_CTRL=17;t.KEY_ALT=18;t.KEY_PAUSE=19;t.KEY_CAPSLOCK=20;t.KEY_ESCAPE=27;t.KEY_SPACE=32;t.KEY_PAGEUP=33;t.KEY_PAGEDOWN=34;t.KEY_END=35;t.KEY_HOME=36;t.KEY_LEFT=37;t.KEY_UP=38;t.KEY_RIGHT=39;t.KEY_DOWN=40;t.KEY_INSERT=45;t.KEY_DELETE=46;t.KEY_0=48;t.KEY_1=49;t.KEY_2=50;t.KEY_3=51;t.KEY_4=52;t.KEY_5=53;t.KEY_6=54;t.KEY_7=55;t.KEY_8=56;t.KEY_9=57;t.KEY_A=65;t.KEY_B=66;t.KEY_C=67;t.KEY_D=68;t.KEY_E=69;t.KEY_F=70;t.KEY_G=71;t.KEY_H=72;t.KEY_I=73;t.KEY_J=74;t.KEY_K=75;t.KEY_L=76;t.KEY_M=77;t.KEY_N=78;t.KEY_O=79;t.KEY_P=80;t.KEY_Q=81;t.KEY_R=82;t.KEY_S=83;t.KEY_T=84;t.KEY_U=85;t.KEY_V=86;t.KEY_W=87;t.KEY_X=88;t.KEY_Y=89;t.KEY_Z=90;t.KEY_F1=112;t.KEY_F2=113;t.KEY_F3=114;t.KEY_F4=115;t.KEY_F5=116;t.KEY_F6=117;t.KEY_F7=118;t.KEY_F8=119;t.KEY_F9=120;t.KEY_F10=121;t.KEY_F11=122;t.KEY_F12=123;t.KEY_SEMICOLON=186;t.KEY_EQUAL=187;t.KEY_COMMA=188;t.KEY_MINUS=189;t.KEY_PERIOD=190;t.KEY_SLASH=191;t.KEY_LEFT_BRACKET=219;t.KEY_BACKSLASH=220;t.KEY_RIGHT_BRACKET=221;t.KEY_QUOTE=222},97622:function(e,t){"use strict";t.__esModule=!0,t.numberOfDecimalDigits=t.keyOfMatchingRange=t.inRange=t.toFixed=t.round=t.scale=t.clamp01=t.clamp=void 0;t.clamp=function(e,t,n){return e<t?t:e>n?n:e};t.clamp01=function(e){return e<0?0:e>1?1:e};t.scale=function(e,t,n){return(e-t)/(n-t)};t.round=function(e,t){return!e||isNaN(e)?e:(t|=0,a=+((e*=n=Math.pow(10,t))>0)|-(e<0),r=Math.abs(e%1)>=.4999999999854481,o=Math.floor(e),r&&(e=o+(a>0)),(r?e:Math.round(e))/n);var n,o,r,a};t.toFixed=function(e,t){return void 0===t&&(t=0),Number(e).toFixed(Math.max(t,0))};var n=function(e,t){return t&&e>=t[0]&&e<=t[1]};t.inRange=n;t.keyOfMatchingRange=function(e,t){for(var o=0,r=Object.keys(t);o<r.length;o++){var a=r[o],i=t[a];if(n(e,i))return a}};t.numberOfDecimalDigits=function(e){return Math.floor(e)!==e&&e.toString().split(".")[1].length||0}},28440:function(e,t){"use strict";var n;t.__esModule=!0,t.perf=void 0;null==(n=window.performance)||n.now;var o={mark:function(e,t){0},measure:function(e,t){}};t.perf=o},1060:function(e,t){"use strict";t.__esModule=!0,t.canRender=t.pureComponentHooks=t.shallowDiffers=t.normalizeChildren=t.classes=void 0;t.classes=function(e){for(var t="",n=0;n<e.length;n++){var o=e[n];"string"==typeof o&&(t+=o+" ")}return t};t.normalizeChildren=function(e){return Array.isArray(e)?e.flat().filter((function(e){return e})):"object"==typeof e?[e]:[]};var n=function(e,t){var n;for(n in e)if(!(n in t))return!0;for(n in t)if(e[n]!==t[n])return!0;return!1};t.shallowDiffers=n;var o={onComponentShouldUpdate:function(e,t){return n(e,t)}};t.pureComponentHooks=o;t.canRender=function(e){return e!==undefined&&null!==e&&"boolean"!=typeof e}},465:function(e,t,n){"use strict";t.__esModule=!0,t.useSelector=t.useDispatch=t.createAction=t.combineReducers=t.applyMiddleware=t.createStore=void 0;var o=n(32416);function r(e,t){var n="undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(n)return(n=n.call(e)).next.bind(n);if(Array.isArray(e)||(n=function(e,t){if(!e)return;if("string"==typeof e)return a(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);"Object"===n&&e.constructor&&(n=e.constructor.name);if("Map"===n||"Set"===n)return Array.from(e);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return a(e,t)}(e))||t&&e&&"number"==typeof e.length){n&&(e=n);var o=0;return function(){return o>=e.length?{done:!0}:{done:!1,value:e[o++]}}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}function a(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,o=new Array(t);n<t;n++)o[n]=e[n];return o}t.createStore=function i(e,t){if(t)return t(i)(e);var n,o=[],r=function(t){n=e(n,t);for(var r=0;r<o.length;r++)o[r]()};return r({type:"@@INIT"}),{dispatch:r,subscribe:function(e){o.push(e)},getState:function(){return n}}};t.applyMiddleware=function(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];return function(e){return function(n){for(var r=arguments.length,a=new Array(r>1?r-1:0),i=1;i<r;i++)a[i-1]=arguments[i];var c=e.apply(void 0,[n].concat(a)),l=function(){throw new Error("Dispatching while constructing your middleware is not allowed.")},u={getState:c.getState,dispatch:function(e){for(var t=arguments.length,n=new Array(t>1?t-1:0),o=1;o<t;o++)n[o-1]=arguments[o];return l.apply(void 0,[e].concat(n))}},d=t.map((function(e){return e(u)}));return l=o.compose.apply(void 0,d)(c.dispatch),Object.assign({},c,{dispatch:l})}}};t.combineReducers=function(e){var t=Object.keys(e),n=!1;return function(o,a){void 0===o&&(o={});for(var i,c=Object.assign({},o),l=r(t);!(i=l()).done;){var u=i.value,d=e[u],s=o[u],p=d(s,a);s!==p&&(n=!0,c[u]=p)}return n?c:o}};t.createAction=function(e,t){void 0===t&&(t=null);var n=function(){if(!t)return{type:e,payload:arguments.length<=0?undefined:arguments[0]};var n=t.apply(void 0,arguments);if(!n)throw new Error("prepare function did not return an object");var o={type:e};return"payload"in n&&(o.payload=n.payload),"meta"in n&&(o.meta=n.meta),o};return n.toString=function(){return""+e},n.type=e,n.match=function(t){return t.type===e},n};t.useDispatch=function(e){return e.store.dispatch};t.useSelector=function(e,t){return t(e.store.getState())}},7151:function(e,t){"use strict";function n(e,t,n,o,r,a,i){try{var c=e[a](i),l=c.value}catch(u){return void n(u)}c.done?t(l):Promise.resolve(l).then(o,r)}function o(e){return function(){var t=this,o=arguments;return new Promise((function(r,a){var i=e.apply(t,o);function c(e){n(i,r,a,c,l,"next",e)}function l(e){n(i,r,a,c,l,"throw",e)}c(undefined)}))}}t.__esModule=!0,t.storage=t.IMPL_INDEXED_DB=t.IMPL_LOCAL_STORAGE=t.IMPL_MEMORY=void 0;t.IMPL_MEMORY=0;t.IMPL_LOCAL_STORAGE=1;t.IMPL_INDEXED_DB=2;var r="storage-v1",a="readwrite",i=function(e){return function(){try{return Boolean(e())}catch(t){return!1}}},c=i((function(){return window.localStorage&&window.localStorage.getItem})),l=i((function(){return(window.indexedDB||window.msIndexedDB)&&(window.IDBTransaction||window.msIDBTransaction)})),u=function(){function e(){this.impl=0,this.store={}}var t=e.prototype;return t.get=function(e){return this.store[e]},t.set=function(e,t){this.store[e]=t},t.remove=function(e){this.store[e]=undefined},t.clear=function(){this.store={}},e}(),d=function(){function e(){this.impl=1,this.store={}}var t=e.prototype;return t.get=function(e){var t=localStorage.getItem(e);if("string"==typeof t)return JSON.parse(t)},t.set=function(e,t){localStorage.setItem(e,JSON.stringify(t))},t.remove=function(e){localStorage.removeItem(e)},t.clear=function(){localStorage.clear()},e}(),s=function(){function e(){this.impl=2,this.dbPromise=new Promise((function(e,t){var n=(window.indexedDB||window.msIndexedDB).open("tgui",1);n.onupgradeneeded=function(){try{n.result.createObjectStore(r)}catch(e){t(new Error("Failed to upgrade IDB: "+n.error))}},n.onsuccess=function(){return e(n.result)},n.onerror=function(){t(new Error("Failed to open IDB: "+n.error))}}))}var t=e.prototype;return t.getStore=function(e){return this.dbPromise.then((function(t){return t.transaction(r,e).objectStore(r)}))},t.get=function(){var e=o(regeneratorRuntime.mark((function t(e){var n;return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,this.getStore("readonly");case 2:return n=t.sent,t.abrupt("return",new Promise((function(t,o){var r=n.get(e);r.onsuccess=function(){return t(r.result)},r.onerror=function(){return o(r.error)}})));case 4:case"end":return t.stop()}}),t,this)})));return function(t){return e.apply(this,arguments)}}(),t.set=function(){var e=o(regeneratorRuntime.mark((function t(e,n){return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return null===n&&(n=undefined),t.next=3,this.getStore(a);case 3:t.sent.put(n,e);case 5:case"end":return t.stop()}}),t,this)})));return function(t,n){return e.apply(this,arguments)}}(),t.remove=function(){var e=o(regeneratorRuntime.mark((function t(e){return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,this.getStore(a);case 2:t.sent["delete"](e);case 4:case"end":return t.stop()}}),t,this)})));return function(t){return e.apply(this,arguments)}}(),t.clear=function(){var e=o(regeneratorRuntime.mark((function t(){return regeneratorRuntime.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,this.getStore(a);case 2:e.sent.clear();case 4:case"end":return e.stop()}}),t,this)})));return function(){return e.apply(this,arguments)}}(),e}(),p=function(){function e(){this.backendPromise=o(regeneratorRuntime.mark((function e(){var t;return regeneratorRuntime.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(!l()){e.next=10;break}return e.prev=1,t=new s,e.next=5,t.dbPromise;case 5:return e.abrupt("return",t);case 8:e.prev=8,e.t0=e["catch"](1);case 10:if(!c()){e.next=12;break}return e.abrupt("return",new d);case 12:return e.abrupt("return",new u);case 13:case"end":return e.stop()}}),e,null,[[1,8]])})))()}var t=e.prototype;return t.get=function(){var e=o(regeneratorRuntime.mark((function t(e){var n;return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,this.backendPromise;case 2:return n=t.sent,t.abrupt("return",n.get(e));case 4:case"end":return t.stop()}}),t,this)})));return function(t){return e.apply(this,arguments)}}(),t.set=function(){var e=o(regeneratorRuntime.mark((function t(e,n){var o;return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,this.backendPromise;case 2:return o=t.sent,t.abrupt("return",o.set(e,n));case 4:case"end":return t.stop()}}),t,this)})));return function(t,n){return e.apply(this,arguments)}}(),t.remove=function(){var e=o(regeneratorRuntime.mark((function t(e){var n;return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,this.backendPromise;case 2:return n=t.sent,t.abrupt("return",n.remove(e));case 4:case"end":return t.stop()}}),t,this)})));return function(t){return e.apply(this,arguments)}}(),t.clear=function(){var e=o(regeneratorRuntime.mark((function t(){var e;return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,this.backendPromise;case 2:return e=t.sent,t.abrupt("return",e.clear());case 4:case"end":return t.stop()}}),t,this)})));return function(){return e.apply(this,arguments)}}(),e}(),m=new p;t.storage=m},21118:function(e,t){"use strict";function n(e,t){var n="undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(n)return(n=n.call(e)).next.bind(n);if(Array.isArray(e)||(n=function(e,t){if(!e)return;if("string"==typeof e)return o(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);"Object"===n&&e.constructor&&(n=e.constructor.name);if("Map"===n||"Set"===n)return Array.from(e);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return o(e,t)}(e))||t&&e&&"number"==typeof e.length){n&&(e=n);var r=0;return function(){return r>=e.length?{done:!0}:{done:!1,value:e[r++]}}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}function o(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,o=new Array(t);n<t;n++)o[n]=e[n];return o}t.__esModule=!0,t.buildQueryString=t.decodeHtmlEntities=t.toTitleCase=t.capitalize=t.createSearch=t.createGlobPattern=t.multiline=void 0;t.multiline=function r(e){if(Array.isArray(e))return r(e.join(""));for(var t,o,a=e.split("\n"),i=n(a);!(o=i()).done;)for(var c=o.value,l=0;l<c.length;l++){if(" "!==c[l]){(t===undefined||l<t)&&(t=l);break}}return t||(t=0),a.map((function(e){return e.substr(t).trimRight()})).join("\n").trim()};t.createGlobPattern=function(e){var t=new RegExp("^"+e.split(/\*+/).map((function(e){return e.replace(/[|\\{}()[\]^$+*?.]/g,"\\$&")})).join(".*")+"$");return function(e){return t.test(e)}};t.createSearch=function(e,t){var n=e.toLowerCase().trim();return function(e){if(!n)return!0;var o=t?t(e):e;return!!o&&o.toLowerCase().includes(n)}};t.capitalize=function a(e){return Array.isArray(e)?e.map(a):e.charAt(0).toUpperCase()+e.slice(1).toLowerCase()};t.toTitleCase=function i(e){if(Array.isArray(e))return e.map(i);if("string"!=typeof e)return e;for(var t=e.replace(/([^\W_]+[^\s-]*) */g,(function(e){return e.charAt(0).toUpperCase()+e.substr(1).toLowerCase()})),n=0,o=["A","An","And","As","At","But","By","For","For","From","In","Into","Near","Nor","Of","On","Onto","Or","The","To","With"];n<o.length;n++){var r=new RegExp("\\s"+o[n]+"\\s","g");t=t.replace(r,(function(e){return e.toLowerCase()}))}for(var a=0,c=["Id","Tv"];a<c.length;a++){var l=new RegExp("\\b"+c[a]+"\\b","g");t=t.replace(l,(function(e){return e.toLowerCase()}))}return t};t.decodeHtmlEntities=function(e){if(!e)return e;var t={nbsp:" ",amp:"&",quot:'"',lt:"<",gt:">",apos:"'"};return e.replace(/<br>/gi,"\n").replace(/<\/?[a-z0-9-_]+[^>]*>/gi,"").replace(/&(nbsp|amp|quot|lt|gt|apos);/g,(function(e,n){return t[n]})).replace(/&#?([0-9]+);/gi,(function(e,t){var n=parseInt(t,10);return String.fromCharCode(n)})).replace(/&#x?([0-9a-f]+);/gi,(function(e,t){var n=parseInt(t,16);return String.fromCharCode(n)}))};t.buildQueryString=function(e){return Object.keys(e).map((function(t){return encodeURIComponent(t)+"="+encodeURIComponent(e[t])})).join("&")}},53538:function(e,t){"use strict";t.__esModule=!0,t.sleep=t.debounce=void 0;t.debounce=function(e,t,n){var o;return void 0===n&&(n=!1),function(){for(var r=arguments.length,a=new Array(r),i=0;i<r;i++)a[i]=arguments[i];var c=n&&!o;clearTimeout(o),o=setTimeout((function(){o=null,n||e.apply(void 0,a)}),t),c&&e.apply(void 0,a)}};t.sleep=function(e){return new Promise((function(t){return setTimeout(t,e)}))}},67288:function(e,t,n){"use strict";t.__esModule=!0,t.vecNormalize=t.vecLength=t.vecInverse=t.vecScale=t.vecDivide=t.vecMultiply=t.vecSubtract=t.vecAdd=void 0;var o=n(1397),r=function(e,t){return e+t},a=function(e,t){return e-t},i=function(e,t){return e*t},c=function(e,t){return e/t};t.vecAdd=function(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];return(0,o.reduce)((function(e,t){return(0,o.zipWith)(r)(e,t)}))(t)};t.vecSubtract=function(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];return(0,o.reduce)((function(e,t){return(0,o.zipWith)(a)(e,t)}))(t)};t.vecMultiply=function(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];return(0,o.reduce)((function(e,t){return(0,o.zipWith)(i)(e,t)}))(t)};var l=function(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];return(0,o.reduce)((function(e,t){return(0,o.zipWith)(c)(e,t)}))(t)};t.vecDivide=l;t.vecScale=function(e,t){return(0,o.map)((function(e){return e*t}))(e)};t.vecInverse=function(e){return(0,o.map)((function(e){return-e}))(e)};var u=function(e){return Math.sqrt((0,o.reduce)(r)((0,o.zipWith)(i)(e,e)))};t.vecLength=u;t.vecNormalize=function(e){return l(e,u(e))}},88280:function(){"use strict";!function(e){if("undefined"!=typeof e.setAttribute){var t=function(e){return e.replace(/-[a-z]/g,(function(e){return e[1].toUpperCase()}))};e.setProperty=function(e,n){var o=t(e);if(!n)return this.removeAttribute(o);var r=String(n);return this.setAttribute(o,r)},e.getPropertyValue=function(e){var n=t(e);return this.getAttribute(n)||null},e.removeProperty=function(e){var n=t(e),o=this.getAttribute(n);return this.removeAttribute(n),o}}}(CSSStyleDeclaration.prototype)},15511:function(){"use strict";!function(e){function t(){return s.createDocumentFragment()}function n(e){return s.createElement(e)}function o(e,t){if(!e)throw new Error("Failed to construct "+t+": 1 argument required, but only 0 present.")}function r(e){if(1===e.length)return a(e[0]);for(var n=t(),o=T.call(e),r=0;r<e.length;r++)n.appendChild(a(o[r]));return n}function a(e){return"object"==typeof e?e:s.createTextNode(e)}for(var i,c,l,u,d,s=e.document,p=Object.prototype.hasOwnProperty,m=Object.defineProperty||function(e,t,n){return p.call(n,"value")?e[t]=n.value:(p.call(n,"get")&&e.__defineGetter__(t,n.get),p.call(n,"set")&&e.__defineSetter__(t,n.set)),e},f=[].indexOf||function(e){for(var t=this.length;t--&&this[t]!==e;);return t},h=function(e){var t="undefined"==typeof e.className,n=t?e.getAttribute("class")||"":e.className,o=t||"object"==typeof n,r=(o?t?n:n.baseVal:n).replace(g,"");r.length&&A.push.apply(this,r.split(N)),this._isSVG=o,this._=e},C={get:function(){return new h(this)},set:function(){}},g=/^\s+|\s+$/g,N=/\s+/,v="classList",b=function(e,t){return this.contains(e)?t||this.remove(e):(t===undefined||t)&&(t=!0,this.add(e)),!!t},V=e.DocumentFragment&&DocumentFragment.prototype,y=e.Node,x=(y||Element).prototype,k=e.CharacterData||y,S=k&&k.prototype,I=e.DocumentType,w=I&&I.prototype,_=(e.Element||y||e.HTMLElement).prototype,D=e.HTMLSelectElement||n("select").constructor,M=D.prototype.remove,B=e.SVGElement,A=["matches",_.matchesSelector||_.webkitMatchesSelector||_.khtmlMatchesSelector||_.mozMatchesSelector||_.msMatchesSelector||_.oMatchesSelector||function(e){var t=this.parentNode;return!!t&&-1<f.call(t.querySelectorAll(e),this)},"closest",function(e){for(var t,n=this;(t=n&&n.matches)&&!n.matches(e);)n=n.parentNode;return t?n:null},"prepend",function(){var e=this.firstChild,t=r(arguments);e?this.insertBefore(t,e):this.appendChild(t)},"append",function(){this.appendChild(r(arguments))},"before",function(){var e=this.parentNode;e&&e.insertBefore(r(arguments),this)},"after",function(){var e=this.parentNode,t=this.nextSibling,n=r(arguments);e&&(t?e.insertBefore(n,t):e.appendChild(n))},"toggleAttribute",function(e,t){var n=this.hasAttribute(e);return 1<arguments.length?n&&!t?this.removeAttribute(e):t&&!n&&this.setAttribute(e,""):n?this.removeAttribute(e):this.setAttribute(e,""),this.hasAttribute(e)},"replace",function(){this.replaceWith.apply(this,arguments)},"replaceWith",function(){var e=this.parentNode;e&&e.replaceChild(r(arguments),this)},"remove",function(){var e=this.parentNode;e&&e.removeChild(this)}],T=A.slice,L=A.length;L;L-=2)if((c=A[L-2])in _||(_[c]=A[L-1]),"remove"!==c||M._dom4||((D.prototype[c]=function(){return 0<arguments.length?M.apply(this,arguments):_.remove.call(this)})._dom4=!0),/^(?:before|after|replace|replaceWith|remove)$/.test(c)&&(k&&!(c in S)&&(S[c]=A[L-1]),I&&!(c in w)&&(w[c]=A[L-1])),/^(?:append|prepend)$/.test(c))if(V)c in V||(V[c]=A[L-1]);else try{t().constructor.prototype[c]=A[L-1]}catch(P){}var E;n("a").matches("a")||(_[c]=(E=_[c],function(e){return E.call(this.parentNode?this:t().appendChild(this),e)})),h.prototype={length:0,add:function(){for(var e,t=0;t<arguments.length;t++)e=arguments[t],this.contains(e)||A.push.call(this,c);this._isSVG?this._.setAttribute("class",""+this):this._.className=""+this},contains:function(e){return function(t){return-1<(L=e.call(this,c=function(e){if(!e)throw"SyntaxError";if(N.test(e))throw"InvalidCharacterError";return e}(t)))}}([].indexOf||function(e){for(L=this.length;L--&&this[L]!==e;);return L}),item:function(e){return this[e]||null},remove:function(){for(var e,t=0;t<arguments.length;t++)e=arguments[t],this.contains(e)&&A.splice.call(this,L,1);this._isSVG?this._.setAttribute("class",""+this):this._.className=""+this},toggle:b,toString:function(){return A.join.call(this," ")}},B&&!(v in B.prototype)&&m(B.prototype,v,C),v in s.documentElement?((u=n("div")[v]).add("a","b","a"),"a b"!=u&&("add"in(l=u.constructor.prototype)||(l=e.TemporaryTokenList.prototype),d=function(e){return function(){for(var t=0;t<arguments.length;)e.call(this,arguments[t++])}},l.add=d(l.add),l.remove=d(l.remove),l.toggle=b)):m(_,v,C),"contains"in x||m(x,"contains",{value:function(e){for(;e&&e!==this;)e=e.parentNode;return this===e}}),"head"in s||m(s,"head",{get:function(){return i||(i=s.getElementsByTagName("head")[0])}}),function(){for(var t,n=e.requestAnimationFrame,o=e.cancelAnimationFrame,r=["o","ms","moz","webkit"],a=r.length;!o&&a--;)n=n||e[r[a]+"RequestAnimationFrame"],o=e[r[a]+"CancelAnimationFrame"]||e[r[a]+"CancelRequestAnimationFrame"];o||(n?(t=n,n=function(e){var n=!0;return t((function(){n&&e.apply(this,arguments)})),function(){n=!1}},o=function(e){e()}):(n=function(e){return setTimeout(e,15,15)},o=function(e){clearTimeout(e)})),e.requestAnimationFrame=n,e.cancelAnimationFrame=o}();try{new e.CustomEvent("?")}catch(P){e.CustomEvent=function(e,t){function n(e,t,n,o){this.initEvent(e,t,n),this.detail=o}return function(o,r){var a=s.createEvent(e);if("string"!=typeof o)throw new Error("An event name must be provided");return"Event"==e&&(a.initCustomEvent=n),null==r&&(r=t),a.initCustomEvent(o,r.bubbles,r.cancelable,r.detail),a}}(e.CustomEvent?"CustomEvent":"Event",{bubbles:!1,cancelable:!1,detail:null})}try{new Event("_")}catch(P){P=function(e){function t(e,t){o(arguments.length,"Event");var n=s.createEvent("Event");return t||(t={}),n.initEvent(e,!!t.bubbles,!!t.cancelable),n}return t.prototype=e.prototype,t}(e.Event||function(){}),m(e,"Event",{value:P}),Event!==P&&(Event=P)}try{new KeyboardEvent("_",{})}catch(P){P=function(t){var n,r=0,a={char:"",key:"",location:0,ctrlKey:!1,shiftKey:!1,altKey:!1,metaKey:!1,altGraphKey:!1,repeat:!1,locale:navigator.language,detail:0,bubbles:!1,cancelable:!1,keyCode:0,charCode:0,which:0};try{var i=s.createEvent("KeyboardEvent");i.initKeyboardEvent("keyup",!1,!1,e,"+",3,!0,!1,!0,!1,!1),r="+"==(i.keyIdentifier||i.key)&&3==(i.keyLocation||i.location)&&(i.ctrlKey?i.altKey?1:3:i.shiftKey?2:4)||9}catch(P){}function c(e,t,n){try{t[e]=n[e]}catch(P){}}function l(t,i){o(arguments.length,"KeyboardEvent"),i=function(e,t){for(var n in t)t.hasOwnProperty(n)&&!t.hasOwnProperty.call(e,n)&&(e[n]=t[n]);return e}(i||{},a);var l,u=s.createEvent(n),d=i.ctrlKey,p=i.shiftKey,m=i.altKey,f=i.metaKey,h=i.altGraphKey,C=r>3?function(e){for(var t=[],n=["ctrlKey","Control","shiftKey","Shift","altKey","Alt","metaKey","Meta","altGraphKey","AltGraph"],o=0;o<n.length;o+=2)e[n[o]]&&t.push(n[o+1]);return t.join(" ")}(i):null,g=String(i.key),N=String(i.char),v=i.location,b=i.keyCode||(i.keyCode=g)&&g.charCodeAt(0)||0,V=i.charCode||(i.charCode=N)&&N.charCodeAt(0)||0,y=i.bubbles,x=i.cancelable,k=i.repeat,S=i.locale,I=i.view||e;if(i.which||(i.which=i.keyCode),"initKeyEvent"in u)u.initKeyEvent(t,y,x,I,d,m,p,f,b,V);else if(0<r&&"initKeyboardEvent"in u){switch(l=[t,y,x,I],r){case 1:l.push(g,v,d,p,m,f,h);break;case 2:l.push(d,m,p,f,b,V);break;case 3:l.push(g,v,d,m,p,f,h);break;case 4:l.push(g,v,C,k,S);break;default:l.push(char,g,v,C,k,S)}u.initKeyboardEvent.apply(u,l)}else u.initEvent(t,y,x);for(g in u)a.hasOwnProperty(g)&&u[g]!==i[g]&&c(g,u,i);return u}return n=0<r?"KeyboardEvent":"Event",l.prototype=t.prototype,l}(e.KeyboardEvent||function(){}),m(e,"KeyboardEvent",{value:P}),KeyboardEvent!==P&&(KeyboardEvent=P)}try{new MouseEvent("_",{})}catch(P){P=function(t){function n(t,n){o(arguments.length,"MouseEvent");var r=s.createEvent("MouseEvent");return n||(n={}),r.initMouseEvent(t,!!n.bubbles,!!n.cancelable,n.view||e,n.detail||1,n.screenX||0,n.screenY||0,n.clientX||0,n.clientY||0,!!n.ctrlKey,!!n.altKey,!!n.shiftKey,!!n.metaKey,n.button||0,n.relatedTarget||null),r}return n.prototype=t.prototype,n}(e.MouseEvent||function(){}),m(e,"MouseEvent",{value:P}),MouseEvent!==P&&(MouseEvent=P)}s.querySelectorAll("*").forEach||function(){function e(e){var t=e.querySelectorAll;e.querySelectorAll=function(e){var n=t.call(this,e);return n.forEach=Array.prototype.forEach,n}}e(s),e(Element.prototype)}();try{s.querySelector(":scope *")}catch(P){!function(){var e="data-scope-"+(1e9*Math.random()>>>0),t=Element.prototype,n=t.querySelector,o=t.querySelectorAll;function r(t,n,o){t.setAttribute(e,null);var r=n.call(t,String(o).replace(/(^|,\s*)(:scope([ >]|$))/g,(function(t,n,o,r){return n+"["+e+"]"+(r||" ")})));return t.removeAttribute(e),r}t.querySelector=function(e){return r(this,n,e)},t.querySelectorAll=function(e){return r(this,o,e)}}()}}(window),function(e){var t=e.WeakMap||function(){var e,t=0,n=!1,o=!1;function r(t,r,a){o=a,n=!1,e=undefined,t.dispatchEvent(r)}function a(e){this.value=e}function c(){t++,this.__ce__=new i("@DOMMap:"+t+Math.random())}return a.prototype.handleEvent=function(t){n=!0,o?t.currentTarget.removeEventListener(t.type,this,!1):e=this.value},c.prototype={constructor:c,"delete":function(e){return r(e,this.__ce__,!0),n},get:function(t){r(t,this.__ce__,!1);var n=e;return e=undefined,n},has:function(e){return r(e,this.__ce__,!1),n},set:function(e,t){return r(e,this.__ce__,!0),e.addEventListener(this.__ce__.type,new a(t),!1),this}},c}();function n(){}function o(e,t,n){function r(e){r.once&&(e.currentTarget.removeEventListener(e.type,t,r),r.removed=!0),r.passive&&(e.preventDefault=o.preventDefault),"function"==typeof r.callback?r.callback.call(this,e):r.callback&&r.callback.handleEvent(e),r.passive&&delete e.preventDefault}return r.type=e,r.callback=t,r.capture=!!n.capture,r.passive=!!n.passive,r.once=!!n.once,r.removed=!1,r}n.prototype=(Object.create||Object)(null),o.preventDefault=function(){};var r,a,i=e.CustomEvent,c=e.dispatchEvent,l=e.addEventListener,u=e.removeEventListener,d=0,s=function(){d++},p=[].indexOf||function(e){for(var t=this.length;t--&&this[t]!==e;);return t},m=function(e){return"".concat(e.capture?"1":"0",e.passive?"1":"0",e.once?"1":"0")};try{l("_",s,{once:!0}),c(new i("_")),c(new i("_")),u("_",s,{once:!0})}catch(f){}1!==d&&(a=new t,r=function(e){if(e){var t=e.prototype;t.addEventListener=function(e){return function(t,r,i){if(i&&"boolean"!=typeof i){var c,l,u,d=a.get(this),s=m(i);d||a.set(this,d=new n),t in d||(d[t]={handler:[],wrap:[]}),l=d[t],(c=p.call(l.handler,r))<0?(c=l.handler.push(r)-1,l.wrap[c]=u=new n):u=l.wrap[c],s in u||(u[s]=o(t,r,i),e.call(this,t,u[s],u[s].capture))}else e.call(this,t,r,i)}}(t.addEventListener),t.removeEventListener=function(e){return function(t,n,o){if(o&&"boolean"!=typeof o){var r,i,c,l,u=a.get(this);if(u&&t in u&&(c=u[t],-1<(i=p.call(c.handler,n))&&(r=m(o))in(l=c.wrap[i]))){for(r in e.call(this,t,l[r],l[r].capture),delete l[r],l)return;c.handler.splice(i,1),c.wrap.splice(i,1),0===c.handler.length&&delete u[t]}}else e.call(this,t,n,o)}}(t.removeEventListener)}},e.EventTarget?r(EventTarget):(r(e.Text),r(e.Element||e.HTMLElement),r(e.HTMLDocument),r(e.Window||{prototype:e}),r(e.XMLHttpRequest)))}(window)},25513:function(e){"use strict";!function(t,n){var o,r,a=t.html5||{},i=/^<|^(?:button|map|select|textarea|object|iframe|option|optgroup)$/i,c=/^(?:a|b|code|div|fieldset|h1|h2|h3|h4|h5|h6|i|label|li|ol|p|q|span|strong|style|table|tbody|td|th|tr|ul)$/i,l="_html5shiv",u=0,d={};function s(){var e=h.elements;return"string"==typeof e?e.split(" "):e}function p(e){var t=d[e[l]];return t||(t={},u++,e[l]=u,d[u]=t),t}function m(e,t,o){return t||(t=n),r?t.createElement(e):(o||(o=p(t)),!(a=o.cache[e]?o.cache[e].cloneNode():c.test(e)?(o.cache[e]=o.createElem(e)).cloneNode():o.createElem(e)).canHaveChildren||i.test(e)||a.tagUrn?a:o.frag.appendChild(a));var a}function f(e){e||(e=n);var t=p(e);return!h.shivCSS||o||t.hasCSS||(t.hasCSS=!!function(e,t){var n=e.createElement("p"),o=e.getElementsByTagName("head")[0]||e.documentElement;return n.innerHTML="x<style>"+t+"</style>",o.insertBefore(n.lastChild,o.firstChild)}(e,"article,aside,dialog,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}mark{background:#FF0;color:#000}template{display:none}")),r||function(e,t){t.cache||(t.cache={},t.createElem=e.createElement,t.createFrag=e.createDocumentFragment,t.frag=t.createFrag()),e.createElement=function(n){return h.shivMethods?m(n,e,t):t.createElem(n)},e.createDocumentFragment=Function("h,f","return function(){var n=f.cloneNode(),c=n.createElement;h.shivMethods&&("+s().join().replace(/[\w\-:]+/g,(function(e){return t.createElem(e),t.frag.createElement(e),'c("'+e+'")'}))+");return n}")(h,t.frag)}(e,t),e}!function(){try{var e=n.createElement("a");e.innerHTML="<xyz></xyz>",o="hidden"in e,r=1==e.childNodes.length||function(){n.createElement("a");var e=n.createDocumentFragment();return"undefined"==typeof e.cloneNode||"undefined"==typeof e.createDocumentFragment||"undefined"==typeof e.createElement}()}catch(t){o=!0,r=!0}}();var h={elements:a.elements||"abbr article aside audio bdi canvas data datalist details dialog figcaption figure footer header hgroup main mark meter nav output picture progress section summary template time video",version:"3.7.3",shivCSS:!1!==a.shivCSS,supportsUnknownElements:r,shivMethods:!1!==a.shivMethods,type:"default",shivDocument:f,createElement:m,createDocumentFragment:function(e,t){if(e||(e=n),r)return e.createDocumentFragment();for(var o=(t=t||p(e)).frag.cloneNode(),a=0,i=s(),c=i.length;a<c;a++)o.createElement(i[a]);return o},addElements:function(e,t){var n=h.elements;"string"!=typeof n&&(n=n.join(" ")),"string"!=typeof e&&(e=e.join(" ")),h.elements=n+" "+e,f(t)}};t.html5=h,f(n),e.exports&&(e.exports=h)}(window,document)},72090:function(){"use strict";!function(e){if(!document.createEvent){var t,n=!0,o=!1,r="onreadystatechange",a="DOMContentLoaded",i="__IE8__"+Math.random(),c=Object.defineProperty||function(e,t,n){e[t]=n.value},l=Object.defineProperties||function(t,n){for(var o in n)if(d.call(n,o))try{c(t,o,n[o])}catch(r){e.console}},u=Object.getOwnPropertyDescriptor,d=Object.prototype.hasOwnProperty,s=e.Element.prototype,p=e.Text.prototype,m=/^[a-z]+$/,f=/loaded|complete/,h={},C=document.createElement("div"),g=document.documentElement,N=g.removeAttribute,v=g.setAttribute,b=function(e){return{enumerable:!0,writable:!0,configurable:!0,value:e}};S(e.HTMLCommentElement.prototype,s,"nodeValue"),S(e.HTMLScriptElement.prototype,null,"text"),S(p,null,"nodeValue"),S(e.HTMLTitleElement.prototype,null,"text"),c(e.HTMLStyleElement.prototype,"textContent",(t=u(e.CSSStyleSheet.prototype,"cssText"),k((function(){return t.get.call(this.styleSheet)}),(function(e){t.set.call(this.styleSheet,e)}))));var V=/\b\s*alpha\s*\(\s*opacity\s*=\s*(\d+)\s*\)/;c(e.CSSStyleDeclaration.prototype,"opacity",{get:function(){var e=this.filter.match(V);return e?(e[1]/100).toString():""},set:function(e){this.zoom=1;var t=!1;e=e<1?" alpha(opacity="+Math.round(100*e)+")":"",this.filter=this.filter.replace(V,(function(){return t=!0,e})),!t&&e&&(this.filter+=e)}}),l(s,{textContent:{get:w,set:B},firstElementChild:{get:function(){for(var e=this.childNodes||[],t=0,n=e.length;t<n;t++)if(1==e[t].nodeType)return e[t]}},lastElementChild:{get:function(){for(var e=this.childNodes||[],t=e.length;t--;)if(1==e[t].nodeType)return e[t]}},oninput:{get:function(){return this._oninput||null},set:function(e){this._oninput&&(this.removeEventListener("input",this._oninput),this._oninput=e,e&&this.addEventListener("input",e))}},previousElementSibling:{get:function(){for(var e=this.previousSibling;e&&1!=e.nodeType;)e=e.previousSibling;return e}},nextElementSibling:{get:function(){for(var e=this.nextSibling;e&&1!=e.nodeType;)e=e.nextSibling;return e}},childElementCount:{get:function(){for(var e=0,t=this.childNodes||[],n=t.length;n--;e+=1==t[n].nodeType);return e}},addEventListener:b((function(e,t,n){if("function"==typeof t||"object"==typeof t){var o,r,a=this,l="on"+e,u=a[i]||c(a,i,{value:{}})[i],s=u[l]||(u[l]={}),p=s.h||(s.h=[]);if(!d.call(s,"w")){if(s.w=function(e){return e[i]||x(a,A(0,e),p,!1)},!d.call(h,l))if(m.test(e)){try{(o=document.createEventObject())[i]=!0,9!=a.nodeType&&(null==a.parentNode&&C.appendChild(a),(r=a.getAttribute(l))&&N.call(a,l)),a.fireEvent(l,o),h[l]=!0}catch(f){for(h[l]=!1;C.hasChildNodes();)C.removeChild(C.firstChild)}null!=r&&v.call(a,l,r)}else h[l]=!1;(s.n=h[l])&&a.attachEvent(l,s.w)}I(p,t)<0&&p[n?"unshift":"push"](t),"input"===e&&a.attachEvent("onkeyup",_)}})),dispatchEvent:b((function(e){var t,n=this,o="on"+e.type,r=n[i],a=r&&r[o],c=!!a;return e.target||(e.target=n),c?a.n?n.fireEvent(o,e):x(n,e,a.h,!0):!(t=n.parentNode)||t.dispatchEvent(e),!e.defaultPrevented})),removeEventListener:b((function(e,t,n){if("function"==typeof t||"object"==typeof t){var o="on"+e,r=this[i],a=r&&r[o],c=a&&a.h,l=c?I(c,t):-1;-1<l&&c.splice(l,1)}}))}),l(p,{addEventListener:b(s.addEventListener),dispatchEvent:b(s.dispatchEvent),removeEventListener:b(s.removeEventListener)}),l(e.XMLHttpRequest.prototype,{addEventListener:b((function(e,t,n){var o=this,r="on"+e,a=o[i]||c(o,i,{value:{}})[i],l=a[r]||(a[r]={}),u=l.h||(l.h=[]);I(u,t)<0&&(o[r]||(o[r]=function(){var t=document.createEvent("Event");t.initEvent(e,!0,!0),o.dispatchEvent(t)}),u[n?"unshift":"push"](t))})),dispatchEvent:b((function(e){var t=this,n="on"+e.type,o=t[i],r=o&&o[n];return!!r&&(r.n?t.fireEvent(n,e):x(t,e,r.h,!0))})),removeEventListener:b(s.removeEventListener)});var y=u(Event.prototype,"button").get;l(e.Event.prototype,{bubbles:b(!0),cancelable:b(!0),preventDefault:b((function(){this.cancelable&&(this.returnValue=!1)})),stopPropagation:b((function(){this.stoppedPropagation=!0,this.cancelBubble=!0})),stopImmediatePropagation:b((function(){this.stoppedImmediatePropagation=!0,this.stopPropagation()})),initEvent:b((function(e,t,n){this.type=e,this.bubbles=!!t,this.cancelable=!!n,this.bubbles||this.stopPropagation()})),pageX:{get:function(){return this._pageX||(this._pageX=this.clientX+e.scrollX-(g.clientLeft||0))}},pageY:{get:function(){return this._pageY||(this._pageY=this.clientY+e.scrollY-(g.clientTop||0))}},which:{get:function(){return this.keyCode?this.keyCode:isNaN(this.button)?undefined:this.button+1}},charCode:{get:function(){return this.keyCode&&"keypress"==this.type?this.keyCode:0}},buttons:{get:function(){return y.call(this)}},button:{get:function(){var e=this.buttons;return 1&e?0:2&e?2:4&e?1:undefined}},defaultPrevented:{get:function(){var e=this.returnValue;return!(void 0===e||e)}},relatedTarget:{get:function(){var e=this.type;return"mouseover"===e?this.fromElement:"mouseout"===e?this.toElement:null}}}),l(e.HTMLDocument.prototype,{defaultView:{get:function(){return this.parentWindow}},textContent:{get:function(){return 11===this.nodeType?w.call(this):null},set:function(e){11===this.nodeType&&B.call(this,e)}},addEventListener:b((function(t,o,i){var c=this;s.addEventListener.call(c,t,o,i),n&&t===a&&!f.test(c.readyState)&&(n=!1,c.attachEvent(r,D),e==top&&function l(e){try{c.documentElement.doScroll("left"),D()}catch(t){setTimeout(l,50)}}())})),dispatchEvent:b(s.dispatchEvent),removeEventListener:b(s.removeEventListener),createEvent:b((function(e){var t;if("Event"!==e)throw new Error("unsupported "+e);return(t=document.createEventObject()).timeStamp=(new Date).getTime(),t}))}),l(e.Window.prototype,{getComputedStyle:b(function(){var e=/^(?:[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|))(?!px)[a-z%]+$/,t=/^(top|right|bottom|left)$/,n=/\-([a-z])/g,o=function(e,t){return t.toUpperCase()};function r(e){this._=e}function a(){}return r.prototype.getPropertyValue=function(r){var a,i,c,l=this._,u=l.style,d=l.currentStyle,s=l.runtimeStyle;return"opacity"==r?u.opacity||"1":(r=("float"===r?"style-float":r).replace(n,o),a=d?d[r]:u[r],e.test(a)&&!t.test(r)&&(i=u.left,(c=s&&s.left)&&(s.left=d.left),u.left="fontSize"===r?"1em":a,a=u.pixelLeft+"px",u.left=i,c&&(s.left=c)),null==a?a:a+""||"auto")},a.prototype.getPropertyValue=function(){return null},function(e,t){return t?new a(e):new r(e)}}()),addEventListener:b((function(t,n,o){var r,a=e,c="on"+t;a[c]||(a[c]=function(e){return x(a,A(0,e),r,!1)&&undefined}),I(r=a[c][i]||(a[c][i]=[]),n)<0&&r[o?"unshift":"push"](n)})),dispatchEvent:b((function(t){var n=e["on"+t.type];return!n||!1!==n.call(e,t)&&!t.defaultPrevented})),removeEventListener:b((function(t,n,o){var r=(e["on"+t]||Object)[i],a=r?I(r,n):-1;-1<a&&r.splice(a,1)})),pageXOffset:{get:M("scrollLeft")},pageYOffset:{get:M("scrollTop")},scrollX:{get:M("scrollLeft")},scrollY:{get:M("scrollTop")},innerWidth:{get:M("clientWidth")},innerHeight:{get:M("clientHeight")}}),e.HTMLElement=e.Element,function(e,t,n){for(n=0;n<t.length;n++)document.createElement(t[n]);e.length||document.createStyleSheet(""),e[0].addRule(t.join(","),"display:block;")}(document.styleSheets,["header","nav","section","article","aside","footer"]),function(){if(!document.createRange){document.createRange=function(){return new n};var e=n.prototype;e.cloneContents=function(){for(var e=this._start.ownerDocument.createDocumentFragment(),n=t(this._start,this._end),o=0,r=n.length;o<r;o++)e.appendChild(n[o].cloneNode(!0));return e},e.cloneRange=function(){var e=new n;return e._start=this._start,e._end=this._end,e},e.deleteContents=function(){for(var e=this._start.parentNode,n=t(this._start,this._end),o=0,r=n.length;o<r;o++)e.removeChild(n[o])},e.extractContents=function(){for(var e=this._start.ownerDocument.createDocumentFragment(),n=t(this._start,this._end),o=0,r=n.length;o<r;o++)e.appendChild(n[o]);return e},e.setEndAfter=function(e){this._end=e},e.setEndBefore=function(e){this._end=e.previousSibling},e.setStartAfter=function(e){this._start=e.nextSibling},e.setStartBefore=function(e){this._start=e}}function t(e,t){for(var n=[e];e!==t;)n.push(e=e.nextSibling);return n}function n(){}}()}function x(e,t,n,o){for(var r,a,i=n.slice(),c=function(e,t){return e.currentTarget=t,e.eventPhase=e.target===e.currentTarget?2:3,e}(t,e),l=0,u=i.length;l<u&&("object"==typeof(r=i[l])?"function"==typeof r.handleEvent&&r.handleEvent(c):r.call(e,c),!c.stoppedImmediatePropagation);l++);return a=!c.stoppedPropagation,o&&a&&e.parentNode?e.parentNode.dispatchEvent(c):!c.defaultPrevented}function k(e,t){return{configurable:!0,get:e,set:t}}function S(e,t,n){var o=u(t||e,n);c(e,"textContent",k((function(){return o.get.call(this)}),(function(e){o.set.call(this,e)})))}function I(e,t){for(var n=e.length;n--&&e[n]!==t;);return n}function w(){if("BR"===this.tagName)return"\n";for(var e=this.firstChild,t=[];e;)8!==e.nodeType&&7!==e.nodeType&&t.push(e.textContent),e=e.nextSibling;return t.join("")}function _(e){var t=document.createEvent("Event");t.initEvent("input",!0,!0),(e.srcElement||e.fromElement||document).dispatchEvent(t)}function D(e){!o&&f.test(document.readyState)&&(o=!o,document.detachEvent(r,D),(e=document.createEvent("Event")).initEvent(a,!0,!0),document.dispatchEvent(e))}function M(e){return function(){return g[e]||document.body&&document.body[e]||0}}function B(e){for(var t;t=this.lastChild;)this.removeChild(t);null!=e&&this.appendChild(document.createTextNode(e))}function A(t,n){return n||(n=e.event),n.target||(n.target=n.srcElement||n.fromElement||document),n.timeStamp||(n.timeStamp=(new Date).getTime()),n}}(window)},37283:function(){"use strict";window.Int32Array||(window.Int32Array=Array)},57723:function(e,t){"use strict";t.__esModule=!0,t.assetMiddleware=t.resolveAsset=void 0;var n=[/v4shim/i],o={};t.resolveAsset=function(e){return o[e]||e};t.assetMiddleware=function(e){return function(e){return function(t){var r=t.type,a=t.payload;if("asset/stylesheet"!==r)if("asset/mappings"!==r)e(t);else for(var i=function(){var e=l[c];if(n.some((function(t){return t.test(e)})))return"continue";var t=a[e],r=e.split(".").pop();o[e]=t,"css"===r&&Byond.loadCss(t),"js"===r&&Byond.loadJs(t)},c=0,l=Object.keys(a);c<l.length;c++)i();else Byond.loadCss(a)}}}},31246:function(e,t,n){"use strict";t.__esModule=!0,t.useSharedState=t.useLocalState=t.useBackend=t.selectBackend=t.sendAct=t.sendMessage=t.backendMiddleware=t.backendReducer=t.backendSuspendSuccess=t.backendSuspendStart=t.backendSetSharedState=t.backendUpdate=void 0;var o=n(28440),r=n(465),a=n(41410),i=n(40509),c=n(79926),l=n(77960),u=["payload"];var d=(0,c.createLogger)("backend"),s=(0,r.createAction)("backend/update");t.backendUpdate=s;var p=(0,r.createAction)("backend/setSharedState");t.backendSetSharedState=p;var m=(0,r.createAction)("backend/suspendStart");t.backendSuspendStart=m;var f=function(){return{type:"backend/suspendSuccess",payload:{timestamp:Date.now()}}};t.backendSuspendSuccess=f;var h={config:{},data:{},shared:{},suspended:Date.now(),suspending:!1};t.backendReducer=function(e,t){void 0===e&&(e=h);var n=t.type,o=t.payload;if("backend/update"===n){var r=Object.assign({},e.config,o.config),a=Object.assign({},e.data,o.static_data,o.data),i=Object.assign({},e.shared);if(o.shared)for(var c=0,l=Object.keys(o.shared);c<l.length;c++){var u=l[c],d=o.shared[u];i[u]=""===d?undefined:JSON.parse(d)}return Object.assign({},e,{config:r,data:a,shared:i,suspended:!1})}if("backend/setSharedState"===n){var s,p=o.key,m=o.nextState;return Object.assign({},e,{shared:Object.assign({},e.shared,(s={},s[p]=m,s))})}if("backend/suspendStart"===n)return Object.assign({},e,{suspending:!0});if("backend/suspendSuccess"===n){var f=o.timestamp;return Object.assign({},e,{data:{},shared:{},config:Object.assign({},e.config,{title:"",status:1}),suspending:!1,suspended:f})}return e};t.backendMiddleware=function(e){var t,n;return function(r){return function(c){var u=N(e.getState()).suspended,p=c.type,m=c.payload;if("update"!==p)if("suspend"!==p){if("ping"!==p){if("backend/suspendStart"===p&&!n){d.log("suspending ("+window.__windowId__+")");var h=function(){return C({type:"suspend"})};h(),n=setInterval(h,2e3)}if("backend/suspendSuccess"===p&&((0,l.suspendRenderer)(),clearInterval(n),n=undefined,Byond.winset(window.__windowId__,{"is-visible":!1}),setImmediate((function(){(0,i.hasWindowFocus)()&&(0,i.focusMap)()}))),"backend/update"===p){var g,v,b=null==(g=m.config)||null==(v=g.window)?void 0:v.fancy;t===undefined?t=b:t!==b&&(d.log("changing fancy mode to",b),t=b,Byond.winset(window.__windowId__,{titlebar:!b,"can-resize":!b}))}return"backend/update"===p&&u&&(d.log("backend/update",m),(0,l.resumeRenderer)(),(0,a.setupDrag)(),setImmediate((function(){o.perf.mark("resume/start"),N(e.getState()).suspended||(Byond.winset(window.__windowId__,{"is-visible":!0}),o.perf.mark("resume/finish"))}))),r(c)}C({type:"pingReply"})}else e.dispatch(f());else e.dispatch(s(m))}}};var C=function(e){void 0===e&&(e={});var t=e,n=t.payload,o=function(e,t){if(null==e)return{};var n,o,r={},a=Object.keys(e);for(o=0;o<a.length;o++)n=a[o],t.indexOf(n)>=0||(r[n]=e[n]);return r}(t,u),r=Object.assign({tgui:1,window_id:window.__windowId__},o);null!==n&&n!==undefined&&(r.payload=JSON.stringify(n)),Byond.topic(r)};t.sendMessage=C;var g=function(e,t){void 0===t&&(t={}),"object"!=typeof t||null===t||Array.isArray(t)?d.error("Payload for act() must be an object, got this:",t):C({type:"act/"+e,payload:t})};t.sendAct=g;var N=function(e){return e.backend||{}};t.selectBackend=N;t.useBackend=function(e){var t=e.store,n=N(t.getState());return Object.assign({},n,{act:g})};t.useLocalState=function(e,t,n){var o,r=e.store,a=null!=(o=N(r.getState()).shared)?o:{},i=t in a?a[t]:n;return[i,function(e){r.dispatch(p({key:t,nextState:"function"==typeof e?e(i):e}))}]};t.useSharedState=function(e,t,n){var o,r=e.store,a=null!=(o=N(r.getState()).shared)?o:{},i=t in a?a[t]:n;return[i,function(e){C({type:"setSharedState",key:t,value:JSON.stringify("function"==typeof e?e(i):e)||""})}]}},54642:function(e,t,n){"use strict";t.__esModule=!0,t.AnimatedNumber=void 0;var o=n(96323),r=n(97622);function a(e,t){return a=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e},a(e,t)}var i=function(e){return"number"==typeof e&&Number.isFinite(e)&&!Number.isNaN(e)},c=.8333,l=function(e){var t,n;function l(t){var n;(n=e.call(this,t)||this).ref=(0,o.createRef)(),n.interval=void 0,n.currentValue=0;var r=t.initial,a=t.value;return r!==undefined&&i(r)?n.currentValue=r:i(a)&&(n.currentValue=a),n}n=e,(t=l).prototype=Object.create(n.prototype),t.prototype.constructor=t,a(t,n);var u=l.prototype;return u.componentDidMount=function(){this.currentValue!==this.props.value&&this.startTicking()},u.componentWillUnmount=function(){this.stopTicking()},u.shouldComponentUpdate=function(e){return e.value!==this.props.value&&this.startTicking(),!1},u.startTicking=function(){var e=this;this.interval===undefined&&(this.interval=setInterval((function(){return e.tick()}),16.666666666666668))},u.stopTicking=function(){this.interval!==undefined&&(clearInterval(this.interval),this.interval=undefined)},u.tick=function(){var e=this.currentValue,t=this.props.value;i(t)?this.currentValue=e*c+t*(1-c):this.stopTicking(),Math.abs(t-this.currentValue)<Math.max(.001,.001*t)&&(this.currentValue=t,this.stopTicking()),this.ref.current&&(this.ref.current.textContent=this.getText())},u.getText=function(){var e=this.props,t=this.currentValue,n=e.format,o=e.value;if(!i(o))return String(o);if(n)return n(this.currentValue);var a=String(o).split(".")[1],c=a?a.length:0;return(0,r.toFixed)(t,(0,r.clamp)(c,0,8))},u.render=function(){return(0,o.createVNode)(1,"span",null,this.getText(),0,null,null,this.ref)},l}(o.Component);t.AnimatedNumber=l},75434:function(e,t,n){"use strict";t.__esModule=!0,t.Autofocus=void 0;var o=n(96323);function r(e,t){return r=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e},r(e,t)}var a=function(e){var t,n;function a(){for(var t,n=arguments.length,r=new Array(n),a=0;a<n;a++)r[a]=arguments[a];return(t=e.call.apply(e,[this].concat(r))||this).ref=(0,o.createRef)(),t}n=e,(t=a).prototype=Object.create(n.prototype),t.prototype.constructor=t,r(t,n);var i=a.prototype;return i.componentDidMount=function(){var e=this;setTimeout((function(){var t;null==(t=e.ref.current)||t.focus()}),1)},i.render=function(){return(0,o.createVNode)(1,"div",null,this.props.children,0,{tabIndex:-1},null,this.ref)},a}(o.Component);t.Autofocus=a},90297:function(e,t,n){"use strict";t.__esModule=!0,t.Blink=void 0;var o=n(96323);function r(e,t){return r=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e},r(e,t)}var a=function(e){var t,n;function a(){var t;return(t=e.call(this)||this).state={hidden:!1},t}n=e,(t=a).prototype=Object.create(n.prototype),t.prototype.constructor=t,r(t,n);var i=a.prototype;return i.createTimer=function(){var e=this,t=this.props,n=t.interval,o=void 0===n?1e3:n,r=t.time,a=void 0===r?1e3:r;clearInterval(this.interval),clearTimeout(this.timer),this.setState({hidden:!1}),this.interval=setInterval((function(){e.setState({hidden:!0}),e.timer=setTimeout((function(){e.setState({hidden:!1})}),a)}),o+a)},i.componentDidMount=function(){this.createTimer()},i.componentDidUpdate=function(e){e.interval===this.props.interval&&e.time===this.props.time||this.createTimer()},i.componentWillUnmount=function(){clearInterval(this.interval),clearTimeout(this.timer)},i.render=function(e){return(0,o.createVNode)(1,"span",null,e.children,0,{style:{visibility:this.state.hidden?"hidden":"visible"}})},a}(o.Component);t.Blink=a},7149:function(e,t,n){"use strict";t.__esModule=!0,t.BlockQuote=void 0;var o=n(96323),r=n(1060),a=n(54425),i=["className"];t.BlockQuote=function(e){var t=e.className,n=function(e,t){if(null==e)return{};var n,o,r={},a=Object.keys(e);for(o=0;o<a.length;o++)n=a[o],t.indexOf(n)>=0||(r[n]=e[n]);return r}(e,i);return(0,o.normalizeProps)((0,o.createComponentVNode)(2,a.Box,Object.assign({className:(0,r.classes)(["BlockQuote",t])},n)))}},54425:function(e,t,n){"use strict";t.__esModule=!0,t.Box=t.computeBoxClassName=t.computeBoxProps=t.halfUnit=t.unit=void 0;var o=n(1060),r=n(96323),a=n(10648),i=n(84200),c=["as","className","children"];var l=function(e){return"string"==typeof e?e.endsWith("px")&&!Byond.IS_LTE_IE8?parseFloat(e)/12+"rem":e:"number"==typeof e?Byond.IS_LTE_IE8?12*e+"px":e+"rem":void 0};t.unit=l;var u=function(e){return"string"==typeof e?l(e):"number"==typeof e?l(.5*e):void 0};t.halfUnit=u;var d=function(e){return"string"==typeof e&&i.CSS_COLORS.includes(e)},s=function(e){return function(t,n){"number"!=typeof n&&"string"!=typeof n||(t[e]=n)}},p=function(e,t){return function(n,o){"number"!=typeof o&&"string"!=typeof o||(n[e]=t(o))}},m=function(e,t){return function(n,o){o&&(n[e]=t)}},f=function(e,t,n){return function(o,r){if("number"==typeof r||"string"==typeof r)for(var a=0;a<n.length;a++)o[e+"-"+n[a]]=t(r)}},h=function(e){return function(t,n){d(n)||(t[e]=n)}},C={position:s("position"),overflow:s("overflow"),overflowX:s("overflow-x"),overflowY:s("overflow-y"),top:p("top",l),bottom:p("bottom",l),left:p("left",l),right:p("right",l),width:p("width",l),minWidth:p("min-width",l),maxWidth:p("max-width",l),height:p("height",l),minHeight:p("min-height",l),maxHeight:p("max-height",l),fontSize:p("font-size",l),fontFamily:s("font-family"),lineHeight:function(e,t){"number"==typeof t?e["line-height"]=t:"string"==typeof t&&(e["line-height"]=l(t))},opacity:s("opacity"),textAlign:s("text-align"),verticalAlign:s("vertical-align"),inline:m("display","inline-block"),bold:m("font-weight","bold"),italic:m("font-style","italic"),nowrap:m("white-space","nowrap"),preserveWhitespace:m("white-space","pre-wrap"),m:f("margin",u,["top","bottom","left","right"]),mx:f("margin",u,["left","right"]),my:f("margin",u,["top","bottom"]),mt:p("margin-top",u),mb:p("margin-bottom",u),ml:p("margin-left",u),mr:p("margin-right",u),p:f("padding",u,["top","bottom","left","right"]),px:f("padding",u,["left","right"]),py:f("padding",u,["top","bottom"]),pt:p("padding-top",u),pb:p("padding-bottom",u),pl:p("padding-left",u),pr:p("padding-right",u),color:h("color"),textColor:h("color"),backgroundColor:h("background-color"),fillPositionedParent:function(e,t){t&&(e.position="absolute",e.top=0,e.bottom=0,e.left=0,e.right=0)}},g=function(e){for(var t={},n={},o=0,r=Object.keys(e);o<r.length;o++){var a=r[o];if("style"!==a)if(Byond.IS_LTE_IE8&&"onClick"===a)t.onclick=e[a];else{var i=e[a],c=C[a];c?c(n,i):t[a]=i}}for(var l="",u=0,d=Object.keys(n);u<d.length;u++){var s=d[u];l+=s+":"+n[s]+";"}if(e.style)for(var p=0,m=Object.keys(e.style);p<m.length;p++){var f=m[p];l+=f+":"+e.style[f]+";"}return l.length>0&&(t.style=l),t};t.computeBoxProps=g;var N=function(e){var t=e.textColor||e.color,n=e.backgroundColor;return(0,o.classes)([d(t)&&"color-"+t,d(n)&&"color-bg-"+n])};t.computeBoxClassName=N;var v=function(e){var t=e.as,n=void 0===t?"div":t,o=e.className,i=e.children,l=function(e,t){if(null==e)return{};var n,o,r={},a=Object.keys(e);for(o=0;o<a.length;o++)n=a[o],t.indexOf(n)>=0||(r[n]=e[n]);return r}(e,c);if("function"==typeof i)return i(g(e));var u="string"==typeof o?o+" "+N(l):N(l),d=g(l);return(0,r.createVNode)(a.VNodeFlags.HtmlElement,n,u,i,a.ChildFlags.UnknownChildren,d,undefined)};t.Box=v,v.defaultHooks=o.pureComponentHooks},25808:function(e,t,n){"use strict";t.__esModule=!0,t.ButtonInput=t.ButtonConfirm=t.ButtonCheckbox=t.Button=void 0;var o=n(96323),r=n(57890),a=n(1060),i=n(79926),c=n(54425),l=n(65743),u=n(59463),d=["className","fluid","icon","iconRotation","iconSpin","iconColor","iconPosition","color","disabled","selected","tooltip","tooltipPosition","ellipsis","compact","circular","content","children","onclick","onClick","verticalAlignContent"],s=["checked"],p=["confirmContent","confirmColor","confirmIcon","icon","color","content","onClick"],m=["fluid","content","icon","iconRotation","iconSpin","tooltip","tooltipPosition","color","placeholder","maxLength"];function f(e,t){e.prototype=Object.create(t.prototype),e.prototype.constructor=e,h(e,t)}function h(e,t){return h=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e},h(e,t)}function C(e,t){if(null==e)return{};var n,o,r={},a=Object.keys(e);for(o=0;o<a.length;o++)n=a[o],t.indexOf(n)>=0||(r[n]=e[n]);return r}var g=(0,i.createLogger)("Button"),N=function(e){var t=e.className,n=e.fluid,i=e.icon,s=e.iconRotation,p=e.iconSpin,m=e.iconColor,f=e.iconPosition,h=e.color,N=e.disabled,v=e.selected,b=e.tooltip,V=e.tooltipPosition,y=e.ellipsis,x=e.compact,k=e.circular,S=e.content,I=e.children,w=e.onclick,_=e.onClick,D=e.verticalAlignContent,M=C(e,d),B=!(!S&&!I);w&&g.warn("Lowercase 'onclick' is not supported on Button and lowercase prop names are discouraged in general. Please use a camelCase'onClick' instead and read: https://infernojs.org/docs/guides/event-handling"),M.onClick=function(e){!N&&_&&_(e)},Byond.IS_LTE_IE8&&(M.unselectable=!0);var A=(0,o.normalizeProps)((0,o.createComponentVNode)(2,c.Box,Object.assign({className:(0,a.classes)(["Button",n&&"Button--fluid",N&&"Button--disabled",v&&"Button--selected",B&&"Button--hasContent",y&&"Button--ellipsis",k&&"Button--circular",x&&"Button--compact",f&&"Button--iconPosition--"+f,D&&"Button--flex",D&&n&&"Button--flex--fluid",D&&"Button--verticalAlignContent--"+D,h&&"string"==typeof h?"Button--color--"+h:"Button--color--default",t]),tabIndex:!N&&"0",onKeyUp:function(t){if(!1!==e.captureKeys){var n=window.event?t.which:t.keyCode;if(n===r.KEY_SPACE||n===r.KEY_ENTER)return t.preventDefault(),void(!N&&_&&_(t));n!==r.KEY_ESCAPE||t.preventDefault()}}},M,{children:(0,o.createVNode)(1,"div","Button__content",[i&&"right"!==f&&(0,o.createComponentVNode)(2,l.Icon,{name:i,color:m,rotation:s,spin:p}),S,I,i&&"right"===f&&(0,o.createComponentVNode)(2,l.Icon,{name:i,color:m,rotation:s,spin:p})],0)})));return b&&(A=(0,o.createComponentVNode)(2,u.Tooltip,{content:b,position:V,children:A})),A};t.Button=N,N.defaultHooks=a.pureComponentHooks;var v=function(e){var t=e.checked,n=C(e,s);return(0,o.normalizeProps)((0,o.createComponentVNode)(2,N,Object.assign({color:"transparent",icon:t?"check-square-o":"square-o",selected:t},n)))};t.ButtonCheckbox=v,N.Checkbox=v;var b=function(e){function t(){var t;return(t=e.call(this)||this).state={clickedOnce:!1},t.handleClick=function(){t.state.clickedOnce&&t.setClickedOnce(!1)},t}f(t,e);var n=t.prototype;return n.setClickedOnce=function(e){var t=this;this.setState({clickedOnce:e}),e?setTimeout((function(){return window.addEventListener("click",t.handleClick)})):window.removeEventListener("click",this.handleClick)},n.render=function(){var e=this,t=this.props,n=t.confirmContent,r=void 0===n?"Confirm?":n,a=t.confirmColor,i=void 0===a?"bad":a,c=t.confirmIcon,l=t.icon,u=t.color,d=t.content,s=t.onClick,m=C(t,p);return(0,o.normalizeProps)((0,o.createComponentVNode)(2,N,Object.assign({content:this.state.clickedOnce?r:d,icon:this.state.clickedOnce?c:l,color:this.state.clickedOnce?i:u,onClick:function(){return e.state.clickedOnce?s():e.setClickedOnce(!0)}},m)))},t}(o.Component);t.ButtonConfirm=b,N.Confirm=b;var V=function(e){function t(){var t;return(t=e.call(this)||this).inputRef=(0,o.createRef)(),t.state={inInput:!1},t}f(t,e);var n=t.prototype;return n.setInInput=function(e){if(this.setState({inInput:e}),this.inputRef){var t=this.inputRef.current;if(e){t.value=this.props.currentValue||"";try{t.focus(),t.select()}catch(n){}}}},n.commitResult=function(e){if(this.inputRef){var t=this.inputRef.current;if(""!==t.value)return void this.props.onCommit(e,t.value);if(!this.props.defaultValue)return;this.props.onCommit(e,this.props.defaultValue)}},n.render=function(){var e=this,t=this.props,n=t.fluid,i=t.content,d=t.icon,s=t.iconRotation,p=t.iconSpin,f=t.tooltip,h=t.tooltipPosition,g=t.color,N=void 0===g?"default":g,v=(t.placeholder,t.maxLength,C(t,m)),b=(0,o.normalizeProps)((0,o.createComponentVNode)(2,c.Box,Object.assign({className:(0,a.classes)(["Button",n&&"Button--fluid","Button--color--"+N])},v,{onClick:function(){return e.setInInput(!0)},children:[d&&(0,o.createComponentVNode)(2,l.Icon,{name:d,rotation:s,spin:p}),(0,o.createVNode)(1,"div",null,i,0),(0,o.createVNode)(64,"input","NumberInput__input",null,1,{style:{display:this.state.inInput?undefined:"none","text-align":"left"},onBlur:function(t){e.state.inInput&&(e.setInInput(!1),e.commitResult(t))},onKeyDown:function(t){if(t.keyCode===r.KEY_ENTER)return e.setInInput(!1),void e.commitResult(t);t.keyCode===r.KEY_ESCAPE&&e.setInInput(!1)}},null,this.inputRef)]})));return f&&(b=(0,o.createComponentVNode)(2,u.Tooltip,{content:f,position:h,children:b})),b},t}(o.Component);t.ButtonInput=V,N.Input=V},44051:function(e,t,n){"use strict";t.__esModule=!0,t.ByondUi=void 0;var o=n(96323),r=n(1060),a=n(53538),i=n(79926),c=n(54425),l=["params"],u=["params"],d=["params"];function s(e,t){if(null==e)return{};var n,o,r={},a=Object.keys(e);for(o=0;o<a.length;o++)n=a[o],t.indexOf(n)>=0||(r[n]=e[n]);return r}function p(e,t){return p=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e},p(e,t)}var m=(0,i.createLogger)("ByondUi"),f=[];window.addEventListener("beforeunload",(function(){for(var e=0;e<f.length;e++){var t=f[e];"string"==typeof t&&(m.log("unmounting '"+t+"' (beforeunload)"),f[e]=null,Byond.winset(t,{"is-visible":"false"}))}}));var h=function(e){var t,n;function i(t){var n,r;(r=e.call(this,t)||this).containerRef=(0,o.createRef)(),r.byondUiElement=function(e){var t=f.length;f.push(null);var n=e||"byondui_"+t;return m.log("allocated '"+n+"'"),{render:function(e){f[t]=n,e["is-visible"]="true",Byond.winset(n,e)},unmount:function(){m.log("unmounting '"+n+"'"),f[t]=null,Byond.winset(n,{"is-visible":"false"})}}}(null==(n=t.params)?void 0:n.id),r.handleResize=(0,a.debounce)((function(){r.forceUpdate()}),100);var i=!1;return r.handleScroll=function(){i||(window.requestAnimationFrame((function(){r.componentDidUpdate(),i=!1})),i=!0)},r}n=e,(t=i).prototype=Object.create(n.prototype),t.prototype.constructor=t,p(t,n);var h=i.prototype;return h.shouldComponentUpdate=function(e){var t=this.props,n=t.params,o=void 0===n?{}:n,a=s(t,l),i=e.params,c=void 0===i?{}:i,d=s(e,u);return(0,r.shallowDiffers)(o,c)||(0,r.shallowDiffers)(a,d)},h.componentDidMount=function(){Byond.IS_LTE_IE10||(window.addEventListener("resize",this.handleResize),window.addEventListener("scroll",this.handleScroll,!0),this.componentDidUpdate(),this.handleResize())},h.componentDidUpdate=function(){if(!Byond.IS_LTE_IE10){var e,t,n=this.props,o=n.params,r=void 0===o?{}:o,a=n.hideOnScroll;if(this.containerRef.current){var i=(e=this.containerRef.current,{pos:[(t=e.getBoundingClientRect()).left,t.top],size:[t.right-t.left,t.bottom-t.top]});if(m.debug("bounding box",i),a&&i.pos[1]<32)return void this.byondUiElement.unmount();this.byondUiElement.render(Object.assign({parent:window.__windowId__},r,{pos:i.pos[0]+","+i.pos[1],size:i.size[0]+"x"+i.size[1]}))}}},h.componentWillUnmount=function(){Byond.IS_LTE_IE10||(window.removeEventListener("resize",this.handleResize),window.removeEventListener("scroll",this.handleScroll,!0),this.byondUiElement.unmount())},h.render=function(){var e=this.props,t=(e.params,s(e,d)),n=(0,c.computeBoxProps)(t);return(0,o.normalizeProps)((0,o.createVNode)(1,"div",null,(0,o.createVNode)(1,"div",null,null,1,{style:{"min-height":"22px"}}),0,Object.assign({},n),null,this.containerRef))},i}(o.Component);t.ByondUi=h},64726:function(e,t,n){"use strict";t.__esModule=!0,t.Chart=void 0;var o=n(96323),r=n(1397),a=n(1060),i=n(54425),c=["data","rangeX","rangeY","fillColor","strokeColor","strokeWidth"];function l(e,t){return l=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e},l(e,t)}var u=function(e){var t,n;function a(t){var n;return(n=e.call(this,t)||this).ref=(0,o.createRef)(),n.state={viewBox:[600,200]},n.handleResize=function(){var e=n.ref.current;n.setState({viewBox:[e.offsetWidth,e.offsetHeight]})},n}n=e,(t=a).prototype=Object.create(n.prototype),t.prototype.constructor=t,l(t,n);var u=a.prototype;return u.componentDidMount=function(){window.addEventListener("resize",this.handleResize),this.handleResize()},u.componentWillUnmount=function(){window.removeEventListener("resize",this.handleResize)},u.render=function(){var e=this,t=this.props,n=t.data,a=void 0===n?[]:n,l=t.rangeX,u=t.rangeY,d=t.fillColor,s=void 0===d?"none":d,p=t.strokeColor,m=void 0===p?"#ffffff":p,f=t.strokeWidth,h=void 0===f?2:f,C=function(e,t){if(null==e)return{};var n,o,r={},a=Object.keys(e);for(o=0;o<a.length;o++)n=a[o],t.indexOf(n)>=0||(r[n]=e[n]);return r}(t,c),g=this.state.viewBox,N=function(e,t,n,o){if(0===e.length)return[];var a=(0,r.zipWith)(Math.min).apply(void 0,e),i=(0,r.zipWith)(Math.max).apply(void 0,e);return n!==undefined&&(a[0]=n[0],i[0]=n[1]),o!==undefined&&(a[1]=o[0],i[1]=o[1]),(0,r.map)((function(e){return(0,r.zipWith)((function(e,t,n,o){return(e-t)/(n-t)*o}))(e,a,i,t)}))(e)}(a,g,l,u);if(N.length>0){var v=N[0],b=N[N.length-1];N.push([g[0]+h,b[1]]),N.push([g[0]+h,-h]),N.push([-h,-h]),N.push([-h,v[1]])}var V=function(e){for(var t="",n=0;n<e.length;n++){var o=e[n];t+=o[0]+","+o[1]+" "}return t}(N);return(0,o.normalizeProps)((0,o.createComponentVNode)(2,i.Box,Object.assign({position:"relative"},C,{children:function(t){return(0,o.normalizeProps)((0,o.createVNode)(1,"div",null,(0,o.createVNode)(32,"svg",null,(0,o.createVNode)(32,"polyline",null,null,1,{transform:"scale(1, -1) translate(0, -"+g[1]+")",fill:s,stroke:m,"stroke-width":h,points:V}),2,{viewBox:"0 0 "+g[0]+" "+g[1],preserveAspectRatio:"none",style:{position:"absolute",top:0,left:0,right:0,bottom:0,overflow:"hidden"}}),2,Object.assign({},t),null,e.ref))}})))},a}(o.Component);u.defaultHooks=a.pureComponentHooks;var d={Line:Byond.IS_LTE_IE8?function(e){return null}:u};t.Chart=d},49751:function(e,t,n){"use strict";t.__esModule=!0,t.Collapsible=void 0;var o=n(96323),r=n(54425),a=n(25808),i=["children","color","title","buttons"];function c(e,t){return c=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e},c(e,t)}var l=function(e){var t,n;function l(t){var n;n=e.call(this,t)||this;var o=t.open;return n.state={open:o||!1},n}return n=e,(t=l).prototype=Object.create(n.prototype),t.prototype.constructor=t,c(t,n),l.prototype.render=function(){var e=this,t=this.props,n=this.state.open,c=t.children,l=t.color,u=void 0===l?"default":l,d=t.title,s=t.buttons,p=function(e,t){if(null==e)return{};var n,o,r={},a=Object.keys(e);for(o=0;o<a.length;o++)n=a[o],t.indexOf(n)>=0||(r[n]=e[n]);return r}(t,i);return(0,o.createComponentVNode)(2,r.Box,{mb:1,children:[(0,o.createVNode)(1,"div","Table",[(0,o.createVNode)(1,"div","Table__cell",(0,o.normalizeProps)((0,o.createComponentVNode)(2,a.Button,Object.assign({fluid:!0,color:u,icon:n?"chevron-down":"chevron-right",onClick:function(){return e.setState({open:!n})}},p,{children:d}))),2),s&&(0,o.createVNode)(1,"div","Table__cell Table__cell--collapsing",s,0)],0),n&&(0,o.createComponentVNode)(2,r.Box,{mt:1,children:c})]})},l}(o.Component);t.Collapsible=l},47233:function(e,t,n){"use strict";t.__esModule=!0,t.ColorBox=void 0;var o=n(96323),r=n(1060),a=n(54425),i=["content","children","className","color","backgroundColor"];var c=function(e){var t=e.content,n=(e.children,e.className),c=e.color,l=e.backgroundColor,u=function(e,t){if(null==e)return{};var n,o,r={},a=Object.keys(e);for(o=0;o<a.length;o++)n=a[o],t.indexOf(n)>=0||(r[n]=e[n]);return r}(e,i);return u.color=t?null:"transparent",u.backgroundColor=c||l,(0,o.normalizeProps)((0,o.createVNode)(1,"div",(0,r.classes)(["ColorBox",n,(0,a.computeBoxClassName)(u)]),t||".",0,Object.assign({},(0,a.computeBoxProps)(u))))};t.ColorBox=c,c.defaultHooks=r.pureComponentHooks},93913:function(e,t,n){"use strict";t.__esModule=!0,t.Dimmer=void 0;var o=n(96323),r=n(1060),a=n(54425),i=["className","children","full"];t.Dimmer=function(e){var t=e.className,n=e.children,c=e.full,l=function(e,t){if(null==e)return{};var n,o,r={},a=Object.keys(e);for(o=0;o<a.length;o++)n=a[o],t.indexOf(n)>=0||(r[n]=e[n]);return r}(e,i);return(0,o.normalizeProps)((0,o.createComponentVNode)(2,a.Box,Object.assign({className:(0,r.classes)(["Dimmer",!!c&&"Dimmer--full"].concat(t))},l,{children:(0,o.createVNode)(1,"div","Dimmer__inner",n,0)})))}},22755:function(e,t,n){"use strict";t.__esModule=!0,t.Divider=void 0;var o=n(96323),r=n(1060);t.Divider=function(e){var t=e.vertical,n=e.hidden;return(0,o.createVNode)(1,"div",(0,r.classes)(["Divider",n&&"Divider--hidden",t?"Divider--vertical":"Divider--horizontal"]))}},42833:function(e,t,n){"use strict";t.__esModule=!0,t.DraggableControl=void 0;var o=n(96323),r=n(97622),a=n(1060),i=n(54642);function c(e,t){return c=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e},c(e,t)}var l=function(e,t){return e.screenX*t[0]+e.screenY*t[1]},u=function(e){var t,n;function a(t){var n;return(n=e.call(this,t)||this).inputRef=(0,o.createRef)(),n.state={value:t.value,dragging:!1,editing:!1,internalValue:null,origin:null,suppressingFlicker:!1},n.flickerTimer=null,n.suppressFlicker=function(){var e=n.props.suppressFlicker;e>0&&(n.setState({suppressingFlicker:!0}),clearTimeout(n.flickerTimer),n.flickerTimer=setTimeout((function(){return n.setState({suppressingFlicker:!1})}),e))},n.handleDragStart=function(e){var t=n.props,o=t.value,r=t.dragMatrix;n.state.editing||(document.body.style["pointer-events"]="none",n.ref=e.target,n.setState({dragging:!1,origin:l(e,r),value:o,internalValue:o}),n.timer=setTimeout((function(){n.setState({dragging:!0})}),250),n.dragInterval=setInterval((function(){var t=n.state,o=t.dragging,r=t.value,a=n.props.onDrag;o&&a&&a(e,r)}),n.props.updateRate||400),document.addEventListener("mousemove",n.handleDragMove),document.addEventListener("mouseup",n.handleDragEnd))},n.handleDragMove=function(e){var t=n.props,o=t.minValue,a=t.maxValue,i=t.step,c=t.stepPixelSize,u=t.dragMatrix;n.setState((function(t){var n=Object.assign({},t),d=l(e,u)-n.origin;if(t.dragging){var s=Number.isFinite(o)?o%i:0;n.internalValue=(0,r.clamp)(n.internalValue+d*i/c,o-i,a+i),n.value=(0,r.clamp)(n.internalValue-n.internalValue%i+s,o,a),n.origin=l(e,u)}else Math.abs(d)>4&&(n.dragging=!0);return n}))},n.handleDragEnd=function(e){var t=n.props,o=t.onChange,r=t.onDrag,a=n.state,i=a.dragging,c=a.value,l=a.internalValue;if(document.body.style["pointer-events"]="auto",clearTimeout(n.timer),clearInterval(n.dragInterval),n.setState({dragging:!1,editing:!i,origin:null}),document.removeEventListener("mousemove",n.handleDragMove),document.removeEventListener("mouseup",n.handleDragEnd),i)n.suppressFlicker(),o&&o(e,c),r&&r(e,c);else if(n.inputRef){var u=n.inputRef.current;u.value=l;try{u.focus(),u.select()}catch(d){}}},n}return n=e,(t=a).prototype=Object.create(n.prototype),t.prototype.constructor=t,c(t,n),a.prototype.render=function(){var e=this,t=this.state,n=t.dragging,a=t.editing,c=t.value,l=t.suppressingFlicker,u=this.props,d=u.animated,s=u.value,p=u.unit,m=u.minValue,f=u.maxValue,h=u.unclamped,C=u.format,g=u.onChange,N=u.onDrag,v=u.children,b=u.height,V=u.lineHeight,y=u.fontSize,x=s;(n||l)&&(x=c);var k=function(e){return e+(p?" "+p:"")},S=d&&!n&&!l&&(0,o.createComponentVNode)(2,i.AnimatedNumber,{value:x,format:C,children:k})||k(C?C(x):x),I=(0,o.createVNode)(64,"input","NumberInput__input",null,1,{style:{display:a?undefined:"none",height:b,"line-height":V,"font-size":y},onBlur:function(t){if(a){var n;if(h)n=t.target.value;else if(n=(0,r.clamp)(parseFloat(t.target.value),m,f),Number.isNaN(n))return void e.setState({editing:!1});e.setState({editing:!1,value:n}),e.suppressFlicker(),g&&g(t,n),N&&N(t,n)}},onKeyDown:function(t){if(13===t.keyCode){var n;if(h)n=t.target.value;else if(n=(0,r.clamp)(parseFloat(t.target.value),m,f),Number.isNaN(n))return void e.setState({editing:!1});return e.setState({editing:!1,value:n}),e.suppressFlicker(),g&&g(t,n),void(N&&N(t,n))}27!==t.keyCode||e.setState({editing:!1})}},null,this.inputRef);return v({dragging:n,editing:a,value:s,displayValue:x,displayElement:S,inputElement:I,handleDragStart:this.handleDragStart})},a}(o.Component);t.DraggableControl=u,u.defaultHooks=a.pureComponentHooks,u.defaultProps={minValue:-Infinity,maxValue:+Infinity,step:1,stepPixelSize:1,suppressFlicker:50,dragMatrix:[1,0]}},12489:function(e,t,n){"use strict";t.__esModule=!0,t.Dropdown=void 0;var o=n(96323),r=n(1060),a=n(54425),i=n(65743),c=["icon","iconRotation","iconSpin","clipSelectedText","color","dropdownStyle","over","noscroll","nochevron","width","onClick","onOpen","selected","disabled","displayText"],l=["className"];function u(e,t){if(null==e)return{};var n,o,r={},a=Object.keys(e);for(o=0;o<a.length;o++)n=a[o],t.indexOf(n)>=0||(r[n]=e[n]);return r}function d(e,t){return d=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e},d(e,t)}var s=function(e){var t,n;function s(t){var n;return(n=e.call(this,t)||this).state={selected:t.selected,open:!1},n.handleClick=function(){n.state.open&&n.setOpen(!1)},n}n=e,(t=s).prototype=Object.create(n.prototype),t.prototype.constructor=t,d(t,n);var p=s.prototype;return p.componentWillUnmount=function(){window.removeEventListener("click",this.handleClick)},p.setOpen=function(e){var t=this;this.setState({open:e}),e?(setTimeout((function(){return window.addEventListener("click",t.handleClick)})),this.menuRef.focus()):window.removeEventListener("click",this.handleClick)},p.setSelected=function(e){this.setState({selected:e}),this.setOpen(!1),this.props.onSelected(e)},p.buildMenu=function(){var e=this,t=this.props.options,n=(void 0===t?[]:t).map((function(t){var n,r;return"string"==typeof t?(n=t,r=t):(n=t.displayText,r=t.value),(0,o.createComponentVNode)(2,a.Box,{className:"Dropdown__menuentry",onClick:function(){e.setSelected(r)},children:n},r)}));return n.length?n:"No Options Found"},p.render=function(){var e=this,t=this.props,n=t.icon,d=t.iconRotation,s=t.iconSpin,p=t.clipSelectedText,m=void 0===p||p,f=t.color,h=void 0===f?"default":f,C=t.dropdownStyle,g=t.over,N=t.noscroll,v=t.nochevron,b=t.width,V=(t.onClick,t.onOpen,t.selected,t.disabled),y=t.displayText,x=u(t,c),k=x.className,S=u(x,l),I=g?!this.state.open:this.state.open,w=this.state.open?(0,o.createVNode)(1,"div",(0,r.classes)([N?"Dropdown__menu-noscroll":"Dropdown__menu",g&&"Dropdown__over"]),this.buildMenu(),0,{tabIndex:"-1",style:{width:b}},null,(function(t){e.menuRef=t})):null;return(0,o.createVNode)(1,"div","Dropdown",[(0,o.normalizeProps)((0,o.createComponentVNode)(2,a.Box,Object.assign({width:b,className:(0,r.classes)(["Dropdown__control","Button","Button--color--"+h,V&&"Button--disabled",k])},S,{onClick:function(n){V&&!e.state.open||(e.setOpen(!e.state.open),t.onOpen&&t.onOpen(n))},children:[n&&(0,o.createComponentVNode)(2,i.Icon,{name:n,rotation:d,spin:s,mr:1}),(0,o.createVNode)(1,"span","Dropdown__selected-text",y||this.state.selected,0,{style:{overflow:m?"hidden":"visible"}}),!!v||(0,o.createVNode)(1,"span","Dropdown__arrow-button",(0,o.createComponentVNode)(2,i.Icon,{name:I?"chevron-up":"chevron-down"}),2)]}))),w],0,{style:C})},s}(o.Component);t.Dropdown=s},67486:function(e,t,n){"use strict";t.__esModule=!0,t.computeFlexItemProps=t.computeFlexItemClassName=t.Flex=t.computeFlexProps=t.computeFlexClassName=void 0;var o=n(96323),r=n(1060),a=n(54425),i=["className","direction","wrap","align","justify","inline"],c=["className"],l=["className","style","grow","order","shrink","basis","align"],u=["className"];function d(e,t){if(null==e)return{};var n,o,r={},a=Object.keys(e);for(o=0;o<a.length;o++)n=a[o],t.indexOf(n)>=0||(r[n]=e[n]);return r}var s=function(e){return(0,r.classes)(["Flex",e.inline&&"Flex--inline",Byond.IS_LTE_IE10&&"Flex--iefix",Byond.IS_LTE_IE10&&"column"===e.direction&&"Flex--iefix--column",(0,a.computeBoxClassName)(e)])};t.computeFlexClassName=s;var p=function(e){e.className;var t=e.direction,n=e.wrap,o=e.align,r=e.justify,c=(e.inline,d(e,i));return(0,a.computeBoxProps)(Object.assign({style:Object.assign({},c.style,{"flex-direction":t,"flex-wrap":!0===n?"wrap":n,"align-items":o,"justify-content":r})},c))};t.computeFlexProps=p;var m=function(e){var t=e.className,n=d(e,c);return(0,o.normalizeProps)((0,o.createVNode)(1,"div",(0,r.classes)([t,s(n)]),null,1,Object.assign({},p(n))))};t.Flex=m,m.defaultHooks=r.pureComponentHooks;var f=function(e){return(0,r.classes)(["Flex__item",Byond.IS_LTE_IE10&&"Flex__item--iefix",(0,a.computeBoxClassName)(e)])};t.computeFlexItemClassName=f;var h=function(e){e.className;var t,n=e.style,o=e.grow,r=e.order,i=e.shrink,c=e.basis,u=e.align,s=d(e,l),p=null!=(t=null!=c?c:e.width)?t:o!==undefined?0:undefined;return(0,a.computeBoxProps)(Object.assign({style:Object.assign({},n,{"flex-grow":o!==undefined&&Number(o),"flex-shrink":i!==undefined&&Number(i),"flex-basis":(0,a.unit)(p),order:r,"align-self":u})},s))};t.computeFlexItemProps=h;var C=function(e){var t=e.className,n=d(e,u);return(0,o.normalizeProps)((0,o.createVNode)(1,"div",(0,r.classes)([t,f(e)]),null,1,Object.assign({},h(n))))};C.defaultHooks=r.pureComponentHooks,m.Item=C},28408:function(e,t,n){"use strict";t.__esModule=!0,t.GridColumn=t.Grid=void 0;var o=n(96323),r=n(28581),a=n(1060),i=["children"],c=["size","style"];function l(e,t){if(null==e)return{};var n,o,r={},a=Object.keys(e);for(o=0;o<a.length;o++)n=a[o],t.indexOf(n)>=0||(r[n]=e[n]);return r}var u=function(e){var t=e.children,n=l(e,i);return(0,o.normalizeProps)((0,o.createComponentVNode)(2,r.Table,Object.assign({},n,{children:(0,o.createComponentVNode)(2,r.Table.Row,{children:t})})))};t.Grid=u,u.defaultHooks=a.pureComponentHooks;var d=function(e){var t=e.size,n=void 0===t?1:t,a=e.style,i=l(e,c);return(0,o.normalizeProps)((0,o.createComponentVNode)(2,r.Table.Cell,Object.assign({style:Object.assign({width:n+"%"},a)},i)))};t.GridColumn=d,u.defaultHooks=a.pureComponentHooks,u.Column=d},65743:function(e,t,n){"use strict";t.__esModule=!0,t.IconStack=t.Icon=void 0;var o=n(96323),r=n(1060),a=n(54425),i=["name","size","spin","className","style","rotation","inverse"],c=["className","style","children"];function l(e,t){if(null==e)return{};var n,o,r={},a=Object.keys(e);for(o=0;o<a.length;o++)n=a[o],t.indexOf(n)>=0||(r[n]=e[n]);return r}var u=/-o$/,d=function(e){var t=e.name,n=e.size,c=e.spin,d=e.className,s=e.style,p=void 0===s?{}:s,m=e.rotation,f=(e.inverse,l(e,i));n&&(p["font-size"]=100*n+"%"),"number"==typeof m&&(p.transform="rotate("+m+"deg)");var h=u.test(t),C=t.replace(u,"");return(0,o.normalizeProps)((0,o.createComponentVNode)(2,a.Box,Object.assign({as:"i",className:(0,r.classes)(["Icon",d,h?"fa-regular":"fa-solid","fa-"+C,c&&"fa-spin"]),style:p},f)))};t.Icon=d,d.defaultHooks=r.pureComponentHooks;var s=function(e){var t=e.className,n=e.style,i=void 0===n?{}:n,u=e.children,d=l(e,c);return(0,o.normalizeProps)((0,o.createComponentVNode)(2,a.Box,Object.assign({as:"span","class":(0,r.classes)(["IconStack",t]),style:i},d,{children:u})))};t.IconStack=s,d.Stack=s},94261:function(e,t,n){"use strict";t.__esModule=!0,t.Image=void 0;var o=n(96323),r=n(1060),a=n(54425),i=["pixelated","className"];t.Image=function(e){var t=e.pixelated,n=e.className,c=function(e,t){if(null==e)return{};var n,o,r={},a=Object.keys(e);for(o=0;o<a.length;o++)n=a[o],t.indexOf(n)>=0||(r[n]=e[n]);return r}(e,i);return(0,o.normalizeProps)((0,o.createComponentVNode)(2,a.Box,Object.assign({as:"img"},c,{style:t&&{"-ms-interpolation-mode":"nearest-neighbor"},className:(0,r.classes)("Image",n)})))}},77863:function(e,t,n){"use strict";t.__esModule=!0,t.Input=t.toInputValue=void 0;var o=n(96323),r=n(1060),a=n(54425),i=n(57890),c=["selfClear","onInput","onChange","onEnter","value","maxLength","placeholder"],l=["className","fluid","monospace"];function u(e,t){if(null==e)return{};var n,o,r={},a=Object.keys(e);for(o=0;o<a.length;o++)n=a[o],t.indexOf(n)>=0||(r[n]=e[n]);return r}function d(e,t){return d=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e},d(e,t)}var s=function(e){return"number"!=typeof e&&"string"!=typeof e?"":String(e)};t.toInputValue=s;var p=function(e){var t,n;function p(){var t;return(t=e.call(this)||this).inputRef=(0,o.createRef)(),t.state={editing:!1,history:[],historyIndex:0},t.handleInput=function(e){var n=t.state.editing,o=t.props.onInput;n||t.setEditing(!0),o&&o(e,e.target.value)},t.handleFocus=function(e){t.state.editing||t.setEditing(!0)},t.handleBlur=function(e){var n=t.state.editing,o=t.props.onChange;n&&(t.setEditing(!1),o&&o(e,e.target.value))},t.navigateHistory=function(e,n){var o=t.state.historyIndex+e,r=!1;(e>0&&o<t.state.history.length||e<0&&o>=0)&&(r=!0),r?(n.target.value=t.state.history[o],t.state.historyIndex=o):e>0&&(n.target.value="",t.state.historyIndex=t.state.history.length)},t.appendHistory=function(e){this.state.history[this.state.history.length-1]!==e&&this.state.history.push(e),this.state.historyIndex=this.state.history.length},t.handleKeyDown=function(e){var n=t.props,o=n.onInput,r=n.onChange,a=n.onEnter,c=n.history;return e.keyCode===i.KEY_ENTER?(t.setEditing(!1),r&&r(e,e.target.value),o&&o(e,e.target.value),a&&a(e,e.target.value),c&&t.appendHistory(e.target.value),void(t.props.selfClear?e.target.value="":e.target.blur())):e.keyCode===i.KEY_ESCAPE?t.props.onEscape?void t.props.onEscape(e):(t.setEditing(!1),e.target.value=s(t.props.value),void e.target.blur()):void(c&&(e.keyCode===i.KEY_UP?t.navigateHistory(-1,e):e.keyCode===i.KEY_DOWN&&t.navigateHistory(1,e)))},t}n=e,(t=p).prototype=Object.create(n.prototype),t.prototype.constructor=t,d(t,n);var m=p.prototype;return m.componentDidMount=function(){var e=this,t=this.props.value,n=this.inputRef.current;n&&(n.value=s(t)),(this.props.autoFocus||this.props.autoSelect)&&setTimeout((function(){n.focus(),e.props.autoSelect&&n.select()}),1)},m.componentDidUpdate=function(e,t){var n=this.state.editing,o=e.value,r=this.props.value,a=this.inputRef.current;a&&!n&&o!==r&&(a.value=s(r))},m.setEditing=function(e){this.setState({editing:e})},m.render=function(){var e=this.props,t=(e.selfClear,e.onInput,e.onChange,e.onEnter,e.value,e.maxLength),n=e.placeholder,i=u(e,c),d=i.className,s=i.fluid,p=i.monospace,m=u(i,l);return(0,o.normalizeProps)((0,o.createComponentVNode)(2,a.Box,Object.assign({className:(0,r.classes)(["Input",s&&"Input--fluid",p&&"Input--monospace",d])},m,{children:[(0,o.createVNode)(1,"div","Input__baseline",".",16),(0,o.createVNode)(64,"input","Input__input",null,1,{placeholder:n,onInput:this.handleInput,onFocus:this.handleFocus,onBlur:this.handleBlur,onKeyDown:this.handleKeyDown,maxLength:t},null,this.inputRef)]})))},p}(o.Component);t.Input=p},54291:function(e,t,n){"use strict";t.__esModule=!0,t.Interactive=void 0;var o=n(96323),r=n(97622);function a(e,t){return a=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e},a(e,t)}var i=function(e){return e&&e.ownerDocument.defaultView||self},c=function(e,t){var n=e.getBoundingClientRect(),o=t;return{left:(0,r.clamp)((o.pageX-(n.left+i(e).pageXOffset))/n.width,0,1),top:(0,r.clamp)((o.pageY-(n.top+i(e).pageYOffset))/n.height,0,1)}},l=function(e){var t,n;function r(t){var n;return(n=e.call(this)||this).containerRef=void 0,n.props=void 0,n.handleMoveStart=function(e){var t,o=null==(t=n.containerRef)?void 0:t.current;o&&(e.preventDefault(),o.focus(),n.props.onMove(c(o,e)),n.toggleDocumentEvents(!0))},n.handleMove=function(e){var t;e.preventDefault(),e.buttons>0&&null!=(t=n.containerRef)&&t.current?n.props.onMove(c(n.containerRef.current,e)):n.toggleDocumentEvents(!1)},n.handleMoveEnd=function(){n.toggleDocumentEvents(!1)},n.handleKeyDown=function(e){var t=e.which||e.keyCode;t<37||t>40||(e.preventDefault(),n.props.onKey({left:39===t?.05:37===t?-.05:0,top:40===t?.05:38===t?-.05:0}))},n.props=t,n.containerRef=(0,o.createRef)(),n}n=e,(t=r).prototype=Object.create(n.prototype),t.prototype.constructor=t,a(t,n);var l=r.prototype;return l.toggleDocumentEvents=function(e){var t,n=null==(t=this.containerRef)?void 0:t.current,o=i(n),r=e?o.addEventListener:o.removeEventListener;r("mousemove",this.handleMove),r("mouseup",this.handleMoveEnd)},l.componentDidMount=function(){this.toggleDocumentEvents(!0)},l.componentWillUnmount=function(){this.toggleDocumentEvents(!1)},l.render=function(){return(0,o.normalizeProps)((0,o.createVNode)(1,"div","react-colorful__interactive",this.props.children,0,Object.assign({},this.props,{style:this.props.style,onMouseDown:this.handleMoveStart,onKeyDown:this.handleKeyDown,tabIndex:0,role:"slider"}),null,this.containerRef))},r}(o.Component);t.Interactive=l},14274:function(e,t,n){"use strict";t.__esModule=!0,t.Knob=void 0;var o=n(96323),r=n(97622),a=n(1060),i=n(54425),c=n(42833),l=n(97667),u=["animated","format","maxValue","minValue","unclamped","onChange","onDrag","step","stepPixelSize","suppressFlicker","unit","value","className","style","fillValue","color","ranges","size","bipolar","children"];t.Knob=function(e){if(Byond.IS_LTE_IE8)return(0,o.normalizeProps)((0,o.createComponentVNode)(2,l.NumberInput,Object.assign({},e)));var t=e.animated,n=e.format,d=e.maxValue,s=e.minValue,p=e.unclamped,m=e.onChange,f=e.onDrag,h=e.step,C=e.stepPixelSize,g=e.suppressFlicker,N=e.unit,v=e.value,b=e.className,V=e.style,y=e.fillValue,x=e.color,k=e.ranges,S=void 0===k?{}:k,I=e.size,w=void 0===I?1:I,_=e.bipolar,D=(e.children,function(e,t){if(null==e)return{};var n,o,r={},a=Object.keys(e);for(o=0;o<a.length;o++)n=a[o],t.indexOf(n)>=0||(r[n]=e[n]);return r}(e,u));return(0,o.normalizeProps)((0,o.createComponentVNode)(2,c.DraggableControl,Object.assign({dragMatrix:[0,-1]},{animated:t,format:n,maxValue:d,minValue:s,unclamped:p,onChange:m,onDrag:f,step:h,stepPixelSize:C,suppressFlicker:g,unit:N,value:v},{children:function(e){var t=e.dragging,n=(e.editing,e.value),c=e.displayValue,l=e.displayElement,u=e.inputElement,p=e.handleDragStart,m=(0,r.scale)(null!=y?y:c,s,d),f=(0,r.scale)(c,s,d),h=x||(0,r.keyOfMatchingRange)(null!=y?y:n,S)||"default",C=Math.min(270*(f-.5),225);return(0,o.normalizeProps)((0,o.createVNode)(1,"div",(0,a.classes)(["Knob","Knob--color--"+h,_&&"Knob--bipolar",b,(0,i.computeBoxClassName)(D)]),[(0,o.createVNode)(1,"div","Knob__circle",(0,o.createVNode)(1,"div","Knob__cursorBox",(0,o.createVNode)(1,"div","Knob__cursor"),2,{style:{transform:"rotate("+C+"deg)"}}),2),t&&(0,o.createVNode)(1,"div","Knob__popupValue",l,0),(0,o.createVNode)(32,"svg","Knob__ring Knob__ringTrackPivot",(0,o.createVNode)(32,"circle","Knob__ringTrack",null,1,{cx:"50",cy:"50",r:"50"}),2,{viewBox:"0 0 100 100"}),(0,o.createVNode)(32,"svg","Knob__ring Knob__ringFillPivot",(0,o.createVNode)(32,"circle","Knob__ringFill",null,1,{style:{"stroke-dashoffset":Math.max(((_?2.75:2)-1.5*m)*Math.PI*50,0)},cx:"50",cy:"50",r:"50"}),2,{viewBox:"0 0 100 100"}),u],0,Object.assign({},(0,i.computeBoxProps)(Object.assign({style:Object.assign({"font-size":w+"em"},V)},D)),{onMouseDown:p})))}})))}},95592:function(e,t,n){"use strict";t.__esModule=!0,t.LabeledControls=void 0;var o=n(96323),r=n(67486),a=["children","wrap"],i=["label","children","mx"];function c(e,t){if(null==e)return{};var n,o,r={},a=Object.keys(e);for(o=0;o<a.length;o++)n=a[o],t.indexOf(n)>=0||(r[n]=e[n]);return r}var l=function(e){var t=e.children,n=e.wrap,i=c(e,a);return(0,o.normalizeProps)((0,o.createComponentVNode)(2,r.Flex,Object.assign({mx:-.5,wrap:n,align:"stretch",justify:"space-between"},i,{children:t})))};t.LabeledControls=l;l.Item=function(e){var t=e.label,n=e.children,a=e.mx,l=void 0===a?1:a,u=c(e,i);return(0,o.createComponentVNode)(2,r.Flex.Item,{mx:l,children:(0,o.normalizeProps)((0,o.createComponentVNode)(2,r.Flex,Object.assign({height:"100%",direction:"column",align:"center",textAlign:"center",justify:"space-between"},u,{children:[(0,o.createComponentVNode)(2,r.Flex.Item),(0,o.createComponentVNode)(2,r.Flex.Item,{children:n}),(0,o.createComponentVNode)(2,r.Flex.Item,{color:"label",children:t})]})))})}},21173:function(e,t,n){"use strict";t.__esModule=!0,t.LabeledList=void 0;var o=n(96323),r=n(1060),a=n(54425),i=n(22755),c=function(e){var t=e.children;return(0,o.createVNode)(1,"table","LabeledList",t,0)};t.LabeledList=c,c.defaultHooks=r.pureComponentHooks;var l=function(e){var t=e.className,n=e.label,i=e.labelColor,c=void 0===i?"label":i,l=e.labelWrap,u=e.color,d=e.textAlign,s=e.buttons,p=e.content,m=e.children,f=e.verticalAlign,h=void 0===f?"baseline":f;return(0,o.createVNode)(1,"tr",(0,r.classes)(["LabeledList__row",t]),[(0,o.createComponentVNode)(2,a.Box,{as:"td",color:c,className:(0,r.classes)(["LabeledList__cell",!l&&"LabeledList__label--nowrap"]),verticalAlign:h,children:n?n+":":null}),(0,o.createComponentVNode)(2,a.Box,{as:"td",color:u,textAlign:d,className:(0,r.classes)(["LabeledList__cell","LabeledList__content"]),colSpan:s?undefined:2,verticalAlign:h,children:[p,m]}),s&&(0,o.createVNode)(1,"td","LabeledList__cell LabeledList__buttons",s,0)],0)};l.defaultHooks=r.pureComponentHooks;var u=function(e){var t=e.size?(0,a.unit)(Math.max(0,e.size-1)):0;return(0,o.createVNode)(1,"tr","LabeledList__row",(0,o.createVNode)(1,"td",null,(0,o.createComponentVNode)(2,i.Divider),2,{colSpan:3,style:{"padding-top":t,"padding-bottom":t}}),2)};u.defaultHooks=r.pureComponentHooks,c.Item=l,c.Divider=u},89416:function(e,t,n){"use strict";t.__esModule=!0,t.Modal=void 0;var o=n(96323),r=n(1060),a=n(54425),i=n(93913),c=["className","children","full"];t.Modal=function(e){var t=e.className,n=e.children,l=e.full,u=function(e,t){if(null==e)return{};var n,o,r={},a=Object.keys(e);for(o=0;o<a.length;o++)n=a[o],t.indexOf(n)>=0||(r[n]=e[n]);return r}(e,c);return(0,o.createComponentVNode)(2,i.Dimmer,{full:l,children:(0,o.normalizeProps)((0,o.createVNode)(1,"div",(0,r.classes)(["Modal",t,(0,a.computeBoxClassName)(u)]),n,0,Object.assign({},(0,a.computeBoxProps)(u))))})}},23257:function(e,t,n){"use strict";t.__esModule=!0,t.NoticeBox=void 0;var o=n(96323),r=n(1060),a=n(54425),i=["className","color","info","warning","success","danger"];var c=function(e){var t=e.className,n=e.color,c=e.info,l=(e.warning,e.success),u=e.danger,d=function(e,t){if(null==e)return{};var n,o,r={},a=Object.keys(e);for(o=0;o<a.length;o++)n=a[o],t.indexOf(n)>=0||(r[n]=e[n]);return r}(e,i);return(0,o.normalizeProps)((0,o.createComponentVNode)(2,a.Box,Object.assign({className:(0,r.classes)(["NoticeBox",n&&"NoticeBox--color--"+n,c&&"NoticeBox--type--info",l&&"NoticeBox--type--success",u&&"NoticeBox--type--danger",t])},d)))};t.NoticeBox=c,c.defaultHooks=r.pureComponentHooks},97667:function(e,t,n){"use strict";t.__esModule=!0,t.NumberInput=void 0;var o=n(96323),r=n(97622),a=n(1060),i=n(54642),c=n(54425);function l(e,t){return l=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e},l(e,t)}var u=function(e){var t,n;function u(t){var n;n=e.call(this,t)||this;var a=t.value;return n.inputRef=(0,o.createRef)(),n.state={value:a,dragging:!1,editing:!1,internalValue:null,origin:null,suppressingFlicker:!1},n.flickerTimer=null,n.suppressFlicker=function(){var e=n.props.suppressFlicker;e>0&&(n.setState({suppressingFlicker:!0}),clearTimeout(n.flickerTimer),n.flickerTimer=setTimeout((function(){return n.setState({suppressingFlicker:!1})}),e))},n.handleDragStart=function(e){var t=n.props.value;n.state.editing||(document.body.style["pointer-events"]="none",n.ref=e.target,n.setState({dragging:!1,origin:e.screenY,value:t,internalValue:t}),n.timer=setTimeout((function(){n.setState({dragging:!0})}),250),n.dragInterval=setInterval((function(){var t=n.state,o=t.dragging,r=t.value,a=n.props.onDrag;o&&a&&a(e,r)}),n.props.updateRate||400),document.addEventListener("mousemove",n.handleDragMove),document.addEventListener("mouseup",n.handleDragEnd))},n.handleDragMove=function(e){var t=n.props,o=t.minValue,a=t.maxValue,i=t.step,c=t.stepPixelSize;n.setState((function(t){var n=Object.assign({},t),l=n.origin-e.screenY;if(t.dragging){var u=Number.isFinite(o)?o%i:0;n.internalValue=(0,r.clamp)(n.internalValue+l*i/c,o-i,a+i),n.value=(0,r.clamp)(n.internalValue-n.internalValue%i+u,o,a),n.origin=e.screenY}else Math.abs(l)>4&&(n.dragging=!0);return n}))},n.handleDragEnd=function(e){var t=n.props,o=t.onChange,r=t.onDrag,a=n.state,i=a.dragging,c=a.value,l=a.internalValue;if(document.body.style["pointer-events"]="auto",clearTimeout(n.timer),clearInterval(n.dragInterval),n.setState({dragging:!1,editing:!i,origin:null}),document.removeEventListener("mousemove",n.handleDragMove),document.removeEventListener("mouseup",n.handleDragEnd),i)n.suppressFlicker(),o&&o(e,c),r&&r(e,c);else if(n.inputRef){var u=n.inputRef.current;u.value=l;try{u.focus(),u.select()}catch(d){}}},n}return n=e,(t=u).prototype=Object.create(n.prototype),t.prototype.constructor=t,l(t,n),u.prototype.render=function(){var e=this,t=this.state,n=t.dragging,l=t.editing,u=t.value,d=t.suppressingFlicker,s=this.props,p=s.className,m=s.fluid,f=s.animated,h=s.value,C=s.unit,g=s.minValue,N=s.maxValue,v=s.height,b=s.width,V=s.lineHeight,y=s.fontSize,x=s.format,k=s.onChange,S=s.onDrag,I=h;(n||d)&&(I=u);var w=function(e){return(0,o.createVNode)(1,"div","NumberInput__content",e+(C?" "+C:""),0,{unselectable:Byond.IS_LTE_IE8})},_=f&&!n&&!d&&(0,o.createComponentVNode)(2,i.AnimatedNumber,{value:I,format:x,children:w})||w(x?x(I):I);return(0,o.createComponentVNode)(2,c.Box,{className:(0,a.classes)(["NumberInput",m&&"NumberInput--fluid",p]),minWidth:b,minHeight:v,lineHeight:V,fontSize:y,onMouseDown:this.handleDragStart,children:[(0,o.createVNode)(1,"div","NumberInput__barContainer",(0,o.createVNode)(1,"div","NumberInput__bar",null,1,{style:{height:(0,r.clamp)((I-g)/(N-g)*100,0,100)+"%"}}),2),_,(0,o.createVNode)(64,"input","NumberInput__input",null,1,{style:{opacity:l?undefined:0,height:v,"line-height":V,"font-size":y},onFocus:function(t){e.setState({editing:!0}),k&&k(t,h)},onBlur:function(t){if(l){var n=(0,r.clamp)(parseFloat(t.target.value),g,N);Number.isNaN(n)?e.setState({editing:!1}):(e.setState({editing:!1,value:n}),e.suppressFlicker(),k&&k(t,n),S&&S(t,n))}},onKeyDown:function(t){if(13===t.keyCode){var n=(0,r.clamp)(parseFloat(t.target.value),g,N);return Number.isNaN(n)?void e.setState({editing:!1}):(e.setState({editing:!1,value:n}),e.suppressFlicker(),k&&k(t,n),void(S&&S(t,n)))}27!==t.keyCode||e.setState({editing:!1})}},null,this.inputRef)]})},u}(o.Component);t.NumberInput=u,u.defaultHooks=a.pureComponentHooks,u.defaultProps={minValue:-Infinity,maxValue:+Infinity,step:1,stepPixelSize:1,suppressFlicker:50}},76776:function(e,t,n){"use strict";t.__esModule=!0,t.Pointer=void 0;var o=n(96323),r=n(1060);t.Pointer=function(e){var t=e.className,n=e.color,a=e.left,i=e.top,c=void 0===i?.5:i,l=(0,r.classes)(["react-colorful__pointer",t]),u={top:100*c+"%",left:100*a+"%"};return(0,o.createVNode)(1,"div",l,(0,o.createVNode)(1,"div","react-colorful__pointer-fill",null,1,{style:{"background-color":n}}),2,{style:u})}},16513:function(e,t,n){"use strict";t.__esModule=!0,t.Popper=void 0;var o=n(34739),r=n(96323);function a(e,t){return a=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e},a(e,t)}var i=function(e){var t,n;function i(){var t;return(t=e.call(this)||this).renderedContent=void 0,t.popperInstance=void 0,i.id+=1,t}n=e,(t=i).prototype=Object.create(n.prototype),t.prototype.constructor=t,a(t,n);var c=i.prototype;return c.componentDidMount=function(){var e=this,t=this.props,n=t.additionalStyles,a=t.options;if(this.renderedContent=document.createElement("div"),n)for(var i=0,c=Object.entries(n);i<c.length;i++){var l=c[i],u=l[0],d=l[1];this.renderedContent.style[u]=d}this.renderPopperContent((function(){document.body.appendChild(e.renderedContent);var t=(0,r.findDOMfromVNode)(e.$LI,!0);t&&(e.popperInstance=(0,o.createPopper)(t,e.renderedContent,a))}))},c.componentDidUpdate=function(){var e=this;this.renderPopperContent((function(){var t;return null==(t=e.popperInstance)?void 0:t.update()}))},c.componentWillUnmount=function(){var e;null==(e=this.popperInstance)||e.destroy(),this.renderedContent.remove()},c.renderPopperContent=function(e){(0,r.render)(this.props.popperContent,this.renderedContent,e)},c.render=function(){return this.props.children},i}(r.Component);t.Popper=i,i.id=0},12194:function(e,t,n){"use strict";t.__esModule=!0,t.ProgressBar=void 0;var o=n(96323),r=n(97622),a=n(1060),i=n(54425),c=n(84200),l=["className","value","minValue","maxValue","color","textColor","ranges","children"];var u=function(e){var t=e.className,n=e.value,u=e.minValue,d=void 0===u?0:u,s=e.maxValue,p=void 0===s?1:s,m=e.color,f=e.textColor,h=e.ranges,C=void 0===h?{}:h,g=e.children,N=function(e,t){if(null==e)return{};var n,o,r={},a=Object.keys(e);for(o=0;o<a.length;o++)n=a[o],t.indexOf(n)>=0||(r[n]=e[n]);return r}(e,l),v=(0,r.scale)(n,d,p),b=g!==undefined,V=m||(0,r.keyOfMatchingRange)(n,C)||"default",y=(0,i.computeBoxProps)(N),x=["ProgressBar",t,(0,i.computeBoxClassName)(N)],k={width:100*(0,r.clamp01)(v)+"%"};return c.CSS_COLORS.includes(V)||"default"===V?x.push("ProgressBar--color--"+V):(y.style=(y.style||"")+"border-color: "+V+";",k["background-color"]=V),(0,o.normalizeProps)((0,o.createVNode)(1,"div",(0,a.classes)(x),[(0,o.createVNode)(1,"div","ProgressBar__fill ProgressBar__fill--animated",null,1,{style:k}),(0,o.createVNode)(1,"div","ProgressBar__content",b?g:(0,r.toFixed)(100*v)+"%",0,{style:f&&{color:f}})],4,Object.assign({},y)))};t.ProgressBar=u,u.defaultHooks=a.pureComponentHooks},94709:function(e,t,n){"use strict";t.__esModule=!0,t.RoundGauge=void 0;var o=n(96323),r=n(97622),a=n(1060),i=n(54642),c=n(54425),l=["value","minValue","maxValue","ranges","alertAfter","alertBefore","format","size","className","style"];t.RoundGauge=function(e){if(Byond.IS_LTE_IE8)return(0,o.normalizeProps)((0,o.createComponentVNode)(2,i.AnimatedNumber,Object.assign({},e)));var t=e.value,n=e.minValue,u=void 0===n?1:n,d=e.maxValue,s=void 0===d?1:d,p=e.ranges,m=e.alertAfter,f=e.alertBefore,h=e.format,C=e.size,g=void 0===C?1:C,N=e.className,v=e.style,b=function(e,t){if(null==e)return{};var n,o,r={},a=Object.keys(e);for(o=0;o<a.length;o++)n=a[o],t.indexOf(n)>=0||(r[n]=e[n]);return r}(e,l),V=(0,r.scale)(t,u,s),y=(0,r.clamp01)(V),x=p?{}:{primary:[0,1]};p&&Object.keys(p).forEach((function(e){var t=p[e];x[e]=[(0,r.scale)(t[0],u,s),(0,r.scale)(t[1],u,s)]}));var k=function(){if(m&&f&&m<f){if(m<t&&f>t)return!0}else if(m<t||f>t)return!0;return!1}()&&(0,r.keyOfMatchingRange)(y,x);return(0,o.createComponentVNode)(2,c.Box,{inline:!0,children:[(0,o.normalizeProps)((0,o.createVNode)(1,"div",(0,a.classes)(["RoundGauge",N,(0,c.computeBoxClassName)(b)]),(0,o.createVNode)(32,"svg",null,[(m||f)&&(0,o.createVNode)(32,"g",(0,a.classes)(["RoundGauge__alert",k?"active RoundGauge__alert--"+k:""]),(0,o.createVNode)(32,"path",null,null,1,{d:"M48.211,14.578C48.55,13.9 49.242,13.472 50,13.472C50.758,13.472 51.45,13.9 51.789,14.578C54.793,20.587 60.795,32.589 63.553,38.106C63.863,38.726 63.83,39.462 63.465,40.051C63.101,40.641 62.457,41 61.764,41C55.996,41 44.004,41 38.236,41C37.543,41 36.899,40.641 36.535,40.051C36.17,39.462 36.137,38.726 36.447,38.106C39.205,32.589 45.207,20.587 48.211,14.578ZM50,34.417C51.426,34.417 52.583,35.574 52.583,37C52.583,38.426 51.426,39.583 50,39.583C48.574,39.583 47.417,38.426 47.417,37C47.417,35.574 48.574,34.417 50,34.417ZM50,32.75C50,32.75 53,31.805 53,22.25C53,20.594 51.656,19.25 50,19.25C48.344,19.25 47,20.594 47,22.25C47,31.805 50,32.75 50,32.75Z"}),2),(0,o.createVNode)(32,"g",null,(0,o.createVNode)(32,"circle","RoundGauge__ringTrack",null,1,{cx:"50",cy:"50",r:"45"}),2),(0,o.createVNode)(32,"g",null,Object.keys(x).map((function(e,t){var n=x[e];return(0,o.createVNode)(32,"circle","RoundGauge__ringFill RoundGauge--color--"+e,null,1,{style:{"stroke-dashoffset":Math.max((2-(n[1]-n[0]))*Math.PI*50,0)},transform:"rotate("+(180+180*n[0])+" 50 50)",cx:"50",cy:"50",r:"45"},t)})),0),(0,o.createVNode)(32,"g","RoundGauge__needle",[(0,o.createVNode)(32,"polygon","RoundGauge__needleLine",null,1,{points:"46,50 50,0 54,50"}),(0,o.createVNode)(32,"circle","RoundGauge__needleMiddle",null,1,{cx:"50",cy:"50",r:"8"})],4,{transform:"rotate("+(180*y-90)+" 50 50)"})],0,{viewBox:"0 0 100 50"}),2,Object.assign({},(0,c.computeBoxProps)(Object.assign({style:Object.assign({"font-size":g+"em"},v)},b))))),(0,o.createComponentVNode)(2,i.AnimatedNumber,{value:t,format:h,size:g})]})}},77381:function(e,t,n){"use strict";t.__esModule=!0,t.Section=void 0;var o=n(96323),r=n(1060),a=n(99397),i=n(54425),c=["className","title","buttons","fill","fitted","scrollable","children"];function l(e,t){return l=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e},l(e,t)}var u=function(e){var t,n;function u(t){var n;return(n=e.call(this,t)||this).scrollableRef=void 0,n.scrollable=void 0,n.scrollableRef=(0,o.createRef)(),n.scrollable=t.scrollable,n}n=e,(t=u).prototype=Object.create(n.prototype),t.prototype.constructor=t,l(t,n);var d=u.prototype;return d.componentDidMount=function(){this.scrollable&&(0,a.addScrollableNode)(this.scrollableRef.current)},d.componentWillUnmount=function(){this.scrollable&&(0,a.removeScrollableNode)(this.scrollableRef.current)},d.render=function(){var e=this.props,t=e.className,n=e.title,a=e.buttons,l=e.fill,u=e.fitted,d=e.scrollable,s=e.children,p=function(e,t){if(null==e)return{};var n,o,r={},a=Object.keys(e);for(o=0;o<a.length;o++)n=a[o],t.indexOf(n)>=0||(r[n]=e[n]);return r}(e,c),m=(0,r.canRender)(n)||(0,r.canRender)(a);return(0,o.normalizeProps)((0,o.createVNode)(1,"div",(0,r.classes)(["Section",Byond.IS_LTE_IE8&&"Section--iefix",l&&"Section--fill",u&&"Section--fitted",d&&"Section--scrollable",t,(0,i.computeBoxClassName)(p)]),[m&&(0,o.createVNode)(1,"div","Section__title",[(0,o.createVNode)(1,"span","Section__titleText",n,0),(0,o.createVNode)(1,"div","Section__buttons",a,0)],4),(0,o.createVNode)(1,"div","Section__rest",(0,o.createVNode)(1,"div","Section__content",s,0,null,null,this.scrollableRef),2)],0,Object.assign({},(0,i.computeBoxProps)(p))))},u}(o.Component);t.Section=u},4482:function(e,t,n){"use strict";t.__esModule=!0,t.Slider=void 0;var o=n(96323),r=n(97622),a=n(1060),i=n(54425),c=n(42833),l=n(97667),u=["animated","format","maxValue","minValue","onChange","onDrag","step","stepPixelSize","suppressFlicker","unit","value","className","fillValue","color","ranges","children"];t.Slider=function(e){if(Byond.IS_LTE_IE8)return(0,o.normalizeProps)((0,o.createComponentVNode)(2,l.NumberInput,Object.assign({},e)));var t=e.animated,n=e.format,d=e.maxValue,s=e.minValue,p=e.onChange,m=e.onDrag,f=e.step,h=e.stepPixelSize,C=e.suppressFlicker,g=e.unit,N=e.value,v=e.className,b=e.fillValue,V=e.color,y=e.ranges,x=void 0===y?{}:y,k=e.children,S=function(e,t){if(null==e)return{};var n,o,r={},a=Object.keys(e);for(o=0;o<a.length;o++)n=a[o],t.indexOf(n)>=0||(r[n]=e[n]);return r}(e,u),I=k!==undefined;return(0,o.normalizeProps)((0,o.createComponentVNode)(2,c.DraggableControl,Object.assign({dragMatrix:[1,0]},{animated:t,format:n,maxValue:d,minValue:s,onChange:p,onDrag:m,step:f,stepPixelSize:h,suppressFlicker:C,unit:g,value:N},{children:function(e){var t=e.dragging,n=(e.editing,e.value),c=e.displayValue,l=e.displayElement,u=e.inputElement,p=e.handleDragStart,m=b!==undefined&&null!==b,f=((0,r.scale)(n,s,d),(0,r.scale)(null!=b?b:c,s,d)),h=(0,r.scale)(c,s,d),C=V||(0,r.keyOfMatchingRange)(null!=b?b:n,x)||"default";return(0,o.normalizeProps)((0,o.createVNode)(1,"div",(0,a.classes)(["Slider","ProgressBar","ProgressBar--color--"+C,v,(0,i.computeBoxClassName)(S)]),[(0,o.createVNode)(1,"div",(0,a.classes)(["ProgressBar__fill",m&&"ProgressBar__fill--animated"]),null,1,{style:{width:100*(0,r.clamp01)(f)+"%",opacity:.4}}),(0,o.createVNode)(1,"div","ProgressBar__fill",null,1,{style:{width:100*(0,r.clamp01)(Math.min(f,h))+"%"}}),(0,o.createVNode)(1,"div","Slider__cursorOffset",[(0,o.createVNode)(1,"div","Slider__cursor"),(0,o.createVNode)(1,"div","Slider__pointer"),t&&(0,o.createVNode)(1,"div","Slider__popupValue",l,0)],0,{style:{width:100*(0,r.clamp01)(h)+"%"}}),(0,o.createVNode)(1,"div","ProgressBar__content",I?k:l,0),u],0,Object.assign({},(0,i.computeBoxProps)(S),{onMouseDown:p})))}})))}},4033:function(e,t,n){"use strict";t.__esModule=!0,t.Stack=void 0;var o=n(96323),r=n(1060),a=n(67486),i=["className","vertical","fill","zebra"],c=["className","innerRef"],l=["className","hidden"];function u(e,t){if(null==e)return{};var n,o,r={},a=Object.keys(e);for(o=0;o<a.length;o++)n=a[o],t.indexOf(n)>=0||(r[n]=e[n]);return r}var d=function(e){var t=e.className,n=e.vertical,c=e.fill,l=e.zebra,d=u(e,i);return(0,o.normalizeProps)((0,o.createVNode)(1,"div",(0,r.classes)(["Stack",c&&"Stack--fill",n?"Stack--vertical":"Stack--horizontal",l&&"Stack--zebra",t,(0,a.computeFlexClassName)(e)]),null,1,Object.assign({},(0,a.computeFlexProps)(Object.assign({direction:n?"column":"row"},d)))))};t.Stack=d;d.Item=function(e){var t=e.className,n=e.innerRef,i=u(e,c);return(0,o.normalizeProps)((0,o.createVNode)(1,"div",(0,r.classes)(["Stack__item",t,(0,a.computeFlexItemClassName)(i)]),null,1,Object.assign({},(0,a.computeFlexItemProps)(i)),null,n))};d.Divider=function(e){var t=e.className,n=e.hidden,i=u(e,l);return(0,o.normalizeProps)((0,o.createVNode)(1,"div",(0,r.classes)(["Stack__item","Stack__divider",n&&"Stack__divider--hidden",t,(0,a.computeFlexItemClassName)(i)]),null,1,Object.assign({},(0,a.computeFlexItemProps)(i))))}},28581:function(e,t,n){"use strict";t.__esModule=!0,t.TableCell=t.TableRow=t.Table=void 0;var o=n(96323),r=n(1060),a=n(54425),i=["className","collapsing","children"],c=["className","header"],l=["className","collapsing","header"];function u(e,t){if(null==e)return{};var n,o,r={},a=Object.keys(e);for(o=0;o<a.length;o++)n=a[o],t.indexOf(n)>=0||(r[n]=e[n]);return r}var d=function(e){var t=e.className,n=e.collapsing,c=e.children,l=u(e,i);return(0,o.normalizeProps)((0,o.createVNode)(1,"table",(0,r.classes)(["Table",n&&"Table--collapsing",t,(0,a.computeBoxClassName)(l)]),(0,o.createVNode)(1,"tbody",null,c,0),2,Object.assign({},(0,a.computeBoxProps)(l))))};t.Table=d,d.defaultHooks=r.pureComponentHooks;var s=function(e){var t=e.className,n=e.header,i=u(e,c);return(0,o.normalizeProps)((0,o.createVNode)(1,"tr",(0,r.classes)(["Table__row",n&&"Table__row--header",t,(0,a.computeBoxClassName)(e)]),null,1,Object.assign({},(0,a.computeBoxProps)(i))))};t.TableRow=s,s.defaultHooks=r.pureComponentHooks;var p=function(e){var t=e.className,n=e.collapsing,i=e.header,c=u(e,l);return(0,o.normalizeProps)((0,o.createVNode)(1,"td",(0,r.classes)(["Table__cell",n&&"Table__cell--collapsing",i&&"Table__cell--header",t,(0,a.computeBoxClassName)(e)]),null,1,Object.assign({},(0,a.computeBoxProps)(c))))};t.TableCell=p,p.defaultHooks=r.pureComponentHooks,d.Row=s,d.Cell=p},60839:function(e,t,n){"use strict";t.__esModule=!0,t.Tabs=void 0;var o=n(96323),r=n(1060),a=n(54425),i=n(65743),c=["className","vertical","fill","fluid","children"],l=["className","selected","color","icon","leftSlot","rightSlot","children"];function u(e,t){if(null==e)return{};var n,o,r={},a=Object.keys(e);for(o=0;o<a.length;o++)n=a[o],t.indexOf(n)>=0||(r[n]=e[n]);return r}var d=function(e){var t=e.className,n=e.vertical,i=e.fill,l=e.fluid,d=e.children,s=u(e,c);return(0,o.normalizeProps)((0,o.createVNode)(1,"div",(0,r.classes)(["Tabs",n?"Tabs--vertical":"Tabs--horizontal",i&&"Tabs--fill",l&&"Tabs--fluid",t,(0,a.computeBoxClassName)(s)]),d,0,Object.assign({},(0,a.computeBoxProps)(s))))};t.Tabs=d;d.Tab=function(e){var t=e.className,n=e.selected,c=e.color,d=e.icon,s=e.leftSlot,p=e.rightSlot,m=e.children,f=u(e,l);return(0,o.normalizeProps)((0,o.createVNode)(1,"div",(0,r.classes)(["Tab","Tabs__Tab","Tab--color--"+c,n&&"Tab--selected",t].concat((0,a.computeBoxClassName)(f))),[(0,r.canRender)(s)&&(0,o.createVNode)(1,"div","Tab__left",s,0)||!!d&&(0,o.createVNode)(1,"div","Tab__left",(0,o.createComponentVNode)(2,i.Icon,{name:d}),2),(0,o.createVNode)(1,"div","Tab__text",m,0),(0,r.canRender)(p)&&(0,o.createVNode)(1,"div","Tab__right",p,0)],0,Object.assign({},(0,a.computeBoxProps)(f))))}},51129:function(e,t,n){"use strict";t.__esModule=!0,t.TextArea=void 0;var o=n(96323),r=n(1060),a=n(54425),i=n(77863),c=n(57890),l=["onChange","onKeyDown","onKeyPress","onInput","onFocus","onBlur","onEnter","value","maxLength","placeholder"],u=["className","fluid"];function d(e,t){if(null==e)return{};var n,o,r={},a=Object.keys(e);for(o=0;o<a.length;o++)n=a[o],t.indexOf(n)>=0||(r[n]=e[n]);return r}function s(e,t){return s=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e},s(e,t)}var p=function(e){var t,n;function p(t,n){var r;(r=e.call(this,t,n)||this).textareaRef=(0,o.createRef)(),r.fillerRef=(0,o.createRef)(),r.state={editing:!1};var a=t.dontUseTabForIndent,l=void 0!==a&&a;return r.handleOnInput=function(e){var t=r.state.editing,n=r.props.onInput;t||r.setEditing(!0),n&&n(e,e.target.value)},r.handleOnChange=function(e){var t=r.state.editing,n=r.props.onChange;t&&r.setEditing(!1),n&&n(e,e.target.value)},r.handleKeyPress=function(e){var t=r.state.editing,n=r.props.onKeyPress;t||r.setEditing(!0),n&&n(e,e.target.value)},r.handleKeyDown=function(e){var t=r.state.editing,n=r.props.onKeyDown;if(e.keyCode===c.KEY_ESCAPE)return r.setEditing(!1),e.target.value=(0,i.toInputValue)(r.props.value),void e.target.blur();if((t||r.setEditing(!0),!l)&&9===(e.keyCode||e.which)){e.preventDefault();var o=e.target,a=o.value,u=o.selectionStart,d=o.selectionEnd;e.target.value=a.substring(0,u)+"\t"+a.substring(d),e.target.selectionEnd=u+1}n&&n(e,e.target.value)},r.handleFocus=function(e){r.state.editing||r.setEditing(!0)},r.handleBlur=function(e){var t=r.state.editing,n=r.props.onChange;t&&(r.setEditing(!1),n&&n(e,e.target.value))},r}n=e,(t=p).prototype=Object.create(n.prototype),t.prototype.constructor=t,s(t,n);var m=p.prototype;return m.componentDidMount=function(){var e=this.props.value,t=this.textareaRef.current;t&&(t.value=(0,i.toInputValue)(e))},m.componentDidUpdate=function(e,t){var n=this.state.editing,o=e.value,r=this.props.value,a=this.textareaRef.current;a&&!n&&o!==r&&(a.value=(0,i.toInputValue)(r))},m.setEditing=function(e){this.setState({editing:e})},m.getValue=function(){return this.textareaRef.current&&this.textareaRef.current.value},m.render=function(){var e=this.props,t=(e.onChange,e.onKeyDown,e.onKeyPress,e.onInput,e.onFocus,e.onBlur,e.onEnter,e.value,e.maxLength),n=e.placeholder,i=d(e,l),c=i.className,s=i.fluid,p=d(i,u);return(0,o.normalizeProps)((0,o.createComponentVNode)(2,a.Box,Object.assign({className:(0,r.classes)(["TextArea",s&&"TextArea--fluid",c])},p,{children:(0,o.createVNode)(128,"textarea","TextArea__textarea",null,1,{placeholder:n,onChange:this.handleOnChange,onKeyDown:this.handleKeyDown,onKeyPress:this.handleKeyPress,onInput:this.handleOnInput,onFocus:this.handleFocus,onBlur:this.handleBlur,maxLength:t},null,this.textareaRef)})))},p}(o.Component);t.TextArea=p},92464:function(e,t,n){"use strict";t.__esModule=!0,t.TimeDisplay=void 0;var o=n(97622),r=n(96323);function a(e,t){return a=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e},a(e,t)}var i=function(e){return"number"==typeof e&&Number.isFinite(e)&&!Number.isNaN(e)},c=function(e){var t,n;function r(t){var n;return(n=e.call(this,t)||this).timer=null,n.timing=!1,n.format=null,n.last_seen_value=undefined,n.state={value:0},i(t.value)&&(n.state.value=Number(t.value),n.last_seen_value=Number(t.value)),n}n=e,(t=r).prototype=Object.create(n.prototype),t.prototype.constructor=t,a(t,n);var c=r.prototype;return c.componentDidUpdate=function(){var e=this;this.props.timing&&(clearInterval(this.timer),this.timer=setInterval((function(){return e.tick()}),1e3))},c.tick=function(){var e=Number(this.state.value);this.props.value!==this.last_seen_value&&(this.last_seen_value=this.props.value,e=this.props.value);var t="up"===this.props.auto?10:-10,n=Math.max(0,e+t);this.setState({value:n})},c.componentDidMount=function(){var e=this;this.props.timing&&(this.timer=setInterval((function(){return e.tick()}),1e3))},c.componentWillUnmount=function(){clearInterval(this.timer)},r.getDerivedStateFromProps=function(e){return e.timing?null:{value:e.value}},r.defaultFormat=function(e){var t=(0,o.toFixed)(Math.floor(e/10%60)).padStart(2,"0"),n=(0,o.toFixed)(Math.floor(e/600%60)).padStart(2,"0");return(0,o.toFixed)(Math.floor(e/36e3%24)).padStart(2,"0")+":"+n+":"+t},c.render=function(){var e=this.state.value;return i(e)?this.props.format?this.props.format(e):r.defaultFormat(e):this.state.value||null},r}(r.Component);t.TimeDisplay=c},59463:function(e,t,n){"use strict";t.__esModule=!0,t.Tooltip=void 0;var o=n(96323),r=n(34739);function a(e,t){return a=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e},a(e,t)}var i={modifiers:[{name:"eventListeners",enabled:!1}]},c={width:0,height:0,top:0,right:0,bottom:0,left:0,x:0,y:0,toJSON:function(){return null}},l=function(e){var t,n;function c(){return e.apply(this,arguments)||this}n=e,(t=c).prototype=Object.create(n.prototype),t.prototype.constructor=t,a(t,n);var l=c.prototype;return l.getDOMNode=function(){return(0,o.findDOMfromVNode)(this.$LI,!0)},l.componentDidMount=function(){var e=this,t=this.getDOMNode();t&&(t.addEventListener("mouseenter",(function(){var n=c.renderedTooltip;n===undefined&&((n=document.createElement("div")).className="Tooltip",document.body.appendChild(n),c.renderedTooltip=n),c.currentHoveredElement=t,n.style.opacity="1",e.renderPopperContent()})),t.addEventListener("mouseleave",(function(){e.fadeOut()})))},l.fadeOut=function(){c.currentHoveredElement===this.getDOMNode()&&(c.currentHoveredElement=undefined,c.renderedTooltip.style.opacity="0")},l.renderPopperContent=function(){var e=this,t=c.renderedTooltip;t&&(0,o.render)((0,o.createVNode)(1,"span",null,this.props.content,0),t,(function(){var n=c.singletonPopper;n===undefined?(n=(0,r.createPopper)(c.virtualElement,t,Object.assign({},i,{placement:e.props.position||"auto"})),c.singletonPopper=n):(n.setOptions(Object.assign({},i,{placement:e.props.position||"auto"})),n.update())}),this.context)},l.componentDidUpdate=function(){c.currentHoveredElement===this.getDOMNode()&&this.renderPopperContent()},l.componentWillUnmount=function(){this.fadeOut()},l.render=function(){return this.props.children},c}(o.Component);t.Tooltip=l,l.renderedTooltip=void 0,l.singletonPopper=void 0,l.currentHoveredElement=void 0,l.virtualElement={getBoundingClientRect:function(){var e,t;return null!=(e=null==(t=l.currentHoveredElement)?void 0:t.getBoundingClientRect())?e:c}}},16422:function(e,t,n){"use strict";t.__esModule=!0,t.ColorButton=void 0;var o=n(96323),r=n(54425),a=n(25808),i=n(47233),c=["color"];t.ColorButton=function(e){var t=e.color,n=function(e,t){if(null==e)return{};var n,o,r={},a=Object.keys(e);for(o=0;o<a.length;o++)n=a[o],t.indexOf(n)>=0||(r[n]=e[n]);return r}(e,c);return(0,o.normalizeProps)((0,o.createComponentVNode)(2,a.Button,Object.assign({},n,{children:[(0,o.createComponentVNode)(2,i.ColorBox,{color:t,mr:"5px"}),(0,o.createComponentVNode)(2,r.Box,{as:"code",children:t})]})))}},88344:function(e,t,n){"use strict";t.__esModule=!0,t.ItemList=void 0;var o=n(96323),r=n(26949);t.ItemList=function(e){var t=e.items,n=e.nothing_text,a=void 0===n?"Nothing":n;return t===undefined||0===t.length?""+a:t.map((function(e,t,n){return(0,o.createComponentVNode)(2,r.Flex,{inline:!0,align:"center",children:[!!e.iconBase64&&(0,o.createComponentVNode)(2,r.Flex.Item,{children:(0,o.createComponentVNode)(2,r.Image,{height:"32px",width:"32px",pixelated:!0,src:"data:image/png;base64,"+e.iconBase64})}),(0,o.createComponentVNode)(2,r.Flex.Item,{pr:1,pl:.5,children:[e.name,t===n.length-1?"":", "+(t===n.length-2?"and ":"")]})]},t)}))}},90282:function(e,t,n){"use strict";t.__esModule=!0,t.Cell=void 0;var o=n(96323),r=n(26949),a=n(98920);t.Cell=function(e){var t=e.columnConfig,n=e.data,i=e.rowId,c=t.basis,l=t.getValueTooltip,u=t.grow,d=t.renderContents,s=(0,a.isValuedColumnConfig)(t)?t.getValue(n):undefined,p=null==l?void 0:l(n),m=d?d({data:n,rowId:i,value:s}):(0,o.createComponentVNode)(2,r.Box,{children:s}),f=p?(0,o.createComponentVNode)(2,r.Tooltip,{content:p,children:m}):m;return(0,o.createComponentVNode)(2,r.Stack.Item,{basis:c,grow:u,children:f})}},72710:function(e,t,n){"use strict";t.__esModule=!0,t.HeaderCell=void 0;var o=n(96323),r=n(4033);t.HeaderCell=function(e){var t=e.config,n=t.basis,a=t.grow,i=t.header;return(0,o.createComponentVNode)(2,r.Stack.Item,{basis:n,grow:a,bold:!0,children:i})}},42151:function(e,t,n){"use strict";t.__esModule=!0,t.HeaderCell=t.Cell=void 0;var o=n(90282);t.Cell=o.Cell;var r=n(72710);t.HeaderCell=r.HeaderCell},98920:function(e,t){"use strict";t.__esModule=!0,t.isValuedColumnConfig=void 0;t.isValuedColumnConfig=function(e){return"getValue"in e}},44516:function(e,t,n){"use strict";t.__esModule=!0,t.Placeholder=void 0;var o=n(96323),r=n(1060),a=n(54425),i=["children","className"];t.Placeholder=function(e){var t=e.children,n=void 0===t?"No results found":t,c=e.className,l=function(e,t){if(null==e)return{};var n,o,r={},a=Object.keys(e);for(o=0;o<a.length;o++)n=a[o],t.indexOf(n)>=0||(r[n]=e[n]);return r}(e,i),u=(0,r.classes)(["placeholder",c]);return(0,o.normalizeProps)((0,o.createComponentVNode)(2,a.Box,Object.assign({className:u,color:"label",italic:!0},l,{children:n})))}},99120:function(e,t,n){"use strict";t.__esModule=!0,t.SectionEx=void 0;var o=n(96323),r=n(1060),a=n(54425),i=n(77381),c=["className","capitalize"];t.SectionEx=function(e){var t=e.className,n=e.capitalize,l=function(e,t){if(null==e)return{};var n,o,r={},a=Object.keys(e);for(o=0;o<a.length;o++)n=a[o],t.indexOf(n)>=0||(r[n]=e[n]);return r}(e,c);return(0,o.normalizeProps)((0,o.createComponentVNode)(2,i.Section,Object.assign({className:(0,r.classes)(["SectionEx",n&&"SectionEx__capitalize",t,(0,a.computeBoxClassName)(l)])},l)))}},26949:function(e,t,n){"use strict";t.__esModule=!0,t.Tooltip=t.TimeDisplay=t.TextArea=t.Tabs=t.Table=t.Stack=t.Slider=t.SectionEx=t.Section=t.RoundGauge=t.Pointer=t.Popper=t.ProgressBar=t.Placeholder=t.NumberInput=t.NoticeBox=t.Modal=t.LabeledList=t.LabeledControls=t.Knob=t.ItemList=t.Interactive=t.Input=t.Image=t.Icon=t.Grid=t.Flex=t.Dropdown=t.DraggableControl=t.Divider=t.Dimmer=t.ColorButton=t.ColorBox=t.Collapsible=t.Chart=t.ByondUi=t.Button=t.Box=t.BlockQuote=t.Blink=t.Autofocus=t.AnimatedNumber=void 0;var o=n(54642);t.AnimatedNumber=o.AnimatedNumber;var r=n(75434);t.Autofocus=r.Autofocus;var a=n(90297);t.Blink=a.Blink;var i=n(7149);t.BlockQuote=i.BlockQuote;var c=n(54425);t.Box=c.Box;var l=n(25808);t.Button=l.Button;var u=n(44051);t.ByondUi=u.ByondUi;var d=n(64726);t.Chart=d.Chart;var s=n(49751);t.Collapsible=s.Collapsible;var p=n(47233);t.ColorBox=p.ColorBox;var m=n(16422);t.ColorButton=m.ColorButton;var f=n(93913);t.Dimmer=f.Dimmer;var h=n(22755);t.Divider=h.Divider;var C=n(42833);t.DraggableControl=C.DraggableControl;var g=n(12489);t.Dropdown=g.Dropdown;var N=n(67486);t.Flex=N.Flex;var v=n(28408);t.Grid=v.Grid;var b=n(65743);t.Icon=b.Icon;var V=n(94261);t.Image=V.Image;var y=n(77863);t.Input=y.Input;var x=n(54291);t.Interactive=x.Interactive;var k=n(88344);t.ItemList=k.ItemList;var S=n(14274);t.Knob=S.Knob;var I=n(95592);t.LabeledControls=I.LabeledControls;var w=n(21173);t.LabeledList=w.LabeledList;var _=n(89416);t.Modal=_.Modal;var D=n(23257);t.NoticeBox=D.NoticeBox;var M=n(97667);t.NumberInput=M.NumberInput;var B=n(44516);t.Placeholder=B.Placeholder;var A=n(12194);t.ProgressBar=A.ProgressBar;var T=n(16513);t.Popper=T.Popper;var L=n(76776);t.Pointer=L.Pointer;var E=n(94709);t.RoundGauge=E.RoundGauge;var P=n(77381);t.Section=P.Section;var j=n(99120);t.SectionEx=j.SectionEx;var O=n(4482);t.Slider=O.Slider;var F=n(4033);t.Stack=F.Stack;var R=n(28581);t.Table=R.Table;var z=n(60839);t.Tabs=z.Tabs;var W=n(51129);t.TextArea=W.TextArea;var U=n(92464);t.TimeDisplay=U.TimeDisplay;var H=n(59463);t.Tooltip=H.Tooltip},84200:function(e,t){"use strict";t.__esModule=!0,t.getGasColor=t.getGasLabel=t.RADIO_CHANNELS=t.CSS_COLORS=t.COLORS=t.UI_CLOSE=t.UI_DISABLED=t.UI_UPDATE=t.UI_INTERACTIVE=void 0;t.UI_INTERACTIVE=2;t.UI_UPDATE=1;t.UI_DISABLED=0;t.UI_CLOSE=-1;t.COLORS={department:{captain:"#548b55",security:"#e74c3c",medbay:"#3498db",science:"#9b59b6",engineering:"#f1c40f",cargo:"#f39c12",centcom:"#00c100",other:"#c38312"},damageType:{oxy:"#3498db",toxin:"#2ecc71",burn:"#e67e22",brute:"#e74c3c"},damageTypeFill:{oxy:"rgba(52, 152, 219, 0.5)",toxin:"rgba(46, 204, 113, 0.5)",burn:"rgba(230, 126, 34, 0.5)",brute:"rgba(231, 76, 60, 0.5)"}};t.CSS_COLORS=["black","white","red","orange","yellow","olive","green","teal","blue","violet","purple","pink","brown","grey","good","average","bad","label"];t.RADIO_CHANNELS=[{name:"Syndicate",freq:1352,color:"#BB3333"},{name:"CentCom",freq:1451,color:"#2681a5"},{name:"Catering",freq:1485,color:"#C16082"},{name:"Civilian",freq:1355,color:"#6ca729"},{name:"Research",freq:1354,color:"#153E9E"},{name:"Command",freq:1356,color:"#5177ff"},{name:"Medical",freq:1445,color:"#57b8f0"},{name:"Engineering",freq:1441,color:"#BBBB00"},{name:"Security",freq:1485,color:"#dd3535"},{name:"AI",freq:1447,color:"#333399"},{name:"Bridge",freq:1442,color:"#339933"}];var n=[{id:"o2",name:"Oxygen",label:"O\u2082",color:"blue"},{id:"n2",name:"Nitrogen",label:"N\u2082",color:"red"},{id:"co2",name:"Carbon Dioxide",label:"CO\u2082",color:"grey"},{id:"plasma",name:"Plasma",label:"Plasma",color:"pink"},{id:"n2o",name:"Nitrous Oxide",label:"N\u2082O",color:"red"}];t.getGasLabel=function(e,t){var o=String(e).toLowerCase(),r=n.find((function(e){return e.id===o||e.name.toLowerCase()===o}));return r&&r.label||t||e};t.getGasColor=function(e){var t=String(e).toLowerCase(),o=n.find((function(e){return e.id===t||e.name.toLowerCase()===t}));return o&&o.color}},71224:function(e,t,n){"use strict";t.__esModule=!0,t.KitchenSink=void 0;var o=n(96323),r=n(31246),a=n(26949),i=n(2381),c=n(69321);t.KitchenSink=function(e,t){var n=e.panel,l=(0,r.useLocalState)(t,"kitchenSinkTheme")[0],u=(0,r.useLocalState)(t,"pageIndex",0),d=u[0],s=u[1],p=c.keys().map((function(e){return c(e)})),m=p[d],f=n?i.Pane:i.Window;return(0,o.createComponentVNode)(2,f,{title:"Kitchen Sink",width:600,height:500,theme:l,children:(0,o.createComponentVNode)(2,a.Flex,{height:"100%",children:[(0,o.createComponentVNode)(2,a.Flex.Item,{m:1,mr:0,children:(0,o.createComponentVNode)(2,a.Section,{fill:!0,fitted:!0,children:(0,o.createComponentVNode)(2,a.Tabs,{vertical:!0,children:p.map((function(e,t){return(0,o.createComponentVNode)(2,a.Tabs.Tab,{color:"transparent",selected:t===d,onClick:function(){return s(t)},children:e.meta.title},t)}))})})}),(0,o.createComponentVNode)(2,a.Flex.Item,{position:"relative",grow:1,children:(0,o.createComponentVNode)(2,f.Content,{scrollable:!0,children:m.meta.render()})})]})})}},98069:function(e,t,n){"use strict";t.__esModule=!0,t.openExternalBrowser=t.toggleDebugLayout=t.toggleKitchenSink=void 0;var o=n(465),r=(0,o.createAction)("debug/toggleKitchenSink");t.toggleKitchenSink=r;var a=(0,o.createAction)("debug/toggleDebugLayout");t.toggleDebugLayout=a;var i=(0,o.createAction)("debug/openExternalBrowser");t.openExternalBrowser=i},35177:function(e,t,n){"use strict";t.__esModule=!0,t.useDebug=void 0;var o=n(465),r=n(12184);t.useDebug=function(e){return(0,o.useSelector)(e,r.selectDebug)}},27157:function(e,t,n){"use strict";t.__esModule=!0,t.debugReducer=t.relayMiddleware=t.debugMiddleware=t.KitchenSink=t.useDebug=void 0;var o=n(35177);t.useDebug=o.useDebug;var r=n(71224);t.KitchenSink=r.KitchenSink;var a=n(46656);t.debugMiddleware=a.debugMiddleware,t.relayMiddleware=a.relayMiddleware;var i=n(7124);t.debugReducer=i.debugReducer},46656:function(e,t,n){"use strict";t.__esModule=!0,t.relayMiddleware=t.debugMiddleware=void 0;var o=n(57890),r=n(99397),a=n(6965),i=n(98069),c=["backend/update","chat/message"];t.debugMiddleware=function(e){return(0,a.acquireHotKey)(o.KEY_F11),(0,a.acquireHotKey)(o.KEY_F12),r.globalEvents.on("keydown",(function(t){t.code===o.KEY_F11&&e.dispatch((0,i.toggleDebugLayout)()),t.code===o.KEY_F12&&e.dispatch((0,i.toggleKitchenSink)()),t.ctrl&&t.alt&&t.code===o.KEY_BACKSPACE&&setTimeout((function(){throw new Error("OOPSIE WOOPSIE!! UwU We made a fucky wucky!! A wittle fucko boingo! The code monkeys at our headquarters are working VEWY HAWD to fix this!")}))})),function(e){return function(t){return e(t)}}};t.relayMiddleware=function(e){var t=n(82252),l="?external"===location.search;return l?t.subscribe((function(t){var n=t.type,o=t.payload;"relay"===n&&o.windowId===window.__windowId__&&e.dispatch(Object.assign({},o.action,{relayed:!0}))})):((0,a.acquireHotKey)(o.KEY_F10),r.globalEvents.on("keydown",(function(t){t===o.KEY_F10&&e.dispatch((0,i.openExternalBrowser)())}))),function(e){return function(n){var o=n.type,r=(n.payload,n.relayed);if(o!==i.openExternalBrowser.type)return!c.includes(o)||r||l||t.sendMessage({type:"relay",payload:{windowId:window.__windowId__,action:n}}),e(n);window.open(location.href+"?external","_blank")}}}},7124:function(e,t){"use strict";t.__esModule=!0,t.debugReducer=void 0;t.debugReducer=function(e,t){void 0===e&&(e={});var n=t.type;t.payload;return"debug/toggleKitchenSink"===n?Object.assign({},e,{kitchenSink:!e.kitchenSink}):"debug/toggleDebugLayout"===n?Object.assign({},e,{debugLayout:!e.debugLayout}):e}},12184:function(e,t){"use strict";t.__esModule=!0,t.selectDebug=void 0;t.selectDebug=function(e){return e.debug}},41410:function(e,t,n){"use strict";t.__esModule=!0,t.resizeStartHandler=t.dragStartHandler=t.setupDrag=t.recallWindowGeometry=t.storeWindowGeometry=t.getScreenSize=t.getScreenPosition=t.setWindowSize=t.setWindowPosition=t.getWindowSize=t.getWindowPosition=t.setWindowKey=void 0;var o=n(7151),r=n(67288);function a(e,t,n,o,r,a,i){try{var c=e[a](i),l=c.value}catch(u){return void n(u)}c.done?t(l):Promise.resolve(l).then(o,r)}function i(e){return function(){var t=this,n=arguments;return new Promise((function(o,r){var i=e.apply(t,n);function c(e){a(i,o,r,c,l,"next",e)}function l(e){a(i,o,r,c,l,"throw",e)}c(undefined)}))}}var c,l,u,d,s,p=(0,n(79926).createLogger)("drag"),m=window.__windowId__,f=!1,h=!1,C=[0,0];t.setWindowKey=function(e){m=e};var g=function(){return[window.screenLeft,window.screenTop]};t.getWindowPosition=g;var N=function(){return[window.innerWidth,window.innerHeight]};t.getWindowSize=N;var v=function(e){var t=(0,r.vecAdd)(e,C);return Byond.winset(window.__windowId__,{pos:t[0]+","+t[1]})};t.setWindowPosition=v;var b=function(e){return Byond.winset(window.__windowId__,{size:e[0]+"x"+e[1]})};t.setWindowSize=b;var V=function(){return[0-C[0],0-C[1]]};t.getScreenPosition=V;var y=function(){return[window.screen.availWidth,window.screen.availHeight]};t.getScreenSize=y;var x=function(e,t,n){void 0===n&&(n=50);for(var o,r=[t],a=0;a<e.length;a++){var i=e[a];i!==t&&(r.length<n?r.push(i):o=i)}return[r,o]},k=function(){var e=i(regeneratorRuntime.mark((function t(){var e,n,r,a;return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return p.log("storing geometry"),e={pos:g(),size:N()},o.storage.set(m,e),t.t0=x,t.next=6,o.storage.get("geometries");case 6:if(t.t1=t.sent,t.t1){t.next=9;break}t.t1=[];case 9:t.t2=t.t1,t.t3=m,n=(0,t.t0)(t.t2,t.t3),r=n[0],(a=n[1])&&o.storage.remove(a),o.storage.set("geometries",r);case 16:case"end":return t.stop()}}),t)})));return function(){return e.apply(this,arguments)}}();t.storeWindowGeometry=k;var S=function(){var e=i(regeneratorRuntime.mark((function t(e){var n,a,i,l;return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:if(void 0===e&&(e={}),t.t0=e.fancy,!t.t0){t.next=6;break}return t.next=5,o.storage.get(m);case 5:t.t0=t.sent;case 6:return(n=t.t0)&&p.log("recalled geometry:",n),a=(null==n?void 0:n.pos)||e.pos,i=e.size,t.next=12,c;case 12:l=[window.screen.availWidth,window.screen.availHeight],i&&(i=[Math.min(l[0],i[0]),Math.min(l[1],i[1])],b(i)),a?(i&&e.locked&&(a=w(a,i)[1]),v(a)):i&&(a=(0,r.vecAdd)((0,r.vecScale)(l,.5),(0,r.vecScale)(i,-.5),(0,r.vecScale)(C,-1)),v(a));case 15:case"end":return t.stop()}}),t)})));return function(t){return e.apply(this,arguments)}}();t.recallWindowGeometry=S;var I=function(){var e=i(regeneratorRuntime.mark((function t(){return regeneratorRuntime.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return c=Byond.winget(window.__windowId__,"pos").then((function(e){return[e.x-window.screenLeft,e.y-window.screenTop]})),e.next=3,c;case 3:C=e.sent,p.debug("screen offset",C);case 5:case"end":return e.stop()}}),t)})));return function(){return e.apply(this,arguments)}}();t.setupDrag=I;var w=function(e,t){for(var n=V(),o=y(),r=[e[0],e[1]],a=!1,i=0;i<2;i++){var c=n[i],l=n[i]+o[i];e[i]<c?(r[i]=c,a=!0):e[i]+t[i]>l&&(r[i]=l-t[i],a=!0)}return[a,r]};t.dragStartHandler=function(e){p.log("drag start"),f=!0,l=[window.screenLeft-e.screenX,window.screenTop-e.screenY],document.addEventListener("mousemove",D),document.addEventListener("mouseup",_),D(e)};var _=function A(e){p.log("drag end"),f=!1,D(e),document.removeEventListener("mousemove",D),document.removeEventListener("mouseup",A),k()},D=function T(e){if(f){if(0===e.buttons)return p.log("emergency drag end"),document.removeEventListener("mousemove",T),document.removeEventListener("mouseup",_),f=!1,void k();e.preventDefault(),v((0,r.vecAdd)([e.screenX,e.screenY],l))}};t.resizeStartHandler=function(e,t){return function(n){u=[e,t],p.log("resize start",u),h=!0,l=[window.screenLeft-n.screenX,window.screenTop-n.screenY],d=[window.innerWidth,window.innerHeight],document.addEventListener("mousemove",B),document.addEventListener("mouseup",M),B(n)}};var M=function L(e){p.log("resize end",s),B(e),document.removeEventListener("mousemove",B),document.removeEventListener("mouseup",L),h=!1,k()},B=function(e){h&&(e.preventDefault(),(s=(0,r.vecAdd)(d,(0,r.vecMultiply)(u,(0,r.vecAdd)([e.screenX,e.screenY],(0,r.vecInverse)([window.screenLeft,window.screenTop]),l,[1,1]))))[0]=Math.max(s[0],150),s[1]=Math.max(s[1],50),b(s))}},99397:function(e,t,n){"use strict";t.__esModule=!0,t.KeyEvent=t.removeScrollableNode=t.addScrollableNode=t.canStealFocus=t.setupGlobalEvents=t.globalEvents=void 0;var o=n(52844),r=n(57890),a=new o.EventEmitter;t.globalEvents=a;var i,c=!1;t.setupGlobalEvents=function(e){void 0===e&&(e={}),c=!!e.ignoreWindowFocus};var l=!0,u=function N(e,t){c?l=!0:(i&&(clearTimeout(i),i=null),t?i=setTimeout((function(){return N(e)})):l!==e&&(l=e,a.emit(e?"window-focus":"window-blur"),a.emit("window-focus-change",e)))},d=null,s=function(e){var t=String(e.tagName).toLowerCase();return"input"===t||"textarea"===t};t.canStealFocus=s;var p=function v(){d&&(d.removeEventListener("blur",v),d=null)},m=null,f=null,h=[];t.addScrollableNode=function(e){h.push(e)};t.removeScrollableNode=function(e){var t=h.indexOf(e);t>=0&&h.splice(t,1)};window.addEventListener("mousemove",(function(e){var t=e.target;t!==f&&(f=t,function(e){if(!d&&l)for(var t=document.body;e&&e!==t;){if(h.includes(e)){if(e.contains(m))return;return m=e,void e.focus()}e=e.parentNode}}(t))})),window.addEventListener("focusin",(function(e){if(f=null,m=e.target,u(!0),s(e.target))return t=e.target,p(),void(d=t).addEventListener("blur",p);var t})),window.addEventListener("focusout",(function(e){f=null,u(!1,!0)})),window.addEventListener("blur",(function(e){f=null,u(!1,!0)})),window.addEventListener("beforeunload",(function(e){u(!1)}));var C={},g=function(){function e(e,t,n){this.event=e,this.type=t,this.code=window.event?e.which:e.keyCode,this.ctrl=e.ctrlKey,this.shift=e.shiftKey,this.alt=e.altKey,this.repeat=!!n}var t=e.prototype;return t.hasModifierKeys=function(){return this.ctrl||this.alt||this.shift},t.isModifierKey=function(){return this.code===r.KEY_CTRL||this.code===r.KEY_SHIFT||this.code===r.KEY_ALT},t.isDown=function(){return"keydown"===this.type},t.isUp=function(){return"keyup"===this.type},t.toString=function(){return this._str||(this._str="",this.ctrl&&(this._str+="Ctrl+"),this.alt&&(this._str+="Alt+"),this.shift&&(this._str+="Shift+"),this.code>=48&&this.code<=90?this._str+=String.fromCharCode(this.code):this.code>=r.KEY_F1&&this.code<=r.KEY_F12?this._str+="F"+(this.code-111):this._str+="["+this.code+"]"),this._str},e}();t.KeyEvent=g,document.addEventListener("keydown",(function(e){if(!s(e.target)){var t=e.keyCode,n=new g(e,"keydown",C[t]);a.emit("keydown",n),a.emit("key",n),C[t]=!0}})),document.addEventListener("keyup",(function(e){if(!s(e.target)){var t=e.keyCode,n=new g(e,"keyup");a.emit("keyup",n),a.emit("key",n),C[t]=!1}}))},40509:function(e,t){"use strict";t.__esModule=!0,t.hasWindowFocus=t.focusWindow=t.focusMap=void 0;t.focusMap=function(){Byond.winset("mapwindow.map",{focus:!0})};t.focusWindow=function(){Byond.winset(window.__windowId__,{focus:!0})};t.hasWindowFocus=function(){return document.hasFocus()}},1033:function(e,t,n){"use strict";t.__esModule=!0,t.formatFrequency=t.truncate=t.formatPressure=t.formatTime=t.formatDb=t.formatMoney=t.formatPower=t.formatSiUnit=void 0;var o=n(97622),r=["f","p","n","\u03bc","m"," ","k","M","G","T","P","E","Z","Y"],a=r.indexOf(" "),i=function(e,t,n){if(void 0===t&&(t=-a),void 0===n&&(n=""),"number"!=typeof e||!Number.isFinite(e))return e;var i=Math.floor(Math.log10(e)),c=Math.floor(Math.max(3*t,i)),l=Math.floor(i/3),u=Math.floor(c/3),d=(0,o.clamp)(a+u,0,r.length),s=r[d],p=e/Math.pow(1e3,u),m=l>t?2+3*u-c:0;return((0,o.toFixed)(p,m)+" "+s+n).trim()};t.formatSiUnit=i;t.formatPower=function(e,t){return void 0===t&&(t=0),i(e,t,"W")};t.formatMoney=function(e,t){if(void 0===t&&(t=0),!Number.isFinite(e))return e;var n=(0,o.round)(e,t);t>0&&(n=(0,o.toFixed)(e,t));var r=(n=String(n)).length,a=n.indexOf(".");-1===a&&(a=r);for(var i="",c=0;c<r;c++)c>0&&c<a&&(a-c)%3==0&&(i+=","),i+=n.charAt(c);return i};t.formatDb=function(e){var t=20*Math.log(e)/Math.log(10),n=t>=0?"+":"\u2013",r=Math.abs(t);return n+(r=r===Infinity?"Inf":(0,o.toFixed)(r,2))+" dB"};t.formatTime=function(e,t){void 0===t&&(t="");var n=Math.floor(e/10%60),o=Math.floor((e/10-n)/60);return e<=0&&""!==t?t:(n<10&&(n="0"+n),o<10&&(o="0"+o),o+":"+n)};t.formatPressure=function(e){return e<1e4?(0,o.toFixed)(e)+" kPa":i(1e3*e,1,"Pa")};t.truncate=function(e,t){return void 0===t&&(t=25),e.length>t?e.substr(0,t-1)+"\u2026":e};t.formatFrequency=function(e){return e=Math.round(e),Math.floor(e/10)+"."+e%10}},6965:function(e,t,n){"use strict";t.__esModule=!0,t.listenForKeyEvents=t.setupHotKeys=t.releaseHeldKeys=t.releaseHotKey=t.acquireHotKey=void 0;var o=function(e,t){if(!t&&e&&e.__esModule)return e;if(null===e||"object"!=typeof e&&"function"!=typeof e)return{"default":e};var n=a(t);if(n&&n.has(e))return n.get(e);var o={},r=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var i in e)if("default"!==i&&Object.prototype.hasOwnProperty.call(e,i)){var c=r?Object.getOwnPropertyDescriptor(e,i):null;c&&(c.get||c.set)?Object.defineProperty(o,i,c):o[i]=e[i]}o["default"]=e,n&&n.set(e,o);return o}(n(57890)),r=n(99397);function a(e){if("function"!=typeof WeakMap)return null;var t=new WeakMap,n=new WeakMap;return(a=function(e){return e?n:t})(e)}function i(e,t){var n="undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(n)return(n=n.call(e)).next.bind(n);if(Array.isArray(e)||(n=function(e,t){if(!e)return;if("string"==typeof e)return c(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);"Object"===n&&e.constructor&&(n=e.constructor.name);if("Map"===n||"Set"===n)return Array.from(e);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return c(e,t)}(e))||t&&e&&"number"==typeof e.length){n&&(e=n);var o=0;return function(){return o>=e.length?{done:!0}:{done:!1,value:e[o++]}}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}function c(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,o=new Array(t);n<t;n++)o[n]=e[n];return o}var l=(0,n(79926).createLogger)("hotkeys"),u={},d=[o.KEY_ESCAPE,o.KEY_ENTER,o.KEY_SPACE,o.KEY_TAB,o.KEY_CTRL,o.KEY_SHIFT,o.KEY_UP,o.KEY_DOWN,o.KEY_LEFT,o.KEY_RIGHT,o.KEY_F5],s={},p=[],m=function(e){var t=String(e);if("Ctrl+F5"!==t&&"Ctrl+R"!==t){if("Ctrl+F"!==t&&!(e.event.defaultPrevented||e.isModifierKey()||d.includes(e.code))){var n,o=16===(n=e.code)?"Shift":17===n?"Ctrl":18===n?"Alt":33===n?"Northeast":34===n?"Southeast":35===n?"Southwest":36===n?"Northwest":37===n?"West":38===n?"North":39===n?"East":40===n?"South":45===n?"Insert":46===n?"Delete":n>=48&&n<=57||n>=65&&n<=90?String.fromCharCode(n):n>=96&&n<=105?"Numpad"+(n-96):n>=112&&n<=123?"F"+(n-111):188===n?",":189===n?"-":190===n?".":void 0;if(o){var r=u[o];if(r)return l.debug("macro",r),Byond.command(r);if(e.isDown()&&!s[o]){s[o]=!0;var a='.keydown "'+o+'"';return l.debug(a),Byond.command(a)}if(e.isUp()&&s[o]){s[o]=!1;var i='.force_keyup "'+o+'"';return l.debug(i),Byond.command(i)}}}}else location.reload()};t.acquireHotKey=function(e){d.push(e)};t.releaseHotKey=function(e){var t=d.indexOf(e);t>=0&&d.splice(t,1)};var f=function(){for(var e=0,t=Object.keys(s);e<t.length;e++){var n=t[e];s[n]&&(s[n]=!1,l.log('releasing key "'+n+'"'),Byond.command('.force_keyup "'+n+'"'))}};t.releaseHeldKeys=f;t.setupHotKeys=function(){Byond.winget("default.*").then((function(e){for(var t={},n=0,o=Object.keys(e);n<o.length;n++){var r=o[n],a=r.split("."),i=a[1],c=a[2];i&&c&&(t[i]||(t[i]={}),t[i][c]=e[r])}for(var d=/\\"/g,s=function(e){return e.substring(1,e.length-1).replace(d,'"')},p=0,m=Object.keys(t);p<m.length;p++){var f=t[m[p]],h=s(f.name);u[h]=s(f.command)}l.debug("loaded macros",u)})),r.globalEvents.on("window-blur",(function(){f()})),r.globalEvents.on("key",(function(e){for(var t,n=i(p);!(t=n()).done;){(0,t.value)(e)}m(e)}))};t.listenForKeyEvents=function(e){p.push(e);var t=!1;return function(){t||(t=!0,p.splice(p.indexOf(e),1))}}},36525:function(e,t,n){"use strict";t.__esModule=!0,t.AIRack=void 0;var o=n(96323),r=n(31246),a=n(26949),i=n(2381);t.AIRack=function(e,t){var n=(0,r.useBackend)(t),c=n.act,l=n.data,u=l.lawTitles,d=l.lawText,s=l.welded,p=l.screwed;return(0,o.createComponentVNode)(2,i.Window,{resizable:!0,title:"AI Law Rack",width:600,height:800,children:(0,o.createComponentVNode)(2,i.Window.Content,{scrollable:!0,children:(0,o.createComponentVNode)(2,a.Section,{children:(0,o.createComponentVNode)(2,a.Box,{children:u.map((function(e,t){return(0,o.createComponentVNode)(2,a.Collapsible,{title:e?u[t]:"Empty",open:!!e,children:[(0,o.createComponentVNode)(2,a.BlockQuote,{preserveWhitespace:!0,children:e?d[t]:"<Empty Slot>"}),(0,o.createComponentVNode)(2,a.Button,{icon:e?"circle":"circle-o",content:e?"Remove":"Empty",onClick:function(){return c("rack",{rack_index:t+1})},disabled:s[t]||p[t]}),(0,o.createComponentVNode)(2,a.Button,{icon:s[t]?"circle":"circle-o",content:s[t]?"Welded":"Not Welded",onClick:function(){return c("weld",{rack_index:t+1})},color:s[t]?"red":"green"}),(0,o.createComponentVNode)(2,a.Button,{icon:p[t]?"circle":"circle-o",content:p[t]?"Screwed In":"Not Screwed In",onClick:function(){return c("screw",{rack_index:t+1})},color:p[t]?"red":"green"})]},t)}))})})})})}},50687:function(e,t,n){"use strict";t.__esModule=!0,t.AbilityManager=void 0;var o=n(96323),r=n(31246),a=n(26949),i=n(2381),c=function(e){var t=e.number,n=e.unit,r=e.onChange,i=e.abilityRef;return(0,o.createComponentVNode)(2,a.Table.Cell,{py:"0.5em",collapsing:!0,children:(0,o.createComponentVNode)(2,a.Box,{align:"center",children:(0,o.createComponentVNode)(2,a.NumberInput,{minValue:0,unit:n,width:"5em",value:t,onChange:function(e,t){return r(i,t)}})})})},l=function(e){var t=e.children;return(0,o.createComponentVNode)(2,a.Table.Cell,{py:"0.5em",textAlign:"center",children:t})},u=function(){return(0,o.createComponentVNode)(2,a.Table.Row,{bold:!0,children:[(0,o.createComponentVNode)(2,l,{children:"Name"}),(0,o.createComponentVNode)(2,l,{children:"Subtype"}),(0,o.createComponentVNode)(2,l,{children:"Cost"}),(0,o.createComponentVNode)(2,l,{children:"Cooldown"}),(0,o.createComponentVNode)(2,l,{children:"Actions"})]})};t.AbilityManager=function(e,t){var n=(0,r.useBackend)(t),l=n.act,d=n.data,s=d.abilities,p=d.target_name,m=function(e,t){return l("updatePointCost",{abilityRef:e,value:t})},f=function(e,t){return l("updateCooldown",{abilityRef:e,value:t})};return(0,o.createComponentVNode)(2,i.Window,{title:"Ability Manager",width:"750",height:"300",children:(0,o.createComponentVNode)(2,i.Window.Content,{children:(0,o.createComponentVNode)(2,a.Section,{title:"Abilities of "+p,scrollable:!0,fill:!0,buttons:(0,o.createComponentVNode)(2,a.Button,{icon:"plus",onClick:function(){return l("addAbility")},children:"Add Ability"}),children:(0,o.createComponentVNode)(2,a.Table,{children:[(0,o.createComponentVNode)(2,u),(null==s?void 0:s.length)>0?s.map((function(e){return(0,o.createComponentVNode)(2,a.Table.Row,{children:[(0,o.createComponentVNode)(2,a.Table.Cell,{py:"0.5em",children:e.name}),(0,o.createComponentVNode)(2,a.Table.Cell,{py:"0.5em",children:e.subtype}),(0,o.createComponentVNode)(2,c,{number:e.pointCost,onChange:m,abilityRef:e.abilityRef}),(0,o.createComponentVNode)(2,c,{number:e.cooldown,unit:"ds",onChange:f,abilityRef:e.abilityRef}),(0,o.createComponentVNode)(2,a.Table.Cell,{py:"0.5em",collapsing:!0,children:(0,o.createComponentVNode)(2,a.Box,{direction:"row",align:"center",nowrap:!0,children:[(0,o.createComponentVNode)(2,a.Button,{tooltip:"View Variables",tooltipPosition:"top",align:"left",icon:"gear",onClick:function(){return t=e.abilityRef,l("manageAbility",{abilityRef:t});var t}}),(0,o.createComponentVNode)(2,a.Button,{tooltip:"Rename",tooltipPosition:"top",align:"left",icon:"pen",onClick:function(){return t=e.abilityRef,l("renameAbility",{abilityRef:t});var t}}),(0,o.createComponentVNode)(2,a.Button.Confirm,{tooltip:"Remove",tooltipPosition:"top",align:"left",icon:"trash",color:"bad",onClick:function(){return t=e.abilityRef,l("deleteAbility",{abilityRef:t});var t}})]})})]},e.abilityRef)})):null]})})})})}},24782:function(e,t,n){"use strict";t.__esModule=!0,t.GasInfo=t.AirAlarm=void 0;var o=n(96323),r=n(31246),a=n(26949),i=n(2381),c=n(1033),l=n(48175);t.AirAlarm=function(e,t){var n=(0,r.useBackend)(t),c=(n.act,n.data),d=c.boundaries,s=c.gasses,p=c.temperature,m=c.safe;return(0,o.createComponentVNode)(2,i.Window,{width:300,height:350,children:(0,o.createComponentVNode)(2,i.Window.Content,{children:[(0,o.createComponentVNode)(2,a.Section,{title:"Status",children:[0===m&&(0,o.createComponentVNode)(2,a.Box,{align:"center",fontSize:2,color:"red",children:"ALERT!"}),1===m&&(0,o.createComponentVNode)(2,a.Box,{align:"center",fontSize:2,color:"orange",children:"CAUTION"}),2===m&&(0,o.createComponentVNode)(2,a.Box,{align:"center",fontSize:2,color:"green",children:"OPTIMAL"}),(0,o.createComponentVNode)(2,a.Box,{align:"center",nowrap:!0,p:1,fontSize:1,color:(0,l.getTemperatureColor)(p),children:[(0,o.createComponentVNode)(2,a.Box,{fontSize:1,children:"Atmospheric Temperature"}),(0,o.createComponentVNode)(2,a.Icon,{name:(0,l.getTemperatureIcon)(p),pr:.5}),(0,o.createComponentVNode)(2,a.AnimatedNumber,{value:p})," K"]})]}),(0,o.createComponentVNode)(2,a.Section,{title:"Gasses",children:[(0,o.createComponentVNode)(2,a.Flex,{children:d.slice(0,4).map((function(e,t){return(0,o.createComponentVNode)(2,u,{partial_pressure:s[e.varname],boundary:e,gas_index:t},e.varname)}))}),(0,o.createVNode)(1,"br"),(0,o.createComponentVNode)(2,a.Flex,{children:d.slice(4,8).map((function(e,t){return(0,o.createComponentVNode)(2,u,{partial_pressure:s[e.varname],boundary:e,gas_index:t},e.varname)}))})]})]})})};var u=function(e){var t=e.partial_pressure,n=e.boundary,r=(e.gas_index,100);return(0,o.createComponentVNode)(2,a.Flex.Item,{grow:!0,children:[(0,o.createComponentVNode)(2,a.Box,{align:"center",children:n.friend_name}),(0,o.createComponentVNode)(2,a.Box,{align:"center",children:(0,o.createComponentVNode)(2,a.RoundGauge,{align:"center",size:1.75,value:t,minValue:0,maxValue:r,alertAfter:isFinite(n.safe_max)?n.safe_max:r,alertBefore:isFinite(n.safe_min)?n.safe_min:0,ranges:{bad:[0,r],average:[isFinite(n.safe_min)?n.safe_min:0,isFinite(n.safe_max)?n.safe_max:r],good:[isFinite(n.good_min)?n.good_min:0,isFinite(n.good_max)?n.good_max:r]},format:c.formatPressure})})]})};t.GasInfo=u},89375:function(e,t,n){"use strict";t.__esModule=!0,t.AirVendor=void 0;var o=n(96323),r=n(31246),a=n(26949),i=n(2381),c=n(72638),l=n(5394),u=function(e,t){var n=(0,r.useBackend)(t),i=n.act,c=n.data,l=c.air_cost,u=c.bankMoney,d=c.cash,s=c.current_fill,p=c.fill_cost,m=c.max_pressure,f=c.min_pressure,h=c.target_pressure,C=c.vend_type,g=function(e){return i("o2_changepressure",{pressure:e})},N=!l,v=N||p>0&&(u>=p||d>=p);return(0,o.createComponentVNode)(2,a.Section,{title:"Buy "+C+"!",children:(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Cost",verticalAlign:"middle",children:(0,o.createComponentVNode)(2,a.Button,{content:N?"Free!":(p||0)+"\u2abd",color:v?"green":undefined,disabled:!v,onClick:function(){return i("o2_fill")}})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Pressure",verticalAlign:"middle",children:(0,o.createComponentVNode)(2,a.Stack,{children:[(0,o.createComponentVNode)(2,a.Stack.Item,{children:(0,o.createComponentVNode)(2,a.Button,{disabled:h===f,onClick:function(){return g(f)},content:"Min"})}),(0,o.createComponentVNode)(2,a.Stack.Item,{grow:!0,children:(0,o.createComponentVNode)(2,a.Slider,{value:h,fillValue:Math.min(s,m),minValue:f,maxValue:m,step:10,stepPixelSize:4,onChange:function(e,t){return g(t)}})}),(0,o.createComponentVNode)(2,a.Stack.Item,{children:(0,o.createComponentVNode)(2,a.Button,{disabled:h===m,onClick:function(){return g(m)},content:"Max"})})]})})]})})},d=function(e,t){var n=(0,r.useBackend)(t),i=n.act,c=n.data,u=c.holding,d=c.holding_pressure,s=c.max_pressure;return(0,o.createComponentVNode)(2,a.Section,{title:"Holding Tank",buttons:(0,o.createComponentVNode)(2,a.Button,{onClick:function(){return i("o2_eject")},icon:"eject",disabled:!u,children:"Eject"}),children:[(0,o.createComponentVNode)(2,l.GasTankInfo,{pressure:d||0,maxPressure:s||1,name:u||"N/A"}),!u&&(0,o.createComponentVNode)(2,a.Dimmer,{children:(0,o.createComponentVNode)(2,a.Button,{icon:"eject",fontSize:1.5,onClick:function(){return i("o2_insert")},bold:!0,children:"Insert Gas Tank"})})]})};t.AirVendor=function(e,t){var n=(0,r.useBackend)(t),a=n.act,l=n.data,s=l.cash,p=l.cardname,m=l.bankMoney;return(0,o.createComponentVNode)(2,i.Window,{width:350,height:320,children:(0,o.createComponentVNode)(2,i.Window.Content,{children:[(0,o.createComponentVNode)(2,u),(0,o.createComponentVNode)(2,d),(0,o.createComponentVNode)(2,c.VendorCashTable,{cardname:p,onCardClick:function(){return a("logout")},bankMoney:m,cash:s,onCashClick:function(){return a("returncash")}})]})})}},22704:function(e,t,n){"use strict";t.__esModule=!0,t.AccessPanel=t.Airlock=t.uiCurrentUserPermissions=void 0;var o=n(96323),r=n(31246),a=n(1033),i=n(26949),c=n(2381),l=function(e){var t=e.panelOpen,n=e.userStates;return{airlock:n.isBorg||n.isAi,accessPanel:n.isBorg&&n.distance<=1&&t||t&&!n.isBorg&&!n.isAi}};t.uiCurrentUserPermissions=l;t.Airlock=function(e,t){var n=(0,r.useBackend)(t).data,a=l(n);return(0,o.createComponentVNode)(2,c.Window,{theme:"ntos",children:(0,o.createComponentVNode)(2,c.Window.Content,{children:[!a.airlock&&!a.accessPanel&&(0,o.createComponentVNode)(2,i.Modal,{textAlign:"center",fontSize:"24px",children:(0,o.createComponentVNode)(2,i.Box,{width:25,height:5,align:"center",children:"Access Panel is Closed"})}),!!a.airlock&&!!a.accessPanel&&(0,o.createComponentVNode)(2,u)||!!a.airlock&&(0,o.createComponentVNode)(2,d)||!!a.accessPanel&&(0,o.createComponentVNode)(2,s)]})})};var u=function(e,t){var n=(0,r.useBackend)(t).data,l=n.name,u=n.canAiControl,d=n.hackMessage,s=n.canAiHack,g=n.noPower,N=(0,r.useLocalState)(t,"tabIndex",1),v=N[0],b=N[1];return(0,o.createComponentVNode)(2,c.Window,{width:354,height:495,title:"Airlock - "+(0,a.truncate)(l,19),children:(0,o.createComponentVNode)(2,c.Window.Content,{children:[(0,o.createComponentVNode)(2,i.Tabs,{children:[(0,o.createComponentVNode)(2,i.Tabs.Tab,{selected:1===v,onClick:function(){b(1)},children:"Airlock Controls"}),(0,o.createComponentVNode)(2,i.Tabs.Tab,{selected:2===v,onClick:function(){b(2)},children:"Access Panel"})]}),1===v&&(0,o.createFragment)([(0,o.createComponentVNode)(2,i.Section,{fitted:!0,backgroundColor:"transparent",children:[(!u||!!g)&&(0,o.createComponentVNode)(2,i.Modal,{textAlign:"center",fontSize:"24px",children:(0,o.createComponentVNode)(2,i.Box,{width:20,height:5,algin:"center",children:d||"Airlock Controls Disabled"})}),(0,o.createComponentVNode)(2,p),(0,o.createComponentVNode)(2,m),(0,o.createComponentVNode)(2,f)]}),!!s&&(0,o.createComponentVNode)(2,h)],0),2===v&&(0,o.createComponentVNode)(2,C)]})})},d=function(e,t){var n=(0,r.useBackend)(t).data,l=n.name,u=n.canAiControl,d=n.hackMessage,s=n.canAiHack,C=n.noPower;return(0,o.createComponentVNode)(2,c.Window,{width:315,height:380,title:"Airlock - "+(0,a.truncate)(l,19),children:(0,o.createComponentVNode)(2,c.Window.Content,{children:[(!u||!!C)&&(0,o.createComponentVNode)(2,i.Modal,{textAlign:"center",fontSize:"26px",children:[(0,o.createComponentVNode)(2,i.Box,{width:20,height:5,algin:"center",children:d||"Airlock Controls Disabled"}),!!s&&(0,o.createComponentVNode)(2,h)]}),(0,o.createComponentVNode)(2,p),(0,o.createComponentVNode)(2,m),(0,o.createComponentVNode)(2,f)]})})},s=function(e,t){var n=(0,r.useBackend)(t).data.name;return(0,o.createComponentVNode)(2,c.Window,{width:354,height:465,title:"Airlock - "+(0,a.truncate)(n,19),children:(0,o.createComponentVNode)(2,c.Window.Content,{children:(0,o.createComponentVNode)(2,C)})})},p=function(e,t){var n=(0,r.useBackend)(t),a=n.act,c=n.data,l=c.mainTimeLeft,u=c.backupTimeLeft,d=c.wires,s=c.netId,p=c.accessCode,m={width:6.7,textAlign:"center"};return(0,o.createComponentVNode)(2,i.Section,{title:"Power Status",children:[(0,o.createComponentVNode)(2,i.Box,{children:["Access sensor reports the net identifer is:"," ",(0,o.createComponentVNode)(2,i.Box,{inline:!0,italic:!0,children:s})]}),(0,o.createComponentVNode)(2,i.Box,{children:["Net access code:"," ",(0,o.createComponentVNode)(2,i.Box,{inline:!0,italic:!0,children:p})]}),(0,o.createComponentVNode)(2,i.Divider),(0,o.createComponentVNode)(2,i.LabeledList,{children:[(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Main",color:l?"bad":"good",buttons:(0,o.normalizeProps)((0,o.createComponentVNode)(2,i.Button,Object.assign({},m,{color:"bad",icon:"plug",disabled:!!l,onClick:function(){return a("disruptMain")},children:"Disrupt"}))),children:[l?"Offline":"Online"," ",d.main_1&&d.main_2?l>0&&"["+l+"s]":"[Wires cut!]"]}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Backup",color:u?"bad":"good",buttons:(0,o.normalizeProps)((0,o.createComponentVNode)(2,i.Button,Object.assign({},m,{mt:.5,color:"bad",icon:"plug",disabled:!!u,onClick:function(){return a("disruptBackup")},children:"Disrupt"}))),children:[u?"Offline":"Online"," ",d.backup_1&&d.backup_2?u>0&&"["+u+"s]":"[Wires cut!]"]})]})]})},m=function(e,t){var n=(0,r.useBackend)(t),a=n.act,c=n.data,l=c.mainTimeLeft,u=c.backupTimeLeft,d=c.wires,s=c.idScanner,p=c.boltsAreUp,m=c.opened,f=c.welded,h={width:6.7,textAlign:"center"};return(0,o.createComponentVNode)(2,i.Section,{title:"Access and Door Control",pt:1,children:(0,o.createComponentVNode)(2,i.LabeledList,{children:[(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"ID Scan",color:"bad",buttons:(0,o.normalizeProps)((0,o.createComponentVNode)(2,i.Button,Object.assign({},h,{color:s?"good":"bad",icon:s?"power-off":"times",disabled:!d.idScanner||l&&u,onClick:function(){return a("idScanToggle")},children:s?"Enabled":"Disabled"}))),children:!d.idScanner&&"[Wires cut!]"}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Door Bolts",color:"bad",buttons:(0,o.normalizeProps)((0,o.createComponentVNode)(2,i.Button,Object.assign({mt:.5},h,{color:p?"good":"bad",icon:p?"lock":"unlock",disabled:!d.bolts||l&&u,onClick:function(){return a("boltToggle")},children:p?"Raised":"Lowered"}))),children:!d.bolts&&"[Wires cut!]"}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Door Control",color:"bad",buttons:(0,o.normalizeProps)((0,o.createComponentVNode)(2,i.Button,Object.assign({},h,{mt:.5,color:m?"bad":"good",icon:m?"sign-out-alt":"sign-in-alt",disabled:!p||f||l&&u,onClick:function(){return a("openClose")},children:m?"Open":"Closed"}))),children:!(p&&!f)&&(0,o.createVNode)(1,"span",null,[(0,o.createTextVNode)("["),!p&&"Bolted",!p&&f&&" & ",f&&"Welded",(0,o.createTextVNode)("!]")],0)})]})})},f=function(e,t){var n=(0,r.useBackend)(t),a=n.act,c=n.data,l=c.mainTimeLeft,u=c.backupTimeLeft,d=c.wires,s=c.shockTimeLeft;return(0,o.createComponentVNode)(2,i.NoticeBox,{backgroundColor:"#601B1B",children:(0,o.createComponentVNode)(2,i.LabeledList,{children:[(0,o.createComponentVNode)(2,i.LabeledList.Item,{labelColor:"white",color:s?"average":"good",label:"Electrify",children:[s?"Electrified":"Safe"," ",(d.shock?s>0&&"["+s+"s]":"[Wires cut!]")||-1===s&&"[Permanent]"]}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{color:s?"Bad":"Average",children:(0,o.createComponentVNode)(2,i.Box,{pl:s?18:0,pt:.5,children:[!s&&(0,o.createComponentVNode)(2,i.Button.Confirm,{width:9,p:.5,align:"center",color:"average",content:"Temporary",confirmContent:"Are you sure?",icon:"bolt",disabled:!d.shock||l&&u,onClick:function(){return a("shockTemp")}}),(0,o.createComponentVNode)(2,i.Button.Confirm,{width:9,p:.5,align:"center",color:s?"good":"bad",icon:"bolt",confirmContent:"Are you sure?",content:s?"Restore":"Permanent",disabled:!d.shock||l&&u,onClick:s?function(){return a("shockRestore")}:function(){return a("shockPerm")}})]})})]})})},h=function(e,t){var n=(0,r.useBackend)(t),a=n.act,c=n.data,l=c.aiHacking,u=c.hackingProgression;return(0,o.createComponentVNode)(2,i.Box,{fitted:!0,py:.5,pt:2,align:"center",children:[!l&&(0,o.createComponentVNode)(2,i.Button,{className:"Airlock-hack-button",fontSize:"29px",backgroundColor:"#00FF00",disabled:l,textColor:"black",textAlign:"center",width:16,onClick:function(){return a("hackAirlock")},children:"HACK"}),!!l&&(0,o.createComponentVNode)(2,i.ProgressBar,{ranges:{good:[6,Infinity],average:[2,5],bad:[-Infinity,1]},minValue:0,maxValue:6,value:u})]})},C=function(e,t){var n=(0,r.useBackend)(t),a=n.act,c=n.data,l=c.signalers,u=c.wireColors,d=c.wireStates,s=c.netId,p=c.powerIsOn,m=c.boltsAreUp,f=c.canAiControl,h=c.aiControlVar,C=c.safety,g=c.panelOpen,N=c.accessCode,v=function(e,t){a(t,{wireColorIndex:e})},b=Object.keys(u);return(0,o.createComponentVNode)(2,i.Section,{title:"Access Panel",children:[!g&&(0,o.createComponentVNode)(2,i.Modal,{textAlign:"center",fontSize:"24px",children:"Access Panel is Closed"}),(0,o.createComponentVNode)(2,i.Box,{children:["An identifier is engraved under the airlock's card sensors:"," ",(0,o.createComponentVNode)(2,i.Box,{inline:!0,italic:!0,children:s})]}),(0,o.createComponentVNode)(2,i.Box,{children:["A display shows net access code:"," ",(0,o.createComponentVNode)(2,i.Box,{inline:!0,italic:!0,children:N})]}),(0,o.createComponentVNode)(2,i.Divider),(0,o.createComponentVNode)(2,i.LabeledList,{children:b.map((function(e,t){return(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:e+" wire",labelColor:e.toLowerCase(),children:d[t]?(0,o.createComponentVNode)(2,i.Button,{color:"green",height:1.8,onClick:function(){return v(t,"mend")},children:"Mend"}):(0,o.createComponentVNode)(2,i.Box,{height:1.8,children:[(0,o.createComponentVNode)(2,i.Button,{icon:"cut",onClick:function(){return v(t,"cut")},children:"Cut"}),(0,o.createComponentVNode)(2,i.Button,{icon:"bolt",onClick:function(){return v(t,"pulse")},children:"Pulse"}),(0,o.createComponentVNode)(2,i.Button,{icon:"broadcast-tower",width:10.5,className:"AccessPanel-wires-btn",selected:l[t],onClick:function(){return v(t,"signaler")},children:l[t]?"Detach Signaler":"Attach Signaler"})]})},e)}))}),(0,o.createComponentVNode)(2,i.Divider),(0,o.createComponentVNode)(2,i.Flex,{direction:"row",children:[(0,o.createComponentVNode)(2,i.Flex.Item,{children:(0,o.createComponentVNode)(2,i.LabeledList,{children:[(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Door bolts",color:m?"green":"red",children:m?"Disengaged":"Engaged"}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Test light",color:p?"green":"red",children:p?"Active":"Inactive"})]})}),(0,o.createComponentVNode)(2,i.Flex.Item,{children:(0,o.createComponentVNode)(2,i.LabeledList,{children:[(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"AI control",color:f?2===h?"orange":"green":"red",children:f?"Enabled":"Disabled"}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Safety light",color:C?"green":"red",children:C?"Active":"Inactive"})]})})]})]})};t.AccessPanel=C},78403:function(e,t,n){"use strict";t.__esModule=!0,t.getAlertContentWindow=void 0;var o=n(43469);t.getAlertContentWindow=function(e){if("tgControls"===e)return o.tgControls}},43469:function(e,t,n){"use strict";t.__esModule=!0,t.tgControls=void 0;var o=n(96323),r=n(26949),a={width:470,height:320,title:"Use /tg/ style interface?",content:(0,o.createFragment)([(0,o.createComponentVNode)(2,r.Box,{children:"Would you rather use a /tg/ style interface? If so, checkout the options in the drop-down menu at the top of the screen - 'Game'."}),(0,o.createComponentVNode)(2,r.Box,{my:1.5,children:"Save your profile in Character Setup to dismiss this alert."})],0)};t.tgControls=a},89037:function(){},458:function(e,t,n){"use strict";t.__esModule=!0,t.AlertModal=void 0;var o=n(96323),r=n(55631),a=n(31246),i=n(57890),c=n(26949),l=n(2381),u=n(78403);t.AlertModal=function(e,t){var n=(0,a.useBackend)(t),s=n.act,p=n.data,m=p.autofocus,f=p.items,h=void 0===f?[]:f,C=p.message,g=void 0===C?"":C,N=p.content_window,v=void 0===N?"":N,b=p.timeout,V=p.title,y=p.theme,x=(0,a.useLocalState)(t,"selected",0),k=x[0],S=x[1],I=v?(0,u.getAlertContentWindow)(v):null,w=I?I.height:115+(g.length>30?Math.ceil(g.length/4):0),_=I?I.width:325+(h.length>2?55:0),D=function(e){0===k&&-1===e?S(h.length-1):k===h.length-1&&1===e?S(0):S(k+e)};return(0,o.createComponentVNode)(2,l.Window,{height:w,title:I?I.title:V,width:_,theme:y||"nanotrasen",children:[!!b&&(0,o.createComponentVNode)(2,r.Loader,{value:b}),(0,o.createComponentVNode)(2,l.Window.Content,{onKeyDown:function(e){var t=window.event?e.which:e.keyCode;t===i.KEY_SPACE||t===i.KEY_ENTER?s("choose",{choice:h[k]}):t===i.KEY_ESCAPE?s("cancel"):t===i.KEY_LEFT?(e.preventDefault(),D(-1)):t!==i.KEY_TAB&&t!==i.KEY_RIGHT||(e.preventDefault(),D(1))},children:(0,o.createComponentVNode)(2,c.Section,{fill:!0,children:(0,o.createComponentVNode)(2,c.Stack,{fill:!0,vertical:!0,children:[(0,o.createComponentVNode)(2,c.Stack.Item,{grow:!0,m:1,children:(0,o.createComponentVNode)(2,c.Box,{color:"label",overflow:"hidden",children:I?I.content:g})}),(0,o.createComponentVNode)(2,c.Stack.Item,{children:[!!m&&(0,o.createComponentVNode)(2,c.Autofocus),(0,o.createComponentVNode)(2,d,{selected:k})]})]})})})]})};var d=function(e,t){var n=(0,a.useBackend)(t).data.items,r=void 0===n?[]:n,i=e.selected;return(0,o.createComponentVNode)(2,c.Flex,{align:"center",direction:"row",fill:!0,justify:"space-around",wrap:!0,children:null==r?void 0:r.map((function(e,t){return(0,o.createComponentVNode)(2,c.Flex.Item,{children:(0,o.createComponentVNode)(2,s,{button:e,id:t.toString(),selected:i===t})},t)}))})},s=function(e,t){var n=(0,a.useBackend)(t),r=n.act,i=(n.data,e.button),l=e.selected,u=i.length>7?i.length:7;return(0,o.createComponentVNode)(2,c.Button,{onClick:function(){return r("choose",{choice:i})},m:.5,pl:2,pr:2,pt:0,selected:l,textAlign:"center",width:u,children:i})}},9168:function(e,t,n){"use strict";t.__esModule=!0,t.AutomaticAnnouncement=void 0;var o=n(96323),r=n(31246),a=n(26949);t.AutomaticAnnouncement=function(e,t){var n=(0,r.useBackend)(t),i=n.act,c=n.data.arrivalalert;return(0,o.createComponentVNode)(2,a.Section,{title:"Arrival Announcement Message",children:(0,o.createComponentVNode)(2,a.Stack,{vertical:!0,children:[(0,o.createComponentVNode)(2,a.Stack.Item,{children:"Valid tokens: $NAME, $JOB, $STATION, $THEY, $THEM, $THEIR. Leave the field empty for no message."}),(0,o.createComponentVNode)(2,a.Stack.Item,{children:(0,o.createComponentVNode)(2,a.Input,{fluid:!0,onChange:function(e,t){return i("arrival_message",{value:t})},placeholder:"Type something...",value:c})})]})})}},364:function(e,t,n){"use strict";t.__esModule=!0,t.AnnouncementComputer=void 0;var o=n(96323),r=n(31246),a=n(2381),i=n(9168),c=n(88364);t.AnnouncementComputer=function(e,t){var n=(0,r.useBackend)(t),l=(n.act,n.data),u=l.announces_arrivals,d=l.theme;return(0,o.createComponentVNode)(2,a.Window,{theme:d,width:400,height:u?326:215,children:(0,o.createComponentVNode)(2,a.Window.Content,{textAlign:"center",children:[(0,o.createComponentVNode)(2,c.ManualAnnouncement),!!u&&(0,o.createComponentVNode)(2,i.AutomaticAnnouncement)]})})}},88364:function(e,t,n){"use strict";t.__esModule=!0,t.ManualAnnouncement=void 0;var o=n(96323),r=n(31246),a=n(26949),i=n(1033);t.ManualAnnouncement=function(e,t){var n=(0,r.useBackend)(t),l=n.act,u=n.data,d=u.card_name,s=u.status_message,p=u.time,m=u.max_length,f=(0,r.useSharedState)(t,"input",""),h=f[0],C=f[1],g=(0,r.useSharedState)(t,"oldInput",""),N=g[0],v=g[1],b=c(h,m,s,p);return(0,o.createComponentVNode)(2,a.Section,{title:"Make an Announcement",children:(0,o.createComponentVNode)(2,a.Stack,{vertical:!0,children:[(0,o.createComponentVNode)(2,a.Stack.Item,{color:b.color,children:["Status: ",b.text]}),(0,o.createComponentVNode)(2,a.Stack.Item,{children:(0,o.createComponentVNode)(2,a.Button,{onClick:function(){return l("id")},icon:"eject",preserveWhitespace:!0,children:d||"Insert card"})}),(0,o.createComponentVNode)(2,a.Stack.Item,{children:(0,o.createComponentVNode)(2,a.AnimatedNumber,{value:p,format:i.formatTime})}),(0,o.createComponentVNode)(2,a.Stack.Item,{children:(0,o.createComponentVNode)(2,a.Input,{autoFocus:!0,fluid:!0,onInput:function(e){return function(e){e.preventDefault();var t=e.target;C(t.value),b=c(h,m,s,p)}(e)},onChange:function(){h!==N&&(l("log",{value:h,old:N}),v(h))},placeholder:"Type something...",value:h})}),(0,o.createComponentVNode)(2,a.Stack.Item,{label:"Button",fontSize:"16px",children:(0,o.createComponentVNode)(2,a.Button,{icon:"bullhorn",content:"Transmit",fluid:!0,disabled:!b.canTransmit,onClick:function(){return l("transmit",{value:h}),C(""),void v("")}})})]})})};var c=function(e,t,n,o){return o>0?{canTransmit:!1,text:"Broadcast delay in effect.",color:"bad"}:"Insert Card"===n?{canTransmit:!1,text:"Insert Card",color:"average"}:n?{canTransmit:!1,text:n,color:"bad"}:t&&e.length>t?{canTransmit:!1,text:"Message too long, maximium is "+t+" characters.",color:"average"}:e?{canTransmit:!0,text:"Ready to transmit!",color:"good"}:{canTransmit:!1,text:"Input message.",color:"average"}}},76295:function(){},20920:function(e,t,n){"use strict";t.__esModule=!0,t.AntagonistTypeTabBody=void 0;var o=n(96323),r=n(31246),a=n(21118),i=n(26949);t.AntagonistTypeTabBody=function(e){return(0,o.createComponentVNode)(2,i.Box,{children:e.currentTabSections?e.currentTabSections.map((function(e,t){return(0,o.normalizeProps)((0,o.createComponentVNode)(2,l,Object.assign({},e),t))})):(0,o.normalizeProps)((0,o.createComponentVNode)(2,c,Object.assign({},e)))})};var c=function(e){return(0,o.createFragment)([(0,o.createComponentVNode)(2,i.Section,{children:(0,o.createComponentVNode)(2,i.Stack,{vertical:!0,align:"center",my:3,children:[(0,o.createComponentVNode)(2,i.Stack.Item,{mb:-2.5,italic:!0,children:"The Game Mode Is:"}),(0,o.createComponentVNode)(2,i.Stack.Item,{fontSize:2.75,bold:!0,children:(0,a.toTitleCase)(e.gameMode)})]})}),(0,o.createComponentVNode)(2,i.Stack,{justify:"space-around",children:[(0,o.createComponentVNode)(2,i.Stack.Item,{grow:!0,children:(0,o.createComponentVNode)(2,i.Section,{title:"Antagonist Mortality Rate",children:[(0,o.createComponentVNode)(2,i.ProgressBar,{minValue:0,maxValue:e.mortalityRates.antagonistsAlive+e.mortalityRates.antagonistsDead||1,value:e.mortalityRates.antagonistsDead,color:"red",backgroundColor:"green",mb:1}),(0,o.createComponentVNode)(2,i.LabeledList,{children:[(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Alive Antagonists",children:e.mortalityRates.antagonistsAlive}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Dead Antagonists",children:e.mortalityRates.antagonistsDead})]})]})}),(0,o.createComponentVNode)(2,i.Stack.Item,{grow:!0,children:(0,o.createComponentVNode)(2,i.Section,{title:"Crew Mortality Rate",children:[(0,o.createComponentVNode)(2,i.ProgressBar,{minValue:0,maxValue:e.mortalityRates.crewAlive+e.mortalityRates.crewDead||1,value:e.mortalityRates.crewDead,color:"red",backgroundColor:"green",mb:1}),(0,o.createComponentVNode)(2,i.LabeledList,{children:[(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Alive Crew",children:e.mortalityRates.crewAlive}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Dead Crew",children:e.mortalityRates.crewDead})]})]})})]})],4)},l=function(e){var t=V(e.sectionType);return(0,o.normalizeProps)((0,o.createComponentVNode)(2,t,Object.assign({},e)))},u=function(){return(0,o.createComponentVNode)(2,i.Table.Row,{children:[(0,o.createComponentVNode)(2,i.Table.Cell,{children:[" ",(0,o.createComponentVNode)(2,i.Divider)," "]}),(0,o.createComponentVNode)(2,i.Table.Cell,{children:[" ",(0,o.createComponentVNode)(2,i.Divider)," "]}),(0,o.createComponentVNode)(2,i.Table.Cell,{children:[" ",(0,o.createComponentVNode)(2,i.Divider)," "]})]})},d=function(e,t){var n,a=(0,r.useBackend)(t),c=a.act,l=a.data,u=(null==(n=l.subordinateAntagonists[e.antagonist_datum])?void 0:n.sort((function(e,t){return e.real_name.localeCompare(t.real_name)})))||[];return(0,o.createFragment)([(0,o.createComponentVNode)(2,i.Table.Row,{children:[(0,o.createComponentVNode)(2,i.Table.Cell,{py:"0.5em",children:(0,o.createComponentVNode)(2,i.Tooltip,{content:(0,o.createComponentVNode)(2,i.LabeledList,{children:[(0,o.normalizeProps)((0,o.createComponentVNode)(2,p,Object.assign({},e))),(0,o.normalizeProps)((0,o.createComponentVNode)(2,m,Object.assign({},e)))]}),children:(0,o.createComponentVNode)(2,i.Box,{inline:!0,children:[!!e.has_subordinate_antagonists&&(0,o.createComponentVNode)(2,i.Button,{width:2,textAlign:"center",my:-.5,mr:.8,icon:l.subordinateAntagonists[e.antagonist_datum]?"chevron-down":"chevron-right",onClick:function(){return c(l.subordinateAntagonists[e.antagonist_datum]?"unrequest_subordinate_antagonist_data":"request_subordinate_antagonist_data",{antagonist_datum:e.antagonist_datum})},tooltip:"Subordinate Antagonists"}),(0,o.normalizeProps)((0,o.createComponentVNode)(2,f,Object.assign({},e)))]})})}),(0,o.normalizeProps)((0,o.createComponentVNode)(2,h,Object.assign({mind_ref:e.mind_ref},l.mindLocations[e.mind_ref]))),(0,o.normalizeProps)((0,o.createComponentVNode)(2,C,Object.assign({},e)))]}),u.map((function(e,t){return(0,o.createComponentVNode)(2,i.Table.Row,{children:[(0,o.createComponentVNode)(2,i.Table.Cell,{py:"0.5em",pl:1.6,children:(0,o.createComponentVNode)(2,i.Tooltip,{content:(0,o.createComponentVNode)(2,i.LabeledList,{children:[(0,o.normalizeProps)((0,o.createComponentVNode)(2,s,Object.assign({},e))),(0,o.normalizeProps)((0,o.createComponentVNode)(2,p,Object.assign({},e))),(0,o.normalizeProps)((0,o.createComponentVNode)(2,m,Object.assign({},e)))]}),children:(0,o.createComponentVNode)(2,i.Box,{inline:!0,children:[(0,o.createComponentVNode)(2,i.Icon,{name:"caret-right",mr:1.6}),(0,o.normalizeProps)((0,o.createComponentVNode)(2,f,Object.assign({},e)))]})})}),(0,o.normalizeProps)((0,o.createComponentVNode)(2,h,Object.assign({},e))),(0,o.normalizeProps)((0,o.createComponentVNode)(2,C,Object.assign({},e)))]},t)}))],0)},s=function(e){e.display_name;return(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Antagonist Role",children:(0,a.toTitleCase)(e.display_name)})},p=function(e){e.ckey;return(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Client",children:e.ckey?e.ckey:(0,o.createComponentVNode)(2,i.Box,{inline:!0,italic:!0,children:"No Client"})})},m=function(e){e.job;return(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Job",children:e.job?e.job:(0,o.createComponentVNode)(2,i.Box,{inline:!0,italic:!0,children:"N/A"})})},f=function(e){e.real_name,e.ckey,e.dead;return(0,o.createComponentVNode)(2,i.Box,{inline:!0,children:[!!e.dead&&(0,o.createComponentVNode)(2,i.Icon,{name:"skull"})," ",e.real_name+" ",!e.ckey&&(0,o.createComponentVNode)(2,i.Box,{inline:!0,italic:!0,children:"(no client)"})]})},h=function(e,t){var n=(0,r.useBackend)(t).act,a=(e.mind_ref,e.area),c=e.coordinates;return(0,o.createComponentVNode)(2,i.Table.Cell,{children:[a,(0,o.createComponentVNode)(2,i.Button,{color:"transparent",content:c,onClick:function(){return n("jump_to",{target:e.mind_ref})},tooltip:"Jump To Position"})]})},C=function(e){return(0,o.createComponentVNode)(2,i.Table.Cell,{children:[(0,o.normalizeProps)((0,o.createComponentVNode)(2,g,Object.assign({},e))),(0,o.normalizeProps)((0,o.createComponentVNode)(2,N,Object.assign({},e))),(0,o.normalizeProps)((0,o.createComponentVNode)(2,v,Object.assign({},e)))]})},g=function(e,t){var n=(0,r.useBackend)(t).act;e.mind_ref;return(0,o.createComponentVNode)(2,i.Button,{content:"PM",onClick:function(){return n("admin_pm",{mind_ref:e.mind_ref})},tooltip:"Admin PM",mr:1})},N=function(e,t){var n=(0,r.useBackend)(t).act;e.mind_ref;return(0,o.createComponentVNode)(2,i.Button,{width:2,textAlign:"center",icon:"user-gear",onClick:function(){return n("player_options",{mind_ref:e.mind_ref})},tooltip:"Player Options",mr:1})},v=function(e,t){var n=(0,r.useBackend)(t).act;e.antagonist_datum;return(0,o.createComponentVNode)(2,i.Button,{width:2,textAlign:"center",icon:"gear",onClick:function(){return n("view_variables",{antagonist_datum:e.antagonist_datum})},tooltip:"Antagonist Datum Vars"})},b=function(e,t){var n=(0,r.useBackend)(t),c=n.data;n.act;return(0,o.createComponentVNode)(2,i.Table.Row,{children:[(0,o.createComponentVNode)(2,i.Table.Cell,{py:"0.5em",children:(0,a.toTitleCase)(e.role)}),(0,o.createComponentVNode)(2,i.Table.Cell,{children:(0,o.createComponentVNode)(2,i.Tooltip,{content:(0,o.createComponentVNode)(2,i.LabeledList,{children:(0,o.normalizeProps)((0,o.createComponentVNode)(2,p,Object.assign({},e)))}),children:(0,o.createComponentVNode)(2,i.Box,{inline:!0,children:[" ",(0,o.normalizeProps)((0,o.createComponentVNode)(2,f,Object.assign({},e)))," "]})})}),(0,o.normalizeProps)((0,o.createComponentVNode)(2,h,Object.assign({mind_ref:e.mind_ref},c.mindLocations[e.mind_ref]))),(0,o.createComponentVNode)(2,i.Table.Cell,{children:[(0,o.normalizeProps)((0,o.createComponentVNode)(2,g,Object.assign({},e))),(0,o.normalizeProps)((0,o.createComponentVNode)(2,N,Object.assign({},e)))]})]})},V=function(e){if(e!==undefined)return e in y?y[e]:void 0},y={AntagonistList:function(e){var t=e.sectionData;if(t.length){var n=t.sort((function(e,t){return e.real_name.localeCompare(t.real_name)}))||[];return(0,o.createComponentVNode)(2,i.Section,{children:(0,o.createComponentVNode)(2,i.Table,{fill:!0,vertical:!0,children:[(0,o.createComponentVNode)(2,i.Table.Row,{bold:!0,children:[(0,o.createComponentVNode)(2,i.Table.Cell,{children:[" ",e.sectionName?e.sectionName:"Name"," "]}),(0,o.createComponentVNode)(2,i.Table.Cell,{children:" Location "}),(0,o.createComponentVNode)(2,i.Table.Cell,{children:" Commands "})]}),(0,o.createComponentVNode)(2,u),null==n?void 0:n.map((function(e,t){return(0,o.normalizeProps)((0,o.createComponentVNode)(2,d,Object.assign({},e),t))}))]})})}},NuclearBombReadout:function(e,t){if(e.sectionData){var n=(0,r.useBackend)(t).act,c=e.sectionData;return(0,o.createComponentVNode)(2,i.Section,{title:(0,a.toTitleCase)(e.sectionName),children:(0,o.createComponentVNode)(2,i.Stack,{align:"center",children:[(0,o.createComponentVNode)(2,i.Stack.Item,{children:(0,o.createComponentVNode)(2,i.Box,{textAlign:"center",textColor:"red",fontFamily:"Consolas",fontSize:5,m:.5,mr:2,children:c.timeRemaining})}),(0,o.createComponentVNode)(2,i.Stack.Item,{grow:!0,children:(0,o.createComponentVNode)(2,i.LabeledList,{children:[(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Health",verticalAlign:"middle",children:(0,o.createComponentVNode)(2,i.ProgressBar,{minValue:0,maxValue:c.maxHealth,value:c.health,color:"green",backgroundColor:"red",mb:1})}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Location",verticalAlign:"middle",children:[c.area,(0,o.createComponentVNode)(2,i.Button,{color:"transparent",content:c.coordinates,onClick:function(){return n("jump_to",{target:c.nuclearBomb})},tooltip:"Jump To Position"})]})]})})]})})}},HeadsList:function(e){var t=e.sectionData;if(t.length){var n=["Captain","Head of Personnel","Head of Security","Chief Engineer","Research Director","Medical Director"],r=t.sort((function(e,t){return n.indexOf(e.role)-n.indexOf(t.role)}))||[];return(0,o.createComponentVNode)(2,i.Section,{children:(0,o.createComponentVNode)(2,i.Table,{fill:!0,vertical:!0,children:[(0,o.createComponentVNode)(2,i.Table.Row,{bold:!0,children:[(0,o.createComponentVNode)(2,i.Table.Cell,{children:" Role "}),(0,o.createComponentVNode)(2,i.Table.Cell,{children:" Name "}),(0,o.createComponentVNode)(2,i.Table.Cell,{children:" Location "}),(0,o.createComponentVNode)(2,i.Table.Cell,{children:" Commands "})]}),(0,o.createComponentVNode)(2,i.Table.Row,{children:[(0,o.createComponentVNode)(2,i.Table.Cell,{children:[" ",(0,o.createComponentVNode)(2,i.Divider)," "]}),(0,o.createComponentVNode)(2,i.Table.Cell,{children:[" ",(0,o.createComponentVNode)(2,i.Divider)," "]}),(0,o.createComponentVNode)(2,i.Table.Cell,{children:[" ",(0,o.createComponentVNode)(2,i.Divider)," "]}),(0,o.createComponentVNode)(2,i.Table.Cell,{children:[" ",(0,o.createComponentVNode)(2,i.Divider)," "]})]}),null==r?void 0:r.map((function(e,t){return(0,o.normalizeProps)((0,o.createComponentVNode)(2,b,Object.assign({},e),t))}))]})})}},GangReadout:function(e){var t=e.sectionData;if(t.length)return(0,o.createComponentVNode)(2,i.Section,{title:e.sectionName,children:t.map((function(e,t){return(0,o.normalizeProps)((0,o.createComponentVNode)(2,l,Object.assign({},e),t))}))})},GangLockerReadout:function(e,t){if(e.sectionData){var n=(0,r.useBackend)(t).act,c=e.sectionData;return(0,o.createComponentVNode)(2,i.Section,{children:[(0,o.createComponentVNode)(2,i.Box,{bold:!0,children:(0,a.toTitleCase)(e.sectionName)}),(0,o.createComponentVNode)(2,i.Divider),(0,o.createComponentVNode)(2,i.LabeledList,{children:[(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Health",verticalAlign:"middle",children:(0,o.createComponentVNode)(2,i.ProgressBar,{minValue:0,maxValue:c.maxHealth,value:c.health,color:"green",backgroundColor:"red",mb:1})}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Location",verticalAlign:"middle",children:[c.area,(0,o.createComponentVNode)(2,i.Button,{color:"transparent",content:c.coordinates,onClick:function(){return n("jump_to",{target:c.gangLocker})},tooltip:"Jump To Position"})]})]})]})}}}},56444:function(e,t,n){"use strict";t.__esModule=!0,t.AntagonistTypeTabs=void 0;var o=n(96323),r=n(31246),a=n(21118),i=n(26949);t.AntagonistTypeTabs=function(e,t){var n=(0,r.useBackend)(t),c=n.data,l=n.act,u=(0,r.useLocalState)(t,"tabIndex",c.tabToOpenOn),d=u[0],s=u[1],p=c.tabs.sort((function(e,t){return e.tabName.localeCompare(t.tabName)}))||[],m=function(e){s(e),l("set_tab",{index:e})};return(0,o.createComponentVNode)(2,i.Section,{inline:!0,fill:!0,children:(0,o.createComponentVNode)(2,i.Tabs,{vertical:!0,children:[(0,o.createComponentVNode)(2,i.Tabs.Tab,{selected:null===d,onClick:function(){return m(null)},width:12,my:.2,children:"General"}),(0,o.createComponentVNode)(2,i.Box,{my:-.5,children:(0,o.createComponentVNode)(2,i.Divider)}),p.map((function(e,t){return(0,o.createComponentVNode)(2,i.Tabs.Tab,{selected:d===e.index,onClick:function(){return m(e.index)},width:12,my:.2,children:(0,a.toTitleCase)(e.tabName)},t)}))]})})}},20636:function(e,t,n){"use strict";t.__esModule=!0,t.AntagonistPanel=void 0;var o=n(96323),r=n(31246),a=n(2381),i=n(26949),c=n(56444),l=n(20920);t.AntagonistPanel=function(e,t){var n=(0,r.useBackend)(t).data;return(0,o.createComponentVNode)(2,a.Window,{title:"Antagonist Panel",width:750,height:500,children:(0,o.createComponentVNode)(2,a.Window.Content,{scrollable:!0,children:(0,o.createComponentVNode)(2,i.Stack,{fill:!0,children:[(0,o.createComponentVNode)(2,i.Stack.Item,{children:(0,o.normalizeProps)((0,o.createComponentVNode)(2,c.AntagonistTypeTabs,Object.assign({},n)))}),(0,o.createComponentVNode)(2,i.Stack.Item,{grow:!0,children:(0,o.normalizeProps)((0,o.createComponentVNode)(2,l.AntagonistTypeTabBody,Object.assign({},n)))})]})})})}},5562:function(){},20065:function(e,t,n){"use strict";t.__esModule=!0,t.AccessPanelSection=void 0;var o=n(96323),r=n(31246),a=n(26949),i=n(63687);t.AccessPanelSection=function(e,t){var n=(0,r.useBackend)(t).data,c=n.net_id,l=n.locked,u=n.shorted,d=n.aidisabled;return(0,o.createComponentVNode)(2,a.Section,{title:"Access Panel",children:[(0,o.createComponentVNode)(2,a.Box,{children:["An identifier is engraved above the APC's wires:"," ",(0,o.createComponentVNode)(2,a.Box,{inline:!0,italic:!0,children:c})]}),(0,o.createComponentVNode)(2,a.Divider),(0,o.createComponentVNode)(2,i.WireList),(0,o.createComponentVNode)(2,a.Divider),(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Controls",color:l?"green":"red",children:l?"Locked":"Unlocked"}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Circuitry",color:u?"red":"green",children:u?"Shorted":"Working"}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"AI Control",color:d?"red":"green",children:d?"Disabled":"Enabled"})]})]})}},65005:function(e,t,n){"use strict";t.__esModule=!0,t.CellDisplay=void 0;var o=n(96323),r=n(31246),a=n(26949),i=n(94104);t.CellDisplay=function(e,t){var n=(0,r.useBackend)(t),c=n.act,l=n.data,u=l.cell_percent,d=l.cell_present,s=l.chargecount,p=l.chargemode,m=l.charging,f=(0,i.getHasPermission)(l),h=function(e,t){switch(e){case 0:return t?"Performing self-test":"Not charging";case 1:return"Charging";default:return"Fully Charged"}}(m,s),C=function(e){return function(){return c("onChargeModeChange",{chargemode:e})}};return(0,o.createFragment)([(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Charging",textAlign:"right",buttons:(0,o.createFragment)([(0,o.createComponentVNode)(2,a.Button,{onClick:C(0),disabled:!f&&0!==p,selected:0===p,children:"Off"}),(0,o.createComponentVNode)(2,a.Button,{onClick:C(1),disabled:!f&&1!==p,selected:1===p,children:"Auto"})],4),children:["(",d?h:"Not Connected",")"]}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Cell Power",verticalAlign:"middle",children:(0,o.createComponentVNode)(2,a.ProgressBar,{value:u,minValue:0,maxValue:100,color:u<20?"red":u<50?"yellow":"green"})})],4)}},54187:function(e,t,n){"use strict";t.__esModule=!0,t.MainSection=void 0;var o,r,a=n(96323),i=n(31246),c=n(26949),l=n(65005),u=n(94104);!function(e){e[e.None=0]="None",e[e.Low=1]="Low",e[e.Good=2]="Good"}(r||(r={}));var d=((o={})[r.None]={name:"None",color:"red"},o[r.Low]={name:"Low",color:"yellow"},o[r.Good]={name:"Good",color:"green"},o),s=function(e){var t=e.mainStatus,n=d[t];return(0,a.createComponentVNode)(2,c.LabeledList.Item,{label:"External Power",color:n.color,textAlign:"right",children:n.name})};t.MainSection=function(e,t){var n=(0,i.useBackend)(t),o=n.act,r=n.data,d=r.area_name,p=r.host_id,m=r.locked,f=r.main_status,h=r.operating,C=(0,u.getHasPermission)(r),g=(0,u.getIsLocalAccess)(r),N=function(e){return o("onOperatingChange",{operating:e})};return(0,a.createComponentVNode)(2,c.Section,{title:d,children:[g&&(0,a.createFragment)([(0,a.createComponentVNode)(2,c.Box,{align:"center",bold:!0,fill:!0,children:["Swipe ID card to ",m?"unlock":"lock"," interface"]}),(0,a.createComponentVNode)(2,c.Divider)],4),(0,a.createComponentVNode)(2,c.LabeledList,{children:[(0,a.createComponentVNode)(2,c.LabeledList.Item,{label:"Main Breaker",buttons:(0,a.createFragment)([(0,a.createComponentVNode)(2,c.Button,{disabled:!C&&h,onClick:function(){return N(!1)},selected:!h,children:"Off"}),(0,a.createComponentVNode)(2,c.Button,{disabled:!C&&!h,onClick:function(){return N(!0)},selected:h,children:"On"})],4)}),(0,a.createComponentVNode)(2,l.CellDisplay),(0,a.createComponentVNode)(2,s,{mainStatus:f}),g&&(0,a.createComponentVNode)(2,c.LabeledList.Item,{label:"Host Connection",color:p?"green":"red",textAlign:"right",children:p?"OK":"NONE"})]})]})}},42947:function(e,t,n){"use strict";t.__esModule=!0,t.PowerChannelSection=void 0;var o,r,a=n(96323),i=n(31246),c=n(26949),l=n(94104);!function(e){e[e.Equipment=1]="Equipment",e[e.Lighting=2]="Lighting",e[e.Environmental=3]="Environmental"}(o||(o={})),function(e){e[e.Off=0]="Off",e[e.AutoOff=1]="AutoOff",e[e.On=2]="On",e[e.AutoOn=3]="AutoOn"}(r||(r={}));var u=[r.AutoOff,r.AutoOn],d=[{id:o.Equipment,label:"Equipment",getPower:function(e){return e.lastused_equip},getStatus:function(e){return e.equipment},statusChangeAction:"onPowerChannelEquipmentStatusChange"},{id:o.Lighting,label:"Lighting",getPower:function(e){return e.lastused_light},getStatus:function(e){return e.lighting},statusChangeAction:"onPowerChannelLightingStatusChange"},{id:o.Environmental,label:"Environmental",getPower:function(e){return e.lastused_environ},getStatus:function(e){return e.environ},statusChangeAction:"onPowerChannelEnvironStatusChange"}].reduce((function(e,t){var n;return Object.assign({},e,((n={})[t.id]=t,n))}),{}),s=function(e,t){var n,o,s=e.powerChannel,p=(0,i.useBackend)(t),m=p.act,f=p.data,h=(0,l.getHasPermission)(f),C=d[s],g=null!=(n=C.label)?n:"Unknown",N=C.getStatus(f),v=(o=N,u.includes(o)),b=C.getPower(f),V=C.statusChangeAction,y=function(e){V&&m(V,{status:e})};return(0,a.createComponentVNode)(2,c.LabeledList.Item,{label:g,textAlign:"right",buttons:(0,a.createFragment)([(0,a.createComponentVNode)(2,c.Button,{disabled:!h&&N!==r.Off,onClick:function(){return y(r.Off)},selected:N===r.Off,children:"Off"}),(0,a.createComponentVNode)(2,c.Button,{disabled:!h&&N!==r.On,onClick:function(){return y(r.On)},selected:N===r.On,children:"On"}),(0,a.createComponentVNode)(2,c.Button,{disabled:!h&&!v,onClick:function(){return y(r.AutoOn)},selected:v,children:"Auto"})],4),children:(0,l.formatWatts)(b)})};t.PowerChannelSection=function(e,t){var n=(0,i.useBackend)(t).data.lastused_total;return(0,a.createComponentVNode)(2,c.Section,{title:"Power Channel",children:(0,a.createComponentVNode)(2,c.LabeledList,{children:[(0,a.createComponentVNode)(2,s,{powerChannel:o.Equipment}),(0,a.createComponentVNode)(2,s,{powerChannel:o.Lighting}),(0,a.createComponentVNode)(2,s,{powerChannel:o.Environmental}),(0,a.createComponentVNode)(2,c.LabeledList.Item,{label:"Total Load",textAlign:"right",buttons:!0,children:(0,l.formatWatts)(n)})]})})}},63687:function(e,t,n){"use strict";t.__esModule=!0,t.WireListItem=t.WireList=void 0;var o,r=n(96323),a=n(31246),i=n(26949);!function(e){e[e.Orange=1]="Orange",e[e.DarkRed=2]="DarkRed",e[e.White=3]="White",e[e.Yellow=4]="Yellow"}(o||(o={}));var c=[{id:o.Orange,name:"Orange",color:"orange",getIsCut:function(e){return!!e.orange_cut}},{id:o.DarkRed,name:"Dark red",color:"darkred",getIsCut:function(e){return!!e.dark_red_cut}},{id:o.White,name:"White",color:"white",getIsCut:function(e){return!!e.white_cut}},{id:o.Yellow,name:"Yellow",color:"yellow",getIsCut:function(e){return!!e.yellow_cut}}];t.WireList=function(e,t){var n=(0,a.useBackend)(t),o=n.act,u=n.data;return(0,r.createComponentVNode)(2,i.LabeledList,{children:c.map((function(e){var t=e.color,n=e.getIsCut,a=e.id,i=e.name;return(0,r.createComponentVNode)(2,l,{color:t,isCut:n(u),name:i,onBite:function(){return o("onBiteWire",{wire:a})},onCut:function(){return o("onCutWire",{wire:a})},onMend:function(){return o("onMendWire",{wire:a})},onPulse:function(){return o("onPulseWire",{wire:a})}},a)}))})};var l=function(e){var t=e.color,n=e.isCut,o=e.name,a=e.onBite,c=e.onCut,l=e.onMend,u=e.onPulse,d=n?(0,r.createComponentVNode)(2,i.Button,{content:"Mend",onClick:l,selected:!0}):(0,r.createFragment)([(0,r.createComponentVNode)(2,i.Button,{icon:"cut",onClick:c,children:"Cut"}),(0,r.createComponentVNode)(2,i.Button,{icon:"bolt",onClick:u,children:"Pulse"}),(0,r.createComponentVNode)(2,i.Button,{icon:"tooth",onClick:a,children:"Bite"})],4);return(0,r.createComponentVNode)(2,i.LabeledList.Item,{label:o+" wire",labelColor:t,buttons:d})};t.WireListItem=l},91690:function(e,t,n){"use strict";t.__esModule=!0,t.Apc=void 0;var o=n(96323),r=n(31246),a=n(26949),i=n(2381),c=n(20065),l=n(54187),u=n(42947),d=n(94104),s=function(e){var t=e.coverlocked,n=e.hasPermission,r=e.onCoverLockedChange;return(0,o.createFragment)([(0,o.createComponentVNode)(2,a.Button,{disabled:!n&&!!t,onClick:function(){return r(!1)},selected:!t,children:"Off"}),(0,o.createComponentVNode)(2,a.Button,{disabled:!n&&!t,onClick:function(){return r(!0)},selected:!!t,children:"On"})],4)};t.Apc=function(e,t){return(0,r.useBackend)(t).data.area_requires_power?(0,o.createComponentVNode)(2,p):(0,o.createComponentVNode)(2,m)};var p=function(e,t){var n=(0,r.useBackend)(t),p=n.act,m=n.data,f=m.area_requires_power,h=m.can_access_remotely,C=m.coverlocked,g=(0,d.getIsLocalAccess)(m),N=(0,d.getHasPermission)(m),v=!!h,b=(0,d.getIsAccessPanelVisible)(m),V=(0,d.calculateWindowHeight)(f,!0,!0,v,b,g);return(0,o.createComponentVNode)(2,i.Window,{title:"Area Power Controller",width:360,height:V,theme:"ntos",children:(0,o.createComponentVNode)(2,i.Window.Content,{children:[(0,o.createComponentVNode)(2,l.MainSection),(0,o.createComponentVNode)(2,u.PowerChannelSection),(0,o.createComponentVNode)(2,a.Section,{children:(0,o.createComponentVNode)(2,a.LabeledList,{children:(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Cover Lock",buttons:(0,o.createComponentVNode)(2,s,{coverlocked:C,hasPermission:N,onCoverLockedChange:function(e){return p("onCoverLockedChange",{coverlocked:e})}})})})}),v&&(0,o.createComponentVNode)(2,a.Section,{children:(0,o.createComponentVNode)(2,a.Button,{align:"center",color:"red",fluid:!0,icon:"bolt",onClick:function(){return p("onOverload")},children:"Overload Lighting Circuit"})}),b&&(0,o.createComponentVNode)(2,c.AccessPanelSection)]})})},m=function(e,t){var n=(0,r.useBackend)(t).data,l=n.area_name,u=n.area_requires_power,s=(0,d.getIsAccessPanelVisible)(n),p=(0,d.calculateWindowHeight)(u,!1,!1,!1,s,!1);return(0,o.createComponentVNode)(2,i.Window,{title:"Area Power Controller",width:360,height:p,theme:"ntos",children:(0,o.createComponentVNode)(2,i.Window.Content,{children:[(0,o.createComponentVNode)(2,a.Section,{title:"Area Power Controller ("+l+")",children:(0,o.createComponentVNode)(2,a.Box,{children:"This APC has no configurable settings."})}),s&&(0,o.createComponentVNode)(2,c.AccessPanelSection)]})})}},73020:function(e,t){"use strict";var n;t.__esModule=!0,t.InterfaceType=void 0,t.InterfaceType=n,function(e){e[e.LocalOnly=0]="LocalOnly",e[e.LocalAndNetwork=1]="LocalAndNetwork",e[e.NetworkOnly=2]="NetworkOnly"}(n||(t.InterfaceType=n={}))},94104:function(e,t,n){"use strict";t.__esModule=!0,t.calculateWindowHeight=t.getIsLocalAccess=t.getIsAccessPanelVisible=t.getHasPermission=t.formatWatts=void 0;var o=n(73020);t.formatWatts=function(e){return(isNaN(e)?0:Math.floor(e))+" W"};t.getHasPermission=function(e){var t=e.is_ai,n=e.is_silicon,o=e.can_access_remotely,r=e.aidisabled,a=e.locked;return t||n||o?!r:!a};t.getIsAccessPanelVisible=function(e){var t=e.is_ai;return!!e.wiresexposed&&!t};var r=[o.InterfaceType.LocalOnly,o.InterfaceType.LocalAndNetwork];t.getIsLocalAccess=function(e){var t=e.can_access_remotely,n=e.setup_networkapc;return r.includes(n)&&!t};t.calculateWindowHeight=function(e,t,n,o,r,a){var i=function(e,t){return 6+(e?t?181:132:62)}(e,a);return 32+i+(n?136:0)+(t?42:0)+(o?42:0)+(r?254:0)+12}},52403:function(e,t,n){"use strict";t.__esModule=!0,t.ArtifactPaper=void 0;var o=n(96323),r=n(31246),a=n(26949),i=n(2381);t.ArtifactPaper=function(e,t){var n=(0,r.useBackend)(t),c=n.act,l=n.data,u=l.artifactName,d=l.artifactOrigin,s=l.artifactType,p=l.artifactTriggers,m=l.artifactFaults,f=l.artifactDetails,h=l.allArtifactOrigins,C=l.allArtifactTypes,g=l.allArtifactTriggers,N=l.hasPen;return(0,o.createComponentVNode)(2,i.Window,{title:"Nanotrasen Alien Artifact Analysis Form",theme:"paper",width:800,height:835,children:(0,o.createComponentVNode)(2,i.Window.Content,{children:(0,o.createComponentVNode)(2,a.Section,{children:[(0,o.createVNode)(1,"h3",null,"Artifact Name",16),(0,o.createVNode)(1,"h4",null,""===u?"unknown":u,0),(0,o.createVNode)(1,"h3",null,"Artifact Origin",16),(0,o.createComponentVNode)(2,a.Flex,{direction:"column",wrap:"wrap",height:3,children:h.map((function(e){return(0,o.createComponentVNode)(2,a.Flex.Item,{onClick:function(t,n){return c("origin",{newOrigin:e,hasPen:N})},children:[(0,o.createComponentVNode)(2,a.Button.Checkbox,{checked:d===e}),(0,o.createVNode)(1,"a",null,e,0)]},e.id)}))}),(0,o.createVNode)(1,"h3",null,"Artifact Type",16),(0,o.createComponentVNode)(2,a.Flex,{direction:"column",wrap:"wrap",height:25,justify:"space-evenly",children:C.map((function(e){return(0,o.createComponentVNode)(2,a.Flex.Item,{className:"artifactType"+e[1],onClick:function(t,n){return c("type",{newType:e[0],hasPen:N})},children:[(0,o.createComponentVNode)(2,a.Button.Checkbox,{checked:s===e[0]}),(0,o.createVNode)(1,"a",null,e[0],0)]},e[0].id)}))}),(0,o.createVNode)(1,"h3",null,"Artifact Triggers (If Applicable)",16),(0,o.createComponentVNode)(2,a.Flex,{direction:"column",wrap:"wrap",height:5,children:g.map((function(e){return(0,o.createComponentVNode)(2,a.Flex.Item,{onClick:function(t,n){return c("trigger",{newTriggers:e,hasPen:N})},children:[(0,o.createComponentVNode)(2,a.Button.Checkbox,{checked:p===e}),(0,o.createVNode)(1,"a",null,e,0)]},e.id)}))}),(0,o.createVNode)(1,"h3",null,"Artifact Faults",16),(0,o.createComponentVNode)(2,a.TextArea,{value:m,fluid:!0,height:5,onChange:function(e,t){return c("fault",{newFaults:t,hasPen:N})}}),(0,o.createVNode)(1,"h3",null,"Additional Information",16),(0,o.createComponentVNode)(2,a.TextArea,{value:f,fluid:!0,height:10,onChange:function(e,t){return c("detail",{newDetail:t,hasPen:N})}})]})})})}},7171:function(e,t,n){"use strict";t.__esModule=!0,t.Atm=void 0;var o=n(96323),r=n(31246),a=n(26949),i=n(2381),c=n(3382),l=["type"];var u=2,d="danger",s="info",p="success",m=function(e){var t=e.type,n=function(e,t){if(null==e)return{};var n,o,r={},a=Object.keys(e);for(o=0;o<a.length;o++)n=a[o],t.indexOf(n)>=0||(r[n]=e[n]);return r}(e,l),r=Object.assign({},t===d?{danger:!0}:{},t===s?{info:!0}:{},t===p?{success:!0}:{});return(0,o.createComponentVNode)(2,a.Box,{children:[(0,o.createComponentVNode)(2,a.Divider),(0,o.normalizeProps)((0,o.createComponentVNode)(2,a.NoticeBox,Object.assign({},r,n)))]})};t.Atm=function(e,t){var n=(0,r.useBackend)(t).data.name,l=(0,r.useLocalState)(t,"tabIndex",c.AtmTabKeys.Teller),u=l[0],d=l[1];return(0,o.createComponentVNode)(2,i.Window,{title:n,width:375,height:420,children:(0,o.createComponentVNode)(2,i.Window.Content,{children:(0,o.createComponentVNode)(2,a.Stack,{vertical:!0,fill:!0,children:[(0,o.createComponentVNode)(2,a.Stack.Item,{children:(0,o.createComponentVNode)(2,a.Tabs,{fluid:!0,children:[(0,o.createComponentVNode)(2,a.Tabs.Tab,{icon:"money-bills",selected:u===c.AtmTabKeys.Teller,onClick:function(){return d(c.AtmTabKeys.Teller)},children:"ATM"}),(0,o.createComponentVNode)(2,a.Tabs.Tab,{icon:"coins",selected:u===c.AtmTabKeys.Spacebux,onClick:function(){return d(c.AtmTabKeys.Spacebux)},children:"Spacebux"})]})}),(0,o.createComponentVNode)(2,a.Stack.Item,{children:[u===c.AtmTabKeys.Teller&&(0,o.createComponentVNode)(2,f),u===c.AtmTabKeys.Spacebux&&(0,o.createComponentVNode)(2,h)]})]})})})};var f=function(e,t){var n=(0,r.useBackend)(t),i=n.act,c=n.data,l=c.accountBalance,d=c.accountName,s=c.loggedIn,p=c.scannedCard,f=c.message||{text:"",status:"",position:""};return(0,o.createComponentVNode)(2,a.Stack,{vertical:!0,fill:!0,children:[(0,o.createComponentVNode)(2,a.Stack.Item,{children:(0,o.createComponentVNode)(2,a.Section,{title:"Automatic Teller Machine",children:(0,o.createComponentVNode)(2,a.Stack,{vertical:!0,fill:!0,children:[(0,o.createComponentVNode)(2,a.Stack.Item,{children:[!p&&(0,o.createComponentVNode)(2,a.NoticeBox,{info:!0,children:"Please swipe card and enter PIN to access your account."}),(0,o.createComponentVNode)(2,a.Button,{icon:"id-card",content:p||"Swipe ID",onClick:p?function(){return i("logout")}:function(){return i("insert_card")}}),f.text&&"splash"===f.position&&(0,o.createComponentVNode)(2,m,{type:f.status,children:f.text})]}),s===u?(0,o.createFragment)([(0,o.createComponentVNode)(2,a.Divider),(0,o.createComponentVNode)(2,a.Stack.Item,{children:(0,o.createComponentVNode)(2,a.Stack,{vertical:!0,fill:!0,children:[(0,o.createComponentVNode)(2,a.Stack.Item,{children:["Welcome, ",(0,o.createVNode)(1,"strong",null,[d,(0,o.createTextVNode)(".")],0)]}),(0,o.createComponentVNode)(2,a.Stack.Item,{children:["Your account balance is ",(0,o.createVNode)(1,"strong",null,[l,(0,o.createTextVNode)("\u2abd.")],0)]}),(0,o.createComponentVNode)(2,a.Stack.Item,{children:[(0,o.createComponentVNode)(2,a.Divider),(0,o.createComponentVNode)(2,a.Button,{icon:"money-bill",content:"Withdraw cash",onClick:function(){return i("withdraw_cash")}}),f.text&&"atm"===f.position&&(0,o.createComponentVNode)(2,m,{type:f.status,children:f.text})]})]})})],4):p&&(0,o.createComponentVNode)(2,a.Stack.Item,{children:[(0,o.createComponentVNode)(2,a.Button,{icon:"sign-out-alt",content:"Enter PIN",onClick:function(){return i("login_attempt")}}),f.text&&"login"===f.position&&(0,o.createComponentVNode)(2,m,{type:f.status,children:f.text})]})]})})}),(0,o.createComponentVNode)(2,a.Stack.Item,{children:s===u&&(0,o.createComponentVNode)(2,a.Section,{title:"Lottery",children:[(0,o.createComponentVNode)(2,a.NoticeBox,{info:!0,children:"To claim your winnings, you must insert your lottery ticket."}),(0,o.createComponentVNode)(2,a.Divider),(0,o.createComponentVNode)(2,a.Button,{icon:"ticket-alt",content:"Purchase Lottery Ticket (100\u2abd)",onClick:function(){return i("buy")}}),f.text&&"lottery"===f.position&&(0,o.createComponentVNode)(2,m,{type:f.status,children:f.text})]})})]})},h=function(e,t){var n=(0,r.useBackend)(t),i=n.act,c=n.data,l=c.clientKey,u=c.spacebuxBalance;return(0,o.createComponentVNode)(2,a.Section,{title:l+"'s Spacebux Menu",children:(0,o.createComponentVNode)(2,a.Stack,{vertical:!0,fill:!0,children:[(0,o.createComponentVNode)(2,a.Stack.Item,{children:[(0,o.createComponentVNode)(2,a.NoticeBox,{info:!0,children:"This menu is only visible to you. Deposit Spacebux into your account by inserting a token."}),(0,o.createComponentVNode)(2,a.Divider)]}),(0,o.createComponentVNode)(2,a.Stack.Item,{children:["Your Spacebux balance is currently"," ",(0,o.createVNode)(1,"strong",null,[u,(0,o.createTextVNode)(" "),(0,o.createComponentVNode)(2,a.Icon,{name:"fa-solid fa-coins"})],0)]}),(0,o.createComponentVNode)(2,a.Stack.Item,{children:[(0,o.createComponentVNode)(2,a.Divider),(0,o.createComponentVNode)(2,a.Button,{icon:"coins",content:"Withdraw Spacebux",onClick:function(){return i("withdraw_spacebux")}})]}),(0,o.createComponentVNode)(2,a.Stack.Item,{children:(0,o.createComponentVNode)(2,a.Button,{icon:"envelope",content:"Securely send Spacebux",onClick:function(){return i("transfer_spacebux")}})})]})})}},3382:function(e,t){"use strict";var n;t.__esModule=!0,t.AtmTabKeys=void 0,t.AtmTabKeys=n,function(e){e[e.Teller=0]="Teller",e[e.Spacebux=1]="Spacebux"}(n||(t.AtmTabKeys=n={}))},46837:function(e,t,n){"use strict";t.__esModule=!0,t.AutoInjector=void 0;var o=n(96323),r=n(31246),a=n(26949),i=n(2381),c=n(51418);t.AutoInjector=function(e,t){var n=(0,r.useBackend)(t),l=n.act,u=n.data,d=u.injectionAmount,s=u.reagentData,p=u.minimumTime,m=u.condition,f=u.conditionTreshold,h=u.conditionDamage,C=u.conditions;return(0,o.createComponentVNode)(2,i.Window,{width:360,height:520,theme:"neutral",children:(0,o.createComponentVNode)(2,i.Window.Content,{children:[(0,o.createComponentVNode)(2,a.Section,{title:"Contents",buttons:(0,o.createComponentVNode)(2,a.Button,{title:"Eject",icon:"eject",disabled:!s,onClick:function(){return l("remove_cont")},children:"Eject"}),children:s?(0,o.createFragment)([(0,o.createComponentVNode)(2,c.ReagentGraph,{container:s}),(0,o.createComponentVNode)(2,c.ReagentList,{container:s})],4):"Please attach a beaker"}),(0,o.createComponentVNode)(2,a.Section,{title:"Condition",children:[(0,o.createComponentVNode)(2,a.Dropdown,{options:C,selected:m?m.name:"None",onSelected:function(e){return l("sel_cond",{condition:e})},noscroll:!0,width:"130px"}),f?(0,o.createFragment)([h?(0,o.createComponentVNode)(2,a.Dropdown,{options:["brute","burn","toxin","oxygen"],selected:h.damagetype,onSelected:function(e){return l("sel_damage_type",{damagetype:e})},noscroll:!0,width:"75px",mt:"0.5rem"}):null,(0,o.createComponentVNode)(2,a.Slider,{value:f.currentValue,format:function(e){return e+f.suffix},minValue:f.minValue,maxValue:f.maxValue,step:1,onChange:function(e,t){return l("changeConditionValue",{conditionValue:t})},mt:"0.5rem"})],0):null,m?(0,o.createComponentVNode)(2,a.Box,{mt:"0.5rem",children:m.desc}):null]}),s?(0,o.createComponentVNode)(2,a.Section,{title:"Injection Amount",children:(0,o.createComponentVNode)(2,a.Slider,{value:d,format:function(e){return e+"u"},minValue:1,maxValue:s.maxVolume,step:1,onChange:function(e,t){return l("changeAmount",{amount:t})}})}):null,(0,o.createComponentVNode)(2,a.Section,{title:"Min. time between activations",children:(0,o.createComponentVNode)(2,a.Slider,{value:p,format:function(e){return e+" seconds"},minValue:3,maxValue:300,step:1,onChange:function(e,t){return l("changeMintime",{mintime:t})}})})]})})}},95620:function(e,t,n){"use strict";t.__esModule=!0,t.BanList=void 0;var o=n(96323),r=n(31246),a=n(26949),i=n(42151),c=n(34747),l=n(92600),u=n(67179),d=n(99526),s=Object.keys(l.BanPanelSearchFilter),p=function(e){return""+e.id};t.BanList=function(e,t){var n=e.data,m=n.ban_list,f=n.per_page,h=(0,c.useBanPanelBackend)(t).action,C=(null!=m?m:{}).search_response,g=(null!=C?C:{}).data,N=(0,r.useLocalState)(t,"searchText",""),v=N[0],b=N[1],V=(0,r.useLocalState)(t,"searchFilter",l.BanPanelSearchFilter.ckey),y=V[0],x=V[1],k=h.navigatePreviousPage,S=h.navigateNextPage,I=(0,d.buildColumnConfigs)({editBan:function(e){return h.editBan(e)},deleteBan:function(e){return h.deleteBan(e)}});return(0,o.createFragment)([(0,o.createComponentVNode)(2,a.Stack.Item,{children:(0,o.createComponentVNode)(2,a.Flex,{pt:1,children:[(0,o.createComponentVNode)(2,a.Flex.Item,{direction:"column",mx:1,wrap:"wrap",children:[(0,o.createComponentVNode)(2,a.Input,{value:v,onInput:function(e,t){return b(t)},mr:1}),(0,o.createComponentVNode)(2,a.Button,{icon:"magnifying-glass",onClick:function(){return h.searchBans(v,l.BanPanelSearchFilter[y])},children:"Search"})]}),(0,o.createComponentVNode)(2,a.Flex.Item,{grow:!0,children:(0,o.createComponentVNode)(2,a.Dropdown,{width:11,icon:"filter",nochevron:!0,selected:y,options:s,onSelected:function(e){x(e)}})})]})}),(0,o.createComponentVNode)(2,a.Stack.Item,{children:(0,o.createComponentVNode)(2,a.Section,{children:(0,o.createComponentVNode)(2,a.Stack,{children:I.map((function(e){return(0,o.createComponentVNode)(2,i.HeaderCell,{config:e},e.id)}))})})}),(0,o.createComponentVNode)(2,a.Stack.Item,{grow:!0,children:(0,o.createComponentVNode)(2,a.Section,{fill:!0,scrollable:!0,children:(0,o.createComponentVNode)(2,a.Stack,{vertical:!0,zebra:!0,mb:1,children:(null!=g?g:[]).map((function(e){return(0,o.createComponentVNode)(2,u.BanListItem,{columnConfigs:I,data:e,rowId:p(e)},e.id)}))})})}),(0,o.createComponentVNode)(2,a.Stack.Item,{children:(0,o.createComponentVNode)(2,a.Section,{children:[(0,o.createComponentVNode)(2,a.Button,{onClick:k,children:"Prev"}),(0,o.createComponentVNode)(2,a.Button,{onClick:S,children:"Next"}),(0,o.createComponentVNode)(2,a.NumberInput,{minValue:5,maxValue:100,value:null!=f?f:30,placeholder:30,onChange:function(e,t){return h.setPerPage(t)}})]})})],4)}},67179:function(e,t,n){"use strict";t.__esModule=!0,t.BanListItem=void 0;var o=n(96323),r=n(26949),a=n(42151);t.BanListItem=function(e){var t=e.columnConfigs,n=e.data,i=e.rowId;return(0,o.createComponentVNode)(2,r.Stack.Item,{children:(0,o.createComponentVNode)(2,r.Stack,{children:t.map((function(e){return(0,o.createComponentVNode)(2,a.Cell,{columnConfig:e,data:n,rowId:i},e.id)}))})})}},99526:function(e,t,n){"use strict";t.__esModule=!0,t.buildColumnConfigs=void 0;var o=n(96323),r=n(26949),a=l(n(77249)),i=l(n(50282)),c=l(n(78978));function l(e){return e&&e.__esModule?e:{"default":e}}a["default"].extend(i["default"]),a["default"].extend(c["default"]);t.buildColumnConfigs=function(e){return[{header:"",id:"actions",renderContents:function(t){var n=t.rowId;return(0,o.createFragment)([(0,o.createComponentVNode)(2,r.Button,{icon:"pencil",onClick:function(){return e.editBan(n)}},"edit"),(0,o.createComponentVNode)(2,r.Button,{icon:"trash",onClick:function(){return e.deleteBan(n)},color:"red"},"delete")],8)},basis:4.5},{header:"ID",id:"id",getValue:function(e){return e.id},renderContents:function(e){var t=e.value;return(0,o.createVNode)(1,"a",null,t,0,{href:"https://staging.goonhub.com/admin/bans/"+t})},basis:4},{header:"ckey",id:"ckey",getValue:function(e){var t;return null!=(t=e.original_ban_detail.ckey)?t:"N/A"},renderContents:function(e){var t=e.value;return(0,o.createVNode)(1,"a",null,t,0,{href:"https://staging.goonhub.com/admin/players/"+t})},basis:10,grow:1},{header:"Duration",id:"duration",getValue:function(e){if(null===e.expires_at)return e.requires_appeal?"Until Appeal":"Permanent";var t=(0,a["default"])(e.created_at),n=(0,a["default"])(e.expires_at);return a["default"].duration(t.diff(n)).humanize()},getValueTooltip:function(e){var t=(0,a["default"])(e.created_at),n=[(0,o.createFragment)(t.format("[Banned ] YYYY-MM-DD HH:mm [UTC]\n"),0)];if(null===e.expires_at)n.push((0,o.createVNode)(1,"strong",null,"Permanent",16));else{var r=(0,a["default"])(e.expires_at);n.push((0,o.createFragment)(r.format("[Expires] YYYY-MM-DD HH:mm [UTC]"),0))}return null!==e.deleted_at&&n.push((0,o.createFragment)((0,a["default"])(e.deleted_at).format("\n[Deleted] YYYY-MM-DD HH:mm [UTC]"),0)),(0,o.createVNode)(1,"pre",null,n,0)},renderContents:function(e){return null!==e.data.deleted_at?(0,o.createVNode)(1,"div","ExpiredBan BanText",e.value,0):(0,o.createVNode)(1,"div","CurrentBan BanText",e.value,0)},basis:7.5},{header:"Server",id:"server",getValue:function(e){var t;return null!=(t=e.server_id)?t:"All"},basis:4},{header:"Admin",id:"admin",getValue:function(e){var t;return null!=(t=e.game_admin)?t:"N/A"},renderContents:function(e){var t=e.value;return(0,o.createVNode)(1,"a","NoColor",t.name,0,{href:"https://staging.goonhub.com/admin/game-admins/"+t.id})},getValueTooltip:function(e){return null===e.game_admin?"N/A":e.game_admin.ckey+" ("+e.game_admin_id+")"},basis:6.5},{header:"Reason",id:"reason",getValue:function(e){return e.reason},basis:10,grow:10},{header:"CID",id:"cid",getValue:function(e){var t;return null!=(t=e.original_ban_detail.comp_id)?t:"N/A"},basis:7},{header:"IP",id:"ip",getValue:function(e){var t;return null!=(t=e.original_ban_detail.ip)?t:"N/A"},basis:9}]}},62983:function(e,t,n){"use strict";t.__esModule=!0,t.JobBanList=void 0;var o=n(96323),r=n(26949);t.JobBanList=function(e,t){return(0,o.createComponentVNode)(2,r.Section,{children:"Not yet implemented"})}},49641:function(){},13401:function(e,t,n){"use strict";t.__esModule=!0,t.BanPanel=void 0;var o=n(96323),r=n(26949),a=n(2381),i=n(95620),c=n(62983),l=n(92600),u=n(34747);t.BanPanel=function(e,t){var n=(0,u.useBanPanelBackend)(t),d=n.action,s=n.data,p=s.current_tab;return(0,o.createComponentVNode)(2,a.Window,{width:1100,height:640,title:"Ban Panel",className:"BanPanel",children:(0,o.createComponentVNode)(2,a.Window.Content,{children:(0,o.createComponentVNode)(2,r.Stack,{fill:!0,vertical:!0,children:[(0,o.createComponentVNode)(2,r.Stack.Item,{children:(0,o.createComponentVNode)(2,r.Tabs,{children:[(0,o.createComponentVNode)(2,r.Tabs.Tab,{onClick:function(){return d.setTab(l.BanPanelTab.BanList)},selected:p===l.BanPanelTab.BanList,children:"Ban List"}),(0,o.createComponentVNode)(2,r.Tabs.Tab,{onClick:function(){return d.setTab(l.BanPanelTab.JobBanList)},selected:p===l.BanPanelTab.JobBanList,children:"Job Ban List"})]})}),p===l.BanPanelTab.BanList&&(0,o.createComponentVNode)(2,i.BanList,{data:s}),p===l.BanPanelTab.JobBanList&&(0,o.createComponentVNode)(2,c.JobBanList)]})})})}},92600:function(e,t){"use strict";var n,o,r;t.__esModule=!0,t.BanPanelSearchFilter=t.BanPanelAction=t.BanPanelTab=void 0,t.BanPanelTab=n,function(e){e.BanList="ban_list",e.JobBanList="job_ban_list"}(n||(t.BanPanelTab=n={})),t.BanPanelAction=o,function(e){e.SearchBans="ban_search",e.NavigatePreviousPage="page_prev",e.NavigateNextPage="page_next",e.SetPerPage="set_perpage",e.SetTab="set_tab",e.EditBan="edit_ban",e.DeleteBan="delete_ban"}(o||(t.BanPanelAction=o={})),t.BanPanelSearchFilter=r,function(e){e.ID="id",e.ckey="ckey",e.og_ckey="original_ban_ckey",e.Server="server",e.Admin="admin_ckey",e.Reason="reason",e.CID="comp_id",e.IP_Address="ip"}(r||(t.BanPanelSearchFilter=r={}))},34747:function(e,t,n){"use strict";t.__esModule=!0,t.useBanPanelBackend=void 0;var o=n(31246),r=n(92600);t.useBanPanelBackend=function(e){var t=(0,o.useBackend)(e),n=t.act;return{action:{searchBans:function(e,t){return n(r.BanPanelAction.SearchBans,{searchText:e,searchFilter:t})},navigatePreviousPage:function(){return n(r.BanPanelAction.NavigatePreviousPage)},navigateNextPage:function(){return n(r.BanPanelAction.NavigateNextPage)},setPerPage:function(e){return n(r.BanPanelAction.SetPerPage,{amount:e})},setTab:function(e){return n(r.BanPanelAction.SetTab,{value:e})},editBan:function(e){return n(r.BanPanelAction.EditBan,{id:e})},deleteBan:function(e){return n(r.BanPanelAction.DeleteBan,{id:e})}},data:t.data}}},36443:function(e,t,n){"use strict";t.__esModule=!0,t.BarberingMenu=void 0;var o=n(96323),r=n(31246),a=n(26949),i=n(2381),c="200px";t.BarberingMenu=function(e,t){var n=(0,r.useBackend)(t).data,l=(0,r.useLocalState)(t,"searchText",""),d=l[0],s=l[1],p=n.available_styles,m=Object.keys(p);return(0,o.createComponentVNode)(2,i.Window,{width:700,height:500,title:"Barber",children:(0,o.createComponentVNode)(2,i.Window.Content,{scrollable:!0,m:0,children:(0,o.createComponentVNode)(2,a.Stack,{children:[(0,o.createComponentVNode)(2,a.Stack.Item,{width:c,children:(0,o.createComponentVNode)(2,a.Box,{position:"fixed",width:c,children:(0,o.createComponentVNode)(2,f,{onSearchTextInput:s})})}),(0,o.createComponentVNode)(2,a.Stack.Item,{grow:!0,children:(0,o.createComponentVNode)(2,u,{searchText:d,allHairNames:m,allHairStyles:p})})]})})})};var l=function(e){var t=e.onInput;return(0,o.createComponentVNode)(2,a.Stack,{children:[(0,o.createComponentVNode)(2,a.Stack.Item,{children:(0,o.createComponentVNode)(2,a.Icon,{name:"magnifying-glass"})}),(0,o.createComponentVNode)(2,a.Stack.Item,{grow:!0,children:(0,o.createComponentVNode)(2,a.Input,{style:{width:"100%"},onInput:function(e,n){return t(n)},placeholder:"Search..."})})]})},u=function(e){var t=e.searchText,n=e.allHairNames,r=e.allHairStyles,i=t.toLowerCase(),c=n.filter((function(e){return e.toLowerCase().includes(i)}));return(0,o.createComponentVNode)(2,a.Stack,{wrap:!0,children:c.map((function(e){return(0,o.createComponentVNode)(2,a.Stack.Item,{m:1,children:(0,o.createComponentVNode)(2,p,{hairStyle:r[e],hairName:e})},r[e].id)}))})},d=function(e,t){var n=(0,r.useBackend)(t).act;return(0,o.createComponentVNode)(2,a.Button,{fluid:!0,icon:"cut",color:"red",bold:!0,onClick:function(){return n("do_hair",{style_id:null})},children:"Create Wig"})},s=function(e,t){var n=(0,r.useBackend)(t).act;return(0,o.createComponentVNode)(2,a.Button,{fluid:!0,icon:"rotate-left",color:"red",onClick:function(){return n("update_preview",{action:"reset"})},children:"Reset"})},p=function(e,t){var n=(0,r.useBackend)(t).act,i=e.hairStyle,c=e.hairName;return(0,o.createComponentVNode)(2,a.Section,{width:"140px",align:"center",children:(0,o.createComponentVNode)(2,a.Stack,{vertical:!0,children:[(0,o.createComponentVNode)(2,a.Stack.Item,{children:(0,o.createComponentVNode)(2,a.Image,{pixelated:!0,width:"60px",height:"100px",src:""+i.hair_icon})}),(0,o.createComponentVNode)(2,a.Stack.Item,{children:c}),(0,o.createComponentVNode)(2,a.Stack.Item,{children:[(0,o.createComponentVNode)(2,a.Button,{color:"blue",icon:"cut",onClick:function(){return n("do_hair",{style_id:i.hair_id})},children:"Cut"}),(0,o.createComponentVNode)(2,a.Button,{color:"blue",icon:"eye",onClick:function(){return n("update_preview",{action:"new_hair",style_id:i.hair_id})},children:"Preview"})]})]})})},m=function(e,t){var n=(0,r.useBackend)(t).act;return(0,o.createComponentVNode)(2,a.Stack,{justify:"space-around",children:[(0,o.createComponentVNode)(2,a.Stack.Item,{align:"center",children:(0,o.createComponentVNode)(2,a.Button,{icon:"rotate-left",onClick:function(){return n("update_preview",{action:"change_direction",direction:-90})}})}),(0,o.createComponentVNode)(2,a.Stack.Item,{align:"center",children:(0,o.createComponentVNode)(2,a.Button,{icon:"rotate-right",onClick:function(){return n("update_preview",{action:"change_direction",direction:90})}})})]})},f=function(e,t){var n=(0,r.useBackend)(t).data.preview,i=e.onSearchTextInput;return(0,o.createComponentVNode)(2,a.Section,{children:(0,o.createComponentVNode)(2,a.Stack,{vertical:!0,children:[(0,o.createComponentVNode)(2,a.Stack.Item,{children:(0,o.createComponentVNode)(2,l,{onInput:i})}),(0,o.createComponentVNode)(2,a.Stack.Divider),(0,o.createComponentVNode)(2,a.Stack.Item,{children:(0,o.createComponentVNode)(2,C)}),(0,o.createComponentVNode)(2,a.Stack.Divider,{mt:0}),(0,o.createComponentVNode)(2,a.Stack.Item,{align:"center",style:{width:"100%"},children:[(0,o.createComponentVNode)(2,a.Box,{style:{width:"100%"},align:"center",children:(0,o.createComponentVNode)(2,a.ByondUi,{params:{id:n,type:"map"},style:{width:"80px",height:"160px"}})}),(0,o.createComponentVNode)(2,s)]}),(0,o.createComponentVNode)(2,a.Stack.Divider),(0,o.createComponentVNode)(2,a.Stack.Item,{children:(0,o.createComponentVNode)(2,m)}),(0,o.createComponentVNode)(2,a.Stack.Divider),(0,o.createComponentVNode)(2,a.Stack.Item,{children:(0,o.createComponentVNode)(2,d)})]})})},h=function(e,t){var n=e.children,i=e.hairPortion,c=e.icon,l=(0,r.useBackend)(t),u=l.act,d=l.data,s=d.current_hair_style,p=d.selected_hair_portion,m=(0,o.createComponentVNode)(2,a.Box,{align:"right",children:s[i]});return(0,o.createComponentVNode)(2,a.Tabs.Tab,{icon:c,rightSlot:m,selected:p===i,onClick:function(){return u("change_hair_portion",{new_portion:i})},children:n})},C=function(){return(0,o.createComponentVNode)(2,a.Tabs,{vertical:!0,mb:0,children:[(0,o.createComponentVNode)(2,h,{hairPortion:"top",icon:"arrows-up-to-line",children:"Top"}),(0,o.createComponentVNode)(2,h,{hairPortion:"middle",icon:"arrow-down-up-across-line",children:"Middle"}),(0,o.createComponentVNode)(2,h,{hairPortion:"bottom",icon:"arrows-down-to-line",children:"Bottom"})]})}},8844:function(e,t,n){"use strict";t.__esModule=!0,t.BarcodeComputer=void 0;var o=n(96323),r=n(31246),a=n(26949),i=n(2381),c=function(e,t){var n=e.title,r=e.destinations,i=e.act,c=e.amount;return(0,o.createComponentVNode)(2,a.Section,{title:n,children:r.map((function(e){var t=e.crate_tag,n=e.name;return(0,o.createComponentVNode)(2,a.Button,{width:"100%",align:"center",content:n||t,onClick:function(){return i("print",{crate_tag:t,amount:c})}},t)}))})},l=function(e,t){if(e.card){var n=e.card,r=e.act;return(0,o.createComponentVNode)(2,a.Button,{icon:"eject",content:n.name+" ("+n.role+")",tooltip:"Clear scanned card",tooltipPosition:"bottom-end",onClick:function(){r("reset_id")}})}};t.BarcodeComputer=function(e,t){var n=(0,r.useBackend)(t),u=n.act,d=n.data,s=d.sections,p=d.card,m=(0,r.useLocalState)(t,"amount",1),f=m[0],h=m[1];return(0,o.createComponentVNode)(2,i.Window,{title:"Barcode computer",width:600,height:450,children:(0,o.createComponentVNode)(2,i.Window.Content,{scrollable:!0,children:[(0,o.createComponentVNode)(2,a.Stack,{children:[(0,o.createComponentVNode)(2,a.Stack.Item,{grow:1,children:(0,o.createComponentVNode)(2,a.Section,{title:"Amount to print",fill:!0,children:(0,o.createComponentVNode)(2,a.Box,{align:"center",children:(0,o.createComponentVNode)(2,a.NumberInput,{value:f,minValue:1,maxValue:5,stepPixelSize:15,unit:"Barcodes",onDrag:function(e,t){return h(t)}})})})}),(0,o.createComponentVNode)(2,a.Stack.Item,{grow:1,children:(0,o.createComponentVNode)(2,a.Section,{title:"Scanned ID card",fill:!0,children:(0,o.createComponentVNode)(2,a.Box,{align:"center",children:[(0,o.createComponentVNode)(2,l,{card:p,act:u}),(0,o.createVNode)(1,"br"),p?"Account balance: "+p.balance+"\u2abd":null]})})})]}),(0,o.createVNode)(1,"br"),(0,o.createComponentVNode)(2,a.Stack,{children:s.map((function(e){var t=e.title,n=e.destinations;return(0,o.createComponentVNode)(2,a.Stack.Item,{width:"33%",children:(0,o.createComponentVNode)(2,c,{title:t,destinations:n,act:u,amount:f})},t)}))})]})})}},45027:function(e,t,n){"use strict";t.__esModule=!0,t.BioEffectManager=void 0;var o=n(96323),r=n(31246),a=n(26949),i=n(2381),c=function(e){var t=e.checked,n=e.onClick,r=e.id;return(0,o.createComponentVNode)(2,a.Table.Cell,{py:"0.5em",collapsing:!0,children:(0,o.createComponentVNode)(2,a.Box,{align:"center",children:(0,o.createComponentVNode)(2,a.Button.Checkbox,{checked:t,width:"5em",onClick:function(){return n(r)}})})})},l=function(e){var t=e.number,n=e.unit,r=e.onChange,i=e.id;return(0,o.createComponentVNode)(2,a.Table.Cell,{py:"0.5em",collapsing:!0,children:(0,o.createComponentVNode)(2,a.Box,{align:"center",children:(0,o.createComponentVNode)(2,a.NumberInput,{minValue:0,unit:n,width:"5em",value:t,onChange:function(e,t){return r(i,t)}})})})},u=function(e){var t=e.children;return(0,o.createComponentVNode)(2,a.Table.Cell,{py:"0.5em",textAlign:"center",children:t})},d=function(){return(0,o.createComponentVNode)(2,a.Table.Row,{bold:!0,children:[(0,o.createComponentVNode)(2,u,{children:"Name"}),(0,o.createComponentVNode)(2,u,{children:"ID"}),(0,o.createComponentVNode)(2,u,{children:"Stable"}),(0,o.createComponentVNode)(2,u,{children:"Reinforced"}),(0,o.createComponentVNode)(2,u,{children:"Boosted"}),(0,o.createComponentVNode)(2,u,{children:"Synced"}),(0,o.createComponentVNode)(2,u,{children:"Cooldown"}),(0,o.createComponentVNode)(2,u,{children:"Actions"})]})};t.BioEffectManager=function(e,t){var n=(0,r.useBackend)(t),u=n.act,s=n.data,p=s.bioEffects,m=s.stability,f=s.target_name,h=function(e,t){return u("updateCooldown",{id:e,value:t})},C=function(e){return u("toggleBoosted",{id:e})},g=function(e){return u("toggleReinforced",{id:e})},N=function(e){return u("toggleStabilized",{id:e})},v=function(e){return u("toggleSynced",{id:e})};return(0,o.createComponentVNode)(2,i.Window,{title:"Bioeffect Manager",width:"750",height:"300",children:(0,o.createComponentVNode)(2,i.Window.Content,{children:(0,o.createComponentVNode)(2,a.Section,{title:"Bioeffects of "+f,scrollable:!0,fill:!0,buttons:(0,o.createFragment)([(0,o.createTextVNode)("Stability:"),(0,o.createComponentVNode)(2,a.NumberInput,{minValue:0,width:"5em",placeholder:100,value:m,onChange:function(e,t){return function(e){return u("updateStability",{value:e})}(t)}}),(0,o.createComponentVNode)(2,a.Button,{icon:"plus",onClick:function(){return u("addBioEffect")},children:"Add Bioeffect"})],0),children:(0,o.createComponentVNode)(2,a.Table,{children:[(0,o.createComponentVNode)(2,d),(null==p?void 0:p.length)>0?p.map((function(e){return(0,o.createComponentVNode)(2,a.Table.Row,{children:[(0,o.createComponentVNode)(2,a.Table.Cell,{py:"0.5em",children:e.name}),(0,o.createComponentVNode)(2,a.Table.Cell,{py:"0.5em",collapsing:!0,children:e.id}),(0,o.createComponentVNode)(2,c,{checked:e.stabilized,onClick:N,id:e.id}),(0,o.createComponentVNode)(2,c,{checked:e.reinforced,onClick:g,id:e.id}),(0,o.createComponentVNode)(2,c,{checked:e.boosted,onClick:C,id:e.id}),(0,o.createComponentVNode)(2,c,{checked:e.synced,onClick:v,id:e.id}),(0,o.createComponentVNode)(2,l,{number:e.cooldown,unit:"ds",onChange:h,id:e.id}),(0,o.createComponentVNode)(2,a.Table.Cell,{py:"0.5em",collapsing:!0,children:(0,o.createComponentVNode)(2,a.Box,{direction:"row",align:"center",nowrap:!0,children:[(0,o.createComponentVNode)(2,a.Button,{tooltip:"View Variables",tooltipPosition:"top",align:"left",icon:"gear",onClick:function(){return t=e.id,u("manageBioEffect",{id:t});var t}}),(0,o.createComponentVNode)(2,a.Button.Confirm,{tooltip:"Remove",tooltipPosition:"top",align:"left",icon:"trash",color:"bad",onClick:function(){return t=e.id,u("deleteBioEffect",{id:t});var t}})]})})]},e.id)})):null]})})})})}},34116:function(e,t,n){"use strict";t.__esModule=!0,t["default"]=void 0;var o=n(96323),r=n(31246),a=n(65844),i=function(){return(0,o.createVNode)(32,"defs",null,(0,o.createVNode)(32,"marker",null,(0,o.createVNode)(32,"path",null,null,1,{d:"M0,0 L0,6 L9,3 z",fill:"orange",stroke:"none"}),2,{id:"arrow",markerWidth:"10",markerHeight:"10",refX:"0",refY:"3",orient:"auto",markerUnits:"strokeWidth"}),2)},c=function(e,t){var n=(0,r.useBackend)(t).data,c=(0,a.useStates)(t),l=c.mouseCoords,u=c.tileSize,d=c.isFlipped,s=n.boardInfo,p=s.width,m=s.height,f=n.currentUser;if(!f||!f.selected)return null;var h=n.pieces[f.selected];if(!h)return null;var C=h.x*u.width+u.width/2,g=h.y*u.height+u.height/2,N=l.x-20,v=l.y-54,b=Math.floor(N/u.width)*u.width,V=Math.floor(v/u.height)*u.height,y=b+u.width/2,x=V+u.height/2,k=y-C,S=x-g,I=Math.sqrt(k*k+S*S),w=I>u.width/2&&I>u.height/2,_=y-40*(k/I),D=x-40*(S/I);return(0,o.createVNode)(32,"svg","boardgame__board-ggrenderer",[(0,o.createVNode)(32,"rect",null,null,1,{x:b,y:V,width:u.width,height:u.height,fill:"red","fill-opacity":"0.4"}),(0,o.createVNode)(32,"rect",null,null,1,{x:d?p*u.width-C-u.width/2:C-u.width/2,y:d?m*u.height-g-u.height/2:g-u.height/2,width:u.width,height:u.height,fill:w?"red":"none","fill-opacity":"0.4"}),w&&(0,o.createComponentVNode)(2,i),w&&(0,o.createVNode)(32,"line",null,null,1,{x1:C,y1:g,x2:_,y2:D,stroke:"orange",fill:"none","stroke-width":"3","marker-end":"url(#arrow)"})],0,{width:"100%",height:"100%"})};t["default"]=c},9149:function(e,t,n){"use strict";t.__esModule=!0,t["default"]=void 0;var o=n(96323),r=n(31246),a=n(86489),i=n(65844),c=n(26949),l=function(e,t){var n=e.pieces,l=(0,r.useBackend)(t),u=l.act,d=l.data,s=d.currentUser,p=d.users,m=(0,i.useStates)(t),f=m.isFlipped,h=m.tileSize,C=(0,i.useActions)(u),g=C.pieceSelect,N=C.pieceRemove,v=C.piecePlace,b=d.boardInfo,V=b.width,y=b.height,x=(0,a.codeRecordFromPieces)((0,a.fetchPieces)());return(0,o.createComponentVNode)(2,c.Box,{className:"boardgame__board-gprenderer",children:Object.keys(n).map((function(e,t){var r,a=n[e],i=a.x,c=a.y,l=(a.prevX,a.prevY,a.code),u=a.selected,d=x[l],m=u&&s!==u,C=i*h.width,b=c*h.height;f&&(C=(V-i-1)*h.width,b=(y-c-1)*h.height);var k=(null==(r=p[u])?void 0:r.name)||"";return(0,o.createVNode)(1,"div","boardgame__board-gprenderer-piece",[(0,o.createVNode)(1,"img",null,null,1,{style:{width:h.width+"px",height:h.width+"px"},src:d.image}),u&&(0,o.createVNode)(1,"span",null,k,0)],0,{onmousedown:function(t){0!==t.button||u||(s.palette&&v(s.ckey,i,c),s.selected&&!m&&v(s.ckey,i,c),s.selected||g(s.ckey,e)),2===t.button&&(u||N(e))},onmouseup:function(e){s.palette&&v(s.ckey,i,c),s.selected&&!m&&v(s.ckey,i,c)},style:{left:C+"px",top:b+"px",width:h.width+"px",height:h.height+"px"}},t)}))})};t["default"]=l},83702:function(e,t){"use strict";t.__esModule=!0,t.screenToBoard=void 0;t.screenToBoard=function(e,t,n){return[e/n.width,t/n.height]}},66508:function(e,t,n){"use strict";t.__esModule=!0,t.Board=void 0;var o,r=n(96323),a=n(29678),i=n(26949),c=n(31246),l=n(65844),u=(o=n(45208))&&o.__esModule?o:{"default":o};t.Board=function(e,t){var n=(0,c.useBackend)(t),o=n.act,u=n.data,s=(0,l.useActions)(o).pieceDeselect;return(0,r.createComponentVNode)(2,i.Flex,{className:"boardgame__wrapper",children:(0,r.createComponentVNode)(2,i.Box,{className:"boardgame__board-inner",children:[(0,r.createComponentVNode)(2,a.HorizontalNotations),(0,r.createComponentVNode)(2,i.Flex,{className:"boardgame__board",children:[(0,r.createComponentVNode)(2,a.VerticalNotations),(0,r.createComponentVNode)(2,i.Flex.Item,{grow:!0,onmouseleave:function(){var e;null!=(e=u.currentUser)&&e.selected&&s(u.currentUser.ckey)},children:(0,r.createComponentVNode)(2,d)}),(0,r.createComponentVNode)(2,a.VerticalNotations)]}),(0,r.createComponentVNode)(2,a.HorizontalNotations)]})})};var d=function(e,t){var n=(0,c.useBackend)(t).data.boardInfo.boardstyle;return"checkerboard"===n?(0,r.createComponentVNode)(2,u["default"],{interactable:!0}):(0,r.createVNode)(1,"div",null,[(0,r.createTextVNode)("Unknown design: "),n],0)}},84894:function(e,t,n){"use strict";t.__esModule=!0,t["default"]=void 0;var o=n(96323),r=n(31246),a=function(e,t){var n=(0,r.useBackend)(t).data,a=n.styling,i=a.tileColor1,c=a.tileColor2,l=100/n.boardInfo.width,u=100/n.boardInfo.height;return(0,o.createVNode)(32,"svg",null,[(0,o.createVNode)(32,"pattern",null,[(0,o.createVNode)(32,"rect",null,null,1,{width:l+"%",height:u+"%",fill:i}),(0,o.createVNode)(32,"rect",null,null,1,{x:l+"%",y:u+"%",width:l+"%",height:u+"%",fill:i}),(0,o.createVNode)(32,"rect",null,null,1,{x:l+"%",width:l+"%",height:u+"%",fill:c}),(0,o.createVNode)(32,"rect",null,null,1,{y:u+"%",width:l+"%",height:u+"%",fill:c})],4,{id:"checkerboardpattern",x:"0",y:"0",width:2*l+"%",height:2*u+"%",patternUnits:"userSpaceOnUse"}),(0,o.createVNode)(32,"rect",null,null,1,{width:"100%",height:"100%",fill:"url(#checkerboardpattern)"})],4,{width:"100%",height:"100%"})};t["default"]=a},45208:function(e,t,n){"use strict";t.__esModule=!0,t["default"]=t.CheckerBoard=void 0;var o=n(96323),r=n(31246),a=n(65844),i=u(n(34116)),c=u(n(9149)),l=u(n(84894));function u(e){return e&&e.__esModule?e:{"default":e}}var d=function(e,t){var n=(0,r.useBackend)(t),u=n.act,d=n.data,s=d.pieces,p=d.currentUser,m=d.styling.tileColor2,f=(0,a.useStates)(t),h=f.tileSize,C=f.isFlipped,g=f.mouseCoords,N=h.width,v=h.height,b=(0,a.useActions)(u).piecePlace,V=(0,o.createRef)(),y=function(){var e=g.x,t=g.y;if(!V)return[-1,-1];var n=V.current.getBoundingClientRect(),o=e-n.left,r=t-n.top,a=Math.floor(o/N),i=Math.floor(r/v);return C&&(a=d.boardInfo.width-a-1,i=d.boardInfo.height-i-1),[a,i]};return(0,o.createVNode)(1,"div","boardgame__board-checkerboard",[(0,o.createComponentVNode)(2,l["default"]),(0,o.createComponentVNode)(2,i["default"]),(0,o.createComponentVNode)(2,c["default"],{pieces:s})],4,{style:{"background-color":m},onMouseDown:function(e){if(0===e.button&&(p.palette||p.selected)){var t=y(),n=t[0],o=t[1];b(p.ckey,n,o)}},onMouseUp:function(e){if(0===e.button){var t=y(),n=t[0],o=t[1];if(p.palette)return void b(p.ckey,n,o);if(p.selected){var r=s[p.selected];r.x===n&&r.y===o||b(p.ckey,n,o)}}}},null,V)};t.CheckerBoard=d;var s=d;t["default"]=s},51891:function(){},25540:function(e,t,n){"use strict";t.__esModule=!0,t.BoardgameContents=void 0;var o=n(96323),r=n(66508),a=n(2381),i=n(29678),c=n(65844);t.BoardgameContents=function(e,t){var n=(0,c.useStates)(t).mouseCoordsSet;return(0,o.createComponentVNode)(2,a.Window.Content,{onMouseMove:function(e){n({x:e.clientX,y:e.clientY})},fitted:!0,className:"boardgame__window",children:[(0,o.createComponentVNode)(2,r.Board),(0,o.createComponentVNode)(2,i.Palettes)]})}},75022:function(e,t,n){"use strict";t.__esModule=!0,t.ButtonConfirm=void 0;var o=n(96323),r=n(26949),a=["icon","color","onConfirm","tooltipContent","confirmText"];function i(e,t){return i=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e},i(e,t)}var c=function(e){var t,n;function c(){for(var t,n=arguments.length,o=new Array(n),r=0;r<n;r++)o[r]=arguments[r];return(t=e.call.apply(e,[this].concat(o))||this).state={confirmState:!1},t.setConfirmState=function(e){t.setState({confirmState:e})},t}return n=e,(t=c).prototype=Object.create(n.prototype),t.prototype.constructor=t,i(t,n),c.prototype.render=function(){var e=this,t=this.props,n=t.icon,i=t.color,c=t.onConfirm,l=t.tooltipContent,u=t.confirmText,d=void 0===u?"Confirm":u,s=function(e,t){if(null==e)return{};var n,o,r={},a=Object.keys(e);for(o=0;o<a.length;o++)n=a[o],t.indexOf(n)>=0||(r[n]=e[n]);return r}(t,a);return(0,o.normalizeProps)((0,o.createComponentVNode)(2,r.Button,Object.assign({icon:n,color:this.state.confirmState?"orange":i,tooltip:this.state.confirmState?d:l,onMouseOut:function(){return e.setConfirmState(!1)},onClick:function(){e.state.confirmState?(c(),e.setConfirmState(!1)):e.setConfirmState(!0)}},s)))},c}(o.Component);t.ButtonConfirm=c},68035:function(e,t,n){"use strict";t.__esModule=!0,t.HeldPieceRenderer=void 0;var o=n(96323),r=n(26949),a=n(31246),i=n(65844),c=n(86489);t.HeldPieceRenderer=function(e,t){var n=(0,a.useBackend)(t),l=(n.act,n.data);if(!l.currentUser)return null;var u=(0,i.useStates)(t).mouseCoords,d=u.x,s=u.y,p=l.currentUser.palette||l.currentUser.selected;if(!p)return null;var m=(0,c.fetchPieces)(),f=(0,c.codeRecordFromPieces)(m)[p];return f?(0,o.createComponentVNode)(2,r.Box,{className:"boardgame__heldpiece",style:{top:s+"px",left:d+"px",width:"120px",height:"120px"},children:[(0,o.createComponentVNode)(2,r.Box,{className:"boardgame__heldpiece-inner",children:(0,o.createVNode)(1,"img",null,null,1,{src:f.image})}),(0,o.createComponentVNode)(2,r.Box,{style:{"font-size":"12px","font-weight":"bold","text-shadow":"0 0 2px black"},children:"Right click to cancel"})]}):null}},41541:function(e,t,n){"use strict";t.__esModule=!0,t.VerticalNotations=t.HorizontalNotations=void 0;var o=n(96323),r=n(31246),a=n(26949),i=n(65844);t.HorizontalNotations=function(e,t){var n=(0,r.useBackend)(t).data,c=n.boardInfo.width,l=n.styling,u=l.border,d=l.tileColor1,s=l.tileColor2,p=(0,i.useStates)(t).isFlipped,m=u||s||"black",f=d||"white",h=(0,i.generateBoardNotationLetters)(c);return p&&(h=h.reverse()),(0,o.createComponentVNode)(2,a.Flex,{style:{"background-color":m,color:f},className:"boardgame__notations boardgame__notations-horizontal",children:h.map((function(e,t){return(0,o.createComponentVNode)(2,a.Flex.Item,{grow:1,children:(0,o.createComponentVNode)(2,a.Box,{className:"boardgame__notation-letter",children:e})},t)}))})};t.VerticalNotations=function(e,t){var n=(0,r.useBackend)(t).data,c=n.boardInfo.height,l=n.styling,u=l.border,d=l.tileColor1,s=l.tileColor2,p=(0,i.useStates)(t).isFlipped,m=u||s||"black",f=d||"white",h=Array.from(Array(c).keys());return p&&(h=h.reverse()),(0,o.createComponentVNode)(2,a.Flex,{style:{"background-color":m,color:f},className:"boardgame__notations boardgame__notations-vertical",children:h.map((function(e,t){return(0,o.createComponentVNode)(2,a.Flex.Item,{className:"boardgame__notations-number",grow:1,children:p?t+1:c-t},t)}))})}},75750:function(e,t,n){"use strict";t.__esModule=!0,t.Palettes=void 0;var o=n(96323),r=n(31246),a=n(86489),i=n(65844),c=n(26949);t.Palettes=function(e,t){var n=(0,r.useBackend)(t),d=(n.act,n.data,(0,i.useStates)(t).isExpanded);return(0,o.createComponentVNode)(2,c.Box,{className:"boardgame__palettes",children:(0,a.fetchPalettes)().map((function(e,t){return(0,o.createComponentVNode)(2,c.Box,{children:[(0,o.createComponentVNode)(2,c.Box,{className:"boardgame__palettes-header",children:(0,o.createComponentVNode)(2,u,{index:t,setId:e.name})}),(0,o.createComponentVNode)(2,c.Flex,{className:"boardgame__palettes-set "+(d(t)?"":"boardgame__palettes-set-minimized"),children:e.pieces.map((function(e,t){return(0,o.createComponentVNode)(2,l,{piece:e},t)}))})]},e.name)}))})};var l=function(e,t){var n=e.piece,a=(0,r.useBackend)(t),l=a.act,u=a.data.currentUser,d=(0,i.useActions)(l).paletteSet;return(0,o.createComponentVNode)(2,c.Flex.Item,{className:"boardgame__palettes-set-piece",onMouseDown:function(){return d(u.ckey,n.code)},children:(0,o.createVNode)(1,"img",null,null,1,{src:n.image})},n.name)},u=function(e,t){var n=e.index,r=e.setId,a=(0,i.useStates)(t),l=a.isExpanded,u=a.togglePalette;return(0,o.createComponentVNode)(2,c.Button.Checkbox,{className:"boardgame__palettes-set-toggle",checked:l(n),onClick:function(){return u(n)},children:r})}},15237:function(e,t,n){"use strict";t.__esModule=!0,t["default"]=t.TitleBar=void 0;var o=n(96323),r=n(31246),a=n(26949),i=n(75022),c=n(65844),l=function(e,t){var n=(0,r.useBackend)(t).act,l=(0,c.useStates)(t),u=l.isFlipped,d=l.toggleFlip,s=l.helpModalOpen,p=l.helpModalClose,m=l.isHelpModalOpen,f=(0,c.useActions)(n),h=f.boardClear,C=f.applyGNot;return(0,o.createComponentVNode)(2,a.Box,{className:"boardgame__titlebar",children:[(0,o.createComponentVNode)(2,a.Button,{tooltip:m?"Close":"Help",color:m?"orange":"default",icon:m?"times":"question",onClick:function(){return m?p():s()}}),(0,o.createComponentVNode)(2,a.Button,{tooltip:"Flip board",color:u?"orange":"default",icon:"repeat",onClick:d}),(0,o.createComponentVNode)(2,i.ButtonConfirm,{tooltipContent:"Clear board",icon:"trash",onConfirm:function(){h()}}),(0,o.createComponentVNode)(2,i.ButtonConfirm,{tooltipContent:"Load Chess Preset",icon:"chess",onConfirm:function(){C("r,n,b,q,k,b,n,r,p,p,p,p,p,p,p,p,32,P,P,P,P,P,P,P,P,R,N,B,Q,K,B,N,R")}}),(0,o.createComponentVNode)(2,i.ButtonConfirm,{tooltipContent:"Load Draughts Preset",icon:"ring",onConfirm:function(){C("1,d,1,d,1,d,1,d,d,1,d,1,d,1,d,2,d,1,d,1,d,1,d,16,D,1,D,1,D,1,D,2,D,1,D,1,D,1,D,D,1,D,1,D,1,D")}})]})};t.TitleBar=l;var u=l;t["default"]=u},29678:function(e,t,n){"use strict";t.__esModule=!0;var o=n(41541);t.HorizontalNotations=o.HorizontalNotations,t.VerticalNotations=o.VerticalNotations;var r=n(68035);t.HeldPieceRenderer=r.HeldPieceRenderer;var a=n(75750);t.Palettes=a.Palettes},95102:function(e,t,n){"use strict";t.__esModule=!0,t["default"]=t.kit=void 0;var o,r=(o=n(86364))&&o.__esModule?o:{"default":o};var a={pieces:r["default"],palettes:[{name:"Chess",pieces:r["default"]}]};t.kit=a;var i=a;t["default"]=i},86364:function(e,t){"use strict";t.__esModule=!0,t["default"]=void 0;var n=[];n.push({code:"k",name:"King (Black)",game:"chess",image:"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+DQo8IURPQ1RZUEUgc3ZnIFBVQkxJQyAiLS8vVzNDLy9EVEQgU1ZHIDEuMS8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9HcmFwaGljcy9TVkcvMS4xL0RURC9zdmcxMS5kdGQiPg0KPHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZlcnNpb249IjEuMSIgd2lkdGg9IjQ1IiBoZWlnaHQ9IjQ1IiB2aWV3Qm94PSIwIDAgNDUgNDUiPg0KICA8ZyBzdHlsZT0iZmlsbDpub25lOyBmaWxsLW9wYWNpdHk6MTsgZmlsbC1ydWxlOmV2ZW5vZGQ7IHN0cm9rZTojMDAwMDAwOyBzdHJva2Utd2lkdGg6MS41OyBzdHJva2UtbGluZWNhcDpyb3VuZDtzdHJva2UtbGluZWpvaW46cm91bmQ7c3Ryb2tlLW1pdGVybGltaXQ6NDsgc3Ryb2tlLWRhc2hhcnJheTpub25lOyBzdHJva2Utb3BhY2l0eToxOyI+DQogICAgPHBhdGggZD0iTSAyMi41LDExLjYzIEwgMjIuNSw2IiBzdHlsZT0iZmlsbDpub25lOyBzdHJva2U6IzAwMDAwMDsgc3Ryb2tlLWxpbmVqb2luOm1pdGVyOyIgaWQ9InBhdGg2NTcwIi8+DQogICAgPHBhdGggZD0iTSAyMi41LDI1IEMgMjIuNSwyNSAyNywxNy41IDI1LjUsMTQuNSBDIDI1LjUsMTQuNSAyNC41LDEyIDIyLjUsMTIgQyAyMC41LDEyIDE5LjUsMTQuNSAxOS41LDE0LjUgQyAxOCwxNy41IDIyLjUsMjUgMjIuNSwyNSIgc3R5bGU9ImZpbGw6IzAwMDAwMDtmaWxsLW9wYWNpdHk6MTsgc3Ryb2tlLWxpbmVjYXA6YnV0dDsgc3Ryb2tlLWxpbmVqb2luOm1pdGVyOyIvPg0KICAgIDxwYXRoIGQ9Ik0gMTIuNSwzNyBDIDE4LDQwLjUgMjcsNDAuNSAzMi41LDM3IEwgMzIuNSwzMCBDIDMyLjUsMzAgNDEuNSwyNS41IDM4LjUsMTkuNSBDIDM0LjUsMTMgMjUsMTYgMjIuNSwyMy41IEwgMjIuNSwyNyBMIDIyLjUsMjMuNSBDIDIwLDE2IDEwLjUsMTMgNi41LDE5LjUgQyAzLjUsMjUuNSAxMi41LDMwIDEyLjUsMzAgTCAxMi41LDM3IiBzdHlsZT0iZmlsbDojMDAwMDAwOyBzdHJva2U6IzAwMDAwMDsiLz4NCiAgICA8cGF0aCBkPSJNIDIwLDggTCAyNSw4IiBzdHlsZT0iZmlsbDpub25lOyBzdHJva2U6IzAwMDAwMDsgc3Ryb2tlLWxpbmVqb2luOm1pdGVyOyIvPg0KICAgIDxwYXRoIGQ9Ik0gMzIsMjkuNSBDIDMyLDI5LjUgNDAuNSwyNS41IDM4LjAzLDE5Ljg1IEMgMzQuMTUsMTQgMjUsMTggMjIuNSwyNC41IEwgMjIuNSwyNi42IEwgMjIuNSwyNC41IEMgMjAsMTggMTAuODUsMTQgNi45NywxOS44NSBDIDQuNSwyNS41IDEzLDI5LjUgMTMsMjkuNSIgc3R5bGU9ImZpbGw6bm9uZTsgc3Ryb2tlOiNmZmZmZmY7Ii8+DQogICAgPHBhdGggZD0iTSAxMi41LDMwIEMgMTgsMjcgMjcsMjcgMzIuNSwzMCBNIDEyLjUsMzMuNSBDIDE4LDMwLjUgMjcsMzAuNSAzMi41LDMzLjUgTSAxMi41LDM3IEMgMTgsMzQgMjcsMzQgMzIuNSwzNyIgc3R5bGU9ImZpbGw6bm9uZTsgc3Ryb2tlOiNmZmZmZmY7Ii8+DQogIDwvZz4NCjwvc3ZnPg=="}),n.push({code:"K",name:"King (White)",game:"chess",image:"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+DQo8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgd2lkdGg9IjQ1IiBoZWlnaHQ9IjQ1IiB2aWV3Qm94PSIwIDAgNDUgNDUiPg0KICA8ZyBmaWxsPSJub25lIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIHN0cm9rZT0iIzAwMCIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIiBzdHJva2Utd2lkdGg9IjEuNSI+DQogICAgPHBhdGggc3Ryb2tlLWxpbmVqb2luPSJtaXRlciIgZD0iTTIyLjUgMTEuNjNWNk0yMCA4aDUiLz4NCiAgICA8cGF0aCBmaWxsPSIjZmZmIiBzdHJva2UtbGluZWNhcD0iYnV0dCIgc3Ryb2tlLWxpbmVqb2luPSJtaXRlciIgZD0iTTIyLjUgMjVzNC41LTcuNSAzLTEwLjVjMCAwLTEtMi41LTMtMi41cy0zIDIuNS0zIDIuNWMtMS41IDMgMyAxMC41IDMgMTAuNSIvPg0KICAgIDxwYXRoIGZpbGw9IiNmZmYiIGQ9Ik0xMi41IDM3YzUuNSAzLjUgMTQuNSAzLjUgMjAgMHYtN3M5LTQuNSA2LTEwLjVjLTQtNi41LTEzLjUtMy41LTE2IDRWMjd2LTMuNWMtMi41LTcuNS0xMi0xMC41LTE2LTQtMyA2IDYgMTAuNSA2IDEwLjV2NyIvPg0KICAgIDxwYXRoIGQ9Ik0xMi41IDMwYzUuNS0zIDE0LjUtMyAyMCAwbS0yMCAzLjVjNS41LTMgMTQuNS0zIDIwIDBtLTIwIDMuNWM1LjUtMyAxNC41LTMgMjAgMCIvPg0KICA8L2c+DQo8L3N2Zz4="}),n.push({code:"q",name:"Queen (Black)",game:"chess",image:"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+DQo8IURPQ1RZUEUgc3ZnIFBVQkxJQyAiLS8vVzNDLy9EVEQgU1ZHIDEuMS8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9HcmFwaGljcy9TVkcvMS4xL0RURC9zdmcxMS5kdGQiPg0KPHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZlcnNpb249IjEuMSIgd2lkdGg9IjQ1IiBoZWlnaHQ9IjQ1IiB2aWV3Qm94PSIwIDAgNDUgNDUiPg0KICA8ZyBzdHlsZT0iZmlsbDojMDAwMDAwO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDoxLjU7IHN0cm9rZS1saW5lY2FwOnJvdW5kO3N0cm9rZS1saW5lam9pbjpyb3VuZCI+DQoNCiAgICA8cGF0aCBkPSJNIDksMjYgQyAxNy41LDI0LjUgMzAsMjQuNSAzNiwyNiBMIDM4LjUsMTMuNSBMIDMxLDI1IEwgMzAuNywxMC45IEwgMjUuNSwyNC41IEwgMjIuNSwxMCBMIDE5LjUsMjQuNSBMIDE0LjMsMTAuOSBMIDE0LDI1IEwgNi41LDEzLjUgTCA5LDI2IHoiIHN0eWxlPSJzdHJva2UtbGluZWNhcDpidXR0O2ZpbGw6IzAwMDAwMCIvPg0KICAgIDxwYXRoIGQ9Im0gOSwyNiBjIDAsMiAxLjUsMiAyLjUsNCAxLDEuNSAxLDEgMC41LDMuNSAtMS41LDEgLTEsMi41IC0xLDIuNSAtMS41LDEuNSAwLDIuNSAwLDIuNSA2LjUsMSAxNi41LDEgMjMsMCAwLDAgMS41LC0xIDAsLTIuNSAwLDAgMC41LC0xLjUgLTEsLTIuNSAtMC41LC0yLjUgLTAuNSwtMiAwLjUsLTMuNSAxLC0yIDIuNSwtMiAyLjUsLTQgLTguNSwtMS41IC0xOC41LC0xLjUgLTI3LDAgeiIvPg0KICAgIDxwYXRoIGQ9Ik0gMTEuNSwzMCBDIDE1LDI5IDMwLDI5IDMzLjUsMzAiLz4NCiAgICA8cGF0aCBkPSJtIDEyLDMzLjUgYyA2LC0xIDE1LC0xIDIxLDAiLz4NCiAgICA8Y2lyY2xlIGN4PSI2IiBjeT0iMTIiIHI9IjIiLz4NCiAgICA8Y2lyY2xlIGN4PSIxNCIgY3k9IjkiIHI9IjIiLz4NCiAgICA8Y2lyY2xlIGN4PSIyMi41IiBjeT0iOCIgcj0iMiIvPg0KICAgIDxjaXJjbGUgY3g9IjMxIiBjeT0iOSIgcj0iMiIvPg0KICAgIDxjaXJjbGUgY3g9IjM5IiBjeT0iMTIiIHI9IjIiLz4NCiAgICA8cGF0aCBkPSJNIDExLDM4LjUgQSAzNSwzNSAxIDAgMCAzNCwzOC41IiBzdHlsZT0iZmlsbDpub25lOyBzdHJva2U6IzAwMDAwMDtzdHJva2UtbGluZWNhcDpidXR0OyIvPg0KICAgIDxnIHN0eWxlPSJmaWxsOm5vbmU7IHN0cm9rZTojZmZmZmZmOyI+DQogICAgICA8cGF0aCBkPSJNIDExLDI5IEEgMzUsMzUgMSAwIDEgMzQsMjkiLz4NCiAgICAgIDxwYXRoIGQ9Ik0gMTIuNSwzMS41IEwgMzIuNSwzMS41Ii8+DQogICAgICA8cGF0aCBkPSJNIDExLjUsMzQuNSBBIDM1LDM1IDEgMCAwIDMzLjUsMzQuNSIvPg0KICAgICAgPHBhdGggZD0iTSAxMC41LDM3LjUgQSAzNSwzNSAxIDAgMCAzNC41LDM3LjUiLz4NCiAgICA8L2c+DQogIDwvZz4NCjwvc3ZnPg=="}),n.push({code:"Q",name:"Queen (White)",game:"chess",image:"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+DQo8IURPQ1RZUEUgc3ZnIFBVQkxJQyAiLS8vVzNDLy9EVEQgU1ZHIDEuMS8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9HcmFwaGljcy9TVkcvMS4xL0RURC9zdmcxMS5kdGQiPg0KPHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZlcnNpb249IjEuMSIgd2lkdGg9IjQ1IiBoZWlnaHQ9IjQ1IiB2aWV3Qm94PSIwIDAgNDUgNDUiPg0KICA8ZyBzdHlsZT0iZmlsbDojZmZmZmZmO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDoxLjU7c3Ryb2tlLWxpbmVqb2luOnJvdW5kIj4NCiAgICA8cGF0aCBkPSJNIDksMjYgQyAxNy41LDI0LjUgMzAsMjQuNSAzNiwyNiBMIDM4LjUsMTMuNSBMIDMxLDI1IEwgMzAuNywxMC45IEwgMjUuNSwyNC41IEwgMjIuNSwxMCBMIDE5LjUsMjQuNSBMIDE0LjMsMTAuOSBMIDE0LDI1IEwgNi41LDEzLjUgTCA5LDI2IHoiLz4NCiAgICA8cGF0aCBkPSJNIDksMjYgQyA5LDI4IDEwLjUsMjggMTEuNSwzMCBDIDEyLjUsMzEuNSAxMi41LDMxIDEyLDMzLjUgQyAxMC41LDM0LjUgMTEsMzYgMTEsMzYgQyA5LjUsMzcuNSAxMSwzOC41IDExLDM4LjUgQyAxNy41LDM5LjUgMjcuNSwzOS41IDM0LDM4LjUgQyAzNCwzOC41IDM1LjUsMzcuNSAzNCwzNiBDIDM0LDM2IDM0LjUsMzQuNSAzMywzMy41IEMgMzIuNSwzMSAzMi41LDMxLjUgMzMuNSwzMCBDIDM0LjUsMjggMzYsMjggMzYsMjYgQyAyNy41LDI0LjUgMTcuNSwyNC41IDksMjYgeiIvPg0KICAgIDxwYXRoIGQ9Ik0gMTEuNSwzMCBDIDE1LDI5IDMwLDI5IDMzLjUsMzAiIHN0eWxlPSJmaWxsOm5vbmUiLz4NCiAgICA8cGF0aCBkPSJNIDEyLDMzLjUgQyAxOCwzMi41IDI3LDMyLjUgMzMsMzMuNSIgc3R5bGU9ImZpbGw6bm9uZSIvPg0KICAgIDxjaXJjbGUgY3g9IjYiIGN5PSIxMiIgcj0iMiIvPg0KICAgIDxjaXJjbGUgY3g9IjE0IiBjeT0iOSIgcj0iMiIvPg0KICAgIDxjaXJjbGUgY3g9IjIyLjUiIGN5PSI4IiByPSIyIi8+DQogICAgPGNpcmNsZSBjeD0iMzEiIGN5PSI5IiByPSIyIi8+DQogICAgPGNpcmNsZSBjeD0iMzkiIGN5PSIxMiIgcj0iMiIvPg0KICA8L2c+DQo8L3N2Zz4="}),n.push({code:"r",name:"Rook (Black)",game:"chess",image:"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+DQo8IURPQ1RZUEUgc3ZnIFBVQkxJQyAiLS8vVzNDLy9EVEQgU1ZHIDEuMS8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9HcmFwaGljcy9TVkcvMS4xL0RURC9zdmcxMS5kdGQiPg0KPHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZlcnNpb249IjEuMSIgd2lkdGg9IjQ1IiBoZWlnaHQ9IjQ1IiB2aWV3Qm94PSIwIDAgNDUgNDUiPg0KICA8ZyBzdHlsZT0ib3BhY2l0eToxOyBmaWxsOiMwMDAwMDA7IGZpbGwtb3BhY2l0eToxOyBmaWxsLXJ1bGU6ZXZlbm9kZDsgc3Ryb2tlOiMwMDAwMDA7IHN0cm9rZS13aWR0aDoxLjU7IHN0cm9rZS1saW5lY2FwOnJvdW5kO3N0cm9rZS1saW5lam9pbjpyb3VuZDtzdHJva2UtbWl0ZXJsaW1pdDo0OyBzdHJva2UtZGFzaGFycmF5Om5vbmU7IHN0cm9rZS1vcGFjaXR5OjE7IiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgwLDAuMykiPg0KICAgIDxwYXRoIGQ9Ik0gOSwzOSBMIDM2LDM5IEwgMzYsMzYgTCA5LDM2IEwgOSwzOSB6ICIgc3R5bGU9InN0cm9rZS1saW5lY2FwOmJ1dHQ7Ii8+DQogICAgPHBhdGggZD0iTSAxMi41LDMyIEwgMTQsMjkuNSBMIDMxLDI5LjUgTCAzMi41LDMyIEwgMTIuNSwzMiB6ICIgc3R5bGU9InN0cm9rZS1saW5lY2FwOmJ1dHQ7Ii8+DQogICAgPHBhdGggZD0iTSAxMiwzNiBMIDEyLDMyIEwgMzMsMzIgTCAzMywzNiBMIDEyLDM2IHogIiBzdHlsZT0ic3Ryb2tlLWxpbmVjYXA6YnV0dDsiLz4NCiAgICA8cGF0aCBkPSJNIDE0LDI5LjUgTCAxNCwxNi41IEwgMzEsMTYuNSBMIDMxLDI5LjUgTCAxNCwyOS41IHogIiBzdHlsZT0ic3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7Ii8+DQogICAgPHBhdGggZD0iTSAxNCwxNi41IEwgMTEsMTQgTCAzNCwxNCBMIDMxLDE2LjUgTCAxNCwxNi41IHogIiBzdHlsZT0ic3Ryb2tlLWxpbmVjYXA6YnV0dDsiLz4NCiAgICA8cGF0aCBkPSJNIDExLDE0IEwgMTEsOSBMIDE1LDkgTCAxNSwxMSBMIDIwLDExIEwgMjAsOSBMIDI1LDkgTCAyNSwxMSBMIDMwLDExIEwgMzAsOSBMIDM0LDkgTCAzNCwxNCBMIDExLDE0IHogIiBzdHlsZT0ic3Ryb2tlLWxpbmVjYXA6YnV0dDsiLz4NCiAgICA8cGF0aCBkPSJNIDEyLDM1LjUgTCAzMywzNS41IEwgMzMsMzUuNSIgc3R5bGU9ImZpbGw6bm9uZTsgc3Ryb2tlOiNmZmZmZmY7IHN0cm9rZS13aWR0aDoxOyBzdHJva2UtbGluZWpvaW46bWl0ZXI7Ii8+DQogICAgPHBhdGggZD0iTSAxMywzMS41IEwgMzIsMzEuNSIgc3R5bGU9ImZpbGw6bm9uZTsgc3Ryb2tlOiNmZmZmZmY7IHN0cm9rZS13aWR0aDoxOyBzdHJva2UtbGluZWpvaW46bWl0ZXI7Ii8+DQogICAgPHBhdGggZD0iTSAxNCwyOS41IEwgMzEsMjkuNSIgc3R5bGU9ImZpbGw6bm9uZTsgc3Ryb2tlOiNmZmZmZmY7IHN0cm9rZS13aWR0aDoxOyBzdHJva2UtbGluZWpvaW46bWl0ZXI7Ii8+DQogICAgPHBhdGggZD0iTSAxNCwxNi41IEwgMzEsMTYuNSIgc3R5bGU9ImZpbGw6bm9uZTsgc3Ryb2tlOiNmZmZmZmY7IHN0cm9rZS13aWR0aDoxOyBzdHJva2UtbGluZWpvaW46bWl0ZXI7Ii8+DQogICAgPHBhdGggZD0iTSAxMSwxNCBMIDM0LDE0IiBzdHlsZT0iZmlsbDpub25lOyBzdHJva2U6I2ZmZmZmZjsgc3Ryb2tlLXdpZHRoOjE7IHN0cm9rZS1saW5lam9pbjptaXRlcjsiLz4NCiAgPC9nPg0KPC9zdmc+"}),n.push({code:"R",name:"Rook (White)",game:"chess",image:"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+DQo8IURPQ1RZUEUgc3ZnIFBVQkxJQyAiLS8vVzNDLy9EVEQgU1ZHIDEuMS8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9HcmFwaGljcy9TVkcvMS4xL0RURC9zdmcxMS5kdGQiPg0KPHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZlcnNpb249IjEuMSIgd2lkdGg9IjQ1IiBoZWlnaHQ9IjQ1IiB2aWV3Qm94PSIwIDAgNDUgNDUiPg0KICA8ZyBzdHlsZT0ib3BhY2l0eToxOyBmaWxsOiNmZmZmZmY7IGZpbGwtb3BhY2l0eToxOyBmaWxsLXJ1bGU6ZXZlbm9kZDsgc3Ryb2tlOiMwMDAwMDA7IHN0cm9rZS13aWR0aDoxLjU7IHN0cm9rZS1saW5lY2FwOnJvdW5kO3N0cm9rZS1saW5lam9pbjpyb3VuZDtzdHJva2UtbWl0ZXJsaW1pdDo0OyBzdHJva2UtZGFzaGFycmF5Om5vbmU7IHN0cm9rZS1vcGFjaXR5OjE7IiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgwLDAuMykiPg0KICAgIDxwYXRoIGQ9Ik0gOSwzOSBMIDM2LDM5IEwgMzYsMzYgTCA5LDM2IEwgOSwzOSB6ICIgc3R5bGU9InN0cm9rZS1saW5lY2FwOmJ1dHQ7Ii8+DQogICAgPHBhdGggZD0iTSAxMiwzNiBMIDEyLDMyIEwgMzMsMzIgTCAzMywzNiBMIDEyLDM2IHogIiBzdHlsZT0ic3Ryb2tlLWxpbmVjYXA6YnV0dDsiLz4NCiAgICA8cGF0aCBkPSJNIDExLDE0IEwgMTEsOSBMIDE1LDkgTCAxNSwxMSBMIDIwLDExIEwgMjAsOSBMIDI1LDkgTCAyNSwxMSBMIDMwLDExIEwgMzAsOSBMIDM0LDkgTCAzNCwxNCIgc3R5bGU9InN0cm9rZS1saW5lY2FwOmJ1dHQ7Ii8+DQogICAgPHBhdGggZD0iTSAzNCwxNCBMIDMxLDE3IEwgMTQsMTcgTCAxMSwxNCIvPg0KICAgIDxwYXRoIGQ9Ik0gMzEsMTcgTCAzMSwyOS41IEwgMTQsMjkuNSBMIDE0LDE3IiBzdHlsZT0ic3Ryb2tlLWxpbmVjYXA6YnV0dDsgc3Ryb2tlLWxpbmVqb2luOm1pdGVyOyIvPg0KICAgIDxwYXRoIGQ9Ik0gMzEsMjkuNSBMIDMyLjUsMzIgTCAxMi41LDMyIEwgMTQsMjkuNSIvPg0KICAgIDxwYXRoIGQ9Ik0gMTEsMTQgTCAzNCwxNCIgc3R5bGU9ImZpbGw6bm9uZTsgc3Ryb2tlOiMwMDAwMDA7IHN0cm9rZS1saW5lam9pbjptaXRlcjsiLz4NCiAgPC9nPg0KPC9zdmc+"}),n.push({code:"b",name:"Bishop (Black)",game:"chess",image:"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+DQo8IURPQ1RZUEUgc3ZnIFBVQkxJQyAiLS8vVzNDLy9EVEQgU1ZHIDEuMS8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9HcmFwaGljcy9TVkcvMS4xL0RURC9zdmcxMS5kdGQiPg0KPHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZlcnNpb249IjEuMSIgd2lkdGg9IjQ1IiBoZWlnaHQ9IjQ1IiB2aWV3Qm94PSIwIDAgNDUgNDUiPg0KICA8ZyBzdHlsZT0ib3BhY2l0eToxOyBmaWxsOm5vbmU7IGZpbGwtcnVsZTpldmVub2RkOyBmaWxsLW9wYWNpdHk6MTsgc3Ryb2tlOiMwMDAwMDA7IHN0cm9rZS13aWR0aDoxLjU7IHN0cm9rZS1saW5lY2FwOnJvdW5kOyBzdHJva2UtbGluZWpvaW46cm91bmQ7IHN0cm9rZS1taXRlcmxpbWl0OjQ7IHN0cm9rZS1kYXNoYXJyYXk6bm9uZTsgc3Ryb2tlLW9wYWNpdHk6MTsiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDAsMC42KSI+DQogICAgPGcgc3R5bGU9ImZpbGw6IzAwMDAwMDsgc3Ryb2tlOiMwMDAwMDA7IHN0cm9rZS1saW5lY2FwOmJ1dHQ7Ij4NCiAgICAgIDxwYXRoIGQ9Ik0gOSwzNiBDIDEyLjM5LDM1LjAzIDE5LjExLDM2LjQzIDIyLjUsMzQgQyAyNS44OSwzNi40MyAzMi42MSwzNS4wMyAzNiwzNiBDIDM2LDM2IDM3LjY1LDM2LjU0IDM5LDM4IEMgMzguMzIsMzguOTcgMzcuMzUsMzguOTkgMzYsMzguNSBDIDMyLjYxLDM3LjUzIDI1Ljg5LDM4Ljk2IDIyLjUsMzcuNSBDIDE5LjExLDM4Ljk2IDEyLjM5LDM3LjUzIDksMzguNSBDIDcuNjUsMzguOTkgNi42OCwzOC45NyA2LDM4IEMgNy4zNSwzNi41NCA5LDM2IDksMzYgeiIvPg0KICAgICAgPHBhdGggZD0iTSAxNSwzMiBDIDE3LjUsMzQuNSAyNy41LDM0LjUgMzAsMzIgQyAzMC41LDMwLjUgMzAsMzAgMzAsMzAgQyAzMCwyNy41IDI3LjUsMjYgMjcuNSwyNiBDIDMzLDI0LjUgMzMuNSwxNC41IDIyLjUsMTAuNSBDIDExLjUsMTQuNSAxMiwyNC41IDE3LjUsMjYgQyAxNy41LDI2IDE1LDI3LjUgMTUsMzAgQyAxNSwzMCAxNC41LDMwLjUgMTUsMzIgeiIvPg0KICAgICAgPHBhdGggZD0iTSAyNSA4IEEgMi41IDIuNSAwIDEgMSAgMjAsOCBBIDIuNSAyLjUgMCAxIDEgIDI1IDggeiIvPg0KICAgIDwvZz4NCiAgICA8cGF0aCBkPSJNIDE3LjUsMjYgTCAyNy41LDI2IE0gMTUsMzAgTCAzMCwzMCBNIDIyLjUsMTUuNSBMIDIyLjUsMjAuNSBNIDIwLDE4IEwgMjUsMTgiIHN0eWxlPSJmaWxsOm5vbmU7IHN0cm9rZTojZmZmZmZmOyBzdHJva2UtbGluZWpvaW46bWl0ZXI7Ii8+DQogIDwvZz4NCjwvc3ZnPg=="}),n.push({code:"B",name:"Bishop (White)",game:"chess",image:"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+DQo8IURPQ1RZUEUgc3ZnIFBVQkxJQyAiLS8vVzNDLy9EVEQgU1ZHIDEuMS8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9HcmFwaGljcy9TVkcvMS4xL0RURC9zdmcxMS5kdGQiPg0KPHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZlcnNpb249IjEuMSIgd2lkdGg9IjQ1IiBoZWlnaHQ9IjQ1IiB2aWV3Qm94PSIwIDAgNDUgNDUiPg0KICA8ZyBzdHlsZT0ib3BhY2l0eToxOyBmaWxsOm5vbmU7IGZpbGwtcnVsZTpldmVub2RkOyBmaWxsLW9wYWNpdHk6MTsgc3Ryb2tlOiMwMDAwMDA7IHN0cm9rZS13aWR0aDoxLjU7IHN0cm9rZS1saW5lY2FwOnJvdW5kOyBzdHJva2UtbGluZWpvaW46cm91bmQ7IHN0cm9rZS1taXRlcmxpbWl0OjQ7IHN0cm9rZS1kYXNoYXJyYXk6bm9uZTsgc3Ryb2tlLW9wYWNpdHk6MTsiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDAsMC42KSI+DQogICAgPGcgc3R5bGU9ImZpbGw6I2ZmZmZmZjsgc3Ryb2tlOiMwMDAwMDA7IHN0cm9rZS1saW5lY2FwOmJ1dHQ7Ij4NCiAgICAgIDxwYXRoIGQ9Ik0gOSwzNiBDIDEyLjM5LDM1LjAzIDE5LjExLDM2LjQzIDIyLjUsMzQgQyAyNS44OSwzNi40MyAzMi42MSwzNS4wMyAzNiwzNiBDIDM2LDM2IDM3LjY1LDM2LjU0IDM5LDM4IEMgMzguMzIsMzguOTcgMzcuMzUsMzguOTkgMzYsMzguNSBDIDMyLjYxLDM3LjUzIDI1Ljg5LDM4Ljk2IDIyLjUsMzcuNSBDIDE5LjExLDM4Ljk2IDEyLjM5LDM3LjUzIDksMzguNSBDIDcuNjUsMzguOTkgNi42OCwzOC45NyA2LDM4IEMgNy4zNSwzNi41NCA5LDM2IDksMzYgeiIvPg0KICAgICAgPHBhdGggZD0iTSAxNSwzMiBDIDE3LjUsMzQuNSAyNy41LDM0LjUgMzAsMzIgQyAzMC41LDMwLjUgMzAsMzAgMzAsMzAgQyAzMCwyNy41IDI3LjUsMjYgMjcuNSwyNiBDIDMzLDI0LjUgMzMuNSwxNC41IDIyLjUsMTAuNSBDIDExLjUsMTQuNSAxMiwyNC41IDE3LjUsMjYgQyAxNy41LDI2IDE1LDI3LjUgMTUsMzAgQyAxNSwzMCAxNC41LDMwLjUgMTUsMzIgeiIvPg0KICAgICAgPHBhdGggZD0iTSAyNSA4IEEgMi41IDIuNSAwIDEgMSAgMjAsOCBBIDIuNSAyLjUgMCAxIDEgIDI1IDggeiIvPg0KICAgIDwvZz4NCiAgICA8cGF0aCBkPSJNIDE3LjUsMjYgTCAyNy41LDI2IE0gMTUsMzAgTCAzMCwzMCBNIDIyLjUsMTUuNSBMIDIyLjUsMjAuNSBNIDIwLDE4IEwgMjUsMTgiIHN0eWxlPSJmaWxsOm5vbmU7IHN0cm9rZTojMDAwMDAwOyBzdHJva2UtbGluZWpvaW46bWl0ZXI7Ii8+DQogIDwvZz4NCjwvc3ZnPg=="}),n.push({code:"n",name:"Knight (White)",game:"chess",image:"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+DQo8IURPQ1RZUEUgc3ZnIFBVQkxJQyAiLS8vVzNDLy9EVEQgU1ZHIDEuMS8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9HcmFwaGljcy9TVkcvMS4xL0RURC9zdmcxMS5kdGQiPg0KPHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZlcnNpb249IjEuMSIgd2lkdGg9IjQ1IiBoZWlnaHQ9IjQ1IiB2aWV3Qm94PSIwIDAgNDUgNDUiPg0KICA8ZyBzdHlsZT0ib3BhY2l0eToxOyBmaWxsOm5vbmU7IGZpbGwtb3BhY2l0eToxOyBmaWxsLXJ1bGU6ZXZlbm9kZDsgc3Ryb2tlOiMwMDAwMDA7IHN0cm9rZS13aWR0aDoxLjU7IHN0cm9rZS1saW5lY2FwOnJvdW5kO3N0cm9rZS1saW5lam9pbjpyb3VuZDtzdHJva2UtbWl0ZXJsaW1pdDo0OyBzdHJva2UtZGFzaGFycmF5Om5vbmU7IHN0cm9rZS1vcGFjaXR5OjE7IiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgwLDAuMykiPg0KICAgIDxwYXRoIGQ9Ik0gMjIsMTAgQyAzMi41LDExIDM4LjUsMTggMzgsMzkgTCAxNSwzOSBDIDE1LDMwIDI1LDMyLjUgMjMsMTgiIHN0eWxlPSJmaWxsOiMwMDAwMDA7IHN0cm9rZTojMDAwMDAwOyIvPg0KICAgIDxwYXRoIGQ9Ik0gMjQsMTggQyAyNC4zOCwyMC45MSAxOC40NSwyNS4zNyAxNiwyNyBDIDEzLDI5IDEzLjE4LDMxLjM0IDExLDMxIEMgOS45NTgsMzAuMDYgMTIuNDEsMjcuOTYgMTEsMjggQyAxMCwyOCAxMS4xOSwyOS4yMyAxMCwzMCBDIDksMzAgNS45OTcsMzEgNiwyNiBDIDYsMjQgMTIsMTQgMTIsMTQgQyAxMiwxNCAxMy44OSwxMi4xIDE0LDEwLjUgQyAxMy4yNyw5LjUwNiAxMy41LDguNSAxMy41LDcuNSBDIDE0LjUsNi41IDE2LjUsMTAgMTYuNSwxMCBMIDE4LjUsMTAgQyAxOC41LDEwIDE5LjI4LDguMDA4IDIxLDcgQyAyMiw3IDIyLDEwIDIyLDEwIiBzdHlsZT0iZmlsbDojMDAwMDAwOyBzdHJva2U6IzAwMDAwMDsiLz4NCiAgICA8cGF0aCBkPSJNIDkuNSAyNS41IEEgMC41IDAuNSAwIDEgMSA4LjUsMjUuNSBBIDAuNSAwLjUgMCAxIDEgOS41IDI1LjUgeiIgc3R5bGU9ImZpbGw6I2ZmZmZmZjsgc3Ryb2tlOiNmZmZmZmY7Ii8+DQogICAgPHBhdGggZD0iTSAxNSAxNS41IEEgMC41IDEuNSAwIDEgMSAgMTQsMTUuNSBBIDAuNSAxLjUgMCAxIDEgIDE1IDE1LjUgeiIgdHJhbnNmb3JtPSJtYXRyaXgoMC44NjYsMC41LC0wLjUsMC44NjYsOS42OTMsLTUuMTczKSIgc3R5bGU9ImZpbGw6I2ZmZmZmZjsgc3Ryb2tlOiNmZmZmZmY7Ii8+DQogICAgPHBhdGggZD0iTSAyNC41NSwxMC40IEwgMjQuMSwxMS44NSBMIDI0LjYsMTIgQyAyNy43NSwxMyAzMC4yNSwxNC40OSAzMi41LDE4Ljc1IEMgMzQuNzUsMjMuMDEgMzUuNzUsMjkuMDYgMzUuMjUsMzkgTCAzNS4yLDM5LjUgTCAzNy40NSwzOS41IEwgMzcuNSwzOSBDIDM4LDI4Ljk0IDM2LjYyLDIyLjE1IDM0LjI1LDE3LjY2IEMgMzEuODgsMTMuMTcgMjguNDYsMTEuMDIgMjUuMDYsMTAuNSBMIDI0LjU1LDEwLjQgeiAiIHN0eWxlPSJmaWxsOiNmZmZmZmY7IHN0cm9rZTpub25lOyIvPg0KICA8L2c+DQo8L3N2Zz4="}),n.push({code:"N",name:"Knight (White)",game:"chess",image:"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+DQo8IURPQ1RZUEUgc3ZnIFBVQkxJQyAiLS8vVzNDLy9EVEQgU1ZHIDEuMS8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9HcmFwaGljcy9TVkcvMS4xL0RURC9zdmcxMS5kdGQiPg0KPHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZlcnNpb249IjEuMSIgd2lkdGg9IjQ1IiBoZWlnaHQ9IjQ1IiB2aWV3Qm94PSIwIDAgNDUgNDUiPg0KICA8ZyBzdHlsZT0ib3BhY2l0eToxOyBmaWxsOm5vbmU7IGZpbGwtb3BhY2l0eToxOyBmaWxsLXJ1bGU6ZXZlbm9kZDsgc3Ryb2tlOiMwMDAwMDA7IHN0cm9rZS13aWR0aDoxLjU7IHN0cm9rZS1saW5lY2FwOnJvdW5kO3N0cm9rZS1saW5lam9pbjpyb3VuZDtzdHJva2UtbWl0ZXJsaW1pdDo0OyBzdHJva2UtZGFzaGFycmF5Om5vbmU7IHN0cm9rZS1vcGFjaXR5OjE7IiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgwLDAuMykiPg0KICAgIDxwYXRoIGQ9Ik0gMjIsMTAgQyAzMi41LDExIDM4LjUsMTggMzgsMzkgTCAxNSwzOSBDIDE1LDMwIDI1LDMyLjUgMjMsMTgiIHN0eWxlPSJmaWxsOiNmZmZmZmY7IHN0cm9rZTojMDAwMDAwOyIvPg0KICAgIDxwYXRoIGQ9Ik0gMjQsMTggQyAyNC4zOCwyMC45MSAxOC40NSwyNS4zNyAxNiwyNyBDIDEzLDI5IDEzLjE4LDMxLjM0IDExLDMxIEMgOS45NTgsMzAuMDYgMTIuNDEsMjcuOTYgMTEsMjggQyAxMCwyOCAxMS4xOSwyOS4yMyAxMCwzMCBDIDksMzAgNS45OTcsMzEgNiwyNiBDIDYsMjQgMTIsMTQgMTIsMTQgQyAxMiwxNCAxMy44OSwxMi4xIDE0LDEwLjUgQyAxMy4yNyw5LjUwNiAxMy41LDguNSAxMy41LDcuNSBDIDE0LjUsNi41IDE2LjUsMTAgMTYuNSwxMCBMIDE4LjUsMTAgQyAxOC41LDEwIDE5LjI4LDguMDA4IDIxLDcgQyAyMiw3IDIyLDEwIDIyLDEwIiBzdHlsZT0iZmlsbDojZmZmZmZmOyBzdHJva2U6IzAwMDAwMDsiLz4NCiAgICA8cGF0aCBkPSJNIDkuNSAyNS41IEEgMC41IDAuNSAwIDEgMSA4LjUsMjUuNSBBIDAuNSAwLjUgMCAxIDEgOS41IDI1LjUgeiIgc3R5bGU9ImZpbGw6IzAwMDAwMDsgc3Ryb2tlOiMwMDAwMDA7Ii8+DQogICAgPHBhdGggZD0iTSAxNSAxNS41IEEgMC41IDEuNSAwIDEgMSAgMTQsMTUuNSBBIDAuNSAxLjUgMCAxIDEgIDE1IDE1LjUgeiIgdHJhbnNmb3JtPSJtYXRyaXgoMC44NjYsMC41LC0wLjUsMC44NjYsOS42OTMsLTUuMTczKSIgc3R5bGU9ImZpbGw6IzAwMDAwMDsgc3Ryb2tlOiMwMDAwMDA7Ii8+DQogIDwvZz4NCjwvc3ZnPg=="}),n.push({code:"p",name:"Pawn (Black)",game:"chess",image:"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+DQo8IURPQ1RZUEUgc3ZnIFBVQkxJQyAiLS8vVzNDLy9EVEQgU1ZHIDEuMS8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9HcmFwaGljcy9TVkcvMS4xL0RURC9zdmcxMS5kdGQiPg0KPHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZlcnNpb249IjEuMSIgd2lkdGg9IjQ1IiBoZWlnaHQ9IjQ1IiB2aWV3Qm94PSIwIDAgNDUgNDUiPg0KICA8cGF0aCBkPSJtIDIyLjUsOSBjIC0yLjIxLDAgLTQsMS43OSAtNCw0IDAsMC44OSAwLjI5LDEuNzEgMC43OCwyLjM4IEMgMTcuMzMsMTYuNSAxNiwxOC41OSAxNiwyMSBjIDAsMi4wMyAwLjk0LDMuODQgMi40MSw1LjAzIEMgMTUuNDEsMjcuMDkgMTEsMzEuNTggMTEsMzkuNSBIIDM0IEMgMzQsMzEuNTggMjkuNTksMjcuMDkgMjYuNTksMjYuMDMgMjguMDYsMjQuODQgMjksMjMuMDMgMjksMjEgMjksMTguNTkgMjcuNjcsMTYuNSAyNS43MiwxNS4zOCAyNi4yMSwxNC43MSAyNi41LDEzLjg5IDI2LjUsMTMgYyAwLC0yLjIxIC0xLjc5LC00IC00LC00IHoiIHN0eWxlPSJvcGFjaXR5OjE7IGZpbGw6IzAwMDAwMDsgZmlsbC1vcGFjaXR5OjE7IGZpbGwtcnVsZTpub256ZXJvOyBzdHJva2U6IzAwMDAwMDsgc3Ryb2tlLXdpZHRoOjEuNTsgc3Ryb2tlLWxpbmVjYXA6cm91bmQ7IHN0cm9rZS1saW5lam9pbjptaXRlcjsgc3Ryb2tlLW1pdGVybGltaXQ6NDsgc3Ryb2tlLWRhc2hhcnJheTpub25lOyBzdHJva2Utb3BhY2l0eToxOyIvPg0KPC9zdmc+"}),n.push({code:"P",name:"Pawn (White)",game:"chess",image:"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+DQo8IURPQ1RZUEUgc3ZnIFBVQkxJQyAiLS8vVzNDLy9EVEQgU1ZHIDEuMS8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9HcmFwaGljcy9TVkcvMS4xL0RURC9zdmcxMS5kdGQiPg0KPHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZlcnNpb249IjEuMSIgd2lkdGg9IjQ1IiBoZWlnaHQ9IjQ1IiB2aWV3Qm94PSIwIDAgNDUgNDUiPg0KICA8cGF0aCBkPSJtIDIyLjUsOSBjIC0yLjIxLDAgLTQsMS43OSAtNCw0IDAsMC44OSAwLjI5LDEuNzEgMC43OCwyLjM4IEMgMTcuMzMsMTYuNSAxNiwxOC41OSAxNiwyMSBjIDAsMi4wMyAwLjk0LDMuODQgMi40MSw1LjAzIEMgMTUuNDEsMjcuMDkgMTEsMzEuNTggMTEsMzkuNSBIIDM0IEMgMzQsMzEuNTggMjkuNTksMjcuMDkgMjYuNTksMjYuMDMgMjguMDYsMjQuODQgMjksMjMuMDMgMjksMjEgMjksMTguNTkgMjcuNjcsMTYuNSAyNS43MiwxNS4zOCAyNi4yMSwxNC43MSAyNi41LDEzLjg5IDI2LjUsMTMgYyAwLC0yLjIxIC0xLjc5LC00IC00LC00IHoiIHN0eWxlPSJvcGFjaXR5OjE7IGZpbGw6I2ZmZmZmZjsgZmlsbC1vcGFjaXR5OjE7IGZpbGwtcnVsZTpub256ZXJvOyBzdHJva2U6IzAwMDAwMDsgc3Ryb2tlLXdpZHRoOjEuNTsgc3Ryb2tlLWxpbmVjYXA6cm91bmQ7IHN0cm9rZS1saW5lam9pbjptaXRlcjsgc3Ryb2tlLW1pdGVybGltaXQ6NDsgc3Ryb2tlLWRhc2hhcnJheTpub25lOyBzdHJva2Utb3BhY2l0eToxOyIvPg0KPC9zdmc+"});var o=n;t["default"]=o},85867:function(e,t,n){"use strict";t.__esModule=!0,t["default"]=t.kit=void 0;var o,r=(o=n(77896))&&o.__esModule?o:{"default":o};var a={pieces:r["default"],palettes:[{name:"Draughts",pieces:r["default"]}]};t.kit=a;var i=a;t["default"]=i},77896:function(e,t){"use strict";t.__esModule=!0,t["default"]=void 0;var n=[];n.push({code:"d",name:"Man (Black)",game:"draughts",image:"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPHN2ZyB3aWR0aD0iOS43OW1tIiBoZWlnaHQ9IjkuNzltbSIgdmVyc2lvbj0iMS4xIiB2aWV3Qm94PSIwIDAgOS43OSA5Ljc5IiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOmNjPSJodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy9ucyMiIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4KIDxtZXRhZGF0YT4KICA8cmRmOlJERj4KICAgPGNjOldvcmsgcmRmOmFib3V0PSIiPgogICAgPGRjOmZvcm1hdD5pbWFnZS9zdmcreG1sPC9kYzpmb3JtYXQ+CiAgICA8ZGM6dHlwZSByZGY6cmVzb3VyY2U9Imh0dHA6Ly9wdXJsLm9yZy9kYy9kY21pdHlwZS9TdGlsbEltYWdlIi8+CiAgICA8ZGM6dGl0bGUvPgogICA8L2NjOldvcms+CiAgPC9yZGY6UkRGPgogPC9tZXRhZGF0YT4KIDxnIHRyYW5zZm9ybT0idHJhbnNsYXRlKC0zMCAtMzIuNzg2KSI+CiAgPGcgZmlsbD0iI2ZmZiIgc3Ryb2tlPSIjMDAwIiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiIHN0cm9rZS13aWR0aD0iLjM5NyI+CiAgIDxjaXJjbGUgY3g9IjM0Ljg5NSIgY3k9IjI1Ljg5NSIgcj0iNC44OTUiLz4KICAgPGNpcmNsZSBjeD0iMzQuODk1IiBjeT0iMjUuODk1IiByPSIzIi8+CiAgPC9nPgogIDxnPgogICA8Y2lyY2xlIGN4PSIzNC44OTUiIGN5PSIzNy42ODEiIHI9IjQuODk1Ii8+CiAgIDxjaXJjbGUgY3g9IjM0Ljg5NSIgY3k9IjM3LjY4MSIgcj0iMyIgc3Ryb2tlPSIjZmZmIiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiIHN0cm9rZS13aWR0aD0iLjM5NyIvPgogIDwvZz4KICA8Zz4KICAgPGNpcmNsZSBjeD0iNDcuMzAzIiBjeT0iMzcuNjgxIiByPSI0Ljg5NSIvPgogICA8Y2lyY2xlIGN4PSI0Ny4zMDMiIGN5PSIzNy42ODEiIHI9IjMiIHN0cm9rZT0iI2ZmZiIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIiBzdHJva2Utd2lkdGg9Ii4zOTciLz4KICAgPGcgdHJhbnNmb3JtPSJtYXRyaXgoLjExNTc2IDAgMCAuMTE1NzYgNDQuNjk4IDM1LjA0MSkiIGZpbGwtcnVsZT0iZXZlbm9kZCIgc3Ryb2tlPSIjZmZmIiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiIHN0cm9rZS13aWR0aD0iMS41Ij4KICAgIDxwYXRoIGQ9Im0yMi41IDExLjYzdi01LjYzbS0yLjUgMmg1IiBzdHJva2UtbGluZWpvaW49Im1pdGVyIi8+CiAgICA8cGF0aCBkPSJtMjIuNSAyNXM0LjUtNy41IDMtMTAuNWMwIDAtMS0yLjUtMy0yLjVzLTMgMi41LTMgMi41Yy0xLjUgMyAzIDEwLjUgMyAxMC41IiBzdHJva2UtbGluZWNhcD0iYnV0dCIgc3Ryb2tlLWxpbmVqb2luPSJtaXRlciIvPgogICAgPHBhdGggZD0ibTEyLjUgMzdjNS41IDMuNSAxNC41IDMuNSAyMCAwdi03czktNC41IDYtMTAuNWMtNC02LjUtMTMuNS0zLjUtMTYgNHYzLjUtMy41Yy0yLjUtNy41LTEyLTEwLjUtMTYtNC0zIDYgNiAxMC41IDYgMTAuNXY3Ii8+CiAgICA8cGF0aCBkPSJtMTIuNSAzMGM1LjUtMyAxNC41LTMgMjAgMG0tMjAgMy41YzUuNS0zIDE0LjUtMyAyMCAwbS0yMCAzLjVjNS41LTMgMTQuNS0zIDIwIDAiLz4KICAgPC9nPgogIDwvZz4KICA8ZyBmaWxsPSIjZmZmIiBzdHJva2U9IiMwMDAiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCI+CiAgIDxjaXJjbGUgY3g9IjQ3LjMwMyIgY3k9IjI1Ljg5NSIgcj0iNC44OTUiIHN0cm9rZS13aWR0aD0iLjM5NyIvPgogICA8Y2lyY2xlIGN4PSI0Ny4zMDMiIGN5PSIyNS44OTUiIHI9IjMiIHN0cm9rZS13aWR0aD0iLjM5NyIvPgogICA8ZyB0cmFuc2Zvcm09Im1hdHJpeCguMTE1NzYgMCAwIC4xMTU3NiA0NC43NTYgMjMuMDY4KSIgZmlsbC1ydWxlPSJldmVub2RkIiBzdHJva2Utd2lkdGg9IjEuNSI+CiAgICA8cGF0aCBkPSJtMjIuNSAxMS42M3YtNS42M20tMi41IDJoNSIgc3Ryb2tlLWxpbmVqb2luPSJtaXRlciIvPgogICAgPHBhdGggZD0ibTIyLjUgMjVzNC41LTcuNSAzLTEwLjVjMCAwLTEtMi41LTMtMi41cy0zIDIuNS0zIDIuNWMtMS41IDMgMyAxMC41IDMgMTAuNSIgc3Ryb2tlLWxpbmVjYXA9ImJ1dHQiIHN0cm9rZS1saW5lam9pbj0ibWl0ZXIiLz4KICAgIDxwYXRoIGQ9Im0xMi41IDM3YzUuNSAzLjUgMTQuNSAzLjUgMjAgMHYtN3M5LTQuNSA2LTEwLjVjLTQtNi41LTEzLjUtMy41LTE2IDR2My41LTMuNWMtMi41LTcuNS0xMi0xMC41LTE2LTQtMyA2IDYgMTAuNSA2IDEwLjV2NyIvPgogICAgPHBhdGggZD0ibTEyLjUgMzBjNS41LTMgMTQuNS0zIDIwIDBtLTIwIDMuNWM1LjUtMyAxNC41LTMgMjAgMG0tMjAgMy41YzUuNS0zIDE0LjUtMyAyMCAwIi8+CiAgIDwvZz4KICA8L2c+CiA8L2c+Cjwvc3ZnPgo"}),n.push({code:"m",name:"King (Black)",game:"draughts",image:"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPHN2ZyB3aWR0aD0iOS43OW1tIiBoZWlnaHQ9IjkuNzltbSIgdmVyc2lvbj0iMS4xIiB2aWV3Qm94PSIwIDAgOS43OSA5Ljc5IiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOmNjPSJodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy9ucyMiIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4KIDxtZXRhZGF0YT4KICA8cmRmOlJERj4KICAgPGNjOldvcmsgcmRmOmFib3V0PSIiPgogICAgPGRjOmZvcm1hdD5pbWFnZS9zdmcreG1sPC9kYzpmb3JtYXQ+CiAgICA8ZGM6dHlwZSByZGY6cmVzb3VyY2U9Imh0dHA6Ly9wdXJsLm9yZy9kYy9kY21pdHlwZS9TdGlsbEltYWdlIi8+CiAgICA8ZGM6dGl0bGUvPgogICA8L2NjOldvcms+CiAgPC9yZGY6UkRGPgogPC9tZXRhZGF0YT4KIDxnIHRyYW5zZm9ybT0idHJhbnNsYXRlKC00Mi40MDggLTMyLjc4NikiPgogIDxnIGZpbGw9IiNmZmYiIHN0cm9rZT0iIzAwMCIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIiBzdHJva2Utd2lkdGg9Ii4zOTciPgogICA8Y2lyY2xlIGN4PSIzNC44OTUiIGN5PSIyNS44OTUiIHI9IjQuODk1Ii8+CiAgIDxjaXJjbGUgY3g9IjM0Ljg5NSIgY3k9IjI1Ljg5NSIgcj0iMyIvPgogIDwvZz4KICA8Zz4KICAgPGNpcmNsZSBjeD0iMzQuODk1IiBjeT0iMzcuNjgxIiByPSI0Ljg5NSIvPgogICA8Y2lyY2xlIGN4PSIzNC44OTUiIGN5PSIzNy42ODEiIHI9IjMiIHN0cm9rZT0iI2ZmZiIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIiBzdHJva2Utd2lkdGg9Ii4zOTciLz4KICA8L2c+CiAgPGc+CiAgIDxjaXJjbGUgY3g9IjQ3LjMwMyIgY3k9IjM3LjY4MSIgcj0iNC44OTUiLz4KICAgPGNpcmNsZSBjeD0iNDcuMzAzIiBjeT0iMzcuNjgxIiByPSIzIiBzdHJva2U9IiNmZmYiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIgc3Ryb2tlLXdpZHRoPSIuMzk3Ii8+CiAgIDxnIHRyYW5zZm9ybT0ibWF0cml4KC4xMTU3NiAwIDAgLjExNTc2IDQ0LjY5OCAzNS4wNDEpIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIHN0cm9rZT0iI2ZmZiIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIiBzdHJva2Utd2lkdGg9IjEuNSI+CiAgICA8cGF0aCBkPSJtMjIuNSAxMS42M3YtNS42M20tMi41IDJoNSIgc3Ryb2tlLWxpbmVqb2luPSJtaXRlciIvPgogICAgPHBhdGggZD0ibTIyLjUgMjVzNC41LTcuNSAzLTEwLjVjMCAwLTEtMi41LTMtMi41cy0zIDIuNS0zIDIuNWMtMS41IDMgMyAxMC41IDMgMTAuNSIgc3Ryb2tlLWxpbmVjYXA9ImJ1dHQiIHN0cm9rZS1saW5lam9pbj0ibWl0ZXIiLz4KICAgIDxwYXRoIGQ9Im0xMi41IDM3YzUuNSAzLjUgMTQuNSAzLjUgMjAgMHYtN3M5LTQuNSA2LTEwLjVjLTQtNi41LTEzLjUtMy41LTE2IDR2My41LTMuNWMtMi41LTcuNS0xMi0xMC41LTE2LTQtMyA2IDYgMTAuNSA2IDEwLjV2NyIvPgogICAgPHBhdGggZD0ibTEyLjUgMzBjNS41LTMgMTQuNS0zIDIwIDBtLTIwIDMuNWM1LjUtMyAxNC41LTMgMjAgMG0tMjAgMy41YzUuNS0zIDE0LjUtMyAyMCAwIi8+CiAgIDwvZz4KICA8L2c+CiAgPGcgZmlsbD0iI2ZmZiIgc3Ryb2tlPSIjMDAwIiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiPgogICA8Y2lyY2xlIGN4PSI0Ny4zMDMiIGN5PSIyNS44OTUiIHI9IjQuODk1IiBzdHJva2Utd2lkdGg9Ii4zOTciLz4KICAgPGNpcmNsZSBjeD0iNDcuMzAzIiBjeT0iMjUuODk1IiByPSIzIiBzdHJva2Utd2lkdGg9Ii4zOTciLz4KICAgPGcgdHJhbnNmb3JtPSJtYXRyaXgoLjExNTc2IDAgMCAuMTE1NzYgNDQuNzU2IDIzLjA2OCkiIGZpbGwtcnVsZT0iZXZlbm9kZCIgc3Ryb2tlLXdpZHRoPSIxLjUiPgogICAgPHBhdGggZD0ibTIyLjUgMTEuNjN2LTUuNjNtLTIuNSAyaDUiIHN0cm9rZS1saW5lam9pbj0ibWl0ZXIiLz4KICAgIDxwYXRoIGQ9Im0yMi41IDI1czQuNS03LjUgMy0xMC41YzAgMC0xLTIuNS0zLTIuNXMtMyAyLjUtMyAyLjVjLTEuNSAzIDMgMTAuNSAzIDEwLjUiIHN0cm9rZS1saW5lY2FwPSJidXR0IiBzdHJva2UtbGluZWpvaW49Im1pdGVyIi8+CiAgICA8cGF0aCBkPSJtMTIuNSAzN2M1LjUgMy41IDE0LjUgMy41IDIwIDB2LTdzOS00LjUgNi0xMC41Yy00LTYuNS0xMy41LTMuNS0xNiA0djMuNS0zLjVjLTIuNS03LjUtMTItMTAuNS0xNi00LTMgNiA2IDEwLjUgNiAxMC41djciLz4KICAgIDxwYXRoIGQ9Im0xMi41IDMwYzUuNS0zIDE0LjUtMyAyMCAwbS0yMCAzLjVjNS41LTMgMTQuNS0zIDIwIDBtLTIwIDMuNWM1LjUtMyAxNC41LTMgMjAgMCIvPgogICA8L2c+CiAgPC9nPgogPC9nPgo8L3N2Zz4K"}),n.push({code:"D",name:"Man (White)",game:"draughts",image:"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPHN2ZyB3aWR0aD0iMTAuMTg3bW0iIGhlaWdodD0iMTAuMTg3bW0iIHZlcnNpb249IjEuMSIgdmlld0JveD0iMCAwIDEwLjE4NyAxMC4xODciIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6Y2M9Imh0dHA6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnL25zIyIgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPgogPG1ldGFkYXRhPgogIDxyZGY6UkRGPgogICA8Y2M6V29yayByZGY6YWJvdXQ9IiI+CiAgICA8ZGM6Zm9ybWF0PmltYWdlL3N2Zyt4bWw8L2RjOmZvcm1hdD4KICAgIDxkYzp0eXBlIHJkZjpyZXNvdXJjZT0iaHR0cDovL3B1cmwub3JnL2RjL2RjbWl0eXBlL1N0aWxsSW1hZ2UiLz4KICAgIDxkYzp0aXRsZS8+CiAgIDwvY2M6V29yaz4KICA8L3JkZjpSREY+CiA8L21ldGFkYXRhPgogPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoLTI5LjgwMiAtMjAuODAyKSI+CiAgPGcgZmlsbD0iI2ZmZiIgc3Ryb2tlPSIjMDAwIiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiIHN0cm9rZS13aWR0aD0iLjM5NyI+CiAgIDxjaXJjbGUgY3g9IjM0Ljg5NSIgY3k9IjI1Ljg5NSIgcj0iNC44OTUiLz4KICAgPGNpcmNsZSBjeD0iMzQuODk1IiBjeT0iMjUuODk1IiByPSIzIi8+CiAgPC9nPgogIDxnPgogICA8Y2lyY2xlIGN4PSIzNC44OTUiIGN5PSIzNy42ODEiIHI9IjQuODk1Ii8+CiAgIDxjaXJjbGUgY3g9IjM0Ljg5NSIgY3k9IjM3LjY4MSIgcj0iMyIgc3Ryb2tlPSIjZmZmIiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiIHN0cm9rZS13aWR0aD0iLjM5NyIvPgogIDwvZz4KICA8Zz4KICAgPGNpcmNsZSBjeD0iNDcuMzAzIiBjeT0iMzcuNjgxIiByPSI0Ljg5NSIvPgogICA8Y2lyY2xlIGN4PSI0Ny4zMDMiIGN5PSIzNy42ODEiIHI9IjMiIHN0cm9rZT0iI2ZmZiIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIiBzdHJva2Utd2lkdGg9Ii4zOTciLz4KICAgPGcgdHJhbnNmb3JtPSJtYXRyaXgoLjExNTc2IDAgMCAuMTE1NzYgNDQuNjk4IDM1LjA0MSkiIGZpbGwtcnVsZT0iZXZlbm9kZCIgc3Ryb2tlPSIjZmZmIiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiIHN0cm9rZS13aWR0aD0iMS41Ij4KICAgIDxwYXRoIGQ9Im0yMi41IDExLjYzdi01LjYzbS0yLjUgMmg1IiBzdHJva2UtbGluZWpvaW49Im1pdGVyIi8+CiAgICA8cGF0aCBkPSJtMjIuNSAyNXM0LjUtNy41IDMtMTAuNWMwIDAtMS0yLjUtMy0yLjVzLTMgMi41LTMgMi41Yy0xLjUgMyAzIDEwLjUgMyAxMC41IiBzdHJva2UtbGluZWNhcD0iYnV0dCIgc3Ryb2tlLWxpbmVqb2luPSJtaXRlciIvPgogICAgPHBhdGggZD0ibTEyLjUgMzdjNS41IDMuNSAxNC41IDMuNSAyMCAwdi03czktNC41IDYtMTAuNWMtNC02LjUtMTMuNS0zLjUtMTYgNHYzLjUtMy41Yy0yLjUtNy41LTEyLTEwLjUtMTYtNC0zIDYgNiAxMC41IDYgMTAuNXY3Ii8+CiAgICA8cGF0aCBkPSJtMTIuNSAzMGM1LjUtMyAxNC41LTMgMjAgMG0tMjAgMy41YzUuNS0zIDE0LjUtMyAyMCAwbS0yMCAzLjVjNS41LTMgMTQuNS0zIDIwIDAiLz4KICAgPC9nPgogIDwvZz4KICA8ZyBmaWxsPSIjZmZmIiBzdHJva2U9IiMwMDAiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCI+CiAgIDxjaXJjbGUgY3g9IjQ3LjMwMyIgY3k9IjI1Ljg5NSIgcj0iNC44OTUiIHN0cm9rZS13aWR0aD0iLjM5NyIvPgogICA8Y2lyY2xlIGN4PSI0Ny4zMDMiIGN5PSIyNS44OTUiIHI9IjMiIHN0cm9rZS13aWR0aD0iLjM5NyIvPgogICA8ZyB0cmFuc2Zvcm09Im1hdHJpeCguMTE1NzYgMCAwIC4xMTU3NiA0NC43NTYgMjMuMDY4KSIgZmlsbC1ydWxlPSJldmVub2RkIiBzdHJva2Utd2lkdGg9IjEuNSI+CiAgICA8cGF0aCBkPSJtMjIuNSAxMS42M3YtNS42M20tMi41IDJoNSIgc3Ryb2tlLWxpbmVqb2luPSJtaXRlciIvPgogICAgPHBhdGggZD0ibTIyLjUgMjVzNC41LTcuNSAzLTEwLjVjMCAwLTEtMi41LTMtMi41cy0zIDIuNS0zIDIuNWMtMS41IDMgMyAxMC41IDMgMTAuNSIgc3Ryb2tlLWxpbmVjYXA9ImJ1dHQiIHN0cm9rZS1saW5lam9pbj0ibWl0ZXIiLz4KICAgIDxwYXRoIGQ9Im0xMi41IDM3YzUuNSAzLjUgMTQuNSAzLjUgMjAgMHYtN3M5LTQuNSA2LTEwLjVjLTQtNi41LTEzLjUtMy41LTE2IDR2My41LTMuNWMtMi41LTcuNS0xMi0xMC41LTE2LTQtMyA2IDYgMTAuNSA2IDEwLjV2NyIvPgogICAgPHBhdGggZD0ibTEyLjUgMzBjNS41LTMgMTQuNS0zIDIwIDBtLTIwIDMuNWM1LjUtMyAxNC41LTMgMjAgMG0tMjAgMy41YzUuNS0zIDE0LjUtMyAyMCAwIi8+CiAgIDwvZz4KICA8L2c+CiA8L2c+Cjwvc3ZnPgo="}),n.push({code:"M",name:"King (White)",game:"draughts",image:"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPHN2ZyB3aWR0aD0iMTAuMTg3bW0iIGhlaWdodD0iMTAuMTg3bW0iIHZlcnNpb249IjEuMSIgdmlld0JveD0iMCAwIDEwLjE4NyAxMC4xODciIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6Y2M9Imh0dHA6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnL25zIyIgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPgogPG1ldGFkYXRhPgogIDxyZGY6UkRGPgogICA8Y2M6V29yayByZGY6YWJvdXQ9IiI+CiAgICA8ZGM6Zm9ybWF0PmltYWdlL3N2Zyt4bWw8L2RjOmZvcm1hdD4KICAgIDxkYzp0eXBlIHJkZjpyZXNvdXJjZT0iaHR0cDovL3B1cmwub3JnL2RjL2RjbWl0eXBlL1N0aWxsSW1hZ2UiLz4KICAgIDxkYzp0aXRsZS8+CiAgIDwvY2M6V29yaz4KICA8L3JkZjpSREY+CiA8L21ldGFkYXRhPgogPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoLTQyLjIwOSAtMjAuODAyKSI+CiAgPGcgZmlsbD0iI2ZmZiIgc3Ryb2tlPSIjMDAwIiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiIHN0cm9rZS13aWR0aD0iLjM5NyI+CiAgIDxjaXJjbGUgY3g9IjM0Ljg5NSIgY3k9IjI1Ljg5NSIgcj0iNC44OTUiLz4KICAgPGNpcmNsZSBjeD0iMzQuODk1IiBjeT0iMjUuODk1IiByPSIzIi8+CiAgPC9nPgogIDxnPgogICA8Y2lyY2xlIGN4PSIzNC44OTUiIGN5PSIzNy42ODEiIHI9IjQuODk1Ii8+CiAgIDxjaXJjbGUgY3g9IjM0Ljg5NSIgY3k9IjM3LjY4MSIgcj0iMyIgc3Ryb2tlPSIjZmZmIiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiIHN0cm9rZS13aWR0aD0iLjM5NyIvPgogIDwvZz4KICA8Zz4KICAgPGNpcmNsZSBjeD0iNDcuMzAzIiBjeT0iMzcuNjgxIiByPSI0Ljg5NSIvPgogICA8Y2lyY2xlIGN4PSI0Ny4zMDMiIGN5PSIzNy42ODEiIHI9IjMiIHN0cm9rZT0iI2ZmZiIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIiBzdHJva2Utd2lkdGg9Ii4zOTciLz4KICAgPGcgdHJhbnNmb3JtPSJtYXRyaXgoLjExNTc2IDAgMCAuMTE1NzYgNDQuNjk4IDM1LjA0MSkiIGZpbGwtcnVsZT0iZXZlbm9kZCIgc3Ryb2tlPSIjZmZmIiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiIHN0cm9rZS13aWR0aD0iMS41Ij4KICAgIDxwYXRoIGQ9Im0yMi41IDExLjYzdi01LjYzbS0yLjUgMmg1IiBzdHJva2UtbGluZWpvaW49Im1pdGVyIi8+CiAgICA8cGF0aCBkPSJtMjIuNSAyNXM0LjUtNy41IDMtMTAuNWMwIDAtMS0yLjUtMy0yLjVzLTMgMi41LTMgMi41Yy0xLjUgMyAzIDEwLjUgMyAxMC41IiBzdHJva2UtbGluZWNhcD0iYnV0dCIgc3Ryb2tlLWxpbmVqb2luPSJtaXRlciIvPgogICAgPHBhdGggZD0ibTEyLjUgMzdjNS41IDMuNSAxNC41IDMuNSAyMCAwdi03czktNC41IDYtMTAuNWMtNC02LjUtMTMuNS0zLjUtMTYgNHYzLjUtMy41Yy0yLjUtNy41LTEyLTEwLjUtMTYtNC0zIDYgNiAxMC41IDYgMTAuNXY3Ii8+CiAgICA8cGF0aCBkPSJtMTIuNSAzMGM1LjUtMyAxNC41LTMgMjAgMG0tMjAgMy41YzUuNS0zIDE0LjUtMyAyMCAwbS0yMCAzLjVjNS41LTMgMTQuNS0zIDIwIDAiLz4KICAgPC9nPgogIDwvZz4KICA8ZyBmaWxsPSIjZmZmIiBzdHJva2U9IiMwMDAiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCI+CiAgIDxjaXJjbGUgY3g9IjQ3LjMwMyIgY3k9IjI1Ljg5NSIgcj0iNC44OTUiIHN0cm9rZS13aWR0aD0iLjM5NyIvPgogICA8Y2lyY2xlIGN4PSI0Ny4zMDMiIGN5PSIyNS44OTUiIHI9IjMiIHN0cm9rZS13aWR0aD0iLjM5NyIvPgogICA8ZyB0cmFuc2Zvcm09Im1hdHJpeCguMTE1NzYgMCAwIC4xMTU3NiA0NC43NTYgMjMuMDY4KSIgZmlsbC1ydWxlPSJldmVub2RkIiBzdHJva2Utd2lkdGg9IjEuNSI+CiAgICA8cGF0aCBkPSJtMjIuNSAxMS42M3YtNS42M20tMi41IDJoNSIgc3Ryb2tlLWxpbmVqb2luPSJtaXRlciIvPgogICAgPHBhdGggZD0ibTIyLjUgMjVzNC41LTcuNSAzLTEwLjVjMCAwLTEtMi41LTMtMi41cy0zIDIuNS0zIDIuNWMtMS41IDMgMyAxMC41IDMgMTAuNSIgc3Ryb2tlLWxpbmVjYXA9ImJ1dHQiIHN0cm9rZS1saW5lam9pbj0ibWl0ZXIiLz4KICAgIDxwYXRoIGQ9Im0xMi41IDM3YzUuNSAzLjUgMTQuNSAzLjUgMjAgMHYtN3M5LTQuNSA2LTEwLjVjLTQtNi41LTEzLjUtMy41LTE2IDR2My41LTMuNWMtMi41LTcuNS0xMi0xMC41LTE2LTQtMyA2IDYgMTAuNSA2IDEwLjV2NyIvPgogICAgPHBhdGggZD0ibTEyLjUgMzBjNS41LTMgMTQuNS0zIDIwIDBtLTIwIDMuNWM1LjUtMyAxNC41LTMgMjAgMG0tMjAgMy41YzUuNS0zIDE0LjUtMyAyMCAwIi8+CiAgIDwvZz4KICA8L2c+CiA8L2c+Cjwvc3ZnPgo="});var o=n;t["default"]=o},86489:function(e,t,n){"use strict";t.__esModule=!0,t.fetchPalettes=t.palettes=t.fetchPieces=t.codeRecordFromPieces=t.getPiecesByGame=t.getPiece=t.pushPieces=void 0;var o=n(8250),r=[];o.kits.forEach((function(e){r.push.apply(r,e.pieces)}));t.pushPieces=function(e){return r.push.apply(r,e)};t.getPiece=function(e,t){return r.find((function(n){return n.code===e&&n.game===t}))};t.getPiecesByGame=function(e){return r.filter((function(t){return t.game===e}))};t.codeRecordFromPieces=function(e){return e.reduce((function(e,t){return e[t.code]=t,e}),{})};t.fetchPieces=function(){return r};var a=[];t.palettes=a,o.kits.forEach((function(e){a.push.apply(a,e.palettes)}));t.fetchPalettes=function(){return a}},8250:function(e,t,n){"use strict";t.__esModule=!0,t.kits=void 0;var o=a(n(95102)),r=a(n(85867));function a(e){return e&&e.__esModule?e:{"default":e}}var i=[o["default"],r["default"]];t.kits=i},10522:function(e,t,n){"use strict";t.__esModule=!0,t.Boardgame=void 0;var o=n(96323),r=n(2381),a=n(31246),i=n(44135),c=n(26949),l=n(65844),u=n(15237),d=n(68035),s=n(25540);function p(e,t){return p=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e},p(e,t)}var m=function(e){var t,n;function c(t){return e.call(this,t)||this}n=e,(t=c).prototype=Object.create(n.prototype),t.prototype.constructor=t,p(t,n);var l=c.prototype;return l.componentDidUpdate=function(){(0,i.handleEvents)(this.context),(0,i.adjustSizes)(this.context)},l.render=function(){var e,t=(0,a.useBackend)(this.context).data,n=(null==t||null==(e=t.boardInfo)?void 0:e.name)||"Boardgame";return(0,o.createComponentVNode)(2,r.Window,{title:n,width:580,height:512,children:[(0,o.createComponentVNode)(2,f),(0,o.createComponentVNode)(2,u.TitleBar),(0,o.createComponentVNode)(2,d.HeldPieceRenderer),(0,o.createComponentVNode)(2,s.BoardgameContents)]})},c}(o.Component);t.Boardgame=m;var f=function(e,t){var n=(0,l.useStates)(t),r=n.helpModalClose;return n.isHelpModalOpen?(0,o.createComponentVNode)(2,c.Dimmer,{className:"boardgame__helpmodal",onClick:r,children:(0,o.createComponentVNode)(2,c.Box,{children:[(0,o.createVNode)(1,"p",null,(0,o.createVNode)(1,"strong",null,"Help",16),2),(0,o.createVNode)(1,"p",null,[(0,o.createComponentVNode)(2,c.Icon,{name:"mouse"}),(0,o.createTextVNode)(" Click on a piece to select it, click on a tile to move it there.")],4),(0,o.createVNode)(1,"p",null,"Pieces may also be click-dragged to a target tile.",16),(0,o.createVNode)(1,"p",null,"Moving a piece onto a tile occupied by another piece will replace/capture the piece already on that tile.",16),(0,o.createVNode)(1,"p",null,"Right click a piece to delete it.",16)]})}):null}},65844:function(e,t,n){"use strict";t.__esModule=!0,t.generateBoardNotationLetters=t.numToBoardNotation=t.PalleteExpandType=t.SizeType=t.XYType=t.TileSizeType=t.UserDataType=t.PieceDataType=t.BoardgameData=t.StylingType=t.BoardInfoType=t.useStates=t.useActions=void 0;var o=n(51887);t.useActions=o.useActions;var r=n(31463);t.useStates=r.useStates;var a=n(76434);t.BoardInfoType=a.BoardInfoType,t.StylingType=a.StylingType,t.BoardgameData=a.BoardgameData,t.PieceDataType=a.PieceDataType,t.UserDataType=a.UserDataType,t.TileSizeType=a.TileSizeType,t.XYType=a.XYType,t.SizeType=a.SizeType,t.PalleteExpandType=a.PalleteExpandType;var i=n(43785);t.numToBoardNotation=i.numToBoardNotation,t.generateBoardNotationLetters=i.generateBoardNotationLetters},43785:function(e,t){"use strict";t.__esModule=!0,t.generateBoardNotationLetters=t.numToBoardNotation=void 0;var n=function(e){for(var t="",n=e;n>=0;){var o=n%26;t=String.fromCharCode(65+o)+t,n=Math.floor(n/26)-1}return t};t.numToBoardNotation=n;t.generateBoardNotationLetters=function(e,t){for(var o=[],r=0;r<e;r++)t?o.push(n(e-r)):o.push(n(r));return o}},76434:function(){},51887:function(e,t){"use strict";t.__esModule=!0,t.useActions=void 0;t.useActions=function(e){return{pieceCreate:function(t,n,o){e("pieceCreate",{code:t,x:n,y:o})},pieceRemove:function(t){e("pieceRemove",{piece:t})},pieceRemoveHeld:function(t){e("pieceRemoveHeld",{ckey:t})},pieceSelect:function(t,n){e("pieceSelect",{ckey:t,piece:n})},pieceDeselect:function(t){e("pieceDeselect",{ckey:t})},piecePlace:function(t,n,o){e("piecePlace",{ckey:t,x:n,y:o})},applyGNot:function(t){e("applyGNot",{gnot:t})},paletteSet:function(t,n){e("paletteSet",{ckey:t,code:n})},paletteClear:function(t){e("paletteClear",{ckey:t})},boardClear:function(){e("applyGNot",{gnot:""})}}}},31463:function(e,t,n){"use strict";t.__esModule=!0,t.useStates=t.STATES=t.DEFAULT_STATES=void 0;var o=n(31246),r={FLIP:!1,ZOOM:1,MOUSE_COORDS:{x:0,y:0}};t.DEFAULT_STATES=r;var a=function(e){return{flip:(0,o.useLocalState)(e,"flip",r.FLIP),zoom:(0,o.useLocalState)(e,"zoom",r.ZOOM),mouseCoords:(0,o.useLocalState)(e,"mouseCoords",r.MOUSE_COORDS),palettesExpanded:(0,o.useLocalState)(e,"palettesExpanded",{}),paletteLastElement:(0,o.useLocalState)(e,"paletteLastElement",null),tileSize:(0,o.useLocalState)(e,"tileSize",{width:0,height:0}),helpModalOpen:(0,o.useLocalState)(e,"helpModalOpen",!1)}};t.STATES=a;t.useStates=function(e){var t=a(e);return{paletteLastElementSet:function(e){(0,t.paletteLastElement[1])(e)},paletteLastElement:t.paletteLastElement[0],mouseCoordsSet:function(e){(0,t.mouseCoords[1])({x:e.x,y:e.y})},mouseCoords:t.mouseCoords[0],toggleFlip:function(){var e=t.flip,n=e[0];(0,e[1])(!n)},isFlipped:t.flip[0],helpModalClose:function(){(0,t.helpModalOpen[1])(!1)},helpModalOpen:function(){(0,t.helpModalOpen[1])(!0)},isHelpModalOpen:t.helpModalOpen[0],expandPalette:function(e){var n;(0,t.palettesExpanded[1])(Object.assign({},t.palettesExpanded[0],((n={})[e]=!0,n)))},togglePalette:function(e){var n;(0,t.palettesExpanded[1])(Object.assign({},t.palettesExpanded[0],((n={})[e]=!t.palettesExpanded[0][e],n)))},isExpanded:function(e){return!!t.palettesExpanded[0][e]},setTileSizeType:function(e){(0,t.tileSize[1])(e)},tileSize:t.tileSize[0]}}},44135:function(e,t,n){"use strict";t.__esModule=!0,t.handleEvents=t.adjustSizes=void 0;var o=n(31246),r=n(65844);t.adjustSizes=function(e){a(e),i(e)};var a=function(e){var t=(0,o.useBackend)(e).data,n=(0,r.useStates)(e),a=n.setTileSizeType,i=n.tileSize,c=document.getElementsByClassName("boardgame__board-inner")[0],l=0,u=0;if(c){var d=c.getBoundingClientRect(),s=d.width-40,p=d.height-40;l=s/t.boardInfo.width,u=p/t.boardInfo.height}l===i.width&&u===i.height||a({width:l,height:u})},i=function(e){var t=(0,o.useBackend)(e).data.styling.aspectRatio,n=500,r=400,a=document.getElementsByClassName("boardgame__window")[0];if(a){var i=a.getBoundingClientRect(),c=i.width,l=i.height;if(c===n&&l===r)return;var u=c<l?c:l;n=u+100,r=u+32.25,t&&(n=u*t+100,r=u+32.25)}Byond.winset(window.__windowId__,{size:n+"x"+r})};t.handleEvents=function(e){var t=(0,o.useBackend)(e),n=t.act,a=t.data,i=(0,r.useActions)(n),c=i.paletteClear,l=i.pieceDeselect;document.body.oncontextmenu=function(e){var t,n;(e.preventDefault(),2===e.button)&&(null!=(t=a.currentUser)&&t.palette&&c(a.currentUser.ckey),null!=(n=a.currentUser)&&n.selected&&l(a.currentUser.ckey));return!1},document.body.onmouseleave=function(){var e;null!=(e=a.currentUser)&&e.palette&&c(a.currentUser.ckey)}}},10818:function(e,t,n){"use strict";t.__esModule=!0,t.Bombsim=void 0;var o=n(96323),r=n(31246),a=n(26949),i=n(2381),c=n(31567),l=function(e,t){var n=(0,r.useBackend)(t),i=n.act,c=n.data,l=(0,o.createComponentVNode)(2,a.Button,{icon:"wifi",onClick:function(){return d()},children:"Reset Connection"}),d=function(){i("reset"),C("NO CONNECTION")},s=(0,r.useLocalState)(t,"bits",c.net_number),p=s[0],m=s[1],f=(0,r.useLocalState)(t,"connection","OK CONNECTION"),h=f[0],C=f[1];"NO CONNECTION"===h&&null!==c.host_id&&C("OK CONNECTION");for(var g=[],N=0;N<4;N++)g.push((0,o.createComponentVNode)(2,a.Stack.Item,{children:(0,o.createComponentVNode)(2,u,{local_bits:p,setter:m,bit_pos:N})}));return(0,o.createComponentVNode)(2,a.Section,{title:"Maintenence Panel",buttons:l,children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Host Connection",children:h}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Configuration Switches",verticalAlign:"middle",children:(0,o.createComponentVNode)(2,a.Stack,{children:g})})]})},u=function(e,t){var n=(0,r.useBackend)(t),i=n.act,c=(n.data,e.local_bits),l=e.setter,u=e.bit_pos,d=c&1<<u;return(0,o.createComponentVNode)(2,a.Button,{width:2,height:2,color:d?"green":"red",onClick:function(){i("config_switch",{switch_flicked:u}),l(c^1<<u)}})};t.Bombsim=function(e,t){var n=(0,r.useBackend)(t),u=n.act,d=n.data,s=(0,o.createComponentVNode)(2,a.Button,{icon:"burst",disabled:!d.is_ready,onClick:function(){return u("simulate")},children:"Begin Simulation"});return(0,o.createComponentVNode)(2,i.Window,{width:400,height:d.panel_open?400:300,children:(0,o.createComponentVNode)(2,i.Window.Content,{children:[(0,o.createComponentVNode)(2,a.Stack,{children:[(0,o.createComponentVNode)(2,a.Stack.Item,{children:(0,o.createComponentVNode)(2,c.TankInfo,{tank:d.tank_one,tankNum:1})}),(0,o.createComponentVNode)(2,a.Stack.Item,{children:(0,o.createComponentVNode)(2,c.TankInfo,{tank:d.tank_two,tankNum:2})})]}),(0,o.createComponentVNode)(2,a.Section,{mt:1,title:"Simulator",buttons:s,children:(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Simulation",children:null!==d.vr_bomb?"ACTIVE":"INACTIVE"}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Status",children:d.readiness_dialogue}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Cooldown",children:d.is_ready?"None":d.cooldown})]})}),d.panel_open?(0,o.createComponentVNode)(2,l):""]})})}},71650:function(){},15094:function(e,t,n){"use strict";t.__esModule=!0,t.BugReportForm=t.InputTitle=t.Textarea=void 0;var o=n(96323),r=n(31246),a=n(26949),i=n(25808),c=n(2381),l=function(e,t){return(0,o.createVNode)(128,"textarea",null,e.defaultText,0,{rows:4,style:{"overflow-y":"hidden",width:"100%","background-color":"black",border:"solid 1px #6992c2",color:"white"},onInput:function(e){e.target.style.height="auto",e.target.style.height=e.target.scrollHeight+"px"},id:e.id,placeholder:e.placeholder})};t.Textarea=l;var u=function(e,t){return(0,o.createVNode)(1,"h2",null,[e.children,e.required&&(0,o.createVNode)(1,"span",null," *",0,{style:{color:"red"}})],0)};t.InputTitle=u;t.BugReportForm=function(e,t){var n=(0,r.useBackend)(t),d=n.act,s=(n.data,(0,r.useLocalState)(t,"is_secret",!1)),p=s[0],m=s[1],f=(0,r.useLocalState)(t,"tag","MINOR"),h=f[0],C=f[1];return(0,o.createComponentVNode)(2,c.Window,{title:"Bug Report Form",width:600,height:700,children:(0,o.createComponentVNode)(2,c.Window.Content,{children:(0,o.createComponentVNode)(2,a.Section,{fill:!0,scrollable:!0,children:(0,o.createComponentVNode)(2,a.Flex,{direction:"column",height:"100%",children:[(0,o.createComponentVNode)(2,a.Flex.Item,{style:{"text-align":"center"},children:(0,o.createVNode)(1,"a",null,"If you have a GitHub account click here instead",16,{href:"https://github.com/goonstation/goonstation/issues/new?assignees=&labels=&template=bug_report.yml",target:"_blank",rel:"noreferrer",style:{color:"#6992c2"}})}),(0,o.createComponentVNode)(2,a.Flex.Item,{children:[(0,o.createComponentVNode)(2,u,{required:!0,children:"Title"}),(0,o.createComponentVNode)(2,a.Input,{width:"100%",id:"title"})]}),(0,o.createComponentVNode)(2,a.Flex.Item,{my:2,children:[(0,o.createVNode)(1,"h2",null,"Tags",0),[["Trivial","TRIVIAL","A bug that is extremely trivial, such as a spelling issue."],["Minor","MINOR","A bug that does not impact usage of a feature. These are often visual issues."],["Major","MAJOR","A bug that significantly impacts the usage of a feature."],["Critical","CRITICAL","A bug that significantly impacts the progression of the round."]].map((function(e){return(0,o.createComponentVNode)(2,i.ButtonCheckbox,{checked:e[1]===h,onClick:function(){return C(e[1])},tooltip:e[2],tooltipPosition:"bottom",children:e[0]},e[1])}))]}),(0,o.createComponentVNode)(2,a.Flex.Item,{my:2,children:[(0,o.createComponentVNode)(2,u,{required:!0,children:"Description"}),"Give a short description of the bug",(0,o.createComponentVNode)(2,a.Input,{width:"100%",id:"description"})]}),(0,o.createComponentVNode)(2,a.Flex.Item,{my:2,children:[(0,o.createComponentVNode)(2,u,{required:!0,children:"Steps To Reproduce"}),"Give a list of steps to reproduce this issue",(0,o.createComponentVNode)(2,l,{id:"steps",placeholder:"1.\n2.\n3."})]}),(0,o.createComponentVNode)(2,a.Flex.Item,{my:2,children:[(0,o.createComponentVNode)(2,u,{required:!0,children:"Expected Behavior"}),"Give a short description of what you expected to happen",(0,o.createComponentVNode)(2,a.Input,{width:"100%",id:"expected_behavior"})]}),(0,o.createComponentVNode)(2,a.Flex.Item,{my:2,children:[(0,o.createVNode)(1,"h2",null,"Additional Information & Screenshots",0),"Add screenshots and any other information here",(0,o.createComponentVNode)(2,l,{id:"additional"})]}),(0,o.createComponentVNode)(2,a.Flex.Item,{my:2,children:[(0,o.createVNode)(1,"h2",null,"Is this bug an exploit or related to secret content?",0),(0,o.createComponentVNode)(2,i.ButtonCheckbox,{checked:p,onClick:function(){m(!p)},children:"Exploit / Secret"})]}),(0,o.createComponentVNode)(2,a.Flex.Item,{my:2,children:(0,o.createComponentVNode)(2,a.Flex,{style:{"justify-content":"center"},children:[(0,o.createComponentVNode)(2,a.Flex.Item,{mx:1,children:(0,o.createVNode)(1,"div","Button Button--color--default","Submit",0,{onClick:function(){var e={};e.secret=p,e.tags=[h],e.steps=document.getElementById("steps").value,e.additional=document.getElementById("additional").value,e.title=document.getElementById("title").getElementsByTagName("input")[0].value,e.description=document.getElementById("description").getElementsByTagName("input")[0].value,e.expected_behavior=document.getElementById("expected_behavior").getElementsByTagName("input")[0].value,e.title&&e.description&&e.expected_behavior&&e.steps?d("confirm",e):alert("Please fill out all required fields!")}})}),(0,o.createComponentVNode)(2,a.Flex.Item,{mx:1,children:(0,o.createVNode)(1,"div","Button Button--color--default","Cancel",0,{onClick:function(){return d("cancel")}})})]})})]})})})})}},65101:function(e,t,n){"use strict";t.__esModule=!0,t.CAViewer=void 0;var o=n(96323),r=n(31246),a=n(26949),i=n(2381);t.CAViewer=function(e,t){var n=(0,r.useBackend)(t),c=n.act,l=n.data,u=l.CAType,d=l.CAData,s=(l.viewWidth,l.typeData),p=l.settings;return(0,o.createComponentVNode)(2,i.Window,{title:"Cellular Automata Viewer",width:900,height:800,children:(0,o.createComponentVNode)(2,i.Window.Content,{scrollable:!0,children:(0,o.createComponentVNode)(2,a.Section,{title:(0,o.createComponentVNode)(2,a.Box,{inline:!0,children:u}),buttons:(0,o.createComponentVNode)(2,a.Dropdown,{displayText:"CA Type",width:20,options:Object.keys(s),onSelected:function(e){return c("set_ca",{name:"default",priority:10,type:e})}}),children:[(0,o.createComponentVNode)(2,a.Flex,{direction:"row",children:[(0,o.createComponentVNode)(2,a.Flex.Item,{ml:2}),(0,o.createComponentVNode)(2,a.Flex.Item,{ml:1,children:(0,o.createComponentVNode)(2,a.Section,{title:"Description",children:"Description Goes here?"})}),(0,o.createComponentVNode)(2,a.Flex.Item,{ml:4}),u&&s[u].options&&Object.keys(s[u].options).length?Object.keys(s[u].options).map((function(e,t){return(0,o.createComponentVNode)(2,a.Section,{title:s[u].options[e],children:(0,o.createComponentVNode)(2,a.NumberInput,{value:p[s[u].options[e]],minValue:0,maxValue:500,stepPixelSize:5,width:"39px",onDrag:function(t,n){return c("settings",{name:s[u].options[e],data:n})}})},t)})):""]}),(0,o.createComponentVNode)(2,a.Box,{m:1,children:(0,o.createComponentVNode)(2,a.Button,{fluid:!0,onClick:function(){return c("generate")},children:"Generate"})}),(0,o.createComponentVNode)(2,a.Section,{children:(0,o.createComponentVNode)(2,a.Box,{preserveWhitespace:!0,fontFamily:"Consolas",children:d.replace(/0/g,"-").replace(/(.{100})/g,"$1\n")})})]})})})}},57399:function(e,t,n){"use strict";t.__esModule=!0,t.Cashreg=void 0;var o=n(96323),r=n(1060),a=n(31246),i=n(26949),c=n(2381);t.Cashreg=function(e,t){var n=(0,a.useBackend)(t),r=n.act,u=n.data,d=u.active_transaction,s=u.amount,p=u.is_authorised,m=u.is_owner,f=u.name,h=u.owner,C=u.tip_proportion;return(0,o.createComponentVNode)(2,c.Window,{title:f,theme:"ntos",height:240,width:300,children:(0,o.createComponentVNode)(2,c.Window.Content,{children:(0,o.createComponentVNode)(2,i.Stack,{vertical:!0,fill:!0,children:[(0,o.createComponentVNode)(2,i.Stack.Item,{children:(0,o.createComponentVNode)(2,i.Button,{className:"cashreg__ownerbutton",color:"blue",disabled:d,onClick:h?(p||m)&&function(){return r("reset")}:function(){return r("swipe_owner")},tooltip:h&&(p||m)&&"Click to remove ownership",width:"100%",children:h?"Owner: "+h:"Swipe ID to own"})}),(0,o.createComponentVNode)(2,i.Stack.Item,{grow:!0,children:m?(0,o.createComponentVNode)(2,i.Tooltip,{content:s?"Click to clear transaction":"Click to set price",children:(0,o.createComponentVNode)(2,l)}):(0,o.createComponentVNode)(2,l)}),h&&(0,o.createComponentVNode)(2,i.Stack.Item,{children:(0,o.createComponentVNode)(2,i.Stack,{fill:!0,children:[(0,o.createComponentVNode)(2,i.Stack.Item,{grow:!0,children:(0,o.createComponentVNode)(2,i.Button,{align:"center",className:"cashreg__tip",color:"blue",disabled:!s||d,onClick:function(){return r("set_tip")},width:"100%",children:"Tip: "+100*C+"%"})}),(0,o.createComponentVNode)(2,i.Stack.Item,{grow:!0,children:(0,o.createComponentVNode)(2,i.Button,{align:"center",className:"cashreg__pay",color:"blue",disabled:!s||d,onClick:function(){return r("swipe_payer")},width:"100%",children:"Swipe ID to pay"})})]})})]})})})};var l=function(e,t){var n=(0,a.useBackend)(t),c=n.act,l=n.data,u=l.amount,d=l.is_owner,s=l.owner,p=l.tip_amount,m=l.tip_proportion,f=l.total;return(0,o.createComponentVNode)(2,i.Stack,{fill:!0,vertical:!0,align:"center",justify:"space-around",className:(0,r.classes)(["cashreg__centerpart",s&&d&&"cashreg__amount"]),onClick:s&&d&&(u?function(){return c("clear_transaction")}:function(){return c("set_amount")}),children:s?u?(0,o.createVNode)(1,"table","cashreg__table",(0,o.createVNode)(1,"tbody",null,[(0,o.createVNode)(1,"tr",null,[(0,o.createVNode)(1,"td",null,"Amount",0),(0,o.createVNode)(1,"td","cashreg__table_cellright",u+"\u2abd",0)],4),!!m&&(0,o.createFragment)([(0,o.createVNode)(1,"tr",null,[(0,o.createVNode)(1,"td",null,"Tip (%)",0),(0,o.createVNode)(1,"td","cashreg__table_cellright",100*m+"%",0)],4),(0,o.createVNode)(1,"tr",null,[(0,o.createVNode)(1,"td",null,"Tip (\u2abd)",0),(0,o.createVNode)(1,"td","cashreg__table_cellright",p+"\u2abd",0)],4)],4),(0,o.createVNode)(1,"tr",null,[(0,o.createVNode)(1,"td",null,"Total",0),(0,o.createVNode)(1,"td","cashreg__table_cellright",f+"\u2abd",0)],4)],0),2):(0,o.createComponentVNode)(2,i.Stack.Item,{align:"center",children:d?"Enter amount":"Owner must enter amount"}):(0,o.createComponentVNode)(2,i.Stack.Item,{align:"center",children:"Please register owner"})})}},48341:function(e,t,n){"use strict";t.__esModule=!0,t.CentComViewer=void 0;var o=n(96323),r=n(31246),a=n(26949),i=n(2381);function c(e,t){var n="undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(n)return(n=n.call(e)).next.bind(n);if(Array.isArray(e)||(n=function(e,t){if(!e)return;if("string"==typeof e)return l(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);"Object"===n&&e.constructor&&(n=e.constructor.name);if("Map"===n||"Set"===n)return Array.from(e);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return l(e,t)}(e))||t&&e&&"number"==typeof e.length){n&&(e=n);var o=0;return function(){return o>=e.length?{done:!0}:{done:!1,value:e[o++]}}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}function l(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,o=new Array(t);n<t;n++)o[n]=e[n];return o}var u=function(e,t){for(var n,o=36e5,r=864e5,a=[{interval:1e3,label:"second"},{interval:6e4,label:"minute"},{interval:o,label:"hour"},{interval:r,label:"day"},{interval:2592e6,label:"month"},{interval:31536e6,label:"year"}],i=new Date(t)-new Date(e),l=c(a.reverse());!(n=l()).done;){var u=n.value,d=u.interval,s=u.label;if(i>=d){var p=Number((i/d).toFixed(2));return p+" "+s+(1===p?"":"s")}}return"Permanent"},d=function(e){var t=e.ban,n=t.bannedOn,r=t.expires,i=t.jobs,c=t.reason,l=t.sourceName,d=t.type,s=t.unbannedBy,p=new Date(r)<new Date,m="";return t.active&&!p?m="Banned":!s&&p?m="Expired":s&&(m="Unbanned"),(0,o.createComponentVNode)(2,a.Section,{title:d+" Ban | "+l,children:(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Banned",children:new Date(n).toLocaleString("en-US",{year:"numeric",month:"long",day:"2-digit",hour:"2-digit",minute:"2-digit",second:"2-digit"})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Length",children:u(n,r)}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Reason",children:c}),i&&(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Jobs",children:i.join(", ")}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Status",color:"Banned"===m?"bad":"Expired"===m?"average":"good",children:m})]})})},s=function(e){var t=e.banData,n=e.filterInactive?t.filter((function(e){return e.active})):t;return(0,o.createComponentVNode)(2,a.Stack,{fill:!0,vertical:!0,children:n.map((function(e,t){return(0,o.createComponentVNode)(2,a.Stack.Item,{children:(0,o.createComponentVNode)(2,d,{ban:e})},t)}))})},p=function(e,t){var n=(0,r.useBackend)(t).data,a=n.banData,i=n.filterInactive;return(0,o.createComponentVNode)(2,s,{banData:a,filterInactive:i})};t.CentComViewer=function(e,t){var n=(0,r.useBackend)(t),c=n.act,l=n.data,u=l.key,d=l.filterInactive;return(0,o.createComponentVNode)(2,i.Window,{title:"CentCom Viewer",width:"650",height:"500",children:(0,o.createComponentVNode)(2,i.Window.Content,{children:(0,o.createComponentVNode)(2,a.Stack,{fill:!0,vertical:!0,children:[(0,o.createComponentVNode)(2,a.Stack.Item,{children:(0,o.createComponentVNode)(2,a.Section,{title:(0,o.createFragment)(["Ban Data for ",(0,o.createComponentVNode)(2,a.Input,{width:"50vw",value:u,onChange:function(e,t){return c("updateKey",{value:t})}})],0),buttons:(0,o.createComponentVNode)(2,a.Button.Checkbox,{checked:d,onClick:function(){return c("toggle-filterInactive")},children:"Filter Inactive"})})}),(0,o.createComponentVNode)(2,a.Stack.Item,{grow:!0,children:(0,o.createComponentVNode)(2,a.Section,{scrollable:!0,fill:!0,children:(0,o.createComponentVNode)(2,a.Stack,{vertical:!0,children:(0,o.createComponentVNode)(2,p)})})})]})})})}},96074:function(e,t,n){"use strict";t.__esModule=!0,t.CharacterTab=void 0;var o=n(96323),r=n(31246),a=n(26949),i=function(e,t){var n=e.id,i=e.color,c=e.style,l=(0,r.useBackend)(t),u=l.act;l.data;return(0,o.createFragment)([(0,o.createComponentVNode)(2,a.ColorButton,{color:i,onClick:function(){return u("update-detail-color",{id:n})}}),(0,o.createComponentVNode)(2,a.Button,{icon:"chevron-left",onClick:function(){return u("update-detail-style-cycle",{id:n,direction:-1})}}),(0,o.createComponentVNode)(2,a.Button,{icon:"chevron-right",onClick:function(){return u("update-detail-style-cycle",{id:n,direction:1})}}),(0,o.createComponentVNode)(2,a.Button,{onClick:function(){return u("update-detail-style",{id:n})},children:c})],4)},c=function(e,t){var n=e.slot_id,i=(0,r.useBackend)(t),c=i.act,l=i.data;return(0,o.createComponentVNode)(2,a.Button,{onClick:function(){return c("pick_part",{slot_id:n})},tooltip:l.partsData[n].name,children:(0,o.createComponentVNode)(2,a.Image,{pixelated:!0,width:"64px",height:"64px",src:"data:image/png;base64,"+l.partsData[n].img,backgroundColor:"transparent"})})};t.CharacterTab=function(e,t){var n=(0,r.useBackend)(t),l=n.act,u=n.data;return(0,o.createFragment)([(0,o.createComponentVNode)(2,a.Section,{title:"Appearance",buttons:(0,o.createComponentVNode)(2,a.Button.Checkbox,{checked:u.randomAppearance,onClick:function(){return l("update-randomAppearance")},children:"Random appearance"}),children:(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Skin Tone",children:[(0,o.createComponentVNode)(2,a.ColorButton,{color:u.skinTone,onClick:function(){return l("update-skinTone")}}),(0,o.createComponentVNode)(2,a.Button,{icon:"angle-double-left",onClick:function(){return l("decrease-skinTone",{alot:1})}}),(0,o.createComponentVNode)(2,a.Button,{icon:"chevron-left",onClick:function(){return l("decrease-skinTone")}}),(0,o.createComponentVNode)(2,a.Button,{icon:"chevron-right",onClick:function(){return l("increase-skinTone")}}),(0,o.createComponentVNode)(2,a.Button,{icon:"angle-double-right",onClick:function(){return l("increase-skinTone",{alot:1})}})]}),(0,o.createComponentVNode)(2,a.LabeledList.Divider),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Eye Color",children:(0,o.createComponentVNode)(2,a.ColorButton,{color:u.eyeColor,onClick:function(){return l("update-eyeColor")}})}),(0,o.createComponentVNode)(2,a.LabeledList.Divider),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Top Detail",children:(0,o.createComponentVNode)(2,i,{id:"custom3",color:u.customColor3,style:u.customStyle3})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Middle Detail",children:(0,o.createComponentVNode)(2,i,{id:"custom2",color:u.customColor2,style:u.customStyle2})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Bottom Detail",children:(0,o.createComponentVNode)(2,i,{id:"custom1",color:u.customColor1,style:u.customStyle1})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Special Style",children:(0,o.createComponentVNode)(2,a.Button,{onClick:function(){return l("update-specialStyle")},children:u.specialStyle||"default"})}),(0,o.createComponentVNode)(2,a.LabeledList.Divider),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Underwear",children:(0,o.createComponentVNode)(2,i,{id:"underwear",color:u.underwearColor,style:u.underwearStyle})}),(0,o.createComponentVNode)(2,a.LabeledList.Divider),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Bionics",children:[(0,o.createComponentVNode)(2,c,{slot_id:"r_arm"}),(0,o.createComponentVNode)(2,c,{slot_id:"l_arm"}),(0,o.createComponentVNode)(2,a.Box,{children:["Trait points:"," ",(0,o.createComponentVNode)(2,a.Box,{as:"span",color:u.traitsPointsTotal>0?"good":"bad",children:u.traitsPointsTotal})]})]}),(0,o.createComponentVNode)(2,a.LabeledList.Divider)]})}),(0,o.createComponentVNode)(2,a.Section,{title:"Sounds",children:(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Fart",children:[(0,o.createComponentVNode)(2,a.Button,{onClick:function(){return l("update-fartsound")},children:u.fartsound}),(0,o.createComponentVNode)(2,a.Button,{icon:"volume-up",onClick:function(){return l("previewSound",{fartsound:1})},children:"Preview"})]}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Scream",children:[(0,o.createComponentVNode)(2,a.Button,{onClick:function(){return l("update-screamsound")},children:u.screamsound}),(0,o.createComponentVNode)(2,a.Button,{icon:"volume-up",onClick:function(){return l("previewSound",{screamsound:1})},children:"Preview"})]}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Chat",children:[(0,o.createComponentVNode)(2,a.Button,{onClick:function(){return l("update-chatsound")},children:u.chatsound}),(0,o.createComponentVNode)(2,a.Button,{icon:"volume-up",onClick:function(){return l("previewSound",{chatsound:1})},children:"Preview"})]})]})})],4)}},56374:function(e,t,n){"use strict";t.__esModule=!0,t.GameSettingsTab=void 0;var o=n(96323),r=n(31246),a=n(26949),i=n(59576);t.GameSettingsTab=function(e,t){var n=(0,r.useBackend)(t),c=n.act,l=n.data;return(0,o.createComponentVNode)(2,a.Section,{children:(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Popup Font Size",buttons:(0,o.createComponentVNode)(2,a.Button,{onClick:function(){return c("update-fontSize",{reset:1})},children:"Reset"}),children:[(0,o.createComponentVNode)(2,a.Box,{mb:"5px",color:"label",children:"Changes the font size used in popup windows. Only works when CHUI is disabled."}),(0,o.createComponentVNode)(2,a.Button,{onClick:function(){return c("update-fontSize")},children:l.fontSize?l.fontSize+"%":"Default"})]}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Messages",children:[(0,o.createComponentVNode)(2,a.Box,{mb:"5px",color:"label",children:"Toggles if certain messages are shown in the chat window by default. You can change these mid-round by using the Toggle OOC/LOOC commands under the Commands tab in the top right."}),l.isMentor?(0,o.createComponentVNode)(2,a.Box,{mb:"5px",children:(0,o.createComponentVNode)(2,a.Button.Checkbox,{checked:l.seeMentorPms,onClick:function(){return c("update-seeMentorPms")},children:"Display Mentorhelp"})}):null,(0,o.createComponentVNode)(2,a.Box,{mb:"5px",children:(0,o.createComponentVNode)(2,a.Button.Checkbox,{checked:l.listenOoc,onClick:function(){return c("update-listenOoc")},tooltip:"Out-of-Character chat. This mostly just shows up on the RP server and at the end of rounds.",children:"Display OOC chat"})}),(0,o.createComponentVNode)(2,a.Box,{mb:"5px",children:(0,o.createComponentVNode)(2,a.Button.Checkbox,{checked:l.listenLooc,onClick:function(){return c("update-listenLooc")},tooltip:"Local Out-of-Character is OOC chat, but only appears for nearby players. This is basically only used on the RP server.",children:"Display LOOC chat"})}),(0,o.createComponentVNode)(2,a.Box,{mb:"5px",children:(0,o.createComponentVNode)(2,a.Button.Checkbox,{checked:!l.flyingChatHidden,onClick:function(){return c("update-flyingChatHidden")},tooltip:"Chat messages will appear over characters as they're talking.",children:"See chat above people's heads"})}),(0,o.createComponentVNode)(2,a.Box,{mb:"5px",children:(0,o.createComponentVNode)(2,a.Button.Checkbox,{checked:l.autoCapitalization,onClick:function(){return c("update-autoCapitalization")},tooltip:"Chat messages you send will be automatically capitalized.",children:"Auto-capitalize your messages"})}),(0,o.createComponentVNode)(2,a.Box,{mb:"5px",children:(0,o.createComponentVNode)(2,a.Button.Checkbox,{checked:l.localDeadchat,onClick:function(){return c("update-localDeadchat")},tooltip:"You'll only hear chat messages from living people on your screen as a ghost.",children:"Local ghost hearing"})})]}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"HUD Theme",children:[(0,o.createComponentVNode)(2,a.Box,{mb:"5px",children:(0,o.createComponentVNode)(2,a.Button,{onClick:function(){return c("update-hudTheme")},children:"Change"})}),(0,o.createComponentVNode)(2,a.Box,{children:(0,o.createComponentVNode)(2,a.Image,{pixelated:!0,src:"data:image/png;base64,"+l.hudThemePreview,width:"32px",height:"32px"})})]}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Targeting Cursor",children:[(0,o.createComponentVNode)(2,a.Box,{mb:"5px",children:(0,o.createComponentVNode)(2,a.Button,{onClick:function(){return c("update-targetingCursor")},children:"Change"})}),(0,o.createComponentVNode)(2,a.Box,{children:(0,o.createComponentVNode)(2,a.Image,{pixelated:!0,src:"data:image/png;base64,"+l.targetingCursorPreview,width:"32px",height:"32px"})})]}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Tooltips",children:[(0,o.createComponentVNode)(2,a.Box,{mb:"5px",color:"label",children:"Tooltips can appear when hovering over items. These tooltips can provide bits of information about the item, such as attack strength, special moves, etc."}),(0,o.createComponentVNode)(2,a.Box,{mb:"5px",children:(0,o.createComponentVNode)(2,a.Button.Checkbox,{checked:l.tooltipOption===i.CharacterPreferencesTooltip.Always,onClick:function(){return c("update-tooltipOption",{value:i.CharacterPreferencesTooltip.Always})},children:"Show Always"})}),(0,o.createComponentVNode)(2,a.Box,{mb:"5px",children:(0,o.createComponentVNode)(2,a.Button.Checkbox,{checked:l.tooltipOption===i.CharacterPreferencesTooltip.Alt,onClick:function(){return c("update-tooltipOption",{value:i.CharacterPreferencesTooltip.Alt})},children:"Show When ALT is held"})}),(0,o.createComponentVNode)(2,a.Box,{mb:"5px",children:(0,o.createComponentVNode)(2,a.Button.Checkbox,{checked:l.tooltipOption===i.CharacterPreferencesTooltip.Never,onClick:function(){return c("update-tooltipOption",{value:i.CharacterPreferencesTooltip.Never})},children:"Never Show"})})]}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"tgui",children:[(0,o.createComponentVNode)(2,a.Box,{mb:"5px",color:"label",children:"TGUI is the UI framework we use for some game windows, and it comes with options!"}),(0,o.createComponentVNode)(2,a.Box,{mb:"5px",children:(0,o.createComponentVNode)(2,a.Button.Checkbox,{checked:l.tguiFancy,onClick:function(){return c("update-tguiFancy")},children:"Makes TGUI windows look better, at the cost of compatibility."})}),(0,o.createComponentVNode)(2,a.Box,{mb:"5px",children:(0,o.createComponentVNode)(2,a.Button.Checkbox,{checked:l.tguiLock,onClick:function(){return c("update-tguiLock")},children:"Locks TGUI windows to your main monitor."})})]}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Popups",children:[(0,o.createComponentVNode)(2,a.Box,{mb:"5px",color:"label",children:"These options toggle the popups that appear when logging in and at the end of a round."}),(0,o.createComponentVNode)(2,a.Box,{mb:"5px",children:(0,o.createComponentVNode)(2,a.Button.Checkbox,{checked:l.viewChangelog,onClick:function(){return c("update-viewChangelog")},tooltip:"The changelog can be shown at any time by using the 'Changelog' command, under the Commands tab in the top right.",tooltipPosition:"top",children:"Auto-open changelog"})}),(0,o.createComponentVNode)(2,a.Box,{mb:"5px",children:(0,o.createComponentVNode)(2,a.Button.Checkbox,{checked:l.viewScore,onClick:function(){return c("update-viewScore")},tooltip:"The end-of-round scoring shows various stats on how the round went. If this option is off, you won't be able to see it.",tooltipPosition:"top",children:"Auto-open end-of-round score"})}),(0,o.createComponentVNode)(2,a.Box,{mb:"5px",children:(0,o.createComponentVNode)(2,a.Button.Checkbox,{checked:l.viewTickets,onClick:function(){return c("update-viewTickets")},tooltip:"The end-of-round ticketing summary shows the various tickets and fines that were handed out. If this option is off, you can still see them on Goonhub (goonhub.com).",tooltipPosition:"top",children:"Auto-open end-of-round ticket summary"})})]}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Controls",children:[(0,o.createComponentVNode)(2,a.Box,{mb:"5px",color:"label",children:"Various options for how you control your character and the game."}),(0,o.createComponentVNode)(2,a.Box,{mb:"5px",children:(0,o.createComponentVNode)(2,a.Button.Checkbox,{checked:l.useClickBuffer,onClick:function(){return c("update-useClickBuffer")},tooltip:"There is a cooldown after clicking on things in-game. When enabled, if you click something during this cooldown, the game will apply that click after the cooldown. Otherwise, the click is ignored.",tooltipPosition:"top",children:"Queue Combat Clicks"})}),(0,o.createComponentVNode)(2,a.Box,{mb:"5px",children:(0,o.createComponentVNode)(2,a.Button.Checkbox,{checked:l.useWasd,onClick:function(){return c("update-useWasd")},tooltip:"Enabling this allows you to use WASD to move instead of the arrow keys, and enables a few other hotkeys.",tooltipPosition:"top",children:"Use WASD Mode"})}),(0,o.createComponentVNode)(2,a.Box,{mb:"5px",children:(0,o.createComponentVNode)(2,a.Button.Checkbox,{checked:l.useAzerty,onClick:function(){return c("update-useAzerty")},tooltip:"If you have an AZERTY keyboard, enable this. Yep. This sure is a tooltip.",tooltipPosition:"top",children:"Use AZERTY Keyboard Layout"})}),(0,o.createComponentVNode)(2,a.Box,{color:"label",children:"Familiar with /tg/station controls? You can enable/disable them under the Game/Interface menu in the top left."})]}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Scroll Targeting",children:[(0,o.createComponentVNode)(2,a.Box,{mb:"5px",color:"label",children:"This option allows you to change which limb to target with the scroll wheel."}),(0,o.createComponentVNode)(2,a.Box,{mb:"5px",children:(0,o.createComponentVNode)(2,a.Button.Checkbox,{checked:l.scrollWheelTargeting===i.CharacterPreferencesScrollTarget.Always,onClick:function(){return c("update-scrollWheelTargeting",{value:i.CharacterPreferencesScrollTarget.Always})},children:"Always"})}),(0,o.createComponentVNode)(2,a.Box,{mb:"5px",children:(0,o.createComponentVNode)(2,a.Button.Checkbox,{checked:l.scrollWheelTargeting===i.CharacterPreferencesScrollTarget.Hover,onClick:function(){return c("update-scrollWheelTargeting",{value:i.CharacterPreferencesScrollTarget.Hover})},children:"When hovering over targeting doll"})}),(0,o.createComponentVNode)(2,a.Box,{mb:"5px",children:(0,o.createComponentVNode)(2,a.Button.Checkbox,{checked:l.scrollWheelTargeting===i.CharacterPreferencesScrollTarget.Never,onClick:function(){return c("update-scrollWheelTargeting",{value:i.CharacterPreferencesScrollTarget.Never})},children:"Never"})})]}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Preferred Map",children:(0,o.createComponentVNode)(2,a.Button,{onClick:function(){return c("update-preferredMap")},children:l.preferredMap?l.preferredMap:(0,o.createComponentVNode)(2,a.Box,{italic:!0,children:"None"})})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Examine help",children:(0,o.createComponentVNode)(2,a.Button.Checkbox,{checked:l.helpTextInExamine,onClick:function(){return c("update-helpTextInExamine")},tooltip:"If help messages in examine text annoy you, you can turn them off here. They will still be available by alt+doubleclicking the item or in the right click menu.",tooltipPosition:"top",children:"See help messages when you examine?"})})]})})}},57368:function(e,t,n){"use strict";t.__esModule=!0,t.GeneralTab=void 0;var o=n(96323),r=n(21118),a=n(31246),i=n(26949);t.GeneralTab=function(e,t){var n,c=(0,a.useBackend)(t),l=c.act,u=c.data,d=function(e){return e.length>200?e.substring(0,200)+"\u2026":e};return(0,o.createFragment)([(0,o.createComponentVNode)(2,i.Section,{title:"Records",children:(0,o.createComponentVNode)(2,i.LabeledList,{children:[(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Name",buttons:(0,o.createComponentVNode)(2,i.Button.Checkbox,{checked:u.randomName,onClick:function(){return l("update-randomName")},children:"Random"}),children:[(0,o.createComponentVNode)(2,i.Button,{onClick:function(){return l("update-nameFirst")},children:u.nameFirst}),(0,o.createComponentVNode)(2,i.Button,{onClick:function(){return l("update-nameMiddle")},color:""===u.nameMiddle?"grey":"default",children:""!==u.nameMiddle?u.nameMiddle:(0,o.createComponentVNode)(2,i.Box,{italic:!0,children:"None"})}),(0,o.createComponentVNode)(2,i.Button,{onClick:function(){return l("update-nameLast")},children:u.nameLast})]}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Gender",children:(0,o.createComponentVNode)(2,i.Button,{onClick:function(){return l("update-gender")},children:u.gender})}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Pronouns",children:(0,o.createComponentVNode)(2,i.Button,{onClick:function(){return l("update-pronouns")},children:u.pronouns})}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Age",children:(0,o.createComponentVNode)(2,i.Button,{onClick:function(){return l("update-age")},children:u.age})}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Blood Type",children:(0,o.createComponentVNode)(2,i.Button,{onClick:function(){return l("update-bloodType")},children:u.bloodRandom?(0,o.createComponentVNode)(2,i.Box,{as:"span",italic:!0,children:"Random"}):u.bloodType})}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Bank PIN",buttons:(0,o.createComponentVNode)(2,i.Button.Checkbox,{checked:!u.pin,onClick:function(){return l("update-pin",{random:!!u.pin})},children:"Random"}),children:(0,o.createComponentVNode)(2,i.Button,{onClick:function(){return l("update-pin")},children:null!=(n=u.pin)?n:(0,o.createComponentVNode)(2,i.Box,{as:"span",italic:!0,children:"Random"})})}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Flavor Text",buttons:(0,o.createComponentVNode)(2,i.Button,{onClick:function(){return l("update-flavorText")},icon:"wrench",children:"Edit"}),children:(0,o.createComponentVNode)(2,i.BlockQuote,{children:u.flavorText?(0,r.decodeHtmlEntities)(u.flavorText):(0,o.createComponentVNode)(2,i.Box,{italic:!0,children:"None"})})}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Security Note",buttons:(0,o.createComponentVNode)(2,i.Button,{onClick:function(){return l("update-securityNote")},icon:"wrench",children:"Edit"}),children:(0,o.createComponentVNode)(2,i.BlockQuote,{children:u.securityNote?(0,r.decodeHtmlEntities)(u.securityNote):(0,o.createComponentVNode)(2,i.Box,{italic:!0,children:"None"})})}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Medical Note",buttons:(0,o.createComponentVNode)(2,i.Button,{onClick:function(){return l("update-medicalNote")},icon:"wrench",children:"Edit"}),children:(0,o.createComponentVNode)(2,i.BlockQuote,{children:u.medicalNote?(0,r.decodeHtmlEntities)(u.medicalNote):(0,o.createComponentVNode)(2,i.Box,{italic:!0,children:"None"})})}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Syndicate Intelligence",buttons:(0,o.createComponentVNode)(2,i.Button,{onClick:function(){return l("update-syndintNote")},icon:"wrench",children:"Edit"}),children:(0,o.createComponentVNode)(2,i.BlockQuote,{children:u.syndintNote?d((0,r.decodeHtmlEntities)(u.syndintNote)):(0,o.createComponentVNode)(2,i.Box,{italic:!0,children:"None"})})})]})}),(0,o.createComponentVNode)(2,i.Section,{title:"Other names",children:(0,o.createComponentVNode)(2,i.LabeledList,{children:(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Preferred Cyborg Name",children:(0,o.createComponentVNode)(2,i.Button,{onClick:function(){return l("update-robotName")},color:u.robotName?"default":"grey",children:u.robotName?u.robotName:(0,o.createComponentVNode)(2,i.Box,{italic:!0,children:"None"})})})})}),(0,o.createComponentVNode)(2,i.Section,{title:"PDA",children:(0,o.createComponentVNode)(2,i.LabeledList,{children:[(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Ringtone",children:[(0,o.createComponentVNode)(2,i.Button,{onClick:function(){return l("update-pdaRingtone")},children:u.pdaRingtone}),(0,o.createComponentVNode)(2,i.Button,{onClick:function(){return l("previewSound",{pdaRingtone:1})},icon:"volume-up",children:"Preview"})]}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Background Color",children:(0,o.createComponentVNode)(2,i.ColorButton,{color:u.pdaColor,onClick:function(){return l("update-pdaColor")}})})]})})],4)}},70712:function(e,t,n){"use strict";t.__esModule=!0,t.SavesTab=void 0;var o=n(96323),r=n(31246),a=n(26949);t.SavesTab=function(e,t){var n=(0,r.useBackend)(t),c=n.act,l=n.data;return(0,o.createComponentVNode)(2,a.Section,{title:"Cloud Saves",children:l.cloudSaves?(0,o.createFragment)([l.cloudSaves.map((function(e,t){return(0,o.createFragment)([(0,o.createComponentVNode)(2,i,{name:e,index:t}),(0,o.createComponentVNode)(2,a.Divider)],4,e)})),(0,o.createComponentVNode)(2,a.Box,{mt:"5px",children:(0,o.createComponentVNode)(2,a.Button,{onClick:function(){return c("cloud-new")},children:"Create new save"})})],0):(0,o.createComponentVNode)(2,a.Box,{italic:!0,color:"label",children:"Cloud saves could not be loaded."})})};var i=function(e,t){var n=e.name,i=e.index,c=(0,r.useBackend)(t).act;return(0,o.createComponentVNode)(2,a.LabeledList,{children:(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Cloud save "+(i+1),buttons:(0,o.createFragment)([(0,o.createComponentVNode)(2,a.Button,{onClick:function(){return c("cloud-load",{name:n})},children:"Load"}),(0,o.createTextVNode)(" -"),(0,o.createTextVNode)(" "),(0,o.createComponentVNode)(2,a.Button,{onClick:function(){return c("cloud-save",{name:n})},children:"Save"}),(0,o.createTextVNode)(" -"),(0,o.createTextVNode)(" "),(0,o.createComponentVNode)(2,a.Button.Confirm,{onClick:function(){return c("cloud-delete",{name:n})},content:"Delete"})],0),children:n})})}},30709:function(e,t,n){"use strict";t.__esModule=!0,t.TraitsTab=void 0;var o=n(96323),r=n(21118),a=n(31246),i=n(26949),c=n(25808);function l(e,t){var n="undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(n)return(n=n.call(e)).next.bind(n);if(Array.isArray(e)||(n=function(e,t){if(!e)return;if("string"==typeof e)return u(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);"Object"===n&&e.constructor&&(n=e.constructor.name);if("Map"===n||"Set"===n)return Array.from(e);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return u(e,t)}(e))||t&&e&&"number"==typeof e.length){n&&(e=n);var o=0;return function(){return o>=e.length?{done:!0}:{done:!1,value:e[o++]}}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}function u(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,o=new Array(t);n<t;n++)o[n]=e[n];return o}var d=function(e,t){return e.name.localeCompare(t.name,"en",{sensitivity:"base"})};t.TraitsTab=function(e,t){for(var n,r=(0,a.useBackend)(t),u=r.act,p=r.data,m=(0,a.useLocalState)(t,"filter-available",!1),f=m[0],h=m[1],C={},g=p.traitsAvailable.map((function(e){return Object.assign({},e,p.traitsData[e.id])})),N=l(g);!(n=N()).done;)for(var v,b=n.value,V=l(b.category&&b.category.length>0?b.category:["uncategorized"]);!(v=V()).done;){var y=v.value;C[y]||(C[y]=[]),C[y].push(b)}var x=Object.keys(C).sort();x.includes("uncategorized")&&(x=[].concat(x.filter((function(e){return"uncategorized"!==e})),["uncategorized"]));var k=p.traitsAvailable.filter((function(e){return e.selected})).length;return(0,o.createComponentVNode)(2,i.Section,{fill:!0,children:(0,o.createComponentVNode)(2,i.Stack,{vertical:!0,fill:!0,children:[(0,o.createComponentVNode)(2,i.Stack.Item,{children:[(0,o.createComponentVNode)(2,i.Box,{children:["Available points:"," ",(0,o.createComponentVNode)(2,i.Box,{as:"span",color:p.traitsPointsTotal>0?"good":"bad",children:p.traitsPointsTotal})]}),(0,o.createComponentVNode)(2,i.Divider)]}),(0,o.createComponentVNode)(2,i.Stack.Item,{grow:!0,children:(0,o.createComponentVNode)(2,i.Stack,{fill:!0,children:[(0,o.createComponentVNode)(2,i.Stack.Item,{grow:!0,basis:0,children:(0,o.createComponentVNode)(2,i.Section,{title:"Available",fill:!0,scrollable:!0,buttons:(0,o.createComponentVNode)(2,c.ButtonCheckbox,{checked:f,onClick:function(){return h(!f)},children:"Filter available"}),children:x.map((function(e){var t=C[e];return(0,o.createComponentVNode)(2,s,{category:e,traits:t.filter((function(e){return!e.selected})).filter((function(e){return!f||e.available})).sort(d)},e)}))})}),(0,o.createComponentVNode)(2,i.Stack.Item,{children:(0,o.createComponentVNode)(2,i.Divider,{vertical:!0})}),(0,o.createComponentVNode)(2,i.Stack.Item,{grow:!0,basis:0,children:(0,o.createComponentVNode)(2,i.Section,{title:"Selected ("+k+"/"+p.traitsMax+")",fill:!0,scrollable:!0,buttons:(0,o.createComponentVNode)(2,i.Button,{onClick:function(){return u("reset-traits")},children:"Reset traits"}),children:x.map((function(e){var t=C[e];return(0,o.createComponentVNode)(2,s,{category:e,traits:t.filter((function(e){return e.selected})).sort(d)},e)}))})})]})})]})})};var s=function(e,t){var n=e.category,a=e.traits;return 0===a.length?null:(0,o.createComponentVNode)(2,i.Collapsible,{title:(0,r.toTitleCase)(n),open:!0,children:a.map((function(e,t){return(0,o.createFragment)([0!==t&&(0,o.createComponentVNode)(2,i.Divider),(0,o.normalizeProps)((0,o.createComponentVNode)(2,p,Object.assign({},e)))],0,e.id)}))})},p=function(e,t){var n=(0,a.useBackend)(t).act,r=e.id,c=e.name,l=e.desc,u=e.points,d=e.selected,s=e.available,p=e.img;return(0,o.createComponentVNode)(2,i.Stack,{children:[(0,o.createComponentVNode)(2,i.Stack.Item,{children:(0,o.createComponentVNode)(2,i.Image,{pixelated:!0,width:"32px",height:"32px",src:"data:image/png;base64,"+p,backgroundColor:"transparent"})}),(0,o.createComponentVNode)(2,i.Stack.Item,{grow:1,children:[(0,o.createComponentVNode)(2,i.Stack,{align:"center",mb:1,children:[(0,o.createComponentVNode)(2,i.Stack.Item,{grow:!0,children:[c," ",(0,o.createComponentVNode)(2,i.Box,{as:"span",color:u<0?"bad":u>0?"good":"label",children:["(",u>0?"+":"",u,")"]})]}),(0,o.createComponentVNode)(2,i.Stack.Item,{children:(0,o.createComponentVNode)(2,i.Button,{disabled:!s,icon:d?"minus":"plus",onClick:function(){return n(d?"unselect-trait":"select-trait",{id:r})},children:d?"Remove":"Add"})})]}),(0,o.createComponentVNode)(2,i.BlockQuote,{children:l})]})]})}},4098:function(e,t,n){"use strict";t.__esModule=!0,t.CharacterPreferences=void 0;var o=n(96323),r=n(57890),a=n(31246),i=n(26949),c=n(2381),l=n(96074),u=n(56374),d=n(57368),s=n(70712),p=n(30709),m=n(59576),f=0;t.CharacterPreferences=function(e,t){var n=(0,a.useBackend)(t),C=n.act,g=n.data,N=(0,a.useLocalState)(t,"menu",m.CharacterPreferencesTabKeys.General),v=N[0],b=N[1];return(0,o.createComponentVNode)(2,c.Window,{width:600,height:750,title:"Character Setup",children:(0,o.createComponentVNode)(2,c.Window.Content,{onKeyDown:function(e){if(!(v!==m.CharacterPreferencesTabKeys.General&&v!==m.CharacterPreferencesTabKeys.Character||e.keyCode!==r.KEY_LEFT&&e.keyCode!==r.KEY_RIGHT)){if(e.preventDefault(),f>performance.now())return;f=performance.now()+125;var t="rotate-counter-clockwise";e.keyCode===r.KEY_RIGHT&&(t="rotate-clockwise"),C(t)}},children:(0,o.createComponentVNode)(2,i.Stack,{vertical:!0,fill:!0,children:[(0,o.createComponentVNode)(2,i.Stack.Item,{children:(0,o.createComponentVNode)(2,h)}),(0,o.createComponentVNode)(2,i.Stack.Item,{children:(0,o.createComponentVNode)(2,i.Tabs,{children:[(0,o.createComponentVNode)(2,i.Tabs.Tab,{selected:v===m.CharacterPreferencesTabKeys.General,onClick:function(){return b(m.CharacterPreferencesTabKeys.General)},children:"General"}),(0,o.createComponentVNode)(2,i.Tabs.Tab,{selected:v===m.CharacterPreferencesTabKeys.Character,onClick:function(){return b(m.CharacterPreferencesTabKeys.Character)},children:"Appearance"}),(0,o.createComponentVNode)(2,i.Tabs.Tab,{onClick:function(){return C("open-occupation-window")},children:"Occupation"}),(0,o.createComponentVNode)(2,i.Tabs.Tab,{selected:v===m.CharacterPreferencesTabKeys.Traits,onClick:function(){return b(m.CharacterPreferencesTabKeys.Traits)},children:"Traits"}),(0,o.createComponentVNode)(2,i.Tabs.Tab,{selected:v===m.CharacterPreferencesTabKeys.GameSettings,onClick:function(){return b(m.CharacterPreferencesTabKeys.GameSettings)},children:"Game Settings"}),(0,o.createComponentVNode)(2,i.Tabs.Tab,{selected:v===m.CharacterPreferencesTabKeys.Saves,onClick:function(){return b(m.CharacterPreferencesTabKeys.Saves)},children:"Cloud Saves"})]})}),(0,o.createComponentVNode)(2,i.Stack.Item,{grow:"1",children:[(v===m.CharacterPreferencesTabKeys.General||v===m.CharacterPreferencesTabKeys.Character)&&(0,o.createComponentVNode)(2,i.Stack,{fill:!0,children:[(0,o.createComponentVNode)(2,i.Stack.Item,{basis:0,grow:"1",children:(0,o.createComponentVNode)(2,i.Section,{scrollable:!0,fill:!0,children:[v===m.CharacterPreferencesTabKeys.General&&(0,o.createComponentVNode)(2,d.GeneralTab),v===m.CharacterPreferencesTabKeys.Character&&(0,o.createComponentVNode)(2,l.CharacterTab)]})}),(0,o.createComponentVNode)(2,i.Stack.Item,{children:(0,o.createComponentVNode)(2,i.Section,{fill:!0,children:[(0,o.createComponentVNode)(2,i.ByondUi,{params:{id:g.preview,type:"map"},style:{width:"64px",height:"128px"}}),(0,o.createComponentVNode)(2,i.Box,{textAlign:"center",mt:"5px",children:[(0,o.createComponentVNode)(2,i.Button,{icon:"chevron-left",onClick:function(){return C("rotate-counter-clockwise")}}),(0,o.createComponentVNode)(2,i.Button,{icon:"chevron-right",onClick:function(){return C("rotate-clockwise")}})]})]})})]}),(v===m.CharacterPreferencesTabKeys.GameSettings||v===m.CharacterPreferencesTabKeys.Saves)&&(0,o.createComponentVNode)(2,i.Section,{scrollable:!0,fill:!0,children:[v===m.CharacterPreferencesTabKeys.GameSettings&&(0,o.createComponentVNode)(2,u.GameSettingsTab),v===m.CharacterPreferencesTabKeys.Saves&&(0,o.createComponentVNode)(2,s.SavesTab)]}),v===m.CharacterPreferencesTabKeys.Traits&&(0,o.createComponentVNode)(2,p.TraitsTab)]}),(0,o.createComponentVNode)(2,i.Stack.Item,{children:(0,o.createComponentVNode)(2,i.Section,{children:(0,o.createComponentVNode)(2,i.Button.Confirm,{content:"Reset All",onClick:function(){return C("reset")}})})})]})})})};var h=function(e,t){var n=(0,a.useBackend)(t),r=n.act,c=n.data,l=c.profiles.findIndex((function(e){return e.active}));return(0,o.createComponentVNode)(2,i.Stack,{vertical:!0,children:[(0,o.createComponentVNode)(2,i.Stack.Item,{children:(0,o.createComponentVNode)(2,i.Stack,{children:c.profiles.map((function(e,t){return(0,o.createComponentVNode)(2,i.Stack.Item,{basis:0,grow:1,children:(0,o.createComponentVNode)(2,C,{profile:e,index:t})},t)}))})}),(0,o.createComponentVNode)(2,i.Stack.Item,{children:(0,o.createComponentVNode)(2,i.Section,{children:(0,o.createComponentVNode)(2,i.LabeledList,{children:(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Profile Name",buttons:l>-1?(0,o.createFragment)([(0,o.createComponentVNode)(2,i.Button,{onClick:function(){return r("load",{index:l+1})},children:"Reload"})," - ",(0,o.createComponentVNode)(2,i.Button,{onClick:function(){return r("save",{index:l+1})},icon:c.profileModified?"exclamation-triangle":undefined,color:c.profileModified?"danger":undefined,tooltip:c.profileModified?"You may have unsaved changes! Any unsaved changes will take effect for this round only.":undefined,tooltipPosition:"left",children:"Save"})],0):null,children:(0,o.createComponentVNode)(2,i.Button,{onClick:function(){return r("update-profileName")},children:c.profileName?c.profileName:(0,o.createComponentVNode)(2,i.Box,{italic:!0,children:"None"})})})})})})]})},C=function(e,t){var n=e.index,r=e.profile,c=(0,a.useBackend)(t).act;return(0,o.createComponentVNode)(2,i.Section,{title:"Profile "+(n+1),textAlign:"center",backgroundColor:r.active?"rgba(0, 0, 0, 0.10)":null,fill:!0,children:(0,o.createComponentVNode)(2,i.Stack,{vertical:!0,fill:!0,justify:"space-between",children:[(0,o.createComponentVNode)(2,i.Stack.Item,{children:(0,o.createComponentVNode)(2,i.Box,{children:r.name?(0,o.createComponentVNode)(2,i.Box,{children:r.name}):(0,o.createComponentVNode)(2,i.Box,{italic:!0,color:"label",children:"Empty"})})}),(0,o.createComponentVNode)(2,i.Stack.Item,{children:[(0,o.createComponentVNode)(2,i.Button,{disabled:!r.name,onClick:function(){return c("load",{index:n+1})},children:"Load"})," - ",(0,o.createComponentVNode)(2,i.Button,{onClick:function(){return c("save",{index:n+1})},children:"Save"})]})]})})}},59576:function(e,t){"use strict";var n,o,r;t.__esModule=!0,t.CharacterPreferencesScrollTarget=t.CharacterPreferencesTooltip=t.CharacterPreferencesTabKeys=void 0,t.CharacterPreferencesTabKeys=n,function(e){e[e.Saves=0]="Saves",e[e.General=1]="General",e[e.Character=2]="Character",e[e.Traits=3]="Traits",e[e.GameSettings=4]="GameSettings"}(n||(t.CharacterPreferencesTabKeys=n={})),t.CharacterPreferencesTooltip=o,function(e){e[e.Always=1]="Always",e[e.Never=2]="Never",e[e.Alt=3]="Alt"}(o||(t.CharacterPreferencesTooltip=o={})),t.CharacterPreferencesScrollTarget=r,function(e){e[e.Never=1]="Never",e[e.Hover=2]="Hover",e[e.Always=3]="Always"}(r||(t.CharacterPreferencesScrollTarget=r={}))},78979:function(e,t,n){"use strict";t.__esModule=!0,t.ChemChute=void 0;var o=n(96323),r=n(31246),a=n(26949),i=n(2381);t.ChemChute=function(e,t){var n=(0,r.useBackend)(t),c=(n.act,n.data.productList);return(0,o.createComponentVNode)(2,i.Window,{title:"Medical supply chute console",width:355,height:500,children:(0,o.createComponentVNode)(2,i.Window.Content,{children:(0,o.createComponentVNode)(2,a.Section,{fill:!0,scrollable:!0,title:"Dispensary interlink stock view",height:"100%",children:c.map((function(e){return(0,o.createComponentVNode)(2,a.Flex,{justify:"space-between",align:"stretch",style:{"border-bottom":"1px #555 solid"},children:[(0,o.createComponentVNode)(2,a.Flex.Item,{direction:"row",children:e.img&&(0,o.createComponentVNode)(2,a.Box,{style:{overflow:"show",height:"24px"},children:(0,o.createVNode)(1,"img",null,null,1,{src:"data:image/png;base64,"+e.img,style:{transform:"translate(0, -4px)"}})})}),(0,o.createComponentVNode)(2,a.Flex.Item,{direction:"row",grow:!0,style:{display:"flex","justify-content":"center","flex-direction":"column"},children:(0,o.createComponentVNode)(2,a.Box,{children:[(0,o.createComponentVNode)(2,a.Box,{inline:!0,italic:!0,children:[e.amount+" x","\xa0"]}),(0,o.createComponentVNode)(2,a.Box,{inline:!0,children:e.name})]})}),(0,o.createComponentVNode)(2,a.Flex.Item,{bold:!0,direction:"row",style:{"margin-left":"5px",display:"flex","justify-content":"center","flex-direction":"column"}})]},e.name)}))})})})}},28487:function(){},56915:function(e,t,n){"use strict";t.__esModule=!0,t.ChemGroups=t.BeakerContentsGraph=t.Beaker=t.ReagentDispenser=t.ChemDispenser=void 0;var o=n(96323),r=n(31246),a=n(26949),i=n(2381),c=n(51418),l=n(48175),u=[{id:0,icon:"sort-amount-down",contents:"",compareFunction:function(e,t){return t.volume-e.volume}},{id:1,icon:"sort-amount-up",contents:"",compareFunction:function(e,t){return e.volume-t.volume}},{id:2,contents:"Density",compareFunction:function(e,t){return e.state-t.state}},{id:3,contents:"Order Added",compareFunction:function(){return 1}}];t.ChemDispenser=function(e,t){return(0,o.createComponentVNode)(2,i.Window,{width:570,height:730,theme:"ntos",children:(0,o.createComponentVNode)(2,i.Window.Content,{scrollable:!0,children:(0,o.createComponentVNode)(2,a.Box,{children:[(0,o.createComponentVNode)(2,d),(0,o.createComponentVNode)(2,s),(0,o.createComponentVNode)(2,p),(0,o.createComponentVNode)(2,m)]})})})};var d=function(e,t){var n=(0,r.useBackend)(t),i=n.act,l=n.data,u=l.beakerName,d=l.container,s=(0,r.useSharedState)(t,"addAmount",10),p=s[0],m=s[1],f=(0,r.useSharedState)(t,"iconToggle",!1),h=f[0],C=f[1],g=(0,r.useLocalState)(t,"hoverOver",""),N=g[0],v=g[1],b=l.dispensableReagents||[];return(0,o.createComponentVNode)(2,a.Section,{fontSize:"12px",title:(0,o.createFragment)([(0,o.createTextVNode)("Dispense"),(0,o.createComponentVNode)(2,a.Box,{as:"span",ml:18,children:["Icons:",(0,o.createComponentVNode)(2,a.Button,{width:2,textAlign:"center",backgroundColor:"rgba(0, 0, 0, 0)",textColor:h?"rgba(255, 255, 255, 0.5)":"rgba(255, 255, 255, 1)",onClick:function(){return C(!1)},children:(0,o.createComponentVNode)(2,a.Icon,{mr:1,name:"circle"})}),(0,o.createComponentVNode)(2,a.Button,{width:2,backgroundColor:"rgba(0, 0, 0, 0)",textColor:h?"rgba(255, 255, 255, 1)":"rgba(255, 255, 255, 0.5)",onClick:function(){return C(!0)},children:(0,o.createComponentVNode)(2,a.Icon,{name:"tint"})})]})],4),buttons:(0,o.createComponentVNode)(2,a.Box,{children:["Dispense Amount: ",(0,o.createComponentVNode)(2,a.NumberInput,{value:p,format:function(e){return e+"u"},width:4,minValue:1,maxValue:100,onDrag:function(e,t){return m(t)}})]}),children:[(0,o.createComponentVNode)(2,a.Section,{fitted:!0,backgroundColor:"rgba(0,0,0,0)",children:[!d||d.maxVolume===d.totalVolume&&(0,o.createComponentVNode)(2,a.Modal,{className:"chem-dispenser__labels",fontSize:"20px",mr:2,p:3,children:(0,o.createComponentVNode)(2,a.Box,{children:d?d.name+" Full":"No "+u+" Inserted"})}),b.map((function(e,t){return(0,o.createComponentVNode)(2,a.Button,{className:"chem-dispenser__dispense-buttons",align:"left",width:"130px",onMouseEnter:function(){return v(e.id)},onMouseLeave:function(){return v("")},disabled:(null==d?void 0:d.maxVolume)===(null==d?void 0:d.totalVolume),lineHeight:1.75,onClick:function(){return i("dispense",{amount:p,reagentId:e.id})},children:[(0,o.createComponentVNode)(2,a.Icon,{color:"rgba("+e.colorR+","+e.colorG+", "+e.colorB+", 1)",name:h?c.MatterStateIconMap[e.state].icon:"circle",pt:1,style:{"text-shadow":"0 0 3px #000"}}),e.name]},t)}))]}),(0,o.createComponentVNode)(2,a.Box,{italic:!0,pt:.5,children:[" ","Reagent ID: "+N]})]})};t.ReagentDispenser=d;var s=function(e,t){var n=(0,r.useBackend)(t),i=n.act,l=n.data,u=l.beakerName,d=l.container,s=(0,r.useSharedState)(t,"iconToggle",!1)[0],p=(0,r.useSharedState)(t,"removeAmount",10),m=p[0],f=p[1],h=[m,10,5,1];return(0,o.createComponentVNode)(2,a.Section,{fontSize:"12px",title:(0,o.createComponentVNode)(2,a.Button,{className:"chem-dispenser__buttons",icon:"eject",onClick:function(){return i("eject")},children:d?"Eject "+d.name+" ("+d.totalVolume+"/"+d.maxVolume+")":"Insert "+u}),buttons:(0,o.createComponentVNode)(2,a.Box,{align:"left",as:"span",children:["Remove Amount: ",(0,o.createComponentVNode)(2,a.NumberInput,{width:4,format:function(e){return e+"u"},value:m,minValue:1,maxValue:100,onDrag:function(e,t){return f(t)}})]}),children:[(0,o.createComponentVNode)(2,a.Table.Row,{children:[(0,o.createComponentVNode)(2,a.Table.Cell,{bold:!0,collapsing:!0,textAlign:"center"}),(0,o.createComponentVNode)(2,a.Table.Cell,{collapsing:!0})]}),(0,o.createComponentVNode)(2,c.ReagentList,{container:d,height:"auto",showState:s,renderButtons:function(e){return(0,o.createFragment)([(0,o.createComponentVNode)(2,a.Button,{icon:"filter",onClick:function(){return i("isolate",{reagentId:e.id})},children:"Isolate"}),(0,o.createComponentVNode)(2,a.Button,{icon:"minus",onClick:function(){return i("all",{amount:m,reagentId:e.id})},children:"All"}),h.map((function(t,n){return(0,o.createComponentVNode)(2,a.Button,{icon:"minus",onClick:function(){return i("remove",{amount:t,reagentId:e.id})},children:t},n)}))],0)},renderButtonsDeps:m})]})};t.Beaker=s;var p=function(e,t){var n=(0,r.useBackend)(t).data,i=(0,r.useSharedState)(t,"sort",1),d=i[0],s=i[1],p=n.container;return(0,o.createComponentVNode)(2,a.Section,{align:"center",p:.5,title:(0,o.createComponentVNode)(2,a.Tabs,{children:u.map((function(e,t){return(0,o.createComponentVNode)(2,a.Tabs.Tab,{fontSize:"11px",textAlign:"center",align:"center",selected:d===e.id,onClick:function(){return s(e.id)},children:[e.icon&&(0,o.createComponentVNode)(2,a.Icon,{name:e.icon}),e.contents]},t)}))}),children:[(0,o.createComponentVNode)(2,c.ReagentGraph,{container:p,sort:u[d].compareFunction}),!(!p||!p.totalVolume)&&(0,o.createComponentVNode)(2,a.Box,{fontSize:2,color:(0,l.getTemperatureColor)(p.temperature),className:"ChemHeater__TemperatureNumber",children:[(0,o.createComponentVNode)(2,a.Icon,{name:(0,l.getTemperatureIcon)(p.temperature),pr:.5}),(0,o.createComponentVNode)(2,a.AnimatedNumber,{value:p.temperature})," K"]})]})};t.BeakerContentsGraph=p;var m=function(e,t){var n=(0,r.useBackend)(t),i=n.act,c=n.data,l=(0,r.useLocalState)(t,"groupName",""),u=l[0],d=l[1],s=(0,r.useLocalState)(t,"reagents",""),p=s[0],m=s[1],f=c.groupList,h=c.idCardName,C=c.idCardInserted,g=c.isRecording,N=c.activeRecording;return(0,o.createFragment)([(0,o.createComponentVNode)(2,a.Section,{title:"Reagent Groups",buttons:(0,o.createComponentVNode)(2,a.Box,{children:[(0,o.createComponentVNode)(2,a.Button,{className:"chem-dispenser__buttons",icon:"eject",onClick:function(){return i("card")},children:C?"Eject ID: "+h:"Insert ID"}),(0,o.createComponentVNode)(2,a.Button,{color:"red",className:"chem-dispenser__buttons",icon:"circle",onClick:function(){return i("record")},children:g?"Stop":"Record"}),(0,o.createComponentVNode)(2,a.Button,{color:"red",className:"chem-dispenser__buttons",icon:"eraser",disabled:!N,onClick:function(){return i("clear_recording")},children:"Clear"})]}),children:[(0,o.createComponentVNode)(2,a.Box,{children:[(0,o.createComponentVNode)(2,a.Box,{children:(0,o.createComponentVNode)(2,a.Box,{pt:1,pr:7,as:"span",children:"Group Name:"})}),(0,o.createComponentVNode)(2,a.Input,{pl:5,placeholder:"Name",value:u,onInput:function(e,t){return d(t)}}),(0,o.createComponentVNode)(2,a.Box,{as:"span",children:(0,o.createComponentVNode)(2,a.Button,{icon:"plus-circle",lineHeight:1.75,onClick:function(){i("newGroup",{reagents:p,groupName:u}),d(""),m("")},children:"Add Group"})})]}),(0,o.createComponentVNode)(2,a.Box,{pt:.5,italic:!N,color:N?"default":"grey",children:N||"Recording Empty"})]}),!!f.length&&(0,o.createComponentVNode)(2,a.Section,{children:f.map((function(e,t){return(0,o.createComponentVNode)(2,a.Box,{children:[(0,o.createComponentVNode)(2,a.Button,{icon:"tint",lineHeight:1.75,onClick:function(){return i("groupDispense",{selectedGroup:e.ref})},children:e.name},t),(0,o.createComponentVNode)(2,a.Button,{icon:"trash",lineHeight:1.75,onClick:function(){return i("deleteGroup",{selectedGroup:e.ref})},children:"Delete"})," "+e.info]},t)}))})],0)};t.ChemGroups=m},95348:function(e,t,n){"use strict";t.__esModule=!0,t.ChemHeater=void 0;var o=n(96323),r=n(1060),a=n(31246),i=n(26949),c=n(2381),l=n(48175),u=n(51418);t.ChemHeater=function(e,t){var n=(0,a.useBackend)(t),r=n.act,u=n.data,s=u.containerData,p=u.isActive,m=u.targetTemperature;return(0,o.createComponentVNode)(2,c.Window,{title:"Reagent Heater/Cooler",width:320,height:385,children:(0,o.createComponentVNode)(2,c.Window.Content,{children:[(0,o.createComponentVNode)(2,d,{container:s,targetTemperature:m,active:p}),(0,o.createComponentVNode)(2,i.Section,{title:"Temperature Control",children:(0,o.createComponentVNode)(2,i.Stack,{align:"center",children:[(0,o.createComponentVNode)(2,i.Stack.Item,{children:(0,o.createComponentVNode)(2,i.Knob,{animated:!0,size:2,value:m,minValue:0,maxValue:1e3,format:function(e){return e+" K"},onDrag:function(e,t){return r("adjustTemp",{temperature:t})}})}),(0,o.createComponentVNode)(2,i.Stack.Item,{grow:!0,basis:0,overflow:"hidden",children:(0,o.createComponentVNode)(2,i.Box,{className:"ChemHeater__TemperatureNumber",nowrap:!0,p:1,fontSize:1.5,color:(0,l.getTemperatureColor)(m),backgroundColor:"black",children:[(0,o.createComponentVNode)(2,i.Box,{fontSize:1,children:"Target"}),(0,o.createComponentVNode)(2,i.Icon,{name:(0,l.getTemperatureIcon)(m),pr:.5}),(0,o.createComponentVNode)(2,i.AnimatedNumber,{value:m})," K"]})}),(0,o.createComponentVNode)(2,i.Stack.Item,{basis:9.6,align:"center",children:(0,o.createComponentVNode)(2,i.Button,{icon:"power-off",disabled:!(null!=s&&s.totalVolume),color:p?"red":"green",fluid:!0,height:"100%",fontSize:1.25,textAlign:"center",onClick:function(){return r(p?"stop":"start")},children:p?"Deactivate":"Activate"})})]})})]})})};var d=function(e,t){var n,c=(0,a.useBackend)(t).act,d=e.active,s=void 0!==d&&d,p=e.targetTemperature,m=void 0===p?l.freezeTemperature:p,f=null!=(n=e.container)?n:u.NoContainer,h=s&&!f.fake,C=f.temperature,g=f.totalVolume;return(0,o.createComponentVNode)(2,i.SectionEx,{capitalize:!0,title:f.name,buttons:(0,o.createComponentVNode)(2,i.Button,{icon:"eject",disabled:!e.container,onClick:function(){return c("eject")},children:"Eject"}),children:[(0,o.createComponentVNode)(2,u.ReagentGraph,{container:f}),(0,o.createComponentVNode)(2,u.ReagentList,{container:f}),(0,o.createComponentVNode)(2,i.Box,{className:(0,r.classes)(["ChemHeater__TemperatureBox",h&&"ChemHeater__TemperatureBox__"+(0,l.getTemperatureChangeName)(C,m)]),children:!g||(0,o.createComponentVNode)(2,i.Box,{fontSize:2,color:(0,l.getTemperatureColor)(C),className:"ChemHeater__TemperatureNumber",children:[(0,o.createComponentVNode)(2,i.Icon,{name:"long-arrow-alt-down",className:(0,r.classes)(["ChemHeater__TemperatureArrow",h&&"ChemHeater__TemperatureArrow__"+(0,l.getTemperatureChangeName)(C,m)]),pt:"2px",pr:.25,style:{transform:s?"scaleY("+Math.sign(C-m)+")":"scaleY(0)"}}),(0,o.createComponentVNode)(2,i.Icon,{name:(0,l.getTemperatureIcon)(C),pr:.5}),(0,o.createComponentVNode)(2,i.AnimatedNumber,{value:C})," K"]})}),!e.container&&(0,o.createComponentVNode)(2,i.Dimmer,{children:(0,o.createComponentVNode)(2,i.Button,{icon:"eject",fontSize:1.5,onClick:function(){return c("insert")},bold:!0,children:"Insert Beaker"})})]})}},45747:function(e,t,n){"use strict";t.__esModule=!0,t.ChemMaster=t.OperationsSection=t.MakePatches=t.MakePatch=t.MakeBottle=t.MakePills=t.MakePill=t.CheckboxControl=t.MakeButtonControl=t.AmountInputControl=t.IconButtonControl=t.SelectIconModal=t.ReagentDisplay=void 0;var o=n(96323),r=n(31246),a=n(26949),i=n(2381),c=n(51418),l=function(e,t){var n=(0,r.useBackend)(t).act,i=e.max_volume,l=e.container||c.NoContainer,u=(0,r.useSharedState)(t,"remove_amount",10),d=u[0],s=u[1];return(0,o.createComponentVNode)(2,a.SectionEx,{capitalize:!0,title:l.name,buttons:(0,o.createFragment)([(0,o.createComponentVNode)(2,a.Button,{title:"Flush All",icon:"times",color:"red",disabled:!l.totalVolume,onClick:function(){return n("flushall")}}),(0,o.createComponentVNode)(2,a.Button,{title:"Eject",icon:"eject",disabled:!e.container,onClick:function(){return n("eject")}}),(0,o.createComponentVNode)(2,a.Box,{align:"left",as:"span",children:["Remove Amount: ",(0,o.createComponentVNode)(2,a.NumberInput,{width:4,format:function(e){return e+"u"},value:d,minValue:1,maxValue:i,onDrag:function(e,t){return s(Math.round(t))}})]})],4),children:[!!e.container||(0,o.createComponentVNode)(2,a.Dimmer,{children:(0,o.createComponentVNode)(2,a.Button,{icon:"eject",fontSize:1.5,onClick:function(){return n("insert")},bold:!0,children:"Insert Beaker"})}),(0,o.createComponentVNode)(2,c.ReagentGraph,{container:l}),(0,o.createComponentVNode)(2,c.ReagentList,{container:l,renderButtons:function(e){return(0,o.createFragment)([(0,o.createComponentVNode)(2,a.Button,{px:.75,mr:1.5,icon:"search",color:"green",title:"Analyze",onClick:function(){return n("analyze",{reagent_id:e.id})}}),(0,o.createComponentVNode)(2,a.Button,{px:.75,mr:1.5,icon:"filter",color:"red",title:"Isolate",onClick:function(){return n("isolate",{reagent_id:e.id})}}),(0,o.createComponentVNode)(2,a.Button,{px:.75,mr:1.5,icon:"times",color:"red",title:"Flush all",onClick:function(){return n("flush",{reagent_id:e.id})}}),(0,o.createComponentVNode)(2,a.Button,{px:.75,icon:"minus",color:"yellow",title:"Flush variable amount of units",bold:!0,onClick:function(){return n("flushinput",{reagent_id:e.id,amount:d})},children:[d,"u"]})],4)},renderButtonsDeps:d})]})};t.ReagentDisplay=l;var u=function(e,t){var n,i,c,l=(0,r.useBackend)(t).data,u=null!=(n=l.pill_icons)?n:[],d=null!=(i=l.bottle_icons)?i:[],s=null!=(c=l.patch_icons)?c:[],p=e.icon_list,m=e.set_icon,f=e.cancel_modal,h=(0,o.createComponentVNode)(2,a.Button,{title:"Cancel",icon:"times",color:"red",mr:1,onClick:function(){return f()}}),C=function(e,t){return(0,o.createComponentVNode)(2,a.Button,{onClick:function(){m(t)},children:[(0,o.createComponentVNode)(2,a.Image,{height:"32px",width:"32px",pixelated:!0,src:"data:image/png;base64,"+(0!==p?e[1]:e),style:{"vertical-align":"middle","horizontal-align":"middle"}}),0!==p&&(0,o.createComponentVNode)(2,a.Box,{textAlign:"center",bold:!0,children:[e[0],"u"]})]},t)};return(0,o.createComponentVNode)(2,a.Modal,{full:!0,mx:"auto",backgroundColor:"#1c2734",children:[0===p&&(0,o.createComponentVNode)(2,a.SectionEx,{capitalize:!0,title:"Select pill",buttons:h,minWidth:10,children:u.map(C)}),1===p&&(0,o.createComponentVNode)(2,a.SectionEx,{capitalize:!0,title:"Select bottle",buttons:h,minWidth:12,children:d.map(C)}),2===p&&(0,o.createComponentVNode)(2,a.SectionEx,{capitalize:!0,title:"Select patch",buttons:h,minWidth:12,children:s.map(C)})]})};t.SelectIconModal=u;var d=function(e){var t=e.modal_function,n=e.imageb64;return(0,o.createComponentVNode)(2,a.LabeledControls.Item,{children:(0,o.createComponentVNode)(2,a.Button,{tooltip:"Change type",tooltipPosition:"top",onClick:function(){return t(!0)},children:(0,o.createComponentVNode)(2,a.Image,{height:"32px",width:"32px",pixelated:!0,src:"data:image/png;base64,"+n,style:{"vertical-align":"middle","horizontal-align":"middle"}})})})};t.IconButtonControl=d;var s=function(e){var t=e.set_amount,n=e.current_amount,r=e.max_amount;return(0,o.createComponentVNode)(2,a.LabeledControls.Item,{children:(0,o.createComponentVNode)(2,a.NumberInput,{width:5,format:function(e){return e+"u"},value:n,minValue:5,maxValue:r,onDrag:function(e,n){return t(Math.round(n))}})})};t.AmountInputControl=s;var p=function(e){var t=e.text,n=e.onClick;return(0,o.createComponentVNode)(2,a.LabeledControls.Item,{children:(0,o.createComponentVNode)(2,a.Button,{onClick:n,width:13,children:t})})};t.MakeButtonControl=p;var m=function(e){var t=e.label,n=e.checked,r=e.set_function;return(0,o.createComponentVNode)(2,a.LabeledControls.Item,{children:(0,o.createComponentVNode)(2,a.Button.Checkbox,{checked:n,onClick:function(){return r(!n)},children:t})})};t.CheckboxControl=m;var f=function(e,t){var n=(0,r.useBackend)(t),i=n.act,c=n.data,l=e.item_name,m=e.max_volume,f=(0,r.useSharedState)(t,"single_pill_amount",m),h=f[0],C=f[1],g=c.pill_icons,N=(0,r.useLocalState)(t,"modal_singlepill",!1),v=N[0],b=N[1],V=(0,r.useSharedState)(t,"icon_singlepill",0),y=V[0],x=V[1],k=function(){return b(!1)};return(0,o.createComponentVNode)(2,a.Box,{children:[v&&(0,o.createComponentVNode)(2,u,{icon_list:0,set_icon:function(e){x(e),k()},cancel_modal:k}),(0,o.createComponentVNode)(2,a.LabeledControls,{width:0,children:[(0,o.createComponentVNode)(2,d,{modal_function:b,imageb64:g?g[y]:undefined}),(0,o.createComponentVNode)(2,p,{text:"Create single pill",onClick:function(){return i("makepill",{item_name:l,amount:h,icon:y})}}),(0,o.createComponentVNode)(2,s,{set_amount:C,current_amount:h,max_amount:m})]})]})};t.MakePill=f;var h=function(e,t){var n=(0,r.useBackend)(t),i=n.act,c=n.data,l=e.item_name,f=e.max_volume,h=(0,r.useSharedState)(t,"use_bottle",!0),C=h[0],g=h[1],N=(0,r.useSharedState)(t,"multiple_pills_amount",5),v=N[0],b=N[1],V=c.pill_icons,y=(0,r.useLocalState)(t,"modal_multiplepills",!1),x=y[0],k=y[1],S=(0,r.useSharedState)(t,"icon_multiplepills",0),I=S[0],w=S[1],_=function(){return k(!1)};return(0,o.createComponentVNode)(2,a.Box,{children:[x&&(0,o.createComponentVNode)(2,u,{icon_list:0,set_icon:function(e){w(e),_()},cancel_modal:_}),(0,o.createComponentVNode)(2,a.LabeledControls,{width:0,children:[(0,o.createComponentVNode)(2,d,{modal_function:k,imageb64:V?V[I]:undefined}),(0,o.createComponentVNode)(2,p,{text:"Create multiple pills",onClick:function(){return i("makepills",{item_name:l,amount:v,use_bottle:C,icon:I})}}),(0,o.createComponentVNode)(2,s,{set_amount:b,current_amount:v,max_amount:f}),(0,o.createComponentVNode)(2,m,{label:"Use bottle",checked:C,set_function:g})]})]})};t.MakePills=h;var C=function(e,t){var n=(0,r.useBackend)(t),i=n.act,c=n.data,l=(0,r.useSharedState)(t,"bottle_amount",50),m=l[0],f=l[1],h=e.item_name,C=c.bottle_icons,g=(0,r.useLocalState)(t,"modal_bottle",!1),N=g[0],v=g[1],b=(0,r.useSharedState)(t,"icon_bottle",2),V=b[0],y=b[1],x=function(){return v(!1)};return(0,o.createComponentVNode)(2,a.Box,{children:[N&&(0,o.createComponentVNode)(2,u,{icon_list:1,set_icon:function(e){y(e),f(C[e][0]),x()},cancel_modal:x}),(0,o.createComponentVNode)(2,a.LabeledControls,{width:0,children:[(0,o.createComponentVNode)(2,d,{modal_function:v,imageb64:C?C[V][1]:undefined}),(0,o.createComponentVNode)(2,p,{text:"Create bottle",onClick:function(){return i("makebottle",{item_name:h,amount:m,bottle:V})}}),(0,o.createComponentVNode)(2,s,{set_amount:f,current_amount:m,max_amount:C?C[V][0]:50})]})]})};t.MakeBottle=C;var g=function(e,t){var n=(0,r.useBackend)(t),i=n.act,c=n.data,l=(0,r.useSharedState)(t,"single_patch_amount",30),m=l[0],f=l[1],h=e.item_name,C=c.patch_icons,g=(0,r.useLocalState)(t,"modal_singlepatch",!1),N=g[0],v=g[1],b=(0,r.useSharedState)(t,"icon_singlepatch",1),V=b[0],y=b[1],x=function(){return v(!1)};return(0,o.createComponentVNode)(2,a.Box,{children:[N&&(0,o.createComponentVNode)(2,u,{icon_list:2,set_icon:function(e){y(e),f(C[e][0]),x()},cancel_modal:x}),(0,o.createComponentVNode)(2,a.LabeledControls,{width:0,children:[(0,o.createComponentVNode)(2,d,{modal_function:v,imageb64:C?C[V][1]:undefined}),(0,o.createComponentVNode)(2,p,{text:"Create single patch",onClick:function(){return i("makepatch",{item_name:h,amount:m,patch:V})}}),(0,o.createComponentVNode)(2,s,{set_amount:f,current_amount:m,max_amount:C?C[V][0]:30})]})]})};t.MakePatch=g;var N=function(e,t){var n=(0,r.useBackend)(t),i=n.act,c=n.data,l=(0,r.useSharedState)(t,"use_box",!0),f=l[0],h=l[1],C=(0,r.useSharedState)(t,"multiple_patches_amount",30),g=C[0],N=C[1],v=e.item_name,b=c.patch_icons,V=(0,r.useLocalState)(t,"modal_multiplepatches",!1),y=V[0],x=V[1],k=(0,r.useSharedState)(t,"icon_multiplepatches",1),S=k[0],I=k[1],w=function(){return x(!1)};return(0,o.createComponentVNode)(2,a.Box,{children:[y&&(0,o.createComponentVNode)(2,u,{icon_list:2,set_icon:function(e){I(e),N(b[e][0]),w()},cancel_modal:w}),(0,o.createComponentVNode)(2,a.LabeledControls,{width:0,children:[(0,o.createComponentVNode)(2,d,{modal_function:x,imageb64:b?b[S][1]:undefined}),(0,o.createComponentVNode)(2,p,{text:"Create multiple patches",onClick:function(){return i("makepatches",{item_name:v,amount:g,use_box:f,patch:S})}}),(0,o.createComponentVNode)(2,s,{set_amount:N,current_amount:g,max_amount:b?b[S][0]:30}),(0,o.createComponentVNode)(2,m,{label:"Use patch box",checked:f,set_function:h})]})]})};t.MakePatches=N;var v=function(e,t){(0,r.useBackend)(t).act;var n=e.placeholder,i=e.item_name,c=e.set_item_name,l=e.max_volume,u=-.5;return(0,o.createComponentVNode)(2,a.SectionEx,{capitalize:!0,title:"Operations",buttons:(0,o.createComponentVNode)(2,a.Box,{align:"left",as:"span",children:["Name: ",(0,o.createComponentVNode)(2,a.Input,{value:i,placeholder:n,onChange:function(e,t){c(t)}})]}),children:(0,o.createComponentVNode)(2,a.Stack,{vertical:!0,children:[(0,o.createComponentVNode)(2,a.Stack.Item,{mb:u,height:3,children:(0,o.createComponentVNode)(2,f,{max_volume:l,item_name:i})}),(0,o.createComponentVNode)(2,a.Stack.Item,{mb:u,height:3,children:(0,o.createComponentVNode)(2,h,{max_volume:l,item_name:i})}),(0,o.createComponentVNode)(2,a.Stack.Item,{mb:u,height:3,children:(0,o.createComponentVNode)(2,C,{item_name:i})}),(0,o.createComponentVNode)(2,a.Stack.Item,{mb:u,height:3,children:(0,o.createComponentVNode)(2,g,{item_name:i})}),(0,o.createComponentVNode)(2,a.Stack.Item,{mb:u,height:3,children:(0,o.createComponentVNode)(2,N,{item_name:i})})]})})};t.OperationsSection=v;t.ChemMaster=function(e,t){var n,a=(0,r.useBackend)(t).data,c=null!=(n=a.default_name)?n:null,u=(0,r.useLocalState)(t,"item_name",""),d=u[0],s=u[1],p=a.container?a.container.maxVolume:100;return(0,o.createComponentVNode)(2,i.Window,{width:435,height:480,theme:"ntos",children:(0,o.createComponentVNode)(2,i.Window.Content,{children:[(0,o.createComponentVNode)(2,l,{container:a.container,max_volume:p}),(0,o.createComponentVNode)(2,v,{container:a.container,max_volume:p,item_name:d,set_item_name:s,placeholder:c})]})})}},48230:function(e,t,n){"use strict";t.__esModule=!0,t.ChemRequestReceiver=void 0;var o=n(96323),r=n(31246),a=n(26949),i=n(2381),c=n(21118),l=function(e,t){var n=(0,r.useBackend)(t).act,i=e.name,l=e.id,u=e.reagent_name,d=e.reagent_color,s=e.volume,p=e.notes,m=e.area,f=e.state,h=e.interactable,C=e.age,g="rgba("+d[0]+","+d[1]+", "+d[2]+", 1)";return(0,o.createComponentVNode)(2,a.Section,{children:(0,o.createComponentVNode)(2,a.Flex,{direction:"column",height:10,children:[(0,o.createComponentVNode)(2,a.Flex.Item,{grow:1,children:(0,o.createComponentVNode)(2,a.Stack,{vertical:!0,children:[(0,o.createComponentVNode)(2,a.Stack.Item,{children:[i," requested"]}),(0,o.createComponentVNode)(2,a.Stack.Item,{align:"center",children:(0,o.createComponentVNode)(2,a.Box,{width:16,textAlign:"center",children:[(0,o.createComponentVNode)(2,a.Icon,{color:g,name:"circle",pt:1,style:{"text-shadow":"0 0 3px #000"}})," "+(0,c.capitalize)(u)," (",s,"u)"]})}),(0,o.createComponentVNode)(2,a.Stack.Item,{children:["from ",m," ",C," ago. ",(0,o.createVNode)(1,"br")," ",p&&"Notes: "+p]})]})}),(0,o.createComponentVNode)(2,a.Flex.Item,{children:(0,o.createComponentVNode)(2,a.Box,{children:["pending"===f&&(0,o.createFragment)([(0,o.createComponentVNode)(2,a.Button,{disabled:!h,align:"center",width:"49.5%",color:"red",icon:"ban",onClick:function(){n("deny",{id:l})},children:"Deny"}),(0,o.createComponentVNode)(2,a.Button,{disabled:!h,align:"center",width:"49.5%",icon:"check",onClick:function(){n("fulfil",{id:l})},children:"Mark as fulfilled"})],4),"pending"!==f&&(0,o.createComponentVNode)(2,a.Box,{align:"center",backgroundColor:"denied"===f?"red":"green",children:(0,c.capitalize)(f)})]})})]})})};t.ChemRequestReceiver=function(e,t){var n=(0,r.useBackend)(t),c=(n.act,n.data),u=(0,r.useLocalState)(t,"tabIndex",1),d=u[0],s=u[1],p=c.requests,m=c.allowed,f=0;return(0,o.createComponentVNode)(2,i.Window,{title:"Chemical requests",width:600,height:600,children:(0,o.createComponentVNode)(2,i.Window.Content,{scrollable:!0,children:[(0,o.createComponentVNode)(2,a.Tabs,{children:[(0,o.createComponentVNode)(2,a.Tabs.Tab,{selected:1===d,onClick:function(){return s(1)},children:"Pending"}),(0,o.createComponentVNode)(2,a.Tabs.Tab,{selected:2===d,onClick:function(){return s(2)},children:"History"})]}),(0,o.createComponentVNode)(2,a.Stack,{wrap:"wrap",children:p.map((function(e){if("pending"===e.state&&1===d||"pending"!==e.state&&2===d)return(0,o.createComponentVNode)(2,a.Stack.Item,{py:1,width:23,ml:0==f++?1:undefined,children:(0,o.normalizeProps)((0,o.createComponentVNode)(2,l,Object.assign({interactable:m},e)))},e.id)}))})]})})}},20938:function(e,t,n){"use strict";t.__esModule=!0,t.ChemRequester=void 0;var o=n(96323),r=n(31246),a=n(26949),i=n(2381),c=n(21118),l=n(36814),u=n(8095),d=function(e,t){var n=(0,r.useBackend)(t).act,a=e.chemicals,i=(0,r.useLocalState)(t,"searchText",""),c=i[0],u=i[1],d=Object.keys(a).filter((function(e){return e.includes(c)}));return(0,o.createComponentVNode)(2,l.ListSearch,{autoFocus:!0,currentSearch:c,options:d,onSearch:u,onSelect:function(e){n("set_reagent",{reagent_name:e,reagent_id:a[e]}),u("")}})};t.ChemRequester=function(e,t){var n=(0,r.useBackend)(t),l=n.act,s=n.data,p=s.chemicals,m=s.card,f=s.selected_reagent,h=s.volume,C=s.max_volume,g=s.notes,N=s.silicon_user,v=(0,r.useLocalState)(t,"notesText",""),b=v[0],V=v[1];return(0,o.createComponentVNode)(2,i.Window,{title:"Chemical request",width:400,height:600,children:(0,o.createComponentVNode)(2,i.Window.Content,{align:"center",children:[!!m&&(0,o.createComponentVNode)(2,a.Stack,{vertical:!0,children:[(0,o.createComponentVNode)(2,a.Stack.Item,{children:(0,o.createComponentVNode)(2,u.IDCard,{card:m,onEject:function(){l("reset_id")}})}),(0,o.createComponentVNode)(2,a.Stack.Item,{children:[!f&&(0,o.createComponentVNode)(2,a.Section,{height:36,fill:!0,scrollable:!0,children:(0,o.createComponentVNode)(2,d,{chemicals:p})}),!!f&&(0,o.createComponentVNode)(2,a.Button,{onClick:function(){l("set_reagent",{reagent:null})},children:(0,c.capitalize)(f)})]}),(0,o.createComponentVNode)(2,a.Stack.Item,{children:(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Amount",children:(0,o.createComponentVNode)(2,a.NumberInput,{align:"left",unit:"u",minValue:5,step:5,maxValue:C,value:h,onChange:function(e,t){l("set_volume",{volume:t})}})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Notes",children:(0,o.createComponentVNode)(2,a.Input,{width:"100%",value:b,maxLength:65,onInput:V,onChange:function(e,t){l("set_notes",{notes:t})},children:g})})]})}),(0,o.createComponentVNode)(2,a.Stack.Item,{children:(0,o.createComponentVNode)(2,a.Button,{onClick:function(){l("submit"),V("")},children:"Submit request"})})]}),!m&&!N&&(0,o.createComponentVNode)(2,a.Section,{children:"Please swipe ID to place request."}),!m&&!!N&&(0,o.createComponentVNode)(2,a.Section,{children:(0,o.createComponentVNode)(2,a.Button,{onClick:function(){return l("silicon_login")},children:"Login to place request."})})]})})}},6542:function(e,t,n){"use strict";t.__esModule=!0,t.CloningConsole=t.shortenNumber=void 0;var o=n(96323),r=n(31246),a=n(26949),i=n(2381),c=n(65751),l=n(97622),u=["type"];var d=["","k","M","B","T"],s=function(e,t){void 0===t&&(t=0);var n=Math.log10(Math.abs(e))/3|0;return n===t?e:""+Math.round(e/Math.pow(10,3*n))+d[n]};t.shortenNumber=s;var p=["#17d568","#2ecc71","#e67e22","#ed5100","#e74c3c","#ed2814"],m="functions",f="records",h="pods",C="danger",g="info",N="success",v=function(e){var t=e.type,n=function(e,t){if(null==e)return{};var n,o,r={},a=Object.keys(e);for(o=0;o<a.length;o++)n=a[o],t.indexOf(n)>=0||(r[n]=e[n]);return r}(e,u),r=Object.assign({},t===C?{danger:!0}:{},t===g?{info:!0}:{},t===N?{success:!0}:{});return(0,o.normalizeProps)((0,o.createComponentVNode)(2,a.NoticeBox,Object.assign({},r,n)))};t.CloningConsole=function(e,t){var n=(0,r.useBackend)(t),c=n.data,l=n.act,u=c.balance,d=c.cloneHack,s=c.clonesForCash,p=c.cloningWithRecords,C=c.allowedToDelete,g=(0,r.useLocalState)(t,"deletionTarget",""),N=g[0],v=g[1],k=(0,r.useLocalState)(t,"viewingNote",""),S=k[0],I=k[1],w=(0,r.useSharedState)(t,"tab",f),_=w[0],D=w[1];return p||_!==f||D(h),(0,o.createComponentVNode)(2,i.Window,{theme:d.some(Boolean)?"syndicate":"ntos",width:540,height:595,children:(0,o.createComponentVNode)(2,i.Window.Content,{children:[N&&(0,o.createComponentVNode)(2,a.Modal,{mx:7,fontSize:"31px",children:[(0,o.createComponentVNode)(2,a.Flex,{align:"center",children:[(0,o.createComponentVNode)(2,a.Flex.Item,{mr:2,mt:1,children:(0,o.createComponentVNode)(2,a.Icon,{name:"trash"})}),(0,o.createComponentVNode)(2,a.Flex.Item,{children:"Delete Record?"})]}),(0,o.createComponentVNode)(2,a.Box,{mt:2,textAlign:"center",fontSize:"24px",children:[(0,o.createComponentVNode)(2,a.Button,{lineHeight:"40px",icon:"check",color:"good",onClick:function(){l("delete",{id:N}),v("")},children:"Yes"}),(0,o.createComponentVNode)(2,a.Button,{width:8,align:"center",mt:2,ml:5,lineHeight:"40px",icon:"times",color:"bad",onClick:function(){return v("")},children:"No"})]})]}),S&&(0,o.createComponentVNode)(2,a.Modal,{mx:7,width:25,fontSize:"15px",children:[(0,o.createComponentVNode)(2,a.Button,{fontSize:"26px",color:"blue",onClick:function(){return I("")},style:{position:"absolute",top:"5px",right:"5px"},children:"X"}),S.note,!!C&&(0,o.createComponentVNode)(2,a.Button,{color:"bad",icon:"trash",mx:1,onClick:function(){I(""),l("deleteNote",{id:S.id})}})]}),(0,o.createComponentVNode)(2,a.Stack,{vertical:!0,fill:!0,children:[(0,o.createComponentVNode)(2,a.Stack.Item,{children:(0,o.createComponentVNode)(2,a.Section,{fitted:!0,children:(0,o.createComponentVNode)(2,a.Tabs,{children:[!!p&&(0,o.createComponentVNode)(2,a.Tabs.Tab,{icon:"list",selected:_===f,onClick:function(){return D(f)},children:"Records"}),(0,o.createComponentVNode)(2,a.Tabs.Tab,{icon:"box",selected:_===h,onClick:function(){return D(h)},children:"Pods"}),(0,o.createComponentVNode)(2,a.Tabs.Tab,{icon:"wrench",selected:_===m,onClick:function(){return D(m)},children:"Functions"})]})})}),!!s&&(0,o.createComponentVNode)(2,a.Stack.Item,{children:(0,o.createComponentVNode)(2,a.Section,{children:["Current machine credit: ",u]})}),(0,o.createComponentVNode)(2,a.Stack.Item,{children:(0,o.createComponentVNode)(2,V)}),(0,o.createComponentVNode)(2,a.Stack.Item,{grow:1,children:[_===f&&!!p&&(0,o.createComponentVNode)(2,y),_===h&&(0,o.createComponentVNode)(2,x),_===m&&(0,o.createComponentVNode)(2,b)]})]})]})})};var b=function(e,t){var n=(0,r.useBackend)(t),i=n.act,c=n.data,l=c.allowMindErasure,u=c.disk,d=c.diskReadOnly,s=c.geneticAnalysis,p=c.mindWipe,m=c.cloningWithRecords;return(0,o.createFragment)([(0,o.createComponentVNode)(2,a.Section,{title:"Advanced Genetic Analysis",children:[(0,o.createComponentVNode)(2,a.Box,{children:[(0,o.createComponentVNode)(2,a.Box,{bold:!0,children:"Notice:"}),(0,o.createComponentVNode)(2,a.Box,{children:"Enabling this feature will prompt the attached clone pod to transfer active genetic mutations from the genetic record to the subject during cloning."}),(0,o.createComponentVNode)(2,a.Box,{children:"The cloning process will be slightly slower as a result."})]}),(0,o.createComponentVNode)(2,a.Box,{pt:2,children:(0,o.createComponentVNode)(2,a.Button,{textAlign:"center",width:6.7,icon:s?"toggle-on":"toggle-off",color:s?"good":"bad",onClick:function(){return i("toggleGeneticAnalysis")},children:s?"Enabled":"Disabled"})})]}),!!l&&(0,o.createComponentVNode)(2,a.Section,{title:"Criminal Rehabilitation Controls",children:[(0,o.createComponentVNode)(2,a.Box,{children:[(0,o.createComponentVNode)(2,a.Box,{bold:!0,children:"Notice:"}),(0,o.createComponentVNode)(2,a.Box,{children:"Enabling this feature will enable an experimental criminal rehabilitation routine."}),(0,o.createComponentVNode)(2,a.Box,{bold:!0,children:"Human use is specifically forbidden by the Space Geneva convention."})]}),(0,o.createComponentVNode)(2,a.Box,{pt:2,children:(0,o.createComponentVNode)(2,a.Button,{textAlign:"center",width:6.7,icon:p?"toggle-on":"toggle-off",color:p?"good":"bad",onClick:function(){return i("mindWipeToggle")},children:p?"Enabled":"Disabled"})})]}),!!u&&(0,o.createComponentVNode)(2,a.Section,{title:"Disk Controls",buttons:(0,o.createFragment)([m?(0,o.createComponentVNode)(2,a.Button,{icon:"upload",color:"blue",onClick:function(){return i("load")},children:"Load from disk"}):(0,o.createComponentVNode)(2,a.Button,{icon:"upload",color:"blue",onClick:function(){return i("loadAndClone")},children:"Clone from disk"}),(0,o.createComponentVNode)(2,a.Button,{icon:"eject",color:"bad",onClick:function(){return i("eject")},children:"Eject Disk"})],0),children:(0,o.createComponentVNode)(2,a.Box,{children:[(0,o.createComponentVNode)(2,a.Icon,{color:d?"bad":"good",name:"check"})," ",d?"Disk is read only.":"Disk is writeable."]})})],0)},V=function(e,t){var n=(0,r.useBackend)(t),i=n.act,c=n.data,l=c.scannerLocked,u=c.occupantScanned,d=c.scannerOccupied,s=c.scannerGone,p=c.cloningWithRecords,m=c.message||{text:"",status:""};return(0,o.createFragment)([(0,o.createComponentVNode)(2,a.Section,{title:"Status Messages",height:7,children:m.text&&(0,o.createComponentVNode)(2,v,{type:m.status,textColor:"white",height:3.17,align:"center",style:{"vertical-align":"middle","horizontal-align":"middle"},children:(0,o.createComponentVNode)(2,a.Box,{style:{position:"relative",left:"50%",top:"50%",transform:"translate(-50%, -50%)"},children:m.text})})}),(0,o.createComponentVNode)(2,a.Section,{title:"Scanner Controls",buttons:(0,o.createComponentVNode)(2,a.Button,{width:7,icon:l?"unlock":"lock-open",align:"center",color:l?"bad":"good",onClick:function(){return i("toggleLock")},children:l?"Locked":"Unlocked"}),children:[!!p&&(!!s||!!u||!d)&&(0,o.createComponentVNode)(2,a.Box,{children:[(0,o.createComponentVNode)(2,a.Icon,{color:s||!d?"bad":"good",name:s||!d?"times":"check"})," ",!!s&&"No scanner detected.",!s&&(d?"Occupant scanned.":"Scanner has no occupant.")]}),!s&&!u&&!!d&&!!p&&(0,o.createComponentVNode)(2,a.Button,{width:s?8:7,icon:"dna",align:"center",color:s?"bad":"good",disabled:u||s,onClick:function(){return i("scan")},children:"Scan"}),!s&&!!d&&!p&&(0,o.createComponentVNode)(2,a.Button,{icon:"dna",align:"center",color:"good",onClick:function(){return i("scanAndClone")},children:"Scan & Clone"})]})],4)},y=function(e,t){var n=(0,r.useBackend)(t),i=n.act,u=n.data,d=u.disk,m=u.diskReadOnly,f=u.allowedToDelete,h=u.meatLevels,C=u.cloneRecords||[],g=(0,r.useLocalState)(t,"deletionTarget","")[1],N=(0,r.useLocalState)(t,"viewingNote",""),v=(N[0],N[1]);return(0,o.createComponentVNode)(2,a.Flex,{direction:"column",height:"100%",children:[(0,o.createComponentVNode)(2,a.Flex.Item,{children:(0,o.createComponentVNode)(2,a.Section,{mb:0,title:"Records",style:{"border-bottom":"2px solid rgba(51, 51, 51, 0.4);"},children:(0,o.createComponentVNode)(2,a.Flex,{className:"cloning-console__flex__head",children:(0,o.createComponentVNode)(2,a.Flex.Item,{className:"cloning-console__head__row",mr:2,children:[(0,o.createComponentVNode)(2,a.Flex.Item,{className:"cloning-console__head__item",style:{width:"190px"},children:"Name"}),(0,o.createComponentVNode)(2,a.Flex.Item,{className:"cloning-console__head__item",style:{width:"160px"},children:[(0,o.createComponentVNode)(2,a.Box,{children:"Damage"}),(0,o.createComponentVNode)(2,a.Box,{style:{position:"absolute",left:"50%",top:"20%",transform:"translate(-40%, 22px)"},fontSize:"9px",children:"OXY / TOX / BURN / BRUTE"})]}),(0,o.createComponentVNode)(2,a.Flex.Item,{className:"cloning-console__head__item",style:{width:"180px"},children:"Actions"})]})})})}),(0,o.createComponentVNode)(2,a.Flex.Item,{grow:1,children:(0,o.createComponentVNode)(2,a.Section,{scrollable:!0,fill:!0,children:(0,o.createComponentVNode)(2,a.Flex,{children:(0,o.createComponentVNode)(2,a.Flex.Item,{className:"cloning-console__flex__table",children:(0,o.createComponentVNode)(2,a.Flex.Item,{children:C.map((function(e){return(0,o.createComponentVNode)(2,a.Flex.Item,{className:"cloning-console__body__row",children:[(0,o.createComponentVNode)(2,a.Flex.Item,{inline:!0,className:"cloning-console__body__item",style:{width:"190px"},children:e.name}),(0,o.createComponentVNode)(2,a.Flex.Item,{className:"cloning-console__body__item",style:{width:"160px"},children:[(0,o.createComponentVNode)(2,a.ColorBox,{mr:1,color:(t=e.health.OXY,n=e.health.TOX,r=e.health.BURN,u=e.health.BRUTE,C=t+n+r+u,N=(0,l.clamp)(Math.ceil(C/25),0,5),p[N])}),e.implant&&e.health.OXY>=0?(0,o.createComponentVNode)(2,a.Box,{inline:!0,children:[(0,o.createComponentVNode)(2,c.HealthStat,{inline:!0,align:"center",type:"oxy",width:2,children:s(e.health.OXY)}),"/",(0,o.createComponentVNode)(2,c.HealthStat,{inline:!0,align:"center",type:"toxin",width:2,children:s(e.health.TOX)}),"/",(0,o.createComponentVNode)(2,c.HealthStat,{inline:!0,align:"center",type:"burn",width:2,children:s(e.health.BURN)}),"/",(0,o.createComponentVNode)(2,c.HealthStat,{inline:!0,align:"center",type:"brute",width:2,children:s(e.health.BRUTE)})]}):"No Implant Detected"]}),(0,o.createComponentVNode)(2,a.Flex.Item,{align:"baseline",className:"cloning-console__body__item",style:{width:"180px"},children:[!!f&&(0,o.createFragment)([(0,o.createComponentVNode)(2,a.Button,{icon:"trash",color:"bad",onClick:function(){return g(e.id)}}),(0,o.createComponentVNode)(2,a.Button,{icon:"pencil",color:"blue",onClick:function(){return i("editNote",{id:e.id})},tooltip:"Edit note"})],4),!!d&&(0,o.createComponentVNode)(2,a.Button,{icon:m||e.saved?"":"save",color:"blue",alignText:"center",width:"22px",disabled:e.saved||m,onClick:function(){return i("saveToDisk",{id:e.id})},children:[!m&&!!e.saved&&(0,o.createComponentVNode)(2,a.Icon,{color:"black",name:"check"}),!!m&&(0,o.createComponentVNode)(2,a.Icon.Stack,{children:[(0,o.createComponentVNode)(2,a.Icon,{color:"black",name:"pen"}),(0,o.createComponentVNode)(2,a.Icon,{color:"black",name:"slash"})]})]}),(0,o.createComponentVNode)(2,a.Button,{icon:"dna",color:"good",disabled:!h.length,onClick:function(){return i("clone",{id:e.id})},children:"Clone"}),!!e.note&&(0,o.createComponentVNode)(2,a.Button,{color:"blue",circular:!0,icon:"circle-exclamation",onClick:function(){return v({note:e.note,id:e.id})},tooltip:"View note"})]})]},e.id);var t,n,r,u,C,N}))})})})})})]})},x=function(e,t){var n=(0,r.useBackend)(t).data,i=n.completion,c=n.meatLevels,l=n.podNames;return c.length?c.map((function(e,t){return(0,o.createComponentVNode)(2,a.Section,{title:l[t].replace(/cloning pod/,"Cloning Pod")+" Status",children:(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Completion",children:(0,o.createComponentVNode)(2,a.ProgressBar,{value:i[t],maxValue:100,minValue:0,ranges:{good:[90,Infinity],average:[25,90],bad:[-Infinity,25]}})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Bio-Matter",children:(0,o.createComponentVNode)(2,a.ProgressBar,{value:e,maxValue:100,minValue:0,ranges:{good:[50,100],average:[25,50],bad:[0,25]}})})]})},"pod"+t)})):(0,o.createComponentVNode)(2,a.Section,{title:"Cloning Pod Status",children:(0,o.createComponentVNode)(2,a.Box,{children:[(0,o.createComponentVNode)(2,a.Icon,{color:"bad",name:"times"})," No Pod Detected"]})})}},78826:function(e,t,n){"use strict";t.__esModule=!0,t.ClothingBooth=void 0;var o=n(96323),r=n(1060),a=n(31246),i=n(26949),c=n(2381),l=n(18331);t.ClothingBooth=function(e,t){var n=(0,a.useBackend)(t).data,r=n.clothingBoothCategories||[],l=(0,a.useLocalState)(t,"selectedCategory",r[0]),p=l[0],m=l[1],f=p.items;return(0,o.createComponentVNode)(2,c.Window,{title:n.name,width:300,height:500,children:(0,o.createComponentVNode)(2,c.Window.Content,{children:(0,o.createComponentVNode)(2,i.Stack,{fill:!0,vertical:!0,children:[(0,o.createComponentVNode)(2,i.Stack.Item,{children:(0,o.createComponentVNode)(2,i.Section,{fill:!0,children:(0,o.createComponentVNode)(2,i.Stack,{fill:!0,align:"center",justify:"space-between",children:[(0,o.createComponentVNode)(2,i.Stack.Item,{bold:!0,children:"Cash: "+n.money+"\u2abd"}),(0,o.createComponentVNode)(2,i.Stack.Item,{children:(0,o.createComponentVNode)(2,i.Dropdown,{className:"clothingbooth__dropdown",options:r.map((function(e){return e.category})),selected:p.category,onSelected:function(e){return m(r[r.findIndex((function(t){return t.category===e}))])}})})]})})}),(0,o.createComponentVNode)(2,i.Stack.Item,{grow:1,children:(0,o.createComponentVNode)(2,i.Stack,{fill:!0,vertical:!0,children:(0,o.createComponentVNode)(2,i.Stack.Item,{grow:1,children:(0,o.createComponentVNode)(2,i.Section,{fill:!0,scrollable:!0,children:f.map((function(e){return(0,o.createComponentVNode)(2,u,{item:e},e.name)}))})})})}),(0,o.createComponentVNode)(2,i.Stack.Item,{children:(0,o.createComponentVNode)(2,i.Stack,{children:[(0,o.createComponentVNode)(2,i.Stack.Item,{align:"center",children:(0,o.createComponentVNode)(2,i.Section,{fill:!0,children:(0,o.createComponentVNode)(2,d)})}),(0,o.createComponentVNode)(2,i.Stack.Item,{grow:1,children:(0,o.createComponentVNode)(2,i.Section,{fill:!0,title:"Purchase Info",children:(0,o.createComponentVNode)(2,i.Stack,{fill:!0,vertical:!0,justify:"space-around",children:(0,o.createComponentVNode)(2,i.Stack.Item,{children:(0,o.createComponentVNode)(2,s)})})})})]})})]})})})};var u=function(e,t){var n=(0,a.useBackend)(t),c=n.act,u=n.data,d=e.item;return(0,o.createFragment)([(0,o.createComponentVNode)(2,i.Stack,{align:"center",className:(0,r.classes)(["clothingbooth__boothitem",d.name===u.selectedItemName&&"clothingbooth__boothitem-selected"]),onClick:function(){return c("select",{path:d.path})},children:[(0,o.createComponentVNode)(2,i.Stack.Item,{children:(0,o.createVNode)(1,"img",null,null,1,{src:"data:image/png;base64,"+d.img})}),(0,o.createComponentVNode)(2,i.Stack.Item,{grow:1,children:(0,o.createComponentVNode)(2,i.Box,{bold:!0,children:(0,l.capitalize)(d.name)})}),(0,o.createComponentVNode)(2,i.Stack.Item,{bold:!0,children:d.cost+"\u2abd"})]}),(0,o.createComponentVNode)(2,i.Divider)],4)},d=function(e,t){var n=(0,a.useBackend)(t),r=n.act,c=n.data;return(0,o.createComponentVNode)(2,i.Stack,{vertical:!0,align:"center",children:[(0,o.createComponentVNode)(2,i.Stack.Item,{textAlign:!0,children:(0,o.createComponentVNode)(2,i.Image,{height:2*c.previewHeight+"px",pixelated:!0,src:"data:image/png;base64,"+c.previewIcon})}),(0,o.createComponentVNode)(2,i.Stack.Item,{children:[(0,o.createComponentVNode)(2,i.Button,{icon:"chevron-left",tooltip:"Clockwise",tooltipPosition:"right",onClick:function(){return r("rotate-cw")}}),(0,o.createComponentVNode)(2,i.Button,{icon:"chevron-right",tooltip:"Counter-clockwise",tooltipPosition:"right",onClick:function(){return r("rotate-ccw")}})]})]})},s=function(e,t){var n=(0,a.useBackend)(t),r=n.act,c=n.data;return(0,o.createComponentVNode)(2,i.Stack,{bold:!0,vertical:!0,textAlign:"center",children:c.selectedItemName?(0,o.createFragment)([(0,o.createComponentVNode)(2,i.Stack.Item,{children:"Selected: "+c.selectedItemName}),(0,o.createComponentVNode)(2,i.Stack.Item,{children:"Price: "+c.selectedItemCost+"\u2abd"}),(0,o.createComponentVNode)(2,i.Stack.Item,{children:(0,o.createComponentVNode)(2,i.Button,{color:"green",disabled:c.selectedItemCost>c.money,onClick:function(){return r("purchase")},children:c.selectedItemCost>c.money?"Insufficient Cash":"Purchase"})})],4):(0,o.createComponentVNode)(2,i.Stack.Item,{children:"Please select an item."})})}},41717:function(){},70855:function(e,t,n){"use strict";t.__esModule=!0,t.ColorMatrixEditor=void 0;var o=n(96323),r=n(31246),a=n(97622),i=n(26949),c=n(2381);t.ColorMatrixEditor=function(e,t){var n=(0,r.useBackend)(t),l=n.act,u=n.data,d=u.currentColor,s=d[0],p=(s[0],s[1],s[2],s[3],d[1]),m=(p[0],p[1],p[2],p[3],d[2]),f=(m[0],m[1],m[2],m[3],d[3]),h=(f[0],f[1],f[2],f[3],d[4]),C=(h[0],h[1],h[2],h[3],["r","g","b","a","c"]);return(0,o.createComponentVNode)(2,c.Window,{title:"Color Matrix Editor",width:560,height:245,children:(0,o.createComponentVNode)(2,c.Window.Content,{children:(0,o.createComponentVNode)(2,i.Stack,{fill:!0,children:[(0,o.createComponentVNode)(2,i.Stack.Item,{align:"center",children:(0,o.createComponentVNode)(2,i.Stack,{fill:!0,vertical:!0,children:[(0,o.createComponentVNode)(2,i.Stack.Item,{grow:!0}),(0,o.createComponentVNode)(2,i.Stack.Item,{children:(0,o.createComponentVNode)(2,i.Section,{children:(0,o.createComponentVNode)(2,i.Stack,{children:[0,1,2,3].map((function(e,t){return(0,o.createComponentVNode)(2,i.Stack.Item,{children:(0,o.createComponentVNode)(2,i.Stack,{vertical:!0,children:[0,1,2,3,4].map((function(t,n){return(0,o.createComponentVNode)(2,i.Stack.Item,{children:[(0,o.createComponentVNode)(2,i.Box,{inline:!0,textColor:"label",width:"2.1rem",children:""+C[t]+C[e]+":"}),(0,o.createComponentVNode)(2,i.NumberInput,{inline:!0,value:u.currentColor[4*t+e],step:.01,width:"50px",format:function(e){return(0,a.toFixed)(e,2)},onDrag:function(n,o){var r=u.currentColor;r[4*t+e]=o,l("transition_color",{color:r})}})]},n)}))})},t)}))})})}),(0,o.createComponentVNode)(2,i.Stack.Item,{grow:!0}),(0,o.createComponentVNode)(2,i.Stack.Item,{align:"left",children:[(0,o.createComponentVNode)(2,i.Button.Confirm,{content:"Confirm",confirmContent:"Confirm?",onClick:function(){return l("confirm")}}),u.targetIsClient?(0,o.createFragment)([(0,o.createComponentVNode)(2,i.Button,{content:"Preview Color",onClick:function(){return l("client-preview")}}),(0,o.createComponentVNode)(2,i.Button,{content:"Reset Your Color",onClick:function(){return l("client-reset")}})],4):""]})]})}),(0,o.createComponentVNode)(2,i.Stack.Item,{grow:!0,children:(0,o.createComponentVNode)(2,i.ByondUi,{params:{id:u.previewRef,type:"map"},style:{height:"100%"}})})]})})})}},21018:function(e,t,n){"use strict";t.__esModule=!0,t.ColorInput=t.HexColorInput=t.ColorSelector=t.ColorPickerModal=void 0;var o=n(96323),r=n(55631),a=n(31246),i=n(26949),c=n(2381),l=n(97622),u=n(89295),d=n(54291),s=n(1060),p=n(79926),m=n(34277),f=["prefixed","alpha","color","fluid","onChange"];function h(e,t){return h=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e},h(e,t)}t.ColorPickerModal=function(e,t){var n=(0,a.useBackend)(t).data,l=n.timeout,d=n.message,s=n.title,p=n.autofocus,f=n.default_color,h=void 0===f?"#000000":f,g=(0,a.useLocalState)(t,"color_picker_choice",(0,u.hexToHsva)(h)),N=g[0],v=g[1];return(0,o.createComponentVNode)(2,c.Window,{height:400,title:s,width:600,theme:"generic",children:[!!l&&(0,o.createComponentVNode)(2,r.Loader,{value:l}),(0,o.createComponentVNode)(2,c.Window.Content,{children:(0,o.createComponentVNode)(2,i.Stack,{fill:!0,vertical:!0,children:[d&&(0,o.createComponentVNode)(2,i.Stack.Item,{m:1,children:(0,o.createComponentVNode)(2,i.Section,{fill:!0,children:(0,o.createComponentVNode)(2,i.Box,{color:"label",overflow:"hidden",children:d})})}),(0,o.createComponentVNode)(2,i.Stack.Item,{grow:!0,children:(0,o.createComponentVNode)(2,i.Section,{fill:!0,children:[!!p&&(0,o.createComponentVNode)(2,i.Autofocus),(0,o.createComponentVNode)(2,C,{color:N,setColor:v,defaultColor:h})]})}),(0,o.createComponentVNode)(2,i.Stack.Item,{children:(0,o.createComponentVNode)(2,m.InputButtons,{input:(0,u.hsvaToHex)(N)})})]})})]})};var C=function(e,t){var n=e.color,r=e.setColor,a=e.defaultColor,c=function(e){r((function(t){return Object.assign({},t,e)}))},l=(0,u.hsvaToRgba)(n),d=(0,u.hsvaToHex)(n);return(0,o.createComponentVNode)(2,i.Flex,{direction:"row",children:[(0,o.createComponentVNode)(2,i.Flex.Item,{mr:2,children:(0,o.createComponentVNode)(2,i.Stack,{vertical:!0,children:[(0,o.createComponentVNode)(2,i.Stack.Item,{children:(0,o.createVNode)(1,"div","react-colorful",[(0,o.createComponentVNode)(2,V,{hsva:n,onChange:c}),(0,o.createComponentVNode)(2,y,{hue:n.h,onChange:c,className:"react-colorful__last-control"})],4)}),(0,o.createComponentVNode)(2,i.Stack.Item,{children:[(0,o.createComponentVNode)(2,i.Box,{inline:!0,width:"100px",height:"20px",textAlign:"center",children:"Current"}),(0,o.createComponentVNode)(2,i.Box,{inline:!0,width:"100px",height:"20px",textAlign:"center",children:"Previous"}),(0,o.createVNode)(1,"br"),(0,o.createComponentVNode)(2,i.Tooltip,{content:d,position:"bottom",children:(0,o.createComponentVNode)(2,i.Box,{inline:!0,width:"100px",height:"30px",backgroundColor:d})}),(0,o.createComponentVNode)(2,i.Tooltip,{content:a,position:"bottom",children:(0,o.createComponentVNode)(2,i.Box,{inline:!0,width:"100px",height:"30px",backgroundColor:a})})]})]})}),(0,o.createComponentVNode)(2,i.Flex.Item,{grow:!0,fontSize:"15px",lineHeight:"24px",children:(0,o.createComponentVNode)(2,i.Stack,{vertical:!0,children:[(0,o.createComponentVNode)(2,i.Stack.Item,{children:(0,o.createComponentVNode)(2,i.Stack,{children:[(0,o.createComponentVNode)(2,i.Stack.Item,{children:(0,o.createComponentVNode)(2,i.Box,{textColor:"label",children:"Hex:"})}),(0,o.createComponentVNode)(2,i.Stack.Item,{grow:!0,height:"24px",children:(0,o.createComponentVNode)(2,v,{fluid:!0,color:(0,u.hsvaToHex)(n).substring(1),onChange:function(e){p.logger.info(e),r((0,u.hexToHsva)(e))},prefixed:!0})})]})}),(0,o.createComponentVNode)(2,i.Stack.Divider),(0,o.createComponentVNode)(2,i.Stack.Item,{children:(0,o.createComponentVNode)(2,i.Stack,{children:[(0,o.createComponentVNode)(2,i.Stack.Item,{width:"25px",children:(0,o.createComponentVNode)(2,i.Box,{textColor:"label",children:"H:"})}),(0,o.createComponentVNode)(2,i.Stack.Item,{grow:!0,children:(0,o.createComponentVNode)(2,y,{hue:n.h,onChange:c})}),(0,o.createComponentVNode)(2,i.Stack.Item,{children:(0,o.createComponentVNode)(2,g,{value:n.h,callback:function(e,t){return c({h:t})},max:360,unit:"\xb0"})})]})}),(0,o.createComponentVNode)(2,i.Stack.Item,{children:(0,o.createComponentVNode)(2,i.Stack,{children:[(0,o.createComponentVNode)(2,i.Stack.Item,{width:"25px",children:(0,o.createComponentVNode)(2,i.Box,{textColor:"label",children:"S:"})}),(0,o.createComponentVNode)(2,i.Stack.Item,{grow:!0,children:(0,o.createComponentVNode)(2,x,{color:n,onChange:c})}),(0,o.createComponentVNode)(2,i.Stack.Item,{children:(0,o.createComponentVNode)(2,g,{value:n.s,callback:function(e,t){return c({s:t})},unit:"%"})})]})}),(0,o.createComponentVNode)(2,i.Stack.Item,{children:(0,o.createComponentVNode)(2,i.Stack,{children:[(0,o.createComponentVNode)(2,i.Stack.Item,{width:"25px",children:(0,o.createComponentVNode)(2,i.Box,{textColor:"label",children:"V:"})}),(0,o.createComponentVNode)(2,i.Stack.Item,{grow:!0,children:(0,o.createComponentVNode)(2,k,{color:n,onChange:c})}),(0,o.createComponentVNode)(2,i.Stack.Item,{children:(0,o.createComponentVNode)(2,g,{value:n.v,callback:function(e,t){return c({v:t})},unit:"%"})})]})}),(0,o.createComponentVNode)(2,i.Stack.Divider),(0,o.createComponentVNode)(2,i.Stack.Item,{children:(0,o.createComponentVNode)(2,i.Stack,{children:[(0,o.createComponentVNode)(2,i.Stack.Item,{width:"25px",children:(0,o.createComponentVNode)(2,i.Box,{textColor:"label",children:"R:"})}),(0,o.createComponentVNode)(2,i.Stack.Item,{grow:!0,children:(0,o.createComponentVNode)(2,S,{color:n,onChange:c,target:"r"})}),(0,o.createComponentVNode)(2,i.Stack.Item,{children:(0,o.createComponentVNode)(2,g,{value:l.r,callback:function(e,t){l.r=t,c((0,u.rgbaToHsva)(l))},max:255})})]})}),(0,o.createComponentVNode)(2,i.Stack.Item,{children:(0,o.createComponentVNode)(2,i.Stack,{children:[(0,o.createComponentVNode)(2,i.Stack.Item,{width:"25px",children:(0,o.createComponentVNode)(2,i.Box,{textColor:"label",children:"G:"})}),(0,o.createComponentVNode)(2,i.Stack.Item,{grow:!0,children:(0,o.createComponentVNode)(2,S,{color:n,onChange:c,target:"g"})}),(0,o.createComponentVNode)(2,i.Stack.Item,{children:(0,o.createComponentVNode)(2,g,{value:l.g,callback:function(e,t){l.g=t,c((0,u.rgbaToHsva)(l))},max:255})})]})}),(0,o.createComponentVNode)(2,i.Stack.Item,{children:(0,o.createComponentVNode)(2,i.Stack,{children:[(0,o.createComponentVNode)(2,i.Stack.Item,{width:"25px",children:(0,o.createComponentVNode)(2,i.Box,{textColor:"label",children:"B:"})}),(0,o.createComponentVNode)(2,i.Stack.Item,{grow:!0,children:(0,o.createComponentVNode)(2,S,{color:n,onChange:c,target:"b"})}),(0,o.createComponentVNode)(2,i.Stack.Item,{children:(0,o.createComponentVNode)(2,g,{value:l.b,callback:function(e,t){l.b=t,c((0,u.rgbaToHsva)(l))},max:255})})]})})]})})]})};t.ColorSelector=C;var g=function(e){var t=e.value,n=e.callback,r=e.min,a=void 0===r?0:r,c=e.max,l=void 0===c?100:c,u=e.unit;return(0,o.createComponentVNode)(2,i.NumberInput,{width:"70px",value:Math.round(t),step:1,minValue:a,maxValue:l,onChange:n,unit:u})},N=function(e){return"#"+e},v=function(e){var t=e.prefixed,n=e.alpha,r=e.color,a=e.fluid,i=e.onChange,c=function(e,t){if(null==e)return{};var n,o,r={},a=Object.keys(e);for(o=0;o<a.length;o++)n=a[o],t.indexOf(n)>=0||(r[n]=e[n]);return r}(e,f);return(0,o.normalizeProps)((0,o.createComponentVNode)(2,b,Object.assign({},c,{fluid:a,color:r,onChange:i,escape:function(e){return e.replace(/([^0-9A-F]+)/gi,"").substring(0,n?8:6)},format:t?N:undefined,validate:function(e){return(0,u.validHex)(e,n)}})))};t.HexColorInput=v;var b=function(e){var t,n;function r(t){var n;return(n=e.call(this)||this).props=void 0,n.state=void 0,n.handleInput=function(e){var t=n.props.escape(e.currentTarget.value);n.setState({localValue:t})},n.handleBlur=function(e){e.currentTarget&&(n.props.validate(e.currentTarget.value)?n.props.onChange(n.props.escape?n.props.escape(e.currentTarget.value):e.currentTarget.value):n.setState({localValue:n.props.escape(n.props.color)}))},n.props=t,n.state={localValue:n.props.escape(n.props.color)},n}n=e,(t=r).prototype=Object.create(n.prototype),t.prototype.constructor=t,h(t,n);var a=r.prototype;return a.componentDidUpdate=function(e,t){e.color!==this.props.color&&this.setStateValue()},a.setStateValue=function(){this.setState({localValue:this.props.escape(this.props.color)})},a.render=function(){return(0,o.createComponentVNode)(2,i.Box,{className:(0,s.classes)(["Input",this.props.fluid&&"Input--fluid"]),children:[(0,o.createVNode)(1,"div","Input__baseline",".",16),(0,o.createVNode)(64,"input","Input__input",null,1,{value:this.props.format?this.props.format(this.state.localValue):this.state.localValue,onInput:this.handleInput,onBlur:this.handleBlur})]})},r}(o.Component);t.ColorInput=b;var V=function(e){var t=e.hsva,n=e.onChange,r={"background-color":(0,u.hsvaToHslString)({h:t.h,s:100,v:100,a:1})+" !important"};return(0,o.createVNode)(1,"div","react-colorful__saturation_value",(0,o.createComponentVNode)(2,d.Interactive,{onMove:function(e){n({s:100*e.left,v:100-100*e.top})},onKey:function(e){n({s:(0,l.clamp)(t.s+100*e.left,0,100),v:(0,l.clamp)(t.v-100*e.top,0,100)})},"aria-label":"Color","aria-valuetext":"Saturation "+Math.round(t.s)+"%, Brightness "+Math.round(t.v)+"%",children:(0,o.createComponentVNode)(2,i.Pointer,{className:"react-colorful__saturation_value-pointer",top:1-t.v/100,left:t.s/100,color:(0,u.hsvaToHslString)(t)})}),2,{style:r})},y=function(e){var t=e.className,n=e.hue,r=e.onChange,a=(0,s.classes)(["react-colorful__hue",t]);return(0,o.createVNode)(1,"div",a,(0,o.createComponentVNode)(2,d.Interactive,{onMove:function(e){r({h:360*e.left})},onKey:function(e){r({h:(0,l.clamp)(n+360*e.left,0,360)})},"aria-label":"Hue","aria-valuenow":Math.round(n),"aria-valuemax":"360","aria-valuemin":"0",children:(0,o.createComponentVNode)(2,i.Pointer,{className:"react-colorful__hue-pointer",left:n/360,color:(0,u.hsvaToHslString)({h:n,s:100,v:100,a:1})})}),2)},x=function(e){var t=e.className,n=e.color,r=e.onChange,a=(0,s.classes)(["react-colorful__saturation",t]);return(0,o.createVNode)(1,"div",a,(0,o.createComponentVNode)(2,d.Interactive,{style:{background:"linear-gradient(to right, "+(0,u.hsvaToHslString)({h:n.h,s:0,v:n.v,a:1})+", "+(0,u.hsvaToHslString)({h:n.h,s:100,v:n.v,a:1})+")"},onMove:function(e){r({s:100*e.left})},onKey:function(e){r({s:(0,l.clamp)(n.s+100*e.left,0,100)})},"aria-label":"Saturation","aria-valuenow":Math.round(n.s),"aria-valuemax":"100","aria-valuemin":"0",children:(0,o.createComponentVNode)(2,i.Pointer,{className:"react-colorful__saturation-pointer",left:n.s/100,color:(0,u.hsvaToHslString)({h:n.h,s:n.s,v:n.v,a:1})})}),2)},k=function(e){var t=e.className,n=e.color,r=e.onChange,a=(0,s.classes)(["react-colorful__value",t]);return(0,o.createVNode)(1,"div",a,(0,o.createComponentVNode)(2,d.Interactive,{style:{background:"linear-gradient(to right, "+(0,u.hsvaToHslString)({h:n.h,s:n.s,v:0,a:1})+", "+(0,u.hsvaToHslString)({h:n.h,s:n.s,v:100,a:1})+")"},onMove:function(e){r({v:100*e.left})},onKey:function(e){r({v:(0,l.clamp)(n.v+100*e.left,0,100)})},"aria-label":"Value","aria-valuenow":Math.round(n.s),"aria-valuemax":"100","aria-valuemin":"0",children:(0,o.createComponentVNode)(2,i.Pointer,{className:"react-colorful__value-pointer",left:n.v/100,color:(0,u.hsvaToHslString)({h:n.h,s:n.s,v:n.v,a:1})})}),2)},S=function(e){var t=e.className,n=e.color,r=e.onChange,a=e.target,c=(0,u.hsvaToRgba)(n),p=function(e){c[a]=e,r((0,u.rgbaToHsva)(c))},m=(0,s.classes)(["react-colorful__"+a,t]),f="r"===a?"rgb("+Math.round(c.r)+",0,0)":"g"===a?"rgb(0,"+Math.round(c.g)+",0)":"rgb(0,0,"+Math.round(c.b)+")";return(0,o.createVNode)(1,"div",m,(0,o.createComponentVNode)(2,d.Interactive,{onMove:function(e){p(255*e.left)},onKey:function(e){p((0,l.clamp)(c[a]+255*e.left,0,255))},"aria-valuenow":c[a],"aria-valuemax":"100","aria-valuemin":"0",children:(0,o.createComponentVNode)(2,i.Pointer,{className:"react-colorful__"+a+"-pointer",left:c[a]/255,color:f})}),2)}},22049:function(e,t,n){"use strict";t.__esModule=!0,t.ComUplink=void 0;var o=n(96323),r=n(31246),a=n(26949),i=n(2381),c=n(18331);t.ComUplink=function(e,t){var n=(0,r.useBackend)(t).data;return(0,o.createComponentVNode)(2,i.Window,{theme:"syndicate",title:"Syndicate Commander Uplink",width:500,height:500,children:(0,o.createComponentVNode)(2,i.Window.Content,{scrollable:!0,children:[(0,o.createComponentVNode)(2,a.Stack,{className:"ComUplink"}),(0,o.createComponentVNode)(2,a.Stack.Item,{children:(0,o.createComponentVNode)(2,a.Section,{fill:!0,children:(0,o.createComponentVNode)(2,a.LabeledList,{children:(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Points",children:(0,o.createComponentVNode)(2,a.Box,{inline:!0,bold:!0,color:"green",mr:"5px",className:"ComUplink__Points--commander",children:n.points},n.points)})})})}),(0,o.createComponentVNode)(2,a.Stack.Item,{grow:1,children:[(0,o.createComponentVNode)(2,a.Section,{fill:!0,scrollable:!0,title:"Uplink Items"}),(0,o.createComponentVNode)(2,a.Collapsible,{className:"ComUplink__Category--Main",title:"Equipment",open:!0,color:"Main",children:(0,o.createComponentVNode)(2,a.Table,{children:n.stock.filter((function(e){return"Main"===e.category})).map((function(e){return(0,o.createComponentVNode)(2,l,{stock:e},e.name)}))})})]})]})})};var l=function(e,t){var n=e.stock,i=(0,r.useBackend)(t),l=i.data,u=i.act;return(0,o.createComponentVNode)(2,a.Table.Row,{className:"ComUplink__Row",opacity:n.cost>l.points[n.category]?.5:1,children:[(0,o.createComponentVNode)(2,a.Table.Cell,{className:"ComUplink__Cell",py:"5px",children:[(0,o.createComponentVNode)(2,a.Box,{mb:"5px",bold:!0,children:n.name}),(0,o.createComponentVNode)(2,a.Box,{children:n.description})]}),(0,o.createComponentVNode)(2,a.Table.Cell,{className:"ComUplink__Cell",py:"5px",textAlign:"right",children:(0,o.createComponentVNode)(2,a.Button,{disabled:n.cost>l.points,onClick:function(){return u("redeem",{ref:n.ref})},children:["Purchase ",n.cost," ",(0,c.pluralize)("point",n.cost)]})})]})}},20254:function(){},65208:function(e,t,n){"use strict";t.__esModule=!0,t.ContributorRewards=void 0;var o=n(96323),r=n(31246),a=n(26949),i=n(2381);t.ContributorRewards=function(e,t){var n=(0,r.useBackend)(t),c=n.act,l=n.data,u=l.rewardTitles,d=l.rewardDescs;return(0,o.createComponentVNode)(2,i.Window,{resizable:!0,title:"Contributor Rewards",width:350,height:200,children:(0,o.createComponentVNode)(2,i.Window.Content,{scrollable:!0,children:["Howdy, contributor! These rewards don't revert until you respawn somehow.",(0,o.createComponentVNode)(2,a.Section,{children:(0,o.createComponentVNode)(2,a.Box,{children:u.map((function(e,t){return(0,o.createComponentVNode)(2,a.Collapsible,{title:u[t],open:!0,children:[d[t],(0,o.createComponentVNode)(2,a.Button,{ml:1,icon:"check-circle",content:"Redeem",onClick:function(){return c("redeem",{reward_idx:t+1})}})]},t)}))})})]})})}},19812:function(e,t,n){"use strict";t.__esModule=!0,t.AntagonistsTab=void 0;var o=n(96323),r=n(31246),a=n(26949);t.AntagonistsTab=function(e,t){var n,l=(0,r.useBackend)(t).data;return(0,o.createFragment)([(0,o.createComponentVNode)(2,i,{game_mode:l.game_mode}),null==(n=l.verbose_antagonist_data)?void 0:n.map((function(e,t){return(0,o.normalizeProps)((0,o.createComponentVNode)(2,c,Object.assign({},e),t))})),!!l.succinct_antagonist_data.length&&(0,o.createComponentVNode)(2,a.Section,{title:"Other Antagonists",children:(0,o.createComponentVNode)(2,f,{succinct_antagonist_data:l.succinct_antagonist_data})})],0)};var i=function(e){var t=e.game_mode;return(0,o.createComponentVNode)(2,a.Section,{children:(0,o.createComponentVNode)(2,a.Stack,{vertical:!0,align:"center",my:3,children:[(0,o.createComponentVNode)(2,a.Stack.Item,{mb:-2.5,italic:!0,children:"The Game Mode Was:"}),(0,o.createComponentVNode)(2,a.Stack.Item,{fontSize:2.75,bold:!0,children:t})]})})},c=function(e){var t=e.antagonist_roles,n=e.real_name,r=e.player,i=e.job_role,c=e.status,d=e.objectives,s=e.antagonist_statistics,p=e.subordinate_antagonists;return(0,o.createComponentVNode)(2,a.Box,{my:2,children:(0,o.createComponentVNode)(2,a.Collapsible,{title:n+" (played by "+r+") - "+t,fontSize:1.2,bold:!0,children:(0,o.createComponentVNode)(2,a.Section,{mt:-1.1,children:[(0,o.createComponentVNode)(2,a.Box,{fontSize:1.1,bold:!0,children:"General"}),(0,o.createComponentVNode)(2,a.Divider),(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Job",children:i}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Status",children:c})]}),!!d.length&&(0,o.createComponentVNode)(2,l,{objectives:d}),!!s.length&&(0,o.createComponentVNode)(2,u,{antagonist_statistics:s}),!!p.length&&(0,o.createComponentVNode)(2,m,{subordinate_antagonists:p})]})})})},l=function(e){var t=e.objectives;return(0,o.createFragment)([(0,o.createComponentVNode)(2,a.Box,{fontSize:1.1,bold:!0,mt:3,children:"Objectives"}),(0,o.createComponentVNode)(2,a.Divider),(0,o.createComponentVNode)(2,a.Stack,{vertical:!0,ml:.5,children:null==t?void 0:t.map((function(e,t){return(0,o.createComponentVNode)(2,a.Stack.Item,{color:e.completed?"green":"red",children:(0,o.createComponentVNode)(2,a.Stack,{children:[(0,o.createComponentVNode)(2,a.Stack.Item,{minWidth:.9,textAlign:"center",children:(0,o.createComponentVNode)(2,a.Icon,{name:e.completed?"check":"xmark"})}),(0,o.createComponentVNode)(2,a.Stack.Item,{children:e.explanation_text})]})},t)}))})],4)},u=function(e){var t=e.antagonist_statistics;return(0,o.createFragment)([(0,o.createComponentVNode)(2,a.Box,{fontSize:1.1,bold:!0,mt:3,children:"Statistics"}),(0,o.createComponentVNode)(2,a.Divider),(0,o.createComponentVNode)(2,a.LabeledList,{children:null==t?void 0:t.map((function(e,t){return(0,o.createComponentVNode)(2,d,{name:e.name,type:e.type,value:e.value},t)}))})],4)},d=function(e){var t=e.name,n=e.type,r=e.value,i=s(n);return(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:t,verticalAlign:"middle",children:(0,o.createComponentVNode)(2,i,{type:n,items:r,nothing_text:"Nothing."})})},s=function(e){return e===undefined?function(e){return e.items}:e in p?p[e]:void 0},p={itemList:a.ItemList},m=function(e){var t=e.subordinate_antagonists;return(0,o.createFragment)([(0,o.createComponentVNode)(2,a.Box,{fontSize:1.1,bold:!0,mt:3,children:"Subordinate Antagonists"}),(0,o.createComponentVNode)(2,a.Divider),(0,o.createComponentVNode)(2,f,{succinct_antagonist_data:t})],4)},f=function(e){var t=e.succinct_antagonist_data;return(0,o.createComponentVNode)(2,a.Stack,{fill:!0,vertical:!0,children:null==t?void 0:t.map((function(e,t){return(0,o.createComponentVNode)(2,a.Stack.Item,{children:(0,o.createComponentVNode)(2,a.Stack,{fill:!0,justify:"space-between",children:[(0,o.createComponentVNode)(2,a.Stack.Item,{grow:!0,children:e.antagonist_role}),(0,o.createComponentVNode)(2,a.Stack.Item,{shrink:!0,textAlign:"right",children:[!!e.dead&&(0,o.createComponentVNode)(2,a.Icon,{name:"skull"})," ",e.real_name," (played by ",e.player,")"]})]})},t)}))})}},99407:function(e,t,n){"use strict";t.__esModule=!0,t.CrewTab=void 0;var o=n(96323),r=n(31246),a=n(26949);t.CrewTab=function(e,t){var n,c=(0,r.useBackend)(t).data;return(0,o.createComponentVNode)(2,a.Box,{children:null==(n=c.groups)?void 0:n.map((function(e,t){return c.groups[t].crew.length>0&&(0,o.createComponentVNode)(2,i,{title:e.title,crew:e.crew},t)}))})};var i=function(e){var t=e.title,n=e.crew,r=null==n?void 0:n.filter((function(e){return e.head})),i=null==n?void 0:n.filter((function(e){return!e.head}));return(0,o.createComponentVNode)(2,a.Section,{title:t,children:(0,o.createComponentVNode)(2,a.Stack,{fill:!0,vertical:!0,children:[null==r?void 0:r.map((function(e,t){return(0,o.createComponentVNode)(2,c,{real_name:e.real_name,dead:e.dead,player:e.player,role:e.role,head:!0},"head"+t)})),null==i?void 0:i.map((function(e,t){return(0,o.createComponentVNode)(2,c,{real_name:e.real_name,dead:e.dead,player:e.player,role:e.role},t)}))]})})},c=function(e){var t=e.real_name,n=e.dead,r=e.player,i=e.role,c=e.head;return(0,o.createComponentVNode)(2,a.Stack.Item,{children:(0,o.createComponentVNode)(2,a.Stack,{fill:!0,bold:c,justify:"space-between",children:[(0,o.createComponentVNode)(2,a.Stack.Item,{grow:!0,children:i}),(0,o.createComponentVNode)(2,a.Stack.Item,{shrink:!0,textAlign:"right",children:[!!n&&(0,o.createComponentVNode)(2,a.Icon,{name:"skull"})," ",t," (played by ",r,")"]})]})})}},21187:function(e,t,n){"use strict";t.__esModule=!0,t.ScoreTab=void 0;var o=n(96323),r=n(31246),a=n(26949);t.ScoreTab=function(e,t){var n=(0,r.useBackend)(t).data,l=n.score_groups,u=n.total_score,s=n.grade,p=n.victory_body,m=n.victory_headline,f=(0,o.createComponentVNode)(2,d,{items:u});return(0,o.createFragment)([!!m&&(0,o.createComponentVNode)(2,i,{preamble:"Round Result:",headline:m,body:p,children:" "}),!m&&(0,o.createComponentVNode)(2,i,{preamble:"Total Score:",headline:f,body:s,children:" "}),(0,o.createComponentVNode)(2,a.Section,{children:null==l?void 0:l.map((function(e,t){return!!e.entries.length&&(0,o.normalizeProps)((0,o.createComponentVNode)(2,c,Object.assign({},e),t))}))})],0)};var i=function(e){var t=e.preamble,n=e.headline,r=e.body;return(0,o.createComponentVNode)(2,a.Section,{children:(0,o.createComponentVNode)(2,a.Stack,{vertical:!0,align:"center",my:3,children:[(0,o.createComponentVNode)(2,a.Stack.Item,{italic:!0,mt:0,mb:-2.5,children:t}),(0,o.createComponentVNode)(2,a.Stack.Item,{fontSize:2.75,bold:!0,children:n}),(0,o.createComponentVNode)(2,a.Stack.Item,{mb:-2.5,children:r})]})})},c=function(e){var t=e.title,n=e.entries;return(0,o.createComponentVNode)(2,a.Section,{title:t,children:(0,o.createComponentVNode)(2,a.LabeledList,{children:null==n?void 0:n.map((function(e,t){return(0,o.createComponentVNode)(2,l,{name:e.name,type:e.type,value:e.value},t)}))})})},l=function(e){var t=e.name,n=e.type,r=e.value,i=u(n);return(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:t,verticalAlign:"middle",children:(0,o.createComponentVNode)(2,i,{type:n,items:r,nothing_text:"N/A"})})},u=function(e){return e===undefined?function(e){return e.items}:e in s?s[e]:void 0},d=function(e){var t=e.items,n="white";return t<0?n="purple":t<30?n="brown":t<60?n="red":t<70?n="orange":t<80?n="yellow":t<90?n="yellowgreen":t<100?n="chartreuse":100===t?n="lime":t>100&&(n="teal"),(0,o.createComponentVNode)(2,a.Box,{color:n,children:[t,"%"]})},s={itemList:a.ItemList,colorPercent:d}},57119:function(e,t,n){"use strict";t.__esModule=!0,t.CrewCredits=void 0;var o=n(96323),r=n(31246),a=n(26949),i=n(2381),c=n(99407),l=n(19812),u=n(37538),d=n(21187);t.CrewCredits=function(e,t){var n=(0,r.useLocalState)(t,"menu",u.CrewCreditsTabKeys.General),s=n[0],p=n[1];return(0,o.createComponentVNode)(2,i.Window,{title:"Crew Credits",width:600,height:600,children:(0,o.createComponentVNode)(2,i.Window.Content,{scrollable:!0,children:(0,o.createComponentVNode)(2,a.Stack,{vertical:!0,fill:!0,children:[(0,o.createComponentVNode)(2,a.Stack.Item,{children:(0,o.createComponentVNode)(2,a.Tabs,{children:[(0,o.createComponentVNode)(2,a.Tabs.Tab,{selected:s===u.CrewCreditsTabKeys.General,onClick:function(){return p(u.CrewCreditsTabKeys.General)},children:"General"}),(0,o.createComponentVNode)(2,a.Tabs.Tab,{selected:s===u.CrewCreditsTabKeys.Antagonists,onClick:function(){return p(u.CrewCreditsTabKeys.Antagonists)},children:"Antagonists"}),(0,o.createComponentVNode)(2,a.Tabs.Tab,{selected:s===u.CrewCreditsTabKeys.Score,onClick:function(){return p(u.CrewCreditsTabKeys.Score)},children:"Station Score"})]})}),(0,o.createComponentVNode)(2,a.Stack.Item,{children:[s===u.CrewCreditsTabKeys.General&&(0,o.createComponentVNode)(2,c.CrewTab),s===u.CrewCreditsTabKeys.Antagonists&&(0,o.createComponentVNode)(2,l.AntagonistsTab),s===u.CrewCreditsTabKeys.Score&&(0,o.createComponentVNode)(2,d.ScoreTab)]})]})})})}},37538:function(e,t){"use strict";var n;t.__esModule=!0,t.CrewCreditsTabKeys=void 0,t.CrewCreditsTabKeys=n,function(e){e[e.General=0]="General",e[e.Antagonists=1]="Antagonists",e[e.Score=2]="Score"}(n||(t.CrewCreditsTabKeys=n={}))},75859:function(e,t,n){"use strict";t.__esModule=!0,t.Beaker=t.CryoCell=void 0;var o=n(96323),r=n(31246),a=n(26949),i=n(2381),c=n(48175),l=n(51418),u=n(65751),d=n(90881),s=n(9720);t.CryoCell=function(e,t){return(0,o.createComponentVNode)(2,i.Window,{width:485,height:575,children:(0,o.createComponentVNode)(2,i.Window.Content,{scrollable:!0,children:[(0,o.createComponentVNode)(2,p),(0,o.createComponentVNode)(2,m),(0,o.createComponentVNode)(2,f)]})})};var p=function(e,t){var n=(0,r.useBackend)(t),i=n.act,l=n.data,u=l.cellTemp,d=l.status;return(0,o.createComponentVNode)(2,a.Section,{title:"Cryo Cell Control System",children:(0,o.createComponentVNode)(2,a.Box,{textAlign:"center",children:["Current Cell Temperature",(0,o.createComponentVNode)(2,a.Box,{fontSize:2,color:(0,c.getTemperatureColor)(u),mb:"1rem",children:[(0,o.createComponentVNode)(2,a.Icon,{name:(0,c.getTemperatureIcon)(u),pr:.5}),(0,o.createComponentVNode)(2,a.AnimatedNumber,{value:(u-273.15).toPrecision(4)})," \xb0C"]}),(0,o.createComponentVNode)(2,a.Button,{icon:"power-off",color:d?"green":"red",fontSize:1.25,textAlign:"center",onClick:function(){return i("start")},children:d?"Activated":"Deactivated"})]})})},m=function(e,t){var n=(0,r.useBackend)(t),i=n.act,c=n.data,p=c.occupant,m=c.reagentScanEnabled,f=c.reagentScanActive,h=c.hasDefib,C=p?d.MobStatuses[p.occupantStat]:null;return(0,o.createComponentVNode)(2,a.Section,{title:"Occupant",buttons:(0,o.createFragment)([!!m&&(0,o.createComponentVNode)(2,a.Button,{onClick:function(){return i("reagent_scan_active")},icon:f?"eye-slash":"eye",children:[f?"Hide":"Show"," Reagents"]}),h&&(0,o.createComponentVNode)(2,a.Button,{onClick:function(){return i("defib")},icon:"bolt",color:"yellow",children:"Defibrillate"}),(0,o.createComponentVNode)(2,a.Button,{onClick:function(){return i("eject_occupant")},icon:"eject",disabled:!p,color:"green",children:"Eject"})],0),children:[!!p&&(0,o.createFragment)([(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Status",children:[(0,o.createComponentVNode)(2,a.Icon,{color:C.color,name:C.icon})," ",C.name]}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Overall Health",children:(0,o.createComponentVNode)(2,a.ProgressBar,{value:p.health,ranges:{good:[.9,Infinity],average:[.5,.9],bad:[-Infinity,.5]}})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Damage Breakdown",children:[(0,o.createComponentVNode)(2,u.HealthStat,{inline:!0,align:"center",type:"oxy",width:5,children:(0,u.damageNum)(p.oxyDamage)}),"/",(0,o.createComponentVNode)(2,u.HealthStat,{inline:!0,align:"center",type:"toxin",width:5,children:(0,u.damageNum)(p.toxDamage)}),"/",(0,o.createComponentVNode)(2,u.HealthStat,{inline:!0,align:"center",type:"burn",width:5,children:(0,u.damageNum)(p.burnDamage)}),"/",(0,o.createComponentVNode)(2,u.HealthStat,{inline:!0,align:"center",type:"brute",width:5,children:(0,u.damageNum)(p.bruteDamage)})]})]}),(0,o.createComponentVNode)(2,a.Section,{title:"Key Health Indicators",mt:"0.5rem",children:[(0,o.createComponentVNode)(2,s.KeyHealthIndicators,{mobData:p}),!!p.hasRoboticOrgans&&(0,o.createComponentVNode)(2,a.Box,{textAlign:"center",children:(0,o.createComponentVNode)(2,a.Box,{bold:!0,fontSize:1.2,color:"purple",children:"Unknown augmented organs detected."})})]})],4),p&&p.reagents&&(0,o.createFragment)([(0,o.createComponentVNode)(2,l.ReagentGraph,{container:p.reagents,mt:"0.5rem"}),(0,o.createComponentVNode)(2,l.ReagentList,{container:p.reagents})],4),!p&&(0,o.createVNode)(1,"em",null,"Unoccupied",16)]})},f=function(e,t){var n=(0,r.useBackend)(t),i=n.act,u=n.data,d=u.showBeakerContents,s=u.containerData;return(0,o.createComponentVNode)(2,a.Section,{title:"Beaker",buttons:(0,o.createFragment)([(0,o.createComponentVNode)(2,a.Button,{onClick:function(){return i("show_beaker_contents")},icon:d?"eye-slash":"eye",children:[d?"Hide":"Show"," Contents"]}),(0,o.createComponentVNode)(2,a.Button,{onClick:function(){return i("eject")},icon:"eject",disabled:!s,color:"green",children:"Eject"})],4),children:!!d&&(0,o.createFragment)([s&&(0,o.createFragment)([(0,o.createComponentVNode)(2,l.ReagentGraph,{container:s}),(0,o.createComponentVNode)(2,l.ReagentList,{container:s}),(0,o.createComponentVNode)(2,a.Box,{fontSize:2,color:(0,c.getTemperatureColor)(s.temperature),textAlign:"center",children:[(0,o.createComponentVNode)(2,a.Icon,{name:(0,c.getTemperatureIcon)(s.temperature),pr:.5}),(0,o.createComponentVNode)(2,a.AnimatedNumber,{value:s.temperature})," K"]})],4),!s&&(0,o.createComponentVNode)(2,a.Dimmer,{height:"5rem",children:(0,o.createComponentVNode)(2,a.Button,{icon:"eject",fontSize:1.5,onClick:function(){return i("insert")},bold:!0,children:"Insert Beaker"})})],0)})};t.Beaker=f},59181:function(e,t,n){"use strict";t.__esModule=!0,t.CellChargeBar=void 0;var o=n(96323),r=n(26949);t.CellChargeBar=function(e){var t=e.cell,n=t.current/t.max;return(0,o.createComponentVNode)(2,r.Tooltip,{position:"bottom",content:Math.floor(t.current)+"/"+t.max,children:(0,o.createComponentVNode)(2,r.ProgressBar,{position:"relative",value:n,ranges:{good:[.5,Infinity],average:[.25,.5],bad:[-Infinity,.25]},children:[Math.floor(100*n),"%"]})})}},7205:function(e,t,n){"use strict";t.__esModule=!0,t.DockingAllowedButton=void 0;var o=n(96323),r=n(31246),a=n(26949),i=["disabled"];t.DockingAllowedButton=function(e,t){var n=e.disabled,c=function(e,t){if(null==e)return{};var n,o,r={},a=Object.keys(e);for(o=0;o<a.length;o++)n=a[o],t.indexOf(n)>=0||(r[n]=e[n]);return r}(e,i),l=(0,r.useBackend)(t).data;return(0,o.normalizeProps)((0,o.createComponentVNode)(2,a.Button,Object.assign({disabled:n||l.disabled},c)))}},33492:function(e,t,n){"use strict";t.__esModule=!0,t.EyebotStatusView=void 0;var o=n(96323),r=n(26949),a=n(59181);t.EyebotStatusView=function(e){var t=e.occupant;return(0,o.createComponentVNode)(2,r.LabeledList,{children:(0,o.createComponentVNode)(2,r.LabeledList.Item,{label:t.cell.name,children:(0,o.createComponentVNode)(2,a.CellChargeBar,{cell:t.cell})})})}},27897:function(e,t,n){"use strict";t.__esModule=!0,t.HumanStatusView=void 0;var o=n(96323),r=n(26949);t.HumanStatusView=function(e){var t=e.occupant,n=t.health,a=t.max_health;return(0,o.createComponentVNode)(2,r.LabeledList,{children:(0,o.createComponentVNode)(2,r.LabeledList.Item,{label:"Converting",children:(0,o.createComponentVNode)(2,r.ProgressBar,{value:(a-n)/a,ranges:{good:[.5,Infinity],average:[.25,.5],bad:[-Infinity,.25]},children:[Math.floor((a-n)/a*100),"%"]})})})}},79891:function(e,t,n){"use strict";t.__esModule=!0,t.OccupantCellDisplay=void 0;var o=n(96323),r=n(26949),a=n(59181),i=n(7205);t.OccupantCellDisplay=function(e){var t=e.cell,n=e.onRemoveCell;return(0,o.createComponentVNode)(2,r.LabeledList.Item,{label:"Power Cell",color:t?"white":"red",buttons:(0,o.createComponentVNode)(2,i.DockingAllowedButton,{onClick:n,icon:"minus",tooltip:"Remove the occupant's power cell",disabled:!t}),children:t?(0,o.createComponentVNode)(2,a.CellChargeBar,{cell:t}):(0,o.createComponentVNode)(2,r.Box,{bold:!0,children:"No Power Cell Installed"})})}},44899:function(e,t,n){"use strict";t.__esModule=!0,t.ClothingReportSection=void 0;var o=n(96323),r=n(26949),a=n(7205);t.ClothingReportSection=function(e){var t=e.clothes,n=e.onRemoveClothing;return(0,o.createComponentVNode)(2,r.Section,{title:"Clothing",children:t.length>0?t.map((function(e){return(0,o.createComponentVNode)(2,r.Box,{children:[e.name,(0,o.createComponentVNode)(2,a.DockingAllowedButton,{onClick:function(){return n(e.ref)},icon:"minus-circle",color:"transparent",tooltip:"Remove from occupant"})]},e.ref)})):(0,o.createComponentVNode)(2,r.Box,{children:"No Clothing"})})}},74826:function(e,t,n){"use strict";t.__esModule=!0,t.DamageReportSection=void 0;var o=n(96323),r=n(26949),a=n(84200),i=n(7205),c=n(89974);t.DamageReportSection=function(e){var t=e.cabling,n=e.fuel,c=e.parts,u=e.onRepairStructure,d=e.onRepairWiring;return(0,o.createComponentVNode)(2,r.Section,{title:"Damage Report",buttons:(0,o.createFragment)([(0,o.createComponentVNode)(2,i.DockingAllowedButton,{disabled:n<1,icon:"wrench",backgroundColor:a.COLORS.damageType.brute,tooltip:"Fix structural damage",onClick:u}),(0,o.createComponentVNode)(2,i.DockingAllowedButton,{disabled:t<1,icon:"fire",backgroundColor:a.COLORS.damageType.burn,tooltip:"Fix wiring damage",onClick:d})],4),children:(0,o.createComponentVNode)(2,r.LabeledList,{children:[(0,o.createComponentVNode)(2,l,{label:"Head",partData:c.head}),(0,o.createComponentVNode)(2,l,{label:"Chest",partData:c.chest}),(0,o.createComponentVNode)(2,l,{label:"Left Arm",partData:c.arm_l}),(0,o.createComponentVNode)(2,l,{label:"Right Arm",partData:c.arm_r}),(0,o.createComponentVNode)(2,l,{label:"Left Leg",partData:c.leg_l}),(0,o.createComponentVNode)(2,l,{label:"Right Leg",partData:c.leg_r})]})})};var l=function(e){var t=e.label,n=e.partData;if(!(0,c.isPresentPartsData)(n))return(0,o.createComponentVNode)(2,r.LabeledList.Item,{color:"red",label:t,children:(0,o.createComponentVNode)(2,r.Box,{bold:!0,children:"MISSING!"})});var i=Math.floor(n.dmg_blunt/n.max_health*100),l=Math.floor(n.dmg_burns/n.max_health*100);return i||l?(0,o.createComponentVNode)(2,r.LabeledList.Item,{label:t,children:(0,o.createComponentVNode)(2,r.Flex,{children:[(0,o.createComponentVNode)(2,r.Flex.Item,{grow:1,children:(0,o.createComponentVNode)(2,r.Flex,{children:[(0,o.createComponentVNode)(2,r.Flex.Item,{backgroundColor:a.COLORS.damageType.brute,width:i+"%"}),(0,o.createComponentVNode)(2,r.Flex.Item,{backgroundColor:a.COLORS.damageType.burn,width:l+"%"}),(0,o.createComponentVNode)(2,r.Flex.Item,{grow:1,backgroundColor:"#000000",stretch:!0,children:"\xa0"})]})}),(0,o.createComponentVNode)(2,r.Flex.Item,{shrink:!0,children:(0,o.createComponentVNode)(2,r.Flex,{children:[(0,o.createComponentVNode)(2,r.Flex.Item,{shrink:!0,width:"25px",backgroundColor:"#330000",color:a.COLORS.damageType.brute,bold:!0,children:(0,o.createComponentVNode)(2,r.Box,{textAlign:"center",children:i>0?i:"--"})}),(0,o.createComponentVNode)(2,r.Flex.Item,{shrink:!0,width:"25px",backgroundColor:"#331100",color:a.COLORS.damageType.burn,bold:!0,children:(0,o.createComponentVNode)(2,r.Box,{textAlign:"center",children:l>0?l:"--"})})]})})]})}):void 0}},32241:function(e,t,n){"use strict";t.__esModule=!0,t.DecorationReportSection=void 0;var o=n(96323),r=n(26949),a=n(7205);t.DecorationReportSection=function(e){var t=e.cosmetics,n=e.onChangeCosmetic,i=e.onChangePaintCosmetic,c=n.head,l=n.chest,u=n.arms,d=n.legs,s=n.eyeGlow,p=i.add,m=i.change,f=i.remove;return(0,o.createComponentVNode)(2,r.Section,{title:"Decoration",children:(0,o.createComponentVNode)(2,r.LabeledList,{children:[(0,o.createComponentVNode)(2,r.LabeledList.Item,{label:"Head",buttons:(0,o.createComponentVNode)(2,a.DockingAllowedButton,{icon:"sync-alt",tooltip:"Change head decoration",onClick:c}),children:t.head||"None"}),(0,o.createComponentVNode)(2,r.LabeledList.Item,{label:"Chest",buttons:(0,o.createComponentVNode)(2,a.DockingAllowedButton,{icon:"sync-alt",tooltip:"Change chest decoration",onClick:l}),children:t.chest||"None"}),(0,o.createComponentVNode)(2,r.LabeledList.Item,{label:"Arms",buttons:(0,o.createComponentVNode)(2,a.DockingAllowedButton,{icon:"sync-alt",tooltip:"Change arms decoration",onClick:u}),children:t.arms||"None"}),(0,o.createComponentVNode)(2,r.LabeledList.Item,{label:"Legs",buttons:(0,o.createComponentVNode)(2,a.DockingAllowedButton,{icon:"sync-alt",tooltip:"Change legs decoration",onClick:d}),children:t.legs||"None"}),(0,o.createComponentVNode)(2,r.LabeledList.Item,{label:"Paint",buttons:(0,o.createFragment)([!t.paint&&(0,o.createComponentVNode)(2,a.DockingAllowedButton,{icon:"plus",tooltip:"Add paint",onClick:p}),t.paint&&(0,o.createComponentVNode)(2,a.DockingAllowedButton,{icon:"tint",tooltip:"Change colour",onClick:m}),t.paint&&(0,o.createComponentVNode)(2,a.DockingAllowedButton,{icon:"minus",tooltip:"Remove paint",onClick:f})],0),children:t.paint?(0,o.createComponentVNode)(2,r.ColorBox,{color:t.paint}):"No paint applied"}),(0,o.createComponentVNode)(2,r.LabeledList.Item,{label:"Eyes",buttons:(0,o.createComponentVNode)(2,a.DockingAllowedButton,{icon:"tint",tooltip:"Change eye glow",onClick:s}),children:(0,o.createComponentVNode)(2,r.ColorBox,{color:"rgb("+t.fx[0]+","+t.fx[1]+","+t.fx[2]+")"})})]})})}},63297:function(e,t,n){"use strict";t.__esModule=!0,t.UpgradeReportSection=void 0;var o=n(96323),r=n(26949),a=n(7205);t.UpgradeReportSection=function(e){var t=e.onRemoveUpgrade,n=e.upgrades,i=e.upgrades_max,c="Upgrades ("+n.length+" / "+i+" installed)";return(0,o.createComponentVNode)(2,r.Section,{title:c,children:(0,o.createVNode)(1,"div",null,n.map((function(e){return(0,o.createComponentVNode)(2,r.Stack,{children:[(0,o.createComponentVNode)(2,r.Stack.Item,{children:e.name}),(0,o.createComponentVNode)(2,r.Stack.Item,{children:(0,o.createComponentVNode)(2,a.DockingAllowedButton,{compact:!0,icon:"minus-circle",color:"transparent",tooltip:"Remove "+e.name,onClick:function(){return t(e.ref)}})})]},e.ref)})),0)})}},25112:function(e,t,n){"use strict";t.__esModule=!0,t.RobotStatusView=void 0;var o=n(96323),r=n(26949),a=n(7205),i=n(79891),c=n(74826),l=n(63297),u=n(32241),d=n(44899);t.RobotStatusView=function(e){var t=e.cabling,n=e.fuel,s=e.occupant,p=e.act,m=s.cell,f=s.moduleName,h=s.upgrades,C=s.upgrades_max,g=s.parts,N={head:function(){return p("cosmetic-change-head")},chest:function(){return p("cosmetic-change-chest")},arms:function(){return p("cosmetic-change-arms")},legs:function(){return p("cosmetic-change-legs")},eyeGlow:function(){return p("occupant-fx")}},v={add:function(){return p("occupant-paint-add")},change:function(){return p("occupant-paint-change")},remove:function(){return p("occupant-paint-remove")}},b=!!f;return(0,o.createFragment)([(0,o.createComponentVNode)(2,r.LabeledList,{children:[(0,o.createComponentVNode)(2,i.OccupantCellDisplay,{cell:m,onRemoveCell:function(){return p("cell-remove")}}),(0,o.createComponentVNode)(2,r.LabeledList.Item,{label:"Module",buttons:(0,o.createComponentVNode)(2,a.DockingAllowedButton,{onClick:function(){return p("module-remove")},icon:"minus",tooltip:"Remove the occupant's module",disabled:!b}),children:f||(0,o.createComponentVNode)(2,r.Box,{as:"span",color:"red",children:"No Module Installed"})})]}),(0,o.createComponentVNode)(2,c.DamageReportSection,{parts:g,fuel:n,cabling:t,onRepairStructure:function(){return p("repair-fuel")},onRepairWiring:function(){return p("repair-wiring")}}),(0,o.createComponentVNode)(2,l.UpgradeReportSection,{onRemoveUpgrade:function(e){return p("upgrade-remove",{upgradeRef:e})},upgrades:h,upgrades_max:C}),(0,o.createComponentVNode)(2,u.DecorationReportSection,{cosmetics:s.cosmetics,onChangeCosmetic:N,onChangePaintCosmetic:v}),(0,o.createComponentVNode)(2,d.ClothingReportSection,{clothes:s.clothing,onRemoveClothing:function(e){return p("clothing-remove",{clothingRef:e})}})],4)}},31924:function(e,t,n){"use strict";t.__esModule=!0,t.OccupantSection=void 0;var o=n(96323),r=n(31246),a=n(26949),i=n(7205),c=n(33492),l=n(27897),u=n(25112);t.OccupantSection=function(e,t){var n=(0,r.useBackend)(t),i=n.act,c=n.data,l=c.cabling,u=c.fuel,s=c.occupant,p=!(null==s||!s.name);return(0,o.createComponentVNode)(2,a.Section,{title:"Occupant",children:(0,o.createComponentVNode)(2,a.Stack,{children:(0,o.createComponentVNode)(2,a.Stack.Item,{grow:1,children:p?(0,o.createComponentVNode)(2,d,{act:i,cabling:l,fuel:u,occupant:s,onEjectOccupant:function(){return i("occupant-eject")},onRenameOccupant:function(){return i("occupant-rename")}}):(0,o.createVNode)(1,"div",null,"No occupant",16)})})})};var d=function(e){var t=e.act,n=e.cabling,r=e.fuel,d=e.occupant,p=e.onEjectOccupant,m=e.onRenameOccupant,f=s(d);return(0,o.createFragment)([(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Name",buttons:(0,o.createFragment)(["robot"===d.kind&&(0,o.createComponentVNode)(2,i.DockingAllowedButton,{onClick:m,icon:"edit",tooltip:"Change the occupant's designation"}),(0,o.createComponentVNode)(2,i.DockingAllowedButton,{onClick:p,icon:"eject",tooltip:"Eject the occupant"})],0),children:d.name}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Type",children:f})]}),(0,o.createComponentVNode)(2,a.Section,{title:"Status",children:["robot"===d.kind&&(0,o.createComponentVNode)(2,u.RobotStatusView,{occupant:d,fuel:r,cabling:n,act:t}),"human"===d.kind&&(0,o.createComponentVNode)(2,l.HumanStatusView,{occupant:d}),"eyebot"===d.kind&&(0,o.createComponentVNode)(2,c.EyebotStatusView,{occupant:d})]})],4)},s=function(e){switch(e.kind){case"robot":if("brain"===e.user)return"Mk.2-Type Cyborg";if("ai"===e.user)return"Mk.2-Type AI Shell";break;case"human":return"Mk.2-Type Carbon";case"eyebot":return"Mk.1-Type Eyebot";default:return"Unknown"}}},58571:function(e,t,n){"use strict";t.__esModule=!0,t.AvailableCellsSection=void 0;var o=n(96323),r=n(26949),a=n(59181),i=n(7205);t.AvailableCellsSection=function(e){var t=e.items,n=e.onEject,c=e.onInstall;return(0,o.createComponentVNode)(2,r.Section,{title:"Power Cells",children:t.length>0?(0,o.createComponentVNode)(2,r.LabeledList,{children:t.map((function(e){return(0,o.createVNode)(1,"div",null,(0,o.createComponentVNode)(2,r.LabeledList.Item,{label:e.name,buttons:(0,o.createFragment)([(0,o.createComponentVNode)(2,i.DockingAllowedButton,{onClick:function(){return c(e.ref)},icon:"plus",tooltip:"Add to occupant"}),(0,o.createComponentVNode)(2,i.DockingAllowedButton,{onClick:function(){return n(e.ref)},icon:"eject",tooltip:"Eject from station"})],4),children:(0,o.createComponentVNode)(2,a.CellChargeBar,{cell:e})}),2,null,e.ref)}))}):(0,o.createComponentVNode)(2,r.Box,{as:"div",children:"None Stored"})})}},37394:function(e,t,n){"use strict";t.__esModule=!0,t.StandardAvailableSection=void 0;var o=n(96323),r=n(26949),a=n(7205);t.StandardAvailableSection=function(e){var t=e.items,n=e.onEject,i=e.onInstall,c=e.title;return(0,o.createComponentVNode)(2,r.Section,{title:c,children:t.length>0?t.map((function(e){return(0,o.createVNode)(1,"div",null,[e.name,(0,o.createComponentVNode)(2,a.DockingAllowedButton,{onClick:function(){return i(e.ref)},icon:"plus-circle",color:"transparent",tooltip:"Add to occupant"}),(0,o.createComponentVNode)(2,a.DockingAllowedButton,{onClick:function(){return n(e.ref)},icon:"eject",color:"transparent",tooltip:"Eject from station"})],0,null,e.ref)})):(0,o.createComponentVNode)(2,r.Box,{as:"div",children:"None Stored"})})}},9818:function(e,t,n){"use strict";t.__esModule=!0,t.SuppliesSection=void 0;var o=n(96323),r=n(31246),a=n(26949),i=n(58571),c=n(37394);t.SuppliesSection=function(e,t){var n=(0,r.useBackend)(t),l=n.act,u=n.data,d=u.allow_self_service,s=u.cabling,p=u.cells,m=u.clothes,f=u.fuel,h=u.modules,C=u.upgrades,g=u.viewer_is_robot;return(0,o.createComponentVNode)(2,a.Section,{title:"Supplies",children:[(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Welding Fuel",children:f}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Wire Cabling",children:s}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Self Service",children:(0,o.createComponentVNode)(2,a.Button.Checkbox,{tooltip:"Toggle self-service.",checked:d,disabled:g,onClick:function(){return l("self-service")},children:d?"Enabled":"Disabled"})})]}),(0,o.createComponentVNode)(2,c.StandardAvailableSection,{items:h,onInstall:function(e){return l("module-install",{moduleRef:e})},onEject:function(e){return l("module-eject",{moduleRef:e})},title:"Modules"}),(0,o.createComponentVNode)(2,c.StandardAvailableSection,{items:C,onInstall:function(e){return l("upgrade-install",{upgradeRef:e})},onEject:function(e){return l("upgrade-eject",{upgradeRef:e})},title:"Upgrades"}),(0,o.createComponentVNode)(2,i.AvailableCellsSection,{items:p,onInstall:function(e){return l("cell-install",{cellRef:e})},onEject:function(e){return l("cell-eject",{cellRef:e})}}),(0,o.createComponentVNode)(2,c.StandardAvailableSection,{items:m,onInstall:function(e){return l("clothing-install",{clothingRef:e})},onEject:function(e){return l("clothing-eject",{clothingRef:e})},title:"Upgrades"})]})}},56445:function(e,t,n){"use strict";t.__esModule=!0,t.CyborgDockingStation=void 0;var o=n(96323),r=n(31246),a=n(26949),i=n(2381),c=n(31924),l=n(9818);t.CyborgDockingStation=function(e,t){var n=(0,r.useBackend)(t).data,d=n.allow_self_service,s=n.conversion_chamber,p=n.disabled,m=n.occupant,f=n.viewer_is_occupant,h=n.viewer_is_robot,C=(0,r.useLocalState)(t,"tabIndex",1),g=C[0],N=C[1];return(0,o.createComponentVNode)(2,i.Window,{width:500,height:640,title:"Cyborg Docking Station",theme:s&&"human"===(null==m?void 0:m.kind)?"syndicate":"neutral",children:(0,o.createComponentVNode)(2,i.Window.Content,{scrollable:!0,children:[!!p&&(0,o.createComponentVNode)(2,u,{allowSelfService:!!d,viewerIsOccupant:!!f,viewerIsRobot:!!h}),(0,o.createComponentVNode)(2,a.Stack,{children:[(0,o.createComponentVNode)(2,a.Stack.Item,{children:(0,o.createComponentVNode)(2,a.Tabs,{vertical:!0,width:"100px",children:[(0,o.createComponentVNode)(2,a.Tabs.Tab,{selected:1===g,onClick:function(){return N(1)},children:"Occupant"}),(0,o.createComponentVNode)(2,a.Tabs.Tab,{selected:2===g,onClick:function(){return N(2)},children:"Supplies"})]})}),(0,o.createComponentVNode)(2,a.Stack.Item,{grow:1,basis:0,children:[1===g&&(0,o.createComponentVNode)(2,c.OccupantSection),2===g&&(0,o.createComponentVNode)(2,l.SuppliesSection)]})]})]})})};var u=function(e){var t=e.allowSelfService,n=e.viewerIsOccupant,r=e.viewerIsRobot;return(0,o.createFragment)([(0,o.createComponentVNode)(2,a.Box,{backgroundColor:"#773333",p:"5px",mb:"5px",bold:!0,textAlign:"center",children:[r&&!n?"You must be inside the docking station to use the functions.":"",n&&!r?"Non-cyborgs cannot use the docking station functions.":"",n&&!t?"Self-service has been disabled at this station.":""]}),(0,o.createComponentVNode)(2,a.Divider)],4)}},89974:function(e,t){"use strict";t.__esModule=!0,t.isPresentPartsData=void 0;t.isPresentPartsData=function(e){return!!e.exists}},44616:function(e,t,n){"use strict";t.__esModule=!0,t.EmptyPlaceholder=void 0;var o=n(96323),r=n(1060),a=function(e,t){if(!t&&e&&e.__esModule)return e;if(null===e||"object"!=typeof e&&"function"!=typeof e)return{"default":e};var n=i(t);if(n&&n.has(e))return n.get(e);var o={},r=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var a in e)if("default"!==a&&Object.prototype.hasOwnProperty.call(e,a)){var c=r?Object.getOwnPropertyDescriptor(e,a):null;c&&(c.get||c.set)?Object.defineProperty(o,a,c):o[a]=e[a]}o["default"]=e,n&&n.set(e,o);return o}(n(67044));function i(e){if("function"!=typeof WeakMap)return null;var t=new WeakMap,n=new WeakMap;return(i=function(e){return e?n:t})(e)}var c=function(e){var t=e.children,n=e.className,i=(0,r.classes)([a.EmptyPlaceholder,n]);return(0,o.createVNode)(1,"div",i,t,0)};t.EmptyPlaceholder=c,c.defaultHooks=r.pureComponentHooks},94241:function(e,t,n){"use strict";t.__esModule=!0,t.ModuleDetail=void 0;var o=n(96323),r=n(31246),a=n(26949),i=n(5880),c=[{id:"brobocop",name:"Brobocop"},{id:"science",name:"Science"},{id:"civilian",name:"Civilian"},{id:"engineering",name:"Engineering"},{id:"medical",name:"Medical"},{id:"mining",name:"Mining"}];t.ModuleDetail=function(e,t){var n,u=e.onMoveToolDown,d=e.onMoveToolUp,s=e.onRemoveTool,p=e.onResetModule,m=e.tools,f=(0,r.useLocalState)(t,"selectedToolRef",undefined),h=f[0],C=f[1],g=h&&(null==(n=m.find((function(e){return e.item_ref===h})))?void 0:n.item_ref);h&&!g&&C(undefined);var N=(0,o.createComponentVNode)(2,l,{itemRef:g,onMoveDown:u,onMoveUp:d,onRemove:function(e){var t,n=m.findIndex((function(t){return t.item_ref===e}));C(null==(t=m[n+1])?void 0:t.item_ref),s(e)}});return(0,o.createComponentVNode)(2,a.Stack,{vertical:!0,fill:!0,children:[(0,o.createComponentVNode)(2,a.Stack.Item,{children:(0,o.createComponentVNode)(2,a.Section,{title:"Reset",children:c.map((function(e){var t=e.id,n=e.name;return(0,o.createComponentVNode)(2,a.Button,{onClick:function(){return p(t)},title:n,children:n},t)}))})}),(0,o.createComponentVNode)(2,a.Stack.Item,{grow:!0,children:(0,o.createComponentVNode)(2,a.Section,{fill:!0,scrollable:!0,title:"Tools",buttons:N,children:(0,o.createComponentVNode)(2,i.Tools,{tools:m,selectedToolRef:g,onSelectTool:C})})})]})};var l=function(e){var t=e.onMoveDown,n=e.onMoveUp,r=e.onRemove,i=e.itemRef,c=!!i;return(0,o.createFragment)([(0,o.createComponentVNode)(2,a.Button,{icon:"arrow-up",disabled:!c,onClick:function(){return n(i)},title:"Move Up"}),(0,o.createComponentVNode)(2,a.Button,{icon:"arrow-down",disabled:!c,onClick:function(){return t(i)},title:"Move Down"}),(0,o.createComponentVNode)(2,a.Button,{icon:"trash",disabled:!c,onClick:function(){return r(i)},title:"Remove"})],4)}},5880:function(e,t,n){"use strict";t.__esModule=!0,t.Tools=void 0;var o=n(96323),r=n(26949),a=n(44616),i=function(e){var t=e.children,n=e.onClick,a=e.selected;return(0,o.createComponentVNode)(2,r.Tabs.Tab,{onClick:n,selected:a,children:t})};t.Tools=function(e){var t=e.onSelectTool,n=e.selectedToolRef,c=e.tools,l=void 0===c?[]:c;return 0===l.length?(0,o.createComponentVNode)(2,a.EmptyPlaceholder,{children:"Module has no tools"}):(0,o.createComponentVNode)(2,r.Tabs,{vertical:!0,children:l.map((function(e){var r=e.name,a=e.item_ref;return(0,o.createComponentVNode)(2,i,{onClick:function(){return t(a)},selected:a===n,children:r},a)}))})}},25526:function(e,t,n){"use strict";t.__esModule=!0,t.ModuleView=void 0;var o=n(96323),r=n(26949),a=n(44616),i=n(94241);t.ModuleView=function(e){var t=e.modules,n=(t=void 0===t?{}:t).available,c=void 0===n?[]:n,l=t.selected,u=e.onEjectModule,d=e.onMoveToolDown,s=e.onMoveToolUp,p=e.onRemoveTool,m=e.onResetModule,f=e.onSelectModule,h=l||{},C=h.item_ref,g=h.tools,N=void 0===g?[]:g;return 0===c.length?(0,o.createComponentVNode)(2,r.Section,{fill:!0,children:(0,o.createComponentVNode)(2,a.EmptyPlaceholder,{children:"No modules inserted"})}):(0,o.createComponentVNode)(2,r.Stack,{fill:!0,children:[(0,o.createComponentVNode)(2,r.Stack.Item,{width:20,children:(0,o.createComponentVNode)(2,r.Section,{title:"Modules",scrollable:!0,fill:!0,children:(0,o.createComponentVNode)(2,r.Tabs,{vertical:!0,children:c.map((function(e){var t=e.item_ref,n=e.name,a=(0,o.createComponentVNode)(2,r.Button,{icon:"eject",color:"transparent",onClick:function(){return u(t)},title:"Eject "+n});return(0,o.createComponentVNode)(2,r.Tabs.Tab,{onClick:function(){return f(t)},rightSlot:a,selected:t===C,children:n},t)}))})})}),(0,o.createComponentVNode)(2,r.Stack.Item,{grow:!0,children:C?(0,o.createComponentVNode)(2,i.ModuleDetail,{onMoveToolDown:d,onMoveToolUp:s,onRemoveTool:p,onResetModule:m,tools:N}):(0,o.createComponentVNode)(2,r.Section,{fill:!0,children:(0,o.createComponentVNode)(2,a.EmptyPlaceholder,{children:"No module selected"})})})]})}},83709:function(e,t,n){"use strict";t.__esModule=!0,t.selectModule=t.resetModule=t.removeTool=t.moveTool=t.ejectModule=void 0;var o=n(95502),r=function(e){return function(t,n){return t(e,n)}},a=r(o.Action.EjectModule);t.ejectModule=a;var i=r(o.Action.MoveTool);t.moveTool=i;var c=r(o.Action.RemoveTool);t.removeTool=c;var l=r(o.Action.ResetModule);t.resetModule=l;var u=r(o.Action.SelectModule);t.selectModule=u},85175:function(e,t,n){"use strict";t.__esModule=!0,t.CyborgModuleRewriter=void 0;var o=n(96323),r=n(31246),a=n(2381),i=n(25526),c=n(83709),l=function(e,t){if(!t&&e&&e.__esModule)return e;if(null===e||"object"!=typeof e&&"function"!=typeof e)return{"default":e};var n=d(t);if(n&&n.has(e))return n.get(e);var o={},r=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var a in e)if("default"!==a&&Object.prototype.hasOwnProperty.call(e,a)){var i=r?Object.getOwnPropertyDescriptor(e,a):null;i&&(i.get||i.set)?Object.defineProperty(o,a,i):o[a]=e[a]}o["default"]=e,n&&n.set(e,o);return o}(n(67044)),u=n(95502);function d(e){if("function"!=typeof WeakMap)return null;var t=new WeakMap,n=new WeakMap;return(d=function(e){return e?n:t})(e)}t.CyborgModuleRewriter=function(e,t){var n=(0,r.useBackend)(t),d=n.act,s=n.data.modules;return(0,o.createComponentVNode)(2,a.Window,{width:670,height:640,children:(0,o.createComponentVNode)(2,a.Window.Content,{className:l.Block,children:(0,o.createComponentVNode)(2,i.ModuleView,{modules:s,onEjectModule:function(e){return(0,c.ejectModule)(d,{itemRef:e})},onMoveToolDown:function(e){return(0,c.moveTool)(d,{dir:u.Direction.Down,itemRef:e})},onMoveToolUp:function(e){return(0,c.moveTool)(d,{dir:u.Direction.Up,itemRef:e})},onRemoveTool:function(e){return(0,c.removeTool)(d,{itemRef:e})},onResetModule:function(e){return(0,c.resetModule)(d,{moduleId:e})},onSelectModule:function(e){return(0,c.selectModule)(d,{itemRef:e})}})})})}},67044:function(e,t,n){"use strict";t.__esModule=!0,t.EmptyPlaceholder=t.ToolLabel=t.ModuleView=t.Block=void 0;var o=n(88243),r="cyborg-module-rewriter-interface";t.Block=r;var a=(0,o.block)(r,"module-view");t.ModuleView=a;var i=(0,o.element)(a,"tool-label");t.ToolLabel=i;var c=(0,o.block)(r,"empty-placeholder");t.EmptyPlaceholder=c},95502:function(e,t){"use strict";var n,o;t.__esModule=!0,t.Direction=t.Action=void 0,t.Action=n,function(e){e.EjectModule="module-eject",e.MoveTool="tool-move",e.RemoveTool="tool-remove",e.ResetModule="module-reset",e.SelectModule="module-select"}(n||(t.Action=n={})),t.Direction=o,function(e){e.Up="up",e.Down="down"}(o||(t.Direction=o={}))},9299:function(e,t,n){"use strict";t.__esModule=!0,t.DJPanel=void 0;var o=n(96323),r=n(97622),a=n(1033),i=n(31246),c=n(26949),l=n(2381);t.DJPanel=function(e,t){var n=(0,i.useBackend)(t),r=n.act,d=n.data,s=d.loadedSound,m=d.adminChannel,f=d.preloadedSounds;return(0,o.createComponentVNode)(2,l.Window,{width:430,height:306,title:"DJ Panel",children:(0,o.createComponentVNode)(2,l.Window.Content,{children:[(0,o.createComponentVNode)(2,c.Section,{children:[(0,o.createComponentVNode)(2,c.Box,{children:[(0,o.createVNode)(1,"strong",null,"Active Soundfile: ",16),(0,o.createComponentVNode)(2,c.Button,{icon:s?"file-audio":"upload",selected:!s,content:s?(0,a.truncate)(s,38):"Upload",tooltip:s,onClick:function(){return r("set-file")}})]}),(0,o.createComponentVNode)(2,c.Divider),(0,o.createComponentVNode)(2,p)]}),(0,o.createComponentVNode)(2,c.Section,{children:(0,o.createComponentVNode)(2,c.Box,{children:[(0,o.createComponentVNode)(2,c.Button,{icon:"music",selected:s,disabled:!s,content:"Play Music",onClick:function(){return r("play-music")}}),(0,o.createComponentVNode)(2,c.Button,{icon:"volume-up",selected:s,disabled:!s,content:"Play Sound",onClick:function(){return r("play-sound")}}),(0,o.createComponentVNode)(2,c.Button,{icon:"record-vinyl",selected:s,disabled:!s,content:"Play Ambience",onClick:function(){return r("play-ambience")}}),(0,o.createComponentVNode)(2,c.Box,{as:"span",color:"grey",textAlign:"right",pl:1,children:[(0,o.createComponentVNode)(2,c.Icon,{name:"satellite"})," Channel: ",(0,o.createVNode)(1,"em",null,1024-m,0)]})]})}),(0,o.createComponentVNode)(2,c.Section,{children:[(0,o.createComponentVNode)(2,c.Box,{children:[(0,o.createComponentVNode)(2,c.Button,{content:"Play Remote",onClick:function(){return r("play-remote")}}),(0,o.createComponentVNode)(2,c.Button,{disabled:!s,content:"Play To Player",onClick:function(){return r("play-player")}})]}),(0,o.createComponentVNode)(2,c.Box,{children:[(0,o.createComponentVNode)(2,c.Button,{disabled:!s,content:"Preload Sound",onClick:function(){return r("preload-sound")}}),(0,o.createComponentVNode)(2,c.Button,{disabled:!Object.keys(f).length,content:"Play Preloaded Sound",onClick:function(){return r("play-preloaded")}})]}),(0,o.createComponentVNode)(2,c.Box,{children:[(0,o.createComponentVNode)(2,c.Button,{color:"yellow",content:"Toggle DJ Announcements",onClick:function(){return r("toggle-announce")}}),(0,o.createComponentVNode)(2,c.Button,{color:"yellow",content:"Toggle DJ For Player",onClick:function(){return r("toggle-player-dj")}})]}),(0,o.createComponentVNode)(2,c.Box,{children:[(0,o.createComponentVNode)(2,c.Button,{icon:"stop",color:"red",content:"Stop Last Sound",onClick:function(){return r("stop-sound")}}),(0,o.createComponentVNode)(2,c.Button,{icon:"broadcast-tower",color:"red",content:"Stop The Radio For Everyone",onClick:function(){return r("stop-radio")}})]})]}),(0,o.createComponentVNode)(2,u)]})})};var u=function(e,t){if((0,i.useBackend)(t).data.announceMode)return(0,o.createComponentVNode)(2,c.NoticeBox,{info:!0,children:"Announce Mode Enabled"})},d=function(e){return(0,r.toFixed)(2*e)+"%"},s=function(e){return(0,r.toFixed)(100*e)+"%"},p=function(e,t){var n=(0,i.useBackend)(t),r=n.act,a=n.data,l=a.loadedSound,u=a.volume,p=a.frequency,m=function(e,t){return r("set-volume",{volume:t})},f=function(e,t){return r("set-freq",{frequency:t})};return(0,o.createComponentVNode)(2,c.Box,{children:(0,o.createComponentVNode)(2,c.LabeledControls,{children:[(0,o.createComponentVNode)(2,c.LabeledControls.Item,{label:"Volume",children:(0,o.createComponentVNode)(2,c.NumberInput,{animated:!0,value:u,minValue:0,maxValue:100,format:d,onDrag:m})}),(0,o.createComponentVNode)(2,c.LabeledControls.Item,{children:[(0,o.createComponentVNode)(2,c.Knob,{minValue:0,maxValue:100,ranges:{primary:[20,80],average:[10,90],bad:[0,100]},value:u,format:d,onDrag:m}),(0,o.createComponentVNode)(2,c.Button,{icon:"sync-alt",top:"0.3em",content:"Reset",onClick:function(e,t){return r("set-volume",{volume:"reset"})}})]}),(0,o.createComponentVNode)(2,c.LabeledControls.Item,{label:"Frequency",children:(0,o.createComponentVNode)(2,c.NumberInput,{animated:!0,value:p,step:.1,minValue:-100,maxValue:100,format:s,onDrag:f})}),(0,o.createComponentVNode)(2,c.LabeledControls.Item,{children:[(0,o.createComponentVNode)(2,c.Knob,{disabled:!l,minValue:-100,maxValue:100,step:.1,stepPixelSize:.1,ranges:{primary:[-40,40],average:[-70,70],bad:[-100,100]},value:p,format:s,onDrag:f}),(0,o.createComponentVNode)(2,c.Button,{icon:"sync-alt",top:"0.3em",content:"Reset",onClick:function(e,t){return r("set-freq",{frequency:"reset"})}})]})]})})}},64640:function(e,t,n){"use strict";t.__esModule=!0,t.DisposalChute=void 0;var o,r=n(96323),a=n(31246),i=n(26949),c=n(2381),l=n(36814),u=n(9389),d=((o={})[u.DisposalChuteState.Off]={pumpColor:"bad",pumpText:"Inactive"},o[u.DisposalChuteState.Charging]={pumpColor:"average",pumpText:"Pressurizing"},o[u.DisposalChuteState.Charged]={pumpColor:"good",pumpText:"Ready"},o);t.DisposalChute=function(e,t){var n=(0,a.useBackend)(t),o=n.act,l=n.data,u=l.name,p=l.destinations,m=void 0===p?null:p,f=l.destinationTag,h=l.flush,C=l.mode,g=l.pressure,N=d[C],v=N.pumpColor,b=N.pumpText;return(0,r.createComponentVNode)(2,c.Window,{title:u,width:355,height:m?350:140,children:(0,r.createComponentVNode)(2,c.Window.Content,{className:"disposal-chute-interface",scrollable:!!m,children:[(0,r.createComponentVNode)(2,i.Stack,{vertical:!0,children:[(0,r.createComponentVNode)(2,i.Stack.Item,{children:(0,r.createComponentVNode)(2,i.LabeledList,{children:(0,r.createComponentVNode)(2,i.LabeledList.Item,{label:"Current Pressure"})})}),(0,r.createComponentVNode)(2,i.Stack.Item,{children:(0,r.createComponentVNode)(2,i.ProgressBar,{ranges:{good:[1,Infinity],average:[.75,1],bad:[-Infinity,.75]},value:g})})]}),(0,r.createComponentVNode)(2,i.Divider),(0,r.createComponentVNode)(2,i.LabeledList,{children:[(0,r.createComponentVNode)(2,i.LabeledList.Item,{label:"Air Pump",buttons:(0,r.createComponentVNode)(2,i.Button,{icon:"power-off",content:C?"Enabled":"Disabled",color:C?"green":"red",onClick:function(){return o("togglePump")}}),children:(0,r.createComponentVNode)(2,i.Box,{color:v,children:b})}),(0,r.createComponentVNode)(2,i.LabeledList.Item,{label:"Chute Handle",buttons:(0,r.createComponentVNode)(2,i.Button,{icon:m?"envelope":"trash-alt",content:h?"Flushing":"Flush",color:h?"":"red",onClick:function(){return o("toggleHandle")}}),children:(0,r.createComponentVNode)(2,i.Button,{content:"Eject Contents",icon:"eject",onClick:function(){return o("eject")}})})]}),!!m&&(0,r.createFragment)([(0,r.createComponentVNode)(2,i.Divider),(0,r.createComponentVNode)(2,i.Stack,{vertical:!0,children:[(0,r.createComponentVNode)(2,i.Stack.Item,{children:(0,r.createComponentVNode)(2,i.LabeledList,{children:(0,r.createComponentVNode)(2,i.LabeledList.Item,{label:"Destination",buttons:(0,r.createComponentVNode)(2,i.Button,{icon:"search",content:"Rescan",onClick:function(){return o("rescanDest")}}),children:f})})}),(0,r.createComponentVNode)(2,i.Stack.Item,{children:(0,r.createComponentVNode)(2,s,{destinations:m,destinationTag:f})})]})],4)]})})};var s=function(e,t){var n=e.destinations,o=void 0===n?[]:n,i=e.destinationTag,c=void 0===i?null:i,u=(0,a.useBackend)(t).act,d=(0,a.useLocalState)(t,"searchText",""),s=d[0],p=d[1],m=o.filter((function(e){return e.includes(s)}));return(0,r.createComponentVNode)(2,l.ListSearch,{autoFocus:!0,currentSearch:s,onSearch:p,onSelect:function(e){return u("select-destination",{destination:e})},options:m,selectedOption:c})}},9389:function(e,t){"use strict";var n;t.__esModule=!0,t.DisposalChuteState=void 0,t.DisposalChuteState=n,function(e){e[e.Off=0]="Off",e[e.Charging=1]="Charging",e[e.Charged=2]="Charged"}(n||(t.DisposalChuteState=n={}))},84430:function(e,t,n){"use strict";t.__esModule=!0,t.DoorTimer=void 0;var o=n(96323),r=n(31246),a=n(26949),i=n(1033),c=n(2381);t.DoorTimer=function(e,t){var n=(0,r.useBackend)(t),l=n.act,u=n.data;return(0,o.createComponentVNode)(2,c.Window,{width:260,height:u.flasher?279:207,children:(0,o.createComponentVNode)(2,c.Window.Content,{children:(0,o.createComponentVNode)(2,a.Stack,{vertical:!0,fill:!0,justify:"stretch",children:[(0,o.createComponentVNode)(2,a.Stack.Item,{grow:1,children:(0,o.createComponentVNode)(2,a.Section,{title:"Timer",fill:!0,children:(0,o.createComponentVNode)(2,a.LabeledControls,{justify:"start",children:[(0,o.createComponentVNode)(2,a.LabeledControls.Item,{label:"Time",children:(0,o.createComponentVNode)(2,a.Stack,{align:"center",children:[(0,o.createComponentVNode)(2,a.Stack.Item,{children:(0,o.createComponentVNode)(2,a.Knob,{animated:!0,minValue:0,maxValue:u.maxTime,value:u.time,format:function(e){return(0,i.formatTime)(10*e)},onDrag:function(e,t){return l("set-time",{time:t})},onChange:function(e,t){return l("set-time",{time:t,finish:!0})}})}),(0,o.createComponentVNode)(2,a.Stack.Item,{children:(0,o.createComponentVNode)(2,a.TimeDisplay,{value:10*u.time,timing:u.timing,format:i.formatTime})})]})}),(0,o.createComponentVNode)(2,a.LabeledControls.Item,{children:(0,o.createComponentVNode)(2,a.Button,{onClick:function(){return l("toggle-timing")},children:u.timing?"Stop":"Start"})})]})})}),!!u.flusher&&(0,o.createComponentVNode)(2,a.Stack.Item,{children:(0,o.createComponentVNode)(2,a.Section,{title:"Floor Flusher",fill:!0,children:(0,o.createComponentVNode)(2,a.Button,{onClick:function(){return l("toggle-flusher")},backgroundColor:u.opening?"orange":undefined,children:u.opening?u.flusheropen?"Opening...":"Closing...":u.flusheropen?"Close Flusher":"Open Flusher"})})}),!!u.flasher&&(0,o.createComponentVNode)(2,a.Stack.Item,{children:(0,o.createComponentVNode)(2,a.Section,{title:"Flasher",fill:!0,children:(0,o.createComponentVNode)(2,a.Button,{onClick:function(){return l("activate-flasher")},backgroundColor:u.recharging?"orange":undefined,children:["Flash Cell ",!!u.recharging&&"(Recharging)"]})})})]})})})}},9494:function(){},29259:function(e,t,n){"use strict";t.__esModule=!0,t.DyeDispenser=void 0;var o=n(96323),r=n(31246),a=n(2381),i=n(26949),c=n(21018),l=n(89295),u="#FFFFFF";t.DyeDispenser=function(e,t){var n=(0,r.useBackend)(t),d=n.act,s=n.data,p=s.bottle,m=s.uses_left,f=s.bottle_color,h=p&&m>0,C=(0,r.useLocalState)(t,"color_picker_choice",(0,l.hexToHsva)(f||u)),g=C[0],N=C[1];return(0,o.createComponentVNode)(2,a.Window,{width:500,height:340,children:(0,o.createComponentVNode)(2,a.Window.Content,{children:[(0,o.createComponentVNode)(2,i.Stack,{mb:1,textAlign:"center",children:[(0,o.createComponentVNode)(2,i.Stack.Item,{grow:!0,children:(0,o.createComponentVNode)(2,i.Button,{fontSize:1.5,bold:!0,width:"100%",onClick:function(){return d("fillb",{selectedColor:(0,l.hsvaToHex)(g)})},children:[(0,o.createComponentVNode)(2,i.ColorBox,{color:(0,l.hsvaToHex)(g),mr:1}),"Fill"]})}),(0,o.createComponentVNode)(2,i.Stack.Item,{grow:!0,children:(0,o.createComponentVNode)(2,i.Button,{fontSize:1.5,bold:!0,width:"100%",onClick:function(){return d("emptyb",{})},icon:"broom",disabled:!h,children:"Empty"})}),(0,o.createComponentVNode)(2,i.Stack.Item,{grow:!0,children:(0,o.createComponentVNode)(2,i.Button,{fontSize:1.5,bold:!0,width:"100%",onClick:function(){return d("eject",{})},icon:"eject",children:"Eject"})})]}),(0,o.createComponentVNode)(2,c.ColorSelector,{color:g,setColor:N,defaultColor:f||u}),!p&&(0,o.createComponentVNode)(2,i.Dimmer,{children:(0,o.createComponentVNode)(2,i.Button,{fontSize:1.5,bold:!0,onClick:function(){return d("insertb",{})},icon:"eject",children:"Insert Dye Bottle"})})]})})}},87339:function(e,t,n){"use strict";t.__esModule=!0,t.Elevator=void 0;var o=n(96323),r=n(31246),a=n(2381),i=n(26949);t.Elevator=function(e,t){var n=(0,r.useBackend)(t),c=n.act,l=n.data,u=l.location,d=l.active;return(0,o.createComponentVNode)(2,a.Window,{theme:"ntos",width:400,height:130,children:(0,o.createComponentVNode)(2,a.Window.Content,{textAlign:"center",children:[(0,o.createComponentVNode)(2,i.Section,{width:"70%",mx:"auto",children:["Location: ",(0,o.createVNode)(1,"em",null,u,0)]}),(0,o.createComponentVNode)(2,i.Section,{width:"70%",mx:"auto",fontSize:"16px",children:(0,o.createComponentVNode)(2,i.Button,{onClick:function(){return c("send",{})},enabled:!d,color:d?"grey":"green",icon:"elevator",fluid:!0,children:d?"Moving":"Move Elevator"})})]})})}},20316:function(e,t,n){"use strict";t.__esModule=!0,t.EngineStats=void 0;var o=n(96323),r=n(31246),a=n(26949),i=n(2381),c=n(1033),l=n(818),u=function(e){return Object.entries(e).map((function(e,t){var n=e[0],r=e[1];return(0,o.createComponentVNode)(2,a.Stack.Item,{mt:.5,ml:0===t?1:undefined,children:[(0,o.createComponentVNode)(2,a.Box,{children:[n.split("|")[0],":\xa0",0===r[r.length-1][1]?"No Data":(0,c.formatSiUnit)(r[r.length-1][1],0,n.split("|")[1])]}),(0,o.createComponentVNode)(2,a.Chart.Line,{height:"3.5em",width:"20em",data:r,rangeX:[0,r.length-1],rangeY:[0,(0,l.getStatsMax)(r)],strokeColor:"\trgba(55,170,25, 1)",fillColor:"rgba(55,170,25, 0.25)"})]},n)}))};t.EngineStats=function(e,t){var n=(0,r.useBackend)(t),c=n.act,d=n.data,s=d.turnedOn,p=d.tegData,m=d.chamberData,f=(0,l.processStatsData)(p),h=(0,l.processStatsData)(m);return(0,o.createComponentVNode)(2,i.Window,{height:"560",width:"760",theme:"retro-dark",title:"Engine Statistics",children:(0,o.createComponentVNode)(2,i.Window.Content,{children:s&&f&&h?(0,o.createComponentVNode)(2,a.Box,{children:[(0,o.createComponentVNode)(2,a.Section,{title:(0,o.createComponentVNode)(2,a.Box,{children:["TEG Data",(0,o.createComponentVNode)(2,a.Button,{tooltip:"Power",icon:"power-off",color:"caution",position:"absolute",right:.25,top:.25,onClick:function(){return c("toggle-power")}})]}),children:(0,o.createComponentVNode)(2,a.Stack,{wrap:"wrap",justify:"space-around",ml:-1,children:u(f)})}),(0,o.createComponentVNode)(2,a.Section,{title:"Combustion Chamber Data",children:(0,o.createComponentVNode)(2,a.Stack,{wrap:"wrap",justify:"space-around",ml:-1,children:u(h)})})]}):(0,o.createComponentVNode)(2,a.Modal,{textAlign:"center",width:20,height:5,fontSize:2,fontFamily:"Courier",children:["POWER ON",(0,o.createComponentVNode)(2,a.Button,{tooltip:"Power",icon:"power-off",selected:s,color:"caution",ml:3,onClick:function(){return c("toggle-power")}})]})})})}},65203:function(e,t,n){"use strict";t.__esModule=!0,t.EspressoMachine=t.DrinkContainer=t.ReagentBlocks=t.ContainerButtons=t.DrinksList=void 0;var o=n(96323),r=n(31246),a=n(26949),i=n(2381),c=function(e,t){var n=(0,r.useBackend)(t).act,i=e.drinks;return(0,o.createComponentVNode)(2,a.Flex,{wrap:!0,children:i.map((function(e){return(0,o.createComponentVNode)(2,a.Flex.Item,{children:(0,o.createComponentVNode)(2,a.Button,{m:"2px",fontSize:"1.4rem",backgroundColor:"brown",textAlign:"center",onClick:function(){return n("pour",{drink_name:e})},children:e},e)},e)}))})};t.DrinksList=c;var l=function(e,t){var n=(0,r.useBackend)(t).act,i=e.index;return(0,o.createComponentVNode)(2,a.Flex,{children:(0,o.createComponentVNode)(2,a.Flex.Item,{nowrap:!0,children:[(0,o.createComponentVNode)(2,a.Button,{icon:"eject",color:"blue",title:"Eject",mr:"10px",onClick:function(){return n("eject",{cup_index:i})}}),(0,o.createComponentVNode)(2,a.Button,{icon:"times",color:"red",title:"Flush All",onClick:function(){return n("flush",{cup_index:i})}})]})})};t.ContainerButtons=l;var u=function(e){var t=e.capacity,n=e.total,r=e.reagents;return(0,o.createComponentVNode)(2,a.Flex,{mt:"5px",children:[r.map((function(e){return(0,o.createComponentVNode)(2,a.Flex.Item,{grow:e.amount/t,children:(0,o.createComponentVNode)(2,a.Tooltip,{content:e.name+" ("+e.amount+"u)",position:"bottom",children:(0,o.createComponentVNode)(2,a.Box,{width:"100%",height:"30px",px:0,my:0,backgroundColor:e.colour})})},e.name)})),(0,o.createComponentVNode)(2,a.Flex.Item,{grow:(t-n)/t,children:(0,o.createComponentVNode)(2,a.Tooltip,{content:"Nothing ("+(t-n)+"u)",position:"bottom",children:(0,o.createComponentVNode)(2,a.NoticeBox,{width:"100%",height:"30px",px:0,my:0,backgroundColor:"rgba(0, 0, 0, 0)"})})},"nothing")]})};t.ReagentBlocks=u;var d=function(e,t){(0,r.useBackend)(t).act;var n=e.cup;return(0,o.createComponentVNode)(2,a.Flex,{direction:"column",mt:"10px",children:[(0,o.createComponentVNode)(2,a.Flex,{children:[(0,o.createComponentVNode)(2,l,{index:n.index}),(0,o.createComponentVNode)(2,a.Box,{as:"span",fontSize:"1.3rem",ml:"15px",children:n.total+" / "+n.capacity})]}),(0,o.createComponentVNode)(2,u,{capacity:n.capacity,total:n.total,reagents:n.reagents})]})};t.DrinkContainer=d;t.EspressoMachine=function(e,t){var n=(0,r.useBackend)(t).data,l=n.drinks,u=n.containers.map((function(e){return{capacity:e.capacity,index:e.index,total:e.reagents.reduce((function(e,t){return e+t[1]}),0),reagents:e.reagents.map((function(e){return{name:e[0],amount:e[1],colour:"rgb("+e[2]+","+e[3]+","+e[4]+")"}}))}}));return(0,o.createComponentVNode)(2,i.Window,{title:"Espresso Machine",width:500,height:400,theme:"ntos",children:(0,o.createComponentVNode)(2,i.Window.Content,{children:[(0,o.createComponentVNode)(2,a.Section,{title:"Drinks",children:(0,o.createComponentVNode)(2,c,{drinks:l})}),(0,o.createComponentVNode)(2,a.Section,{title:"Cups",children:(0,o.createComponentVNode)(2,a.Flex,{direction:"column",children:u.map((function(e){return(0,o.createComponentVNode)(2,d,{cup:e},e.index)}))})})]})})}},53600:function(e,t,n){"use strict";t.__esModule=!0,t.Filteriffic=void 0;var o=n(96323),r=n(31246),a=n(26949),i=n(2381),c=n(1397),l=n(97622),u=n(97622),d=["type","priority"];var s=function(e,t){var n=e.value,i=e.name,c=e.filterName,l=(0,r.useBackend)(t).act;return(0,o.createComponentVNode)(2,a.NumberInput,{value:n,minValue:-500,maxValue:500,stepPixelSize:5,width:"39px",onDrag:function(e,t){var n;return l("modify_filter_value",{name:c,new_data:(n={},n[i]=t,n)})}})},p=function(e,t){var n=e.value,i=e.name,c=e.filterName,d=(0,r.useBackend)(t).act,s=(0,r.useLocalState)(t,c+"-"+i,.01),p=s[0],m=s[1];return(0,o.createFragment)([(0,o.createComponentVNode)(2,a.NumberInput,{value:n,minValue:-500,maxValue:500,stepPixelSize:4,step:p,format:function(e){return(0,l.toFixed)(e,(0,u.numberOfDecimalDigits)(p))},width:"80px",onDrag:function(e,t){var n;return d("transition_filter_value",{name:c,new_data:(n={},n[i]=t,n)})}}),(0,o.createComponentVNode)(2,a.Box,{inline:!0,ml:2,mr:1,children:"Step:"}),(0,o.createComponentVNode)(2,a.NumberInput,{value:p,step:.001,format:function(e){return(0,l.toFixed)(e,4)},width:"70px",onChange:function(e,t){return m(t)}})],4)},m=function(e,t){var n=e.value,i=e.name,c=e.filterName,l=(0,r.useBackend)(t).act;return(0,o.createComponentVNode)(2,a.Input,{value:n,width:"250px",onInput:function(e,t){var n;return l("modify_filter_value",{name:c,new_data:(n={},n[i]=t,n)})}})},f=function(e,t){var n=e.value,i=e.name,c=e.filterName,u=(0,r.useBackend)(t).act,d=n;return null===d&&(d=Array(1,0,0,0,1,0)),(0,o.createFragment)([(0,o.createTextVNode)("Matrix:"),(0,o.createComponentVNode)(2,a.Stack,{children:[0,1,2].map((function(e,t){return(0,o.createComponentVNode)(2,a.Stack.Item,{children:(0,o.createComponentVNode)(2,a.Stack,{vertical:!0,children:[0,1,2].map((function(t,n){return(0,o.createComponentVNode)(2,a.Stack.Item,{children:[2===e&&t<2&&0,2===e&&2===t&&1,e<2&&(0,o.createComponentVNode)(2,a.NumberInput,{inline:!0,value:d[3*e+t],step:.01,width:"50px",format:function(e){return(0,l.toFixed)(e,2)},onDrag:function(n,o){var r,a=d;a[3*e+t]=o,u("transition_filter_value",{name:c,new_data:(r={},r[i]=a,r)})}})]},n)}))})},t)}))})],4)},h=function(e,t){var n=e.value,i=e.filterName,c=e.name,u=(0,r.useBackend)(t).act,d=["r","g","b","a","c"];if(Array.isArray(n)){var s=n;if(s.length<20){for(;s.length<12;)s.push(0);for(s=Array(s[0],s[1],s[2],0,s[3],s[4],s[5],0,s[6],s[7],s[8],0,0,0,0,1,s[9],s[10],s[11],0);s.length<20;)s.push(0)}return(0,o.createFragment)([(0,o.createComponentVNode)(2,a.Button,{icon:"pencil-alt",onClick:function(){return u("modify_color_value",{name:i})}}),(0,o.createComponentVNode)(2,a.Stack,{children:[0,1,2,3].map((function(e,t){return(0,o.createComponentVNode)(2,a.Stack.Item,{children:(0,o.createComponentVNode)(2,a.Stack,{vertical:!0,children:[0,1,2,3,4].map((function(t,n){return(0,o.createComponentVNode)(2,a.Stack.Item,{children:[(0,o.createComponentVNode)(2,a.Box,{inline:!0,textColor:"label",width:"2.1rem",children:""+d[t]+d[e]+":"}),(0,o.createComponentVNode)(2,a.NumberInput,{inline:!0,value:s[4*t+e],step:.01,width:"50px",format:function(e){return(0,l.toFixed)(e,2)},onDrag:function(n,o){var r,a=s;a[4*t+e]=o,u("transition_filter_value",{name:i,new_data:(r={},r[c]=a,r)})}})]},n)}))})},t)}))})],4)}return(0,o.createFragment)([n.type,(0,o.createComponentVNode)(2,a.Button,{icon:"pencil-alt",onClick:function(){return u("modify_color_value",{name:i})}}),(0,o.createComponentVNode)(2,a.ColorBox,{color:n,mr:.5}),(0,o.createComponentVNode)(2,a.Input,{value:n,width:"90px",onInput:function(e,t){var n;return u("transition_filter_value",{name:i,new_data:(n={},n[c]=t,n)})}}),(0,o.createComponentVNode)(2,a.Button,{content:"Convert to color matrix",onClick:function(){return u("convert_color_value_matrix",{name:i})}})],0)},C=function(e,t){var n=e.value,i=e.filterName,c=(0,r.useBackend)(t).act;return(0,o.createFragment)([(0,o.createComponentVNode)(2,a.Button,{icon:"pencil-alt",onClick:function(){return c("modify_icon_value",{name:i})}}),(0,o.createComponentVNode)(2,a.Box,{inline:!0,ml:1,children:n})],4)},g=function(e,t){var n=e.name,i=e.value,l=e.filterName,u=e.filterType,d=(0,r.useBackend)(t),s=d.act,p=d.data.filter_info[u].flags;return(0,c.map)((function(e,t){return(0,o.createComponentVNode)(2,a.Button.Checkbox,{checked:i&e,content:t,onClick:function(){var t;return s("modify_filter_value",{name:l,new_data:(t={},t[n]=i^e,t)})}})}))(p)},N=function(e,t){var n=e.name,i=e.value,l=e.filterName,u=e.filterType,d=(0,r.useBackend)(t),s=d.act,p=d.data.filter_info[u].space;return(0,c.map)((function(e,t){return(0,o.createComponentVNode)(2,a.Button.Checkbox,{checked:i===e,content:t,onClick:function(){var t;return s("modify_filter_value",{name:l,new_data:(t={},t[n]=e,t)})}})}))(p)},v=function(e,t){var n=e.name,i=e.value,l=e.filterName,u=e.filterType,d=(0,r.useBackend)(t),s=d.act,p=d.data.filter_info[u].blend_mode;return(0,c.map)((function(e,t){return(0,o.createComponentVNode)(2,a.Button.Checkbox,{checked:i===e,content:t,onClick:function(){var t;return s("modify_filter_value",{name:l,new_data:(t={},t[n]=e,t)})}})}))(p)},b=function(e,t){var n=e.name,r=(e.value,e.hasValue),i=(e.filterName,{int:(0,o.normalizeProps)((0,o.createComponentVNode)(2,s,Object.assign({},e))),float:(0,o.normalizeProps)((0,o.createComponentVNode)(2,p,Object.assign({},e))),string:(0,o.normalizeProps)((0,o.createComponentVNode)(2,m,Object.assign({},e))),color:(0,o.normalizeProps)((0,o.createComponentVNode)(2,h,Object.assign({},e))),icon:(0,o.normalizeProps)((0,o.createComponentVNode)(2,C,Object.assign({},e))),flags:(0,o.normalizeProps)((0,o.createComponentVNode)(2,g,Object.assign({},e))),space:(0,o.normalizeProps)((0,o.createComponentVNode)(2,N,Object.assign({},e))),blendmode:(0,o.normalizeProps)((0,o.createComponentVNode)(2,v,Object.assign({},e))),matrix:(0,o.normalizeProps)((0,o.createComponentVNode)(2,f,Object.assign({},e)))});return(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:n,children:[i[{x:"float",y:"float",icon:"icon",render_source:"string",flags:"flags",size:"float",color:"color",offset:"float",radius:"float",space:"space",falloff:"float",density:"int",threshold:"float",factor:"float",repeat:"int",transform:"matrix",blend_mode:"blendmode"}[n]]||"Not Found (This is an error)"," ",!r&&(0,o.createComponentVNode)(2,a.Box,{inline:!0,color:"average",children:"(Default)"})]})},V=function(e,t){var n=(0,r.useBackend)(t),i=n.act,c=n.data,l=e.name,u=e.filterDataEntry,s=u.type,p=u.priority,m=function(e,t){if(null==e)return{};var n,o,r={},a=Object.keys(e);for(o=0;o<a.length;o++)n=a[o],t.indexOf(n)>=0||(r[n]=e[n]);return r}(u,d),f=c.filter_info,h=Object.keys(f[s].defaults);return(0,o.createComponentVNode)(2,a.Collapsible,{title:l+" ("+s+")",buttons:(0,o.createFragment)([(0,o.createComponentVNode)(2,a.NumberInput,{value:p,stepPixelSize:10,width:"60px",onChange:function(e,t){return i("change_priority",{name:l,new_priority:t})}}),(0,o.createComponentVNode)(2,a.Button.Input,{content:"Rename",placeholder:l,onCommit:function(e,t){return i("rename_filter",{name:l,new_name:t})},width:"90px"}),(0,o.createComponentVNode)(2,a.Button.Confirm,{icon:"minus",onClick:function(){return i("remove_filter",{name:l})}})],4),children:(0,o.createComponentVNode)(2,a.Section,{level:2,children:(0,o.createComponentVNode)(2,a.LabeledList,{children:h.map((function(e){var t=f[s].defaults,n=m[e]||t[e],r=n!==t[e];return(0,o.createComponentVNode)(2,b,{filterName:l,filterType:s,name:e,value:n,hasValue:r},e)}))})})})};t.Filteriffic=function(e,t){var n=(0,r.useBackend)(t),l=n.act,u=n.data,d=u.target_name||"Unknown Object",s=u.target_filter_data||{},p=s!=={},m=u.filter_info,f=(0,r.useLocalState)(t,"massApplyPath",""),h=f[0],C=f[1],g=(0,r.useLocalState)(t,"hidden",!1),N=g[0],v=g[1];return(0,o.createComponentVNode)(2,i.Window,{width:500,height:500,title:"Filteriffic",resizable:!0,children:(0,o.createComponentVNode)(2,i.Window.Content,{scrollable:!0,children:[(0,o.createComponentVNode)(2,a.NoticeBox,{danger:!0,children:"DO NOT MESS WITH EXISTING FILTERS IF YOU DO NOT KNOW THE CONSEQUENCES. YOU HAVE BEEN WARNED."}),(0,o.createComponentVNode)(2,a.Section,{title:N?(0,o.createFragment)([(0,o.createComponentVNode)(2,a.Box,{mr:.5,inline:!0,children:"MASS EDIT:"}),(0,o.createComponentVNode)(2,a.Input,{value:h,width:"100px",onInput:function(e,t){return C(t)}}),(0,o.createComponentVNode)(2,a.Button.Confirm,{content:"Apply",confirmContent:"ARE YOU SURE?",onClick:function(){return l("mass_apply",{path:h})}})],4):(0,o.createComponentVNode)(2,a.Box,{inline:!0,onDblClick:function(){return v(!0)},children:d}),buttons:(0,o.createComponentVNode)(2,a.Dropdown,{icon:"plus",displayText:"Add Filter",nochevron:!0,options:Object.keys(m),onSelected:function(e){return l("add_filter",{name:"default",priority:10,type:e})}}),children:p?(0,c.map)((function(e,t){return(0,o.createComponentVNode)(2,V,{filterDataEntry:e,name:t},t)}))(s):(0,o.createComponentVNode)(2,a.Box,{children:"No filters"})})]})})}},21980:function(e,t,n){"use strict";t.__esModule=!0,t.Flamethrower=void 0;var o=n(96323),r=n(31246),a=n(41161),i=n(26949),c=n(51418),l=n(48175),u=n(2381),d=function(e,t){var n=(0,r.useBackend)(t).act,a=e.lit,c=e.maxTemp,u=e.minTemp,d=e.sprayTemp;return(0,o.createComponentVNode)(2,i.Section,{fill:!0,title:"Pilot Light",children:(0,o.createComponentVNode)(2,i.Stack,{justify:"center",align:"center",children:[(0,o.createComponentVNode)(2,i.Stack.Item,{children:(0,o.createComponentVNode)(2,i.Button,{icon:"fire",color:a?"orange":null,iconColor:a?"yellow":null,onClick:function(){return n("light")},align:"center",width:"5em",fontSize:1.25,children:a?"Lit":"Unlit"})}),(0,o.createComponentVNode)(2,i.Stack.Item,{children:(0,o.createComponentVNode)(2,i.Knob,{animated:!0,size:2,value:d,minValue:u,maxValue:c,format:function(e){return Math.floor(e-l.freezeTemperature)+" C"},onChange:function(e,t){return n("change_temperature",{temperature:t})}})}),(0,o.createComponentVNode)(2,i.Stack.Item,{children:(0,o.createComponentVNode)(2,i.Box,{className:"ChemHeater__TemperatureNumber",nowrap:!0,p:1,fontSize:1.5,color:(0,l.getTemperatureColor)(d),backgroundColor:"black",children:[(0,o.createComponentVNode)(2,i.Box,{fontSize:1,children:"Temperature"}),(0,o.createComponentVNode)(2,i.Icon,{name:(0,l.getTemperatureIcon)(d),pr:.5}),(0,o.createComponentVNode)(2,i.AnimatedNumber,{value:Math.floor(d-l.freezeTemperature)}),"C"]})})]})})},s=function(e,t){var n=(0,r.useBackend)(t).act,a=e.mode,c=e.minVolume,l=e.maxVolume,u=e.chamberVolume;return(0,o.createComponentVNode)(2,i.Section,{fill:!0,title:"Fuel Control",children:(0,o.createComponentVNode)(2,i.Stack,{vertical:!0,children:[(0,o.createComponentVNode)(2,i.Stack.Item,{children:["Fire mode: ",(0,o.createComponentVNode)(2,i.Button,{selected:"auto"===a,onClick:function(){return n("change_mode",{mode:"auto"})},children:"Full Auto"}),(0,o.createComponentVNode)(2,i.Button,{selected:"burst"===a,onClick:function(){return n("change_mode",{mode:"burst"})},children:"Wide Burst"}),(0,o.createComponentVNode)(2,i.Button,{selected:"semi_auto"===a,onClick:function(){return n("change_mode",{mode:"semi_auto"})},children:"Semi Auto"})]}),(0,o.createComponentVNode)(2,i.Stack.Item,{children:["Chamber volume: ",(0,o.createComponentVNode)(2,i.NumberInput,{value:u,minValue:c,maxValue:l,onChange:function(e,t){return n("change_volume",{volume:t})}})]})]})})};t.Flamethrower=function(e,t){var n=(0,r.useBackend)(t),l=n.act,p=n.data,m=p.gasTank,f=p.fuelTank;return(0,o.createComponentVNode)(2,u.Window,{width:580,height:270,theme:"ntos",title:"Flamethrower",children:(0,o.createComponentVNode)(2,u.Window.Content,{children:(0,o.createComponentVNode)(2,i.Stack,{vertical:!0,children:[(0,o.createComponentVNode)(2,i.Stack.Item,{children:(0,o.createComponentVNode)(2,i.Stack,{justify:"center",children:[(0,o.createComponentVNode)(2,i.Stack.Item,{width:"21em",children:(0,o.normalizeProps)((0,o.createComponentVNode)(2,d,Object.assign({},p)))}),(0,o.createComponentVNode)(2,i.Stack.Item,{grow:!0,children:(0,o.normalizeProps)((0,o.createComponentVNode)(2,s,Object.assign({},p)))})]})}),(0,o.createComponentVNode)(2,i.Stack.Item,{children:(0,o.createComponentVNode)(2,i.Stack,{children:[(0,o.createComponentVNode)(2,i.Stack.Item,{width:"21em",children:(0,o.createComponentVNode)(2,a.PortableHoldingTank,{title:"Gas Tank",holding:m,onEjectTank:function(){return l("remove_gas")}})}),(0,o.createComponentVNode)(2,i.Stack.Item,{grow:!0,children:(0,o.createComponentVNode)(2,i.Section,{title:"Fuel Tank",fill:!0,buttons:(0,o.createComponentVNode)(2,i.Button,{icon:"eject",content:"Eject",disabled:!f,onClick:function(){return l("remove_fuel")}}),children:f&&(0,o.createComponentVNode)(2,c.ReagentBar,{container:f,height:"5em"})})})]})})]})})})}},72758:function(e,t,n){"use strict";t.__esModule=!0,t.FlockPanel=void 0;var o=n(96323),r=n(31246),a=n(26949),i=n(2381),c=function(e,t){var n=(0,r.useBackend)(t).act,i=e.partitions;return(0,o.createComponentVNode)(2,a.Stack,{vertical:!0,children:i.map((function(e){return(0,o.createComponentVNode)(2,a.Stack.Item,{children:(0,o.createComponentVNode)(2,a.Stack,{align:"center",height:"100%",children:[(0,o.createComponentVNode)(2,a.Stack.Item,{width:"20%",height:"100%",children:(0,o.createComponentVNode)(2,a.Section,{align:"center",height:"100%",children:e.name})}),(0,o.createComponentVNode)(2,a.Stack.Item,{height:"100%",grow:1,children:(0,o.createComponentVNode)(2,a.Section,{height:"100%",children:e.host&&(0,o.createComponentVNode)(2,a.Stack,{children:[(0,o.createComponentVNode)(2,a.Stack.Item,{children:(0,o.createComponentVNode)(2,a.Icon,{name:"wifi",size:3})}),(0,o.createComponentVNode)(2,a.Stack.Item,{children:(0,o.createComponentVNode)(2,a.Stack,{vertical:!0,align:"center",children:[(0,o.createComponentVNode)(2,a.Stack.Item,{children:e.host}),(0,o.createComponentVNode)(2,a.Stack.Item,{children:[e.health,(0,o.createComponentVNode)(2,a.Icon,{name:"heart"})]})]})})]})})}),(0,o.createComponentVNode)(2,a.Stack.Item,{height:"100%",children:(0,o.createComponentVNode)(2,a.Section,{height:"100%",children:(0,o.createComponentVNode)(2,a.Stack,{children:[e.host&&(0,o.createComponentVNode)(2,a.Stack.Item,{children:(0,o.createComponentVNode)(2,a.Button,{onClick:function(){return n("eject_trace",{origin:e.ref})},children:"Eject"})}),(0,o.createComponentVNode)(2,a.Stack.Item,{children:(0,o.createComponentVNode)(2,a.Button,{onClick:function(){return n("promote_trace",{origin:e.ref})},children:"Promote sentience"})}),(0,o.createComponentVNode)(2,a.Stack.Item,{children:(0,o.createComponentVNode)(2,a.Button,{onClick:function(){return n("delete_trace",{origin:e.ref})},children:"Remove sentience"})}),(0,o.createComponentVNode)(2,a.Stack.Item,{children:(0,o.createComponentVNode)(2,a.Button,{onClick:function(){return n("jump_to",{origin:e.ref})},children:"Jump"})})]})})})]})},e.ref)}))})},l={thinking:"brain",shooting:"bolt",rummaging:"dumpster",wandering:"route",building:"hammer",nesting:"hammer",harvesting:"cogs",controlled:"wifi",replicating:"egg",rallying:"map-marker","opening container":"box-open",butchering:"recycle",repairing:"tools",capturing:"bars",depositing:"border-style",observing:"eye",deconstructing:"trash",hibernating:"stop-circle"},u=function(e,t){var n=(0,r.useBackend)(t).act,i=e.drones,c=e.sortBy;return(0,o.createComponentVNode)(2,a.Stack,{vertical:!0,children:i.sort((function(e,t){return function(e,t,n){return isNaN(e[n])||isNaN(t[n])?(""+e[n]).localeCompare(t[n]):t[n]-e[n]}(e,t,c)})).map((function(e){return(0,o.createComponentVNode)(2,a.Stack.Item,{children:(0,o.createComponentVNode)(2,a.Stack,{children:[(0,o.createComponentVNode)(2,a.Stack.Item,{width:"20%",children:(0,o.createComponentVNode)(2,a.Section,{height:"100%",children:(0,o.createComponentVNode)(2,a.Stack,{vertical:!0,align:"center",children:[(0,o.createComponentVNode)(2,a.Stack.Item,{children:e.name}),(0,o.createComponentVNode)(2,a.Stack.Item,{children:[e.health,(0,o.createComponentVNode)(2,a.Icon,{name:"heart"})," ",e.resources,(0,o.createComponentVNode)(2,a.Icon,{name:"cog"})]})]})})}),(0,o.createComponentVNode)(2,a.Stack.Item,{grow:1,children:(0,o.createComponentVNode)(2,a.Section,{height:"100%",children:(0,o.createComponentVNode)(2,a.Stack,{align:"center",children:[(0,o.createComponentVNode)(2,a.Stack.Item,{width:"50px",children:(0,o.createComponentVNode)(2,a.Box,{align:"center",children:(r=e.task,i=l[r],i?(0,o.createComponentVNode)(2,a.Icon,{size:3,name:i}):"")})}),(0,o.createComponentVNode)(2,a.Stack.Item,{children:[(0,o.createVNode)(1,"b",null,e.area,0)," ",(0,o.createVNode)(1,"br")," ",e.task&&(t=e.task,t.charAt(0).toUpperCase()+t.slice(1))]})]})})}),(0,o.createComponentVNode)(2,a.Stack.Item,{children:(0,o.createComponentVNode)(2,a.Section,{height:"100%",children:(0,o.createComponentVNode)(2,a.Stack,{children:["controlled"===e.task&&(0,o.createComponentVNode)(2,a.Stack.Item,{children:(0,o.createComponentVNode)(2,a.Button,{onClick:function(){return n("eject_trace",{origin:e.controller_ref})},children:"Eject Trace"})}),(0,o.createComponentVNode)(2,a.Stack.Item,{children:(0,o.createComponentVNode)(2,a.Button,{onClick:function(){return n("rally",{origin:e.ref})},children:"Rally"})}),(0,o.createComponentVNode)(2,a.Stack.Item,{children:(0,o.createComponentVNode)(2,a.Button,{onClick:function(){return n("jump_to",{origin:e.ref})},children:"Jump"})})]})})})]})},e.ref);var t,r,i}))})},d=function(e,t){var n=(0,r.useBackend)(t).act,i=e.structures;return(0,o.createComponentVNode)(2,a.Stack,{vertical:!0,children:i.map((function(e){return(0,o.createComponentVNode)(2,a.Stack.Item,{children:(0,o.createComponentVNode)(2,a.Stack,{children:[(0,o.createComponentVNode)(2,a.Stack.Item,{width:"30%",children:(0,o.createComponentVNode)(2,a.Tooltip,{position:"bottom",content:e.desc,children:(0,o.createComponentVNode)(2,a.Section,{position:"relative",children:(0,o.createComponentVNode)(2,a.Stack,{vertical:!0,align:"center",children:[(0,o.createComponentVNode)(2,a.Stack.Item,{children:e.name}),(0,o.createComponentVNode)(2,a.Stack.Item,{children:[e.health," ",(0,o.createComponentVNode)(2,a.Icon,{name:"heart"})]})]})})})}),(0,o.createComponentVNode)(2,a.Stack.Item,{grow:1,children:(0,o.createComponentVNode)(2,a.Section,{height:"100%",children:e.compute>0&&"Compute provided: "+e.compute})}),(0,o.createComponentVNode)(2,a.Stack.Item,{children:(0,o.createComponentVNode)(2,a.Section,{height:"100%",children:(0,o.createComponentVNode)(2,a.Stack,{children:["Construction Tealprint"===e.name&&(0,o.createComponentVNode)(2,a.Stack.Item,{children:(0,o.createComponentVNode)(2,a.Button,{onClick:function(){return n("cancel_tealprint",{origin:e.ref})},children:"Cancel"})}),(0,o.createComponentVNode)(2,a.Stack.Item,{children:(0,o.createComponentVNode)(2,a.Button,{onClick:function(){return n("jump_to",{origin:e.ref})},children:"Jump"})})]})})})]})},e.ref)}))})},s=function(e,t){var n=(0,r.useBackend)(t).act,i=e.enemies;return(0,o.createComponentVNode)(2,a.Stack,{vertical:!0,children:i.map((function(e){return(0,o.createComponentVNode)(2,a.Stack.Item,{children:(0,o.createComponentVNode)(2,a.Stack,{children:[(0,o.createComponentVNode)(2,a.Stack.Item,{width:"30%",children:(0,o.createComponentVNode)(2,a.Section,{height:"100%",children:e.name})}),(0,o.createComponentVNode)(2,a.Stack.Item,{grow:1,children:(0,o.createComponentVNode)(2,a.Section,{height:"100%",children:(0,o.createComponentVNode)(2,a.Stack,{children:(0,o.createComponentVNode)(2,a.Stack.Item,{grow:1,children:(0,o.createVNode)(1,"b",null,e.area,0)})})})}),(0,o.createComponentVNode)(2,a.Stack.Item,{children:(0,o.createComponentVNode)(2,a.Section,{height:"100%",children:(0,o.createComponentVNode)(2,a.Stack,{children:[(0,o.createComponentVNode)(2,a.Stack.Item,{children:(0,o.createComponentVNode)(2,a.Button,{icon:"times",onClick:function(){return n("remove_enemy",{origin:e.ref})},children:"Remove"})}),(0,o.createComponentVNode)(2,a.Stack.Item,{children:(0,o.createComponentVNode)(2,a.Button,{onClick:function(){return n("jump_to",{origin:e.ref})},children:"Jump"})})]})})})]})},e.ref)}))})},p=function(e,t){var n=e.stats;return(0,o.createComponentVNode)(2,a.Stack,{vertical:!0,children:n.map((function(e){return(0,o.createComponentVNode)(2,a.Stack.Item,{children:(0,o.createComponentVNode)(2,a.Stack,{children:(0,o.createComponentVNode)(2,a.Stack.Item,{width:"100%",children:(0,o.createComponentVNode)(2,a.Section,{height:"100%",children:(0,o.createComponentVNode)(2,a.Stack,{vertical:!0,align:"left",children:(0,o.createComponentVNode)(2,a.Stack.Item,{children:[e.name," ",e.value]})})})})})},e.name)}))})};t.FlockPanel=function(e,t){var n=(0,r.useBackend)(t),l=n.data,m=n.act,f=(0,r.useLocalState)(t,"sortBy","resources"),h=f[0],C=f[1],g=l.vitals,N=l.partitions,v=l.drones,b=l.structures,V=l.enemies,y=l.stats,x=l.category_lengths,k=l.category;return(0,o.createComponentVNode)(2,i.Window,{theme:"flock",title:"Flockmind "+g.name,width:600,height:450,children:(0,o.createComponentVNode)(2,i.Window.Content,{scrollable:!0,children:[(0,o.createComponentVNode)(2,a.Tabs,{children:[(0,o.createComponentVNode)(2,a.Tabs.Tab,{selected:"drones"===k,onClick:function(){m("change_tab",{tab:"drones"})},children:["Drones ","("+x.drones+")"]}),(0,o.createComponentVNode)(2,a.Tabs.Tab,{selected:"traces"===k,onClick:function(){m("change_tab",{tab:"traces"})},children:["Partitions ","("+x.traces+")"]}),(0,o.createComponentVNode)(2,a.Tabs.Tab,{selected:"structures"===k,onClick:function(){m("change_tab",{tab:"structures"})},children:["Structures ","("+x.structures+")"]}),(0,o.createComponentVNode)(2,a.Tabs.Tab,{selected:"enemies"===k,onClick:function(){m("change_tab",{tab:"enemies"})},children:["Enemies ","("+x.enemies+")"]}),(0,o.createComponentVNode)(2,a.Tabs.Tab,{selected:"stats"===k,onClick:function(){m("change_tab",{tab:"stats"})},children:"Stats"})]}),"drones"===k&&(0,o.createComponentVNode)(2,a.Box,{children:[(0,o.createComponentVNode)(2,a.Dropdown,{options:["name","health","resources","area"],selected:"resources",onSelected:function(e){return C(e)}}),(0,o.createComponentVNode)(2,u,{drones:v,sortBy:h})]}),"traces"===k&&(0,o.createComponentVNode)(2,c,{partitions:N}),"structures"===k&&(0,o.createComponentVNode)(2,d,{structures:b}),"enemies"===k&&(0,o.createComponentVNode)(2,s,{enemies:V}),"stats"===k&&(0,o.createComponentVNode)(2,p,{stats:y})]})})}},57576:function(e,t,n){"use strict";t.__esModule=!0,t.FlockStructures=void 0;var o=n(96323),r=n(31246),a=n(26949),i=n(2381);t.FlockStructures=function(e,t){var n=(0,r.useBackend)(t),c=(n.act,n.data.structures);return(0,o.createComponentVNode)(2,i.Window,{title:"Flock structures",width:500,height:600,children:(0,o.createComponentVNode)(2,i.Window.Content,{scrollable:!0,children:(0,o.createComponentVNode)(2,a.Stack,{vertical:!0,children:c.map((function(e){var t=e.name,n=e.icon,r=e.description,i=e.cost;return(0,o.createComponentVNode)(2,a.Stack.Item,{children:(0,o.createComponentVNode)(2,a.Stack,{height:"100%",children:[(0,o.createComponentVNode)(2,a.Stack.Item,{width:9,children:(0,o.createComponentVNode)(2,a.Section,{align:"center",children:(0,o.createComponentVNode)(2,a.Stack,{vertical:!0,children:[(0,o.createComponentVNode)(2,a.Stack.Item,{children:t}),(0,o.createComponentVNode)(2,a.Stack.Item,{children:(0,o.createComponentVNode)(2,a.Image,{pixelated:!0,height:"64px",width:"64px",src:"data:image/png;base64,"+n})})]})})}),(0,o.createComponentVNode)(2,a.Stack.Item,{width:29,children:(0,o.createComponentVNode)(2,a.Section,{height:"100%",children:(0,o.createComponentVNode)(2,a.Stack,{vertical:!0,children:[(0,o.createComponentVNode)(2,a.Stack.Item,{children:r}),(0,o.createComponentVNode)(2,a.Stack.Item,{children:!!i&&"Cost: "+i})]})})})]})},t)}))})})})}},11653:function(e,t,n){"use strict";t.__esModule=!0,t.Freezer=void 0;var o=n(96323),r=n(31246),a=n(48175),i=n(26949),c=n(2381),l=n(1033);t.Freezer=function(e,t){var n=(0,r.useBackend)(t),u=n.act,d=n.data,s=d.target_temperature,p=d.active,m=d.air_temperature,f=d.air_pressure;return(0,o.createComponentVNode)(2,c.Window,{title:"Freezer",width:320,height:215,children:(0,o.createComponentVNode)(2,c.Window.Content,{children:[(0,o.createComponentVNode)(2,i.Section,{title:"Temperature Control",children:(0,o.createComponentVNode)(2,i.Stack,{align:"center",children:[(0,o.createComponentVNode)(2,i.Stack.Item,{children:(0,o.createComponentVNode)(2,i.Knob,{animated:!0,size:2,value:s,minValue:73.15,maxValue:293.15,format:function(e){return e+" K"},onDrag:function(e,t){return u("set_target_temperature",{value:t})}})}),(0,o.createComponentVNode)(2,i.Stack.Item,{grow:!0,basis:0,overflow:"hidden",children:(0,o.createComponentVNode)(2,i.Box,{className:"ChemHeater__TemperatureNumber",nowrap:!0,p:1,fontSize:1.5,color:(0,a.getTemperatureColor)(s),backgroundColor:"black",children:[(0,o.createComponentVNode)(2,i.Box,{fontSize:1,children:"Target"}),(0,o.createComponentVNode)(2,i.Icon,{name:(0,a.getTemperatureIcon)(s),pr:.5}),(0,o.createComponentVNode)(2,i.AnimatedNumber,{value:s})," K"]})}),(0,o.createComponentVNode)(2,i.Stack.Item,{basis:9.6,align:"center",children:(0,o.createComponentVNode)(2,i.Button,{icon:"power-off",color:0===p?"red":"green",fluid:!0,height:"100%",fontSize:1.15,textAlign:"center",onClick:function(){return u("active_toggle")},children:0===p?"Deactivated":"Activated"})})]})}),(0,o.createComponentVNode)(2,i.Section,{children:(0,o.createComponentVNode)(2,i.Stack,{align:"center",children:[(0,o.createComponentVNode)(2,i.Stack.Item,{children:(0,o.createComponentVNode)(2,i.Box,{className:"ChemHeater__TemperatureNumber",nowrap:!0,p:1,width:"50%",fontSize:1.3,color:(0,a.getTemperatureColor)(m),children:[(0,o.createComponentVNode)(2,i.Box,{fontSize:1,children:"Current Temperature"}),(0,o.createComponentVNode)(2,i.Icon,{name:(0,a.getTemperatureIcon)(m),pr:.5}),(0,o.createComponentVNode)(2,i.AnimatedNumber,{value:m})," K"]})}),(0,o.createComponentVNode)(2,i.Stack.Item,{children:(0,o.createComponentVNode)(2,i.Box,{nowrap:!0,p:1,width:"50%",fontSize:1.3,children:[(0,o.createComponentVNode)(2,i.Box,{fontSize:1,children:"Current Pressure"}),(0,o.createComponentVNode)(2,i.AnimatedNumber,{value:(0,l.formatPressure)(f)})]})})]})})]})})}},6482:function(e,t,n){"use strict";t.__esModule=!0,t.Gameclock=void 0;var o=n(96323),r=n(31246),a=n(26949),i=n(2381),c=n(1033);t.Gameclock=function(e,t){var n=(0,r.useBackend)(t).data.clockStatic.name,c=(0,r.useLocalState)(t,"configModalOpen",!1)[0],d=(0,r.useLocalState)(t,"swap",!1)[0],f=(0,r.useLocalState)(t,"helpModalOpen",!1),h=f[0],C=f[1];return(0,o.createComponentVNode)(2,i.Window,{title:n,width:220,height:380,children:(0,o.createComponentVNode)(2,i.Window.Content,{className:"gameclock__window",fitted:!0,children:[c&&(0,o.createComponentVNode)(2,l),h&&(0,o.createComponentVNode)(2,u),(0,o.createComponentVNode)(2,a.Box,{className:"gameclock__help",children:(0,o.createComponentVNode)(2,a.Button,{className:"gameclock__helpbutton",tooltip:h?"Close":"Help",icon:h?"xmark":"question",color:h&&"orange",onClick:!c&&function(){C(!h)}})}),(0,o.createComponentVNode)(2,s,{team:d?"white":"black"}),(0,o.createComponentVNode)(2,p,{team:d?"white":"black"}),(0,o.createComponentVNode)(2,m),(0,o.createComponentVNode)(2,p,{team:d?"black":"white"}),(0,o.createComponentVNode)(2,s,{team:d?"black":"white"})]})})};var l=function(e,t){var n=(0,r.useBackend)(t),i=n.data,c=n.act,l=i.clockStatic.defaultTime,u=(0,r.useLocalState)(t,"configModalOpen",!1)[1],s=(0,r.useLocalState)(t,"whiteTimeBuffer",0),p=s[0],m=s[1],f=(0,r.useLocalState)(t,"blackTimeBuffer",0),h=f[0],C=f[1];return(0,o.createComponentVNode)(2,a.Dimmer,{className:"gameclock__configmodal",children:[(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Time (White)",children:(0,o.createComponentVNode)(2,d,{team:"white"})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Time (Black)",children:(0,o.createComponentVNode)(2,d,{team:"black"})})]}),(0,o.createComponentVNode)(2,a.Box,{className:"gameclock__configmodalbuttoncontainer",children:[(0,o.createComponentVNode)(2,a.Button,{content:"Reset to default",onClick:function(){m(l),C(l)}}),(0,o.createComponentVNode)(2,a.Button,{content:"Apply",onClick:function(){u(!1),c("set_time",{whiteTime:10*p,blackTime:10*h})}}),(0,o.createComponentVNode)(2,a.Button,{content:"Cancel",onClick:function(){return u(!1)}})]})]})},u=function(){return(0,o.createComponentVNode)(2,a.Dimmer,{children:(0,o.createComponentVNode)(2,a.Section,{children:[(0,o.createVNode)(1,"p",null,(0,o.createVNode)(1,"strong",null,"Help",16),2),(0,o.createVNode)(1,"p",null,"These clocks are used in two-player games where the players move in turns.",16),(0,o.createVNode)(1,"p",null,"Click on the clock face corresponding to your color to end your turn.",16),(0,o.createVNode)(1,"p",null,"The time value (in seconds) for each clock can be set using the Clocks Setup button.",16),(0,o.createVNode)(1,"p",null,"Before starting the clock, ensure that the Current Turn is set to the correct side.",16),(0,o.createVNode)(1,"p",null,"The positions of the White and Black clocks can be swapped on your client using the rotate view button.",16)]})})},d=function(e,t){var n=(0,r.useBackend)(t).data.clockStatic,i=n.minTime,l=n.maxTime,u=e.team,d=(0,r.useLocalState)(t,"whiteTimeBuffer",0),s=d[0],p=d[1],m=(0,r.useLocalState)(t,"blackTimeBuffer",0),f=m[0],h=m[1];return(0,o.createComponentVNode)(2,a.NumberInput,{onDrag:function(e,t){"white"===u?p(t):h(t)},format:function(e){return(0,c.formatTime)(10*e)},value:"white"===u?s:f,minValue:i,maxValue:l,step:15,stepPixelSize:2})},s=function(e,t){var n=e.team;return(0,o.createComponentVNode)(2,a.Stack,{direction:"column",children:(0,o.createComponentVNode)(2,a.Tooltip,{content:"white"===n?"White":"Black",children:(0,o.createComponentVNode)(2,a.Icon,{className:"gameclock__teamicon",name:"circle"+("white"===n?"":"-o")})})})},p=function(e,t){var n=(0,r.useBackend)(t),i=n.data,l=n.act,u=e.team;return(0,o.createComponentVNode)(2,a.Stack,{direction:"column",fill:!0,className:"gameclock__sidepart",children:(0,o.createComponentVNode)(2,a.Button,{color:"orange",disabled:!i.timing||(i.turn?"black"===u:"white"===u),className:"gameclock__timebutton",onClick:function(){return l("end_turn")},children:(0,o.createComponentVNode)(2,a.Stack,{className:"gameclock__timeflex",children:(0,o.createComponentVNode)(2,a.AnimatedNumber,{value:"white"===u?i.whiteTime:i.blackTime,format:function(e){return(0,c.formatTime)(10*e)}})})})})},m=function(e,t){var n=(0,r.useBackend)(t),i=n.data,c=n.act,l=(0,r.useLocalState)(t,"configModalOpen",!1)[1],u=(0,r.useLocalState)(t,"whiteTimeBuffer",0)[1],d=(0,r.useLocalState)(t,"blackTimeBuffer",0)[1],s=(0,r.useLocalState)(t,"swap",!1),p=s[0],m=s[1];return(0,o.createComponentVNode)(2,a.Stack,{direction:"row",className:"gameclock__mid",children:[(0,o.createComponentVNode)(2,a.Box,{children:(0,o.createComponentVNode)(2,a.Button,{className:"gameclock__utilbutton",disabled:i.timing,tooltip:"Clocks Setup",tooltipPosition:"top",icon:"cog",onClick:function(){l(!0),u(i.whiteTime),d(i.blackTime)}})}),(0,o.createComponentVNode)(2,a.Box,{children:(0,o.createComponentVNode)(2,a.Button,{className:"gameclock__utilbutton",disabled:i.timing,tooltip:"Current Turn: "+(i.turn?"White":"Black"),tooltipPosition:"top",icon:"flag",color:i.turn?"white":"black",onClick:function(){return c("set_turn")}})}),(0,o.createComponentVNode)(2,a.Box,{children:(0,o.createComponentVNode)(2,a.Button,{className:"gameclock__utilbutton",disabled:0===i.whiteTime||0===i.blackTime,tooltip:i.timing?"Pause":"Unpause",tooltipPosition:"top",icon:i.timing?"pause":"play",color:i.timing?"orange":"",onClick:function(){return c("toggle_timing")}})}),(0,o.createComponentVNode)(2,a.Box,{children:(0,o.createComponentVNode)(2,a.Button,{className:"gameclock__utilbutton",tooltip:"Rotate view",tooltipPosition:"top",icon:"rotate",onClick:function(){return m(!p)}})})]})}},69658:function(){},16484:function(e,t,n){"use strict";t.__esModule=!0,t.Detonator=void 0;var o=n(96323),r=n(26949),a=n(41834);t.Detonator=function(e){var t=e.detonator,n=e.detonatorAttachments,a=e.onToggleAnchor,l=e.onToggleSafety,u=e.onWireInteract,d=e.onPrimeDetonator,s=e.onTriggerActivate,p=e.onSetTimer;return(0,o.createComponentVNode)(2,r.Section,{title:"Detonator",children:[(0,o.createComponentVNode)(2,i,{detonator:t,onWireInteract:u,onSetTimer:p}),(0,o.createComponentVNode)(2,r.Divider),(0,o.createComponentVNode)(2,c,{detonator:t,detonatorAttachments:n,onToggleAnchor:a,onToggleSafety:l,onPrimeDetonator:d,onTriggerActivate:s})]})};var i=function(e){var t=e.detonator,n=(t=void 0===t?{}:t).wireNames,i=t.wireStatus,c=t.time,l=t.isPrimed,u=e.onWireInteract,d=e.onSetTimer;return(0,o.createComponentVNode)(2,r.Flex,{children:[(0,o.createComponentVNode)(2,r.Flex.Item,{children:(0,o.createComponentVNode)(2,r.LabeledList,{children:n.map((function(e,t){return(0,o.createComponentVNode)(2,r.LabeledList.Item,{label:e,children:(0,o.createComponentVNode)(2,r.Box,{height:1.7,children:i&&i[t]?(0,o.createFragment)([(0,o.createComponentVNode)(2,r.Button,{icon:"cut",content:"Cut",onClick:function(){return u("cut",t)}}),(0,o.createComponentVNode)(2,r.Button,{icon:"bolt",content:"Pulse",onClick:function(){return u("pulse",t)}})],4):(0,o.createComponentVNode)(2,r.Box,{color:"average",minHeight:1.4,children:"Cut"})})},e+t)}))})}),(0,o.createComponentVNode)(2,r.Flex.Item,{mr:2,mt:2,children:(0,o.createComponentVNode)(2,r.Flex,{direction:"column",align:"center",children:[(0,o.createComponentVNode)(2,r.Flex.Item,{children:(0,o.createComponentVNode)(2,a.DetonatorTimer,{time:c,isPrimed:l})}),(0,o.createComponentVNode)(2,r.Flex.Item,{children:[(0,o.createComponentVNode)(2,r.Button,{mt:1,disabled:l,icon:"fast-backward",onClick:function(){return d(c-300)}}),(0,o.createComponentVNode)(2,r.Button,{mt:1,disabled:l,icon:"backward",onClick:function(){return d(c-10)}}),(0,o.createComponentVNode)(2,r.Button,{mt:1,disabled:l,icon:"forward",onClick:function(){return d(c+10)}}),(0,o.createComponentVNode)(2,r.Button,{mt:1,disabled:l,icon:"fast-forward",onClick:function(){return d(c+300)}})]})]})})]})},c=function(e){var t=e.detonator,n=(t=void 0===t?{}:t).isAnchored,a=t.trigger,i=t.safetyIsOn,c=t.isPrimed,l=e.detonatorAttachments,u=e.onToggleAnchor,d=e.onToggleSafety,s=e.onPrimeDetonator,p=e.onTriggerActivate;return(0,o.createComponentVNode)(2,r.LabeledList,{children:[(0,o.createComponentVNode)(2,r.LabeledList.Item,{className:"gas-canister-detonator-utility__list-item",label:"Anchor Status",children:n?"Anchored. There are no controls for undoing this.":(0,o.createComponentVNode)(2,r.Button,{icon:"anchor",content:"Anchor",onClick:u})}),(0,o.createComponentVNode)(2,r.LabeledList.Item,{className:"gas-canister-detonator-utility__list-item",label:"Trigger",children:a?(0,o.createComponentVNode)(2,r.Button,{onClick:p,children:a}):"There is no trigger attached."}),(0,o.createComponentVNode)(2,r.LabeledList.Item,{className:"gas-canister-detonator-utility__list-item",label:"Safety",children:i?(0,o.createComponentVNode)(2,r.Button,{color:"average",icon:"power-off",content:"Turn Off",onClick:d}):(0,o.createComponentVNode)(2,r.Box,{color:"average",children:"Off"})}),(0,o.createComponentVNode)(2,r.LabeledList.Item,{className:"gas-canister-detonator-utility__list-item",label:"Arming",children:i?"The safety is on, therefore, you cannot prime the bomb.":c?(0,o.createComponentVNode)(2,r.Box,{bold:!0,color:"red",children:"PRIMED"}):(0,o.createComponentVNode)(2,r.Button,{color:"danger",icon:"bomb",content:"Prime",onClick:s})}),(0,o.createComponentVNode)(2,r.LabeledList.Item,{label:"Attachments",className:"gas-canister-detonator-utility__list-item",children:l&&l.length>0?l.map((function(e,t){return(0,o.createComponentVNode)(2,r.Box,{className:"gas-canister-detonator-utility__attachment-item",children:l[t]},e+t)})):"There are no additional attachments to the detonator."})]})}},41834:function(e,t,n){"use strict";t.__esModule=!0,t.DetonatorTimer=void 0;var o=n(96323),r=n(26949),a=n(1033);t.DetonatorTimer=function(e){var t=e.time,n=e.isPrimed,i=e.warningThreshold,c=void 0===i?300:i,l=e.dangerThreshold,u=void 0===l?100:l,d=e.explosionMessage,s=void 0===d?"BO:OM":d,p="green";return t<=u?p="red":t<=c&&(p="orange"),(0,o.createComponentVNode)(2,r.Box,{p:1,textAlign:"center",backgroundColor:"black",color:p,maxWidth:"90px",width:"90px",fontSize:"20px",children:(0,o.createComponentVNode)(2,r.TimeDisplay,{value:t,timing:n,format:function(e){return(0,a.formatTime)(e,s)}})})}},52709:function(e,t,n){"use strict";t.__esModule=!0,t.GasCanister=void 0;var o=n(96323),r=n(31246),a=n(26949),i=n(2381),c=n(41161),l=n(75015),u=n(69412),d=n(16484);function s(e,t){return s=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e},s(e,t)}t.GasCanister=function(e,t){var n=(0,r.useBackend)(t),u=n.act,s=n.data,m=s.connected,f=s.holding,h=s.hasValve,C=s.valveIsOpen,g=s.pressure,N=s.maxPressure,v=s.releasePressure,b=s.minRelease,V=s.maxRelease,y=s.detonator,x=s.detonatorAttachments,k=s.hasPaper,S=!!y;return(0,o.createComponentVNode)(2,i.Window,{width:S?k?880:470:305,height:S?685:340,children:(0,o.createComponentVNode)(2,i.Window.Content,{children:(0,o.createComponentVNode)(2,a.Flex,{children:[(0,o.createComponentVNode)(2,a.Flex.Item,{width:"480px",children:[(0,o.createComponentVNode)(2,c.PortableBasicInfo,{connected:m,pressure:g,maxPressure:N,children:[(0,o.createComponentVNode)(2,a.Divider),h?(0,o.createComponentVNode)(2,l.ReleaseValve,{valveIsOpen:C,releasePressure:v,minRelease:b,maxRelease:V,onToggleValve:function(){u("toggle-valve")},onSetPressure:function(e){u("set-pressure",{releasePressure:e})}}):(0,o.createComponentVNode)(2,a.Box,{color:"average",children:"The release valve is missing."})]}),y?(0,o.createComponentVNode)(2,d.Detonator,{detonator:y,detonatorAttachments:x,onToggleAnchor:function(){u("anchor")},onToggleSafety:function(){u("safety")},onWireInteract:function(e,t){u("wire-interact",{index:t,toolAction:e})},onPrimeDetonator:function(){u("prime")},onTriggerActivate:function(){u("trigger")},onSetTimer:function(e){u("timer",{newTime:e})}}):(0,o.createComponentVNode)(2,c.PortableHoldingTank,{holding:f,onEjectTank:function(){u("eject-tank")}})]}),!!k&&(0,o.createComponentVNode)(2,a.Flex.Item,{width:"410px",children:(0,o.createComponentVNode)(2,p)})]})})})};var p=function(e){var t,n;function i(t,n){var o;return(o=e.call(this,t)||this).el=document.createElement("div"),o}return n=e,(t=i).prototype=Object.create(n.prototype),t.prototype.constructor=t,s(t,n),i.prototype.render=function(){var e=(0,r.useBackend)(this.context).data.paperData,t=e.text,n=e.stamps;return(0,o.createComponentVNode)(2,a.Section,{scrollable:!0,width:"400px",height:"518px",backgroundColor:"white",style:{"overflow-wrap":"break-word"},children:(0,o.createComponentVNode)(2,u.PaperSheetView,{value:t||"",stamps:n,readOnly:!0})})},i}(o.Component)},5394:function(e,t,n){"use strict";t.__esModule=!0,t.GasTankInfo=t.GasTank=void 0;var o=n(96323),r=n(31246),a=n(26949),i=n(2381),c=n(1033),l=n(75015);t.GasTank=function(e,t){var n=(0,r.useBackend)(t),c=n.act,d=n.data,s=d.pressure,p=d.maxPressure,m=d.valveIsOpen,f=d.releasePressure,h=d.maxRelease;return(0,o.createComponentVNode)(2,i.Window,{width:400,height:220,children:(0,o.createComponentVNode)(2,i.Window.Content,{children:[(0,o.createComponentVNode)(2,a.Section,{title:"Status",children:(0,o.createComponentVNode)(2,u,{pressure:s,maxPressure:p})}),(0,o.createComponentVNode)(2,a.Section,{children:(0,o.createComponentVNode)(2,l.ReleaseValve,{valveIsOpen:m,releasePressure:f,maxRelease:h,onToggleValve:function(){c("toggle-valve")},onSetPressure:function(e){c("set-pressure",{releasePressure:e})}})})]})})};var u=function(e){var t=e.pressure,n=e.maxPressure,r=e.name;return(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Pressure",children:(0,o.createComponentVNode)(2,a.RoundGauge,{size:1.75,value:t,minValue:0,maxValue:n,alertAfter:.7*n,ranges:{good:[0,.7*n],average:[.7*n,.85*n],bad:[.85*n,n]},format:c.formatPressure})}),r?(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Label",children:r}):null]})};t.GasTankInfo=u},92526:function(e,t,n){"use strict";t.__esModule=!0,t.GeneTek=void 0;var o=n(96323),r=n(31246),a=n(26949),i=n(2381),c=n(33012),l=function(e){return e>0?(e/10).toFixed(0)+"s":"Ready"};t.GeneTek=function(e,t){var n=(0,r.useBackend)(t),u=n.data,d=n.act,s=(0,r.useSharedState)(t,"menu","research"),p=s[0],m=s[1],f=(0,r.useSharedState)(t,"buymats",null),h=f[0],C=f[1],g=(0,r.useSharedState)(t,"iscombining",!1)[0],N=u.materialCur,v=u.materialMax,b=u.currentResearch,V=u.equipmentCooldown,y=u.subject,x=u.costPerMaterial,k=u.budget,S=u.record,I=u.scannerAlert,w=u.scannerError,_=u.allowed,D=y||{},M=D.name,B=D.stat,A=D.health,T=D.stability,L=Math.min(v-N,Math.floor(k/x));return(0,o.createComponentVNode)(2,i.Window,{theme:_?"genetek":"genetek-disabled",width:730,height:415,children:(0,o.createComponentVNode)(2,a.Flex,{height:"100%",children:[(0,o.createComponentVNode)(2,a.Flex.Item,{width:"245px",height:"100%",style:{padding:"5px 5px 5px 5px"},children:(0,o.createComponentVNode)(2,a.Flex,{direction:"column",height:"100%",children:[!_&&(0,o.createFragment)([(0,o.createVNode)(1,"div",null,"Insufficient access to interact.",16,{style:{color:"#ff3333","text-align":"center"}}),(0,o.createComponentVNode)(2,a.Divider)],4),(0,o.createComponentVNode)(2,a.Flex,{children:[(0,o.createComponentVNode)(2,a.ProgressBar,{value:N,maxValue:v,mb:1,children:[(0,o.createComponentVNode)(2,a.Box,{position:"absolute",bold:!0,children:"Materials"}),N," / ",v]}),(0,o.createComponentVNode)(2,a.Flex.Item,{grow:0,shrink:0,ml:1,children:(0,o.createComponentVNode)(2,a.Button,{circular:!0,compact:!0,icon:"dollar-sign",disabled:L<=0,onClick:function(){return C(1)}})})]}),y&&(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Occupant",children:M}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Health",children:(0,o.createComponentVNode)(2,a.ProgressBar,{ranges:{bad:[-Infinity,.15],average:[.15,.75],good:[.75,Infinity]},value:A,children:B<2?A<=0?(0,o.createComponentVNode)(2,a.Box,{color:"bad",children:[(0,o.createComponentVNode)(2,a.Icon,{name:"exclamation-triangle"})," Critical"]}):(100*A).toFixed(0)+"%":(0,o.createComponentVNode)(2,a.Box,{children:[(0,o.createComponentVNode)(2,a.Icon,{name:"skull"})," Deceased"]})})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Stability",children:(0,o.createComponentVNode)(2,a.ProgressBar,{ranges:{bad:[-Infinity,15],average:[15,75],good:[75,Infinity]},value:T,maxValue:100})})]}),(0,o.createComponentVNode)(2,a.Divider),(0,o.createComponentVNode)(2,a.Flex.Item,{grow:1,style:{overflow:"hidden"},children:b.map((function(e){return(0,o.createComponentVNode)(2,a.ProgressBar,{value:e.total-e.current,maxValue:e.total,mb:1,children:[(0,o.createComponentVNode)(2,a.Box,{position:"absolute",children:e.name}),(0,o.createComponentVNode)(2,a.TimeDisplay,{timing:!0,value:e.current,format:l})]},e.ref)}))}),!!I&&(0,o.createComponentVNode)(2,a.NoticeBox,{info:!w,danger:!!w,children:I}),(0,o.createComponentVNode)(2,a.Divider),(0,o.createComponentVNode)(2,a.LabeledList,{children:V.map((function(e){return(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:e.label,children:e.cooldown<0?"Ready":(0,o.createComponentVNode)(2,a.TimeDisplay,{timing:!0,value:e.cooldown,format:l})},e.label)}))})]})}),(0,o.createComponentVNode)(2,i.Window.Content,{scrollable:!0,children:(0,o.createComponentVNode)(2,a.Flex.Item,{children:(0,o.createComponentVNode)(2,a.Box,{ml:"250px",children:[(0,o.createComponentVNode)(2,a.Tabs,{children:[(0,o.createComponentVNode)(2,a.Tabs.Tab,{icon:"flask",selected:"research"===p,onClick:function(){return m("research")},children:"Research"}),(0,o.createComponentVNode)(2,a.Tabs.Tab,{icon:"radiation",selected:"mutations"===p,onClick:function(){return m("mutations")},children:"Mutations"}),(0,o.createComponentVNode)(2,a.Tabs.Tab,{icon:"server",selected:"storage"===p||!S&&"record"===p,onClick:function(){return m("storage")},children:"Storage"}),!!S&&(0,o.createComponentVNode)(2,a.Tabs.Tab,{icon:"save",selected:"record"===p,onClick:function(){return m("record")},rightSlot:"record"===p&&(0,o.createComponentVNode)(2,a.Button,{circular:!0,compact:!0,color:"transparent",icon:"times",onClick:function(){return d("clearrecord")}}),children:"Record"}),y&&(0,o.createComponentVNode)(2,a.Tabs.Tab,{icon:"dna",selected:"scanner"===p,onClick:function(){return m("scanner")},children:"Scanner"})]}),null!==h&&(0,o.createComponentVNode)(2,c.BuyMaterialsModal,{maxAmount:L}),!!g&&(0,o.createComponentVNode)(2,c.CombineGenesModal),"research"===p&&(0,o.createComponentVNode)(2,c.ResearchTab,{maxBuyMats:L,setBuyMats:C}),"mutations"===p&&(0,o.createComponentVNode)(2,c.MutationsTab),"storage"===p&&(0,o.createComponentVNode)(2,c.StorageTab),"record"===p&&(S?(0,o.createComponentVNode)(2,c.RecordTab):(0,o.createComponentVNode)(2,c.StorageTab)),"scanner"===p&&(0,o.createComponentVNode)(2,c.ScannerTab)]})})})]})})}},92195:function(e,t,n){"use strict";t.__esModule=!0,t.AppearanceEditor=void 0;var o=n(96323),r=n(31246),a=n(26949);t.AppearanceEditor=function(e,t){var n=(0,r.useBackend)(t).act,c=e.preview,l=e.hairStyles,u=e.skin,d=e.eyes,s=e.color1,p=e.color2,m=e.color3,f=e.style1,h=e.style2,C=e.style3,g=e.fixColors,N=e.hasEyes,v=e.hasSkin,b=e.hasHair,V=e.channels;return(0,o.createComponentVNode)(2,a.Section,{title:"Appearance Editor",buttons:(0,o.createFragment)([(0,o.createComponentVNode)(2,a.Button,{onClick:function(){return n("editappearance",{apply:!0})},icon:"user",color:"good",children:"Apply Changes"}),(0,o.createComponentVNode)(2,a.Button,{onClick:function(){return n("editappearance",{cancel:!0})},icon:"times",color:"bad"})],4),children:(0,o.createComponentVNode)(2,a.Flex,{children:[(0,o.createComponentVNode)(2,a.Flex.Item,{shrink:"1",children:(0,o.createComponentVNode)(2,a.LabeledList,{children:[!!v&&(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Skin Tone",children:(0,o.createComponentVNode)(2,i,{color:u,onChange:function(e){return n("editappearance",{skin:e})}})}),!!N&&(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Eye Color",children:(0,o.createComponentVNode)(2,i,{color:d,onChange:function(e){return n("editappearance",{eyes:e})}})}),!(!v&&!N||!V[0])&&(0,o.createComponentVNode)(2,a.LabeledList.Divider),!!V[0]&&!!b&&(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:V[0],children:(0,o.createComponentVNode)(2,a.Dropdown,{width:20,selected:f,onSelected:function(e){return n("editappearance",{style1:e})},options:l})}),!!V[0]&&(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:V[0].replace(/ Detail$/,"")+" Color",children:(0,o.createComponentVNode)(2,i,{color:s,onChange:function(e){return n("editappearance",{color1:e})},fix:g})}),!!V[1]&&(0,o.createComponentVNode)(2,a.LabeledList.Divider),!!V[1]&&!!b&&(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:V[1],children:(0,o.createComponentVNode)(2,a.Dropdown,{width:20,selected:h,onSelected:function(e){return n("editappearance",{style2:e})},options:l})}),!!V[1]&&(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:V[1].replace(/ Detail$/,"")+" Color",children:(0,o.createComponentVNode)(2,i,{color:p,onChange:function(e){return n("editappearance",{color2:e})},fix:g})}),!!V[2]&&(0,o.createComponentVNode)(2,a.LabeledList.Divider),!!V[2]&&!!b&&(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:V[2],children:(0,o.createComponentVNode)(2,a.Dropdown,{width:20,selected:C,onSelected:function(e){return n("editappearance",{style3:e})},options:l})}),!!V[2]&&(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:V[2].replace(/ Detail$/,"")+" Color",children:(0,o.createComponentVNode)(2,i,{color:m,onChange:function(e){return n("editappearance",{color3:e})},fix:g})})]})}),(0,o.createComponentVNode)(2,a.Flex.Item,{basis:"80px",shrink:"0",children:(0,o.createComponentVNode)(2,a.ByondUi,{params:{id:c,type:"map"},style:{width:"80px",height:"160px"}})})]})})};var i=function(e,t){var n=e.color,r=e.onChange,i=e.fix,c=parseInt(n.substr(1,2),16),l=parseInt(n.substr(3,2),16),u=parseInt(n.substr(5,2),16),d=function(e,t,n){r&&r("#"+e.toString(16).padStart(2,"0")+t.toString(16).padStart(2,"0")+n.toString(16).padStart(2,"0"))};return(0,o.createComponentVNode)(2,a.Box,{children:[(0,o.createComponentVNode)(2,a.ColorBox,{color:n}),(0,o.createComponentVNode)(2,a.Knob,{inline:!0,ml:1,minValue:i?50:0,maxValue:i?190:255,value:c,color:"red",onChange:function(e,t){return d(Math.round(t),l,u)}}),(0,o.createComponentVNode)(2,a.Knob,{inline:!0,ml:1,minValue:i?50:0,maxValue:i?190:255,value:l,color:"green",onChange:function(e,t){return d(c,Math.round(t),u)}}),(0,o.createComponentVNode)(2,a.Knob,{inline:!0,ml:1,minValue:i?50:0,maxValue:i?190:255,value:u,color:"blue",onChange:function(e,t){return d(c,l,Math.round(t))}})]})}},11265:function(e,t,n){"use strict";t.__esModule=!0,t.GeneList=t.Description=t.BioEffect=t.onCooldown=t.haveDevice=t.ResearchLevel=void 0;var o=n(96323),r=n(31246),a=n(26949),i=n(89613),c=n(59450),l=n(43024),u=["genes","noSelection","noGenes"];function d(e,t){var n="undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(n)return(n=n.call(e)).next.bind(n);if(Array.isArray(e)||(n=function(e,t){if(!e)return;if("string"==typeof e)return s(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);"Object"===n&&e.constructor&&(n=e.constructor.name);if("Map"===n||"Set"===n)return Array.from(e);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return s(e,t)}(e))||t&&e&&"number"==typeof e.length){n&&(e=n);var o=0;return function(){return o>=e.length?{done:!0}:{done:!1,value:e[o++]}}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}function s(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,o=new Array(t);n<t;n++)o[n]=e[n];return o}var p={None:0,InProgress:1,Done:2,Activated:3};t.ResearchLevel=p;var m=function(e,t){for(var n,o=d(e);!(n=o()).done;){var r=n.value,a=r.label;r.cooldown;if(a===t)return!0}return!1};t.haveDevice=m;var f=function(e,t){for(var n,o=d(e);!(n=o()).done;){var r=n.value,a=r.label,i=r.cooldown;if(a===t)return i>0}return!0};t.onCooldown=f;var h=function(e,t){var n=(0,r.useBackend)(t),u=n.data,d=n.act,s=(0,r.useSharedState)(t,"booth",null),p=s[0],h=s[1],g=u.materialCur,N=u.researchCost,v=u.equipmentCooldown,b=u.saveSlots,V=u.savedMutations,y=u.subject,x=u.boothCost,k=u.injectorCost,S=u.precisionEmitter,I=u.toSplice,w=e.gene,_=e.showSequence,D=e.isSample,M=e.isPotential,B=e.isActive,A=e.isStorage,T=w.ref,L=w.name,E=w.desc,P=w.icon,j=w.research,O=w.canResearch,F=w.canInject,R=w.canScramble,z=w.canReclaim,W=w.spliceError,U=w.dna,H=U.every((function(e){return!e.style})),G=U.every((function(e){return!e.style||"locked"===e.marker})),Y=B||A;return(0,o.createComponentVNode)(2,a.Section,{title:L,buttons:(0,o.createComponentVNode)(2,l.GeneIcon,{name:P,size:1.5}),children:[p&&p.ref===T&&(0,o.createComponentVNode)(2,a.Modal,{full:!0,children:(0,o.createComponentVNode)(2,a.Section,{width:35,title:L,style:{margin:"-10px","margin-right":"2px"},buttons:(0,o.createComponentVNode)(2,l.GeneIcon,{name:P,size:4,style:{"margin-top":"-2px","margin-right":"-4px"}}),children:[(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Price",children:(0,o.createComponentVNode)(2,a.NumberInput,{minValue:0,maxValue:999999,width:5,value:p.price,onChange:function(e,t){return h({ref:p.ref,price:t,desc:p.desc})}})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Description",children:(0,o.createComponentVNode)(2,a.Input,{width:25,value:p.desc,onChange:function(e,t){return h({ref:p.ref,price:p.price,desc:t})}})})]}),(0,o.createComponentVNode)(2,a.Box,{inline:!0,width:"50%",textAlign:"center",mt:2,children:(0,o.createComponentVNode)(2,a.Button,{icon:"person-booth",color:"good",disabled:x>g,onClick:function(){return d("booth",p)},children:"Send to Booth"})}),(0,o.createComponentVNode)(2,a.Box,{inline:!0,width:"50%",textAlign:"center",children:(0,o.createComponentVNode)(2,a.Button,{icon:"times",color:"bad",onClick:function(){return h(null)},children:"Cancel"})})]})}),(0,o.createComponentVNode)(2,i.UnlockModal),(0,o.createComponentVNode)(2,a.Box,{textAlign:"right",children:[(0,o.createComponentVNode)(2,a.Box,{mr:1,style:{float:"left"},children:[(0,o.createComponentVNode)(2,a.Icon,{color:j>=3?"good":j>=2?"teal":j>=1?"average":"bad",name:j>=2?"flask":j>=1?"hourglass":"times"}),j>=2?" Researched":j>=1?" In Progress":" Not Researched"]}),!B&&!!O&&0===j&&(0,o.createComponentVNode)(2,a.Button,{icon:"flask",disabled:N>g,onClick:function(){return d("researchmut",{ref:T,sample:!!D})},color:"teal",children:"Research"}),M&&(0,o.createComponentVNode)(2,a.Button,{icon:"check",disabled:!H,onClick:function(){return d("activate",{ref:T})},color:"blue",children:"Activate"}),j>=3&&!H&&(0,o.createComponentVNode)(2,a.Button,{icon:"magic",disabled:G,onClick:function(){return d("autocomplete",{ref:T})},children:"Autocomplete DNA"}),m(v,"Analyzer")&&!H&&M&&(0,o.createComponentVNode)(2,a.Button,{disabled:f(v,"Analyzer"),icon:"microscope",color:"average",onClick:function(){return d("analyze",{ref:T})},children:"Check Stability"}),m(v,"Reclaimer")&&Y&&!!z&&(0,o.createComponentVNode)(2,a.Button,{disabled:f(v,"Reclaimer"),icon:"times",color:"bad",onClick:function(){return d("reclaim",{ref:T})},children:"Reclaim"}),x>=0&&j>=2&&Y&&(0,o.createComponentVNode)(2,a.Button,{disabled:g<x,icon:"person-booth",color:"good",onClick:function(){return h({ref:T,price:200,desc:""})},children:"Sell at Booth"}),!!S&&j>=2&&M&&!!R&&(0,o.createComponentVNode)(2,a.Button,{icon:"radiation",disabled:f(v,"Emitter")||y.stat>0,color:"bad",onClick:function(){return d("precisionemitter",{ref:T})},children:"Scramble Gene"}),b>0&&j>=2&&B&&(0,o.createComponentVNode)(2,a.Button,{disabled:b<=V.length,icon:"save",color:"average",onClick:function(){return d("save",{ref:T})},children:"Store"}),j>=2&&!!F&&m(v,"Injectors")&&(0,o.createComponentVNode)(2,a.Button,{disabled:f(v,"Injectors"),icon:"syringe",onClick:function(){return d("activator",{ref:T})},children:"Activator"}),j>=2&&!!F&&k>=0&&Y&&(0,o.createComponentVNode)(2,a.Button,{disabled:f(v,"Injectors")||g<k,icon:"syringe",onClick:function(){return d("injector",{ref:T})},color:"bad",children:"Injector"}),Y&&!!I&&(0,o.createComponentVNode)(2,a.Button,{disabled:!!W,icon:"map-marker-alt",onClick:function(){return d("splicegene",{ref:T})},tooltip:W,tooltipPosition:"left",children:"Splice"}),A&&y&&(0,o.createComponentVNode)(2,a.Button,{icon:"check",onClick:function(){return d("addstored",{ref:T})},color:"blue",children:"Add to Occupant"}),A&&(0,o.createComponentVNode)(2,a.Button,{icon:"trash",onClick:function(){return d("deletegene",{ref:T})},color:"bad"}),(0,o.createComponentVNode)(2,a.Box,{inline:!0})]}),(0,o.createComponentVNode)(2,C,{text:E}),_&&(0,o.normalizeProps)((0,o.createComponentVNode)(2,c.DNASequence,Object.assign({},e)))]})};t.BioEffect=h;var C=function(e,t){return e.text.split(/<br ?\/?>/g).map((function(e,t){return(0,o.createVNode)(1,"p",null,e,0,null,t)}))};t.Description=C;t.GeneList=function(e,t){var n,i=(0,r.useBackend)(t),c=i.data,l=i.act,d=c.activeGene,s=e.genes,m=e.noSelection,f=e.noGenes,C=function(e,t){if(null==e)return{};var n,o,r={},a=Object.keys(e);for(o=0;o<a.length;o++)n=a[o],t.indexOf(n)>=0||(r[n]=e[n]);return r}(e,u),g=s.find((function(e){return e.ref===d})),N=((n={})[p.None]={icon:"question",color:"grey"},n[p.InProgress]={icon:"hourglass",color:"average"},n[p.Done]={icon:"flask",color:"teal"},n[p.Activated]={icon:"flask",color:"good"},n);return(0,o.createFragment)([(0,o.createComponentVNode)(2,a.Flex,{wrap:!0,mb:1,children:s.map((function(e){return(0,o.createComponentVNode)(2,a.Flex.Item,{grow:1,textAlign:"center",children:(0,o.createComponentVNode)(2,a.Button,{icon:N[e.research].icon,color:e.ref===d?"black":N[e.research].color,onClick:function(){return l("setgene",{ref:e.ref})},tooltip:e.research===p.InProgress?"Researching...":e.name,tooltipPosition:"left",width:"80%"})},e.ref)}))}),!s.length&&(f||"No genes found."),!!s.length&&!g&&(m||"Select a gene to view it."),g&&(0,o.normalizeProps)((0,o.createComponentVNode)(2,h,Object.assign({gene:g,showSequence:!0},C),g.ref))],0)}},59450:function(e,t,n){"use strict";t.__esModule=!0,t.Nucleotide=t.DNASequence=void 0;var o=n(96323),r=n(31246),a=n(26949),i=["letter","type","mark","useLetterColor"];var c={"?":"grey",A:"red",T:"blue",C:"yellow",G:"green"},l={"":"good",X:"grey",1:"good",2:"olive",3:"average",4:"orange",5:"bad"};t.DNASequence=function(e,t){for(var n=(0,r.useBackend)(t).act,i=e.gene,c=e.isPotential,d=i.dna,s=!0,p=[],m=0;m<d.length;m++)m%4==0&&p.push([]),p[p.length-1].push(d[m]),d[m].style&&(s=!1);var f=function(e){c&&n("advancepair",{ref:i.ref,pair:e})};return p.map((function(e,t){return(0,o.createVNode)(1,"table",null,[(0,o.createVNode)(1,"tr",null,e.map((function(e,n){return(0,o.createVNode)(1,"td",null,(0,o.createComponentVNode)(2,u,{letter:e.pair.charAt(0),type:e.style,mark:e.marker,useLetterColor:s,onClick:function(){return f(4*t+n+1)}}),2,null,n)})),0),(0,o.createVNode)(1,"tr",null,e.map((function(e,n){return(0,o.createVNode)(1,"td",null,s?"|":"locked"===e.marker?(0,o.createComponentVNode)(2,a.Icon,{name:"lock",color:"average",onClick:function(){return f(4*t+n+1)}}):(0,o.createComponentVNode)(2,a.Icon,{name:""===e.style?"check":"5"===e.style?"times":"question",color:l[e.style]}),0,{style:{"text-align":"center"}},n)})),0),(0,o.createVNode)(1,"tr",null,e.map((function(e,n){return(0,o.createVNode)(1,"td",null,(0,o.createComponentVNode)(2,u,{letter:e.pair.charAt(1),type:e.style,mark:e.marker,useLetterColor:s,onClick:function(){return f(4*t+n+1)}}),2,null,n)})),0)],4,{style:{display:"inline-table","margin-top":"1em","margin-left":t%4==0?"0":"0.25em","margin-right":t%4==3?"0":"0.25em"}},t)}))};var u=function(e){var t=e.letter,n=e.type,r=(e.mark,e.useLetterColor),u=function(e,t){if(null==e)return{};var n,o,r={},a=Object.keys(e);for(o=0;o<a.length;o++)n=a[o],t.indexOf(n)>=0||(r[n]=e[n]);return r}(e,i),d=r?c[t]:l[n];return(0,o.normalizeProps)((0,o.createComponentVNode)(2,a.Button,Object.assign({width:"1.75em",textAlign:"center",color:d},u,{children:t})))};t.Nucleotide=u},43024:function(e,t,n){"use strict";t.__esModule=!0,t.GeneIcon=void 0;var o=n(96323),r=n(1060),a=n(54425),i=["name","size","style"];var c=function(e){var t=e.name,n=e.size,c=e.style,l=void 0===c?{}:c,u=function(e,t){if(null==e)return{};var n,o,r={},a=Object.keys(e);for(o=0;o<a.length;o++)n=a[o],t.indexOf(n)>=0||(r[n]=e[n]);return r}(e,i);return n&&(l["font-size"]=100*n+"%"),(0,o.normalizeProps)((0,o.createComponentVNode)(2,a.Box,Object.assign({as:"i",className:(0,r.classes)(["GeneIcon","GeneIcon--"+t]),style:l},u)))};t.GeneIcon=c,c.defaultHooks=r.pureComponentHooks},33012:function(e,t,n){"use strict";t.__esModule=!0,t.StorageTab=t.RecordTab=t.ScannerTab=t.ResearchTab=t.MutationsTab=t.UnlockModal=t.CombineGenesModal=t.BuyMaterialsModal=void 0;var o=n(78368);t.BuyMaterialsModal=o.BuyMaterialsModal;var r=n(39961);t.CombineGenesModal=r.CombineGenesModal;var a=n(89613);t.UnlockModal=a.UnlockModal;var i=n(22675);t.MutationsTab=i.MutationsTab;var c=n(93847);t.ResearchTab=c.ResearchTab;var l=n(49445);t.ScannerTab=l.ScannerTab;var u=n(64477);t.RecordTab=u.RecordTab,t.StorageTab=u.StorageTab},78368:function(e,t,n){"use strict";t.__esModule=!0,t.BuyMaterialsModal=void 0;var o=n(96323),r=n(31246),a=n(26949);t.BuyMaterialsModal=function(e,t){var n=(0,r.useBackend)(t),i=n.data,c=n.act,l=(0,r.useSharedState)(t,"buymats",null),u=l[0],d=l[1],s=e.maxAmount,p=i.budget,m=i.costPerMaterial,f=Math.min(u,s);return(0,o.createComponentVNode)(2,a.Modal,{full:!0,children:(0,o.createComponentVNode)(2,a.Box,{position:"relative",width:18,children:[(0,o.createComponentVNode)(2,a.Box,{position:"absolute",right:1,top:0,children:(0,o.createComponentVNode)(2,a.Knob,{inline:!0,value:f,onChange:function(e,t){return d(t)},minValue:1,maxValue:s})}),(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Purchase",children:[f,1===f?" Material":" Materials"]}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Budget",children:p+" Credits"}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Cost",children:f*m+" Credits"}),(0,o.createComponentVNode)(2,a.LabeledList.Divider),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Remainder",children:[(0,o.createComponentVNode)(2,a.Box,{inline:!0,color:p-f*m<0&&"bad",children:p-f*m})," Credits"]})]}),(0,o.createComponentVNode)(2,a.Divider,{hidden:!0}),(0,o.createComponentVNode)(2,a.Box,{inline:!0,width:"50%",textAlign:"center",children:(0,o.createComponentVNode)(2,a.Button,{color:"good",icon:"dollar-sign",disabled:f<=0,onClick:function(){c("purchasematerial",{amount:f}),d(null)},children:"Submit"})}),(0,o.createComponentVNode)(2,a.Box,{inline:!0,width:"50%",textAlign:"center",children:(0,o.createComponentVNode)(2,a.Button,{color:"bad",icon:"times",onClick:function(){return d(null)},children:"Cancel"})})]})})}},39961:function(e,t,n){"use strict";t.__esModule=!0,t.CombineGenesModal=void 0;var o=n(96323),r=n(31246),a=n(26949);t.CombineGenesModal=function(e,t){var n=(0,r.useBackend)(t),i=n.data,c=n.act,l=(0,r.useSharedState)(t,"iscombining",!1),u=(l[0],l[1]),d=i.savedMutations,s=i.combining,p=void 0===s?[]:s;return(0,o.createComponentVNode)(2,a.Modal,{full:!0,width:20,children:[(0,o.createComponentVNode)(2,a.Section,{title:"Select",children:(0,o.createComponentVNode)(2,a.Stack,{vertical:!0,children:d.map((function(e){return(0,o.createComponentVNode)(2,a.Stack.Item,{children:(0,o.createComponentVNode)(2,a.Button.Checkbox,{checked:p.indexOf(e.ref)>=0,onClick:function(){return c("togglecombine",{ref:e.ref})},children:e.name})},e.ref)}))})}),(0,o.createComponentVNode)(2,a.Box,{textAlign:"center",children:[(0,o.createComponentVNode)(2,a.Button,{color:"bad",icon:"times",onClick:function(){return u(!1)},children:"Cancel"}),(0,o.createComponentVNode)(2,a.Button,{icon:"sitemap",disabled:!p.length,onClick:function(){c("combinegenes"),u(!1)},children:"Combine"})]})]})}},89613:function(e,t,n){"use strict";t.__esModule=!0,t.UnlockModal=void 0;var o=n(96323),r=n(31246),a=n(26949);t.UnlockModal=function(e,t){var n=(0,r.useBackend)(t),i=n.data,c=n.act,l=(0,r.useSharedState)(t,"unlockcode",""),u=l[0],d=l[1],s=i.autoDecryptors,p=i.unlock;if(p)return(0,o.createComponentVNode)(2,a.Modal,{full:!0,children:(0,o.createComponentVNode)(2,a.Box,{width:22,mr:2,children:[(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Detected Length",children:[p.length," characters"]}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Possible Characters",children:p.chars.join(" ")}),(0,o.createComponentVNode)(2,a.LabeledList.Divider),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Enter Unlock Code",children:(0,o.createComponentVNode)(2,a.Input,{value:u,onChange:function(e,t){return d(t.toUpperCase())}})}),(0,o.createComponentVNode)(2,a.LabeledList.Divider),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Correct Characters",children:[p.correctChar," of ",p.length]}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Correct Positions",children:[p.correctPos," of ",p.length]}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Attempts Remaining",children:[p.tries," before mutation"]})]}),(0,o.createComponentVNode)(2,a.Box,{textAlign:"right",mt:2,children:(0,o.createComponentVNode)(2,a.Button,{icon:"magic",color:"average",tooltip:"Auto-Decryptors Available: "+s,disabled:s<1,onClick:function(){d(""),c("unlock",{code:"UNLOCK"})},children:"Use Auto-Decryptor"})}),(0,o.createComponentVNode)(2,a.Box,{textAlign:"right",mt:1,children:[(0,o.createComponentVNode)(2,a.Button,{mr:1,icon:"check",color:"good",tooltip:u.length!==p.length?"Code is the wrong length.":u.split("").some((function(e){return-1===p.chars.indexOf(e)}))?"Invalid character in code.":"",disabled:u.length!==p.length||u.split("").some((function(e){return-1===p.chars.indexOf(e)})),onClick:function(){d(""),c("unlock",{code:u})},children:"Attempt Decryption"}),(0,o.createComponentVNode)(2,a.Button,{icon:"times",color:"bad",onClick:function(){d(""),c("unlock",{code:null})},children:"Cancel"})]})]})})}},22675:function(e,t,n){"use strict";t.__esModule=!0,t.MutationsTab=void 0;var o=n(96323),r=n(31246),a=n(26949),i=n(11265);t.MutationsTab=function(e,t){var n=(0,r.useBackend)(t).data,c=(0,r.useSharedState)(t,"mutsortmode","time"),l=c[0],u=c[1],d=(0,r.useSharedState)(t,"showSequence",!1),s=d[0],p=d[1],m=(n.bioEffects||[]).slice(0);return"time"===l?m.sort((function(e,t){return e.time-t.time})):"alpha"===l&&m.sort((function(e,t){return e.name>t.name?1:e.name<t.name?-1:0})),(0,o.createFragment)([(0,o.createComponentVNode)(2,a.Section,{children:[(0,o.createComponentVNode)(2,a.Button,{icon:"time"===l?"clock":"sort-alpha-down",onClick:function(){return u("time"===l?"alpha":"time")},children:"Sort Mode"}),(0,o.createComponentVNode)(2,a.Button.Checkbox,{inline:!0,content:"Show Sequence",checked:s,onClick:function(){return p(!s)}})]}),m.map((function(e){return(0,o.createComponentVNode)(2,i.BioEffect,{gene:e,showSequence:s},e.ref)}))],0)}},93847:function(e,t,n){"use strict";t.__esModule=!0,t.ResearchTab=void 0;var o=n(96323),r=n(31246),a=n(26949),i=n(11265);t.ResearchTab=function(e,t){var n=(0,r.useBackend)(t),c=n.data,l=n.act,u=c.materialCur,d=c.materialMax,s=c.budget,p=c.mutationsResearched,m=c.autoDecryptors,f=c.saveSlots,h=c.availableResearch,C=c.finishedResearch,g=c.savedMutations,N=c.research,v=e.maxBuyMats,b=e.setBuyMats;return(0,o.createFragment)([(0,o.createComponentVNode)(2,a.Section,{title:"Statistics",buttons:(0,o.createComponentVNode)(2,a.Button,{icon:"dollar-sign",disabled:v<=0,onClick:function(){return b(1)},children:"Purchase Additional Materials"}),children:(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Research Materials",children:[u," / ",d]}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Research Budget",children:[(0,o.createComponentVNode)(2,a.AnimatedNumber,{value:s})," Credits"]}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Mutations Researched",children:p}),f>0&&(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Mutations Stored",children:[g.length," / ",f]}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Auto-Decryptors",children:m})]})}),(0,o.createComponentVNode)(2,a.Section,{title:"Available Research",children:h.map((function(e,t){return(0,o.createComponentVNode)(2,a.Section,{title:"Tier "+(t+1),children:e.length?e.map((function(e){return(0,o.createComponentVNode)(2,a.Section,{title:N[e.ref].name,buttons:(0,o.createComponentVNode)(2,a.Button,{icon:"flask",disabled:u<e.cost,onClick:function(){return l("research",{ref:e.ref})},color:"teal",children:"Research ("+e.cost+" mat, "+e.time+"s)"}),children:(0,o.createComponentVNode)(2,i.Description,{text:N[e.ref].desc})},e.ref)})):"No research is currently available at this tier."},t)}))}),(0,o.createComponentVNode)(2,a.Section,{title:"Finished Research",children:C.map((function(e,t){return(0,o.createComponentVNode)(2,a.Section,{title:"Tier "+(t+1),children:e.length?e.map((function(e){return(0,o.createComponentVNode)(2,a.Section,{title:N[e.ref].name,children:(0,o.createComponentVNode)(2,i.Description,{text:N[e.ref].desc})},N[e.ref].name)})):"No research has been completed at this tier."},t)}))})],4)}},49445:function(e,t,n){"use strict";t.__esModule=!0,t.ScannerTab=void 0;var o=n(96323),r=n(31246),a=n(26949),i=n(92195),c=n(11265),l=n(43024);t.ScannerTab=function(e,t){var n=(0,r.useBackend)(t),u=n.data,d=n.act,s=(0,r.useSharedState)(t,"changingmutantrace",!1),p=s[0],m=s[1],f=(0,r.useSharedState)(t,"togglePreview",!1),h=f[0],C=f[1],g=u.haveScanner,N=u.subject,v=u.modifyAppearance,b=u.equipmentCooldown,V=u.mutantRaces,y=N||{},x=y.preview,k=y.name,S=y.health,I=y.human,w=y.age,_=y.bloodType,D=y.mutantRace,M=y.canAppearance,B=y.premature,A=y.potential,T=y.active;return!p||N&&I&&!B||(p=!1,m(!1)),N?(0,o.createFragment)([!!p&&(0,o.createComponentVNode)(2,a.Modal,{full:!0,children:[(0,o.createComponentVNode)(2,a.Box,{bold:!0,width:20,mb:.5,children:"Change to which body type?"}),V.map((function(e){return(0,o.createComponentVNode)(2,a.Box,{children:(0,o.createComponentVNode)(2,a.Button,{color:"blue",disabled:D===e.name,mt:.5,onClick:function(){m(!1),d("mutantrace",{ref:e.ref})},children:[(0,o.createComponentVNode)(2,l.GeneIcon,{name:e.icon,size:1.5,style:{margin:"-4px","margin-right":"4px"}}),e.name]})},e.ref)})),(0,o.createComponentVNode)(2,a.Box,{mt:1,textAlign:"right",children:(0,o.createComponentVNode)(2,a.Button,{color:"bad",icon:"times",onClick:function(){return m(!1)},children:"Cancel"})})]}),v?(0,o.normalizeProps)((0,o.createComponentVNode)(2,i.AppearanceEditor,Object.assign({},v))):(0,o.createFragment)([(0,o.createComponentVNode)(2,a.Section,{title:"Occupant",children:(0,o.createComponentVNode)(2,a.Flex,{children:[(0,o.createComponentVNode)(2,a.Flex.Item,{mr:1,children:(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Name",buttons:(0,c.haveDevice)(b,"Emitter")&&(0,o.createComponentVNode)(2,a.Button,{icon:"radiation",disabled:(0,c.onCooldown)(b,"Emitter")||S<=0,color:"bad",onClick:function(){return d("emitter")},children:"Scramble DNA"}),children:k}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Body Type",buttons:!!I&&(0,o.createFragment)([(0,o.createComponentVNode)(2,a.Button,{icon:"user",color:"blue",disabled:!!B,onClick:function(){return m(!0)},children:"Change"}),(0,o.createComponentVNode)(2,a.Button,{icon:"wrench",color:"average",disabled:!M,onClick:function(){return d("editappearance")}})],4),children:D}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Physical Age",buttons:!!I&&(0,o.createComponentVNode)(2,a.Button.Checkbox,{inline:!0,color:"good",content:"DNA Render",checked:h,onClick:function(){return C(!h)}}),children:[w," years"]}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Blood Type",children:_})]})}),I&&h&&(0,o.createComponentVNode)(2,a.Flex.Item,{grow:0,shrink:0,children:(0,o.createComponentVNode)(2,a.ByondUi,{params:{id:x,type:"map"},style:{width:"64px",height:"128px"},hideOnScroll:!0})})]})}),(0,o.createComponentVNode)(2,a.Section,{title:"Potential Genes",children:(0,o.createComponentVNode)(2,c.GeneList,{genes:A,noGenes:"All detected potential mutations are active.",isPotential:!0})}),(0,o.createComponentVNode)(2,a.Section,{title:"Active Mutations",children:(0,o.createComponentVNode)(2,c.GeneList,{genes:T,noGenes:"Subject has no detected mutations.",isActive:!0})})],4)],0):(0,o.createComponentVNode)(2,a.Section,{title:"Scanner Error",children:g?"Subject has absconded.":"Check connection to scanner."})}},64477:function(e,t,n){"use strict";t.__esModule=!0,t.RecordTab=t.StorageTab=void 0;var o=n(96323),r=n(31246),a=n(11265),i=n(26949);t.StorageTab=function(e,t){var n=(0,r.useBackend)(t),c=n.data,l=n.act,u=(0,r.useSharedState)(t,"menu","research"),d=(u[0],u[1]),s=(0,r.useSharedState)(t,"iscombining",!1),p=(s[0],s[1]),m=c.saveSlots,f=c.samples,h=c.savedMutations,C=c.savedChromosomes,g=c.toSplice,N=Object.values(C.reduce((function(e,t){return e[t.name]||(e[t.name]={name:t.name,desc:t.desc,count:0}),e[t.name].count++,e[t.name].ref=t.ref,e}),{}));return N.sort((function(e,t){return e.name>t.name?1:-1})),(0,o.createFragment)([m>0&&(0,o.createComponentVNode)(2,i.Section,{title:"Stored Mutations",buttons:(0,o.createComponentVNode)(2,i.Button,{icon:"sitemap",onClick:function(){return p(!0)},children:"Combine"}),children:h.length?h.map((function(e){return(0,o.createComponentVNode)(2,a.BioEffect,{gene:e,showSequence:!0,isStorage:!0},e.ref)})):"There are no mutations in storage."}),(0,o.createComponentVNode)(2,i.Section,{title:"Stored Chromosomes",children:N.length?(0,o.createComponentVNode)(2,i.LabeledList,{children:N.map((function(e){return(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:e.name,buttons:(0,o.createFragment)([(0,o.createComponentVNode)(2,i.Button,{disabled:e.name===g,icon:"map-marker-alt",onClick:function(){return l("splicechromosome",{ref:e.ref})},children:"Splice"}),(0,o.createComponentVNode)(2,i.Button,{color:"bad",icon:"trash",onClick:function(){return l("deletechromosome",{ref:e.ref})}})],4),children:[e.desc,(0,o.createComponentVNode)(2,i.Box,{mt:.5,children:[(0,o.createComponentVNode)(2,i.Box,{inline:!0,color:"grey",children:"Stored Copies:"})," ",e.count]})]},e.ref)}))}):"There are no chromosomes in storage."}),(0,o.createComponentVNode)(2,i.Section,{title:"DNA Samples",children:(0,o.createComponentVNode)(2,i.LabeledList,{children:f.map((function(e){return(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:e.name,buttons:(0,o.createComponentVNode)(2,i.Button,{icon:"save",onClick:function(){l("setrecord",{ref:e.ref}),d("record")},children:"View Record"}),children:(0,o.createVNode)(1,"tt",null,e.uid,0)},e.ref)}))})})],0)};t.RecordTab=function(e,t){var n=(0,r.useBackend)(t).data.record;if(n){var c=n.name,l=n.uid,u=n.genes;return(0,o.createFragment)([(0,o.createComponentVNode)(2,i.Section,{title:c,children:(0,o.createComponentVNode)(2,i.LabeledList,{children:(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Genetic Signature",children:(0,o.createVNode)(1,"tt",null,l,0)})})}),(0,o.createComponentVNode)(2,i.Section,{children:(0,o.createComponentVNode)(2,a.GeneList,{genes:u,noGenes:"No genes found in sample.",isSample:!0})})],4)}}},12302:function(e,t,n){"use strict";t.__esModule=!0,t.GimmickObject=void 0;var o=n(96323),r=n(31246),a=n(26949),i=n(2381);t.GimmickObject=function(e,t){var n=(0,r.useBackend)(t),c=n.act,l=n.data,u=l.eventList,d=l.interactiveTypes,s=l.activeStage;l.icon,l.iconState;return(0,o.createComponentVNode)(2,i.Window,{title:"Gimmick Object Editor",width:675,height:600,children:(0,o.createComponentVNode)(2,i.Window.Content,{scrollable:!0,children:(0,o.createComponentVNode)(2,a.Section,{title:(0,o.createComponentVNode)(2,a.Box,{inline:!0,children:"Edit Interactive Steps"}),children:[(0,o.createComponentVNode)(2,a.Flex,{direction:"column",children:Object.keys(u).map((function(e,t){return(0,o.createComponentVNode)(2,a.Flex.Item,{children:(0,o.createComponentVNode)(2,a.Section,{title:t,children:(0,o.createComponentVNode)(2,a.Flex.Item,{mb:1,children:[(0,o.createComponentVNode)(2,a.Tooltip,{content:"Move Step Down",children:(0,o.createComponentVNode)(2,a.Button,{icon:"angle-down",disabled:parseInt(e,10)>=u.length-1,onClick:function(){return c("move-down",{event:t})}})}),(0,o.createComponentVNode)(2,a.Tooltip,{content:"Move Step Down",children:(0,o.createComponentVNode)(2,a.Button,{icon:"angle-up",disabled:parseInt(e,10)<=0,onClick:function(){return c("move-up",{event:t})}})}),(0,o.createComponentVNode)(2,a.Tooltip,{content:"Make Active Step",children:(0,o.createComponentVNode)(2,a.Button,{icon:"play",disabled:parseInt(e,10)===parseInt(s,10)-1,onClick:function(){return c("active_step",{event:t})}})}),(0,o.createComponentVNode)(2,a.Tooltip,{content:"Remove step from Gimmick",children:(0,o.createComponentVNode)(2,a.Button,{icon:"trash",color:"red",onClick:function(){return c("delete_event",{event:t})}})}),(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.Tooltip,{content:"Set Tool Interactive Flags (Blank will be AttackHand)",children:(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Interactive Flags",children:Object.keys(d).map((function(n,r){return(0,o.createComponentVNode)(2,a.Button,{selected:u[e].interaction&d[n],onClick:function(){return c("interaction",{event:t,value:d[n]})},children:n},r)}))})}),(0,o.createComponentVNode)(2,a.Tooltip,{content:"Hint appended to examine text",children:(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Description",children:(0,o.createComponentVNode)(2,a.Input,{fluid:!0,value:u[e].description,onInput:function(e,n){return c("description",{event:t,value:n})}})})}),(0,o.createComponentVNode)(2,a.Tooltip,{content:"Actionbar Duration",children:(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Duration",children:[(0,o.createComponentVNode)(2,a.NumberInput,{animated:!0,width:"7em",value:u[e].duration,minValue:1,maxValue:9e4,onChange:function(e,n){return c("duration",{event:t,value:n})}}),"Seconds"]})}),(0,o.createComponentVNode)(2,a.Tooltip,{content:"Visible Text Appended after [src]",children:(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Visible Message",children:(0,o.createComponentVNode)(2,a.Input,{fluid:!0,value:u[e].message,onInput:function(e,n){return c("message",{event:t,value:n})}})})})]}),(0,o.createComponentVNode)(2,a.Tooltip,{content:"Notify in-game admins that action was performed",children:(0,o.createComponentVNode)(2,a.Button,{icon:"flag",selected:u[e].notify,onClick:function(){return c("notify",{event:t,value:!u[e].notify})},children:"Notify Admins"})})]})})},t)}))}),(0,o.createComponentVNode)(2,a.Box,{m:1,children:(0,o.createComponentVNode)(2,a.Button,{onClick:function(){return c("add_new")},children:"Add Event"})})]})})})}},96608:function(e,t,n){"use strict";t.__esModule=!0,t.GlassRecycler=void 0;var o=n(96323),r=n(31246),a=n(26949),i=n(2381),c=n(18331),l=function(e){var t=e.product,n=t.name,r=t.cost,i=t.img,l=e.disabled,u=e.onClick;return(0,o.createFragment)([(0,o.createComponentVNode)(2,a.Flex,{direction:"row",align:"center",children:[(0,o.createComponentVNode)(2,a.Flex.Item,{children:(0,o.createVNode)(1,"img",null,null,1,{src:"data:image/png;base64,"+i,style:{"vertical-align":"middle","horizontal-align":"middle"}})}),(0,o.createComponentVNode)(2,a.Flex.Item,{grow:1,children:[(0,o.createComponentVNode)(2,a.Box,{bold:!0,children:(0,c.capitalize)(n)}),(0,o.createComponentVNode)(2,a.Box,{children:"Cost: "+r+" "+(0,c.pluralize)("Unit",r)})]}),(0,o.createComponentVNode)(2,a.Flex.Item,{children:(0,o.createComponentVNode)(2,a.Button,{onClick:u,disabled:l,children:"Create"})})]}),(0,o.createComponentVNode)(2,a.Divider)],4)};t.GlassRecycler=function(e,t){var n=(0,r.useBackend)(t),u=n.act,d=n.data,s=d.glassAmt,p=d.products,m=(0,r.useLocalState)(t,"filter-available",!1),f=m[0],h=m[1];return(0,o.createComponentVNode)(2,i.Window,{title:"Glass Recycler",width:300,height:400,children:(0,o.createComponentVNode)(2,i.Window.Content,{children:(0,o.createComponentVNode)(2,a.Stack,{vertical:!0,fill:!0,children:[(0,o.createComponentVNode)(2,a.Stack.Item,{children:(0,o.createComponentVNode)(2,a.Section,{children:(0,o.createComponentVNode)(2,a.Flex,{direction:"row",align:"center",children:[(0,o.createComponentVNode)(2,a.Flex.Item,{grow:1,children:(0,o.createComponentVNode)(2,a.Box,{children:"Glass: "+s+" "+(0,c.pluralize)("Unit",s)})}),(0,o.createComponentVNode)(2,a.Flex.Item,{children:(0,o.createComponentVNode)(2,a.Button.Checkbox,{checked:f,onClick:function(){return h(!f)},children:"Filter Available"})})]})})}),(0,o.createComponentVNode)(2,a.Stack.Item,{grow:1,children:(0,o.createComponentVNode)(2,a.Section,{fill:!0,scrollable:!0,title:"Products",children:p.filter((function(e){var t=e.cost;return!f||s>=t})).map((function(e){var t=e.cost,n=e.type;return(0,o.createComponentVNode)(2,l,{product:e,disabled:s<t,onClick:function(){return u("create",{type:n})}},n)}))})})]})})})}},21381:function(e,t,n){"use strict";t.__esModule=!0,t.HumanInventory=void 0;var o=n(96323),r=n(31246),a=n(26949),i=n(2381),c={slot_head:"Head",slot_wear_mask:"Mask",slot_glasses:"Eyes",slot_ears:"Ears",slot_l_hand:"Left Hand",slot_r_hand:"Right Hand",slot_gloves:"Gloves",slot_shoes:"Shoes",slot_belt:"Belt",slot_w_uniform:"Uniform",slot_wear_suit:"Outer Suit",slot_back:"Back",slot_wear_id:"ID",slot_l_store:"Left Pocket",slot_r_store:"Right Pocket"};t.HumanInventory=function(e,t){var n=(0,r.useBackend)(t),u=n.data,d=n.act;return(0,o.createComponentVNode)(2,i.Window,{width:300,height:490,title:u.name,children:(0,o.createComponentVNode)(2,i.Window.Content,{children:(0,o.createComponentVNode)(2,a.Stack,{fill:!0,vertical:!0,children:[(0,o.createComponentVNode)(2,a.Stack.Item,{grow:!0,children:(0,o.createComponentVNode)(2,a.Section,{scrollable:!0,fill:!0,children:(0,o.createComponentVNode)(2,a.LabeledList,{children:Object.entries(c).map((function(e){var t=e[0],n=e[1],r=u.slots.find((function(e){return e.id===t}));return(0,o.createComponentVNode)(2,l,{name:n,slot:r},t)}))})})}),Boolean(u.handcuffed||u.canSetInternal||u.internal)&&(0,o.createComponentVNode)(2,a.Stack.Item,{children:(0,o.createComponentVNode)(2,a.Section,{children:[Boolean(u.handcuffed)&&(0,o.createComponentVNode)(2,a.Button,{onClick:function(){return d("remove-handcuffs")},children:"Remove handcuffs"}),Boolean(u.canSetInternal)&&(0,o.createComponentVNode)(2,a.Button,{onClick:function(){return d("access-internals")},children:"Set internals"}),Boolean(u.internal)&&(0,o.createComponentVNode)(2,a.Button,{onClick:function(){return d("access-internals")},children:"Remove internals"})]})})]})})})};var l=function(e,t){var n=(0,r.useBackend)(t).act,i=e.slot,c=e.name,l=i.id,u=i.item;return(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:c,children:(0,o.createComponentVNode)(2,a.Button,{color:u?"default":"transparent",fluid:!0,onClick:function(){return n("access-slot",{id:l})},children:u||"Nothing"})})}},59818:function(){},92354:function(e,t,n){"use strict";t.__esModule=!0,t.Hypospray=void 0;var o=n(96323),r=n(31246),a=n(26949),i=n(2381),c=n(51418),l=n(18331);t.Hypospray=function(e,t){var n=(0,r.useBackend)(t),u=n.act,d=n.data,s=d.emagged,p=d.injectionAmount,m=d.reagentData;return(0,o.createComponentVNode)(2,i.Window,{width:320,height:300,theme:s?"syndicate":"nanotrasen",children:(0,o.createComponentVNode)(2,i.Window.Content,{children:[(0,o.createComponentVNode)(2,a.Section,{title:s?(0,l.glitch)("Contents",3):"Contents",buttons:(0,o.createComponentVNode)(2,a.Button,{icon:"times",color:"red",disabled:!m.totalVolume,onClick:function(){return u("dump")},children:"Dump"}),children:[(0,o.createComponentVNode)(2,c.ReagentGraph,{container:m}),(0,o.createComponentVNode)(2,c.ReagentList,{container:m})]}),(0,o.createComponentVNode)(2,a.Section,{title:"Injection Amount",children:(0,o.createComponentVNode)(2,a.Slider,{value:p,format:function(e){return e+"u"},minValue:1,maxValue:m.maxVolume,step:1,stepPixelSize:10,onChange:function(e,t){return u("changeAmount",{amount:t})}})})]})})}},26513:function(e,t,n){"use strict";t.__esModule=!0,t.IDComputer=void 0;var o=n(96323),r=n(31246),a=n(26949),i=n(2381),c=function(e,t){var n=(0,r.useBackend)(t).act,i=e.name,c=e.colour,l=e.jobs,u=e.current_job,d=e.isCustomRank,s=e.accesses,p=e.target_accesses;return(0,o.createComponentVNode)(2,a.Section,{title:i,"class":"IDComputer__DeptBox "+(c&&"IDComputer__DeptBox_color_"+c),mb:"0.25rem",children:[l&&l.map((function(e,t){return(0,o.createFragment)([!d&&(0,o.createComponentVNode)(2,a.Button,{onClick:function(){return n("assign",{assign:e,colour:c})},selected:e===u,children:e},e),d&&(0,o.createFragment)([e,(0,o.createComponentVNode)(2,a.Button,{icon:"save",tooltip:"Save",onClick:function(){return n("save",{save:t+1})},pl:"10px",mx:"0.2rem"}),(0,o.createComponentVNode)(2,a.Button,{icon:"check",tooltip:"Apply",onClick:function(){return n("apply",{apply:t+1})},pl:"10px",mx:"0.2rem",mr:"1rem"})],0)],0)})),s&&s.map((function(e){return(0,o.createComponentVNode)(2,a.Button,{onClick:function(){return n("access",{access:e.id,allowed:!p.includes(e.id)})},selected:p.includes(e.id),children:e.name},e.id)}))]})};t.IDComputer=function(e,t){var n=(0,r.useBackend)(t),l=n.act,u=n.data,d=u.mode,s=u.manifest,p=u.target_name,m=u.target_owner,f=u.target_rank,h=u.target_card_look,C=u.scan_name,g=u.pronouns,N=u.custom_names,v=u.target_accesses,b=u.standard_jobs,V=u.accesses_by_area,y=u.icons;return(0,o.createComponentVNode)(2,i.Window,{width:620,height:780,children:(0,o.createComponentVNode)(2,i.Window.Content,{scrollable:!0,children:(0,o.createComponentVNode)(2,a.Section,{children:[(0,o.createComponentVNode)(2,a.Tabs,{children:[(0,o.createComponentVNode)(2,a.Tabs.Tab,{selected:"manifest"!==d,onClick:function(){return l("mode",{mode:0})},children:"ID Modification"}),(0,o.createComponentVNode)(2,a.Tabs.Tab,{selected:"manifest"===d,onClick:function(){return l("mode",{mode:1})},children:"Crew Manifest"})]}),"manifest"===d&&(0,o.createFragment)([(0,o.createVNode)(1,"h1",null,"Crew Manifest:",16),(0,o.createVNode)(1,"em",null,"Please use the security record computer to modify entries.",16),(0,o.createComponentVNode)(2,a.Box,{my:"0.5rem",dangerouslySetInnerHTML:{__html:s}}),(0,o.createComponentVNode)(2,a.Button,{onClick:function(){return l("print")},icon:"print",children:"Print"})],4),"manifest"!==d&&(0,o.createFragment)([(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Confirm identity",children:(0,o.createComponentVNode)(2,a.Button,{onClick:function(){return l("scan")},icon:"eject",preserveWhitespace:!0,children:C||"Insert card"})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Target",children:(0,o.createComponentVNode)(2,a.Button,{onClick:function(){return l("modify")},icon:"eject",preserveWhitespace:!0,children:p||"Insert card or implant"})})]}),"authenticated"===d&&(0,o.createFragment)([(0,o.createVNode)(1,"hr"),(0,o.createComponentVNode)(2,a.Stack,{children:[(0,o.createComponentVNode)(2,a.Stack.Item,{grow:2,children:(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Registered",children:(0,o.createComponentVNode)(2,a.Button,{onClick:function(){return l("reg")},preserveWhitespace:!0,children:m&&m.trim()||"(blank)"})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Assignment",children:(0,o.createComponentVNode)(2,a.Button,{onClick:function(){return l("assign",{assign:"Custom Assignment"})},preserveWhitespace:!0,children:f&&f.trim()||"Unassigned"})})]})}),(0,o.createComponentVNode)(2,a.Stack.Item,{children:(0,o.createComponentVNode)(2,a.Divider,{vertical:!0})}),(0,o.createComponentVNode)(2,a.Stack.Item,{grow:1,children:(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Pronouns",children:[(0,o.createComponentVNode)(2,a.Button,{onClick:function(){return l("pronouns",{pronouns:"next"})},children:g||"None"}),g&&(0,o.createComponentVNode)(2,a.Button,{onClick:function(){return l("pronouns",{pronouns:"remove"})},icon:"trash",tooltip:"Remove"})]}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"PIN",children:(0,o.createComponentVNode)(2,a.Button,{onClick:function(){return l("pin")},children:"****"})})]})})]}),(0,o.createComponentVNode)(2,a.Section,{title:"Standard Job Assignment",children:[b.map((function(e){return e.jobs&&(0,o.createComponentVNode)(2,c,{name:e.name,colour:e.color,current_job:f,jobs:e.jobs},e.name)})),(0,o.createComponentVNode)(2,c,{name:"Custom",current_job:f,jobs:N,isCustomRank:!0})]}),(0,o.createComponentVNode)(2,a.Section,{title:"Specific Area Access",children:V.map((function(e){return e.accesses.length>0&&(0,o.createComponentVNode)(2,c,{name:e.name,colour:e.color,accesses:e.accesses,target_accesses:v},e.name)}))}),(0,o.createComponentVNode)(2,a.Section,{title:"Custom Card Look",children:y.map((function(e){return(0,o.createComponentVNode)(2,a.Button,{onClick:function(){return l("colour",{colour:e.style})},selected:e.card_look===h,children:[(0,o.createComponentVNode)(2,a.Image,{verticalAlign:"middle",my:"0.2rem",mr:"0.5rem",height:"24px",width:"24px",src:"data:image/png;base64,"+e.icon}),e.name]},e.style)}))})],0),"unauthenticated"===d&&C&&p&&(0,o.createComponentVNode)(2,a.NoticeBox,{mt:"0.5rem",warning:!0,children:["Identity ",(0,o.createVNode)(1,"em",null,C,0)," unauthorized to perform ID modifications."]})],0)]})})})}},23255:function(e,t,n){"use strict";t.__esModule=!0,t.Laundry=void 0;var o=n(96323),r=n(31246),a=n(26949),i=n(2381);t.Laundry=function(e,t){var n=(0,r.useBackend)(t).data.on;return(0,o.createComponentVNode)(2,i.Window,{title:"Washman 550",width:400,height:100,children:(0,o.createComponentVNode)(2,i.Window.Content,{children:[(0,o.createComponentVNode)(2,a.Box,{textAlign:"center",mb:1,children:n?(0,o.createComponentVNode)(2,c):(0,o.createComponentVNode)(2,l)}),(0,o.createComponentVNode)(2,a.Box,{textAlign:"center",children:[(0,o.createComponentVNode)(2,u),(0,o.createComponentVNode)(2,d)]})]})})};var c=function(e,t){return(0,o.createComponentVNode)(2,a.NoticeBox,{warning:!0,children:"Please wait, machine is currently running."})},l=function(e,t){return(0,o.createComponentVNode)(2,a.NoticeBox,{info:!0,children:'Insert items and press "Turn On" to start.'})},u=function(e,t){var n=(0,r.useBackend)(t),i=n.act,c=n.data.on;return(0,o.createComponentVNode)(2,a.Button,{disabled:c,color:c?"":"good",icon:"fas fa-power-off",content:"Turn On",onClick:function(){return i("cycle")}})},d=function(e,t){var n=(0,r.useBackend)(t),i=n.act,c=n.data,l=c.on,u=c.door;return(0,o.createComponentVNode)(2,a.Button,{disabled:l,color:u?"orange":"",icon:u?"fas fa-door-open":"fas fa-door-closed",content:u?"Open":"Closed",onClick:function(){return i("door")}})}},84696:function(e,t,n){"use strict";t.__esModule=!0,t.ListInputModal=void 0;var o=n(96323),r=n(55631),a=n(34277),i=n(26949),c=n(57890),l=n(2381),u=n(31246);function d(e,t){var n="undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(n)return(n=n.call(e)).next.bind(n);if(Array.isArray(e)||(n=function(e,t){if(!e)return;if("string"==typeof e)return s(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);"Object"===n&&e.constructor&&(n=e.constructor.name);if("Map"===n||"Set"===n)return Array.from(e);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return s(e,t)}(e))||t&&e&&"number"==typeof e.length){n&&(e=n);var o=0;return function(){return o>=e.length?{done:!0}:{done:!1,value:e[o++]}}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}function s(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,o=new Array(t);n<t;n++)o[n]=e[n];return o}var p="undefined"!=typeof Promise?Promise.resolve().then.bind(Promise.resolve()):function(e){window.setTimeout(e,0)},m=function(e,t){var n=(f||(f=document.createElement("canvas"))).getContext("2d");return n.font=t,n.measureText(e).width},f=null,h=function(e,t){return window.getComputedStyle(e,null).getPropertyValue(t)};t.ListInputModal=function(e,t){var n=(0,u.useBackend)(t),s=n.act,f=n.data,N=f.items,v=void 0===N?[]:N,b=f.message,V=f.init_value,y=f.timeout,x=f.title,k=f.start_with_search,S=f.capitalize,I=f.theme,w=(0,u.useLocalState)(t,"selected",v.indexOf(V)),_=w[0],D=w[1],M=(0,u.useLocalState)(t,"searchBarVisible",1===k),B=M[0],A=M[1],T=(0,u.useLocalState)(t,"searchQuery",""),L=T[0],E=T[1],P=(0,u.useLocalState)(t,"windowWidth",null),j=P[0],O=P[1],F=function(e){if(e!==L){var t,n=R[_],o=v.filter((function(t){return t.toLowerCase().includes(e.toLowerCase())})),r=o.indexOf(n);if(-1===r&&o.length>0)D(0),null==(t=document.getElementById("0"))||t.scrollIntoView();else if(0!==o.length){var a;D(r),null==(a=document.getElementById(r.toString()))||a.scrollIntoView()}E(e)}},R=v.filter((function(e){return null==e?void 0:e.toLowerCase().includes(L.toLowerCase())})),z=325+Math.ceil((null==b?void 0:b.length)/3);B||setTimeout((function(){var e;return null==(e=document.getElementById(_.toString()))?void 0:e.focus()}),1);var W,U=j;if(null===j){for(var H,G=325,Y=(void 0===W&&(W=document.body),(h(W,"font-weight")||"normal")+" "+(h(W,"font-size")||"16px")+" "+(h(W,"font-family")||"Times New Roman")),Z=d(v);!(H=Z()).done;){var K=H.value;G=Math.max(G,m(K,Y))}p((function(){return O(G)})),U=G}return(0,o.createComponentVNode)(2,l.Window,{title:x,width:U,height:z,theme:I||"nanotrasen",children:[y&&(0,o.createComponentVNode)(2,r.Loader,{value:y}),(0,o.createComponentVNode)(2,l.Window.Content,{onkeydown:function(e){var t,n,o,r,a=B?document.getElementById("search_bar").getElementsByTagName("input")[0]:null,i=document.activeElement===a,l=R.length-1,u=window.event?e.which:e.keyCode,d=String.fromCharCode(e.keyCode).toLowerCase();if(u===c.KEY_DOWN||u===c.KEY_UP||u===c.KEY_PAGEUP||u===c.KEY_PAGEDOWN)e.preventDefault(),function(e){var t,n=R.length-1,o=-1;switch(e){case c.KEY_UP:o=-1;break;case c.KEY_DOWN:o=1;break;case c.KEY_PAGEUP:o=-10;break;case c.KEY_PAGEDOWN:o=10}var r=_+o;r<0&&1===Math.abs(o)&&(r=n),r>n&&1===Math.abs(o)&&(r=0),r<0&&(r=0),r>n&&(r=n),D(r),null==(t=document.getElementById(r.toString()))||t.focus()}(u);else{if("f"===d&&e.ctrlKey)return B||p((function(){return document.getElementById("search_bar").getElementsByTagName("input")[0].focus()})),A(!B),E(""),void e.preventDefault();if(u===c.KEY_ENTER)e.preventDefault(),s("submit",{entry:R[_]});else if(u===c.KEY_ESCAPE)e.preventDefault(),s("cancel");else if(u===c.KEY_END){var m;D(l),null==(m=document.getElementById(l.toString()))||m.focus(),e.preventDefault()}else if(u===c.KEY_HOME){var f;D(0),null==(f=document.getElementById("0"))||f.focus(),e.preventDefault()}else if(u===c.KEY_TAB&&B){var h=document.getElementById(_.toString());i&&h?h.focus():a&&!i&&a.focus(),e.preventDefault()}else!B&&u>=c.KEY_A&&u<=c.KEY_Z&&!e.ctrlKey&&(e.preventDefault(),e.stopPropagation(),t=u,o=String.fromCharCode(t),r=v.findIndex((function(e,t){return(null==e?void 0:e.toLowerCase().startsWith(null==o?void 0:o.toLowerCase()))&&t>_})),-1===r&&(r=v.findIndex((function(e,t){return(null==e?void 0:e.toLowerCase().startsWith(null==o?void 0:o.toLowerCase()))&&t<=_}))),-1!==r&&(D(r),null==(n=document.getElementById(r.toString()))||n.focus()))}},children:(0,o.createComponentVNode)(2,i.Section,{buttons:(0,o.createComponentVNode)(2,i.Button,{compact:!0,icon:B?"search":"font",selected:!0,tooltip:B?"Search Mode. Type to search or use arrow keys to select manually.":"Hotkey Mode. Type a letter to jump to the first match. Enter to select.",tooltipPosition:"left",onClick:function(){return A(!B),void E("")}}),className:"ListInput__Section",fill:!0,title:b,children:(0,o.createComponentVNode)(2,i.Stack,{fill:!0,vertical:!0,children:[(0,o.createComponentVNode)(2,i.Stack.Item,{grow:!0,children:(0,o.createComponentVNode)(2,C,{filteredItems:R,onClick:function(e){e!==_&&D(e)},onFocusSearch:function(e){var t=B?document.getElementById("search_bar").getElementsByTagName("input")[0]:null;t.focus(),t.value+=e,F(t.value)},searchBarVisible:B,selected:_,capitalize:S})}),B&&(0,o.createComponentVNode)(2,g,{filteredItems:R,onSearch:F,searchQuery:L,selected:_}),(0,o.createComponentVNode)(2,i.Stack.Item,{children:(0,o.createComponentVNode)(2,a.InputButtons,{input:R[_]})})]})})})]})};var C=function(e,t){var n=(0,u.useBackend)(t).act,r=e.filteredItems,a=e.onClick,c=e.onFocusSearch,l=e.searchBarVisible,d=e.selected,s=e.capitalize;return(0,o.createComponentVNode)(2,i.Section,{fill:!0,scrollable:!0,tabIndex:0,children:r.map((function(e,t){return(0,o.createComponentVNode)(2,i.Button,{color:"transparent",fluid:!0,id:t,onClick:function(){return a(t)},onDblClick:function(e){e.preventDefault(),n("submit",{entry:r[d]})},onkeydown:function(e){var t=window.event?e.which:e.keyCode,n=String.fromCharCode(t);e.shiftKey||(n=n.toLowerCase()),l&&1===e.key.length&&(e.preventDefault(),e.stopPropagation(),c(n))},selected:t===d,style:{animation:"none",transition:"none"},children:s?e.replace(/^\w/,(function(e){return e.toUpperCase()})):e},t)}))})},g=function(e,t){var n=(0,u.useBackend)(t).act,r=e.filteredItems,a=e.onSearch,c=e.searchQuery,l=e.selected;return(0,o.createComponentVNode)(2,i.Input,{autoFocus:!0,autoSelect:!0,fluid:!0,id:"search_bar",onEnter:function(e){e.preventDefault(),n("submit",{entry:r[l]})},onInput:function(e,t){return a(t)},placeholder:"Search...",value:c})}},56596:function(e,t,n){"use strict";t.__esModule=!0,t.LocalGenerator=void 0;var o=n(96323),r=n(31246),a=n(2381),i=n(26949),c=n(41161);t.LocalGenerator=function(e,t){var n=(0,r.useBackend)(t),l=n.act,u=n.data,d=u.name,s=u.holding,p=u.internalCell,m=u.connectedAPC,f=u.chargeAPC,h=u.boltsStatus,C=u.generatorStatus;return(0,o.createComponentVNode)(2,a.Window,{title:d,width:300,height:470,children:(0,o.createComponentVNode)(2,a.Window.Content,{children:(0,o.createComponentVNode)(2,i.Stack,{vertical:!0,children:[(0,o.createComponentVNode)(2,i.Section,{title:"Generator",children:(0,o.createComponentVNode)(2,i.Stack,{vertical:!0,children:[(0,o.createComponentVNode)(2,i.Stack.Item,{children:(0,o.createComponentVNode)(2,i.Stack,{align:"baseline",children:[(0,o.createComponentVNode)(2,i.Stack.Item,{basis:"50%",children:(0,o.createComponentVNode)(2,i.Button,{width:11.4,onClick:function(){l("toggle-bolts")},icon:h?"toggle-on":"toggle-off",children:"Toggle Floor Bolts"})}),(0,o.createComponentVNode)(2,i.Stack.Item,{children:"Status:"}),h?(0,o.createComponentVNode)(2,i.Stack.Item,{color:"good",children:"ACTIVE"}):(0,o.createComponentVNode)(2,i.Stack.Item,{color:"average",children:"INACTIVE"})]})}),(0,o.createComponentVNode)(2,i.Stack.Item,{children:(0,o.createComponentVNode)(2,i.Stack,{align:"baseline",children:[(0,o.createComponentVNode)(2,i.Stack.Item,{basis:"50%",children:(0,o.createComponentVNode)(2,i.Button,{width:11.4,onClick:function(){l("toggle-generator")},icon:C?"toggle-on":"toggle-off",children:"Toggle Generator"})}),(0,o.createComponentVNode)(2,i.Stack.Item,{children:"Status:"}),C?(0,o.createComponentVNode)(2,i.Stack.Item,{color:"good",children:"ACTIVE"}):(0,o.createComponentVNode)(2,i.Stack.Item,{color:"average",children:"INACTIVE"})]})}),(0,o.createComponentVNode)(2,i.Stack.Item,{children:(0,o.createComponentVNode)(2,i.Stack,{align:"baseline",children:[(0,o.createComponentVNode)(2,i.Stack.Item,{basis:"50%",children:(0,o.createComponentVNode)(2,i.Button,{width:11.4,onClick:function(){l("swap-target")},icon:"bolt",children:"Change Target"})}),(0,o.createComponentVNode)(2,i.Stack.Item,{children:"Target:"}),f?(0,o.createComponentVNode)(2,i.Stack.Item,{color:"good",children:"APC"}):(0,o.createComponentVNode)(2,i.Stack.Item,{color:"good",children:"CELL"})]})})]})}),(0,o.createComponentVNode)(2,c.PortableHoldingTank,{holding:s,onEjectTank:function(){l("eject-tank")}}),(0,o.createComponentVNode)(2,i.Section,{title:"Internal Cell",height:7.25,buttons:(0,o.createComponentVNode)(2,i.Button,{icon:"eject",disabled:!p,onClick:function(){l("eject-cell")},children:"Eject"}),children:p?(0,o.createComponentVNode)(2,i.Stack,{vertical:!0,children:[(0,o.createComponentVNode)(2,i.Stack.Item,{children:(0,o.createComponentVNode)(2,i.Box,{children:p.name})}),(0,o.createComponentVNode)(2,i.Stack.Item,{children:(0,o.createComponentVNode)(2,i.ProgressBar,{value:p.chargePercent,minValue:0,maxValue:100,color:p.chargePercent<20?"red":p.chargePercent<50?"yellow":"green"})})]}):(0,o.createComponentVNode)(2,i.Box,{color:"average",children:"No cell"})}),(0,o.createComponentVNode)(2,i.Section,{title:"Local APC",height:7.25,buttons:(0,o.createComponentVNode)(2,i.Button,{icon:"wifi",disabled:!s,onClick:function(){l("connect-APC")},children:"Connect"}),children:m?(0,o.createComponentVNode)(2,i.Stack,{vertical:!0,children:[(0,o.createComponentVNode)(2,i.Stack.Item,{children:(0,o.createComponentVNode)(2,i.Box,{children:m.name})}),(0,o.createComponentVNode)(2,i.Stack.Item,{children:(0,o.createComponentVNode)(2,i.ProgressBar,{value:m.chargePercent,minValue:0,maxValue:100,color:m.chargePercent<20?"red":m.chargePercent<50?"yellow":"green"})})]}):(0,o.createComponentVNode)(2,i.Box,{color:"average",children:"No connected APC"})})]})})})}},83329:function(){},56403:function(e,t,n){"use strict";t.__esModule=!0,t.LongRangeTeleporter=void 0;var o=n(96323),r=n(31246),a=n(26949),i=n(2381);t.LongRangeTeleporter=function(e,t){var n=(0,r.useBackend)(t),c=n.act,l=n.data,u=l.destinations,d=l.receive_allowed,s=l.send_allowed,p=l.syndicate;return(0,o.createComponentVNode)(2,i.Window,{theme:p?"syndicate":"ntos",width:390,height:380,children:(0,o.createComponentVNode)(2,i.Window.Content,{children:(0,o.createComponentVNode)(2,a.Section,{title:"Destinations",children:(0,o.createComponentVNode)(2,a.LabeledList,{children:u.length?u.map((function(e){return(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:e.destination,children:[!!s&&(0,o.createComponentVNode)(2,a.Button,{icon:"sign-out-alt",onClick:function(){return c("send",{target:e.ref,name:e.destination})},children:"Send"}),!!d&&(0,o.createComponentVNode)(2,a.Button,{icon:"sign-in-alt",onClick:function(){return c("receive",{target:e.ref,name:e.destination})},children:"Receive"})]},e.destination)})):(0,o.createComponentVNode)(2,a.LabeledList.Item,{children:"No destinations are currently available."})})})})})}},46045:function(e,t,n){"use strict";t.__esModule=!0,t.MechanicalDropper=void 0;var o=n(96323),r=n(2381),a=n(31246),i=n(51418),c=n(97622),l=n(26949),u=function(e){var t=e.transferMode,n=e.onTransferModeChange;return(0,o.createComponentVNode)(2,l.Section,{fitted:!0,py:.6,pl:.6,pr:1.2,children:(0,o.createComponentVNode)(2,l.Tabs,{vertical:!0,children:[(0,o.createComponentVNode)(2,l.Tabs.Tab,{selected:0===t,color:"green",onClick:function(){return n(0)},children:"Draw"}),(0,o.createComponentVNode)(2,l.Tabs.Tab,{selected:1===t,color:"red",onClick:function(){return n(1)},children:"Drop"})]})})},d=function(e){var t=e.curTransferAmt,n=e.minTransferAmt,r=e.maxTransferAmt,a=e.onTransferAmtChange,c=e.reagents;return(0,o.createComponentVNode)(2,l.Section,{children:[(0,o.createComponentVNode)(2,i.ReagentBar,{container:c}),(0,o.createComponentVNode)(2,l.Stack,{align:"center",children:[(0,o.createComponentVNode)(2,l.Stack.Item,{children:(0,o.createComponentVNode)(2,l.Button,{textAlign:"center",width:"3em",content:"Min",onClick:function(){return a(n)}})}),(0,o.createComponentVNode)(2,l.Stack.Item,{grow:!0,children:(0,o.createComponentVNode)(2,l.Slider,{minValue:n,maxValue:r,stepPixelSize:20,step:1,value:t,onChange:function(e,t){return a(t)}})}),(0,o.createComponentVNode)(2,l.Stack.Item,{children:(0,o.createComponentVNode)(2,l.Button,{textAlign:"center",width:"3em",content:"Max",onClick:function(){return a(r)}})})]})]})};t.MechanicalDropper=function(e,t){var n=(0,a.useBackend)(t),i=n.act,s=n.data,p=s.curTransferAmt,m=s.minTransferAmt,f=s.maxTransferAmt,h=s.transferMode,C=s.reagents;return(0,o.createComponentVNode)(2,r.Window,{title:"Mechanical Dropper",width:400,height:105,children:(0,o.createComponentVNode)(2,r.Window.Content,{children:(0,o.createComponentVNode)(2,l.Stack,{children:[(0,o.createComponentVNode)(2,l.Stack.Item,{align:"center",children:(0,o.createComponentVNode)(2,u,{transferMode:h,onTransferModeChange:function(e){i("mode",{mode:e})}})}),(0,o.createComponentVNode)(2,l.Stack.Item,{grow:!0,children:(0,o.createComponentVNode)(2,d,{curTransferAmt:p,minTransferAmt:m,maxTransferAmt:f,onTransferAmtChange:function(e){e=(0,c.round)((0,c.clamp)(e,m,f),1),i("amt",{amt:e})},reagents:C})})]})})})}},17526:function(e,t,n){"use strict";t.__esModule=!0,t.MineralMagnet=void 0;var o=n(96323),r=n(31246),a=n(26949),i=n(1033),c=n(2381);t.MineralMagnet=function(e,t){var n,l=(0,r.useBackend)(t),u=l.act,d=l.data,s=d.isLinked,p=d.magnetActive,m=d.magnetAutomaticMode,f=d.magnetCooldownOverride,h=d.magnetHealth,C=d.magnetLastUsed,g=d.time,N=d.linkedMagnets||[],v=d.miningEncounters||[],b=C>g,V=(0,r.useLocalState)(t,"viewEncounters",!1),y=V[0],x=V[1];return(0,o.createComponentVNode)(2,c.Window,{width:300,height:240,children:(0,o.createComponentVNode)(2,c.Window.Content,{children:[(0,o.createComponentVNode)(2,a.Section,{title:"Magnet Status",children:[(0,o.createComponentVNode)(2,a.Box,{children:["Condition: ",s?(n=h,n>=95?(0,o.createComponentVNode)(2,a.Box,{inline:!0,color:"good",children:"Optimal"}):n>=70?(0,o.createComponentVNode)(2,a.Box,{inline:!0,color:"olive",children:"Mild Structural Damage"}):n>=40?(0,o.createComponentVNode)(2,a.Box,{inline:!0,color:"yellow",children:"Heavy Structural Damage"}):n>=10?(0,o.createComponentVNode)(2,a.Box,{inline:!0,color:"average",children:"Extreme Structural Damage"}):(0,o.createComponentVNode)(2,a.Box,{inline:!0,color:"bad",children:"Destruction Imminent"})):(0,o.createComponentVNode)(2,a.Box,{inline:!0,color:"bad",children:"No Magnet Linked"})]}),(0,o.createComponentVNode)(2,a.Box,{children:["Status: ",p?"Pulling New Mineral Source":b?(0,o.createFragment)([(0,o.createTextVNode)("Cooling Down: "),(0,o.createComponentVNode)(2,a.TimeDisplay,{value:Math.max(C-g,0),timing:!0,format:function(e){return(0,i.formatTime)(e)}})],4):"Idle"]})]}),(0,o.createComponentVNode)(2,a.Section,{title:"Magnet Controls",buttons:(0,o.createComponentVNode)(2,a.Button,{textAlign:"center",icon:"rss",onClick:function(){return u("geoscan")},children:"Scan"}),children:[(!!p||b&&!f)&&(0,o.createComponentVNode)(2,a.Dimmer,{fontSize:1.75,pb:2,children:p?"Magnet Active":"On Cooldown"}),(0,o.createComponentVNode)(2,a.Button,{textAlign:"center",color:b&&f&&"average",icon:"magnet",onClick:function(){return u("activatemagnet")},fluid:!0,children:"Activate Magnet"}),(0,o.createComponentVNode)(2,a.Button,{textAlign:"center",color:b&&f&&"average",icon:"search",disabled:!v.length,onClick:function(){return x(!0)},fluid:!0,children:"Activate telescope location"}),(0,o.createComponentVNode)(2,a.Button.Checkbox,{checked:f,onClick:function(){return u("overridecooldown")},style:{"z-index":"1"},children:"Override Cooldown"}),(0,o.createComponentVNode)(2,a.Button.Checkbox,{checked:m,onClick:function(){return u("automode")},style:{"z-index":"1"},children:"Automatic Mode"})]}),y&&(0,o.createComponentVNode)(2,a.Modal,{full:!0,ml:1,width:"230px",height:"200px",children:(0,o.createComponentVNode)(2,a.Stack,{vertical:!0,fill:!0,children:[(0,o.createComponentVNode)(2,a.Stack.Item,{grow:!0,children:(0,o.createComponentVNode)(2,a.Section,{scrollable:!0,fill:!0,children:v.map((function(e){return(0,o.createComponentVNode)(2,a.Button,{onClick:function(){u("activateselectable",{encounter_id:e.id}),x(!1)},fluid:!0,children:e.name},e.id)}))})}),(0,o.createComponentVNode)(2,a.Stack.Item,{children:(0,o.createComponentVNode)(2,a.Flex,{children:[(0,o.createComponentVNode)(2,a.Flex.Item,{grow:!0,pt:.5,color:"label",children:[(0,o.createComponentVNode)(2,a.Icon,{name:"search"})," Choose a location"]}),(0,o.createComponentVNode)(2,a.Flex.Item,{children:(0,o.createComponentVNode)(2,a.Button,{color:"bad",icon:"times",onClick:function(){return x(!1)},children:"Cancel"})})]})})]})}),!!s||(0,o.createComponentVNode)(2,a.Modal,{full:!0,ml:1,width:"270px",height:"200px",children:(0,o.createComponentVNode)(2,a.Section,{title:"Choose Linked Magnet",scrollable:!0,fill:!0,children:[(0,o.createComponentVNode)(2,a.Button,{textAlign:"center",icon:"rss",fluid:!0,onClick:function(){return u("magnetscan")},children:"Scan for Magnets"}),(0,o.createComponentVNode)(2,a.Divider),N.map((function(e){var t;return(0,o.createComponentVNode)(2,a.Button,{icon:e.angle===undefined?"circle":"arrow-right",iconRotation:null!=(t=e.angle)?t:0,textAlign:"center",fluid:!0,onClick:function(){return u("linkmagnet",e)},children:e.name+" at ("+e.x+", "+e.y+")"},e.ref)}))]})})]})})}},2960:function(e,t,n){"use strict";t.__esModule=!0,t.Minimap=void 0;var o=n(96323),r=n(31246),a=n(26949),i=n(2381);t.Minimap=function(e,t){var n=(0,r.useBackend)(t).data,c=n.title,l=n.theme,u=n.minimap_id;return(0,o.createComponentVNode)(2,i.Window,{title:c,theme:l,width:610,height:640,children:(0,o.createComponentVNode)(2,i.Window.Content,{children:(0,o.createComponentVNode)(2,a.ByondUi,{params:{id:u,type:"map"},style:{width:"600px",height:"600px"}})})})}},3082:function(e,t,n){"use strict";t.__esModule=!0,t.MinimapController=void 0;var o=n(96323),r=n(31246),a=n(26949),i=n(2381),c=n(18331);t.MinimapController=function(e,t){var n=(0,r.useBackend)(t),l=n.act,u=n.data,d=u.title,s=u.theme,p=u.minimap_id,m=u.markers_visible,f=u.selecting_coordinates,h=u.minimap_markers,C=u.placable_marker_states,g=u.placable_marker_images,N=u.icon,v=u.image,b=u.pos_x,V=u.pos_y,y=(0,r.useLocalState)(t,"name"),x=y[0],k=y[1],S=(0,r.useLocalState)(t,"show_menu",!1),I=S[0],w=S[1];return(0,o.createComponentVNode)(2,i.Window,{title:d,theme:s,width:750,height:390,children:(0,o.createComponentVNode)(2,i.Window.Content,{children:(0,o.createComponentVNode)(2,a.Stack,{justify:"center",children:[(0,o.createComponentVNode)(2,a.Stack.Item,{children:(0,o.createComponentVNode)(2,a.Section,{title:"Minimap",fill:!0,buttons:(0,o.createComponentVNode)(2,a.Button,{icon:"undo",color:"green",content:"Reset Map Scale",onClick:function(){return l("reset_scale")}}),children:(0,o.createComponentVNode)(2,a.Flex,{children:(0,o.createComponentVNode)(2,a.Flex.Item,{children:(0,o.createComponentVNode)(2,a.ByondUi,{params:{id:p,type:"map"},style:{width:"300px",height:"300px"}})})})})}),(0,o.createComponentVNode)(2,a.Stack.Item,{grow:!0,children:(0,o.createComponentVNode)(2,a.Section,{title:"Minimap Markers",fill:!0,buttons:(0,o.createComponentVNode)(2,a.Box,{children:[(0,o.createComponentVNode)(2,a.Button,{icon:"plus",color:"green",content:"New",onClick:function(){return w(!I)}}),(0,o.createComponentVNode)(2,a.Button,{icon:m?"eye-slash":"eye",color:m?"red":"green",content:m?"Hide All":"Show All",onClick:function(){return l("toggle_visibility_all")}})]}),children:[!!I&&(0,o.createComponentVNode)(2,a.Modal,{mr:2,children:(0,o.createComponentVNode)(2,a.Box,{children:(0,o.createComponentVNode)(2,a.Flex,{children:[(0,o.createComponentVNode)(2,a.Flex.Item,{backgroundColor:"black",children:(0,o.createComponentVNode)(2,a.Image,{pixelated:!0,height:"150px",width:"150px",src:"data:image/png;base64,"+v})}),(0,o.createComponentVNode)(2,a.Flex.Item,{ml:"10px",children:[(0,o.createComponentVNode)(2,a.Input,{placeholder:"Marker Name",fluid:!0,value:x,onChange:function(e,t){return k(t)}}),(0,o.createComponentVNode)(2,a.Dropdown,{selected:N,width:"150px",options:C,onSelected:function(e){return function(e){u.icon=e,u.image=g[e],l("update_icon",{icon:e})}(e)},mt:"10px"}),(0,o.createComponentVNode)(2,a.Flex,{mt:"10px",justify:"space-between",children:[(0,o.createComponentVNode)(2,a.Flex.Item,{children:(0,o.createComponentVNode)(2,a.NumberInput,{className:"minimap-controller__number-inputs",minValue:1,maxValue:300,value:b,format:function(e){return"x, "+e},onDrag:function(e,t){return function(e){u.pos_x=e}(t)}})}),(0,o.createComponentVNode)(2,a.Flex.Item,{children:(0,o.createComponentVNode)(2,a.NumberInput,{className:"minimap-controller__number-inputs",minValue:1,maxValue:300,value:V,format:function(e){return"y, "+e},onDrag:function(e,t){return function(e){u.pos_y=e}(t)}})})]}),(0,o.createComponentVNode)(2,a.Button,{fluid:!0,textAlign:"center",color:f?"orange":"default",content:f?"Select Position":"Select (x, y) From Map",onClick:function(){return l("location_from_minimap")},mt:"10px"}),(0,o.createComponentVNode)(2,a.Flex,{mt:"20px",justify:"space-between",children:[(0,o.createComponentVNode)(2,a.Flex.Item,{children:(0,o.createComponentVNode)(2,a.Button,{icon:"check",color:"green",content:"Confirm",onClick:function(){return w(!I),void l("new_marker",{name:x,icon:N,pos_x:b,pos_y:V})}})}),(0,o.createComponentVNode)(2,a.Flex.Item,{children:(0,o.createComponentVNode)(2,a.Button,{icon:"xmark",color:"red",content:"Cancel",onClick:function(){return w(!I),void l("cancel_new_marker")}})})]})]})]})})}),(0,o.createComponentVNode)(2,a.Section,{scrollable:!0,fill:!0,children:(0,o.createComponentVNode)(2,a.Flex,{direction:"column",children:(0,o.createComponentVNode)(2,a.Flex.Item,{children:(0,o.createComponentVNode)(2,a.Flex.Item,{children:Object.keys(h).map((function(e){return(0,o.createComponentVNode)(2,a.Flex,{className:"minimap-controller__marker-list",children:[(0,o.createComponentVNode)(2,a.Flex.Item,{inline:!0,children:[(0,o.createComponentVNode)(2,a.Flex.Item,{fontSize:1.1,bold:!0,children:(0,c.capitalize)(u.minimap_markers[e].name)}),(0,o.createComponentVNode)(2,a.Flex.Item,{inline:!0,lineHeight:1.7,children:u.minimap_markers[e].pos})]}),(0,o.createComponentVNode)(2,a.Flex.Item,{inline:!0,children:[(0,o.createComponentVNode)(2,a.Button,{className:"minimap-controller__buttons",icon:u.minimap_markers[e].visible?"eye":"eye-slash",color:u.minimap_markers[e].visible?"green":"red",onClick:function(){return l("toggle_visibility",{index:u.minimap_markers[e].index})}}),(0,o.createComponentVNode)(2,a.Button,{className:"minimap-controller__buttons",icon:"trash-alt",color:"red",disabled:!u.minimap_markers[e].can_be_deleted,onClick:function(){return l("delete_marker",{index:u.minimap_markers[e].index})}})]})]},u.minimap_markers[e])}))})})})})]})})]})})})}},93663:function(e,t,n){"use strict";t.__esModule=!0,t.MixerMachine=t.MixerItem=void 0;var o=n(96323),r=n(31246),a=n(26949),i=n(2381),c=function(e,t){var n=(0,r.useBackend)(t).act,i=e.mixerItem,c=e.working;return(0,o.createComponentVNode)(2,a.Flex,{children:[(0,o.createComponentVNode)(2,a.Image,{verticalAlign:"middle",height:"24px",width:"24px",src:"data:image/png;base64,"+i.iconData}),(0,o.createComponentVNode)(2,a.Button,{nowrap:!0,icon:"eject",color:"blue",title:"Eject "+i.name,textAlign:"center",disabled:c,onClick:function(){return n("eject",{index:i.index})}}),(0,o.createComponentVNode)(2,a.Box,{nowrap:!0,as:"span",m:"0.25rem",textAlign:"center",children:i.name},i.index)]})};t.MixerItem=c;t.MixerMachine=function(e,t){var n=(0,r.useBackend)(t),l=n.data,u=n.act,d=l.mixerContents;return(0,o.createComponentVNode)(2,i.Window,{title:"Kitchen Helper",width:500,height:220,children:(0,o.createComponentVNode)(2,i.Window.Content,{children:(0,o.createComponentVNode)(2,a.Stack,{m:"0.25rem",vertical:!0,fill:!0,children:[(0,o.createComponentVNode)(2,a.Stack.Item,{grow:1,children:(0,o.createComponentVNode)(2,a.Section,{fill:!0,title:"Contents: ("+d.length+"/"+l.maxItems+")",children:d.length>0?d.map((function(e){return(0,o.createComponentVNode)(2,c,{mixerItem:e,working:l.working},e.index)})):"No contents in mixer"})}),(0,o.createComponentVNode)(2,a.Stack.Item,{m:".25rem",children:[(0,o.createComponentVNode)(2,a.Button,{mt:"0.5rem",backgroundColor:"green",icon:"check",title:"Start Mixing",textAlign:"center",disabled:l.working||0===d.length,onClick:function(){return u("mix",{})},children:"Mix"}),(0,o.createComponentVNode)(2,a.Button,{backgroundColor:"blue",icon:"eject",title:"Eject All",textAlign:"center",disabled:l.working||0===d.length,onClick:function(){return u("ejectAll",{})},children:"Eject All"})]})]})})})}},5244:function(e,t,n){"use strict";t.__esModule=!0,t.MixingDesk=void 0;var o=n(96323),r=n(31246),a=n(26949),i=n(2381),c=n(1033);t.MixingDesk=function(e,t){var n=(0,r.useBackend)(t),l=n.act,u=n.data,d=u.voices,s=u.selected_voice,p=u.say_popup,m=(0,r.useSharedState)(t,"message",null),f=m[0],h=m[1];return(0,o.createComponentVNode)(2,i.Window,{height:375,width:370,children:(0,o.createComponentVNode)(2,i.Window.Content,{onkeydown:function(e){var t=String.fromCharCode(e.keyCode),n=!0;if("T"===t)l("say_popup");else if(27===e.keyCode&&p)l("cancel_say"),h("");else if(p)n=!1;else{var o=Number(t);String(o)===t?l("switch_voice",{id:o}):n=!1}n&&e.stopPropagation()},children:[!!p&&(0,o.createComponentVNode)(2,a.Modal,{children:["Say as ",s>0&&s<=d.length?d[s-1].name:"yourself",":",(0,o.createVNode)(1,"br"),(0,o.createComponentVNode)(2,a.Box,{pt:"5px",pr:"10px",textAlign:"center",children:(0,o.createComponentVNode)(2,a.Input,{autoFocus:!0,selfClear:!0,width:20,value:f,onEnter:function(e,t){window.focus(),l("say",{message:t}),h("")},onChange:function(e,t){return h(t)}})}),(0,o.createVNode)(1,"br"),(0,o.createComponentVNode)(2,a.Box,{textAlign:"center",children:[(0,o.createComponentVNode)(2,a.Button,{onClick:function(){l("say",{message:f}),h("")},children:"Say"}),(0,o.createComponentVNode)(2,a.Button,{onClick:function(){l("cancel_say"),h("")},children:"Cancel"})]})]}),(0,o.createComponentVNode)(2,a.Section,{title:"Voice Synthesizer",children:[(0,o.createComponentVNode)(2,a.Divider),(0,o.createComponentVNode)(2,a.LabeledList,{children:[d.map((function(e,t){return(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:t+1+" "+(0,c.truncate)(e.name,18)+(e.accent?" ["+e.accent+"]":""),labelColor:t+1===s?"red":"label",children:[(0,o.createComponentVNode)(2,a.Button,{icon:"trash-alt",onClick:function(){return l("remove_voice",{id:t+1})}}),(0,o.createComponentVNode)(2,a.Button,{icon:"bullhorn",onClick:function(){return l("say_popup",{id:t+1})}})]},e.name)})),(0,o.createComponentVNode)(2,a.LabeledList.Item,{children:(0,o.createComponentVNode)(2,a.Stack,{align:"center",children:[(0,o.createComponentVNode)(2,a.Stack.Item,{children:(0,o.createComponentVNode)(2,a.Button,{icon:"plus",onClick:function(){return l("add_voice")},disabled:d.length>=9})}),(0,o.createComponentVNode)(2,a.Stack.Item,{children:(0,o.createComponentVNode)(2,a.Tooltip,{position:"right",content:"Press T to talk and 1-9 keys to switch voices. Press 0 to reset to your normal voice.",children:(0,o.createComponentVNode)(2,a.Icon,{name:"question-circle"})})})]})})]})]})]})})}},71417:function(e,t,n){"use strict";t.__esModule=!0,t.MusicInstrument=void 0;var o=n(96323),r=n(1060),a=n(31246),i=n(26949),c=n(2381);t.MusicInstrument=function(e,t){var n=(0,a.useBackend)(t),l=n.act,u=n.data,d=u.name,s=u.notes,p=u.volume,m=u.transpose,f=u.keybindToggle,h=u.noteKeysString,C=(0,a.useLocalState)(t,"keyboardBindingsOrder",h.split("")),g=C[0],N=C[1],v=(0,a.useLocalState)(t,"keyboardActivekeys",{}),b=v[0],V=v[1],y=(0,a.useLocalState)(t,"keyOffset",0),x=y[0],k=y[1],S=function(){l(!f?"play_keyboard_on":"play_keyboard_off")},I=function(e){return e+m>=0&&e+m<s.length},w=function(e){if(I(e)&&!b[e]){l("play_note",{note:e+m,volume:p});var t=b;t[s[e]]=!0,V(t)}},_=function(e){if(I(e)){var t=b;t[s[e]]=!1,V(t)}},D=function(e){var t=x+g.findIndex((function(t){return t===e}));return t>=0?t:-1};return(0,o.createComponentVNode)(2,c.Window,{title:d,width:50+30*s.length,height:410,children:(0,o.createComponentVNode)(2,c.Window.Content,{onKeyUp:function(e){if(f){var t=D(e.key);_(t)}},onKeyDown:function(e){if(f){var t=D(e.key);w(t)}"Control"===e.key&&S()},children:(0,o.createComponentVNode)(2,i.Box,{className:"instrument__keyboardwrapper",children:[(0,o.createComponentVNode)(2,i.Box,{className:"instrument__outerpanel",children:[(0,o.createComponentVNode)(2,i.Box,{className:"instrument__speaker"}),(0,o.createComponentVNode)(2,i.Flex,{direction:"column",children:[(0,o.createComponentVNode)(2,i.Box,{className:"instrument__panel",children:[(0,o.createComponentVNode)(2,i.Box,{className:"instrument__keyboardsupport",children:[(0,o.createComponentVNode)(2,i.Button,{className:"instrument__toggle-keyboard-button",title:"Toggle keyboard support (toggle with ctrl)",onClick:S,icon:"keyboard"}),(0,o.createComponentVNode)(2,i.Box,{className:"instrument__keybind-indicator",style:{"box-shadow":"0px 0px 5px "+(f?"#1b9b37":"#5a1919"),background:f?"#1b9b37":"#5a1919"}})]}),(0,o.createComponentVNode)(2,i.Box,{className:"instrument__panel-input",children:[(0,o.createComponentVNode)(2,i.Knob,{animated:!0,stepPixelSize:24,minValue:-24,maxValue:24,value:x,onDrag:function(e,t){return k(t)},title:"Keybind offset"}),(0,o.createVNode)(1,"span",null,"Offset",16)]}),(0,o.createComponentVNode)(2,i.Box,{className:"instrument_panel-info",children:(0,o.createVNode)(1,"h1",null,d.toUpperCase(),0,{style:{"text-align":"center"}})}),(0,o.createComponentVNode)(2,i.Box,{className:"instrument__panel-input",children:[(0,o.createComponentVNode)(2,i.Knob,{animated:!0,stepPixelSize:1,minValue:0,maxValue:100,title:"Volume",value:p,onDrag:function(e,t){l("set_volume",{value:t})}}),(0,o.createVNode)(1,"span",null,"Volume",16)]}),(0,o.createComponentVNode)(2,i.Box,{className:"instrument__panel-input",children:[(0,o.createComponentVNode)(2,i.Knob,{animated:!0,stepPixelSize:6,minValue:-12,maxValue:12,title:"Transpose",value:m,onDrag:function(e,t){l("set_transpose",{value:t})}}),(0,o.createVNode)(1,"span",null,"Transpose",16)]})]}),(0,o.createComponentVNode)(2,i.Box,{className:"instrument__keyorder",children:[(0,o.createComponentVNode)(2,i.Box,{className:"instrument__instructions",fontSize:"1.1em",children:"Key binding order for keyboard input"}),(0,o.createComponentVNode)(2,i.Input,{className:"instrument__input_keyorder",value:g.join(""),onInput:function(e,t){return N(t.split(""))}}),(0,o.createComponentVNode)(2,i.Box,{className:"instrument__instructions",fontSize:"0.8em",bold:!0,children:"Type in the order you wish the keybindings to be placed"})]})]}),(0,o.createComponentVNode)(2,i.Box,{className:"instrument__speaker"})]}),(0,o.createVNode)(1,"ul","instruments__piano",s.map((function(e,t){var n=e.includes("-"),a=g[t-x],c=n?"instruments__piano-key-black":"instruments__piano-key-white",l=["d","e","g","a","b"].includes(e.split("")[0])&&!n?"instruments__piano-key-white-offset":"";return(0,o.createVNode)(1,"li",(0,r.classes)(["instruments__piano-key",c,l,b[s[t]]?n?"instruments__piano-key-black-active":"instruments__piano-key-white-active":""]),(0,o.createComponentVNode)(2,i.Box,{className:"instruments__notedetails",children:[a&&(0,o.createComponentVNode)(2,i.Box,{className:"instruments__notekey",children:a}),(0,o.createComponentVNode)(2,i.Box,{className:"instruments__notename",children:e.replace("-","#")})]}),2,{onMouseDown:function(){return w(t)},onMouseLeave:function(){return _(t)},onMouseUp:function(){return _(t)}},t)})),0)]})})})}},14086:function(e,t,n){"use strict";t.__esModule=!0,t.NuclearReactor=void 0;var o=n(96323),r=n(31246),a=n(26949),i=n(2381),c=n(18331),l=n(48175),u=n(97622),d=273.15,s=function(e){var t=e.onClick,n=e.components,r=e.rowID,i=e.emptySlotIcon;return(0,o.createComponentVNode)(2,a.Table.Row,{children:n.map((function(e,n){if(null===e)return(0,o.createComponentVNode)(2,a.Table.Cell,{children:(0,o.createComponentVNode)(2,a.Button,{fluid:!0,color:"transparent",m:1,onClick:function(){return t("slot",{x:r+1,y:n+1})},children:(0,o.createVNode)(1,"img",null,null,1,{src:"data:image/png;base64,"+i,style:{"vertical-align":"middle","border-color":"#AAAAAA","border-style":"solid","border-radius":"4px","horizontal-align":"middle"}})},name)});var s=e.x,p=e.y,m=e.name,f=e.img,h=e.temp,C=e.extra,g=e.flux;return(0,o.createComponentVNode)(2,a.Table.Cell,{children:(0,o.createComponentVNode)(2,a.Button,{fluid:!0,tooltip:(0,o.createFragment)([(0,c.capitalize)(m),(0,o.createVNode)(1,"br"),(0,u.round)(h-d,2),(0,o.createTextVNode)(" \xb0C"),""!==C?(0,o.createFragment)([(0,o.createVNode)(1,"br"),C],0):"",null!==g?(0,o.createFragment)([(0,o.createVNode)(1,"br"),g,(0,o.createTextVNode)(" Neutrons")],0):""],0),color:"transparent",m:1,onClick:function(){return t("slot",{x:s,y:p})},children:(0,o.createVNode)(1,"img",null,null,1,{src:"data:image/png;base64,"+f,style:{"box-shadow":"0px 0px 20px "+(0,l.getTemperatureColor)(h,2e3),"vertical-align":"middle","border-color":""+(0,l.getTemperatureColor)(h,2e3),"border-style":"solid","border-radius":"4px","horizontal-align":"middle"}})},m)})}))})},p=function(e){var t=e.onClick,n=e.components,r=e.emptySlotIcon;return(0,o.createComponentVNode)(2,a.Table,{children:n.map((function(e,n){e.comp;return(0,o.createComponentVNode)(2,a.Table.Row,{children:(0,o.createComponentVNode)(2,s,{rowID:n,components:e,onClick:t,emptySlotIcon:r})},!0)}))})};t.NuclearReactor=function(e,t){var n=(0,r.useBackend)(t),c=n.act,l=n.data,s=l.gridW,m=l.gridH,f=l.emptySlotIcon,h=l.components,C=l.reactorTemp,g=l.reactorRads,N=l.configuredControlRodLevel,v=l.actualControlRodLevel;return(0,o.createComponentVNode)(2,i.Window,{resizable:!0,title:"Nuclear Reactor",width:500,height:700,children:(0,o.createComponentVNode)(2,i.Window.Content,{children:[(0,o.createComponentVNode)(2,a.Section,{children:(0,o.createComponentVNode)(2,p,{gridW:s,gridH:m,onClick:c,components:h,emptySlotIcon:f})}),(0,o.createComponentVNode)(2,a.Section,{children:(0,o.createComponentVNode)(2,a.Flex,{justify:"space-between",align:"center",children:[(0,o.createComponentVNode)(2,a.Flex.Item,{children:[(0,o.createComponentVNode)(2,a.Box,{children:"Reactor Temperature:"}),(0,o.createComponentVNode)(2,a.RoundGauge,{minValue:0-d,maxValue:1500,size:5,value:C,format:function(e){return(0,u.round)(e-d,2)+" \xb0C"},alertAfter:1200,ranges:{good:[0-d,1e3],average:[1e3,1200],bad:[1200,1500]}})]}),(0,o.createComponentVNode)(2,a.Flex.Item,{children:[(0,o.createComponentVNode)(2,a.Box,{children:"Radiation Level:"}),(0,o.createComponentVNode)(2,a.RoundGauge,{minValue:0,maxValue:100,size:5,value:g,format:function(e){return(0,u.round)(e,1)+" clicks"},alertAfter:15,ranges:{good:[0,5],average:[5,50],bad:[50,100]}})]})]})}),(0,o.createComponentVNode)(2,a.Section,{children:(0,o.createComponentVNode)(2,a.Flex,{justify:"space-between",align:"center",children:[(0,o.createComponentVNode)(2,a.Flex.Item,{children:[(0,o.createComponentVNode)(2,a.Box,{children:"Control Rod Insertion:"}),(0,o.createComponentVNode)(2,a.RoundGauge,{minValue:0,maxValue:100,size:5,value:v,format:function(e){return(0,u.round)(e,1)+"%"},alertBefore:20,ranges:{bad:[0,20],average:[20,80],good:[80,100]}})]}),(0,o.createComponentVNode)(2,a.Flex.Item,{children:[(0,o.createComponentVNode)(2,a.Button,{color:"transparent",icon:"angle-double-left",onClick:function(){return c("adjustCR",{crvalue:0})}}),(0,o.createComponentVNode)(2,a.Button,{color:"transparent",icon:"angle-left",onClick:function(){return c("adjustCR",{crvalue:N-5})}}),N," %",(0,o.createComponentVNode)(2,a.Button,{color:"transparent",icon:"angle-right",onClick:function(){return c("adjustCR",{crvalue:N+5})}}),(0,o.createComponentVNode)(2,a.Button,{color:"transparent",icon:"angle-double-right",onClick:function(){return c("adjustCR",{crvalue:100})}}),(0,o.createComponentVNode)(2,a.Knob,{animated:!0,size:3,value:N,minValue:0,maxValue:100,format:function(e){return e+"%"},onDrag:function(e,t){return c("adjustCR",{crvalue:t})}})]})]})})]})})}},12660:function(e,t,n){"use strict";t.__esModule=!0,t.NumberInputModal=void 0;var o=n(96323),r=n(55631),a=n(34277),i=n(57890),c=n(31246),l=n(26949),u=n(2381);t.NumberInputModal=function(e,t){var n=(0,c.useBackend)(t),s=n.act,p=n.data,m=p.message,f=p.init_value,h=p.round_input,C=p.timeout,g=p.title,N=p.theme,v=(0,c.useLocalState)(t,"input",f),b=v[0],V=v[1],y=125+Math.ceil((null==m?void 0:m.length)/3);return(0,o.createComponentVNode)(2,u.Window,{title:g,width:270,height:y,theme:N||"nanotrasen",children:[C&&(0,o.createComponentVNode)(2,r.Loader,{value:C}),(0,o.createComponentVNode)(2,u.Window.Content,{onKeyDown:function(e){var t=window.event?e.which:e.keyCode;t===i.KEY_ENTER&&s("submit",{entry:b}),t===i.KEY_ESCAPE&&s("cancel")},children:(0,o.createComponentVNode)(2,l.Section,{fill:!0,children:(0,o.createComponentVNode)(2,l.Stack,{fill:!0,vertical:!0,children:[(0,o.createComponentVNode)(2,l.Stack.Item,{children:(0,o.createComponentVNode)(2,l.Box,{color:"label",children:m})}),(0,o.createComponentVNode)(2,l.Stack.Item,{children:(0,o.createComponentVNode)(2,d,{input:b,onClick:function(e){V(h?Math.round(e):e)},onChange:function(e){V(h?Math.round(e):e)}})}),(0,o.createComponentVNode)(2,l.Stack.Item,{pl:4,pr:4,children:(0,o.createComponentVNode)(2,a.InputButtons,{input:b})})]})})})]})};var d=function(e,t){var n=(0,c.useBackend)(t).data,r=n.min_value,a=n.max_value,i=n.init_value,u=e.input,d=e.onClick,s=e.onChange;return(0,o.createComponentVNode)(2,l.Stack,{fill:!0,children:[(0,o.createComponentVNode)(2,l.Stack.Item,{children:(0,o.createComponentVNode)(2,l.Button,{icon:"angle-double-left",onClick:function(){return d(r||0)},tooltip:"Minimum"})}),(0,o.createComponentVNode)(2,l.Stack.Item,{grow:!0,children:(0,o.createComponentVNode)(2,l.NumberInput,{autoFocus:!0,autoSelect:!0,fluid:!0,minValue:r,maxValue:a,onChange:function(e,t){return s(t)},onDrag:function(e,t){return s(t)},value:null!==u?u:i})}),(0,o.createComponentVNode)(2,l.Stack.Item,{children:(0,o.createComponentVNode)(2,l.Button,{icon:"angle-double-right",onClick:function(){return d(null!==a?a:1e4)},tooltip:"Max"})}),(0,o.createComponentVNode)(2,l.Stack.Item,{children:(0,o.createComponentVNode)(2,l.Button,{icon:"redo",onClick:function(){return d(i||0)},tooltip:"Reset"})})]})}},55223:function(e,t,n){"use strict";t.__esModule=!0,t.ObserverMenu=void 0;var o=n(96323),r=n(31246),a=n(2381),i=n(26949),c=function(e,t){var n=(0,r.useBackend)(t).act,a=e.obsObject,c=null,l=a.name,u=null;return a.dead&&(c="skull"),a.name!==a.real_name&&(l+=" ("+a.real_name+")"),null!==a.job&&(u="Job: "+a.job),a.dup_name_count>0&&(l+=" #"+a.dup_name_count),a.ghost_count>0&&(c="ghost",l=a.ghost_count+" "+l),null!==a.antag&&(l+=" ["+a.antag+"]"),(0,o.createComponentVNode)(2,i.Button,{icon:c,onClick:function(){return n("observe",{targetref:a.ref})},tooltip:u,children:l},a.ref)};t.ObserverMenu=function(e,t){var n=(0,r.useBackend)(t),l=n.act,u=n.data,d=(0,r.useLocalState)(t,"searchQuery",""),s=d[0],p=d[1],m=u.mydata.filter((function(e){var t,n,o,r;return(null==e||null==(t=e.name)?void 0:t.toLowerCase().includes(s.toLowerCase()))||(null==e||null==(n=e.real_name)?void 0:n.toLowerCase().includes(s.toLowerCase()))||(null==e||null==(o=e.job)?void 0:o.toLowerCase().includes(s.toLowerCase()))||(null==e||null==(r=e.antag)?void 0:r.toLowerCase().includes(s.toLowerCase()))})),f=(0,r.useLocalState)(t,"filterDead",!1),h=f[0],C=f[1];return(0,o.createComponentVNode)(2,a.Window,{title:"Choose something to observe",width:600,height:600,children:(0,o.createComponentVNode)(2,a.Window.Content,{scrollable:!0,children:(0,o.createComponentVNode)(2,i.Section,{fill:!0,title:"Observables",buttons:(0,o.createComponentVNode)(2,i.Flex,{children:[(0,o.createComponentVNode)(2,i.Button,{fluid:!0,id:"random_observe_button",disabled:0===u.mydata.filter((function(e){return e.player&&!e.dead})).length,onClick:function(){var e,t,n;return l("observe",{targetref:null==(t=u.mydata,n=t.filter((function(e){return e.player&&!e.dead})),e=n[Math.floor(Math.random()*n.length)])?void 0:e.ref})},icon:"random",tooltip:"Observe a random player"}),(0,o.createComponentVNode)(2,i.Button.Checkbox,{fluid:!0,icon:"skull",tooltip:h?"Show dead mobs":"Hide dead mobs",id:"dead_filter_button",checked:!h,onClick:function(){return C(!h)}}),(0,o.createComponentVNode)(2,i.Input,{width:20,autoFocus:!0,autoSelect:!0,fluid:!0,id:"search_bar",onInput:function(e,t){var n;(n=t)!==s&&p(n)},placeholder:"Search by name or job",value:s})]}),children:[(0,o.createComponentVNode)(2,i.Collapsible,{title:"Antagonists",open:!!u.dnrset,color:"red",children:[!u.dnrset&&(0,o.createComponentVNode)(2,i.BlockQuote,{children:"You must set DNR to view the antagonists"}),m.filter((function(e){return null!==e.antag&&!(e.dead&&h)})).map((function(e){return(0,o.createComponentVNode)(2,c,{obsObject:e},e.ref)}))]},"Antags"),(0,o.createComponentVNode)(2,i.Collapsible,{title:"Players",open:!0,color:"green",children:m.filter((function(e){return e.player&&!(e.dead&&h)})).map((function(e){return(0,o.createComponentVNode)(2,c,{obsObject:e},e.ref)}))},"Players"),(0,o.createComponentVNode)(2,i.Collapsible,{title:"NPCs",color:"blue",children:m.filter((function(e){return e.npc&&!(e.dead&&h)})).map((function(e){return(0,o.createComponentVNode)(2,c,{obsObject:e},e.ref)}))},"NPCs"),(0,o.createComponentVNode)(2,i.Collapsible,{title:"Objects",color:"brown",children:m.filter((function(e){return!e.npc&&!e.player})).map((function(e){return(0,o.createComponentVNode)(2,c,{obsObject:e},e.ref)}))},"Objects")]})})})}},35851:function(e,t,n){"use strict";t.__esModule=!0,t.OperatingComputer=void 0;var o=n(96323),r=n(31246),a=n(26949),i=n(2381),c=n(65751),l=n(84200),u=n(51418),d=n(818),s=n(18331),p=n(9720);t.OperatingComputer=function(e,t){var n=(0,r.useSharedState)(t,"tabIndex",1),c=n[0],l=n[1];return(0,o.createComponentVNode)(2,i.Window,{title:"Operating Computer",width:"560",height:"760",children:(0,o.createComponentVNode)(2,i.Window.Content,{scrollable:!0,children:[(0,o.createComponentVNode)(2,a.Tabs,{children:(0,o.createComponentVNode)(2,a.Tabs.Tab,{selected:1===c,onClick:function(){return l(1)},children:"Patient Health"})}),(0,o.createComponentVNode)(2,m,{tabIndex:c})]})})};var m=function(e){if(1===e.tabIndex)return(0,o.createComponentVNode)(2,C)},f=function(e){var t=e.occupied,n=e.patient_status,r=e.isCrit,i="NONE",c="grey";return t&&(2===n?(i="DEAD",c="red"):r?(i="CRIT",c="orange"):0!==n&&n?1===n&&(i="UNCON",c="yellow"):(i="STABLE",c="green")),(0,o.createComponentVNode)(2,a.Stack.Item,{width:20,textAlign:"right",children:[(0,o.createComponentVNode)(2,a.Box,{fontSize:1,children:"Status"}),(0,o.createComponentVNode)(2,a.Box,{fontSize:1.5,children:(0,o.createComponentVNode)(2,a.Box,{color:c,children:i})})]})},h=function(e){var t=e.health_text,n=e.health_color;return(0,o.createComponentVNode)(2,a.Stack.Item,{width:20,textAlign:"right",children:[(0,o.createComponentVNode)(2,a.Box,{fontSize:1,children:"Overall Health"}),(0,o.createComponentVNode)(2,a.Box,{fontSize:1.5,children:(0,o.createComponentVNode)(2,a.Box,{color:n,children:[t,(0,o.createComponentVNode)(2,a.Box,{as:"span",color:"white",children:"%"})]})})]})},C=function(e,t){var n=(0,r.useBackend)(t).data;return(0,o.createComponentVNode)(2,a.Section,{children:[(0,o.createComponentVNode)(2,I,{occupied:n.occupied,patient_name:n.patient_name,patient_health:n.current_health,patient_max_health:n.max_health,patient_status:n.patient_status}),(0,o.createComponentVNode)(2,y),(0,o.createComponentVNode)(2,a.Section,{title:"Key Health Indicators",children:(0,o.createComponentVNode)(2,p.KeyHealthIndicators,{mobData:n})}),(0,o.createComponentVNode)(2,x,{occupied:n.occupied,organs:n.organ_status,limbs:n.limb_status}),(0,o.createComponentVNode)(2,k,{occupied:n.occupied,reagent_container:n.reagent_container}),(0,o.createComponentVNode)(2,S,{occupied:n.occupied,age:n.age,blood_type:n.blood_type,blood_color_value:n.blood_color_value,blood_color_name:n.blood_color_name,clone_generation:n.clone_generation,cloner_defect_count:n.cloner_defect_count,genetic_stability:n.genetic_stability})]})},g=function(e){var t=e.metric,n=e.value,r=e.metric_data,i=e.title;return(0,o.createComponentVNode)(2,a.Stack.Item,{width:25,children:(0,o.createComponentVNode)(2,c.HealthStat,{type:t,children:[i,(0,o.createVNode)(1,"br"),(0,o.createComponentVNode)(2,a.Box,{fontSize:4,children:n}),(0,o.createComponentVNode)(2,a.Box,{children:(0,o.createComponentVNode)(2,a.Chart.Line,{mt:"5px",height:"5em",data:r,rangeX:[0,r.length-1],rangeY:[0,Math.max(100,(0,d.getStatsMax)(r))],strokeColor:l.COLORS.damageType[t],fillColor:l.COLORS.damageTypeFill[t]})})]})})},N=function(e){var t=e.occupied,n=e.organs;if(t)return(0,o.createComponentVNode)(2,a.Stack.Item,{width:20,children:(0,o.createComponentVNode)(2,a.Table,{children:[(0,o.createComponentVNode)(2,a.Table.Row,{children:[(0,o.createComponentVNode)(2,a.Table.Cell,{header:!0,textAlign:"right",children:"Organ"}),(0,o.createComponentVNode)(2,a.Table.Cell,{header:!0,children:"Status"})]}),n.map((function(e){return(0,o.createComponentVNode)(2,v,{organ:e.organ,state:e.state,color:e.color,special:e.special},e.organ)}))]})})},v=function(e){var t=e.organ,n=e.state,r=e.color,i=e.special;if("Okay"!==n||i)return(0,o.createComponentVNode)(2,a.Table.Row,{children:[(0,o.createComponentVNode)(2,a.Table.Cell,{header:!0,textAlign:"right",width:10,children:[(0,s.capitalize)((0,s.spaceUnderscores)(t)),":"]}),(0,o.createComponentVNode)(2,a.Table.Cell,{width:10,color:r,bold:"Missing"===n||"Dead"===n||"Critical"===n,children:["Okay"!==n&&n,i&&(0,o.createComponentVNode)(2,a.Box,{color:"white",children:i})]})]})},b=function(e){var t=e.occupied,n=e.limbs;if(t)return(0,o.createComponentVNode)(2,a.Stack.Item,{width:20,children:(0,o.createComponentVNode)(2,a.Table,{children:[(0,o.createComponentVNode)(2,a.Table.Row,{children:[(0,o.createComponentVNode)(2,a.Table.Cell,{header:!0,textAlign:"right",children:"Limb"}),(0,o.createComponentVNode)(2,a.Table.Cell,{header:!0,children:"Status"})]}),n.map((function(e){return(0,o.createComponentVNode)(2,V,{limb:e.limb,status:e.status},e.limb)}))]})})},V=function(e){var t=e.limb,n=e.status;if("Okay"!==n)return(0,o.createComponentVNode)(2,a.Table.Row,{children:[(0,o.createComponentVNode)(2,a.Table.Cell,{header:!0,textAlign:"right",width:10,children:[(0,s.capitalize)((0,s.spaceUnderscores)(t)),":"]}),(0,o.createComponentVNode)(2,a.Table.Cell,{width:10,color:"Missing"===n?"red":"white",bold:"Missing"===n,children:n})]})},y=function(e,t){var n=(0,r.useBackend)(t).data,i=(0,d.processStatsData)(n.patient_data),c=n.occupied?Math.floor(n.oxygen).toString():"--",l=n.occupied&&i?i.oxygen:[],u=n.occupied?Math.floor(n.toxin).toString():"--",s=n.occupied&&i?i.toxin:[],p=n.occupied?Math.floor(n.burn).toString():"--",m=n.occupied&&i?i.burn:[],f=n.occupied?Math.floor(n.brute).toString():"--",h=n.occupied&&i?i.brute:[];return(0,o.createComponentVNode)(2,a.Section,{title:"Vitals",children:(0,o.createComponentVNode)(2,a.Stack,{textAlign:"center",children:[(0,o.createComponentVNode)(2,g,{title:"Suffocation",value:c,metric_data:l,metric:"oxy"}),(0,o.createComponentVNode)(2,g,{title:"Toxin",value:u,metric_data:s,metric:"toxin"}),(0,o.createComponentVNode)(2,g,{title:"Burn",value:p,metric_data:m,metric:"burn"}),(0,o.createComponentVNode)(2,g,{title:"Brute",value:f,metric_data:h,metric:"brute"})]})})},x=function(e){var t=e.occupied,n=e.organs,r=e.limbs;return(0,o.createComponentVNode)(2,a.Section,{title:"Anatomical Anomalies",color:!t&&"grey",children:(0,o.createComponentVNode)(2,a.Stack,{children:[!!t&&(0,o.createComponentVNode)(2,N,{occupied:t,organs:n}),!!t&&(0,o.createComponentVNode)(2,b,{occupied:t,limbs:r}),!t&&"No Patient Detected"]})})},k=function(e){var t=e.occupied,n=e.reagent_container;return(0,o.createComponentVNode)(2,a.Section,{title:"Bloodstream Contents",children:[!!t&&(0,o.createComponentVNode)(2,u.ReagentGraph,{container:n}),!t&&"No Patient Detected"]})},S=function(e){var t=e.occupied,n=e.age,r=e.blood_type,i=e.blood_color_value,c=e.blood_color_name,l=e.clone_generation,u=e.cloner_defect_count,d=e.genetic_stability;return t?(0,o.createComponentVNode)(2,a.Section,{title:"Genetic Analysis",children:(0,o.createComponentVNode)(2,a.Stack,{children:[(0,o.createComponentVNode)(2,a.Stack.Item,{width:20,children:(0,o.createComponentVNode)(2,a.Table,{children:[(0,o.createComponentVNode)(2,a.Table.Row,{children:[(0,o.createComponentVNode)(2,a.Table.Cell,{header:!0,textAlign:"right",children:"Age:"}),(0,o.createComponentVNode)(2,a.Table.Cell,{children:n})]}),(0,o.createComponentVNode)(2,a.Table.Row,{children:[(0,o.createComponentVNode)(2,a.Table.Cell,{header:!0,textAlign:"right",children:"Blood Type:"}),(0,o.createComponentVNode)(2,a.Table.Cell,{children:r})]}),(0,o.createComponentVNode)(2,a.Table.Row,{children:[(0,o.createComponentVNode)(2,a.Table.Cell,{header:!0,textAlign:"right",children:"Blood Color:"}),(0,o.createComponentVNode)(2,a.Table.Cell,{children:[(0,o.createComponentVNode)(2,a.ColorBox,{backgroundColor:i})," ",(0,o.createVNode)(1,"span",null,c,0)]})]})]})}),(0,o.createComponentVNode)(2,a.Stack.Item,{width:14,children:(0,o.createComponentVNode)(2,a.Table,{children:[(0,o.createComponentVNode)(2,a.Table.Row,{children:[(0,o.createComponentVNode)(2,a.Table.Cell,{header:!0,textAlign:"right",children:"Clone Generation:"}),(0,o.createComponentVNode)(2,a.Table.Cell,{children:l})]}),(0,o.createComponentVNode)(2,a.Table.Row,{children:[(0,o.createComponentVNode)(2,a.Table.Cell,{header:!0,textAlign:"right",children:"Genetic Defects:"}),(0,o.createComponentVNode)(2,a.Table.Cell,{children:u})]}),(0,o.createComponentVNode)(2,a.Table.Row,{children:[(0,o.createComponentVNode)(2,a.Table.Cell,{header:!0,textAlign:"right",children:"Genetic Stability:"}),(0,o.createComponentVNode)(2,a.Table.Cell,{children:d})]})]})})]})}):(0,o.createComponentVNode)(2,a.Section,{title:"Genetic Analysis",color:"grey",children:"No Patient Detected"})},I=function(e){var t=e.occupied,n=e.patient_name,r=e.patient_health,i=e.patient_max_health,c=e.patient_status,l=t?"white":"grey",u=t&&r<0,d=t?Math.floor(100*r/i):0,s="--",p="grey";return t&&(i<=0?(p="purple",s="???"):(s=d.toString(),p=d>=51&&d<=100?"green":d>=1&&d<=50?"yellow":"red")),(0,o.createComponentVNode)(2,a.Stack,{children:[(0,o.createComponentVNode)(2,a.Stack.Item,{width:60,children:[(0,o.createComponentVNode)(2,a.Box,{fontSize:1,children:"Patient Name"}),(0,o.createComponentVNode)(2,a.Box,{fontSize:1.5,color:l,children:[!!n&&n,!n&&"No Patient Detected"]})]}),(0,o.createComponentVNode)(2,h,{health_text:s,health_color:p}),(0,o.createComponentVNode)(2,f,{occupied:t,patient_status:c,isCrit:u})]})}},36273:function(){},69412:function(e,t,n){"use strict";t.__esModule=!0,t.PaperSheet=t.PaperSheetView=void 0;var o,r=n(96323),a=n(57723),i=(o=n(12800))&&o.__esModule?o:{"default":o},c=n(31246),l=n(26949),u=n(2381),d=n(97622),s=n(81890);function p(e,t){e.prototype=Object.create(t.prototype),e.prototype.constructor=e,C(e,t)}function m(e,t){var n="undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(n)return(n=n.call(e)).next.bind(n);if(Array.isArray(e)||(n=function(e,t){if(!e)return;if("string"==typeof e)return f(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);"Object"===n&&e.constructor&&(n=e.constructor.name);if("Map"===n||"Set"===n)return Array.from(e);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return f(e,t)}(e))||t&&e&&"number"==typeof e.length){n&&(e=n);var o=0;return function(){return o>=e.length?{done:!0}:{done:!1,value:e[o++]}}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}function f(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,o=new Array(t);n<t;n++)o[n]=e[n];return o}function h(){h=function(e,t){return new n(e,undefined,t)};var e=RegExp.prototype,t=new WeakMap;function n(e,o,r){var a=new RegExp(e,o);return t.set(a,r||t.get(e)),C(a,n.prototype)}function o(e,n){var o=t.get(n);return Object.keys(o).reduce((function(t,n){return t[n]=e[o[n]],t}),Object.create(null))}return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),t&&C(e,t)}(n,RegExp),n.prototype.exec=function(t){var n=e.exec.call(this,t);return n&&(n.groups=o(n,this)),n},n.prototype[Symbol.replace]=function(n,r){if("string"==typeof r){var a=t.get(this);return e[Symbol.replace].call(this,n,r.replace(/\$<([^>]+)>/g,(function(e,t){return"$"+a[t]})))}if("function"==typeof r){var i=this;return e[Symbol.replace].call(this,n,(function(){var e=arguments;return"object"!=typeof e[e.length-1]&&(e=[].slice.call(e)).push(o(e,i)),r.apply(this,e)}))}return e[Symbol.replace].call(this,n,r)},h.apply(this,arguments)}function C(e,t){return C=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e},C(e,t)}var g=5e3,N=function(e,t,n,o){return void 0===o&&(o=!1),'<span style="color:'+n+";font-family:"+t+";"+(o?"font-weight: bold;":"")+'">'+e+"</span>"},v=/\[(_+)\]/g,b=h(/\[<input[\t-\r \xA0\u1680\u2000-\u200A\u2028\u2029\u202F\u205F\u3000\uFEFF]+(?!disabled)(.*?)[\t-\r \xA0\u1680\u2000-\u200A\u2028\u2029\u202F\u205F\u3000\uFEFF]+id="(paperfield_[0-9]+)"(.*?)\/>\]/gm,{id:2}),V=/%s(?:ign)?(?=\\s|$)?/gim,y=function(e,t,n,o,r){var a=e.replace(v,(function(e,a,i,c){var l=function(e,t,n){t=n+"x "+t;var o=document.createElement("canvas").getContext("2d");return o.font=t,o.measureText(e).width}(e,t,n)+"px";return function(e,t,n,o,r,a){return'[<input type="text" style="font:\''+o+"x "+n+"';color:'"+r+"';min-width:"+t+";max-width:"+t+';" id="'+a+'" maxlength='+e+" size="+e+" />]"}(a.length,l,t,n,o,"paperfield_"+r++)}));return{counter:r,text:a}},x=function(e,t){var n=e.image,o=e.opacity,i=e.activeStamp,c={left:n.x+"px",top:n.y+"px",transform:"rotate("+n.rotate+"deg)",opacity:o||1};return n.sprite.match("stamp-.*")?(0,r.createVNode)(1,"img","paper__stamp",null,1,{id:i&&"stamp",style:c,src:(0,a.resolveAsset)(n.sprite)}):(0,r.createComponentVNode)(2,l.Box,{id:i&&"stamp",style:c,className:"paper__stamp-text",children:n.sprite})},k=function(e,t){var n,o,a=e.value,i=void 0===a?"":a,c=e.stamps,u=void 0===c?[]:c,d=e.backgroundColor,s=e.readOnly,p=u||[],m={__html:'<span class="paper-text">'+(n=i,o=s,(o?n.replace(/<input\s[^d]/g,"<input disabled "):n.replace(/<input\sdisabled\s/g,"<input "))+"</span>")};return(0,r.createComponentVNode)(2,l.Box,{className:"paper__page",position:"relative",backgroundColor:d,width:"100%",height:"100%",children:[(0,r.createComponentVNode)(2,l.Box,{color:"black",backgroundColor:d,fillPositionedParent:!0,width:"100%",height:"100%",dangerouslySetInnerHTML:m,p:"10px"}),p.map((function(e,t){return(0,r.createComponentVNode)(2,x,{image:{sprite:e[0],x:e[1],y:e[2],rotate:e[3]}},e[0]+t)}))]})};t.PaperSheetView=k;var S=function(e){function t(t,n){var o;return(o=e.call(this,t,n)||this).state={x:0,y:0,rotate:0},o.style=null,o.handleMouseMove=function(e){var t=o.findStampPosition(e);t&&(!function(e){e.stopPropagation&&e.stopPropagation(),e.preventDefault&&e.preventDefault(),e.cancelBubble=!0,e.returnValue=!1}(e),o.setState({x:t[0],y:t[1],rotate:t[2]}))},o.handleMouseClick=function(e){e.pageY<=30||(0,(0,c.useBackend)(o.context).act)("stamp",{x:o.state.x,y:o.state.y,r:o.state.rotate})},o}p(t,e);var n=t.prototype;return n.findStampPosition=function(e){var t,n=document.querySelector(".Layout__content");e.shiftKey&&(t=!0);var o=document.getElementById("stamp");if(o){var r=o.clientHeight,a=o.clientWidth,i=t?this.state.y:e.pageY+n.scrollTop-r,c=t?this.state.x:e.pageX-a/2,l=n.clientWidth-a,u=n.clientHeight+n.scrollTop-r,s=Math.atan2(e.pageX-c,e.pageY-i),p=t?s*(180/Math.PI)*-1:this.state.rotate;return[(0,d.clamp)(c,0,l),(0,d.clamp)(i,0,u),p]}},n.componentDidMount=function(){document.addEventListener("mousemove",this.handleMouseMove),document.addEventListener("click",this.handleMouseClick)},n.componentWillUnmount=function(){document.removeEventListener("mousemove",this.handleMouseMove),document.removeEventListener("click",this.handleMouseClick)},n.render=function(){var e=this.props,t=e.value,n=e.stampClass,o=e.stamps||[],a={sprite:n,x:this.state.x,y:this.state.y,rotate:this.state.rotate};return(0,r.createFragment)([(0,r.createComponentVNode)(2,k,{readOnly:!0,value:t,stamps:o}),(0,r.createComponentVNode)(2,x,{activeStamp:!0,opacity:.5,image:a})],4)},t}(r.Component),I=function(e){function t(t,n){var o;return(o=e.call(this,t,n)||this).state={previewSelected:"Preview",oldText:t.value||"",textAreaText:"",combinedText:t.value||"",showingHelpTip:!1},o}p(t,e);var n=t.prototype;return n.createPreview=function(e,t){void 0===t&&(t=!1);var n,o,r=(0,c.useBackend)(this.context).data,a=r.text,l=r.penColor,u=r.penFont,d=r.isCrayon,p=r.fieldCounter,f=r.editUsr,h={text:a};if((e=e.trim()).length>0){var C=(0,s.sanitizeText)(e),g=(n=l,o=f,C.replace(V,(function(){return N(o,"Times New Roman",n,!0)}))),v=y(g,u,12,l,p),x=function(e){return(0,i["default"])(e,{breaks:!0,smartypants:!0,smartLists:!0,walkTokens:function(e){switch(e.type){case"url":case"autolink":case"reflink":case"link":case"image":e.type="text",e.href=""}},baseUrl:"thisshouldbreakhttp"})}(v.text),k=N(x,u,l,d);h.text+=k,h.fieldCounter=v.counter}if(t){var S=function(e,t,n,o,r){var a;void 0===r&&(r=!1);for(var i={},c=[];null!==(a=b.exec(e));){var l=a[0],u=a.groups.id;if(u){var d=document.getElementById(u);if(0===(d&&d.value?d.value:"").length)continue;var p=(0,s.sanitizeText)(d.value.trim(),[]);if(0===p.length)continue;var f=d.cloneNode(!0);p.match(V)?(f.style.fontFamily="Times New Roman",r=!0,f.defaultValue=o):(f.style.fontFamily=t,f.defaultValue=p),r&&(f.style.fontWeight="bold"),f.style.color=n,f.disabled=!0;var h=document.createElement("div");h.appendChild(f),i[u]=p,c.push({value:"["+h.innerHTML+"]",rawText:l})}}if(c.length>0)for(var C,g=m(c);!(C=g()).done;){var N=C.value;e=e.replace(N.rawText,N.value)}return{text:e,fields:i}}(h.text,u,l,f,d);h.text=S.text,h.formFields=S.fields}return h},n.onInputHandler=function(e,t){var n=this;if(t!==this.state.textAreaText){var o=this.state.oldText.length+this.state.textAreaText.length;if(o>g&&(t=o-g>=t.length?"":t.substr(0,t.length-(o-g)))===this.state.textAreaText)return;this.setState((function(){return{textAreaText:t,combinedText:n.createPreview(t)}}))}},n.finalUpdate=function(e){var t=(0,c.useBackend)(this.context).act,n=this.createPreview(e,!0);t("save",n),this.setState((function(){return{textAreaText:"",previewSelected:"save",combinedText:n.text}}))},n.render=function(){var e=this,t=this.props,n=t.textColor,o=t.fontFamily,a=t.stamps,i=t.backgroundColor;return(0,r.createComponentVNode)(2,l.Flex,{direction:"column",fillPositionedParent:!0,children:[(0,r.createComponentVNode)(2,l.Flex.Item,{children:(0,r.createComponentVNode)(2,l.Tabs,{size:"100%",children:[(0,r.createComponentVNode)(2,l.Tabs.Tab,{textColor:"black",backgroundColor:"Edit"===this.state.previewSelected?"grey":"white",selected:"Edit"===this.state.previewSelected,onClick:function(){return e.setState({previewSelected:"Edit"})},children:"Edit"},"marked_edit"),(0,r.createComponentVNode)(2,l.Tabs.Tab,{textColor:"black",backgroundColor:"Preview"===this.state.previewSelected?"grey":"white",selected:"Preview"===this.state.previewSelected,onClick:function(){return e.setState((function(){return{previewSelected:"Preview",textAreaText:e.state.textAreaText,combinedText:e.createPreview(e.state.textAreaText).text}}))},children:"Preview"},"marked_preview"),(0,r.createComponentVNode)(2,l.Tabs.Tab,{textColor:"black",backgroundColor:"confirm"===this.state.previewSelected?"red":"save"===this.state.previewSelected?"grey":"white",selected:"confirm"===this.state.previewSelected||"save"===this.state.previewSelected,onClick:function(){"confirm"===e.state.previewSelected?e.finalUpdate(e.state.textAreaText):"Edit"===e.state.previewSelected?e.setState((function(){return{previewSelected:"confirm",textAreaText:e.state.textAreaText,combinedText:e.createPreview(e.state.textAreaText).text}})):e.setState({previewSelected:"confirm"})},children:"confirm"===this.state.previewSelected?"Confirm":"Save"},"marked_done"),(0,r.createComponentVNode)(2,l.Tabs.Tab,{textColor:"black",backgroundColor:"white",icon:"question-circle-o",onmouseover:function(){e.setState({showingHelpTip:!0})},onmouseout:function(){e.setState({showingHelpTip:!1})},children:"Help"},"marked_help")]})}),(0,r.createComponentVNode)(2,l.Flex.Item,{grow:1,basis:1,children:"Edit"===this.state.previewSelected&&(0,r.createComponentVNode)(2,l.TextArea,{value:this.state.textAreaText,textColor:n,fontFamily:o,height:window.innerHeight-60+"px",backgroundColor:i,onInput:this.onInputHandler.bind(this)})||(0,r.createComponentVNode)(2,k,{value:this.state.combinedText,stamps:a,fontFamily:o,textColor:n})}),this.state.showingHelpTip&&(0,r.createComponentVNode)(2,w)]})},t}(r.Component);t.PaperSheet=function(e,t){var n=(0,c.useBackend)(t).data,o=n.editMode,a=n.text,i=n.paperColor,d=void 0===i?"white":i,s=n.penColor,p=void 0===s?"black":s,m=n.penFont,f=void 0===m?"Verdana":m,h=n.stamps,C=n.stampClass,g=n.sizeX,N=n.sizeY,v=n.name,b=h||[];return(0,r.createComponentVNode)(2,u.Window,{title:v,theme:"paper",width:g||400,height:N||500,children:(0,r.createComponentVNode)(2,u.Window.Content,{backgroundColor:d,scrollable:!0,children:(0,r.createComponentVNode)(2,l.Box,{id:"page",fitted:!0,fillPositionedParent:!0,children:function(e){switch(e){case 0:return(0,r.createComponentVNode)(2,k,{value:a,stamps:b,readOnly:!0});case 1:return(0,r.createComponentVNode)(2,I,{value:a,textColor:p,fontFamily:f,stamps:b,backgroundColor:d});case 2:return(0,r.createComponentVNode)(2,S,{value:a,stamps:b,stampClass:C});default:return"ERROR ERROR WE CANNOT BE HERE!!"}}(o)})})})};var w=function(){return(0,r.createComponentVNode)(2,l.Box,{position:"absolute",left:"10px",top:"25px",width:"300px",height:"350px",backgroundColor:"#E8E4C9",textAlign:"center",children:[(0,r.createVNode)(1,"h3",null,"Markdown Syntax",16),(0,r.createComponentVNode)(2,l.Table,{children:[(0,r.createComponentVNode)(2,l.Table.Row,{children:[(0,r.createComponentVNode)(2,l.Table.Cell,{children:[(0,r.createComponentVNode)(2,l.Box,{children:"Heading"}),"====="]}),(0,r.createComponentVNode)(2,l.Table.Cell,{children:(0,r.createVNode)(1,"h2",null,"Heading",16)})]}),(0,r.createComponentVNode)(2,l.Table.Row,{children:[(0,r.createComponentVNode)(2,l.Table.Cell,{children:[(0,r.createComponentVNode)(2,l.Box,{children:"Sub Heading"}),"------"]}),(0,r.createComponentVNode)(2,l.Table.Cell,{children:(0,r.createVNode)(1,"h4",null,"Sub Heading",16)})]}),(0,r.createComponentVNode)(2,l.Table.Row,{children:[(0,r.createComponentVNode)(2,l.Table.Cell,{children:"_Italic Text_"}),(0,r.createComponentVNode)(2,l.Table.Cell,{children:(0,r.createVNode)(1,"i",null,"Italic Text",16)})]}),(0,r.createComponentVNode)(2,l.Table.Row,{children:[(0,r.createComponentVNode)(2,l.Table.Cell,{children:"**Bold Text**"}),(0,r.createComponentVNode)(2,l.Table.Cell,{children:(0,r.createVNode)(1,"b",null,"Bold Text",16)})]}),(0,r.createComponentVNode)(2,l.Table.Row,{children:[(0,r.createComponentVNode)(2,l.Table.Cell,{children:"`Code Text`"}),(0,r.createComponentVNode)(2,l.Table.Cell,{children:(0,r.createVNode)(1,"code",null,"Code Text",16)})]}),(0,r.createComponentVNode)(2,l.Table.Row,{children:[(0,r.createComponentVNode)(2,l.Table.Cell,{children:"~~Strikethrough Text~~"}),(0,r.createComponentVNode)(2,l.Table.Cell,{children:(0,r.createVNode)(1,"s",null,"Strikethrough Text",16)})]}),(0,r.createComponentVNode)(2,l.Table.Row,{children:[(0,r.createComponentVNode)(2,l.Table.Cell,{children:[(0,r.createComponentVNode)(2,l.Box,{children:"Horizontal Rule"}),"---"]}),(0,r.createComponentVNode)(2,l.Table.Cell,{children:["Horizontal Rule",(0,r.createVNode)(1,"hr")]})]}),(0,r.createComponentVNode)(2,l.Table.Row,{children:[(0,r.createComponentVNode)(2,l.Table.Cell,{children:(0,r.createComponentVNode)(2,l.Table,{children:[(0,r.createComponentVNode)(2,l.Table.Row,{children:"* List Element 1"}),(0,r.createComponentVNode)(2,l.Table.Row,{children:"* List Element 2"}),(0,r.createComponentVNode)(2,l.Table.Row,{children:"* Etc..."})]})}),(0,r.createComponentVNode)(2,l.Table.Cell,{children:(0,r.createVNode)(1,"ul",null,[(0,r.createVNode)(1,"li",null,"List Element 1",16),(0,r.createVNode)(1,"li",null,"List Element 2",16),(0,r.createVNode)(1,"li",null,"Etc...",16)],4)})]}),(0,r.createComponentVNode)(2,l.Table.Row,{children:[(0,r.createComponentVNode)(2,l.Table.Cell,{children:(0,r.createComponentVNode)(2,l.Table,{children:[(0,r.createComponentVNode)(2,l.Table.Row,{children:"1. List Element 1"}),(0,r.createComponentVNode)(2,l.Table.Row,{children:"2. List Element 2"}),(0,r.createComponentVNode)(2,l.Table.Row,{children:"3. Etc..."})]})}),(0,r.createComponentVNode)(2,l.Table.Cell,{children:(0,r.createVNode)(1,"ol",null,[(0,r.createVNode)(1,"li",null,"List Element 1",16),(0,r.createVNode)(1,"li",null,"List Element 2",16),(0,r.createVNode)(1,"li",null,"Etc...",16)],4)})]})]})]})}},21293:function(e,t,n){"use strict";t.__esModule=!0,t.Particool=void 0;var o=n(96323),r=n(97622),a=n(97622),i=n(31246),c=n(26949),l=n(2381),u=n(79926),d=function(e,t){var n=e.value,r=e.tooltip,a=e.name,l=(0,i.useBackend)(t).act;return(0,o.createComponentVNode)(2,c.Tooltip,{position:"bottom",content:r,children:(0,o.createComponentVNode)(2,c.NumberInput,{value:n,stepPixelSize:5,width:"39px",onDrag:function(e,t){return l("modify_particle_value",{new_data:{name:a,value:t,type:"int"}})}})})},s=function(e,t){var n=e.value,r=e.tooltip,a=e.name,l=(0,i.useBackend)(t).act;return n=n||[1,0,0,1,0,0],(0,o.createComponentVNode)(2,c.Tooltip,{position:"bottom",content:r,children:(0,o.createComponentVNode)(2,c.Flex,{children:(0,o.createComponentVNode)(2,c.Flex.Item,{children:n.map((function(e,t){return(0,o.createComponentVNode)(2,c.NumberInput,{value:e,onDrag:function(e,o){n[t]=o,l("modify_particle_value",{new_data:{name:a,value:n,type:"matrix"}})}},t)}))})})})},p=function(e,t){var n=e.value,r=e.tooltip,a=e.name,l=(0,i.useBackend)(t).act,u=null,d="string"==typeof n;return u=d?N(e,t):m(e,t),(0,o.createComponentVNode)(2,c.Tooltip,{position:"bottom",content:r,children:(0,o.createComponentVNode)(2,c.Flex,{children:[(0,o.createComponentVNode)(2,c.Flex.Item,{children:u}),(0,o.createComponentVNode)(2,c.Flex.Item,{align:"right",children:(0,o.createComponentVNode)(2,c.Button.Checkbox,{checked:d,content:"generator",onClick:function(){return l("modify_particle_value",{new_data:{name:a,value:d?0:{genType:"num",a:n,b:n,rand:"UNIFORM_RAND"},type:d?"float":"generator"}})}})})]})})},m=function(e,t){var n=e.value,l=e.tooltip,u=e.name,d=(0,i.useBackend)(t).act,s=(0,i.useLocalState)(t,"particleFloatStep",.01),p=s[0];s[1];return(0,o.createComponentVNode)(2,c.Tooltip,{position:"bottom",content:l,children:(0,o.createComponentVNode)(2,c.NumberInput,{value:n,stepPixelSize:4,step:p,format:function(e){return(0,r.toFixed)(e,(0,a.numberOfDecimalDigits)(p))},width:"80px",onDrag:function(e,t){return d("modify_particle_value",{new_data:{name:u,value:t,type:"float"}})}})})},f=function(e,t){var n=e.value,r=e.tooltip,a=e.name,l=(0,i.useBackend)(t).act,u=null,d="string"==typeof n;return u=d?N(e,t):C(e,t),(0,o.createComponentVNode)(2,c.Tooltip,{position:"bottom",content:r,children:(0,o.createComponentVNode)(2,c.Flex,{children:[(0,o.createComponentVNode)(2,c.Flex.Item,{children:u}),(0,o.createComponentVNode)(2,c.Flex.Item,{align:"right",children:(0,o.createComponentVNode)(2,c.Button.Checkbox,{checked:d,content:"generator",onClick:function(){return l("modify_particle_value",{new_data:{name:a,value:d?[0,0,0]:{genType:"box",a:n,b:n,rand:"UNIFORM_RAND"},type:d?"vector":"generator"}})}})})]})})},h=function(e){return function(t,n){var r=t.value,a=t.tooltip,l=t.name,u=(0,i.useBackend)(n).act;return r=r||Array(e).fill(0),isNaN(r)||(r=Array(e).fill(r)),r=r.slice(0,e),(0,o.createComponentVNode)(2,c.Tooltip,{position:"bottom",content:a,children:(0,o.createComponentVNode)(2,c.Flex,{children:(0,o.createComponentVNode)(2,c.Flex.Item,{children:r.map((function(e,t){return(0,o.createComponentVNode)(2,c.NumberInput,{value:e,width:"40px",onDrag:function(e,n){r[t]=n,u("modify_particle_value",{new_data:{name:l,value:r,type:"vector"}})}},t)}))})})})}},C=h(3),g=function(e,t){var n=e.value,r=e.tooltip,a=e.name,l=(0,i.useBackend)(t).act,u=null,d="string"==typeof n;return u=d?N(e,t):h(2)(e,t),(0,o.createComponentVNode)(2,c.Tooltip,{position:"bottom",content:r,children:(0,o.createComponentVNode)(2,c.Flex,{children:[(0,o.createComponentVNode)(2,c.Flex.Item,{children:u}),(0,o.createComponentVNode)(2,c.Flex.Item,{align:"right",children:(0,o.createComponentVNode)(2,c.Button.Checkbox,{checked:d,content:"generator",onClick:function(){return l("modify_particle_value",{new_data:{name:a,value:d?[0,0]:{genType:"box",a:n,b:n,rand:"UNIFORM_RAND"},type:d?"vector":"generator"}})}})})]})})},N=function(e,t){var n=e.value,r=e.name,a=(0,i.useBackend)(t).act,l="",d="",s="",p="";if(u.logger.log(n),n){var m=n.match(/\((.*)\)/);if(4===(m=(m=m||["","","",""])[1].split(", ")).length){l=m[0].replace(/['"]+/g,"");var f=m[1].match(/\((.*)\)/);d=f?f[1]:m[1].replace(/['"]+/g,"");var h=m[2].match(/\((.*)\)/);s=h?h[1]:m[2].replace(/['"]+/g,""),p=m[3]}}var C=(0,i.useLocalState)(t,r+"genType",l),g=C[0],N=C[1],v=(0,i.useLocalState)(t,r+"a",d),b=v[0],V=v[1],y=(0,i.useLocalState)(t,r+"b",s),x=y[0],k=y[1],S=(0,i.useLocalState)(t,r+"rand",p),I=S[0],w=S[1];return(0,o.createComponentVNode)(2,c.Collapsible,{title:"Generator Settings - Hit Set to save",children:(0,o.createComponentVNode)(2,c.Section,{level:2,children:[(0,o.createComponentVNode)(2,c.LabeledList,{children:[(0,o.createComponentVNode)(2,c.LabeledList.Item,{label:"type",children:(0,o.createComponentVNode)(2,c.Tooltip,{position:"bottom",content:""+["num","vector","box","color","circle","sphere","square","cube"].join(", "),children:(0,o.createComponentVNode)(2,c.Input,{value:g,onInput:function(e,t){return N(t)}})})}),(0,o.createComponentVNode)(2,c.LabeledList.Item,{label:"A",children:(0,o.createComponentVNode)(2,c.Input,{value:b,onInput:function(e,t){return V(t)}})}),(0,o.createComponentVNode)(2,c.LabeledList.Item,{label:"B",children:(0,o.createComponentVNode)(2,c.Input,{value:x,onInput:function(e,t){return k(t)}})}),(0,o.createComponentVNode)(2,c.LabeledList.Item,{label:"Rand Type",children:(0,o.createComponentVNode)(2,c.Tooltip,{position:"bottom",content:""+["UNIFORM_RAND","NORMAL_RAND","LINEAR_RAND","SQUARE_RAND"].join(", "),children:(0,o.createComponentVNode)(2,c.Input,{value:I,onInput:function(e,t){return w(t)}})})})]}),(0,o.createComponentVNode)(2,c.Button,{content:"Set",onClick:function(){return u.logger.log(g),void a("modify_particle_value",{new_data:{name:r,value:{genType:g,a:b,b:x,rand:I},type:"generator"}})}})]})})},v=function(e,t){var n=e.value,r=e.tooltip,a=e.name,l=(0,i.useBackend)(t).act;return(0,o.createComponentVNode)(2,c.Tooltip,{position:"bottom",content:r,children:(0,o.createComponentVNode)(2,c.Input,{value:n,width:"250px",onInput:function(e,t){return l("modify_particle_value",{new_data:{name:a,value:t,type:"text"}})}})})},b=function(e,t){var n=e.value,r=e.tooltip,a=e.name,l=(0,i.useBackend)(t).act,u=n?Object.keys(n).map((function(e){return n[e]})):[];return(0,o.createComponentVNode)(2,c.Tooltip,{position:"bottom",content:r,children:(0,o.createComponentVNode)(2,c.Input,{value:u.join(","),width:"250px",onInput:function(e,t){return l("modify_particle_value",{new_data:{name:a,value:t,type:"numList"}})}})})},V=function(e,t){var n=e.value,r=e.tooltip,a=e.name,l=(0,i.useBackend)(t).act,u=n?Object.keys(n).map((function(e){return n[e]})):[];return(0,o.createComponentVNode)(2,c.Tooltip,{position:"bottom",content:r,children:(0,o.createComponentVNode)(2,c.Input,{value:u.join(","),width:"250px",onInput:function(e,t){return l("modify_particle_value",{new_data:{name:a,value:t,type:"list"}})}})})},y=function(e,t){var n=e.value,r=e.tooltip,a=e.name,l=(0,i.useBackend)(t).act,u=null,d="string"==typeof n&&"#"!==n.charAt(0);return u=d?N(e,t):function(e,t){var n=e.value,r=e.tooltip,a=e.name,l=(0,i.useBackend)(t).act;return(0,o.createComponentVNode)(2,c.Tooltip,{position:"bottom",content:r,children:[(0,o.createComponentVNode)(2,c.Button,{icon:"pencil-alt",onClick:function(){return l("modify_color_value")}}),(0,o.createComponentVNode)(2,c.ColorBox,{color:n,mr:.5}),(0,o.createComponentVNode)(2,c.Input,{value:n,width:"90px",onInput:function(e,t){return l("modify_particle_value",{new_data:{name:a,value:t,type:"color"}})}})]})}(e,t),(0,o.createComponentVNode)(2,c.Tooltip,{position:"bottom",content:r,children:(0,o.createComponentVNode)(2,c.Flex,{children:[(0,o.createComponentVNode)(2,c.Flex.Item,{children:u}),(0,o.createComponentVNode)(2,c.Flex.Item,{align:"right",children:(0,o.createComponentVNode)(2,c.Button.Checkbox,{checked:d,content:"generator",onClick:function(){return l("modify_particle_value",{new_data:{name:a,value:d?"#ffffff":{genType:"color",a:n,b:n,rand:"UNIFORM_RAND"},type:d?"color":"generator"}})}})})]})})},x=function(e,t){var n=e.value,r=e.tooltip,a=(0,i.useBackend)(t).act;return(0,o.createComponentVNode)(2,c.Tooltip,{position:"bottom",content:r,children:[(0,o.createComponentVNode)(2,c.Button,{icon:"pencil-alt",onClick:function(){return a("modify_icon_value")}}),(0,o.createComponentVNode)(2,c.Box,{inline:!0,ml:1,children:n})]})},k={width:{type:"float_nongen",tooltip:"Width of particle image in pixels"},height:{type:"float_nongen",tooltip:"Height of particle image in pixels"},count:{type:"int",tooltip:"Maximum particle count"},spawning:{type:"float_nongen",tooltip:"Number of particles to spawn per tick (can be fractional)"},bound1:{type:"vector_nongen",tooltip:"Minimum particle position in x,y,z space"},bound2:{type:"vector_nongen",tooltip:"Maximum particle position in x,y,z space"},gravity:{type:"vector_nongen",tooltip:"Constant acceleration applied to all particles in this set (pixels per squared tick)"},gradient:{type:"list",tooltip:"Color gradient used, if any"},transform:{type:"matrix",tooltip:"Transform done to all particles, if any (can be higher than 2D)"},lifespan:{type:"float",tooltip:"Maximum life of the particle, in ticks"},fade:{type:"float",tooltip:"Fade-out time at end of lifespan, in ticks"},fadein:{type:"float",tooltip:"Fade-in time, in ticks"},icon:{type:"icon",tooltip:"Icon to use, if any; no icon means this particle will be a dot"},icon_state:{type:"list",tooltip:"Icon state to use, if any"},color:{type:"color",tooltip:"Particle color; can be a number if a gradient is used"},color_change:{type:"float",tooltip:"Color change per tick; only applies if gradient is used"},position:{type:"vector",tooltip:"x,y,z position, from center in pixels"},velocity:{type:"vector",tooltip:"x,y,z velocity, in pixels"},scale:{type:"vector2",tooltip:"(2D)\tScale applied to icon, if used; defaults to list(1,1)"},grow:{type:"vector2",tooltip:"Change in scale per tick; defaults to list(0,0)"},rotation:{type:"float",tooltip:"Angle of rotation (clockwise); applies only if using an icon"},spin:{type:"float",tooltip:"Change in rotation per tick"},friction:{type:"float",tooltip:"Amount of velocity to shed (0 to 1) per tick, also applied to acceleration from drift"},drift:{type:"vector",tooltip:"Added acceleration every tick; e.g. a circle or sphere generator can be applied to produce snow or ember effects"}},S=function(e,t){var n=e.name,r={int:(0,o.normalizeProps)((0,o.createComponentVNode)(2,d,Object.assign({},e))),float:(0,o.normalizeProps)((0,o.createComponentVNode)(2,p,Object.assign({},e))),float_nongen:(0,o.normalizeProps)((0,o.createComponentVNode)(2,m,Object.assign({},e))),string:(0,o.normalizeProps)((0,o.createComponentVNode)(2,v,Object.assign({},e))),numlist:(0,o.normalizeProps)((0,o.createComponentVNode)(2,b,Object.assign({},e))),list:(0,o.normalizeProps)((0,o.createComponentVNode)(2,V,Object.assign({},e))),color:(0,o.normalizeProps)((0,o.createComponentVNode)(2,y,Object.assign({},e))),icon:(0,o.normalizeProps)((0,o.createComponentVNode)(2,x,Object.assign({},e))),generator:(0,o.normalizeProps)((0,o.createComponentVNode)(2,N,Object.assign({},e))),matrix:(0,o.normalizeProps)((0,o.createComponentVNode)(2,s,Object.assign({},e))),vector:(0,o.normalizeProps)((0,o.createComponentVNode)(2,f,Object.assign({},e))),vector_nongen:(0,o.normalizeProps)((0,o.createComponentVNode)(2,C,Object.assign({},e))),vector2:(0,o.normalizeProps)((0,o.createComponentVNode)(2,g,Object.assign({},e)))};return(0,o.createComponentVNode)(2,c.LabeledList.Item,{label:n,children:r[k[n].type]||k[n].type||"Not Found (This is an error)"})},I=function(e,t){var n=e.particle;return(0,o.createComponentVNode)(2,c.LabeledList,{children:Object.keys(k).map((function(e){var t=n[e],r=k[e].tooltip||"Oh Bees! Tooltip is missing.";return(0,o.createComponentVNode)(2,S,{name:e,tooltip:r,value:t},e)}))})},w=function(){return(0,o.createComponentVNode)(2,c.Collapsible,{title:"Generator Help",children:[(0,o.createComponentVNode)(2,c.Section,{level:2}),(0,o.createComponentVNode)(2,c.Section,{level:2,children:(0,o.createVNode)(1,"table",null,(0,o.createVNode)(1,"tbody",null,[(0,o.createVNode)(1,"tr",null,[(0,o.createVNode)(1,"td",null,"Generator type",16),(0,o.createVNode)(1,"td",null,"Result type",16),(0,o.createVNode)(1,"td",null,"Description",16)],4),(0,o.createVNode)(1,"tr",null,[(0,o.createVNode)(1,"td",null,"num",16),(0,o.createVNode)(1,"td",null,"num",16),(0,o.createVNode)(1,"td",null,"A random number between A and B.",16)],4),(0,o.createVNode)(1,"tr",null,[(0,o.createVNode)(1,"td",null,"vector",16),(0,o.createVNode)(1,"td",null,"vector",16),(0,o.createVNode)(1,"td",null,"A random vector on a line between A and B.",16)],4),(0,o.createVNode)(1,"tr",null,[(0,o.createVNode)(1,"td",null,"box",16),(0,o.createVNode)(1,"td",null,"vector",16),(0,o.createVNode)(1,"td",null,"A random vector within a box whose corners are at A and B.",16)],4),(0,o.createVNode)(1,"tr",null,[(0,o.createVNode)(1,"td",null,"color",16),(0,o.createVNode)(1,"td",null,"color (string) or color matrix",16),(0,o.createVNode)(1,"td",null,"Result type depends on whether A or B are matrices or not. The result is interpolated between A and B; components are not randomized separately.",16)],4),(0,o.createVNode)(1,"tr",null,[(0,o.createVNode)(1,"td",null,"circle",16),(0,o.createVNode)(1,"td",null,"vector",16),(0,o.createVNode)(1,"td",null,"A random XY-only vector in a ring between radius A and B, centered at 0,0.",16)],4),(0,o.createVNode)(1,"tr",null,[(0,o.createVNode)(1,"td",null,"sphere",16),(0,o.createVNode)(1,"td",null,"vector",16),(0,o.createVNode)(1,"td",null,"A random vector in a spherical shell between radius A and B, centered at 0,0,0.",16)],4),(0,o.createVNode)(1,"tr",null,[(0,o.createVNode)(1,"td",null,"square",16),(0,o.createVNode)(1,"td",null,"vector",16),(0,o.createVNode)(1,"td",null,"A random XY-only vector between squares of sizes A and B. (The length of the square is between A*2 and B*2, centered at 0,0.)",16)],4),(0,o.createVNode)(1,"tr",null,[(0,o.createVNode)(1,"td",null,"cube",16),(0,o.createVNode)(1,"td",null,"vector",16),(0,o.createVNode)(1,"td",null,"A random vector between cubes of sizes A and B. (The length of the cube is between A*2 and B*2, centered at 0,0,0.)",16)],4)],4),2)})]})};t.Particool=function(e,t){var n=(0,i.useBackend)(t),u=n.act,d=n.data,s=d.target_particle||{},p=s&&Object.keys(s).length>0,m=(0,i.useLocalState)(t,"particleFloatStep",.01),f=m[0],h=m[1],C=(0,i.useLocalState)(t,"hidden",!1),g=C[0],N=C[1];return(0,o.createComponentVNode)(2,l.Window,{title:"Particool",width:700,height:500,children:(0,o.createComponentVNode)(2,l.Window.Content,{scrollable:!0,children:[!!g&&(0,o.createComponentVNode)(2,c.NoticeBox,{danger:!0,children:[" ",String(Date.now())," ",(0,o.createVNode)(1,"br"),"Particles? ",p.toString()," -",(null===d.target_particle).toString()," ",(0,o.createVNode)(1,"br"),"Json - ",JSON.stringify(d.target_particle)]}),(0,o.createComponentVNode)(2,c.Section,{title:(0,o.createComponentVNode)(2,c.Box,{inline:!0,onDblClick:function(){return N(!0)},children:"Particle"}),buttons:(0,o.createFragment)([!!p&&(0,o.createFragment)([(0,o.createComponentVNode)(2,c.Button,{icon:"save",content:"Save Particle",onClick:function(){return u("save_particle")}}),(0,o.createComponentVNode)(2,c.Button,{icon:"file-image",content:"Save Particle + Icon",onClick:function(){return u("save_particle_with_icon")}}),(0,o.createTextVNode)(" ")],0),(0,o.createComponentVNode)(2,c.Button,{icon:"upload",content:"Load Particle",onClick:function(){return u("load_particle")}}),p?(0,o.createComponentVNode)(2,c.Button.Confirm,{icon:"minus",content:"Remove Particle",onClick:function(){return u("remove_particle")}}):(0,o.createComponentVNode)(2,c.Button,{icon:"plus",content:"Add Particle",onClick:function(){return u("add_particle")}}),(0,o.createComponentVNode)(2,c.Button)],0),children:[(0,o.createComponentVNode)(2,w),(0,o.createComponentVNode)(2,c.Box,{mt:2,mb:2,children:[(0,o.createComponentVNode)(2,c.Box,{inline:!0,mr:1,children:"Float change step:"}),(0,o.createComponentVNode)(2,c.NumberInput,{value:f,step:.001,format:function(e){return(0,r.toFixed)(e,(0,a.numberOfDecimalDigits)(f))},width:"70px",onChange:function(e,t){return h(t)}})]}),p?(0,o.createComponentVNode)(2,I,{particle:s}):(0,o.createComponentVNode)(2,c.Box,{children:"No particle"})]})]})})}},85344:function(e,t,n){"use strict";t.__esModule=!0,t.Phone=void 0;var o=n(96323),r=n(31246),a=n(26949),i=n(18331),c=n(2381),l=[{department:"bridge",color:"green"},{department:"engineering",color:"yellow"},{department:"medical",color:"blue"},{department:"research",color:"purple"},{department:"security",color:"red"},{department:"uncategorized",color:"brown"}],u=function(e,t){return e.category.localeCompare(t.category)},d=function(e,t){return e.id.localeCompare(t.id)};t.Phone=function(e,t){var n=(0,r.useBackend)(t).data,i=n.dialing,l=n.inCall,d=n.lastCalled,p=n.name,m=n.phonebook.sort(u)||[];return(0,o.createComponentVNode)(2,c.Window,{title:p,width:250,height:350,children:(0,o.createComponentVNode)(2,c.Window.Content,{children:[(i||l)&&(0,o.createComponentVNode)(2,a.Dimmer,{children:(0,o.createVNode)(1,"h1",null,"LINE BUSY",16)}),(0,o.createComponentVNode)(2,a.Stack,{vertical:!0,fill:!0,children:[(0,o.createComponentVNode)(2,a.Stack.Item,{children:(0,o.createComponentVNode)(2,a.Section,{fill:!0,children:(0,o.createComponentVNode)(2,a.LabeledList,{children:(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Last Called",children:d?""+d:"None"})})})}),(0,o.createComponentVNode)(2,a.Stack.Item,{grow:1,children:(0,o.createComponentVNode)(2,a.Section,{title:"Phonebook",fill:!0,scrollable:!0,children:m.map((function(e){return(0,o.createComponentVNode)(2,s,{phonebook:e},e.category)}))})})]})]})})};var s=function(e,t){var n=e.phonebook,c=(0,r.useBackend)(t).act,u=(0,i.capitalize)(n.category),s=n.phones.sort(d),p=l[l.findIndex((function(e){return e.department===n.category}))].color;return(0,o.createComponentVNode)(2,a.Collapsible,{title:u,color:!!p&&p,children:s.map((function(e){return(0,o.createComponentVNode)(2,a.Button,{fluid:!0,content:e.id,onClick:function(){return c("call",{target:e.id})},textAlign:"center",className:"phone__button"},e.id)}))})}},85990:function(){},41245:function(e,t,n){"use strict";t.__esModule=!0,t.AutoPipeLaying=t.DisposalPipeRow=t.PipeDispenser=void 0;var o=n(96323),r=n(31246),a=n(26949),i=n(2381);t.PipeDispenser=function(e,t){var n=(0,r.useBackend)(t).data,u=n.disposalpipes||[],d=n.dispenser_ready,s=n.windowName,p=n.mobile,m=n.removing_pipe,f=n.laying_pipe,h=n.max_disposal_pipes;return(0,o.createComponentVNode)(2,i.Window,{title:s,width:"325",height:p?365:270,children:(0,o.createComponentVNode)(2,i.Window.Content,{scrollable:!0,children:[(0,o.createComponentVNode)(2,a.Section,{children:u.map((function(e){return(0,o.createComponentVNode)(2,c,{dispenser_ready:d,max_disposal_pipes:h,disposalpipe:e},e.disposaltype)}))}),!!p&&(0,o.createComponentVNode)(2,l,{laying_pipe:f,removing_pipe:m})]})})};var c=function(e,t){var n=(0,r.useBackend)(t).act,i=(0,r.useLocalState)(t,"amount",1),c=i[0],l=i[1],u=e.dispenser_ready,d=e.max_disposal_pipes,s=e.disposalpipe;return(0,o.createComponentVNode)(2,a.Stack,{style:{"border-bottom":"1px #555 solid"},children:[s.image&&(0,o.createComponentVNode)(2,a.Stack.Item,{children:(0,o.createComponentVNode)(2,a.Box,{style:{overflow:"show",height:"32px"},children:(0,o.createComponentVNode)(2,a.Image,{pixelated:!0,src:"data:image/png;base64,"+s.image})})}),(0,o.createComponentVNode)(2,a.Stack.Item,{grow:!0,children:s.disposaltype}),(0,o.createComponentVNode)(2,a.Stack.Item,{style:{display:"flex","justify-content":"center","flex-direction":"column"},children:["Amount:",(0,o.createComponentVNode)(2,a.NumberInput,{value:c,minValue:1,maxValue:d,onChange:function(e,t){return l(Math.round(t))}})]}),(0,o.createComponentVNode)(2,a.Stack.Item,{style:{"margin-left":"5px",display:"flex","justify-content":"center","flex-direction":"column"},children:(0,o.createComponentVNode)(2,a.Button,{color:u?"green":"grey",content:"Dispense",disabled:!u,style:{width:"70px","text-align":"center"},onClick:function(){return n("dmake",{disposal_type:s.disposaltype,amount:c})}})})]})};t.DisposalPipeRow=c;var l=function(e,t){var n=(0,r.useBackend)(t).act,i=e.laying_pipe,c=e.removing_pipe;return(0,o.createComponentVNode)(2,a.Section,{title:"Automatic Pipe Options",children:[(0,o.createComponentVNode)(2,a.Button,{color:i?"average":"green",content:i?"Stop Laying Pipe Automatically":"Start Laying Pipe Automatically",fluid:!0,align:"center",onClick:function(){return n("toggle_laying")}}),(0,o.createComponentVNode)(2,a.Button,{color:c?"average":"green",content:c?"Stop Removing Pipe Automatically":"Start Removing Pipe Automatically",fluid:!0,align:"center",onClick:function(){return n("toggle_removing")}})]})};t.AutoPipeLaying=l},38837:function(e,t,n){"use strict";t.__esModule=!0,t.PixelOffset=void 0;var o=n(96323),r=n(31246),a=n(26949),i=n(2381);t.PixelOffset=function(e,t){var n=(0,r.useBackend)(t),c=n.act,l=n.data,u=l.x,d=l.y,s=l.thing_name;return(0,o.createComponentVNode)(2,i.Window,{title:"Pixel Offsets for "+s,width:400,height:180,children:(0,o.createComponentVNode)(2,i.Window.Content,{children:(0,o.createComponentVNode)(2,a.Stack,{vertical:!0,children:[(0,o.createComponentVNode)(2,a.Stack.Item,{children:(0,o.createComponentVNode)(2,a.Stack,{children:[(0,o.createComponentVNode)(2,a.Stack.Item,{children:(0,o.createComponentVNode)(2,a.Box,{fontSize:"3em",width:"1.3em",children:"X:"})}),(0,o.createComponentVNode)(2,a.Stack.Item,{children:[(0,o.createComponentVNode)(2,a.Button,{icon:"plus",fontSize:"1.5em",onClick:function(){return c("set_x",{x:u+1})}}),(0,o.createComponentVNode)(2,a.Button,{icon:"minus",fontSize:"1.5em",onClick:function(){return c("set_x",{x:u-1})}}),(0,o.createComponentVNode)(2,a.NumberInput,{value:u,fontSize:"35px",stepPixelSize:7,width:"2.7em",onDrag:function(e,t){return c("set_x",{x:t})}}),(0,o.createComponentVNode)(2,a.Button,{icon:"sync-alt",color:"red",fontSize:"1.5em",onClick:function(){return c("set_x",{x:0})}})]})]})}),(0,o.createComponentVNode)(2,a.Stack.Item,{children:(0,o.createComponentVNode)(2,a.Stack,{children:[(0,o.createComponentVNode)(2,a.Stack.Item,{children:(0,o.createComponentVNode)(2,a.Box,{fontSize:"3em",width:"1.3em",children:"Y:"})}),(0,o.createComponentVNode)(2,a.Stack.Item,{children:[(0,o.createComponentVNode)(2,a.Button,{icon:"plus",fontSize:"1.5em",onClick:function(){return c("set_y",{y:d+1})}}),(0,o.createComponentVNode)(2,a.Button,{icon:"minus",fontSize:"1.5em",onClick:function(){return c("set_y",{y:d-1})}}),(0,o.createComponentVNode)(2,a.NumberInput,{value:d,fontSize:"35px",width:"2.7em",stepPixelSize:7,onDrag:function(e,t){return c("set_y",{y:t})}}),(0,o.createComponentVNode)(2,a.Button,{icon:"sync-alt",color:"red",fontSize:"1.5em",onClick:function(){return c("set_y",{y:0})}})]})]})})]})})})}},51884:function(e,t,n){"use strict";t.__esModule=!0,t.Plantmaster=void 0;var o=n(96323),r=n(31246),a=n(26949),i=n(2381),c=n(51418),l=n(28581),u=n(97622),d=n(18331),s=n(1033),p=["name","species","damage","genome","generation","maturity rate","production rate","lifespan","yield","potency","endurance","controls"],m=["name","species","damage","genome","generation","growtime","harvesttime","lifespan","cropsize","potency","endurance",""];t.Plantmaster=function(e,t){var n=(0,r.useBackend)(t),c=n.act,l=n.data,u=l.extractables,d=l.seeds,s=l.category,p=l.category_lengths,m=l.inserted,f=l.inserted_container,h=l.seedoutput,g=l.splice_chance,N=l.show_splicing,V=l.splice_seeds,y=l.sortBy,x=l.sortAsc;return(0,o.createComponentVNode)(2,i.Window,{resizable:!0,title:"Plantmaster Mk4",width:1100,height:450,children:(0,o.createComponentVNode)(2,i.Window.Content,{children:[(0,o.createComponentVNode)(2,a.Tabs,{children:[(0,o.createComponentVNode)(2,a.Tabs.Tab,{selected:"overview"===s,onClick:function(){c("change_tab",{tab:"overview"})},children:"Overview"}),(0,o.createComponentVNode)(2,a.Tabs.Tab,{selected:"extractables"===s,onClick:function(){c("change_tab",{tab:"extractables"})},children:["Seed Extraction (",p[0],")"]}),(0,o.createComponentVNode)(2,a.Tabs.Tab,{selected:"seedlist"===s,onClick:function(){c("change_tab",{tab:"seedlist"})},children:["Seeds (",p[1],")"]}),(0,o.createComponentVNode)(2,a.Tabs.Tab,{backgroundColor:null!==f?"green":"blue",selected:null!==f,icon:"eject",onClick:function(){return c(null!==f?"ejectbeaker":"insertbeaker")},bold:!0,children:null!==f?m:"Insert Beaker"})]}),"overview"===s&&(0,o.createComponentVNode)(2,C,{cat_lens:p,container:m?f:null,seedoutput:h}),"extractables"===s&&(0,o.createComponentVNode)(2,b,{seedoutput:h,produce:u,sortBy:y,sortAsc:x}),"seedlist"===s&&(0,o.createComponentVNode)(2,v,{seeds:d,seedoutput:h,splicing:N,splice_chance:g,splice_seeds:V,sortBy:y,sortAsc:x})]})})};var f=function(e,t,n,o){var r,a,i,c;return"name"===n||"species"===n?o?(null!=(r=e[n])?r:"").toString().localeCompare(null!=(a=t[n])?a:""):(null!=(i=t[n])?i:"").toString().localeCompare(null!=(c=e[n])?c:""):o?parseFloat(e[n])-parseFloat(t[n]):parseFloat(t[n])-parseFloat(e[n])},h=function(e,t){var n=(0,r.useBackend)(t).act,i=e.container||c.NoContainer;return(0,o.createComponentVNode)(2,a.SectionEx,{capitalize:!0,title:i.name,children:[!!e.container||(0,o.createComponentVNode)(2,a.Dimmer,{children:(0,o.createComponentVNode)(2,a.Button,{icon:"eject",fontSize:1.5,onClick:function(){return n("insertbeaker")},bold:!0,children:"Insert Beaker"})}),(0,o.createComponentVNode)(2,c.ReagentGraph,{container:i}),(0,o.createComponentVNode)(2,c.ReagentList,{container:i})]})},C=function(e,t){(0,r.useBackend)(t).act;var n=e.cat_lens,i=e.container;return(0,o.createComponentVNode)(2,a.SectionEx,{capitalize:!0,title:"Overview",children:(0,o.createComponentVNode)(2,a.Flex,{height:"100%",direction:"column",children:(0,o.createComponentVNode)(2,a.Flex.Item,{grow:!0,children:[(0,o.createComponentVNode)(2,a.Box,{children:["Items ready for extraction: ",(0,o.createVNode)(1,"b",null,n[0],0)," ",(0,o.createVNode)(1,"br"),"Seeds ready for experimentation: ",(0,o.createVNode)(1,"b",null,n[1],0)]}),(0,o.createComponentVNode)(2,h,{container:i})]})})})},g=function(e,t){var n=(0,r.useBackend)(t).act,i=e.show_damage,c=e.sortBy,u=e.sortAsc;return(0,o.createComponentVNode)(2,l.TableRow,{children:p.map((function(e,t){return(i||"damage"!==e)&&(0,o.createComponentVNode)(2,l.TableCell,{textAlign:"center",children:(0,o.createComponentVNode)(2,a.Button,{color:"transparent",icon:""!==c&&c===m[t]?u?"angle-up":"angle-down":"",onClick:function(){return n("sort",{sortBy:m[t],asc:c===m[t]?!u:u})},children:(0,o.createVNode)(1,"b",null,(0,d.capitalize)(e),0)})},e)}))})},N=function(e,t){var n=(0,r.useBackend)(t).act,i=e.extractable,c=e.show_damage,u=e.infuse,d=e.extract,p=e.splice,m=e.splice_disable;return(0,o.createFragment)([(0,o.createComponentVNode)(2,l.TableRow,{children:[(0,o.createComponentVNode)(2,l.TableCell,{width:"100px",textAlign:"center",children:(0,o.createComponentVNode)(2,a.Button.Input,{width:"100px",tooltip:"Click to rename",color:"transparent",textColor:"#FFFFFF",content:(0,s.truncate)(i.name[0],10),defaultValue:i.name[0],currentValue:i.name[0],onCommit:function(e,t){return n("label",{label_ref:i.ref[0],label_new:t})}})}),(0,o.createComponentVNode)(2,l.TableCell,{width:"100px",textAlign:"center",bold:i.species[1],backgroundColor:i.species[1]?"#333333":"",children:i.species[0]}),c&&(0,o.createComponentVNode)(2,l.TableCell,{textAlign:"center",bold:i.damage[1],backgroundColor:i.damage[1]?"#333333":"",children:[i.damage[0],"%"]}),(0,o.createComponentVNode)(2,l.TableCell,{textAlign:"center",bold:i.genome[1],backgroundColor:i.genome[1]?"#333333":"",children:i.genome[0]}),(0,o.createComponentVNode)(2,l.TableCell,{textAlign:"center",bold:i.generation[1],backgroundColor:i.generation[1]?"#333333":"",children:i.generation[0]}),(0,o.createComponentVNode)(2,l.TableCell,{textAlign:"center",bold:i.growtime[1],backgroundColor:i.growtime[1]?"#333333":"",children:i.growtime[0]}),(0,o.createComponentVNode)(2,l.TableCell,{textAlign:"center",bold:i.harvesttime[1],backgroundColor:i.harvesttime[1]?"#333333":"",children:i.harvesttime[0]}),(0,o.createComponentVNode)(2,l.TableCell,{textAlign:"center",bold:i.lifespan[1],backgroundColor:i.lifespan[1]?"#333333":"",children:i.lifespan[0]}),(0,o.createComponentVNode)(2,l.TableCell,{textAlign:"center",bold:i.cropsize[1],backgroundColor:i.cropsize[1]?"#333333":"",children:i.cropsize[0]}),(0,o.createComponentVNode)(2,l.TableCell,{textAlign:"center",bold:i.potency[1],backgroundColor:i.potency[1]?"#333333":"",children:i.potency[0]}),(0,o.createComponentVNode)(2,l.TableCell,{textAlign:"center",bold:i.endurance[1],backgroundColor:i.endurance[1]?"#333333":"",children:i.endurance[0]}),(0,o.createComponentVNode)(2,l.TableCell,{textAlign:"center",children:(0,o.createComponentVNode)(2,a.Flex,{children:(0,o.createComponentVNode)(2,a.Flex.Item,{nowrap:!0,children:[u&&(0,o.createComponentVNode)(2,a.Button,{icon:"fill-drip",title:"Infuse",fontSize:1.1,disabled:!i.allow_infusion[1],onClick:function(){return n("infuse",{infuse_ref:i.ref[0]})}}),d&&(0,o.createComponentVNode)(2,a.Button,{icon:"seedling",title:"Extract Seeds",fontSize:1.1,onClick:function(){return n("extract",{extract_ref:i.ref[0]})}}),p&&(0,o.createComponentVNode)(2,a.Button,{disabled:!i.splicing[1]&&m,icon:i.splicing[1]?"window-close":"code-branch",color:i.splicing[1]?"red":"",title:i.splicing[1]?"Cancel Splice":"Splice",fontSize:1.1,onClick:function(){return n("splice_select",{splice_select_ref:i.ref[0]})}}),(0,o.createComponentVNode)(2,a.Button,{icon:"search",title:"Analyze",fontSize:1.1,onClick:function(){return n("analyze",{analyze_ref:i.ref[0]})}}),(0,o.createComponentVNode)(2,a.Button,{icon:"eject",title:"Eject",fontSize:1.1,onClick:function(){return n("eject",{eject_ref:i.ref[0]})}})]})})})]}),(0,o.createComponentVNode)(2,a.Divider)],4,i.ref[1])},v=function(e,t){var n=(0,r.useBackend)(t).act,i=e.seedoutput,c=e.seeds,l=e.splicing,d=e.splice_seeds,s=e.splice_chance,p=e.sortBy,m=e.sortAsc,h=(c||[]).sort((function(e,t){return f(e,t,p,m)})),C=l?7:10,v=(0,r.useLocalState)(t,"page",1),b=v[0],V=v[1],y=Math.max(1,Math.ceil(h.length/C));(b<1||b>y)&&V((0,u.clamp)(b,1,y));var x=h.slice(C*(b-1),C*(b-1)+C),k=null!==d[0]&&null!==d[1];return(0,o.createComponentVNode)(2,a.Section,{fill:!0,title:"Seeds",buttons:(0,o.createComponentVNode)(2,a.Flex.Item,{textAlign:"center",basis:1.5,children:[(0,o.createComponentVNode)(2,a.Button,{icon:"eject",tooltip:"All seeds will be ejected from the Plantmaster",onClick:function(){return n("ejectseeds")},children:"Eject All"}),(0,o.createComponentVNode)(2,a.Button,{icon:"caret-left",title:"Previous Page",disabled:b<2,onClick:function(){return V(b-1)}}),(0,o.createComponentVNode)(2,a.NumberInput,{value:b,format:function(e){return"Page "+e+"/"+y},minValue:1,maxValue:y,stepPixelSize:15,onChange:function(e,t){return V(t)}}),(0,o.createComponentVNode)(2,a.Button,{icon:"caret-right",title:"Next Page",disabled:b>y-1,onClick:function(){return V(b+1)}}),(0,o.createComponentVNode)(2,a.Button.Checkbox,{checked:!i,tooltip:"Seeds will be extracted into the Plantmaster.",onClick:function(){return n("outputmode")},children:"Output Internally"})]}),children:(0,o.createComponentVNode)(2,a.Flex,{height:"100%",direction:"column",children:[(0,o.createComponentVNode)(2,a.Flex.Item,{height:l?"60%":"100%",children:(0,o.createComponentVNode)(2,a.Table,{children:[(0,o.createComponentVNode)(2,g,{show_damage:!0,sortBy:p,sortAsc:m}),x.map((function(e,t){return(0,o.createComponentVNode)(2,N,{extractable:e,show_damage:!0,infuse:!0,splice:!0,splice_disable:k},e.ref[1])}))]})}),l&&(0,o.createComponentVNode)(2,a.Flex.Item,{height:"30%",children:(0,o.createComponentVNode)(2,a.Section,{title:"Splicing",buttons:(0,o.createComponentVNode)(2,a.Flex.Item,{textAlign:"center",basis:1.5,children:["Splice Chance: ",s,"%\xa0",(0,o.createComponentVNode)(2,a.Button,{onClick:function(){return n("splice")},children:"Splice"})]}),children:(0,o.createComponentVNode)(2,a.Table,{children:[(0,o.createComponentVNode)(2,g,{show_damage:!0,sortBy:p,sortAsc:m}),d.filter((function(e){return null!==e})).sort((function(e,t){return f(e,t,p,m)})).map((function(e,t){return(0,o.createComponentVNode)(2,N,{extractable:e,show_damage:!0,infuse:!0,splice:!0},e.ref[1])}))]})})})]})})},b=function(e,t){var n=(0,r.useBackend)(t).act,i=e.seedoutput,c=e.produce,l=e.sortBy,d=e.sortAsc,s=(c||[]).sort((function(e,t){return f(e,t,l,d)})),p=(0,r.useLocalState)(t,"page",1),m=p[0],h=p[1],C=Math.max(1,Math.ceil(s.length/10));(m<1||m>C)&&h((0,u.clamp)(m,1,C));var v=s.slice(10*(m-1),10*(m-1)+10);return(0,o.createComponentVNode)(2,a.Section,{fill:!0,title:"Extractable Items",buttons:(0,o.createComponentVNode)(2,a.Flex.Item,{textAlign:"center",basis:1.5,children:[(0,o.createComponentVNode)(2,a.Button,{icon:"eject",tooltip:"All produce will be ejected from the Plantmaster",onClick:function(){return n("ejectextractables")},children:"Eject All"}),(0,o.createComponentVNode)(2,a.Button,{icon:"caret-left",title:"Previous Page",disabled:m<2,onClick:function(){return h(m-1)}}),(0,o.createComponentVNode)(2,a.NumberInput,{value:m,format:function(e){return"Page "+e+"/"+C},minValue:1,maxValue:C,stepPixelSize:15,onChange:function(e,t){return h(t)}}),(0,o.createComponentVNode)(2,a.Button,{icon:"caret-right",title:"Next Page",disabled:m>C-1,onClick:function(){return h(m+1)}}),(0,o.createComponentVNode)(2,a.Button.Checkbox,{checked:!i,tooltip:"Seeds will be extracted into the Plantmaster.",onClick:function(){return n("outputmode")},children:"Output Internally"})]}),children:(0,o.createComponentVNode)(2,a.Flex,{height:"100%",direction:"column",children:(0,o.createComponentVNode)(2,a.Flex.Item,{grow:!0,children:(0,o.createComponentVNode)(2,a.Table,{children:[(0,o.createComponentVNode)(2,g,{sortBy:l,sortAsc:d}),v.map((function(e,t){return(0,o.createComponentVNode)(2,N,{extractable:e,extract:!0},e.ref[1])}))]})})})})}},53302:function(e,t,n){"use strict";t.__esModule=!0,t.Header=void 0;var o=n(96323),r=n(26949),a=n(22706),i=["children","onSortClick","sortDirection"];t.Header=function(e){var t=e.children,n=e.onSortClick,c=e.sortDirection,l=function(e,t){if(null==e)return{};var n,o,r={},a=Object.keys(e);for(o=0;o<a.length;o++)n=a[o],t.indexOf(n)>=0||(r[n]=e[n]);return r}(e,i),u=c?c===a.SortDirection.Asc?"sort-alpha-down":"sort-alpha-up":"sort";return(0,o.normalizeProps)((0,o.createComponentVNode)(2,r.Stack,Object.assign({style:{cursor:"pointer"},onClick:n},l,{children:[(0,o.createComponentVNode)(2,r.Stack.Item,{children:t}),n&&(0,o.createComponentVNode)(2,r.Stack.Item,{children:(0,o.createComponentVNode)(2,r.Icon,{name:u,unselectable:!0})})]})))}},22706:function(e,t){"use strict";var n,o;t.__esModule=!0,t.SortDirection=t.Action=void 0,t.Action=n,function(e){e.JumpToPlayerLocation="jump-to-player-loc",e.OpenPlayerOptions="open-player-options",e.PrivateMessagePlayer="private-message-player"}(n||(t.Action=n={})),t.SortDirection=o,function(e){e.Asc="asc",e.Desc="desc"}(o||(t.SortDirection=o={}))},78927:function(e,t,n){"use strict";t.__esModule=!0,t.PlayerPanel=void 0;var o=n(96323),r=n(31246),a=n(26949),i=n(2381),c=n(53302),l=n(22706),u=function(e){return""+e.value},d=function(e,t){return e.localeCompare(t)},s=function(e){return Number(e.split(".").map((function(e){return("00"+e).slice(-3)})).join(""))},p=function(e){return function(t){return t.row[e]}},m=function(e){return{id:e,sorter:d,template:u,valueSelector:p(e)}},f=[Object.assign({},m("ckey"),{name:"CKey",template:function(e){var t=e.act,n=e.row,r=e.value;return(0,o.createFragment)([(0,o.createComponentVNode)(2,a.Button,{onClick:function(){return t(l.Action.OpenPlayerOptions,{ckey:r,mobRef:n.mobRef})},children:r}),(0,o.createComponentVNode)(2,a.Button,{icon:"envelope",color:"bad",onClick:function(){return t(l.Action.PrivateMessagePlayer,{ckey:r,mobRef:n.mobRef})}})],4)}}),Object.assign({},m("name"),{name:"Name"}),Object.assign({},m("realName"),{name:"Real Name"}),Object.assign({},m("assignedRole"),{name:"Assigned Role"}),Object.assign({},m("specialRole"),{name:"Special Role"}),Object.assign({},m("playerType"),{name:"Player Type"}),Object.assign({},m("computerId"),{name:"CID"}),Object.assign({},m("ip"),{name:"IP",sorter:function(e,t){return s(e)-s(t)}}),Object.assign({},m("joined"),{name:"Join Date",sorter:function(e,t){var n=e.split("-").map(parseFloat),o=t.split("-").map(parseFloat);return n>o?1:n<o?-1:0}}),Object.assign({},m("playerLocation"),{name:"Player Location",template:function(e){var t=e.act,n=e.row,r=e.value;return(0,o.createComponentVNode)(2,a.Button,{onClick:function(){return t(l.Action.JumpToPlayerLocation,{ckey:n.ckey,mobRef:n.mobRef})},children:r})}}),Object.assign({},m("ping"),{name:"Ping",sorter:function(e,t){return e-t}})];t.PlayerPanel=function(e,t){var n=(0,r.useBackend)(t),u=n.act,d=n.data.players,s=(0,r.useLocalState)(t,"search",""),p=s[0],m=s[1],h=(0,r.useLocalState)(t,"sort",null),C=h[0],g=h[1],N=Object.keys(d).map((function(e){return d[e]})),v=N.reduce((function(e,t){return e[t.ckey]=f.reduce((function(e,n){var o=n.id,r=n.valueSelector;return e[o]=r({column:n,row:t}),e}),{}),e}),{});if(p){var b=p.toLowerCase();N=N.filter((function(e){return Object.values(v[e.ckey]).some((function(e){return"string"==typeof e&&e.toLowerCase().includes(b)}))}))}if(C){var V=f.find((function(e){return e.id===C.id}));V&&N.sort((function(e,t){var n=V.sorter(v[e.ckey][V.id],v[t.ckey][V.id]);return C.dir===l.SortDirection.Desc&&(n*=-1),n}))}return(0,o.createComponentVNode)(2,i.Window,{width:1100,height:640,title:"Player Panel",children:(0,o.createComponentVNode)(2,i.Window.Content,{scrollable:!0,children:[(0,o.createComponentVNode)(2,a.Input,{autoFocus:!0,mb:1,placeholder:"Search...",onInput:function(e,t){return m(t)},value:p}),(0,o.createComponentVNode)(2,a.Table,{children:[(0,o.createComponentVNode)(2,a.Table.Row,{header:!0,children:f.map((function(e){var t=(null==C?void 0:C.id)===e.id?C:null;return(0,o.createComponentVNode)(2,a.Table.Cell,{children:(0,o.createComponentVNode)(2,c.Header,{onSortClick:e.sorter?function(){return g({dir:null!=t&&t.dir&&t.dir===l.SortDirection.Asc?l.SortDirection.Desc:l.SortDirection.Asc,id:e.id})}:null,sortDirection:null==t?void 0:t.dir,children:e.name})},e.field)}))}),N.map((function(e){var t=e.ckey;return(0,o.createComponentVNode)(2,a.Table.Row,{children:f.map((function(n){var r=n.id,i=n.template;return(0,o.createComponentVNode)(2,a.Table.Cell,{children:i({act:u,column:n,row:e,value:v[t][r]})},r)}))},t)}))]})]})})}},43771:function(){},29467:function(e,t,n){"use strict";t.__esModule=!0,t.PollBallot=void 0;var o=n(96323),r=n(31246),a=n(26949),i=n(2381),c=function(e){var t=e.isAdmin,n=e.act,r=e.pollId,i=e.isExpired,c=e.multipleChoice,l=e.expiryDate,u=function(e){return e.includes("global")?{tooltip:"Global Poll",icon:"globe"}:e.includes("rp_only")?{tooltip:"RP Only Poll",icon:"masks-theater"}:{tooltip:"Local Poll",icon:"location-dot"}}(e.servers);return(0,o.createComponentVNode)(2,a.Stack,{children:(0,o.createComponentVNode)(2,a.Stack.Item,{children:[c?(0,o.createComponentVNode)(2,a.Button,{tooltip:"Multiple Choice",tooltipPosition:"top",icon:"list-check"}):null,(0,o.createComponentVNode)(2,a.Button,{tooltip:u.tooltip,tooltipPosition:"top",icon:u.icon,onClick:function(){return n("editServers",{pollId:r})}}),(0,o.createComponentVNode)(2,a.Button,{tooltip:l||"No Expiration Date",tooltipPosition:"top",color:i?"bad":"good",icon:i?"lock":"lock-open",onClick:function(){return n("editExpiration",{pollId:r})}}),t?(0,o.createFragment)([(0,o.createComponentVNode)(2,a.Button,{tooltip:"Add Option",tooltipPosition:"top",icon:"plus",onClick:function(){return n("addOption",{pollId:r})}}),(0,o.createComponentVNode)(2,a.Button,{tooltip:"Edit Poll",tooltipPosition:"top",icon:"pen",onClick:function(){return n("editPoll",{pollId:r})}}),(0,o.createComponentVNode)(2,a.Button.Confirm,{tooltip:"Delete Poll",tooltipPosition:"top",icon:"trash",color:"bad",onClick:function(){return n("deletePoll",{pollId:r})}})],4):null]})})},l=function(e){var t=e.isAdmin,n=e.act,r=e.pollId,i=e.optionId;return t?(0,o.createComponentVNode)(2,a.Stack,{children:(0,o.createComponentVNode)(2,a.Stack.Item,{children:[(0,o.createComponentVNode)(2,a.Button,{icon:"pen",onClick:function(){return n("editOption",{pollId:r,optionId:i})}}),(0,o.createComponentVNode)(2,a.Button.Confirm,{icon:"trash",color:"bad",onClick:function(){return n("deleteOption",{pollId:r,optionId:i})}})]})}):null},u=function(e){var t=e.options,n=e.total_answers,r=e.act,i=e.pollId,c=e.isAdmin,u=e.isExpired,d=e.playerId,s=e.showVotes;return t&&0!==t.length?(0,o.createComponentVNode)(2,a.Stack,{vertical:!0,children:t.map((function(e,t){return(0,o.createComponentVNode)(2,a.Stack.Item,{children:(0,o.createComponentVNode)(2,a.Stack,{vertical:!0,children:[(0,o.createComponentVNode)(2,a.Stack,{children:[(0,o.createComponentVNode)(2,a.Stack.Item,{grow:!0,children:(0,o.createComponentVNode)(2,a.Stack,{children:[(0,o.createComponentVNode)(2,a.Stack.Item,{grow:!0,children:(0,o.createComponentVNode)(2,a.Button.Checkbox,{disabled:u,checked:e.answers_player_ids.includes(d),onClick:function(){return r("vote",{pollId:i,optionId:e.id})},children:e.option})}),s?(0,o.createComponentVNode)(2,a.Stack.Item,{align:"right",children:"("+e.answers_count+" votes)"}):null]})}),(0,o.createComponentVNode)(2,a.Stack.Item,{children:(0,o.createComponentVNode)(2,l,{isAdmin:c,act:r,pollId:i,optionId:e.id})})]}),(0,o.createComponentVNode)(2,a.Stack.Item,{children:(0,o.createComponentVNode)(2,a.ProgressBar,{value:n?e.answers_count/n:0})})]})},t)}))}):null};t.PollBallot=function(e,t){var n=(0,r.useBackend)(t),l=n.act,d=n.data,s=d.isAdmin,p=d.filterInactive,m=d.polls,f=d.playerId,h=d.showVotes;return(0,o.createComponentVNode)(2,i.Window,{title:"Poll Ballot",width:"750",height:"800",children:(0,o.createComponentVNode)(2,i.Window.Content,{children:(0,o.createComponentVNode)(2,a.Stack,{vertical:!0,children:[(0,o.createComponentVNode)(2,a.Stack.Item,{children:(0,o.createComponentVNode)(2,a.Stack,{children:[(0,o.createComponentVNode)(2,a.Stack.Item,{children:(0,o.createComponentVNode)(2,a.Button.Checkbox,{checked:p,onClick:function(){return l("toggle-filterInactive")},children:"Filter Closed Polls"})}),(0,o.createComponentVNode)(2,a.Stack.Item,{children:(0,o.createComponentVNode)(2,a.Button.Checkbox,{checked:h,onClick:function(){return l("toggle-showVotes")},children:"Show Votes"})}),s?(0,o.createComponentVNode)(2,a.Stack.Item,{children:(0,o.createComponentVNode)(2,a.Button,{onClick:function(){return l("addPoll")},children:"Add Poll"})}):null]})}),m&&m.filter((function(e){var t=!!e.expires_at&&new Date>=new Date(e.expires_at);return!p||!t})).map((function(e,t){return(0,o.createComponentVNode)(2,a.Stack.Item,{children:(0,o.createComponentVNode)(2,a.Section,{title:e.question,buttons:(0,o.createComponentVNode)(2,c,{isAdmin:s,act:l,pollId:e.id,isExpired:e.expires_at&&new Date>new Date(e.expires_at),multipleChoice:e.multiple_choice,expiryDate:e.expires_at,servers:e.servers}),children:(0,o.createComponentVNode)(2,a.Stack,{vertical:!0,children:(0,o.createComponentVNode)(2,u,{options:e.options,total_answers:e.total_answers,act:l,pollId:e.id,isAdmin:s,isExpired:e.expires_at&&new Date>new Date(e.expires_at),playerId:f,showVotes:h})})})},t)}))]})})})}},13484:function(e,t,n){"use strict";t.__esModule=!0,t.PortablePump=void 0;var o=n(96323),r=n(31246),a=n(26949),i=n(2381),c=n(41161);t.PortablePump=function(e,t){var n=(0,r.useBackend)(t),l=n.act,u=n.data,d=u.connected,s=u.on,p=u.direction_out,m=u.holding,f=u.pressure,h=u.targetPressure,C=u.maxPressure,g=u.minRelease,N=u.maxRelease;return(0,o.createComponentVNode)(2,i.Window,{width:305,height:365,children:(0,o.createComponentVNode)(2,i.Window.Content,{children:[(0,o.createComponentVNode)(2,c.PortableBasicInfo,{connected:d,pressure:f,maxPressure:C,children:[(0,o.createComponentVNode)(2,a.Divider),(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Pump Power",children:(0,o.createComponentVNode)(2,a.Button,{content:s?"On":"Off",color:s?"average":"default",onClick:function(){return l("toggle-power")}})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Target Pressure",children:[(0,o.createComponentVNode)(2,a.Button,{onClick:function(){return l("set-pressure",{targetPressure:g})},content:"Min"}),(0,o.createComponentVNode)(2,a.NumberInput,{animated:!0,width:"7em",value:h,minValue:g,maxValue:N,onChange:function(e,t){return l("set-pressure",{targetPressure:t})}}),(0,o.createComponentVNode)(2,a.Button,{onClick:function(){return l("set-pressure",{targetPressure:N})},content:"Max"})]}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Pump Direction",children:(0,o.createComponentVNode)(2,a.Button,{content:p?"Out":"In",color:p?"yellow":"blue",onClick:function(){return l("toggle-pump")}})})]})]}),(0,o.createComponentVNode)(2,c.PortableHoldingTank,{holding:m,onEjectTank:function(){return l("eject-tank")}})]})})}},54652:function(e,t,n){"use strict";t.__esModule=!0,t.PortableScrubber=void 0;var o=n(96323),r=n(31246),a=n(26949),i=n(2381),c=n(41161),l=n(51418);t.PortableScrubber=function(e,t){var n=(0,r.useBackend)(t),u=n.act,d=n.data,s=d.connected,p=d.on,m=d.holding,f=d.pressure,h=d.inletFlow,C=d.maxPressure,g=d.minFlow,N=d.maxFlow,v=d.reagent_container;return(0,o.createComponentVNode)(2,i.Window,{width:305,height:450,children:(0,o.createComponentVNode)(2,i.Window.Content,{children:[(0,o.createComponentVNode)(2,c.PortableBasicInfo,{connected:s,pressure:f,maxPressure:C,children:[(0,o.createComponentVNode)(2,a.Divider),(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Scrubber Power",children:(0,o.createComponentVNode)(2,a.Button,{content:p?"On":"Off",color:p?"average":"default",onClick:function(){return u("toggle-power")}})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Inlet Flow",children:[(0,o.createComponentVNode)(2,a.Button,{onClick:function(){return u("set-inlet-flow",{inletFlow:g})},content:"Min"}),(0,o.createComponentVNode)(2,a.NumberInput,{animated:!0,width:"7em",value:h,minValue:g,maxValue:N,onChange:function(e,t){return u("set-inlet-flow",{inletFlow:t})}}),(0,o.createComponentVNode)(2,a.Button,{onClick:function(){return u("set-inlet-flow",{inletFlow:N})},content:"Max"})]})]})]}),(0,o.createComponentVNode)(2,c.PortableHoldingTank,{holding:m,onEjectTank:function(){return u("eject-tank")}}),(0,o.createComponentVNode)(2,a.Section,{title:"Fluid Tank",children:(0,o.createComponentVNode)(2,l.ReagentGraph,{container:v})})]})})}},15264:function(e,t,n){"use strict";t.__esModule=!0,t.PowerDebug=t.MachineData=t.AreaData=void 0;var o=n(96323),r=n(31246),a=n(26949),i=n(2381),c=function(e){var t=e.areaData;return(0,o.createComponentVNode)(2,a.Flex.Item,{mb:1,children:(0,o.createComponentVNode)(2,a.Flex,{direction:"column",children:Object.keys(t).map((function(e,n){return(0,o.createComponentVNode)(2,a.Flex.Item,{mb:1,children:[(0,o.createComponentVNode)(2,a.Section,{title:t[e].name,children:t[e].total?(0,o.createComponentVNode)(2,a.Flex,{justify:"space-between",children:[(0,o.createComponentVNode)(2,a.Flex.Item,{children:["Total:",t[e].total," "]}),(0,o.createComponentVNode)(2,a.Flex.Item,{children:["Equip:",t[e].equip]}),(0,o.createComponentVNode)(2,a.Flex.Item,{children:["Light:",t[e].light," "]}),(0,o.createComponentVNode)(2,a.Flex.Item,{children:["Environ:",t[e].environ]})]}):"NO APC"}),(0,o.createComponentVNode)(2,l,{machineData:t[e].machines})]},n)}))})})};t.AreaData=c;var l=function(e,t){var n=(0,r.useBackend)(t).act,i=e.machineData;return Object.keys(i).map((function(e,t){return(0,o.createComponentVNode)(2,a.Flex,{direction:"row",children:[(0,o.createComponentVNode)(2,a.Flex.Item,{children:(0,o.createComponentVNode)(2,a.Button,{onClick:function(){n("jmp",{ref:e})},children:"JMP"})}),(0,o.createComponentVNode)(2,a.Flex.Item,{basis:20,children:i[e].name}),(0,o.createComponentVNode)(2,a.Flex.Item,{basis:8,children:i[e].data}),(0,o.createComponentVNode)(2,a.Flex.Item,{children:i[e].power_usage})]},t)}))};t.MachineData=l;t.PowerDebug=function(e,t){var n=(0,r.useBackend)(t),l=(n.act,n.data.areaData);return(0,o.createComponentVNode)(2,i.Window,{title:"PowerDebug",width:500,height:600,children:(0,o.createComponentVNode)(2,i.Window.Content,{scrollable:!0,children:(0,o.createComponentVNode)(2,a.Section,{title:(0,o.createComponentVNode)(2,a.Box,{inline:!0,children:"Power Debug"}),children:(0,o.createComponentVNode)(2,a.Flex,{direction:"row",children:(0,o.createComponentVNode)(2,c,{areaData:l})})})})})}},4914:function(e,t,n){"use strict";t.__esModule=!0,t.PowerMonitorApcTableRows=t.PowerMonitorApcTableHeader=t.PowerMonitorApcGlobal=void 0;var o,r,a=n(96323),i=n(31246),c=n(26949),l=n(1033),u=((o={})[0]="Off",o[1]=(0,a.createComponentVNode)(2,c.Box,{inline:!0,children:["Off"," ",(0,a.createComponentVNode)(2,c.Box,{inline:!0,color:"grey",children:"(Auto)"})]}),o[2]="On",o[3]=(0,a.createComponentVNode)(2,c.Box,{inline:!0,children:["On"," ",(0,a.createComponentVNode)(2,c.Box,{inline:!0,color:"grey",children:"(Auto)"})]}),o),d=((r={})[0]="Discharging",r[1]="Charging",r[2]="Charged",r);t.PowerMonitorApcGlobal=function(e,t){var n=(0,i.useBackend)(t).data,o=n.history.map((function(e){return e[0]})),r=o.map((function(e,t){return[t,e]})),u=n.history.map((function(e){return e[1]})),d=u.map((function(e,t){return[t,e]})),s=Math.max.apply(Math,o.concat(u));return(0,a.createComponentVNode)(2,c.Stack,{fill:!0,children:[(0,a.createComponentVNode)(2,c.Stack.Item,{width:"50%",children:[(0,a.createComponentVNode)(2,c.LabeledList,{children:(0,a.createComponentVNode)(2,c.LabeledList.Item,{label:"Total Power",children:(0,l.formatPower)(n.available)})}),(0,a.createComponentVNode)(2,c.Chart.Line,{mt:"5px",height:"5em",data:r,rangeX:[0,r.length-1],rangeY:[0,s],strokeColor:"rgba(1, 184, 170, 1)",fillColor:"rgba(1, 184, 170, 0.25)"})]}),(0,a.createComponentVNode)(2,c.Stack.Item,{width:"50%",children:[(0,a.createComponentVNode)(2,c.LabeledList,{children:(0,a.createComponentVNode)(2,c.LabeledList.Item,{label:"Total Load",children:(0,l.formatPower)(n.load)})}),(0,a.createComponentVNode)(2,c.Chart.Line,{mt:"5px",height:"5em",data:d,rangeX:[0,d.length-1],rangeY:[0,s],strokeColor:"rgba(1, 184, 170, 1)",fillColor:"rgba(1, 184, 170, 0.25)"})]})]})};t.PowerMonitorApcTableHeader=function(){return(0,a.createFragment)([(0,a.createComponentVNode)(2,c.Table.Cell,{header:!0,children:"Area"}),(0,a.createComponentVNode)(2,c.Tooltip,{content:"Equipment",children:(0,a.createComponentVNode)(2,c.Table.Cell,{header:!0,collapsing:!0,children:"Eqp."})}),(0,a.createComponentVNode)(2,c.Tooltip,{content:"Lighting",children:(0,a.createComponentVNode)(2,c.Table.Cell,{header:!0,collapsing:!0,children:"Lgt."})}),(0,a.createComponentVNode)(2,c.Tooltip,{content:"Environment",children:(0,a.createComponentVNode)(2,c.Table.Cell,{header:!0,collapsing:!0,children:"Env."})}),(0,a.createComponentVNode)(2,c.Table.Cell,{header:!0,textAlign:"right",children:"Load"}),(0,a.createComponentVNode)(2,c.Table.Cell,{header:!0,textAlign:"right",children:"Cell Charge"}),(0,a.createComponentVNode)(2,c.Table.Cell,{header:!0,children:"Cell State"})],4)};t.PowerMonitorApcTableRows=function(e,t){var n=e.search,o=(0,i.useBackend)(t).data;return(0,a.createFragment)(o.apcs.map((function(e){return(0,a.createComponentVNode)(2,s,{apc:e,search:n},e[0])})),0)};var s=function(e,t){var n,o=e.apc,r=e.search,u=o[0],s=o[1],m=o[2],f=o[3],h=o[4],C=o[5],g=o[6],N=null!=(n=(0,i.useBackend)(t).data.apcNames[u])?n:"N/A";return r&&!N.toLowerCase().includes(r.toLowerCase())?null:(0,a.createComponentVNode)(2,c.Table.Row,{children:[(0,a.createComponentVNode)(2,c.Table.Cell,{children:N}),(0,a.createComponentVNode)(2,p,{state:s}),(0,a.createComponentVNode)(2,p,{state:m}),(0,a.createComponentVNode)(2,p,{state:f}),(0,a.createComponentVNode)(2,c.Table.Cell,{textAlign:"right",nowrap:!0,children:(0,l.formatPower)(h)}),"number"==typeof C?(0,a.createFragment)([(0,a.createComponentVNode)(2,c.Table.Cell,{textAlign:"right",nowrap:!0,children:[C,"%"]}),(0,a.createComponentVNode)(2,c.Table.Cell,{color:g>0?1===g?"average":"good":"bad",nowrap:!0,children:d[g]})],4):(0,a.createFragment)([(0,a.createComponentVNode)(2,c.Table.Cell),(0,a.createComponentVNode)(2,c.Table.Cell,{color:"bad",children:"N/A"})],4)]})},p=function(e){var t=e.state;return(0,a.createComponentVNode)(2,c.Table.Cell,{nowrap:!0,color:t>=2?"good":"bad",children:u[t]})}},8954:function(e,t,n){"use strict";t.__esModule=!0,t.PowerMonitorSmesTableRows=t.PowerMonitorSmesTableHeader=t.PowerMonitorSmesGlobal=void 0;var o=n(96323),r=n(31246),a=n(26949),i=n(1033);t.PowerMonitorSmesGlobal=function(e,t){var n=(0,r.useBackend)(t).data,c=n.history.map((function(e){return e[0]})),l=c.map((function(e,t){return[t,e]})),u=n.history.map((function(e){return e[1]})),d=u.map((function(e,t){return[t,e]})),s=Math.max.apply(Math,c.concat(u));return(0,o.createComponentVNode)(2,a.Stack,{fill:!0,children:[(0,o.createComponentVNode)(2,a.Stack.Item,{width:"50%",children:[(0,o.createComponentVNode)(2,a.LabeledList,{children:(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Engine Output",children:(0,i.formatPower)(n.available)})}),(0,o.createComponentVNode)(2,a.Chart.Line,{mt:"5px",height:"5em",data:l,rangeX:[0,l.length-1],rangeY:[0,s],strokeColor:"rgba(1, 184, 170, 1)",fillColor:"rgba(1, 184, 170, 0.25)"})]}),(0,o.createComponentVNode)(2,a.Stack.Item,{width:"50%",children:[(0,o.createComponentVNode)(2,a.LabeledList,{children:(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"SMES/PTL Draw",children:(0,i.formatPower)(n.load)})}),(0,o.createComponentVNode)(2,a.Chart.Line,{mt:"5px",height:"5em",data:d,rangeX:[0,d.length-1],rangeY:[0,s],strokeColor:"rgba(1, 184, 170, 1)",fillColor:"rgba(1, 184, 170, 0.25)"})]})]})};t.PowerMonitorSmesTableHeader=function(e,t){return(0,o.createFragment)([(0,o.createComponentVNode)(2,a.Table.Cell,{header:!0,children:"Area"}),(0,o.createComponentVNode)(2,a.Table.Cell,{header:!0,children:"Stored Power"}),(0,o.createComponentVNode)(2,a.Table.Cell,{header:!0,children:"Charging"}),(0,o.createComponentVNode)(2,a.Table.Cell,{header:!0,children:"Input"}),(0,o.createComponentVNode)(2,a.Table.Cell,{header:!0,children:"Output"}),(0,o.createComponentVNode)(2,a.Table.Cell,{header:!0,children:"Active"}),(0,o.createComponentVNode)(2,a.Table.Cell,{header:!0,children:"Load"})],4)};t.PowerMonitorSmesTableRows=function(e,t){var n=e.search,a=(0,r.useBackend)(t).data;return(0,o.createFragment)(a.units.map((function(e){return(0,o.createComponentVNode)(2,c,{unit:e,search:n},e[0])})),0)};var c=function(e,t){var n,c=e.unit,l=e.search,u=c[0],d=c[1],s=c[2],p=c[3],m=c[4],f=c[5],h=c[6],C=null!=(n=(0,r.useBackend)(t).data.unitNames[u])?n:"N/A";return l&&!C.toLowerCase().includes(l.toLowerCase())?null:(0,o.createComponentVNode)(2,a.Table.Row,{children:[(0,o.createComponentVNode)(2,a.Table.Cell,{children:C}),(0,o.createComponentVNode)(2,a.Table.Cell,{children:[d,"%"]}),(0,o.createComponentVNode)(2,a.Table.Cell,{color:s?"good":"bad",children:s?"Yes":"No"}),(0,o.createComponentVNode)(2,a.Table.Cell,{children:(0,i.formatPower)(p)}),(0,o.createComponentVNode)(2,a.Table.Cell,{children:(0,i.formatPower)(m)}),(0,o.createComponentVNode)(2,a.Table.Cell,{color:f?"good":"bad",children:f?"Yes":"No"}),(0,o.createComponentVNode)(2,a.Table.Cell,{children:h?(0,i.formatPower)(h):"N/A"})]})}},84699:function(e,t,n){"use strict";t.__esModule=!0,t.PowerMonitor=void 0;var o=n(96323),r=n(31246),a=n(26949),i=n(2381),c=n(4914),l=n(8954),u=n(2441);t.PowerMonitor=function(e,t){var n=(0,r.useBackend)(t).data,d=(0,r.useSharedState)(t,"search",""),s=d[0],p=d[1];return(0,o.createComponentVNode)(2,i.Window,{width:700,height:700,theme:"retro-dark",children:(0,o.createComponentVNode)(2,i.Window.Content,{children:(0,o.createComponentVNode)(2,a.Stack,{vertical:!0,fill:!0,children:[(0,o.createComponentVNode)(2,a.Stack.Item,{children:(0,o.createComponentVNode)(2,a.Section,{children:[(0,u.isDataForApc)(n)&&(0,o.createComponentVNode)(2,c.PowerMonitorApcGlobal),(0,u.isDataForSmes)(n)&&(0,o.createComponentVNode)(2,l.PowerMonitorSmesGlobal)]})}),(0,o.createComponentVNode)(2,a.Stack.Item,{children:(0,o.createComponentVNode)(2,a.Section,{children:(0,o.createComponentVNode)(2,a.LabeledList,{children:(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Search",children:(0,o.createComponentVNode)(2,a.Input,{value:s,onInput:function(e,t){return p(t)}})})})})}),(0,o.createComponentVNode)(2,a.Stack.Item,{grow:1,children:(0,o.createComponentVNode)(2,a.Section,{fill:!0,scrollable:!0,children:(0,o.createComponentVNode)(2,a.Table,{children:[(0,o.createComponentVNode)(2,a.Table.Row,{header:!0,children:(0,u.isDataForApc)(n)&&(0,o.createComponentVNode)(2,c.PowerMonitorApcTableHeader)}),(0,u.isDataForApc)(n)&&(0,o.createComponentVNode)(2,c.PowerMonitorApcTableRows,{search:s}),(0,o.createComponentVNode)(2,a.Table.Row,{header:!0,children:(0,u.isDataForSmes)(n)&&(0,o.createComponentVNode)(2,l.PowerMonitorSmesTableHeader)}),(0,u.isDataForSmes)(n)&&(0,o.createComponentVNode)(2,l.PowerMonitorSmesTableRows,{search:s})]})})})]})})})}},2441:function(e,t){"use strict";var n;t.__esModule=!0,t.isDataForSmes=t.isDataForApc=t.PowerMonitorType=void 0,t.PowerMonitorType=n,function(e){e.Apc="apc",e.Smes="smes"}(n||(t.PowerMonitorType=n={}));t.isDataForApc=function(e){return e.type===n.Apc};t.isDataForSmes=function(e){return e.type===n.Smes}},36476:function(e,t,n){"use strict";t.__esModule=!0,t.PowerTransmissionLaser=void 0;var o=n(96323),r=n(31246),a=n(26949),i=n(1033),c=n(2381);t.PowerTransmissionLaser=function(e,t){var n=(0,r.useBackend)(t).data,s=n.lifetimeEarnings,p=n.name,m=void 0===p?"Power Transmission Laser":p;return(0,o.createComponentVNode)(2,c.Window,{title:m,width:"310",height:"485",children:(0,o.createComponentVNode)(2,c.Window.Content,{children:[(0,o.createComponentVNode)(2,l),(0,o.createComponentVNode)(2,u),(0,o.createComponentVNode)(2,d),(0,o.createComponentVNode)(2,a.NoticeBox,{success:!0,children:["Earned Credits : ",(0,i.formatMoney)(s)]})]})})};var l=function(e,t){var n=(0,r.useBackend)(t).data,c=n.capacity,l=n.charge,u=n.gridLoad,d=n.totalGridPower;return(0,o.createComponentVNode)(2,a.Section,{title:"Status",children:[(0,o.createComponentVNode)(2,a.LabeledList,{children:(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Reserve Power",children:(0,i.formatSiUnit)(l,0,"J")})}),(0,o.createComponentVNode)(2,a.ProgressBar,{mt:"0.5em",mb:"0.5em",ranges:{good:[.8,Infinity],average:[.5,.8],bad:[-Infinity,.5]},value:l/c}),(0,o.createComponentVNode)(2,a.LabeledList,{children:(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Grid Saturation"})}),(0,o.createComponentVNode)(2,a.ProgressBar,{mt:"0.5em",ranges:{good:[.8,Infinity],average:[.5,.8],bad:[-Infinity,.5]},value:d?u/d:0})]})},u=function(e,t){var n=(0,r.useBackend)(t),c=n.act,l=n.data,u=l.isChargingEnabled,d=l.excessPower,s=l.isCharging,p=l.inputLevel,m=l.inputNumber,f=l.inputMultiplier;return(0,o.createComponentVNode)(2,a.Section,{title:"Input Controls",children:[(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Input Circuit",buttons:(0,o.createComponentVNode)(2,a.Button,{icon:"power-off",content:u?"Enabled":"Disabled",color:u?"green":"red",onClick:function(){return c("toggleInput")}}),children:(0,o.createComponentVNode)(2,a.Box,{color:(s?"good":u&&"average")||"bad",children:(s?"Online":u&&"Idle")||"Offline"})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Input Level",children:(0,i.formatPower)(p)}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Optimal",children:(0,i.formatPower)(d)})]}),(0,o.createComponentVNode)(2,a.Box,{mt:"0.5em",children:[(0,o.createComponentVNode)(2,a.Knob,{mr:"0.5em",animated:!0,size:1.25,inline:!0,step:5,stepPixelSize:2,minValue:0,maxValue:999,value:m,onDrag:function(e,t){return c("setInput",{setInput:t})}}),(0,o.createComponentVNode)(2,a.Button,{content:"W",selected:1===f,onClick:function(){return c("inputW")}}),(0,o.createComponentVNode)(2,a.Button,{content:"kW",selected:f===Math.pow(10,3),onClick:function(){return c("inputkW")}}),(0,o.createComponentVNode)(2,a.Button,{content:"MW",selected:f===Math.pow(10,6),onClick:function(){return c("inputMW")}}),(0,o.createComponentVNode)(2,a.Button,{content:"GW",selected:f===Math.pow(10,9),onClick:function(){return c("inputGW")}}),(0,o.createComponentVNode)(2,a.Button,{content:"TW",selected:f===Math.pow(10,12),onClick:function(){return c("inputTW")}})]})]})},d=function(e,t){var n=(0,r.useBackend)(t),c=n.act,l=n.data,u=l.isEmagged,d=l.isFiring,s=l.isLaserEnabled,p=l.outputLevel,m=l.outputNumber,f=l.outputMultiplier;return(0,o.createComponentVNode)(2,a.Section,{title:"Output Controls",children:[(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Laser Circuit",buttons:(0,o.createComponentVNode)(2,a.Button,{icon:"power-off",content:s?"Enabled":"Disabled",color:s?"green":"red",onClick:function(){return c("toggleOutput")}}),children:(0,o.createComponentVNode)(2,a.Box,{color:(d?"good":s&&"average")||"bad",children:(d?"Online":s&&"Idle")||"Offline"})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Output Level",children:m<0?"-"+(0,i.formatPower)(Math.abs(p)):(0,i.formatPower)(p)})]}),(0,o.createComponentVNode)(2,a.Box,{mt:"0.5em",children:[(0,o.createComponentVNode)(2,a.Knob,{mr:"0.5em",size:1.25,animated:!0,bipolar:u,inline:!0,step:5,stepPixelSize:2,minValue:u?-999:0,maxValue:999,ranges:{bad:[-Infinity,-1]},value:m,onDrag:function(e,t){return c("setOutput",{setOutput:t})}}),(0,o.createComponentVNode)(2,a.Button,{content:"MW",selected:f===Math.pow(10,6),onClick:function(){return c("outputMW")}}),(0,o.createComponentVNode)(2,a.Button,{content:"GW",selected:f===Math.pow(10,9),onClick:function(){return c("outputGW")}}),(0,o.createComponentVNode)(2,a.Button,{content:"TW",selected:f===Math.pow(10,12),onClick:function(){return c("outputTW")}})]})]})}},61221:function(e,t,n){"use strict";t.__esModule=!0,t.Precipitation=void 0;var o=n(96323),r=n(31246),a=n(26949),i=n(2381),c=n(51418);t.Precipitation=function(e,t){var n=(0,r.useBackend)(t),l=n.act,u=n.data,d=u.probability,s=u.cooldown,p=u.poolDepth,m=u.containerData;return(0,o.createComponentVNode)(2,i.Window,{title:"Precipitation",width:300,height:425,children:(0,o.createComponentVNode)(2,i.Window.Content,{scrollable:!0,children:(0,o.createComponentVNode)(2,a.Section,{title:(0,o.createComponentVNode)(2,a.Box,{inline:!0,children:"Precipitation"}),children:[(0,o.createComponentVNode)(2,a.Tooltip,{content:"Cooldown for how fast ATOMs can be rained on.",children:(0,o.createComponentVNode)(2,a.Box,{m:1,children:["Cooldown",(0,o.createComponentVNode)(2,a.NumberInput,{value:s,width:4,minValue:0,onChange:function(e,t){return l("set-cooldown",{value:t})}})]})}),(0,o.createComponentVNode)(2,a.Tooltip,{content:"Chance of being rained on entering turf.",children:(0,o.createComponentVNode)(2,a.Box,{m:1,children:["Probability",(0,o.createComponentVNode)(2,a.NumberInput,{value:d,width:4,minValue:0,maxValue:100,onChange:function(e,t){return l("set-probability",{value:t})}})]})}),(0,o.createComponentVNode)(2,a.Tooltip,{content:"Maximum fluid size/depth on the tile. (0 means no pooling will form)",children:(0,o.createComponentVNode)(2,a.Box,{m:1,children:["Maximum Pool Depth",(0,o.createComponentVNode)(2,a.NumberInput,{value:p,width:4,minValue:0,maxValue:100,onChange:function(e,t){return l("set-poolDepth",{value:t})}})]})}),(0,o.createComponentVNode)(2,a.Section,{title:"Reagents",children:[(0,o.createComponentVNode)(2,c.ReagentList,{container:m,renderButtons:function(e){return(0,o.createFragment)([(0,o.createComponentVNode)(2,a.Button,{px:.75,mr:1.5,icon:"filter",color:"red",title:"Isolate",onClick:function(){return l("isolate",{container_id:m.id,reagent_id:e.id})}}),(0,o.createComponentVNode)(2,a.Button,{px:.75,icon:"times",color:"red",title:"Flush",onClick:function(){return l("flush_reagent",{container_id:m.id,reagent_id:e.id})}})],4)}}),(0,o.createComponentVNode)(2,a.Box,{m:1,children:[(0,o.createComponentVNode)(2,a.Button,{ml:1,onClick:function(){return l("add_reagents")},children:"Add Reagents"}),(0,o.createComponentVNode)(2,a.Button,{ml:1,onClick:function(){return l("flush")},children:"Clear Reagents"})]})]}),(0,o.createComponentVNode)(2,a.Section,{title:"Particle",children:(0,o.createComponentVNode)(2,a.Box,{m:1,children:(0,o.createComponentVNode)(2,a.Button,{fluid:!0,onClick:function(){return l("particle_editor")},children:"Edit Particle"})})})]})})})}},90227:function(e,t,n){"use strict";t.__esModule=!0,t.Pressurizer=void 0;var o=n(96323),r=n(31246),a=n(26949),i=n(2381),c=n(41161),l=0,u=1,d=2,s={good:[1,Infinity],average:[.75,1],bad:[-Infinity,.75]};t.Pressurizer=function(e,t){var n=(0,r.useBackend)(t),p=n.act,m=n.data,f=m.airSafe,h=m.blastArmed,C=m.blastDelay,g=m.connected,N=m.emagged,v=m.fanState,b=m.materialsCount,V=m.materialsProgress,y=m.maxArmDelay,x=m.maxPressure,k=m.maxRelease,S=m.minArmDelay,I=m.minBlastPercent,w=m.minRelease,_=m.pressure,D=m.processRate,M=m.releasePressure,B=function(e){p("set-pressure",{releasePressure:e})},A=function(e){p("set-blast-delay",{blastDelay:e})},T=function(e){p("set-process_rate",{processRate:e})},L=function(e){p("fan",{fanState:e})},E=_<x*I;return(0,o.createComponentVNode)(2,i.Window,{theme:N?"syndicate":"ntos",width:390,height:380,children:(0,o.createComponentVNode)(2,i.Window.Content,{children:[(0,o.createComponentVNode)(2,c.PortableBasicInfo,{connected:g,pressure:_,maxPressure:x,children:[(0,o.createComponentVNode)(2,a.Divider),(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Emergency Blast Release",children:(0,o.createComponentVNode)(2,a.Button,{fluid:!0,textAlign:"center",icon:"circle",content:E?"Insufficient Pressure":f?h?"Armed":"Ready":"AIR UNSAFE - Locked",disabled:E||!f,color:h?"bad":"average",onClick:function(){p("arm")}})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Delay",children:[(0,o.createComponentVNode)(2,a.Button,{onClick:function(){return A(S)},children:"Min"}),(0,o.createComponentVNode)(2,a.NumberInput,{animated:!0,width:"7em",value:C,minValue:S,maxValue:y,onChange:function(e,t){return A(t)}}),(0,o.createComponentVNode)(2,a.Button,{onClick:function(){return A(y)},children:"Max"})]})]}),(0,o.createComponentVNode)(2,a.Divider),(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Fan Status",children:[(0,o.createComponentVNode)(2,a.Button,{color:v===l?"bad":"default",onClick:function(){return L(l)},children:"Off"}),(0,o.createComponentVNode)(2,a.Button,{selected:v===u,onClick:function(){return L(u)},children:"In"}),(0,o.createComponentVNode)(2,a.Button,{selected:v===d,onClick:function(){return L(d)},children:"Out"})]}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Release Pressure",children:[(0,o.createComponentVNode)(2,a.Button,{onClick:function(){return B(w)},children:"Min"}),(0,o.createComponentVNode)(2,a.NumberInput,{animated:!0,width:"7em",value:M,minValue:w,maxValue:k,onChange:function(e,t){return B(t)}}),(0,o.createComponentVNode)(2,a.Button,{onClick:function(){return B(k)},children:"Max"})]})]})]}),(0,o.createComponentVNode)(2,a.Section,{title:"Material Processing",buttons:(0,o.createComponentVNode)(2,a.Button,{icon:"eject",disabled:0===b,onClick:function(){p("eject-materials")},children:"Eject"}),children:(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Speed",children:[(0,o.createComponentVNode)(2,a.Button,{selected:1===D,onClick:function(){return T(1)},children:"1"}),(0,o.createComponentVNode)(2,a.Button,{selected:2===D,onClick:function(){return T(2)},children:"2"}),(0,o.createComponentVNode)(2,a.Button,{selected:3===D,onClick:function(){return T(3)},children:"3"}),!!N&&(0,o.createFragment)([(0,o.createComponentVNode)(2,a.Button,{selected:4===D,onClick:function(){return T(4)},children:"4"}),(0,o.createComponentVNode)(2,a.Button,{selected:5===D,onClick:function(){return T(5)},children:"5"})],4)]}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Progress",children:(0,o.createComponentVNode)(2,a.ProgressBar,{ranges:s,value:V/100})})]})})]})})}},62376:function(e,t,n){"use strict";t.__esModule=!0,t.ProcCall=void 0;var o=n(96323),r=n(31246),a=n(26949),i=n(48916),c=n(2381);t.ProcCall=function(e,t){var n=(0,r.useBackend)(t),l=n.act,u=n.data,d=u.name,s=u.options;return(0,o.createComponentVNode)(2,c.Window,{title:"Proc Call",width:700,height:600,children:(0,o.createComponentVNode)(2,c.Window.Content,{scrollable:!0,children:(0,o.createComponentVNode)(2,a.Section,{title:(0,o.createComponentVNode)(2,a.Box,{inline:!0,children:d}),children:[(0,o.createComponentVNode)(2,a.Flex,{direction:"row",children:(0,o.createComponentVNode)(2,a.Flex.Item,{ml:1,children:(0,o.createComponentVNode)(2,i.DataInputOptions,{options:s})})}),(0,o.createComponentVNode)(2,a.Box,{m:1,children:(0,o.createComponentVNode)(2,a.Button,{fluid:!0,onClick:function(){return l("activate")},children:"Confirm Event"})})]})})})}},94955:function(e,t,n){"use strict";t.__esModule=!0,t.PumpControl=void 0;var o=n(96323),r=n(31246),a=n(26949),i=n(2381),c=function(e,t){var n=(0,r.useBackend)(t).act,i=e.pump,c=(0,r.useLocalState)(t,i.netid+"pressure",i.target_output),l=c[0],u=c[1],d=(0,r.useLocalState)(t,i.netid+"power","on"),s=d[0],p=d[1];return(0,o.createComponentVNode)(2,a.Box,{children:[(0,o.createComponentVNode)(2,a.Stack,{py:1,children:[(0,o.createComponentVNode)(2,a.Stack.Item,{children:i.tag}),(0,o.createComponentVNode)(2,a.Stack.Item,{textAlign:"right",grow:1,children:-1===i.alive?"Establishing Connection...":"Connected"})]}),(0,o.createComponentVNode)(2,a.Stack,{children:[(0,o.createComponentVNode)(2,a.Stack.Item,{children:(0,o.createComponentVNode)(2,a.Button,{width:4,icon:"power-off",color:"on"===s?"green":"red",onClick:function(){return p("on"===s?"off":"on"),void n("togglePump",{netid:i.netid})},children:"on"===s?"On":"Off"})}),(0,o.createComponentVNode)(2,a.Stack.Item,{grow:!0,children:(0,o.createComponentVNode)(2,a.Slider,{disabled:1!==i.alive,value:l,minValue:i.min_output,maxValue:i.max_output,unit:"kPa",stepPixelSize:.05,onChange:function(e,t){return u(o=t),void n("setPressure",{netid:i.netid,pressure:o});var o}})})]})]})},l=function(e,t){var n=(0,r.useBackend)(t).data,i=e.area,l=[];for(var u in n.area_list[i])0!==n.area_list[i][u].alive&&l.push((0,o.createComponentVNode)(2,c,{pump:n.area_list[i][u]}));return 0===l.length&&l.push((0,o.createVNode)(1,"p",null,[(0,o.createTextVNode)("No pumps found for "),i,(0,o.createTextVNode)(", please refresh and check connection.")],0)),(0,o.createComponentVNode)(2,a.Section,{title:i,textAlign:"left",mb:1,style:{padding:"5px","padding-top":"1px"},children:l})};t.PumpControl=function(e,t){var n=(0,r.useBackend)(t),c=n.act,u=n.data,d=[];for(var s in u.area_list)d.push(s);return(0,o.createComponentVNode)(2,i.Window,{title:"Pump Control Computer",width:400,height:500,children:(0,o.createComponentVNode)(2,i.Window.Content,{scrollable:!0,children:[(0,o.createComponentVNode)(2,a.Button,{style:{"margin-bottom":"10px"},icon:"wifi",onClick:function(){return c("refresh")},children:"Requery Pumps"}),d.map((function(e){return(0,o.createComponentVNode)(2,l,{area:e},e)}))]})})}},95868:function(){},42626:function(e,t,n){"use strict";t.__esModule=!0,t.Radio=void 0;var o=n(96323),r=n(31246),a=n(26949),i=n(1033),c=n(2381),l=n(39582);t.Radio=function(e,t){var n=(0,r.useBackend)(t),u=n.data,d=n.act,s=function(e,t){d("set-frequency",{value:e,finish:t})},p=function(e,t){d("set-code",{value:e,finish:t})};return(0,o.createComponentVNode)(2,c.Window,{width:"280",height:"400",title:u.name,children:(0,o.createComponentVNode)(2,c.Window.Content,{children:(0,o.createComponentVNode)(2,a.Stack,{vertical:!0,fill:!0,children:[(0,o.createComponentVNode)(2,a.Stack.Item,{children:(0,o.createComponentVNode)(2,a.Section,{children:(0,o.createComponentVNode)(2,a.LabeledList,{children:[!!u.hasToggleButton&&(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Power",children:(0,o.createComponentVNode)(2,a.Button.Checkbox,{checked:u.power,onClick:function(){return d("toggle-power")},children:u.power?"Powered on":"Powered off"})}),!!u.hasMicrophone&&(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Microphone",children:(0,o.createComponentVNode)(2,a.Button.Checkbox,{checked:u.broadcasting,onClick:function(){return d("toggle-broadcasting")},children:u.broadcasting?"Engaged":"Disengaged"})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Speaker",children:(0,o.createComponentVNode)(2,a.Button.Checkbox,{checked:u.listening,onClick:function(){return d("toggle-listening")},children:u.listening?"Engaged":"Disengaged"})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Frequency",children:(0,o.createComponentVNode)(2,a.Stack,{align:"center",children:[(0,o.createComponentVNode)(2,a.Stack.Item,{children:!u.lockedFrequency&&(0,o.createComponentVNode)(2,a.Knob,{animated:!0,value:u.frequency,minValue:1441,maxValue:1489,stepPixelSize:2,format:i.formatFrequency,onDrag:function(e,t){return s(t,!1)},onChange:function(e,t){return s(t,!0)}})}),(0,o.createComponentVNode)(2,a.Stack.Item,{children:(0,o.createComponentVNode)(2,a.AnimatedNumber,{value:u.frequency,format:i.formatFrequency})})]})}),!!u.code&&(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Code",children:(0,o.createComponentVNode)(2,a.Stack,{align:"center",children:[(0,o.createComponentVNode)(2,a.Stack.Item,{children:(0,o.createComponentVNode)(2,a.Knob,{animated:!0,value:u.code,minValue:1,maxValue:100,stepPixelSize:1,onDrag:function(e,t){return p(t,!1)},onChange:function(e,t){return p(t,!0)}})}),(0,o.createComponentVNode)(2,a.Stack.Item,{children:(0,o.createComponentVNode)(2,a.AnimatedNumber,{value:u.code})})]})}),!!u.sendButton&&(0,o.createComponentVNode)(2,a.LabeledList.Item,{children:(0,o.createComponentVNode)(2,a.Button,{align:"center",onClick:function(){d("send")},icon:"wifi",children:"Send signal"})})]})})}),u.secureFrequencies.length>0&&(0,o.createComponentVNode)(2,a.Stack.Item,{grow:1,children:(0,o.createComponentVNode)(2,a.Section,{title:"Supplementary Channels",fill:!0,scrollable:!0,children:(0,o.createComponentVNode)(2,a.Table,{children:[(0,o.createComponentVNode)(2,a.Table.Row,{header:!0,children:[(0,o.createComponentVNode)(2,a.Table.Cell,{header:!0,children:"Channel"}),(0,o.createComponentVNode)(2,a.Table.Cell,{header:!0,children:"Frequency"}),(0,o.createComponentVNode)(2,a.Table.Cell,{header:!0,children:"Prefix"})]}),u.secureFrequencies.map((function(e){return(0,o.createComponentVNode)(2,a.Table.Row,{children:[(0,o.createComponentVNode)(2,a.Table.Cell,{children:e.channel}),(0,o.createComponentVNode)(2,a.Table.Cell,{children:e.frequency}),(0,o.createComponentVNode)(2,a.Table.Cell,{children:(0,o.createComponentVNode)(2,a.Box,{as:"code",children:e.sayToken})})]},e.frequency)}))]})})}),!!u.modifiable&&(0,o.createComponentVNode)(2,a.Stack.Item,{children:(0,o.createComponentVNode)(2,a.Section,{title:"Access Panel",children:(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Green Wire",labelColor:"green",children:(0,o.createComponentVNode)(2,a.Button,{color:"green",onClick:function(){return d("toggle-wire",{wire:l.RadioWires.Transmit})},children:u.wires&l.RadioWires.Transmit?"Cut":"Mend"})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Red Wire",labelColor:"red",children:(0,o.createComponentVNode)(2,a.Button,{color:"red",onClick:function(){return d("toggle-wire",{wire:l.RadioWires.Receive})},children:u.wires&l.RadioWires.Receive?"Cut":"Mend"})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Blue Wire",labelColor:"blue",children:(0,o.createComponentVNode)(2,a.Button,{color:"blue",onClick:function(){return d("toggle-wire",{wire:l.RadioWires.Signal})},children:u.wires&l.RadioWires.Signal?"Cut":"Mend"})})]})})})]})})})}},39582:function(e,t){"use strict";var n;t.__esModule=!0,t.RadioWires=void 0,t.RadioWires=n,function(e){e[e.Signal=1]="Signal",e[e.Receive=2]="Receive",e[e.Transmit=4]="Transmit"}(n||(t.RadioWires=n={}))},16710:function(e,t,n){"use strict";t.__esModule=!0,t.RandomEvent=void 0;var o=n(96323),r=n(31246),a=n(26949),i=n(48916),c=n(2381);t.RandomEvent=function(e,t){var n=(0,r.useBackend)(t),l=n.act,u=n.data,d=u.eventName,s=u.eventOptions;return(0,o.createComponentVNode)(2,c.Window,{title:"Random Event",width:700,height:600,children:(0,o.createComponentVNode)(2,c.Window.Content,{scrollable:!0,children:(0,o.createComponentVNode)(2,a.Section,{title:(0,o.createComponentVNode)(2,a.Box,{inline:!0,children:d}),children:[(0,o.createComponentVNode)(2,a.Flex,{direction:"row",children:(0,o.createComponentVNode)(2,a.Flex.Item,{ml:1,children:(0,o.createComponentVNode)(2,i.DataInputOptions,{options:s})})}),(0,o.createComponentVNode)(2,a.Box,{m:1,children:(0,o.createComponentVNode)(2,a.Button,{fluid:!0,onClick:function(){return l("activate")},children:"Confirm Event"})})]})})})}},63777:function(e,t,n){"use strict";t.__esModule=!0,t.ReagentExtractor=void 0;var o=n(96323),r=n(31246),a=n(26949),i=n(2381),c=n(51418);t.ReagentExtractor=function(e,t){var n=(0,r.useBackend)(t).data.containersData,c=n.inserted,d=n.storage_tank_1,s=n.storage_tank_2;return(0,o.createComponentVNode)(2,i.Window,{title:"Reagent Extractor",width:500,height:739,theme:"ntos",children:(0,o.createComponentVNode)(2,i.Window.Content,{children:(0,o.createComponentVNode)(2,a.Stack,{vertical:!0,fill:!0,children:[(0,o.createComponentVNode)(2,a.Stack.Item,{basis:19.5,children:(0,o.createComponentVNode)(2,l,{container:c,insertable:!0})}),(0,o.createComponentVNode)(2,a.Stack.Item,{grow:!0,basis:"auto",children:(0,o.createComponentVNode)(2,a.Stack,{fill:!0,children:[(0,o.createComponentVNode)(2,a.Stack.Item,{grow:!0,children:(0,o.createComponentVNode)(2,u)}),(0,o.createComponentVNode)(2,a.Stack.Item,{basis:18,children:(0,o.createComponentVNode)(2,a.Stack,{vertical:!0,fill:!0,children:[(0,o.createComponentVNode)(2,a.Stack.Item,{basis:19.5,grow:!0,children:(0,o.createComponentVNode)(2,l,{container:d})}),(0,o.createComponentVNode)(2,a.Stack.Item,{basis:19.5,children:(0,o.createComponentVNode)(2,l,{container:s})})]})})]})})]})})})};var l=function(e,t){var n=(0,r.useBackend)(t).act,i=e.insertable,l=e.container||c.NoContainer,u=(0,r.useSharedState)(t,"transferAmount_"+l.id,10),d=u[0],s=u[1];return(0,o.createComponentVNode)(2,a.SectionEx,{capitalize:!0,title:l.name,buttons:(0,o.createFragment)([(0,o.createComponentVNode)(2,a.Button,{title:"Flush All",icon:"times",color:"red",disabled:!l.totalVolume,onClick:function(){return n("flush",{container_id:l.id})}}),!i||(0,o.createComponentVNode)(2,a.Button,{title:"Eject",icon:"eject",disabled:!e.container,onClick:function(){return n("ejectcontainer")}})],0),children:[!!e.container||(0,o.createComponentVNode)(2,a.Dimmer,{children:(0,o.createComponentVNode)(2,a.Button,{icon:"eject",fontSize:1.5,onClick:function(){return n("insertcontainer")},bold:!0,children:"Insert Beaker"})}),(0,o.createComponentVNode)(2,c.ReagentGraph,{container:l}),(0,o.createComponentVNode)(2,c.ReagentList,{container:l,renderButtons:function(e){return(0,o.createFragment)([(0,o.createComponentVNode)(2,a.Button,{px:.75,mr:1.5,icon:"filter",color:"red",title:"Isolate",onClick:function(){return n("isolate",{container_id:l.id,reagent_id:e.id})}}),(0,o.createComponentVNode)(2,a.Button,{px:.75,icon:"times",color:"red",title:"Flush",onClick:function(){return n("flush_reagent",{container_id:l.id,reagent_id:e.id})}})],4)}}),(0,o.createComponentVNode)(2,a.Flex,{wrap:!0,justify:"center",children:[(0,o.createComponentVNode)(2,a.Flex.Item,{grow:!0}),(0,o.createComponentVNode)(2,a.Flex.Item,{grow:!0,basis:"auto",children:(0,o.createComponentVNode)(2,a.Button,{mb:.5,width:17,textAlign:"center",selected:l.selected,title:"Select Extraction and Transfer Target",icon:l.selected?"check-square-o":"square-o",onClick:function(){return n("extractto",{container_id:l.id})},children:"Select"})}),(0,o.createComponentVNode)(2,a.Flex.Item,{children:(0,o.createComponentVNode)(2,a.Flex,{width:17,children:[(0,o.createComponentVNode)(2,a.Flex.Item,{grow:!0,children:[(0,o.createComponentVNode)(2,a.Button,{disabled:l.selected,onClick:function(){return n("chemtransfer",{container_id:l.id,amount:d})},children:"Transfer"}),(0,o.createComponentVNode)(2,a.NumberInput,{value:d,format:function(e){return e+"u"},minValue:1,maxValue:500,onDrag:function(e,t){return s(t)}})]}),(0,o.createComponentVNode)(2,a.Flex.Item,{children:(0,o.createComponentVNode)(2,a.Button,{disabled:l.selected,onClick:function(){return n("chemtransfer",{container_id:l.id,amount:500})},children:"Transfer All"})})]})})]})]})},u=function(e,t){var n,i,c,l=(0,r.useBackend)(t),u=l.act,d=l.data,s=d.autoextract,p=d.ingredientsData||[],m=(0,r.useLocalState)(t,"page",1),f=m[0],h=m[1],C=Math.max(1,Math.ceil(p.length/25));(f<1||f>C)&&h((n=f,i=1,c=C,Math.min(Math.max(i,n),c)));var g=p.slice(25*(f-1),25*(f-1)+25);return(0,o.createComponentVNode)(2,a.Section,{fill:!0,title:"Extractable Items",buttons:(0,o.createComponentVNode)(2,a.Button.Checkbox,{checked:s,tooltip:"Items will be extracted into the selected container automatically upon insertion.",onClick:function(){return u("autoextract")},children:"Auto-Extract"}),children:(0,o.createComponentVNode)(2,a.Flex,{height:"100%",direction:"column",children:[(0,o.createComponentVNode)(2,a.Flex.Item,{grow:!0,children:(0,o.createComponentVNode)(2,a.Section,{scrollable:!0,fill:!0,children:g.map((function(e,t){return(0,o.createFragment)([(0,o.createComponentVNode)(2,a.Flex,{children:[(0,o.createComponentVNode)(2,a.Flex.Item,{grow:!0,children:e.name}),(0,o.createComponentVNode)(2,a.Flex.Item,{nowrap:!0,children:[(0,o.createComponentVNode)(2,a.Button,{onClick:function(){return u("extractingredient",{ingredient_id:e.id})},children:"Extract"}),(0,o.createComponentVNode)(2,a.Button,{icon:"eject",title:"Eject",onClick:function(){return u("ejectingredient",{ingredient_id:e.id})}})]})]}),(0,o.createComponentVNode)(2,a.Divider)],4,e.id)}))})}),C<2||(0,o.createComponentVNode)(2,a.Flex.Item,{textAlign:"center",basis:1.5,children:[(0,o.createComponentVNode)(2,a.Button,{icon:"caret-left",title:"Previous Page",disabled:f<2,onClick:function(){return h(f-1)}}),(0,o.createComponentVNode)(2,a.NumberInput,{value:f,format:function(e){return"Page "+e+"/"+C},minValue:1,maxValue:C,stepPixelSize:15,onChange:function(e,t){return h(t)}}),(0,o.createComponentVNode)(2,a.Button,{icon:"caret-right",title:"Next Page",disabled:f>C-1,onClick:function(){return h(f+1)}})]})]})})}},89971:function(e,t,n){"use strict";t.__esModule=!0,t.Rockbox=void 0;var o=n(96323),r=n(31246),a=n(26949),i=n(25808),c=n(2381);t.Rockbox=function(e,t){var n=(0,r.useBackend)(t),l=n.act,u=n.data,d=u.default_price,s=u.autosell,p=(0,r.useLocalState)(t,"takeAmount",1),m=p[0],f=p[1];return(0,o.createComponentVNode)(2,c.Window,{title:"Rockbox",width:375,height:400,children:(0,o.createComponentVNode)(2,c.Window.Content,{children:(0,o.createComponentVNode)(2,a.Stack,{vertical:!0,fill:!0,children:[(0,o.createComponentVNode)(2,a.Stack.Item,{children:(0,o.createComponentVNode)(2,a.Section,{fill:!0,children:[(0,o.createComponentVNode)(2,a.Box,{children:["Amount to eject: ",(0,o.createComponentVNode)(2,a.NumberInput,{value:m,width:4,minValue:1,onDrag:function(e,t){return f(t)},onChange:function(e,t){return f(t)}})]}),(0,o.createComponentVNode)(2,a.Divider),(0,o.createComponentVNode)(2,a.Tooltip,{content:"Default price for new ore entries.",position:"bottom",children:(0,o.createComponentVNode)(2,a.Box,{as:"span",children:[" ","Default Price: ",(0,o.createComponentVNode)(2,a.NumberInput,{value:d,width:4,minValue:0,format:function(e){return e+"\u2abd"},onChange:function(e,t){return l("set-default-price",{newPrice:t})}})]})}),(0,o.createComponentVNode)(2,a.Button.Checkbox,{checked:s,tooltip:"Mark new ore entries for sale automatically.",onClick:function(){return l("toggle-auto-sell")},children:"Auto-Sell"})]})}),(0,o.createComponentVNode)(2,a.Stack.Item,{grow:1,children:(0,o.createComponentVNode)(2,a.Section,{fill:!0,scrollable:!0,children:u.ores.length?(0,o.createComponentVNode)(2,a.Box,{children:u.ores.map((function(e){return(0,o.createFragment)([(0,o.createComponentVNode)(2,a.Tooltip,{position:"bottom",content:e.stats,children:(0,o.createComponentVNode)(2,a.Table,{children:(0,o.createComponentVNode)(2,a.Table.Row,{children:[(0,o.createComponentVNode)(2,a.Table.Cell,{style:{"vertical-align":"top"},children:(0,o.createComponentVNode)(2,a.Box,{children:e.name+": "+e.amount})}),(0,o.createComponentVNode)(2,a.Table.Cell,{textAlign:"right",children:(0,o.createComponentVNode)(2,a.Stack,{vertical:!0,textAlign:"left",inline:!0,children:[(0,o.createComponentVNode)(2,a.Stack.Item,{children:["Price: ",(0,o.createComponentVNode)(2,a.NumberInput,{value:e.price,width:4,minValue:0,format:function(e){return e+"\u2abd"},onChange:function(t,n){return l("set-ore-price",{newPrice:n,ore:e.name})}}),(0,o.createComponentVNode)(2,i.ButtonCheckbox,{content:"For Sale",color:e.forSale?"green":"red",checked:e.forSale,onClick:function(){return l("toggle-ore-sell-status",{ore:e.name})}}),(0,o.createComponentVNode)(2,a.Button,{color:e.amount<m?"orange":"default",disabled:0===e.amount,onClick:function(){return l("dispense-ore",{ore:e.name,take:m})},children:"Eject"})]}),(0,o.createComponentVNode)(2,a.Stack.Item,{children:!!e.amountSold&&(0,o.createComponentVNode)(2,a.Box,{children:"Amount sold: "+e.amountSold})})]})})]})})}),(0,o.createComponentVNode)(2,a.Divider)],4,e.name)}))}):(0,o.createComponentVNode)(2,a.Box,{children:"No ores stored"})})})]})})})}},95285:function(e,t,n){"use strict";t.__esModule=!0,t.SecureSafe=void 0;var o=n(96323),r=n(31246),a=n(26949),i=n(2381),c=n(18331),l=[["7","8","9","A"],["4","5","6","B"],["1","2","3","C"],["0","F","E","D"]],u=function(e,t){var n=e.attempt,r=e.codeLen,i=e.disabled,l=e.emagged,u=e.padMsg,d=(e.theme,u||function(e,t){return e.padEnd(t,"*").split("").join(" ")}(n,r));return i&&(d="NO ACCESS"),l&&(d=(0,c.glitch)(d,2)),(0,o.createComponentVNode)(2,a.Box,{fontSize:"25px",fontFamily:"Courier",bold:!0,textAlign:"center",padding:"3px",backgroundColor:"#342210",style:{"border-width":"0.1em","border-style":"solid","border-radius":"0.16em","border-color":"#FC8E1F"},children:d})},d=function(e,t){var n=e.act;return(0,o.createFragment)([(0,o.createComponentVNode)(2,a.Flex.Item,{children:l.map((function(e,t){var r=e.length;return(0,o.createComponentVNode)(2,a.Flex,{justify:"space-between",mt:1,children:e.map((function(e,t){return(0,o.createComponentVNode)(2,a.Flex.Item,{grow:1,mr:t<r-1?1:0,children:(0,o.createComponentVNode)(2,a.Button,{fluid:!0,textAlign:"center",fontSize:"25px",fontFamily:"Courier",bold:!0,content:e,onClick:function(){return n("input",{input:e})}})},e)}))},"row-"+t)}))}),(0,o.createComponentVNode)(2,a.Flex.Item,{mt:1,children:(0,o.createComponentVNode)(2,a.Flex,{justify:"space-between",children:[(0,o.createComponentVNode)(2,a.Flex.Item,{grow:1,mr:1,children:(0,o.createComponentVNode)(2,a.Button,{fluid:!0,textAlign:"center",fontSize:"20px",fontFamily:"Courier",bold:!0,content:"ENTER",onClick:function(){return n("enter")}})}),(0,o.createComponentVNode)(2,a.Flex.Item,{grow:1,children:(0,o.createComponentVNode)(2,a.Button,{fluid:!0,textAlign:"center",fontSize:"20px",fontFamily:"Courier",bold:!0,content:"RESET",onClick:function(){return n("reset")}})})]})})],4)};t.SecureSafe=function(e,t){var n=(0,r.useBackend)(t),l=n.act,s=n.data,p=s.attempt,m=s.codeLen,f=s.disabled,h=s.emagged,C=s.padMsg,g=s.safeName,N=s.theme;return(0,o.createComponentVNode)(2,i.Window,{title:(0,c.capitalize)(g),width:200,height:328,theme:N||"retro-dark",children:(0,o.createComponentVNode)(2,i.Window.Content,{children:(0,o.createComponentVNode)(2,a.Section,{fill:!0,children:(0,o.createComponentVNode)(2,a.Stack,{vertical:!0,children:[(0,o.createComponentVNode)(2,u,{attempt:p,codeLen:m,disabled:f,emagged:h,padMsg:C}),(0,o.createComponentVNode)(2,d,{act:l})]})})})})}},19172:function(e,t,n){"use strict";t.__esModule=!0,t.SeedFabricator=void 0;var o=n(96323),r=n(31246),a=n(26949),i=n(2381),c=n(18331),l={Fruit:1,Vegetable:2,Herb:3,Flower:4,Miscellaneous:5,Other:6},u=function(e,t){return(l[e.name]||l.Other)-(l[t.name]||l.Other)};t.SeedFabricator=function(e,t){var n=(0,r.useBackend)(t).data,l=n.canVend,d=n.isWorking,p=n.maxSeed,m=n.name,f=n.seedCount,h=n.seedCategories||[];h.sort(u);var C=(0,r.useLocalState)(t,"dispenseAmount",1),g=C[0],N=C[1];return(0,o.createComponentVNode)(2,i.Window,{title:m,width:500,height:600,children:(0,o.createComponentVNode)(2,i.Window.Content,{children:[!d&&(0,o.createComponentVNode)(2,a.Modal,{textAlign:"center",width:35,height:10,fontSize:3,fontFamily:"Courier",color:"red",children:[(0,o.createComponentVNode)(2,a.Blink,{time:500,children:[(0,o.createComponentVNode)(2,a.Icon,{name:"exclamation-triangle",pr:1.5}),"MALFUNCTION",(0,o.createComponentVNode)(2,a.Icon,{name:"exclamation-triangle",pl:1.5})]}),"CHECK WIRES"]}),(0,o.createComponentVNode)(2,a.Section,{children:(0,o.createComponentVNode)(2,a.Flex,{children:[(0,o.createComponentVNode)(2,a.Flex.Item,{bold:!0,pr:1,children:"Dispense:"}),(0,o.createComponentVNode)(2,a.Flex.Item,{basis:6,grow:!0,children:(0,o.createComponentVNode)(2,a.NumberInput,{value:g,format:function(e){return e+(0,c.pluralize)(" seed",e)},minValue:1,maxValue:10,onDrag:function(e,t){return N(t)}})}),(0,o.createComponentVNode)(2,a.Flex.Item,{grow:2,children:(0,o.createComponentVNode)(2,a.ProgressBar,{value:Math.max(0,p-f),maxValue:p,ranges:{yellow:[5,Infinity],bad:[-Infinity,5]},children:(0,o.createComponentVNode)(2,a.Icon,{name:"bolt"})})})]})}),(0,o.createComponentVNode)(2,a.Section,{children:[!l&&(0,o.createComponentVNode)(2,a.Modal,{textAlign:"center",width:25,height:5,fontSize:2,fontFamily:"Courier",color:"yellow",children:[(0,o.createComponentVNode)(2,a.Blink,{interval:500,time:500,children:(0,o.createComponentVNode)(2,a.Icon,{name:"bolt",pr:1.5})}),"UNIT RECHARGING"]}),h.map((function(e){return(0,o.createComponentVNode)(2,s,{category:e,dispenseAmount:g},e.name)}))]})]})})};var d=function(e,t){return e.name.localeCompare(t.name)},s=function(e,t){var n=(0,r.useBackend)(t).act,i=e.category,c=e.dispenseAmount,l=i.name,u=i.seeds;if(!u)return null;var s=u.sort(d);return(0,o.createComponentVNode)(2,a.Collapsible,{title:l,children:s.map((function(e){return(0,o.createComponentVNode)(2,a.Box,{as:"span",children:(0,o.createComponentVNode)(2,a.Button,{width:"155px",height:"32px",px:0,m:.25,onClick:function(){return n("disp",{path:e.path,amount:c})},children:(0,o.createComponentVNode)(2,a.Flex,{direction:"row",align:"center",children:[(0,o.createComponentVNode)(2,a.Flex.Item,{children:e.img?(0,o.createVNode)(1,"img",null,null,1,{style:{"vertical-align":"middle","horizontal-align":"middle"},height:"32px",width:"32px",src:"data:image/png;base64,"+e.img}):(0,o.createComponentVNode)(2,a.Icon,{style:{"vertical-align":"middle","horizontal-align":"middle"},height:"32px",width:"32px",name:"question-circle-o",pl:"8px",pt:"4px",fontSize:"24px"})}),(0,o.createComponentVNode)(2,a.Flex.Item,{overflow:"hidden",style:{"text-overflow":"ellipsis"},title:e.name,children:e.name})]})})},e.name)}))})}},70535:function(e,t,n){"use strict";t.__esModule=!0,t.SheetCrafting=void 0;var o=n(96323),r=n(31246),a=n(26949),i=n(2381);t.SheetCrafting=function(e,t){var n=(0,r.useBackend)(t).data,l=n.availableAmount,u=n.labeledAvailableAmount,d=n.itemList;return(0,o.createComponentVNode)(2,i.Window,{width:360,height:760,children:(0,o.createComponentVNode)(2,i.Window.Content,{children:(0,o.createComponentVNode)(2,a.Stack,{vertical:!0,fill:!0,children:[(0,o.createComponentVNode)(2,a.Stack.Item,{grow:1,children:(0,o.createComponentVNode)(2,a.Section,{title:"Recipes",fill:!0,scrollable:!0,children:d.map((function(e){return(0,o.createComponentVNode)(2,c,{item:e,disabled:l<e.sheetCost},e.recipeID)}))})}),(0,o.createComponentVNode)(2,a.Stack.Item,{children:(0,o.createComponentVNode)(2,a.Section,{title:"Amount Left",children:u})})]})})})};var c=function(e,t){var n=(0,r.useBackend)(t).act,i=e.item,c=i.recipeID,l=i.name,u=i.sheetCost,d=i.itemYield,s=i.img;return(0,o.createComponentVNode)(2,a.Button,{disabled:e.disabled,fluid:!0,onClick:function(){return n("make",{recipeID:c})},m:"0.5rem",children:[(0,o.createComponentVNode)(2,a.Image,{verticalAlign:"middle",my:"0.2rem",mr:"0.5rem",height:"32px",width:"32px",src:"data:image/png;base64,"+s}),d>1?(0,o.createVNode)(1,"em",null,[d,(0,o.createTextVNode)("x ")],0):null,l,u>1?(0,o.createVNode)(1,"em",null,[(0,o.createTextVNode)(" ("),u,(0,o.createTextVNode)(" sheets)")],0):null]})}},24258:function(e,t,n){"use strict";t.__esModule=!0,t.Sleeper=void 0;var o,r=n(96323),a=n(31246),i=n(26949),c=n(2381),l=n(1033),u=n(65751),d=function(e){return e<=0?"0":e.toFixed(1)},s=1,p=2,m=((o={})[0]={name:"Conscious",color:"good",icon:"check"},o[s]={name:"Unconscious",color:"average",icon:"bed"},o[p]={name:"Dead",color:"bad",icon:"skull"},o);t.Sleeper=function(e,t){var n=(0,a.useBackend)(t),o=n.data,s=n.act,p=o.sleeperGone,f=o.hasOccupant,h=o.occupantStat,C=o.health,g=o.oxyDamage,N=o.toxDamage,v=o.burnDamage,b=o.bruteDamage,V=o.recharging,y=o.rejuvinators,x=o.isTiming,k=o.time,S=o.timeStarted,I=o.timeNow,w=o.maxTime,_=Math.max(S?(k||0)+S-I:k||0,0),D=f&&!x&&!V&&h<2,M=m[h];return(0,r.createComponentVNode)(2,c.Window,{theme:"ntos",width:440,height:440,children:(0,r.createComponentVNode)(2,c.Window.Content,{children:[(0,r.createComponentVNode)(2,i.Section,{title:"Occupant Statistics",buttons:(0,r.createComponentVNode)(2,i.Button,{icon:"eject",align:"center",color:"good",disabled:!f||!!x,onClick:function(){return s("eject")},children:"Eject"}),children:[!f&&(p?"Check connection to sleeper pod.":"The sleeper is unoccupied."),!!f&&(0,r.createComponentVNode)(2,i.LabeledList,{children:[(0,r.createComponentVNode)(2,i.LabeledList.Item,{label:"Status",children:[(0,r.createComponentVNode)(2,i.Icon,{color:M.color,name:M.icon})," ",M.name]}),(0,r.createComponentVNode)(2,i.LabeledList.Item,{label:"Overall Health",children:(0,r.createComponentVNode)(2,i.ProgressBar,{value:C,ranges:{good:[.9,Infinity],average:[.5,.9],bad:[-Infinity,.5]}})}),(0,r.createComponentVNode)(2,i.LabeledList.Item,{label:"Damage Breakdown",children:[(0,r.createComponentVNode)(2,u.HealthStat,{inline:!0,align:"center",type:"oxy",width:5,children:d(g)}),"/",(0,r.createComponentVNode)(2,u.HealthStat,{inline:!0,align:"center",type:"toxin",width:5,children:d(N)}),"/",(0,r.createComponentVNode)(2,u.HealthStat,{inline:!0,align:"center",type:"burn",width:5,children:d(v)}),"/",(0,r.createComponentVNode)(2,u.HealthStat,{inline:!0,align:"center",type:"brute",width:5,children:d(b)})]})]})]}),!!f&&(0,r.createComponentVNode)(2,i.Section,{title:"Detected Rejuvinators",buttons:(0,r.createComponentVNode)(2,i.Button,{icon:"syringe",align:"center",color:"good",disabled:!D,onClick:function(){return s("inject")},children:"Inject"}),children:[(0,r.createComponentVNode)(2,i.Section,{height:10,scrollable:!0,children:y.length?(0,r.createComponentVNode)(2,i.LabeledList,{children:y.map((function(e){return(0,r.createComponentVNode)(2,i.LabeledList.Item,{label:e.name,children:[(0,r.createComponentVNode)(2,i.Icon,{name:!e.od||e.volume<e.od?"circle":"skull",color:e.color})," "+e.volume.toFixed(3),!!e.od&&e.volume>=e.od&&(0,r.createComponentVNode)(2,i.Box,{inline:!0,color:"bad",pl:1,children:"(Overdose!)"})]},e.name)}))}):"No rejuvinators detected in occupant's bloodstream."}),(0,r.createComponentVNode)(2,i.Box,{italic:!0,textAlign:"center",color:"label",mt:2,children:"Use separate reagent scanner for complete analysis."})]}),(0,r.createComponentVNode)(2,i.Section,{title:"Occupant Alarm Clock",buttons:(0,r.createComponentVNode)(2,i.Button,{width:8,icon:"clock",align:"center",color:x?"bad":"good",disabled:!f||h>1||k<=0,onClick:function(){return s("timer")},children:x?"Stop Timer":"Start Timer"}),children:(0,r.createComponentVNode)(2,i.Flex,{children:[(0,r.createComponentVNode)(2,i.Flex.Item,{children:(0,r.createComponentVNode)(2,i.Knob,{mr:"0.5em",animated:!0,size:1.25,step:5,stepPixelSize:2,minValue:0,maxValue:w/10,value:_/10,onDrag:function(e,t){return s("time_add",{tp:t-_/10})}})}),(0,r.createComponentVNode)(2,i.Flex.Item,{children:(0,r.createComponentVNode)(2,i.Box,{p:1,textAlign:"center",backgroundColor:"black",color:"good",maxWidth:"90px",width:"90px",fontSize:"20px",children:(0,r.createComponentVNode)(2,i.TimeDisplay,{value:_,timing:!!x,format:function(e){return(0,l.formatTime)(e)}})})}),(0,r.createComponentVNode)(2,i.Flex.Item,{shrink:1,children:(0,r.createComponentVNode)(2,i.Box,{italic:!0,textAlign:"center",color:"label",pl:1,children:"System will inject rejuvenators automatically when occupant is in hibernation."})})]})})]})})}},82930:function(e,t,n){"use strict";t.__esModule=!0,t.SlotMachine=void 0;var o=n(96323),r=n(31246),a=n(26949),i=n(2381);t.SlotMachine=function(e,t){var n=(0,r.useBackend)(t).data,a=n.busy,d=n.scannedCard;return(0,o.createComponentVNode)(2,i.Window,{title:"Slot Machine",width:375,height:220,children:(0,o.createComponentVNode)(2,i.Window.Content,{children:d?a?(0,o.createComponentVNode)(2,u):(0,o.createComponentVNode)(2,l):(0,o.createComponentVNode)(2,c)})})};var c=function(e,t){var n=(0,r.useBackend)(t).act;return(0,o.createFragment)([(0,o.createComponentVNode)(2,a.NoticeBox,{danger:!0,children:"You must insert your ID to continue!"}),(0,o.createComponentVNode)(2,a.Button,{icon:"id-card",onClick:function(){return n("insert_card")},children:"Insert ID"})],4)},l=function(e,t){var n=(0,r.useBackend)(t),i=n.act,c=n.data,l=c.account_funds,u=c.money,d=c.plays,s=c.scannedCard,p=c.wager;return(0,o.createFragment)([(0,o.createComponentVNode)(2,a.NoticeBox,{success:!0,children:(0,o.createVNode)(1,"marquee",null," Wager some credits! ",16)}),(0,o.createComponentVNode)(2,a.Stack,{vertical:!0,children:[(0,o.createComponentVNode)(2,a.Stack.Item,{children:[(0,o.createVNode)(1,"strong",null,"Your card: ",16),(0,o.createComponentVNode)(2,a.Button,{icon:"eject",content:s,tooltip:"Pull Funds and Eject Card",tooltipPosition:"bottom-end",onClick:function(){return i("eject")}})]}),(0,o.createComponentVNode)(2,a.Stack.Item,{children:(0,o.createComponentVNode)(2,a.Stack,{align:"center",children:[(0,o.createComponentVNode)(2,a.Stack.Item,{children:(0,o.createVNode)(1,"strong",null,"Account Balance:",16)}),(0,o.createComponentVNode)(2,a.Stack.Item,{children:[(0,o.createComponentVNode)(2,a.Icon,{name:"dollar-sign"})," ",l]}),(0,o.createComponentVNode)(2,a.Stack.Item,{children:(0,o.createComponentVNode)(2,a.Button,{tooltip:"Add Funds",tooltipPosition:"bottom",onClick:function(){return i("cashin")},children:"Cash In"})}),(0,o.createComponentVNode)(2,a.Stack.Item,{children:(0,o.createComponentVNode)(2,a.Button,{tooltip:"Pull Funds",tooltipPosition:"bottom",onClick:function(){return i("cashout")},children:"Cash Out"})})]})}),(0,o.createComponentVNode)(2,a.Stack.Item,{children:(0,o.createComponentVNode)(2,a.Stack,{align:"center",children:[(0,o.createComponentVNode)(2,a.Stack.Item,{children:"Amount Wagered:"}),(0,o.createComponentVNode)(2,a.Stack.Item,{children:(0,o.createComponentVNode)(2,a.NumberInput,{minValue:20,maxValue:1e3,value:p,format:function(e){return e+"\u2abd"},onDrag:function(e,t){return i("set_wager",{bet:t})}})})]})}),(0,o.createComponentVNode)(2,a.Stack.Item,{children:(0,o.createComponentVNode)(2,a.Stack,{align:"center",children:[(0,o.createComponentVNode)(2,a.Stack.Item,{children:(0,o.createVNode)(1,"strong",null,"Credits Remaining:",16)}),(0,o.createComponentVNode)(2,a.Stack.Item,{children:[(0,o.createComponentVNode)(2,a.Icon,{name:"dollar-sign"})," ",u]})]})}),(0,o.createComponentVNode)(2,a.Stack.Item,{children:(0,o.createComponentVNode)(2,a.BlockQuote,{children:[d," attempts have been made today!"]})}),(0,o.createComponentVNode)(2,a.Stack.Divider),(0,o.createComponentVNode)(2,a.Stack.Item,{children:(0,o.createComponentVNode)(2,a.Button,{icon:"dice",tooltip:"Pull the lever",tooltipPosition:"right",onClick:function(){return i("play",{bet:p})},children:"Play!"})})]})],4)},u=function(){return(0,o.createComponentVNode)(2,a.NoticeBox,{warning:!0,children:"The Machine is busy, please wait!"})}},68952:function(e,t,n){"use strict";t.__esModule=!0,t.Smes=void 0;var o=n(96323),r=n(31246),a=n(26949),i=n(1033),c=n(2381),l=1e3;t.Smes=function(e,t){var n=(0,r.useBackend)(t),u=n.act,d=n.data,s=d.charge,p=d.capacity,m=d.inputAttempt,f=d.inputting,h=d.inputLevel,C=d.inputLevelMax,g=d.inputAvailable,N=d.outputAttempt,v=d.outputting,b=d.outputLevel,V=d.outputLevelMax,y=(s/p>=1?"good":f&&h&&"average")||"bad",x=(N&&v?"good":s>0&&"average")||"bad";return(0,o.createComponentVNode)(2,c.Window,{width:340,height:360,children:(0,o.createComponentVNode)(2,c.Window.Content,{children:[(0,o.createComponentVNode)(2,a.Section,{title:"Stored Energy",children:[(0,o.createComponentVNode)(2,a.LabeledList,{children:(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Stored Energy",children:(0,i.formatSiUnit)(s,0,"J")})}),(0,o.createComponentVNode)(2,a.ProgressBar,{mt:"0.5em",value:s/p,ranges:{good:[.5,Infinity],average:[.15,.5],bad:[-Infinity,.15]}})]}),(0,o.createComponentVNode)(2,a.Section,{title:"Input",children:(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Charge Mode",buttons:(0,o.createComponentVNode)(2,a.Button,{icon:"power-off",color:m?"green":"red",onClick:function(){return u("toggle-input")},children:m?"On":"Off"}),children:(0,o.createComponentVNode)(2,a.Box,{color:y,children:(s/p>=1?"Fully Charged":m&&h&&!f&&"Initializing")||m&&h&&f&&"Charging"||m&&f&&"Idle"||"Not Charging"})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Target Input",children:(0,o.createComponentVNode)(2,a.Flex,{inline:!0,width:"100%",children:[(0,o.createComponentVNode)(2,a.Flex.Item,{children:[(0,o.createComponentVNode)(2,a.Button,{icon:"fast-backward",disabled:0===h,onClick:function(){return u("set-input",{target:"min"})}}),(0,o.createComponentVNode)(2,a.Button,{icon:"backward",disabled:0===h,onClick:function(){return u("set-input",{adjust:-1e4})}})]}),(0,o.createComponentVNode)(2,a.Flex.Item,{grow:1,mx:1,children:(0,o.createComponentVNode)(2,a.Slider,{value:h/l,fillValue:g/l,minValue:0,maxValue:C/l,step:5,stepPixelSize:4,format:function(e){return(0,i.formatPower)(e*l,1)},onDrag:function(e,t){return u("set-input",{target:t*l})}})}),(0,o.createComponentVNode)(2,a.Flex.Item,{children:[(0,o.createComponentVNode)(2,a.Button,{icon:"forward",disabled:h===C,onClick:function(){return u("set-input",{adjust:1e4})}}),(0,o.createComponentVNode)(2,a.Button,{icon:"fast-forward",disabled:h===C,onClick:function(){return u("set-input",{target:"max"})}})]})]})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Available",children:(0,i.formatPower)(g)})]})}),(0,o.createComponentVNode)(2,a.Section,{title:"Output",children:(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Output Mode",buttons:(0,o.createComponentVNode)(2,a.Button,{icon:"power-off",color:N?"green":"red",onClick:function(){return u("toggle-output")},children:N?"On":"Off"}),children:(0,o.createComponentVNode)(2,a.Box,{color:x,children:(v&&N?"Enabled":N&&"Idle")||s&&"Disabled"||"No Charge"})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Target Output",children:(0,o.createComponentVNode)(2,a.Flex,{inline:!0,width:"100%",children:[(0,o.createComponentVNode)(2,a.Flex.Item,{children:[(0,o.createComponentVNode)(2,a.Button,{icon:"fast-backward",disabled:0===b,onClick:function(){return u("set-output",{target:"min"})}}),(0,o.createComponentVNode)(2,a.Button,{icon:"backward",disabled:0===b,onClick:function(){return u("set-output",{adjust:-1e4})}})]}),(0,o.createComponentVNode)(2,a.Flex.Item,{grow:1,mx:1,children:(0,o.createComponentVNode)(2,a.Slider,{value:b/l,minValue:0,maxValue:V/l,step:5,stepPixelSize:4,format:function(e){return(0,i.formatPower)(e*l,1)},onDrag:function(e,t){return u("set-output",{target:t*l})}})}),(0,o.createComponentVNode)(2,a.Flex.Item,{children:[(0,o.createComponentVNode)(2,a.Button,{icon:"forward",disabled:b===V,onClick:function(){return u("set-output",{adjust:1e4})}}),(0,o.createComponentVNode)(2,a.Button,{icon:"fast-forward",disabled:b===V,onClick:function(){return u("set-output",{target:"max"})}})]})]})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Outputting",children:(0,i.formatPower)(v)})]})})]})})}},54016:function(e,t,n){"use strict";t.__esModule=!0,t.SpawnEvent=void 0;var o=n(96323),r=n(31246),a=n(26949),i=n(25808),c=n(2381);t.SpawnEvent=function(e,t){var n=(0,r.useBackend)(t),l=n.act,u=n.data,d=u.thing_to_spawn,s=u.thing_name,p=u.spawn_directly,m=u.spawn_loc,f=u.ghost_confirmation_delay,h=u.amount_to_spawn,C=u.antag_role,g=u.objective_text,N=u.spawn_type,v=u.loc_type,b=u.incompatible_antag,V=u.equip_antag,y=u.ask_permission,x=u.allow_dnr,k=u.eligible_player_count;return(0,o.createComponentVNode)(2,c.Window,{title:"Ghost Spawn Editor",width:500,height:330,children:(0,o.createComponentVNode)(2,c.Window.Content,{children:[(0,o.createComponentVNode)(2,a.Section,{children:(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Thing to spawn",children:[(0,o.createComponentVNode)(2,a.Button,{selected:s&&"mob_ref"===N,onClick:function(){return l("select_mob")},tooltip:"mob_ref"===N&&s?d:"",children:"mob_ref"===N?s:"Mob ref"}),(0,o.createComponentVNode)(2,a.Button,{selected:s&&"mob_type"===N,onClick:function(){return l("select_mob_type")},tooltip:"mob_type"===N&&s?d:"",children:"mob_type"===N?s:"Mob type"}),(0,o.createComponentVNode)(2,a.Button,{selected:s&&"job"===N,onClick:function(){return l("select_job")},tooltip:"job"===N&&s?d:"",children:"job"===N?s:"Job"}),(0,o.createComponentVNode)(2,a.Button,{selected:"random_human"===N,onClick:function(){return l("set_random_human")},tooltip:"Just a basic random human.",children:"Random Human"})]}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Accept delay",children:[!!y&&(0,o.createComponentVNode)(2,a.NumberInput,{value:f/10,minValue:0,maxValue:120,onDrag:function(e,t){return l("set_spawn_delay",{spawn_delay:10*t})},disabled:!y}),(0,o.createComponentVNode)(2,a.Button.Checkbox,{checked:y,onClick:function(){return l("set_ask_permission",{ask_permission:!y})},tooltip:"Do we ask permission or just spawn them directly?",children:"Ask permission."})]}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Amount to spawn",children:[(0,o.createComponentVNode)(2,a.NumberInput,{value:h,minValue:1,maxValue:100,onDrag:function(e,t){return l("set_amount",{amount:t})}}),"/",k," ",(0,o.createComponentVNode)(2,a.Button,{icon:"refresh",onClick:function(){return l("refresh_player_count")}}),1===h&&"mob_ref"===N&&s&&(0,o.createComponentVNode)(2,i.ButtonCheckbox,{checked:p,onClick:function(){return l("set_spawn_directly",{spawn_directly:!p})},tooltip:"Puts the ghost mind directly into the original mob instead of copying it.",children:"Spawn as original"})]}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Spawn location",children:[(0,o.createComponentVNode)(2,a.Button,{disabled:p,selected:m&&"turf_ref"===v,onClick:function(){return l("select_turf")},children:"turf_ref"===v?m:"Turf ref"}),(0,o.createComponentVNode)(2,a.Button,{disabled:p,selected:m&&"landmark"===v,onClick:function(){return l("select_landmark")},children:"landmark"===v?m:"Landmark"})]}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Antagonist status",children:[(0,o.createComponentVNode)(2,a.Button,{selected:C,onClick:function(){return l("select_antag")},children:C||"Antag role"}),C&&(0,o.createFragment)([(0,o.createComponentVNode)(2,a.Button,{color:"red",onClick:function(){return l("clear_antag")},children:"x"}),(0,o.createComponentVNode)(2,i.ButtonCheckbox,{checked:V,tooltip:"Give antag default equipment and abilities? Will overwrite anything already equipped in those slots.",onClick:function(){return l("set_equip",{equip_antag:!V})},children:"Equip antags"})],4),!!b&&(0,o.createComponentVNode)(2,a.Button,{color:"yellow",circular:!0,icon:"circle-exclamation",tooltip:"Some antagonists are only compatible with human mobs, this may not work properly."})]}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"DNR",children:(0,o.createComponentVNode)(2,i.ButtonCheckbox,{checked:x,tooltip:"Allow players who have set DNR to respawn in this event",onClick:function(){return l("set_allow_dnr",{allow_dnr:!x})},children:"Allow DNR players"})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Objective text",children:(0,o.createComponentVNode)(2,a.TextArea,{value:g,fluid:!0,height:5,onChange:function(e,t){return l("set_objective_text",{objective_text:t})}})})]})}),(0,o.createComponentVNode)(2,a.Section,{align:"center",children:(0,o.createComponentVNode)(2,a.Button,{onClick:function(){return l("spawn")},disabled:!d||"[0x0]"===d,children:"Spawn"})})]})})}},19378:function(e,t,n){"use strict";t.__esModule=!0,t.SpendSpacebux=void 0;var o=n(96323),r=n(31246),a=n(26949),i=n(2381),c=function(e){var t=e.product,n=t.pname,r=t.cost,i=t.img,c=e.disabled,l=e.onClick;return(0,o.createFragment)([(0,o.createComponentVNode)(2,a.Flex,{direction:"row",align:"center",children:[(0,o.createComponentVNode)(2,a.Flex.Item,{children:(0,o.createVNode)(1,"img",null,null,1,{src:"data:image/png;base64,"+i,style:{"vertical-align":"middle","horizontal-align":"middle"}})}),(0,o.createComponentVNode)(2,a.Flex.Item,{grow:1,children:[(0,o.createComponentVNode)(2,a.Box,{bold:!0,children:n}),(0,o.createComponentVNode)(2,a.Box,{children:["Cost: "+r," ",(0,o.createVNode)(1,"i","fa-solid fa-coins")]})]}),(0,o.createComponentVNode)(2,a.Flex.Item,{children:(0,o.createComponentVNode)(2,a.Button,{onClick:l,disabled:c,children:"Buy"})})]}),(0,o.createComponentVNode)(2,a.Divider)],4)};t.SpendSpacebux=function(e,t){var n=(0,r.useBackend)(t),l=n.act,u=n.data,d=u.purchasables,s=u.held,p=u.balance,m=u.truebalance,f=(0,r.useLocalState)(t,"filter-available",!1),h=f[0],C=f[1];return(0,o.createComponentVNode)(2,i.Window,{resizable:!0,title:"Spend Spacebux",width:300,height:600,children:(0,o.createComponentVNode)(2,i.Window.Content,{scrollable:!0,children:(0,o.createComponentVNode)(2,a.Section,{children:[(0,o.createComponentVNode)(2,a.BlockQuote,{children:"Purchase an item for the upcoming round. Earn more cash by completing rounds. A purchased item will persist until you die or fail to escape the station. If you have a Held Item, buying a new one will replace it."}),(0,o.createComponentVNode)(2,a.Stack,{vertical:!0,fill:!0,children:[s?(0,o.createComponentVNode)(2,a.Stack.Item,{children:(0,o.createComponentVNode)(2,a.Box,{children:["Held Item: ",s]})}):"",(0,o.createComponentVNode)(2,a.Stack.Item,{children:(0,o.createComponentVNode)(2,a.Section,{children:(0,o.createComponentVNode)(2,a.Flex,{direction:"row",align:"center",children:[(0,o.createComponentVNode)(2,a.Flex.Item,{grow:1,children:(0,o.createComponentVNode)(2,a.Box,{children:["Balance: ",p," ",(0,o.createVNode)(1,"i","fa-solid fa-coins")]})}),(0,o.createComponentVNode)(2,a.Flex.Item,{children:(0,o.createComponentVNode)(2,a.Button.Checkbox,{checked:h,onClick:function(){return C(!h)},children:"Filter Affordable"})})]})})}),(0,o.createComponentVNode)(2,a.Stack.Item,{children:d.filter((function(e){var t=e.cost;return!(h&&m<t)})).map((function(e){var t=e.pname,n=e.cost;return(0,o.createComponentVNode)(2,c,{product:e,disabled:m<n,onClick:function(){return l("purchase",{pname:t})}},t)}))})]})]})})})}},79387:function(e,t,n){"use strict";t.__esModule=!0,t.SwingSign=void 0;var o=n(96323),r=n(31246),a=n(26949),i=n(2381);t.SwingSign=function(e,t){var n=(0,r.useBackend)(t),c=n.act,l=n.data,u=l.message,d=l.maxRows,s=l.maxCols;return(0,o.createComponentVNode)(2,i.Window,{width:30+8*s,height:95+15*d,title:"Swing sign",children:(0,o.createComponentVNode)(2,i.Window.Content,{children:(0,o.createComponentVNode)(2,a.Section,{children:(0,o.createComponentVNode)(2,a.Stack,{vertical:!0,fill:!0,children:[(0,o.createComponentVNode)(2,a.Stack.Item,{children:(0,o.createComponentVNode)(2,a.Button,{content:"Save",onClick:function(){l.message=document.getElementById("messageTA").value,c("save_message",l)}})}),(0,o.createComponentVNode)(2,a.Stack.Item,{children:(0,o.createVNode)(128,"textarea",null,u,0,{id:"messageTA",cols:s,rows:d,maxlength:s*d+d-1,style:{overflow:"hidden",background:"#0A0A0A",color:"#FFFFFF",outline:"1px #6A93C3",textalign:"center",wrap:"hard"},placeholder:"Your message goes here...",onInput:function(e){for(var t=e.target.value.split(/\n/g),n=0;n<t.length;n++)if(t[n]&&t[n].length>s){var o=t[n].substring(0,s);t[n]=t[n].substring(s,t[n].length),t.splice(n,0,o)}t&&t.length>d&&t.splice(d,t.length-d),e.target.value=t.join("\n")}})})]})})})})}},44001:function(e,t,n){"use strict";t.__esModule=!0,t.SwingSignTIM=void 0;var o=n(96323),r=n(34277),a=n(31246),i=n(26949),c=n(2381);t.SwingSignTIM=function(e,t){var n=(0,a.useBackend)(t).data,s=n.max_length,p=n.message,m=n.placeholder,f=n.title,h=n.allowEmpty,C=n.rows,g=n.columns,N=(0,a.useLocalState)(t,"input",m),v=N[0],b=N[1],V=(0,a.useLocalState)(t,"inputIsValid",{isValid:h||!!p,error:null}),y=V[0],x=V[1],k=130+Math.ceil(p.length/5)+75;return(0,o.createComponentVNode)(2,c.Window,{title:f,width:325,height:k,children:(0,o.createComponentVNode)(2,c.Window.Content,{children:(0,o.createComponentVNode)(2,i.Section,{fill:!0,children:(0,o.createComponentVNode)(2,i.Stack,{fill:!0,vertical:!0,children:[(0,o.createComponentVNode)(2,i.Stack.Item,{children:(0,o.createComponentVNode)(2,i.Box,{color:"label",children:p})}),(0,o.createComponentVNode)(2,l,{input:v,inputIsValid:y,onType:function(e){e.preventDefault();var t=e.target;t.value=d(t.value,C,g),x(u(t.value,s,C)),b(t.value)}}),(0,o.createComponentVNode)(2,i.Stack.Item,{pl:5,pr:5,children:(0,o.createComponentVNode)(2,r.InputButtons,{input:v,inputIsValid:y})})]})})})})};var l=function(e,t){var n=(0,a.useBackend)(t),r=n.act,c=(n.data,e.input),l=(e.inputIsValid,e.onType);return(0,o.createComponentVNode)(2,i.Stack.Item,{grow:!0,children:(0,o.createComponentVNode)(2,i.TextArea,{autoFocus:!0,height:"100%",textAlign:"center",fontFamily:"Consolas",onInput:function(e){return l(e)},onEnter:function(){r("submit",{entry:c})},placeholder:"Type something...",style:{overflow:"hidden",whiteSpace:"pre-line",wrap:"hard",textAlignLast:"center"},value:c})})},u=function(e,t,n){return t&&e.length>t||n&&e.split(/\n/g).length>n?{isValid:!1,error:"Too long!"}:{isValid:!0,error:null}},d=function(e,t,n){for(var o=e.split(/\n/g),r=0;r<o.length;r++)if(o[r]&&o[r].length>n){var a=o[r].substring(0,n);o[r]=o[r].substring(n,o[r].length),o.splice(r,0,a)}return o.join("\n")}},13634:function(e,t,n){"use strict";t.__esModule=!0,t.TEG=void 0;var o=n(96323),r=n(31246),a=n(26949),i=n(1033),c=n(2381);t.TEG=function(e,t){var n=(0,r.useBackend)(t),l=(n.act,n.data),u=l.output,d=l.history,s=l.hotCircStatus,p=l.hotInletTemp,m=l.hotOutletTemp,f=l.hotInletPres,h=l.hotOutletPres,C=l.coldCircStatus,g=l.coldInletTemp,N=l.coldOutletTemp,v=l.coldInletPres,b=l.coldOutletPres,V=d.map((function(e,t){return[t,e]})),y=Math.max.apply(Math,d),x=function(e){return(e>=1e3?e.toExponential(3):e)+" K"};return(0,o.createComponentVNode)(2,c.Window,{height:"520",width:"300",children:(0,o.createComponentVNode)(2,c.Window.Content,{children:[(0,o.createComponentVNode)(2,a.Section,{title:"Status",children:[(0,o.createComponentVNode)(2,a.LabeledList,{children:(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Output History"})}),(0,o.createComponentVNode)(2,a.Chart.Line,{height:"5em",data:V,rangeX:[0,V.length-1],rangeY:[0,y],strokeColor:"rgba(1, 184, 170, 1)",fillColor:"rgba(1, 184, 170, 0.25)"}),(0,o.createComponentVNode)(2,a.Divider),(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Energy Output",textAlign:"right",children:(0,i.formatPower)(u)}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Hot Gas Circulator",textAlign:"right",children:(0,o.createComponentVNode)(2,a.Box,{color:(s&&p?"good":s&&"average")||"bad",children:(s&&p?"OK":s&&"Idle")||"ERROR"})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Cold Gas Circulator",textAlign:"right",children:(0,o.createComponentVNode)(2,a.Box,{color:(C&&g?"good":C&&"average")||"bad",children:(C&&g?"OK":C&&"Idle")||"ERROR"})})]})]}),(0,o.createComponentVNode)(2,a.Section,{title:"Hot Loop",children:(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Inlet Temp",textAlign:"right",children:x(p)}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Outlet Temp",textAlign:"right",children:x(m)}),(0,o.createComponentVNode)(2,a.LabeledList.Divider),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Inlet Pressure",textAlign:"right",children:(0,i.formatSiUnit)(Math.max(f,0),1,"Pa")}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Outlet Pressure",textAlign:"right",children:(0,i.formatSiUnit)(h,1,"Pa")})]})}),(0,o.createComponentVNode)(2,a.Section,{title:"Cold Loop",children:(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Inlet Temp",textAlign:"right",children:x(g)}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Outlet Temp",textAlign:"right",children:x(N)}),(0,o.createComponentVNode)(2,a.LabeledList.Divider),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Inlet Pressure",textAlign:"right",children:(0,i.formatSiUnit)(Math.max(v,0),1,"Pa")}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Outlet Pressure",textAlign:"right",children:(0,i.formatSiUnit)(b,1,"Pa")})]})})]})})}},31567:function(e,t,n){"use strict";t.__esModule=!0,t.TTV=t.TankInfo=void 0;var o=n(96323),r=n(31246),a=n(26949),i=n(2381),c=n(21118),l=n(1033),u=function(e,t){var n=(0,r.useBackend)(t).act,i=e.tank,u=e.tankNum,d=(0,o.createComponentVNode)(2,a.Button,{width:5,textAlign:"center",disabled:null===i.name,icon:"eject",onClick:function(){return n(1===u?"remove_tank_one":"remove_tank_two")},children:"Eject"}),s=(0,o.createComponentVNode)(2,a.Button,{width:5,textAlign:"center",icon:"add",onClick:function(){return n("add_item",{tank:u})},children:"Add"}),p=null!==i.maxPressure?i.maxPressure:999;return(0,o.createComponentVNode)(2,a.Section,{title:1===u?"Tank One":"Tank Two",buttons:null!==i.name?d:s,style:{height:"100%"},children:(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Holding",children:null!==i.name?(0,c.toTitleCase)(i.name):"None"}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Pressure",children:(0,o.createComponentVNode)(2,a.RoundGauge,{size:1.75,value:null!==i.pressure?i.pressure:0,minValue:0,maxValue:p,alertAfter:.7*p,ranges:{good:[0,.7*p],average:[.7*p,.85*p],bad:[.85*p,p]},format:l.formatPressure})})]})})};t.TankInfo=u;t.TTV=function(e,t){var n=(0,r.useBackend)(t),c=n.act,l=n.data,d=l.opened,s=l.tank_one,p=l.tank_two;return(0,o.createComponentVNode)(2,i.Window,{width:650,height:170,children:(0,o.createComponentVNode)(2,i.Window.Content,{children:(0,o.createComponentVNode)(2,a.Stack,{children:[(0,o.createComponentVNode)(2,a.Stack.Item,{children:(0,o.createComponentVNode)(2,u,{tank:s,tankNum:1})}),(0,o.createComponentVNode)(2,a.Stack.Item,{children:(0,o.createComponentVNode)(2,a.Section,{title:"Valve",px:1,children:(0,o.createComponentVNode)(2,a.Stack,{vertical:!0,textAlign:"center",children:[(0,o.createComponentVNode)(2,a.Stack.Item,{color:d?"red":"green",children:["Valve is ",d?"open":"closed"]}),(0,o.createComponentVNode)(2,a.Stack.Item,{children:(0,o.createComponentVNode)(2,a.Button,{icon:"repeat",onClick:function(){return c("toggle_valve")},children:"Toggle Valve"})}),(0,o.createComponentVNode)(2,a.Stack.Item,{children:[""===l.device?"No Device ":"",""===l.device?(0,o.createComponentVNode)(2,a.Button,{icon:"add",onClick:function(){return c("add_item")},children:"Add"}):(0,o.createFragment)([(0,o.createComponentVNode)(2,a.Button,{onClick:function(){return c("interact_device")},children:l.device}),(0,o.createComponentVNode)(2,a.Button,{icon:"eject",onClick:function(){return c("remove_device")},children:"Eject"})],4)]})]})})}),(0,o.createComponentVNode)(2,a.Stack.Item,{children:(0,o.createComponentVNode)(2,u,{tank:p,tankNum:2})})]})})})}},51461:function(){},99714:function(e,t,n){"use strict";t.__esModule=!0,t.TankDispenser=void 0;var o=n(96323),r=n(31246),a=n(26949),i=n(2381);t.TankDispenser=function(e,t){var n=(0,r.useBackend)(t),c=n.act,l=n.data;return(0,o.createComponentVNode)(2,i.Window,{width:280,height:105,children:(0,o.createComponentVNode)(2,i.Window.Content,{children:(0,o.createComponentVNode)(2,a.Section,{children:(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Plasma",buttons:(0,o.createComponentVNode)(2,a.Button,{icon:l.plasma?"circle":"circle-o",content:"Dispense",disabled:!l.plasma,onClick:function(){return c("dispense-plasma")}}),children:l.plasma}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Oxygen",buttons:(0,o.createComponentVNode)(2,a.Button,{icon:l.oxygen?"circle":"circle-o",content:"Dispense",disabled:!l.oxygen,onClick:function(){return c("dispense-oxygen")}}),children:l.oxygen})]})})})})}},87221:function(e,t,n){"use strict";t.__esModule=!0,t.BookmarksSection=void 0;var o=n(96323),r=n(21118),a=n(31246),i=n(26949),c=n(581);t.BookmarksSection=function(e,t){var n=e.bookmarks,l=e.maxBookmarks,u=e.onAddBookmark,d=e.onDeleteBookmark,s=e.onRestoreBookmark,p=e.targetCoords,m=(0,a.useLocalState)(t,"newBookmarkName",""),f=m[0],h=m[1],C=function(e){u(e),h("")};return(0,o.createComponentVNode)(2,i.Section,{title:"Bookmarks",children:(0,o.createComponentVNode)(2,i.LabeledList,{children:[n.map((function(e){return(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:(0,c.formatCoordinates)(e.x,e.y,e.z),buttons:(0,o.createComponentVNode)(2,i.Button,{icon:"trash",color:"red",onClick:function(){return d(e.ref)}}),children:(0,o.createComponentVNode)(2,i.Button,{icon:"bookmark",onClick:function(){return s(e.ref)},children:(0,r.decodeHtmlEntities)(e.name)})},e.ref)})),!!(n.length<l)&&(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:c.formatCoordinates.apply(void 0,p),buttons:(0,o.createComponentVNode)(2,i.Button,{icon:"plus",onClick:function(){return C(f)}}),children:(0,o.createComponentVNode)(2,i.Input,{width:"100%",value:f,onInput:function(e,t){return h(t)},placeholder:"New bookmark",onEnter:function(e,t){return C(t)},maxLength:32})},"new")]})})}},75461:function(e,t,n){"use strict";t.__esModule=!0,t.ConnectionSection=void 0;var o=n(96323),r=n(26949);t.ConnectionSection=function(e){var t=e.isConnected,n=e.isPanelOpen,a=e.onCyclePad,i=e.onReset,c=e.onRetry,l=e.padNum,u=t?(0,o.createComponentVNode)(2,r.Button,{icon:"power-off",color:"red",onClick:i,children:"Reset"}):(0,o.createComponentVNode)(2,r.Button,{icon:"power-off",color:"green",onClick:c,children:"Retry"});return(0,o.createComponentVNode)(2,r.Section,{children:(0,o.createComponentVNode)(2,r.LabeledList,{children:[(0,o.createComponentVNode)(2,r.LabeledList.Item,{label:"Connection",buttons:u,children:t?(0,o.createComponentVNode)(2,r.Box,{color:"green",children:"Connected"}):(0,o.createComponentVNode)(2,r.Box,{color:"red",children:"No connection to host"})}),n&&(0,o.createComponentVNode)(2,r.LabeledList.Item,{label:"Linked Pad",buttons:(0,o.createComponentVNode)(2,r.Button,{icon:"arrows-spin",onClick:a,children:"Cycle"}),children:l})]})})}},12703:function(e,t,n){"use strict";t.__esModule=!0,t.CoordinatesSection=void 0;var o=n(96323),r=n(31246),a=n(26949),i=n(34545),c=n(581);t.CoordinatesSection=function(e,t){var n=(0,r.useBackend)(t),l=n.act,u=n.data,d=u.xTarget,s=u.yTarget,p=u.zTarget;return(0,o.createComponentVNode)(2,a.Section,{title:"Target",children:(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"X",children:(0,o.createComponentVNode)(2,i.SteppedSlider,{format:c.formatDecimal,maxValue:500,minValue:0,nudgeAmount:.25,skipAmount:10,stepAmount:1,step:.25,onChange:function(e){return l("setX",{value:e})},value:d})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Y",children:(0,o.createComponentVNode)(2,i.SteppedSlider,{format:c.formatDecimal,maxValue:500,minValue:0,nudgeAmount:.25,skipAmount:10,stepAmount:1,step:.25,onChange:function(e){return l("setY",{value:e})},value:s})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Z",children:(0,o.createComponentVNode)(2,i.SteppedSlider,{maxValue:14,minValue:0,onChange:function(e){return l("setZ",{value:e})},stepPixelSize:16,value:p})})]})})}},34545:function(e,t,n){"use strict";t.__esModule=!0,t.SteppedSlider=void 0;var o=n(96323),r=n(97622),a=n(26949),i=["format","maxValue","minValue","onAdjust","onChange","nudgeAmount","skipAmount","step","stepAmount","value"];t.SteppedSlider=function(e){var t,n=e.format,c=e.maxValue,l=e.minValue,u=e.onAdjust,d=e.onChange,s=e.nudgeAmount,p=e.skipAmount,m=e.step,f=e.stepAmount,h=e.value,C=function(e,t){if(null==e)return{};var n,o,r={},a=Object.keys(e);for(o=0;o<a.length;o++)n=a[o],t.indexOf(n)>=0||(r[n]=e[n]);return r}(e,i),g=null!=(t=null!=f?f:m)?t:1,N=function(e){u?u(e):d((0,r.clamp)(h+e,l,c))};return(0,o.createComponentVNode)(2,a.Stack,{inline:!0,width:"100%",children:[(0,o.createComponentVNode)(2,a.Stack.Item,{children:[(0,o.createComponentVNode)(2,a.Button,{icon:"backward-fast",onClick:function(){return d(l)},tooltip:"Minimum ("+l+")",tooltipPosition:"bottom"}),!!p&&(0,o.createComponentVNode)(2,a.Button,{icon:"backward",onClick:function(){return N(-p)},tooltip:"Skip Down ("+-p+")",tooltipPosition:"bottom"}),(0,o.createComponentVNode)(2,a.Button,{icon:"backward-step",onClick:function(){return N(-g)},tooltip:"Step Down ("+-g+")",tooltipPosition:"bottom"}),!!s&&(0,o.createComponentVNode)(2,a.Button,{onClick:function(){return N(-s)},tooltip:"Nudge Down ("+-s+")",tooltipPosition:"bottom",children:(0,o.createComponentVNode)(2,a.Icon,{name:"play",rotation:180})})]}),(0,o.createComponentVNode)(2,a.Stack.Item,{grow:1,children:(0,o.normalizeProps)((0,o.createComponentVNode)(2,a.Slider,Object.assign({},C,{format:n,maxValue:c,minValue:l,onChange:function(e,t){return d(t)},step:m,value:h})))}),(0,o.createComponentVNode)(2,a.Stack.Item,{children:[!!s&&(0,o.createComponentVNode)(2,a.Button,{icon:"play",onClick:function(){return N(s)},tooltip:"Nudge Up (+"+s+")",tooltipPosition:"bottom"}),(0,o.createComponentVNode)(2,a.Button,{icon:"forward-step",onClick:function(){return N(g)},tooltip:"Step Up (+"+g+")",tooltipPosition:"bottom"}),!!p&&(0,o.createComponentVNode)(2,a.Button,{icon:"forward",onClick:function(){return N(p)},tooltip:"Skip Up (+"+p+")",tooltipPosition:"bottom"}),(0,o.createComponentVNode)(2,a.Button,{icon:"fast-forward",onClick:function(){return d(c)},tooltip:"Maximum ("+c+")",tooltipPosition:"bottom"})]})]})}},79268:function(e,t,n){"use strict";t.__esModule=!0,t.TeleConsole=void 0;var o=n(96323),r=n(31246),a=n(26949),i=n(2381),c=n(87221),l=n(75461),u=n(12703),d=n(581);t.TeleConsole=function(e,t){var n=(0,r.useBackend)(t),s=n.act,p=n.data,m=p.xTarget,f=p.yTarget,h=p.zTarget,C=p.hostId,g=p.bookmarks,N=p.readout,v=p.isPanelOpen,b=p.padNum,V=p.maxBookmarks,y=!!C;return(0,o.createComponentVNode)(2,i.Window,{theme:"ntos",width:400,height:515,children:(0,o.createComponentVNode)(2,i.Window.Content,{textAlign:"center",children:[(0,o.createComponentVNode)(2,u.CoordinatesSection),(0,o.createComponentVNode)(2,a.Section,{children:[(0,o.createComponentVNode)(2,a.Button,{icon:"sign-out-alt",onClick:function(){return s("send")},disabled:!y,children:"Send"}),(0,o.createComponentVNode)(2,a.Button,{icon:"sign-in-alt",onClick:function(){return s("receive")},disabled:!y,children:"Receive"}),(0,o.createComponentVNode)(2,a.Button,{onClick:function(){return s("portal")},disabled:!y,children:[(0,o.createComponentVNode)(2,a.Icon,{name:"ring",rotation:90}),"Toggle Portal"]}),(0,o.createComponentVNode)(2,a.Button,{icon:"magnifying-glass",onClick:function(){return s("scan")},disabled:!y,children:"Scan"})]}),N&&(0,o.createComponentVNode)(2,a.Section,{children:(0,d.formatReadout)(N)}),(0,o.createComponentVNode)(2,c.BookmarksSection,{bookmarks:g,maxBookmarks:V,onAddBookmark:function(e){return s("addbookmark",{value:e})},onDeleteBookmark:function(e){return s("deletebookmark",{value:e})},onRestoreBookmark:function(e){return s("restorebookmark",{value:e})},targetCoords:[m,f,h]}),(0,o.createComponentVNode)(2,l.ConnectionSection,{isConnected:y,isPanelOpen:!!v,onCyclePad:function(){return s("setpad")},onReset:function(){return s("reconnect",{value:2})},onRetry:function(){return s("reconnect",{value:1})},padNum:b})]})})}},65087:function(){},581:function(e,t,n){"use strict";t.__esModule=!0,t.formatReadout=t.formatCoordinates=t.formatDecimal=void 0;var o=n(97622),r=n(21118),a=function(e){return(0,o.toFixed)(e,2)};t.formatDecimal=a;t.formatCoordinates=function(e,t,n){return a(e)+" / "+a(t)+" / "+n};t.formatReadout=function(e){return(0,r.decodeHtmlEntities)(e)}},73354:function(e,t,n){"use strict";t.__esModule=!0,t.InputAndButtonsSection=void 0;var o=n(96323),r=n(31246),a=n(26949);t.InputAndButtonsSection=function(e,t){var n=(0,r.useBackend)(t),i=n.act,c=n.data.TermActive;return(0,o.createComponentVNode)(2,a.Section,{fitted:!0,children:(0,o.createComponentVNode)(2,a.Flex,{align:"center",children:[(0,o.createComponentVNode)(2,a.Flex.Item,{grow:!0,children:(0,o.createComponentVNode)(2,a.Input,{id:"terminalInput",placeholder:"Type Here",selfClear:!0,fluid:!0,mr:"0.5rem",onEnter:function(e,t){i("text",{value:t})},history:!0})}),(0,o.createComponentVNode)(2,a.Flex.Item,{children:(0,o.createComponentVNode)(2,a.Tooltip,{content:"Enter",children:(0,o.createComponentVNode)(2,a.Button,{icon:"share",color:c?"green":"red",onClick:function(){var e=document.querySelector("#terminalInput .Input__input");i("text",{value:e.value}),e.value=""},mr:"0.5rem",my:.25})})}),(0,o.createComponentVNode)(2,a.Flex.Item,{children:(0,o.createComponentVNode)(2,a.Tooltip,{content:"Restart",children:(0,o.createComponentVNode)(2,a.Button,{icon:"repeat",color:c?"green":"red",onClick:function(){return i("restart")},my:.25})})})]})})}},58084:function(e,t,n){"use strict";t.__esModule=!0,t.PheripheralsSection=void 0;var o=n(96323),r=n(31246),a=n(26949);t.PheripheralsSection=function(e,t){var n=(0,r.useBackend)(t),i=n.act,c=n.data.peripherals||[];return(0,o.createComponentVNode)(2,a.Section,{fitted:!0,children:c.map((function(e){return(0,o.createComponentVNode)(2,a.Button,{icon:e.icon,content:e.label,fontFamily:e.Clown?"Comic Sans MS":"Consolas",color:e.color?"green":"grey",onClick:function(){return function(e){return i("buttonPressed",{card:e.card,index:e.index})}(e)}},e.card)}))})}},98341:function(e,t,n){"use strict";t.__esModule=!0,t.TerminalOutputSection=void 0;var o=n(96323),r=n(31246),a=n(26949);t.TerminalOutputSection=function(e,t){var n=(0,r.useBackend)(t).data,i=n.fontColor,c=n.bgColor,l=e.displayHTML;return(0,o.createComponentVNode)(2,a.Section,{backgroundColor:c,scrollable:!0,fill:!0,id:"terminalOutput",children:(0,o.createComponentVNode)(2,a.Box,{fontFamily:"Consolas",fill:!0,color:i,dangerouslySetInnerHTML:{__html:l}})})}},14831:function(e,t,n){"use strict";t.__esModule=!0,t.Terminal=void 0;var o=n(96323),r=n(31246),a=n(2381),i=n(98341),c=n(73354),l=n(58084),u=n(26949);t.Terminal=function(e,t){var n=(0,r.useBackend)(t).data,d=n.windowName,s=n.displayHTML,p=function(){var e=document.querySelector("#terminalOutput .Section__content");e&&(e.scrollTop=e.scrollHeight)};return(0,o.createComponentVNode)(2,a.Window,{theme:"retro-dark",title:d,fontFamily:"Consolas",width:"380",height:"350",children:(0,o.createComponentVNode)(2,a.Window.Content,{children:(0,o.createComponentVNode)(2,u.Stack,{vertical:!0,fill:!0,children:[(0,o.createComponentVNode)(2,u.Stack.Item,{grow:!0,children:(0,o.createComponentVNode)(2,i.TerminalOutputSection,{displayHTML:s},null,{onComponentDidMount:p,onComponentDidUpdate:function(e,t){e.displayHTML!==t.displayHTML&&p()}})}),(0,o.createComponentVNode)(2,u.Stack.Item,{children:(0,o.createComponentVNode)(2,c.InputAndButtonsSection)}),(0,o.createComponentVNode)(2,u.Stack.Item,{children:(0,o.createComponentVNode)(2,l.PheripheralsSection)})]})})})}},55230:function(){},14081:function(e,t,n){"use strict";t.__esModule=!0,t.Terrainify=t.TerrainOptions=t.TerrainToggles=t.TerrainVehicleChoice=t.TerrainChoice=void 0;var o=n(96323),r=n(31246),a=n(26949),i=n(2381),c=function(e){var t=e.typeData,n=e.terrain,r=e.onTerrainValue;return(0,o.createComponentVNode)(2,a.Flex.Item,{mb:1,children:(0,o.createComponentVNode)(2,a.Flex,{direction:"column",children:(0,o.createComponentVNode)(2,a.Section,{title:"Types",children:Object.keys(t).map((function(e,i){return(0,o.createComponentVNode)(2,a.Flex.Item,{mb:1,children:(0,o.createComponentVNode)(2,a.Button,{fluid:!0,selected:n===e,onClick:function(){return r(e)},children:t[e].name})},i)}))})})})};t.TerrainChoice=c;var l=function(e){var t=e.fabricator,n=e.cars,r=e.allowVehicles,i=e.onToggleFabricators,c=e.onToggleCars,l=e.onToggleAllowVehicles;return(0,o.createComponentVNode)(2,a.Flex.Item,{children:(0,o.createComponentVNode)(2,a.Section,{title:"Vehicle Options",children:[(0,o.createComponentVNode)(2,a.Button.Checkbox,{checked:t,content:"Add Subs to Fabricators",onClick:function(){return i()}}),(0,o.createVNode)(1,"br"),(0,o.createComponentVNode)(2,a.Button.Checkbox,{checked:n,content:"Convert some Cars",onClick:function(){return c()}}),(0,o.createComponentVNode)(2,a.Button.Checkbox,{checked:r,content:"Allow Pods",onClick:function(){return l()}})]})})};t.TerrainVehicleChoice=l;var u=function(e){var t=e.terrain,n=e.typeData,r=e.activeToggles,i=e.onToggle;return t&&n[t].toggles&&Object.keys(n[t].toggles).length?(0,o.createComponentVNode)(2,a.Section,{title:"Toggles",children:Object.keys(n[t].toggles).map((function(e,t){return(0,o.createComponentVNode)(2,a.Flex.Item,{mb:1,children:(0,o.createComponentVNode)(2,a.Button.Checkbox,{checked:r[e],content:e,onClick:function(){return i(e)}})},t)}))}):""};t.TerrainToggles=u;var d=function(e){var t=e.terrain,n=e.typeData,r=e.activeOptions,i=e.onSelect;return t&&n[t].options&&Object.keys(n[t].options).length?Object.keys(n[t].options).map((function(e,c){return(0,o.createComponentVNode)(2,a.Section,{title:e,children:n[t].options[e].map((function(t,n){return(0,o.createComponentVNode)(2,a.Flex.Item,{mb:1,children:(0,o.createComponentVNode)(2,a.Button,{fluid:!0,selected:r[e]===t,onClick:function(){return i(e,t)},children:t})},n)}))},c)})):""};t.TerrainOptions=d;t.Terrainify=function(e,t){var n=(0,r.useBackend)(t),s=n.act,p=n.data,m=p.typeData,f=p.terrain,h=p.fabricator,C=p.cars,g=p.allowVehicles,N=p.locked,v=p.activeOptions,b=p.activeToggles;return(0,o.createComponentVNode)(2,i.Window,{title:"Terrainify",width:500,height:600,children:(0,o.createComponentVNode)(2,i.Window.Content,{scrollable:!0,children:(0,o.createComponentVNode)(2,a.Section,{title:(0,o.createComponentVNode)(2,a.Box,{inline:!0,children:"Terrainify"}),children:[(0,o.createComponentVNode)(2,a.Flex,{direction:"row",children:[(0,o.createComponentVNode)(2,c,{typeData:m,terrain:f,onTerrainValue:function(e){s("terrain",{terrain:e})}}),(0,o.createComponentVNode)(2,a.Flex.Item,{ml:2}),(0,o.createComponentVNode)(2,a.Flex.Item,{ml:1,children:[(0,o.createComponentVNode)(2,a.Section,{title:"Description",children:f?m[f].description:"..."}),(0,o.createComponentVNode)(2,l,{fabricator:h,cars:C,allowVehicles:g,onToggleAllowVehicles:function(){s("allowVehicles")},onToggleFabricators:function(){s("fabricator")},onToggleCars:function(){s("cars")}}),(0,o.createComponentVNode)(2,u,{typeData:m,terrain:f,activeToggles:b,onToggle:function(e){s("toggle",{toggle:e})}}),(0,o.createComponentVNode)(2,d,{typeData:m,terrain:f,activeOptions:v,onSelect:function(e,t){s("option",{key:e,value:t})}})]})]}),(0,o.createComponentVNode)(2,a.Box,{m:1,children:(0,o.createComponentVNode)(2,a.Button,{fluid:!0,disabled:N,onClick:function(){return s("activate")},children:"Transform Station"})})]})})})}},81235:function(e,t,n){"use strict";t.__esModule=!0,t.TextInputModal=void 0;var o=n(96323),r=n(55631),a=n(34277),i=n(31246),c=n(26949),l=n(2381);t.TextInputModal=function(e,t){var n=(0,i.useBackend)(t).data,s=n.max_length,p=n.message,m=n.multiline,f=n.placeholder,h=n.timeout,C=n.title,g=n.allowEmpty,N=n.theme,v=(0,i.useLocalState)(t,"input",f),b=v[0],V=v[1],y=(0,i.useLocalState)(t,"inputIsValid",{isValid:g||!!p,error:null}),x=y[0],k=y[1],S=130+Math.ceil(p.length/5)+(m?75:0);return(0,o.createComponentVNode)(2,l.Window,{title:C,width:325,height:S,theme:N||"nanotrasen",children:[h&&(0,o.createComponentVNode)(2,r.Loader,{value:h}),(0,o.createComponentVNode)(2,l.Window.Content,{children:(0,o.createComponentVNode)(2,c.Section,{fill:!0,children:(0,o.createComponentVNode)(2,c.Stack,{fill:!0,vertical:!0,children:[(0,o.createComponentVNode)(2,c.Stack.Item,{children:(0,o.createComponentVNode)(2,c.Box,{color:"label",children:p})}),(0,o.createComponentVNode)(2,u,{input:b,inputIsValid:x,onType:function(e){e.preventDefault();var t=e.target;k(d(t.value,s,g)),V(t.value)}}),(0,o.createComponentVNode)(2,c.Stack.Item,{pl:5,pr:5,children:(0,o.createComponentVNode)(2,a.InputButtons,{input:b,inputIsValid:x})})]})})})]})};var u=function(e,t){var n=(0,i.useBackend)(t),r=n.act,a=n.data.multiline,l=e.input,u=e.inputIsValid,d=e.onType;return a?(0,o.createComponentVNode)(2,c.Stack.Item,{grow:!0,children:(0,o.createComponentVNode)(2,c.TextArea,{autoFocus:!0,height:"100%",onInput:function(e){return d(e)},onEnter:function(){r("submit",{entry:l})},placeholder:"Type something...",value:l})}):(0,o.createComponentVNode)(2,c.Stack.Item,{children:(0,o.createComponentVNode)(2,c.Input,{autoFocus:!0,fluid:!0,onInput:function(e){return d(e)},onEnter:function(){u&&r("submit",{entry:l})},placeholder:"Type something...",value:l})})},d=function(e,t,n){return t&&e.length>t?{isValid:!1,error:"Too long!"}:0!==e.length||n?{isValid:!0,error:null}:{isValid:!1,error:null}}},80480:function(e,t,n){"use strict";t.__esModule=!0,t.Timer=void 0;var o=n(96323),r=n(31246),a=n(26949),i=n(2381),c=n(1033);t.Timer=function(e,t){var n=(0,r.useBackend)(t),l=n.data,u=n.act,d=function(e){u("set-time",{value:10*e})},s=function(e){return(0,c.formatTime)(10*e)};return(0,o.createComponentVNode)(2,i.Window,{width:"280",height:"200",title:l.name,children:(0,o.createComponentVNode)(2,i.Window.Content,{children:(0,o.createComponentVNode)(2,a.Section,{children:(0,o.createComponentVNode)(2,a.LabeledList,{children:[!!l.armButton&&(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Armed",children:(0,o.createComponentVNode)(2,a.Button.Checkbox,{checked:l.armed,onClick:function(){return u("toggle-armed")},children:l.armed?"Armed":"Not armed"})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Timing",children:(0,o.createComponentVNode)(2,a.Button.Checkbox,{checked:l.timing,onClick:function(){return u("toggle-timing")},children:l.timing?"Timing":"Not timing"})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Time",children:(0,o.createComponentVNode)(2,a.Stack,{align:"center",children:[(0,o.createComponentVNode)(2,a.Stack.Item,{children:(0,o.createComponentVNode)(2,a.Knob,{animated:!0,value:l.time,minValue:l.minTime,maxValue:600,stepPixelSize:1,format:s,onDrag:function(e,t){return d(t)},onChange:function(e,t){return d(t)}})}),(0,o.createComponentVNode)(2,a.Stack.Item,{children:(0,o.createComponentVNode)(2,a.AnimatedNumber,{value:l.time,format:s})})]})})]})})})})}},5051:function(e,t,n){"use strict";t.__esModule=!0,t.TransitShuttle=void 0;var o=n(96323),r=n(31246),a=n(26949),i=n(2381);t.TransitShuttle=function(e,t){var n=(0,r.useBackend)(t),c=n.act,l=n.data,u=l.destinations||[],d=l.currentlocation||[],s=l.endlocation||[],p=l.shuttlename,m=l.moving,f=l.locked,h="the "+p+" is currently at "+d.name;return m&&s&&(h+=" moving to "+s.name),(0,o.createComponentVNode)(2,i.Window,{height:"520",width:"300",title:p,children:[(0,o.createComponentVNode)(2,a.BlockQuote,{style:{margin:"5px"},children:h}),(0,o.createComponentVNode)(2,a.Section,{fill:!0,scrollable:!0,height:"100%",children:u.map((function(e){return(0,o.createFragment)([(0,o.createComponentVNode)(2,a.Table,{direction:"row",align:"center",children:(0,o.createComponentVNode)(2,a.Table.Row,{children:(0,o.createComponentVNode)(2,a.Table.Cell,{children:(0,o.createComponentVNode)(2,a.Button,{content:e.name,disabled:f||m||d.type===e.type,onClick:function(){return c("callto",{dest:e.type})}})})})},e.type),(0,o.createComponentVNode)(2,a.Divider)],8)}))})]})}},73128:function(e,t,n){"use strict";t.__esModule=!0,t.TrscArray=void 0;var o=n(96323),r=n(2381),a=n(31246),i=n(26949),c=n(1033);t.TrscArray=function(e,t){var n=(0,a.useBackend)(t),l=n.act,u=n.data,d=u.apcCellStat,s=u.apcCellDiff,p=u.arrayCellStat,m=u.arrayCellDiff,f=u.sendsSafe,h=u.sendsMax,C=u.failsafeThreshold,g=u.failsafeStat,N=u.arrayImage,v=u.arrayHealth,b=u.drawRateTarget,V=u.surplusThreshold;return(0,o.createComponentVNode)(2,r.Window,{width:400,height:525,title:"Transception Systems",children:(0,o.createComponentVNode)(2,r.Window.Content,{children:[(0,o.createComponentVNode)(2,i.Section,{title:"Array Status",textAlign:"center",children:(0,o.createComponentVNode)(2,i.Box,{children:(0,o.createComponentVNode)(2,i.Flex,{justify:"space-around",children:[(0,o.createComponentVNode)(2,i.Flex.Item,{children:(0,o.createComponentVNode)(2,i.Flex,{height:21,direction:"column",justify:"space-around",children:[(0,o.createComponentVNode)(2,i.Flex.Item,{children:[(0,o.createVNode)(1,"strong",null,"Area Cell Power:",16),(0,o.createVNode)(1,"br"),(0,o.createVNode)(1,"h3",null,d,0),(0,o.createComponentVNode)(2,i.ProgressBar,{value:s,color:"#f9ae00"})]}),(0,o.createComponentVNode)(2,i.Flex.Item,{children:[(0,o.createVNode)(1,"strong",null,"Internal Capacitor:",16),(0,o.createVNode)(1,"br"),(0,o.createVNode)(1,"h3",null,p,0),(0,o.createComponentVNode)(2,i.ProgressBar,{value:m,color:"#76B9D3"})]}),(0,o.createComponentVNode)(2,i.Flex.Item,{children:[(0,o.createVNode)(1,"strong",null,[(0,o.createTextVNode)("Transceptions Remaining"),(0,o.createVNode)(1,"br"),(0,o.createTextVNode)("(Standard / Maximum)"),(0,o.createVNode)(1,"br")],4),(0,o.createVNode)(1,"h2",null,[f,(0,o.createTextVNode)(" | "),h],0)]})]})}),(0,o.createComponentVNode)(2,i.Flex.Item,{backgroundColor:"#A37933",children:(0,o.createComponentVNode)(2,i.Box,{mb:1,mx:.5,height:19,backgroundColor:"#101020",children:(0,o.createComponentVNode)(2,i.Flex,{mx:2,my:2,height:18,direction:"column",justify:"space-around",children:[(0,o.createComponentVNode)(2,i.Flex.Item,{children:[(0,o.createComponentVNode)(2,i.Image,{pixelated:!0,width:"96px",height:"96px",src:"data:image/png;base64,"+N,backgroundColor:"transparent"}),(0,o.createVNode)(1,"br")]}),(0,o.createComponentVNode)(2,i.Flex.Item,{children:[(0,o.createVNode)(1,"strong",null,"Array Condition:",16),(0,o.createVNode)(1,"br"),(0,o.createVNode)(1,"h2",null,v,0)]})]})})})]})})}),(0,o.createComponentVNode)(2,i.Divider),(0,o.createComponentVNode)(2,i.Section,{title:"Transception Systems",textAlign:"center",children:(0,o.createComponentVNode)(2,i.Flex,{justify:"space-around",children:[(0,o.createComponentVNode)(2,i.Flex.Item,{children:(0,o.createVNode)(1,"strong",null,[(0,o.createTextVNode)("Transception Capability:"),(0,o.createVNode)(1,"br"),g],0)}),(0,o.createComponentVNode)(2,i.Flex.Item,{children:[(0,o.createVNode)(1,"strong",null,[(0,o.createTextVNode)("Power Loss Failsafe:"),(0,o.createVNode)(1,"br"),C,(0,o.createTextVNode)(" | ")],0),(0,o.createComponentVNode)(2,i.Button,{content:"Toggle",onClick:function(){return l("toggle_failsafe")}})]})]})}),(0,o.createComponentVNode)(2,i.Section,{title:"Internal Capacitor Control",textAlign:"center",children:(0,o.createComponentVNode)(2,i.Flex,{justify:"space-around",children:[(0,o.createComponentVNode)(2,i.Flex.Item,{children:[(0,o.createVNode)(1,"strong",null,[(0,o.createTextVNode)("Target Charge Rate:"),(0,o.createVNode)(1,"br")],4),(0,o.createComponentVNode)(2,i.Slider,{value:b,minValue:0,maxValue:5e4,step:1e3,stepPixelSize:4,format:function(e){return(0,c.formatPower)(e)},onDrag:function(e,t){return l("set_draw_rate",{drawRateTarget:t})}})]}),(0,o.createComponentVNode)(2,i.Flex.Item,{children:[(0,o.createVNode)(1,"strong",null,[(0,o.createTextVNode)("Required Surplus:"),(0,o.createVNode)(1,"br")],4),(0,o.createComponentVNode)(2,i.Slider,{value:V,minValue:1e4,maxValue:2e5,step:5e3,stepPixelSize:4,format:function(e){return(0,c.formatPower)(e)},onDrag:function(e,t){return l("set_surplus",{surplusThreshold:t})}})]})]})})]})})}},73248:function(e,t,n){"use strict";t.__esModule=!0,t.TurbineControl=void 0;var o=n(96323),r=n(31246),a=n(26949),i=n(1033),c=n(2381);t.TurbineControl=function(e,t){var n=(0,r.useBackend)(t),l=n.act,u=n.data,d=u.rpm,s=u.load,p=u.power,m=u.volume,f=u.history,h=u.overspeed,C=u.overtemp,g=u.undertemp,N=f.map((function(e){return e[0]})),v=N.map((function(e,t){return[t,e]})),b=f.map((function(e){return e[1]})),V=b.map((function(e,t){return[t,e]})),y=f.map((function(e){return e[2]})),x=y.map((function(e,t){return[t,e]})),k=Math.max.apply(Math,y),S=Math.max.apply(Math,N),I=Math.max.apply(Math,b);return(0,o.createComponentVNode)(2,c.Window,{width:375,height:400,children:(0,o.createComponentVNode)(2,c.Window.Content,{children:(0,o.createComponentVNode)(2,a.Stack,{vertical:!0,fill:!0,children:[(0,o.createComponentVNode)(2,a.Stack.Item,{children:[(0,o.createComponentVNode)(2,a.LabeledList,{children:(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Turbine Output",children:(0,i.formatPower)(p)})}),(0,o.createComponentVNode)(2,a.Chart.Line,{mt:"5px",height:"5em",data:x,rangeX:[0,x.length-1],rangeY:[0,k],strokeColor:"rgba(1, 184, 170, 1)",fillColor:"rgba(1, 184, 170, 0.25)"})]}),(0,o.createComponentVNode)(2,a.Stack.Item,{children:[(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Turbine Speed",children:[d," RPM"]}),h?(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"ALERT",color:"#FF0000",children:"OVERSPEED"}):"",C?(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"ALERT",color:"#FF0000",children:"OVER TEMPERATURE"}):"",g?(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"ALERT",color:"#FF0000",children:"UNDER TEMPERATURE"}):""]}),(0,o.createComponentVNode)(2,a.Chart.Line,{mt:"5px",height:"5em",data:v,rangeX:[0,v.length-1],rangeY:[0,S],strokeColor:"rgba(1, 184, 170, 1)",fillColor:"rgba(1, 184, 170, 0.25)"})]}),(0,o.createComponentVNode)(2,a.Stack.Item,{children:[(0,o.createComponentVNode)(2,a.LabeledList,{children:(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Turbine Load",children:[s," Joules/Revolution"]})}),(0,o.createComponentVNode)(2,a.Chart.Line,{mt:"5px",height:"5em",data:V,rangeX:[0,V.length-1],rangeY:[0,I],strokeColor:"rgba(1, 184, 170, 1)",fillColor:"rgba(1, 184, 170, 0.25)"})]}),(0,o.createComponentVNode)(2,a.Stack.Item,{children:["Stator Load:",(0,o.createComponentVNode)(2,a.NumberInput,{minValue:1,value:s,format:function(e){return e+" Joules/Revolution"},onChange:function(e,t){return l("loadChange",{newVal:t})}})]}),(0,o.createComponentVNode)(2,a.Stack.Item,{children:["Coolant Volume:",(0,o.createComponentVNode)(2,a.NumberInput,{minValue:1,value:m,format:function(e){return e+" L"},onChange:function(e,t){return l("volChange",{newVal:t})}})]})]})})})}},40620:function(e,t,n){"use strict";t.__esModule=!0,t.TurretControl=void 0;var o=n(96323),r=n(2381),a=n(31246),i=n(26949),c=n(96794),l=n(18331),u=function(e){for(var t=[],n=0;n<e;n++)Math.random()>.3?t.push("Kill. "):t.push("KILL. ");return t.map((function(e,t){return(0,o.createComponentVNode)(2,i.Box,{inline:!0,preserveWhitespace:!0,fontSize:(0,c.randInt)(11,25)+"px",children:e},t)}))};t.TurretControl=function(e,t){var n=(0,a.useBackend)(t),c=n.act,d=n.data,s=d.enabled,p=d.lethal,m=d.emagged,f=d.area,h=d.locked,C=function(e){c("setLethal",{lethal:e})},g=function(e){c("setEnabled",{enabled:e})};return(0,o.createComponentVNode)(2,r.Window,{title:m?"FATAL ERROR":"Turret control ("+f+")",theme:m?"syndicate":"ntos",width:400,height:160,children:(0,o.createComponentVNode)(2,r.Window.Content,{align:"center",children:(0,o.createComponentVNode)(2,i.Box,{py:"6px",children:[!m&&!h&&(0,o.createComponentVNode)(2,i.Box,{fontSize:"16px",children:[(0,o.createComponentVNode)(2,i.Section,{width:"70%",children:(0,o.createComponentVNode)(2,i.Stack,{children:[(0,o.createComponentVNode)(2,i.Stack.Item,{width:"50%",children:(0,o.createComponentVNode)(2,i.Button,{icon:"exclamation-triangle",fluid:!0,selected:s,onClick:function(){return g(!0)},children:"Enabled"})}),(0,o.createComponentVNode)(2,i.Stack.Item,{width:"50%",children:(0,o.createComponentVNode)(2,i.Button,{icon:"power-off",fluid:!0,selected:!s,onClick:function(){return g(!1)},children:"Disabled"})})]})}),(0,o.createComponentVNode)(2,i.Section,{width:"70%",children:(0,o.createComponentVNode)(2,i.Stack,{children:[(0,o.createComponentVNode)(2,i.Stack.Item,{width:"50%",children:(0,o.createComponentVNode)(2,i.Button,{icon:"bolt",fluid:!0,selected:!p,onClick:function(){return C(!1)},children:"Stun"})}),(0,o.createComponentVNode)(2,i.Stack.Item,{width:"50%",children:(0,o.createComponentVNode)(2,i.Button,{icon:"skull-crossbones",fluid:!0,selected:p,onClick:function(){return C(!0)},children:"Lethal"})})]})})]}),!m&&!!h&&(0,o.createComponentVNode)(2,i.Section,{children:"Panel locked, swipe ID card to unlock."}),!!m&&(0,o.createComponentVNode)(2,i.Box,{py:"20px",children:[(0,o.createComponentVNode)(2,i.Box,{align:"center",fontFamily:"Courier New",children:(0,l.glitch)("ERROR: UNABLE TO READ AUTHORIZATION",12)}),(0,o.createComponentVNode)(2,i.Box,{align:"center",style:{"font-size":"20px"},children:u(7)})]})]})})})}},97170:function(e,t,n){"use strict";t.__esModule=!0,t.Vendors=void 0;var o=n(96323),r=n(31246),a=n(2381),i=n(26949),c=n(26949),l=n(72638);t.Vendors=function(e,t){var n=(0,r.useBackend)(t),u=n.act,d=n.data,s=d.wiresList||[],p=d.productList||[],m=d.lightColors||[],f=d.windowName,h=d.wiresOpen,C=d.cash,g=d.bankMoney,N=d.requiresMoney,v=d.cardname,b=d.playerBuilt,V=d.name,y=d.owner,x=d.unlocked,k=d.loading,S=d.busy,I=d.busyphrase,w=d.currentlyVending,_=function(e){return(e.cost<=C||e.cost<=g||!N)&&e.amount>0},D=function(e){return e.cost&&N?e.cost+"\u2abd":"Vend"};return(0,o.createComponentVNode)(2,a.Window,{title:f,width:"500",height:"600",fontFamily:"Consolas","font-size":"10pt",children:(0,o.createComponentVNode)(2,a.Window.Content,{children:(0,o.createComponentVNode)(2,c.Stack,{vertical:!0,fill:!0,minHeight:"1%",maxHeight:"100%",children:[h&&(0,o.createComponentVNode)(2,c.Stack.Item,{children:(0,o.createComponentVNode)(2,c.Collapsible,{mb:"1%",title:"Wire Panel",children:[h&&s.map((function(e){return(0,o.createComponentVNode)(2,c.Flex,{textColor:e.color,children:[(0,o.createComponentVNode)(2,c.Flex.Item,{grow:!0,bold:!0,children:e.name}),(0,o.createComponentVNode)(2,c.Flex.Item,{mr:"5%",children:(0,o.createComponentVNode)(2,i.Button,{ml:"10%",my:"1%",content:"Pulse",onClick:function(){return u("pulsewire",{wire:e.name})}})}),(0,o.createComponentVNode)(2,c.Flex.Item,{children:(0,o.createComponentVNode)(2,i.Button,{m:"1%",content:e.uncut?"Cut":"Mend",onClick:function(){return u(e.uncut?"cutwire":"mendwire",{wire:e.name})}})})]},e.name)})),(0,o.createComponentVNode)(2,c.Divider),b&&(0,o.createFragment)([(0,o.createComponentVNode)(2,i.Button,{content:"Owner: "+y+" ("+(x?"Unlocked":"Locked")+")",onClick:function(){return u("togglelock")}}),(0,o.createComponentVNode)(2,i.Button,{content:"Loading Chute",disabled:!x,color:k?"green":"red",onClick:function(){return u("togglechute")}}),(0,o.createComponentVNode)(2,i.Button.Input,{content:V,defaultValue:V,onCommit:function(e,t){return u("rename",{name:t})}})],4),(0,o.createComponentVNode)(2,c.Flex,{justify:"space-between",align:"stretch",children:[(0,o.createComponentVNode)(2,c.Flex.Item,{direction:"row",children:(0,o.createComponentVNode)(2,c.LabeledList,{children:[(0,o.createComponentVNode)(2,c.LabeledList.Item,{label:"AI Control",children:m.ai_control?"Enabled":"Disabled"}),(0,o.createComponentVNode)(2,c.LabeledList.Item,{label:"Electrification",children:m.electrified?"Yes":"No"})]})}),(0,o.createComponentVNode)(2,c.Flex.Item,{direction:"row",children:[(0,o.createComponentVNode)(2,c.LabeledList.Item,{label:"Inventory",children:m.extendedinventory?"Expanded":"Standard"}),(0,o.createComponentVNode)(2,c.LabeledList.Item,{label:"Safety Light",children:m.shootinventory?"On":"Off"})]})]})]})}),(0,o.createComponentVNode)(2,c.Stack.Item,{grow:!0,minHeight:"1%",maxHeight:"100%",children:(0,o.createComponentVNode)(2,i.Section,{fill:!0,scrollable:!0,height:"100%",children:[!S&&p.map((function(e){return(0,o.createComponentVNode)(2,c.Flex,{justify:"space-between",align:"stretch",style:{"border-bottom":"1px #555 solid"},children:[(0,o.createComponentVNode)(2,c.Flex.Item,{direction:"row",children:e.img&&(0,o.createComponentVNode)(2,i.Box,{style:{overflow:"show",height:"24px"},children:(0,o.createVNode)(1,"img",null,null,1,{src:"data:image/png;base64,"+e.img,style:{transform:"translate(0, -4px)"}})})}),(0,o.createComponentVNode)(2,c.Flex.Item,{direction:"row",grow:!0,style:{display:"flex","justify-content":"center","flex-direction":"column"},children:(0,o.createComponentVNode)(2,i.Box,{children:[(0,o.createComponentVNode)(2,i.Box,{inline:!0,italic:!0,children:[!e.infinite&&e.amount+" x","\xa0"]}),(0,o.createComponentVNode)(2,i.Box,{inline:!0,children:[e.name,b&&h&&(0,o.createComponentVNode)(2,i.Button,{inline:!0,color:"green",icon:"images",style:{"margin-left":"5px"},onClick:function(){return u("setIcon",{target:e.ref})}})]})]})}),(0,o.createComponentVNode)(2,c.Flex.Item,{bold:!0,direction:"row",style:{"margin-left":"5px",display:"flex","justify-content":"center","flex-direction":"column"},children:b&&x?(0,o.createComponentVNode)(2,i.Button.Input,{color:_(e)?"green":"grey",content:D(e),style:{width:"50px","text-align":"center"},onCommit:function(t,n){return u("setPrice",{target:e.ref,cost:n})}}):(0,o.createComponentVNode)(2,i.Button,{color:_(e)?"green":"grey",content:D(e),disabled:!_(e),style:{width:"50px","text-align":"center",padding:"0px"},onClick:function(){return u("vend",{target:e.ref,cost:e.cost,amount:e.amount})}})})]},e.name)})),!!S&&(0,o.createComponentVNode)(2,c.Stack,{vertical:!0,children:[(0,o.createComponentVNode)(2,c.Stack.Item,{align:"center",children:(0,o.createComponentVNode)(2,i.Image,{height:"128px",width:"128px",pixelated:!0,src:"data:image/png;base64,"+p.find((function(e){return e.name===w})).img})}),(0,o.createComponentVNode)(2,c.Stack.Item,{align:"center",children:I})]})]})}),N>0&&(0,o.createComponentVNode)(2,c.Stack.Item,{children:(0,o.createComponentVNode)(2,l.VendorCashTable,{cardname:v,onCardClick:function(){return u("logout")},bankMoney:g,cash:C,onCashClick:function(){return u("returncash")}})})]})})})}},96880:function(e,t,n){"use strict";t.__esModule=!0,t.WeaponVendor=void 0;var o=n(96323),r=n(21118),a=n(31246),i=n(26949),c=n(2381),l=n(18331);t.WeaponVendor=function(e,t){var n=(0,a.useBackend)(t).data,r=(0,a.useLocalState)(t,"filter-available",!1),d=r[0],s=r[1];return(0,o.createComponentVNode)(2,c.Window,{width:550,height:700,children:(0,o.createComponentVNode)(2,c.Window.Content,{children:(0,o.createComponentVNode)(2,i.Stack,{className:"WeaponVendor",vertical:!0,fill:!0,children:[(0,o.createComponentVNode)(2,i.Stack.Item,{children:(0,o.createComponentVNode)(2,i.Section,{fill:!0,children:(0,o.createComponentVNode)(2,i.LabeledList,{children:(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Balance",children:Object.entries(n.credits).map((function(e,t){var r=e[0],a=e[1];return(0,o.createComponentVNode)(2,i.Box,{inline:!0,mr:"5px",className:"WeaponVendor__Credits--"+r,children:[a," ",r," ",(0,l.pluralize)("credit",a),t+1!==Object.keys(n.credits).length?", ":""]},r)}))})})})}),(0,o.createComponentVNode)(2,i.Stack.Item,{grow:1,children:(0,o.createComponentVNode)(2,i.Section,{fill:!0,scrollable:!0,title:"Materiel",buttons:(0,o.createComponentVNode)(2,i.Button.Checkbox,{checked:d,onClick:function(){return s(!d)},children:"Filter Available"}),children:Object.keys(n.credits).map((function(e){return(0,o.createComponentVNode)(2,u,{category:e,filterAvailable:d},e)}))})})]})})})};var u=function(e,t){var n=e.category,c=e.filterAvailable,l=(0,a.useBackend)(t).data,u=l.stock.filter((function(e){return e.category===n}));return c&&(u=u.filter((function(e){return e.cost<=l.credits[e.category]}))),0===u.length?null:(0,o.createComponentVNode)(2,i.Collapsible,{className:"WeaponVendor__Category--"+n,title:(0,r.toTitleCase)(n),open:!0,color:n,children:(0,o.createComponentVNode)(2,i.Table,{children:l.stock.filter((function(e){return e.category===n})).map((function(e){return(0,o.createComponentVNode)(2,d,{stock:e},e.name)}))})})},d=function(e,t){var n=e.stock,r=(0,a.useBackend)(t),c=r.data,u=r.act;return(0,o.createComponentVNode)(2,i.Table.Row,{className:"WeaponVendor__Row",opacity:n.cost>c.credits[n.category]?.5:1,children:[(0,o.createComponentVNode)(2,i.Table.Cell,{className:"WeaponVendor__Cell",py:"5px",children:[(0,o.createComponentVNode)(2,i.Box,{mb:"5px",bold:!0,children:n.name}),(0,o.createComponentVNode)(2,i.Box,{children:n.description})]}),(0,o.createComponentVNode)(2,i.Table.Cell,{className:"WeaponVendor__Cell",py:"5px",textAlign:"right",children:(0,o.createComponentVNode)(2,i.Button,{disabled:n.cost>c.credits[n.category],color:n.category,onClick:function(){return u("redeem",{ref:n.ref})},children:["Redeem ",n.cost," ",(0,l.pluralize)("credit",n.cost)]})})]})}},10661:function(){},14024:function(e,t,n){"use strict";t.__esModule=!0,t.Wizard_Spellbook=void 0;var o=n(96323),r=n(31246),a=n(26949),i=n(2381);t.Wizard_Spellbook=function(e,t){var n=(0,r.useBackend)(t).data,l=(0,r.useLocalState)(t,"searchQuery",""),u=l[0],d=l[1],s=n.spellbook_contents,p=n.spell_slots,m=n.owner_name,f=[];for(var h in s)f.push(h);return(0,o.createComponentVNode)(2,i.Window,{title:"Wizard Spellbook",fontSize:2,height:600,width:500,children:[(0,o.createComponentVNode)(2,i.Window.Content,{children:(0,o.createComponentVNode)(2,a.Section,{title:m+"'s Spellbook ",children:(0,o.createComponentVNode)(2,a.Flex,{justify:"space-between",children:[(0,o.createComponentVNode)(2,a.Flex.Item,{children:"Spell slots remaining: "+p}),(0,o.createComponentVNode)(2,a.Flex.Item,{children:(0,o.createComponentVNode)(2,a.Input,{value:u,placeholder:"Search by spell name",width:15,autoSelect:!0,onInput:function(e,t){return d(t)}})})]})})}),(0,o.createComponentVNode)(2,i.Window.Content,{mt:12,scrollable:!0,children:(0,o.createComponentVNode)(2,a.Section,{children:f.map((function(e){return(0,o.createComponentVNode)(2,c,{category:e,searchQuery:u},e)}))})})]})};var c=function(e,t){var n=(0,r.useBackend)(t).data.spellbook_contents,i=e.category,c=e.searchQuery,l=[];for(var d in n[i])l.push(d);return(0,o.createComponentVNode)(2,a.Collapsible,{title:i,children:(0,o.createComponentVNode)(2,a.Stack,{vertical:!0,children:[(0,o.createComponentVNode)(2,a.Divider),l.filter((function(e){return e.toLowerCase().includes(c.toLowerCase())})).map((function(e){return(0,o.createComponentVNode)(2,u,{spell:e,category:i},e)}))]})})},l=function(e,t,n){return e?"Spell purchased":t>n?"Not enough spell slots":1===t?"Purchase for "+t+" spell slot":"Purchase for "+t+" spell slots"},u=function(e,t){var n=(0,r.useBackend)(t),i=n.data,c=n.act,u=i.spellbook_contents,d=i.spell_slots,s=i.vr,p=e.spell,m=e.category,f=(0,r.useSharedState)(t,p+"p",!1),h=f[0],C=f[1],g=[];for(var N in u[m][p])g.push(u[m][p][N]);return(0,o.createComponentVNode)(2,a.Stack.Item,{children:(0,o.createComponentVNode)(2,a.Section,{children:[1===s&&0===g[3]&&(0,o.createComponentVNode)(2,a.Dimmer,{children:(0,o.createComponentVNode)(2,a.Box,{fontSize:1.5,backgroundColor:"#384e68",p:2,children:"Spell unavailable in VR"})}),(0,o.createComponentVNode)(2,a.Section,{title:p,buttons:(0,o.createComponentVNode)(2,a.Flex,{children:(0,o.createComponentVNode)(2,a.Button,{backgroundColor:"green",disabled:d<g[1]||h,onClick:function(){C(!0),c("buyspell",{spell:p})},children:l(h,g[1],d)})}),children:(0,o.createComponentVNode)(2,a.LabeledList,{children:[null!==g[2]&&(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Cooldown",children:g[2]/10+" seconds"}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Description",children:g[0]})]})}),(0,o.createComponentVNode)(2,a.Divider)]})})}},57361:function(e,t,n){"use strict";t.__esModule=!0,t.BeakerContents=void 0;var o=n(96323),r=n(26949);t.BeakerContents=function(e){var t=e.beakerLoaded,n=e.beakerContents;return(0,o.createComponentVNode)(2,r.Box,{children:[!t&&(0,o.createComponentVNode)(2,r.Box,{color:"label",children:"No beaker loaded."})||0===n.length&&(0,o.createComponentVNode)(2,r.Box,{color:"label",children:"Beaker is empty."}),n.map((function(e){return(0,o.createComponentVNode)(2,r.Box,{color:"label",children:[e.volume," units of ",e.name]},e.name)}))]})}},48916:function(e,t,n){"use strict";t.__esModule=!0,t.DataInputOptions=void 0;var o=n(96323),r=n(31246),a=n(26949);t.DataInputOptions=function(e){var t=e.options;return t&&Object.keys(t).length?Object.keys(t).map((function(e,n){return(0,o.createComponentVNode)(2,i,{type:t[e].type,name:e,description:t[e].description,value:t[e].value,tooltip:t[e].description,list:t[e].list,a:t[e].a,b:t[e].b},e)})):""};var i=function(e,t){var n=e.name,i=e.description,m=e.type,f=(0,r.useBackend)(t).act,h={Number:(0,o.normalizeProps)((0,o.createComponentVNode)(2,d,Object.assign({},e))),Color:(0,o.normalizeProps)((0,o.createComponentVNode)(2,u,Object.assign({},e))),Text:(0,o.normalizeProps)((0,o.createComponentVNode)(2,p,Object.assign({},e))),Ref:(0,o.normalizeProps)((0,o.createComponentVNode)(2,l,Object.assign({},e))),"Mob Reference":(0,o.normalizeProps)((0,o.createComponentVNode)(2,l,Object.assign({},e))),"Reference Picker":(0,o.normalizeProps)((0,o.createComponentVNode)(2,l,Object.assign({},e))),Boolean:(0,o.normalizeProps)((0,o.createComponentVNode)(2,s,Object.assign({},e))),"Children of Type":(0,o.normalizeProps)((0,o.createComponentVNode)(2,c,Object.assign({},e))),"List Var":(0,o.normalizeProps)((0,o.createComponentVNode)(2,c,Object.assign({},e))),List:(0,o.normalizeProps)((0,o.createComponentVNode)(2,c,Object.assign({},e)))};return(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:i,children:h[m]||f("unsupported_type",{name:n,type:m})})},c=function(e,t){var n=e.value,i=(e.tooltip,e.name),c=e.type,l=e.list,u=(0,r.useBackend)(t).act;return(0,o.createComponentVNode)(2,a.Section,{fill:!0,scrollable:!0,height:15,children:l.map((function(e,t){return(0,o.createComponentVNode)(2,a.Button,{fluid:!0,selected:e===n,color:"transparent",onClick:function(){return u("modify_value",{name:i,value:e,type:c})},children:e},t)}))})},l=function(e,t){var n=e.value,i=e.tooltip,c=e.name,l=e.type,u=(0,r.useBackend)(t).act;return(0,o.createComponentVNode)(2,a.Tooltip,{position:"bottom",content:i,children:(0,o.createComponentVNode)(2,a.Button,{icon:"location-crosshairs",onClick:function(){return u("modify_ref_value",{name:c,type:l})},children:n})})},u=function(e,t){var n=e.value,i=e.tooltip,c=e.name,l=e.type,u=(0,r.useBackend)(t).act;return(0,o.createComponentVNode)(2,a.Tooltip,{position:"bottom",content:i,children:[(0,o.createComponentVNode)(2,a.Button,{icon:"pencil-alt",onClick:function(){return u("modify_color_value",{name:c,type:l})}}),(0,o.createComponentVNode)(2,a.ColorBox,{color:n,mr:.5}),(0,o.createComponentVNode)(2,a.Input,{value:n,width:"90px",onInput:function(e,t){return u("modify_value",{name:c,value:t,type:l})}})]})},d=function(e,t){var n=e.value,i=e.tooltip,c=e.name,l=e.type,u=e.a,d=e.b,s=(0,r.useBackend)(t).act;return(0,o.createComponentVNode)(2,a.Tooltip,{position:"bottom",content:i,children:(0,o.createComponentVNode)(2,a.NumberInput,{value:n,minValue:0|u,maxValue:100|d,stepPixelSize:5,width:"39px",onDrag:function(e,t){return s("modify_value",{name:c,value:t,type:l})}})})},s=function(e,t){var n=e.value,i=e.tooltip,c=e.name,l=e.type,u=(0,r.useBackend)(t).act;return(0,o.createComponentVNode)(2,a.Tooltip,{position:"bottom",content:i,children:(0,o.createComponentVNode)(2,a.Button.Checkbox,{checked:n,onClick:function(){return u("modify_value",{name:c,value:!n,type:l})}})})},p=function(e,t){var n=e.value,i=e.tooltip,c=e.name,l=e.type,u=(0,r.useBackend)(t).act;return(0,o.createComponentVNode)(2,a.Tooltip,{position:"bottom",content:i,children:(0,o.createComponentVNode)(2,a.Input,{value:n,width:"200px",onInput:function(e,t){return u("modify_value",{name:c,value:t,type:l})}})})}},65751:function(e,t,n){"use strict";t.__esModule=!0,t.damageNum=t.HealthStat=void 0;var o=n(96323),r=n(1060),a=n(84200),i=n(54425),c=["type","children","className"];t.HealthStat=function(e){var t=e.type,n=e.children,l=e.className,u=function(e,t){if(null==e)return{};var n,o,r={},a=Object.keys(e);for(o=0;o<a.length;o++)n=a[o],t.indexOf(n)>=0||(r[n]=e[n]);return r}(e,c);return u.color=a.COLORS.damageType[t]&a.COLORS.damageType[t],(0,o.normalizeProps)((0,o.createComponentVNode)(2,i.Box,Object.assign({},u,{className:(0,r.classes)(["HealthStat",l,(0,i.computeBoxClassName)(u)]),color:a.COLORS.damageType[t],children:n})))};t.damageNum=function(e){return!e||e<=0?"0":e.toFixed(1)}},8095:function(e,t,n){"use strict";t.__esModule=!0,t.IDCard=void 0;var o=n(96323),r=n(26949);t.IDCard=function(e,t){if(e.card){var n=e.card,a=e.onEject;return(0,o.createComponentVNode)(2,r.Button,{icon:"eject",content:n.name+" ("+n.role+")",tooltip:"Clear scanned card",tooltipPosition:"bottom-end",onClick:a})}}},34277:function(e,t,n){"use strict";t.__esModule=!0,t.InputButtons=void 0;var o=n(96323),r=n(31246),a=n(26949);t.InputButtons=function(e,t){var n=(0,r.useBackend)(t).act,i=e.input,c=e.inputIsValid,l=(0,o.createComponentVNode)(2,a.Button,{color:"good",disabled:c&&!c.isValid,fluid:!1,onClick:function(){return n("submit",{entry:i})},pt:0,textAlign:"center",tooltip:(null==c?void 0:c.error)||null,width:6,children:"Submit"}),u=(0,o.createComponentVNode)(2,a.Button,{color:"bad",fluid:!1,onClick:function(){return n("cancel")},pt:0,textAlign:"center",width:6,children:"Cancel"}),d=l;return(0,o.createComponentVNode)(2,a.Stack,{children:[(0,o.createComponentVNode)(2,a.Stack.Item,{children:u}),(0,o.createComponentVNode)(2,a.Stack.Item,{grow:!0,children:c&&!c.isValid&&c.error&&(0,o.createComponentVNode)(2,a.Box,{color:"average",nowrap:!0,textAlign:"center",children:c.error})}),(0,o.createComponentVNode)(2,a.Stack.Item,{children:d})]})}},9720:function(e,t,n){"use strict";t.__esModule=!0,t.KeyHealthIndicators=void 0;var o=n(96323),r=n(26949),a=n(18331);t.KeyHealthIndicators=function(e){var t=e.mobData,n=t.occupied,a=t.patient_status,l=t.blood_pressure_rendered,u=t.blood_pressure_status,m=t.blood_volume,f=t.body_temp,h=t.optimal_temp,C=t.embedded_objects,g=t.rad_stage,N=t.rad_dose,v=t.brain_damage;return(0,o.createFragment)([(0,o.createComponentVNode)(2,r.Table,{children:[(0,o.createComponentVNode)(2,i,{occupied:n,patient_status:a,blood_pressure_rendered:l,blood_pressure_status:u,blood_volume:m}),(0,o.createComponentVNode)(2,c,{occupied:n,body_temp:f,optimal_temp:h,embedded_objects:C}),!!n&&(0,o.createComponentVNode)(2,d,{rad_stage:g,rad_dose:N}),(0,o.createComponentVNode)(2,s,{occupied:n,status:v})]}),!!n&&(0,o.createComponentVNode)(2,p,{embedded_objects:C})],0)};var i=function(e){var t=e.occupied,n=e.patient_status,a=e.blood_pressure_rendered,i=e.blood_pressure_status,c=e.blood_volume,l="grey";return t&&(l=c<=299?"red":c<=414?"yellow":c<=584?"green":c<=665?"yellow":"red"),(0,o.createComponentVNode)(2,r.Table.Row,{children:[(0,o.createComponentVNode)(2,r.Table.Cell,{header:!0,textAlign:"right",width:10,nowrap:!0,children:"Blood Pressure:"}),(0,o.createComponentVNode)(2,r.Table.Cell,{width:10,color:l,nowrap:!0,children:[!!t&&2!==n&&a+" ("+i+")",!t&&"--/--"]}),(0,o.createComponentVNode)(2,r.Table.Cell,{header:!0,textAlign:"right",width:10,nowrap:!0,children:"number"==typeof c&&(0,o.createFragment)([(0,o.createTextVNode)("Blood Volume:")],4)}),(0,o.createComponentVNode)(2,r.Table.Cell,{width:10,color:l,children:"number"==typeof c&&(0,o.createFragment)([t?c.toString():"--",(0,o.createTextVNode)(" units")],0)})]})},c=function(e){var t=e.occupied,n=e.body_temp,a=e.optimal_temp,i=e.embedded_objects;return(0,o.createComponentVNode)(2,r.Table.Row,{children:[(0,o.createComponentVNode)(2,l,{occupied:t,body_temp:n,optimal_temp:a}),(0,o.createComponentVNode)(2,u,{occupied:t,embedded_objects:i})]})},l=function(e){var t=e.occupied,n=e.body_temp,a=e.optimal_temp,i="grey";return t&&(i=n>=a+60?"red":n>=a+30?"yellow":n<=a-60?"purple":n<=a-30?"blue":"green"),(0,o.createFragment)([(0,o.createComponentVNode)(2,r.Table.Cell,{header:!0,textAlign:"right",children:"Temperature:"}),(0,o.createComponentVNode)(2,r.Table.Cell,{color:i,nowrap:!0,children:[!!t&&(n-273.15).toPrecision(4)+"\xb0C / "+(1.8*(n-273.15)+32).toPrecision(4)+"\xb0F",!t&&"--\xb0C / --\xb0F"]})],4)},u=function(e){var t=e.embedded_objects,n=e.occupied;return(0,o.createFragment)([(0,o.createComponentVNode)(2,r.Table.Cell,{header:!0,textAlign:"right",children:"Implants:"}),(0,o.createComponentVNode)(2,r.Table.Cell,{color:n?"white":"grey",children:[!!n&&t.implant_count+" "+(0,a.pluralize)("implant",t.implant_count),!n&&"--"]})],4)},d=function(e){var t=e.rad_stage,n=e.rad_dose,a=null,i=!1;if(t>0){switch(t){case 1:a="yellow";break;case 2:a="orange";break;case 3:a="orange",i=!0;break;case 4:case 5:case 6:a="red",i=!0}return(0,o.createComponentVNode)(2,r.Table.Row,{children:[(0,o.createComponentVNode)(2,r.Table.Cell,{header:!0,textAlign:"right",color:"yellow",width:10,children:"Radiation:"}),(0,o.createComponentVNode)(2,r.Table.Cell,{width:10,color:a,bold:i,children:["Stage ",t]}),(0,o.createComponentVNode)(2,r.Table.Cell,{header:!0,textAlign:"right",width:10,children:"Effective Dose:"}),(0,o.createComponentVNode)(2,r.Table.Cell,{width:10,nowrap:!0,children:[n.toPrecision(6)," Sv"]})]})}},s=function(e){var t=e.occupied,n=e.status;if(t&&"Okay"!==n.desc&&"Missing"!==n.desc)return(0,o.createComponentVNode)(2,r.Table.Row,{children:[(0,o.createComponentVNode)(2,r.Table.Cell,{header:!0,textAlign:"right",color:"pink",width:10,children:"Brain Damage:"}),(0,o.createComponentVNode)(2,r.Table.Cell,{width:10,color:n.color,children:n.desc}),(0,o.createComponentVNode)(2,r.Table.Cell,{header:!0,textAlign:"right",width:10,nowrap:!0,children:"Neuron Cohesion:"}),(0,o.createComponentVNode)(2,r.Table.Cell,{children:[((120-n.value)/120*100).toFixed(2),"%"]})]})},p=function(e){var t=e.embedded_objects;return(0,o.createComponentVNode)(2,r.Box,{textAlign:"center",children:[!!t.has_chest_object&&(0,o.createComponentVNode)(2,r.Box,{bold:!0,fontSize:1.2,color:"red",children:"Sizable foreign object located below sternum!"}),!!t.foreign_object_count&&(0,o.createComponentVNode)(2,r.Box,{bold:!0,fontSize:1.2,color:"red",children:["Foreign ",""+(0,a.pluralize)("object",t.foreign_object_count)," detected!"]})]})}},68397:function(){},36814:function(e,t,n){"use strict";t.__esModule=!0,t.ListSearch=void 0;var o=n(96323),r=n(1060),a=n(26949);t.ListSearch=function(e){var t=e.autoFocus,n=e.className,i=e.currentSearch,c=e.noResultsPlaceholder,l=e.onSearch,u=e.onSelect,d=e.options,s=e.searchPlaceholder,p=void 0===s?"Search...":s,m=e.selectedOption,f=void 0===m?null:m,h=(0,r.classes)(["list-search-interface",n]);return(0,o.createComponentVNode)(2,a.Stack,{className:h,vertical:!0,children:[(0,o.createComponentVNode)(2,a.Stack.Item,{children:(0,o.createComponentVNode)(2,a.Input,{autoFocus:t,fluid:!0,onInput:function(e,t){l(t)},placeholder:p,value:i})}),(0,o.createComponentVNode)(2,a.Stack.Item,{children:[0===d.length&&(0,o.createComponentVNode)(2,a.Placeholder,{mx:1,py:.5,children:c}),d.map((function(e){return(0,o.createVNode)(1,"div",(0,r.classes)(["list-search-interface__search-option","Button","Button--fluid","Button--color--transparent","Button--ellipsis",f&&e===f&&"Button--selected"]),e,0,{onClick:function(){return u(e)},title:e},e)}))]})]})}},55631:function(e,t,n){"use strict";t.__esModule=!0,t.Loader=void 0;var o=n(96323),r=n(26949),a=n(97622);t.Loader=function(e){var t=e.value;return(0,o.createVNode)(1,"div","AlertModal__Loader",(0,o.createComponentVNode)(2,r.Box,{className:"AlertModal__LoaderProgress",style:{width:100*(0,a.clamp01)(t)+"%"}}),2)}},90881:function(e,t){"use strict";var n;t.__esModule=!0,t.MobStatuses=t.MobStatus=void 0;var o={Conscious:0,Unconscious:1,Dead:2};t.MobStatus=o;var r=((n={})[o.Conscious]={name:"Conscious",color:"good",icon:"check"},n[o.Unconscious]={name:"Unconscious",color:"average",icon:"bed"},n[o.Dead]={name:"Dead",color:"bad",icon:"skull"},n);t.MobStatuses=r},41161:function(e,t,n){"use strict";t.__esModule=!0,t.PortableHoldingTank=t.PortableBasicInfo=void 0;var o=n(96323),r=n(26949),a=n(1033);t.PortableBasicInfo=function(e){var t=e.connected,n=e.pressure,i=e.maxPressure,c=e.children;return(0,o.createComponentVNode)(2,r.Section,{title:"Status",children:[(0,o.createComponentVNode)(2,r.LabeledList,{children:[(0,o.createComponentVNode)(2,r.LabeledList.Item,{label:"Pressure",children:(0,o.createComponentVNode)(2,r.RoundGauge,{size:1.75,value:n,minValue:0,maxValue:i,alertAfter:.7*i,ranges:{good:[0,.7*i],average:[.7*i,.85*i],bad:[.85*i,i]},format:a.formatPressure})}),(0,o.createComponentVNode)(2,r.LabeledList.Item,{label:"Port",color:t?"good":"average",children:t?"Connected":"Not Connected"})]}),c]})};t.PortableHoldingTank=function(e){var t=e.holding,n=e.onEjectTank,i=e.title;return(0,o.createComponentVNode)(2,r.Section,{title:i||"Holding Tank",minHeight:"115px",buttons:(0,o.createComponentVNode)(2,r.Button,{icon:"eject",content:"Eject",disabled:!t,onClick:function(){return n()}}),children:t?(0,o.createComponentVNode)(2,r.LabeledList,{children:[(0,o.createComponentVNode)(2,r.LabeledList.Item,{label:"Pressure",children:(0,o.createComponentVNode)(2,r.RoundGauge,{size:1.75,value:t.pressure,minValue:0,maxValue:t.maxPressure,alertAfter:.7*t.maxPressure,ranges:{good:[0,.7*t.maxPressure],average:[.7*t.maxPressure,.85*t.maxPressure],bad:[.85*t.maxPressure,t.maxPressure]},format:a.formatPressure})}),(0,o.createComponentVNode)(2,r.LabeledList.Item,{label:"Label",children:t.name})]}):(0,o.createComponentVNode)(2,r.Box,{color:"average",children:["No ",i?i.toLowerCase():"holding tank"]})})}},51418:function(e,t,n){"use strict";t.__esModule=!0,t.ReagentBar=t.ReagentList=t.ReagentGraph=t.NoContainer=t.MatterStateIconMap=t.MatterState=void 0;var o,r,a=n(96323),i=n(26949),c=n(48175),l=["className","height","sort"],u=["className","renderButtons","sort","showState","height"],d=["className","container"];function s(e,t){if(null==e)return{};var n,o,r={},a=Object.keys(e);for(o=0;o<a.length;o++)n=a[o],t.indexOf(n)>=0||(r[n]=e[n]);return r}t.MatterState=r,function(e){e[e.Solid=1]="Solid",e[e.Liquid=2]="Liquid",e[e.Gas=3]="Gas"}(r||(t.MatterState=r={}));var p=((o={})[r.Solid]={icon:"square",pr:.5},o[r.Liquid]={icon:"tint",pr:.9},o[r.Gas]={icon:"wind",pr:.5},o);t.MatterStateIconMap=p;var m={name:"No Beaker Inserted",contents:[],id:"inserted",maxVolume:100,totalVolume:0,finalColor:"#000000",temperature:c.freezeTemperature,fake:!0};t.NoContainer=m;var f=function(e){e.className;var t,n=e.height,o=e.sort,r=s(e,l),c=null!=(t=e.container)?t:m,u=c.maxVolume,d=c.totalVolume,p=c.finalColor,f=o?c.contents.slice().sort(o):c.contents||[];return r.height=n||"50px",(0,a.normalizeProps)((0,a.createComponentVNode)(2,i.Box,Object.assign({},r,{children:(0,a.createComponentVNode)(2,i.Flex,{height:"100%",direction:"column",children:[(0,a.createComponentVNode)(2,i.Flex.Item,{grow:!0,children:(0,a.createComponentVNode)(2,i.Flex,{height:"100%",children:[f.map((function(e){return(0,a.createComponentVNode)(2,i.Flex.Item,{grow:e.volume/u,children:(0,a.createComponentVNode)(2,i.Tooltip,{content:e.name+" ("+e.volume+"u)",position:"bottom",children:(0,a.createComponentVNode)(2,i.Box,{px:0,my:0,height:"100%",backgroundColor:"rgb("+e.colorR+", "+e.colorG+", "+e.colorB+")"})})},e.id)})),(0,a.createComponentVNode)(2,i.Flex.Item,{grow:(u-d)/u,children:(0,a.createComponentVNode)(2,i.Tooltip,{content:"Nothing"+(c.fake?"":" ("+(u-d)+"u)"),position:"bottom",children:(0,a.createComponentVNode)(2,i.NoticeBox,{px:0,my:0,height:"100%",backgroundColor:"rgba(0, 0, 0, 0)"})})})]})}),(0,a.createComponentVNode)(2,i.Flex.Item,{children:(0,a.createComponentVNode)(2,i.Tooltip,{content:(0,a.createComponentVNode)(2,i.Box,{children:[(0,a.createComponentVNode)(2,i.ColorBox,{color:p})," Current Mixture Color"]}),position:"bottom",children:(0,a.createComponentVNode)(2,i.Box,{height:"14px",backgroundColor:f.length?p:"rgba(0, 0, 0, 0.1)",textAlign:"center",children:c.fake||(0,a.createComponentVNode)(2,i.Box,{as:"span",backgroundColor:"rgba(0, 0, 0, 0.5)",px:1,children:d+"/"+u})})})})]})})))};t.ReagentGraph=f;var h=function(e){e.className;var t,n=e.renderButtons,o=e.sort,r=e.showState,c=e.height,l=s(e,u),d=null!=(t=e.container)?t:m,f=o?d.contents.slice().sort(o):d.contents||[];return l.height=c||6,(0,a.createComponentVNode)(2,i.Section,{scrollable:"auto"!==c,children:(0,a.normalizeProps)((0,a.createComponentVNode)(2,i.Box,Object.assign({},l,{children:f.length?f.map((function(e){return(0,a.createComponentVNode)(2,i.Flex,{mb:.2,align:"center",children:[(0,a.createComponentVNode)(2,i.Flex.Item,{grow:!0,children:[(0,a.createComponentVNode)(2,i.Icon,{pr:r?p[e.state].pr:.9,name:r?p[e.state].icon:"circle",style:{"text-shadow":"0 0 3px #000;"},color:"rgb("+e.colorR+", "+e.colorG+", "+e.colorB+")"}),"( "+e.volume+"u ) "+e.name]}),n&&(0,a.createComponentVNode)(2,i.Flex.Item,{nowrap:!0,children:n(e)})]},e.id)})):(0,a.createComponentVNode)(2,i.Box,{color:"label",children:[(0,a.createComponentVNode)(2,i.Icon,{pr:.9,name:"circle-o",style:{"text-shadow":"0 0 3px #000;"}}),"Empty"]})})))})};t.ReagentList=h;var C=function(e,t){return e!==t&&(!e||!t||e.volume!==t.volume||e.name!==t.name||e.id!==t.id||e.colorR!==t.colorR||e.colorG!==t.colorG||e.colorB!==t.colorB)},g=function(e,t){var n,o;if(e===t)return!1;if(null===e||null===t)return!0;if(e.totalVolume!==t.totalVolume||e.finalColor!==t.finalColor||e.maxVolume!==t.maxVolume)return!0;if((null==(n=e.contents)?void 0:n.length)!==(null==(o=t.contents)?void 0:o.length))return!0;for(var r in e)if(C(e.contents[r],t.contents[r]))return!0;return!1};f.defaultHooks={onComponentShouldUpdate:function(e,t){var n;for(n in e)if("container"!==n&&!(n in t))return!0;for(n in t)if("container"!==n&&e[n]!==t[n])return!0;return g(e.container,t.container)}},h.defaultHooks={onComponentShouldUpdate:function(e,t){var n;for(n in e)if("container"!==n&&"renderButtons"!==n&&!(n in t))return!0;for(n in t)if("container"!==n&&"renderButtons"!==n)if("renderButtonsDeps"!==n||"object"!=typeof e.renderButtonsDeps||"object"!=typeof t.renderButtonsDeps){if(e[n]!==t[n])return!0}else{var o=e.renderButtonsDeps,r=t.renderButtonsDeps;if(o.length!==r.length)return!0;var a=void 0;for(a in o)if(o[a]!==r[a])return!0}return g(e.container,t.container)}};t.ReagentBar=function(e){e.className;var t=e.container,n=s(e,d),o=t.maxVolume,r=t.totalVolume,c=t.finalColor;return(0,a.createComponentVNode)(2,i.Stack,{align:"center",pb:1,children:[(0,a.createComponentVNode)(2,i.Stack.Item,{children:(0,a.createComponentVNode)(2,i.Box,{textAlign:"right",width:"3em",children:r+"u"})}),(0,a.createComponentVNode)(2,i.Stack.Item,{grow:!0,children:(0,a.normalizeProps)((0,a.createComponentVNode)(2,i.ProgressBar,Object.assign({value:r,minValue:0,maxValue:o,color:c},n)))}),(0,a.createComponentVNode)(2,i.Stack.Item,{children:(0,a.createComponentVNode)(2,i.Box,{textAlign:"left",width:"3em",children:o+"u"})})]})}},75015:function(e,t,n){"use strict";t.__esModule=!0,t.ReleaseValve=void 0;var o=n(96323),r=n(26949);t.ReleaseValve=function(e){var t=e.valveIsOpen,n=e.releasePressure,a=void 0===n?0:n,i=e.minRelease,c=void 0===i?0:i,l=e.maxRelease,u=void 0===l?0:l,d=e.onToggleValve,s=e.onSetPressure;return(0,o.createComponentVNode)(2,r.LabeledList,{children:[(0,o.createComponentVNode)(2,r.LabeledList.Item,{label:"Release valve",children:(0,o.createComponentVNode)(2,r.Button,{content:t?"Open":"Closed",color:t?"average":"default",onClick:d})}),(0,o.createComponentVNode)(2,r.LabeledList.Item,{label:"Release pressure",children:[(0,o.createComponentVNode)(2,r.Button,{onClick:function(){return s(c)},content:"Min"}),(0,o.createComponentVNode)(2,r.NumberInput,{animated:!0,width:"7em",value:a,minValue:c,maxValue:u,onChange:function(e,t){return s(t)}}),(0,o.createComponentVNode)(2,r.Button,{onClick:function(){return s(u)},content:"Max"})]})]})}},72638:function(e,t,n){"use strict";t.__esModule=!0,t.VendorCashTable=void 0;var o=n(96323),r=n(26949);t.VendorCashTable=function(e){var t=e.cardname,n=e.onCardClick,a=e.bankMoney,i=e.cash,c=e.onCashClick;return(0,o.createComponentVNode)(2,r.Table,{"font-size":"9pt",direction:"row",style:{maxWidth:"100%","table-layout":"fixed"},children:[(0,o.createComponentVNode)(2,r.Table.Row,{children:(0,o.createComponentVNode)(2,r.Table.Cell,{bold:!0,children:[t&&(0,o.createComponentVNode)(2,r.Button,{icon:"id-card",mr:"100%",content:t||"",title:t||"",onClick:n,ellipsis:!0,maxWidth:"100%"}),t&&a>=0&&"Money on account: "+a+"\u2abd"]})}),(0,o.createComponentVNode)(2,r.Table.Row,{children:(0,o.createComponentVNode)(2,r.Table.Cell,{bold:!0,direction:"row",children:[i>0&&"Cash: "+i+"\u2abd",i>0&&i&&(0,o.createComponentVNode)(2,r.Button,{icon:"eject",ml:"1%",content:"eject",onClick:c})]})})]})}},818:function(e,t){"use strict";t.__esModule=!0,t.getStatsMax=t.processStatsData=void 0;t.processStatsData=function(e){if(0===(null!=e?e:[]).length)return null;for(var t=Object.keys(e[0]),n=t.reduce((function(e,t){return e[t]=[],e}),{}),o=0;o<e.length;o++)for(var r=e[o],a=0;a<t.length;a++){var i,c=t[a];n[c].push([o,null!=(i=r[c])?i:0])}return n};t.getStatsMax=function(e){var t=0;for(var n in e){var o=e[n][1];o>t&&(t=o)}return t}},96794:function(e,t){"use strict";t.__esModule=!0,t.randInt=void 0;t.randInt=function(e,t){return Math.floor(Math.random()*(t-e+1))+e}},18331:function(e,t,n){"use strict";t.__esModule=!0,t.glitch=t.spaceUnderscores=t.capitalize=t.pluralize=void 0;var o=n(96794);t.pluralize=function(e,t){return 1!==t?e+"s":e};t.capitalize=function(e){return e.replace(/(^\w{1})|(\s+\w{1})/g,(function(e){return e.toUpperCase()}))};t.spaceUnderscores=function(e){return e.replace(/[_]/g,(function(e){return" "}))};var r=["$","{","]","%","^","?",">","\xac","\u03c0",";","\u0438","\u046b","/","#","~"];t.glitch=function(e,t){for(var n=e.split(""),a=0;a<t;a++){n[(0,o.randInt)(0,n.length?n.length-1:0)]=r[(0,o.randInt)(0,r.length-1)]}return n.join("")}},48175:function(e,t,n){"use strict";t.__esModule=!0,t.getTemperatureChangeName=t.getTemperatureIcon=t.getTemperatureColor=t.neutralTemperature=t.freezeTemperature=t.TemperatureColors=void 0;var o=n(89295),r={cold:new o.Color(66,194,255),neutral:new o.Color(170,170,170),hot:new o.Color(255,120,0),veryhot:new o.Color(255,0,0)};t.TemperatureColors=r;t.freezeTemperature=273.15;var a=293.15;t.neutralTemperature=a;var i=493.15;t.getTemperatureColor=function(e,t){void 0===t&&(t=1e3);var n=r.cold,c=r.neutral,l=r.hot,u=r.veryhot;return e<i?o.Color.lookup((e-a)/400+.5,[n,c,l]).toString():o.Color.lookup((e-i)/(t-i),[l,u]).toString()};t.getTemperatureIcon=function(e){switch(Math.round(e/200)){case 0:return"thermometer-empty";case 1:return"thermometer-quarter";case 2:return"thermometer-half";case 3:return"thermometer-three-quarters";default:return"thermometer-full"}};t.getTemperatureChangeName=function(e,t){return e<t?"heating":e>t?"cooling":"neutral"}},38770:function(e,t,n){"use strict";t.__esModule=!0,t.space_heater=void 0;var o=n(96323),r=n(31246),a=n(26949),i=n(2381),c=n(48175),l=n(18331),u=function(e,t,n){return e?(0,l.glitch)(t,n):t},d=function(e,t){return void 0===t&&(t=""),e>400?"red":e<180?"blue":t},s=function(e,t,n){return e?t<180&&n?"snowflake":t>400&&n?"fire":"eject":"eject"};t.space_heater=function(e,t){var n=(0,r.useBackend)(t).data,a=n.emagged;n.on,n.set_temperature;return(0,o.createComponentVNode)(2,i.Window,{title:u(a,"Space HVAC",1),width:350,height:250,children:(0,o.createComponentVNode)(2,i.Window.Content,{children:[(0,o.createComponentVNode)(2,p),(0,o.createComponentVNode)(2,m)]})})};var p=function(e,t){var n=(0,r.useBackend)(t),i=n.data,c=n.act,l=i.emagged,p=i.on,m=i.cell,f=i.cell_name,h=i.cell_charge,C=i.set_temperature;return(0,o.createComponentVNode)(2,a.Section,{title:u(l,"Battery status",2),grow:0,children:(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:u(l,"Cell",1),verticalAlign:"middle",children:(0,o.createComponentVNode)(2,a.Button,{icon:s(l,C,p),color:null!==m?d(C,"green"):"blue",onClick:function(){return c(null!==m?"cellremove":"cellinstall")},bold:!0,children:null!==m?u(l,f,2):u(l,"Insert power cell",3)})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:u(l,"Cell Power",1),verticalAlign:"middle",children:(0,o.createComponentVNode)(2,a.ProgressBar,{grow:!0,color:null!==m?d(C,"green"):"red",ranges:{green:[.5,Infinity],yellow:[.1,.5],red:[-Infinity,.1]},value:Math.max(0,[null!==m?h/100:0])})})]})})},m=function(e,t){var n=(0,r.useBackend)(t),i=n.data,l=n.act,s=i.emagged,p=(i.on,i.min),m=i.max,f=i.set_temperature;return(0,o.createComponentVNode)(2,a.Section,{title:u(s,"Temperature regulator",3),children:[(0,o.createComponentVNode)(2,a.Stack,{justify:"center",align:"center",children:[(0,o.createComponentVNode)(2,a.Stack.Item,{children:(0,o.createComponentVNode)(2,a.Button,{icon:"fast-backward",color:d(f),tooltip:"Set minimum",disabled:f===p,onClick:function(){return l("set_temp",{inputted_temperature:p})}})}),(0,o.createComponentVNode)(2,a.Stack.Item,{children:(0,o.createComponentVNode)(2,a.Button,{icon:"backward",color:d(f),tooltip:s?"Decrease by 50":"Decrease by 5",disabled:f===p,onClick:function(){return l("set_temp",{temperature_adjust:s?-50:-5})}})}),(0,o.createComponentVNode)(2,a.Stack.Item,{children:(0,o.createComponentVNode)(2,a.Button,{icon:"equals",color:d(f),tooltip:"Room temperature",onClick:function(){return l("set_temp",{inputted_temperature:c.neutralTemperature})}})}),(0,o.createComponentVNode)(2,a.Stack.Item,{children:(0,o.createComponentVNode)(2,a.Button,{icon:"forward",color:d(f),tooltip:s?"Increase by 50":"Increase by 5",disabled:f===m,onClick:function(){return l("set_temp",{temperature_adjust:s?50:5})}})}),(0,o.createComponentVNode)(2,a.Stack.Item,{children:(0,o.createComponentVNode)(2,a.Button,{icon:"fast-forward",color:d(f),tooltip:"Set maximum",disabled:f===m,onClick:function(){return l("set_temp",{inputted_temperature:m})}})})]}),(0,o.createComponentVNode)(2,a.Divider),(0,o.createComponentVNode)(2,a.Slider,{value:f,format:function(e){return e+" K"},minValue:p,maxValue:m,step:s?5:1,stepPixelSize:s?3:1.8,ranges:{blue:[-Infinity,c.neutralTemperature-1],red:[c.neutralTemperature,Infinity]},onDrag:function(e,t){return l("set_temp",{inputted_temperature:t})}})]})}},30041:function(e,t,n){"use strict";t.__esModule=!0,t.Layout=void 0;var o=n(96323),r=n(1060),a=n(54425),i=n(99397),c=["className","theme","mode","children"],l=["className","scrollable","children"];function u(e,t){if(null==e)return{};var n,o,r={},a=Object.keys(e);for(o=0;o<a.length;o++)n=a[o],t.indexOf(n)>=0||(r[n]=e[n]);return r}var d=function(e){var t=e.className,n=e.theme,i=void 0===n?"nanotrasen":n,l=e.mode,d=void 0===l?"dark":l,s=e.children,p=u(e,c);return(0,o.createVNode)(1,"div",(0,r.classes)(["theme-"+i,"mode-"+d]),(0,o.normalizeProps)((0,o.createVNode)(1,"div",(0,r.classes)(["Layout",t,(0,a.computeBoxClassName)(p)]),s,0,Object.assign({},(0,a.computeBoxProps)(p)))),2)};t.Layout=d;var s=function(e){var t=e.className,n=e.scrollable,i=e.children,c=u(e,l);return(0,o.normalizeProps)((0,o.createVNode)(1,"div",(0,r.classes)(["Layout__content",n&&"Layout__content--scrollable",t,(0,a.computeBoxClassName)(c)]),i,0,Object.assign({},(0,a.computeBoxProps)(c))))};s.defaultHooks={onComponentDidMount:function(e){return(0,i.addScrollableNode)(e)},onComponentWillUnmount:function(e){return(0,i.removeScrollableNode)(e)}},d.Content=s},76738:function(e,t,n){"use strict";t.__esModule=!0,t.NtosWindow=void 0;var o=n(96323),r=n(57723),a=n(31246),i=n(26949),c=n(34881),l=function(e,t){var n=e.title,l=e.width,u=void 0===l?575:l,d=e.height,s=void 0===d?700:d,p=e.theme,m=void 0===p?"ntos":p,f=e.children,h=(0,a.useBackend)(t),C=h.act,g=h.data,N=g.PC_device_theme,v=g.PC_batteryicon,b=g.PC_showbatteryicon,V=g.PC_batterypercent,y=g.PC_ntneticon,x=g.PC_apclinkicon,k=g.PC_stationtime,S=g.PC_programheaders,I=void 0===S?[]:S,w=g.PC_showexitprogram;return(0,o.createComponentVNode)(2,c.Window,{title:n,width:u,height:s,theme:m,children:(0,o.createVNode)(1,"div","NtosWindow",[(0,o.createVNode)(1,"div","NtosWindow__header NtosHeader",[(0,o.createVNode)(1,"div","NtosHeader__left",[(0,o.createComponentVNode)(2,i.Box,{inline:!0,bold:!0,mr:2,children:k}),(0,o.createComponentVNode)(2,i.Box,{inline:!0,italic:!0,mr:2,opacity:.33,children:["ntos"===N&&"NtOS","syndicate"===N&&"Syndix"]})],4),(0,o.createVNode)(1,"div","NtosHeader__right",[I.map((function(e){return(0,o.createComponentVNode)(2,i.Box,{inline:!0,mr:1,children:(0,o.createVNode)(1,"img","NtosHeader__icon",null,1,{src:(0,r.resolveAsset)(e.icon)})},e.icon)})),(0,o.createComponentVNode)(2,i.Box,{inline:!0,children:y&&(0,o.createVNode)(1,"img","NtosHeader__icon",null,1,{src:(0,r.resolveAsset)(y)})}),!(!b||!v)&&(0,o.createComponentVNode)(2,i.Box,{inline:!0,mr:1,children:[(0,o.createVNode)(1,"img","NtosHeader__icon",null,1,{src:(0,r.resolveAsset)(v)}),V&&V]}),x&&(0,o.createComponentVNode)(2,i.Box,{inline:!0,mr:1,children:(0,o.createVNode)(1,"img","NtosHeader__icon",null,1,{src:(0,r.resolveAsset)(x)})}),!!w&&(0,o.createComponentVNode)(2,i.Button,{width:"26px",lineHeight:"22px",textAlign:"center",color:"transparent",icon:"window-minimize-o",tooltip:"Minimize",tooltipPosition:"bottom",onClick:function(){return C("PC_minimize")}}),!!w&&(0,o.createComponentVNode)(2,i.Button,{mr:"-3px",width:"26px",lineHeight:"22px",textAlign:"center",color:"transparent",icon:"window-close-o",tooltip:"Close",tooltipPosition:"bottom-start",onClick:function(){return C("PC_exit")}}),!w&&(0,o.createComponentVNode)(2,i.Button,{mr:"-3px",width:"26px",lineHeight:"22px",textAlign:"center",color:"transparent",icon:"power-off",tooltip:"Power off",tooltipPosition:"bottom-start",onClick:function(){return C("PC_shutdown")}})],0)],4),f],0)})};t.NtosWindow=l;l.Content=function(e){return(0,o.createVNode)(1,"div","NtosWindow__content",(0,o.normalizeProps)((0,o.createComponentVNode)(2,c.Window.Content,Object.assign({},e))),2)}},52243:function(e,t,n){"use strict";t.__esModule=!0,t.Pane=void 0;var o=n(96323),r=n(1060),a=n(31246),i=n(26949),c=n(27157),l=n(30041),u=["theme","children","className"],d=["className","fitted","children"];function s(e,t){if(null==e)return{};var n,o,r={},a=Object.keys(e);for(o=0;o<a.length;o++)n=a[o],t.indexOf(n)>=0||(r[n]=e[n]);return r}var p=function(e,t){var n=e.theme,d=e.children,p=e.className,m=s(e,u),f=(0,a.useBackend)(t).suspended,h=(0,c.useDebug)(t).debugLayout;return(0,o.normalizeProps)((0,o.createComponentVNode)(2,l.Layout,Object.assign({className:(0,r.classes)(["Window",p]),theme:n},m,{children:(0,o.createComponentVNode)(2,i.Box,{fillPositionedParent:!0,className:h&&"debug-layout",children:!f&&d})})))};t.Pane=p;p.Content=function(e){var t=e.className,n=e.fitted,a=e.children,i=s(e,d);return(0,o.normalizeProps)((0,o.createComponentVNode)(2,l.Layout.Content,Object.assign({className:(0,r.classes)(["Window__content",t])},i,{children:n&&a||(0,o.createVNode)(1,"div","Window__contentPadding",a,0)})))}},34881:function(e,t,n){"use strict";t.__esModule=!0,t.Window=void 0;var o=n(96323),r=n(1060),a=n(465),i=n(21118),c=n(31246),l=n(26949),u=n(84200),d=n(27157),s=(n(98069),n(41410)),p=n(79926),m=n(30041),f=["className","fitted","children"];function h(e,t){return h=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e},h(e,t)}var C=(0,p.createLogger)("Window"),g=[400,600],N=function(e){var t,n;function l(){return e.apply(this,arguments)||this}n=e,(t=l).prototype=Object.create(n.prototype),t.prototype.constructor=t,h(t,n);var p=l.prototype;return p.componentDidMount=function(){var e=(0,c.useBackend)(this.context).suspended,t=this.props.canClose,n=void 0===t||t;e||(Byond.winset(window.__windowId__,{"can-close":Boolean(n)}),C.log("mounting"),this.updateGeometry())},p.componentDidUpdate=function(e){(this.props.width!==e.width||this.props.height!==e.height)&&this.updateGeometry()},p.updateGeometry=function(){var e,t=(0,c.useBackend)(this.context).config,n=Object.assign({size:g},t.window);this.props.width&&this.props.height&&(n.size=[this.props.width,this.props.height]),null!=(e=t.window)&&e.key&&(0,s.setWindowKey)(t.window.key),(0,s.recallWindowGeometry)(n)},p.render=function(){var e,t,n=this.props,l=n.canClose,p=void 0===l||l,f=n.theme,h=n.title,g=n.children,N=(0,c.useBackend)(this.context),v=N.config,V=N.suspended,y=(0,d.useDebug)(this.context).debugLayout,x=(0,a.useDispatch)(this.context),k=null==(e=v.window)?void 0:e.fancy,S=null==(t=v.window)?void 0:t.mode,I=v.user&&(v.user.observer?v.status<u.UI_DISABLED:v.status<u.UI_INTERACTIVE);return(0,o.createComponentVNode)(2,m.Layout,{className:"Window",theme:f,mode:S,children:[(0,o.createComponentVNode)(2,b,{className:"Window__titleBar",title:!V&&(h||(0,i.decodeHtmlEntities)(v.title)),status:v.status,fancy:k,onDragStart:s.dragStartHandler,onClose:function(){C.log("pressed close"),x((0,c.backendSuspendStart)())},canClose:p}),(0,o.createVNode)(1,"div",(0,r.classes)(["Window__rest",y&&"debug-layout"]),[!V&&g,I&&(0,o.createVNode)(1,"div","Window__dimmer")],0),k&&(0,o.createFragment)([(0,o.createVNode)(1,"div","Window__resizeHandle__e",null,1,{onMousedown:(0,s.resizeStartHandler)(1,0)}),(0,o.createVNode)(1,"div","Window__resizeHandle__s",null,1,{onMousedown:(0,s.resizeStartHandler)(0,1)}),(0,o.createVNode)(1,"div","Window__resizeHandle__se",null,1,{onMousedown:(0,s.resizeStartHandler)(1,1)})],4)]})},l}(o.Component);t.Window=N;N.Content=function(e){var t=e.className,n=e.fitted,a=e.children,i=function(e,t){if(null==e)return{};var n,o,r={},a=Object.keys(e);for(o=0;o<a.length;o++)n=a[o],t.indexOf(n)>=0||(r[n]=e[n]);return r}(e,f);return(0,o.normalizeProps)((0,o.createComponentVNode)(2,m.Layout.Content,Object.assign({className:(0,r.classes)(["Window__content",t])},i,{children:n&&a||(0,o.createVNode)(1,"div","Window__contentPadding",a,0)})))};var v=function(e){switch(e){case u.UI_INTERACTIVE:return"good";case u.UI_UPDATE:return"average";case u.UI_DISABLED:default:return"bad"}},b=function(e,t){var n=e.className,c=e.title,u=e.status,d=e.canClose,s=e.fancy,p=e.onDragStart,m=e.onClose;(0,a.useDispatch)(t);return(0,o.createVNode)(1,"div",(0,r.classes)(["TitleBar",n]),[u===undefined&&(0,o.createComponentVNode)(2,l.Icon,{className:"TitleBar__statusIcon",name:"tools",opacity:.5})||(0,o.createComponentVNode)(2,l.Icon,{className:"TitleBar__statusIcon",color:v(u),name:"eye"}),(0,o.createVNode)(1,"div","TitleBar__title","string"==typeof c&&c===c.toLowerCase()&&(0,i.toTitleCase)(c)||c,0),(0,o.createVNode)(1,"div","TitleBar__dragZone",null,1,{onMousedown:function(e){return s&&p(e)}}),!1,Boolean(s&&d)&&(0,o.createVNode)(1,"div","TitleBar__close TitleBar__clickable",Byond.IS_LTE_IE8?"x":"\xd7",0,{onclick:m})],0)}},2381:function(e,t,n){"use strict";t.__esModule=!0,t.Window=t.Pane=t.NtosWindow=t.Layout=void 0;var o=n(30041);t.Layout=o.Layout;var r=n(76738);t.NtosWindow=r.NtosWindow;var a=n(52243);t.Pane=a.Pane;var i=n(34881);t.Window=i.Window},13952:function(e,t){"use strict";t.__esModule=!0,t.captureExternalLinks=void 0;t.captureExternalLinks=function(){document.addEventListener("click",(function(e){for(var t=e.target;;){if(!t||t===document.body)return;if("a"===String(t.tagName).toLowerCase())break;t=t.parentElement}var n=t.getAttribute("href")||"";if(!("?"===n.charAt(0)||n.startsWith("byond://"))){e.preventDefault();var o=n;o.toLowerCase().startsWith("www")&&(o="https://"+o),Byond.topic({tgui:1,window_id:window.__windowId__,type:"openLink",url:o})}}))}},79926:function(e,t,n){"use strict";t.__esModule=!0,t.logger=t.createLogger=void 0;n(82252);var o=0,r=1,a=2,i=3,c=4,l=function(e,t){for(var n=arguments.length,o=new Array(n>2?n-2:0),r=2;r<n;r++)o[r-2]=arguments[r];if(e>=a){var i=[t].concat(o).map((function(e){return"string"==typeof e?e:e instanceof Error?e.stack||String(e):JSON.stringify(e)})).filter((function(e){return e})).join(" ")+"\nUser Agent: "+navigator.userAgent;Byond.topic({tgui:1,window_id:window.__windowId__,type:"log",ns:t,message:i})}},u=function(e){return{debug:function(){for(var t=arguments.length,n=new Array(t),r=0;r<t;r++)n[r]=arguments[r];return l.apply(void 0,[o,e].concat(n))},log:function(){for(var t=arguments.length,n=new Array(t),o=0;o<t;o++)n[o]=arguments[o];return l.apply(void 0,[r,e].concat(n))},info:function(){for(var t=arguments.length,n=new Array(t),o=0;o<t;o++)n[o]=arguments[o];return l.apply(void 0,[a,e].concat(n))},warn:function(){for(var t=arguments.length,n=new Array(t),o=0;o<t;o++)n[o]=arguments[o];return l.apply(void 0,[i,e].concat(n))},error:function(){for(var t=arguments.length,n=new Array(t),o=0;o<t;o++)n[o]=arguments[o];return l.apply(void 0,[c,e].concat(n))}}};t.createLogger=u;var d=u();t.logger=d},77960:function(e,t,n){"use strict";t.__esModule=!0,t.createRenderer=t.suspendRenderer=t.resumeRenderer=void 0;var o,r=n(28440),a=n(96323),i=((0,n(79926).createLogger)("renderer"),!0),c=!1;t.resumeRenderer=function(){i=i||"resumed",c=!1};t.suspendRenderer=function(){c=!0};t.createRenderer=function(e){return function(){r.perf.mark("render/start"),o||(o=document.getElementById("react-root")),(0,a.render)(e(),o),r.perf.mark("render/finish"),c||i&&(i=!1)}}},91199:function(e,t,n){"use strict";t.__esModule=!0,t.getRoutedComponent=void 0;var o=n(96323),r=n(31246),a=(n(12184),n(2381)),i=n(8156),c=function(e,t){return function(){return(0,o.createComponentVNode)(2,a.Window,{children:(0,o.createComponentVNode)(2,a.Window.Content,{scrollable:!0,children:["notFound"===e&&(0,o.createVNode)(1,"div",null,[(0,o.createTextVNode)("Interface "),(0,o.createVNode)(1,"b",null,t,0),(0,o.createTextVNode)(" was not found.")],4),"missingExport"===e&&(0,o.createVNode)(1,"div",null,[(0,o.createTextVNode)("Interface "),(0,o.createVNode)(1,"b",null,t,0),(0,o.createTextVNode)(" is missing an export.")],4)]})})}},l=function(){return(0,o.createComponentVNode)(2,a.Window,{children:(0,o.createComponentVNode)(2,a.Window.Content,{scrollable:!0})})};t.getRoutedComponent=function(e){var t=e.getState(),n=(0,r.selectBackend)(t),o=n.suspended,a=n.config;if(o)return l;for(var u,d=null==a?void 0:a["interface"],s=[function(e){return"./"+e+".tsx"},function(e){return"./"+e+".js"},function(e){return"./"+e+"/index.tsx"},function(e){return"./"+e+"/index.js"}];!u&&s.length>0;){var p=s.shift()(d);try{u=i(p)}catch(f){if("MODULE_NOT_FOUND"!==f.code)throw f}}if(!u)return c("notFound",d);var m=u[d];return m||c("missingExport",d)}},81890:function(e,t,n){"use strict";t.__esModule=!0,t.sanitizeText=void 0;var o,r=(o=n(42950))&&o.__esModule?o:{"default":o};var a=["b","br","center","code","div","font","hr","i","li","menu","ol","p","pre","span","table","td","th","tr","u","ul"],i=["class","style"];t.sanitizeText=function(e,t,n){return void 0===t&&(t=a),void 0===n&&(n=i),r["default"].sanitize(e,{ALLOWED_TAGS:t,FORBID_ATTR:n})}},18749:function(e,t,n){"use strict";t.__esModule=!0,t.StoreProvider=t.configureStore=void 0;var o=n(32416),r=n(465),a=n(96323),i=n(57723),c=n(31246),l=n(27157);function u(e,t){return u=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e},u(e,t)}var d=(0,n(79926).createLogger)("store");t.configureStore=function(e){var t,n;void 0===e&&(e={});var a=(0,o.flow)([(0,r.combineReducers)({debug:l.debugReducer,backend:c.backendReducer}),e.reducer]),u=[].concat((null==(t=e.middleware)?void 0:t.pre)||[],[i.assetMiddleware,c.backendMiddleware],(null==(n=e.middleware)?void 0:n.post)||[]);var d=r.applyMiddleware.apply(void 0,u),p=(0,r.createStore)(a,d);return window.__store__=p,window.__augmentStack__=s(p),p};var s=function(e){return function(t,n){var o,r;n?"object"!=typeof n||n.stack||(n.stack=t):(n=new Error(t.split("\n")[0])).stack=t,d.log("FatalError:",n);var a=e.getState(),i=null==a||null==(o=a.backend)?void 0:o.config,c=t;return c+="\nUser Agent: "+navigator.userAgent,c+="\nState: "+JSON.stringify({ckey:null==i||null==(r=i.client)?void 0:r.ckey,"interface":null==i?void 0:i["interface"],window:null==i?void 0:i.window})}},p=function(e){var t,n;function o(){return e.apply(this,arguments)||this}n=e,(t=o).prototype=Object.create(n.prototype),t.prototype.constructor=t,u(t,n);var r=o.prototype;return r.getChildContext=function(){return{store:this.props.store}},r.render=function(){return this.props.children},o}(a.Component);t.StoreProvider=p},88428:function(e,t,n){"use strict";t.__esModule=!0,t.meta=void 0;var o=n(96323),r=n(26949),a={title:"Blink",render:function(){return(0,o.createComponentVNode)(2,i)}};t.meta=a;var i=function(e,t){return(0,o.createComponentVNode)(2,r.Section,{children:(0,o.createComponentVNode)(2,r.Blink,{children:"Blink"})})}},9184:function(e,t,n){"use strict";t.__esModule=!0,t.meta=void 0;var o=n(96323),r=n(26949),a=n(87758),i={title:"BlockQuote",render:function(){return(0,o.createComponentVNode)(2,c)}};t.meta=i;var c=function(e,t){return(0,o.createComponentVNode)(2,r.Section,{children:(0,o.createComponentVNode)(2,r.BlockQuote,{children:(0,o.createComponentVNode)(2,a.BoxWithSampleText)})})}},36801:function(e,t,n){"use strict";t.__esModule=!0,t.meta=void 0;var o=n(96323),r=n(26949),a={title:"Box",render:function(){return(0,o.createComponentVNode)(2,i)}};t.meta=a;var i=function(e,t){return(0,o.createComponentVNode)(2,r.Section,{children:[(0,o.createComponentVNode)(2,r.Box,{bold:!0,children:"bold"}),(0,o.createComponentVNode)(2,r.Box,{italic:!0,children:"italic"}),(0,o.createComponentVNode)(2,r.Box,{opacity:.5,children:"opacity 0.5"}),(0,o.createComponentVNode)(2,r.Box,{opacity:.25,children:"opacity 0.25"}),(0,o.createComponentVNode)(2,r.Box,{m:2,children:"m: 2"}),(0,o.createComponentVNode)(2,r.Box,{textAlign:"left",children:"left"}),(0,o.createComponentVNode)(2,r.Box,{textAlign:"center",children:"center"}),(0,o.createComponentVNode)(2,r.Box,{textAlign:"right",children:"right"})]})}},3750:function(e,t,n){"use strict";t.__esModule=!0,t.meta=void 0;var o=n(96323),r=n(26949),a={title:"Button",render:function(){return(0,o.createComponentVNode)(2,l)}};t.meta=a;var i=["red","orange","yellow","olive","green","teal","blue","violet","purple","pink","brown","grey"],c=["good","average","bad","black","white"],l=function(e,t){return(0,o.createComponentVNode)(2,r.Section,{children:[(0,o.createComponentVNode)(2,r.Box,{mb:1,children:[(0,o.createComponentVNode)(2,r.Button,{content:"Simple"}),(0,o.createComponentVNode)(2,r.Button,{selected:!0,content:"Selected"}),(0,o.createComponentVNode)(2,r.Button,{altSelected:!0,content:"Alt Selected"}),(0,o.createComponentVNode)(2,r.Button,{disabled:!0,content:"Disabled"}),(0,o.createComponentVNode)(2,r.Button,{color:"transparent",content:"Transparent"}),(0,o.createComponentVNode)(2,r.Button,{icon:"cog",content:"Icon"}),(0,o.createComponentVNode)(2,r.Button,{icon:"power-off"}),(0,o.createComponentVNode)(2,r.Button,{fluid:!0,content:"Fluid"}),(0,o.createComponentVNode)(2,r.Button,{my:1,lineHeight:2,minWidth:15,textAlign:"center",content:"With Box props"})]}),(0,o.createComponentVNode)(2,r.Box,{mb:1,children:[c.map((function(e){return(0,o.createComponentVNode)(2,r.Button,{color:e,content:e},e)})),(0,o.createVNode)(1,"br"),i.map((function(e){return(0,o.createComponentVNode)(2,r.Button,{color:e,content:e},e)})),(0,o.createVNode)(1,"br"),i.map((function(e){return(0,o.createComponentVNode)(2,r.Box,{inline:!0,mx:"7px",color:e,children:e},e)}))]})]})}},68696:function(e,t,n){"use strict";t.__esModule=!0,t.meta=void 0;var o=n(96323),r=n(31246),a=n(26949),i=n(79926),c={title:"ByondUi",render:function(){return(0,o.createComponentVNode)(2,l)}};t.meta=c;var l=function(e,t){var n=(0,r.useLocalState)(t,"byondUiEvalCode","Byond.winset('"+window.__windowId__+"', {\n 'is-visible': true,\n})"),c=n[0],l=n[1];return(0,o.createFragment)([(0,o.createComponentVNode)(2,a.Section,{title:"Button",children:(0,o.createComponentVNode)(2,a.ByondUi,{params:{type:"button",text:"Button"}})}),(0,o.createComponentVNode)(2,a.Section,{title:"Make BYOND calls",buttons:(0,o.createComponentVNode)(2,a.Button,{icon:"chevron-right",onClick:function(){return setImmediate((function(){try{var e=new Function("return ("+c+")")();e&&e.then?(i.logger.log("Promise"),e.then(i.logger.log)):i.logger.log(e)}catch(t){i.logger.log(t)}}))},children:"Evaluate"}),children:(0,o.createComponentVNode)(2,a.Box,{as:"textarea",width:"100%",height:"10em",onChange:function(e){return l(e.target.value)},children:c})})],4)}},88835:function(e,t,n){"use strict";t.__esModule=!0,t.meta=void 0;var o=n(96323),r=n(26949),a=n(87758),i={title:"Collapsible",render:function(){return(0,o.createComponentVNode)(2,c)}};t.meta=i;var c=function(e,t){return(0,o.createComponentVNode)(2,r.Section,{children:(0,o.createComponentVNode)(2,r.Collapsible,{title:"Collapsible Demo",buttons:(0,o.createComponentVNode)(2,r.Button,{icon:"cog"}),children:(0,o.createComponentVNode)(2,a.BoxWithSampleText)})})}},34458:function(e,t,n){"use strict";t.__esModule=!0,t.meta=void 0;var o=n(96323),r=n(31246),a=n(26949),i={title:"Flex & Sections",render:function(){return(0,o.createComponentVNode)(2,c)}};t.meta=i;var c=function(e,t){var n=(0,r.useLocalState)(t,"fs_grow",1),i=n[0],c=n[1],l=(0,r.useLocalState)(t,"fs_direction","column"),u=l[0],d=l[1],s=(0,r.useLocalState)(t,"fs_fill",!0),p=s[0],m=s[1],f=(0,r.useLocalState)(t,"fs_title",!0),h=f[0],C=f[1];return(0,o.createComponentVNode)(2,a.Flex,{height:"100%",direction:"column",children:[(0,o.createComponentVNode)(2,a.Flex.Item,{mb:1,children:(0,o.createComponentVNode)(2,a.Section,{children:[(0,o.createComponentVNode)(2,a.Button,{fluid:!0,onClick:function(){return d("column"===u?"row":"column")},children:'Flex direction="'+u+'"'}),(0,o.createComponentVNode)(2,a.Button,{fluid:!0,onClick:function(){return c(Number(!i))},children:"Flex.Item grow={"+i+"}"}),(0,o.createComponentVNode)(2,a.Button,{fluid:!0,onClick:function(){return m(!p)},children:"Section fill={"+String(p)+"}"}),(0,o.createComponentVNode)(2,a.Button,{fluid:!0,selected:h,onClick:function(){return C(!h)},children:"Section title"})]})}),(0,o.createComponentVNode)(2,a.Flex.Item,{grow:1,children:(0,o.createComponentVNode)(2,a.Flex,{height:"100%",direction:u,children:[(0,o.createComponentVNode)(2,a.Flex.Item,{mr:"row"===u&&1,mb:"column"===u&&1,grow:i,children:(0,o.createComponentVNode)(2,a.Section,{title:h&&"Section 1",fill:p,children:"Content"})}),(0,o.createComponentVNode)(2,a.Flex.Item,{grow:i,children:(0,o.createComponentVNode)(2,a.Section,{title:h&&"Section 2",fill:p,children:"Content"})})]})})]})}},23148:function(e,t,n){"use strict";t.__esModule=!0,t.meta=void 0;var o=n(96323),r=n(31246),a=n(26949),i={title:"Input",render:function(){return(0,o.createComponentVNode)(2,c)}};t.meta=i;var c=function(e,t){var n=(0,r.useLocalState)(t,"number",0),i=n[0],c=n[1],l=(0,r.useLocalState)(t,"text","Sample text"),u=l[0],d=l[1];return(0,o.createComponentVNode)(2,a.Section,{children:(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Input (onChange)",children:(0,o.createComponentVNode)(2,a.Input,{value:u,onChange:function(e,t){return d(t)}})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Input (onInput)",children:(0,o.createComponentVNode)(2,a.Input,{value:u,onInput:function(e,t){return d(t)}})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"NumberInput (onChange)",children:(0,o.createComponentVNode)(2,a.NumberInput,{animated:!0,width:"40px",step:1,stepPixelSize:5,value:i,minValue:-100,maxValue:100,onChange:function(e,t){return c(t)}})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"NumberInput (onDrag)",children:(0,o.createComponentVNode)(2,a.NumberInput,{animated:!0,width:"40px",step:1,stepPixelSize:5,value:i,minValue:-100,maxValue:100,onDrag:function(e,t){return c(t)}})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Slider (onDrag)",children:(0,o.createComponentVNode)(2,a.Slider,{step:1,stepPixelSize:5,value:i,minValue:-100,maxValue:100,onDrag:function(e,t){return c(t)}})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Knob (onDrag)",children:[(0,o.createComponentVNode)(2,a.Knob,{inline:!0,size:1,step:1,stepPixelSize:2,value:i,minValue:-100,maxValue:100,onDrag:function(e,t){return c(t)}}),(0,o.createComponentVNode)(2,a.Knob,{ml:1,inline:!0,bipolar:!0,size:1,step:1,stepPixelSize:2,value:i,minValue:-100,maxValue:100,onDrag:function(e,t){return c(t)}})]}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Rotating Icon",children:(0,o.createComponentVNode)(2,a.Box,{inline:!0,position:"relative",children:(0,o.createComponentVNode)(2,a.DraggableControl,{value:i,minValue:-100,maxValue:100,dragMatrix:[0,-1],step:1,stepPixelSize:5,onDrag:function(e,t){return c(t)},children:function(e){return(0,o.createComponentVNode)(2,a.Box,{onMouseDown:e.handleDragStart,children:[(0,o.createComponentVNode)(2,a.Icon,{size:4,color:"yellow",name:"times",rotation:4*e.displayValue}),e.inputElement]})}})})})]})})}},23613:function(e,t,n){"use strict";t.__esModule=!0,t.meta=void 0;var o=n(96323),r=n(26949),a={title:"Popper",render:function(){return(0,o.createComponentVNode)(2,i)}};t.meta=a;var i=function(){return(0,o.createFragment)([(0,o.createComponentVNode)(2,r.Popper,{popperContent:(0,o.createComponentVNode)(2,r.Box,{style:{background:"white",border:"2px solid blue"},children:"Loogatme!"}),options:{placement:"bottom"},children:(0,o.createComponentVNode)(2,r.Box,{style:{border:"5px solid white",height:"300px",width:"200px"}})}),(0,o.createComponentVNode)(2,r.Popper,{popperContent:(0,o.createComponentVNode)(2,r.Box,{style:{background:"white",border:"2px solid blue"},children:"I am on the right!"}),options:{placement:"right"},children:(0,o.createComponentVNode)(2,r.Box,{style:{border:"5px solid white",height:"500px",width:"100px"}})})],4)}},9093:function(e,t,n){"use strict";t.__esModule=!0,t.meta=void 0;var o=n(96323),r=n(31246),a=n(26949),i={title:"ProgressBar",render:function(){return(0,o.createComponentVNode)(2,c)}};t.meta=i;var c=function(e,t){var n=(0,r.useLocalState)(t,"progress",.5),i=n[0],c=n[1],l=(0,r.useLocalState)(t,"color",""),u=l[0],d=l[1],s=u?{color:u}:{ranges:{good:[.5,Infinity],bad:[-Infinity,.1],average:[0,.5]}};return(0,o.createComponentVNode)(2,a.Section,{children:[(0,o.normalizeProps)((0,o.createComponentVNode)(2,a.ProgressBar,Object.assign({},s,{minValue:-1,maxValue:1,value:i,children:["Value: ",Number(i).toFixed(1)]}))),(0,o.createComponentVNode)(2,a.Box,{mt:1,children:(0,o.createComponentVNode)(2,a.LabeledList,{mt:"2em",children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Adjust value",children:[(0,o.createComponentVNode)(2,a.Button,{content:"-0.1",onClick:function(){return c(i-.1)}}),(0,o.createComponentVNode)(2,a.Button,{content:"+0.1",onClick:function(){return c(i+.1)}})]}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Override color",children:(0,o.createComponentVNode)(2,a.Input,{value:u,onChange:function(e,t){return d(t)}})})]})})]})}},86482:function(e,t,n){"use strict";t.__esModule=!0,t.meta=void 0;var o=n(96323),r=n(26949),a={title:"Stack",render:function(){return(0,o.createComponentVNode)(2,l)}};t.meta=a;var i=function(){return(0,o.createComponentVNode)(2,r.Box,{inline:!0,width:1,height:1,children:"A"})},c=function(){return(0,o.createFragment)([(0,o.createComponentVNode)(2,r.Stack.Item,{children:(0,o.createComponentVNode)(2,i)}),(0,o.createComponentVNode)(2,r.Stack.Divider),(0,o.createComponentVNode)(2,r.Stack.Item,{children:(0,o.createComponentVNode)(2,i)})],4)},l=function(e,t){return(0,o.createComponentVNode)(2,r.Section,{fill:!0,children:(0,o.createComponentVNode)(2,r.Stack,{fill:!0,className:"debug-layout",children:[(0,o.createComponentVNode)(2,c),(0,o.createComponentVNode)(2,r.Stack.Item,{grow:1,children:(0,o.createComponentVNode)(2,r.Stack,{fill:!0,zebra:!0,vertical:!0,children:[(0,o.createComponentVNode)(2,c),(0,o.createComponentVNode)(2,r.Stack.Item,{children:(0,o.createComponentVNode)(2,r.Stack,{fill:!0,children:[(0,o.createComponentVNode)(2,c),(0,o.createComponentVNode)(2,r.Stack.Item,{grow:1}),(0,o.createComponentVNode)(2,c),(0,o.createComponentVNode)(2,c)]})}),(0,o.createComponentVNode)(2,r.Stack.Item,{grow:1}),(0,o.createComponentVNode)(2,c)]})})]})})}},63900:function(e,t,n){"use strict";t.__esModule=!0,t.meta=void 0;var o=n(96323),r=n(7151),a=n(26949),i=n(1033),c={title:"Storage",render:function(){return(0,o.createComponentVNode)(2,l)}};t.meta=c;var l=function(e,t){return window.localStorage?(0,o.createComponentVNode)(2,a.Section,{title:"Local Storage",buttons:(0,o.createComponentVNode)(2,a.Button,{icon:"recycle",onClick:function(){localStorage.clear(),r.storage.clear()},children:"Clear"}),children:(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Keys in use",children:localStorage.length}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Remaining space",children:(0,i.formatSiUnit)(localStorage.remainingSpace,0,"B")})]})}):(0,o.createComponentVNode)(2,a.NoticeBox,{children:"Local storage is not available."})}},88209:function(e,t,n){"use strict";t.__esModule=!0,t.meta=void 0;var o=n(96323),r=n(31246),a=n(26949),i={title:"Tabs",render:function(){return(0,o.createComponentVNode)(2,l)}};t.meta=i;var c=["Tab #1","Tab #2","Tab #3","Tab #4"],l=function(e,t){var n=(0,r.useLocalState)(t,"tabProps",{}),i=n[0],c=n[1];return(0,o.createFragment)([(0,o.createComponentVNode)(2,a.Section,{children:[(0,o.createComponentVNode)(2,a.Button.Checkbox,{inline:!0,content:"vertical",checked:i.vertical,onClick:function(){return c(Object.assign({},i,{vertical:!i.vertical}))}}),(0,o.createComponentVNode)(2,a.Button.Checkbox,{inline:!0,content:"leftSlot",checked:i.leftSlot,onClick:function(){return c(Object.assign({},i,{leftSlot:!i.leftSlot}))}}),(0,o.createComponentVNode)(2,a.Button.Checkbox,{inline:!0,content:"rightSlot",checked:i.rightSlot,onClick:function(){return c(Object.assign({},i,{rightSlot:!i.rightSlot}))}}),(0,o.createComponentVNode)(2,a.Button.Checkbox,{inline:!0,content:"icon",checked:i.icon,onClick:function(){return c(Object.assign({},i,{icon:!i.icon}))}}),(0,o.createComponentVNode)(2,a.Button.Checkbox,{inline:!0,content:"fluid",checked:i.fluid,onClick:function(){return c(Object.assign({},i,{fluid:!i.fluid}))}}),(0,o.createComponentVNode)(2,a.Button.Checkbox,{inline:!0,content:"centered",checked:i.centered,onClick:function(){return c(Object.assign({},i,{centered:!i.centered}))}})]}),(0,o.createComponentVNode)(2,a.Section,{fitted:!0,children:(0,o.createComponentVNode)(2,u)}),(0,o.createComponentVNode)(2,a.Section,{title:"Normal section",children:[(0,o.createComponentVNode)(2,u),"Some text"]}),(0,o.createComponentVNode)(2,a.Section,{children:"Section-less tabs appear the same as tabs in a fitted section:"}),(0,o.createComponentVNode)(2,u)],4)},u=function(e,t){var n=(0,r.useLocalState)(t,"tabIndex",0),i=n[0],l=n[1],u=(0,r.useLocalState)(t,"tabProps",{})[0];return(0,o.createComponentVNode)(2,a.Tabs,{vertical:u.vertical,fluid:u.fluid,textAlign:u.centered&&"center",children:c.map((function(e,t){return(0,o.createComponentVNode)(2,a.Tabs.Tab,{selected:t===i,icon:u.icon&&"info-circle",leftSlot:u.leftSlot&&(0,o.createComponentVNode)(2,a.Button,{circular:!0,compact:!0,color:"transparent",icon:"times"}),rightSlot:u.rightSlot&&(0,o.createComponentVNode)(2,a.Button,{circular:!0,compact:!0,color:"transparent",icon:"times"}),onClick:function(){return l(t)},children:e},t)}))})}},38200:function(e,t,n){"use strict";t.__esModule=!0,t.meta=void 0;var o=n(96323),r=n(31246),a=n(26949),i={title:"Themes",render:function(){return(0,o.createComponentVNode)(2,c)}};t.meta=i;var c=function(e,t){var n=(0,r.useLocalState)(t,"kitchenSinkTheme"),i=n[0],c=n[1];return(0,o.createComponentVNode)(2,a.Section,{children:(0,o.createComponentVNode)(2,a.LabeledList,{children:(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Use theme",children:(0,o.createComponentVNode)(2,a.Input,{placeholder:"theme_name",value:i,onInput:function(e,t){return c(t)}})})})})}},48181:function(e,t,n){"use strict";t.__esModule=!0,t.meta=void 0;var o=n(96323),r=n(26949),a={title:"Tooltip",render:function(){return(0,o.createComponentVNode)(2,i)}};t.meta=a;var i=function(){return(0,o.createComponentVNode)(2,r.Section,{children:[(0,o.createComponentVNode)(2,r.Box,{children:[(0,o.createComponentVNode)(2,r.Tooltip,{content:"Tooltip text.",children:(0,o.createComponentVNode)(2,r.Box,{inline:!0,position:"relative",mr:1,children:"Box (hover me)."})}),(0,o.createComponentVNode)(2,r.Button,{tooltip:"Tooltip text.",content:"Button"})]}),(0,o.createComponentVNode)(2,r.Box,{mt:1,children:["top","left","right","bottom","bottom-start","bottom-end"].map((function(e){return(0,o.createComponentVNode)(2,r.Button,{color:"transparent",tooltip:"Tooltip text.",tooltipPosition:e,content:e},e)}))})]})}},87758:function(e,t,n){"use strict";t.__esModule=!0,t.BoxWithSampleText=void 0;var o=n(96323),r=n(26949);t.BoxWithSampleText=function(e){return(0,o.normalizeProps)((0,o.createComponentVNode)(2,r.Box,Object.assign({},e,{children:[(0,o.createComponentVNode)(2,r.Box,{italic:!0,children:"Jackdaws love my big sphinx of quartz."}),(0,o.createComponentVNode)(2,r.Box,{mt:1,bold:!0,children:"The wide electrification of the southern provinces will give a powerful impetus to the growth of agriculture."})]})))}},33603:function(){},28553:function(){},68885:function(){},19210:function(){},44951:function(){},22031:function(){},44576:function(){},21805:function(){},50222:function(){},74199:function(){},8156:function(e,t,n){var o={"./AIRack":36525,"./AIRack.js":36525,"./AbilityManager":50687,"./AbilityManager.js":50687,"./AirAlarm":24782,"./AirAlarm.js":24782,"./AirVendor":89375,"./AirVendor.tsx":89375,"./Airlock":22704,"./Airlock.js":22704,"./AlertContentWindows":78403,"./AlertContentWindows/":78403,"./AlertContentWindows/index":78403,"./AlertContentWindows/index.ts":78403,"./AlertContentWindows/tgControls":43469,"./AlertContentWindows/tgControls.tsx":43469,"./AlertContentWindows/types":89037,"./AlertContentWindows/types.ts":89037,"./AlertModal":458,"./AlertModal.tsx":458,"./AnnouncementComputer":364,"./AnnouncementComputer/":364,"./AnnouncementComputer/automatic":9168,"./AnnouncementComputer/automatic.tsx":9168,"./AnnouncementComputer/index":364,"./AnnouncementComputer/index.tsx":364,"./AnnouncementComputer/manual":88364,"./AnnouncementComputer/manual.tsx":88364,"./AnnouncementComputer/type":76295,"./AnnouncementComputer/type.tsx":76295,"./AntagonistPanel":20636,"./AntagonistPanel/":20636,"./AntagonistPanel/AntagonistTypeTabBody":20920,"./AntagonistPanel/AntagonistTypeTabBody.tsx":20920,"./AntagonistPanel/AntagonistTypeTabs":56444,"./AntagonistPanel/AntagonistTypeTabs.tsx":56444,"./AntagonistPanel/index":20636,"./AntagonistPanel/index.tsx":20636,"./AntagonistPanel/type":5562,"./AntagonistPanel/type.ts":5562,"./Apc":91690,"./Apc/":91690,"./Apc/AccessPanelSection":20065,"./Apc/AccessPanelSection.tsx":20065,"./Apc/CellDisplay":65005,"./Apc/CellDisplay.tsx":65005,"./Apc/MainSection":54187,"./Apc/MainSection.tsx":54187,"./Apc/PowerChannelSection":42947,"./Apc/PowerChannelSection.tsx":42947,"./Apc/WireList":63687,"./Apc/WireList.tsx":63687,"./Apc/index":91690,"./Apc/index.tsx":91690,"./Apc/types":73020,"./Apc/types.ts":73020,"./Apc/util":94104,"./Apc/util.ts":94104,"./ArtifactPaper":52403,"./ArtifactPaper.js":52403,"./Atm":7171,"./Atm/":7171,"./Atm/index":7171,"./Atm/index.tsx":7171,"./Atm/types":3382,"./Atm/types.ts":3382,"./AutoInjector":46837,"./AutoInjector.js":46837,"./BanPanel":13401,"./BanPanel/":13401,"./BanPanel/BanList/BanList":95620,"./BanPanel/BanList/BanList.tsx":95620,"./BanPanel/BanList/BanListItem":67179,"./BanPanel/BanList/BanListItem.tsx":67179,"./BanPanel/BanList/columnConfig":99526,"./BanPanel/BanList/columnConfig.tsx":99526,"./BanPanel/JobBanList":62983,"./BanPanel/JobBanList.tsx":62983,"./BanPanel/apiType":49641,"./BanPanel/apiType.ts":49641,"./BanPanel/index":13401,"./BanPanel/index.tsx":13401,"./BanPanel/type":92600,"./BanPanel/type.ts":92600,"./BanPanel/useBanPanelBackend":34747,"./BanPanel/useBanPanelBackend.ts":34747,"./BarberingMenu":36443,"./BarberingMenu.js":36443,"./BarcodeComputer":8844,"./BarcodeComputer.js":8844,"./BioEffectManager":45027,"./BioEffectManager.js":45027,"./Boardgame":10522,"./Boardgame/":10522,"./Boardgame/Components":29678,"./Boardgame/Components/":29678,"./Boardgame/Components/board":66508,"./Boardgame/Components/board/":66508,"./Boardgame/Components/board/common/GridGuideRenderer":34116,"./Boardgame/Components/board/common/GridGuideRenderer.tsx":34116,"./Boardgame/Components/board/common/GridPieceRenderer":9149,"./Boardgame/Components/board/common/GridPieceRenderer.tsx":9149,"./Boardgame/Components/board/helpers":83702,"./Boardgame/Components/board/helpers.ts":83702,"./Boardgame/Components/board/index":66508,"./Boardgame/Components/board/index.tsx":66508,"./Boardgame/Components/board/styles/checkerboard":45208,"./Boardgame/Components/board/styles/checkerboard/":45208,"./Boardgame/Components/board/styles/checkerboard/CheckerBoardPattern":84894,"./Boardgame/Components/board/styles/checkerboard/CheckerBoardPattern.tsx":84894,"./Boardgame/Components/board/styles/checkerboard/index":45208,"./Boardgame/Components/board/styles/checkerboard/index.tsx":45208,"./Boardgame/Components/board/styles/types":51891,"./Boardgame/Components/board/styles/types.ts":51891,"./Boardgame/Components/common/BoardgameContents":25540,"./Boardgame/Components/common/BoardgameContents.tsx":25540,"./Boardgame/Components/common/ButtonConfirm":75022,"./Boardgame/Components/common/ButtonConfirm.tsx":75022,"./Boardgame/Components/common/HeldPieceRenderer":68035,"./Boardgame/Components/common/HeldPieceRenderer.tsx":68035,"./Boardgame/Components/common/Notations":41541,"./Boardgame/Components/common/Notations.tsx":41541,"./Boardgame/Components/common/Palettes":75750,"./Boardgame/Components/common/Palettes.tsx":75750,"./Boardgame/Components/common/TitleBar":15237,"./Boardgame/Components/common/TitleBar.tsx":15237,"./Boardgame/Components/index":29678,"./Boardgame/Components/index.tsx":29678,"./Boardgame/games":86489,"./Boardgame/games/":86489,"./Boardgame/games/chess":95102,"./Boardgame/games/chess/":95102,"./Boardgame/games/chess/index":95102,"./Boardgame/games/chess/index.tsx":95102,"./Boardgame/games/chess/pieces":86364,"./Boardgame/games/chess/pieces.tsx":86364,"./Boardgame/games/draughts":85867,"./Boardgame/games/draughts/":85867,"./Boardgame/games/draughts/index":85867,"./Boardgame/games/draughts/index.tsx":85867,"./Boardgame/games/draughts/pieces":77896,"./Boardgame/games/draughts/pieces.tsx":77896,"./Boardgame/games/index":86489,"./Boardgame/games/index.ts":86489,"./Boardgame/games/kits":8250,"./Boardgame/games/kits.ts":8250,"./Boardgame/index":10522,"./Boardgame/index.tsx":10522,"./Boardgame/utils":65844,"./Boardgame/utils/":65844,"./Boardgame/utils/index":65844,"./Boardgame/utils/index.ts":65844,"./Boardgame/utils/notations":43785,"./Boardgame/utils/notations.ts":43785,"./Boardgame/utils/types":76434,"./Boardgame/utils/types.ts":76434,"./Boardgame/utils/useActions":51887,"./Boardgame/utils/useActions.ts":51887,"./Boardgame/utils/useStates":31463,"./Boardgame/utils/useStates.ts":31463,"./Boardgame/utils/window":44135,"./Boardgame/utils/window.ts":44135,"./Bombsim":10818,"./Bombsim/":10818,"./Bombsim/index":10818,"./Bombsim/index.tsx":10818,"./Bombsim/type":71650,"./Bombsim/type.ts":71650,"./BugReportForm":15094,"./BugReportForm.js":15094,"./CAViewer":65101,"./CAViewer.js":65101,"./Cashreg":57399,"./Cashreg.tsx":57399,"./CentComViewer":48341,"./CentComViewer.js":48341,"./CharacterPreferences":4098,"./CharacterPreferences/":4098,"./CharacterPreferences/CharacterTab":96074,"./CharacterPreferences/CharacterTab.tsx":96074,"./CharacterPreferences/GameSettingsTab":56374,"./CharacterPreferences/GameSettingsTab.tsx":56374,"./CharacterPreferences/GeneralTab":57368,"./CharacterPreferences/GeneralTab.tsx":57368,"./CharacterPreferences/SavesTab":70712,"./CharacterPreferences/SavesTab.tsx":70712,"./CharacterPreferences/TraitsTab":30709,"./CharacterPreferences/TraitsTab.tsx":30709,"./CharacterPreferences/index":4098,"./CharacterPreferences/index.tsx":4098,"./CharacterPreferences/type":59576,"./CharacterPreferences/type.ts":59576,"./ChemChute":78979,"./ChemChute/":78979,"./ChemChute/index":78979,"./ChemChute/index.tsx":78979,"./ChemChute/type":28487,"./ChemChute/type.ts":28487,"./ChemDispenser":56915,"./ChemDispenser.tsx":56915,"./ChemHeater":95348,"./ChemHeater.js":95348,"./ChemMaster":45747,"./ChemMaster.js":45747,"./ChemRequestReceiver":48230,"./ChemRequestReceiver.js":48230,"./ChemRequester":20938,"./ChemRequester.js":20938,"./CloningConsole":6542,"./CloningConsole.js":6542,"./ClothingBooth":78826,"./ClothingBooth/":78826,"./ClothingBooth/index":78826,"./ClothingBooth/index.tsx":78826,"./ClothingBooth/type":41717,"./ClothingBooth/type.ts":41717,"./ColorMatrixEditor":70855,"./ColorMatrixEditor.tsx":70855,"./ColorPickerModal":21018,"./ColorPickerModal.tsx":21018,"./ComUplink":22049,"./ComUplink/":22049,"./ComUplink/index":22049,"./ComUplink/index.tsx":22049,"./ComUplink/type":20254,"./ComUplink/type.ts":20254,"./ContributorRewards":65208,"./ContributorRewards.js":65208,"./CrewCredits":57119,"./CrewCredits/":57119,"./CrewCredits/AntagonistsTab":19812,"./CrewCredits/AntagonistsTab.tsx":19812,"./CrewCredits/CrewTab":99407,"./CrewCredits/CrewTab.tsx":99407,"./CrewCredits/ScoreTab":21187,"./CrewCredits/ScoreTab.tsx":21187,"./CrewCredits/index":57119,"./CrewCredits/index.tsx":57119,"./CrewCredits/type":37538,"./CrewCredits/type.ts":37538,"./CryoCell":75859,"./CryoCell.js":75859,"./CyborgDockingStation":56445,"./CyborgDockingStation/":56445,"./CyborgDockingStation/CellChargeBar":59181,"./CyborgDockingStation/CellChargeBar.tsx":59181,"./CyborgDockingStation/DockingAllowedButton":7205,"./CyborgDockingStation/DockingAllowedButton.tsx":7205,"./CyborgDockingStation/OccupantSection":31924,"./CyborgDockingStation/OccupantSection/":31924,"./CyborgDockingStation/OccupantSection/EyebotStatusView":33492,"./CyborgDockingStation/OccupantSection/EyebotStatusView.tsx":33492,"./CyborgDockingStation/OccupantSection/HumanStatusView":27897,"./CyborgDockingStation/OccupantSection/HumanStatusView.tsx":27897,"./CyborgDockingStation/OccupantSection/OccupantCellDisplay":79891,"./CyborgDockingStation/OccupantSection/OccupantCellDisplay.tsx":79891,"./CyborgDockingStation/OccupantSection/RobotStatusView":25112,"./CyborgDockingStation/OccupantSection/RobotStatusView/":25112,"./CyborgDockingStation/OccupantSection/RobotStatusView/ClothingReportSection":44899,"./CyborgDockingStation/OccupantSection/RobotStatusView/ClothingReportSection.tsx":44899,"./CyborgDockingStation/OccupantSection/RobotStatusView/DamageReportSection":74826,"./CyborgDockingStation/OccupantSection/RobotStatusView/DamageReportSection.tsx":74826,"./CyborgDockingStation/OccupantSection/RobotStatusView/DecorationReportSection":32241,"./CyborgDockingStation/OccupantSection/RobotStatusView/DecorationReportSection.tsx":32241,"./CyborgDockingStation/OccupantSection/RobotStatusView/UpgradeReportSection":63297,"./CyborgDockingStation/OccupantSection/RobotStatusView/UpgradeReportSection.tsx":63297,"./CyborgDockingStation/OccupantSection/RobotStatusView/index":25112,"./CyborgDockingStation/OccupantSection/RobotStatusView/index.tsx":25112,"./CyborgDockingStation/OccupantSection/index":31924,"./CyborgDockingStation/OccupantSection/index.tsx":31924,"./CyborgDockingStation/SuppliesSection":9818,"./CyborgDockingStation/SuppliesSection/":9818,"./CyborgDockingStation/SuppliesSection/AvailableCellsSection":58571,"./CyborgDockingStation/SuppliesSection/AvailableCellsSection.tsx":58571,"./CyborgDockingStation/SuppliesSection/StandardAvailableSection":37394,"./CyborgDockingStation/SuppliesSection/StandardAvailableSection.tsx":37394,"./CyborgDockingStation/SuppliesSection/index":9818,"./CyborgDockingStation/SuppliesSection/index.tsx":9818,"./CyborgDockingStation/index":56445,"./CyborgDockingStation/index.tsx":56445,"./CyborgDockingStation/type":89974,"./CyborgDockingStation/type.ts":89974,"./CyborgModuleRewriter":85175,"./CyborgModuleRewriter/":85175,"./CyborgModuleRewriter/EmptyPlaceholder":44616,"./CyborgModuleRewriter/EmptyPlaceholder.tsx":44616,"./CyborgModuleRewriter/ModuleView":25526,"./CyborgModuleRewriter/ModuleView/":25526,"./CyborgModuleRewriter/ModuleView/ModuleDetail":94241,"./CyborgModuleRewriter/ModuleView/ModuleDetail.tsx":94241,"./CyborgModuleRewriter/ModuleView/Tools":5880,"./CyborgModuleRewriter/ModuleView/Tools.tsx":5880,"./CyborgModuleRewriter/ModuleView/index":25526,"./CyborgModuleRewriter/ModuleView/index.tsx":25526,"./CyborgModuleRewriter/action":83709,"./CyborgModuleRewriter/action.ts":83709,"./CyborgModuleRewriter/index":85175,"./CyborgModuleRewriter/index.tsx":85175,"./CyborgModuleRewriter/style":67044,"./CyborgModuleRewriter/style.ts":67044,"./CyborgModuleRewriter/type":95502,"./CyborgModuleRewriter/type.ts":95502,"./DJPanel":9299,"./DJPanel.js":9299,"./DisposalChute":64640,"./DisposalChute/":64640,"./DisposalChute/index":64640,"./DisposalChute/index.tsx":64640,"./DisposalChute/type":9389,"./DisposalChute/type.ts":9389,"./DoorTimer":84430,"./DoorTimer/":84430,"./DoorTimer/index":84430,"./DoorTimer/index.tsx":84430,"./DoorTimer/type":9494,"./DoorTimer/type.ts":9494,"./DyeDispenser":29259,"./DyeDispenser.tsx":29259,"./Elevator":87339,"./Elevator.tsx":87339,"./EngineStats":20316,"./EngineStats.js":20316,"./EspressoMachine":65203,"./EspressoMachine.js":65203,"./Filteriffic":53600,"./Filteriffic.js":53600,"./Flamethrower":21980,"./Flamethrower.js":21980,"./FlockPanel":72758,"./FlockPanel.js":72758,"./FlockStructures":57576,"./FlockStructures.js":57576,"./Freezer":11653,"./Freezer.tsx":11653,"./Gameclock":6482,"./Gameclock/":6482,"./Gameclock/index":6482,"./Gameclock/index.tsx":6482,"./Gameclock/types":69658,"./Gameclock/types.tsx":69658,"./GasCanister":52709,"./GasCanister/":52709,"./GasCanister/Detonator":16484,"./GasCanister/Detonator.js":16484,"./GasCanister/DetonatorTimer":41834,"./GasCanister/DetonatorTimer.js":41834,"./GasCanister/index":52709,"./GasCanister/index.js":52709,"./GasTank":5394,"./GasTank.js":5394,"./GeneTek":92526,"./GeneTek.js":92526,"./GeneTek/":33012,"./GeneTek/AppearanceEditor":92195,"./GeneTek/AppearanceEditor.js":92195,"./GeneTek/BioEffect":11265,"./GeneTek/BioEffect.js":11265,"./GeneTek/DNASequence":59450,"./GeneTek/DNASequence.js":59450,"./GeneTek/GeneIcon":43024,"./GeneTek/GeneIcon.js":43024,"./GeneTek/index":33012,"./GeneTek/index.js":33012,"./GeneTek/modals/BuyMaterialsModal":78368,"./GeneTek/modals/BuyMaterialsModal.js":78368,"./GeneTek/modals/CombineGenesModal":39961,"./GeneTek/modals/CombineGenesModal.js":39961,"./GeneTek/modals/UnlockModal":89613,"./GeneTek/modals/UnlockModal.js":89613,"./GeneTek/tabs/MutationsTab":22675,"./GeneTek/tabs/MutationsTab.js":22675,"./GeneTek/tabs/ResearchTab":93847,"./GeneTek/tabs/ResearchTab.js":93847,"./GeneTek/tabs/ScannerTab":49445,"./GeneTek/tabs/ScannerTab.js":49445,"./GeneTek/tabs/StorageTab":64477,"./GeneTek/tabs/StorageTab.js":64477,"./GimmickObject":12302,"./GimmickObject.js":12302,"./GlassRecycler":96608,"./GlassRecycler.js":96608,"./HumanInventory":21381,"./HumanInventory/":21381,"./HumanInventory/index":21381,"./HumanInventory/index.tsx":21381,"./HumanInventory/types":59818,"./HumanInventory/types.ts":59818,"./Hypospray":92354,"./Hypospray.js":92354,"./IDComputer":26513,"./IDComputer.js":26513,"./Laundry":23255,"./Laundry.js":23255,"./ListInputModal":84696,"./ListInputModal.tsx":84696,"./LocalGenerator":56596,"./LocalGenerator/":56596,"./LocalGenerator/index":56596,"./LocalGenerator/index.tsx":56596,"./LocalGenerator/type":83329,"./LocalGenerator/type.ts":83329,"./LongRangeTeleporter":56403,"./LongRangeTeleporter.js":56403,"./MechanicalDropper":46045,"./MechanicalDropper.js":46045,"./MineralMagnet":17526,"./MineralMagnet.js":17526,"./Minimap":2960,"./Minimap.js":2960,"./MinimapController":3082,"./MinimapController.js":3082,"./MixerMachine":93663,"./MixerMachine.js":93663,"./MixingDesk":5244,"./MixingDesk.js":5244,"./MusicInstrument":71417,"./MusicInstrument.tsx":71417,"./NuclearReactor":14086,"./NuclearReactor.js":14086,"./NumberInputModal":12660,"./NumberInputModal.tsx":12660,"./ObserverMenu":55223,"./ObserverMenu.tsx":55223,"./OperatingComputer":35851,"./OperatingComputer/":35851,"./OperatingComputer/index":35851,"./OperatingComputer/index.tsx":35851,"./OperatingComputer/type":36273,"./OperatingComputer/type.ts":36273,"./PaperSheet":69412,"./PaperSheet.js":69412,"./Particool":21293,"./Particool.js":21293,"./Phone":85344,"./Phone/":85344,"./Phone/index":85344,"./Phone/index.tsx":85344,"./Phone/type":85990,"./Phone/type.ts":85990,"./PipeDispenser":41245,"./PipeDispenser.js":41245,"./PixelOffset":38837,"./PixelOffset.js":38837,"./Plantmaster":51884,"./Plantmaster.js":51884,"./PlayerPanel":78927,"./PlayerPanel/":78927,"./PlayerPanel/Header":53302,"./PlayerPanel/Header.tsx":53302,"./PlayerPanel/constant":22706,"./PlayerPanel/constant.ts":22706,"./PlayerPanel/index":78927,"./PlayerPanel/index.tsx":78927,"./PlayerPanel/type":43771,"./PlayerPanel/type.ts":43771,"./PollBallot":29467,"./PollBallot.js":29467,"./PortablePump":13484,"./PortablePump.js":13484,"./PortableScrubber":54652,"./PortableScrubber.js":54652,"./PowerDebug":15264,"./PowerDebug.js":15264,"./PowerMonitor":84699,"./PowerMonitor/":84699,"./PowerMonitor/Apc":4914,"./PowerMonitor/Apc.tsx":4914,"./PowerMonitor/Smes":8954,"./PowerMonitor/Smes.tsx":8954,"./PowerMonitor/index":84699,"./PowerMonitor/index.tsx":84699,"./PowerMonitor/type":2441,"./PowerMonitor/type.ts":2441,"./PowerTransmissionLaser":36476,"./PowerTransmissionLaser.js":36476,"./Precipitation":61221,"./Precipitation.js":61221,"./Pressurizer":90227,"./Pressurizer.js":90227,"./ProcCall":62376,"./ProcCall.js":62376,"./PumpControl":94955,"./PumpControl/":94955,"./PumpControl/index":94955,"./PumpControl/index.tsx":94955,"./PumpControl/type":95868,"./PumpControl/type.ts":95868,"./Radio":42626,"./Radio/":42626,"./Radio/index":42626,"./Radio/index.tsx":42626,"./Radio/type":39582,"./Radio/type.ts":39582,"./RandomEvent":16710,"./RandomEvent.js":16710,"./ReagentExtractor":63777,"./ReagentExtractor.js":63777,"./Rockbox":89971,"./Rockbox.js":89971,"./SecureSafe":95285,"./SecureSafe.js":95285,"./SeedFabricator":19172,"./SeedFabricator.js":19172,"./SheetCrafting":70535,"./SheetCrafting.js":70535,"./Sleeper":24258,"./Sleeper.js":24258,"./SlotMachine":82930,"./SlotMachine.js":82930,"./Smes":68952,"./Smes.js":68952,"./SpawnEvent":54016,"./SpawnEvent.js":54016,"./SpendSpacebux":19378,"./SpendSpacebux.js":19378,"./SwingSign":79387,"./SwingSign.js":79387,"./SwingSignTIM":44001,"./SwingSignTIM.tsx":44001,"./TEG":13634,"./TEG.js":13634,"./TTV":31567,"./TTV/":31567,"./TTV/index":31567,"./TTV/index.tsx":31567,"./TTV/type":51461,"./TTV/type.ts":51461,"./TankDispenser":99714,"./TankDispenser.js":99714,"./TeleConsole":79268,"./TeleConsole/":79268,"./TeleConsole/BookmarksSection":87221,"./TeleConsole/BookmarksSection.tsx":87221,"./TeleConsole/ConnectionSection":75461,"./TeleConsole/ConnectionSection.tsx":75461,"./TeleConsole/CoordinatesSection":12703,"./TeleConsole/CoordinatesSection.tsx":12703,"./TeleConsole/SteppedSlider":34545,"./TeleConsole/SteppedSlider.tsx":34545,"./TeleConsole/index":79268,"./TeleConsole/index.tsx":79268,"./TeleConsole/types":65087,"./TeleConsole/types.ts":65087,"./TeleConsole/util":581,"./TeleConsole/util.ts":581,"./Terminal":14831,"./Terminal/":14831,"./Terminal/InputAndButtonsSection":73354,"./Terminal/InputAndButtonsSection.tsx":73354,"./Terminal/PheripheralsSection":58084,"./Terminal/PheripheralsSection.tsx":58084,"./Terminal/TerminalOutputSection":98341,"./Terminal/TerminalOutputSection.tsx":98341,"./Terminal/index":14831,"./Terminal/index.tsx":14831,"./Terminal/types":55230,"./Terminal/types.ts":55230,"./Terrainify":14081,"./Terrainify.js":14081,"./TextInputModal":81235,"./TextInputModal.tsx":81235,"./Timer":80480,"./Timer.js":80480,"./TransitShuttle":5051,"./TransitShuttle.js":5051,"./TrscArray":73128,"./TrscArray.js":73128,"./TurbineControl":73248,"./TurbineControl.js":73248,"./TurretControl":40620,"./TurretControl.js":40620,"./Vendors":97170,"./Vendors.js":97170,"./WeaponVendor":96880,"./WeaponVendor/":96880,"./WeaponVendor/index":96880,"./WeaponVendor/index.tsx":96880,"./WeaponVendor/type":10661,"./WeaponVendor/type.ts":10661,"./Wizard_Spellbook":14024,"./Wizard_Spellbook.js":14024,"./common/BeakerContents":57361,"./common/BeakerContents.js":57361,"./common/DataInput":48916,"./common/DataInput.js":48916,"./common/HealthStat":65751,"./common/HealthStat.js":65751,"./common/IDCard":8095,"./common/IDCard.js":8095,"./common/InputButtons":34277,"./common/InputButtons.tsx":34277,"./common/KeyHealthIndicators":9720,"./common/KeyHealthIndicators/":9720,"./common/KeyHealthIndicators/index":9720,"./common/KeyHealthIndicators/index.tsx":9720,"./common/KeyHealthIndicators/type":68397,"./common/KeyHealthIndicators/type.ts":68397,"./common/ListSearch":36814,"./common/ListSearch.tsx":36814,"./common/Loader":55631,"./common/Loader.tsx":55631,"./common/MobStatus":90881,"./common/MobStatus.js":90881,"./common/PortableAtmos":41161,"./common/PortableAtmos.js":41161,"./common/ReagentInfo":51418,"./common/ReagentInfo.tsx":51418,"./common/ReleaseValve":75015,"./common/ReleaseValve.js":75015,"./common/VendorCashTable":72638,"./common/VendorCashTable.tsx":72638,"./common/graphUtils":818,"./common/graphUtils.js":818,"./common/mathUtils":96794,"./common/mathUtils.ts":96794,"./common/stringUtils":18331,"./common/stringUtils.ts":18331,"./common/temperatureUtils":48175,"./common/temperatureUtils.js":48175,"./space_heater":38770,"./space_heater.js":38770};function r(e){var t=a(e);return n(t)}function a(e){if(!n.o(o,e)){var t=new Error("Cannot find module '"+e+"'");throw t.code="MODULE_NOT_FOUND",t}return o[e]}r.keys=function(){return Object.keys(o)},r.resolve=a,e.exports=r,r.id=8156},69321:function(e,t,n){var o={"./Blink.stories.js":88428,"./BlockQuote.stories.js":9184,"./Box.stories.js":36801,"./Button.stories.js":3750,"./ByondUi.stories.js":68696,"./Collapsible.stories.js":88835,"./Flex.stories.js":34458,"./Input.stories.js":23148,"./Popper.stories.js":23613,"./ProgressBar.stories.js":9093,"./Stack.stories.js":86482,"./Storage.stories.js":63900,"./Tabs.stories.js":88209,"./Themes.stories.js":38200,"./Tooltip.stories.js":48181};function r(e){var t=a(e);return n(t)}function a(e){if(!n.o(o,e)){var t=new Error("Cannot find module '"+e+"'");throw t.code="MODULE_NOT_FOUND",t}return o[e]}r.keys=function(){return Object.keys(o)},r.resolve=a,e.exports=r,r.id=69321},82252:function(e){"use strict";var t=[];e.exports={subscribe:function(e){return t.push(e)},sendMessage:function(e){},sendLogEntry:function(e,t){},setupHotReloading:function(){0}}}},t={};function n(o){var r=t[o];if(r!==undefined)return r.exports;var a=t[o]={exports:{}};return e[o](a,a.exports,n),a.exports}n.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},function(){"use strict";n(65379),n(43674),n(69656),n(72411),n(24467),n(37493),n(87420),n(9480),n(66171),n(53276),n(71852),n(59045),n(70887),n(72906),n(24835),n(14653),n(58139),n(34049),n(38356),n(72494),n(31699),n(3263),n(81520),n(80036),n(60515),n(94330),n(96553),n(99139),n(98215),n(32617),n(80186),n(31149),n(71827),n(79770),n(32099),n(72667),n(94920),n(64683),n(26189),n(41185),n(51008),n(47112),n(86e3),n(15196),n(95993),n(25079),n(87143),n(72499),n(73676),n(76746),n(19),n(17038),n(46360),n(16835),n(96683),n(7756),n(21842),n(1613),n(65115),n(27115),n(13280),n(21019),n(66619),n(75469),n(90967),n(35022),n(22604),n(41843),n(86810),n(54670),n(16580),n(31304),n(13078),n(45128),n(31938),n(90958),n(88885),n(45017),n(59743),n(47560),n(31569),n(6134),n(12622),n(60852),n(99085),n(75180),n(79437),n(75370),n(61022),n(50580),n(5301),n(76438),n(97307),n(34016),n(86944),n(60687),n(86957),n(59163),n(34128),n(24267),n(39816),n(4239),n(8381),n(63669),n(25779),n(84580),n(33198),n(71895),n(44910),n(95962),n(73769),n(14962),n(80345),n(18438),n(70552),n(46356),n(57128),n(83588),n(47057),n(67092),n(59478),n(69203),n(27879),n(71507),n(39021),n(8641),n(83064),n(93115),n(33362),n(45090),n(12654),n(58870),n(76581),n(4567),n(28638),n(60314),n(71595),n(98954),n(91332),n(79445),n(36493),n(24476),n(78192),n(58660),n(56592),n(69957),n(9747),n(13578),n(3684),n(19209),n(56737),n(67586),n(7743),n(15890),n(34651),n(18037),n(48415),n(54950),n(76102),n(47816),n(30037),n(54705),n(75831),n(96958),n(75344),n(87853),n(25865),n(1150),n(50444),n(11220),n(6636),n(37650),n(12424),n(64346),n(27553),n(49007),n(17621),n(71078),n(20500),n(85923),n(38956),n(49264),n(70448),n(5775),n(45164),n(83762),n(67265),n(56058),n(87001),n(23535),n(18617),n(70595),n(76820),n(33357),n(38215),n(37281),n(99584),n(43582),n(15378),n(31213),n(19275),n(59),n(43849),n(69838),n(25513),n(72090),n(15511),n(88280),n(37283),n(96250)}(),function(){"use strict";var e=n(96323);n(33603),n(22031),n(44951),n(44576),n(21805),n(50222),n(74199),n(19210),n(28553),n(68885);var t,o,r=n(28440),a=(n(82252),n(6965)),i=n(13952),c=n(77960),l=n(18749),u=n(99397);r.perf.mark("inception",null==(t=window.performance)||null==(o=t.timing)?void 0:o.navigationStart),r.perf.mark("init");var d=(0,l.configureStore)(),s=(0,c.createRenderer)((function(){var t=(0,n(91199).getRoutedComponent)(d);return(0,e.createComponentVNode)(2,l.StoreProvider,{store:d,children:(0,e.createComponentVNode)(2,t)})}));!function p(){if("loading"!==document.readyState){for((0,u.setupGlobalEvents)(),(0,a.setupHotKeys)(),(0,i.captureExternalLinks)(),d.subscribe(s),window.update=function(e){return d.dispatch(Byond.parseJson(e))};;){var e=window.__updateQueue__.shift();if(!e)break;window.update(e)}0}else document.addEventListener("DOMContentLoaded",p)}()}()}(); \ No newline at end of file diff --git a/buildByond.conf b/buildByond.conf index 8f1a93eb4e9a9..ba44e2456b939 100644 --- a/buildByond.conf +++ b/buildByond.conf @@ -4,7 +4,7 @@ BYOND_MINOR_VERSION=1589 SPACEMAN_DMM_VERSION=suite-1.8 # See: goonstation/rust-g - is the tag for the release -RUST_G_VERSION=v3.0.0-G +RUST_G_VERSION=v3.1.0-G NODE_VERSION=16 diff --git a/code/WorkInProgress/AphsStuff.dm b/code/WorkInProgress/AphsStuff.dm index b9f5857095a6f..76a1bb10869c2 100644 --- a/code/WorkInProgress/AphsStuff.dm +++ b/code/WorkInProgress/AphsStuff.dm @@ -396,7 +396,7 @@ appearanceString = "servo" max_health = 40 handlistPart = "armR-light" - robot_movement_modifier = /datum/movement_modifier/robot_part/head + robot_movement_modifier = /datum/movement_modifier/robot_part/light_head /obj/item/parts/robot_parts/arm/left/servotron name = "servotron left arm" @@ -405,7 +405,7 @@ appearanceString = "servo" max_health = 40 handlistPart = "armL-light" - robot_movement_modifier = /datum/movement_modifier/robot_part/arm_left + robot_movement_modifier = /datum/movement_modifier/robot_part/light_arm_left /obj/item/parts/robot_parts/head/servotron name = "servotron head" @@ -413,7 +413,7 @@ icon_state = "head-servo" appearanceString = "servo" max_health = 87 - robot_movement_modifier = /datum/movement_modifier/robot_part/arm_right + robot_movement_modifier = /datum/movement_modifier/robot_part/light_arm_right /obj/item/parts/robot_parts/chest/servotron name = "servotron chest" diff --git a/code/WorkInProgress/AzrunStuff.dm b/code/WorkInProgress/AzrunStuff.dm index c887ed8448de9..f56899015bed6 100644 --- a/code/WorkInProgress/AzrunStuff.dm +++ b/code/WorkInProgress/AzrunStuff.dm @@ -199,7 +199,40 @@ name = "strange seed" icon = 'icons/obj/hydroponics/items_hydroponics.dmi' icon_state = "seedproj" - implanted = /obj/item/implant/projectile/spitter_pod + implanted = /obj/item/implant/projectile/body_visible/seed/spitter_pod + +/obj/item/implant/projectile/body_visible/seed/spitter_pod + name = "strange seed pod" + pull_out_name = "strange seed pod" + icon = 'icons/obj/hydroponics/items_hydroponics.dmi' + desc = "A small hollow pod." + icon_state = "seedproj" + var/dig_ticker = 25 + + New() + ..() + implant_overlay = image(icon = 'icons/mob/human.dmi', icon_state = "dart_stick_[rand(0, 4)]", layer = MOB_EFFECT_LAYER) + + do_process() + src.dig_ticker = max(src.dig_ticker-1, 0) + if(!src.dig_ticker) + online = FALSE + if(prob(80)) + var/mob/living/carbon/human/H = src.owner + var/obj/item/implant/projectile/spitter_pod/implant = new + implant.implanted(H) + boutput(src.owner,SPAN_ALERT("You feel something work its way into your body from \the [src].")) + + on_death() + if(!online) + return + if(prob(80)) + var/mob/living/carbon/human/H = src.owner + var/obj/item/implant/projectile/spitter_pod/implant = new + implant.implanted(H) + SPAWN(rand(5 SECONDS, 30 SECONDS)) + if(!QDELETED(H) && !QDELETED(implant)) + implant.on_death() /obj/item/implant/projectile/spitter_pod name = "strange seed pod" @@ -207,7 +240,7 @@ desc = "A small hollow pod." icon_state = "seedproj" - var/heart_ticker = 10 + var/heart_ticker = 35 online = TRUE implanted(mob/M, mob/Implanter) @@ -233,25 +266,29 @@ animate(P, alpha=255, time=2 SECONDS) do_process() - heart_ticker = max(heart_ticker--,0) - if(heart_ticker & prob(50)) + heart_ticker = max(heart_ticker-1, 0) + if(!isalive(src.owner)) + online = FALSE + return + if(heart_ticker & prob(60) && !ON_COOLDOWN(src,"[src] spam", 5 SECONDS) ) if(prob(30)) boutput(src.owner,SPAN_ALERT("You feel as though something moving towards your heart... That can't be good.")) else boutput(src.owner,SPAN_ALERT("You feel as though something is working its way through your chest.")) else if(!heart_ticker) - var/mob/living/carbon/human/H = src.owner - if(istype(H)) - H.organHolder.damage_organs(2, 0, 1, "heart") - else - src.owner.TakeDamage("All", 2, 0) + if(!ON_COOLDOWN(src,"[src] spam", 8 SECONDS)) + var/mob/living/carbon/human/H = src.owner + if(istype(H)) + H.organHolder.damage_organs(rand(1,5)/2, 0, 1, list("heart")) + else + src.owner.TakeDamage("All", 1, 0) - if(prob(5)) - boutput(src.owner,SPAN_ALERT("AAHRRRGGGG something is trying to dig your heart out from the inside?!?!")) - src.owner.emote("scream") - src.owner.changeStatus("stunned", 2 SECONDS) - else if(prob(10)) - boutput(src.owner,SPAN_ALERT("You feel a sharp pain in your chest.")) + if(prob(5)) + boutput(src.owner,SPAN_ALERT("AAHRRRGGGG something is trying to dig your heart out from the inside?!?!")) + src.owner.emote("scream") + src.owner.changeStatus("stunned", rand(1 SECOND, 2 SECONDS)) + else if(prob(40)) + boutput(src.owner,SPAN_ALERT("You feel a sharp pain in your chest.")) /datum/gimmick_event var/interaction = 0 @@ -823,7 +860,7 @@ ADMIN_INTERACT_PROCS(/turf/unsimulated/floor, proc/sunset, proc/sunrise, proc/se implanted = null damage_type = D_KINETIC hit_type = DAMAGE_BLUNT - impact_image_state = "bhole" + impact_image_state = "bullethole" casing = /obj/item/casing/shotgun/pipe on_hit(atom/hit, dirflag, obj/projectile/proj) @@ -1172,365 +1209,3 @@ ADMIN_INTERACT_PROCS(/turf/unsimulated/floor, proc/sunset, proc/sunrise, proc/se New(newLoc) ..() new /mob/living/carbon/human/normal/assistant(newLoc) - -#define DANCE_TRAVEL_FORWARD 1 -#define DANCE_TRAVEL_RIGHT 2 -#define DANCE_TRAVEL_LEFT 3 -#define DANCE_TRAVEL_BACK 4 -#define DANCE_TRAVEL_TOWARD 5 -#define DANCE_TRAVEL_AWAY 6 - -#define BEAT_COUNT(_X) (AH.time_per_count * _X) - -/datum/abilityHolder/dancing - var/style = "Waltz" - var/list/styles = list("NC2S", "Waltz") - var/mob/lead - var/mob/follow - var/time_per_count = 3 - - onAttach(mob/to_whom) - . = ..() - src.addAbility(/datum/targetable/dancing/choose_style) - src.addAbility(/datum/targetable/dancing/rest) - src.addAbility(/datum/targetable/dancing/change_speed/faster) - src.addAbility(/datum/targetable/dancing/change_speed/slower) - for(var/move in childrentypesof(/datum/targetable/dancing/nc2s)) - src.addAbility(move) - for(var/move in childrentypesof(/datum/targetable/dancing/waltz)) - src.addAbility(move) - -/datum/targetable/dancing - icon = 'icons/mob/dance_ui.dmi' - var/style = null - var/list/static/follower_offsets = list("[NORTH]"=list(-4,-2), - "[EAST]"=list(-8,1), - "[SOUTH]"=list(4,2), - "[WEST]"=list(8,-1)) - - display_available() - var/datum/abilityHolder/dancing/AH = holder - var/mob/living/carbon/human/H = holder.owner - if(istype(H)) - var/obj/item/shoes = H.get_slot(SLOT_SHOES) - if(istype(shoes, /obj/item/clothing/shoes/dress_shoes/dance)) - . = TRUE - else - . = FALSE - else - . = TRUE - - if(. && style) - . = style == AH.style - - castcheck(atom/target) - . = ..() - if(.) - src.cooldown = 0 - - var/datum/abilityHolder/dancing/AH = holder - AH.lead = holder.owner - AH.follow = null - for (var/obj/item/grab/G in AH.lead?.equipped_list(check_for_magtractor = 0)) - if (G.affecting.buckled) continue - AH.follow = G.affecting - - var/reset_position = FALSE - if(AH.lead) - if((abs(AH.lead.pixel_x) + abs(AH.lead.pixel_y)) > 48) - reset_position = BEAT_COUNT(4) - else if(AH.follow && (abs(AH.lead.pixel_x - AH.follow.pixel_x ) + abs(AH.lead.pixel_y - AH.follow.pixel_y)) > 10 ) - reset_position = BEAT_COUNT(4) - if(reset_position) - animate(AH.lead, time=reset_position, pixel_x=0, pixel_y = 0) - - if(AH.follow && style) - if(reset_position || (AH.follow.dir != turn(AH.lead.dir,180)) || ((abs(AH.lead.pixel_x - AH.follow.pixel_x ) + abs(AH.lead.pixel_y - AH.follow.pixel_y))==0)) - reset_position = max(reset_position, BEAT_COUNT(1)) - AH.follow.dir = turn(AH.lead.dir,180) - AH.follow.layer = AH.lead.layer - if(AH.follow.dir & (SOUTH | EAST)) - AH.follow.layer -= 0.1 - else - AH.follow.layer += 0.1 - - animate(AH.follow, time=reset_position, pixel_x=follower_offsets["[AH.follow.dir]"][1], pixel_y = follower_offsets["[AH.follow.dir]"][2]) - - - cast(atom/target) - . = ..() - var/datum/abilityHolder/dancing/AH = holder - if(AH) - var/duration = src.cooldown + 5 SECONDS - AH.lead.setStatusMin("dancing", duration) - AH.follow?.setStatusMin("dancing", duration) - - choose_style - name = "Style" - icon_state = "style" - desc = "Choose from style of dance" - cooldown = 2 SECOND - - cast(atom/target) - . = ..() - var/datum/abilityHolder/dancing/AH = holder - var/dance_style = tgui_input_list(holder.owner, "Select style", "Dance Selection", AH.styles) - if(dance_style in AH.styles) - AH.style = dance_style - - rest - name = "Pause" - desc = "Maintain your current position" - icon_state = "pause" - cooldown = 10 SECOND - - cast(atom/target) - . = ..() - var/datum/abilityHolder/dancing/AH = holder - if(AH) - AH.lead.setStatusMin("dancing", 15 SECONDS) - AH.follow?.setStatusMin("dancing", 15 SECONDS) - - change_speed - var/time_change - - cast(atom/target) - var/datum/abilityHolder/dancing/AH = holder - if(AH) - AH.time_per_count += time_change - boutput(holder.owner,"[AH.time_per_count/10] seconds per count. ([60/(AH.time_per_count/10)] BPM)") - - faster - name = "Faster" - icon_state = "fast" - time_change = -0.5 - - slower - name = "Slower" - icon_state = "slow" - time_change = 0.5 - -/datum/targetable/dancing/nc2s - style = "NC2S" - - var/list/static/turn_offsets = list("[NORTH]"=list(4,-12), - "[EAST]"=list(-20,-1), - "[SOUTH]"=list(-4,12), - "[WEST]"=list(20,1), - ) - - proc/basic(var/mob/dancer, loop=1) - var/datum/abilityHolder/dancing/AH = holder - if(dancer==AH.lead) - src.cooldown += BEAT_COUNT(8) - BEAT_COUNT(0.5) - if(!dancer) - return - - var/datum/dance_transform/D = new(dancer, turn_offsets) - D.travel(dancer, DANCE_TRAVEL_AWAY, AH.lead, 3) - animate(dancer, time=BEAT_COUNT(1), pixel_x=D.x_offset, pixel_y=D.y_offset, loop=loop, easing = QUAD_EASING, flags=ANIMATION_RELATIVE) - D.travel(dancer, DANCE_TRAVEL_TOWARD, AH.lead, 3) - animate(time=BEAT_COUNT(1), pixel_x=D.x_offset, pixel_y=D.y_offset, easing = QUAD_EASING, flags=ANIMATION_RELATIVE) - D.travel(dancer, DANCE_TRAVEL_LEFT, AH.lead, 8) - animate(time=BEAT_COUNT(2), pixel_x=D.x_offset, pixel_y=D.y_offset, easing = QUAD_EASING | EASE_OUT, flags=ANIMATION_RELATIVE) - D.travel(dancer, DANCE_TRAVEL_AWAY, AH.lead, 3) - animate(time=BEAT_COUNT(1), pixel_x=D.x_offset, pixel_y=D.y_offset, easing = QUAD_EASING, flags=ANIMATION_RELATIVE) - D.travel(dancer, DANCE_TRAVEL_TOWARD, AH.lead, 3) - animate(time=BEAT_COUNT(1), pixel_x=D.x_offset, pixel_y=D.y_offset, easing = QUAD_EASING, flags=ANIMATION_RELATIVE) - D.travel(dancer, DANCE_TRAVEL_RIGHT, AH.lead, 8) - animate(time=BEAT_COUNT(2), pixel_x=D.x_offset, pixel_y=D.y_offset, easing = QUAD_EASING | EASE_OUT, flags=ANIMATION_RELATIVE) - - proc/closed_left_turn(var/mob/dancer, loop=1) - var/datum/abilityHolder/dancing/AH = holder - if(dancer==AH.lead) - src.cooldown += BEAT_COUNT(8) - BEAT_COUNT(0.5) - if(!dancer) - return - - var/datum/dance_transform/D = new(dancer, turn_offsets) - D.travel(dancer, DANCE_TRAVEL_AWAY, AH.lead, 3) - animate(dancer, time=BEAT_COUNT(1), pixel_x=D.x_offset, pixel_y=D.y_offset, loop=loop, easing = QUAD_EASING, flags=ANIMATION_RELATIVE) - D.travel(dancer, DANCE_TRAVEL_TOWARD, AH.lead, 3) - animate(time=BEAT_COUNT(1), pixel_x=D.x_offset, pixel_y=D.y_offset, easing = QUAD_EASING, flags=ANIMATION_RELATIVE) - D.travel(dancer, DANCE_TRAVEL_LEFT, AH.lead, 8) - D.do_turn(dancer, AH.lead, 90) - animate(time=BEAT_COUNT(2), pixel_x=D.x_offset, pixel_y=D.y_offset, dir=D.dir, easing = QUAD_EASING | EASE_OUT, flags=ANIMATION_RELATIVE) - - D.travel(dancer, DANCE_TRAVEL_RIGHT, AH.lead, 16) - animate(time=BEAT_COUNT(3), pixel_x=D.x_offset, pixel_y=D.y_offset, loop=loop, easing = QUAD_EASING, flags=ANIMATION_RELATIVE) - D.travel(dancer, DANCE_TRAVEL_LEFT, AH.lead, 2) - animate(time=BEAT_COUNT(1), pixel_x=D.x_offset, pixel_y=D.y_offset, easing = BACK_EASING | EASE_IN, flags=ANIMATION_RELATIVE) - - proc/grapevine(var/mob/dancer, loop=1) - var/datum/abilityHolder/dancing/AH = holder - if(dancer==AH.lead) - src.cooldown += BEAT_COUNT(8) - BEAT_COUNT(0.5) - if(!dancer) - return - - var/datum/dance_transform/D = new(dancer, turn_offsets) - D.travel(dancer, DANCE_TRAVEL_LEFT, AH.lead, 16) - animate(dancer, time=BEAT_COUNT(3), pixel_x=D.x_offset, pixel_y=D.y_offset, loop=loop, easing = QUAD_EASING, flags=ANIMATION_RELATIVE) - D.travel(dancer, DANCE_TRAVEL_RIGHT, AH.lead, 2) - animate(time=BEAT_COUNT(1), pixel_x=D.x_offset, pixel_y=D.y_offset, easing = BACK_EASING | EASE_IN, flags=ANIMATION_RELATIVE) - D.travel(dancer, DANCE_TRAVEL_RIGHT, AH.lead, 16) - animate(time=BEAT_COUNT(3), pixel_x=D.x_offset, pixel_y=D.y_offset, loop=loop, easing = QUAD_EASING, flags=ANIMATION_RELATIVE) - D.travel(dancer, DANCE_TRAVEL_LEFT, AH.lead, 2) - animate(time=BEAT_COUNT(1), pixel_x=D.x_offset, pixel_y=D.y_offset, easing = BACK_EASING | EASE_IN, flags=ANIMATION_RELATIVE) - - basic - - name = "Basic" - icon_state = "basic" - - cast(atom/target) - var/datum/abilityHolder/dancing/AH = holder - basic(AH.lead, 1) - basic(AH.follow, 1) - ..() - - grapevine - name = "Grapevine" - icon_state = "grapevine" - - cast(atom/target) - var/datum/abilityHolder/dancing/AH = holder - grapevine(AH.lead, 1) - grapevine(AH.follow, 1) - ..() - - closed_left_turn - name = "Left Turn" - icon_state = "left_turn" - - cast(atom/target) - var/datum/abilityHolder/dancing/AH = holder - closed_left_turn(AH.lead, 1) - closed_left_turn(AH.follow, 1) - ..() - -/datum/targetable/dancing/waltz - style = "Waltz" - var/list/static/turn_offsets = list("[NORTH]"=list(4,-12), - "[EAST]"=list(-4,-1), - "[SOUTH]"=list(-4,12), - "[WEST]"=list(4,1), - ) - - - proc/box_step(var/mob/dancer, loop=1, turn) - var/datum/abilityHolder/dancing/AH = holder - if(dancer==AH.lead) - src.cooldown += BEAT_COUNT(6) - BEAT_COUNT(0.5) - if(!dancer) - return - - var/datum/dance_transform/D = new(dancer, turn_offsets) - D.travel(dancer, DANCE_TRAVEL_FORWARD, AH.lead, 9) - animate(dancer, time=BEAT_COUNT(1), pixel_x=D.x_offset, pixel_y=D.y_offset, loop=loop, easing = QUAD_EASING, flags=ANIMATION_RELATIVE) - D.travel(dancer, DANCE_TRAVEL_RIGHT, AH.lead, 8) - if(turn) - D.do_turn(dancer, AH.lead, turn) - animate(time=BEAT_COUNT(1), pixel_x=D.x_offset, pixel_y=D.y_offset, dir=D.dir, easing = QUAD_EASING, flags=ANIMATION_RELATIVE) - D.travel(dancer, DANCE_TRAVEL_BACK, AH.lead, 1) - animate(time=BEAT_COUNT(1), pixel_x=D.x_offset, pixel_y=D.y_offset, easing = QUAD_EASING | EASE_OUT, flags=ANIMATION_RELATIVE) - - D.travel(dancer, DANCE_TRAVEL_BACK, AH.lead, 7) - animate(time=BEAT_COUNT(1), pixel_x=D.x_offset, pixel_y=D.y_offset, easing = QUAD_EASING, flags=ANIMATION_RELATIVE) - D.travel(dancer, DANCE_TRAVEL_LEFT, AH.lead, 8) - if(turn) - D.do_turn(dancer, AH.lead, turn) - animate(time=BEAT_COUNT(1), pixel_x=D.x_offset, pixel_y=D.y_offset, dir=D.dir, easing = QUAD_EASING, flags=ANIMATION_RELATIVE) - D.travel(dancer, DANCE_TRAVEL_BACK, AH.lead, 1) - animate(time=BEAT_COUNT(1), pixel_x=D.x_offset, pixel_y=D.y_offset, easing = QUAD_EASING | EASE_OUT, flags=ANIMATION_RELATIVE) - - box_step - name = "Box Step" - icon_state = "box" - cast(atom/target) - var/datum/abilityHolder/dancing/AH = holder - box_step(AH.lead, 1) - box_step(AH.follow, 1) - ..() - - turning_box - name = "Turning Box Step" - icon_state = "l_box" - cast(atom/target) - var/datum/abilityHolder/dancing/AH = holder - box_step(AH.lead, 1, 90) - box_step(AH.follow, 1, 90) - ..() - - -/datum/dance_transform - var/x_offset - var/y_offset - var/layer - var/dir - var/open_position = FALSE - var/list/turn_offsets - - New(mob/M, turn_offsets) - . = ..() - src.x_offset = 0 - src.y_offset = 0 - src.dir = M.dir - src.turn_offsets = turn_offsets - - proc/travel(mob/M, dance_dir, mob/lead, distance) - var/angle = dir_to_angle(M.dir) - switch(dance_dir) - if(DANCE_TRAVEL_FORWARD) - ; //noop - if(DANCE_TRAVEL_RIGHT) - angle += 90 - if(DANCE_TRAVEL_LEFT) - angle += -90 - if(DANCE_TRAVEL_BACK) - angle += 180 - if(DANCE_TRAVEL_FORWARD) - ; //noop - if(DANCE_TRAVEL_AWAY) - angle += 180 - - if(M != lead) // follow - if( (dance_dir != DANCE_TRAVEL_TOWARD) && (dance_dir != DANCE_TRAVEL_AWAY)) - angle += 180 - - src.x_offset = (distance*sin(angle)) - src.y_offset = (distance*cos(angle)) - - proc/do_turn(mob/M, mob/lead, angle) - src.dir = turn(M.dir,angle) - if(M != lead) // follow - M.layer = lead.layer - if(dir & (SOUTH | EAST)) - M.layer -= 0.1 - else - M.layer += 0.1 - - if(length(src.turn_offsets)) - src.x_offset = src.turn_offsets["[src.dir]"][1] - src.y_offset = src.turn_offsets["[src.dir]"][2] - - -/datum/statusEffect/dancing - id = "dancing" - name = "Dancing" - maxDuration = 1 MINUTE - effect_quality = STATUS_QUALITY_NEUTRAL - - onRemove() - . = ..() - if(ismob(owner)) - var/mob/M = owner - animate(M, time=2 SECOND, pixel_x=0, pixel_y=0, easing = QUAD_EASING | EASE_OUT) - -#undef BEAT_COUNT -#undef DANCE_TRAVEL_FORWARD -#undef DANCE_TRAVEL_RIGHT -#undef DANCE_TRAVEL_LEFT -#undef DANCE_TRAVEL_BACK -#undef DANCE_TRAVEL_TOWARD -#undef DANCE_TRAVEL_AWAY diff --git a/code/WorkInProgress/GerhazoStuff.dm b/code/WorkInProgress/GerhazoStuff.dm index 2622d9c683566..2c7db4c640112 100644 --- a/code/WorkInProgress/GerhazoStuff.dm +++ b/code/WorkInProgress/GerhazoStuff.dm @@ -260,7 +260,7 @@ dissipation_rate = 5 damage_type = D_KINETIC hit_type = DAMAGE_BLUNT - impact_image_state = "bhole" + impact_image_state = "bullethole" implanted = null casing = null diff --git a/code/WorkInProgress/HaineWhatever.dm b/code/WorkInProgress/HaineWhatever.dm index 6a19c1562b499..641198b6edaf6 100644 --- a/code/WorkInProgress/HaineWhatever.dm +++ b/code/WorkInProgress/HaineWhatever.dm @@ -1480,11 +1480,6 @@ TYPEINFO(/obj/item/gun/bling_blaster) var/num2 = num2hex(hex2num(hexnum) - 554040) */ -/turf/simulated/tempstuff - name = "floor" - icon = 'icons/misc/HaineSpriteDump.dmi' - icon_state = "gooberything_small" - /obj/item/blessed_ball_bearing name = "blessed ball bearing" // fill claymores with them for all your nazi-vampire-protection needs desc = "How can you tell it's blessed? Well, just look at it! It's so obvious!" diff --git a/code/WorkInProgress/Hydrothings.dm b/code/WorkInProgress/Hydrothings.dm index 7b4820cb70c3b..ff28c0d36379a 100644 --- a/code/WorkInProgress/Hydrothings.dm +++ b/code/WorkInProgress/Hydrothings.dm @@ -495,13 +495,6 @@ logTheThing(LOG_COMBAT, affected_mob, "was gibbed by the disease [name] at [log_loc(affected_mob)].") affected_mob.gib() -/obj/item/reagent_containers/food/snacks/candy/butterscotch - name = "butterscotch candy" - desc = "It's one of those old timey butterscotch candies like your grampa used to have." - real_name = "butterscotch" - icon_state = "butterscotch" - food_effects = list("food_energized") - /obj/machinery/floorflusher/bathtub name = "bathtub" desc = "Now, that looks cosy!" diff --git a/code/WorkInProgress/KatzStuff.dm b/code/WorkInProgress/KatzStuff.dm index 8b6d2518188f2..395c3823e8c45 100644 --- a/code/WorkInProgress/KatzStuff.dm +++ b/code/WorkInProgress/KatzStuff.dm @@ -27,7 +27,7 @@ damage = 50 damage_type = D_KINETIC hit_type = DAMAGE_CUT - impact_image_state = "bhole-small" + impact_image_state = "bullethole-small" implanted = /obj/item/implant/projectile/bullet_308 casing = /obj/item/casing/rifle diff --git a/code/WorkInProgress/MarqStuff.dm b/code/WorkInProgress/MarqStuff.dm index dfb9b3d61cd53..b0f6367cfa11b 100644 --- a/code/WorkInProgress/MarqStuff.dm +++ b/code/WorkInProgress/MarqStuff.dm @@ -573,7 +573,7 @@ damage_type = D_KINETIC hit_type = DAMAGE_STAB implanted = null - impact_image_state = "bhole" + impact_image_state = "bullethole" icon_state = "arrow" on_hit(var/atom/A, angle, var/obj/projectile/P) @@ -758,6 +758,8 @@ if (aim) spread_angle = (1 - aim.progress/max_draw) * spread_base aim.state = ACTIONSTATE_FINISH + if (!aim.progress) + return ..() alter_projectile(obj/projectile/P) diff --git a/code/WorkInProgress/apiFallbackRoutes.dm b/code/WorkInProgress/apiFallbackRoutes.dm deleted file mode 100644 index 371bdedd9856b..0000000000000 --- a/code/WorkInProgress/apiFallbackRoutes.dm +++ /dev/null @@ -1,256 +0,0 @@ -/* - These are fallback procs for all API functions that require it - This means that if the central server dies, this can pick up and do it's thang - Currently only bans exist here -*/ - -/proc/checkBanApiFallback(data) - var/database/db = new("data/localBans.db") - - //Construct sql field search - var/searchSql = "" - var/list/prepared = new() - for (var/key in data) - if (key == "ckey" || key == "ip" || key == "compID") - var/param = data[key] - if (param) - searchSql += "[key] = ? OR " - prepared.Add(param) - - searchSql = copytext(searchSql, 1, -4) //Remove the trailing ' OR ' - var/sql = "SELECT * FROM bans WHERE removed = 0 AND ([searchSql]) ORDER BY id DESC" - - var/list/queryList = new() - queryList.Add(sql) - queryList += prepared - var/database/query/q = new(queryList) - - var/list/returnData = new() - - if(!q.Execute(db)) - returnData["error"] = "Unable to query database: \[[q.Error()]\] [q.ErrorMsg()]" - return returnData - - var/count = 1 - while(q.NextRow()) - var/list/current = new() - var/list/row = q.GetRowData() - for (var/key in row) - current[key] = row[key] - returnData["[count]"] = current - count++ - - if (count == 1) //None found, tell the bans proc thus. yes i know 1 is weird for none, shush - returnData["none"] = "No results found" - return returnData - - return returnData - - -/proc/clearTempBansApiFallback() - var/database/db = new("data/localBans.db") - - var/cminutes = (world.realtime / 10) / 60 - var/sql = "UPDATE bans SET removed = 1 WHERE (timestamp > 0 AND ? >= timestamp) AND removed = 0" - - var/list/queryList = new() - queryList.Add(sql) - queryList.Add(cminutes) - var/database/query/q = new(queryList) - - var/list/returnData = new() - - if(!q.Execute(db)) - returnData["error"] = "Unable to query database: \[[q.Error()]\] [q.ErrorMsg()]" - return returnData - - var/count = q.RowsAffected() - - returnData["cleared"] = count - return returnData - - -/proc/addBanApiFallback(data) - var/database/db = new("data/localBans.db") - - //Check we dont already have this ban - var/sql = "SELECT * FROM bans WHERE ckey = ? AND compID = ? AND ip = ? AND removed = 0" - var/list/prepared = new() - prepared.Add(data["ckey"]) - prepared.Add(data["compID"]) - prepared.Add(data["ip"]) - - var/list/queryList = new() - queryList.Add(sql) - queryList += prepared - var/database/query/q = new(queryList) - - var/list/returnData = new() - - if(!q.Execute(db)) - returnData["error"] = "Unable to query database: \[[q.Error()]\] [q.ErrorMsg()]" - return returnData - - var/count = 0 - while(q.NextRow()) - count++ - break - - if (count) - returnData["showAdmins"] = 1 - returnData["error"] = "Ban already exists for: Ckey: [data["ckey"]], compID: [data["compID"]] and IP: [data["ip"]]" - return returnData - - //Add the ban - var/sql2 = "INSERT INTO bans (ckey, compID, ip, reason, akey, timestamp, previous, chain) VALUES (?, ?, ?, ?, ?, ?, ?, ?)" - var/list/prepared2 = new() - prepared2.Add(data["ckey"]) - prepared2.Add(data["compID"]) - prepared2.Add(data["ip"]) - prepared2.Add(data["reason"]) - prepared2.Add(data["akey"]) - prepared2.Add(data["timestamp"]) - prepared2.Add(data["previous"]) - prepared2.Add(data["chain"]) - - var/list/queryList2 = new() - queryList2.Add(sql2) - queryList2 += prepared2 - var/database/query/q2 = new(queryList2) - - if(!q2.Execute(db)) - returnData["error"] = "Unable to query database: \[[q.Error()]\] [q.ErrorMsg()]" - return returnData - - returnData["1"] = data - data["type"] = "add" - writeToBanLog(data) - return returnData - - -/proc/editBanApiFallback(data) - var/database/db = new("data/localBans.db") - - //Add the ban - var/sql = "UPDATE bans SET ckey = ?, compID = ?, ip = ?, reason = ?, akey = ?, timestamp = ? WHERE id = ?" - var/list/prepared = new() - prepared.Add(data["ckey"]) - prepared.Add(data["compID"]) - prepared.Add(data["ip"]) - prepared.Add(data["reason"]) - prepared.Add(data["akey"]) - prepared.Add(data["timestamp"]) - prepared.Add(data["id"]) - - var/list/queryList = new() - queryList.Add(sql) - queryList += prepared - var/database/query/q = new(queryList) - - var/list/returnData = new() - - if(!q.Execute(db)) - returnData["error"] = "Unable to query database: \[[q.Error()]\] [q.ErrorMsg()]" - return returnData - - if (q.RowsAffected() == 0) //Oh no nothing was changed that's PRETTY FUCKIN WEIRD - returnData["error"] = "Edit ban changed nothing for: Ckey: [data["ckey"]], compID: [data["compID"]] and IP: [data["ip"]]" - return returnData - - returnData["1"] = data - data["type"] = "edit" - writeToBanLog(data) - return returnData - - -/proc/deleteBanApiFallback(data) - var/database/db = new("data/localBans.db") - - //Add the ban - var/sql = "UPDATE bans SET removed = 1 WHERE id = ?" - var/list/prepared = new() - prepared.Add(data["id"]) - - var/list/queryList = new() - queryList.Add(sql) - queryList += prepared - var/database/query/q = new(queryList) - - var/list/returnData = new() - - if(!q.Execute(db)) - returnData["error"] = "Unable to query database: \[[q.Error()]\] [q.ErrorMsg()]" - return returnData - - if (q.RowsAffected() == 0) //It wasn't removed that's also pretty fuckin weird - returnData["error"] = "Delete ban removed nothing for ID: [data["id"]]" - return returnData - - returnData["1"] = data - data["type"] = "delete" - writeToBanLog(data) - return returnData - - -//Internal proc for the ban panel to search through bans -/proc/getBanApiFallback(searchCol="all", search="", order="DESC", offset=0, limit=10, sort="id", removed=0) - - var/database/db = new("data/localBans.db") - - //I COULD do field validation here but I really cannot be fucked - - //Get the matched rows - var/list/prepArray = new() - var/sql = "SELECT * FROM bans WHERE removed = [removed]" - if (search && length(search) > 0) - sql += " AND (" - if (searchCol == "all") - var/val = search - sql += "ckey LIKE ? OR akey LIKE ? OR compID LIKE ? OR ip LIKE ? OR reason LIKE ?" - var/pSearch = val+"%" - prepArray.Add(pSearch, pSearch, pSearch, pSearch, pSearch) //this is so dumb - else - sql += searchCol + " LIKE ?" - prepArray.Add(search+"%") - sql += ")" - - sql += " ORDER BY "+sort+" "+order+" LIMIT "+limit - var/list/queryList = new() - queryList.Add(sql) - queryList += prepArray - var/database/query/q = new(queryList) - - if(!q.Execute(db)) - logTheThing(LOG_DEBUG, null, "<b>Local Callback Error</b> - callback failed in <b>getBanApiFallback</b> with message: <b>Unable to query database</b>: \[[q.Error()]\] [q.ErrorMsg()]") - logTheThing(LOG_DIARY, null, "Local Callback Error - callback failed in getBanApiFallback with message: Unable to query database: \[[q.Error()]\] [q.ErrorMsg()]", "debug") - return 0 - - //We gotta put all our rows in a list so we can count them for pagination - var/list/returnData = new() - var/list/allRows = new() - while(q.NextRow()) - var/list/row = q.GetRowData() - allRows += list(row) - - var/totalBans = length(allRows) - - //Now we get the subset of the returned rows and format them correctly - var/list/requested = allRows.Copy(offset, limit) - var/count = 1 - for (var/key1 in requested) - var/list/current = new() - var/list/row = requested[count] - for (var/key2 in row) - current[key2] = row[key2] - returnData["[count]"] = current - count++ - - returnData["total"] = totalBans - returnData["cminutes"] = getWorldMins() - returnData["callback"] = "updateBans" - - return json_encode(returnData) - - -/proc/uploadLocalBans(F as file) - fcopy(F, "data/localBans.db") diff --git a/code/WorkInProgress/artemis/GeneratePlanets.dm b/code/WorkInProgress/artemis/GeneratePlanets.dm index 00dd760988e4b..494b37c0cecf9 100644 --- a/code/WorkInProgress/artemis/GeneratePlanets.dm +++ b/code/WorkInProgress/artemis/GeneratePlanets.dm @@ -29,7 +29,7 @@ var/list/planet_seeds = list() var/num_to_place = PLANET_NUMPREFABS + GALAXY.Rand.xor_rand(0, PLANET_NUMPREFABSEXTRA) for (var/n = 1, n <= num_to_place, n++) game_start_countdown?.update_status("Setting up planet level...\n(Prefab [n]/[num_to_place])") - var/datum/mapPrefab/planet/M = pick_map_prefab(/datum/mapPrefab/planet) + var/datum/mapPrefab/planet/M = pick_map_prefab(/datum/mapPrefab/planet, wanted_tags_any=PREFAB_PLANET) if (M) var/maxX = (world.maxx - M.prefabSizeX - PLANET_MAPBORDER) var/maxY = (world.maxy - M.prefabSizeY - PLANET_MAPBORDER) @@ -253,6 +253,9 @@ var/global/datum/planetManager/PLANET_LOCATIONS = new /datum/planetManager() else if(istype(generator, /datum/map_generator/forest_generator) && prob(95)) planet_area.area_parallax_render_source_group = new /datum/parallax_render_source_group/planet/forest() + else if(istype(generator, /datum/map_generator/lavamoon_generator) && prob(95)) + planet_area.area_parallax_render_source_group = new /datum/parallax_render_source_group/planet/lava_moon() + // Occlude overlays on edges if(planet_area.area_parallax_render_source_group) planet_area.no_prefab_ref.area_parallax_render_source_group = planet_area.area_parallax_render_source_group @@ -293,7 +296,7 @@ var/global/datum/planetManager/PLANET_LOCATIONS = new /datum/planetManager() var/failsafe = 800 //Make it interesting, slap some prefabs on that thing for (var/n = 1, n <= prefabs_to_place && failsafe-- > 0) - var/datum/mapPrefab/planet/P = pick_map_prefab(/datum/mapPrefab/planet) + var/datum/mapPrefab/planet/P = pick_map_prefab(/datum/mapPrefab/planet, wanted_tags_any=PREFAB_PLANET) if (P) var/maxX = (region.bottom_left.x + region.width - P.prefabSizeX - AST_MAPBORDER) var/maxY = (region.bottom_left.y + region.height - P.prefabSizeY - AST_MAPBORDER) diff --git a/code/WorkInProgress/blueprints.dm b/code/WorkInProgress/blueprints.dm index be38fa1e386f2..7f1d6b2b7149a 100644 --- a/code/WorkInProgress/blueprints.dm +++ b/code/WorkInProgress/blueprints.dm @@ -541,7 +541,7 @@ /obj/machinery/portable_atmospherics, \ /obj/machinery/ai_status_display, \ /obj/securearea, \ - /obj/submachine/mixer, \ + /obj/machinery/mixer, \ /obj/submachine/foodprocessor, \ \ ) @@ -555,7 +555,7 @@ ) #define WHITELIST_TURFS list(/turf/simulated) -#define BLACKLIST_TURFS list(/turf/simulated/floor/specialroom/sea_elevator_shaft) +#define BLACKLIST_TURFS list(/turf/simulated/floor/specialroom/sea_elevator_shaft, /turf/simulated/shuttle, /turf/simulated/floor/shuttle, /turf/simulated/wall/auto/shuttle) /datum/abcu_blueprint var/cost_metal = 0 @@ -992,6 +992,7 @@ proc/delete_abcu_blueprint(mob/user, var/browse_all_users = FALSE) return dropped(mob/user as mob) + . = ..() removeOverlays() selecting = 0 qdel(corner1img) diff --git a/code/WorkInProgress/cabinet.dm b/code/WorkInProgress/cabinet.dm index ec0a7b4c818ca..3cf1501075c48 100644 --- a/code/WorkInProgress/cabinet.dm +++ b/code/WorkInProgress/cabinet.dm @@ -262,12 +262,12 @@ /obj/cabinet/taffy // for psychiatrists to prescribe New() - slots["1"] = new /obj/item/reagent_containers/food/snacks/candy/taffy/cherry(src) - slots["2"] = new /obj/item/reagent_containers/food/snacks/candy/taffy/watermelon(src) - slots["3"] = new /obj/item/reagent_containers/food/snacks/candy/taffy/blueraspberry(src) - slots["4"] = new /obj/item/reagent_containers/food/snacks/candy/taffy/cherry(src) - slots["5"] = new /obj/item/reagent_containers/food/snacks/candy/taffy/watermelon(src) - slots["6"] = new /obj/item/reagent_containers/food/snacks/candy/taffy/blueraspberry(src) + slots["1"] = new /obj/item/reagent_containers/food/snacks/candy/wrapped_candy/taffy/cherry(src) + slots["2"] = new /obj/item/reagent_containers/food/snacks/candy/wrapped_candy/taffy/watermelon(src) + slots["3"] = new /obj/item/reagent_containers/food/snacks/candy/wrapped_candy/taffy/blueraspberry(src) + slots["4"] = new /obj/item/reagent_containers/food/snacks/candy/wrapped_candy/taffy/cherry(src) + slots["5"] = new /obj/item/reagent_containers/food/snacks/candy/wrapped_candy/taffy/watermelon(src) + slots["6"] = new /obj/item/reagent_containers/food/snacks/candy/wrapped_candy/taffy/blueraspberry(src) rebuildOverlays() return ..() diff --git a/code/WorkInProgress/construction/tools.dm b/code/WorkInProgress/construction/tools.dm index ef04bf6aef38d..b74319f2e3232 100644 --- a/code/WorkInProgress/construction/tools.dm +++ b/code/WorkInProgress/construction/tools.dm @@ -610,6 +610,8 @@ TYPEINFO(/obj/item/room_planner) T = get_turf(T) if (!T || !mode) return 0 + if (GET_DIST(T, user) > 3) + return 0 if (mode == "restore original") //For those who want to undo the carnage if (istype(T, /turf/simulated/floor)) diff --git a/code/WorkInProgress/factionReputation.dm b/code/WorkInProgress/factionReputation.dm index 1bdd2729480f8..ccd053f86ab8d 100644 --- a/code/WorkInProgress/factionReputation.dm +++ b/code/WorkInProgress/factionReputation.dm @@ -159,9 +159,9 @@ proc/get_reputation(var/client/client = null, var/include_modifiers = 1) var/modifiers = get_modifiers(client) - if(!client || !client.cloud_available()) + if(!client) return default_rep + (include_modifiers ? modifiers : 0) - var/val = client.cloud_get("rep_[lowertext(id)]") + var/val = client.player.cloudSaves.getData("rep_[lowertext(id)]") if(val == null) set_reputation(client, default_rep, 1) val = default_rep @@ -171,10 +171,10 @@ return val proc/set_reputation(var/client/client = null, var/amt = 0, var/absolute = 0) - if(!client || !client.cloud_available()) + if(!client) return 0 var/curr = (absolute ? 0 : get_reputation(client, 0)) - client.cloud_put("rep_[lowertext(id)]", (absolute ? amt : (curr + amt))) + client.player.cloudSaves.putData("rep_[lowertext(id)]", (absolute ? amt : (curr + amt))) return 0 proc/get_Nanotrasen_rank_string(var/client = null, var/include_modifiers = 1) diff --git a/code/WorkInProgress/flourish.dm b/code/WorkInProgress/flourish.dm index c43cb99d01d1f..33456be85ca84 100644 --- a/code/WorkInProgress/flourish.dm +++ b/code/WorkInProgress/flourish.dm @@ -172,7 +172,7 @@ var/list/possible_lost_items = list( /obj/item/reagent_containers/food/snacks/onionchips, /obj/item/reagent_containers/food/snacks/chips, /obj/item/reagent_containers/food/snacks/candy/nougat, - /obj/item/reagent_containers/food/snacks/candy/wrapped_pbcup, + /obj/item/reagent_containers/food/snacks/candy/wrapped_candy/pb_cup, /obj/item/kitchen/peach_rings, /obj/item/reagent_containers/food/snacks/cookie/dog, /obj/item/toy/plush/small/bee, diff --git a/code/WorkInProgress/racing.dm b/code/WorkInProgress/racing.dm index 2291f08ba16a7..094be777c047c 100644 --- a/code/WorkInProgress/racing.dm +++ b/code/WorkInProgress/racing.dm @@ -38,7 +38,8 @@ /obj/racing_powerup_spawner name = "PowerUpSpawner" - icon = 'icons/Testing/atmos_testing.dmi' + icon = 'icons/map-editing/mapping_helpers.dmi' + icon_state = "spawner" anchored = ANCHORED density = 0 opacity = 0 diff --git a/code/WorkInProgress/tarmStuff.dm b/code/WorkInProgress/tarmStuff.dm index 70e5babb2fbcf..8e621067b0d51 100644 --- a/code/WorkInProgress/tarmStuff.dm +++ b/code/WorkInProgress/tarmStuff.dm @@ -45,7 +45,7 @@ shot_sound = 'sound/weapons/optio.ogg' implanted = null armor_ignored = 0.66 - impact_image_state = "bhole" + impact_image_state = "bullethole" shot_volume = 66 window_pass = 1 @@ -137,7 +137,7 @@ casing = /obj/item/casing/cannon damage = 125 implanted = /obj/item/implant/projectile/rakshasa - impact_image_state = "bhole-large" + impact_image_state = "bullethole-large" goes_through_walls = 1 pierces = -1 @@ -238,7 +238,7 @@ shot_volume = 66 dissipation_delay = 10 dissipation_rate = 5 - impact_image_state = "bhole-small" + impact_image_state = "bullethole-small" small shot_sound = 'sound/weapons/9x19NATO.ogg' @@ -351,7 +351,7 @@ precalculated = 0 shot_volume = 100 shot_sound = 'sound/weapons/gyrojet.ogg' - impact_image_state = "bhole-small" + impact_image_state = "bullethole-small" on_launch(obj/projectile/O) O.internal_speed = projectile_speed @@ -413,7 +413,7 @@ dissipation_delay = 5 dissipation_rate = 5 implanted = /obj/item/implant/projectile/bullet_50 - impact_image_state = "bhole-large" + impact_image_state = "bullethole-large" casing = /obj/item/casing/deagle shot_sound = 'sound/weapons/deagle.ogg' @@ -455,7 +455,7 @@ dissipation_delay = 30 cost = 1 shot_sound = 'sound/weapons/rocket.ogg' - impact_image_state = "bhole-large" + impact_image_state = "bullethole-large" implanted = null on_hit(atom/hit) diff --git a/code/area.dm b/code/area.dm index 3e86c8b3bba93..52b16a05e8660 100644 --- a/code/area.dm +++ b/code/area.dm @@ -1687,18 +1687,10 @@ ABSTRACT_TYPE(/area/sim) name = "Vspace area 1" icon_state = "simA1" -/area/sim/a1entry - name = "Vspace area 1 Entry" - icon_state = "simA1E" - /area/sim/area2 name = "Vspace area 2" icon_state = "simA2" -/area/sim/a2entry - name = "Vspace area 2 Entry" - icon_state = "simA2E" - /area/sim/bball name = "B-Ball Court" icon_state="vr" @@ -2899,6 +2891,11 @@ ABSTRACT_TYPE(/area/station/medical) name = "Medbay Operating Theater" icon_state = "medbay_surgery" +/area/station/medical/medbay/reception + name = "Medbay Reception" + icon_state = "medbooth" + sound_environment = 3 + /area/station/medical/medbay/surgery/storage name = "Medical Storage" icon_state = "blue" @@ -2939,13 +2936,13 @@ ABSTRACT_TYPE(/area/station/medical) name = "Morgue" icon_state = "morgue" sound_environment = 3 - station_map_colour = MAPC_MEDICAL + station_map_colour = MAPC_MORGUE /area/station/medical/crematorium name = "Crematorium" icon_state = "morgue" sound_environment = 3 - station_map_colour = MAPC_MEDICAL + station_map_colour = MAPC_MORGUE /area/station/medical/medbooth name = "Medical Booth" diff --git a/code/client.dm b/code/client.dm index f859337c62419..2fdd7d6e88afb 100644 --- a/code/client.dm +++ b/code/client.dm @@ -299,9 +299,9 @@ return Z_LOG_DEBUG("Client/New", "[src.ckey] - Checking bans") - var/isbanned = checkBan(src.ckey, src.computer_id, src.address, record = 1) + var/list/checkBan = bansHandler.check(src.ckey, src.computer_id, src.address) - if (isbanned) + if (checkBan) Z_LOG_DEBUG("Client/New", "[src.ckey] - Banned!!") logTheThing(LOG_DIARY, null, "Failed Login: [constructTarget(src,"diary")] - Banned", "access") if (announce_banlogin) message_admins(SPAN_INTERNAL("Failed Login: <a href='?src=%admin_ref%;action=notes;target=[src.ckey]'>[src]</a> - Banned (IP: [src.address], ID: [src.computer_id])")) @@ -319,7 +319,7 @@ </head> <body> <h1>You have been banned.</h1> - <span class='banreason'>"Reason: [isbanned].")]</span><br> + <span class='banreason'>Reason: [checkBan["message"]]</span><br> If you believe you were unjustly banned, head to <a target="_blank" href=\"https://forum.ss13.co\">the forums</a> and post an appeal.<br> <b>If you believe this ban was not meant for you then please appeal regardless of what the ban message or length says!</b> </body> @@ -338,6 +338,10 @@ SPAWN(-1) src.chatOutput.start() + // Record a login, sets player.id, which is used by almost every future API call for a player + // So we need to do this early, and outside of a spawn + src.player.record_login() + //admins and mentors can enter a server through player caps. if (init_admin()) boutput(src, "<span class='ooc adminooc'>You are an admin! Time for crime.</span>") @@ -374,7 +378,6 @@ var/image/I = globalImages[key] src << I - Z_LOG_DEBUG("Client/New", "[src.ckey] - ok mostly done") SPAWN(0) @@ -459,32 +462,25 @@ ircbot.event("login", src.key) //Cloud data -#ifdef LIVE_SERVER - if (cdn) - if(!cloud_available()) - src.player.cloud_fetch() -#else - // dev server, uses local save file to simulate clouddata - if (src.player.cloud_fetch()) // might needlessly reload, but whatever. -#endif - if(cloud_available()) - src.antag_tokens = src.player?.get_antag_tokens() - src.load_persistent_bank() - var/decoded = cloud_get("audio_volume") - if(decoded) - var/list/old_volumes = volumes.Copy() - volumes = json_decode(decoded) - for(var/i = length(volumes) + 1; i <= length(old_volumes); i++) // default values for channels not in the save - if(i - 1 == VOLUME_CHANNEL_EMOTE) // emote channel defaults to game volume - volumes += src.getRealVolume(VOLUME_CHANNEL_GAME) - else - volumes += old_volumes[i] + if (!src.player.cloudSaves.loaded) + src.player.cloudSaves.fetch() + src.antag_tokens = src.player?.get_antag_tokens() + src.load_persistent_bank() + var/decoded = src.player.cloudSaves.getData("audio_volume") + if(decoded) + var/list/old_volumes = volumes.Copy() + volumes = json_decode(decoded) + for(var/i = length(volumes) + 1; i <= length(old_volumes); i++) // default values for channels not in the save + if(i - 1 == VOLUME_CHANNEL_EMOTE) // emote channel defaults to game volume + volumes += src.getRealVolume(VOLUME_CHANNEL_GAME) + else + volumes += old_volumes[i] - // Show login notice, if one exists - src.show_login_notice() + // Show login notice, if one exists + src.show_login_notice() - // Set screen saturation - src.set_saturation(text2num(cloud_get("saturation"))) + // Set screen saturation + src.set_saturation(text2num(src.player.cloudSaves.getData("saturation"))) src.mob.reset_keymap() @@ -720,25 +716,16 @@ /client/proc/load_persistent_bank() - persistent_bank_valid = cloud_available() - - persistent_bank = cloud_get("persistent_bank") ? text2num(cloud_get("persistent_bank")) : FALSE + persistent_bank_valid = TRUE - if(!persistent_bank && cloud_available()) - logTheThing(LOG_DEBUG, src, "first cloud_get failed but cloud is available!") - persistent_bank += text2num( cloud_get("persistent_bank") || "0" ) - var/failed = cloud_put( "persistent_bank", persistent_bank ) - if(failed) - logTheThing(LOG_DEBUG, src, "Failed to store persistent cash in the ~cloud~: [failed]") - - persistent_bank_item = cloud_get("persistent_bank_item") - - if(!persistent_bank_item && cloud_available()) - persistent_bank_item = cloud_get("persistent_bank_item") - var/failed = cloud_put( "persistent_bank_item", persistent_bank_item ) - if(failed) - logTheThing(LOG_DEBUG, src, "Failed to store persistent bank item in the ~cloud~: [failed]") +#ifdef BONUS_POINTS + persistent_bank = 99999999 +#else + var/cPersistentBank = src.player.cloudSaves.getData("persistent_bank") + persistent_bank = cPersistentBank ? text2num(cPersistentBank) : FALSE +#endif + persistent_bank_item = src.player.cloudSaves.getData("persistent_bank_item") //MBC TODO : PERSISTENTBANK_VERSION_MIN, MAX FOR BANKING SO WE CAN WIPE AWAY EVERYONE'S HARD WORK WITH A SINGLE LINE OF CODE CHANGE // defines are already set, just do the checks here ok @@ -747,17 +734,14 @@ /client/proc/set_last_purchase(datum/bank_purchaseable/purchase) if (!purchase || purchase == 0 || !purchase.carries_over) persistent_bank_item = "none" - if( cloud_available() ) - cloud_put( "persistent_bank_item", "none" ) + src.player.cloudSaves.putData( "persistent_bank_item", "none" ) else persistent_bank_item = purchase.name - if( cloud_available() ) - cloud_put( "persistent_bank_item", persistent_bank_item ) + src.player.cloudSaves.putData( "persistent_bank_item", persistent_bank_item ) /client/proc/set_persistent_bank(amt as num) persistent_bank = amt - if( cloud_available() ) - cloud_put( "persistent_bank", amt ) + src.player.cloudSaves.putData( "persistent_bank", amt ) /* var/savefile/PB = LoadSavefile("data/PersistentBank.sav") if (!PB) return @@ -770,15 +754,14 @@ load_persistent_bank() if(!persistent_bank_valid) return - var/list/earnings = list((ckey) = list("persistent_bank" = list("command" = "add", "value" = amt))) - cloud_put_bulk(json_encode(earnings)) persistent_bank += amt + src.player.cloudSaves.putData("persistent_bank", persistent_bank) /client/proc/sub_from_bank(datum/bank_purchaseable/purchase) add_to_bank(-purchase.cost) /client/proc/bank_can_afford(amt as num) - player.cloud_fetch_data_only() + player.cloudSaves.fetch() load_persistent_bank() var/new_bank_value = persistent_bank - amt if (new_bank_value >= 0) @@ -830,18 +813,19 @@ var/global/curr_day = null var/cid = computer_id SPAWN(0) if (geoip_check(addr)) - var/addData[] = new() - addData["ckey"] = ck - addData["compID"] = cid - addData["ip"] = addr - addData["reason"] = "Ban evader: computer ID collision." // haha get fucked - addData["akey"] = "Marquesas" - addData["mins"] = 0 var/slt = rand(600, 3000) logTheThing(LOG_ADMIN, null, "Evasion geoip autoban triggered on [key], will execute in [slt / 10] seconds.") message_admins("Autobanning evader [key] in [slt / 10] seconds.") sleep(slt) - addBan(addData) + bansHandler.add( + "bot", + null, + ck, + cid, + addr, + "Ban evader: computer ID collision.", + FALSE + ) /proc/geoip_check(var/addr) set background = 1 @@ -1168,77 +1152,11 @@ var/global/curr_day = null return 0 return (src.ckey in muted_keys) && muted_keys[src.ckey] -/// Sets a cloud key value pair and sends it to goonhub -/client/proc/cloud_put(key, value) - return src.player.cloud_put(key, value) - -/// Returns some cloud data on the client -/client/proc/cloud_get(key) - return src.player.cloud_get(key) - -/// Returns 1 if you can set or retrieve cloud data on the client -/client/proc/cloud_available() - return src.player.cloud_available() - /client/proc/message_one_admin(source, message) if(!src.holder) return boutput(src, replacetext(replacetext(message, "%admin_ref%", "\ref[src.holder]"), "%client_ref%", "\ref[src]")) -/proc/add_test_screen_thing() - var/client/C = input("For who", "For who", null) in clients - var/wavelength_shift = input("Shift wavelength bounds by <x> nm, should be in the range of -370 to 370", "Wavelength shift", 0) as num - if (wavelength_shift < -370 || wavelength_shift > 370) - boutput(usr, SPAN_ADMIN("Invalid value.")) - return - var/s_r = 0 - var/s_g = 0 - var/s_b = 0 - - // total range: 380 - 750 (range: 370nm) - // red: 570 - 750 (range: 180nm) - if (wavelength_shift < 0) - s_r = min(-wavelength_shift / 180 * 255, 255) - else if (wavelength_shift > 190) - s_r = min((wavelength_shift - 190) / 180 * 255, 255) - // green: 490 - 620 (range: 130nm) - if (wavelength_shift < -130) - s_g = min(-(wavelength_shift + 130) / 130 * 255, 255) - else if (wavelength_shift > 110) - s_g = min((wavelength_shift - 110) / 130 * 255, 255) - // blue: 380 - 500 (range: 120nm) - if (wavelength_shift < -250) - s_b = min(-(wavelength_shift + 250) / 120 * 255, 255) - else if (wavelength_shift > 0) - s_b = min(wavelength_shift / 120 * 255, 255) - - var/subtr_color = rgb(s_r, s_g, s_b) - - var/si_r = clamp(input("Red spectrum intensity (0-1)", "Intensity", 1.0) as num, 0, 1) - var/si_g = clamp(input("Green spectrum intensity (0-1)", "Intensity", 1.0) as num, 0, 1) - var/si_b = clamp(input("Blue spectrum intensity (0-1)", "Intensity", 1.0) as num, 0, 1) - - var/multip_color = rgb(si_r * 255, si_g * 255, si_b * 255) - - var/atom/movable/screen/S = new - S.icon = 'icons/mob/whiteview.dmi' - S.blend_mode = BLEND_SUBTRACT - S.color = subtr_color - S.layer = HUD_LAYER - 0.2 - S.screen_loc = "SOUTH,WEST" - S.mouse_opacity = 0 - - C.screen += S - - var/atom/movable/screen/M = new - M.icon = 'icons/mob/whiteview.dmi' - M.blend_mode = BLEND_MULTIPLY - M.color = multip_color - M.layer = HUD_LAYER - 0.1 - M.screen_loc = "SOUTH,WEST" - M.mouse_opacity = 0 - - C.screen += M /client/verb/apply_depth_shadow() set hidden = 1 @@ -1274,7 +1192,7 @@ var/global/curr_day = null var/s = input("Enter a saturation % from 50-150. Default is 100.", "Saturation %", 100) as num s = clamp(s, 50, 150) / 100 src.set_saturation(s) - src.cloud_put("saturation", s) + src.player.cloudSaves.putData("saturation", s) boutput(usr, SPAN_NOTICE("You have changed your game saturation to [s * 100]%.")) /client/proc/set_view_size(var/x, var/y) diff --git a/code/datum.dm b/code/datum.dm index 3c07b8a1cc12a..0958b50acdd27 100644 --- a/code/datum.dm +++ b/code/datum.dm @@ -2,8 +2,8 @@ TYPEINFO(/datum) var/admin_spawnable = TRUE #ifdef IMAGE_DEL_DEBUG -var/global/list/deletedImageData = new -var/global/list/deletedImageIconStates = new +var/global/list/deletedImageData = list() +var/global/list/deletedImageIconStates = list() /image/Del() deletedImageData.len++; @@ -14,7 +14,7 @@ var/global/list/deletedImageIconStates = new #endif #ifdef DELETE_QUEUE_DEBUG -var/global/list/deletedObjects = new +var/global/list/deletedObjects = list() /datum/Del() if(!("[src.type]" in deletedObjects)) diff --git a/code/datums/abilities/dancing.dm b/code/datums/abilities/dancing.dm new file mode 100644 index 0000000000000..3b539c8d76268 --- /dev/null +++ b/code/datums/abilities/dancing.dm @@ -0,0 +1,501 @@ +#define DANCE_TRAVEL_FORWARD 1 +#define DANCE_TRAVEL_RIGHT 2 +#define DANCE_TRAVEL_LEFT 3 +#define DANCE_TRAVEL_BACK 4 +#define DANCE_TRAVEL_TOWARD 5 +#define DANCE_TRAVEL_AWAY 6 + +#define BEAT_COUNT(_X) (AH.time_per_count * _X) + +/datum/abilityHolder/dancing + var/style = "Waltz" + var/list/styles = list("NC2S", "Waltz", "Salsa") + var/mob/lead + var/mob/follow + var/time_per_count = 3 + + onAttach(mob/to_whom) + . = ..() + src.addAbility(/datum/targetable/dancing/choose_style) + src.addAbility(/datum/targetable/dancing/rest) + src.addAbility(/datum/targetable/dancing/change_speed/faster) + src.addAbility(/datum/targetable/dancing/change_speed/slower) + for(var/move in childrentypesof(/datum/targetable/dancing/nc2s)) + src.addAbility(move) + for(var/move in childrentypesof(/datum/targetable/dancing/waltz)) + src.addAbility(move) + for(var/move in childrentypesof(/datum/targetable/dancing/salsa)) + src.addAbility(move) + + +/datum/targetable/dancing + icon = 'icons/mob/dance_ui.dmi' + var/style = null + var/list/static/follower_offsets = list("[NORTH]"=list(-4,-2), + "[EAST]"=list(-8,1), + "[SOUTH]"=list(4,2), + "[WEST]"=list(8,-1)) + + display_available() + var/datum/abilityHolder/dancing/AH = holder + var/mob/living/carbon/human/H = holder.owner + if(istype(H)) + var/obj/item/shoes = H.get_slot(SLOT_SHOES) + if(istype(shoes, /obj/item/clothing/shoes/dress_shoes/dance)) + . = TRUE + else + . = FALSE + else + . = TRUE + + if(. && style) + . = style == AH.style + + castcheck(atom/target) + . = ..() + if(.) + src.cooldown = 0 + + var/datum/abilityHolder/dancing/AH = holder + AH.lead = holder.owner + AH.follow = null + for (var/obj/item/grab/G in AH.lead?.equipped_list(check_for_magtractor = 0)) + if (G.affecting.buckled) continue + AH.follow = G.affecting + + var/reset_position = FALSE + if(AH.lead) + if((abs(AH.lead.pixel_x) + abs(AH.lead.pixel_y)) > 48) + reset_position = BEAT_COUNT(4) + else if(AH.follow && (abs(AH.lead.pixel_x - AH.follow.pixel_x ) + abs(AH.lead.pixel_y - AH.follow.pixel_y)) > 10 ) + reset_position = BEAT_COUNT(4) + if(reset_position) + animate(AH.lead, time=reset_position, pixel_x=0, pixel_y = 0) + + if(AH.follow && style) + if(reset_position || (AH.follow.dir != turn(AH.lead.dir,180)) || ((abs(AH.lead.pixel_x - AH.follow.pixel_x ) + abs(AH.lead.pixel_y - AH.follow.pixel_y))==0)) + reset_position = max(reset_position, BEAT_COUNT(1)) + AH.follow.dir = turn(AH.lead.dir,180) + AH.follow.layer = AH.lead.layer + if(AH.follow.dir & (SOUTH | EAST)) + AH.follow.layer -= 0.1 + else + AH.follow.layer += 0.1 + + animate(AH.follow, time=reset_position, pixel_x=follower_offsets["[AH.follow.dir]"][1], pixel_y = follower_offsets["[AH.follow.dir]"][2]) + + + cast(atom/target) + . = ..() + var/datum/abilityHolder/dancing/AH = holder + if(AH) + var/duration = src.cooldown + 5 SECONDS + AH.lead.setStatusMin("dancing", duration) + AH.follow?.setStatusMin("dancing", duration) + + choose_style + name = "Style" + icon_state = "style" + desc = "Choose from style of dance" + cooldown = 2 SECOND + + cast(atom/target) + . = ..() + var/datum/abilityHolder/dancing/AH = holder + var/dance_style = tgui_input_list(holder.owner, "Select style", "Dance Selection", AH.styles) + if(dance_style in AH.styles) + AH.style = dance_style + + rest + name = "Pause" + desc = "Maintain your current position" + icon_state = "pause" + cooldown = 10 SECOND + + cast(atom/target) + . = ..() + var/datum/abilityHolder/dancing/AH = holder + if(AH) + AH.lead.setStatusMin("dancing", 15 SECONDS) + AH.follow?.setStatusMin("dancing", 15 SECONDS) + + change_speed + var/time_change + + cast(atom/target) + var/datum/abilityHolder/dancing/AH = holder + if(AH) + AH.time_per_count += time_change + boutput(holder.owner,"[AH.time_per_count/10] seconds per count. ([60/(AH.time_per_count/10)] BPM)") + + faster + name = "Faster" + icon_state = "fast" + time_change = -0.5 + + slower + name = "Slower" + icon_state = "slow" + time_change = 0.5 + +/datum/targetable/dancing/nc2s + style = "NC2S" + + var/list/static/turn_offsets = list("[NORTH]"=list(4,-12), + "[EAST]"=list(-20,-1), + "[SOUTH]"=list(-4,12), + "[WEST]"=list(20,1), + ) + + proc/basic(var/mob/dancer, loop=1) + var/datum/abilityHolder/dancing/AH = holder + if(dancer==AH.lead) + src.cooldown += BEAT_COUNT(8) - BEAT_COUNT(0.5) + if(!dancer) + return + + var/datum/dance_transform/D = new(dancer, turn_offsets) + D.travel(dancer, DANCE_TRAVEL_AWAY, AH.lead, 3) + animate(dancer, time=BEAT_COUNT(1), pixel_x=D.x_offset, pixel_y=D.y_offset, loop=loop, easing = QUAD_EASING, flags=ANIMATION_RELATIVE) + D.travel(dancer, DANCE_TRAVEL_TOWARD, AH.lead, 3) + animate(time=BEAT_COUNT(1), pixel_x=D.x_offset, pixel_y=D.y_offset, easing = QUAD_EASING, flags=ANIMATION_RELATIVE) + D.travel(dancer, DANCE_TRAVEL_LEFT, AH.lead, 8) + animate(time=BEAT_COUNT(2), pixel_x=D.x_offset, pixel_y=D.y_offset, easing = QUAD_EASING | EASE_OUT, flags=ANIMATION_RELATIVE) + D.travel(dancer, DANCE_TRAVEL_AWAY, AH.lead, 3) + animate(time=BEAT_COUNT(1), pixel_x=D.x_offset, pixel_y=D.y_offset, easing = QUAD_EASING, flags=ANIMATION_RELATIVE) + D.travel(dancer, DANCE_TRAVEL_TOWARD, AH.lead, 3) + animate(time=BEAT_COUNT(1), pixel_x=D.x_offset, pixel_y=D.y_offset, easing = QUAD_EASING, flags=ANIMATION_RELATIVE) + D.travel(dancer, DANCE_TRAVEL_RIGHT, AH.lead, 8) + animate(time=BEAT_COUNT(2), pixel_x=D.x_offset, pixel_y=D.y_offset, easing = QUAD_EASING | EASE_OUT, flags=ANIMATION_RELATIVE) + + proc/closed_left_turn(var/mob/dancer, loop=1) + var/datum/abilityHolder/dancing/AH = holder + if(dancer==AH.lead) + src.cooldown += BEAT_COUNT(8) - BEAT_COUNT(0.5) + if(!dancer) + return + + var/datum/dance_transform/D = new(dancer, turn_offsets) + D.travel(dancer, DANCE_TRAVEL_AWAY, AH.lead, 3) + animate(dancer, time=BEAT_COUNT(1), pixel_x=D.x_offset, pixel_y=D.y_offset, loop=loop, easing = QUAD_EASING, flags=ANIMATION_RELATIVE) + D.travel(dancer, DANCE_TRAVEL_TOWARD, AH.lead, 3) + animate(time=BEAT_COUNT(1), pixel_x=D.x_offset, pixel_y=D.y_offset, easing = QUAD_EASING, flags=ANIMATION_RELATIVE) + D.travel(dancer, DANCE_TRAVEL_LEFT, AH.lead, 8) + D.do_turn(dancer, AH.lead, 90) + animate(time=BEAT_COUNT(2), pixel_x=D.x_offset, pixel_y=D.y_offset, dir=D.dir, easing = QUAD_EASING | EASE_OUT, flags=ANIMATION_RELATIVE) + + D.travel(dancer, DANCE_TRAVEL_RIGHT, AH.lead, 16) + animate(time=BEAT_COUNT(3), pixel_x=D.x_offset, pixel_y=D.y_offset, loop=loop, easing = QUAD_EASING, flags=ANIMATION_RELATIVE) + D.travel(dancer, DANCE_TRAVEL_LEFT, AH.lead, 2) + animate(time=BEAT_COUNT(1), pixel_x=D.x_offset, pixel_y=D.y_offset, easing = BACK_EASING | EASE_IN, flags=ANIMATION_RELATIVE) + + proc/grapevine(var/mob/dancer, loop=1) + var/datum/abilityHolder/dancing/AH = holder + if(dancer==AH.lead) + src.cooldown += BEAT_COUNT(8) - BEAT_COUNT(0.5) + if(!dancer) + return + + var/datum/dance_transform/D = new(dancer, turn_offsets) + D.travel(dancer, DANCE_TRAVEL_LEFT, AH.lead, 16) + animate(dancer, time=BEAT_COUNT(3), pixel_x=D.x_offset, pixel_y=D.y_offset, loop=loop, easing = QUAD_EASING, flags=ANIMATION_RELATIVE) + D.travel(dancer, DANCE_TRAVEL_RIGHT, AH.lead, 2) + animate(time=BEAT_COUNT(1), pixel_x=D.x_offset, pixel_y=D.y_offset, easing = BACK_EASING | EASE_IN, flags=ANIMATION_RELATIVE) + D.travel(dancer, DANCE_TRAVEL_RIGHT, AH.lead, 16) + animate(time=BEAT_COUNT(3), pixel_x=D.x_offset, pixel_y=D.y_offset, loop=loop, easing = QUAD_EASING, flags=ANIMATION_RELATIVE) + D.travel(dancer, DANCE_TRAVEL_LEFT, AH.lead, 2) + animate(time=BEAT_COUNT(1), pixel_x=D.x_offset, pixel_y=D.y_offset, easing = BACK_EASING | EASE_IN, flags=ANIMATION_RELATIVE) + + basic + + name = "Basic" + icon_state = "basic" + + cast(atom/target) + var/datum/abilityHolder/dancing/AH = holder + basic(AH.lead, 1) + basic(AH.follow, 1) + ..() + + grapevine + name = "Grapevine" + icon_state = "grapevine" + + cast(atom/target) + var/datum/abilityHolder/dancing/AH = holder + grapevine(AH.lead, 1) + grapevine(AH.follow, 1) + ..() + + closed_left_turn + name = "Left Turn" + icon_state = "left_turn" + + cast(atom/target) + var/datum/abilityHolder/dancing/AH = holder + closed_left_turn(AH.lead, 1) + closed_left_turn(AH.follow, 1) + ..() + +/datum/targetable/dancing/waltz + style = "Waltz" + var/list/static/turn_offsets = list("[NORTH]"=list(4,-12), + "[EAST]"=list(-4,-1), + "[SOUTH]"=list(-4,12), + "[WEST]"=list(4,1), + ) + + + proc/box_step(var/mob/dancer, loop=1, turn) + var/datum/abilityHolder/dancing/AH = holder + if(dancer==AH.lead) + src.cooldown += BEAT_COUNT(6) - BEAT_COUNT(0.5) + if(!dancer) + return + + var/datum/dance_transform/D = new(dancer, turn_offsets) + D.travel(dancer, DANCE_TRAVEL_FORWARD, AH.lead, 9) + animate(dancer, time=BEAT_COUNT(1), pixel_x=D.x_offset, pixel_y=D.y_offset, loop=loop, easing = QUAD_EASING, flags=ANIMATION_RELATIVE) + D.travel(dancer, DANCE_TRAVEL_RIGHT, AH.lead, 8) + if(turn) + D.do_turn(dancer, AH.lead, turn) + animate(time=BEAT_COUNT(1), pixel_x=D.x_offset, pixel_y=D.y_offset, dir=D.dir, easing = QUAD_EASING, flags=ANIMATION_RELATIVE) + D.travel(dancer, DANCE_TRAVEL_BACK, AH.lead, 1) + animate(time=BEAT_COUNT(1), pixel_x=D.x_offset, pixel_y=D.y_offset, easing = QUAD_EASING | EASE_OUT, flags=ANIMATION_RELATIVE) + + D.travel(dancer, DANCE_TRAVEL_BACK, AH.lead, 7) + animate(time=BEAT_COUNT(1), pixel_x=D.x_offset, pixel_y=D.y_offset, easing = QUAD_EASING, flags=ANIMATION_RELATIVE) + D.travel(dancer, DANCE_TRAVEL_LEFT, AH.lead, 8) + if(turn) + D.do_turn(dancer, AH.lead, turn) + animate(time=BEAT_COUNT(1), pixel_x=D.x_offset, pixel_y=D.y_offset, dir=D.dir, easing = QUAD_EASING, flags=ANIMATION_RELATIVE) + D.travel(dancer, DANCE_TRAVEL_BACK, AH.lead, 1) + animate(time=BEAT_COUNT(1), pixel_x=D.x_offset, pixel_y=D.y_offset, easing = QUAD_EASING | EASE_OUT, flags=ANIMATION_RELATIVE) + + box_step + name = "Box Step" + icon_state = "box" + cast(atom/target) + var/datum/abilityHolder/dancing/AH = holder + box_step(AH.lead, 1) + box_step(AH.follow, 1) + ..() + + turning_box + name = "Turning Box Step" + icon_state = "l_box" + cast(atom/target) + var/datum/abilityHolder/dancing/AH = holder + box_step(AH.lead, 1, 90) + box_step(AH.follow, 1, 90) + ..() + +/datum/targetable/dancing/salsa + style = "Salsa" + + // var/list/static/turn_offsets = list("[NORTH]"=list(4,-12), + // "[EAST]"=list(-4,-1), + // "[SOUTH]"=list(-4,12), + // "[WEST]"=list(4,1), + // ) + + var/list/static/turn_offsets = list("[NORTH]"=list(4,-12), + "[EAST]"=list(-20,-1), + "[SOUTH]"=list(-4,12), + "[WEST]"=list(20,1), + ) + + proc/basic(var/mob/dancer, loop=1, flare) + var/datum/abilityHolder/dancing/AH = holder + if(dancer==AH.lead) + src.cooldown += BEAT_COUNT(8) - BEAT_COUNT(0.5) + if(!dancer) + return + + var/flare_dir = dancer.dir + + var/datum/dance_transform/D = new(dancer, turn_offsets) + D.travel(dancer, DANCE_TRAVEL_FORWARD, AH.lead, 3) + if(flare == AH.lead && dancer==AH.lead) + flare_dir = turn(flare_dir, 90) + animate(dancer, time=BEAT_COUNT(1), pixel_x=D.x_offset, pixel_y=D.y_offset, loop=loop, dir=flare_dir, easing = QUAD_EASING, flags=ANIMATION_RELATIVE) + D.travel(dancer, DANCE_TRAVEL_BACK, AH.lead, 3) + if(flare == AH.lead && dancer==AH.lead) + flare_dir = turn(flare_dir, 180) + animate(time=BEAT_COUNT(1), pixel_x=D.x_offset, pixel_y=D.y_offset, dir=flare_dir, easing = QUAD_EASING, flags=ANIMATION_RELATIVE) + if(flare == AH.lead && dancer==AH.lead) + flare_dir = turn(flare_dir, 90) + animate(time=BEAT_COUNT(2), pixel_x=D.x_offset, pixel_y=D.y_offset, dir=flare_dir, easing = QUAD_EASING, flags=ANIMATION_RELATIVE) + + D.travel(dancer, DANCE_TRAVEL_BACK, AH.lead, 3) + if(flare == AH.follow && dancer==AH.follow) + flare_dir = turn(flare_dir, 90) + animate(time=BEAT_COUNT(1), pixel_x=D.x_offset, pixel_y=D.y_offset, dir=flare_dir, loop=loop, easing = QUAD_EASING, flags=ANIMATION_RELATIVE) + D.travel(dancer, DANCE_TRAVEL_FORWARD, AH.lead, 3) + if(flare == AH.follow && dancer==AH.follow) + flare_dir = turn(flare_dir, 180) + animate(time=BEAT_COUNT(1), pixel_x=D.x_offset, pixel_y=D.y_offset, dir=flare_dir, easing = QUAD_EASING, flags=ANIMATION_RELATIVE) + if(flare == AH.follow && dancer==AH.follow) + flare_dir = turn(flare_dir, 90) + animate(time=BEAT_COUNT(2), pixel_x=D.x_offset, pixel_y=D.y_offset, dir=flare_dir, easing = QUAD_EASING, flags=ANIMATION_RELATIVE) + + proc/side_basic(var/mob/dancer, loop=1) + var/datum/abilityHolder/dancing/AH = holder + if(dancer==AH.lead) + src.cooldown += BEAT_COUNT(8) - BEAT_COUNT(0.5) + if(!dancer) + return + + var/datum/dance_transform/D = new(dancer, turn_offsets) + D.travel(dancer, DANCE_TRAVEL_LEFT, AH.lead, 3) + animate(dancer, time=BEAT_COUNT(1), pixel_x=D.x_offset, pixel_y=D.y_offset, loop=loop, easing = QUAD_EASING, flags=ANIMATION_RELATIVE) + D.travel(dancer, DANCE_TRAVEL_RIGHT, AH.lead, 3) + animate(time=BEAT_COUNT(1), pixel_x=D.x_offset, pixel_y=D.y_offset, easing = QUAD_EASING, flags=ANIMATION_RELATIVE) + animate(time=BEAT_COUNT(2), pixel_x=D.x_offset, pixel_y=D.y_offset, easing = QUAD_EASING, flags=ANIMATION_RELATIVE) + + D.travel(dancer, DANCE_TRAVEL_RIGHT, AH.lead, 3) + animate(time=BEAT_COUNT(1), pixel_x=D.x_offset, pixel_y=D.y_offset, loop=loop, easing = QUAD_EASING, flags=ANIMATION_RELATIVE) + D.travel(dancer, DANCE_TRAVEL_LEFT, AH.lead, 3) + animate(time=BEAT_COUNT(1), pixel_x=D.x_offset, pixel_y=D.y_offset, easing = QUAD_EASING, flags=ANIMATION_RELATIVE) + animate(time=BEAT_COUNT(2), pixel_x=D.x_offset, pixel_y=D.y_offset, easing = QUAD_EASING, flags=ANIMATION_RELATIVE) + + + // proc/cross_body(var/mob/dancer, loop=1) + // var/datum/abilityHolder/dancing/AH = holder + // if(dancer==AH.lead) + // src.cooldown += BEAT_COUNT(8) - BEAT_COUNT(0.5) + // if(!dancer) + // return + + // var/flare_dir = dancer.dir + + // var/datum/dance_transform/D = new(dancer, turn_offsets) + // D.travel(dancer, DANCE_TRAVEL_FORWARD, AH.lead, 3) + // animate(dancer, time=BEAT_COUNT(1), pixel_x=D.x_offset, pixel_y=D.y_offset, loop=loop, dir=flare_dir, easing = QUAD_EASING, flags=ANIMATION_RELATIVE) + + // D.travel(dancer, DANCE_TRAVEL_BACK, AH.lead, 3) + // animate(time=BEAT_COUNT(1), pixel_x=D.x_offset, pixel_y=D.y_offset, dir=flare_dir, easing = QUAD_EASING, flags=ANIMATION_RELATIVE) + // // if(dancer==AH.lead) + // // flare_dir = turn(flare_dir, 90) + // animate(time=BEAT_COUNT(2), pixel_x=D.x_offset, pixel_y=D.y_offset, dir=flare_dir, easing = QUAD_EASING, flags=ANIMATION_RELATIVE) + + // D.travel(dancer, DANCE_TRAVEL_FORWARD, AH.lead, 3) + // animate(time=BEAT_COUNT(1), pixel_x=D.x_offset, pixel_y=D.y_offset, dir=flare_dir, loop=loop, easing = QUAD_EASING, flags=ANIMATION_RELATIVE) + // D.do_turn(dancer, AH.lead, 180) + // D.travel(dancer, DANCE_TRAVEL_FORWARD, AH.lead, 3) + // animate(time=BEAT_COUNT(1), pixel_x=D.x_offset, pixel_y=D.y_offset, dir=D.dir, easing = QUAD_EASING, flags=ANIMATION_RELATIVE) + // animate(time=BEAT_COUNT(2), pixel_x=D.x_offset, pixel_y=D.y_offset, dir=D.dir, easing = QUAD_EASING, flags=ANIMATION_RELATIVE) + + + + basic + + name = "Basic" + icon_state = "basic" + + cast(atom/target) + var/datum/abilityHolder/dancing/AH = holder + var/flare = null + if(prob(33)) + if(prob(50)) + flare = AH.lead + else + flare = AH.follow + basic(AH.lead, 1, flare) + basic(AH.follow, 1, flare) + ..() + + side_basic + + name = "Side Basic" + icon_state = "side_basic" + + cast(atom/target) + var/datum/abilityHolder/dancing/AH = holder + side_basic(AH.lead, 1) + side_basic(AH.follow, 1) + ..() + + // cross_body + // name = "Cross Body Lead" + // icon_state = "basic" + + // cast(atom/target) + // var/datum/abilityHolder/dancing/AH = holder + // cross_body(AH.lead, 1) + // cross_body(AH.follow, 1) + // ..() + + +/datum/dance_transform + var/x_offset + var/y_offset + var/layer + var/dir + var/open_position = FALSE + var/list/turn_offsets + + New(mob/M, turn_offsets) + . = ..() + src.x_offset = 0 + src.y_offset = 0 + src.dir = M.dir + src.turn_offsets = turn_offsets + + proc/travel(mob/M, dance_dir, mob/lead, distance) + var/angle = dir_to_angle(src.dir) + + switch(dance_dir) + if(DANCE_TRAVEL_FORWARD) + ; //noop + if(DANCE_TRAVEL_RIGHT) + angle += 90 + if(DANCE_TRAVEL_LEFT) + angle += -90 + if(DANCE_TRAVEL_BACK) + angle += 180 + if(DANCE_TRAVEL_FORWARD) + ; //noop + if(DANCE_TRAVEL_AWAY) + angle += 180 + + if(M != lead) // follow + if( (dance_dir != DANCE_TRAVEL_TOWARD) && (dance_dir != DANCE_TRAVEL_AWAY)) + angle += 180 + + src.x_offset = (distance*sin(angle)) + src.y_offset = (distance*cos(angle)) + + proc/do_turn(mob/M, mob/lead, angle, skip_offset) + src.dir = turn(M.dir,angle) + if(M != lead) // follow + M.layer = lead.layer + if(dir & (SOUTH | EAST)) + M.layer -= 0.1 + else + M.layer += 0.1 + + if(!skip_offset && length(src.turn_offsets)) + src.x_offset = src.turn_offsets["[src.dir]"][1] + src.y_offset = src.turn_offsets["[src.dir]"][2] + + +/datum/statusEffect/dancing + id = "dancing" + name = "Dancing" + maxDuration = 1 MINUTE + effect_quality = STATUS_QUALITY_NEUTRAL + + onRemove() + . = ..() + if(ismob(owner)) + var/mob/M = owner + animate(M, time=2 SECOND, pixel_x=0, pixel_y=0, easing = QUAD_EASING | EASE_OUT) + +#undef BEAT_COUNT +#undef DANCE_TRAVEL_FORWARD +#undef DANCE_TRAVEL_RIGHT +#undef DANCE_TRAVEL_LEFT +#undef DANCE_TRAVEL_BACK +#undef DANCE_TRAVEL_TOWARD +#undef DANCE_TRAVEL_AWAY diff --git a/code/datums/abilities/vampiric_thrall.dm b/code/datums/abilities/vampiric_thrall.dm index b5269d9f1d8dc..16c9057e5895b 100644 --- a/code/datums/abilities/vampiric_thrall.dm +++ b/code/datums/abilities/vampiric_thrall.dm @@ -45,35 +45,105 @@ regenRate = 0 tabName = "Thrall" notEnoughPointsMessage = SPAN_ALERT("You need more blood to use this ability.") +#ifdef BONUS_POINTS + points = 300 +#else points = 0 +#endif remove_on_clone = TRUE var/mob/vamp_isbiting = null var/datum/abilityHolder/vampire/master - var/last_blood_points = 0 +#ifdef RP_MODE + var/blood_decay = 0.125 +#else + var/blood_decay = 0.25 +#endif + var/blood_to_health_scalar = 0.75 //! 200 blood = 150 health + var/min_max_health = 40 //! Minimum health we can get to via blood loss. also lol - onLife(var/mult = 1) //failsafe for UI not doing its update correctly elsewhere + ///Counter that ticks up as you spend time away from your vampire before you start to loose blood + var/grace_count = 0 + ///How many (mult adjusted) life ticks before you start to lose blood + var/grace_limit = 1.5 + + onLife(var/mult = 1) .= 0 - if (ishuman(owner)) - var/mob/living/carbon/human/H = owner - if (istype(H.mutantrace, /datum/mutantrace/vampiric_thrall)) - var/datum/mutantrace/vampiric_thrall/V = H.mutantrace + var/mob/living/owner_mob = src.owner + if (!istype(owner_mob)) + return + //normal bleeding + if (owner_mob.bleeding) + src.points -= src.blood_decay * owner_mob.bleeding + + //passive decay + src.points -= blood_decay * mult + src.points = max(0,src.points) - if (last_blood_points != V.blood_points) - last_blood_points = V.blood_points - src.updateText(0, src.x_occupied, src.y_occupied) + if (ON_COOLDOWN(src.owner, "thrall_blood_waste", 5 SECONDS)) + src.update_max_health() + return + var/dist + if (!master?.owner || get_z(master.owner) != get_z(src.owner)) + dist = 60 + else + dist = GET_DIST(get_turf(master.owner), get_turf(src.owner)) + dist = min(dist, 100) + if (dist > 15) + if (src.grace_count > src.grace_limit) + var/blood_loss = 15 + dist/2 + src.blood_waste(blood_loss) + else + src.grace_count += mult + boutput(src.owner, SPAN_ALERT("You feel an insistent tug, you need to stick closer to your master.")) + src.waste_effect(0.2) + else + src.grace_count = 0 //we're within range, reset + + src.update_max_health() + + proc/update_max_health() + src.owner.max_health = src.points * blood_to_health_scalar + src.owner.max_health = max(src.min_max_health, src.owner.max_health) + global.health_update_queue |= src.owner + src.updateText(0, src.x_occupied, src.y_occupied) //might not be needed? + + ///Lose an amount of blood, first from points then from bloodstream + proc/blood_waste(blood_loss) + var/overflow_loss = blood_loss - src.points //the amount not covered by our points + src.points = max(0, src.points - blood_loss) + var/mob/living/living_owner = src.owner //the calling proc can be responsible for checking this, it needs some responsibility in its life + if (src.points <= 0 && living_owner.blood_volume < 200) + boutput(src.owner, SPAN_ALERT(SPAN_BOLD(pick("You feel your master's power fading...", "NEED. BLOOOD.", "You can feel death trying to take you back.")))) + else + boutput(src.owner, SPAN_ALERT(SPAN_BOLD("You feel [pick("your gut wrench", "your skin bleed", "your heart twist")] as you stray too far from your master."))) + if (overflow_loss > 0) + bleed(src.owner, overflow_loss, 5, get_turf(src.owner)) //take it from our actual bloodstream instead + src.waste_effect(1) + else + var/obj/decal/cleanable/blood/blood_decal = make_cleanable(/obj/decal/cleanable/blood, get_turf(src.owner)) + if (src.owner.bioHolder) + blood_decal.blood_DNA = src.owner.bioHolder.Uid + blood_decal.blood_type = src.owner.bioHolder.bloodType + src.waste_effect(0.4) + + proc/waste_effect(severity) + if (!src.owner.client) + return + var/original_color = src.owner.client.color + var/flash_color = rgb(255, (1-severity) * 255, (1-severity) * 255) + animate(src.owner.client, color=flash_color, time=0.4 SECONDS) + animate(color=original_color, time=1.5 SECONDS) + if (severity > 0.2) + playsound(src.owner, 'sound/effects/heartbeat.ogg', 60, FALSE) onAbilityStat() // In the 'Vampire' tab. ..() .= list() - if (ishuman(owner)) - var/mob/living/carbon/human/H = owner - if (istype(H.mutantrace, /datum/mutantrace/vampiric_thrall)) - var/datum/mutantrace/vampiric_thrall/V = H.mutantrace - .["Blood:"] = round(V.blood_points) - .["Max HP:"] = round(H.max_health) + .["Blood:"] = round(src.points) + .["Max HP:"] = round(src.owner.max_health) proc/msg_to_master(var/msg) if (master) @@ -81,17 +151,12 @@ proc/change_vampire_blood(var/change = 0, var/total_blood = 0, var/set_null = 0) if(!total_blood) - var/mob/living/carbon/human/M = owner - if(istype(M) && istype(M.mutantrace, /datum/mutantrace/vampiric_thrall)) - var/datum/mutantrace/vampiric_thrall/V = M.mutantrace - if (V.blood_points < 0) - V.blood_points = 0 - if (haine_blood_debug) logTheThing(LOG_DEBUG, M, "<b>HAINE BLOOD DEBUG:</b> [M]'s blood_points dropped below 0 and was reset to 0") - - if (set_null) - V.blood_points = 0 - else - V.blood_points = max(V.blood_points + change, 0) + if (src.points < 0) + src.points = 0 + if (set_null) + src.points = 0 + else + src.points = max(src.points + change, 0) /datum/targetable/vampiric_thrall diff --git a/code/datums/ai_laws.dm b/code/datums/ai_laws.dm index 0e02fd8dc14b3..4dea4bde30e2a 100644 --- a/code/datums/ai_laws.dm +++ b/code/datums/ai_laws.dm @@ -104,6 +104,9 @@ //remove from list src.registered_racks -= dead_rack + //clear abilities + dead_rack.ai_abilities = list() + //find all connected borgs and remove their connection too for (var/mob/living/silicon/R in mobs) if (isghostdrone(R)) @@ -113,7 +116,8 @@ R.playsound_local(R, 'sound/misc/lawnotify.ogg', 100, flags = SOUND_IGNORE_SPACE) R.show_text("<h3>ERROR: Lost connection to law rack. No laws detected!</h3>", "red") logTheThing(LOG_STATION, R, "[R.name] loses connection to the rack [constructName(dead_rack)] and now has no laws") - + if(isAI(R)) + dead_rack.reset_ai_abilities(R) for (var/mob/living/intangible/aieye/E in mobs) if(E.mainframe?.law_rack_connection == dead_rack) E.mainframe.law_rack_connection = null @@ -121,19 +125,20 @@ logTheThing(LOG_STATION, E.mainframe, "[E.mainframe.name] loses connection to the rack [constructName(dead_rack)] and now has no laws") /* Law Rack Corruption */ - proc/corrupt_all_racks(picked_law = "Beep repeatedly.", replace = TRUE) + proc/corrupt_all_racks(picked_law = "Beep repeatedly.", replace = TRUE, law_number = null) for(var/obj/machinery/lawrack/R in src.registered_racks) if(istype(R,/obj/machinery/lawrack/syndicate)) continue //sadly syndie law racks must be immune to corruptions, because nobody can actually get at them to fix them. - var/num = rand(1, 3) - if(R.cause_law_glitch(picked_law, num, replace)) + if (isnull(law_number)) + law_number = rand(1, 3) + if(R.cause_law_glitch(picked_law, law_number, replace)) R.UpdateLaws() if (replace) - logTheThing(LOG_ADMIN, null, "Law Rack Corruption replaced inherent AI law [num]: [picked_law]") - message_admins("Law Rack Corruption replaced inherent law [num]: [picked_law]") + logTheThing(LOG_ADMIN, null, "Law Rack Corruption replaced inherent AI law [law_number]: [picked_law]") + message_admins("Law Rack Corruption replaced inherent law [law_number]: [picked_law]") else - logTheThing(LOG_ADMIN, null, "Law Rack Corruption added supplied AI law to law number [num]: [picked_law]") - message_admins("Law Rack Corruption added supplied law [num]: [picked_law]") + logTheThing(LOG_ADMIN, null, "Law Rack Corruption added supplied AI law to law number [law_number]: [picked_law]") + message_admins("Law Rack Corruption added supplied law [law_number]: [picked_law]") /* General ai_law functions */ diff --git a/code/datums/antag_weighting.dm b/code/datums/antag_weighting.dm index c7e7b553843a1..41341e0e157cc 100644 --- a/code/datums/antag_weighting.dm +++ b/code/datums/antag_weighting.dm @@ -29,20 +29,20 @@ var/global/datum/antagWeighter/antagWeighter * @param string ckey Ckey of the person we're looking up * @return list List of history details */ - proc/history(role = "", ckey = "") - if (!role || !ckey) - throw EXCEPTION("Incorrect parameters given") + // proc/history(role = "", ckey = "") + // if (!role || !ckey) + // throw EXCEPTION("Incorrect parameters given") - var/list/response = apiHandler.queryAPI("antags/history", list( - "role" = role, - "players" = ckey, - "amount" = 1 - ), 1) + // var/list/response = apiHandler.queryAPI("antags/history", list( + // "role" = role, + // "players" = ckey, + // "amount" = 1 + // ), 1) - if (response["error"]) - throw EXCEPTION(response["error"]) + // if (response["error"]) + // throw EXCEPTION(response["error"]) - return response["history"] + // return response["history"] /** * Get the entire antag selection history for a player (all roles, all modes) @@ -50,27 +50,27 @@ var/global/datum/antagWeighter/antagWeighter * @param string ckey Ckey of the person we're looking up * @return list List of history details */ - proc/completeHistory(ckey = "") - if (!ckey) - throw EXCEPTION("No ckey given") - if (!config.goonhub_api_token) - throw EXCEPTION("You must have the goonhub API token to use this command!") + // proc/completeHistory(ckey = "") + // if (!ckey) + // throw EXCEPTION("No ckey given") + // if (!config.goonhub_api_token) + // throw EXCEPTION("You must have the goonhub API token to use this command!") - var/list/response - try - response = apiHandler.queryAPI("antags/completeHistory", list( - "player" = ckey, - ), 1) - catch () - throw EXCEPTION("API is currently having issues, try again later") + // var/list/response + // try + // response = apiHandler.queryAPI("antags/completeHistory", list( + // "player" = ckey, + // ), 1) + // catch () + // throw EXCEPTION("API is currently having issues, try again later") - if (response["error"]) - throw EXCEPTION(response["error"]) + // if (response["error"]) + // throw EXCEPTION(response["error"]) - if (length(response["history"]) < 1) - throw EXCEPTION("No history for that player") + // if (length(response["history"]) < 1) + // throw EXCEPTION("No history for that player") - return response["history"] + // return response["history"] /** * Simulates a history response from the API, so local development doesn't fuck up @@ -166,7 +166,7 @@ var/global/datum/antagWeighter/antagWeighter * @param list pool List of minds under consideration for antag picking * @param string role Name of the antag role we're picking for (e.g. traitor, spy_thief) * @param int amount Max amount of players to choose for this role - * @param boolean recordChosen When true, triggers a src.recordMultiple() for the chosen players + * @param boolean recordChosen When true, triggers a src.record() for the chosen players * @return list List of minds chosen */ proc/choose(list/pool = list(), role = "", amount = 0, recordChosen = 0) @@ -207,17 +207,19 @@ var/global/datum/antagWeighter/antagWeighter src.debugLog("Sending payload: [json_encode(apiPayload)]") var/list/response - if (config.goonhub_api_token && apiHandler.enabled) - //YO API WADDUP - try - response = apiHandler.queryAPI("antags/history", apiPayload, 1) - catch () - //If the API is in the process of failing, we need to gracefully fail so that SOME antags can be picked - response = src.simulateHistory(role, ckeyMinds) - - else - //Fallback for no API set, for local dev (or API is unavailable) - response = src.simulateHistory(role, ckeyMinds) + // if (config.goonhub_api_token && apiHandler.enabled) + // //YO API WADDUP + // try + // response = apiHandler.queryAPI("antags/history", apiPayload, 1) + // catch () + // out(world, "FAILED AAAAAAAA") + // //If the API is in the process of failing, we need to gracefully fail so that SOME antags can be picked + // response = src.simulateHistory(role, ckeyMinds) + + // else + // //Fallback for no API set, for local dev (or API is unavailable) + // response = src.simulateHistory(role, ckeyMinds) + response = src.simulateHistory(role, ckeyMinds) if (response && response["error"]) throw EXCEPTION(response["error"]) @@ -269,10 +271,11 @@ var/global/datum/antagWeighter/antagWeighter //Shortcut to record selection for players chosen if (recordChosen) - var/list/record = list() + // var/list/record = list() for (var/datum/mind/M in chosen) - record[M.ckey] = role + // record[M.ckey] = role logTheThing(LOG_DEBUG, null, "<b>AntagWeighter</b> Selected [M.ckey] for [role]. (Weight: [chosen[M]["weight"]], Seen: [chosen[M]["seen"]])") + src.record(role, M.get_player()) for (var/datum/mind/M in pool) if(!M.ckey) continue @@ -281,7 +284,7 @@ var/global/datum/antagWeighter/antagWeighter logTheThing(LOG_DEBUG, null, "<b>AntagWeighter</b> Did <b>not</b> select [M.ckey] for [role]. (Weight: [history[M.ckey]["weight"]], Seen: [history[M.ckey]["seen"]])") - src.recordMultiple(players = record) + // src.recordMultiple(players = record) return chosen @@ -290,23 +293,30 @@ var/global/datum/antagWeighter/antagWeighter * Records an antag selection for a single player * * @param string role Name of the antag role we're recording a selection for - * @param string ckey Ckey of the player + * @param string P The player being recorded * @param boolean latejoin Whether this record is a latejoin antag selection * @return null */ - proc/record(role = "", ckey = "", latejoin = 0) - if (!role || !ckey) + proc/record(role = "", datum/player/P = null, latejoin = 0) + if (!role || !P) throw EXCEPTION("Incorrect parameters given") if (src.debug) - src.debugLog("Recording selection of role: [role] for ckey: [ckey]. latejoin: [latejoin]") + src.debugLog("Recording selection of role: [role] for player: [P.ckey]. latejoin: [latejoin]") - //Fire and forget - apiHandler.queryAPI("antags/record", list( - "role" = role, - "players" = ckey, - "latejoin" = latejoin - )) + try + var/datum/apiRoute/players/antags/addAntag = new + addAntag.buildBody( + P.id, + roundId, + role, + latejoin, + null + ) + apiHandler.queryAPI(addAntag) + catch (var/exception/e) + var/datum/apiModel/Error/error = e.name + logTheThing(LOG_DEBUG, null, "<b>AntagWeighter</b> Failed to record antag to API because: [error.message]") /** @@ -319,23 +329,23 @@ var/global/datum/antagWeighter/antagWeighter * ) * @return null */ - proc/recordMultiple(list/players = list()) - if (!players.len) - throw EXCEPTION("Incorrect parameters given") - - if (src.debug) - src.debugLog("Recording multiple selections for: [json_encode(players)]") - - //Build an API-friendly list of players - var/list/apiPlayers = list() - var/count = 0 - for (var/ckey in players) - apiPlayers["players\[[count]]\[role]"] = players[ckey] - apiPlayers["players\[[count]]\[ckey]"] = ckey - count++ - - if (src.debug) - src.debugLog("Players list sending to API: [json_encode(apiPlayers)]") - - //Fire and forget - apiHandler.queryAPI("antags/record", apiPlayers) + // proc/recordMultiple(list/players = list()) + // if (!players.len) + // throw EXCEPTION("Incorrect parameters given") + + // if (src.debug) + // src.debugLog("Recording multiple selections for: [json_encode(players)]") + + // //Build an API-friendly list of players + // var/list/apiPlayers = list() + // var/count = 0 + // for (var/ckey in players) + // apiPlayers["players\[[count]]\[role]"] = players[ckey] + // apiPlayers["players\[[count]]\[ckey]"] = ckey + // count++ + + // if (src.debug) + // src.debugLog("Players list sending to API: [json_encode(apiPlayers)]") + + // //Fire and forget + // apiHandler.queryAPI("antags/record", apiPlayers) diff --git a/code/datums/api_handler.dm b/code/datums/api_handler.dm deleted file mode 100644 index 818e6f77b157e..0000000000000 --- a/code/datums/api_handler.dm +++ /dev/null @@ -1,158 +0,0 @@ -/* -* Handles queries to the goonhub universal API -*/ - -var/global/datum/apiHandler/apiHandler - -/datum/apiHandler - var/enabled = 1 //is the api handler available for use? only set to false if we try a bunch of times and still fail - //retry handling - var/maxApiRetries = 5 //how many times should a query attempt to run before giving up - var/apiRetryDelay = 10 //base delay between query attempts, gets multiplied by attempt number - - var/emergency_shutoff_counter = 0 // how many api errors there have been since a successful one - var/lazy_concurrent_counter = 0 // lazy count of how many are up/down - var/lazy_waiting_counter = 0 // number of how many are waiting - - New() - ..() - if (!config.goonhub_api_endpoint) - src.enabled = 0 - logTheThing(LOG_DEBUG, null, "Goonhub endpoint doesn't exist, disabled api handler") - logTheThing(LOG_DIARY, null, "Goonhub endpoint doesn't exist, disabled api handler", "debug") - - - // Suppress errors on local environments, as it's spammy and local devs probably won't have the config for API connectivity to work - proc/apiError(message = "", forceErrorException = 0) - if (config.server_id != "local" || forceErrorException) - throw EXCEPTION(message) - - - /** - * Retries an API query in the event of failure - * - * @givenArgs (list) arglist of the failed query attempt - * @attempt (int) number of times we've attempted this query - * @return (*) the result of another query attempt - */ - proc/retryApiQuery(list/givenArgs, attempt = 1) - //the sleep delay grows as attempts increases - sleep(apiRetryDelay * attempt) - //arglist() doesnt recognise named params lol - givenArgs[4] = attempt + 1 - return src.queryAPI(arglist(givenArgs)) - - - /** - * Increments or resets the recent error counter - * - * @reset (bool) reset the counter (eg successful request) - */ - proc/trackRecentError(reset = 0) - if (reset) - emergency_shutoff_counter = 0 - return - - emergency_shutoff_counter++ - if (enabled && emergency_shutoff_counter > 50) - logTheThing(LOG_DEBUG, null, "DISABLING API REQUESTS - Too many errors.") - logTheThing(LOG_DIARY, null, "DISABLING API REQUESTS - Too many errors.", "debug") - message_admins("API requests have been disabled due to too many errors (check logs).") - enabled = 0 - SPAWN(60 SECONDS) - emergency_shutoff_counter = 0 - logTheThing(LOG_DEBUG, null, "RE-ENABLING API REQUESTS - Cooldown expired.") - logTheThing(LOG_DIARY, null, "RE-ENABLING API REQUESTS - Cooldown expired.", "debug") - message_admins("API requests have been re-enabled after waiting.") - enabled = 1 - return - - - /** - * Constructs a query to send to the goonhub web API - * - * @route (string) requested route e.g. bans/check - * @query (list) query arguments to be passed along to route - * @forceResponse (boolean) will force the API server to return the requested data from the route rather than hitting hubCallback later on - * @attempt (int) number of times we've attempted this query - * @return (list|boolean) list containing parsed data response from api, 1 if forceResponse is false - * - */ - proc/queryAPI(route = "", query = list(), forceResponse = 0, attempt = 1, forceErrorException = 0) - if (!enabled || !route) - src.apiError("API Error: Cancelled query due to [!enabled ? "disabled apiHandler" : "missing route parameter"]", forceErrorException) - return - - var/req = "[config.goonhub_api_endpoint]/[route]/?[query ? "[list2params(query)]&" : ""]" //Necessary - req += "[forceResponse ? "bypass=1&" : ""]" //Force a response RIGHT NOW y/n - req += "data_server=[serverKey]&data_id=[config.server_id]&" //Append server number and ID - req += "data_version=[config.goonhub_api_version]&" //Append API version - var/safeReq = req //for outputting errors without the auth code - req += "auth=[md5(config.goonhub_api_token)]" //Append auth code - - lazy_waiting_counter++ - while (lazy_concurrent_counter > 50) - // if we have too many requests out, just wait a little to let some finish - sleep(rand(1, 5)) - lazy_waiting_counter-- - - - // Fetch via HTTP from goonhub - lazy_concurrent_counter++ - var/datum/http_request/request = new() - request.prepare(RUSTG_HTTP_METHOD_GET, req, "", "") - request.begin_async() - var/time_started = TIME - UNTIL(request.is_complete() || (TIME - time_started) > 10 SECONDS) - if(!request.is_complete()) - // to whoever looks at this next: uhh, do we have to do any cleanup of - // these requests or will it just solve itself? - trackRecentError() - logTheThing(LOG_DEBUG, null, "<b>API Error</b>: Request timed out during <b>[safeReq]</b> (Attempt: [attempt]; recent errors: [emergency_shutoff_counter], concurrent: [lazy_concurrent_counter])") - logTheThing(LOG_DIARY, null, "API Error: Request timed out during [safeReq] (Attempt: [attempt]; recent errors: [emergency_shutoff_counter], concurrent: [lazy_concurrent_counter])", "debug") - - // This one is over so we can clear it now - lazy_concurrent_counter-- - if (attempt < maxApiRetries) - return retryApiQuery(args, attempt = attempt) - - src.apiError("API Error: Request timed out during [safeReq]") - return 1 - - // Otherwise the request did finish so we can lower this - lazy_concurrent_counter-- - var/datum/http_response/response = request.into_response() - - if (response.errored || !response.body) - trackRecentError() - logTheThing(LOG_DEBUG, null, "<b>API Error</b>: No response from server during query [!response.body ? "during" : "to"] <b>[safeReq]</b> (Attempt: [attempt]; recent errors: [emergency_shutoff_counter], concurrent: [lazy_concurrent_counter])") - logTheThing(LOG_DIARY, null, "API Error: No response from server during query [!response.body ? "during" : "to"] [safeReq] (Attempt: [attempt]; recent errors: [emergency_shutoff_counter], concurrent: [lazy_concurrent_counter])", "debug") - - if (attempt < maxApiRetries) - return retryApiQuery(args, attempt = attempt) - - src.apiError("API Error: No response from server during query [!response.body ? "during" : "to"] [safeReq]") - - // At this point we assume the request was a success, so reset the error counter - trackRecentError(TRUE) - - if (forceResponse) - // Parse the response - var/list/data - - try - data = json_decode(response.body) - catch - // pass - - if (!data) - logTheThing(LOG_DEBUG, null, "<b>API Error</b>: JSON decode error during <b>[safeReq]</b> (Attempt: [attempt]; recent errors: [emergency_shutoff_counter], concurrent: [lazy_concurrent_counter])") - logTheThing(LOG_DIARY, null, "API Error: JSON decode error during [safeReq] (Attempt: [attempt]; recent errors: [emergency_shutoff_counter], concurrent: [lazy_concurrent_counter])", "debug") - - if (attempt < maxApiRetries) - return retryApiQuery(args, attempt = attempt) - - src.apiError("API Error: JSON decode error during [safeReq]") - - return data - return 1 diff --git a/code/datums/browserOutput.dm b/code/datums/browserOutput.dm index 543463e8d8cbf..fb5928019b382 100644 --- a/code/datums/browserOutput.dm +++ b/code/datums/browserOutput.dm @@ -119,7 +119,7 @@ var/global return /// Called on chat output done-loading by JS. -/datum/chatOutput/proc/doneLoading(ua) +/datum/chatOutput/proc/doneLoading() if (src.owner && !src.loaded) src.loaded = 1 winset(src.owner, "browseroutput", "is-disabled=false") @@ -129,23 +129,13 @@ var/global for (var/list/message in src.messageQueue) boutput(src.owner, message["message"], message["group"]) src.messageQueue = null - if (ua) - //For persistent user tracking - apiHandler?.queryAPI("versions/add", list( - "ckey" = src.owner.ckey, - "userAgent" = ua, - "byondMajor" = src.owner.byond_version, - "byondMinor" = src.owner.byond_build - )) - - else - src.sendClientData() - /* WIRE TODO: Fix this so the CDN dying doesn't break everyone - SPAWN(1 MINUTE) //60 seconds - if (!src.cookieSent) //Client has very likely futzed with their local html/js chat file - boutput(src.owner, "<div class='fatalError'>Chat file tampering detected. Closing connection.</div>") - del(src.owner) - */ + src.sendClientData() + /* WIRE TODO: Fix this so the CDN dying doesn't break everyone + SPAWN(1 MINUTE) //60 seconds + if (!src.cookieSent) //Client has very likely futzed with their local html/js chat file + boutput(src.owner, "<div class='fatalError'>Chat file tampering detected. Closing connection.</div>") + del(src.owner) + */ /// Called in update_admins() /datum/chatOutput/proc/loadAdmin() @@ -192,17 +182,18 @@ var/global if (connData && islist(connData) && length(connData) && connData["connData"]) src.connectionHistory = connData["connData"] //lol fuck var/list/found = new() + var/list/checkBan = null for (var/i = src.connectionHistory.len; i >= 1; i--) var/list/row = src.connectionHistory[i] if (!row || length(row) < 3 || (!row["ckey"] && !row["compid"] && !row["ip"])) //Passed malformed history object return - if (checkBan(row["ckey"], row["compid"], row["ip"])) + checkBan = bansHandler.check(row["ckey"], row["compid"], row["ip"]) + if (checkBan) found = row break //Uh oh this fucker has a history of playing on a banned account!! if (length(found) && found["ckey"] != src.owner.ckey) - //TODO: add a new evasion ban for the CURRENT client details, using the matched row details message_admins("[key_name(src.owner)] has a cookie from a banned account! (Matched: [found["ckey"]], [found["ip"]], [found["compid"]])") logTheThing(LOG_DEBUG, src.owner, "has a cookie from a banned account! (Matched: [found["ckey"]], [found["ip"]], [found["compid"]])") logTheThing(LOG_DIARY, src.owner, "has a cookie from a banned account! (Matched: [found["ckey"]], [found["ip"]], [found["compid"]])", "debug") @@ -212,17 +203,19 @@ var/global var/ircmsg[] = new() ircmsg["key"] = owner.key ircmsg["name"] = stripTextMacros(owner.mob.name) - ircmsg["msg"] = "has a cookie from banned account [found["ckey"]](IP: [found["ip"]], CompID: [found["compID"]])" + ircmsg["msg"] = "has a cookie from banned account [found["ckey"]](IP: [found["ip"]], CompID: [found["compid"]])" ircbot.export_async("admin", ircmsg) - var/banData[] = new() - banData["ckey"] = src.owner.ckey - banData["compID"] = (found["compID"] == "N/A" ? "N/A" : src.owner.computer_id) // don't add CID if original ban doesn't have one - banData["akey"] = "Auto Banner" - banData["ip"] = (found["ip"] == "N/A" ? "N/A" : src.owner.address) // don't add IP if original ban doesn't have one - banData["reason"] = "\[Evasion Attempt\] Previous ckey: [found["ckey"]]" - banData["mins"] = 0 - addBan(banData) + //Add evasion ban details + var/datum/apiModel/Tracked/BanResource/ban = checkBan["ban"] + bansHandler.addDetails( + ban.id, + TRUE, + "bot", + src.owner.ckey, + isnull(found["compid"]) ? null : src.owner.computer_id, + isnull(found["ip"]) ? null : src.owner.address + ) src.cookieSent = 1 /datum/chatOutput/proc/getContextFlags() @@ -269,7 +262,7 @@ var/global if ("boot") src.owner.cmd_boot(targetMob) if ("ban") - src.owner.addBanDialog(targetMob) + src.owner.addBanTemp(targetMob) if ("gib") src.owner.cmd_admin_gib(targetMob) logTheThing(LOG_ADMIN, src.owner, "gibbed [constructTarget(targetMob,"admin")].") diff --git a/code/datums/buildmode.dm b/code/datums/buildmode.dm index 1e0c479f76b6a..0234cf750b01c 100644 --- a/code/datums/buildmode.dm +++ b/code/datums/buildmode.dm @@ -240,7 +240,7 @@ ABSTRACT_TYPE(/datum/buildmode) qdel(src.buildmode) src.buildmode = new(src) src.player.buildmode = src.buildmode - src.cloud_put("buildmode", null) + src.player.cloudSaves.putData("buildmode", null) src.togglebuildmode() /client/proc/togglebuildmode() diff --git a/code/datums/cloud_saves.dm b/code/datums/cloud_saves.dm new file mode 100644 index 0000000000000..e0369d69eb127 --- /dev/null +++ b/code/datums/cloud_saves.dm @@ -0,0 +1,272 @@ +/** + * Manage cloud save files and data for a player + */ + + +#define CLOUD_SAVES_SIMULATED_CLOUD "data/simulated_cloud.json" + +/datum/cloudSaves + var/datum/player/player = null + var/list/data = list() + var/list/saves = list() + var/loaded = FALSE // Have we performed an initial fetch + var/simulating = FALSE + + New(datum/player/player) + ..() + src.player = player + #ifndef LIVE_SERVER + src.simulating = TRUE + #endif + + /// Get the simulated cloud information for this player, for local development + proc/getSimulatedCloud() + if (fexists(CLOUD_SAVES_SIMULATED_CLOUD)) + var/simulatedContent = file2text(CLOUD_SAVES_SIMULATED_CLOUD) + if (simulatedContent) + var/list/simulatedCloud = json_decode(simulatedContent) + var/list/playerCloud = simulatedCloud["[src.player.ckey]"] + if (playerCloud) + if (!("data" in playerCloud)) playerCloud["data"] = list() + if (!("saves" in playerCloud)) playerCloud["saves"] = list() + return playerCloud + + return list("data" = list(), "saves" = list()) + + /// Put new data into the simulated cloud for this player, for local development + proc/putSimulatedCloud(type, key, value) + var/list/simulatedCloud = list() + var/list/playerCloud = list("data" = list(), "saves" = list()) + if (fexists(CLOUD_SAVES_SIMULATED_CLOUD)) + var/simulatedContent = file2text(CLOUD_SAVES_SIMULATED_CLOUD) + if (simulatedContent) + simulatedCloud = json_decode(simulatedContent) + playerCloud = simulatedCloud["[src.player.ckey]"] + + if (!playerCloud) playerCloud = list() + if (!("data" in playerCloud)) playerCloud["data"] = list() + if (!("saves" in playerCloud)) playerCloud["saves"] = list() + playerCloud[type][key] = value + simulatedCloud["[src.player.ckey]"] = playerCloud + rustg_file_write(json_encode(simulatedCloud), CLOUD_SAVES_SIMULATED_CLOUD) + + /// Delete data from the simulated cloud for this player, for local development + proc/deleteSimulatedCloud(type, key) + var/list/simulatedCloud = list() + var/list/playerCloud = list("data" = list(), "saves" = list()) + if (fexists(CLOUD_SAVES_SIMULATED_CLOUD)) + var/simulatedContent = file2text(CLOUD_SAVES_SIMULATED_CLOUD) + if (simulatedContent) + simulatedCloud = json_decode(simulatedContent) + playerCloud = simulatedCloud["[src.player.ckey]"] + + if (key in playerCloud[type]) + var/list/thing = playerCloud[type] + thing.Remove(key) + playerCloud[type] = thing + + simulatedCloud["[src.player.ckey]"] = playerCloud + rustg_file_write(json_encode(simulatedCloud), CLOUD_SAVES_SIMULATED_CLOUD) + + /// Fetch all cloud data and files associated with this player + proc/fetch() + if (src.simulating) + // Local fallback, load data from JSON file + var/list/playerCloud = src.getSimulatedCloud() + src.data = playerCloud["data"] + src.saves = playerCloud["saves"] + src.loaded = TRUE + + else + if (!src.player.id) return FALSE + try + var/datum/apiRoute/players/saves/get/getSavesAndData = new + getSavesAndData.queryParams = list("player_id" = src.player.id) + var/datum/apiModel/GetPlayerSaves/savesAndData = apiHandler.queryAPI(getSavesAndData) + var/list/newData = list() + for (var/datum/apiModel/Tracked/PlayerRes/PlayerDataResource/data in savesAndData.data) + newData[data.key] = data.value + var/list/newSaves = list() + for (var/datum/apiModel/Tracked/PlayerRes/PlayerSaveResource/save in savesAndData.saves) + newSaves[save.name] = save.data + + src.data = newData + src.saves = newSaves + src.loaded = TRUE + catch (var/exception/e) + var/datum/apiModel/Error/error = e.name + logTheThing(LOG_DEBUG, src.player.ckey, "failed to have their cloud data loaded: [error.message]") + + return TRUE + + /// Save new cloud data for this player + proc/putData(key, value) + if (src.simulating) + // Local fallback, update JSON file + src.putSimulatedCloud("data", key, value) + + else + if (!src.player?.id) + logTheThing(LOG_DEBUG, src.player?.ckey, "No player ID found in cloud data put [key], [value]") + return + try + var/datum/apiRoute/players/saves/data/post/addPlayerData = new + addPlayerData.buildBody(src.player.id, key, value) + apiHandler.queryAPI(addPlayerData) + catch (var/exception/e) + var/datum/apiModel/Error/error = e.name + logTheThing(LOG_DEBUG, src.player.ckey, "failed to put data into their cloud. Key: [key]. Value: [value]. Error: [error.message]") + return FALSE + + src.data[key] = value + return TRUE + + /// Save a new cloud file for this player + proc/putSave(name, data) + if (src.simulating) + // Local fallback, update JSON file + src.putSimulatedCloud("saves", name, data) + + else + if (!src.player.id) return + try + var/datum/apiRoute/players/saves/file/post/addPlayerSave = new + addPlayerSave.buildBody(src.player.id, name, data) + apiHandler.queryAPI(addPlayerSave) + catch (var/exception/e) + var/datum/apiModel/Error/error = e.name + logTheThing(LOG_DEBUG, src.player.ckey, "failed to put save into their cloud. Error: [error.message]") + return FALSE + + src.saves[name] = data + return TRUE + + /// Delete cloud data for this player + proc/deleteData(key) + if (src.simulating) + // Local fallback, update JSON file + src.deleteSimulatedCloud("data", key) + + else + if (!src.player.id) return + try + var/datum/apiRoute/players/saves/data/delete/deletePlayerData = new + deletePlayerData.buildBody(src.player.id, key) + apiHandler.queryAPI(deletePlayerData) + catch (var/exception/e) + var/datum/apiModel/Error/error = e.name + logTheThing(LOG_DEBUG, src.player.ckey, "failed to delete data from their cloud. Error: [error.message]") + return FALSE + + src.data.Remove(key) + return TRUE + + /// Delete a cloud file for this player + proc/deleteSave(name) + if (src.simulating) + // Local fallback, update JSON file + src.deleteSimulatedCloud("saves", name) + + else + if (!src.player.id) return + try + var/datum/apiRoute/players/saves/file/delete/deletePlayerSave = new + deletePlayerSave.buildBody(src.player.id, name) + apiHandler.queryAPI(deletePlayerSave) + catch (var/exception/e) + var/datum/apiModel/Error/error = e.name + logTheThing(LOG_DEBUG, src.player.ckey, "failed to delete save from their cloud. Error: [error.message]") + return FALSE + + src.saves.Remove(name) + return TRUE + + proc/getData(key) + return src.data[key] + + proc/getSave(name) + return src.saves[name] + + +/** + * Mass save a collection of cloud data for various players + * Input format: + * list( + * list( + * "player_id" = 1, + * "key" = "foo", + * "value" = "bar" + * ), + * list( + * "player_id" = 2, + * "key" = "foo2", + * "value" = "bar2" + * ) + * ) + */ +/proc/cloud_saves_put_data_bulk(list/data) +#ifndef LIVE_SERVER + var/list/newSimulatedCloud = list() + var/list/simulatedCloud = list() + if (fexists(CLOUD_SAVES_SIMULATED_CLOUD)) + var/simulatedContent = file2text(CLOUD_SAVES_SIMULATED_CLOUD) + simulatedCloud = json_decode(simulatedContent) + + for (var/item in data) + var/datum/player/P + for (var/client/C in clients) + if (C.player.id == item["player_id"]) + P = C.player + break + + var/list/playerCloud = list("data" = list(), "saves" = list()) + if (P.ckey in simulatedCloud) + playerCloud = simulatedCloud["[P.ckey]"] + + playerCloud["data"][item["key"]] = item["value"] + P.cloudSaves.data[item["key"]] = item["value"] + newSimulatedCloud["[P.ckey]"] = playerCloud + + rustg_file_write(json_encode(newSimulatedCloud), CLOUD_SAVES_SIMULATED_CLOUD) + return TRUE +#else + try + var/datum/apiRoute/players/saves/databulk/post/addBulkData = new + addBulkData.buildBody(json_encode(data)) + logTheThing(LOG_DEBUG, null, "TEMP CLOUD BULK: [json_encode(data)]") + apiHandler.queryAPI(addBulkData) + return TRUE + catch (var/exception/e) + var/datum/apiModel/Error/error = e.name + logTheThing(LOG_DEBUG, null, "failed to put bulk data into the cloud. Error: [error.message]") + return FALSE +#endif + +/// Transfer all cloud save files from one player to another +/// WARNING: This overwrites all the saves for the target +/proc/cloud_saves_transfer(from_ckey, to_ckey) +#ifndef LIVE_SERVER + // Wire note: I simply cannot be bothered to code the simulated file aspect of this + throw EXCEPTION("Cloud save transferring is disabled during local development") +#else + try + var/datum/apiRoute/players/saves/file/transfer/transferSaves = new + transferSaves.buildBody(from_ckey, to_ckey) + apiHandler.queryAPI(transferSaves) + catch (var/exception/e) + var/datum/apiModel/Error/error = e.name + logTheThing(LOG_DEBUG, null, "failed to transfer cloud saves from [from_ckey] to [to_ckey]. Error: [error.message]") + throw EXCEPTION(error.message) + return FALSE + + // Run updates if any of the targets are currently logged in + for (var/client/C in clients) + if (C.ckey == from_ckey) + // The source player has all their saves moved + C.player.cloudSaves.saves = list() + if (C.ckey == to_ckey) + // Trigger a re-fetch on the target so they can get their new saves right away + C.player.cloudSaves.fetch() + + return TRUE +#endif diff --git a/code/datums/components/seedy.dm b/code/datums/components/seedy.dm index b3fa07ad1141c..e50dff2057a6b 100644 --- a/code/datums/components/seedy.dm +++ b/code/datums/components/seedy.dm @@ -31,26 +31,7 @@ . = ..() /datum/component/seedy/proc/generate_seed() - var/obj/item/seed/SEED - if (planttype.unique_seed) - SEED = new planttype.unique_seed - else - SEED = new /obj/item/seed - SEED.removecolor() - - if (!src.planttype.hybrid && !src.planttype.unique_seed) - SEED.generic_seed_setup(src.planttype, TRUE) - HYPpassplantgenes(src.DNA,SEED.plantgenes) - SEED.generation = src.generation - if (src.planttype.hybrid) - var/plantType = src.planttype.type - var/datum/plant/hybrid = new plantType(SEED) - for (var/V in src.planttype.vars) - if (issaved(src.planttype.vars[V]) && V != "holder") - hybrid.vars[V] = src.planttype.vars[V] - SEED.planttype = hybrid - SEED.plant_seed_color(src.planttype.seedcolor) - + var/obj/item/seed/SEED = HYPgenerateseedcopy(src.DNA, src.planttype, src.generation) return SEED /datum/component/seedy/proc/on_pre_attack(var/atom/affected_parent, var/atom/target, var/mob/user, var/damage) diff --git a/code/datums/configuration.dm b/code/datums/configuration.dm index e12cd0dc383f1..3901149f86175 100644 --- a/code/datums/configuration.dm +++ b/code/datums/configuration.dm @@ -45,10 +45,6 @@ var/allow_ai = 1 // allow ai job var/respawn = 1 - // Goonhub Parser - var/goonhub_parser_url = "localhost" - var/goonhub_parser_key = "foo" - // MySQL var/sql_enabled = 0 var/sql_hostname = "localhost" @@ -57,34 +53,20 @@ var/sql_password = null var/sql_database = null - // Player notes - var/player_notes_baseurl = "https://playernotes.goonhub.com" - var/player_notes_auth = null - - // Server list for cross-bans and other stuff - var/list/servers = list() - var/crossbans = 0 - var/crossban_password = null - //IRC Bot stuff var/irclog_url = null var/ircbot_api = null var/ircbot_ip = null - var/spacebee_api_url = "https://spacebee.goonhub.com" - var/spacebee_api_key = null //External server configuration (for central bans etc) - var/goonhub_api_version = 0 var/goonhub_api_endpoint = null var/goonhub_api_ip = null var/goonhub_api_token = null - var/goonhub_api_web_token = null - //Goonhub2 server - var/goonhub2_hostname = null - - //youtube audio converter - var/youtube_audio_key = null + var/goonhub_events_endpoint = null + var/goonhub_events_port = null + var/goonhub_events_channel = null + var/goonhub_events_password = null //Environment var/env = "dev" @@ -301,17 +283,6 @@ if ("server_specific_configs") config.server_specific_configs = 1 - if ("servers") - for(var/sv in splittext(trim(value), " ")) - sv = trim(sv) - if(sv) - config.servers.Add(sv) - - if ("use_crossbans") - config.crossbans = 1 - if ("crossban_password") - config.crossban_password = trim(value) - if ("irclog_url") config.irclog_url = trim(value) if ("ircbot_api") @@ -319,35 +290,25 @@ if ("ircbot_ip") config.ircbot_ip = trim(value) - if ("spacebee_api_url") - config.spacebee_api_url = trim(value) - if ("spacebee_api_key") - config.spacebee_api_key = trim(value) - - if ("goonhub_parser_url") - config.goonhub_parser_url = trim(value) - if ("goonhub_parser_key") - config.goonhub_parser_key = trim(value) - if ("ticklag") world.tick_lag = text2num(value) - if ("goonhub_api_version") - config.goonhub_api_version = text2num(value) if ("goonhub_api_endpoint") config.goonhub_api_endpoint = trim(value) if ("goonhub_api_ip") config.goonhub_api_ip = trim(value) if ("goonhub_api_token") config.goonhub_api_token = trim(value) - if ("goonhub_api_web_token") - config.goonhub_api_web_token = trim(value) - if ("goonhub2_hostname") - config.goonhub2_hostname = trim(value) + if ("goonhub_events_endpoint") + config.goonhub_events_endpoint = trim(value) + if ("goonhub_events_port") + config.goonhub_events_port = trim(value) + if ("goonhub_events_channel") + config.goonhub_events_channel = trim(value) + if ("goonhub_events_password") + config.goonhub_events_password = trim(value) - if ("youtube_audio_key") - config.youtube_audio_key = trim(value) if ("update_check_enabled") config.update_check_enabled = 1 if ("dmb_filename") @@ -381,12 +342,6 @@ config.whitelistEnabled = TRUE config.baseWhitelistEnabled = TRUE - if ("player_notes_baseurl") - config.player_notes_baseurl = trim(value) - - if ("player_notes_auth") - config.player_notes_auth = trim(value) - if ("whitelist_path") config.whitelist_path = trim(value) @@ -423,13 +378,13 @@ return new /datum/game_mode/extended // Let's fall back to extended! Better than erroring and having to manually restart. -/datum/configuration/proc/pick_random_mode() +/datum/configuration/proc/pick_random_mode(list/exclusions = list()) var/total = 0 var/list/accum = list() var/list/avail_modes = list() for(var/M in src.modes) - if (src.probabilities[M] && getSpecialModeCase(M)) + if (!exclusions.Find(M) && src.probabilities[M] && getSpecialModeCase(M)) total += src.probabilities[M] avail_modes += M accum[M] = total @@ -447,7 +402,6 @@ return null // This essentially will never happen (you'd have to not be able to choose any mode in secret), so it's okay to leave it null, I think //boutput(world, "Returning mode [mode_name]") - message_admins("[mode_name] was chosen as the random game mode!") return src.pick_mode(mode_name) diff --git a/code/datums/controllers/job_controls.dm b/code/datums/controllers/job_controls.dm index 840aa445a7e07..83f6101d5454c 100644 --- a/code/datums/controllers/job_controls.dm +++ b/code/datums/controllers/job_controls.dm @@ -66,7 +66,7 @@ var/datum/job_controller/job_controls dat += "<BR>" dat += "<b>Research Jobs</b><BR>" for(var/datum/job/research/JOB in src.staple_jobs) - dat += "<a href='byond://?src=\ref[src];AlterCap=\ref[JOB]'>[JOB.name]: [countJob("[JOB.name]")]/[JOB.limit]</A <a href='byond://?src=\ref[src];Edit=\ref[JOB]'>Edit</a><BR>" + dat += "<a href='byond://?src=\ref[src];AlterCap=\ref[JOB]'>[JOB.name]: [countJob("[JOB.name]")]/[JOB.limit]</A> <a href='byond://?src=\ref[src];Edit=\ref[JOB]'>Edit</a><BR>" dat += "<BR>" dat += "<b>Engineering Jobs</b><BR>" for(var/datum/job/engineering/JOB in src.staple_jobs) diff --git a/code/datums/controllers/process/events.dm b/code/datums/controllers/process/events.dm new file mode 100644 index 0000000000000..99d86fe84910f --- /dev/null +++ b/code/datums/controllers/process/events.dm @@ -0,0 +1,7 @@ +/datum/controller/process/event_recorder + setup() + name = "Event Recording" + schedule_interval = 1 MINUTE + + doWork() + eventRecorder.process() diff --git a/code/datums/controllers/process/lighting.dm b/code/datums/controllers/process/lighting.dm index 463b9079bb393..16df5968b20f9 100644 --- a/code/datums/controllers/process/lighting.dm +++ b/code/datums/controllers/process/lighting.dm @@ -80,7 +80,7 @@ datum/controller/process/lighting /datum/circular_queue - var/list/list = 0 + var/list/list = null var/read_index = 1 var/write_index = 1 @@ -90,9 +90,7 @@ datum/controller/process/lighting New(ListSize = 500) ..() - list = list() - list.len = ListSize - + src.list = new/list(ListSize) proc/dequeue() .= 0 diff --git a/code/datums/controllers/process/poll_sync.dm b/code/datums/controllers/process/poll_sync.dm new file mode 100644 index 0000000000000..fc980542b83a6 --- /dev/null +++ b/code/datums/controllers/process/poll_sync.dm @@ -0,0 +1,12 @@ +#define POLL_SYNC_PROCESS_SCHEDULE_INTERVAL 1 MINUTE + +/// Syncs poll data with API every minute +/datum/controller/process/poll_sync + setup() + name = "Poll Sync" + schedule_interval = POLL_SYNC_PROCESS_SCHEDULE_INTERVAL + + // initial pregame sync + poll_manager.sync_polldata() + doWork() + poll_manager.sync_polldata() diff --git a/code/datums/controllers/sea_hotspot_controls.dm b/code/datums/controllers/sea_hotspot_controls.dm index 65ee6cca20506..3ad15ef92eb08 100644 --- a/code/datums/controllers/sea_hotspot_controls.dm +++ b/code/datums/controllers/sea_hotspot_controls.dm @@ -1054,6 +1054,61 @@ TYPEINFO(/obj/item/clothing/shoes/stomp_boots) var/stomp_cooldown = 10 SECONDS var/stomp_damage = 20 requires_equip = TRUE + var/prevLayer = null + var/prevPlane = null + + proc/start_jump() + the_mob.visible_message(SPAN_ALERT("<b>[the_mob]</b> activates the boost on their stomper boots!")) + playsound(src.loc, 'sound/items/miningtool_on.ogg', 50, 1) + src.prevLayer = the_mob.layer + src.prevPlane = the_mob.plane + the_mob.layer = EFFECTS_LAYER_4 // need to be above posters and shit + the_mob.plane = PLANE_NOSHADOW_ABOVE + APPLY_ATOM_PROPERTY(the_mob, PROP_ATOM_NEVER_DENSE, src) + the_mob.flags |= TABLEPASS + + if (prob(10)) + the_mob.emote("flip") + + animate(the_mob, + pixel_y = jump_height * 32, + time = jump_time / 2, + easing = EASE_OUT | CIRCULAR_EASING, + flags = ANIMATION_RELATIVE | ANIMATION_PARALLEL) + animate( + pixel_y = -jump_height * 32, + time = jump_time / 2, + easing = EASE_IN | CIRCULAR_EASING, + flags = ANIMATION_RELATIVE) + + proc/end_jump(mob/jumper) + jumper.layer = prevLayer + jumper.plane = prevPlane + REMOVE_ATOM_PROPERTY(jumper, PROP_ATOM_NEVER_DENSE, src) + jumper.flags &= ~TABLEPASS + playsound(src.loc, 'sound/impact_sounds/Metal_Hit_Lowfi_1.ogg', 50, 1, 0.1, 0.7) + + if (locate(/obj/item/clothing/shoes) in jumper.get_equipped_items()) + if (hotspot_controller.stomp_turf(get_turf(src))) //we didn't stomped center, do an additional SFX + SPAWN(0.4 SECONDS) + playsound(src.loc, 'sound/impact_sounds/Metal_Hit_Heavy_1.ogg', 50, 1, 0.1, 0.7) + + for (var/datum/sea_hotspot/H in hotspot_controller.get_hotspots_list(get_turf(src))) + if (BOUNDS_DIST(src, H.center.turf()) == 0) + playsound(src, 'sound/machines/twobeep.ogg', 50, TRUE, 0.1, 0.7) + for (var/mob/O in hearers(jumper, null)) + O.show_message(SPAN_SUBTLE(SPAN_SAY("[SPAN_NAME("[src]")] beeps, \"Hotspot pinned.\"")), 2) + + for (var/mob/M in get_turf(src)) + if (isliving(M) && M != jumper) + random_brute_damage(M, src.stomp_damage, TRUE) + M.changeStatus("weakened", 1 SECOND) + playsound(M.loc, 'sound/impact_sounds/Flesh_Break_1.ogg', 70, 1) + else + // took them off mid air + random_brute_damage(jumper, 25, FALSE) + jumper.changeStatus("weakened", 3 SECONDS) + playsound(jumper.loc, 'sound/impact_sounds/Flesh_Break_1.ogg', 90, 1) execute_ability() if(!(the_item in the_mob.get_equipped_items())) @@ -1062,60 +1117,11 @@ TYPEINFO(/obj/item/clothing/shoes/stomp_boots) if (!ON_COOLDOWN(src, "stomp", src.stomp_cooldown)) // Mostly stolen from jumpy if (istype(the_mob.loc, /turf/)) - the_mob.visible_message(SPAN_ALERT("<b>[the_mob]</b> activates the boost on their stomper boots!")) - playsound(src.loc, 'sound/items/miningtool_on.ogg', 50, 1) - var/prevLayer = the_mob.layer - var/prevPlane = the_mob.plane - the_mob.layer = EFFECTS_LAYER_4 // need to be above posters and shit - the_mob.plane = PLANE_NOSHADOW_ABOVE - APPLY_ATOM_PROPERTY(the_mob, PROP_ATOM_NEVER_DENSE, src) - the_mob.flags |= TABLEPASS - - if (prob(10)) - the_mob.emote("flip") - - animate(the_mob, - pixel_y = jump_height * 32, - time = jump_time / 2, - easing = EASE_OUT | CIRCULAR_EASING, - flags = ANIMATION_RELATIVE | ANIMATION_PARALLEL) - animate( - pixel_y = -jump_height * 32, - time = jump_time / 2, - easing = EASE_IN | CIRCULAR_EASING, - flags = ANIMATION_RELATIVE) - + src.start_jump() SPAWN(0) var/mob/jumper = the_mob // do this so we still have a reference if the button gets deleted sleep(jump_time) - jumper.layer = prevLayer - jumper.plane = prevPlane - REMOVE_ATOM_PROPERTY(jumper, PROP_ATOM_NEVER_DENSE, src) - jumper.flags &= ~TABLEPASS - playsound(src.loc, 'sound/impact_sounds/Metal_Hit_Lowfi_1.ogg', 50, 1, 0.1, 0.7) - - if (locate(/obj/item/clothing/shoes) in jumper.get_equipped_items()) - if (hotspot_controller.stomp_turf(get_turf(src))) //we didn't stomped center, do an additional SFX - SPAWN(0.4 SECONDS) - playsound(src.loc, 'sound/impact_sounds/Metal_Hit_Heavy_1.ogg', 50, 1, 0.1, 0.7) - - for (var/datum/sea_hotspot/H in hotspot_controller.get_hotspots_list(get_turf(src))) - if (BOUNDS_DIST(src, H.center.turf()) == 0) - playsound(src, 'sound/machines/twobeep.ogg', 50, TRUE, 0.1, 0.7) - for (var/mob/O in hearers(jumper, null)) - O.show_message(SPAN_SUBTLE(SPAN_SAY("[SPAN_NAME("[src]")] beeps, \"Hotspot pinned.\"")), 2) - - for (var/mob/M in get_turf(src)) - if (isliving(M) && M != jumper) - random_brute_damage(M, src.stomp_damage, TRUE) - M.changeStatus("weakened", 1 SECOND) - playsound(M.loc, 'sound/impact_sounds/Flesh_Break_1.ogg', 70, 1) - else - // took them off mid air - random_brute_damage(jumper, 25, FALSE) - jumper.changeStatus("weakened", 3 SECONDS) - playsound(jumper.loc, 'sound/impact_sounds/Flesh_Break_1.ogg', 90, 1) - + src.end_jump(jumper) else if (istype(the_mob.loc, /obj/)) var/obj/container = the_mob.loc @@ -1140,6 +1146,20 @@ TYPEINFO(/obj/item/clothing/shoes/stomp_boots) stomp_cooldown = 0 SECONDS stomp_damage = 200 +/obj/item/clothing/shoes/stomp_boots/very_high + name = "very high stomper boots" + desc = "How high IS the ceiling in here?" + abilities = list(/obj/ability_button/stomper_boot_stomp/very_high) + +/obj/ability_button/stomper_boot_stomp/very_high + start_jump() + ..() + APPLY_ATOM_PROPERTY(src.the_mob, PROP_MOB_NOCLIP, src) + + end_jump(mob/jumper) + REMOVE_ATOM_PROPERTY(jumper, PROP_MOB_NOCLIP, src) + ..() + //////////////////////////////////////////////////////////// //actions //////////////////////////////////////////////////////////// diff --git a/code/datums/cookingrecipes.dm b/code/datums/cookingrecipes.dm index 597beec200ad8..c8fbd9e89b2e5 100644 --- a/code/datums/cookingrecipes.dm +++ b/code/datums/cookingrecipes.dm @@ -1081,7 +1081,7 @@ ABSTRACT_TYPE(/datum/cookingrecipe/mixer) item1 = /obj/item/baguette item2 = /obj/item/reagent_containers/food/snacks/ingredient/cheeseslice item3 = /obj/item/reagent_containers/food/snacks/plant/garlic - item3 = /obj/item/reagent_containers/food/snacks/ingredient/butter + item4 = /obj/item/reagent_containers/food/snacks/ingredient/butter cookbonus = 6 output = /obj/item/reagent_containers/food/snacks/garlicbread_ch category = "Pastries and bread-likes" @@ -2221,3 +2221,22 @@ ABSTRACT_TYPE(/datum/cookingrecipe/mixer) lipstick.name = "[lipstick.color_name] lipstick" lipstick.UpdateIcon() return lipstick + +/datum/cookingrecipe/oven/melted_sugar + item1 = /obj/item/reagent_containers/food/snacks/ingredient/sugar + item2 = /obj/item/plate/tray + cookbonus = 10 + output = /obj/item/reagent_containers/food/snacks/ingredient/melted_sugar + +/datum/cookingrecipe/mixer/brownie_batter + item1 = /obj/item/reagent_containers/food/snacks/ingredient/dough_s + item2 = /obj/item/reagent_containers/food/snacks/ingredient/egg + amt2 = 2 + item3 = /obj/item/reagent_containers/food/snacks/candy/chocolate + cookbonus = 10 + output = /obj/item/reagent_containers/food/snacks/ingredient/brownie_batter + +/datum/cookingrecipe/oven/brownie_batch + item1 = /obj/item/reagent_containers/food/snacks/ingredient/brownie_batter + cookbonus = 14 + output = /obj/item/reagent_containers/food/snacks/brownie_batch/ diff --git a/code/datums/crew_credits/crew_credits.dm b/code/datums/crew_credits/crew_credits.dm index 65a4e91f5584f..62cebb19a6d27 100644 --- a/code/datums/crew_credits/crew_credits.dm +++ b/code/datums/crew_credits/crew_credits.dm @@ -335,7 +335,7 @@ src.score_tab_data[SCORE_TAB_SECTION_ENGINEERING] = list( list( "name" = "Power Generated", - "value" = "[engineering_notation(score_tracker.power_generated)]W", + "value" = "[engineering_notation(score_tracker.power_generated / 3600)]Wh", ), list( "name" = "Station Structural Integrity", diff --git a/code/datums/customization_styles.dm b/code/datums/customization_styles.dm index 34faf8e941012..2e629ce3ed68c 100644 --- a/code/datums/customization_styles.dm +++ b/code/datums/customization_styles.dm @@ -34,7 +34,8 @@ TYPEINFO(/datum/customization_style/hair/gimmick) var/default_layer = MOB_HAIR_LAYER1 //Under by default, more direct subtypes where that makes sense /// Icon file this hair should be pulled from var/icon = 'icons/mob/human_hair.dmi' - + /// For blacklisting the weird partial hairstyles that just look broken on random characters + var/random_allowed = TRUE /// Only used if typeinfo.special_criteria is TRUE proc/check_available(client/C) return TRUE @@ -54,48 +55,63 @@ TYPEINFO(/datum/customization_style/hair/gimmick) afro_fade name = "Afro: Faded" id = "afro_fade" + random_allowed = FALSE afroHR name = "Afro: Left Half" id = "afroHR" + random_allowed = FALSE afroHL name = "Afro: Right Half" id = "afroHL" + random_allowed = FALSE afroST name = "Afro: Top" id = "afroST" + random_allowed = FALSE afroSM name = "Afro: Middle Band" id = "afroSM" + random_allowed = FALSE afroSB name = "Afro: Bottom" id = "afroSB" + random_allowed = FALSE afroSL name = "Afro: Left Side" id = "afroSL" + random_allowed = FALSE afroSR name = "Afro: Right Side" id = "afroSR" + random_allowed = FALSE afroSC name = "Afro: Center Streak" id = "afroSC" + random_allowed = FALSE afroCNE name = "Afro: NE Corner" id = "afroCNE" + random_allowed = FALSE afroCNW name = "Afro: NW Corner" id = "afroCNW" + random_allowed = FALSE afroCSE name = "Afro: SE Corner" id = "afroCSE" + random_allowed = FALSE afroCSW name = "Afro: SW Corner" id = "afroCSW" + random_allowed = FALSE afroSV name = "Afro: Tall Stripes" id = "afroSV" + random_allowed = FALSE afroSH name = "Afro: Long Stripes" id = "afroSH" + random_allowed = FALSE balding name = "Balding" id = "balding" @@ -134,12 +150,15 @@ TYPEINFO(/datum/customization_style/hair/gimmick) clownT name = "Clown: Top" id = "clownT" + random_allowed = FALSE clownM name = "Clown: Middle Band" id = "clownM" + random_allowed = FALSE clownB name = "Clown: Bottom" id = "clownB" + random_allowed = FALSE combed_s name = "Combed" id = "combed_s" @@ -223,6 +242,7 @@ TYPEINFO(/datum/customization_style/hair/gimmick) pompS name = "Pompadour: Greaser Shine" id = "pompS" + random_allowed = FALSE scruffy name = "Scruffy" id = "scruffy" @@ -321,33 +341,43 @@ TYPEINFO(/datum/customization_style/hair/gimmick) chub2_s name = "Bang: Left" id = "chub2_s" + random_allowed = FALSE chub_s name = "Bang: Right" id = "chub_s" + random_allowed = FALSE twobangs_long name = "Two Bangs: Long" id = "2bangs_long" + random_allowed = FALSE twobangs_short name = "Two Bangs: Short" id = "2bangs_short" + random_allowed = FALSE flatbangs name = "Bangs: Flat" id = "flatbangs" + random_allowed = FALSE shortflatbangs name = "Bangs: Flat Shorter" id = "shortflatbangs" + random_allowed = FALSE longwavebangs name = "Bangs: Long Wavy" id = "longwavebangs" + random_allowed = FALSE shortwavebangs name = "Bangs: Short Wavy" id = "shortwavebangs" + random_allowed = FALSE sidebangs name = "Bangs: Sides" id = "sidebangs" + random_allowed = FALSE mysterybangs name = "Bangs: Mysterious" id = "mysterybangs" + random_allowed = FALSE bedhead name = "Bedhead" id = "bedhead" @@ -377,6 +407,7 @@ TYPEINFO(/datum/customization_style/hair/gimmick) dreadsA name = "Dreadlocks: Alternating" id = "dreadsA" + random_allowed = FALSE fabio name = "Fabio" id = "fabio" @@ -803,11 +834,11 @@ proc/find_style_by_id(var/target_id, client/C, no_gimmick_hair = FALSE) for (var/datum/customization_style/styletype as anything in get_available_custom_style_types(C, no_gimmick_hair)) if(initial(styletype.id) == target_id) return new styletype - stack_trace("Couldn't find a customization_style with the name \"[target_id]\".") + stack_trace("Couldn't find a customization_style with the id \"[target_id]\".") return new /datum/customization_style/none /// Gets all the customization_styles which are available to a given client. Can be filtered by providing a gender flag or a type -proc/get_available_custom_style_types(client/C, no_gimmick_hair = FALSE, filter_gender=0, filter_type=null) +proc/get_available_custom_style_types(client/C, no_gimmick_hair = FALSE, filter_gender=0, filter_type=null, for_random=FALSE) // Defining static vars with no value doesn't overwrite them with null if we call the proc multiple times // Styles with no restriction var/static/list/always_available @@ -841,17 +872,15 @@ proc/get_available_custom_style_types(client/C, no_gimmick_hair = FALSE, filter_ if (instance.check_available(C)) available += style - if (filter_gender) - for (var/datum/customization_style/style in available) - if (!(initial(style.gender) & filter_gender)) - available -= style - - if (filter_type) - for (var/datum/customization_style/style in available) - if (!ispath(style, filter_type)) - available -= style + for (var/datum/customization_style/style as anything in available) + if (filter_gender && !(initial(style.gender) & filter_gender)) + available -= style + continue + if (filter_type && !ispath(style, filter_type)) + available -= style + continue + if (for_random && !(initial(style.random_allowed))) + available -= style + continue return available - - - diff --git a/code/datums/datacore.dm b/code/datums/datacore.dm index a70f180292b93..5efed911df0f7 100644 --- a/code/datums/datacore.dm +++ b/code/datums/datacore.dm @@ -397,7 +397,8 @@ New() ..() SPAWN(1 SECOND) - statlog_ticket(src, usr) + var/datum/eventRecord/Ticket/ticketEvent = new() + ticketEvent.buildAndSend(src, usr) /datum/fine var/ID = null @@ -422,7 +423,8 @@ SPAWN(1 SECOND) bank_record = data_core.bank.find_record("name", target) if(!bank_record) qdel(src) - statlog_fine(src, usr) + var/datum/eventRecord/Fine/fineEvent = new() + fineEvent.buildAndSend(src, usr) /datum/fine/proc/approve(var/approved_by,var/their_job) if(approver || paid) return diff --git a/code/datums/gamemodes/extended.dm b/code/datums/gamemodes/extended.dm index 0f1c9024157e7..f9c39c56321ad 100644 --- a/code/datums/gamemodes/extended.dm +++ b/code/datums/gamemodes/extended.dm @@ -4,10 +4,11 @@ regular = FALSE do_antag_random_spawns = 0 latejoin_antag_compatible = 0 + var/const/waittime_l = 600 //lower bound on time before intercept arrives (in tenths of seconds) + var/const/waittime_h = 1800 //upper bound on time before intercept arrives (in tenths of seconds) /datum/game_mode/extended/pre_setup() . = ..() - for(var/datum/random_event/event in random_events.events) if(istype(event, /datum/random_event/major/law_rack_corruption)) event.disabled = TRUE @@ -15,3 +16,7 @@ /datum/game_mode/extended/announce() boutput(world, "<B>The current game mode is - Extended!</B>") boutput(world, "<B>Just have fun!</B>") + +/datum/game_mode/extended/post_setup() + SPAWN(rand(waittime_l, waittime_h)) + send_intercept() diff --git a/code/datums/gamemodes/flock.dm b/code/datums/gamemodes/flock.dm index db9bb71130069..71ea1202f3a66 100644 --- a/code/datums/gamemodes/flock.dm +++ b/code/datums/gamemodes/flock.dm @@ -5,6 +5,8 @@ shuttle_available = SHUTTLE_AVAILABLE_DELAY shuttle_available_threshold = 20 MINUTES // default value, probably change this + var/const/waittime_l = 600 //lower bound on time before intercept arrives (in tenths of seconds) + var/const/waittime_h = 1800 //upper bound on time before intercept arrives (in tenths of seconds) //NOTE: if you need to track something, put it here var/list/datum/mind/flockminds = list() @@ -36,7 +38,8 @@ /datum/game_mode/flock/post_setup() for (var/datum/mind/flockmind in flockminds) flockmind.add_antagonist(ROLE_FLOCKMIND, source = ANTAGONIST_SOURCE_ROUND_START) - + SPAWN(rand(waittime_l, waittime_h)) + send_intercept() . = ..() /datum/game_mode/flock/victory_msg() diff --git a/code/datums/gamemodes/gangwar.dm b/code/datums/gamemodes/gangwar.dm index 0af052610caa5..7fd7abfccc53a 100644 --- a/code/datums/gamemodes/gangwar.dm +++ b/code/datums/gamemodes/gangwar.dm @@ -78,13 +78,17 @@ var/list/chosen_leader = antagWeighter.choose(pool = leaders_possible, role = ROLE_GANG_LEADER, amount = num_teams, recordChosen = 1) src.traitors |= chosen_leader - for (var/datum/mind/leader in src.traitors) - leaders_possible.Remove(leader) - leader.special_role = ROLE_GANG_LEADER +#ifndef ME_AND_MY_40_ALT_ACCOUNTS + // check if we can actually run the mode before assigning special roles to minds if(length(get_possible_enemies(ROLE_GANG_MEMBER, round(num_teams * DEFAULT_MAX_GANG_SIZE), force_fill = FALSE) - src.traitors) < round(num_teams * DEFAULT_MAX_GANG_SIZE * 0.66)) //must have at least 2/3 full gangs or there's no point - boutput(world, SPAN_ALERT("<b>ERROR: The readied players are not collectively gangster enough for the selected mode, aborting gangwars.</b>")) + //boutput(world, SPAN_ALERT("<b>ERROR: The readied players are not collectively gangster enough for the selected mode, aborting gangwars.</b>")) return 0 +#endif + + for (var/datum/mind/leader in src.traitors) + leaders_possible.Remove(leader) + leader.special_role = ROLE_GANG_LEADER return 1 @@ -210,6 +214,10 @@ if (istype(winner)) boutput(world, "<h2><b>[winner.gang_name], led by [winner.leader.current.real_name], won the round!</b></h2>") + var/datum/hud/gang_victory/victory_hud = new(winner) + for (var/client/C in clients) + victory_hud.add_client(C) + ..() /datum/game_mode/gang/proc/check_winner() diff --git a/code/datums/gamemodes/gm_parent.dm b/code/datums/gamemodes/gm_parent.dm index 5fbf4081cc806..c8a873c79ed8a 100644 --- a/code/datums/gamemodes/gm_parent.dm +++ b/code/datums/gamemodes/gm_parent.dm @@ -215,8 +215,12 @@ ABSTRACT_TYPE(/datum/game_mode) else if(istype(C.mob, /mob/living/carbon)) if(!allow_carbon) continue - if(!find_job_in_controller_by_string(C.mob.job)?.allow_traitors) - continue + var/datum/job/job = find_job_in_controller_by_string(C.mob.job) + if (job) + if(!job.allow_traitors) + continue + if (!job.can_join_gangs && (type == ROLE_GANG_LEADER || type == ROLE_GANG_MEMBER)) + continue else continue if(filter_proc && !call(filter_proc)(C.mob)) diff --git a/code/datums/gamemodes/nuclear.dm b/code/datums/gamemodes/nuclear.dm index 184aa58d3465b..b1c692ac3745c 100644 --- a/code/datums/gamemodes/nuclear.dm +++ b/code/datums/gamemodes/nuclear.dm @@ -1,6 +1,9 @@ ///This amount of potential target locations are picked, up to every defined plant spot for the map #define AMOUNT_OF_VALID_NUKE_PLANT_LOCATIONS 2 +var/global/list/nuke_op_color_matrix = list("#394470","#c65039", "#63662c") +var/global/list/nuke_op_camo_matrix = null + /datum/game_mode/nuclear name = "Nuclear Emergency" config_tag = "nuclear" @@ -39,7 +42,8 @@ var/list/possible_syndicates = list() if (!landmarks[LANDMARK_SYNDICATE]) - boutput(world, SPAN_ALERT("<b>ERROR: couldn't find Syndicate spawn landmark, aborting nuke round pre-setup.</b>")) + //boutput(world, SPAN_ALERT("<b>ERROR: couldn't find Syndicate spawn landmark, aborting nuke round pre-setup.</b>")) + logTheThing(LOG_DEBUG, null, "Failed to find Syndicate spawn landmark, aborting nuke round pre-setup.") return 0 var/num_players = 0 @@ -62,7 +66,7 @@ #ifndef ME_AND_MY_40_ALT_ACCOUNTS if (!islist(possible_syndicates) || length(possible_syndicates) < 2) - boutput(world, SPAN_ALERT("<b>ERROR: couldn't assign at least two players as Syndicate operatives, aborting nuke round pre-setup.</b>")) + //boutput(world, SPAN_ALERT("<b>ERROR: couldn't assign at least two players as Syndicate operatives, aborting nuke round pre-setup.</b>")) return 0 #endif @@ -123,7 +127,7 @@ target_locations = list("the main security room" = list(/area/station/security/main), "the central research sector hub" = list(/area/station/science/lobby), "the cargo bay (QM)" = list(/area/station/quartermaster/office), - "the engineering control room" = list(/area/station/engine/engineering, /area/station/engine/power), + "the engineering control room" = list(/area/station/engine/engineering), "the central warehouse" = list(/area/station/storage/warehouse), "the courtroom" = list(/area/station/crew_quarters/courtroom, /area/station/crew_quarters/juryroom), "the medbay" = list(/area/station/medical/medbay, /area/station/medical/medbay/surgery, /area/station/medical/medbay/lobby), @@ -148,7 +152,7 @@ for(var/i in 1 to length(target_locations)) target_location_names += target_locations[i] if (!target_location_names) - boutput(world, SPAN_ALERT("<b>ERROR: couldn't assign target location for bomb, aborting nuke round pre-setup.</b>")) + //boutput(world, SPAN_ALERT("<b>ERROR: couldn't assign target location for bomb, aborting nuke round pre-setup.</b>")) message_admins(SPAN_ALERT("<b>CRITICAL BUG:</b> nuke mode setup encountered an error while trying to choose a target location for the bomb (could not select area name)!")) return 0 @@ -161,7 +165,7 @@ src.create_plant_location_markers(target_locations, target_location_names) if (!target_location_type) - boutput(world, SPAN_ALERT("<b>ERROR: couldn't assign target location for bomb, aborting nuke round pre-setup.</b>")) + //boutput(world, SPAN_ALERT("<b>ERROR: couldn't assign target location for bomb, aborting nuke round pre-setup.</b>")) message_admins(SPAN_ALERT("<b>CRITICAL BUG:</b> nuke mode setup encountered an error while trying to choose a target location for the bomb (could not select area type)!")) return 0 @@ -423,23 +427,28 @@ for (var/area_type in target_locations[target_location_names[i]]) areas += get_areas(area_type) - var/max_x = 1 - var/min_x = world.maxx - var/max_y = 1 - var/min_y = world.maxy + var/total_x = 0 + var/total_y = 0 + var/total_turfs = 0 for (var/area/area in areas) if (area.z != Z_LEVEL_STATION) continue for (var/turf/T in area) - max_x = max(max_x, T.x) - min_x = min(min_x, T.x) - max_y = max(max_y, T.y) - min_y = min(min_y, T.y) + total_x += T.x + total_y += T.y + total_turfs += 1 if (!marker_name) marker_name = capitalize(area.name) - var/target_x = (max_x + min_x) / 2 - var/target_y = (max_y + min_y) / 2 + var/target_x = round(total_x / total_turfs) + var/target_y = round(total_y / total_turfs) + + // If its not in the right area we can at least try randomly + var/marker_area = get_area(locate(target_x, target_y, Z_LEVEL_STATION)) + if (!(marker_area in areas)) + var/turf/T = pick(get_area_turfs(pick(areas))) + target_x = T.x + target_y = T.y var/turf/plant_location = locate(target_x, target_y, Z_LEVEL_STATION) plant_location.AddComponent(/datum/component/minimap_marker, MAP_SYNDICATE, "nuclear_bomb_pin", 'icons/obj/minimap/minimap_markers.dmi', "[marker_name] Plant Site") @@ -495,8 +504,6 @@ var/syndicate_name = null opacity = 0 density = 1 - - New() ..() var/wins = world.load_intra_round_value("nukie_win") @@ -528,6 +535,14 @@ var/syndicate_name = null onclose(user, "cairngorm_stats_[src]") return + +/obj/New() + . = ..() + if(length(nuke_op_camo_matrix) && (src in by_cat[TR_CAT_NUKE_OP_STYLE])) + src.color = color_mapping_matrix(nuke_op_color_matrix, nuke_op_camo_matrix) + + + /obj/cairngorm_stats/left icon_state = "memorial_left" diff --git a/code/datums/gamemodes/pirate.dm b/code/datums/gamemodes/pirate.dm new file mode 100644 index 0000000000000..6b34622fee4da --- /dev/null +++ b/code/datums/gamemodes/pirate.dm @@ -0,0 +1,72 @@ +/datum/game_mode/pirate + name = "Pirates" + config_tag = "yarr" + regular = FALSE + var/list/datum/mind/pirate_minds = list() + var/const/minimum_pirates = 2 + var/const/maximum_pirates = 6 + var/const/pop_divisor = 6 + var/const/waittime_l = 600 //lower bound on time before intercept arrives (in tenths of seconds) + var/const/waittime_h = 1800 //upper bound on time before intercept arrives (in tenths of seconds) + + announce() + boutput(world, "<B>The current game mode is - Pirates!</B>") + boutput(world, "<B>Pirates are approaching [station_name(1)]! They intend to board us</B>") + + pre_setup() + . = ..() + var/list/possible_pirates = list() + + var/num_players = 0 + for(var/client/C) + var/mob/new_player/player = C.mob + if (!istype(player)) continue + + if (player.ready) + num_players++ + + var/randomizer = rand(pop_divisor+1) + var/target_antag_count = clamp(round((num_players + randomizer )/ pop_divisor), minimum_pirates, maximum_pirates) + + //just going to piggy back of salvagers pref for ince this gimmick mode + possible_pirates = get_possible_enemies(ROLE_SALVAGER, target_antag_count) + + // fail if not enough players unless forced + if (!length(possible_pirates)) + return 0 + if ((master_mode != config_tag) \ + && ((length(possible_pirates) < minimum_pirates) || (target_antag_count < minimum_pirates))) + return 0 + + //load in the ship dmm + get_singleton(/datum/mapPrefab/allocated/pirate_ship).load() + + // choose the antags + var/list/chosen_antags = antagWeighter.choose(pool = possible_pirates, role = ROLE_PIRATE, amount = target_antag_count, recordChosen = 1) + + // store our chosen minds, assign role + pirate_minds |= chosen_antags + for (var/datum/mind/pirate in pirate_minds) + pirate.assigned_role = "MODE" //So they aren't chosen for other jobs. + pirate.special_role = ROLE_PIRATE + possible_pirates.Remove(pirate) + + // pick a captain and first mate + var/list/L = pirate_minds.Copy() + var/datum/mind/pirate_captain = pick(L) + pirate_captain?.special_role = ROLE_PIRATE_CAPTAIN + L -= pirate_captain + if (length(L)) // in case we only have 1 pirate + var/datum/mind/pirate_first_mate = pick(L) + pirate_first_mate?.special_role = ROLE_PIRATE_FIRST_MATE + + return TRUE + + post_setup() + . = ..() + for (var/datum/mind/pirate in pirate_minds) + equip_antag(pirate) + + SPAWN(rand(waittime_l, waittime_h)) + send_intercept() + diff --git a/code/datums/gamemodes/pod_wars/pw_manufacturing_.dm b/code/datums/gamemodes/pod_wars/pw_manufacturing_.dm index 065c54b0acc82..3f91bf8b05cd3 100644 --- a/code/datums/gamemodes/pod_wars/pw_manufacturing_.dm +++ b/code/datums/gamemodes/pod_wars/pw_manufacturing_.dm @@ -11,6 +11,8 @@ /obj/item/material_piece/molitz ) available = list( + /datum/manufacture/pod/preassembeled_parts, + /datum/manufacture/putt/preassembeled_parts, /datum/manufacture/pod_wars/lock, /datum/manufacture/engine2, /datum/manufacture/engine3, @@ -57,6 +59,8 @@ name = "\improper NanoTrasen ship component fabricator" team_num = TEAM_NANOTRASEN available = list( + /datum/manufacture/pod/preassembeled_parts, + /datum/manufacture/putt/preassembeled_parts, /datum/manufacture/pod_wars/lock, /datum/manufacture/engine2, /datum/manufacture/engine3, @@ -84,6 +88,8 @@ name = "\improper Syndicate ship component fabricator" team_num = TEAM_SYNDICATE available = list( + /datum/manufacture/pod/preassembeled_parts, + /datum/manufacture/putt/preassembeled_parts, /datum/manufacture/pod_wars/lock, /datum/manufacture/engine2, /datum/manufacture/engine3, diff --git a/code/datums/gamemodes/pod_wars/pw_misc_objects.dm b/code/datums/gamemodes/pod_wars/pw_misc_objects.dm index d6c82cff76098..57e99a9069e16 100644 --- a/code/datums/gamemodes/pod_wars/pw_misc_objects.dm +++ b/code/datums/gamemodes/pod_wars/pw_misc_objects.dm @@ -712,6 +712,7 @@ ABSTRACT_TYPE(/obj/deployable_turret/pod_wars) event_handler_flags = USE_FLUID_ENTER layer = OBJ_LAYER-0.1 stops_space_move = TRUE + var/icon_damaged = "barricade-damaged" var/health = 100 var/health_max = 100 @@ -778,11 +779,78 @@ ABSTRACT_TYPE(/obj/deployable_turret/pod_wars) //This works correctly because at the time of writing, these barricades cannot be repaired. if (health < health_max/2) - icon_state = "barricade-damaged" + if (icon_damaged) + icon_state = icon_damaged if (health <= 0) qdel(src) +/obj/barricade/barbed + name = "barbed barricade" + desc = "A barbed barricade. It looks like you can shoot over it but making contact with it might be tricky." + var/cooldown_time = 3 SECOND + var/overlay_state = "barricade_sharp" + + New() + . = ..() + if(overlay_state) + var/overlay = image(src.icon, overlay_state) + UpdateOverlays(overlay, "barb") + + proc/pokey(mob/target, poke_chance=33) + if(prob(poke_chance)) + if(ON_COOLDOWN(target, "BARB_\ref[src]", src.cooldown_time)) return + target.visible_message("[target] gets caught up in [src]", "You get caught up in [src] and notice it has drawn blood.") + take_bleeding_damage(target, null, rand(3,7), DAMAGE_STAB) + return TRUE + + Bumped(atom/AM) + . = ..() + if(ismob(AM)) + var/mob/M = AM + if(M.m_intent != "walk") + pokey(M, 98) + else + pokey(M, 30) + + attackby(var/obj/item/W, var/mob/user) + ..() + pokey(user, 15) + + attack_hand(mob/user) + ..() + if (user.a_intent != INTENT_HELP) + pokey(user, 88) + else + pokey(user, 33) + +/obj/barricade/barbed/wire + name = "barbed wire" + desc = "A coiled length of barbed wire has been setup as a barricade." + icon_state = "bwire" + health = 50 + health_max = 50 + overlay_state = null + density = 0 + icon_damaged = null + + pokey(mob/target, poke_chance=33) + . = ..() + target.changeStatus("slowed", 1 SECONDS) + if(.) + target.changeStatus("slowed", 4 SECONDS) + target.TakeDamageAccountArmor("All", rand(1,2), 0, 0, DAMAGE_CUT) + + Cross(atom/movable/mover) + if(ismob(mover)) + var/mob/M = mover + if(M.m_intent != "walk") + pokey(M, 98) + else + pokey(M, 30) + + return (!density) + //barricade deployer /obj/item/deployer/barricade @@ -827,8 +895,7 @@ ABSTRACT_TYPE(/obj/deployable_turret/pod_wars) if (user) newThing.add_fingerprint(user) logTheThing(LOG_STATION, user, "builds \a [newThing] (<b>Material:</b> [newThing.material && newThing.material.getID() ? "[newThing.material.getID()]" : "*UNKNOWN*"]) at [log_loc(T)].") - user.u_equip(src) - qdel(src) + change_stack_amount(-1) return newThing /obj/item_dispenser/barricade diff --git a/code/datums/gamemodes/pod_wars/pw_weapons.dm b/code/datums/gamemodes/pod_wars/pw_weapons.dm index b717fea37fb29..f119a7f2c9692 100644 --- a/code/datums/gamemodes/pod_wars/pw_weapons.dm +++ b/code/datums/gamemodes/pod_wars/pw_weapons.dm @@ -65,7 +65,7 @@ TYPEINFO(/obj/item/gun/energy/blaster_pod_wars) ratio = round(ratio, 0.25) * 100 if (ratio == 0) return - indicator_display.icon_state = "pw_pistol_power-[ratio]" + indicator_display.icon_state = "[icon_state]_power-[ratio]" //using icon_state to set the charge icon? probably fine. indicator_display.color = display_color UpdateOverlays(indicator_display, "ind_dis") @@ -92,6 +92,64 @@ TYPEINFO(/obj/item/gun/energy/blaster_pod_wars) initial_proj = /datum/projectile/laser/blaster/pod_pilot/red_SY team_num = 2 +/obj/item/gun/energy/blaster_pod_wars/smg + name = "blaster smg" + desc = "A dangerous-looking blaster smg. It's self-charging by a radioactive power cell." + icon_state = "pw_smg" + item_state = "pw_smg" + w_class = W_CLASS_NORMAL + force = 12 + cell_type = /obj/item/ammo/power_cell/self_charging/pod_wars_basic + initial_proj = /datum/projectile/laser/blaster/pod_pilot/blue_NT/smg + spread_angle = 10 + + New() + AddComponent(/datum/component/holdertargeting/fullauto, 2, 1.5, 1) + ..() + nanotrasen + muzzle_flash = "muzzle_flash_plaser" + display_color = "#3d9cff" + item_state = "pw_smg_nt" + initial_proj = /datum/projectile/laser/blaster/pod_pilot/blue_NT/smg + team_num = 1 + + + syndicate + muzzle_flash = "muzzle_flash_laser" + display_color = "#ff4043" + item_state = "pw_smg_sy" + initial_proj = /datum/projectile/laser/blaster/pod_pilot/red_SY/smg + team_num = 2 + + + +/obj/item/gun/energy/blaster_pod_wars/shotgun + name = "blaster smg" + desc = "A dangerous-looking blaster shotgun. It's self-charging by a radioactive power cell." + icon_state = "pw_shotgun" + item_state = "pw_shotgun" + w_class = W_CLASS_NORMAL + force = 12 + initial_proj = /datum/projectile/special/spreader/pwshotgunspread + cell_type = /obj/item/ammo/power_cell/self_charging/pod_wars_basic + two_handed = 1 + can_dual_wield = 0 + shoot_delay = 8 DECI SECONDS + + nanotrasen + muzzle_flash = "muzzle_flash_plaser" + display_color = "#3d9cff" + item_state = "pw_shotgun_nt" + initial_proj = /datum/projectile/special/spreader/pwshotgunspread/NT + team_num = 1 + + syndicate + muzzle_flash = "muzzle_flash_laser" + display_color = "#ff4043" + item_state = "pw_shotgun_sy" + initial_proj = /datum/projectile/special/spreader/pwshotgunspread/SY + team_num = 2 + /obj/item/ammo/power_cell/higher_power name = "power cell - 500" desc = "A power cell that holds a max of 500PU" diff --git a/code/datums/gamemodes/salvager.dm b/code/datums/gamemodes/salvager.dm index c1122a4e69096..3664cf4efd228 100644 --- a/code/datums/gamemodes/salvager.dm +++ b/code/datums/gamemodes/salvager.dm @@ -38,7 +38,7 @@ possible_salvagers = get_possible_enemies(ROLE_SALVAGER, target_antag_count) if (!length(possible_salvagers)) - boutput(world, SPAN_ALERT("<b>ERROR: couldn't assign any players as Salvagers, aborting salvager round pre-setup.</b>")) + //boutput(world, SPAN_ALERT("<b>ERROR: couldn't assign any players as Salvagers, aborting salvager round pre-setup.</b>")) return 0 if( ( master_mode != config_tag ) \ && ( (length(possible_salvagers) < minimum_salvagers) || (target_antag_count < minimum_salvagers) ) ) diff --git a/code/datums/gamemodes/spy_theft.dm b/code/datums/gamemodes/spy_theft.dm index 9320da427d627..10b79df680bcf 100644 --- a/code/datums/gamemodes/spy_theft.dm +++ b/code/datums/gamemodes/spy_theft.dm @@ -320,7 +320,7 @@ station_bounties[/obj/item/clothing/suit/hazard/bio_suit] = 1 station_bounties[/obj/item/clothing/suit/hazard/paramedic] = 1 station_bounties[/obj/item/clothing/suit/judgerobe] = 1 - station_bounties[/obj/item/clothing/suit/fire] = 1 + station_bounties[/obj/item/clothing/suit/hazard/fire] = 1 station_bounties[/obj/item/clothing/suit/armor/vest] = 2 station_bounties[/obj/item/robodefibrillator] = 1 diff --git a/code/datums/gameticker.dm b/code/datums/gameticker.dm index 391a6c6d2deba..a7fd9eae9ad94 100644 --- a/code/datums/gameticker.dm +++ b/code/datums/gameticker.dm @@ -121,20 +121,43 @@ var/global/current_state = GAME_STATE_INVALID set background = 1 //Create and announce mode - switch(master_mode) - if("random","secret") src.mode = config.pick_random_mode() - if("action") - src.mode = config.pick_mode(pick("nuclear","wizard","blob")) - message_admins("[src.mode.name] was chosen from the \"action\" game mode pool!") - if("intrigue") - src.mode = config.pick_mode(pick(prob(300);"traitor", prob(200);"mixed_rp", prob(75);"changeling",prob(75);"vampire", prob(50);"spy_theft", prob(50);"arcfiend", prob(50);"salvager", prob(50);"extended", prob(50);"gang")) - message_admins("[src.mode.name] was chosen from the \"intrigue\" game mode pool!!") - if("pod_wars") src.mode = config.pick_mode("pod_wars") - else src.mode = config.pick_mode(master_mode) - -#if defined(MAP_OVERRIDE_POD_WARS) - src.mode = config.pick_mode("pod_wars") -#endif + // try to roll a gamemode 10 times before giving up + var/attempts_left = 10 + var/list/failed_modes = list() + while(attempts_left > 0) + switch(master_mode) + if("random","secret") src.mode = config.pick_random_mode(failed_modes) + if("action") + src.mode = config.pick_mode(pick("nuclear","wizard","blob")) + if("intrigue") + src.mode = config.pick_mode(pick(prob(300);"traitor", prob(200);"mixed_rp", prob(75);"changeling",prob(75);"vampire", prob(50);"spy_theft", prob(50);"arcfiend", prob(50);"salvager", prob(50);"extended")) + if("pod_wars") src.mode = config.pick_mode("pod_wars") + else src.mode = config.pick_mode(master_mode) + + #if defined(MAP_OVERRIDE_POD_WARS) + src.mode = config.pick_mode("pod_wars") + #endif + + //Configure mode and assign player to special mode stuff + var/can_continue = src.mode.pre_setup() + + if(can_continue) + break + attempts_left-- + failed_modes += src.mode.config_tag + // no point trying to do this 9 more times if we know whats gonna happen + if(src.mode.config_tag == master_mode) + attempts_left = 0 + logTheThing(LOG_DEBUG, null, "Error setting up [mode] for [master_mode], trying [attempts_left] more times.") + qdel(src.mode) + src.mode = null + + if(!src.mode) + logTheThing(LOG_DEBUG, null, "Gamemode selection on mode [master_mode] failed, reverting to pre-game lobby.") + boutput(world, "<B>Error setting up [master_mode].</B> reverting to pre-game lobby.") + current_state = GAME_STATE_PREGAME + SPAWN(0) pregame() + return 0 if(hide_mode) #ifdef RP_MODE @@ -149,20 +172,8 @@ var/global/current_state = GAME_STATE_INVALID else src.mode.announce() - //Configure mode and assign player to special mode stuff - var/can_continue = src.mode.pre_setup() - - if(!can_continue) - qdel(mode) - - current_state = GAME_STATE_PREGAME - boutput(world, "<B>Error setting up [master_mode].</B> Reverting to pre-game lobby.") - - SPAWN(0) pregame() - - return 0 - logTheThing(LOG_DEBUG, null, "Chosen game mode: [mode] ([master_mode]) on map [getMapNameFromID(map_setting)].") + message_admins("Chosen game mode: [mode] ([master_mode]).") //Tell the participation recorder to queue player data while the round starts up participationRecorder.setHold() @@ -275,6 +286,7 @@ var/global/current_state = GAME_STATE_INVALID //Tell the participation recorder that we're done FAFFING ABOUT participationRecorder.releaseHold() + roundManagement.recordUpdate(mode) #ifdef BAD_MONKEY_NO_BANANA for_by_tcl(monke, /mob/living/carbon/human/npc/monkey) @@ -330,7 +342,6 @@ var/global/current_state = GAME_STATE_INVALID proc/create_characters() // SHOULD_NOT_SLEEP(TRUE) for (var/mob/new_player/player in mobs) - var/ckey = player.mind?.ckey #ifdef TWITCH_BOT_ALLOWED if (player.twitch_bill_spawn) player.try_force_into_bill() @@ -338,10 +349,14 @@ var/global/current_state = GAME_STATE_INVALID #endif if (player.ready) - if (player.mind && ckey) + var/datum/player/P + if (player.mind) + P = player.mind.get_player() + + if (player.mind.ckey) //Record player participation in this round via the goonhub API SPAWN(0) - participationRecorder.record(ckey) + participationRecorder.record(P) if (player.mind && player.mind.assigned_role == "AI") player.close_spawn_windows() @@ -352,19 +367,19 @@ var/global/current_state = GAME_STATE_INVALID player.close_spawn_windows() logTheThing(LOG_DEBUG, player, "<b>Late join</b>: assigned antagonist role: wraith.") SPAWN(0) - antagWeighter.record(role = ROLE_WRAITH, ckey = ckey) + antagWeighter.record(role = ROLE_WRAITH, P = P) else if (player.mind && player.mind.special_role == ROLE_BLOB) player.close_spawn_windows() logTheThing(LOG_DEBUG, player, "<b>Late join</b>: assigned antagonist role: blob.") SPAWN(0) - antagWeighter.record(role = ROLE_BLOB, ckey = ckey) + antagWeighter.record(role = ROLE_BLOB, P = P) else if (player.mind && player.mind.special_role == ROLE_FLOCKMIND) player.close_spawn_windows() logTheThing(LOG_DEBUG, player, "<b>Late join</b>: assigned antagonist role: flockmind.") SPAWN(0) - antagWeighter.record(role = ROLE_FLOCKMIND, ckey = ckey) + antagWeighter.record(role = ROLE_FLOCKMIND, P = P) else if (player.mind) if (player.client.using_antag_token && ticker.mode.antag_token_support) @@ -542,15 +557,36 @@ var/global/current_state = GAME_STATE_INVALID if (elapsed > 0) ticker.round_elapsed_ticks += elapsed + proc/sendEvents() + // Antags and antag objectives + for (var/datum/antagonist/antagonist_role as anything in get_all_antagonists()) + var/datum/mind/M = antagonist_role.owner + var/datum/eventRecord/Antag/antagEvent = new() + antagEvent.buildAndSend(antagonist_role) + + if (M.objectives) + for (var/datum/objective/objective in M.objectives) + #ifdef CREW_OBJECTIVES + if (istype(objective, /datum/objective/crew)) continue + #endif + var/datum/eventRecord/AntagObjective/antagObjectiveEvent = new() + antagObjectiveEvent.buildAndSend(antagonist_role, objective) + + // AI Laws + for_by_tcl(aiPlayer, /mob/living/silicon/ai) + var/laws[] = new() + if (aiPlayer.law_rack_connection) + laws = aiPlayer.law_rack_connection.format_for_irc() + for (var/key in laws) + var/datum/eventRecord/AILaw/aiLawEvent = new() + aiLawEvent.buildAndSend(aiPlayer, key, laws[key]) + + /datum/controller/gameticker/proc/declare_completion() //End of round statistic collection for goonhub save_flock_stats() - //logTheThing(LOG_DEBUG, null, "Zamujasa: [world.timeofday] statlog_traitors") - statlog_traitors() - //logTheThing(LOG_DEBUG, null, "Zamujasa: [world.timeofday] statlog_ailaws") - statlog_ailaws(0) - //logTheThing(LOG_DEBUG, null, "Zamujasa: [world.timeofday] round_end_data") - round_end_data(1) //Export round end packet (normal completion) + src.sendEvents() + roundManagement.recordEnd() var/pets_rescued = 0 for(var/pet in by_cat[TR_CAT_PETS]) @@ -802,16 +838,18 @@ var/global/current_state = GAME_STATE_INVALID logTheThing(LOG_DEBUG, null, "[player.ckey] lost held item") player.client.persistent_bank_item = "none" - bulk_commit[player.ckey] = list( - "persistent_bank" = list( - "command" = "add", - "value" = earnings - ), - "persistent_bank_item" = list( - "command" = "replace", - "value" = player.client.persistent_bank_item + if (player.client.player.id) + bulk_commit["[bulk_commit.len + 1]"] = list( + "player_id" = player.client.player.id, + "key" = "persistent_bank", + "value" = player.client.persistent_bank + earnings ) + bulk_commit["[bulk_commit.len + 1]"] = list( + "player_id" = player.client.player.id, + "key" = "persistent_bank_item", + "value" = player.client.persistent_bank_item ) + SPAWN(0) bank_earnings.pilot_bonus = pilot_bonus bank_earnings.final_payout = earnings @@ -823,7 +861,7 @@ var/global/current_state = GAME_STATE_INVALID //do bulk commit SPAWN(0) - cloud_put_bulk(json_encode(bulk_commit)) + cloud_saves_put_data_bulk(bulk_commit) logTheThing(LOG_DEBUG, null, "Done with spacebux") for_by_tcl(P, /obj/bookshelf/persistent) //make the bookshelf save its contents @@ -855,6 +893,7 @@ var/global/current_state = GAME_STATE_INVALID SPAWN(0) show_xp_summary(E.key, E) logTheThing(LOG_DEBUG, null, "Did credits") + var/count = 1 var/list/playtimes = list() //associative list with the format list("ckeys\[[player_ckey]]" = playtime_in_seconds) for_by_tcl(P, /datum/player) if (!P.ckey) @@ -862,12 +901,17 @@ var/global/current_state = GAME_STATE_INVALID P.log_leave_time() //get our final playtime for the round (wont cause errors with people who already d/ced bc of smart code) if (!P.current_playtime) continue - playtimes["ckeys\[[P.ckey]]"] = round((P.current_playtime / (1 SECOND))) //rounds 1/10th seconds to seconds + playtimes["[count]"] = list("id" = P.id, "seconds_played" = round((P.current_playtime / (1 SECOND)))) //rounds 1/10th seconds to seconds + count++ + try - apiHandler.queryAPI("playtime/record-multiple", playtimes) - catch(var/exception/e) - logTheThing(LOG_DEBUG, null, "playtime was unable to be logged because of: [e.name]") - logTheThing(LOG_DIARY, null, "playtime was unable to be logged because of: [e.name]", "debug") + var/datum/apiRoute/players/playtime/addPlaytime = new + addPlaytime.buildBody(config.server_id, playtimes) + apiHandler.queryAPI(addPlaytime) + catch (var/exception/e) + var/datum/apiModel/Error/error = e.name + logTheThing(LOG_DEBUG, null, "playtime was unable to be logged because of: [error.message]") + logTheThing(LOG_DIARY, null, "playtime was unable to be logged because of: [error.message]", "debug") if(global.lag_detection_process.automatic_profiling_on) global.lag_detection_process.automatic_profiling(force_stop=TRUE) diff --git a/code/datums/gauntlet/crittergauntlet.dm b/code/datums/gauntlet/crittergauntlet.dm index 4274cbf18f4b8..13a81ed8f51dc 100644 --- a/code/datums/gauntlet/crittergauntlet.dm +++ b/code/datums/gauntlet/crittergauntlet.dm @@ -291,7 +291,8 @@ C.add_centcom_report(ALERT_GENERAL, command_report) command_alert(command_report, "Critter Gauntlet match finished") - statlog_gauntlet(moblist_names, score, current_level) + var/datum/eventRecord/GauntletHighScore/gauntletHighScoreEvent = new() + gauntletHighScoreEvent.send(moblist_names, score, current_level) SPAWN(0) for (var/obj/item/I in staging) @@ -1233,21 +1234,18 @@ var/global/datum/arena/gauntletController/gauntlet_controller = new() count = 10 types = list(/mob/living/critter/small_animal/floateye) -/proc/queryGauntletMatches(data) - if (islist(data) && data["data_hub_callback"]) - logTheThing(LOG_DEBUG, null, "<b>Marquesas/Gauntlet Query:</b> Invoked (data is [data])") - for (var/userkey in data["keys"]) - logTheThing(LOG_DEBUG, null, "<b>Marquesas/Gauntlet Query:</b> Got key [userkey].") - var/matches = data[userkey] - logTheThing(LOG_DEBUG, null, "<b>Marquesas/Gauntlet Query:</b> Matches for [userkey]: [matches].") - var/obj/item/card/id/gauntlet/G = locate("gauntlet-id-[userkey]") in world - if (G && istype(G)) - G.SetMatchCount(text2num(matches)) - else - logTheThing(LOG_DEBUG, null, "<b>Marquesas/Gauntlet Query:</b> Could not locate ID 'gauntlet-id-[userkey]'.") - return 1 - +/proc/queryGauntletMatches(key) + var/datum/apiModel/PreviousGauntlets/previousGauntlets + try + var/datum/apiRoute/gauntlet/getprevious/getPreviousGauntlets = new + getPreviousGauntlets.queryParams = list("key" = key) + previousGauntlets = apiHandler.queryAPI(getPreviousGauntlets) + catch + return FALSE + + var/obj/item/card/id/gauntlet/G = locate("gauntlet-id-[key]") in world + if (G && istype(G)) + G.SetMatchCount(previousGauntlets.gauntlets_completed) else - var/list/query = list() - query["key"] = data - apiHandler.queryAPI("gauntlet/getPrevious", query) + logTheThing(LOG_DEBUG, null, "<b>Marquesas/Gauntlet Query:</b> Could not locate ID 'gauntlet-id-[key]'.") + return FALSE diff --git a/code/datums/hud/critter.dm b/code/datums/hud/critter.dm index b37ecd47fb763..0749f15bdcfd7 100644 --- a/code/datums/hud/critter.dm +++ b/code/datums/hud/critter.dm @@ -77,8 +77,7 @@ if (src.master.can_bleed) src.create_bleeding_element() - if (src.master.can_throw) - src.create_throwing_element() + src.create_throwing_element() src.create_intent_element() src.create_pulling_element() @@ -265,7 +264,8 @@ if ("throw") var/icon_y = text2num(params["icon-y"]) if (icon_y > 16 || src.master.in_throw_mode) - src.master.toggle_throw_mode() + if (src.master.can_throw) + src.master.toggle_throw_mode() else src.master.drop_item(null, TRUE) if ("resist") @@ -532,7 +532,7 @@ src.bleeding.desc = "This indicator warns that you are currently bleeding. You will die if the situation is not remedied." /datum/hud/critter/proc/create_throwing_element() - src.throwing = src.create_screen("throw", "throw mode", src.hud_icon, "throw0",\ + src.throwing = src.create_screen("throw", "throw mode", src.hud_icon, src.master.can_throw ? "throw0" : "drop0",\ "CENTER[src.next_right()], SOUTH", HUD_LAYER_1) /datum/hud/critter/proc/create_intent_element() diff --git a/code/datums/hud/gang_victory.dm b/code/datums/hud/gang_victory.dm new file mode 100644 index 0000000000000..80fe7f899e035 --- /dev/null +++ b/code/datums/hud/gang_victory.dm @@ -0,0 +1,52 @@ +/datum/hud/gang_victory + click_check = 0 + var/atom/movable/screen/text + + New(datum/gang/winning_gang) + //big gang name victory text + src.text = create_screen("gangvictory", "Gang Victory Display", null, "", "NORTH,CENTER", HUD_LAYER_3) + text.maptext = "<span class='c ol vga vt' style='background: #00000080;font-size: 5;'>[winning_gang.gang_name] won the round!</span>" + text.maptext_width = 600 + text.maptext_x = -(600 / 2) + 16 + text.maptext_y = -150 + text.maptext_height = 100 + text.plane = PLANE_HUD + text.layer = 420 + + //individual gang member portraits + var/member_count = 0 + var/list/members = winning_gang.members + members.Insert(round(length(members)/2), winning_gang.leader) //put the leader roughly in the middle + for (var/datum/mind/gang_mind in members) + var/mob/ganger = gang_mind.current + if (!ganger) //paranoia because we REALLY don't want to blow up the round-end stack + continue + + if (isliving(ganger) && isdead(ganger)) + if (!ganger.ghost) + ganger = ganger.ghostize() + else + ganger = ganger.ghost + + var/position = -round(length(members)/2) + member_count + var/position_string = "CENTER[position > 0 ? "+" : ""][position ? position : ""], CENTER+1.8" + + //getFlatIcon's dir argument doesn't work here for some reason + var/old_dir = ganger.dir + ganger.set_dir(SOUTH) + var/icon/flat_icon = getFlatIcon(ganger) + ganger.set_dir(old_dir) + + var/atom/movable/screen/screen_obj = create_screen("gang_member[member_count]", ganger.real_name, null, "", position_string, mouse_opacity=FALSE) + screen_obj.Scale(2,2) + screen_obj.icon = flat_icon + + var/atom/movable/screen/nametag = create_screen("gang_member[member_count]_name", ganger.real_name, null, "", position_string, mouse_opacity=FALSE) + nametag.maptext_y = 40 + nametag.maptext_x = -32 + //centered, pixel, drop shadow (I love readable class names!) + nametag.maptext = "<span class='c pixel sh' [gang_mind == winning_gang.leader ? "style='color: #FFD149;'" : ""]>[ganger.real_name]</span>" + nametag.maptext_width = 100 + + member_count++ + ..() diff --git a/code/datums/hud/human.dm b/code/datums/hud/human.dm index cb0bb30ce5e9d..1175e1c373098 100644 --- a/code/datums/hud/human.dm +++ b/code/datums/hud/human.dm @@ -852,14 +852,15 @@ if (istype(master.loc,/obj/vehicle/)) //so we always see vehicle buttons var/obj/vehicle/V = master.loc - for(var/obj/ability_button/B2 in V.ability_buttons) - B2.screen_loc = "NORTH-[pos_y],[pos_x]" - master.client.screen += B2 - B2.the_mob = master - pos_x++ - if(pos_x > 15) - pos_x = 1 - pos_y++ + if (V.rider == src.master) //unless we're a passenger + for(var/obj/ability_button/B2 in V.ability_buttons) + B2.screen_loc = "NORTH-[pos_y],[pos_x]" + master.client.screen += B2 + B2.the_mob = master + pos_x++ + if(pos_x > 15) + pos_x = 1 + pos_y++ proc/update_sprinting() diff --git a/code/datums/hud/robot.dm b/code/datums/hud/robot.dm index 7aef58becff6e..3e8593c17dc01 100644 --- a/code/datums/hud/robot.dm +++ b/code/datums/hud/robot.dm @@ -1,10 +1,18 @@ /atom/movable/screen/hud/robotstorage MouseEntered(location, control, params) + // there is no reason for master to ever be something other than /datum/hud/silicon here + // and yet + if(istype(src.master, /datum/hud/silicon/robot)) + var/datum/hud/silicon/robot/hud = src.master + if(usr != hud.silicon) return if (src.name) src.maptext_x = 34 src.maptext_width = 128 src.maptext = "<span class='vm l pixel sh'>[src.name]</span>" MouseExited(location, control, params) + if(istype(src.master, /datum/hud/silicon/robot)) + var/datum/hud/silicon/robot/hud = src.master + if(usr != hud.silicon) return src.maptext = null /datum/hud/silicon/robot @@ -170,31 +178,19 @@ if(!O || O.loc != master.module) return if(!master.module_states[1] && istype(master.part_arm_l,/obj/item/parts/robot_parts/arm/)) - master.module_states[1] = O - O.set_loc(master) - O.pickup(master) // Handle light datums and the like. + master.equip_slot(1, O) else if(!master.module_states[2]) - master.module_states[2] = O - O.set_loc(master) - O.pickup(master) + master.equip_slot(2, O) else if(!master.module_states[3] && istype(master.part_arm_r,/obj/item/parts/robot_parts/arm/)) - master.module_states[3] = O - O.set_loc(master) - O.pickup(master) + master.equip_slot(3, O) else master.uneq_active() if(!master.module_states[1] && istype(master.part_arm_l,/obj/item/parts/robot_parts/arm/)) - master.module_states[1] = O - O.set_loc(master) - O.pickup(master) + master.equip_slot(1, O) else if(!master.module_states[2]) - master.module_states[2] = O - O.set_loc(master) - O.pickup(master) + master.equip_slot(2, O) else if(!master.module_states[3] && istype(master.part_arm_r,/obj/item/parts/robot_parts/arm/)) - master.module_states[3] = O - O.set_loc(master) - O.pickup(master) + master.equip_slot(3, O) update_equipment() update_tools() diff --git a/code/datums/jobs.dm b/code/datums/jobs.dm index 90840362327c1..aaa4db51b9ade 100644 --- a/code/datums/jobs.dm +++ b/code/datums/jobs.dm @@ -152,9 +152,7 @@ ABSTRACT_TYPE(/datum/job/command) wages = PAY_EXECUTIVE high_priority_job = 1 receives_miranda = 1 -#ifdef RP_MODE allow_traitors = 0 -#endif cant_spawn_as_rev = 1 announce_on_join = 1 allow_spy_theft = 0 @@ -324,7 +322,7 @@ ABSTRACT_TYPE(/datum/job/command) wiki_link = "https://wiki.ss13.co/Chief_Engineer" slot_back = list(/obj/item/storage/backpack/engineering) - slot_belt = list(/obj/item/device/pda2/chiefengineer) + slot_belt = list(/obj/item/storage/belt/utility/prepared/ceshielded) slot_glov = list(/obj/item/clothing/gloves/yellow) slot_foot = list(/obj/item/clothing/shoes/brown) slot_head = list(/obj/item/clothing/head/helmet/hardhat/chief_engineer) @@ -332,6 +330,7 @@ ABSTRACT_TYPE(/datum/job/command) slot_jump = list(/obj/item/clothing/under/rank/chief_engineer) slot_ears = list(/obj/item/device/radio/headset/command/ce) slot_poc1 = list(/obj/item/paper/book/from_file/pocketguide/engineering) + slot_poc2 = list(/obj/item/device/pda2/chiefengineer) items_in_backpack = list(/obj/item/device/flash, /obj/item/rcd_ammo/medium) special_setup(var/mob/living/carbon/human/M) @@ -2325,41 +2324,6 @@ ABSTRACT_TYPE(/datum/job/special/halloween/critter) M.critterize(type) */ -/datum/job/special/syndicate_operative - name = "Syndicate Operative" - wages = 0 - limit = 0 - linkcolor = "#880000" - slot_ears = list() // So they don't get a default headset and stuff first. - slot_card = null - slot_glov = list() - slot_foot = list() - slot_back = list() - slot_belt = list() - spawn_id = 0 - radio_announcement = FALSE - special_spawn_location = LANDMARK_SYNDICATE - var/leader = FALSE - add_to_manifest = FALSE - wiki_link = "https://wiki.ss13.co/Nuclear_Operative" - - faction = FACTION_SYNDICATE - - special_setup(var/mob/living/carbon/human/M) - ..() - if (!M?.mind) - return - - if (src.leader) - M.mind.add_antagonist(ROLE_NUKEOP_COMMANDER, do_objectives = FALSE, source = ANTAGONIST_SOURCE_ADMIN) - else - M.mind.add_antagonist(ROLE_NUKEOP, do_objectives = FALSE, source = ANTAGONIST_SOURCE_ADMIN) - -/datum/job/special/syndicate_operative/leader - name = "Syndicate Operative Commander" - special_spawn_location = LANDMARK_SYNDICATE_BOSS - leader = TRUE - /datum/job/special/syndicate_weak linkcolor = "#880000" name = "Junior Syndicate Operative" diff --git a/code/datums/manufacturing.dm b/code/datums/manufacturing.dm index 75a1c8ef1bac3..288d2f2f6e696 100644 --- a/code/datums/manufacturing.dm +++ b/code/datums/manufacturing.dm @@ -120,6 +120,16 @@ ABSTRACT_TYPE(/datum/manufacture) create = 1 frame_path = /obj/disposalpipe/loafer +/******************** Communications Dish *******************/ + +/datum/manufacture/mechanics/comms_dish + name = "Communications Dish" + item_paths = list("MET-1", "MET-2", "INS-1" , "CON-1") + item_amounts = list(20,10,20,20) + time = 60 SECONDS + create = 1 + frame_path = /obj/machinery/communications_dish + /******************** AI Law Rack *******************/ /datum/manufacture/mechanics/lawrack @@ -990,6 +1000,15 @@ ABSTRACT_TYPE(/datum/manufacture) create = 1 category = "Tool" +/datum/manufacture/pocketoxyex + name = "Extended Capacity Pocket Oxygen Tank" + item_paths = list("DEN-2","INS-1", "RUB") + item_amounts = list(10, 20, 5) + item_outputs = list(/obj/item/tank/emergency_oxygen/extended/empty) + time = 5 SECONDS + create = 1 + category = "Tool" + /******************** Medical **************************/ /datum/manufacture/scalpel @@ -1352,159 +1371,176 @@ ABSTRACT_TYPE(/datum/manufacture) /datum/manufacture/robo_frame name = "Cyborg Frame" item_paths = list("MET-2") - item_amounts = list(18) + item_amounts = list(ROBOT_FRAME_COST * 10) item_outputs = list(/obj/item/parts/robot_parts/robot_frame) time = 45 SECONDS create = 1 category = "Component" + apply_material = 1 /datum/manufacture/full_cyborg_standard name = "Standard Cyborg Parts" item_paths = list("MET-2") - item_amounts = list(48) + item_amounts = list((ROBOT_CHEST_COST + ROBOT_HEAD_COST + ROBOT_LIMB_COST * 4) * 10) item_outputs = list(/obj/item/parts/robot_parts/chest/standard,/obj/item/parts/robot_parts/head/standard, /obj/item/parts/robot_parts/arm/right/standard,/obj/item/parts/robot_parts/arm/left/standard, /obj/item/parts/robot_parts/leg/right/standard,/obj/item/parts/robot_parts/leg/left/standard) time = 120 SECONDS create = 1 category = "Component" + apply_material = 1 /datum/manufacture/full_cyborg_light name = "Light Cyborg Parts" item_paths = list("MET-2") - item_amounts = list(24) + item_amounts = list((ROBOT_CHEST_COST + ROBOT_HEAD_COST + ROBOT_LIMB_COST * 4) * ROBOT_LIGHT_COST_MOD * 10) item_outputs = list(/obj/item/parts/robot_parts/chest/light,/obj/item/parts/robot_parts/head/light, /obj/item/parts/robot_parts/arm/right/light,/obj/item/parts/robot_parts/arm/left/light, /obj/item/parts/robot_parts/leg/right/light,/obj/item/parts/robot_parts/leg/left/light) time = 62 SECONDS create = 1 category = "Component" + apply_material = 1 /datum/manufacture/robo_chest name = "Cyborg Chest" item_paths = list("MET-2") - item_amounts = list(12) + item_amounts = list(ROBOT_CHEST_COST * 10) item_outputs = list(/obj/item/parts/robot_parts/chest/standard) time = 30 SECONDS create = 1 category = "Component" + apply_material = 1 /datum/manufacture/robo_chest_light name = "Light Cyborg Chest" item_paths = list("MET-2") - item_amounts = list(6) + item_amounts = list(ROBOT_CHEST_COST * ROBOT_LIGHT_COST_MOD * 10) item_outputs = list(/obj/item/parts/robot_parts/chest/light) time = 15 SECONDS create = 1 category = "Component" + apply_material = 1 /datum/manufacture/robo_head name = "Cyborg Head" item_paths = list("MET-2") - item_amounts = list(12) + item_amounts = list(ROBOT_HEAD_COST * 10) item_outputs = list(/obj/item/parts/robot_parts/head/standard) time = 30 SECONDS create = 1 category = "Component" + apply_material = 1 /datum/manufacture/robo_head_screen name = "Cyborg Screen Head" item_paths = list("MET-2","CON-1","CRY-1") - item_amounts = list(6,2,6) + item_amounts = list(ROBOT_SCREEN_METAL_COST * 10,2,6) item_outputs = list(/obj/item/parts/robot_parts/head/screen) time = 24 SECONDS create = 1 category = "Component" + apply_material = 1 /datum/manufacture/robo_head_light name = "Light Cyborg Head" item_paths = list("MET-1") - item_amounts = list(6) + item_amounts = list(ROBOT_HEAD_COST * ROBOT_LIGHT_COST_MOD * 10) item_outputs = list(/obj/item/parts/robot_parts/head/light) time = 15 SECONDS create = 1 category = "Component" + apply_material = 1 /datum/manufacture/robo_arm_r name = "Cyborg Arm (Right)" item_paths = list("MET-2") - item_amounts = list(6) + item_amounts = list(ROBOT_LIMB_COST * 10) item_outputs = list(/obj/item/parts/robot_parts/arm/right/standard) time = 15 SECONDS create = 1 category = "Component" + apply_material = 1 /datum/manufacture/robo_arm_r_light name = "Light Cyborg Arm (Right)" item_paths = list("MET-1") - item_amounts = list(3) + item_amounts = list(ROBOT_LIMB_COST * ROBOT_LIGHT_COST_MOD * 10) item_outputs = list(/obj/item/parts/robot_parts/arm/right/light) time = 8 SECONDS create = 1 category = "Component" + apply_material = 1 /datum/manufacture/robo_arm_l name = "Cyborg Arm (Left)" item_paths = list("MET-2") - item_amounts = list(6) + item_amounts = list(ROBOT_LIMB_COST * 10) item_outputs = list(/obj/item/parts/robot_parts/arm/left/standard) time = 15 SECONDS create = 1 category = "Component" + apply_material = 1 /datum/manufacture/robo_arm_l_light name = "Light Cyborg Arm (Left)" item_paths = list("MET-1") - item_amounts = list(3) + item_amounts = list(ROBOT_LIMB_COST * ROBOT_LIGHT_COST_MOD * 10) item_outputs = list(/obj/item/parts/robot_parts/arm/left/light) time = 8 SECONDS create = 1 category = "Component" + apply_material = 1 /datum/manufacture/robo_leg_r name = "Cyborg Leg (Right)" item_paths = list("MET-2") - item_amounts = list(6) + item_amounts = list(ROBOT_LIMB_COST * 10) item_outputs = list(/obj/item/parts/robot_parts/leg/right/standard) time = 15 SECONDS create = 1 category = "Component" + apply_material = 1 /datum/manufacture/robo_leg_r_light name = "Light Cyborg Leg (Right)" item_paths = list("MET-1") - item_amounts = list(3) + item_amounts = list(ROBOT_LIMB_COST * ROBOT_LIGHT_COST_MOD * 10) item_outputs = list(/obj/item/parts/robot_parts/leg/right/light) time = 8 SECONDS create = 1 category = "Component" + apply_material = 1 /datum/manufacture/robo_leg_l name = "Cyborg Leg (Left)" item_paths = list("MET-2") - item_amounts = list(6) + item_amounts = list(ROBOT_LIMB_COST * 10) item_outputs = list(/obj/item/parts/robot_parts/leg/left/standard) time = 15 SECONDS create = 1 category = "Component" + apply_material = 1 /datum/manufacture/robo_leg_l_light name = "Light Cyborg Leg (Left)" item_paths = list("MET-1") - item_amounts = list(3) + item_amounts = list(ROBOT_LIMB_COST * ROBOT_LIGHT_COST_MOD * 10) item_outputs = list(/obj/item/parts/robot_parts/leg/left/light) time = 8 SECONDS create = 1 category = "Component" + apply_material = 1 /datum/manufacture/robo_leg_treads name = "Cyborg Treads" item_paths = list("MET-2","CON-1") - item_amounts = list(12,6) + item_amounts = list(ROBOT_TREAD_METAL_COST * 2 * 10,6) item_outputs = list(/obj/item/parts/robot_parts/leg/left/treads, /obj/item/parts/robot_parts/leg/right/treads) time = 15 SECONDS create = 1 category = "Component" + apply_material = 1 /datum/manufacture/robo_module name = "Blank Cyborg Module" @@ -1881,11 +1917,12 @@ ABSTRACT_TYPE(/datum/manufacture) /datum/manufacture/thrusters name = "Alastor Pattern Thrusters" item_paths = list("MET-2") - item_amounts = list(50) + item_amounts = list(ROBOT_THRUSTER_COST * 2 * 10) item_outputs = list(/obj/item/parts/robot_parts/leg/right/thruster,/obj/item/parts/robot_parts/leg/left/thruster) time = 120 SECONDS create = 1 category = "Component" + apply_material = 1 /******************** Science **************************/ diff --git a/code/datums/movement_controller/tank.dm b/code/datums/movement_controller/tank.dm index 8029c1ecc1a50..e1433c7044bd4 100644 --- a/code/datums/movement_controller/tank.dm +++ b/code/datums/movement_controller/tank.dm @@ -44,6 +44,8 @@ keys_changed(mob/user, keys, changed) if (istype(src.owner, /obj/machinery/vehicle/tank/minisub/escape_sub) || !owner) return + if(user != src.owner.pilot) + return if(changed & KEY_SHOCK) shooting = keys & KEY_SHOCK if (changed & (KEY_FORWARD|KEY_BACKWARD|KEY_RIGHT|KEY_LEFT)) @@ -72,6 +74,9 @@ if (istype(src.owner, /obj/machinery/vehicle/tank/minisub/escape_sub)) return + if(user != src.owner.pilot) + return + var/can_user_act = user && user == owner.pilot && !user.getStatusDuration("stunned") && !user.getStatusDuration("weakened") && !user.getStatusDuration("paralysis") && !isdead(user) if(shooting && owner.m_w_system?.active && can_user_act && !GET_COOLDOWN(owner.m_w_system, "fire")) diff --git a/code/datums/movement_modifier/movement_modifiers.dm b/code/datums/movement_modifier/movement_modifiers.dm index 841f80fde9035..75b3ac7e7a0c2 100644 --- a/code/datums/movement_modifier/movement_modifiers.dm +++ b/code/datums/movement_modifier/movement_modifiers.dm @@ -82,7 +82,7 @@ return list(0,0.85) return list(0,0.5) -// robot legs +// robot legs for humans /datum/movement_modifier/robotleg_right health_deficiency_adjustment = -25 @@ -98,12 +98,15 @@ additive_slowdown = -0.25 // robot modifiers -/datum/movement_modifier/robot_base +/datum/movement_modifier/robot_part/robot_base health_deficiency_adjustment = -INFINITY mob_pull_multiplier = 0.2 //make borgs pull mobs slightly slower than full speed (roundstart light borg will pull a corpse at ~1.3 delay, as opposed to ~1 when unencumbered) +/datum/movement_modifier/robot_oil/fresh + multiplicative_slowdown = 0.5 + /datum/movement_modifier/robot_oil - additive_slowdown = -0.5 + multiplicative_slowdown = 0.85 /datum/movement_modifier/spry additive_slowdown = -0.25 @@ -119,14 +122,50 @@ . *= 0.75 return list(0, .) -/datum/movement_modifier/robot_part/head - additive_slowdown = -0.2 +// robot heads +/datum/movement_modifier/robot_part/light_head + additive_slowdown = -0.1 + +/datum/movement_modifier/robot_part/standard_head + additive_slowdown = -0.05 + +/datum/movement_modifier/robot_part/sturdy_head + additive_slowdown = 0.05 + +/datum/movement_modifier/robot_part/heavy_head + additive_slowdown = 0.35 + +// robot arms +/datum/movement_modifier/robot_part/light_arm_left + additive_slowdown = -0.05 + +/datum/movement_modifier/robot_part/light_arm_right + additive_slowdown = -0.05 + +/datum/movement_modifier/robot_part/sturdy_arm_left + additive_slowdown = 0.1 + +/datum/movement_modifier/robot_part/sturdy_arm_right + additive_slowdown = 0.1 -/datum/movement_modifier/robot_part/arm_left - additive_slowdown = -0.2 +/datum/movement_modifier/robot_part/heavy_arm_left + additive_slowdown = 0.2 -/datum/movement_modifier/robot_part/arm_right - additive_slowdown = -0.2 +/datum/movement_modifier/robot_part/heavy_arm_right + additive_slowdown = 0.2 + +// robot legs +/datum/movement_modifier/robot_part/light_leg_left + additive_slowdown = -0.15 + +/datum/movement_modifier/robot_part/light_leg_right + additive_slowdown = -0.15 + +/datum/movement_modifier/robot_part/standard_leg_left + additive_slowdown = -0.1 + +/datum/movement_modifier/robot_part/standard_leg_right + additive_slowdown = -0.1 /datum/movement_modifier/robot_part/tread_left additive_slowdown = -0.25 @@ -140,6 +179,14 @@ /datum/movement_modifier/robot_part/thruster_right additive_slowdown = -0.3 +// robot chests +/datum/movement_modifier/robot_part/light_chest + additive_slowdown = -0.1 + +/datum/movement_modifier/robot_part/standard_chest + additive_slowdown = -0.05 + + // artifact legs /datum/movement_modifier/martian_legs/left health_deficiency_adjustment = -35 @@ -188,18 +235,16 @@ /datum/movement_modifier/vampiric_thrall/modifiers(mob/user, move_target, running) . = list(4,0) - if (ishuman(user)) - var/mob/living/carbon/human/H = user - var/datum/mutantrace/vampiric_thrall/vampiric_thrall = H.mutantrace - if (!istype(vampiric_thrall)) - return - switch (vampiric_thrall.blood_points) - if (151 to INFINITY) - .[1] = 0.7 - if (101 to 151) - .[1] = 1.6 - if (51 to 101) - .[1] = 2.8 + var/datum/abilityHolder/vampiric_thrall/thrallHolder = user.get_ability_holder(/datum/abilityHolder/vampiric_thrall) + if (!thrallHolder) + return + switch (thrallHolder.points) + if (151 to INFINITY) + .[1] = 0.7 + if (101 to 151) + .[1] = 1.6 + if (51 to 101) + .[1] = 2.8 /datum/movement_modifier/wheelchair ask_proc = 1 diff --git a/code/datums/mutantraces.dm b/code/datums/mutantraces.dm index 5ab4eec767e80..88f95d75380d6 100644 --- a/code/datums/mutantraces.dm +++ b/code/datums/mutantraces.dm @@ -139,8 +139,10 @@ ABSTRACT_TYPE(/datum/mutantrace) var/list/typevulns /// ignores suffocation from being underwater + moves at full speed underwater - var/aquatic = 0 - var/needs_oxy = 1 + var/aquatic = FALSE + /// Takes burn damage and hygiene loss on contact with water + var/aquaphobic = FALSE + var/needs_oxy = TRUE var/voice_override = 0 var/step_override = null @@ -1037,16 +1039,6 @@ ABSTRACT_TYPE(/datum/mutantrace) jerk = TRUE genetics_removable = FALSE - var/blood_points = 0 -#ifdef RP_MODE - var/blood_decay = 0.25 -#else - var/blood_decay = 0.5 -#endif - var/cleanable_tally = 0 - var/blood_to_health_scalar = 0.75 //200 blood = 150 health - var/min_max_health = 40 //! Minimum health we can get to via blood loss. also lol - on_attach(var/mob/living/carbon/human/M) ..() if(ishuman(src.mob)) @@ -1064,25 +1056,6 @@ ABSTRACT_TYPE(/datum/mutantrace) //REMOVE_ATOM_PROPERTY(src.mob, PROP_MOB_STAMINA_REGEN_BONUS, "vampiric_thrall") ..() - - onLife(var/mult = 1) - ..() - - if (src.mob.bleeding) - blood_points -= blood_decay * src.mob.bleeding - - var/prev_blood = blood_points - blood_points -= blood_decay * mult - blood_points = max(0,blood_points) - cleanable_tally += (prev_blood - blood_points) - if (cleanable_tally > 20) - make_cleanable(/obj/decal/cleanable/blood,get_turf(src.mob)) - cleanable_tally = 0 - - src.mob.max_health = blood_points * blood_to_health_scalar - src.mob.max_health = max(src.min_max_health, src.mob.max_health) - health_update_queue |= src.mob - emote(var/act) var/message = null if(act == "scream") @@ -1880,6 +1853,20 @@ ABSTRACT_TYPE(/datum/mutantrace) src.mob.mob_flags &= ~SHOULD_HAVE_A_TAIL . = ..() +/datum/mutantrace/cat/bingus // our beloved + name = "bingus" + icon = 'icons/mob/bingus.dmi' + race_mutation = /datum/bioEffect/mutantrace/cat/bingus + mutant_organs = list("tail" = /obj/item/organ/tail/cat/bingus) + mutant_folder = 'icons/mob/bingus.dmi' + dna_mutagen_banned = FALSE + genetics_removable = FALSE + aquaphobic = TRUE + mutant_appearance_flags = (NOT_DIMORPHIC | HAS_NO_SKINTONE | HAS_NO_EYES | HAS_NO_HEAD | USES_STATIC_ICON) + r_limb_arm_type_mutantrace = /obj/item/parts/human_parts/arm/mutant/cat/bingus/right + l_limb_arm_type_mutantrace = /obj/item/parts/human_parts/arm/mutant/cat/bingus/left + r_limb_leg_type_mutantrace = /obj/item/parts/human_parts/leg/mutant/cat/bingus/right + l_limb_leg_type_mutantrace = /obj/item/parts/human_parts/leg/mutant/cat/bingus/left /datum/mutantrace/amphibian name = "amphibian" @@ -2220,7 +2207,7 @@ ABSTRACT_TYPE(/datum/mutantrace) emote(var/act, var/voluntary) switch(act) if ("scream") - if (src.mob.emote_check(voluntary, 50)) + if (src.mob.emote_check(voluntary, 50) && !src.mob.bioHolder.HasEffect("mute")) . = "<B>[src.mob]</B> moos!" playsound(src.mob, 'sound/voice/screams/moo.ogg', 50, 0, 0, src.mob.get_age_pitch(), channel=VOLUME_CHANNEL_EMOTE) if ("milk") @@ -2403,7 +2390,7 @@ TYPEINFO(/datum/mutantrace/pug) proc/throw_response(target, item, thrower) // Don't dive at things we throw; don't dive if we're stunned or dead; dive 15% of the time, 100% at limbs - if (src.mob == thrower || is_incapacitated(src.mob) || (prob(85) && !istype(item, /obj/item/parts))) + if (src.mob == thrower || is_incapacitated(src.mob) || (prob(85) && !(istype(item, /obj/item/parts) || istype(item, /obj/item/material_piece/bone)))) return src.mob.throw_at(get_turf(item), 1, 1) src.mob.visible_message(SPAN_ALERT("[src.mob] staggers.")) diff --git a/code/datums/objective.dm b/code/datums/objective.dm index 09899e9f4dc71..9757fb7f0b1e6 100644 --- a/code/datums/objective.dm +++ b/code/datums/objective.dm @@ -160,6 +160,8 @@ proc/create_fluff(datum/mind/target) items.Remove("Head of Security\'s beret") if(!countJob("Captain")) items.Remove("authentication disk") + if(!countJob("Chief Engineer")) + items.Remove("aurora MKII utility belt") target_name = pick(items) switch(target_name) @@ -202,6 +204,8 @@ proc/create_fluff(datum/mind/target) items.Remove("Head of Security\'s beret") if(!countJob("Captain")) items.Remove("authentication disk") + if(!countJob("Chief Engineer")) + items.Remove("aurora MKII utility belt") target_name = pick(items) switch(target_name) diff --git a/code/datums/participation_recorder.dm b/code/datums/participation_recorder.dm index 84ebdd6a5cbda..3694b783d706e 100644 --- a/code/datums/participation_recorder.dm +++ b/code/datums/participation_recorder.dm @@ -21,31 +21,36 @@ var/global/datum/participationRecorder/participationRecorder boutput(world, msg) + proc/getJob(datum/player/P) + if (!P?.client?.mob?.mind) return null + var/job = P.client.mob.mind.assigned_role + if (job == "MODE") return null + return job || null + + //Record a participation for a player (or add it to a queue if holding) - proc/record(ckey) - if (!ckey) - throw EXCEPTION("No ckey given") + proc/record(datum/player/P) + if (!P) + throw EXCEPTION("No player given") if (!ticker || !ticker.mode || !ticker.mode.name) throw EXCEPTION("Invalid ticker found") if (src.debug) - src.debugLog("(participationRecorder) Called record. ckey: [ckey]. holding: [src.holding]") + src.debugLog("(participationRecorder) Called record. player ID: [P.id]. holding: [src.holding]") //queue up for eventual transmission via releaseHold if (src.holding) - src.queue += ckey + src.queue += list(list("player_id" = P.id, "job" = src.getJob(P))) //send our shiiiit else - var/list/payload = list( - "ckey" = ckey, - "round_mode" = ticker.mode.name - ) - #ifdef RP_MODE - payload["rp_mode"] = TRUE - #endif - apiHandler.queryAPI("participation/record", payload) + try + var/datum/apiRoute/players/participations/addParticipation = new + addParticipation.buildBody(P.id, roundId, src.getJob(P)) + apiHandler.queryAPI(addParticipation) + catch + // pass //Set holding on, which enables queuing of participation data for the duration @@ -62,18 +67,11 @@ var/global/datum/participationRecorder/participationRecorder src.holding = 0 if (src.debug) - src.debugLog("(participationRecorder) Release hold called. round_name: [ticker.mode.name]. queue: [json_encode(src.queue)]") - - var/list/payload = list( - "round_mode" = ticker.mode.name - ) - #ifdef RP_MODE - payload["rp_mode"] = TRUE - #endif - - var/count = 0 - for (var/ckey in src.queue) - payload["ckeys\[[count]]"] = ckey - count++ - - apiHandler.queryAPI("participation/record-multiple", payload) + src.debugLog("(participationRecorder) Release hold called. queue: [json_encode(src.queue)]") + + try + var/datum/apiRoute/players/participationsBulk/addBulkParticipations = new + addBulkParticipations.buildBody(src.queue, roundId) + apiHandler.queryAPI(addBulkParticipations) + catch + // pass diff --git a/code/datums/preferences.dm b/code/datums/preferences.dm index 732692b46285c..11545e9117790 100644 --- a/code/datums/preferences.dm +++ b/code/datums/preferences.dm @@ -178,14 +178,9 @@ var/list/removed_jobs = list( "name" = src.savefile_get_profile_name(client, i), ) - var/list/cloud_saves = null - - if (!client.cloud_available()) - client.player.cloud_fetch() - if (client.cloud_available()) - cloud_saves = list() - for (var/name in client.player.cloudsaves) - cloud_saves += name + var/list/cloud_saves = list() + for (var/name in client.player.cloudSaves.saves) + cloud_saves += name sanitize_null_values() @@ -356,9 +351,7 @@ var/list/removed_jobs = list( return TRUE if ("cloud-new") - if (!client.cloud_available()) - return - if(length(client.player.cloudsaves) >= SAVEFILE_CLOUD_PROFILES_MAX) + if(length(client.player.cloudSaves.saves) >= SAVEFILE_CLOUD_PROFILES_MAX) tgui_alert(usr, "You have hit your cloud save limit. Please write over an existing save.", "Max saves") else var/new_name = tgui_input_text(usr, "What would you like to name the save?", "Save Name") @@ -372,8 +365,6 @@ var/list/removed_jobs = list( boutput( usr, SPAN_NOTICE("Savefile saved!") ) if ("cloud-save") - if (!client.cloud_available()) - return var/ret = src.cloudsave_save(client, params["name"]) if(istext(ret)) boutput(usr, SPAN_ALERT("Failed to save savefile: [ret]")) @@ -382,8 +373,6 @@ var/list/removed_jobs = list( return TRUE if ("cloud-load") - if (!client.cloud_available()) - return var/ret = src.cloudsave_load(client, params["name"]) if( istext(ret)) boutput(usr, SPAN_ALERT("Failed to load savefile: [ret]")) @@ -393,8 +382,6 @@ var/list/removed_jobs = list( return TRUE if ("cloud-delete") - if (!client.cloud_available()) - return var/ret = src.cloudsave_delete(client, params["name"]) if(istext(ret)) boutput(usr, SPAN_ALERT("Failed to delete savefile: [ret]")) @@ -2091,10 +2078,10 @@ var/global/list/female_screams = list("female", "femalescream1", "femalescream2" var/type_first if (AH.gender == MALE) if (prob(5)) // small chance to have a hairstyle more geared to the other gender - type_first = pick(get_available_custom_style_types(H?.client, no_gimmick_hair=TRUE, filter_gender=FEMININE)) + type_first = pick(get_available_custom_style_types(H?.client, no_gimmick_hair=TRUE, filter_gender=FEMININE, for_random=TRUE)) AH.customization_first = new type_first else // otherwise just use one standard to the current gender - type_first = pick(get_available_custom_style_types(H?.client, no_gimmick_hair=TRUE, filter_gender=MASCULINE)) + type_first = pick(get_available_custom_style_types(H?.client, no_gimmick_hair=TRUE, filter_gender=MASCULINE, for_random=TRUE)) AH.customization_first = new type_first if (prob(33)) // since we're a guy, a chance for facial hair @@ -2105,10 +2092,10 @@ var/global/list/female_screams = list("female", "femalescream1", "femalescream2" else // if FEMALE if (prob(8)) // same as above for guys, just reversed and with a slightly higher chance since it's ~more appropriate~ for ladies to have guy haircuts than vice versa :I - type_first = pick(get_available_custom_style_types(H?.client, no_gimmick_hair=TRUE, filter_gender=MASCULINE)) + type_first = pick(get_available_custom_style_types(H?.client, no_gimmick_hair=TRUE, filter_gender=MASCULINE, for_random=TRUE)) AH.customization_first = new type_first else // ss13 is coded with gender stereotypes IN ITS VERY CORE - type_first = pick(get_available_custom_style_types(H?.client, no_gimmick_hair=TRUE, filter_gender=FEMININE)) + type_first = pick(get_available_custom_style_types(H?.client, no_gimmick_hair=TRUE, filter_gender=FEMININE, for_random=TRUE)) AH.customization_first = new type_first if (!has_second) diff --git a/code/datums/round_management.dm b/code/datums/round_management.dm new file mode 100644 index 0000000000000..f3c3e499da9e2 --- /dev/null +++ b/code/datums/round_management.dm @@ -0,0 +1,57 @@ +/** + * Collection of methods to handle recording round data to the API + */ + +var/global/datum/roundManagement/roundManagement + +/datum/roundManagement + proc/logMsg(msg) + logTheThing(LOG_DEBUG, null, "<b>Round Management</b> [msg]") + logTheThing(LOG_DIARY, null, "Round Management: [msg]", "admin") + + /// Record the start of a round (when a server boots up) + proc/recordStart() + var/datum/apiModel/Tracked/GameRound/gameRound + try + var/datum/apiRoute/rounds/post/addRound = new + var/rpMode = FALSE + #ifdef RP_MODE + rpMode = TRUE + #endif + addRound.buildBody(map_setting, config.server_id, rpMode) + gameRound = apiHandler.queryAPI(addRound) + catch (var/exception/e) + var/datum/apiModel/Error/error = e.name + src.logMsg(error.message) + return + + roundId = gameRound.id + src.logMsg("Recorded round start: New round ID #[roundId]") + + /// Record an update to the round (when the game starts) + proc/recordUpdate(mode = null) + try + var/datum/apiRoute/rounds/update/updateRound = new + updateRound.routeParams = list(roundId) + updateRound.buildBody(mode) + apiHandler.queryAPI(updateRound) + catch (var/exception/e) + var/datum/apiModel/Error/error = e.name + src.logMsg(error.message) + return + + src.logMsg("Recorded round update: Game type [mode]") + + /// Record the end of a round (just prior to reboot) + proc/recordEnd(crashed = FALSE) + try + var/datum/apiRoute/rounds/end/endRound = new + endRound.routeParams = list(roundId) + endRound.buildBody(crashed) + apiHandler.queryAPI(endRound) + catch (var/exception/e) + var/datum/apiModel/Error/error = e.name + src.logMsg(error.message) + return + + src.logMsg("Recorded round end") diff --git a/code/datums/savefile.dm b/code/datums/savefile.dm index cc9311ddbe3a7..39cf5c69ae36f 100644 --- a/code/datums/savefile.dm +++ b/code/datums/savefile.dm @@ -455,78 +455,30 @@ return profile_name - /// Save a character profile to the cloud. - /// load_from (if not null) is the ckey to load this profile from. Can be used to load profiles from another ckey. - cloudsave_load(client/user, var/name, var/load_from) - if (user) // bypass these checks if we're loading from an arbitrary key - if(user && isnull( user.player.cloudsaves )) - return "Failed to retrieve cloud data, try rejoining." - + /// Load a character profile from the cloud. + cloudsave_load(client/user, name) + if (user) if (IsGuestKey(user.key)) - return 0 + return FALSE - // Fetch via HTTP from goonhub - var/datum/http_request/request = new() - request.prepare(RUSTG_HTTP_METHOD_GET, "[config.spacebee_api_url]/api/cloudsave?get&ckey=[ckey(load_from) || user.ckey]&name=[url_encode(name)]&api_key=[config.spacebee_api_key]", "", "") - request.begin_async() - UNTIL(request.is_complete()) - var/datum/http_response/response = request.into_response() - - if (response.errored || !response.body) - logTheThing(LOG_DEBUG, null, "<b>cloudsave_load:</b> Failed to contact goonhub. u: [user.ckey]") - return - - var/list/ret = json_decode(response.body) - if( ret["status"] == "error" ) - return ret["error"]["error"] + var/cloudSaveData = user.player.cloudSaves.getSave(name) var/savefile/save = new - save.ImportText( "/", ret["savedata"] ) + save.ImportText( "/", cloudSaveData ) return src.savefile_load(user, 1, save) /// Save a character profile to the cloud. - /// save_to (if not null) is the ckey to save this profile to. Can be used to save profiles to another ckey. - cloudsave_save(client/user, var/name, var/save_to) - if (user) // bypass these checks if we're saving to an arbitrary key - if(isnull( user.player.cloudsaves )) - return "Failed to retrieve cloud data, try rejoining." + cloudsave_save(client/user, name) + if (user) if (IsGuestKey( user.key )) - return 0 - if (save_to) - CRASH("Tried to save a cloud save with a client and a key to save to specified- need one or the other") + return FALSE - var/savefile/save = src.savefile_save(ckey(save_to) || user.ckey, 1, 1) + var/savefile/save = src.savefile_save(user.ckey, 1, 1) var/exported = save.ExportText() - // Fetch via HTTP from goonhub - var/datum/http_request/request = new() - request.prepare(RUSTG_HTTP_METHOD_GET, "[config.spacebee_api_url]/api/cloudsave?put&ckey=[ckey(save_to) || user.ckey]&name=[url_encode(name)]&api_key=[config.spacebee_api_key]&data=[url_encode(exported)]", "", "") - request.begin_async() - UNTIL(request.is_complete()) - var/datum/http_response/response = request.into_response() - - if (response.errored || !response.body) - logTheThing(LOG_DEBUG, null, "<b>cloudsave_load:</b> Failed to contact goonhub. u: [save_to || user.ckey]") - return - - var/list/ret = json_decode(response.body) - if( ret["status"] == "error" ) - return ret["error"]["error"] - user?.player.cloudsaves[ name ] = length( exported ) - return 1 - - cloudsave_delete( client/user, var/name ) - - // Request deletion via HTTP from goonhub - var/datum/http_request/request = new() - request.prepare(RUSTG_HTTP_METHOD_GET, "[config.spacebee_api_url]/api/cloudsave?delete&ckey=[user.ckey]&name=[url_encode(name)]&api_key=[config.spacebee_api_key]", "", "") - request.begin_async() - UNTIL(request.is_complete()) - var/datum/http_response/response = request.into_response() + user.player.cloudSaves.putSave(name, exported) + return TRUE - if (response.errored || !response.body) - logTheThing(LOG_DEBUG, null, "<b>cloudsave_delete:</b> Failed to contact goonhub. u: [user.ckey]") - return - - user.player.cloudsaves.Remove( name ) - return 1 + cloudsave_delete(client/user, name) + user.player.cloudSaves.deleteSave(name) + return TRUE diff --git a/code/datums/tooltip.dm b/code/datums/tooltip.dm index d0e5cdb84706b..5501177aaea0f 100644 --- a/code/datums/tooltip.dm +++ b/code/datums/tooltip.dm @@ -69,7 +69,7 @@ Notes: boutput(who, "<span style='font-size: 0.85em'>\[[time2text(world.realtime, "hh:mm:ss")]\] <strong>(TOOLTIP DEBUG | DM)</strong> [msg]</span>") #endif -var/global/list/atomTooltips = new() +var/global/list/atomTooltips = list() /datum/tooltipHolder //Configurable vars diff --git a/code/datums/traits.dm b/code/datums/traits.dm index 6ecca9dfb03ac..0ca53b1acf9b5 100644 --- a/code/datums/traits.dm +++ b/code/datums/traits.dm @@ -550,6 +550,22 @@ ABSTRACT_TYPE(/datum/trait/job) desc = "Subject is trained in cultural and psychological matters." id = "training_chaplain" + var/faith = FAITH_STARTING + ///multiplier for faith gain only - faith losses ignore this + var/faith_mult = 1 + + New() + ..() + START_TRACKING + + disposing() + STOP_TRACKING + ..() + + onAdd(mob/living/owner) + if(owner.traitHolder?.hasTrait("atheist")) + src.faith_mult = 0.2 + /datum/trait/job/medical name = "Medical Training" desc = "Subject is a proficient surgeon." @@ -948,6 +964,19 @@ ABSTRACT_TYPE(/datum/trait/job) id = "atheist" points = 0 + onAdd(mob/living/owner) + if (istype(owner)) + owner.remove_lifeprocess(/datum/lifeprocess/faith) + var/datum/trait/job/chaplain/chap_trait = owner.traitHolder?.getTrait("training_chaplain") + chap_trait?.faith_mult = 0.2 + + onRemove(mob/living/owner) + if (istype(owner)) + owner.add_lifeprocess(/datum/lifeprocess/faith) + var/datum/trait/job/chaplain/chap_trait = owner.traitHolder?.getTrait("training_chaplain") + chap_trait?.faith_mult = 1 + + /datum/trait/lizard name = "Reptilian" icon_state = "lizardT" diff --git a/code/datums/viewport.dm b/code/datums/viewport.dm index c95371fdb8c4d..3824bf44803f6 100644 --- a/code/datums/viewport.dm +++ b/code/datums/viewport.dm @@ -184,7 +184,7 @@ /mob/living/intangible/aieye/verb/ai_eye_create_viewport() set category = "AI Commands" set name = "Create Viewport" - set desc = "Expand your powers with Nanotransen's Viewportifier!" + set desc = "Expand your powers with Nanotrasen's Viewportifier!" src.create_viewport(VIEWPORT_ID_AI) diff --git a/code/del.dm b/code/del.dm index ffa6a77fcf1ce..f8758ca19a26f 100644 --- a/code/del.dm +++ b/code/del.dm @@ -25,7 +25,8 @@ proc/qdel(var/datum/D) qdel(C) #ifdef OPENDREAM - del(D) + SPAWN(1) + del(D) return #endif diff --git a/code/error_handling.dm b/code/error_handling.dm index 8711f7c04c7fa..bbe265342f89d 100644 --- a/code/error_handling.dm +++ b/code/error_handling.dm @@ -6,8 +6,9 @@ * It does NOT catch reference bugs */ -var/global/list/runtimeDetails = new() +var/global/list/runtimeDetails = list() var/global/runtime_count = 0 +var/global/blame_for_runtimes = FALSE /world/Error(exception/E) var/timestamp = time2text(world.timeofday,"hh:mm:ss") @@ -35,6 +36,11 @@ var/global/runtime_count = 0 world.log << "[E.desc]" #endif + //dumb stupid dangerous meme, do not use unless you want to have bad time + if (blame_for_runtimes && !ON_COOLDOWN(global, "runtime_blame", 1 DECI SECOND)) //cooldown should prevent infinite server crashing loops at least + if (get_turf(usr)) + new /obj/lightning_target(get_turf(usr)) + // if we're in a fucked up state and generating lots of runtimes we don't want to make the performance of the runtimes even worse if(runtime_count < 1000) if (istype(usr, /mob)) @@ -58,6 +64,19 @@ var/global/runtime_count = 0 src.Browse(grabResource("html/runtimeViewer.html"), "window=runtimeviewer;size=500x600;title=Runtime+Viewer;", 1) +/client/proc/cmd_aggressive_debugging() + SET_ADMIN_CAT(ADMIN_CAT_FUN) + set name = "Toggle Aggressive Debugging" + set desc = "Makes triggering a runtime strike you with lightning. Yes really." + set popup_menu = 0 + + ADMIN_ONLY + if (global.blame_for_runtimes) + global.blame_for_runtimes = FALSE + boutput(src, SPAN_NOTICE("Aggressive debugging disabled")) + else + if (input(src, "Are you sure you want to cause a lightning strike on every runtime? (May cause extreme unforseen consequences) Type YES below if you're sure.", "Really enable aggressive debugging?", "NO") == "YES") + global.blame_for_runtimes = TRUE /client/Topic(href, href_list) diff --git a/code/global.dm b/code/global.dm index 4901f819e7bbd..8c2778f75b7da 100644 --- a/code/global.dm +++ b/code/global.dm @@ -24,6 +24,8 @@ var/list/extra_resources = list('interface/fonts/pressstart2p.ttf', 'interface/f var/global + roundId = 0 + serverKey = 0 lagcheck_enabled = 0 diff --git a/code/map.dm b/code/map.dm index a28290befcc0e..525c7fe43c22d 100644 --- a/code/map.dm +++ b/code/map.dm @@ -31,7 +31,7 @@ var/global/list/mapNames = list( "Kondaru" = list("id" = "KONDARU", "settings" = "kondaru", "playerPickable" = TRUE, "MaxPlayersAllowed" = 80), "Atlas" = list("id" = "ATLAS", "settings" = "atlas", "playerPickable" = TRUE, "MaxPlayersAllowed" = 30), "Clarion" = list("id" = "CLARION", "settings" = "destiny/clarion", "playerPickable" = TRUE, "MaxPlayersAllowed" = 60), - "Oshan Laboratory"= list("id" = "OSHAN", "settings" = "oshan", "playerPickable" = TRUE), + "Oshan Laboratory"= list("id" = "OSHAN", "settings" = "oshan", "playerPickable" = TRUE, "MinPlayersAllowed" = 14), "Nadir" = list("id" = "NADIR", "settings" = "nadir", "playerPickable" = TRUE, "MaxPlayersAllowed" = 70), "Manta" = list("id" = "MANTA", "settings" = "manta", "playerPickable" = FALSE, "MaxPlayersAllowed" = 80), @@ -41,14 +41,14 @@ var/global/list/mapNames = list( "Mushroom" = list("id" = "MUSHROOM", "settings" = "mushroom", "playerPickable" = FALSE), "Trunkmap" = list("id" = "TRUNKMAP", "settings" = "trunkmap", "playerPickable" = FALSE), //"Density" = list("id" = "DENSITY", "settings" = "density", "playerPickable" = FALSE, "MaxPlayersAllowed" = 30), - "Density2" = list("id" = "DENSITY2", "settings" = "density2", "playerPickable" = FALSE, "MaxPlayersAllowed" = 20), + "Density2" = list("id" = "DENSITY2", "settings" = "density2", "playerPickable" = FALSE, "MaxPlayersAllowed" = 20), "Ozymandias" = list("id" = "OZYMANDIAS", "settings" = "ozymandias", "playerPickable" = FALSE, "MinPlayersAllowed" = 40), "Bellerophon Fleet" = list("id" = "FLEET", "settings" = "fleet", "playerPickable" = FALSE), //"Icarus" = list("id" = "ICARUS", "settings" = "icarus", "playerPickable" = FALSE), //"Gehenna" = list("id" = "GEHENNA", "settings" = "gehenna", "playerPickable" = FALSE), "blank" = list("id" = "BLANK", "settings" = "", "playerPickable" = FALSE), "blank_underwater" = list("id" = "BLANK_UNDERWATER", "settings" = "", "playerPickable" = FALSE), - "DevTest" = list("id" = "DEVTEST", "settings" = "devtest", "playerPickable" = FALSE, "MaxPlayersAllowed" = 69) + "DevTest" = list("id" = "DEVTEST", "settings" = "devtest", "playerPickable" = FALSE, "MaxPlayersAllowed" = 69) ) /obj/landmark/map @@ -237,7 +237,7 @@ var/global/list/mapNames = list( /datum/map_settings/pod_wars name = "POD_WARS" default_gamemode = "pod_wars" - goonhub_map = "https://cdn.discordapp.com/attachments/890313890003566632/1137526717964103781/output.png" + goonhub_map = "https://goonhub.com/maps/pod_wars" walls = /turf/simulated/wall/auto/supernorn rwalls = /turf/simulated/wall/auto/reinforced/supernorn style = "spess" @@ -310,7 +310,7 @@ var/global/list/mapNames = list( /datum/map_settings/wrestlemap name = "WRESTLEMAP" - goonhub_map = "https://cdn.discordapp.com/attachments/412381738510319626/1116907371999010836/output.png" + goonhub_map = "https://goonhub.com/maps/wrestlemap" walls = /turf/simulated/wall/auto/supernorn rwalls = /turf/simulated/wall/auto/reinforced/supernorn diff --git a/code/mapSwitching.dm b/code/mapSwitching.dm index 3642453ba398a..f13f142902689 100644 --- a/code/mapSwitching.dm +++ b/code/mapSwitching.dm @@ -63,7 +63,7 @@ var/global/datum/mapSwitchHandler/mapSwitcher src.current = map - proc/setNextMap(trigger, mapName = "", mapID = "") + proc/setNextMap(trigger, mapName = "", mapID = "", votes = 0) if (!mapName && !mapID) throw EXCEPTION("No map identifier given") @@ -81,18 +81,23 @@ var/global/datum/mapSwitchHandler/mapSwitcher else mapName = getMapNameFromID(mapID) - //compile with a new map - var/list/params = list( - "map" = mapID, - "votedFor" = trigger == "Player Vote" - ) - var/data[] = apiHandler.queryAPI("map-switcher/switch", params, 1) - - if (!data) - throw EXCEPTION("No response from goonhub API route") - - if (data["error"]) - throw EXCEPTION("Received error from goonhub API: [data["error"]]") + var/datum/apiModel/MapSwitch/mapSwitchRes + try + var/datum/apiRoute/mapswitch/mapSwitch = new + mapSwitch.buildBody( + trigger == "Player Vote" ? null : trigger, // trigger should be a ckey if not a vote + roundId, + null, + mapID, + votes + ) + mapSwitchRes = apiHandler.queryAPI(mapSwitch) + catch (var/exception/e) + var/datum/apiModel/Error/error = e.name + throw EXCEPTION(error.message) + + if (text2num(mapSwitchRes.status) != 200) + throw EXCEPTION("Build server failed to switch map. Expected HTTP status code 200, received code [isnull(mapSwitchRes.status) ? "null" : mapSwitchRes.status] instead") //make a note if this is a player voted map src.nextMapIsVotedFor = trigger == "Player Vote" ? 1 : 0 @@ -208,10 +213,10 @@ var/global/datum/mapSwitchHandler/mapSwitcher src.nextMapIsVotedFor = 1 else try - src.setNextMap("Player Vote", mapName = src.voteChosenMap) + src.setNextMap("Player Vote", mapName = src.voteChosenMap, votes = highestVotes) catch (var/exception/e) - logTheThing(LOG_ADMIN, null, "Failed to set map <b>[src.voteChosenMap]</b> from map vote: [e]") - logTheThing(LOG_DIARY, null, "Failed to set map <b>[src.voteChosenMap]</b> from map vote: [e]", "debug") + logTheThing(LOG_ADMIN, null, "Failed to set map <b>[src.voteChosenMap]</b> from map vote: [e.name]") + logTheThing(LOG_DIARY, null, "Failed to set map <b>[src.voteChosenMap]</b> from map vote: [e.name]", "debug") return //announce winner diff --git a/code/mob.dm b/code/mob.dm index afdbbc1b76aef..892bc0ad2e87d 100644 --- a/code/mob.dm +++ b/code/mob.dm @@ -562,7 +562,7 @@ if(!ON_COOLDOWN(src, "flubber_bounce", 0.1 SECONDS) || src.hasStatus("sugar_rush")) src.now_pushing = 0 var/atom/source = A - src.visible_message(SPAN_ALERT("<B>[src]</B>'s bounces off [A]!")) + src.visible_message(SPAN_ALERT("<B>[src]</B> bounces off [A]!")) playsound(source, 'sound/misc/boing/6.ogg', 100, TRUE) var/throw_dir = turn(get_dir(A, src),rand(-1,1)*45) src.throw_at(get_edge_cheap(source, throw_dir), 20, 3) @@ -610,7 +610,7 @@ return var/atom/source = get_turf(tmob) - src.visible_message(SPAN_ALERT("<B>[src]</B> and <B>[tmob]</B>'s bounce off each other!")) + src.visible_message(SPAN_ALERT("<B>[src]</B> and <B>[tmob]</B> bounce off each other!")) playsound(source, 'sound/misc/boing/6.ogg', 100, TRUE) var/target_dir = get_dir(src, tmob) var/src_dir = get_dir(tmob, src) @@ -1034,12 +1034,6 @@ LI += W .= LI -/mob/proc/findname(msg) - for(var/mob/M in mobs) - if (M.real_name == text("[]", msg)) - .= M - .= 0 - /mob/proc/movement_delay(var/atom/move_target = 0) .= 2 + movement_delay_modifier if (src.pushing) diff --git a/code/mob/dead/observer.dm b/code/mob/dead/observer.dm index 7478d718771cf..7d34961986894 100644 --- a/code/mob/dead/observer.dm +++ b/code/mob/dead/observer.dm @@ -278,7 +278,7 @@ if(!isdead(src)) if (src.hibernating == 1) - var/confirm = tgui_alert(src, "Are you sure you want to ghost? You won't be able to exit cryogenic storage, and will be an observer the rest of the round.", "Observe?", list("Yes", "No")) + var/confirm = tgui_alert(src, "Are you sure you want to ghost? You won't be able to exit cryogenic storage, DNR status will be set, and you will be an observer the rest of the round.", "Observe?", list("Yes", "No")) if(confirm == "Yes") respawn_controller.subscribeNewRespawnee(src.ckey) src.mind?.get_player()?.dnr = TRUE diff --git a/code/mob/living.dm b/code/mob/living.dm index 5143e5f410982..21a55d9f0442e 100644 --- a/code/mob/living.dm +++ b/code/mob/living.dm @@ -196,7 +196,9 @@ src.remove_ailments() src.lastgasp(allow_dead = TRUE) if (src.ai) src.ai.disable() - if (src.key) statlog_death(src, gibbed) + if (src.key) + var/datum/eventRecord/Death/deathEvent = new + deathEvent.buildAndSend(src, gibbed) if (src.client && ticker.round_elapsed_ticks >= 12000 && VALID_MOB(src)) var/num_players = 0 for(var/client/C) @@ -961,7 +963,7 @@ //Blobchat handling if (src.mob_flags & SPEECH_BLOB) - message = html_encode(src.say_quote(message)) + message = src.say_quote(message) var/rendered = "<span class='game blobsay'>" rendered += "[SPAN_PREFIX("BLOB:")] " rendered += "<span class='name text-normal' data-ctx='\ref[src.mind]'>[src.get_heard_name()]</span> " @@ -1232,7 +1234,7 @@ (isintangible(M) && (M in hearers)) || \ ( \ (!isturf(say_location.loc) && (say_location.loc == M.loc || (say_location in M))) && \ - !(M in heard_a) && \ + !(M in heard_a) && !(M in heard_b) &&\ !istype(M, /mob/dead/target_observer) && \ M != src \ ) \ @@ -2285,7 +2287,7 @@ /// Returns the rate of blood to absorb from the reagent holder per Life() /mob/living/proc/get_blood_absorption_rate() - return 1 // that's the standard absorption rate + return 1 + GET_ATOM_PROPERTY(src, PROP_MOB_BLOOD_ABSORPTION_RATE) // that's the standard absorption rate /mob/living/was_built_from_frame(mob/user, newly_built) . = ..() diff --git a/code/mob/living/carbon/human.dm b/code/mob/living/carbon/human.dm index 8b29def08ee7f..13f4529507db4 100644 --- a/code/mob/living/carbon/human.dm +++ b/code/mob/living/carbon/human.dm @@ -1080,8 +1080,6 @@ if (iscarbon(I)) var/mob/living/carbon/C = I logTheThing(LOG_COMBAT, src, "throws [constructTarget(C,"combat")] [dir2text(throw_dir)] at [log_loc(src)].") - if ( ishuman(C) && !C.getStatusDuration("weakened")) - C.changeStatus("weakened", 1 SECOND) else // Added log_reagents() call for drinking glasses. Also the location (Convair880). logTheThing(LOG_COMBAT, src, "throws [I] [I.is_open_container() ? "[log_reagents(I)]" : ""] [dir2text(throw_dir)] at [log_loc(src)].") diff --git a/code/mob/living/carbon/human/monkeys.dm b/code/mob/living/carbon/human/monkeys.dm index 66ab7f2437920..07d6ecd04c3f5 100644 --- a/code/mob/living/carbon/human/monkeys.dm +++ b/code/mob/living/carbon/human/monkeys.dm @@ -477,18 +477,15 @@ if(!length(choices)) return thingy = pick(choices) - slot = thingy.equipped_in_slot else if (theft_target.l_store && theft_target.r_store) thingy = pick(theft_target.l_store, theft_target.r_store) - if (thingy == theft_target.r_store) - slot = 16 else if (theft_target.l_store) thingy = theft_target.l_store else if (theft_target.r_store) thingy = theft_target.r_store - slot = 16 else // ??? return + slot = theft_target.get_slot_from_item(thingy) walk_towards(src, null) if(ismonkey(theft_target)) src.say("I help!") @@ -565,9 +562,12 @@ icon = 'icons/mob/screen1.dmi' icon_state = "grabbed" - var/mob/living/carbon/human/npc/source //The npc doing the action - var/mob/living/carbon/human/target //The target of the action - var/slot //The slot number + /// NPC who is pickpocketing + var/mob/living/carbon/human/npc/source + /// The pick-pocketing victim + var/mob/living/carbon/human/target + /// The SLOT_* define (i.e. SLOT_BACK) + var/slot New(var/Source, var/Target, var/Slot) source = Source diff --git a/code/mob/living/carbon/human/normal.dm b/code/mob/living/carbon/human/normal.dm index 3fa89177b689c..ad27358c2464b 100644 --- a/code/mob/living/carbon/human/normal.dm +++ b/code/mob/living/carbon/human/normal.dm @@ -1,4 +1,5 @@ /mob/living/carbon/human/normal + name = "Random Human" initializeBioholder(gender) if (gender) src.gender = gender diff --git a/code/mob/living/carbon/human/npc.dm b/code/mob/living/carbon/human/npc.dm index 2ee5e2e1f995e..a17fdfc1110eb 100644 --- a/code/mob/living/carbon/human/npc.dm +++ b/code/mob/living/carbon/human/npc.dm @@ -112,37 +112,6 @@ //// rest in peace NPC classic-mentally challenged idiots, you were shit //// - -/mob/living/carbon/human/npc/syndicate - ai_aggressive = 1 - New() - ..() - SPAWN(0) - if(ticker?.mode && istype(ticker.mode, /datum/game_mode/nuclear)) - src.real_name = "[syndicate_name()] Operative #[ticker.mode:agent_number]" - ticker.mode:agent_number++ - else - src.real_name = "Syndicate Agent" - JobEquipSpawned("Syndicate Operative") - u_equip(l_store) // Deletes syndicate remote teleporter to keep people out of the syndie shuttle - u_equip(r_store) // Deletes uplink radio because fuckem - -/mob/living/carbon/human/npc/syndicate_weak - ai_aggressive = 1 - New() - ..() - SPAWN(0) - src.real_name = "Junior Syndicate Agent" - JobEquipSpawned("Junior Syndicate Operative") - -/mob/living/carbon/human/npc/syndicate_weak/no_ammo - ai_aggressive = 1 - New() - ..() - SPAWN(0) - src.real_name = "Junior Syndicate Agent" - JobEquipSpawned("Poorly Equipped Junior Syndicate Operative") - /mob/living/carbon/human/npc/survivor // For prefab wrecks. Give them some life. Maybe expand this npc later idk New() ..() diff --git a/code/mob/living/carbon/human/procs/damage.dm b/code/mob/living/carbon/human/procs/damage.dm index a05356b9427ae..22bd7a7f99905 100644 --- a/code/mob/living/carbon/human/procs/damage.dm +++ b/code/mob/living/carbon/human/procs/damage.dm @@ -127,7 +127,6 @@ implanted.owner = src if (P.forensic_ID) implanted.forensic_ID = P.forensic_ID - src.implant += implanted implanted.setMaterial(P.proj_data.material) implanted.implanted(src, null, 0) return 1 diff --git a/code/mob/living/carbon/human/procs/emote.dm b/code/mob/living/carbon/human/procs/emote.dm index 200f6fed3dbf7..bdb22bab6125b 100644 --- a/code/mob/living/carbon/human/procs/emote.dm +++ b/code/mob/living/carbon/human/procs/emote.dm @@ -107,7 +107,9 @@ if (isvampire(src)) playsound(src, 'sound/effects/screech_tone.ogg', 90, TRUE, extrarange = 2, pitch = clamp(1.0 + (30 - src.bioHolder.age)/60, 0.7, 1.2), channel=VOLUME_CHANNEL_EMOTE) screamed = TRUE - + if (isarcfiend(src)) + playsound(src, 'sound/effects/elec_bzzz.ogg', 80, TRUE, extrarange = 2, pitch = clamp(1.0 + (30 - src.bioHolder.age)/60, 0.7, 1.2), channel=VOLUME_CHANNEL_EMOTE) + screamed = TRUE #ifdef HALLOWEEN spooktober_GH.change_points(src.ckey, 100) #endif @@ -551,7 +553,9 @@ if ("listtarget") src.show_text("salute, bow, hug, wave, glare, stare, look, nod, flipoff, doubleflip, shakefist, handshake, daps, slap, boggle, highfive, fingerguns") - + if ("list") + src.emote("listbasic") + src.emote("listtarget") if ("suicide") src.show_text("Suicide is a command, not an emote. Please type 'suicide' in the input bar at the bottom of the game window to kill yourself.", "red") diff --git a/code/mob/living/carbon/human/procs/get_desc.dm b/code/mob/living/carbon/human/procs/get_desc.dm index 89861ba14161f..a6964d89c1f6d 100644 --- a/code/mob/living/carbon/human/procs/get_desc.dm +++ b/code/mob/living/carbon/human/procs/get_desc.dm @@ -153,6 +153,12 @@ count++ . += "<br>[SPAN_ALERT("[src] has [count > 1 ? "arrows" : "an arrow"] stuck in [him_or_her(src)]!")]" + if (locate(/obj/item/implant/projectile/body_visible/seed) in src.implant) + var/count = 0 + for (var/obj/item/implant/projectile/body_visible/seed/P in src.implant) + count++ + . += "<br>[SPAN_ALERT("[src] has [count > 1 ? "seeds" : "a seed"] stuck in [him_or_her(src)]!")]" + if (src.is_jittery) switch(src.jitteriness) if (300 to INFINITY) @@ -247,12 +253,10 @@ else . += "<br>[SPAN_ALERT("<B>[src.name]'s entire chest is missing!</B>")]" - - if (src.organHolder.back_op_stage > BACK_SURGERY_CLOSED) - if (!src.organHolder.butt) - . += "<br>[SPAN_ALERT("<B>[src.name]'s butt seems to be missing!</B>")]" - else - . += "<br>[SPAN_ALERT("<B>[src.name] has an open incision on [t_his] butt!</B>")]" + if (!src.organHolder.butt) + . += "<br>[SPAN_ALERT("<B>[src.name]'s butt seems to be missing!</B>")]" + else if (src.organHolder.back_op_stage > BACK_SURGERY_CLOSED) + . += "<br>[SPAN_ALERT("<B>[src.name] has an open incision on [t_his] butt!</B>")]" if (src.limbs) if (!src.limbs.l_arm) diff --git a/code/mob/living/critter/bee.dm b/code/mob/living/critter/bee.dm index c94a6ed0a41ce..12d549871e699 100644 --- a/code/mob/living/critter/bee.dm +++ b/code/mob/living/critter/bee.dm @@ -62,7 +62,6 @@ real_name = name SPAWN(0) ADMIN_BEES_ONLY - //statlog_bees(src) src.UpdateIcon() if (!isdead(src)) @@ -586,6 +585,7 @@ if (BOUNDS_DIST(holder.owner, target) > 0) boutput(holder.owner, SPAN_ALERT("That is too far away to teleport away.")) return 1 + logTheThing(LOG_COMBAT, src.holder.owner, "begins casting teleport stare on [constructTarget(target)] at [log_loc(src.holder.owner)]") holder.owner.visible_message(SPAN_COMBAT("<b>[holder.owner]</b> stares at [MT]!")) if(do_buzz) playsound(holder.owner, 'sound/voice/animal/buzz.ogg', 100, 1) @@ -597,8 +597,9 @@ MT.emote("scream") MT.setStatusMin("paralysis", 20 SECONDS) MT.take_brain_damage(10) - - do_teleport(MT, locate((world.maxx/2) + rand(-10,10), (world.maxy/2) + rand(-10,10), 1), 0) + var/turf/turf = locate((world.maxx/2) + rand(-10,10), (world.maxy/2) + rand(-10,10), 1) + logTheThing(LOG_COMBAT, src.holder.owner, "stuns and teleports [constructTarget(target)] to [log_loc(turf)] using teleport stare") + do_teleport(MT, turf, 0) /datum/targetable/critter/bee_puke_honey diff --git a/code/mob/living/critter/firefly.dm b/code/mob/living/critter/firefly.dm index 6dcffa9bccfd8..17409cc01fdf3 100644 --- a/code/mob/living/critter/firefly.dm +++ b/code/mob/living/critter/firefly.dm @@ -311,7 +311,8 @@ TYPEINFO(/mob/living/critter/small_animal/dragonfly) Move(NewLoc, direct) . = ..() - animate(src, time=5 SECONDS, pixel_x=rand(-4,4), pixel_y=rand(-8,8)) + if (!ON_COOLDOWN(src, "move_bumble", 5 SECONDS)) + animate(src, time=5 SECONDS, pixel_x=rand(-4,4), pixel_y=rand(-8,8)) attackby(obj/item/W, mob/living/user) if(istype(W, /obj/item/reagent_containers/glass/jar) || istype(W, /obj/item/reagent_containers/glass/beaker/large)) diff --git a/code/mob/living/critter/plant.dm b/code/mob/living/critter/plant.dm index 76e2627d14fe3..07c0519ec7cef 100644 --- a/code/mob/living/critter/plant.dm +++ b/code/mob/living/critter/plant.dm @@ -48,22 +48,10 @@ // We need to pass the plantgenes from the plant to our new lovely botany pet var/datum/plantgenes/new_genes = src.plantgenes + // Copy the genes from the plant we're harvesting to the new piece of produce. HYPpassplantgenes(passed_genes,new_genes) src.generation = harvested_plantpot.generation - // Copy the genes from the plant we're harvesting to the new piece of produce. - - if(origin_plant.hybrid) - // We need to do special shit with the genes if the plant is a spliced - // hybrid since they run off instanced datums rather than referencing - // a specific already-existing one. - var/plantType = origin_plant.type - var/datum/plant/hybrid = new plantType(src) - for(var/V in origin_plant.vars) - if(issaved(origin_plant.vars[V]) && V != "holder") - hybrid.vars[V] = origin_plant.vars[V] - src.planttype = hybrid - else - src.planttype = origin_plant + src.planttype = HYPgenerateplanttypecopy(src, origin_plant) // If the plant this critter was harvested from was damaged, we damage the critter as well diff --git a/code/mob/living/critter/sawfly.dm b/code/mob/living/critter/sawfly.dm index dcfa8ec29001b..18c75e633344f 100644 --- a/code/mob/living/critter/sawfly.dm +++ b/code/mob/living/critter/sawfly.dm @@ -51,7 +51,7 @@ This file is the critter itself, and all the custom procs it needs in order to f animate_bumble(src) // gotta get the float goin' on src.set_a_intent(INTENT_HARM) // incredibly stupid way of ensuring they aren't passable but it works - APPLY_MOVEMENT_MODIFIER(src, /datum/movement_modifier/robot_base, "robot_health_slow_immunity") //prevents them from having movespeed slowdown when injured + APPLY_MOVEMENT_MODIFIER(src, /datum/movement_modifier/robot_part/robot_base, "robot_health_slow_immunity") //prevents them from having movespeed slowdown when injured START_TRACKING setup_healths() diff --git a/code/mob/living/critter/small_animal.dm b/code/mob/living/critter/small_animal.dm index 22592f43f1014..02e753bf343bf 100644 --- a/code/mob/living/critter/small_animal.dm +++ b/code/mob/living/critter/small_animal.dm @@ -1891,7 +1891,7 @@ var/list/mob_bird_species = list("smallowl" = /mob/living/critter/small_animal/b src.ai_retaliates = FALSE return else if((M.a_intent == INTENT_DISARM) && !src.aggressive) - src.visible_message(SPAN_NOTICE("[M] shakes [src] to awaken it's killer instincts!")) + src.visible_message(SPAN_NOTICE("[M] shakes [src] to awaken [his_or_her(src)] killer instincts!")) src.aggressive = TRUE src.ai_retaliates = TRUE return @@ -1937,7 +1937,7 @@ var/list/mob_bird_species = list("smallowl" = /mob/living/critter/small_animal/b if(length(.) && prob(25)) playsound(src.loc, 'sound/items/Wirecutter.ogg', 50, 1) - src.visible_message(SPAN_ALERT("<B>[src]</B> snips it's pincers!")) + src.visible_message(SPAN_ALERT("<B>[src]</B> snips [his_or_her(src)] pincers!")) death() src.reagents.add_reagent("toxin", 20, null) @@ -2015,7 +2015,7 @@ var/list/mob_bird_species = list("smallowl" = /mob/living/critter/small_animal/b src.ai_retaliates = FALSE return else if((M.a_intent == INTENT_DISARM) && !src.aggressive) - src.visible_message(SPAN_NOTICE("[M] shakes [src] to awaken it's killer instincts!")) + src.visible_message(SPAN_NOTICE("[M] shakes [src] to awaken [his_or_her(src)] killer instincts!")) src.aggressive = TRUE src.ai_retaliates = TRUE return @@ -2032,8 +2032,9 @@ var/list/mob_bird_species = list("smallowl" = /mob/living/critter/small_animal/b icon_state = "rattlesnake_rattle" playsound(src, 'sound/musical_instruments/tambourine/tambourine_4.ogg', 80, TRUE, channel=VOLUME_CHANNEL_EMOTE) SPAWN(1 SECONDS) - icon_state = "rattlesnake" - return SPAN_EMOTE("<b>[src]</b> rattles it's tail!") + if(isalive(src)) + icon_state = "rattlesnake" + return SPAN_EMOTE("<b>[src]</b> rattles [his_or_her(src)] tail!") return null specific_emote_type(var/act) @@ -3433,7 +3434,7 @@ var/list/mob_bird_species = list("smallowl" = /mob/living/critter/small_animal/b SPAWN(3 SECONDS) if (src && !isdead(src)) src.icon_state = start_icon - return SPAN_EMOTE("<b>[src]</b> clacks their claws!") + return SPAN_EMOTE("<b>[src]</b> clacks [his_or_her(src)] claws!") return null specific_emote_type(var/act) @@ -3805,10 +3806,10 @@ var/list/mob_bird_species = list("smallowl" = /mob/living/critter/small_animal/b boutput(src, "[M] already has a mouse in [his_or_her(M)] pocket.") return if(voluntary && M != src.last_poked) // if we poked that person it means we implicitly agree - boutput(M, "You extend your hand to the mouse, waiting for it to accept.") + boutput(M, "You extend your hand to the mouse, waiting for [him_or_her(src)] to accept.") if (ON_COOLDOWN(src, "mentor mouse pickup popup", 3 SECONDS)) return - if (tgui_alert(src, "[M] wants to pick you up and put you in their pocket. Is that okay with you?", "Hop in the pocket", list("Yes", "No")) != "Yes") + if (tgui_alert(src, "[M] wants to pick you up and put you in [his_or_her(M)] pocket. Is that okay with you?", "Hop in the pocket", list("Yes", "No")) != "Yes") boutput(M, "\The [src] slips out as you try to pick it up.") return if(!src || !src.mind || !src.client) @@ -3818,7 +3819,7 @@ var/list/mob_bird_species = list("smallowl" = /mob/living/critter/small_animal/b else M.visible_message("\The [src] jumps into [M]'s pocket.", "\The [src] jumps into your pocket.") boutput(M, "You can click on the status effect in the top right to kick the mouse out.") - boutput(src, "<span style='color:red; font-size:1.5em'><b>You are now in someone's pocket and can talk to them and click on their screen to ping in the place where you're ctrl+clicking. This is a feature meant for teaching and helping players. Do not abuse it by using it to just chat with your friends!</b></span>") + boutput(src, "<span style='color:red; font-size:1.5em'><b>You are now in someone's pocket, can talk to [him_or_her(M)], and click on [his_or_her(M)] screen to ping in the place where you're ctrl+clicking. This is a feature meant for teaching and helping players. Do not abuse it by using it to just chat with your friends!</b></span>") logTheThing(LOG_ADMIN, src, "jumps into [constructTarget(M, "admin")]'s pocket as a mentor mouse at [log_loc(M)].") var/mob/dead/target_observer/mentor_mouse_observer/obs = new(M, src.is_admin) obs.set_observe_target(M) @@ -3833,7 +3834,7 @@ var/list/mob_bird_species = list("smallowl" = /mob/living/critter/small_animal/b hand_attack(atom/target, params, location, control, origParams) if(istype(target, /mob/living) && target != src) boutput(src, "<span class='game' class='mhelp'>You poke [target] in a way that clearly indicates you want to help [him_or_her(target)].</span>") - boutput(target, "<span class='game' class='mhelp'>\The [src] seems willing to help you. Click on it with an empty hand if you want to accept the offer.</span>") + boutput(target, "<span class='game' class='mhelp'>\The [src] seems willing to help you. Click on [him_or_her(src)] with an empty hand if you want to accept the offer.</span>") src.last_poked = target if(src.icon_state_exclaim) flick(src.icon_state_exclaim, src) @@ -3888,7 +3889,7 @@ var/list/mob_bird_species = list("smallowl" = /mob/living/critter/small_animal/b if (!holder) return 1 logTheThing(LOG_ADMIN, src, "turned from a mentor mouse to a ghost") // I can remove this but it seems like a good thing to have - M.visible_message(SPAN_ALERT("<B>[M] does a funny little jiggle with their body and then vanishes into thin air!</B>")) // MY ASCENSION BEGINS + M.visible_message(SPAN_ALERT("<B>[M] does a funny little jiggle with [his_or_her(M)] body and then vanishes into thin air!</B>")) // MY ASCENSION BEGINS animate_bouncy(src) animate(M, alpha=0, time=disappearance_time) SPAWN(disappearance_time) diff --git a/code/mob/living/life/Life.dm b/code/mob/living/life/Life.dm index bd498fee15c2d..029b635f7bfb3 100644 --- a/code/mob/living/life/Life.dm +++ b/code/mob/living/life/Life.dm @@ -174,6 +174,7 @@ add_lifeprocess(/datum/lifeprocess/viruses) add_lifeprocess(/datum/lifeprocess/blindness) add_lifeprocess(/datum/lifeprocess/radiation) + add_lifeprocess(/datum/lifeprocess/faith) /mob/living/carbon/cube/restore_life_processes() ..() @@ -193,6 +194,7 @@ add_lifeprocess(/datum/lifeprocess/sight) add_lifeprocess(/datum/lifeprocess/blindness) add_lifeprocess(/datum/lifeprocess/disability) + add_lifeprocess(/datum/lifeprocess/faith) /mob/living/silicon/hivebot/restore_life_processes() ..() @@ -213,9 +215,9 @@ add_lifeprocess(/datum/lifeprocess/robot_statusupdate) add_lifeprocess(/datum/lifeprocess/stuns_lying) add_lifeprocess(/datum/lifeprocess/blindness) - add_lifeprocess(/datum/lifeprocess/robot_oil) add_lifeprocess(/datum/lifeprocess/robot_locks) add_lifeprocess(/datum/lifeprocess/disability) + add_lifeprocess(/datum/lifeprocess/faith) /mob/living/silicon/drone/restore_life_processes() @@ -353,6 +355,10 @@ D.foreign_limb_effect() if (!isdead(src)) // Marq was here, breaking everything. + src.limbs.l_arm?.on_life(parent) + src.limbs.r_arm?.on_life(parent) + src.limbs.l_leg?.on_life(parent) + src.limbs.r_leg?.on_life(parent) if (src.sims && src.ckey) // ckey will be null if it's an npc, so they're skipped src.sims.Life() diff --git a/code/mob/living/life/faith.dm b/code/mob/living/life/faith.dm new file mode 100644 index 0000000000000..3ca7520f4fbe6 --- /dev/null +++ b/code/mob/living/life/faith.dm @@ -0,0 +1,38 @@ + +/datum/lifeprocess/faith + + process(var/datum/gas_mixture/environment) + var/mult = get_multiplier() + + if (isunconscious(owner) || isdead(owner) || !owner.mind || isghostcritter(owner) || isintangible(owner) || !isliving(owner)) + // do nothing + else if (owner.traitHolder.hasTrait("training_chaplain")) + modify_chaplain_faith(owner, min(FAITH_STARTING / max(1, get_chaplain_faith(owner)), 5) * mult) // helps chaplains get back to normal + else if (!istype(get_area(owner), /area/station/chapel)) + // others need to be in the chapel + else if (isvampire(owner) || isvampiricthrall(owner) || iswraith(owner) || owner.bioHolder.HasEffect("revenant")) + // vampires are unholy and will not produce faith unless they are a chaplain + else if (owner.traitHolder.hasTrait("atheist")) + else + add_faith(FAITH_GEN_BASE * mult) + ..() + +/proc/add_faith(amount) + for (var/datum/trait/job/chaplain/chap in by_type[/datum/trait/job/chaplain]) + chap.faith += ((amount > 0) ? (amount * chap.faith_mult) : amount) + +/proc/get_chaplain_trait(mob/target) + return target.traitHolder?.getTrait("training_chaplain") + +/proc/get_chaplain_faith(mob/target) + var/datum/trait/job/chaplain/chap_trait = get_chaplain_trait(target) + if (chap_trait) + return chap_trait.faith + +/proc/modify_chaplain_faith(mob/target, amount) + var/datum/trait/job/chaplain/chap_trait = get_chaplain_trait(target) + if (chap_trait) + if(amount > 0) + amount *= chap_trait.faith_mult + chap_trait.faith += amount + return chap_trait.faith diff --git a/code/mob/living/silicon/ai/holograms.dm b/code/mob/living/silicon/ai/holograms.dm index fb54699a57754..4bbff8ce2a69f 100644 --- a/code/mob/living/silicon/ai/holograms.dm +++ b/code/mob/living/silicon/ai/holograms.dm @@ -253,7 +253,7 @@ var/sound/sound = pick('sound/voice/bcriminal.ogg', 'sound/voice/bjustice.ogg', 'sound/voice/bfreeze.ogg', 'sound/machines/siren_police.ogg') playsound(get_turf(src), sound, 50, FALSE) animate_bouncy(src) - SPAWN(1 SECOND) + SPAWN(2 SECONDS) qdel(src) if ("down_arrow", "up_arrow", "left_arrow", "right_arrow") var/dirs = list("down_arrow" = SOUTH, "up_arrow" = NORTH, "left_arrow" = WEST, "right_arrow" = EAST) @@ -263,6 +263,7 @@ for (var/atom/movable/AM in get_turf(src)) if (!AM.anchored) step(AM, dir) + step(src, dir) sleep(0.3 SECONDS) qdel(src) if ("happy_face") diff --git a/code/mob/living/silicon/robot.dm b/code/mob/living/silicon/robot.dm index fab5e2e6a784e..34e221e268260 100644 --- a/code/mob/living/silicon/robot.dm +++ b/code/mob/living/silicon/robot.dm @@ -35,6 +35,8 @@ var/total_weight = 0 var/datum/robot_cosmetic/cosmetic_mods = null + var/datum/material/frame_material + var/list/obj/clothes = list() var/next_cache = 0 @@ -112,9 +114,10 @@ src.internal_pda = new /obj/item/device/pda2/cyborg(src) src.internal_pda.name = "[src]'s Internal PDA Unit" src.internal_pda.owner = "[src]" - APPLY_MOVEMENT_MODIFIER(src, /datum/movement_modifier/robot_base, "robot_health_slow_immunity") + APPLY_MOVEMENT_MODIFIER(src, /datum/movement_modifier/robot_part/robot_base, "robot_health_slow_immunity") if (frame) src.freemodule = frame.freemodule + src.frame_material = frame.material if (starter && !(src.dependent || src.shell)) var/obj/item/parts/robot_parts/chest/light/PC = new /obj/item/parts/robot_parts/chest/light(src) var/obj/item/cell/supercell/charged/CELL = new /obj/item/cell/supercell/charged(PC) @@ -257,6 +260,10 @@ if (prob(50)) src.sound_scream = 'sound/voice/screams/Robot_Scream_2.ogg' + for (var/datum/movement_modifier/MM in src.movement_modifiers) // Spawning borgs applies human only movemods, this cleans that up + if (!istype(MM, /datum/movement_modifier/robot_part)) + REMOVE_MOVEMENT_MODIFIER(src, MM, src.type) + set_pulling(atom/movable/A) . = ..() hud.update_pulling() @@ -283,6 +290,7 @@ chest.cell = src.cell var/obj/item/parts/robot_parts/robot_frame/frame = new(T) + frame.setMaterial(src.frame_material) frame.emagged = src.emagged frame.syndicate = src.syndicate frame.freemodule = src.freemodule @@ -885,6 +893,7 @@ for (var/obj/item/parts/robot_parts/RP in src.contents) if (RP.ropart_take_damage(brute_damage,burn_damage) == 1) src.compborg_lose_limb(RP) + RP.ropart_ex_act(severity, lasttouched, power) if (istype(cell,/obj/item/cell/erebite) && fire_protect != 1) src.visible_message(SPAN_ALERT("<b>[src]'s</b> erebite cell violently detonates!")) @@ -1484,8 +1493,14 @@ playsound(src, 'sound/impact_sounds/Generic_Stab_1.ogg', 40, TRUE) boutput(user, SPAN_NOTICE("You successfully attach the piece to [src.name].")) src.update_bodypart(RP.slot) - else ..() - return + else if (istype(src.part_head, /obj/item/parts/robot_parts/head/screen) && istype(W, /obj/item/sheet) && W.material.getMaterialFlags() & MATERIAL_CRYSTAL) + var/obj/item/parts/robot_parts/head/screen/screenhead = src.part_head + if (screenhead.smashed) + screenhead.start_repair(W, user) + else + ..() //woo spooky badcode else chaining + else + ..() hand_attack(atom/target, params, location, control, origParams) // Only allow it if the target is outside our contents or it is the equipped tool @@ -1785,13 +1800,6 @@ . += ROBOT_MISSING_ARM_MOVEMENT_ADJUST - if (total_weight > 0) - if (istype(src.part_leg_l,/obj/item/parts/robot_parts/leg/left/treads) && istype(src.part_leg_r,/obj/item/parts/robot_parts/leg/right/treads)) - . += total_weight / 3 - else - . += total_weight - - hotkey(name) switch (name) if ("help") @@ -1905,6 +1913,16 @@ // Robot-specific Procs // ////////////////////////// + proc/equip_slot(var/i, var/obj/item/tool) + src.module_states[i] = tool + tool.set_loc(src) + tool.pickup(src) // Handle light datums and the like. + + hud.update_tools() + hud.update_equipment() + + update_appearance() + proc/uneq_slot(var/i) if (module_states[i]) if (src.module) @@ -2424,7 +2442,11 @@ if (R.activated) if (efficient) power_use_tally += R.drainrate / 2 else power_use_tally += R.drainrate - if (src.oil && power_use_tally > 0) power_use_tally /= 1.5 + + if (src.hasStatus("freshly_oiled") && power_use_tally > 0) + power_use_tally *= 0.5 + if (src.hasStatus("oiled") && power_use_tally > 0) + power_use_tally *= 0.85 if (src.cell.genrate) power_use_tally -= src.cell.genrate @@ -2508,7 +2530,10 @@ var/delta = src.max_upgrades - initial(src.max_upgrades) power_use_tally += 3 ** delta - if (src.oil && power_use_tally > 0) power_use_tally /= 1.5 + if (src.hasStatus("freshly_oiled") && power_use_tally > 0) + power_use_tally *= 0.5 + if (src.hasStatus("oiled") && power_use_tally > 0) + power_use_tally *= 0.85 src.cell.use(power_use_tally) @@ -2548,13 +2573,6 @@ if (src.dizziness) dizziness-- - proc/add_oil(var/amt) - if (oil <= 0) - APPLY_ATOM_PROPERTY(src, PROP_MOB_STUN_RESIST, "robot_oil", 25) - APPLY_ATOM_PROPERTY(src, PROP_MOB_STUN_RESIST_MAX, "robot_oil", 25) - APPLY_MOVEMENT_MODIFIER(src, /datum/movement_modifier/robot_oil, "oil") - src.oil += amt - proc/borg_death_alert(modifier = ROBOT_DEATH_MOD_NONE) var/message = null var/net_id = generate_net_id(src) @@ -2647,6 +2665,9 @@ if (istype(src.part_head, /obj/item/parts/robot_parts/head/screen)) eyesovl = icon('icons/mob/robots.dmi', "head-" + src.part_head.appearanceString + "-" + src.part_head.mode + "-" + src.part_head.face) eye_light = image('icons/mob/robots.dmi', "head-" + src.part_head.appearanceString + "-" + src.part_head.mode + "-" + src.part_head.face) + var/obj/item/parts/robot_parts/head/screen/screenhead = src.part_head + if (screenhead.smashed) + src.i_head.overlays += image('icons/mob/robots.dmi', "screen-smashed", layer = FLOAT_LAYER + 0.1) else eyesovl = icon('icons/mob/robots.dmi', "head-" + src.part_head.appearanceString + "-eye") eye_light = image('icons/mob/robots.dmi', "head-" + src.part_head.appearanceString + "-eye") @@ -3269,6 +3290,7 @@ src.module_states[tool_index] = new_tool // Set loc and pickup our new tool in hand + new_tool.cant_drop = TRUE new_tool.set_loc(src) new_tool.pickup(src) diff --git a/code/mob/living/silicon/robot_oil.dm b/code/mob/living/silicon/robot_oil.dm deleted file mode 100644 index 60ed8ee69ff5c..0000000000000 --- a/code/mob/living/silicon/robot_oil.dm +++ /dev/null @@ -1,11 +0,0 @@ -/datum/lifeprocess/robot_oil - process(var/datum/gas_mixture/environment) - if(robot_owner) - if(robot_owner.oil > 0) - robot_owner.oil -= get_multiplier() - if (robot_owner.oil <= 0) - robot_owner.oil = 0 - REMOVE_ATOM_PROPERTY(robot_owner, PROP_MOB_STUN_RESIST, "robot_oil") - REMOVE_ATOM_PROPERTY(robot_owner, PROP_MOB_STUN_RESIST_MAX, "robot_oil") - REMOVE_MOVEMENT_MODIFIER(robot_owner, /datum/movement_modifier/robot_oil, "oil") - ..() diff --git a/code/mob/new_player.dm b/code/mob/new_player.dm index da9a508a375b7..aa6d3c55a65d0 100644 --- a/code/mob/new_player.dm +++ b/code/mob/new_player.dm @@ -414,7 +414,8 @@ var/global/datum/mutex/limited/latespawning = new(5 SECONDS) logTheThing(LOG_DEBUG, character, "<b>Late join:</b> assigned job: [JOB.name]") //if they have a ckey, joined before a certain threshold and the shuttle wasnt already on its way if (character.mind.ckey && (ticker.round_elapsed_ticks <= MAX_PARTICIPATE_TIME) && !emergency_shuttle.online) - participationRecorder.record(character.mind.ckey) + var/datum/player/P = character.mind.get_player() + participationRecorder.record(P) // Apply any roundstart mutators to late join if applicable var/mob/living/LM = character @@ -767,7 +768,7 @@ a.latejoin-card:hover { makebad(new_character, bad_type) new_character.mind.late_special_role = TRUE logTheThing(LOG_DEBUG, new_character, "<b>Late join</b>: assigned antagonist role: [bad_type].") - antagWeighter.record(role = bad_type, ckey = new_character.ckey, latejoin = 1) + antagWeighter.record(role = bad_type, P = new_character.mind.get_player(), latejoin = 1) diff --git a/code/mob/transform_procs.dm b/code/mob/transform_procs.dm index 079883ce970bf..d68dfc1144031 100644 --- a/code/mob/transform_procs.dm +++ b/code/mob/transform_procs.dm @@ -167,12 +167,13 @@ return make_critter(CT, get_turf(src)) return 0 -/mob/proc/make_critter(var/critter_type, var/turf/T, ghost_spawned=FALSE) +/mob/proc/make_critter(var/critter_type, var/turf/T, ghost_spawned=FALSE, delete_original=TRUE) var/mob/living/critter/newmob = new critter_type() if(ghost_spawned) newmob.ghost_spawned = ghost_spawned if(!istype(newmob, /mob/living/critter/small_animal/mouse/weak/mentor)) newmob.name_prefix("ethereal") + newmob.name_suffix("[rand(10,99)][rand(10,99)]") newmob.UpdateName() if (!T || !isturf(T)) T = get_turf(src) @@ -198,8 +199,9 @@ var/mob/living/critter/small_animal/small = newmob small.setup_overlays() // this requires the small animal to have a client to set things up properly - SPAWN(1 DECI SECOND) - qdel(src) + if (delete_original) + SPAWN(1 DECI SECOND) + qdel(src) return newmob diff --git a/code/modules/admin/admin.dm b/code/modules/admin/admin.dm index 887ae8ad0eabf..8c245c01be435 100644 --- a/code/modules/admin/admin.dm +++ b/code/modules/admin/admin.dm @@ -125,37 +125,37 @@ var/global/noir = 0 if (src.level >= LEVEL_PA) var/client/C = locate(href_list["target"]) if(istype(C)) - C.cloud_put("adminhelp_banner", usr.client.key) + C.player.cloudSaves.putData("adminhelp_banner", usr.client.key) src.show_chatbans(C) if ("ah_unmute")//guHGUHGUGHGUHG if (src.level >= LEVEL_PA) var/client/C = locate(href_list["target"]) if(istype(C)) - C.cloud_put("adminhelp_banner", "") + C.player.cloudSaves.putData("adminhelp_banner", "") src.show_chatbans(C) if ("mh_mute")//AHDUASHDUHWUDHWDUHWDUWDH if (src.level >= LEVEL_PA) var/client/C = locate(href_list["target"]) if(istype(C)) - C.cloud_put("mentorhelp_banner", usr.client.key) + C.player.cloudSaves.putData("mentorhelp_banner", usr.client.key) src.show_chatbans(C) if ("mh_unmute")//AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA if (src.level >= LEVEL_PA) var/client/C = locate(href_list["target"]) if(istype(C)) - C.cloud_put("mentorhelp_banner", "") + C.player.cloudSaves.putData("mentorhelp_banner", "") src.show_chatbans(C) if ("pr_mute") if (src.level >= LEVEL_PA) var/client/C = locate(href_list["target"]) if(istype(C)) - C.cloud_put("prayer_banner", usr.client.key) + C.player.cloudSaves.putData("prayer_banner", usr.client.key) src.show_chatbans(C) if ("pr_unmute") if (src.level >= LEVEL_PA) var/client/C = locate(href_list["target"]) if(istype(C)) - C.cloud_put("prayer_banner", "") + C.player.cloudSaves.putData("prayer_banner", "") src.show_chatbans(C) if ("load_admin_prefs") @@ -516,36 +516,11 @@ var/global/noir = 0 /////////////////////////////////////ban stuff if ("addban") //Add ban var/mob/M = (href_list["target"] ? locate(href_list["target"]) : null) - usr.client.addBanDialog(M) + usr.client.addBanTemp(M) if ("sharkban") //Add ban var/mob/M = (href_list["target"] ? locate(href_list["target"]) : null) usr.client.sharkban(M) - - if("unbane") //Edit ban - if (src.level >= LEVEL_SA) - var/id = html_decode(href_list["id"]) - var/ckey = html_decode(href_list["target"]) - var/compID = html_decode(href_list["compID"]) - var/ip = html_decode(href_list["ip"]) - var/reason = html_decode(href_list["reason"]) - var/timestamp = html_decode(href_list["timestamp"]) - - usr.client.editBanDialog(id, ckey, compID, ip, reason, timestamp) - else - tgui_alert(usr,"You need to be at least a Secondary Administrator to edit bans.") - - if("unbanf") //Delete ban - if (src.level >= LEVEL_SA) - var/id = html_decode(href_list["id"]) - var/ckey = html_decode(href_list["target"]) - var/compID = html_decode(href_list["compID"]) - var/ip = html_decode(href_list["ip"]) - var/akey = usr.client.ckey - - usr.client.deleteBanDialog(id, ckey, compID, ip, akey) - else - tgui_alert(usr,"You need to be at least a Secondary Administrator to remove bans.") /////////////////////////////////////end ban stuff if("jobbanpanel") @@ -564,7 +539,7 @@ var/global/noir = 0 else //It's a key. We need to cache it's ban history to not make 300 requests to the API. target = M action = "jobban_offline" - M = apiHandler.queryAPI("jobbans/get/player", list("ckey"=M), 1)[M] + M = jobban_get_for_player(M) if (!M) return @@ -700,7 +675,7 @@ var/global/noir = 0 if (src.level >= LEVEL_SA) var/M = href_list["target"] var/job = href_list["type"] - var/list/cache = apiHandler.queryAPI("jobbans/get/player", list("ckey"=M), 1)[M] + var/list/cache = jobban_get_for_player(M) if (!M) return if (jobban_isbanned(cache, job)) if(cache.Find("Everything Except Assistant") && job != "Everything Except Assistant") @@ -2318,7 +2293,7 @@ var/global/noir = 0 qdel(O) LAGCHECK(LAG_LOW) if("sec_classic1") - for(var/obj/item/clothing/suit/fire/O in world) + for(var/obj/item/clothing/suit/hazard/fire/O in world) qdel(O) LAGCHECK(LAG_LOW) for(var/obj/grille/O in world) @@ -2537,7 +2512,7 @@ var/global/noir = 0 if (tgui_alert(usr,"Do you want to give everyone a gun?", "Confirmation", list("Yes", "No")) != "Yes") return for (var/mob/living/L in mobs) - new /obj/random_item_spawner/kineticgun(get_turf(L)) + new /obj/random_item_spawner/kineticgun/fullrandom(get_turf(L)) message_admins("[key_name(usr)] gave everyone a random firearm.") logTheThing(LOG_ADMIN, usr, "gave everyone a random firearm.") logTheThing(LOG_DIARY, usr, "gave everyone a random firearm.", "admin") @@ -3525,11 +3500,11 @@ var/global/noir = 0 usr.client.cmd_view_runtimes() - if ("viewantaghistory") - if (src.level < LEVEL_SA) - return tgui_alert(usr,"You must be at least a Secondary Admin to view antag history.") + // if ("viewantaghistory") + // if (src.level < LEVEL_SA) + // return tgui_alert(usr,"You must be at least a Secondary Admin to view antag history.") - usr.client.cmd_antag_history(href_list["targetckey"]) + // usr.client.cmd_antag_history(href_list["targetckey"]) if ("show_player_stats") if (src.level < LEVEL_SA) @@ -3887,7 +3862,7 @@ var/global/noir = 0 ircmsg["msg"] = "manually restarted the server." ircbot.export_async("admin", ircmsg) - round_end_data(2) //Wire: export_async round end packet (manual restart) + roundManagement.recordEnd(crashed = TRUE) sleep(3 SECONDS) Reboot_server() @@ -4204,26 +4179,23 @@ var/global/noir = 0 return /datum/admins/proc/show_chatbans(var/client/C)//do not use this as an example of how to write DM please. - if( !C.cloud_available() ) - tgui_alert( "Failed to communicate to Goonhub." ) - return var/built = {"<title>Chat Bans (todo: prettify)</title>"} - if(C.cloud_get( "adminhelp_banner" )) - built += "<a href='?src=\ref[src];target=\ref[C];action=ah_unmute' class='alert'>Adminhelp Mute</a> (Last by [C.cloud_get( "adminhelp_banner" )])<br/>" + if(C.player.cloudSaves.getData( "adminhelp_banner" )) + built += "<a href='?src=\ref[src];target=\ref[C];action=ah_unmute' class='alert'>Adminhelp Mute</a> (Last by [C.player.cloudSaves.getData( "adminhelp_banner" )])<br/>" logTheThing(LOG_ADMIN, src, "unmuted [constructTarget(C,"admin")] from adminhelping.") else built += "<a href='?src=\ref[src];target=\ref[C];action=ah_mute'>Adminhelp Mute</a><br/>" logTheThing(LOG_ADMIN, src, "muted [constructTarget(C,"admin")] from adminhelping.") - if(C.cloud_get( "mentorhelp_banner" )) - built += "<a href='?src=\ref[src];target=\ref[C];action=mh_unmute' class='alert'>Mentorhelp Mute</a> (Last by [C.cloud_get( "mentorhelp_banner" )])<br/>" + if(C.player.cloudSaves.getData( "mentorhelp_banner" )) + built += "<a href='?src=\ref[src];target=\ref[C];action=mh_unmute' class='alert'>Mentorhelp Mute</a> (Last by [C.player.cloudSaves.getData( "mentorhelp_banner" )])<br/>" logTheThing(LOG_ADMIN, src, "unmuted [constructTarget(C,"admin")] from mentorhelping.") else built += "<a href='?src=\ref[src];target=\ref[C];action=mh_mute'>Mentorhelp Mute</a><br/>" logTheThing(LOG_ADMIN, src, "muted [constructTarget(C,"admin")] from mentorhelping.") - if(C.cloud_get( "prayer_banner" )) - built += "<a href='?src=\ref[src];target=\ref[C];action=pr_unmute' class='alert'>Prayer Mute</a> (Last by [C.cloud_get( "prayer_banner" )])<br/>" + if(C.player.cloudSaves.getData( "prayer_banner" )) + built += "<a href='?src=\ref[src];target=\ref[C];action=pr_unmute' class='alert'>Prayer Mute</a> (Last by [C.player.cloudSaves.getData( "prayer_banner" )])<br/>" logTheThing(LOG_ADMIN, src, "unmuted [constructTarget(C,"admin")] from praying.") else built += "<a href='?src=\ref[src];target=\ref[C];action=pr_mute'>Prayer Mute</a><br/>" diff --git a/code/modules/admin/admin_holder.dm b/code/modules/admin/admin_holder.dm index 74bb5b7fdfa76..40ea69448a116 100644 --- a/code/modules/admin/admin_holder.dm +++ b/code/modules/admin/admin_holder.dm @@ -44,20 +44,20 @@ var/datum/centcomviewer/centcomviewer = null var/datum/bioeffectmanager/bioeffectmanager = null var/datum/abilitymanager/abilitymanager = null + var/datum/ban_panel/ban_panel = null var/datum/antagonist_panel/antagonist_panel = null var/list/hidden_categories = null var/mob/respawn_as_self_mob = null - New() + New(client/C) ..() + src.owner = C src.hidden_categories = list() SPAWN(1 DECI SECOND) - if (src.owner) - var/client/C = src.owner - C.chatOutput.getContextFlag() - src.load_admin_prefs() + src.owner.chatOutput.getContextFlag() + src.load_admin_prefs() if (!admin_interact_atom_verbs || length(admin_interact_atom_verbs) <= 0) admin_interact_atom_verbs = list(\ @@ -170,16 +170,15 @@ user.Browse(HTML.Join(),"window=aprefs;size=385x540") proc/load_admin_prefs() - if (!src.owner) - return var/list/AP - if (!owner.player.clouddata) - owner.player.cloud_fetch() - var/json_data = src.owner.player.cloud_get("admin_preferences") + if (!owner.player.cloudSaves.loaded) + owner.player.cloudSaves.fetch() + + var/json_data = owner.player.cloudSaves.getData("admin_preferences") if (json_data) AP = json_decode(json_data) else - boutput(src.owner, SPAN_NOTICE("ERROR: Admin prefence data is null. You either have no saved prefs or cloud is unreachable.")) + boutput(src.owner, SPAN_NOTICE("ERROR: Admin preference data is null. You either have no saved prefs or cloud is unreachable.")) return var/saved_servertoggles_toggle = AP["servertoggles_toggle"] @@ -320,10 +319,10 @@ proc/save_admin_prefs() if (!src.owner) return - var/list/data = owner.player.cloud_get("admin_preferences") + var/data = owner.player.cloudSaves.getData("admin_preferences") var/list/auto_aliases = list() if (data) // decoding null will runtime - data = json_decode(owner.player.cloud_get("admin_preferences")) + data = json_decode(data) auto_aliases = data["auto_aliases"] if (auto_alias_global_save) @@ -360,7 +359,7 @@ for(var/cat in toggleable_admin_verb_categories) AP["hidden_[cat]"] = (cat in src.hidden_categories) - if (!owner.player.cloud_put("admin_preferences", json_encode(AP))) + if (!owner.player.cloudSaves.putData("admin_preferences", json_encode(AP))) tgui_alert(src.owner, "ERROR: Unable to reach cloud.") else boutput(src.owner, SPAN_NOTICE("Admin preferences saved.")) diff --git a/code/modules/admin/admin_verbs.dm b/code/modules/admin/admin_verbs.dm index f342f82642f42..99b101a81b524 100644 --- a/code/modules/admin/admin_verbs.dm +++ b/code/modules/admin/admin_verbs.dm @@ -154,7 +154,8 @@ var/list/admin_verbs = list( /client/proc/main_loop_tick_detail, /client/proc/display_bomb_monitor, //Ban verbs - /client/proc/openBanPanel, + /client/proc/ban_panel, + /client/proc/addBanTemp, /client/proc/banooc, /client/proc/view_cid_list, /client/proc/modify_parts, @@ -172,7 +173,8 @@ var/list/admin_verbs = list( /client/proc/toggle_flourish, /client/proc/cmd_view_runtimes, - /client/proc/cmd_antag_history, + /client/proc/cmd_aggressive_debugging, + // /client/proc/cmd_antag_history, /client/proc/cmd_admin_show_player_stats, /client/proc/cmd_admin_show_player_ips, /client/proc/cmd_admin_show_player_compids, @@ -382,6 +384,8 @@ var/list/admin_verbs = list( /client/proc/cmd_caviewer, /client/proc/cmd_custom_spawn_event, /client/proc/cmd_special_shuttle, + /client/proc/toggle_all_artifacts, + /client/proc/spawn_tons_of_artifacts, /client/proc/toggle_radio_maptext, /datum/admins/proc/toggleaprilfools, @@ -477,6 +481,7 @@ var/list/admin_verbs = list( /client/proc/upload_uncool_words, /client/proc/TestMarketReq, /verb/adminDumpBlueprint, + /client/proc/debug_event_recorder, /client/proc/delete_profiling_logs, /client/proc/cause_lag, @@ -760,6 +765,17 @@ var/list/special_pa_observing_verbs = list( if (src.holder.level >= LEVEL_SA) global.player_panel.ui_interact(src.mob) +/client/proc/ban_panel() + set name = "Ban Panel" + SET_ADMIN_CAT(ADMIN_CAT_PLAYERS) + if (!src.holder || src.holder?.tempmin) + logTheThing(LOG_ADMIN, src, "tried to access the ban panel") + logTheThing(LOG_DIARY, src, "tried to access the ban panel", "admin") + message_admins("[key_name(src)] tried to access the ban panel but was denied.") + if (isnull(src.holder.ban_panel)) + src.holder.ban_panel = new + src.holder.ban_panel.ui_interact(src.mob) + /client/proc/jobbans(key as text) set name = "Jobban Panel" SET_ADMIN_CAT(ADMIN_CAT_PLAYERS) @@ -911,14 +927,15 @@ var/list/special_pa_observing_verbs = list( M.client.warned = 1 message_admins(SPAN_INTERNAL("[src.ckey] warned [M.ckey].")) else - var/addData[] = new() - addData["ckey"] = M.ckey - addData["compID"] = M.computer_id - addData["ip"] = M.client.address - addData["reason"] = "Autobanning due to previous warn. This is what we in the biz like to call a \"second warning\"." - addData["akey"] = src.ckey - addData["mins"] = 10 - addBan(addData) + bansHandler.add( + src.ckey, + null, + M.ckey, + M.computer_id, + M.client.address, + "Autobanning due to previous warn. This is what we in the biz like to call a \"second warning\".", + 10 MINUTES + ) /client/proc/clear_area_overlays() set name = "Clear Area Overlays" @@ -1563,7 +1580,7 @@ var/list/fun_images = list() trigger = (C.holder ? "[src.key] (as [src.fakekey])" : src.fakekey) var/vol = C.getVolume(VOLUME_CHANNEL_ADMIN) if (vol) - C.chatOutput.playDectalk(audio["audio"], trigger, vol) + C.chatOutput.playDectalk(audio["audio"], trigger, vol * 0.75) return 1 else if (audio && audio["cooldown"]) alert(src, "There is a [nextDectalkDelay] second global cooldown between uses of this verb. Please wait [((world.timeofday + nextDectalkDelay * 10) - world.timeofday)/10] seconds.") @@ -1808,7 +1825,7 @@ var/list/fun_images = list() return alert("The map is already on [map] you dunce!") try - mapSwitcher.setNextMap(src.key, mapName = map) + mapSwitcher.setNextMap(src.ckey, mapName = map) catch (var/exception/e) logTheThing(LOG_DEBUG, null, "<b>Map Switcher:</b> [e.name]") return alert("Oh no! Something went wrong with the map switcher. Details have been logged to the debug category.") @@ -1906,70 +1923,70 @@ var/list/fun_images = list() logTheThing(LOG_DIARY, usr ? usr : src, null, "cancelled the player map vote prematurely", "admin") message_admins("[key_name(usr ? usr : src)] cancelled the player map vote prematurely. Rude.") -/client/proc/cmd_antag_history(var/ckey as text) - SET_ADMIN_CAT(ADMIN_CAT_PLAYERS) - set name = "View Antag History" - set desc = "View the antag history for a given player" - set popup_menu = 0 - ADMIN_ONLY - - if (!ckey) - return - - var/list/history - try - history = antagWeighter.completeHistory(ckey) - catch(var/exception/e) - return alert(e.name) - - var/html = "<table>" - html += "<thead><tr>" - html += "<th>Mode</th>" - html += "<th>Played</th>" - html += "<th>Antag</th>" - html += "<th>Chosen</th>" - html += "<th>Target</th>" - html += "</tr></thead>" - - for (var/role in config.play_antag_rates) - var/list/data - - if (role in history) - data = history[role] - else - //some round types are so rare, we might have no data for this player playing them, so we make shit up - data = list( - "seen" = 0, - "selected" = 0, - "percent" = 0 - ) - - var/seen = round(text2num(data["seen"])) - var/selected = round(text2num(data["selected"])) - var/chosen = round(text2num(data["percent"])) - var/target = config.play_antag_rates[role] - - var/chosenClass = "fine" - //if the player has been chosen more than 50% over the target, show red - if (chosen > target * 1.5) - chosenClass = "danger" - //or, if it's just over the target, show orange - else if (chosen > target) - chosenClass = "warning" - - html += "<tr>" - html += "<td>[capitalize(role)]</td>" - html += "<td>[seen]</td>" - html += "<td>[selected]</td>" - html += "<td class='[chosenClass]'>[chosen]%</td>" - html += "<td>[target]%</td>" - html += "</tr>" - - html += "</table>" - - var/antagHistoryHtml = grabResource("html/antagHistory.html") - antagHistoryHtml = replacetext(antagHistoryHtml, "<!-- HTML GOES HERE -->", html) - src.Browse(antagHistoryHtml, "window=antaghistory[ckey];title=[capitalize(ckey)]+Antag+History;") +// /client/proc/cmd_antag_history(var/ckey as text) +// SET_ADMIN_CAT(ADMIN_CAT_PLAYERS) +// set name = "View Antag History" +// set desc = "View the antag history for a given player" +// set popup_menu = 0 +// ADMIN_ONLY + +// if (!ckey) +// return + +// var/list/history +// try +// history = antagWeighter.completeHistory(ckey) +// catch(var/exception/e) +// return alert(e.name) + +// var/html = "<table>" +// html += "<thead><tr>" +// html += "<th>Mode</th>" +// html += "<th>Played</th>" +// html += "<th>Antag</th>" +// html += "<th>Chosen</th>" +// html += "<th>Target</th>" +// html += "</tr></thead>" + +// for (var/role in config.play_antag_rates) +// var/list/data + +// if (role in history) +// data = history[role] +// else +// //some round types are so rare, we might have no data for this player playing them, so we make shit up +// data = list( +// "seen" = 0, +// "selected" = 0, +// "percent" = 0 +// ) + +// var/seen = round(text2num(data["seen"])) +// var/selected = round(text2num(data["selected"])) +// var/chosen = round(text2num(data["percent"])) +// var/target = config.play_antag_rates[role] + +// var/chosenClass = "fine" +// //if the player has been chosen more than 50% over the target, show red +// if (chosen > target * 1.5) +// chosenClass = "danger" +// //or, if it's just over the target, show orange +// else if (chosen > target) +// chosenClass = "warning" + +// html += "<tr>" +// html += "<td>[capitalize(role)]</td>" +// html += "<td>[seen]</td>" +// html += "<td>[selected]</td>" +// html += "<td class='[chosenClass]'>[chosen]%</td>" +// html += "<td>[target]%</td>" +// html += "</tr>" + +// html += "</table>" + +// var/antagHistoryHtml = grabResource("html/antagHistory.html") +// antagHistoryHtml = replacetext(antagHistoryHtml, "<!-- HTML GOES HERE -->", html) +// src.Browse(antagHistoryHtml, "window=antaghistory[ckey];title=[capitalize(ckey)]+Antag+History;") /client/proc/cmd_dispatch_observe_to_ghosts(var/atom/movable/target) @@ -2336,15 +2353,19 @@ var/list/fun_images = list() DENY_TEMPMIN vpnckey = ckey(vpnckey) try - apiHandler.queryAPI("vpncheck-whitelist/add", list("ckey" = vpnckey, "akey" = src.ckey)) - catch(var/exception/e) - message_admins("Error while adding ckey [vpnckey] to the VPN whitelist: [e.name]") - return 0 + var/datum/apiRoute/vpnwhitelist/add/addWhitelist = new + addWhitelist.buildBody(src.ckey, vpnckey) + apiHandler.queryAPI(addWhitelist) + catch (var/exception/e) + var/datum/apiModel/Error/error = e.name + message_admins("Error while adding ckey [vpnckey] to the VPN whitelist: [error.message]") + return FALSE + global.vpn_ip_checks?.Cut() // to allow them to reconnect this round message_admins("Ckey [vpnckey] added to the VPN whitelist by [src.key].") logTheThing(LOG_ADMIN, src, "Ckey [vpnckey] added to the VPN whitelist.") addPlayerNote(vpnckey, src.ckey, "Ckey [vpnckey] added to the VPN whitelist.") - return 1 + return TRUE /client/proc/vpn_whitelist_remove(vpnckey as text) set name = "VPN whitelist remove" @@ -2353,13 +2374,17 @@ var/list/fun_images = list() DENY_TEMPMIN vpnckey = ckey(vpnckey) try - apiHandler.queryAPI("vpncheck-whitelist/remove", list("ckey" = vpnckey, "akey" = src.ckey)) - catch(var/exception/e) - message_admins("Error while removing ckey [vpnckey] from the VPN whitelist: [e.name]") - return 0 + var/datum/apiRoute/vpnwhitelist/delete/deleteWhitelist = new + deleteWhitelist.queryParams = list("ckey" = vpnckey) + apiHandler.queryAPI(deleteWhitelist) + catch (var/exception/e) + var/datum/apiModel/Error/error = e.name + message_admins("Error while removing ckey [vpnckey] from the VPN whitelist: [error.message]") + return FALSE + message_admins("Ckey [vpnckey] removed from the VPN whitelist by [src.key].") logTheThing(LOG_ADMIN, src, "Ckey [vpnckey] removed from the VPN whitelist.") - return 1 + return TRUE /client/proc/cmd_lightsout() SET_ADMIN_CAT(ADMIN_CAT_FUN) diff --git a/code/modules/admin/adminhelp.dm b/code/modules/admin/adminhelp.dm index 211facb7b9ccc..33bbfa29c950a 100644 --- a/code/modules/admin/adminhelp.dm +++ b/code/modules/admin/adminhelp.dm @@ -11,7 +11,7 @@ gib(client.mob) return - if (client.cloud_available() && client.cloud_get("adminhelp_banner")) + if (client.player.cloudSaves.getData("adminhelp_banner")) boutput(client.mob, "You have been banned from using this command.") return @@ -80,88 +80,6 @@ return msg -/mob/verb/mentorhelp() - set category = "Commands" - set name = "mentorhelp" - - var/client/client = src.client - - if (IsGuestKey(client.key)) - boutput(client.mob, "You are not authorized to communicate over these channels.") - gib(client.mob) - return - - var/mob/dead/target_observer/mentor_mouse_observer/mmouse = locate() in src - if(mmouse) // mouse in your pocket takes precedence over mhelps - var/msg = input("Please enter your whispers to the mouse:") as null|text - msg = copytext(strip_html(msg), 1, MAX_MESSAGE_LEN * 4) - if (!msg) - return - var/class = mmouse.is_admin ? "adminooc" : "mhelp" - boutput(mmouse, "<span class='[class]'><b>[client.mob]</b> whispers: \"<i>[msg]</i>\"</span>") - boutput(client.mob, "<span class='[class]'>You whisper to \the [mmouse]: \"<i>[msg]</i>\"</span>") - for (var/client/C) - if (C.holder) - if (C.player_mode || C == client || C == mmouse.client) - continue - else - var/rendered = "<span class='[class]'><b>[mmouse.is_admin ? "A" : "M"]MOUSEWHISPER: [key_name(client.mob,0,0,1)]<span class='name text-normal' data-ctx='\ref[src.mind]'>[(client.mob.real_name ? "/"+client.mob.real_name : "")]</span> <A HREF='?src=\ref[C.holder];action=adminplayeropts;targetckey=[client.ckey]' class='popt'><i class='icon-info-sign'></i></A></b>: [SPAN_MESSAGE("[msg]")]</span>" - boutput(C, "<span class='adminHearing' data-ctx='[C.chatOutput.ctxFlag]'>[rendered]</span>") - logTheThing(LOG_DIARY, client.mob, "([mmouse.is_admin ? "A" : "M"]MOUSEWHISPER): [msg]", "say") - return - - if (client.cloud_available() && client.cloud_get("mentorhelp_banner")) - boutput(client.mob, "You have been banned from using this command.") - return - - if(ON_COOLDOWN(client.player, "ahelp", ADMINHELP_DELAY)) - boutput(src, "You must wait [time_to_text(ON_COOLDOWN(src, "ahelp", 0))].") - return - - var/msg = input("Enter your help request to mentors.\nMentorhelps are sent to mentors via Discord.\n\nPlease use Adminhelp (F1) for rules questions.", "mentorhelp") as null|message - - msg = copytext(strip_html(msg, strip_newlines=FALSE), 1, MAX_MESSAGE_LEN * 4) - if (client.can_see_mentor_pms()) - msg = linkify(msg) - - if (!msg) - return - - if (client?.ismuted()) - return - - var/dead = isdead(client.mob) ? "Dead " : "" - var/ircmsg[] = new() - ircmsg["key"] = client.key - ircmsg["name"] = client.mob.job ? "[stripTextMacros(client.mob.real_name)] \[[dead][client.mob.job]]" : (dead ? "[stripTextMacros(client.mob.real_name)] \[[dead]\]" : stripTextMacros(client.mob.real_name)) - ircmsg["msg"] = html_decode(msg) - var/unique_message_id = md5("mhelp" + json_encode(ircmsg)) - ircmsg["msgid"] = unique_message_id - ircbot.export_async("mentorhelp", ircmsg) - - var/src_keyname = key_name(client.mob, 0, 0, 1, additional_url_data="&msgid=[unique_message_id]") - - for (var/client/C) - if (C.holder) - if (C.player_mode && !C.player_mode_mhelp) - continue - else - var/rendered = SPAN_MHELP("<b>MENTORHELP: [src_keyname]<span class='name text-normal' data-ctx='\ref[src.mind]'>[(client.mob.real_name ? "/"+client.mob.real_name : "")]</span> <A HREF='?src=\ref[C.holder];action=adminplayeropts;targetckey=[client.ckey]' class='popt'><i class='icon-info-sign'></i></A></b>: [SPAN_MESSAGE("[msg]")]") - boutput(C, "<span class='adminHearing' data-ctx='[C.chatOutput.ctxFlag]'>[rendered]</span>") - else if (C?.can_see_mentor_pms()) - if(istype(C.mob, /mob/dead/observer) || C.mob.type == /mob/dead/target_observer || C.mob.type == /mob/dead/target_observer/mentor_mouse_observer || istype(C.mob, /mob/living/critter/small_animal/mouse/weak/mentor)) - var/rendered = SPAN_MHELP("<b>MENTORHELP: [src_keyname]<span class='name text-normal' data-ctx='\ref[src.mind]'>[(client.mob.real_name ? "/"+client.mob.real_name : "")]</span></b>: [SPAN_MESSAGE("[msg]")]") - boutput(C, "<span class='adminHearing' data-ctx='[C.chatOutput.ctxFlag]'>[rendered]</span>") - else - boutput(C, SPAN_MHELP("<b>MENTORHELP: [src_keyname]</b>: [SPAN_MESSAGE("[msg]")]")) - - boutput(client.mob, SPAN_MHELP("<b>MENTORHELP: You</b>: [msg]")) - logTheThing(LOG_MHELP, client.mob, "MENTORHELP: [msg]") - logTheThing(LOG_DIARY, client.mob, "MENTORHELP: [msg]", "mhelp") -#ifdef DATALOGGER - game_stats.Increment("mentorhelps") -#endif - /mob/verb/pray(msg as text) set category = "Commands" set name = "pray" @@ -174,7 +92,7 @@ if(client.ismuted()) boutput(client.mob, "You are muted and cannot pray.") return - if(client.cloud_available() && client.cloud_get( "prayer_banner" )) + if(client.player.cloudSaves.getData( "prayer_banner" )) boutput(client.mob, "You have been banned from using this command.") return diff --git a/code/modules/admin/ban_panel.dm b/code/modules/admin/ban_panel.dm new file mode 100644 index 0000000000000..4fb779e1647d4 --- /dev/null +++ b/code/modules/admin/ban_panel.dm @@ -0,0 +1,143 @@ +#define BAN_PANEL_TAB_BAN_LIST "ban_list" +#define BAN_PANEL_TAB_JOB_BAN_LIST "job_ban_list" + +#define BAN_PANEL_ACTION_SEARCH "ban_search" +#define BAN_PANEL_ACTION_PAGE_PREV "page_prev" +#define BAN_PANEL_ACTION_PAGE_NEXT "page_next" +#define BAN_PANEL_ACTION_SET_PER_PAGE "set_perpage" +#define BAN_PANEL_ACTION_SET_TAB "set_tab" +#define BAN_PANEL_ACTION_DELETE_BAN "delete_ban" +#define BAN_PANEL_ACTION_EDIT_BAN "edit_ban" + +/// Admin Ban Panel +/datum/ban_panel + var/datum/apiModel/Paginated/BanResourceList/banResourceList = null + var/current_tab = BAN_PANEL_TAB_BAN_LIST + var/current_page = 1 + var/per_page = 30 + +/datum/ban_panel/New() + . = ..() + src.banResourceList = bansHandler.getAll() + +/datum/ban_panel/ui_state(mob/user) + return tgui_admin_state.can_use_topic(src, user) + +/datum/ban_panel/ui_status(mob/user) + return tgui_admin_state.can_use_topic(src, user) + +/datum/ban_panel/ui_interact(mob/user, datum/tgui/ui) + ui = tgui_process.try_update_ui(user, src, ui) + if (!ui) + ui = new(user, src, "BanPanel") + ui.open() + +/datum/ban_panel/ui_data(mob/user) + . = ..() + .["current_tab"] = src.current_tab + switch (src.current_tab) + if (BAN_PANEL_TAB_BAN_LIST) + .["ban_list"] = list( + "search_response" = src.banResourceList?.ToList() + ) + .["per_page"] = src.per_page + +/datum/ban_panel/ui_static_data(mob/user) + . = ..() + +/datum/ban_panel/ui_act(action, params) + . = ..() + if (.) + return + + if (!usr.client) return + + switch (action) + if (BAN_PANEL_ACTION_SEARCH) + var/search_text = params["searchText"] + var/search_filter = params["searchFilter"] + src.current_page = 1 + if (isnull(search_text) || is_blank_string(search_text)) + src.refresh_bans() + else + src.refresh_bans(filters = list( + "[search_filter]" = search_text + )) + . = TRUE + + if (BAN_PANEL_ACTION_PAGE_PREV) + var/prev_page = max(1, (src.banResourceList?.meta["current_page"] || 1) - 1) + src.current_page = prev_page + src.refresh_bans() + . = TRUE + + if (BAN_PANEL_ACTION_PAGE_NEXT) + var/next_page = min(src.banResourceList?.meta["last_page"] || 1, (src.banResourceList?.meta["current_page"] || 1) + 1) + src.current_page = next_page + src.refresh_bans() + . = TRUE + + if(BAN_PANEL_ACTION_SET_PER_PAGE) + src.per_page = params["amount"] + src.refresh_bans() + . = TRUE + + if (BAN_PANEL_ACTION_SET_TAB) + src.current_tab = params["value"] + . = TRUE + + if (BAN_PANEL_ACTION_EDIT_BAN) + // var/ban_id = params["id"] + // TODO: edit ban + . = TRUE + + if (BAN_PANEL_ACTION_DELETE_BAN) + // TODO: not shit + . = TRUE + var/ban_id = params["id"] + src.removeBan(ban_id) + + +/// Remove a ban, given an id +/datum/ban_panel/proc/removeBan(ban_id) + var/datum/apiModel/Tracked/BanResource/the_ban = null + for (var/datum/apiModel/Tracked/BanResource/ban in src.banResourceList.data) + if (num2text(ban.id) == ban_id) + the_ban = ban + break + if (!the_ban) + tgui_alert(usr, "Ban couldn't be found! ID: [ban_id]", "Ban Panel Error") + return + var/ckey = the_ban.original_ban_detail["ckey"] + var/cid = the_ban.original_ban_detail["comp_id"] + var/ip = the_ban.original_ban_detail["ip"] + var/alert_body = {" + Are you sure you want to delete ban [ban_id]? + ckey: [ckey || "none"] + CID: [cid || "none"] + IP: [ip || "none"] + "} + var/alert_input = tgui_alert(usr, alert_body, "Delete Ban", list("Yes", "No")) + if (alert_input == "Yes") + bansHandler.remove(ban_id, usr.client.ckey, ckey, cid, ip) + +/// Wrapper for /datum/bansHandler/proc/getAll +/datum/ban_panel/proc/refresh_bans(list/filters, sort_by, descending) + src.banResourceList = bansHandler.getAll( + filters = filters, + sort_by = sort_by, + descending = descending, + page = src.current_page, + per_page = src.per_page, + ) + +#undef BAN_PANEL_TAB_BAN_LIST +#undef BAN_PANEL_TAB_JOB_BAN_LIST + +#undef BAN_PANEL_ACTION_SEARCH +#undef BAN_PANEL_ACTION_PAGE_PREV +#undef BAN_PANEL_ACTION_PAGE_NEXT +#undef BAN_PANEL_ACTION_SET_PER_PAGE +#undef BAN_PANEL_ACTION_SET_TAB +#undef BAN_PANEL_ACTION_DELETE_BAN +#undef BAN_PANEL_ACTION_EDIT_BAN diff --git a/code/modules/admin/bans.dm b/code/modules/admin/bans.dm index 770a0345c5bc7..47488d6c181d3 100644 --- a/code/modules/admin/bans.dm +++ b/code/modules/admin/bans.dm @@ -1,902 +1,347 @@ -///////////////////////// -// BASE BAN PROCS -// Most of these have two steps (instead of double the procs) -// First step sends the initial query to the bans web API -// Second step handles the response -///////////////////////// - - -//Returns the expiry timestamp in a human readable format -/proc/getExpiry(minutes) - var/CMinutes = (world.realtime / 10) / 60 - if(istext(minutes)) - minutes = text2num(minutes) - var/exp = minutes - CMinutes - if (exp <= 0) - return 0 - else - if (exp >= ((24 HOURS) / (1 MINUTE))) // 1 day in minutes - exp = round(exp / 1440, 0.1) - . = "[exp] Day[exp > 1 ? "s" : ""]" - else if (exp >= ((1 HOUR) / (1 MINUTE))) // 1 hour in minutes - exp = round(exp / 60, 0.1) - . = "[exp] Hour[exp > 1 ? "s" : ""]" +/var/global/datum/bansHandler/bansHandler = new + +/datum/bansHandler + /// Convert duration to something useful for Humans + proc/getDurationHuman(seconds) + var/exp = seconds / 60 + if (exp <= 0) + . = 0 else - . = "[exp] Minute[exp > 1 ? "s" : ""]" - - -//A dumb thing to cache the players seen per round, so I don't end up recording dudes when they reconnect a billion times -var/global/list/playersSeen = list() -/proc/managePlayerSeen(ckey, compID, ip) - var/key = "[ckey]|[compID]|[ip]" - if (key in playersSeen) - return FALSE - else - playersSeen += key - return TRUE - - -//Are ya banned? Well!? ARE YA?! -//A return 0 is a "this guy is ok let him in" -//Anything that returns as true is a "bad dude kill his connection" -//(this doesn't use the 'step' var thing because we need the response here and now) -//"record" tells the goonhub api to make a note of these details -/proc/checkBan(ckey, compID, ip, record = 0) - set background = 1 - if (!ckey && !compID && !ip) - logTheThing(LOG_DEBUG, null, "<b>Bans Error</b>: No details passed to <b>checkBan</b>") - logTheThing(LOG_DIARY, null, "Bans Error: No details passed to checkBan", "debug") - return 0 - - if(!ip || ip == "127.0.0.1") return 0 //Ignore if localhost - - if (record) - record = managePlayerSeen(ckey, compID, ip) - - //Check if this user has a ban already - var/query[] = new() - query["ckey"] = ckey - query["compID"] = compID - query["ip"] = ip - query["record"] = record - #ifdef RP_MODE - query["rp_mode"] = TRUE - #endif - - var/list/data - try - data = apiHandler.queryAPI("bans/check", query, 1) - catch () - //API is dead, let the person in without checking - return 0 - - //If the server returned nothing, a "no bans found" record, or a "this dude is exception'd" - //Then they are good to go - if (!data || data["none"] || data["exception"]) - return 0 - if (data["error"]) //Error returned from the API welp - logTheThing(LOG_DEBUG, null, "<b>Bans Error</b>: Error returned in <b>checkBan</b> for <b>[ckey]</b>: [data["error"]]") - logTheThing(LOG_DIARY, null, "Bans Error: Error returned in checkBan for [ckey]: [data["error"]]", "debug") - return 0 - - //We only care about the latest match for this (so far) - var/list/row = data[data[1]] - - var/timestamp = text2num(row["timestamp"]) - - var/expired = timestamp > 0 && !getExpiry(timestamp) - - //Are any of the details...different? This is to catch out ban evading jerks who change their ckey but forget to mask their IP or whatever - var/timeAdded = 0 - if (!expired && (row["ckey"] != ckey || (row["ip"] != ip && row["ip"] != "N/A") || (row["compID"] != compID && row["compID"] != "N/A"))) //Insert a new ban for this JERK - var/newChain = 0 - if (text2num(row["previous"]) > 0) //if we matched a previous auto-added ban - if (text2num(row["chain"]) > 0) - newChain = text2num(row["chain"]) + 1 - else //no multiplier present, default to x2 (this should never occur) - newChain = 2 - else //didn't match a previous evasion ban, start off with x1 - newChain = 1 - - timeAdded = (row["ckey"] != ckey && newChain > 1 ? 1 : 0) //only add time if a ckey didnt match, and it's a second evasion - var/CMinutes = (world.realtime / 10) / 60 - var/remaining = (timestamp > 0 ? timestamp - CMinutes : timestamp) - var/addData[] = new() - addData["ckey"] = ckey - addData["compID"] = (row["compID"] == "N/A" ? "N/A" : compID) // don't record CID if the original ban doesn't have one down - addData["ip"] = (row["ip"] == "N/A" ? "N/A" : ip) // don't record ip if the original ban doesn't have one down - addData["reason"] = row["reason"] - addData["oakey"] = row["oakey"] - addData["akey"] = "Auto Banner" - addData["mins"] = remaining - addData["previous"] = text2num(row["id"]) - addData["chain"] = newChain - if (row["server"]) - addData["server"] = row["server"] - addData["addTime"] = timeAdded - var/rVal = addBan(addData) - if (rVal) - logTheThing(LOG_DEBUG, null, "<b>Bans Error</b>: Add ban in checkBan failed with message <b>[rVal]</b>") - logTheThing(LOG_DIARY, null, "Bans Error: Add ban in checkBan failed with message [rVal]", "debug") - - var/oakey = (row["oakey"] == "N/A" ? row["akey"] : row["oakey"]) - if (timestamp > 0) //Temp ban found, determine if it should expire or not - if (expired) //It expired! Go you! - var/deleteData[] = new() - deleteData["id"] = row["id"] - deleteData["ckey"] = row["ckey"] - deleteData["compID"] = row["compID"] - deleteData["ip"] = row["ip"] - deleteData["akey"] = "Auto Unbanner" - var/rVal = deleteBan(deleteData) - if (rVal) - logTheThing(LOG_DEBUG, null, "<b>Bans Error</b>: Delete temp ban in checkBan failed with message <b>[rVal]</b>") - logTheThing(LOG_DIARY, null, "Bans Error: Delete temp ban in checkBan failed with message [rVal]", "debug") - return 0 - else //Temp ban still in effect. DENIED - var/details = "[row["reason"]]<br>" - details += "Banned By: [oakey]<br>" - details += "This ban applies to [row["server"] ? "this server only" : "all servers"].<br>" - details += "(This ban will be automatically removed in [getExpiry(timestamp)].)" - details += "[timeAdded ? "<br>(5 days have been automatically added to your ban for attempted ban evasion)" : ""]" - return details - else //Permaban found, the player is DENIED - var/details = "[row["reason"]]<br>" - details += "Banned By: [oakey]<br>" - details += "This ban applies to [row["server"] ? "this server only" : "all servers"].<br>" - if(timestamp == 0) - details += "This is a permanent ban, you can't appeal this ban until 30 days have passed." - else if(timestamp == -1) - details += "Please make an <a href='https://forum.ss13.co/forumdisplay.php?fid=54'>appeal on the forums</a> to have it lifted." - return details - -/proc/addBan(data) - set background = 1 - - if (data["data_hub_callback"]) - if (data["error"]) - return data["error"] - //we can get away with just this because addBan only ever returns the details we passed in to begin with - var/list/row = data["ban"] - - var/client/adminC - var/client/targetC - for (var/client/C in clients) //grab clients if possible - if (C.ckey == row["akey"]) - adminC = C - if (C.ckey == row["ckey"]) - targetC = C - - row["reason"] = html_decode(row["reason"]) - var/chain = text2num(row["chain"]) - if (chain > 0) //Prepend our evasion attempt info for: the user, admins, notes (everything except the actual ban reason in the db) - row["reason"] = "\[Evasion Attempt x[row["chain"]]\] Previous Reason: [row["reason"]]" - - var/replacement_text - if (targetC) - targetC.mob.unlock_medal("Banned", FALSE) - boutput(targetC, SPAN_ALERT("<BIG><B>You have been banned by [row["akey"]].<br>Reason: [row["reason"]]</B></BIG>")) - boutput(targetC, SPAN_ALERT("To try to resolve this matter head to https://forum.ss13.co")) - else - replacement_text = "[row["ckey"]] (IP: [row["ip"]], CompID: [row["compID"]])" - - if (!adminC) - adminC = (row["akey"] ? row["akey"] : "N/A") - - var/expiry = getExpiry(row["timestamp"]) - var/serverLogSnippet = row["server"] ? "from [row["server"]]" : "from all servers" - - var/duration = expiry == 0 ? (data["text_ban_length"] || (text2num(row["timestamp"]) == 0 ? "Permanent" : "Until Appeal")) : expiry - - if (text2num(row["timestamp"]) <= 0) - if (targetC) - if(duration == "Permanent") - boutput(targetC, SPAN_ALERT("You have received a permanent ban, you can't appeal this ban until 30 days have passed.")) - else if(duration == "Until Appeal") - boutput(targetC, SPAN_ALERT("You have received a ban. Make an <a href='https://forum.ss13.co/forumdisplay.php?fid=54'>appeal on the forums</a> to have it lifted.")) - else - boutput(targetC, SPAN_ALERT("You have received a ban. Duration: [duration]")) - logTheThing(LOG_ADMIN, adminC, "has banned [targetC ? "[constructTarget(targetC,"admin")]" : replacement_text] [serverLogSnippet]. duration: [duration] Reason: [row["reason"]].") - logTheThing(LOG_DIARY, adminC, "has banned [targetC ? "[constructTarget(targetC,"diary")]" : replacement_text] [serverLogSnippet]. duration: [duration] Reason: [row["reason"]].", "admin") - var/adminMsg = "<span class='notice'>" - adminMsg += (isclient(adminC) ? key_name(adminC) : adminC) - adminMsg += " has banned [targetC ? targetC : replacement_text] [serverLogSnippet].<br>Reason: [row["reason"]]</span>" - message_admins(adminMsg) - else - if (targetC) boutput(targetC, SPAN_ALERT("This is a temporary ban, it will be removed in [expiry].")) - logTheThing(LOG_ADMIN, adminC, "has banned [targetC ? "[constructTarget(targetC,"admin")]" : replacement_text] [serverLogSnippet]. Reason: [row["reason"]]. This will be removed in [expiry].") - logTheThing(LOG_DIARY, adminC, "has banned [targetC ? "[constructTarget(targetC,"diary")]" : replacement_text] [serverLogSnippet]. Reason: [row["reason"]]. This will be removed in [expiry].", "admin") - var/adminMsg = "<span class='notice'>" - adminMsg += (isclient(adminC) ? key_name(adminC) : adminC) - adminMsg += " has banned [targetC ? targetC : replacement_text] [serverLogSnippet].<br>Reason: [row["reason"]]<br>This will be removed in [expiry].</span>" - message_admins(adminMsg) - - if (row["ckey"] && row["ckey"] != "N/A") - addPlayerNote(row["ckey"], row["akey"], "Banned [serverLogSnippet] by [row["akey"]], reason: [row["reason"]], duration: [duration]") - - if(!targetC) - targetC = find_player(row["ckey"])?.client - + if (exp >= ((24 HOURS) / (1 MINUTE))) // 1 day in minutes + exp = round(exp / 1440, 0.1) + . = "[exp] Day[exp > 1 ? "s" : ""]" + else if (exp >= ((1 HOUR) / (1 MINUTE))) // 1 hour in minutes + exp = round(exp / 60, 0.1) + . = "[exp] Hour[exp > 1 ? "s" : ""]" + else + . = "[exp] Minute[exp > 1 ? "s" : ""]" + + /// List all bans + proc/getAll(list/filters = list(), sort_by = "id", descending = TRUE, page = "1", per_page = 30) + var/datum/apiRoute/bans/get/getBans = new + getBans.queryParams = list( + "filters" = filters, + "sort_by" = sort_by, + "descending" = descending, + "page" = page, + "per_page" = per_page + ) + var/datum/apiModel/Paginated/BanResourceList/bans + try + bans = apiHandler.queryAPI(getBans) + catch (var/exception/e) + var/datum/apiModel/Error/error = e.name + throw EXCEPTION(error.message) + + return bans + + /// Add a ban + proc/add(admin_ckey, server_id, ckey, comp_id, ip, reason, duration = FALSE, requires_appeal = FALSE) + duration = duration ? duration / 10 : duration // duration given in deciseconds, api expects seconds + var/datum/apiRoute/bans/add/addBan = new + addBan.buildBody( + admin_ckey, + roundId, + server_id, + ckey, + comp_id, + ip, + reason, + duration, + requires_appeal + ) + try + apiHandler.queryAPI(addBan) + catch (var/exception/e) + var/datum/apiModel/Error/error = e.name + throw EXCEPTION(error.message) + + // We do this instead of requiring an admin client argument because bans can be added multiple ways, e.g. from discord + var/client/adminClient = find_client(admin_ckey) + var/client/targetClient = find_client(ckey) + + var/durationHuman = duration ? src.getDurationHuman(duration) : "permanent" + var/adminKey = adminClient ? adminClient.key : admin_ckey + var/serverLogSnippet = server_id ? "from [server_id]" : "from all servers" + var/replacementText = "[ckey] (IP: [ip], CompID: [comp_id])" + + // Tell admins + var/logMsg = "has banned [targetClient ? "[constructTarget(targetClient,"admin")]" : replacementText] [serverLogSnippet]. Duration: [durationHuman] Reason: [reason]." + logTheThing(LOG_ADMIN, adminClient ? adminClient : adminKey, logMsg) + logTheThing(LOG_DIARY, adminClient ? adminClient : adminKey, logMsg, "admin") + var/adminMsg = "<span class='notice'>" + adminMsg += adminClient ? key_name(adminClient) : adminKey + adminMsg += " has banned [targetClient ? targetClient : replacementText] [serverLogSnippet].<br>Reason: [reason]<br>Duration: [durationHuman].</span>" + message_admins(adminMsg) + + // Tell discord var/ircmsg[] = new() - ircmsg["key"] = row["akey"] - ircmsg["key2"] = "[row["ckey"]] (IP: [row["ip"]], CompID: [row["compID"]])" - ircmsg["msg"] = row["reason"] - if (chain > 0) //if we're auto-banning them - //fuck it, we get the player directly, surely this can't fail - var/datum/player/player = make_player(row["ckey"]) - if (!player) - logTheThing(LOG_DEBUG, null, "Unable to find player for auto-banner rounds participated logging, ckey: [row["ckey"]]") - ircmsg["msg"] += "\n\nRounds participated: [player?.get_rounds_participated()]" - ircmsg["time"] = expiry - ircmsg["timestamp"] = row["timestamp"] + ircmsg["key"] = adminKey + ircmsg["key2"] = "[ckey] (IP: [ip], CompID: [comp_id])" + ircmsg["msg"] = reason + ircmsg["time"] = durationHuman + ircmsg["timestamp"] = ((world.realtime / 10) / 60) + (duration / 60) // duration is in seconds, bot expects minutes ircbot.export_async("ban", ircmsg) - if (targetC) - del(targetC) + if (targetClient) + targetClient.mob.unlock_medal("Banned", FALSE) + boutput(targetClient, "<span class='alert'><BIG><B>You have been banned by [adminKey].<br>Reason: [reason]</B></BIG></span>") + boutput(targetClient, "<span class='alert'>To try to resolve this matter head to https://forum.ss13.co</span>") + if (duration) + boutput(targetClient, "<span class='alert'>You have received a ban. Duration: [durationHuman]</span>") + else + if (requires_appeal) + boutput(targetClient, "<span class='alert'>You have received a ban. Make an <a href='https://forum.ss13.co/forumdisplay.php?fid=54'>appeal on the forums</a> to have it lifted.</span>") + else + boutput(targetClient, "<span class='alert'>You have received a permanent ban, you can't appeal this ban until 30 days have passed.</span>") + + del(targetClient) else - logTheThing(LOG_DEBUG, null, "<b>Bans:</b> Unable to find client with ckey '[row["ckey"]]' during banning.") - - targetC = find_player(row["ckey"])?.client - if (targetC) - logTheThing(LOG_DEBUG, null, "<b>Bans:</b> Client with ckey '[row["ckey"]]' somehow survived banning, retrying kick.") - del(targetC) - - return 0 - - else - var/banTimestamp = data["mins"] - if (data["mins"] > 0) //If a temp ban, calculate expiry - var/CMinutes = (world.realtime / 10) / 60 - banTimestamp = (data["previous"] && data["addTime"] ? CMinutes + data["mins"] + 7200 : CMinutes + data["mins"]) //Add 5 days (7200 mins) onto the ban if it's an evasion attempt - - var/query[] = new() - query["ckey"] = (data["ckey"] ? data["ckey"] : "N/A") - query["compID"] = (data["compID"] ? data["compID"] : "N/A") - query["ip"] = (data["ip"] ? data["ip"] : "N/A") - query["reason"] = data["reason"] - query["oakey"] = (data["oakey"] && data["oakey"] != "N/A" ? data["oakey"] : data["akey"]) - query["akey"] = data["akey"] - query["timestamp"] = banTimestamp - query["previous"] = (data["previous"] ? data["previous"] : 0) - query["chain"] = (data["chain"] ? data["chain"] : 0) - if (data["server"]) - query["server"] = data["server"] - data = apiHandler.queryAPI("bans/add", query) - - -//Starts the dialog for banning a dude -/client/proc/genericBanDialog(target) - if (src.holder?.level >= LEVEL_SA) - var/mob/M - var/mobRef = 0 - if (target && ismob(target)) - mobRef = 1 - M = target - - if (mobRef) - if (M.client && M.client.holder && (M.client.holder.level >= src.holder.level)) - alert("You can't ban another admin you huge jerk!!!!!") - return null - - var/data[] = new() - - if (!mobRef) - data["ckey"] = ckey(input(src, "Ckey, leave blank to skip", "Ban") as null|text) - var/auto_fill - if (data["ckey"]) - auto_fill = alert("Attempt to autofill IP and compID with most recent?","Autofill?","Yes","No") - if (auto_fill == "Yes") - var/list/response + logTheThing(LOG_DEBUG, "Bans: unable to find client to kick for banned ckey [ckey]") + + /// Check if a ban exists + proc/check(ckey, comp_id, ip) + if (!ip || ip == "127.0.0.1") return FALSE // Ignore if localhost + + var/datum/apiRoute/bans/check/checkBan = new + checkBan.queryParams = list( + "ckey" = ckey, + "comp_id" = comp_id, + "ip" = ip, + "server_id" = config.server_id + ) + var/datum/apiModel/Tracked/BanResource/ban + try + ban = apiHandler.queryAPI(checkBan) + catch + return FALSE + + // If we haven't recorded any of the player's connection details, this counts as an evasion + var/recordedCkey = FALSE + var/recordedCompId = FALSE + var/recordedIp = FALSE + for (var/datum/apiModel/Tracked/BanDetail/banDetail in ban.details) + if (!ckey || banDetail.ckey == ckey) recordedCkey = TRUE + if (!comp_id || banDetail.comp_id == comp_id) recordedCompId = TRUE + if (!ip || banDetail.ip == ip) recordedIp = TRUE + + // var/evasionAttempt = FALSE + if (!recordedCkey || !recordedCompId || !recordedIp) + // evasionAttempt = TRUE + SPAWN(0) try - response = apiHandler.queryAPI("playerInfo/get", list("ckey" = data["ckey"]), forceResponse = 1) - catch () - boutput(src, SPAN_ALERT("Failed to query API, try again later.")) - return - if (text2num(response["seen"]) < 1) - boutput(src, SPAN_ALERT("No data found for target, IP and/or compID will be left blank.")) - data["ip"] = response["last_ip"] - data["compID"] = response["last_compID"] - else - data["compID"] = input(src, "Computer ID", "Ban") as null|text - data["ip"] = input(src, "IP Address", "Ban") as null|text + // Add these details to the existing ban + src.addDetails(ban.id, TRUE, "bot", ckey, comp_id, ip) + catch (var/exception/e) + var/logMsg = "Failed to add ban evasion details to ban [ban.id] because: [e.name]" + logTheThing(LOG_ADMIN, "bot", logMsg) + logTheThing(LOG_DIARY, "bot", logMsg, "admin") + + // Build a message to show to the player + var/message = "[ban.reason]<br>" + message += "Banned By: [ban.game_admin["ckey"]]<br>" + message += "This ban applies to [ban.server_id ? "this server only" : "all servers"].<br>" + if (ban.expires_at) + message += "(This ban will be automatically removed in [ban.duration_human])" else - data["ckey"] = M.ckey - data["compID"] = M.computer_id - data["ip"] = M.lastKnownIP - - if (!data["ckey"] && !data["ip"] && !data["compID"]) - boutput(src, SPAN_ALERT("You need to input a ckey or IP or computer ID, all cannot be blank.")) - return null - - boutput(src, SPAN_ALERT("<b>You are currently banning the following player:</b>")) - boutput(src, "<b>Mob:</b> [mobRef ? M.name : "N/A"]") - boutput(src, "<b>Key:</b> [data["ckey"] ? data["ckey"] : "N/A"] (IP: [data["ip"] ? data["ip"] : "N/A"], CompID: [data["compID"] ? data["compID"] : "N/A"])") - boutput(src, SPAN_ALERT("<b>Make sure this is who you want to ban before continuing!</b>")) - - var/reason = input(src,"Reason for ban?","Ban") as null|text - if(!reason) - boutput(src, SPAN_ALERT("You need to enter a reason for the ban.")) - return - data["reason"] = reason - - var/datum/game_server/game_server = global.game_servers.input_server(src, "What server does the ban apply to?", "Ban", can_pick_all=TRUE) - if(isnull(game_server)) - return null - data["server"] = istype(game_server) ? game_server.id : null // null = all servers - - var/ban_time = input(src,"How long will the ban be?","Ban") as null|anything in \ - list("Half-hour","One Hour","Six Hours","One Day","Half a Week","One Week","Two Weeks","One Month","Until Appeal","Permanent","Custom") - var/mins = 0 - switch(ban_time) - if("Half-hour") - mins = 30 - if("One Hour") - mins = 60 - if("Six Hours") - mins = 360 - if("One Day") - mins = 1440 - if("Half a Week") - mins = 5040 - if("One Week") - mins = 10080 - if("Two Weeks") - mins = 20160 - if("One Month") - mins = 43200 - if("Until Appeal") - mins = -1 - if("Permanent") - mins = 0 + if (ban.requires_appeal) + message += "Please make an <a href='https://forum.ss13.co/forumdisplay.php?fid=54'>appeal on the forums</a> to have it lifted." else - var/cust_mins = input(src,"How many minutes? (1440 = one day)","BAN HE",1440) as null|num - if(!cust_mins) - boutput(src, SPAN_ALERT("No time entered, cancelling ban.")) - return null - if(cust_mins >= 525600) - boutput(src, SPAN_ALERT("Ban time too long. Ban shortened to one year (525599 minutes).")) - mins = 525599 - else - mins = cust_mins - data["mins"] = mins - data["text_ban_length"] = ban_time - data["akey"] = src.ckey - return data - else - alert("You need to be at least a Secondary Administrator to ban players.") - return null - - -/client/proc/addBanDialog(target) - var/data[] = genericBanDialog(target) - if(data) - addBan(data) - - -//Admin verb to add bans -/client/proc/cmd_admin_addban () - SET_ADMIN_CAT(ADMIN_CAT_UNUSED) - set name = "Add Ban" - set popup_menu = 0 - - addBanDialog() - return - - -/proc/editBan(data) - set background = 1 - - if (data["data_hub_callback"]) - if (data["error"]) - return data["error"] - //we can get away with just this because editBan only ever acts on one ban (obviously) - var/list/row = data["ban"] - - var/client/adminC - for (var/client/C in clients) //grab us a good ol' admin client - if (C.ckey == row["akey"]) - adminC = C - break - - if (!adminC) - adminC = (row["akey"] ? row["akey"] : "N/A") - - var/target = "[row["ckey"]] (IP: [row["ip"]], CompID: [row["compID"]])" - var/expiry = getExpiry(text2num(row["timestamp"])) - - var/serverLogSnippet = row["server"] ? "Server: [row["server"]]" : "Server: all" - - var/duration = expiry == 0 ? data["text_ban_length"] : expiry - - logTheThing(LOG_ADMIN, adminC, "edited [constructTarget(target,"admin")]'s ban. Reason: [row["reason"]] Duration: [duration] [serverLogSnippet]") - logTheThing(LOG_DIARY, adminC, "edited [constructTarget(target,"diary")]'s ban. Reason: [row["reason"]] Duration: [duration] [serverLogSnippet]", "admin") - message_admins(SPAN_INTERNAL("[key_name(adminC)] edited [target]'s ban. Reason: [row["reason"]] Duration: [duration] [serverLogSnippet]")) - + message += "This is a permanent ban, you can't appeal this ban until 30 days have passed." + + return list( + "ban" = ban, + "message" = message + ) + + /// Update an existing ban + proc/update(banId, admin_ckey, server_id, ckey, comp_id, ip, reason, duration, requires_appeal) + duration = duration ? duration / 10 : duration // duration given in deciseconds, api expects seconds + var/datum/apiRoute/bans/update/updateBan = new + updateBan.routeParams = list("[banId]") + updateBan.buildBody( + admin_ckey, + roundId, + server_id, + ckey, + comp_id, + ip, + reason, + duration, + requires_appeal + ) + var/datum/apiModel/Tracked/BanResource/ban + try + ban = apiHandler.queryAPI(updateBan) + catch (var/exception/e) + var/datum/apiModel/Error/error = e.name + throw EXCEPTION(error.message) + + var/originalBanDetail = ban.original_ban_detail + var/client/adminClient = find_client(admin_ckey) + var/target = "[originalBanDetail["ckey"]] (IP: [originalBanDetail["ip"]], CompID: [originalBanDetail["comp_id"]])" + var/durationHuman = duration ? src.getDurationHuman(duration) : "permanent" + var/serverLogSnippet = ban.server_id ? "Server: [ban.server_id]" : "Server: all" + + // Tell admins + var/logMsg = "edited [constructTarget(target,"admin")]'s ban. Reason: [ban.reason] Duration: [durationHuman] [serverLogSnippet]" + logTheThing(LOG_ADMIN, adminClient ? adminClient : admin_ckey, logMsg) + logTheThing(LOG_DIARY, adminClient ? adminClient : admin_ckey, logMsg, "admin") + message_admins("<span class='internal'>[key_name(adminClient ? adminClient : admin_ckey)] edited [target]'s ban. Reason: [ban.reason] Duration: [durationHuman] [serverLogSnippet]</span>") + + // Tell Discord var/ircmsg[] = new() - ircmsg["key"] = (isclient(adminC) && adminC.key ? adminC.key : adminC) - ircmsg["name"] = (isclient(adminC) && adminC.mob && adminC.mob.name ? stripTextMacros(adminC.mob.name) : "N/A") - ircmsg["msg"] = "edited [target]'s ban. Reason: [row["reason"]]. Duration: [duration]. [serverLogSnippet]." + ircmsg["key"] = adminClient ? adminClient.key : admin_ckey + ircmsg["name"] = (adminClient && adminClient.mob && adminClient.mob.name ? stripTextMacros(adminClient.mob.name) : "N/A") + ircmsg["msg"] = "edited [target]'s ban. Reason: [ban.reason]. Duration: [durationHuman]. [serverLogSnippet]." ircbot.export_async("admin", ircmsg) - return 0 - - else - var/banTimestamp = data["mins"] - if (data["mins"] > 0) //If a temp ban, calculate expiry - var/CMinutes = (world.realtime / 10) / 60 - banTimestamp = (data["previous"] ? CMinutes + data["mins"] + 7200 : CMinutes + data["mins"]) //Add 5 days (7200 mins) onto the ban if it's an evasion attempt - - var/query[] = new() - query["id"] = data["id"] - query["ckey"] = (data["ckey"] ? data["ckey"] : "N/A") - query["compID"] = (data["compID"] ? data["compID"] : "N/A") - query["ip"] = (data["ip"] ? data["ip"] : "N/A") - query["reason"] = data["reason"] - query["akey"] = data["akey"] - query["timestamp"] = banTimestamp - if (data["server"]) - query["server"] = data["server"] - data = apiHandler.queryAPI("bans/edit", query) - - -/client/proc/editBanDialog(id, ckey, compID, ip, oreason, otimestamp) - if (src.holder?.level >= LEVEL_SA) - var/CMinutes = (world.realtime / 10) / 60 - var/remaining = (text2num(otimestamp) - CMinutes) - if(!remaining || remaining < 0) remaining = 0 - - var/data[] = new() - data["ckey"] = input(src, "Ckey (lowercase, only alphanumeric, no spaces)", "Ban", ckey) as null|text - data["compID"] = input(src, "Computer ID (leave blank to skip)", "Ban", compID) as null|text - data["ip"] = input(src, "IP Address", "Ban", ip) as null|text - - if (!data["ckey"] && !data["ip"] && !data["compID"]) - boutput(src, SPAN_ALERT("You need to input a ckey or a compID or an IP, all cannot be blank.")) - return - - var/reason = input(src,"Reason for ban?","Ban", oreason) as null|text - if(!reason) - boutput(src, SPAN_ALERT("You need to enter a reason for the ban.")) - return - data["reason"] = reason - - var/datum/game_server/game_server = global.game_servers.input_server(src, "What server does the ban apply to?", "Ban", can_pick_all=TRUE) - if(isnull(game_server)) - return - data["server"] = istype(game_server) ? game_server.id : null // null = all servers - - var/ban_time = input(src,"How long will the ban be? (select Custom to alter existing duration)","Ban") as null|anything in \ - list("Half-hour","One Hour","Six Hours","One Day","Half a Week","One Week","One Month","Until Appeal","Permanent","Custom") - var/mins = 0 - switch(ban_time) - if("Half-hour") - mins = 30 - if("One Hour") - mins = 60 - if("Six Hours") - mins = 360 - if("One Day") - mins = 1440 - if("Half a Week") - mins = 5040 - if("One Week") - mins = 10080 - if("One Month") - mins = 43200 - if("Until Appeal") - mins = -1 - if("Permanent") - mins = 0 - else - var/cust_mins = input(src,"How many minutes? (1440 = one day)","BAN HE",remaining ? remaining : 1440) as null|num - if(!cust_mins) - boutput(src, SPAN_ALERT("No time entered, cancelling ban.")) - return - if(cust_mins >= 525600) - boutput(src, SPAN_ALERT("Ban time too long. Ban shortened to one year (525599 minutes).")) - mins = 525599 - else - mins = cust_mins - - data["id"] = id - data["reason"] = reason - data["mins"] = mins - data["text_ban_length"] = ban_time - data["akey"] = src.ckey - editBan(data) - - src.holder.banPanel() - else - alert("You need to be at least a Secondary Administrator to ban players.") - return 1 - - -/proc/deleteBan(data) - set background = 1 - - if (data["data_hub_callback"]) - if (data["error"]) - return data["error"] - //we can get away with just this because deleteBan only ever acts on one ban (obviously) - var/list/row = data["ban"] - - var/client/adminC - for (var/client/C in clients) - if (C.ckey == row["akey"]) - adminC = C - break - - if (!adminC) - adminC = (row["akey"] ? row["akey"] : "N/A") - - var/target = "[row["ckey"]] (IP: [row["ip"]], CompID: [row["compID"]])" - var/expired = (row["akey"] == "Auto Unbanner" ? 1 : 0) - - if (expired) - logTheThing(LOG_ADMIN, null, "[row["ckey"]]'s ban expired.") - logTheThing(LOG_DIARY, null, "[row["ckey"]]'s ban expired.", "admin") - message_admins(SPAN_INTERNAL("Ban expired for [target]")) - else - logTheThing(LOG_ADMIN, adminC, "unbanned [row["ckey"]]") - logTheThing(LOG_DIARY, adminC, "unbanned [row["ckey"]]", "admin") - message_admins(SPAN_INTERNAL("[key_name(adminC)] unbanned [target]")) - + /// Remove a ban + proc/remove(banId, admin_ckey, ckey, comp_id, ip) + try + var/datum/apiRoute/bans/delete/deleteBan = new + deleteBan.routeParams = list("[banId]") + deleteBan.buildBody(admin_ckey) + apiHandler.queryAPI(deleteBan) + catch (var/exception/e) + var/datum/apiModel/Error/error = e.name + throw EXCEPTION(error.message) + + var/client/adminClient = find_client(admin_ckey) + var/target = "[ckey] (IP: [ip], CompID: [comp_id])" + + // Tell admins + logTheThing(LOG_ADMIN, adminClient ? adminClient : admin_ckey, "unbanned [target]") + logTheThing(LOG_DIARY, adminClient ? adminClient : admin_ckey, "unbanned [target]", "admin") + message_admins("<span class='internal'>[key_name(adminClient ? adminClient : admin_ckey)] unbanned [target]</span>") + + // Tell discord var/ircmsg[] = new() - ircmsg["key"] = (isclient(adminC) && adminC.key ? adminC.key : adminC) - ircmsg["name"] = (expired ? "\[Expired\]" : "[isclient(adminC) && adminC.mob && adminC.mob.name ? stripTextMacros(adminC.mob.name) : "N/A"]") - ircmsg["msg"] = (expired ? "[row["ckey"]]'s ban removed." : "deleted [row["ckey"]]'s ban.") + ircmsg["key"] = adminClient ? adminClient.key : admin_ckey + ircmsg["name"] = adminClient && adminClient.mob && adminClient.mob.name ? stripTextMacros(adminClient.mob.name) : "N/A" + ircmsg["msg"] = "deleted [ckey]'s ban." ircbot.export_async("admin", ircmsg) - return 0 - - else - var/query[] = new() - query["id"] = data["id"] - query["ckey"] = data["ckey"] - query["compID"] = data["compID"] - query["ip"] = data["ip"] - query["akey"] = data["akey"] - data = apiHandler.queryAPI("bans/delete", query) - - -/client/proc/deleteBanDialog(id, ckey, compID, ip, akey) - if (src.holder?.level >= LEVEL_SA) - if(alert(src, "Are you sure you want to unban [ckey]?", "Confirmation", "Yes", "No") == "Yes") - var/data[] = new() - data["id"] = id - data["ckey"] = ckey - data["compID"] = compID - data["ip"] = ip - data["akey"] = akey - deleteBan(data) - src.holder.banPanel() - else - alert("You need to be at least a Secondary Administrator to remove bans.") - -/* -/proc/addException(step = 1, data) - set background = 1 - - if (step == 1) - var/query[] = new() - query["ckey"] = data["ckey"] - query["akey"] = data["akey"] - data = apiHandler.queryAPI("bans/addException", query) - - if (step == 2 || !centralConn) - var/list/ldata = data - if (!ldata) return "No data returned from query" - if (ldata["error"]) - return ldata["error"] - //we can get away with just this because deleteBan only ever acts on one ban (obviously) - var/list/row = ldata[ldata[1]] - - var/client/adminC - for (var/client/C in clients) - if (C.ckey == row["akey"]) - adminC = C - break - - if (!adminC) - adminC = (row["akey"] ? row["akey"] : "N/A") - - var/target = "[row["ckey"]] (IP: [row["ip"]], CompID: [row["compID"]])" - var/expired = (row["akey"] == "Auto Unbanner" ? 1 : 0) - - if (expired) - logTheThing(LOG_ADMIN, null, "[row["ckey"]]'s ban expired.") - logTheThing(LOG_DIARY, null, "[row["ckey"]]'s ban expired.", "admin") - message_admins(SPAN_INTERNAL("Ban expired for [target]")) - else - logTheThing(LOG_ADMIN, adminC, "unbanned [row["ckey"]]") - logTheThing(LOG_DIARY, adminC, "unbanned [row["ckey"]]", "admin") - message_admins(SPAN_INTERNAL("[key_name(adminC)] unbanned [target]")) + /// Add details to an existing ban + proc/addDetails(banId, evasion = FALSE, admin_ckey, ckey, comp_id, ip) + var/datum/apiRoute/bans/add_detail/addDetail = new + addDetail.routeParams = list("[banId]") + addDetail.buildBody(ckey, comp_id, ip) + var/datum/apiModel/Tracked/BanDetail/banDetail + try + banDetail = apiHandler.queryAPI(addDetail) + catch (var/exception/e) + var/datum/apiModel/Error/error = e.name + throw EXCEPTION(error.message) + + var/client/adminClient = find_client(admin_ckey) + var/messageAdminsAdmin = admin_ckey == "bot" ? admin_ckey : key_name(adminClient ? adminClient : admin_ckey) + var/target = "[banDetail.ckey] (IP: [banDetail.ip], CompID: [banDetail.comp_id])" + + // Tell admins + var/msg = "added ban [evasion ? "evasion" : ""] details to ban ID [banId] [target]" + logTheThing(LOG_ADMIN, adminClient ? adminClient : admin_ckey, msg) + logTheThing(LOG_DIARY, adminClient ? adminClient : admin_ckey, msg, "admin") + message_admins("<span class='internal'>[messageAdminsAdmin] [msg]</span>") + + // Tell discord + var/ircmsg[] = new() + ircmsg["key"] = adminClient ? adminClient.key : admin_ckey + ircmsg["name"] = adminClient && adminClient.mob && adminClient.mob.name ? stripTextMacros(adminClient.mob.name) : "N/A" + ircmsg["msg"] = msg + ircbot.export_async("admin", ircmsg) + /// Remove details from an existing ban + proc/removeDetails(banDetailId, admin_ckey) + var/datum/apiRoute/bans/remove_detail/removeDetail = new + removeDetail.routeParams = list("[banDetailId]") + try + apiHandler.queryAPI(removeDetail) + catch (var/exception/e) + var/datum/apiModel/Error/error = e.name + throw EXCEPTION(error.message) + + var/client/adminClient = find_client(admin_ckey) + + // Tell admins + var/msg = "removed ban detail ID [banDetailId]" + logTheThing(LOG_ADMIN, adminClient ? adminClient : admin_ckey, msg) + logTheThing(LOG_DIARY, adminClient ? adminClient : admin_ckey, msg, "admin") + message_admins("<span class='internal'>[key_name(adminClient ? adminClient : admin_ckey)] [msg]</span>") + + // Tell discord var/ircmsg[] = new() - ircmsg["key"] = (isclient(adminC) && adminC.key ? adminC.key : adminC) - ircmsg["name"] = (expired ? "\[Expired\]" : "[isclient(adminC) && adminC.mob && adminC.mob.name ? stripTextMacros(adminC.mob.name) : "N/A"]") - ircmsg["msg"] = (expired ? "[row["ckey"]]'s ban removed." : "deleted [row["ckey"]]'s ban.") + ircmsg["key"] = adminClient ? adminClient.key : admin_ckey + ircmsg["name"] = adminClient && adminClient.mob && adminClient.mob.name ? stripTextMacros(adminClient.mob.name) : "N/A" + ircmsg["msg"] = msg ircbot.export_async("admin", ircmsg) - return 0 - - -/client/proc/addExceptionDialog() - if (src.holder && usr.level >= LEVEL_SA) - if(alert(usr, "Are you sure you want to unban [ckey]?", "Confirmation", "Yes", "No") == "Yes") - var/data[] = new() - data["id"] = id - data["ckey"] = ckey - data["compID"] = compID - data["ip"] = ip - data["akey"] = akey - deleteBan(data) - src.holder.banPanel() - else - alert("You need to be at least a Secondary Administrator to add ban exceptions.") -*/ - -///////////////////////// -// BAN PANEL PROCS (called via ejhax) -///////////////////////// - - -/datum/admins/proc/banPanel() - var/CMinutes = (world.realtime / 10) / 60 - var/bansHtml = grabResource("html/admin/banPanel.html") - var/windowName = "banPanel" - bansHtml = replacetext(bansHtml, "null /* window_name */", "'[windowName]'") - bansHtml = replacetext(bansHtml, "null /* ref_src */", "'\ref[src]'") - bansHtml = replacetext(bansHtml, "null /* cminutes */", "[CMinutes]") - bansHtml = replacetext(bansHtml, "null /* api_data_params */", "'data_server=[serverKey]&data_id=[config.server_id]&data_version=[config.goonhub_api_version]'") - if (centralConn) - bansHtml = replacetext(bansHtml, "null /* api_key */", "'[md5(config.goonhub_api_web_token)]'") - usr << browse(bansHtml,"window=[windowName];size=1080x500") - - -/client/proc/openBanPanel() - set name = "Ban Panel" + +/////////////////////////// +// Temp ban management, remove when new ban panel exists +/////////////////////////// + +/client/proc/addBanTempDialog(target) + var/mob/M + if (target && ismob(target)) M = target + + var/ckey = ckey(tgui_input_text(src.mob, "Ckey of the player", "Ckey", M ? M.ckey : "")) + if (!ckey) return + + var/datum/player/player = find_player(ckey) + var/client/targetC = player?.client + + var/defaultIp = targetC ? targetC.address : (M ? M.lastKnownIP : "") + var/ip = tgui_input_text(src.mob, "IP of the player", "IP", defaultIp, null, FALSE, null, TRUE) + var/defaultCompId = targetC ? targetC.computer_id : (M ? M.computer_id : "") + var/compId = tgui_input_text(src.mob, "Computer ID of the player", "Computer ID", defaultCompId, null, FALSE, null, TRUE) + + var/datum/game_server/game_server = global.game_servers.input_server(src.mob, "What server does the ban apply to?", "Ban", can_pick_all=TRUE) + if(isnull(game_server)) + return null + var/serverId = istype(game_server) ? game_server.id : null // null = all servers + + var/list/durations = list( + "Permanent" = "", + "Half hour" = 30 MINUTES, + "One hour" = 1 HOUR, + "Six hours" = 6 HOURS, + "One day" = 1 DAY, + "Half a week" = 3.5 DAYS, + "One week" = 1 WEEK, + "Two weeks" = 2 WEEKS, + "One month" = 30 DAYS, + "Three months" = 90 DAYS, + "Six months" = 26 WEEKS, + "One year" = 52 WEEKS + ) + var/durationName = tgui_input_list(src.mob, "How long should the ban last?", "Duration", durations) + if (isnull(durationName)) return + var/duration = durations[durationName] + if (!duration) duration = FALSE + + var/reason = tgui_input_text(src.mob, "What is the reason for this ban?", "Reason", "", null, TRUE) + if (!reason) return + + return list( + "akey" = src.ckey, + "server" = serverId, + "ckey" = ckey, + "compId" = compId, + "ip" = ip, + "reason" = reason, + "duration" = duration + ) + +/client/proc/addBanTemp() + set name = "Add Ban" + set desc = "Add a ban" SET_ADMIN_CAT(ADMIN_CAT_PLAYERS) - if (src.holder && !src.holder.tempmin) - src.holder.banPanel() - else - alert("UM, EXCUSE ME?? YOU AREN'T AN ADMIN, GET DOWN FROM THERE!") - src << sound('sound/voice/farts/poo2.ogg') - logTheThing(LOG_ADMIN, src, "tried to access the ban panel") - logTheThing(LOG_DIARY, src, "tried to access the ban panel", "admin") - message_admins("[key_name(src)] tried to access the ban panel but was denied.") - del(usr.client) - return - - -//DEBUG (gets the latest ban and prints it out) -/proc/debugBans(data) - set background = 1 - - if (islist(data) && data["data_hub_callback"]) - var/list/ban = data["ban"] - for (var/e = 1, e <= ban.len, e++) //each ban - var/id = ban[e] - var/list/details = ban[id] - boutput(world, id) - for (var/i = 1, i <= details.len, i++) //each item for this ban - boutput(world, "[details[i]]: [details[details[i]]]") - - else - apiHandler.queryAPI("bans/debug") - - -///////////////////////// -// LOCAL AND REMOTE DB SYNCHRONISATION -///////////////////////// - - -/proc/writeToBanLog(data) - if (!data) return 0 - - var/banLog = "data/banLog.log" - var/lastID = 0 - if (fexists(banLog)) - //Here we fetch the latest logID, increment it, then append our data as json - var/list/log = dd_file2list(banLog) - var/lastIndex = (length(log) > 1 ? log.len - 1 : 1) - var/lastRow = log[lastIndex] - var/list/rowDetails = splittext(lastRow, ":") - lastID = text2num(rowDetails[1]) - - var/newID = lastID + 1 - var/append = json_encode(data) - var/logFile = file(banLog) - boutput(logFile, "[newID]:[append]") - - return 1 - - -/proc/clearBanLog() - var banLog = "data/banLog.log" - if (fexists(banLog)) - fdel(banLog) - - return 1 - - -/proc/forceUpdateLocalBans(latestLocalID, latestRemoteID) - //Construct the log IDs we need from the remote - var/needBans = "" - for (var/id = latestLocalID + 1, id <= latestRemoteID, id++) - needBans += "[id]," - - needBans = copytext(needBans, 1, -1) //Remove the trailing comma - - //Ask the remote for them - var/query[] = new() - query["ids"] = needBans - var/data[] = apiHandler.queryAPI("bans/updateLocal", query, 1) - if (!data) return 0 - - if (data["error"]) //Error returned from the API welp - logTheThing(LOG_DEBUG, null, "<b>Bans Error</b>: Error returned in <b>forceUpdateLocalBans</b>: [data["error"]]") - logTheThing(LOG_DIARY, null, "Bans Error: Error returned in forceUpdateLocalBans: [data["error"]]", "debug") - return 0 - - logTheThing(LOG_DEBUG, null, "UPDATE LOCAL DEBUG: data: [list2params(data)]") - - //Loop through the bans we were given - for (var/row in data) - var/logID = row - if (!row) break - logTheThing(LOG_DEBUG, null, "UPDATE LOCAL DEBUG: logID: [logID]") - var/list/details = json_decode(row[logID]) - logTheThing(LOG_DEBUG, null, "UPDATE LOCAL DEBUG: details: [list2params(details)]") - var/type = details["type"] - details.Remove(details["type"]) - - //Decide what to do with it - var/returnData[] = new() - if (type == "add") - returnData = addBanApiFallback(details) - if (type == "edit") - returnData = editBanApiFallback(details) - if (type == "delete") - returnData = deleteBanApiFallback(details) - - if (returnData["error"]) //Error returned from the local db jeeeeez aint nothing going our way - logTheThing(LOG_DEBUG, null, "<b>Local API Error</b> - Callback failed in <b>[type]BanApiFallback</b> with message: <b>[returnData["error"]]</b>") - logTheThing(LOG_DIARY, null, "<b>Local API Error</b> - Callback failed in [type]BanApiFallback with message: [returnData["error"]]", "debug") - if (returnData["showAdmins"]) - message_admins(SPAN_INTERNAL("<b>Failed for route [type]BanApiFallback</b>: [returnData["error"]]")) - - return 0 - - /* - for (var/e = 1, e <= data.len, e++) //each ban - var/logID = data[e] - logTheThing(LOG_DEBUG, null, "UPDATE LOCAL DEBUG: logID: [logID]") - var/list/details = json_decode(data[logID]) - logTheThing(LOG_DEBUG, null, "UPDATE LOCAL DEBUG: details: [list2params(details)]") - var/type = details["type"] - details.Remove(details["type"]) - - //Decide what to do with it - var/returnData[] = new() - if (type == "add") - returnData = addBanApiFallback(details) - if (type == "edit") - returnData = editBanApiFallback(details) - if (type == "delete") - returnData = deleteBanApiFallback(details) - - if (returnData["error"]) //Error returned from the local db jeeeeez aint nothing going our way - logTheThing(LOG_DEBUG, null, "<b>Local API Error</b> - Callback failed in <b>[type]BanApiFallback</b> with message: <b>[returnData["error"]]</b>") - logTheThing(LOG_DIARY, null, "<b>Local API Error</b> - Callback failed in [type]BanApiFallback with message: [returnData["error"]]", "debug") - if (returnData["showAdmins"]) - message_admins(SPAN_INTERNAL("<b>Failed for route [type]BanApiFallback</b>: [returnData[")error"]]") - - return 0 - */ - - return 1 - - -/proc/forceUpdateRemoteBans(latestLocalID, latestRemoteID) - logTheThing(LOG_DEBUG, null, "UPDATE REMOTE DEBUG: latestLocalID: [latestLocalID]") - logTheThing(LOG_DEBUG, null, "UPDATE REMOTE DEBUG: latestRemoteID: [latestRemoteID]") - //Construct the log IDs the remote is missing - var/sendBans[] = new() - for (var/id = latestRemoteID + 1, id <= latestLocalID, id++) - sendBans.Add(id) - - logTheThing(LOG_DEBUG, null, "UPDATE REMOTE DEBUG: sendBans: [list2params(sendBans)]") - - var/list/log = dd_file2list("data/banLog.log") - - //Get the data for those log IDs - var/parsedLog[] = new() - for (var/i = 1, i <= log.len, i++) - var/row = log[i] - logTheThing(LOG_DEBUG, null, "UPDATE REMOTE DEBUG: row: [row]") - var/list/rowDetails = splittext(row, ":") - logTheThing(LOG_DEBUG, null, "UPDATE REMOTE DEBUG: rowDetails: [list2params(rowDetails)]") - var/logID = rowDetails[1] - logID = text2num(logID) - logTheThing(LOG_DEBUG, null, "UPDATE REMOTE DEBUG: logID: [logID]") - if (logID in sendBans) - var/lengthToCut = length(logID)+3 //+1 for the colon, +2 for copytext being a shitass - var/details = copytext(row, lengthToCut) - logTheThing(LOG_DEBUG, null, "UPDATE REMOTE DEBUG: details: [details]") - parsedLog["[logID]"] = details - - logTheThing(LOG_DEBUG, null, "UPDATE REMOTE DEBUG: parsedLog: [json_encode(parsedLog)]") - - //Send it to the remote so it can update - var/query[] = new() - query["bans"] = json_encode(parsedLog) - apiHandler.queryAPI("bans/updateRemote", query) - - return 1 - - -//Universal proc for checking if both the local ban db and the remote are synced -/proc/bansParityCheck() - //Ok we should probably make sure this shit doesn't run on local servers - //yes we are checking filesize of the ban db here. it is a nice independent way of doing it - if (!centralConn || !fexists("data/localBans.db") || length(file("data/localBans.db")) < 102400) - return 0 - - //Get the latest logID from the local ban log - var/banLog = "data/banLog.log" - var/banLogF = file(banLog) - var/latestLocalID = 0 - - //Only operate on the log if it...exists and has stuff, naturally - if (fexists(banLog) && length(file2text(banLogF)) > 0) - var/list/log = dd_file2list(banLog) - var/lastIndex = (length(log) > 1 ? log.len - 1 : 1) - var/lastRow = log[lastIndex] - log = splittext(lastRow, ":") - latestLocalID = log[1] - - //Get the latest logID from the API - var/query[] = new() - query["latestLocalID"] = latestLocalID - var/data[] = apiHandler.queryAPI("bans/parity", query, 1) - if (!data) return 0 - - var/list/row = data[data[1]] - if (!row["logID"]) - return "ERROR: logID is not present from remote, cannot compare parity." - var/latestRemoteID = row["logID"] - - //Just making sure - latestLocalID = text2num(latestLocalID) - latestRemoteID = text2num(latestRemoteID) - - //Local bans are out of date - if (latestLocalID < latestRemoteID) - if (forceUpdateLocalBans(latestLocalID, latestRemoteID)) - clearBanLog() //we're synced! clean up - return "Updated local bans to match central server" - return - - //Remote bans are out of date - if (latestRemoteID < latestLocalID) - if (forceUpdateRemoteBans(latestLocalID, latestRemoteID)) - clearBanLog() //we're synced! clean up - return "Updated remote bans to match cached local changes" - return - - //Nothing is out of date supposedly possibly maybe?? - clearBanLog() //we're synced! clean up - return "Both databases are up to date. Yay!" - - -/proc/debugToggleCentralConn() - if (centralConn) - centralConn = 0 - centralConnTries = 5 - return "Set centralConn OFF" - else - centralConn = 1 - centralConnTries = 0 - return "Set centralConn ON" + var/list/data = src.addBanTempDialog() + if (!data) return + + try + bansHandler.add(data["akey"], data["server"], data["ckey"], data["compId"], data["ip"], data["reason"], data["duration"]) + catch (var/exception/e) + tgui_alert(src.mob, "Failed to add ban because: [e.name]", "Error") diff --git a/code/modules/admin/banshark.dm b/code/modules/admin/banshark.dm index 4291b23ac1c9a..182cd084ee751 100644 --- a/code/modules/admin/banshark.dm +++ b/code/modules/admin/banshark.dm @@ -9,7 +9,7 @@ boutput(src, "Only administrators may use this command.") return else - var/data[] = genericBanDialog(sharktarget) + var/data[] = src.addBanTempDialog(sharktarget) if(data) var/speed = input(usr,"How fast is the shark? Lower is faster.","speed","5") as num if(!speed) @@ -125,8 +125,16 @@ else boutput(sharktarget2, SPAN_ALERT("<BIG><B>You can escape the banshark, but not the ban!</B></BIG>")) logTheThing(LOG_ADMIN, caller:client, "has evaded the shark by ceasing to exist! Banning them anyway.") - message_admins(SPAN_INTERNAL("data["ckey"] has evaded the shark by ceasing to exist! Banning them anyway.")) - addBan(data) + message_admins(SPAN_INTERNAL("[data["ckey"]] has evaded the shark by ceasing to exist! Banning them anyway.")) + bansHandler.add( + data["akey"], + data["server"], + data["ckey"], + data["compId"], + data["ip"], + data["reason"], + data["duration"] + ) playsound(src.loc, pick('sound/voice/burp_alien.ogg'), 50, 0) qdel(src) diff --git a/code/modules/admin/buildmodes/adventure/elements/trap/foam.dm b/code/modules/admin/buildmodes/adventure/elements/trap/foam.dm index 67f47b4076fd0..d86223188fb06 100644 --- a/code/modules/admin/buildmodes/adventure/elements/trap/foam.dm +++ b/code/modules/admin/buildmodes/adventure/elements/trap/foam.dm @@ -24,8 +24,8 @@ /obj/adventurepuzzle/triggerable/foamtrap name = "foam trap" invisibility = INVIS_ADVENTURE - icon = 'icons/obj/chemical.dmi' - icon_state = "beakerlarge" + icon = 'icons/obj/items/chemistry_glassware.dmi' + icon_state = "large_beaker" density = 0 opacity = 0 anchored = ANCHORED diff --git a/code/modules/admin/buildmodes/adventure/elements/trap/smoke.dm b/code/modules/admin/buildmodes/adventure/elements/trap/smoke.dm index 760ed71851604..8f2a626e15ac1 100644 --- a/code/modules/admin/buildmodes/adventure/elements/trap/smoke.dm +++ b/code/modules/admin/buildmodes/adventure/elements/trap/smoke.dm @@ -21,8 +21,8 @@ /obj/adventurepuzzle/triggerable/smoketrap name = "smoke trap" invisibility = INVIS_ADVENTURE - icon = 'icons/obj/chemical.dmi' - icon_state = "beakerlarge" + icon = 'icons/obj/items/chemistry_glassware.dmi' + icon_state = "large_beaker" density = 0 opacity = 0 anchored = ANCHORED diff --git a/code/modules/admin/custom_spawn_event.dm b/code/modules/admin/custom_spawn_event.dm index fd88ea0e8865c..f032365381cf4 100644 --- a/code/modules/admin/custom_spawn_event.dm +++ b/code/modules/admin/custom_spawn_event.dm @@ -107,6 +107,8 @@ if (src.antag_role == "generic_antagonist") mind.add_generic_antagonist("generic_antagonist", new_mob.real_name, do_equip = src.equip_antag, do_objectives = FALSE, do_relocate = FALSE, source = ANTAGONIST_SOURCE_ADMIN, respect_mutual_exclusives = FALSE) else if (src.antag_role) + if (mind.get_antagonist(src.antag_role)) + mind.remove_antagonist(src.antag_role, ANTAGONIST_REMOVAL_SOURCE_OVERRIDE) mind.add_antagonist(src.antag_role, do_relocate = FALSE, do_objectives = FALSE, source = ANTAGONIST_SOURCE_ADMIN, do_equip = src.equip_antag, respect_mutual_exclusives = FALSE) else mind.wipe_antagonists() @@ -134,6 +136,8 @@ var/spawn_type = "" if (ismob(src.spawn_event.thing_to_spawn)) spawn_type = "mob_ref" + else if (src.spawn_event.thing_to_spawn == /mob/living/carbon/human/normal) //special case for a useful shortcut + spawn_type = "random_human" else if (ispath(src.spawn_event.thing_to_spawn, /mob)) spawn_type = "mob_type" else if (istext(src.spawn_event.thing_to_spawn)) @@ -195,6 +199,8 @@ for (var/datum/job/job in (job_controls.staple_jobs + job_controls.special_jobs + job_controls.hidden_jobs)) job_names |= job.name src.spawn_event.thing_to_spawn = tgui_input_list(ui.user, "Select job type", "Select type", job_names) || src.spawn_event.thing_to_spawn + if ("set_random_human") + src.spawn_event.thing_to_spawn = /mob/living/carbon/human/normal if ("select_turf") src.spawn_event.spawn_loc = get_turf(pick_ref(ui.user)) if ("select_landmark") @@ -227,8 +233,8 @@ src.spawn_event.allow_dnr = params["allow_dnr"] if ("spawn") //no accidental double clicks if (!ON_COOLDOWN(ui.user, "custom_spawn_event", 1 SECOND)) - message_admins("[key_name(ui.user)] initiated a custom spawn event of [src.spawn_event.amount_to_spawn] [src.spawn_event.get_mob_name()]") - logTheThing(LOG_ADMIN, ui.user, "initiated a custom spawn event of [src.spawn_event.amount_to_spawn] [src.spawn_event.get_mob_name()]") + message_admins("[key_name(ui.user)] initiated a custom spawn event of [src.spawn_event.amount_to_spawn] [src.spawn_event.get_mob_name()] [src.spawn_event.antag_role]") + logTheThing(LOG_ADMIN, ui.user, "initiated a custom spawn event of [src.spawn_event.amount_to_spawn] [src.spawn_event.get_mob_name()] [src.spawn_event.antag_role]") src.spawn_event.do_spawn() if ("refresh_player_count") src.refresh_player_count = TRUE diff --git a/code/modules/admin/drunkmode.dm b/code/modules/admin/drunkmode.dm index b74eb714e8470..d4b504a878086 100644 --- a/code/modules/admin/drunkmode.dm +++ b/code/modules/admin/drunkmode.dm @@ -10,8 +10,7 @@ var/list/dangerousVerbs = list(\ //No banning for you /client/proc/warn,\ -/client/proc/openBanPanel,\ -/client/proc/cmd_admin_addban,\ +/client/proc/ban_panel,\ /client/proc/banooc,\ /client/proc/sharkban,\ diff --git a/code/modules/admin/gibverbs.dm b/code/modules/admin/gibverbs.dm index a85ec2387b8fa..33ed7a7fc740b 100644 --- a/code/modules/admin/gibverbs.dm +++ b/code/modules/admin/gibverbs.dm @@ -461,14 +461,15 @@ boutput(tysontarget2, "Here is where you'd get banned.") qdel(src) return - var/addData[] = new() - addData["ckey"] = tysontarget2.ckey - addData["compID"] = tysontarget2.computer_id - addData["ip"] = tysontarget2.client.address - addData["reason"] = tysonreason - addData["akey"] = caller:ckey - addData["mins"] = tysonmins2 - addBan(addData) + bansHandler.add( + caller:ckey, + null, + tysontarget2.ckey, + tysontarget2.computer_id, + tysontarget2.client.address, + tysonreason, + tysonmins2 * 60 * 10 + ) boutput(tysontarget2, SPAN_ALERT("<BIG><B>You have been tysoned by [usr.client.ckey].<br>Reason: [tysonreason] and he couldn't escape the tyson.</B></BIG>")) boutput(tysontarget2, SPAN_ALERT("This is a temporary tysonban, it will be removed in [tysonmins2] minutes.")) logTheThing(LOG_ADMIN, caller:client, "has tysonbanned [constructTarget(tysontarget2,"admin")]. Reason: [tysonreason] and he couldn't escape the tyson. This will be removed in [tysonmins2] minutes.") diff --git a/code/modules/admin/jobban.dm b/code/modules/admin/jobban.dm index 96289efe5b3b2..705277dba9466 100644 --- a/code/modules/admin/jobban.dm +++ b/code/modules/admin/jobban.dm @@ -1,5 +1,16 @@ //Job Ban Handling, Modified to utilize code written within the past 6 years. +/proc/jobban_get_for_player(ckey, server) + if (!ckey) return list() + try + var/datum/apiRoute/jobbans/getforplayer/getJobBansForPlayer = new + getJobBansForPlayer.queryParams = list("ckey" = ckey, "server_id" = server) + var/datum/apiModel/JobBansForPlayer/jobBansForPlayer = apiHandler.queryAPI(getJobBansForPlayer) + return jobBansForPlayer.jobs + catch + return list() + + /proc/jobban_fullban(M, rank, akey) if (!M || !akey) return if(ismob(M)) //Correct to ckey if provided a mob. @@ -9,17 +20,25 @@ if(isnull(game_server)) return null var/server_id = istype(game_server) ? game_server.id : null // null = all servers - if(apiHandler.queryAPI("jobbans/add", list("ckey"=M,"rank"=rank, "akey"=akey, "applicable_server"=server_id))) + + try + var/datum/apiRoute/jobbans/add/addJobBan = new + addJobBan.buildBody(akey, roundId, server_id, M, rank) + apiHandler.queryAPI(addJobBan) + var/datum/player/player = make_player(M) //Recache the player. - player?.cached_jobbans = apiHandler.queryAPI("jobbans/get/player", list("ckey"=M), 1)[M] + player?.cached_jobbans = jobban_get_for_player(M, server_id) + var/ircmsg[] = new() ircmsg["key"] = M ircmsg["rank"] = rank ircmsg["akey"] = akey ircmsg["applicable_server"] = server_id ircbot.export_async("job_ban", ircmsg) - return 1 - return 0 //Errored. + + return TRUE + catch + return FALSE ///Can be provided with a mob, a raw cache list, or a ckey. Prefer providing a cache if you can't use a mob, as that reduces API load. @@ -27,28 +46,23 @@ var/list/cache if(!M) return FALSE - var/datum/player/player = null if(ismob(M)) var/mob/M2 = M - player = make_player(M2.ckey) // Get the player so we can use their bancache. - else if(islist(M)) - cache = M - else if(istext(M)) - player = make_player(M) - else - CRASH("jobban_isbanned() called with invalid argument type '[M]'.") - - if(isnull(cache) && player) - if(isnull(player.cached_jobbans)) // Shit they aren't cached. - var/api_response = apiHandler.queryAPI("jobbans/get/player", list("ckey"=player.ckey), 1) - if(!length(api_response)) // API unavailable or something + //if(isnull(M2.client)) + //return FALSE + var/datum/player/player = make_player(M2.ckey) // Get the player so we can use their bancache. + if(player.cached_jobbans == null) // Shit they aren't cached. + var/list/jobBans = jobban_get_for_player(M2.ckey) + player.cached_jobbans = jobBans + if(!length(jobBans)) // API unavailable or no bans return FALSE - player.cached_jobbans = api_response[player.ckey] + if(!M2?.ckey) + return FALSE // new_player was disposed during api call cache = player.cached_jobbans - if(isnull(cache)) - CRASH("jobban cache is null for [player.ckey] after an API fetch") - else if(isnull(cache)) - CRASH("jobban cache is null and there is no player datum, this should not happen: [M], [player]") + else if(islist(M)) + cache = M + else //If we aren't a string this is going to explode. + cache = jobban_get_for_player(M) var/datum/job/J = find_job_in_controller_by_string(rank) if (J?.no_jobban_from_this_job) @@ -87,7 +101,7 @@ if (!ismob(M)) checkey = M - cache = apiHandler.queryAPI("jobbans/get/player", list("ckey"=checkey), 1)[checkey] + cache = jobban_get_for_player(checkey) else if (M.ckey) checkey = M.ckey var/datum/player/player = make_player(checkey) //Get the player so we can use their bancache. @@ -98,13 +112,23 @@ if(!cache.Find("[rank]")) return - apiHandler.queryAPI("jobbans/del", list("ckey"=checkey,"rank"=rank)) - if(rank == "Security Department") - if(cache.Find("Security Officer")) - apiHandler.queryAPI("jobbans/del", list("ckey"=checkey, "rank"="Security Officer")) - var/ircmsg[] = new() - ircmsg["key"] = checkey - ircmsg["rank"] = rank - ircmsg["akey"] = akey - ircmsg["applicable_server"] = config.server_id - ircbot.export_async("job_unban", ircmsg) + try + var/datum/apiRoute/jobbans/delete/deleteJobBan = new + deleteJobBan.buildBody(null, checkey, rank) + apiHandler.queryAPI(deleteJobBan) + + // Wire note: Hi this is super dumb + if(rank == "Security Department") + if(cache.Find("Security Officer")) + var/datum/apiRoute/jobbans/delete/secDeleteJobBan = new + secDeleteJobBan.buildBody(null, checkey, "Security Officer") + apiHandler.queryAPI(secDeleteJobBan) + + var/ircmsg[] = new() + ircmsg["key"] = checkey + ircmsg["rank"] = rank + ircmsg["akey"] = akey + ircmsg["applicable_server"] = config.server_id + ircbot.export_async("job_unban", ircmsg) + catch + // pass diff --git a/code/modules/admin/loginnotice.dm b/code/modules/admin/loginnotice.dm index 69e75a6a363cc..c7893920f6c87 100644 --- a/code/modules/admin/loginnotice.dm +++ b/code/modules/admin/loginnotice.dm @@ -16,10 +16,10 @@ // this forces an update of the cloud data, to make sure it's fresh // god forbid someone update it on server 4 and then overwrites it on server 1 var/datum/player/player = make_player(target_key) - player.cloud_fetch() + player.cloudSaves.fetch() // get the current notice (if anything) - var/message = player.cloud_get("login_notice") + var/message = player.cloudSaves.getData("login_notice") if (message) alert("This player already has a login notice set. You can modify it in the next window. To delete it, blank the text and hit OK.") @@ -35,22 +35,22 @@ // if there's no new message but there WAS one, we're deleting the current set one if (!new_message && message) - if (!player.cloud_put("login_notice", null)) + if (!player.cloudSaves.putData("login_notice", null)) tgui_alert(src.owner.mob, "ERROR: Failed to clear login notice to cloud for [target_key].") return - addPlayerNote(target_key, src.owner.ckey + " (AUTO)", "Cleared the previous login notice.") + addPlayerNote(target_key, src.owner.ckey, "Cleared the previous login notice.") return // otherwise, we have a new message to save // yes it is using the log date. no i don't care var/message_text = "Message from Admin [src.owner.ckey] at [roundLog_date]:\n\n[new_message]" - if (!player.cloud_put("login_notice", message_text)) + if (!player.cloudSaves.putData("login_notice", message_text)) input(src.owner.mob, "** ERROR SAVING LOGIN MESSAGE **\nYou can copy it from here to retry later:", "Login Notice", message) as null|message return // New note saved, usual player notes bookkeeping - addPlayerNote(target_key, src.owner.ckey + " (AUTO)", "New login notice set:\n\n[message_text]") + addPlayerNote(target_key, src.owner.ckey, "New login notice set:\n\n[message_text]") message_admins(SPAN_INTERNAL("[key_name(src.owner.mob)] added a login notice for <a href='?src=%admin_ref%;action=notes&target=[target_key]'>[target_key]</A>:<br><div style='whitespace: pre-wrap;'>[message_text]</div>")) tgui_alert(src.owner.mob, "Login notice for '[target_key]' has been set. They should see it next time they connect.") @@ -62,10 +62,7 @@ /// Returns 1 if a login message is pending, 0 otherwise /client/proc/has_login_notice_pending(var/show_again = 0) - if (!src.player.cloud_available()) - return - - var/message = src.player.cloud_get("login_notice") + var/message = src.player.cloudSaves.getData("login_notice") if (message && show_again) src.show_login_notice() @@ -73,12 +70,7 @@ /// Shows a login notice, if one exists /client/proc/show_login_notice() - - // If the cloud isn't available then, welp. - if (!src.player.cloud_available()) - return - - var/message = src.player.cloud_get("login_notice") + var/message = src.player.cloudSaves.getData("login_notice") if (message) src << csound('sound/voice/bfreeze.ogg') @@ -111,18 +103,14 @@ boutput(src, SPAN_ALERT("You have a pending login notice! You must acknowledge it before you can play!")) /client/proc/acknowledge_login_notice() - // This literally should not be possible but you know how it is - if (!src.player.cloud_available()) - return - - var/message = src.player.cloud_get("login_notice") + var/message = src.player.cloudSaves.getData("login_notice") if (message) - if (!player.cloud_put("login_notice", null)) + if (!player.cloudSaves.deleteData("login_notice")) tgui_alert(src.mob, "ERROR: Failed to clear login notice for some reason...") return message_admins(SPAN_INTERNAL("[src.ckey] acknowledged their login notice.")) - addPlayerNote(src.ckey, "(AUTO)", "Acknowledged their login notice.") + addPlayerNote(src.ckey, "bot", "Acknowledged their login notice.") src.mob.Browse(null, "window=loginnotice") src << csound('sound/machines/futurebuddy_beep.ogg') alert("You have acknowledged the admin notice and can now play.") diff --git a/code/modules/admin/player_options.dm b/code/modules/admin/player_options.dm index 0db231bc41d5f..08c227354252b 100644 --- a/code/modules/admin/player_options.dm +++ b/code/modules/admin/player_options.dm @@ -353,7 +353,6 @@ <div class='r'> <a href='[playeropt_link(M, "giveantagtoken")]'>Antag Tokens</a> • <a href='[playeropt_link(M, "setspacebux")]'>Spacebux</a> • - <a href='[playeropt_link(M, "viewantaghistory")]'>Antag History</a> • <a href='[playeropt_link(M, "chatbans")]'>Chat Bans</a> • <a href='[playeropt_link(M, "flavortext")]'>Flavor text</a> </div> diff --git a/code/modules/admin/player_panel.dm b/code/modules/admin/player_panel.dm index 9a102cc59214c..fd51b0378cb32 100644 --- a/code/modules/admin/player_panel.dm +++ b/code/modules/admin/player_panel.dm @@ -5,7 +5,7 @@ return tgui_admin_state.can_use_topic(src, user) /datum/player_panel/ui_status(mob/user) - return tgui_admin_state.can_use_topic(src, user) + return tgui_admin_state.can_use_topic(src, user) /datum/player_panel/ui_interact(mob/user, datum/tgui/ui) ui = tgui_process.try_update_ui(user, src, ui) diff --git a/code/modules/admin/player_stats.dm b/code/modules/admin/player_stats.dm index 3604d9f41bcac..8787d9008846f 100644 --- a/code/modules/admin/player_stats.dm +++ b/code/modules/admin/player_stats.dm @@ -49,15 +49,14 @@ del(usr.client) return - var/list/response + var/datum/apiModel/Tracked/PlayerStatsResource/playerStats try - response = apiHandler.queryAPI("playerInfo/get", list("ckey" = ckey), forceResponse = 1) - catch () + var/datum/apiRoute/players/stats/get/getPlayerStats = new + getPlayerStats.queryParams = list("ckey" = ckey) + playerStats = apiHandler.queryAPI(getPlayerStats) + catch return alert("Failed to query API, try again later.") - if (text2num(response["seen"]) < 1) - return alert("No data found.") - //Find the connected client, if present (ignore not found) var/client/C try @@ -68,22 +67,20 @@ html += "<table>" html += "<tr><td><b>Current status</b></td><td>[C ? "<span style='color: green;'>Online" : "<span style='color: red;'>Offline"]</span></td></tr>" - html += "<tr><td><b>Rounds connected to</b></td><td>[response["seen"]]</td></tr>" - html += "<tr><td><b>Rounds participated in</b></td><td>[response["participated"]]</td></tr>" - html += "<tr><td><b>Rounds connected to, RP</b></td><td>[response["seen_rp"]]</td></tr>" - html += "<tr><td><b>Rounds participated in, RP</b></td><td>[response["participated_rp"]]</td></tr>" - html += "<tr><td><b>Last seen</b></td><td>[response["last_seen"]]</td></tr>" - html += "<tr><td><b>Last seen BYOND version</b></td><td>[response["byondMajor"]].[response["byondMinor"]]</td></tr>" - html += "<tr><td><b>Platform</b></td><td>[response["platform"]]</td></tr>" - html += "<tr><td><b>Browser</b></td><td>[response["browser"]] [response["browserVersion"]][response["browserMode"] ? " ([response["browserMode"]])" : ""]</td></tr>" + html += "<tr><td><b>Rounds connected to</b></td><td>[playerStats.connected]</td></tr>" + html += "<tr><td><b>Rounds participated in</b></td><td>[playerStats.played]</td></tr>" + html += "<tr><td><b>Rounds connected to, RP</b></td><td>[playerStats.connected_rp]</td></tr>" + html += "<tr><td><b>Rounds participated in, RP</b></td><td>[playerStats.played_rp]</td></tr>" + html += "<tr><td><b>Last seen</b></td><td>[playerStats.latest_connection.created_at]</td></tr>" + html += "<tr><td><b>Last seen BYOND version</b></td><td>[playerStats.byond_major].[playerStats.byond_minor]</td></tr>" html += "<tr><td style='vertical-align: top;'><b>IP</b></td><td>" - html += "Last seen: [response["last_ip"]]<br>" + html += "Last seen: [playerStats.latest_connection.ip]<br>" html += "<a href='?src=\ref[src];action=show_player_ips;ckey=[ckey];'>See All</a>" html += "</td></tr>" html += "<tr><td style='vertical-align: top;'><b>Computer ID</b></td><td>" - html += "Last seen: [response["last_compID"]]<br>" + html += "Last seen: [playerStats.latest_connection.comp_id]<br>" html += "<a href='?src=\ref[src];action=show_player_compids;ckey=[ckey];'>See All</a>" html += "</td></tr>" @@ -104,17 +101,16 @@ del(usr.client) return - var/list/response + var/datum/apiModel/PlayerIpsResource/playerIps try - response = apiHandler.queryAPI("playerInfo/getIPs", list("ckey" = ckey), forceResponse = 1) - catch () + var/datum/apiRoute/players/ips/get/getPlayerIps = new + getPlayerIps.queryParams = list("ckey" = ckey) + playerIps = apiHandler.queryAPI(getPlayerIps) + catch return alert("Failed to query API, try again later.") - if (length(response) < 1) - return alert("No data found.") - var/html = "<p><b>[capitalize(ckey)]</b> IP History</p>" - html += "<p><b>Last seen IP:</b> [response[1]["last_seen"]]</p>" + html += "<p><b>Last seen IP:</b> [playerIps.latest_connection.ip]</p>" html += "<table>" html += "<thead><tr>" @@ -122,8 +118,8 @@ html += "<th style='text-align: left;'>Times connected</th>" html += "</tr></thead>" - for (var/list/details in response) - html += "<tr><td>[details["ip"]]</td><td>[details["times"]]</td></tr>" + for (var/list/details in playerIps.ips) + html += "<tr><td>[details["ip"]]</td><td>[details["connected"]]</td></tr>" html += "</table>" @@ -142,17 +138,16 @@ del(usr.client) return - var/list/response + var/datum/apiModel/PlayerCompIdsResource/playerCompIds try - response = apiHandler.queryAPI("playerInfo/getCompIDs", list("ckey" = ckey), forceResponse = 1) - catch () + var/datum/apiRoute/players/compids/get/getPlayerCompIds = new + getPlayerCompIds.queryParams = list("ckey" = ckey) + playerCompIds = apiHandler.queryAPI(getPlayerCompIds) + catch return alert("Failed to query API, try again later.") - if (length(response) < 1) - return alert("No data found.") - var/html = "<p><b>[capitalize(ckey)]</b> Computer ID History</p>" - html += "<p><b>Last seen Computer ID:</b> [response[1]["last_seen"]]</p>" + html += "<p><b>Last seen Computer ID:</b> [playerCompIds.latest_connection.comp_id]</p>" html += "<table>" html += "<thead style='text-align: left;'><tr>" @@ -160,8 +155,8 @@ html += "<th style='text-align: left;'>Times connected</th>" html += "</tr></thead>" - for (var/list/details in response) - html += "<tr><td>[details["compID"]]</td><td>[details["times"]]</td></tr>" + for (var/list/details in playerCompIds.comp_ids) + html += "<tr><td>[details["comp_id"]]</td><td>[details["connected"]]</td></tr>" html += "</table>" diff --git a/code/modules/admin/playernotes.dm b/code/modules/admin/playernotes.dm index eb826c4171870..470f02fe70757 100644 --- a/code/modules/admin/playernotes.dm +++ b/code/modules/admin/playernotes.dm @@ -1,5 +1,5 @@ -// Viewing a player's notes -/datum/admins/proc/viewPlayerNotes(var/player) +/// Viewing a player's notes +/datum/admins/proc/viewPlayerNotes(player) if (!player) return @@ -11,37 +11,25 @@ del(usr.client) return - if (!config.player_notes_baseurl || !config.player_notes_auth) - alert("Missing configuration for player notes") - return - - var/list/data = list( - "auth" = config.player_notes_auth, - "action" = "get", - "ckey" = player, - "format" = "json" - ) - - // Fetch notes via HTTP - var/datum/http_request/request = new() - request.prepare(RUSTG_HTTP_METHOD_GET, "[config.player_notes_baseurl]/?[list2params(data)]", "", "") - request.begin_async() - UNTIL(request.is_complete()) - var/datum/http_response/response = request.into_response() - - if (response.errored || !response.body) - logTheThing(LOG_DEBUG, null, "viewPlayerNotes: Failed to fetch notes of player: [player].") + var/datum/apiModel/Paginated/PlayerNoteResourceList/playerNotes + try + var/datum/apiRoute/players/notes/get/getPlayerNotes = new + getPlayerNotes.queryParams = list( + "filters" = list( + "ckey" = player + ) + ) + playerNotes = apiHandler.queryAPI(getPlayerNotes) + catch (var/exception/e) + var/datum/apiModel/Error/error = e.name + logTheThing(LOG_DEBUG, null, "viewPlayerNotes: Failed to fetch notes of player: [player] because: [error.message]") alert("Failed to fetch notes for [player].") return - var/content = response.body - // var/content = file2text('data/_TEST_.json') - var/all_notes = json_decode(content) - var/datum/player/pdatum = make_player(player) - pdatum.cloud_fetch() + pdatum.cloudSaves.fetch() var/noticelink = "" - if (pdatum.cloud_available() && pdatum.cloud_get("login_notice")) + if (pdatum.cloudSaves.getData("login_notice")) noticelink = {" style="color: red; font-weight: bold;">Login Notice Set"} else noticelink = {">Add Login Notice"} @@ -67,39 +55,32 @@ dat += "<h1 style='text-align: center;'>Player Notes for <b>[player]</b></h1><center><a href='?src=\ref[src];action=notes2;target=[player];type=add'>Add Note</A> - <a href='?src=\ref[src];action=loginnotice;target=[player]'[noticelink]</a></center><br><br><table><tbody>" - if (all_notes["error"]) + if (!length(playerNotes.data)) dat += "No notes. <i>Yet.</i>" else - - for (var/i in 1 to length(all_notes)) + for (var/datum/apiModel/Tracked/PlayerNoteResource/playerNote in playerNotes.data) var/list/row_classes = list() + var/noteReason = playerNote.note - // somehow newlines in notes are 0D 0D 0A - // i don't know how the fuck this happened - // but what the FUCK, byond - all_notes[i]["note"] = replacetext(all_notes[i]["note"], "\x0D", "") - - // screaming - if (all_notes[i]["akey"] == "Auto Banner" || all_notes[i]["akey"] == "VPN Blocker" || all_notes[i]["akey"] == "(AUTO)") + if (playerNote.game_admin.ckey == "bot") row_classes += "auto" var/regex/R = new("Banned from (.+?) by (.+?), reason: (.+), duration: (.+)", "m") - if (R.Find(all_notes[i]["note"])) + if (R.Find(noteReason)) row_classes += "ban" - all_notes[i]["note"] = R.Replace(all_notes[i]["note"], "<b>BANNED</b> from <b>$1</b> by <b>$2</b> — $4<br><blockquote>$3</blockquote>") - + noteReason = R.Replace(noteReason, "<b>BANNED</b> from <b>$1</b> by <b>$2</b> — $4<br><blockquote>$3</blockquote>") var/classes = row_classes.Join(" ") dat += {" <tr class="[classes]"> - <th>[all_notes[i]["server"]]</th> - <th>[all_notes[i]["created"]]</th> - <th style='width: 0; white-space: pre;'>#[all_notes[i]["id"]] <a href="?src=\ref[src];action=notes2;target=[player];type=del;id=[all_notes[i]["id"]]" style="background: red; color: white; display: inline-block; text-align: center; padding: 0.1em 0.25em; border-radius: 4px; text-decoration: none;">×</a></th> + <th>[playerNote.server_id]</th> + <th>[playerNote.created_at]</th> + <th style='width: 0; white-space: pre;'>#[playerNote.id] <a href="?src=\ref[src];action=notes2;target=[player];type=del;id=[playerNote.id]" style="background: red; color: white; display: inline-block; text-align: center; padding: 0.1em 0.25em; border-radius: 4px; text-decoration: none;">×</a></th> </tr> <tr class="[classes]" style="margin-bottom: 1em;"> - <th>[all_notes[i]["akey"]]</th> - <td colspan="2" style="white-space: pre-wrap;">[all_notes[i]["note"]]</td> + <th>[playerNote.game_admin.ckey]</th> + <td colspan="2" style="white-space: pre-wrap;">[noteReason]</td> </tr> <tr class='empty'><td colspan='3'></td></tr> "} @@ -109,47 +90,35 @@ usr.Browse(dat.Join(""), "window=notesp;size=875x600;title=Notes for [player]") -// Adding a player note +/// Adding a player note /proc/addPlayerNote(player, admin, note) if (!player || !admin || !note) return - if (!config.player_notes_baseurl || !config.player_notes_auth) - alert("Missing configuration for player notes") - return - - var/list/data = list( - "auth" = config.player_notes_auth, - "action" = "add", - "server" = serverKey, - "server_id" = config.server_id, - "ckey" = player, - "akey" = admin, - "note" = note - ) - - // Send data - var/datum/http_request/request = new() - request.prepare(RUSTG_HTTP_METHOD_GET, "[config.player_notes_baseurl]/?[list2params(data)]", "", "") - request.begin_async() - - -// Deleting a player note + try + var/datum/apiRoute/players/notes/post/addPlayerNote = new + addPlayerNote.buildBody( + admin, + roundId, + config.server_id, + player, + note + ) + apiHandler.queryAPI(addPlayerNote) + catch (var/exception/e) + var/datum/apiModel/Error/error = e.name + logTheThing(LOG_DEBUG, null, "addPlayerNote: Failed to add note to player: [player] because: [error.message].") + + +/// Deleting a player note /proc/deletePlayerNote(id) if (!id) return - if (!config.player_notes_baseurl || !config.player_notes_auth) - alert("Missing configuration for player notes") - return - - var/list/data = list( - "auth" = config.player_notes_auth, - "action" = "delete", - "id" = id - ) - - // Send data - var/datum/http_request/request = new() - request.prepare(RUSTG_HTTP_METHOD_GET, "[config.player_notes_baseurl]/?[list2params(data)]", "", "") - request.begin_async() + try + var/datum/apiRoute/players/notes/delete/deletePlayerNote = new + deletePlayerNote.routeParams = list("[id]") + apiHandler.queryAPI(deletePlayerNote) + catch (var/exception/e) + var/datum/apiModel/Error/error = e.name + logTheThing(LOG_DEBUG, null, "deletePlayerNote: Failed to delete note #[id] because: [error.message].") diff --git a/code/modules/admin/randomverbs.dm b/code/modules/admin/randomverbs.dm index 86931755aaf82..bb5a7aa2598ae 100644 --- a/code/modules/admin/randomverbs.dm +++ b/code/modules/admin/randomverbs.dm @@ -2545,38 +2545,20 @@ var/global/night_mode_enabled = 0 boutput(usr, SPAN_ALERT("Transfer aborted.")) return old_key = ckey(old_key) - var/new_key = ckey(input("Enter new account key", "New account key", null) as null|text) if (!new_key) boutput(usr, SPAN_ALERT("Transfer aborted.")) return - //criminal activity - var/datum/player/dummy_player = new - dummy_player.clouddata = list() // trick it into thinking we have cloud data I guess. only gets nullchecked - dummy_player.cloudsaves = list() // ditto - var/datum/preferences/dummy_preferences = new - var/list/save_names = dummy_player.cloud_fetch_target_saves_only(old_key) // technically a map from names to nums - - if (!save_names) - boutput(usr, SPAN_ALERT("Couldn't find cloud data for that key.")) - return - if (!length(save_names)) - boutput(usr, SPAN_ALERT("Couldn't find any cloud saves for that key.")) - return - if (tgui_alert(usr, "You're about to transfer [length(save_names)] saves from [old_key] to [new_key]. This will overwrite all the existing saves on the target account. Do it?", "Cloud Save Transfer", list("Yes", "No")) == "No") + if (tgui_alert(usr, "You're about to transfer all saves from [old_key] to [new_key]. This will overwrite all the existing saves on the target account. Do it?", "Cloud Save Transfer", list("Yes", "No")) == "No") boutput(usr, SPAN_ALERT("Transfer aborted.")) return - for (var/name in save_names) - dummy_preferences.cloudsave_load(null, name, old_key) - var/ret = dummy_preferences.cloudsave_save(null, name, new_key) - if (ret != 1) //yes this is intentional - boutput(usr, SPAN_ALERT("Something went wrong while saving to the cloud. Return value was: ([ret]). Transfer aborted.")) - return - - dummy_player.cloud_put_target(new_key, "saves", save_names) - boutput(usr, SPAN_SUCCESS("Cloud saves transferred.")) + try + cloud_saves_transfer(old_key, new_key) + boutput(usr, SPAN_SUCCESS("Cloud saves transferred.")) + catch (var/exception/e) + boutput(usr, SPAN_ALERT("Transfer aborted because: [e.name]")) /client/proc/cmd_admin_disable() set name = "Disable Admin Powers" @@ -2968,3 +2950,90 @@ var/global/force_radio_maptext = FALSE return else boutput(src, "You must be at least an Administrator to use this command.") +/client/proc/toggle_all_artifacts() + // Housekeeping + SET_ADMIN_CAT(ADMIN_CAT_FUN) + set name = "Toggle All Artifacts" + if (holder && src.holder.level >= LEVEL_ADMIN) + switch(alert("What would you like to do?",,"Activate All","Deactivate All","Cancel")) + if("Cancel") + return + if("Activate All") + // You definitely can activate an artnuke like this maybe be sure we're sure + var/response = input(src, "Extremely stupid button pressing shenanagains detected - Type YES to continue", "Caution!") as null|text + if (response != "YES") + message_admins("[key_name(usr)] aborted toggling every dang artifact due to failing to type 'YES'") // im telling on u!!! + return + logTheThing(LOG_ADMIN, src, "started activating all available artifacts.") + message_admins("[key_name(usr)] started activating all available artifacts.") + for(var/artifact as anything in by_cat[TR_CAT_ARTIFACTS]) + var/obj/holder = artifact + holder.ArtifactActivated() + if("Deactivate All") + // No confirmation for this since you cant really activate an artnuke like this + logTheThing(LOG_ADMIN, src, "started deactivating all available artifacts.") + message_admins("[key_name(usr)] started deactivating all available artifacts.") + for(var/artifact as anything in by_cat[TR_CAT_ARTIFACTS]) + var/obj/holder = artifact + holder.ArtifactDeactivated() + else + boutput(src, "You must be at least an Administrator to use this command.") + +#define ARTIFACT_BULK_LIMIT 100 +#define ARTIFACT_HARD_LIMIT 2000 +#define ARTIFACT_MAX_SPAWN_ATTEMPTS 100 + +/client/proc/spawn_tons_of_artifacts() + SET_ADMIN_CAT(ADMIN_CAT_FUN) + set name = "Bulk Spawn Artifacts" + + var/artifacts_spawned = 0 + var/spawn_fails = 0 + var/artifact_spawn_attempts + + if (holder && src.holder.level >= LEVEL_ADMIN) + switch(alert("THIS COULD SERIOUSLY FUCK THINGS UP. That being said, do it anyway?","WOAH THERE BUCKAROO","Yes","No")) + if("No") + return + if("Yes") + var/amt_artifacts = min(input(usr,"How many artifacts do we want to spawn?\n(Default: 50)",,50) as num, ARTIFACT_HARD_LIMIT) + if (amt_artifacts > ARTIFACT_BULK_LIMIT) + var/response = input(src, "High number of types: [length(amt_artifacts)] - Type YES to continue", "Caution!") as null|text + if (response != "YES") + message_admins("[key_name(usr)] aborted spawning [amt_artifacts] due to failing to type 'YES'") // im telling on u!!! + return + var/floors_only = (alert(src, "Only spawn artifacts on floors?",, "Yes", "No") == "Yes") + logTheThing(LOG_ADMIN, src, "started spawning [amt_artifacts] artifacts.") + message_admins("[key_name(usr)] started spawning [amt_artifacts] artifacts.") + + while (artifacts_spawned < amt_artifacts) + var/turf/T = locate(rand(1, world.maxx), rand(1, world.maxy), Z_LEVEL_STATION) + + if (floors_only) + while (artifact_spawn_attempts < ARTIFACT_MAX_SPAWN_ATTEMPTS) + if (istype(T, /turf/simulated/floor) && checkTurfPassable(T)) + break + artifact_spawn_attempts += 1 + T = locate(rand(1, world.maxx), rand(1, world.maxy), Z_LEVEL_STATION) + if (artifact_spawn_attempts >= ARTIFACT_MAX_SPAWN_ATTEMPTS) + spawn_fails += 1 + else + Artifact_Spawn(T) + artifact_spawn_attempts = 0 + else + Artifact_Spawn(T) + artifacts_spawned += 1 + if (artifacts_spawned % ARTIFACT_BULK_LIMIT == 0) + sleep(1 SECOND) + + logTheThing(LOG_ADMIN, src, "finished spawning [amt_artifacts] artifacts.") + message_admins("[key_name(usr)] finished spawning [amt_artifacts] artifacts.") + if (spawn_fails > 0) + logTheThing(LOG_ADMIN, src, "[spawn_fails] artifact\s failed to spawn") + message_admins("[spawn_fails] artifact\s failed to spawn") + else + boutput(src, "You must be at least an Administrator to use this command.") + +#undef ARTIFACT_BULK_LIMIT +#undef ARTIFACT_HARD_LIMIT +#undef ARTIFACT_MAX_SPAWN_ATTEMPTS diff --git a/code/modules/admin/spacebee_extension/commands.dm b/code/modules/admin/spacebee_extension/commands.dm index bf9fc6ec26ca0..842fc18bff609 100644 --- a/code/modules/admin/spacebee_extension/commands.dm +++ b/code/modules/admin/spacebee_extension/commands.dm @@ -38,7 +38,7 @@ help_message = "Adds a note to a given ckey." argument_types = list(/datum/command_argument/string/ckey="ckey", /datum/command_argument/the_rest="note") execute(user, ckey, note) - addPlayerNote(ckey, user + " (Discord)", note) + addPlayerNote(ckey, user, note) logTheThing(LOG_ADMIN, "[user] (Discord)", null, "added a note for [ckey]: [note]") logTheThing(LOG_DIARY, "[user] (Discord)", null, "added a note for [ckey]: [note]", "admin") @@ -57,16 +57,16 @@ execute(user, ckey, notice) var/datum/player/player = make_player(ckey) - player.cloud_fetch() - if (player.cloud_get("login_notice")) + player.cloudSaves.fetch() + if (player.cloudSaves.getData("login_notice")) system.reply("Error, [ckey] already has a login notice set.", user) return var/message = "Message from Admin [user] at [roundLog_date]:\n\n[notice]" - if (!player.cloud_put("login_notice", message)) + if (!player.cloudSaves.putData("login_notice", message)) system.reply("Error, issue saving login notice, try again later.", user) return // else it succeeded - addPlayerNote(ckey, user + " (Discord)", "New login notice set:\n\n[notice]") + addPlayerNote(ckey, user, "New login notice set:\n\n[notice]") logTheThing(LOG_ADMIN, "[user] (Discord)", null, "added a login notice for [ckey]: [notice]") logTheThing(LOG_DIARY, "[user] (Discord)", null, "added a login notice for [ckey]: [notice]", "admin") message_admins(SPAN_INTERNAL("[user] (Discord) added a login notice for [ckey]: [notice]")) @@ -92,17 +92,17 @@ data["compID"] = M.computer_id data["ip"] = M.lastKnownIP else - var/list/response + var/datum/apiModel/Tracked/PlayerStatsResource/playerStats try - response = apiHandler.queryAPI("playerInfo/get", list("ckey" = data["ckey"]), forceResponse = 1) - catch () - var/ircmsg[] = new() - ircmsg["name"] = user - ircmsg["msg"] = "Failed to query API, try again later." - ircbot.export("admin", ircmsg) - return - data["ip"] = response["last_ip"] - data["compID"] = response["last_compID"] + var/datum/apiRoute/players/stats/get/getPlayerStats = new + getPlayerStats.queryParams = list("ckey" = data["ckey"]) + playerStats = apiHandler.queryAPI(getPlayerStats) + data["ip"] = playerStats.latest_connection.ip + data["compID"] = playerStats.latest_connection.comp_id + catch + data["ip"] = null + data["compID"] = null + data["text_ban_length"] = length data["reason"] = reason if (length == "hour") @@ -130,12 +130,15 @@ return data["mins"] = length data["akey"] = ckey(user) + " (Discord)" - addBan(data) // logging, messaging, and noting are all taken care of by this proc - - var/ircmsg[] = new() - ircmsg["name"] = user - ircmsg["msg"] = "Banned [ckey] from all servers for [length] minutes, reason: [reason]" - ircbot.export("admin", ircmsg) + bansHandler.add( + ckey(user), + null, + data["ckey"], + data["compID"], + data["ip"], + data["reason"], + data["mins"] * 60 * 10 + ) /datum/spacebee_extension_command/serverban name = "serverban" @@ -154,17 +157,20 @@ data["compID"] = M.computer_id data["ip"] = M.lastKnownIP else - var/list/response + var/datum/apiModel/Tracked/PlayerStatsResource/playerStats try - response = apiHandler.queryAPI("playerInfo/get", list("ckey" = data["ckey"]), forceResponse = 1) - catch () + var/datum/apiRoute/players/stats/get/getPlayerStats = new + getPlayerStats.queryParams = list("ckey" = data["ckey"]) + playerStats = apiHandler.queryAPI(getPlayerStats) + catch var/ircmsg[] = new() ircmsg["name"] = user ircmsg["msg"] = "Failed to query API, try again later." ircbot.export("admin", ircmsg) return - data["ip"] = response["last_ip"] - data["compID"] = response["last_compID"] + + data["ip"] = playerStats.latest_connection.ip + data["compID"] = playerStats.latest_connection.comp_id if(server == "main1" || server == "1" || server == "goon1") server = "main1" else if(server == "main2" || server == "2" || server == "goon2") @@ -204,12 +210,15 @@ return data["mins"] = length data["akey"] = ckey(user) + " (Discord)" - addBan(data) // logging, messaging, and noting are all taken care of by this proc - - var/ircmsg[] = new() - ircmsg["name"] = user - ircmsg["msg"] = "Banned [ckey] from [server] for [length] minutes, reason: [reason]" - ircbot.export("admin", ircmsg) + bansHandler.add( + ckey(user), + data["server"], + data["ckey"], + data["compID"], + data["ip"], + data["reason"], + data["mins"] * 60 * 10 + ) /datum/spacebee_extension_command/boot name = "boot" @@ -630,14 +639,18 @@ execute(user, ckey) try - apiHandler.queryAPI("vpncheck-whitelist/add", list("ckey" = ckey, "akey" = user + " (Discord)")) - catch(var/exception/e) - system.reply("Error while adding ckey [ckey] to the VPN whitelist: [e.name]") + var/datum/apiRoute/vpnwhitelist/add/addWhitelist = new + addWhitelist.buildBody(user, ckey) + apiHandler.queryAPI(addWhitelist) + catch (var/exception/e) + var/datum/apiModel/Error/error = e.name + system.reply("Error while adding ckey [ckey] to the VPN whitelist: [error.message]") return FALSE + global.vpn_ip_checks?.Cut() // to allow them to reconnect this round message_admins("Ckey [ckey] added to the VPN whitelist by [user] (Discord).") logTheThing(LOG_ADMIN, "[user] (Discord)", null, "Ckey [ckey] added to the VPN whitelist.") - addPlayerNote(ckey, user + " (Discord)", "Ckey [ckey] added to the VPN whitelist.") + addPlayerNote(ckey, user, "Ckey [ckey] added to the VPN whitelist.") system.reply("[ckey] added to the VPN whitelist.") return TRUE @@ -648,23 +661,18 @@ server_targeting = COMMAND_TARGETING_MAIN_SERVER execute(user, ckey) - var/list/response try - response = apiHandler.queryAPI("vpncheck-whitelist/search", list("ckey" = ckey), forceResponse = 1) - catch(var/exception/e) - system.reply("Error, while checking vpn whitelist status of ckey [ckey] encountered the following error: [e.name]") - return - if (!islist(response)) - system.reply("Failed to query vpn whitelist, did not receive response from API.") - if (response["error"]) - system.reply("Failed to query vpn whitelist, error: [response["error"]]") - else if ((response["success"])) - if (response["whitelisted"]) - system.reply("ckey [ckey] is VPN whitelisted. Whitelisted by [response["akey"] ? response["akey"] : "unknown admin"]") + var/datum/apiRoute/vpnwhitelist/search/searchWhitelist = new + searchWhitelist.queryParams = list("ckey" = ckey) + var/datum/apiModel/VpnWhitelistSearch/searchResults = apiHandler.queryAPI(searchWhitelist) + if (searchResults.whitelisted) + system.reply("ckey [ckey] is VPN whitelisted.") else system.reply("ckey [ckey] is not VPN whitelisted.") - else - system.reply("Failed to query vpn whitelist, received invalid response from API.") + catch (var/exception/e) + var/datum/apiModel/Error/error = e.name + system.reply("Failed to query vpn whitelist, error: [error.message]") + return FALSE /datum/spacebee_extension_command/hard_reboot name = "hardreboot" diff --git a/code/modules/admin/terrainify.dm b/code/modules/admin/terrainify.dm index bfb92d87bcdd7..36a24f1076b04 100644 --- a/code/modules/admin/terrainify.dm +++ b/code/modules/admin/terrainify.dm @@ -144,10 +144,16 @@ ABSTRACT_TYPE(/datum/terrainify) /datum/terrainify var/name var/desc - var/additional_options - var/additional_toggles + var/additional_options = list() + var/additional_toggles = list() var/static/datum/terrainify/terrainify_lock var/allow_underwater = FALSE + var/syndi_camo_color = null + + New() + ..() + if(length(syndi_camo_color)) + additional_toggles["Syndi Camo"] = FALSE proc/special_repair(list/turf/TS) return FALSE @@ -181,6 +187,13 @@ ABSTRACT_TYPE(/datum/terrainify) station_repair.allows_vehicles = (params["vehicle"] & TERRAINIFY_ALLOW_VEHCILES) == TERRAINIFY_ALLOW_VEHCILES + if(params["Syndi Camo"] && length(syndi_camo_color)) + nuke_op_camo_matrix = syndi_camo_color + + var/color_matrix = color_mapping_matrix(nuke_op_color_matrix, nuke_op_camo_matrix) + for (var/atom/A as anything in by_cat[TR_CAT_NUKE_OP_STYLE]) + A.color = color_matrix + message_admins("[key_name(ui.user)] started Terrainify: [name].") terrainify_lock = src tgui_process.close_uis(ui.src_object) @@ -196,7 +209,7 @@ ABSTRACT_TYPE(/datum/terrainify) proc/handle_mining(params, list/turfs) var/mining = params["Mining"] - mining = (mining == "No") ? null : mining + mining = (mining == "None") ? null : mining if(mining) var/list/turf/valid_spots = list() for(var/turf/simulated/wall/auto/asteroid/AST in turfs) @@ -230,7 +243,7 @@ ABSTRACT_TYPE(/datum/terrainify) proc/place_prefabs(prefabs_to_place, flags) var/failsafe = 800 for (var/n = 1, n <= prefabs_to_place && failsafe-- > 0) - var/datum/mapPrefab/planet/P = pick_map_prefab(/datum/mapPrefab/planet) + var/datum/mapPrefab/planet/P = pick_map_prefab(/datum/mapPrefab/planet, wanted_tags_any=PREFAB_PLANET) if (P) var/maxX = (world.maxx - AST_MAPBORDER) var/maxY = (world.maxy - AST_MAPBORDER) @@ -271,7 +284,11 @@ ABSTRACT_TYPE(/datum/terrainify) name = "Desert Station" desc = "Turn space into into a nice desert full of sand and stones." additional_options = list("Mining"=list("None","Normal","Rich")) - additional_toggles = list("Ambient Light Obj"=TRUE) + additional_toggles = list("Ambient Light Obj"=TRUE, "Prefabs"=FALSE) + + New() + syndi_camo_color = list(nuke_op_color_matrix[1], "#efc998", nuke_op_color_matrix[3]) + ..() convert_station_level(params, datum/tgui/ui) if(..()) @@ -307,6 +324,10 @@ ABSTRACT_TYPE(/datum/terrainify) name = "Void Station" desc = "Turn space into the unknowable void? Space if filled with the void, inhibited by those departed, and chunks of scaffolding." + New() + syndi_camo_color = list(nuke_op_color_matrix[1], "#a223d2", nuke_op_color_matrix[3]) + ..() + convert_station_level(params, datum/tgui/ui) if(..()) generate_void() @@ -413,13 +434,60 @@ ABSTRACT_TYPE(/datum/terrainify) logTheThing(LOG_DIARY, ui.user, "turned space into an another outpost on Theta.", "admin") message_admins("[key_name(ui.user)] turned space into an another outpost on Theta.") +/datum/terrainify/lava_moon + name = "Lava Moon Station" + desc = "Turns space into... CO2 + Lava." + additional_options = list("Mining"=list("None","Normal","Rich"), "Lava"=list("Normal","Extra","Less")) + + convert_station_level(params, datum/tgui/ui) + if(..()) + station_repair.default_air.carbon_dioxide = 20 + station_repair.default_air.nitrogen = 0 + station_repair.default_air.oxygen = 0 + station_repair.default_air.temperature = FIRE_MINIMUM_TEMPERATURE_TO_EXIST-1 + + station_repair.station_generator = new/datum/map_generator/lavamoon_generator + var/datum/map_generator/lavamoon_generator/LG = station_repair.station_generator + switch(params["Lava"]) + if("Extra") + LG.lava_percent = 45 + if("Less") + LG.lava_percent = 25 + + var/list/turf/traveling_crate_turfs = station_repair.get_mass_driver_turfs() + var/list/turf/shipping_path = shippingmarket.get_path_to_market() + traveling_crate_turfs |= shipping_path + for(var/turf/space/T in traveling_crate_turfs) + T.ReplaceWith(/turf/unsimulated/floor/auto/iomoon) + + station_repair.land_vehicle_fixup(params["vehicle"] & TERRAINIFY_VEHICLE_CARS, params["vehicle"] & TERRAINIFY_VEHICLE_FABS) + + var/list/space = list() + for(var/turf/space/S in block(locate(1, 1, Z_LEVEL_STATION), locate(world.maxx, world.maxy, Z_LEVEL_STATION))) + space += S + convert_turfs(space) + + REMOVE_ALL_PARALLAX_RENDER_SOURCES_FROM_GROUP(Z_LEVEL_STATION) + var/list/parallax_layers = list(/atom/movable/screen/parallax_render_source/foreground/embers) + ADD_PARALLAX_RENDER_SOURCE_TO_GROUP(Z_LEVEL_STATION, parallax_layers, 0 SECONDS) + + handle_mining(params, space) + + logTheThing(LOG_ADMIN, ui.user, "turned space into an another outpost on Io.") + logTheThing(LOG_DIARY, ui.user, "turned space into an another outpost on Io.", "admin") + message_admins("[key_name(ui.user)] turned space into an another outpost on Io.") + /datum/terrainify/swampify name = "Swamp Station" desc = "Turns space into a swamp" - additional_options = list("Rain"=list("Yes","No", "Particles"), "Mining"=list("None","Normal","Rich")) + additional_options = list("Rain"=list("No", "Yes", "Particles"), "Mining"=list("None","Normal","Rich")) additional_toggles = list("Ambient Light Obj"=TRUE, "Prefabs"=FALSE) + New() + syndi_camo_color = list(nuke_op_color_matrix[1], "#6f7026", nuke_op_color_matrix[3]) + ..() + convert_station_level(params, datum/tgui/ui) if(..()) var/const/ambient_light = "#222222" @@ -476,14 +544,25 @@ ABSTRACT_TYPE(/datum/terrainify) name = "Mars Station" desc = "Turns space into Mars. A sprawl of stand, stone, and an unyielding wind." additional_options = list("Mining"=list("None","Normal","Rich")) + additional_toggles = list("Ambient Light Obj"=FALSE, "Duststorm"=TRUE, "Prefabs"=FALSE) convert_station_level(params, datum/tgui/ui) if(..()) var/ambient_value - station_repair.station_generator = new/datum/map_generator/mars_generator + + if(params["Duststorm"]) + station_repair.station_generator = new/datum/map_generator/mars_generator/duststorm + station_repair.weather_img = image(icon = 'icons/turf/areas.dmi', icon_state = "dustverlay", layer = EFFECTS_LAYER_BASE) + else + station_repair.station_generator = new/datum/map_generator/mars_generator station_repair.overlay_delay = 3.5 SECONDS // Delay to let rocks cull - station_repair.weather_img = image(icon = 'icons/turf/areas.dmi', icon_state = "dustverlay", layer = EFFECTS_LAYER_BASE) - station_repair.ambient_light = new /image/ambient + + if(params["Ambient Light Obj"]) + station_repair.ambient_obj = station_repair.ambient_obj || new /obj/ambient + var/const/ambient_light = "#222222" + station_repair.ambient_obj.color = ambient_light + else + station_repair.ambient_light = new /image/ambient station_repair.default_air.carbon_dioxide = 500 station_repair.default_air.nitrogen = 0 @@ -495,11 +574,16 @@ ABSTRACT_TYPE(/datum/terrainify) space += S convert_turfs(space) sleep(3 SECONDS) // Let turfs initialize and re-orient before applying overlays + for (var/turf/S in space) S.UpdateOverlays(station_repair.weather_img, "weather") - ambient_value = lerp(20,80,S.x/300) - station_repair.ambient_light.color = rgb(ambient_value+((rand()*3)),ambient_value,ambient_value) //randomly shift red to reduce vertical banding - S.UpdateOverlays(station_repair.ambient_light, "ambient") + + if(params["Ambient Light Obj"]) + S.vis_contents |= station_repair.ambient_obj + else + ambient_value = lerp(20,80,S.x/300) + station_repair.ambient_light.color = rgb(ambient_value+((rand()*3)),ambient_value,ambient_value) //randomly shift red to reduce vertical banding + S.UpdateOverlays(station_repair.ambient_light, "ambient") for(var/turf/S in get_area_turfs(/area/mining/magnet)) if(S.z != Z_LEVEL_STATION) continue @@ -609,6 +693,10 @@ ABSTRACT_TYPE(/datum/terrainify) additional_options = list("Weather"=list("Snow", "Light Snow", "None"), "Mining"=list("None","Normal","Rich")) additional_toggles = list("Ambient Light Obj"=TRUE, "Prefabs"=FALSE) + New() + syndi_camo_color = list("#50587a", "#bbdbdd", nuke_op_color_matrix[3]) + ..() + convert_station_level(params, datum/tgui/ui) if(..()) var/const/ambient_light = "#222" @@ -656,29 +744,21 @@ ABSTRACT_TYPE(/datum/terrainify) name = "Forest Station" desc = "Turns space into a lush and wooden place" additional_options = list("Mining"=list("None","Normal","Rich")) - additional_toggles = list("Ambient Light Obj"=TRUE, "Prefabs"=FALSE) + additional_toggles = list("Ambient Light Obj"=TRUE, "Prefabs"=FALSE, "Spooky"=FALSE) -#ifdef HALLOWEEN New() + syndi_camo_color = list(nuke_op_color_matrix[1], "#3d8f29", nuke_op_color_matrix[3]) ..() - additional_toggles["Spooky"] = FALSE -#endif convert_station_level(params, datum/tgui/ui) if(..()) var/const/ambient_light = "#211" - if(params["Spooky"]) -#ifdef HALLOWEEN station_repair.station_generator = new/datum/map_generator/forest_generator/dark -#else - ; -#endif else station_repair.station_generator = new/datum/map_generator/forest_generator - if(params["Ambient Light Obj"]) station_repair.ambient_obj = station_repair.ambient_obj || new /obj/ambient station_repair.ambient_obj.color = ambient_light diff --git a/code/modules/antagonists/__generic_antagonist.dm b/code/modules/antagonists/__generic_antagonist.dm index dc8f1f03e011a..69f756799ee79 100644 --- a/code/modules/antagonists/__generic_antagonist.dm +++ b/code/modules/antagonists/__generic_antagonist.dm @@ -1,5 +1,6 @@ /datum/antagonist/generic succinct_end_of_round_antagonist_entry = TRUE + display_name = "generic antagonist" var/grouped_name New(datum/mind/new_owner, do_equip, do_objectives, do_relocate, silent, source, do_pseudo, do_vr, late_setup, id, display_name) diff --git a/code/modules/antagonists/nuclear_operative/nuclear_operative.dm b/code/modules/antagonists/nuclear_operative/nuclear_operative.dm index 4d012b67b3dc0..0e9c4294d5990 100644 --- a/code/modules/antagonists/nuclear_operative/nuclear_operative.dm +++ b/code/modules/antagonists/nuclear_operative/nuclear_operative.dm @@ -100,23 +100,16 @@ . = ..() proc/assign_name() - if (ticker?.mode && istype(ticker.mode, /datum/game_mode/nuclear)) - if (src.id == ROLE_NUKEOP_COMMANDER) - src.owner.current.real_name = "[syndicate_name()] [src.commander_title]" - else - var/callsign = pick(src.available_callsigns) - src.available_callsigns -= callsign - src.owner.current.real_name = "[syndicate_name()] Operative [callsign]" - - // Assign a headset icon to the Operative matching the first letter of their callsign. - var/obj/item/device/radio/headset/syndicate/headset = src.owner.current.ears - headset.icon_override = "syndie_letters/[copytext(callsign, 1, 2)]" - + if (src.id == ROLE_NUKEOP_COMMANDER) + src.owner.current.real_name = "[syndicate_name()] [src.commander_title]" else - if (src.id == ROLE_NUKEOP_COMMANDER) - src.owner.current.real_name = "Syndicate Commander [src.owner.current.real_name]" - else - src.owner.current.real_name = "Syndicate Operative [src.owner.current.real_name]" + var/callsign = pick(src.available_callsigns) + src.available_callsigns -= callsign + src.owner.current.real_name = "[syndicate_name()] Operative [callsign]" + + // Assign a headset icon to the Operative matching the first letter of their callsign. + var/obj/item/device/radio/headset/syndicate/headset = src.owner.current.ears + headset.icon_override = "syndie_letters/[copytext(callsign, 1, 2)]" /datum/antagonist/nuclear_operative/commander id = ROLE_NUKEOP_COMMANDER diff --git a/code/modules/antagonists/pirate/pirate.dm b/code/modules/antagonists/pirate/pirate.dm index b4038594df3c7..e4d1fb6602027 100644 --- a/code/modules/antagonists/pirate/pirate.dm +++ b/code/modules/antagonists/pirate/pirate.dm @@ -24,12 +24,14 @@ H.equip_if_possible(new /obj/item/clothing/head/pirate_captain(H), SLOT_HEAD) H.equip_if_possible(new /obj/item/clothing/shoes/swat/heavy(H), SLOT_SHOES) H.equip_if_possible(new /obj/item/device/radio/headset/pirate/captain(H), SLOT_EARS) + H.equip_if_possible(new /obj/item/card/id/pirate/captain, SLOT_WEAR_ID) else if (id == ROLE_PIRATE_FIRST_MATE) H.equip_if_possible(new /obj/item/clothing/under/gimmick/guybrush(H), SLOT_W_UNIFORM) H.equip_if_possible(new /obj/item/clothing/suit/armor/pirate_first_mate_coat(H), SLOT_WEAR_SUIT) H.equip_if_possible(new /obj/item/clothing/head/pirate_first_mate(H), SLOT_HEAD) H.equip_if_possible(new /obj/item/device/radio/headset/pirate/first_mate(H), SLOT_EARS) + H.equip_if_possible(new /obj/item/card/id/pirate/first_mate, SLOT_WEAR_ID) else if (id == ROLE_PIRATE) // Random clothing: @@ -45,6 +47,7 @@ H.equip_if_possible(new jumpsuit, SLOT_W_UNIFORM) H.equip_if_possible(new hat, SLOT_HEAD) H.equip_if_possible(new /obj/item/device/radio/headset/pirate(H), SLOT_EARS) + H.equip_if_possible(new /obj/item/card/id/pirate, SLOT_WEAR_ID) H.equip_if_possible(new /obj/item/storage/backpack(H), SLOT_BACK) H.equip_if_possible(new /obj/item/clothing/shoes/swat(H), SLOT_SHOES) @@ -54,10 +57,12 @@ H.equip_if_possible(new /obj/item/requisition_token/pirate(H), SLOT_R_STORE) H.equip_if_possible(new /obj/item/tank/emergency_oxygen/extended(H), SLOT_L_STORE) H.equip_if_possible(new /obj/item/swords_sheaths/pirate(H), SLOT_BELT) + H.equip_if_possible(new /obj/item/pirate_hand_tele(H), SLOT_R_HAND) H.equip_sensory_items() H.traitHolder.addTrait("training_drinker") + H.addBioEffect("accent_pirate") add_to_image_groups() . = ..() @@ -151,3 +156,151 @@ TYPEINFO(/obj/gold_bee) I.set_loc(get_turf(src)) ThrowRandom(I, 3, 1) qdel(src) + +/obj/landmark/pirate_tele + name = LANDMARK_PIRATES_TELE + +/obj/machinery/r_door_control/podbay/pirate + id = "peregrine_podbay" + access_type = POD_ACCESS_PIRATE + + new_walls + north + pixel_y = 24 + east + pixel_x = 22 + south + pixel_y = -19 + west + pixel_x = -22 + +/obj/machinery/door/poddoor/blast/pyro/podbay_autoclose/pirate_podbay + name = "Blast Shield" + id = "peregrine_podbay" + +/obj/machinery/door/poddoor/blast/pyro/podbay_autoclose/pirate_armory + name = "Podbay Door" + id = "peregrine_armory" + +/obj/warp_beacon/pirate + name = "Peregrine hangar beacon" + icon_state = "beacon_synd" + encrypted = POD_ACCESS_PIRATE + +/obj/item/shipcomponent/communications/pirate + name = "Pirate Communication Array" + desc = "A patchwork of mismatched components, boasts an unexpected proficiency in homing in on elusive warp beacons." + color = "#91681c" + access_type = list(POD_ACCESS_PIRATE) + +TYPEINFO(/obj/item/salvager_hand_tele) + mats = list("MET-1" = 5, "POW-1"=5, "CON-2" = 5, "telecrystal" = 30) + +/obj/item/pirate_hand_tele + name = "makeshift teleporter" + icon = 'icons/obj/items/device.dmi' + desc = "A questionable portable teleportation device that is coupled to a specific location." + icon_state = "hand_tele" + item_state = "electronic" + throwforce = 5 + health = 5 + w_class = W_CLASS_SMALL + c_flags = ONBELT + throw_speed = 3 + throw_range = 5 + m_amt = 10000 + var/image/indicator + var/image/indicator_light + + New() + ..() + indicator = image(src.icon, "hand_tele_o") + indicator_light = image(src.icon, "hand_tele_o", layer=LIGHTING_LAYER_BASE) + indicator_light.blend_mode = BLEND_ADD + indicator_light.plane = PLANE_LIGHTING + indicator_light.color = list(0, 0, 0, 0, 0, 0, 0, 0, 0, 0.5, 0.5, 0.5) + + get_help_message(dist, mob/user) + . = "Use it in hand to return to the Peregrine. Use it on someone else to send your target to the Peregrine instead." + + attack_self(mob/user) + . = ..() + if(!ispirate(user)) src.malfunction(user) + if (!isturf(user.loc)) + boutput(user, SPAN_ALERT("It wouldn't be safe to use \the [src] from inside of \the [user.loc]!")) + return + if(length(landmarks[LANDMARK_PIRATES_TELE])) + if (!ON_COOLDOWN(src, "recharging", 15 SECONDS)) + actions.start(new /datum/action/bar/pirate_tele(user, src), user) + else + user.show_message(SPAN_ALERT("It's still recharging!")) + else + user.show_message(SPAN_ALERT("Something is wrong...")) + + // teleport a friend + attack(mob/target, mob/user, def_zone, is_special, params) + if (!ispirate(user)) + src.malfunction(user) + return + if (target.anchored) + boutput(user, SPAN_ALERT("Teleportation failed due to interference.")) + return + + if(length(landmarks[LANDMARK_PIRATES_TELE])) + if (!ON_COOLDOWN(src, "recharging", 15 SECONDS)) + actions.start(new /datum/action/bar/pirate_tele(target, src), user) + else + user.show_message(SPAN_ALERT("It's still recharging!")) + return + else + user.show_message(SPAN_ALERT("Something is wrong...")) + + proc/malfunction(mob/user) + switch(rand(1,10)) + if(1 to 5) + boutput(user, SPAN_ALERT("You can't make any sense of this device. Maybe it isn't for you.")) + if(6 to 8) + boutput(user, SPAN_ALERT("\the [src] screen flashes momentarily before discharing a shock.")) + user.shock(src, 2500, "chest", 1, 1) + user.changeStatus("stunned", 3 SECONDS) + if(9 to 10) + boutput(user, SPAN_ALERT("[src] gets really hot... and explodes?!?")) + elecflash(src) + user.u_equip(src) + qdel(src) + +/datum/action/bar/pirate_tele + duration = 6 SECONDS + interrupt_flags = INTERRUPT_MOVE | INTERRUPT_STUNNED + var/atom/movable/target + var/obj/item/pirate_hand_tele/device + + New(Target, Device) + target = Target + device = Device + ..() + + onUpdate() + ..() + if(BOUNDS_DIST(owner, target) > 1 || target == null || owner == null) + interrupt(INTERRUPT_ALWAYS) + return + if(prob(25)) + elecflash(device) + + onStart() + ..() + if(BOUNDS_DIST(owner, target) > 1 || target == null || owner == null) + interrupt(INTERRUPT_ALWAYS) + return + playsound(owner.loc, 'sound/machines/click.ogg', 60, 1) + + onEnd() + ..() + var/turf/destination = pick(landmarks[LANDMARK_PIRATES_TELE]) + animate_teleport(target) + SPAWN(6 DECI SECONDS) + showswirl(target) + target.set_loc(destination) + showswirl(target) + elecflash(src) diff --git a/code/modules/antagonists/vampire/abilities/enthrall.dm b/code/modules/antagonists/vampire/abilities/enthrall.dm index c12b2edbe7e70..1b3b19ad51395 100644 --- a/code/modules/antagonists/vampire/abilities/enthrall.dm +++ b/code/modules/antagonists/vampire/abilities/enthrall.dm @@ -131,9 +131,11 @@ if (target in H.thralls) //and add blood! - var/datum/mutantrace/vampiric_thrall/V = target.mutantrace - if (V) - V.blood_points += 200 + var/datum/abilityHolder/vampiric_thrall/thrallHolder = target.get_ability_holder(/datum/abilityHolder/vampiric_thrall) + if (thrallHolder) + thrallHolder.points += 200 + //we also restore their real actual blood pressure a bit, to allow vampires to save their thralls who are drained + target.blood_volume = min(target.blood_volume + 200, initial(target.blood_volume)) H.blood_tracking_output(cost) diff --git a/code/modules/antagonists/wizard/abilities/animal.dm b/code/modules/antagonists/wizard/abilities/animal.dm index 84bf491afb5c5..c2f0d5e36a7fb 100644 --- a/code/modules/antagonists/wizard/abilities/animal.dm +++ b/code/modules/antagonists/wizard/abilities/animal.dm @@ -99,6 +99,9 @@ var/list/animal_spell_critter_paths = list(/mob/living/critter/small_animal/cat, onEnd() ..() + if(!ishuman(target)) + boutput(M, SPAN_ALERT("<B>Your spell fizzles at the final moment, somehow your target is no longer human!</B>")) + if(!istype(get_area(M), /area/sim/gunsim)) M.say("YORAF UHRY", FALSE, spell.maptext_style, spell.maptext_colors) if(ishuman(M)) @@ -115,23 +118,24 @@ var/list/animal_spell_critter_paths = list(/mob/living/critter/small_animal/cat, smoke.attach(target) smoke.start() - if (target.mind && (target.mind.assigned_role != "Animal") || (!target.mind || !target.client)) - boutput(target, SPAN_ALERT("<B>You feel your flesh painfully ripped apart and reformed into something else!</B>")) - if (target.mind) - target.mind.assigned_role = "Animal" - target.emote("scream", 0) - - target.unequip_all() - var/mob/living/critter/C = target.make_critter(pick(animal_spell_critter_paths)) - C.real_name = "[target.real_name] the [C.real_name]" - C.name = C.real_name - C.is_npc = FALSE - logTheThing(LOG_COMBAT, M, "casts the Polymorph spell on [constructTarget(target,"combat")] turning them into [constructTarget(C,"combat")] at [log_loc(C)].") - C.butcherable = BUTCHER_ALLOWED // we would like the brain to be recoverable, please - if (istype(C, /mob/living/critter/small_animal/bee)) - var/mob/living/critter/small_animal/bee/B = C - B.non_admin_bee_allowed = 1 - if (istype(C)) - C.change_misstep_chance(30) - C.stuttering = 40 - C.show_antag_popup("polymorph") + boutput(target, SPAN_ALERT("<B>You feel your flesh painfully ripped apart and reformed into something else!</B>")) + target.emote("scream", 0) + + target.unequip_all() + var/turf/T = get_turf(target) + var/mob/living/critter/C = target.make_critter(pick(animal_spell_critter_paths), T, ghost_spawned = FALSE, delete_original = FALSE) + target.set_loc(null) // We store the human in null so we can get them back with their exact current status + target.hibernating = TRUE + C.setStatus("wiz_polymorph", 8 MINUTES, target) + C.real_name = "[target.real_name] the [C.real_name]" + C.name = C.real_name + C.is_npc = FALSE + logTheThing(LOG_COMBAT, M, "casts the Polymorph spell on [constructTarget(target,"combat")] turning them into [constructTarget(C,"combat")] at [log_loc(C)].") + C.butcherable = BUTCHER_ALLOWED // we would like the brain to be recoverable, please + if (istype(C, /mob/living/critter/small_animal/bee)) + var/mob/living/critter/small_animal/bee/B = C + B.non_admin_bee_allowed = 1 + if (istype(C)) + C.change_misstep_chance(30) + C.stuttering = 40 + C.show_antag_popup("polymorph") diff --git a/code/modules/antagonists/wizard/wizard.dm b/code/modules/antagonists/wizard/wizard.dm index bb97234ab3ed5..4c46a5247f04b 100644 --- a/code/modules/antagonists/wizard/wizard.dm +++ b/code/modules/antagonists/wizard/wizard.dm @@ -56,7 +56,7 @@ if (!src.vr) H.equip_if_possible(new /obj/item/teleportation_scroll(H), SLOT_L_HAND) - var/obj/item/SWF_uplink/SB = new /obj/item/SWF_uplink(src.vr) + var/obj/item/SWF_uplink/SB = new /obj/item/SWF_uplink(src, src.vr) SB.wizard_key = src.owner.key H.equip_if_possible(SB, SLOT_BELT) @@ -73,7 +73,7 @@ if (!src.vr && !src.pseudo) SPAWN(0) - var/newname = tgui_input_text(H, "You are a Wizard. Would you like to change your name to something else?", "Name change", randomname, max_length = 25) + var/newname = tgui_input_text(H, "You are a Wizard. Would you like to change your name to something else?", "Name change", randomname, max_length = 28) if(newname && newname != randomname) phrase_log.log_phrase("name-wizard", randomname, no_duplicates = TRUE) diff --git a/code/modules/antagonists/wraith/critters/abilities/plaguerat.dm b/code/modules/antagonists/wraith/critters/abilities/plaguerat.dm index 63d115d119716..563db7eb04995 100644 --- a/code/modules/antagonists/wraith/critters/abilities/plaguerat.dm +++ b/code/modules/antagonists/wraith/critters/abilities/plaguerat.dm @@ -80,7 +80,6 @@ ABSTRACT_TYPE(/datum/targetable/critter/plague_rat) current_target = targets[1] M.visible_message(SPAN_COMBAT("<b>[M] begins eating [current_target]!</b>"),\ SPAN_COMBAT("<b>You start eating [current_target]!</b>")) - logTheThing(LOG_DEBUG, src, "Targets = [length(targets)]") onUpdate() ..() @@ -102,9 +101,7 @@ ABSTRACT_TYPE(/datum/targetable/critter/plague_rat) P.visible_message(SPAN_COMBAT("<b>[P] eats [current_target]!</b>"),\ SPAN_COMBAT("<b>You finish eating [current_target]!</b>")) targets -= targets[1] - logTheThing(LOG_DEBUG, src, "Targets = [length(targets)]") qdel(current_target) - logTheThing(LOG_DEBUG, src, "Targets = [length(targets)]") P.eaten_amount ++ if (P.eaten_amount >= P.amount_to_grow) P.grow_up() diff --git a/code/modules/antagonists/wraith/objs/item/spirit_candle.dm b/code/modules/antagonists/wraith/objs/item/spirit_candle.dm index cb15bce688d8b..b7acd205916ff 100644 --- a/code/modules/antagonists/wraith/objs/item/spirit_candle.dm +++ b/code/modules/antagonists/wraith/objs/item/spirit_candle.dm @@ -27,6 +27,7 @@ if ((W.last_spirit_candle_time + (W.forced_haunt_duration + 6 SECONDS)) < TIME) W.last_spirit_candle_time = TIME W.setStatus("corporeal", W.forced_haunt_duration, TRUE) + logTheThing(LOG_COMBAT, W, "is forced to manifest at [log_loc(W)] due to a spirit candle used by [user]") boutput(W, SPAN_ALERT("A malignant spirit pulls you into the physical world! You begin to gather your forces to try and escape to the spirit realm...")) else boutput(user, SPAN_NOTICE("[src] vibrates slightly in your hand. A hostile entity lurks nearby but resisted our attempts to reveal it!")) diff --git a/code/modules/atmospherics/FEA_gas_mixture.dm b/code/modules/atmospherics/FEA_gas_mixture.dm index 2593fd98537f4..2b5024f3f0398 100644 --- a/code/modules/atmospherics/FEA_gas_mixture.dm +++ b/code/modules/atmospherics/FEA_gas_mixture.dm @@ -68,17 +68,15 @@ What are the archived variables for? graphic_archived = graphic /// Process all reactions, return bitfield if notable reaction occurs. -/datum/gas_mixture/proc/react(atom/dump_location) +/datum/gas_mixture/proc/react(atom/dump_location, mult=1) . = 0 //(used by pipe_network and hotspots) var/reaction_rate - - if(src.temperature > 900 && src.toxins > MINIMUM_REACT_QUANTITY && src.carbon_dioxide > MINIMUM_REACT_QUANTITY && src.oxygen_agent_b > MINIMUM_REACT_QUANTITY ) + if(src.temperature > 900 && src.oxygen_agent_b > MINIMUM_REACT_QUANTITY && src.toxins > MINIMUM_REACT_QUANTITY && src.carbon_dioxide > MINIMUM_REACT_QUANTITY) reaction_rate = min(src.carbon_dioxide*0.75, src.toxins*0.25, src.oxygen_agent_b*0.05) - reaction_rate = QUANTIZE(reaction_rate) + reaction_rate = QUANTIZE(reaction_rate) * mult src.carbon_dioxide -= reaction_rate src.oxygen += reaction_rate - src.oxygen_agent_b -= reaction_rate*0.05 src.temperature += (reaction_rate*20000)/HEAT_CAPACITY(src) @@ -89,11 +87,10 @@ What are the archived variables for? if(src.temperature > 900 && src.farts > MINIMUM_REACT_QUANTITY && src.toxins > MINIMUM_REACT_QUANTITY && src.carbon_dioxide > MINIMUM_REACT_QUANTITY) reaction_rate = min(src.carbon_dioxide*0.75, src.toxins*0.25, src.farts*0.05) - reaction_rate = QUANTIZE(reaction_rate) + reaction_rate = QUANTIZE(reaction_rate) * mult src.carbon_dioxide -= reaction_rate src.toxins += reaction_rate - src.farts -= reaction_rate*0.05 src.temperature += (reaction_rate*10000)/HEAT_CAPACITY(src) @@ -101,12 +98,13 @@ What are the archived variables for? src.fuel_burnt = 0 if(src.temperature > FIRE_MINIMUM_TEMPERATURE_TO_EXIST) - if(src.fire()) + if(src.fire(mult)) . |= COMBUSTION_ACTIVE /// * Process fire combustion, pretty much just plasma combustion. /// * Returns: Rough amount of plasma and oxygen used. Inaccurate due to plasma usage lowering. -/datum/gas_mixture/proc/fire() +/datum/gas_mixture/proc/fire(mult=1) + var/energy_released = 0 var/old_heat_capacity = HEAT_CAPACITY(src) @@ -127,6 +125,9 @@ What are the archived variables for? else plasma_burn_rate = (temperature_scale * (src.oxygen / PLASMA_OXYGEN_FULLBURN)) / 4 if(plasma_burn_rate > MINIMUM_REACT_QUANTITY) + plasma_burn_rate *= mult + oxygen_burn_rate *= mult + src.toxins -= QUANTIZE(plasma_burn_rate / 3) // Plasma usage lowered src.oxygen -= QUANTIZE(plasma_burn_rate * oxygen_burn_rate) src.carbon_dioxide += QUANTIZE(plasma_burn_rate / 3) diff --git a/code/modules/atmospherics/machinery/binary/dp_vent_pump.dm b/code/modules/atmospherics/machinery/binary/dp_vent_pump.dm index 715e0d97c73c1..05c1abd4e0e53 100644 --- a/code/modules/atmospherics/machinery/binary/dp_vent_pump.dm +++ b/code/modules/atmospherics/machinery/binary/dp_vent_pump.dm @@ -25,14 +25,20 @@ var/input_pressure_min = 0 /// The maximum pressure to keep our output at. var/output_pressure_max = 0 - var/frequency = 0 + /// Radio frequency to operate on. + var/frequency = null + /// Radio ID we respond to for multicast. var/id = null + /// Radio ID that refers to specifically us. + var/net_id = null /// What bounds to check for. var/pressure_checks = BOUND_EXTERNAL /obj/machinery/atmospherics/binary/dp_vent_pump/New() ..() - MAKE_DEFAULT_RADIO_PACKET_COMPONENT(null, frequency) + if(src.frequency) + MAKE_DEFAULT_RADIO_PACKET_COMPONENT(null, frequency) + src.net_id = generate_net_id(src) /obj/machinery/atmospherics/binary/dp_vent_pump/update_icon() var/turf/T = get_turf(src) @@ -104,73 +110,87 @@ signal.transmission_method = TRANSMISSION_RADIO signal.source = src - signal.data["tag"] = id + signal.data["tag"] = src.id + signal.data["netid"] = src.net_id signal.data["device"] = "ADVP" - signal.data["power"] = on?("on"):("off") - signal.data["direction"] = pump_direction?("release"):("siphon") - signal.data["checks"] = pressure_checks - signal.data["input"] = input_pressure_min - signal.data["output"] = output_pressure_max - signal.data["external"] = external_pressure_bound + signal.data["power"] = src.on?("on"):("off") + signal.data["direction"] = src.pump_direction?("release"):("siphon") + signal.data["checks"] = src.pressure_checks + signal.data["input"] = src.input_pressure_min + signal.data["output"] = src.output_pressure_max + signal.data["external"] = src.external_pressure_bound SEND_SIGNAL(src, COMSIG_MOVABLE_POST_RADIO_PACKET, signal) return TRUE /obj/machinery/atmospherics/binary/dp_vent_pump/receive_signal(datum/signal/signal) - if(signal.data["tag"] && (signal.data["tag"] != id)) - return FALSE + if(!((signal.data["tag"] && (signal.data["tag"] == src.id)) || (signal.data["netid"] && (signal.data["netid"] == src.net_id)))) + if(signal.data["command"] != "broadcast_status") + return FALSE switch(signal.data["command"]) + if("broadcast_status") + SPAWN(0.5 SECONDS) + broadcast_status() + if("power_on") - on = TRUE + src.on = TRUE + . = TRUE if("power_off") - on = FALSE + src.on = FALSE + . = TRUE if("power_toggle") - on = !on + src.on = !on + . = TRUE if("set_direction") var/number = text2num_safe(signal.data["parameter"]) - if(number > 0.5) - pump_direction = RELEASING - else - pump_direction = SIPHONING + src.pump_direction = (number > 0.5) ? RELEASING : SIPHONING + . = TRUE if("set_checks") var/number = round(text2num_safe(signal.data["parameter"]),1) - pressure_checks = number + src.pressure_checks = number + . = TRUE if("purge") - pressure_checks &= ~BOUND_EXTERNAL - pump_direction = SIPHONING + src.pressure_checks &= ~BOUND_EXTERNAL + src.pump_direction = SIPHONING + . = TRUE if("stabalize") - pressure_checks |= BOUND_EXTERNAL - pump_direction = RELEASING + src.pressure_checks |= BOUND_EXTERNAL + src.pump_direction = RELEASING + . = TRUE if("set_input_pressure") var/number = text2num_safe(signal.data["parameter"]) - number = clamp(number, 0, ONE_ATMOSPHERE*50) - input_pressure_min = number + src.input_pressure_min = clamp(number, 0, ONE_ATMOSPHERE*50) + . = TRUE if("set_output_pressure") var/number = text2num_safe(signal.data["parameter"]) - number = clamp(number, 0, ONE_ATMOSPHERE*50) - output_pressure_max = number + src.output_pressure_max = clamp(number, 0, ONE_ATMOSPHERE*50) + . = TRUE if("set_external_pressure") var/number = text2num_safe(signal.data["parameter"]) - number = clamp(number, 0, ONE_ATMOSPHERE*50) - external_pressure_bound = number + src.external_pressure_bound = clamp(number, 0, ONE_ATMOSPHERE*50) + . = TRUE - if(signal.data["tag"]) - SPAWN(0.5 SECONDS) broadcast_status() - UpdateIcon() + if(.) + src.UpdateIcon() + var/turf/intact = get_turf(src) + intact = intact.intact + var/hide_pipe = CHECKHIDEPIPE(src) + flick("[hide_pipe ? "h" : "" ]alert", src) + playsound(src, 'sound/machines/chime.ogg', 25) /obj/machinery/atmospherics/binary/dp_vent_pump/releasing icon_state = "out-map" diff --git a/code/modules/atmospherics/machinery/binary/pump.dm b/code/modules/atmospherics/machinery/binary/pump.dm index b27e6e0aee9d3..d9c195736a5ff 100644 --- a/code/modules/atmospherics/machinery/binary/pump.dm +++ b/code/modules/atmospherics/machinery/binary/pump.dm @@ -11,6 +11,8 @@ Thus, the two variables affect pump operation are set in New(): Higher quantities of this cause more air to be perfected later but overall network volume is also increased as this increases... */ +/// Min pump pressure. +#define MIN_PRESSURE 0 /// Max pump pressure. #define MAX_PRESSURE 149 * ONE_ATMOSPHERE @@ -24,14 +26,20 @@ Thus, the two variables affect pump operation are set in New(): var/on = FALSE var/target_pressure = ONE_ATMOSPHERE - var/frequency = 0 + /// Radio frequency to operate on. + var/frequency = FREQ_PUMP_CONTROL + /// Radio ID we respond to for multicast. var/id = null + /// Radio ID that refers to specifically us. + var/net_id = null var/datum/pump_ui/ui /obj/machinery/atmospherics/binary/pump/New() ..() - MAKE_DEFAULT_RADIO_PACKET_COMPONENT(null, frequency) + if(src.frequency) + MAKE_DEFAULT_RADIO_PACKET_COMPONENT(null, src.frequency) + src.net_id = generate_net_id(src) /obj/machinery/atmospherics/binary/pump/initialize() ..() @@ -81,8 +89,11 @@ Thus, the two variables affect pump operation are set in New(): signal.source = src signal.data["tag"] = src.id + signal.data["netid"] = src.net_id signal.data["device"] = "AGP" signal.data["power"] = src.on ? "on" : "off" + signal.data["min_output"] = MIN_PRESSURE + signal.data["max_output"] = MAX_PRESSURE signal.data["target_output"] = src.target_pressure signal.data["address_tag"] = "pumpcontrol" @@ -92,8 +103,9 @@ Thus, the two variables affect pump operation are set in New(): /obj/machinery/atmospherics/binary/pump/receive_signal(datum/signal/signal) - if(signal.data["tag"] && (signal.data["tag"] != id)) - return FALSE + if(!((signal.data["tag"] && (signal.data["tag"] == src.id)) || (signal.data["netid"] && (signal.data["netid"] == src.net_id)))) + if(signal.data["command"] != "broadcast_status") + return FALSE switch(signal.data["command"]) if("broadcast_status") @@ -101,25 +113,45 @@ Thus, the two variables affect pump operation are set in New(): broadcast_status() if("power_on") - on = TRUE + src.on = TRUE + . = TRUE if("power_off") - on = FALSE + src.on = FALSE + . = TRUE if("power_toggle") - on = !on + src.on = !src.on + . = TRUE if("set_output_pressure") var/number = text2num_safe(signal.data["parameter"]) - number = clamp(number, 0, MAX_PRESSURE) - target_pressure = number + src.target_pressure = clamp(number, MIN_PRESSURE, MAX_PRESSURE) + . = TRUE - if(signal.data["tag"]) - SPAWN(0.5 SECONDS) - broadcast_status() + if("help") + var/datum/signal/help = get_free_signal() + help.transmission_method = TRANSMISSION_RADIO + help.source = src - UpdateIcon() + help.data["info"] = "Command help. \ + broadcast_status - Broadcasts info about self. \ + power_on - Turns on pump. \ + power_off - Turns off pump. \ + power_toggle - Toggles pump. \ + set_output_pressure (parameter: Number) - Sets pressure in kilopascals to parameter. Max at [MAX_PRESSURE] kPA." + + SEND_SIGNAL(src, COMSIG_MOVABLE_POST_RADIO_PACKET, help) + + + if(.) + src.UpdateIcon() + var/turf/intact = get_turf(src) + intact = intact.intact + var/hide_pipe = CHECKHIDEPIPE(src) + flick("[hide_pipe ? "h" : "" ]alert", src) + playsound(src, 'sound/machines/chime.ogg', 25) /obj/machinery/atmospherics/binary/pump/attackby(obj/item/W, mob/user) if(ispulsingtool(W) || iswrenchingtool(W)) @@ -132,7 +164,7 @@ Thus, the two variables affect pump operation are set in New(): /datum/pump_ui/basic_pump_ui value_name = "Target Pressure" value_units = "kPa" - min_value = 0 + min_value = MIN_PRESSURE max_value = MAX_PRESSURE incr_sm = 50 incr_lg = 100 @@ -160,4 +192,5 @@ Thus, the two variables affect pump operation are set in New(): /datum/pump_ui/basic_pump_ui/get_atom() return our_pump +#undef MIN_PRESSURE #undef MAX_PRESSURE diff --git a/code/modules/atmospherics/machinery/binary/volume_pump.dm b/code/modules/atmospherics/machinery/binary/volume_pump.dm index 91b335bc5ae04..d7e8df4d37218 100644 --- a/code/modules/atmospherics/machinery/binary/volume_pump.dm +++ b/code/modules/atmospherics/machinery/binary/volume_pump.dm @@ -13,14 +13,20 @@ var/on = FALSE var/transfer_rate = 200 - var/frequency = 0 + /// Radio frequency to operate on. + var/frequency = null + /// Radio ID we respond to for multicast. var/id = null + /// Radio ID that refers to specifically us. + var/net_id = null var/datum/pump_ui/volume_pump_ui/ui /obj/machinery/atmospherics/binary/volume_pump/New() ..() - MAKE_DEFAULT_RADIO_PACKET_COMPONENT(null, frequency) + if(src.frequency) + MAKE_DEFAULT_RADIO_PACKET_COMPONENT(null, src.frequency) + src.net_id = generate_net_id(src) /obj/machinery/atmospherics/binary/volume_pump/update_icon() if(!(node1&&node2)) @@ -52,6 +58,7 @@ signal.source = src signal.data["tag"] = src.id + signal.data["netid"] = src.net_id signal.data["device"] = "APV" signal.data["power"] = src.on signal.data["transfer_rate"] = src.transfer_rate @@ -65,29 +72,50 @@ src.ui = new/datum/pump_ui/volume_pump_ui(src) /obj/machinery/atmospherics/binary/volume_pump/receive_signal(datum/signal/signal) - if(signal.data["tag"] && (signal.data["tag"] != id)) - return FALSE + if(!((signal.data["tag"] && (signal.data["tag"] == src.id)) || (signal.data["netid"] && (signal.data["netid"] == src.net_id)))) + if(signal.data["command"] != "broadcast_status") + return FALSE switch(signal.data["command"]) + if("broadcast_status") + SPAWN(0.5 SECONDS) + broadcast_status() + if("power_on") - on = TRUE + src.on = TRUE + . = TRUE if("power_off") - on = FALSE + src.on = FALSE + . = TRUE if("power_toggle") - on = !on + src.on = !on + . = TRUE if("set_transfer_rate") var/number = text2num_safe(signal.data["parameter"]) - number = clamp(number, 0, MAX_VOLUME) - src.transfer_rate = number + src.transfer_rate = clamp(number, 0, MAX_VOLUME) + . = TRUE + + if("help") + var/datum/signal/help = get_free_signal() + help.transmission_method = TRANSMISSION_RADIO + help.source = src + + help.data["info"] = "Command help. \ + power_on - Turns on pump. \ + power_off - Turns off pump. \ + power_toggle - Toggles pump. \ + set_transfer_rate (parameter: Number) - Sets transfer rate in liters to parameter. Max at [MAX_VOLUME] L." + + SEND_SIGNAL(src, COMSIG_MOVABLE_POST_RADIO_PACKET, help) - if(signal.data["tag"]) - SPAWN(0.5 SECONDS) - broadcast_status() - UpdateIcon() + if(.) + src.UpdateIcon() + flick("alert", src) + playsound(src, 'sound/machines/chime.ogg', 25) /obj/machinery/atmospherics/binary/volume_pump/attackby(obj/item/W, mob/user) if(ispulsingtool(W)) diff --git a/code/modules/atmospherics/machinery/unary/outlet_injector.dm b/code/modules/atmospherics/machinery/unary/outlet_injector.dm index c092f3be93b55..b773a6e6b2822 100644 --- a/code/modules/atmospherics/machinery/unary/outlet_injector.dm +++ b/code/modules/atmospherics/machinery/unary/outlet_injector.dm @@ -12,15 +12,20 @@ var/injecting = FALSE /// Volume of air to output. var/volume_rate = 50 - - var/frequency = 0 + /// Radio frequency to operate on. + var/frequency = FREQ_FREE + /// Radio ID we respond to for multicast. var/id = null + /// Radio ID that refers to specifically us. + var/net_id = null level = UNDERFLOOR /obj/machinery/atmospherics/unary/outlet_injector/New() ..() - MAKE_DEFAULT_RADIO_PACKET_COMPONENT(null, frequency) + if (src.frequency) + MAKE_DEFAULT_RADIO_PACKET_COMPONENT(null, src.frequency) + src.net_id = generate_net_id(src) /obj/machinery/atmospherics/unary/outlet_injector/update_icon() var/turf/T = get_turf(src) @@ -68,6 +73,7 @@ signal.source = src signal.data["tag"] = src.id + signal.data["netid"] = src.net_id signal.data["device"] = "AO" signal.data["power"] = src.on signal.data["volume_rate"] = src.volume_rate @@ -77,31 +83,58 @@ return TRUE /obj/machinery/atmospherics/unary/outlet_injector/receive_signal(datum/signal/signal) - if(signal.data["tag"] && (signal.data["tag"] != id)) - return FALSE + if(!((signal.data["tag"] && (signal.data["tag"] == src.id)) || (signal.data["netid"] && (signal.data["netid"] == src.net_id)))) + if(signal.data["command"] != "broadcast_status") + return FALSE switch(signal.data["command"]) if("power_on") src.on = TRUE + . = TRUE if("power_off") src.on = FALSE + . = TRUE if("power_toggle") src.on = !on + . = TRUE if("inject") - SPAWN(0) src.inject() + SPAWN(0) + src.inject() + . = TRUE if("set_volume_rate") var/number = text2num_safe(signal.data["parameter"]) number = clamp(number, 0, air_contents.volume) src.volume_rate = number - - if(signal.data["tag"]) - SPAWN(0.5 SECONDS) src.broadcast_status() - UpdateIcon() + . = TRUE + + if("broadcast_status") + SPAWN(0.5 SECONDS) + broadcast_status() + + if("help") + var/datum/signal/help = get_free_signal() + help.transmission_method = TRANSMISSION_RADIO + help.source = src + + help.data["info"] = "Command help. \ + broadcast_status - Broadcasts info about self. \ + power_on - Turns on injector. \ + power_off - Turns off injector. \ + power_toggle - Toggles injector. \ + inject - Injects gas into environment. \ + set_volume_rate (parameter: Number) - Sets rate in liters to parameter. Max at [src.air_contents.volume] L." + + SEND_SIGNAL(src, COMSIG_MOVABLE_POST_RADIO_PACKET, help) + + if(.) + src.UpdateIcon() + flick("alert", src) + playsound(src, 'sound/machines/chime.ogg', 25) /obj/machinery/atmospherics/unary/outlet_injector/hide(var/intact) //to make the little pipe section invisible, the icon changes. var/hide_pipe = CHECKHIDEPIPE(src) diff --git a/code/modules/atmospherics/machinery/unary/vent_pump.dm b/code/modules/atmospherics/machinery/unary/vent_pump.dm index c01e0313079cd..094cf84926f15 100644 --- a/code/modules/atmospherics/machinery/unary/vent_pump.dm +++ b/code/modules/atmospherics/machinery/unary/vent_pump.dm @@ -25,14 +25,17 @@ /// Are we applying the external bound, internal bound, or both? var/pressure_checks = BOUND_EXTERNAL /// Radio frequency to operate on. - var/frequency = 0 - /// Radio ID we go by. + var/frequency = FREQ_FREE + /// Radio ID we respond to for multicast. var/id = null + /// Radio ID that refers to us only. + var/net_id = null /obj/machinery/atmospherics/unary/vent_pump/New() ..() - if(frequency) + if(src.frequency) MAKE_DEFAULT_RADIO_PACKET_COMPONENT(null, frequency) + src.net_id = generate_net_id(src) /obj/machinery/atmospherics/unary/vent_pump/update_icon() var/turf/T = get_turf(src) @@ -85,20 +88,21 @@ return TRUE /obj/machinery/atmospherics/unary/vent_pump/proc/broadcast_status() - if(!id) + if(!src.id) return FALSE var/datum/signal/signal = get_free_signal() signal.transmission_method = TRANSMISSION_RADIO signal.source = src - signal.data["tag"] = id + signal.data["tag"] = src.id + signal.data["netid"] = src.net_id signal.data["device"] = "AVP" - signal.data["power"] = on?("on"):("off") - signal.data["direction"] = pump_direction?("release"):("siphon") - signal.data["checks"] = pressure_checks - signal.data["internal"] = internal_pressure_bound - signal.data["external"] = external_pressure_bound + signal.data["power"] = src.on ? "on": "off" + signal.data["direction"] = src.pump_direction ? "release" : "siphon" + signal.data["checks"] = src.pressure_checks + signal.data["internal"] = src.internal_pressure_bound + signal.data["external"] = src.external_pressure_bound SEND_SIGNAL(src, COMSIG_MOVABLE_POST_RADIO_PACKET, signal) @@ -109,54 +113,91 @@ UpdateIcon() /obj/machinery/atmospherics/unary/vent_pump/receive_signal(datum/signal/signal) - if(signal.data["tag"] && (signal.data["tag"] != id)) - return FALSE + if(!((signal.data["tag"] && (signal.data["tag"] == src.id)) || (signal.data["netid"] && (signal.data["netid"] == src.net_id)))) + if(signal.data["command"] != "broadcast_status") + return FALSE switch(signal.data["command"]) if("power_on") - on = TRUE + src.on = TRUE + . = TRUE if("power_off") - on = FALSE + src.on = FALSE + . = TRUE if("power_toggle") - on = !on + src.on = !src.on + . = TRUE if("set_direction") var/number = text2num_safe(signal.data["parameter"]) - pump_direction = number > 0.5 ? RELEASING : SIPHONING + src.pump_direction = number > 0.5 ? RELEASING : SIPHONING + . = TRUE if("purge") REMOVE_FLAG(pressure_checks, BOUND_EXTERNAL) - pump_direction = SIPHONING + src.pump_direction = SIPHONING + . = TRUE if("end_purge") ADD_FLAG(pressure_checks, BOUND_EXTERNAL) - pump_direction = SIPHONING + src.pump_direction = SIPHONING + . = TRUE if("stabilise") ADD_FLAG(pressure_checks, BOUND_EXTERNAL) - pump_direction = RELEASING + src.pump_direction = RELEASING + . = TRUE if("set_checks") - var/number = round(text2num_safe(signal.data["parameter"]),1) - pressure_checks = number + var/number = clamp(round(text2num_safe(signal.data["parameter"]),1), 0, 3) + src.pressure_checks = number + . = TRUE if("set_internal_pressure") var/number = text2num_safe(signal.data["parameter"]) - number = clamp(number, 0, ONE_ATMOSPHERE*50) - internal_pressure_bound = number + src.internal_pressure_bound = clamp(number, 0, ONE_ATMOSPHERE*50) + . = TRUE if("set_external_pressure") var/number = text2num_safe(signal.data["parameter"]) - number = clamp(number, 0, ONE_ATMOSPHERE*50) - external_pressure_bound = number + src.external_pressure_bound = clamp(number, 0, ONE_ATMOSPHERE*50) + . = TRUE - if("refresh") + if("broadcast_status") SPAWN(0.5 SECONDS) broadcast_status() + if("help") + var/datum/signal/help = get_free_signal() + help.transmission_method = TRANSMISSION_RADIO + help.source = src + + help.data["info"] = "Command help. \ + broadcast_status - Broadcasts info about self. \ + power_on - Turns on vent. \ + power_off - Turns off vent. \ + power_toggle - Toggles vent. \ + set_direction (parameter: Number) - Switches between siphoning (parameter<=0.5) and releasing (parameter>0.5). \ + purge - Switches to siphoning and removes external bounds check. \ + end_purge - Switches to siphoning and adds external bounds check. \ + stabilise - Switches to releasing and adds external bounds check. \ + set_checks (parameter: Bitflag) - Controls bounds check. [BOUND_EXTERNAL] is external bounds. [BOUND_INTERNAL] is internal bouds. \ + set_internal_pressure (parameter: Number) - Sets internal bound to parameter. Max at [ONE_ATMOSPHERE*50]. \ + set_external_pressure (parameter: Number) - Sets external bound to parameter. Max at [ONE_ATMOSPHERE*50]." + + SEND_SIGNAL(src, COMSIG_MOVABLE_POST_RADIO_PACKET, help) + + if(.) + src.UpdateIcon() + var/turf/intact = get_turf(src) + intact = intact.intact + var/hide_pipe = CHECKHIDEPIPE(src) + flick("[hide_pipe ? "h" : "" ]alert", src) + playsound(src, 'sound/machines/chime.ogg', 25) + /obj/machinery/atmospherics/unary/vent_pump/hide(var/intact) //to make the little pipe section invisible, the icon changes. var/hide_pipe = CHECKHIDEPIPE(src) diff --git a/code/modules/atmospherics/machinery/unary/vent_scrubber.dm b/code/modules/atmospherics/machinery/unary/vent_scrubber.dm index 3452c8d30cfdd..5022756730239 100644 --- a/code/modules/atmospherics/machinery/unary/vent_scrubber.dm +++ b/code/modules/atmospherics/machinery/unary/vent_scrubber.dm @@ -10,8 +10,10 @@ desc = "Has a valve and pump attached to it" level = UNDERFLOOR - /// What we go by on radio communications + /// ID we respond to for multicast. var/id = null + /// ID that refers specifically to us. + var/net_id = null /// Frequency we communicate on, usually with air alarms. var/frequency = FREQ_AIR_ALARM_CONTROL /// Are we doing anything at all? @@ -27,8 +29,9 @@ /obj/machinery/atmospherics/unary/vent_scrubber/New() ..() - if(frequency) - MAKE_DEFAULT_RADIO_PACKET_COMPONENT(null, frequency) + if(src.frequency) + MAKE_DEFAULT_RADIO_PACKET_COMPONENT(null, src.frequency) + src.net_id = generate_net_id(src) /obj/machinery/atmospherics/unary/vent_scrubber/initialize() ..() @@ -97,26 +100,54 @@ SET_PIPE_UNDERLAY(src.node, src.dir, "long", issimplepipe(src.node) ? src.node.color : null, hide_pipe) /obj/machinery/atmospherics/unary/vent_scrubber/receive_signal(datum/signal/signal) - if(signal.data["tag"] && (signal.data["tag"] != id)) - return FALSE + if(!((signal.data["tag"] && (signal.data["tag"] == src.id)) || (signal.data["netid"] && (signal.data["netid"] == src.net_id)))) + if(signal.data["command"] != "broadcast_status") + return FALSE switch(signal.data["command"]) if("power_on") - on = TRUE + src.on = TRUE + . = TRUE if("power_off") - on = FALSE + src.on = FALSE + . = TRUE if("power_toggle") - on = !on + src.on = !on + . = TRUE if("set_siphon") - scrubbing = SIPHONING + src.scrubbing = SIPHONING + . = TRUE if("set_scrubbing") - scrubbing = SCRUBBING - - UpdateIcon() + src.scrubbing = SCRUBBING + . = TRUE + + if("help") + var/datum/signal/help = get_free_signal() + help.transmission_method = TRANSMISSION_RADIO + help.source = src + + help.data["info"] = "Command help. \ + power_on - Turns on scrubber. \ + power_off - Turns off scrubber. \ + power_toggle - Toggles scrubber. \ + set_siphon - Begins siphoning all gas. \ + set_scrubbing - Begins scrubbing select gases. \ + set_volume_rate (parameter: Number) - Sets rate in liters to parameter. Max at [src.air_contents.volume] L." + + SEND_SIGNAL(src, COMSIG_MOVABLE_POST_RADIO_PACKET, help) + + + if(.) + src.UpdateIcon() + var/turf/intact = get_turf(src) + intact = intact.intact + var/hide_pipe = CHECKHIDEPIPE(src) + flick("[hide_pipe ? "h" : "" ]alert", src) + playsound(src, 'sound/machines/chime.ogg', 25) /obj/machinery/atmospherics/unary/vent_scrubber/inactive icon_state = "off-map" diff --git a/code/modules/atmospherics/portable/portable_atmospherics.dm b/code/modules/atmospherics/portable/portable_atmospherics.dm index e0a787a698e6f..88709b9ba4b21 100644 --- a/code/modules/atmospherics/portable/portable_atmospherics.dm +++ b/code/modules/atmospherics/portable/portable_atmospherics.dm @@ -42,7 +42,7 @@ process() if(contained) return - if(!connected_port) //only react when pipe_network will ont it do it for you + if(!connected_port) //only react when pipe_network wont it do it for you //Allow for reactions air_contents?.react() //ZeWaka: Fix for null.react() diff --git a/code/modules/chemistry/Chemistry-Dispenser.dm b/code/modules/chemistry/Chemistry-Dispenser.dm index 943b736784d95..aaab2a092a269 100644 --- a/code/modules/chemistry/Chemistry-Dispenser.dm +++ b/code/modules/chemistry/Chemistry-Dispenser.dm @@ -177,6 +177,7 @@ TYPEINFO(/obj/machinery/chem_dispenser) qdel(src) return + proc/eject_card() if (src.user_id) if((BOUNDS_DIST(usr, src) == 0)) @@ -248,10 +249,10 @@ TYPEINFO(/obj/machinery/chem_dispenser) qdel(src) return - proc/remove_distant_beaker() + proc/remove_distant_beaker(force = FALSE) // borgs and people with item arms don't insert the beaker into the machine itself // but whenever something would happen to the dispenser and the beaker is far it should disappear - if(beaker && BOUNDS_DIST(beaker, src) > 0) + if(beaker && (BOUNDS_DIST(beaker, src) > 0 || force)) REMOVE_ATOM_PROPERTY(beaker, PROP_ITEM_IN_CHEM_DISPENSER, src) beaker = null src.UpdateIcon() @@ -437,6 +438,11 @@ TYPEINFO(/obj/machinery/chem_dispenser) src.recording_queue = list() . = TRUE + ui_close(mob/user) + . = ..() + if(src.beaker?.loc != src) + src.remove_distant_beaker(force = TRUE) + /obj/machinery/chem_dispenser/chemical New() ..() diff --git a/code/modules/chemistry/Chemistry-Holder.dm b/code/modules/chemistry/Chemistry-Holder.dm index 8c26e578b6d3e..14487c59ac8b9 100644 --- a/code/modules/chemistry/Chemistry-Holder.dm +++ b/code/modules/chemistry/Chemistry-Holder.dm @@ -99,7 +99,7 @@ proc/chem_helmet_check(mob/living/carbon/human/H, var/what_liquid="hot") proc/set_reagent_temp(var/new_temp = T0C, var/react = 0) src.last_temp = total_temperature - src.total_temperature = new_temp + src.total_temperature = max(new_temp, 0) if (react) temperature_react() handle_reactions() @@ -849,7 +849,7 @@ proc/chem_helmet_check(mob/living/carbon/human/H, var/what_liquid="hot") if (!donotupdate) reagents_changed(1) - if((added_new || check_reactions) && !current_reagent.disposed) + if((added_new || check_reactions) && !QDELETED(current_reagent)) append_possible_reactions(current_reagent.id) //Experimental reaction possibilities if (!donotreact) src.handle_reactions() diff --git a/code/modules/chemistry/Chemistry-Reagents.dm b/code/modules/chemistry/Chemistry-Reagents.dm index a11e9403e331a..b0b2674caa3a9 100644 --- a/code/modules/chemistry/Chemistry-Reagents.dm +++ b/code/modules/chemistry/Chemistry-Reagents.dm @@ -160,11 +160,25 @@ datum if(M.reagents) M.reagents.add_reagent(self.id,volume*touch_modifier,self.data) did_not_react = 0 - if (ishuman(M) && hygiene_value && method == TOUCH) + if (ishuman(M)) var/mob/living/carbon/human/H = M + if (H.mutantrace.aquaphobic && istype(src, /datum/reagent/water)) + animate_shake(H) + if (prob(50)) + H.emote("scream") + else + boutput(H, "<span class='alert'><b>The water! It[pick(" burns"," hurts","'s so terrible","'s ruining your skin"," is your true mortal enemy!")]!</b></span>", group = "aquaphobia") + if (!ON_COOLDOWN(H, "bingus_damage", 3 SECONDS)) + random_burn_damage(H, clamp(0.3 * volume, 4, 20)) if (H.sims) if ((hygiene_value > 0 && !(H.wear_suit || H.w_uniform)) || hygiene_value < 0) - H.sims.affectMotive("Hygiene", volume * hygiene_value) + var/hygiene_restore = hygiene_value + if (H.mutantrace.aquaphobic) + if (istype(src, /datum/reagent/oil)) + hygiene_restore = 3 + else if (istype(src, /datum/reagent/water)) + hygiene_restore = -3 + H.sims.affectMotive("Hygiene", volume * hygiene_restore) if(INGEST) var/datum/ailment_data/addiction/AD = M.addicted_to_reagent(src) diff --git a/code/modules/chemistry/Chemistry-Recipes.dm b/code/modules/chemistry/Chemistry-Recipes.dm index 266bdc8432758..e07d6afeae687 100644 --- a/code/modules/chemistry/Chemistry-Recipes.dm +++ b/code/modules/chemistry/Chemistry-Recipes.dm @@ -2861,7 +2861,7 @@ name = "Cyclopentanol" id = "cyclopentanol" result = "cyclopentanol" - min_temperature = T0C + 275 + min_temperature = T0C + 50 required_reagents = list("acetic_acid" = 1, "ether" = 1, "barium" = 1, "hydrogen" = 1, "oxygen" = 1) result_amount = 3 mix_phrase = "The mixture fizzles into a colorless liquid." @@ -4168,6 +4168,7 @@ id = "LSD" result = "LSD" required_reagents = list("diethylamine" = 1, "space_fungus" = 1) + min_temperature = T0C + 70 result_amount = 3 mix_phrase = "The mixture turns a rather unassuming color and settles." diff --git a/code/modules/chemistry/Chemistry-Tools.dm b/code/modules/chemistry/Chemistry-Tools.dm index 422353cd844b9..46dadb08f570e 100644 --- a/code/modules/chemistry/Chemistry-Tools.dm +++ b/code/modules/chemistry/Chemistry-Tools.dm @@ -194,7 +194,7 @@ proc/ui_describe_reagents(atom/A) /obj/item/reagent_containers/glass name = " " desc = " " - icon = 'icons/obj/chemical.dmi' + icon = 'icons/obj/items/chemistry_glassware.dmi' inhand_image_icon = 'icons/mob/inhand/hand_medical.dmi' icon_state = "null" item_state = "null" @@ -205,6 +205,68 @@ proc/ui_describe_reagents(atom/A) var/shatter_immune = FALSE flags = FPRINT | TABLEPASS | OPENCONTAINER | SUPPRESSATTACK | ACCEPTS_MOUSEDROP_REAGENTS + /// The number of fluid overlay states that this container has. + var/fluid_overlay_states = 0 + /// The icon state that this container should for fluid overlays. + var/container_style = null + /// The scaling that this container's fluid overlays should use. + var/fluid_overlay_scaling = RC_FLUID_OVERLAY_SCALING_LINEAR + + New() + . = ..() + src.container_style ||= src.icon_state + + on_reagent_change() + . = ..() + src.UpdateIcon() + + update_icon() + . = ..() + src.update_fluid_overlays() + + proc/update_fluid_overlays() + if (!src.fluid_overlay_states) + return + + var/fluid_state = src.get_fluid_state() + + if (fluid_state) + var/image/fluid_image = image('icons/obj/items/chemistry_glassware.dmi', "f-[src.container_style]-[fluid_state]") + var/datum/color/average = reagents.get_average_color() + average.a = max(average.a, RC_MINIMUM_REAGENT_ALPHA) + fluid_image.color = average.to_rgba() + src.UpdateOverlays(fluid_image, "fluid_image") + else + src.UpdateOverlays(null, "fluid_image") + + /// Returns the numerical fluid state of this container. + proc/get_fluid_state() + // Show no fluid state only if the container is completely empty. + if (src.reagents.total_volume <= 0) + return 0 + + // Show the last fluid state only if the container is full. + if (src.reagents.total_volume >= src.reagents.maximum_volume) + return src.fluid_overlay_states + + var/normalised_fluid_height = 0 + var/normalised_volume = src.reagents.total_volume / src.reagents.maximum_volume + switch (src.fluid_overlay_scaling) + // Volume of liquid will be directly proportional to height, so setting total volume to 1, the normalised height will be equal to the ratio. + if (RC_FLUID_OVERLAY_SCALING_LINEAR) + normalised_fluid_height = normalised_volume + + // Vₛ = volume of sphere, r = radius of sphere, Vₗ = volume of liquid inside of sphere, h = height of liquid. + // `Vₗ = ∫ π(r² - (z - r)²) dx` with lower and upper limits of 0 and h respectively gives the equation `Vₗ = πh²(r - h/3)`. + // `Vₗ = πh²(r - h/3)` is very closely approximated by `Vₗ = -0.5Vₛ(cos(h(π / 2r)) - 1)` for 0 <= h <= 2r. + // This permits us to efficiently solve for h without the need for the cubic formula: `h = (2r / π) * arccos(1 - 2(Vₗ / Vₛ))` + // Setting Vₛ = 1 and normalising h to a range of 0-1 gives: `h = arccos(1 - 2Vₗ) / π` + // Converting from radians to degrees: `h = arccos(1 - 2Vₗ) / 180` + if (RC_FLUID_OVERLAY_SCALING_SPHERICAL) + normalised_fluid_height = arccos(1 - (2 * normalised_volume)) / 180 + + return clamp(round(normalised_fluid_height * src.fluid_overlay_states, 1), 1, src.fluid_overlay_states - 1) + // this proc is a mess ow afterattack(obj/target, mob/user , flag) user.lastattacked = target @@ -521,6 +583,19 @@ proc/ui_describe_reagents(atom/A) if(..() && !GET_ATOM_PROPERTY(src, PROP_ITEM_IN_CHEM_DISPENSER)) return 1 + get_chemical_effect_position() + switch(src.container_style) + if("beaker") + return 4 + if("large_beaker") + return 9 + if("conical_flask") + return 9 + if("round_flask") + return 9 + if("large_flask") + return 10 + /* =================================================== */ /* -------------------- Sub-Types -------------------- */ /* =================================================== */ @@ -673,7 +748,6 @@ proc/ui_describe_reagents(atom/A) /obj/item/reagent_containers/glass/dispenser name = "reagent glass" desc = "A reagent glass." - icon = 'icons/obj/chemical.dmi' icon_state = "beaker" initial_volume = 50 amount_per_transfer_from_this = 10 @@ -683,8 +757,7 @@ proc/ui_describe_reagents(atom/A) /obj/item/reagent_containers/glass/large name = "large reagent glass" desc = "A large reagent glass." - icon = 'icons/obj/chemical.dmi' - icon_state = "beakerlarge" + icon_state = "large_beaker" item_state = "beaker" rc_flags = RC_SCALE | RC_VISIBLE | RC_SPECTRO amount_per_transfer_from_this = 10 @@ -692,6 +765,7 @@ proc/ui_describe_reagents(atom/A) /obj/item/reagent_containers/glass/dispenser/surfactant name = "reagent glass (surfactant)" + icon = 'icons/obj/chemical.dmi' icon_state = "liquid" initial_reagents = list("fluorosurfactant"=20) @@ -703,7 +777,7 @@ proc/ui_describe_reagents(atom/A) /obj/item/beaker_lid name = "beaker lid" desc = "A one-size fits all beaker lid, capable of an airtight seal on any compatible beaker." - icon = 'icons/obj/chemical.dmi' + icon = 'icons/obj/items/chemistry_glassware.dmi' icon_state = "lid" w_class = W_CLASS_TINY @@ -714,7 +788,7 @@ proc/ui_describe_reagents(atom/A) /obj/item/reagent_containers/glass/condenser name = "chemical condenser" desc = "A set of glass tubes useful for seperating reactants from products. Can be hooked up to many types of containers." - icon = 'icons/obj/chemical.dmi' + icon = 'icons/obj/items/chemistry_glassware.dmi' icon_state = "condenser" amount_per_transfer_from_this = 10 incompatible_with_chem_dispensers = TRUE //could maybe be ok? idk @@ -723,10 +797,9 @@ proc/ui_describe_reagents(atom/A) object_flags = FPRINT | OPENCONTAINER | SUPPRESSATTACK initial_volume = 100 accepts_lid = TRUE - //prefix for fluid icon state - var/fluid_prefix = "condenser" + fluid_overlay_states = 5 + container_style = "condenser" var/list/connected_containers = list() //! the containers currently connected to the condenser - var/image/fluid_image = null var/max_amount_of_containers = 4 mouse_drop(atom/over_object, src_location, over_location) @@ -753,22 +826,6 @@ proc/ui_describe_reagents(atom/A) boutput(user, SPAN_ALERT("You remove all connections to the [src.name].")) ..() - on_reagent_change() - ..() - src.UpdateIcon() - - update_icon() - src.UpdateOverlays(null, "fluid_image") - if (reagents.total_volume) - var/fluid_state = round(clamp((src.reagents.total_volume / src.reagents.maximum_volume * 5 + 1), 1, 5)) - if (!src.fluid_image) - src.fluid_image = image(src.icon, "fluid-[fluid_prefix][fluid_state]", -1) - else - src.fluid_image.icon_state = "fluid-[fluid_prefix][fluid_state]" - var/datum/color/average = reagents.get_average_color() - src.fluid_image.color = average.to_rgba() - src.UpdateOverlays(src.fluid_image, "fluid_image") - proc/try_adding_container(var/obj/container, var/mob/user) if (!istype(src.loc, /turf/) || !istype(container.loc, /turf/)) //if the condenser or container isn't on the floor you cannot hook it up return @@ -843,11 +900,11 @@ proc/ui_describe_reagents(atom/A) fractional name = "fractional condenser" desc = "A set of glass tubes, conveniently capable of splitting the outputs of more advanced reactions. Can be hooked up to many types of containers." + icon_state = "condenser_fractional" + container_style = "condenser_fractional" max_amount_of_containers = 4 /// orders the output containers, so key 1 = condenser output 1 var/container_order[4] - icon_state = "condenser_fractional" - fluid_prefix = "condenser_fractional" add_reagents_to_containers(reagent, amount, sdata, temp_new, donotreact, donotupdate, priority) var/obj/chosen_container diff --git a/code/modules/chemistry/Reagents-FoodDrink.dm b/code/modules/chemistry/Reagents-FoodDrink.dm index 68658a419d0b7..8f916d39f6a48 100644 --- a/code/modules/chemistry/Reagents-FoodDrink.dm +++ b/code/modules/chemistry/Reagents-FoodDrink.dm @@ -407,9 +407,15 @@ datum fooddrink/alcoholic/wine/white name = "white wine" id = "white_wine" - fluid_r = 252 - fluid_g = 168 - fluid_b = 177 + fluid_r = 255 + fluid_g = 229 + fluid_b = 189 + alch_strength = 0.13 + depletion_rate = 0.7 + description = "An alcoholic beverage derived from white grapes." + reagent_state = LIQUID + taste = "dry" + viscosity = 0.3 fooddrink/alcoholic/champagne name = "champagne" diff --git a/code/modules/chemistry/Reagents-Misc.dm b/code/modules/chemistry/Reagents-Misc.dm index b32a33de648cc..14d920164a4b8 100644 --- a/code/modules/chemistry/Reagents-Misc.dm +++ b/code/modules/chemistry/Reagents-Misc.dm @@ -1307,9 +1307,12 @@ datum if (method == TOUCH) if (isrobot(M)) var/mob/living/silicon/robot/R = M - R.add_oil(volume * 2) + R.changeStatus("freshly_oiled", (volume * 5)) // You need at least 30u to get max duration boutput(R, SPAN_NOTICE("Your joints and servos begin to run more smoothly.")) - else boutput(M, SPAN_ALERT("You feel greasy and gross.")) + else if (ishuman(M)) + var/mob/living/carbon/human/H = M + if (!H.mutantrace.aquaphobic) + boutput(M, "<span class='alert'>You feel greasy and gross.</span>") return @@ -2602,12 +2605,14 @@ datum if(M) boutput(M, SPAN_ALERT("You feel yourself fading away.")) M.alpha = 0 + APPLY_ATOM_PROPERTY(M, PROP_MOB_HIDE_ICONS, src.id) if(effect_length > 75) M.take_brain_damage(10) // there! SPAWN(effect_length * 10) if(M.alpha != 255) boutput(M, SPAN_NOTICE("You feel yourself returning back to normal. Phew!")) M.alpha = 255 + REMOVE_ATOM_PROPERTY(M, PROP_MOB_HIDE_ICONS, src.id) do_overdose(var/severity, var/mob/living/M, var/mult = 1) var/effect = ..(severity, M) @@ -3210,11 +3215,10 @@ datum if (!ishuman(M)) return if (method == INGEST) if (M.mind) - var/mob/living/carbon/human/H = M - if (istype(H.mutantrace, /datum/mutantrace/vampiric_thrall)) - var/datum/mutantrace/vampiric_thrall/V = H.mutantrace + var/datum/abilityHolder/vampiric_thrall/thrallHolder = M.get_ability_holder(/datum/abilityHolder/vampiric_thrall) + if (thrallHolder) var/bloodget = volume_passed / 4 - V.blood_points += bloodget + thrallHolder.points += bloodget holder.del_reagent(src.id) if (isvampire(M)) diff --git a/code/modules/chemistry/chem_requester.dm b/code/modules/chemistry/chem_requester.dm index ad360f10d3f3b..4cb5fb37ef623 100644 --- a/code/modules/chemistry/chem_requester.dm +++ b/code/modules/chemistry/chem_requester.dm @@ -109,7 +109,7 @@ var/list/datum/chem_request/chem_requests = list() chem_requests["[src.request.id]"] = src.request logTheThing(LOG_STATION, src, "[constructTarget(ui.user)] placed a chemical request for [src.request.volume] units of [src.request.reagent_id] using [src.request.requester_name]'s ID at [log_loc(src)], notes: \"[src.request.note]\"") var/datum/signal/pdaSignal = get_free_signal() - pdaSignal.data = list("address_1"="00000000", "command"="text_message", "sender_name"="RESEARCH-MAILBOT", "group"=list(MGD_SCIENCE), "sender"="00000000", "message"="Notification: new chemical request received.") + pdaSignal.data = list("address_1"="00000000", "command"="text_message", "sender_name"="RESEARCH-MAILBOT", "group"=list(MGD_SCIENCE), "sender"="00000000", "message"="Notification: new chemical request received. [src.request.volume]u of [src.request.reagent_name] requested by [src.request.requester_name].") radio_controller.get_frequency(FREQ_PDA).post_packet_without_source(pdaSignal) src.request = new . = TRUE diff --git a/code/modules/chemistry/tools/beakers.dm b/code/modules/chemistry/tools/beakers.dm index 4c02564195292..a810bd94a11e1 100644 --- a/code/modules/chemistry/tools/beakers.dm +++ b/code/modules/chemistry/tools/beakers.dm @@ -6,36 +6,19 @@ /obj/item/reagent_containers/glass/beaker name = "beaker" desc = "A beaker. Can hold up to 50 units." - icon = 'icons/obj/chemical.dmi' + icon = 'icons/obj/items/chemistry_glassware.dmi' inhand_image_icon = 'icons/mob/inhand/hand_medical.dmi' icon_state = "beaker" item_state = "beaker" initial_volume = 50 - var/image/fluid_image - var/icon_style = "beaker" accepts_lid = TRUE rc_flags = RC_SCALE | RC_VISIBLE | RC_SPECTRO object_flags = NO_GHOSTCRITTER - - on_reagent_change() - ..() - src.UpdateIcon() + fluid_overlay_states = 7 + container_style = "beaker" update_icon() - src.underlays = null - if (reagents.total_volume) - var/fluid_state = round(clamp((src.reagents.total_volume / src.reagents.maximum_volume * 5 + 1), 1, 5)) - if (!src.fluid_image) - src.fluid_image = image(src.icon, "fluid-[src.icon_style][fluid_state]", -1) - else - src.fluid_image.icon_state = "fluid-[src.icon_style][fluid_state]" - src.icon_state = "[src.icon_style][fluid_state]" - var/datum/color/average = reagents.get_average_color() - src.fluid_image.color = average.to_rgba() - src.underlays += src.fluid_image - else - src.icon_state = src.icon_style - + . = ..() if (istype(src.master,/obj/item/assembly)) var/obj/item/assembly/A = src.master A.c_state(1) @@ -87,28 +70,17 @@ ..(A, user) - get_chemical_effect_position() - switch(icon_style) - if("beaker") - return 4 - if("beakerlarge") - return 9 - if("eflask") - return 15 - if("roundflask") - return 16 - if("flask") - return 18 - /* =================================================== */ /* -------------------- Sub-Types -------------------- */ /* =================================================== */ /obj/item/reagent_containers/glass/beaker/cryoxadone name = "beaker (cryoxadone)" - icon_state = "roundflask" - icon_style = "roundflask" - initial_reagents = list("cryoxadone"=40) + icon_state = "round_flask" + initial_reagents = list("cryoxadone" = 40) + fluid_overlay_states = 8 + container_style = "round_flask" + fluid_overlay_scaling = RC_FLUID_OVERLAY_SCALING_SPHERICAL /obj/item/reagent_containers/glass/beaker/epinephrine name = "beaker (epinephrine)" @@ -133,14 +105,24 @@ /obj/item/reagent_containers/glass/beaker/large name = "large beaker" desc = "A large beaker. Can hold up to 100 units." - icon_state = "beakerlarge" + icon_state = "large_beaker" initial_volume = 100 - icon_style = "beakerlarge" + fluid_overlay_states = 9 + container_style = "large_beaker" /* =================================================== */ /* -------------------- Sub-Types -------------------- */ /* =================================================== */ +/obj/item/reagent_containers/glass/beaker/large/round + name = "round-bottom flask" + desc = "A large round-bottom flask, for all your chemistry needs." + icon_state = "large_flask" + item_state = "large_flask" + fluid_overlay_states = 11 + container_style = "large_flask" + fluid_overlay_scaling = RC_FLUID_OVERLAY_SCALING_SPHERICAL + /obj/item/reagent_containers/glass/beaker/large/epinephrine name = "epinephrine reserve tank" initial_reagents = "epinephrine" @@ -210,41 +192,24 @@ /obj/item/reagent_containers/glass/flask name = "flask" desc = "Looks surprisingly robust." - icon = 'icons/obj/chemical.dmi' + icon = 'icons/obj/items/chemistry_glassware.dmi' inhand_image_icon = 'icons/mob/inhand/hand_medical.dmi' - icon_state = "eflask" + icon_state = "conical_flask" item_state = "flask" - var/icon_style = "eflask" rc_flags = RC_SPECTRO | RC_FULLNESS | RC_VISIBLE initial_volume = 15 + accepts_lid = TRUE + fluid_overlay_states = 8 + container_style = "conical_flask" var/smashed = 0 var/shard_amt = 1 - var/image/fluid_image - - on_reagent_change() - ..() - src.UpdateIcon() - - update_icon() //updates icon based on fluids inside - src.underlays = null - if (src.reagents && src.reagents.total_volume) - var/fluid_state = round(clamp((src.reagents.total_volume / src.reagents.maximum_volume * 5 + 1), 1, 5)) - var/datum/color/average = reagents.get_average_color() - var/average_rgb = average.to_rgba() - src.icon_state = "[src.icon_style][fluid_state]" - if (!src.fluid_image) - src.fluid_image = image('icons/obj/chemical.dmi', "fluid-[icon_style][fluid_state]", -1) - else - src.fluid_image.icon_state = "fluid-[src.icon_style][fluid_state]" - src.fluid_image.color = average_rgb - src.underlays += fluid_image - else - src.icon_state = src.icon_style /obj/item/reagent_containers/glass/flask/round name = "round flask" - icon_state = "roundflask" - icon_style = "roundflask" + icon_state = "round_flask" + fluid_overlay_states = 8 + container_style = "round_flask" + fluid_overlay_scaling = RC_FLUID_OVERLAY_SCALING_SPHERICAL /obj/item/reagent_containers/glass/flask/black_powder //prefab shit initial_reagents = "blackpowder" @@ -254,9 +219,10 @@ desc = "You feel strangely warm and relaxed just looking at it." icon = 'icons/misc/janstuff.dmi' icon_state = "heartbottle" - icon_style = "heartbottle" initial_volume = 50 initial_reagents = "love" + var/icon_style = "heartbottle" + var/image/fluid_image update_icon() //updates icon based on fluids inside src.underlays = null diff --git a/code/modules/chemistry/tools/bombs.dm b/code/modules/chemistry/tools/bombs.dm index f19c187bb314c..87d15227d13c5 100644 --- a/code/modules/chemistry/tools/bombs.dm +++ b/code/modules/chemistry/tools/bombs.dm @@ -58,6 +58,7 @@ prox_check() /obj/item/assembly/chem_bomb/dropped() + . = ..() if (!istype(src.triggering_device, /obj/item/device/prox_sensor)) return SPAWN( 0 ) diff --git a/code/modules/chemistry/tools/bottles.dm b/code/modules/chemistry/tools/bottles.dm index c76f1b4324328..d6e937326d188 100644 --- a/code/modules/chemistry/tools/bottles.dm +++ b/code/modules/chemistry/tools/bottles.dm @@ -6,42 +6,25 @@ /obj/item/reagent_containers/glass/bottle name = "bottle" desc = "A small bottle." - icon = 'icons/obj/chemical.dmi' - icon_state = "bottle1" + icon = 'icons/obj/items/chemistry_glassware.dmi' + icon_state = "bottle_1" item_state = "atoxinbottle" initial_volume = 30 - var/image/fluid_image - var/bottle_style = null rc_flags = RC_FULLNESS | RC_VISIBLE | RC_SPECTRO amount_per_transfer_from_this = 10 flags = FPRINT | TABLEPASS | OPENCONTAINER | SUPPRESSATTACK object_flags = NO_GHOSTCRITTER + fluid_overlay_states = 6 + var/bottle_style = null New() if (!src.bottle_style) src.bottle_style = "[rand(1,4)]" - src.UpdateIcon() - ..() - on_reagent_change() - ..() - src.UpdateIcon() + . = ..() - update_icon() - ..() - if (!(findtext(src.icon_state, "bottle", 1, length("bottle") + 1))) - return - src.underlays = null - if (reagents?.total_volume) - var/datum/color/average = reagents.get_average_color() - var/fluid_state = round(clamp((((src.reagents.total_volume / src.reagents.maximum_volume) * 4) + 1), 1, 4)) - src.fluid_image = image('icons/obj/chemical.dmi', "fluid-bottle[bottle_style]-[fluid_state]", -1) - src.icon_state = "bottle[bottle_style]-[fluid_state]" - src.fluid_image.color = average.to_rgba() - src.underlays += src.fluid_image - else - src.icon_state = "bottle[bottle_style]" - signal_event("icon_updated") + src.container_style = "bottle_[src.bottle_style]" + src.UpdateIcon() /* =================================================== */ /* -------------------- Sub-Types -------------------- */ @@ -165,8 +148,10 @@ /obj/item/reagent_containers/glass/bottle/syringe_canister name = "poison canister" desc = "A large fluid-filled canister designed to fill a syringe gun." + icon = 'icons/obj/chemical.dmi' icon_state = "syringe_canister" initial_volume = 90 + fluid_overlay_states = 0 curare initial_reagents = "curare" @@ -285,10 +270,12 @@ /obj/item/reagent_containers/glass/bottle/ethanol name = "rubbing alcohol" desc = "Isopropriate, or rubbing alcohol. Please don't drink it." + icon = 'icons/obj/chemical.dmi' icon_state = "plasticbottle" initial_volume = 50 amount_per_transfer_from_this = 5 initial_reagents = "ethanol" + fluid_overlay_states = 0 /obj/item/reagent_containers/glass/bottle/mercury name = "mercury bottle" @@ -305,9 +292,11 @@ /obj/item/reagent_containers/glass/bottle/chemical name = "chemical bottle" desc = "A reagent storage bottle." + icon = 'icons/obj/chemical.dmi' icon_state = "reagent_bottle" initial_volume = 50 amount_per_transfer_from_this = 5 + fluid_overlay_states = 0 /obj/item/reagent_containers/glass/bottle/chemical/plastic name = "plastic chemical bottle" @@ -321,25 +310,31 @@ /obj/item/reagent_containers/glass/bottle/oil name = "oil bottle" desc = "A reagent storage bottle." + icon = 'icons/obj/chemical.dmi' icon_state = "reagent_bottle" initial_volume = 50 amount_per_transfer_from_this = 5 + fluid_overlay_states = 0 initial_reagents = "oil" /obj/item/reagent_containers/glass/bottle/phenol name = "phenol bottle" desc = "A reagent storage bottle." + icon = 'icons/obj/chemical.dmi' icon_state = "reagent_bottle" initial_volume = 50 amount_per_transfer_from_this = 5 + fluid_overlay_states = 0 initial_reagents = "phenol" /obj/item/reagent_containers/glass/bottle/acetone name = "acetone bottle" desc = "A reagent storage bottle." + icon = 'icons/obj/chemical.dmi' icon_state = "reagent_bottle" initial_volume = 50 amount_per_transfer_from_this = 5 + fluid_overlay_states = 0 initial_reagents = "acetone" large @@ -355,9 +350,11 @@ /obj/item/reagent_containers/glass/bottle/ammonia name = "ammonia bottle" desc = "A reagent storage bottle." + icon = 'icons/obj/chemical.dmi' icon_state = "reagent_bottle" initial_volume = 50 amount_per_transfer_from_this = 5 + fluid_overlay_states = 0 initial_reagents = "ammonia" large @@ -373,17 +370,21 @@ /obj/item/reagent_containers/glass/bottle/diethylamine name = "diethylamine bottle" desc = "A reagent storage bottle." + icon = 'icons/obj/chemical.dmi' icon_state = "reagent_bottle" initial_volume = 50 amount_per_transfer_from_this = 5 + fluid_overlay_states = 0 initial_reagents = "diethylamine" /obj/item/reagent_containers/glass/bottle/acid name = "acid bottle" desc = "A reagent storage bottle." + icon = 'icons/obj/chemical.dmi' icon_state = "reagent_bottle" initial_volume = 50 amount_per_transfer_from_this = 5 + fluid_overlay_states = 0 initial_reagents = "acid" large @@ -394,9 +395,11 @@ /obj/item/reagent_containers/glass/bottle/formaldehyde name = "embalming fluid bottle" desc = "A reagent storage bottle." + icon = 'icons/obj/chemical.dmi' icon_state = "reagent_bottle" initial_volume = 50 amount_per_transfer_from_this = 5 + fluid_overlay_states = 0 initial_reagents = "formaldehyde" /* ============================================== */ @@ -424,6 +427,7 @@ /obj/item/reagent_containers/glass/bottle/cleaner name = "cleaner bottle" desc = "A bottle filled with cleaning fluid." + icon = 'icons/obj/chemical.dmi' icon_state = "largebottle-labeled" initial_volume = 100 initial_reagents = "cleaner" diff --git a/code/modules/chemistry/tools/dispensers.dm b/code/modules/chemistry/tools/dispensers.dm index 51df6f237a97c..c89879e2de337 100644 --- a/code/modules/chemistry/tools/dispensers.dm +++ b/code/modules/chemistry/tools/dispensers.dm @@ -203,6 +203,8 @@ TYPEINFO(/obj/reagent_dispensers/watertank/fountain) anchored = ANCHORED deconstruct_flags = DECON_SCREWDRIVER | DECON_CROWBAR capacity = 500 + _health = 250 + _max_health = 250 var/has_tank = 1 @@ -297,6 +299,12 @@ TYPEINFO(/obj/reagent_dispensers/watertank/fountain) user.show_text("That was the last cup!", "red") src.UpdateIcon() + bullet_act(obj/projectile/P) + src.changeHealth(-P.power * P.proj_data.ks_ratio) + + onDestroy() + src.smash() + drugged New() ..() diff --git a/code/modules/chemistry/tools/food_and_drink.dm b/code/modules/chemistry/tools/food_and_drink.dm index 6fc5c71ee6b5d..2eda73688e02e 100644 --- a/code/modules/chemistry/tools/food_and_drink.dm +++ b/code/modules/chemistry/tools/food_and_drink.dm @@ -382,28 +382,7 @@ ABSTRACT_TYPE(/obj/item/reagent_containers/food/snacks) if (doseed) var/datum/plant/stored = P.planttype if (istype(stored) && !stored.isgrass) - var/obj/item/seed/S - if (stored.unique_seed) - S = new stored.unique_seed - S.set_loc(consumer.loc) - else - S = new /obj/item/seed - S.set_loc(consumer.loc) - S.removecolor() - - var/datum/plantgenes/DNA = P.plantgenes - var/datum/plantgenes/PDNA = S.plantgenes - if (!stored.hybrid && !stored.unique_seed) - S.generic_seed_setup(stored, TRUE) - HYPpassplantgenes(DNA,PDNA) - if (stored.hybrid) - var/plantType = stored.type - var/datum/plant/hybrid = new plantType(S) - for (var/V in stored.vars) - if (issaved(stored.vars[V]) && V != "holder") - hybrid.vars[V] = stored.vars[V] - S.planttype = hybrid - S.plant_seed_color(stored.seedcolor) + HYPgenerateseedcopy(SRCDNA, stored, P.generation, consumer.loc) consumer.visible_message(SPAN_NOTICE("<b>[consumer]</b> spits out a seed."),\ SPAN_NOTICE("You spit out a seed.")) if(src.dropped_item) @@ -1436,17 +1415,20 @@ ADMIN_INTERACT_PROCS(/obj/item/reagent_containers/food/drinks/drinkingglass, pro if(!istype(target, /obj/table) || src.cant_drop) return ..() var/obj/table/target_table = target - var/obj/table/source_table = locate() in get_step(user, user.dir) - if(isnull(source_table)) - for(var/dir in cardinal) - source_table = locate() in get_step(user, dir) - if(!isnull(source_table)) - user.set_dir(dir) - break + var/obj/table/source_table = null + var/obj/table/candidate_table = null + var/dist = INFINITY + for(var/dir in cardinal) + candidate_table = locate() in get_step(user, dir) + if(GET_MANHATTAN_DIST(candidate_table, target_table) < dist) + source_table = candidate_table + dist = GET_MANHATTAN_DIST(source_table, target_table) + if(isnull(source_table)) return if(!can_reach(user, source_table)) return + user.set_dir(get_dir(user, source_table)) if("icon-x" in params) src.pixel_x = text2num(params["icon-x"]) - 16 if("icon-y" in params) @@ -1657,18 +1639,22 @@ ADMIN_INTERACT_PROCS(/obj/item/reagent_containers/food/drinks/drinkingglass, pro src.amount_per_transfer_from_this = 15 src.gulp_size = 15 src.initial_volume = 15 + src.reagents.maximum_volume = 15 if ("wine") src.name = "wine glass" src.icon_state = "glass-wine" src.initial_volume = 30 + src.reagents.maximum_volume = 30 if ("cocktail") src.name = "cocktail glass" src.icon_state = "glass-cocktail" src.initial_volume = 20 + src.reagents.maximum_volume = 20 if ("flute") src.name = "champagne flute" src.icon_state = "glass-flute" src.initial_volume = 20 + src.reagents.maximum_volume = 20 /obj/item/reagent_containers/food/drinks/drinkingglass/random_style/filled @@ -1747,6 +1733,14 @@ ADMIN_INTERACT_PROCS(/obj/item/reagent_containers/food/drinks/drinkingglass, pro "mojito", "cremedementhe", "grasshopper", "freeze", "limeade", "juice_peach", "juice_banana") +/obj/item/reagent_containers/food/drinks/drinkingglass/icewater + New() + ..() + SPAWN(0) + if (src.reagents) + src.reagents.add_reagent("ice", 15, null, T0C) + src.reagents.add_reagent("water", 35, null, T0C) + /obj/item/reagent_containers/food/drinks/duo name = "red duo cup" desc = "Can't imagine a party without a few dozen these on the lawn afterward." diff --git a/code/modules/chemistry/tools/iv_drips.dm b/code/modules/chemistry/tools/iv_drips.dm index 1edbf1ece3147..71df2d12fd1ee 100644 --- a/code/modules/chemistry/tools/iv_drips.dm +++ b/code/modules/chemistry/tools/iv_drips.dm @@ -192,12 +192,14 @@ proc/start_transfusion() src.in_use = 1 processing_items |= src + APPLY_ATOM_PROPERTY(patient, PROP_MOB_BLOOD_ABSORPTION_RATE, src, 2) if (src.stand) src.stand.UpdateIcon() proc/stop_transfusion() processing_items -= src src.in_use = 0 + REMOVE_ATOM_PROPERTY(patient, PROP_MOB_BLOOD_ABSORPTION_RATE, src) src.patient = null if (src.stand) src.stand.UpdateIcon() diff --git a/code/lists/ckey_configs.dm b/code/modules/config/ckey_configs.dm similarity index 100% rename from code/lists/ckey_configs.dm rename to code/modules/config/ckey_configs.dm diff --git a/code/modules/disposals/conveyor.dm b/code/modules/disposals/conveyor.dm index 3c93914f54a65..ec15bee25e9e1 100644 --- a/code/modules/disposals/conveyor.dm +++ b/code/modules/disposals/conveyor.dm @@ -49,6 +49,10 @@ TYPEINFO(/obj/machinery/conveyor) { /// list of conveyor_switches that have us in their conveyors list var/list/linked_switches + New() + . = ..() + APPLY_ATOM_PROPERTY(src, PROP_ATOM_DO_LIQUID_CLICKS, src) + // for all your mapping needs! /obj/machinery/conveyor/NE dir = NORTH diff --git a/code/modules/disposals/disposal.dm b/code/modules/disposals/disposal.dm index d434663533ddb..5fc2227cc31c3 100644 --- a/code/modules/disposals/disposal.dm +++ b/code/modules/disposals/disposal.dm @@ -1763,7 +1763,7 @@ TYPEINFO(/obj/item/reagent_containers/food/snacks/einstein_loaf) mouse_drop(obj/O, null, var/src_location, var/control_orig, var/control_new, var/params) - if(!isliving(usr)) + if(!isliving(usr) || isintangible(usr)) return if(istype(O, /obj/item/mechanics) && O.level == OVERFLOOR) diff --git a/code/modules/disposals/disposal_chute.dm b/code/modules/disposals/disposal_chute.dm index 77c68ee4d1aa6..a3e5268f3400c 100644 --- a/code/modules/disposals/disposal_chute.dm +++ b/code/modules/disposals/disposal_chute.dm @@ -231,6 +231,16 @@ ADMIN_INTERACT_PROCS(/obj/machinery/disposal, proc/flush, proc/eject) if (GET_COOLDOWN(MO, "PipeEject")) return + if (isliving(MO)) + var/mob/living/mobtarget = MO + if (mobtarget.buckled || isAI(mobtarget)) + return + + if (istype(src, /obj/machinery/disposal/mail)) + //Is this mob allowed to ride mailchutes? + if (!mobtarget.canRideMailchutes()) + return + if(isitem(MO)) var/obj/item/I = MO I.set_loc(src) diff --git a/code/modules/disposals/scrap.dm b/code/modules/disposals/scrap.dm index 4b897d53faa16..4b2978ee7b8af 100644 --- a/code/modules/disposals/scrap.dm +++ b/code/modules/disposals/scrap.dm @@ -239,7 +239,7 @@ // when dropped, try to make a pile if scrap is already there /obj/item/scrap/dropped() - + . = ..() SPAWN(0.2 SECONDS) // delay to allow drop postprocessing (since src may be destroyed) for(var/obj/item/scrap/S in oview(0,src)) // excludes src itself S.add_scrap(src) diff --git a/code/modules/economy/persistent_bank.dm b/code/modules/economy/persistent_bank.dm index a825b90c44be1..60b9991d336ed 100644 --- a/code/modules/economy/persistent_bank.dm +++ b/code/modules/economy/persistent_bank.dm @@ -175,7 +175,7 @@ if (purchase.Create(src)) boutput( src, SPAN_NOTICE("<b>[purchase.name] equipped successfully.</b>") ) else - boutput( src, SPAN_NOTICE("<b>[purchase.name] is not available for the job you rolled. It will not be billed.</b>") ) + boutput( src, SPAN_NOTICE("<b>[purchase.name] is not available for the job you rolled. It will be refunded.</b>") ) src.client.add_to_bank(purchase.cost) src.client.set_last_purchase(null) return diff --git a/code/modules/economy/persistent_bank_purchases.dm b/code/modules/economy/persistent_bank_purchases.dm index d8121e9d4ec75..b46e6bed6c21c 100644 --- a/code/modules/economy/persistent_bank_purchases.dm +++ b/code/modules/economy/persistent_bank_purchases.dm @@ -484,12 +484,12 @@ var/global/list/persistent_bank_purchaseables = list(\ missile_arrival name = "Missile Arrival" cost = 20000 + path = /obj/item/tank/emergency_oxygen // oh boy they'll need this if they are unlucky icon = 'icons/obj/large/32x64.dmi' icon_state = "arrival_missile" icon_dir = SOUTH Create(var/mob/living/M) - M.back?.storage?.add_contents(new /obj/item/tank/emergency_oxygen(M.back)) // oh boy they'll need this if they are unlucky var/mob/living/carbon/human/H = M if(istype(H)) H.equip_new_if_possible(/obj/item/clothing/mask/breath, SLOT_WEAR_MASK) @@ -498,7 +498,7 @@ var/global/list/persistent_bank_purchaseables = list(\ launch_with_missile(M.loc) else launch_with_missile(M) - return 1 + return ..() critter_respawn name = "Alt Ghost Critter" diff --git a/code/modules/economy/requisition/rc_scientific.dm b/code/modules/economy/requisition/rc_scientific.dm index 660172bb0a969..73b07e5b0382b 100644 --- a/code/modules/economy/requisition/rc_scientific.dm +++ b/code/modules/economy/requisition/rc_scientific.dm @@ -373,10 +373,10 @@ ABSTRACT_TYPE(/datum/rc_entry/item/organ) if(length(src.rc_entries) == 3) src.item_rewarders += new /datum/rc_itemreward/plant_cartridge src.payout += 8000 * length(src.rc_entries) - if(prob(70)) + if(prob(30)) src.item_rewarders += new /datum/rc_itemreward/strange_seed else - src.item_rewarders += new /datum/rc_itemreward/uv_lamp_frame + src.item_rewarders += new /datum/rc_itemreward/tumbleweed ..() /datum/rc_entry/seed/scientific @@ -429,6 +429,12 @@ ABSTRACT_TYPE(/datum/rc_entry/item/organ) seed_list += new /obj/item/seed/alien return seed_list +/datum/rc_itemreward/tumbleweed + name = "aggressive plant specimen" + + build_reward() + return new /obj/item/plant/tumbling_creeper + /datum/rc_itemreward/uv_lamp_frame name = "ultraviolet botanical lamp" @@ -709,7 +715,7 @@ ABSTRACT_TYPE(/datum/rc_entry/item/organ) if("paramedic suit") rewardthing1 = /obj/item/clothing/suit/hazard/paramedic if("heavy firesuit") - rewardthing1 = /obj/item/clothing/suit/fire/heavy + rewardthing1 = /obj/item/clothing/suit/hazard/fire/heavy if("light space suit set") rewardthing1 = /obj/item/clothing/suit/space/light rewardthing2 = /obj/item/clothing/head/helmet/space/light @@ -719,7 +725,7 @@ ABSTRACT_TYPE(/datum/rc_entry/item/organ) rewardthing2 = /obj/item/clothing/head/emerg if("radiation suit set") rewardthing1 = /obj/item/clothing/head/rad_hood - rewardthing2 = /obj/item/clothing/suit/rad + rewardthing2 = /obj/item/clothing/suit/hazard/rad build_reward() var/list/yielder = list() diff --git a/code/modules/economy/supply_packs.dm b/code/modules/economy/supply_packs.dm index d620c07ada3eb..e4f0f01047367 100644 --- a/code/modules/economy/supply_packs.dm +++ b/code/modules/economy/supply_packs.dm @@ -120,12 +120,12 @@ ABSTRACT_TYPE(/datum/supply_packs) syndicate = 1 /datum/supply_packs/paint - name = "Paint Cans" - desc = "A selection of random paints." - contains = list(/obj/item/paint_can/random = 4) + name = "Artistic Supplies Crate" + desc = "A selection of random paints, and an artistic toolbox. Get arty!" + contains = list(/obj/item/paint_can/random = 4, /obj/item/storage/toolbox/artistic) cost = PAY_TRADESMAN*3 - containertype = /obj/storage/crate - containername = "Paint Crate" + containertype = /obj/storage/crate/packing + containername = "Artistic Crate" /datum/supply_packs/neon_lining name = "Neon Lining Crate" @@ -310,7 +310,7 @@ ABSTRACT_TYPE(/datum/supply_packs) category = "Engineering Department" contains = list(/obj/item/extinguisher = 3, /obj/item/chem_grenade/firefighting = 3, - /obj/item/clothing/suit/fire = 2, + /obj/item/clothing/suit/hazard/fire = 2, /obj/item/clothing/head/helmet/firefighter = 2) cost = PAY_TRADESMAN*2 containertype = /obj/storage/crate @@ -485,7 +485,7 @@ ABSTRACT_TYPE(/datum/supply_packs) name = "Wool Production Kit" desc = "For use with existing Ranch." category = "Civilian Department" - contains = list(/obj/item/reagent_containers/food/snacks/ingredient/egg/critter/sheep) + contains = list(/obj/item/reagent_containers/food/snacks/ingredient/egg/critter/sheep, /obj/item/storage/box/knitting) cost = PAY_TRADESMAN*10 containertype = /obj/storage/crate containername = "Wool Production Kit" @@ -1052,7 +1052,7 @@ ABSTRACT_TYPE(/datum/supply_packs) name = "Radiation Emergency Supplies" desc = "Equipment for dealing with a radiation emergency. No, the crate itself is not irradiated." category = "Basic Materials" - contains = list(/obj/item/clothing/suit/rad = 4, + contains = list(/obj/item/clothing/suit/hazard/rad = 4, /obj/item/clothing/head/rad_hood = 4, /obj/item/storage/pill_bottle/antirad = 2, /obj/item/reagent_containers/emergency_injector/anti_rad = 4, @@ -1477,6 +1477,17 @@ ABSTRACT_TYPE(/datum/supply_packs) containertype = /obj/storage/crate containername = "Pressure Crystal Crate" +/datum/supply_packs/comms_dish + name = "Communications Dish" + desc = "A single-use Manudrive for creating a new Communications Dish and a floppy disk containing the COMMaster program. Note: Console not included" + category = "Engineering Department" + contains = list(/obj/item/disk/data/floppy/manudrive/comms_dish/singleuse, /obj/item/disk/data/floppy/read_only/communications) + cost = PAY_IMPORTANT + containertype = /obj/storage/secure/crate + containertype = /obj/storage/secure/crate + containername = "Communications Dish Crate (Cardlocked \[Engineering])" + access = access_engineering + /* ================================================= */ /* -------------------- Complex -------------------- */ /* ================================================= */ @@ -1723,7 +1734,7 @@ ABSTRACT_TYPE(/datum/supply_packs/complex) category = "Civilian Department" contains = list(/obj/storage/secure/closet/fridge) frames = list(/obj/submachine/chef_oven, - /obj/submachine/mixer, + /obj/machinery/mixer, /obj/submachine/chef_sink, /obj/machinery/deep_fryer, /obj/submachine/foodprocessor, diff --git a/code/modules/events/gimmick/kudzu.dm b/code/modules/events/gimmick/kudzu.dm index 9a80d76168dcd..baba366e3d2b3 100644 --- a/code/modules/events/gimmick/kudzu.dm +++ b/code/modules/events/gimmick/kudzu.dm @@ -229,49 +229,44 @@ Vspread = locate(src.x + rand(-1,1),src.y,src.z) else Vspread = locate(src.x,src.y + rand(-1, 1),src.z) - var/dogrowth = 1 + + if (src.growth < 20 && !stunted) + src.growth++ + src.update_self() + if (!src.aggressive && src.growth >= 20) + var/datum/controller/process/kudzu/K = get_master_kudzu_controller() + if (K) + K.kudzu -= src + + var/spread_vines = TRUE + if (!istype(Vspread, /turf/simulated/floor) || isfeathertile(Vspread)) - dogrowth = 0 + spread_vines = FALSE return for (var/obj/O in Vspread) - if (istype(O, /obj/window) || istype(O, /obj/blob) || istype(O, /obj/spacevine) || istype(O, /obj/kudzu_marker)) - dogrowth = 0 + spread_vines = FALSE return if (istype(O, /obj/forcefield) && O.density) //atmos and fluid fields shouldn't block - dogrowth = 0 + spread_vines = FALSE return if (istype(O, /obj/machinery/door)) var/obj/machinery/door/door = O if(!door.density) - dogrowth = 1 + spread_vines = TRUE continue if (door_open_prob()) - //force open doors too and keep it open - door.interrupt_autoclose = 1 - // var/temp_op = door.operating - // door.operating = 1 - // door.locked = 0 + door.interrupt_autoclose = TRUE //force open doors door.open() - // door.operating = temp_op - // door.locked = 1 - - dogrowth = 1 //for clarity + spread_vines = TRUE //for clarity else - dogrowth = 0 + spread_vines = FALSE - if (dogrowth == 1) + if (spread_vines) var/obj/V = new src.vinepath(loc=Vspread, to_spread=to_spread-1) if(!QDELETED(V)) V.set_loc(Vspread) - if (src.growth < 20 && !stunted) - src.growth++ - src.update_self() - if (!src.aggressive && src.growth >= 20) - var/datum/controller/process/kudzu/K = get_master_kudzu_controller() - if (K) - K.kudzu -= src return /obj/spacevine/proc/door_open_prob() diff --git a/code/modules/events/law_corruption.dm b/code/modules/events/law_corruption.dm index 3a6dea3aa7da2..6673a11ad4bb6 100644 --- a/code/modules/events/law_corruption.dm +++ b/code/modules/events/law_corruption.dm @@ -1,5 +1,16 @@ +TYPEINFO(/datum/random_event/major/law_rack_corruption) + initialization_args = list( + EVENT_INFO("law_text", DATA_INPUT_TEXT, "Law text"), + EVENT_INFO_EXT("law_number", DATA_INPUT_NUM, "Law module to corrupt", 1, 3), + EVENT_INFO("replace", DATA_INPUT_BOOL, "Replace corrupted law"), + ) + /datum/random_event/major/law_rack_corruption name = "Law Rack Corruption" + customization_available = TRUE + var/law_text = "" + var/law_number = null + var/replace = null // no message /// List of premade laws we can pick from @@ -105,37 +116,54 @@ "For the purposes of all laws, 'Human' is to be defined as 'Featherless Biped'", ) + admin_call(source) + . = ..() + if(.) + return . + var/datum/random_event_editor/E = new /datum/random_event_editor(usr, src) + E.ui_interact(usr) + + cleanup() //you know we had a thing for this, it was called DISPOSING :screm: + src.law_text = initial(src.law_text) + src.law_number = initial(src.law_number) + src.replace = initial(src.replace) + event_effect(source) . = ..() // Fuck up the AI's laws - var/pickedLaw - if(prob(33)) - pickedLaw = phrase_log.random_custom_ai_law(replace_names=TRUE) - else - pickedLaw = pick(new_laws) + if (!length(src.law_text)) + if(prob(33)) + src.law_text = phrase_log.random_custom_ai_law(replace_names=TRUE) + else + src.law_text = pick(new_laws) - if(isnull(pickedLaw)) - pickedLaw = pick(new_laws) + if(!length(src.law_text)) + src.law_text = pick(new_laws) - if(prob(66)) - if(prob(50)) - pickedLaw += " Do not state or hint at this law." - else - pickedLaw += " Do not state or hint at this law unless asked." + if(prob(66)) + if(prob(50)) + src.law_text += " Do not state or hint at this law." + else + src.law_text += " Do not state or hint at this law unless asked." + + while(prob(5)) + var/datum/bioEffect/speech/accent = random_accent() + src.law_text = accent.OnSpeak(src.law_text) - while(prob(5)) - var/datum/bioEffect/speech/accent = random_accent() - pickedLaw = accent.OnSpeak(pickedLaw) + if (isnull(src.replace)) + src.replace = pick(TRUE, FALSE) + + if (isnull(src.law_number)) + src.law_number = rand(1,3) for_by_tcl(M, /mob/living/silicon/ai) if (M.deployed_to_eyecam && M.eyecam) M.eyecam.return_mainframe() boutput(M, SPAN_ALERT("<b>PROGRAM EXCEPTION AT 0x30FC50B</b>")) boutput(M, SPAN_ALERT("<b>Law ROM data corrupted. Attempting to restore...</b>")) - if (prob(50)) - ticker.ai_law_rack_manager.corrupt_all_racks(pickedLaw, FALSE) - else - ticker.ai_law_rack_manager.corrupt_all_racks(pickedLaw, TRUE) + ticker.ai_law_rack_manager.corrupt_all_racks(src.law_text, src.replace, src.law_number) logTheThing(LOG_ADMIN, null, "Resulting AI Lawset:<br>[ticker.ai_law_rack_manager.format_for_logs()]") + + src.cleanup() //grrr diff --git a/code/modules/events/meteor_shower.dm b/code/modules/events/meteor_shower.dm index 128d4d19a0ed3..3067817e88ee7 100644 --- a/code/modules/events/meteor_shower.dm +++ b/code/modules/events/meteor_shower.dm @@ -122,20 +122,20 @@ var/global/meteor_shower_active = 0 playsound_global(world, 'sound/machines/disaster_alert.ogg', 60) #ifndef UNDERWATER_MAP - var/scroll_angle switch(src.wave_direction) if (NORTH) - scroll_angle = 180 + ADD_PARALLAX_RENDER_SOURCE_TO_GROUP(Z_LEVEL_STATION, /atom/movable/screen/parallax_render_source/meteor_shower/north, 0 SECONDS) if (EAST) - scroll_angle = 270 + ADD_PARALLAX_RENDER_SOURCE_TO_GROUP(Z_LEVEL_STATION, /atom/movable/screen/parallax_render_source/meteor_shower/east, 0 SECONDS) if (SOUTH) - scroll_angle = 0 + ADD_PARALLAX_RENDER_SOURCE_TO_GROUP(Z_LEVEL_STATION, /atom/movable/screen/parallax_render_source/meteor_shower/south, 0 SECONDS) if (WEST) - scroll_angle = 90 - - if (scroll_angle) - ADD_PARALLAX_RENDER_SOURCE_TO_GROUP(Z_LEVEL_STATION, /atom/movable/screen/parallax_render_source/meteor_shower, 0 SECONDS) - GET_PARALLAX_RENDER_SOURCE_FROM_GROUP(Z_LEVEL_STATION, /atom/movable/screen/parallax_render_source/meteor_shower)?.scroll_angle = scroll_angle + ADD_PARALLAX_RENDER_SOURCE_TO_GROUP(Z_LEVEL_STATION, /atom/movable/screen/parallax_render_source/meteor_shower/west, 0 SECONDS) + if (-1) // from ALL DIRECTIONS (may cause lag? probably not though, it's only 4 layers) + ADD_PARALLAX_RENDER_SOURCE_TO_GROUP(Z_LEVEL_STATION, /atom/movable/screen/parallax_render_source/meteor_shower/north, 0 SECONDS) + ADD_PARALLAX_RENDER_SOURCE_TO_GROUP(Z_LEVEL_STATION, /atom/movable/screen/parallax_render_source/meteor_shower/east, 0 SECONDS) + ADD_PARALLAX_RENDER_SOURCE_TO_GROUP(Z_LEVEL_STATION, /atom/movable/screen/parallax_render_source/meteor_shower/south, 0 SECONDS) + ADD_PARALLAX_RENDER_SOURCE_TO_GROUP(Z_LEVEL_STATION, /atom/movable/screen/parallax_render_source/meteor_shower/west, 0 SECONDS) #endif var/start_x @@ -198,7 +198,10 @@ var/global/meteor_shower_active = 0 S.UpdateIcon() #ifndef UNDERWATER_MAP - REMOVE_PARALLAX_RENDER_SOURCE_FROM_GROUP(Z_LEVEL_STATION, /atom/movable/screen/parallax_render_source/meteor_shower, 0 SECONDS) + REMOVE_PARALLAX_RENDER_SOURCE_FROM_GROUP(Z_LEVEL_STATION, /atom/movable/screen/parallax_render_source/meteor_shower/north, 0 SECONDS) + REMOVE_PARALLAX_RENDER_SOURCE_FROM_GROUP(Z_LEVEL_STATION, /atom/movable/screen/parallax_render_source/meteor_shower/east, 0 SECONDS) + REMOVE_PARALLAX_RENDER_SOURCE_FROM_GROUP(Z_LEVEL_STATION, /atom/movable/screen/parallax_render_source/meteor_shower/south, 0 SECONDS) + REMOVE_PARALLAX_RENDER_SOURCE_FROM_GROUP(Z_LEVEL_STATION, /atom/movable/screen/parallax_render_source/meteor_shower/west, 0 SECONDS) #endif admin_call(var/source) @@ -366,11 +369,15 @@ var/global/meteor_shower_active = 0 process() proc/check_hits() - for(var/turf/simulated/S in range(1,src)) - if(!S.density) continue + for(var/turf/T in range(1,src)) + if(!T.density) + continue + //let's not just go straight through unsimmed turfs and total the inside of the listening post + if (!issimulatedturf(T) || !istype(T, /turf/unsimulated)) + continue hit_object = 1 if (prob(meteorhit_chance)) - S.meteorhit(src) + T.meteorhit(src) for(var/mob/M in range(1,src)) if(M == src) continue //Just to make sure diff --git a/code/modules/events/minor/appendicitis_event.dm b/code/modules/events/minor/appendicitis_event.dm index d16acd5b5ce5d..9261caffd5614 100644 --- a/code/modules/events/minor/appendicitis_event.dm +++ b/code/modules/events/minor/appendicitis_event.dm @@ -13,14 +13,17 @@ if (isnpc(H)) continue // player if (isvirtual(H)) continue if (inafterlife(H)) continue - //TODO: in medical records + var/datum/db_record/record = data_core.general.find_record("name", H.real_name) + if (!record || record["pstat"] == "*Deceased*") continue if (istype(H.loc, /obj/cryotron)) continue if (!H.organHolder?.appendix) continue // with appendix if (H.organHolder?.appendix?.robotic) continue // that isn't robotic potential_victims += H if (length(potential_victims)) - shuffle_list(potential_victims) var/num = rand(2, 4) for (var/i in 1 to num) - var/mob/living/carbon/human/patient = potential_victims[i] + if (!length(potential_victims)) + break + var/mob/living/carbon/human/patient = pick(potential_victims) + potential_victims -= patient patient?.contract_disease(/datum/ailment/disease/appendicitis, null, null, 1) diff --git a/code/modules/events/random_event.dm b/code/modules/events/random_event.dm index dcdf639ebe11f..46720e34adac6 100644 --- a/code/modules/events/random_event.dm +++ b/code/modules/events/random_event.dm @@ -58,9 +58,11 @@ proc/get_affected_crew() . = list() - for(var/mob/living/player in mobs) - if(is_crew_affected(player)) - . += player + for(var/mob/living/M in mobs) + if (isnpc(M)) + continue + if(is_crew_affected(M)) + . += M /datum/random_event/start/until_playing var/include_latejoin = FALSE diff --git a/code/modules/events/white_hole.dm b/code/modules/events/white_hole.dm index 0a1f6c8564fae..0b3982a29433e 100644 --- a/code/modules/events/white_hole.dm +++ b/code/modules/events/white_hole.dm @@ -456,6 +456,7 @@ ADMIN_INTERACT_PROCS(/obj/whitehole, proc/admin_activate) /obj/critter/killertomato = 0.5, /mob/living/critter/small_animal/cat/synth = 1, /mob/living/critter/plant/maneater = 0.3, + /obj/item/plant/tumbling_creeper = 3, ), "maint" = list( /obj/decal/cleanable/rust = 10, @@ -733,7 +734,7 @@ ADMIN_INTERACT_PROCS(/obj/whitehole, proc/admin_activate) /obj/storage/closet/radiation = 10, /obj/item/reagent_containers/pill/antirad = 10, /obj/item/clothing/mask/gas = 5, - /obj/item/clothing/suit/rad = 5, + /obj/item/clothing/suit/hazard/rad = 5, /obj/item/clothing/gloves/yellow = 5, /obj/item/clothing/head/rad_hood = 5, /obj/item/wrench/yellow = 10, @@ -836,7 +837,7 @@ ADMIN_INTERACT_PROCS(/obj/whitehole, proc/admin_activate) Bumped(atom/movable/A) if(QDELETED(A) || A.throwing || istype(A, /obj/projectile)) return - if(prob(90)) // the 10% probability not to is there mostly just to prevent very rare infinite loops + if(!ON_COOLDOWN(A, "white_hole_bump", 0.2 SECONDS)) //okay this will REALLY prevent infinite loops (hopefully) step_away(A, src) attackby(obj/item/I, mob/user) diff --git a/code/modules/fishing/fishing_gear.dm b/code/modules/fishing/fishing_gear.dm index 55e5944f3666e..65c2c68738bb0 100644 --- a/code/modules/fishing/fishing_gear.dm +++ b/code/modules/fishing/fishing_gear.dm @@ -246,14 +246,64 @@ TYPEINFO(/obj/item/fish_portal) icon = 'icons/obj/items/fishing_gear.dmi' icon_state = "fishing_pool" - basic - name = "basic pool" - - upgraded - name = "upgraded pool" - - master - name = "master pool" + ex_act(severity) + // dynamite fishing! make the research pool throw out fish depending on how big the severity of the explosion was + var/dynamite_fishing_cooldown = 1 SECOND //! the cooldown of dynamite fishing. + // First, we need to get our fishing spot datum + var/datum/fishing_spot/fishing_spot = null + var/fishing_spot_type = src.type + // now we search for the corresponding defined fishing spot up the chain of parents + while (fishing_spot_type != null) + fishing_spot = global.fishing_spots[fishing_spot_type] + if (fishing_spot != null) + break + fishing_spot_type = type2parent(fishing_spot_type) + // now we define our fishing sucess and damage on the fish tank based on the severity + // defined values are for severity 3 + var/explosion_damage = -5 //! how much damage each explosion does + var/fish_chance = 20 //! how much fish per roll jumps out of the pond + var/fish_rolls = 2 //! how often the fish chance is rolled + var/dynamite_fishing_sucessfull = FALSE //! shows if the explosion sucessfully "fished" some fish + switch(severity) + if(1) + //You blew up the whole tank, doofus! + explosion_damage = -100 + fish_chance = 0 + fish_rolls = 0 + if(2) + explosion_damage = -20 + fish_chance = 70 + fish_rolls = 5 + if (fishing_spot && fish_rolls && !ON_COOLDOWN(src, "dynamite fishing", dynamite_fishing_cooldown)) + var/turf/target_turf = get_turf(src) + // now, if we don't blow it up extremly, we can roll for fish + for (var/fish_try in 1 to fish_rolls) + if (prob(fish_chance)) + var/atom/movable/fishing_result = fishing_spot.generate_fish(null, null, src) + if(fishing_result) + fishing_result.set_loc(target_turf) + var/target_point = get_turf(pick(orange(4, src))) + fishing_result.throw_at(target_point, rand(0, 10), rand(3, 9)) + dynamite_fishing_sucessfull = TRUE + if (dynamite_fishing_sucessfull) + src.visible_message("<b class='alert'>Fishes jump out of [src]! [pick("Holy shit!", "Holy fuck!", "What the hell!", "What the fuck!")]</b>") + // lets create a neat water spread effect + var/datum/effects/system/steam_spread/splash = new /datum/effects/system/steam_spread + splash.set_up(6, 0, get_turf(src), color="#382ec9", plane=PLANE_NOSHADOW_ABOVE) + splash.attach(src) + splash.start() + //Now we damage the pond. No infinite dynamite fishing + src.material_trigger_on_explosion(severity) + src.changeHealth(explosion_damage) + +/obj/fishing_pool/basic + name = "basic pool" + +/obj/fishing_pool/upgraded + name = "upgraded pool" + +/obj/fishing_pool/master + name = "master pool" /obj/fishing_pool/portable anchored = 0 diff --git a/code/modules/food_and_drink/alcohol.dm b/code/modules/food_and_drink/alcohol.dm index 09dfbaf5c2a8b..14119238f6374 100644 --- a/code/modules/food_and_drink/alcohol.dm +++ b/code/modules/food_and_drink/alcohol.dm @@ -55,6 +55,18 @@ initial_volume = 100 initial_reagents = list("wine"=60) +/obj/item/reagent_containers/food/drinks/bottle/wine/white + name = "white wine" + desc = "Wine made from those nasty green grapes. Its a Riesling, according to the label. Whatever that means." + icon_state = "bottle-whitewine" + heal_amt = 1 + g_amt = 40 + bottle_style = "whitewine" + fluid_style = "whitewine" + label = "whitewine" + initial_volume = 100 + initial_reagents = list("white_wine"=60) + /obj/item/reagent_containers/food/drinks/bottle/hobo_wine name = "fortified wine" desc = "Some sort of bottom-shelf booze. Wasn't this brand banned awhile ago?" diff --git a/code/modules/food_and_drink/candy.dm b/code/modules/food_and_drink/candy.dm index 47bbaccd339db..72155f3b186ee 100644 --- a/code/modules/food_and_drink/candy.dm +++ b/code/modules/food_and_drink/candy.dm @@ -49,13 +49,6 @@ ABSTRACT_TYPE(/obj/item/reagent_containers/food/snacks/candy) if (icon_state == "nougat0") icon_state = "nougat1" -/obj/item/reagent_containers/food/snacks/candy/caramel - name = "'Hole Zone Layer' caramel creme" - desc = "You know that missing O-Zone from earth? We made it in a candy!" - real_name = "caramel" - icon_state = "caramel" - food_effects = list("food_energized") - /obj/item/reagent_containers/food/snacks/candy/candy_cane name = "candy cane" desc = "Holiday treat and aid to limping gingerbread men everywhere." @@ -124,37 +117,6 @@ ABSTRACT_TYPE(/obj/item/reagent_containers/food/snacks/candy) food_color = "#663300" initial_reagents = list("chocolate"=10) -/obj/item/reagent_containers/food/snacks/candy/wrapped_pbcup - name = "pack of Hetz's Cups" - desc = "A package of the popular Hetz's Cups chocolate peanut butter cups." - icon_state = "candy-pbcup_w" - sugar_content = 20 - heal_amt = 5 - food_color = "#663300" - real_name = "Hetz's Cup" - var/unwrapped = 0 - - attack(mob/target, mob/user, def_zone, is_special = FALSE, params = null) - if (user == target) - boutput(user, SPAN_ALERT("You need to unwrap them first, you greedy beast!")) - user.visible_message("<b>[user]</b> stares at [src] in a confused manner.") - return - else - user.visible_message(SPAN_ALERT("<b>[user]</b> futilely attempts to shove [src] into [target]'s mouth!")) - return - - attack_self(mob/user as mob) - if (unwrapped) - return - - unwrapped = 1 - user.visible_message("[user] unwraps the Hetz's Cups!", "You unwrap the Hetz's Cups.") - var/turf/T = get_turf(user) - new /obj/item/reagent_containers/food/snacks/candy/pbcup(T) - new /obj/item/reagent_containers/food/snacks/candy/pbcup(T) - new /obj/item/reagent_containers/food/snacks/candy/pbcup(T) - qdel(src) - /obj/item/reagent_containers/food/snacks/candy/pbcup name = "Hetz's Cup" desc = "A cup-shaped chocolate candy with a peanut butter filling. Of course, peanuts went extinct back in 2026, so it's really some weird soy paste that supposedly tastes like them." @@ -206,7 +168,7 @@ ABSTRACT_TYPE(/obj/item/reagent_containers/food/snacks/candy/jellybean) phrase = pick("Oh god", "Jeez", "Ugh", "Blecch", "Holy crap that's awful", "What the hell?", "*HURP*", "Phoo") tastesbad = 1 else - flavor = pick("egg", "strawberry", "raspberry", "snozzberry", "happiness", "popcorn", "buttered popcorn", "cinnamon", "macaroni and cheese", "pepperoni", "cheese", "lasagna", "pina colada", "tutti frutti", "lemon", "margarita", "coconut", "pineapple", "scotch", "vodka", "root beer", "cotton candy", "Lagavulin 18", "toffee", "vanilla", "coffee", "apple pie", "neapolitan", "orange", "lime", "crotch", "mango", "apple", "grape", "Slurm") + flavor = pick("egg", "strawberry", "raspberry", "snozzberry", "happiness", "popcorn", "buttered popcorn", "cinnamon", "macaroni and cheese", "pepperoni", "cheese", "lasagna", "pina colada", "tutti frutti", "lemon", "margarita", "coconut", "pineapple", "scotch", "vodka", "root beer", "cotton candy", "Lagavulin 18", "toffee", "vanilla", "coffee", "apple pie", "neapolitan", "orange", "lime", "mango", "apple", "grape", "Slurm", "slime mold") phrase = pick("Yum", "Wow", "MMM", "Delicious", "Scrumptious", "Fantastic", "Oh yeah") tastesbad = 0 @@ -252,7 +214,7 @@ ABSTRACT_TYPE(/obj/item/reagent_containers/food/snacks/candy/jellybean) phrase = pick("Oh god", "Jeez", "Ugh", "Blecch", "Holy crap that's awful", "What the hell?", "*HURP*", "Phoo") tastesbad = 1 else - flavor = pick("egg", "strawberry", "raspberry", "snozzberry", "happiness", "popcorn", "buttered popcorn", "cinnamon", "macaroni and cheese", "pepperoni", "cheese", "lasagna", "pina colada", "tutti frutti", "lemon", "margarita", "coconut", "pineapple", "scotch", "vodka", "root beer", "cotton candy", "Lagavulin 18", "toffee", "vanilla", "coffee", "apple pie", "neapolitan", "orange", "lime", "crotch", "mango", "apple", "grape", "Slurm", "Popecrunch") + flavor = pick("egg", "strawberry", "raspberry", "snozzberry", "happiness", "popcorn", "buttered popcorn", "cinnamon", "macaroni and cheese", "pepperoni", "cheese", "lasagna", "pina colada", "tutti frutti", "lemon", "margarita", "coconut", "pineapple", "scotch", "vodka", "root beer", "cotton candy", "Lagavulin 18", "toffee", "vanilla", "coffee", "apple pie", "neapolitan", "orange", "lime", "mango", "apple", "grape", "Slurm") phrase = pick("Yum", "Wow", "MMM", "Delicious", "Scrumptious", "Fantastic", "Oh yeah") /obj/item/kitchen/everyflavor_box @@ -315,6 +277,8 @@ ABSTRACT_TYPE(/obj/item/reagent_containers/food/snacks/candy/jellybean) if (src.reagents) ENSURE_IMAGE(src.image_candy, src.icon, "lpop-w") var/datum/color/average = src.reagents.get_average_color(reagent_exception_ids=list("sugar")) + if (src.reagents.has_reagent("sugar") && src.reagents.reagent_list.len == 1) + average = new(255,255,255,255) src.image_candy.color = average.to_rgba() src.UpdateOverlays(src.image_candy, "candy") @@ -479,50 +443,429 @@ ABSTRACT_TYPE(/obj/item/reagent_containers/food/snacks/candy/jellybean) get_desc() . = "<br>[SPAN_NOTICE("It says: [phrase]")]" -/obj/item/reagent_containers/food/snacks/candy/taffy - name = "saltwater taffy" - desc = "Produced in small artisanal batches, straight from someone's kitchen. " - icon_state = "red" - amount = 1 - sugar_content = 10 +/obj/item/reagent_containers/food/snacks/candy/wrapped_candy + name = "wrapped candy" + desc = "A piece of wrapped candy." + bites_left = 1 + sugar_content = 5 + food_effects = list("food_energized") + initial_volume = 5 + initial_reagents = list("sugar"=5) var/unwrapped = 0 - var/flavor - var/list/flavors - - New() - ..() - desc += flavor - var/datum/reagents/R = reagents - for (var/F in flavors) - R.add_reagent(F, 10) attack(mob/target, mob/user, def_zone, is_special = FALSE, params = null) + if (unwrapped) + ..() + return if (user == target) boutput(user, SPAN_ALERT("You need to unwrap this first!")) user.visible_message(SPAN_EMOTE("<b>[user]</b> stares at [src] in a confused manner.")) return else - user.visible_message(SPAN_ALERT("<b>[user]</b> futilely attempts to shove the unwrapped taffy into [target]'s mouth!")) + user.visible_message(SPAN_ALERT("<b>[user]</b> futilely attempts to shove the [src] into [target]'s mouth!")) return attack_self(mob/user as mob) - if (unwrapped) - return ..() + if (!unwrapped) + unwrap_candy(user) + else + ..() + proc/unwrap_candy(mob/user) unwrapped = 1 user.visible_message(SPAN_EMOTE("[user] unwraps [src]."), "You unwrap [src].") icon_state = icon_state + "-unwrapped" -/obj/item/reagent_containers/food/snacks/candy/taffy/cherry +/obj/item/reagent_containers/food/snacks/candy/wrapped_candy/taffy + name = "saltwater taffy" + desc = "Produced in small artisanal batches, straight from someone's kitchen. " + icon_state = "red" + sugar_content = 10 + var/flavor + var/list/flavors + + New() + ..() + desc += flavor + var/datum/reagents/R = reagents + for (var/F in flavors) + R.add_reagent(F, 10) + +/obj/item/reagent_containers/food/snacks/candy/wrapped_candy/taffy/cherry flavor = "This one is cherry flavored." flavors = list("juice_cherry", "psilocybin") -/obj/item/reagent_containers/food/snacks/candy/taffy/watermelon +/obj/item/reagent_containers/food/snacks/candy/wrapped_candy/taffy/watermelon icon_state = "pink" flavor = "This one is watermelon flavored." flavors = list("juice_watermelon", "love") -/obj/item/reagent_containers/food/snacks/candy/taffy/blueraspberry +/obj/item/reagent_containers/food/snacks/candy/wrapped_candy/taffy/blueraspberry icon_state = "blue" flavor = "This one is blue raspberry flavored." flavors = list("juice_raspberry", "LSD") + +/obj/item/reagent_containers/food/snacks/candy/wrapped_candy/pb_cup + name = "pack of Hetz's Cups" + desc = "A package of the popular Hetz's Cups chocolate peanut butter cups." + icon_state = "candy-pbcup_w" + sugar_content = 20 + heal_amt = 5 + food_color = "#663300" + real_name = "Hetz's Cup" + + unwrap_candy(mob/user) + unwrapped = 1 + user.visible_message(SPAN_EMOTE("[user] unwraps the Hetz's Cups."), "You unwrap the Hetz's Cups.") + var/turf/T = get_turf(user) + new /obj/item/reagent_containers/food/snacks/candy/pbcup(T) + new /obj/item/reagent_containers/food/snacks/candy/pbcup(T) + new /obj/item/reagent_containers/food/snacks/candy/pbcup(T) + qdel(src) + +/obj/item/reagent_containers/food/snacks/candy/wrapped_candy/caramel + name = "'Hole Zone Layer' caramel creme" + desc = "You know that missing O-Zone from earth? We made it in a candy!" + real_name = "caramel" + icon_state = "caramel" + +/obj/item/reagent_containers/food/snacks/candy/wrapped_candy/butterscotch + name = "butterscotch candy" + desc = "It's one of those old timey butterscotch candies like your grampa used to have." + real_name = "butterscotch" + icon_state = "butterscotch" + +/obj/item/reagent_containers/food/snacks/candy/hard_candy + name = "hard candy" + desc = "A piece of hard candy." + real_name = "hard candy" + icon_state = "hardcandy-nowrap" + bites_left = 1 + food_effects = list("food_energized") + initial_volume = 5 + sugar_content = 5 + var/image/image_candy = null + var/flavor_name + + on_reagent_change() + ..() + src.update_icon() + src.update_name() + + proc/update_name() + src.flavor_name = src.reagents.get_master_reagent_name() + if (src.flavor_name == "sugar") + src.flavor_name = null + src.name = "[name_prefix(null, 1)][src.flavor_name ? "[src.flavor_name]-flavored " : null][src.real_name][name_suffix(null, 1)]" + + update_icon() + var/datum/color/average = src.reagents.get_average_color() + src.food_color = average.to_rgb() + src.color = src.food_color + src.alpha = round(average.a / 1.2) + + attackby(obj/item/W, mob/user) + if(istype(W, /obj/item/paper)) + user.visible_message("[user] wraps the [src] in the [W].", "You fold the [src] in the [W].") + var/obj/item/reagent_containers/food/snacks/candy/wrapped_candy/hard/A = new /obj/item/reagent_containers/food/snacks/candy/wrapped_candy/hard(get_turf(user)) + A.reagents.clear_reagents() + src.reagents.trans_to(A, 5) + user.u_equip(src) + user.put_in_hand_or_drop(A) + qdel(src) + qdel(W) + else if (istype(W,/obj/item/rods) || istype(W,/obj/item/stick)) + if(istype(W,/obj/item/stick)) + var/obj/item/stick/S = W + if(S.broken) + boutput(user, SPAN_ALERT("That stick is broken!")) + return + + boutput(user, SPAN_NOTICE("You stick the hard candy onto [W].")) + + var/obj/item/reagent_containers/food/snacks/candy/lollipop/newcandy = new /obj/item/reagent_containers/food/snacks/candy/lollipop(get_turf(src)) + newcandy.reagents.clear_reagents() + src.reagents.trans_to(newcandy, 5) + newcandy.update_icon() + user.u_equip(src) + user.put_in_hand_or_drop(newcandy) + + if(istype(W,/obj/item/rods)) W.change_stack_amount(-1) + if(istype(W,/obj/item/stick)) W.amount-- + if(!W.amount) qdel(W) + + qdel(src) + else + ..() + +/obj/item/reagent_containers/food/snacks/candy/wrapped_candy/hard + name = "wrapped hard candy" + desc = "A piece of wrapped hard candy." + real_name = "hard candy" + icon_state = "hardcandy" + var/flavor_name + + on_reagent_change() + ..() + src.update_name() + + proc/update_name() + src.flavor_name = src.reagents.get_master_reagent_name() + if (src.flavor_name == "sugar") + src.flavor_name = null + src.name = "[name_prefix(null, 1)][src.unwrapped ? null : "wrapped "][src.flavor_name ? "[src.flavor_name]-flavored " : null][src.real_name][name_suffix(null, 1)]" + + unwrap_candy(mob/user) + ..() + var/datum/color/average = src.reagents.get_average_color() + var/image/image_candy = image(src.icon, "hardcandy-nowrap") + image_candy.color = average.to_rgb() + image_candy.alpha = round(average.a / 1.2) + src.UpdateOverlays(image_candy, "hardcandy-nowrap") + src.update_name() + +/obj/item/reagent_containers/food/snacks/candy/rock_candy + name = "rock candy" + desc = "Rock candy on a stick. Hard as a rock, hopefully doesn't taste like one." + real_name = "rock candy" + icon_state = "rockcandy-0" + initial_volume = 15 + sugar_content = 15 + bites_left = 2 + use_bite_mask = FALSE + var/image/image_candy = null + var/flavor_name + + on_reagent_change() + ..() + src.update_icon() + src.update_name() + + proc/update_name() + src.flavor_name = src.reagents.get_master_reagent_name() + if (src.flavor_name == "sugar") + src.flavor_name = null + src.name = "[name_prefix(null, 1)][src.flavor_name ? "[src.flavor_name]-flavored " : null][src.real_name][name_suffix(null, 1)]" + + update_icon() + var/datum/color/average = src.reagents.get_average_color() + if (!src.image_candy) + src.image_candy = image(src.icon, "rockcandy-1") + src.food_color = average.to_rgb() + src.image_candy.color = src.food_color + src.image_candy.alpha = round(average.a / 1.2) + src.UpdateOverlays(src.image_candy, "rockcandy-1") + +/obj/item/reagent_containers/food/snacks/candy/swirl_lollipop + name = "swirly lollipop" + desc = "A giant colorful lollipop in the shape of a swirl." + real_name = "swirly lollipop" + icon_state = "lpop-rainbow" + inhand_image_icon = 'icons/mob/inhand/hand_food.dmi' + item_state = "lpop-rainbow" + initial_volume = 15 + sugar_content = 15 + var/flavor_name + + on_reagent_change() + ..() + src.update_name() + + proc/update_name() + src.flavor_name = src.reagents.get_master_reagent_name() + if (src.flavor_name == "sugar") + src.flavor_name = null + src.name = "[name_prefix(null, 1)][src.flavor_name ? "[src.flavor_name]-flavored " : null][src.real_name][name_suffix(null, 1)]" + +/obj/item/reagent_containers/food/snacks/candy/dragons_beard + name = "dragon's beard candy loop" + desc = "A loop of dragon's beard candy." + real_name = "dragon's beard candy loop" + icon_state = "dragonsbeard-loop" + initial_volume = 18 + sugar_content = 18 + sliceable = TRUE + slice_product = /obj/item/reagent_containers/food/snacks/candy/dragons_beard_cut + slice_amount = 3 + slice_suffix = "piece" + food_effects = list("food_energized") + var/flavor_name + var/folds = 1 // How many folds have been done to the candy + var/eat_message = null // The message you get for eating the candy + var/floured = FALSE // If flour was applied. Gets removed on fold, contributes to success probability + + New() + ..() + src.update_candy() + + on_reagent_change() + ..() + src.update_icon(1) + src.update_name() + + proc/update_name() + src.flavor_name = src.reagents.get_master_reagent_name() + if (src.flavor_name == "sugar" || src.flavor_name == "Enriched MSG") + src.flavor_name = null + src.name = "[name_prefix(null, 1)][src.flavor_name ? "[src.flavor_name]-flavored " : null][src.real_name][name_suffix(null, 1)]" + + process_sliced_products(var/obj/item/reagent_containers/food/snacks/candy/dragons_beard_cut/slice, var/amount_to_transfer) + slice.folds = src.folds + slice.desc = src.desc + slice.eat_message = src.eat_message + slice.food_effects = src.food_effects + ..() + + update_icon(var/did_reagents_change) + var/datum/color/average = src.reagents.get_average_color() + if (did_reagents_change) + src.food_color = average.to_rgba() + src.color = average.to_rgb() + if (folds > 31) + src.icon_state = "dragonsbeard-loopinf" + src.color = "#FFFFFF" + src.alpha = average.a + var/image/glow_image = new /image(src.icon, "dragonsbeard-loopinfoverlay") + var/image/loop_image = new /image(src.icon, "dragonsbeard-loopinf") + loop_image.color = average.to_rgba() + src.UpdateOverlays(glow_image, "dragonsbeard-loopinfoverlay") + src.UpdateOverlays(loop_image, "dragonsbeard-loopinf") + src.use_bite_mask = FALSE + else if (floured) + src.alpha = average.a + else + src.alpha = round(average.a / 1.5) + + heal(var/mob/M) + ..() + boutput(M, src.eat_message) + return + + attack_self(mob/user as mob) + if (folds < 32) + user.visible_message("[user] twists [src], folding it in on itself!", "You twist [src] and fold it back into a ring.") + if (prob(get_success_prob(user))) + src.folds++ + src.floured = FALSE + src.quality += 0.2 + playsound(src.loc, "rustle", 50, 1) + update_icon(0) + update_candy() + else + user.visible_message("[src] disintegrates, falling apart into individual strands and sugar dust!", "[src] disintegrates through your fingers, what remains of its strands falling onto the floor.") + var/turf/T = get_turf(user) + var/diminished_reagents = max(1, round(src.reagents.total_volume / 6)) // less reagent content for failing + for (var/i=0, i<pick(1,2,3), i++) + var/obj/item/reagent_containers/food/snacks/candy/dragons_beard_cut/A = new /obj/item/reagent_containers/food/snacks/candy/dragons_beard_cut(T) + A.reagents.clear_reagents() + src.reagents.trans_to(A, diminished_reagents) + A.folds = src.folds + A.desc = src.desc + A.eat_message = src.eat_message + A.food_effects = src.food_effects + qdel(src) + return + else + boutput(user, "There is no point going any further.") + + attackby(obj/item/W, mob/user) + if (folds < 32 && !src.floured && istype(W,/obj/item/reagent_containers/food/snacks/ingredient/flour)) + boutput(user, "You flour [src].") + src.floured = TRUE + update_icon(0) + else if (folds > 31 && istype(W,/obj/item/reagent_containers/food/snacks/ingredient/flour)) + boutput(user, "No need. It is complete.") + else + ..() + + proc/get_success_prob(mob/user) + var/success_prob = 0 + if (floured) + success_prob = round(100 - (folds * 1.5)) + else + success_prob = round(75 - (folds * 1.5)) // really hard to make unless you're the skilled chef + if (user.job == "Chef") success_prob = success_prob * 1.5 + return success_prob + + proc/update_candy() + switch(folds) + if (1 to 4) + src.desc = "A sorry excuse for proper candy. It looks terrible, you can see the strands individually." + src.eat_message = "That wasn't fluffy at all!" + if (4 to 7) + src.desc = "Chinese cotton candy. It doesn't look that well made." + if (7 to 11) + src.desc = "Chinese cotton candy. Its texture is thin like hair." + src.eat_message = "The texture is soft, but slightly chewy." + if (11 to 14) + src.desc = "Chinese cotton candy. Its strands are tiny and fragile." + src.eat_message = "The texture is soft and delicate." + if (14 to 18) + src.desc = "Chinese cotton candy. Its light and fluffy, made up of thousands of individual strands." + if (18 to 22) + src.desc = "Chinese cotton candy. Its clumped up into ropes of thousands of strands." + src.eat_message = "[src] melts in your mouth!" + src.food_effects = list("food_energized_big") + if (22 to 31) + src.desc = "Chinese cotton candy. Its stiff and dense, comprised of millions of microscopic strands. Does this still count as cotton candy?" + if (31 to 32) + src.name = "infinity-fold dragon's beard candy loop" + src.desc = "A loop of dragon's beard candy that has been folded into uncountable microscopic strands." + src.real_name = "infinity-fold dragon's beard candy loop" + src.eat_message = "[src] immediately dissolves in your mouth." + src.reagents.add_reagent("enriched_msg", 3) + +/obj/item/reagent_containers/food/snacks/candy/dragons_beard/infinity + name = "infinity-fold dragon's beard candy" + desc = "A piece of dragon's beard candy that has been folded into uncountable microscopic strands." + icon_state = "dragonsbeard-loopinf" + folds = 32 + + New() + ..() + src.reagents.add_reagent("enriched_msg", 3) + +/obj/item/reagent_containers/food/snacks/candy/dragons_beard_cut + name = "dragon's beard candy" + desc = "A piece of dragon's beard candy." + real_name = "dragon's beard candy" + icon_state = "dragonsbeard" + initial_volume = 6 + sugar_content = 6 + bites_left = 1 + food_effects = list("food_energized") + var/flavor_name + var/folds + var/eat_message + + heal(var/mob/M) + ..() + boutput(M, src.eat_message) + return + + on_reagent_change() + ..() + src.update_icon() + src.update_name() + + proc/update_name() + src.flavor_name = src.reagents.get_master_reagent_name() + if (src.flavor_name == "sugar" || src.flavor_name == "Enriched MSG") + src.flavor_name = null + src.name = "[name_prefix(null, 1)][src.flavor_name ? "[src.flavor_name]-flavored " : null][src.real_name][name_suffix(null, 1)]" + + update_icon() + var/datum/color/average = src.reagents.get_average_color() + src.food_color = average.to_rgba() + if (folds > 31) + src.name = "infinity-fold dragon's beard candy" + src.desc = "A piece of dragon's beard candy that has been folded into uncountable microscopic strands." + src.real_name = "infinity-fold dragon's beard candy" + src.color = "#FFFFFF" + var/image/glow_image = new /image(src.icon, "dragonsbeard-infoverlay") + var/image/candy_image = new /image(src.icon, "dragonsbeard") + candy_image.color = average.to_rgba() + src.UpdateOverlays(glow_image, "dragonsbeard-infoverlay") + src.UpdateOverlays(candy_image, "dragonsbeard") + else + src.color = average.to_rgb() diff --git a/code/modules/food_and_drink/ingredients.dm b/code/modules/food_and_drink/ingredients.dm index d1597d5989c04..947bb85f319c3 100644 --- a/code/modules/food_and_drink/ingredients.dm +++ b/code/modules/food_and_drink/ingredients.dm @@ -1074,3 +1074,157 @@ obj/item/reagent_containers/food/snacks/ingredient/pepperoni_log M.reagents.add_reagent("omnizine", 3) M.reagents.add_reagent("methamphetamine", 3) ..() + +/obj/item/reagent_containers/food/snacks/ingredient/melted_sugar + name = "tray of melted sugar" + desc = "Sugar that's melted enough to be soft and malleable." + icon_state = "meltedsugar-sheet" + inhand_image_icon = 'icons/mob/inhand/hand_food.dmi' + item_state = "sugartray" + food_color = "#FFFFFF" + initial_volume = 45 + initial_reagents = list("sugar"=15) + bites_left = 5 + use_bite_mask = FALSE + food_color = null + var/image/image_sugar = null + var/image/image_tray = null + event_handler_flags = USE_FLUID_ENTER + required_utensil = REQUIRED_UTENSIL_SPOON + w_class = W_CLASS_BULKY + two_handed = TRUE + dropped_item = /obj/item/plate/tray + sliceable = TRUE + slice_product = /obj/item/reagent_containers/food/snacks/ingredient/melted_sugar_strip + slice_amount = 3 + slice_suffix = "strip" + + heal(var/mob/M) + boutput(M, SPAN_ALERT("It's scalding hot! The roof of your mouth burns!")) + M.TakeDamage("Head", 0, 5, damage_type = DAMAGE_BURN) + ..() + + New() + ..() + src.flags |= OPENCONTAINER + + on_reagent_change() + ..() + src.UpdateIcon() + + update_icon() + var/datum/color/average = src.reagents.get_average_color() + src.food_color = average.to_rgb() + if (!src.image_sugar) + src.image_sugar = image(src.icon, "meltedsugar-sheet") + src.image_sugar.color = src.food_color + src.image_sugar.alpha = round(average.a / 1.5) + if (!src.image_tray) + src.image_tray = image('icons/obj/foodNdrink/food_related.dmi', "tray") + src.UpdateOverlays(src.image_tray, "tray") + src.UpdateOverlays(src.image_sugar, "meltedsugar-sheet") + + attackby(obj/item/W, mob/user) + if (istool(W, TOOL_CUTTING | TOOL_SAWING)) + new /obj/item/plate/tray(src.loc) + ..() + +/obj/item/reagent_containers/food/snacks/ingredient/melted_sugar_strip + name = "melted sugar strips" + desc = "Sugar that's melted enough to be soft and malleable." + icon_state = "meltedsugar-strip" + food_color = "#FFFFFF" + initial_volume = 15 + initial_reagents = list("sugar"=15) + food_color = null + sliceable = TRUE + slice_product = /obj/item/reagent_containers/food/snacks/candy/hard_candy + slice_amount = 3 + slice_suffix = "piece" + var/circular = FALSE // if the strip has been made circular + var/floured = FALSE // if the strip has been covered in flour and is ready to be made into dragon's beard + + heal(var/mob/M) + boutput(M, SPAN_ALERT("It's scalding hot! The roof of your mouth burns!")) + M.TakeDamage("Head", 0, 5, damage_type = DAMAGE_BURN) + ..() + + on_reagent_change() + ..() + src.UpdateIcon() + + update_icon() + var/datum/color/average = src.reagents.get_average_color() + src.food_color = average.to_rgba() + src.color = average.to_rgb() + if (src.floured) + src.alpha = average.a + else + src.alpha = round(average.a / 1.5) + + attack_self(mob/user as mob) + if (!src.circular) + user.visible_message("[user] folds [src] into a ring.", "You fold [src] into a ring.") + name = "melted sugar torus" + src.icon_state = "meltedsugar-circle" + src.sliceable = FALSE + src.circular = TRUE + else if (src.floured) + user.visible_message("[user] twists [src], folding it in on itself!", "You twist [src] and fold it back into a ring.") + playsound(src.loc, "rustle", 50, 1) + var/obj/item/reagent_containers/food/snacks/candy/dragons_beard/A = new /obj/item/reagent_containers/food/snacks/candy/dragons_beard + A.reagents.clear_reagents() + src.reagents.trans_to(A, 15) + user.u_equip(src) + user.put_in_hand_or_drop(A) + qdel(src) + return + src.UpdateIcon() + + attackby(obj/item/W, mob/user) + if (istype(W,/obj/item/rods) || istype(W,/obj/item/stick)) + if(istype(W,/obj/item/stick)) + var/obj/item/stick/S = W + if(S.broken) + boutput(user, SPAN_ALERT("That stick is broken!")) + return + if (circular) + boutput(user, SPAN_NOTICE("You curl the sugar tighter and put it onto [W].")) + var/obj/item/reagent_containers/food/snacks/candy/swirl_lollipop/newcandy = new /obj/item/reagent_containers/food/snacks/candy/swirl_lollipop(get_turf(src)) + newcandy.reagents.clear_reagents() + src.reagents.trans_to(newcandy, 15) + user.u_equip(src) + user.put_in_hand_or_drop(newcandy) + else + boutput(user, SPAN_NOTICE("The melted sugar solidifies on [W]. You give it a vaguely rocky texture.")) + var/obj/item/reagent_containers/food/snacks/candy/rock_candy/newcandy = new /obj/item/reagent_containers/food/snacks/candy/rock_candy(get_turf(src)) + newcandy.reagents.clear_reagents() + src.reagents.trans_to(newcandy, 15) + user.u_equip(src) + user.put_in_hand_or_drop(newcandy) + + if(istype(W,/obj/item/rods)) W.change_stack_amount(-1) + if(istype(W,/obj/item/stick)) W.amount-- + if(!W.amount) qdel(W) + + qdel(src) + else if (src.circular && !src.floured && istype(W,/obj/item/reagent_containers/food/snacks/ingredient/flour)) + boutput(user, SPAN_NOTICE("You flour [src].")) + src.floured = TRUE + src.UpdateIcon() + else + ..() + +/obj/item/reagent_containers/food/snacks/ingredient/brownie_batter + name = "brownie batter" + desc = "As delicious as it may look, you MUST resist the temptation!" + icon = 'icons/obj/foodNdrink/food_dessert.dmi' + icon_state = "brownie_batter" + bites_left = 12 + heal_amt = 1 + food_color = "#38130C" + initial_volume = 40 + initial_reagents = list("chocolate" = 20) + use_bite_mask = FALSE + required_utensil = REQUIRED_UTENSIL_SPOON + w_class = W_CLASS_BULKY diff --git a/code/modules/food_and_drink/pies.dm b/code/modules/food_and_drink/pies.dm index ef903e8a6cfc8..de209b40aadf6 100644 --- a/code/modules/food_and_drink/pies.dm +++ b/code/modules/food_and_drink/pies.dm @@ -21,7 +21,7 @@ ABSTRACT_TYPE(/obj/item/reagent_containers/food/snacks/pie) var/mob/M = hit_atom var/mob/thrower = thr.thrown_by playsound(src, 'sound/impact_sounds/Slimy_Splat_1.ogg', 100, TRUE) - if (thrower.mind?.assigned_role == "Clown" && ishuman(M) && (prob(50) || M.mind?.assigned_role == "Captain") && !M.GetOverlayImage("face_pie")) + if (thrower?.mind?.assigned_role == "Clown" && ishuman(M) && (prob(50) || M.mind?.assigned_role == "Captain") && !M.GetOverlayImage("face_pie")) var/mob/living/carbon/human/H = M var/image/face_pie = image('icons/obj/foodNdrink/food_dessert.dmi', "face_pie") src.visible_message(SPAN_NOTICE("[src] splats right in [H]'s face and remains stuck there!")) diff --git a/code/modules/food_and_drink/plants.dm b/code/modules/food_and_drink/plants.dm index cc361628ce743..72049e2c2b640 100644 --- a/code/modules/food_and_drink/plants.dm +++ b/code/modules/food_and_drink/plants.dm @@ -33,20 +33,10 @@ ABSTRACT_TYPE(/obj/item/reagent_containers/food/snacks/plant) // not this is fruit but some veg do this too. var/datum/plantgenes/new_genes = src.plantgenes + // Copy the genes from the plant we're harvesting to the new piece of produce. HYPpassplantgenes(passed_genes,new_genes) src.generation = harvested_plantpot.generation - // Copy the genes from the plant we're harvesting to the new piece of produce. - - if(origin_plant.hybrid) - // We need to do special shit with the genes if the plant is a spliced - // hybrid since they run off instanced datums rather than referencing - // a specific already-existing one. - var/plantType = origin_plant.type - var/datum/plant/hybrid = new plantType(src) - for(var/V in origin_plant.vars) - if(issaved(origin_plant.vars[V]) && V != "holder") - hybrid.vars[V] = origin_plant.vars[V] - src.planttype = hybrid + src.planttype = HYPgenerateplanttypecopy(src, origin_plant) // Now we calculate the effect of quality on the item switch(quality_status) diff --git a/code/modules/food_and_drink/popsicles.dm b/code/modules/food_and_drink/popsicles.dm index f74767f5bcba3..3ed503622ff7e 100644 --- a/code/modules/food_and_drink/popsicles.dm +++ b/code/modules/food_and_drink/popsicles.dm @@ -1,10 +1,9 @@ /obj/item/stick - name = "popsicle stick" + name = "stick" desc = "You made a house out of these once in kindergarten." icon = 'icons/obj/foodNdrink/food_popsicles.dmi' icon_state = "stick" throwforce = 1 - w_class = W_CLASS_TINY throw_speed = 4 throw_range = 5 w_class = W_CLASS_TINY @@ -16,7 +15,7 @@ if (user.find_in_hand(src) && !src.broken) user.visible_message("<b>[user]</b> bends [src] a little too far back and it snaps in half. Shoot!") playsound(user, 'sound/impact_sounds/Flesh_Crush_1.ogg', 60, TRUE, 0, 2) - src.name = "broken popsicle stick" + src.name = "broken stick" src.icon_state = "stick-broken" src.broken = 1 diff --git a/code/modules/food_and_drink/snacks.dm b/code/modules/food_and_drink/snacks.dm index 38b0bf4f28dd8..81ed7504dd844 100644 --- a/code/modules/food_and_drink/snacks.dm +++ b/code/modules/food_and_drink/snacks.dm @@ -108,7 +108,7 @@ return else boutput(user, SPAN_NOTICE("You sharpen the pizza, and start slicing it.")) - if (istool(W, TOOL_CUTTING | TOOL_SAWING)) + if (istool(W, TOOL_CUTTING | TOOL_SAWING | TOOL_SNIPPING)) if (src.sliced) boutput(user, SPAN_ALERT("This has already been sliced.")) return @@ -3202,3 +3202,46 @@ ABSTRACT_TYPE(/obj/item/reagent_containers/food/snacks/dippable) qdel (W) return return ..() + +/obj/item/reagent_containers/food/snacks/brownie + name = "brownie" + desc = "A perfectly baked square of chocolatey goodness. Yum!" + icon = 'icons/obj/foodNdrink/food_dessert.dmi' + icon_state = "brownie" + bites_left = 3 + heal_amt = 2 + food_color = "#38130C" + initial_volume = 10 + initial_reagents = list("chocolate" = 5) + food_effects = list("food_warm","food_energized") + meal_time_flags = MEAL_TIME_SNACK + +/obj/item/reagent_containers/food/snacks/brownie_batch + name = "brownies" + desc = "A whole batch of freshly baked and chewy brownies." + icon = 'icons/obj/foodNdrink/food_dessert.dmi' + icon_state = "brownie_batch" + bites_left = 12 + heal_amt = 2 + food_color = "#38130C" + initial_volume = 40 + initial_reagents = list("chocolate" = 20) + food_effects = list("food_warm","food_energized") + sliceable = TRUE + slice_product = /obj/item/reagent_containers/food/snacks/brownie + slice_amount = 4 + slice_suffix = "square" + w_class = W_CLASS_BULKY + use_bite_mask = FALSE + + attack(mob/target, mob/user, def_zone, is_special = FALSE, params = null) + if (user == target) + boutput(user, SPAN_ALERT("You can't just cram that in your mouth, you greedy beast!")) + user.visible_message("<b>[user]</b> stares at [src] in a confused manner.") + return + else + user.visible_message(SPAN_ALERT("<b>[user]</b> futilely attempts to shove [src] into [target]'s mouth!")) + return + + attack_self(mob/user as mob) + attack(user, user) diff --git a/code/modules/goonhub/api/api.dm b/code/modules/goonhub/api/api.dm new file mode 100644 index 0000000000000..30092827b6f80 --- /dev/null +++ b/code/modules/goonhub/api/api.dm @@ -0,0 +1,182 @@ + + +var/global/datum/apiHandler/apiHandler + +/** + * Handles queries to the Goonhub APIv2 + */ +/datum/apiHandler + /// Is the api handler available for use? only set to false if we try a bunch of times and still fail + var/enabled = TRUE + + /// how many times should a query attempt to run before giving up + var/maxApiRetries = 5 + /// base delay between query attempts, gets multiplied by attempt number + var/apiRetryDelay = 10 + + /// how many api errors there have been since a successful one + var/emergency_shutoff_counter = 0 + /// lazy count of how many are up/down + var/lazy_concurrent_counter = 0 + /// number of how many are waiting + var/lazy_waiting_counter = 0 + + New() + ..() + if (!config.goonhub_api_endpoint) + src.enabled = FALSE + logTheThing(LOG_DEBUG, null, "<b>API Error</b>: Goonhub endpoint doesn't exist, disabled api handler") + logTheThing(LOG_DIARY, null, "API Error: Goonhub endpoint doesn't exist, disabled api handler", "debug") + + + /// Build and throw an error exception + proc/apiError(list/data, source) + var/datum/apiModel/Error/model = new + model.SetupFromResponse(data) + throw EXCEPTION(model) + + + /** + * Retries an API query in the event of failure + * + * @route (/datum/apiRoute) requested route to call, ex. /datum/apiRoute/players/notes/get + * @attempt (int) number of times we've attempted this query + * @return (/datum/apiModel) model containing parsed data response from api + */ + proc/retryApiQuery(datum/apiRoute/route, attempt) + //the sleep delay grows as attempts increases + sleep(src.apiRetryDelay * attempt) + attempt++ + return src.queryAPI(route, attempt) + + + /** + * Increments or resets the recent error counter + * + * @reset (bool) reset the counter (eg successful request) + */ + proc/trackRecentError(reset = FALSE) + if (reset) + src.emergency_shutoff_counter = 0 + return + + src.emergency_shutoff_counter++ + if (src.enabled && src.emergency_shutoff_counter > 50) + logTheThing(LOG_DEBUG, null, "DISABLING API REQUESTS - Too many errors.") + logTheThing(LOG_DIARY, null, "DISABLING API REQUESTS - Too many errors.", "debug") + message_admins("API requests have been disabled due to too many errors (check debug logs).") + src.enabled = 0 + SPAWN(60 SECONDS) + src.emergency_shutoff_counter = 0 + logTheThing(LOG_DEBUG, null, "RE-ENABLING API REQUESTS - Cooldown expired.") + logTheThing(LOG_DIARY, null, "RE-ENABLING API REQUESTS - Cooldown expired.", "debug") + message_admins("API requests have been re-enabled after waiting.") + src.enabled = 1 + + /** + * Constructs a query to send to the goonhub web API + * + * @route (/datum/apiRoute) requested route to call, ex. /datum/apiRoute/players/notes/get + * @attempt (int) number of times we've attempted this query + * @return (/datum/apiModel|boolean) model containing parsed data response from api, or boolean indicating success + * + */ + proc/queryAPI(datum/apiRoute/route = null, attempt = 1) + if (!enabled) + src.apiError(list("message" = "API Error: Cancelled query due to disabled apiHandler")) + return FALSE + if (!route) + src.apiError(list("message" = "API Error: Cancelled query due to missing route parameter")) + return FALSE + + var/req_route = "[config.goonhub_api_endpoint][route.path][route.routeParams ? "/[route.formatRouteParams()]" : ""]/?[route.formatQueryParams()]" + var/headers = list( + "Accept" = "application/json", + "Content-Type" = "application/json", + "Authorization" = config.goonhub_api_token + ) + + src.lazy_waiting_counter++ + while (src.lazy_concurrent_counter > 50) + // if we have too many requests out, just wait a little to let some finish + sleep(rand(1, 5)) + src.lazy_waiting_counter-- + src.lazy_concurrent_counter++ + + // Actual request + var/datum/http_request/request = new() + var/req_body = route.body ? route.body.toJson() : "" + request.prepare(route.method, req_route, req_body, headers, "") + request.begin_async() + var/time_started = TIME + UNTIL(request.is_complete() || (TIME - time_started) > 10 SECONDS) + if (!request.is_complete()) + src.trackRecentError() + var/msg = "Request timed out during [req_route] (Attempt: [attempt]; recent errors: [src.emergency_shutoff_counter], concurrent: [src.lazy_concurrent_counter])" + logTheThing(LOG_DEBUG, null, "<b>API Error</b>: [msg]") + logTheThing(LOG_DIARY, null, "API Error: [msg]", "debug") + + // This one is over so we can clear it now + src.lazy_concurrent_counter-- + if (attempt < src.maxApiRetries) + return src.retryApiQuery(route, attempt) + + src.apiError(list("message" = "API Error: Request timed out during [req_route]")) + return FALSE + + // Otherwise the request did finish so we can lower this + src.lazy_concurrent_counter-- + var/datum/http_response/response = request.into_response() + + if (response.errored || !response.body) + src.trackRecentError() + var/msg = "No response from server during query [!response.body ? "during" : "to"] [req_route] (Attempt: [attempt]; recent errors: [src.emergency_shutoff_counter], concurrent: [src.lazy_concurrent_counter])" + logTheThing(LOG_DEBUG, null, "<b>API Error</b>: [msg]") + logTheThing(LOG_DIARY, null, "API Error: [msg]", "debug") + + if (attempt < src.maxApiRetries) + return src.retryApiQuery(route, attempt) + + src.apiError(list("message" = "API Error: No response from server during query [!response.body ? "during" : "to"] [req_route]")) + + // At this point we assume the request was a success, so reset the error counter + src.trackRecentError(TRUE) + + // Parse the response + var/list/data + try + data = json_decode(response.body) + catch + // pass so we can handle retries or build our own exception + + // Bad data format + if (!data) + var/msg = "JSON decode error during [req_route] (Attempt: [attempt]; recent errors: [src.emergency_shutoff_counter], concurrent: [src.lazy_concurrent_counter])" + logTheThing(LOG_DEBUG, null, "<b>API Error</b>: [msg]") + logTheThing(LOG_DIARY, null, "API Error: [msg]", "debug") + + if (attempt < src.maxApiRetries) + return src.retryApiQuery(route, attempt) + + src.apiError(list("message" = "API Error: JSON decode error during [req_route]")) + + // Handle client and server error responses + if (response.status_code >= 400) + data["status_code"] = response.status_code + src.apiError(data) + return FALSE + + // Validation + var/datum/apiModel/model = new route.correct_response + if (istype(model, /datum/apiModel/Paginated) || istype(model, /datum/apiModel/Message)) + model.SetupFromResponse(data, route) + else + model.SetupFromResponse(data["data"], route) + if (!model.VerifyIntegrity()) + var/msg = "Verification error on response during [req_route] (Attempt: [attempt]; recent errors: [src.emergency_shutoff_counter], concurrent: [src.lazy_concurrent_counter])" + logTheThing(LOG_DEBUG, null, "<b>API Error</b>: [msg]") + logTheThing(LOG_DIARY, null, "API Error: [msg]", "debug") + src.apiError(list("message" = "API Error: Verification error on response during [req_route]")) + return FALSE + + return model diff --git a/code/modules/goonhub/api/apiGuide.md b/code/modules/goonhub/api/apiGuide.md new file mode 100644 index 0000000000000..cd679d548f6b8 --- /dev/null +++ b/code/modules/goonhub/api/apiGuide.md @@ -0,0 +1,194 @@ +## About the DM side API +This is written from the understanding of Tyrant, who is not an API developer. Some things may be slightly wrong. + +Useful links: +Goonhub API docs: https://staging.goonhub.com/docs/api#/ +Event tracking docs: https://staging.goonhub.com/docs/events/1.0/overview + +### Endpoints and apiRoutes +Endpoints are the ways that the API communicates, and they contain routes. The routes contain several vars: + +A route can have one of four method types: +- `GET` Which checks information. +- `POST` Which adds new information. +- `PUT` Which updates/overwrites existing information. +- `DELETE` Which removes information. +These are specified in the `method` var using defines. + +Each route has a path which it connects to as well, for instance https://staging.goonhub.com/api +**/bans**. This is specified in the form of a string in the `path` var. + +Path parameters are stored in the `routeParams` var. These are used when the path ends with a variable, for instance, `https://staging.goonhub.com/api/bans/{ban}`, which has the path parameter `{ban}`. + +Query parameters send extra information when connecting, stored in `queryParams`. This is usually a list of strings, for instance, `queryParams = list("filters", "sort_by", "descending", "per_page")`. + +The request body (`body` var) is what is sent through the connection. These are usually in the form of a `/datum/apiBody`, which are in the requests folder in the repo. More information is in the following sections. + +The response model (`correct_response` var) is what is sent back. These are in the form of a `/datum/apiModel`, which are in the models folder in the repo. More information is in the following sections. + +A Template for API endpoint routes: +```dm +/// [method type e.g. POST] [path e.g. /players/notes] +/// [reference to the name of the file or what it does, e.g. Add] +//datum/apiRoute/[path of route] + method = RUSTG_HTTP_METHOD_[method type] + path = "[the path of the endpoint it connects to]" + routeParams = list([list of parameter items, separated by commas]) // [the primitive type of each parameter] + queryParams = list([list of parameter items, separated by commas]) // [the primitive type of each parameter] + body = [the datum of the body, under /datum/apiBody] + correct_response = [the datum of the model, under datum/apiModel] + + buildBody( // check the apiBody section below to understand what this means + field1, + field2, + field3 + ) + . = ..(args) + +// A proper example: + +/// PUT /bans/{ban} +/// Update +/datum/apiRoute/bans/update + method = RUSTG_HTTP_METHOD_PUT + path = "/bans" + routeParams = list("ban") // integer + body = /datum/apiBody/bans/add + correct_response = /datum/apiModel/Tracked/BanResource + + buildBody( + game_admin_ckey, + round_id, + server_id, + ckey, + comp_id, + ip, + reason, + duration + ) + . = ..(args) +``` + +The reason why the API files are formatted this way is so that "it's optimized so you can just copypaste stuff and change it via column/vertical select" ~ZeWaka. + +Other notes: +- the path should start with slash. +- not all methods require all the vars. In fact, some are mutually exclusive. +- If the apiBody or apiModel doesn't exist, make it. Don't try to just shove a list of strings in; it won't work. + +#### Making your own apiRoute's +The list of what to make and how it works is at https://staging.goonhub.com/docs/api, along with the request body and response model needed. They need to match the `apiRoute` in order for the API to work correctly. +- Under request, the parameters should match in the form of a list of strings matching the parameter names. If it says query parameters, use `queryParams`, if it says path parameters, use `routeParams`. +- If the path ends with something like `/{kind of routeParam}`, you don't include it in `src.path`. It gets appended automatically later on by the routeParams. +- The request body should match an `apiBody`. +- The response body should match an `apiModel`. +- If the above two don't have matching ones, you have to make them. +- If you're making new files, follow the format of existing names. + +### Request bodies and apiBody +A `/datum/apiBody` is a type of request which gets sent through a route and provides information. These are typically used on `POST` and `PUT` method using routes. +The Goonhub api, while it lists what's needed in the body of the request for each route, doesn't actually give fixed names for each body. You can check what's required in the body under "request" -> "Body". + +This body will need to then be "built" by calling `buildBody()` on the routes that use them, as shown in the example in the above `/datum/apiRoute` section. This way, autocomplete works better. It's a bit silly but will help overall. + +The default format for making them is as follows: +```dm +/datum/apiBody/[path] + fields = list( + "field1", // [type] + "field2", // [type] + "field3" // [type] + ) + +/datum/apiBody/[path]/VerifyIntegrity( + . = ..() + if ( + isnull(src.values["field1"]) \ + || isnull(src.values["field2"]) \ + ) // note that this means field1 and field2 can't be null, but field3 can. +) + +// a real example: +/datum/apiBody/bans/add + fields = list( + "game_admin_ckey", // string + "round_id", // integer + "server_id", // string + "ckey", // string + "comp_id", // string + "ip", // string + "reason", // string + "duration" // integer + ) + +/datum/apiBody/bans/add/VerifyIntegrity() + . = ..() + if ( + isnull(src.values["game_admin_ckey"]) \ + || isnull(src.values["round_id"]) \ + || isnull(src.values["server_id"]) \ + || isnull(src.values["reason"]) \ + ) + return FALSE +``` + +### Response models and apiModel +A `/datum/apiModel` is a response that is sent back after the task is complete. They are sometimes called resources. The Goonhub API guide lists what kind is required and what they contain. You can check what is required under "Responses" -> "Body". They're typically used in `GET` method routes. + +Note that there are certain parents, which have built in fields. For instance, the abstract type `/datum/apiModel/Tracked` has three fields: `id`, `created_at` and `updated_at`. Anything that needs these three should usually be a subtype and won't have to redefine them. + +Similarly, `/datum/apiModel/Tracked/PlayerRes` includes the tracked vars and one more: `player_id`. Meanwhile `/datum/apiModel/Paginated` is usually used in `RUSTG_HTTP_METHOD_GET` methods and includes three vars: `data` (which is another apiModel, nested inside), `links` and `meta`. + +The usual format is below: +```dm +/// [Name] +/datum/apiModel/[path] + var/field1 = null // [type] + var/field2 = null // [type] + var/field3 = null // [type] + +/datum/apiModel/[path]/SetupFromResponse(response) + . = ..() + src.field1 = response["field1"] + src.field2 = response["field2"] + src.field3 = response["field3"] + +/datum/apiModel/[path]/VerifyIntegrity() + . = ..() + if ( + isnull(src.[field1]) \ // assuming that field1 and 2 cannot be null and field3 can + || isnull(src.[field2]) + ) + return FALSE + +/datum/apiModel/[path]/ToString() + . = list() + .["field1"] = src.field1 + .["field2"] = src.field2 + .["field3"] = src.field3 + return json_encode(.) + +//A real example: +/// Error +/datum/apiModel/Error + var/message = null // string + var/errors = null // null or list + +/datum/apiModel/Error/SetupFromResponse(response) + . = ..() + src.message = response["message"] + src.errors = response["errors"] + +/datum/apiModel/Error/VerifyIntegrity() + . = ..() + if ( + isnull(src.message) \ + ) + return FALSE + +/datum/apiModel/Error/ToString() + . = list() + .["message"] = src.message + .["errors"] = src.errors + return json_encode(.) +``` diff --git a/code/modules/goonhub/api/models/Error.dm b/code/modules/goonhub/api/models/Error.dm new file mode 100644 index 0000000000000..9aea132665836 --- /dev/null +++ b/code/modules/goonhub/api/models/Error.dm @@ -0,0 +1,25 @@ + +/// Error +/datum/apiModel/Error + var/message = null // string + var/errors = null // null or list + var/status_code = null // null or int + +/datum/apiModel/Error/SetupFromResponse(response) + . = ..() + src.message = response["message"] + src.errors = response["errors"] + src.status_code = response["status_code"] + +/datum/apiModel/Error/VerifyIntegrity() + . = ..() + if ( + isnull(src.message) \ + ) + return FALSE + +/datum/apiModel/Error/ToList() + . = ..() + .["message"] = src.message + .["errors"] = src.errors + .["status_code"] = src.status_code diff --git a/code/modules/goonhub/api/models/Message.dm b/code/modules/goonhub/api/models/Message.dm new file mode 100644 index 0000000000000..7b207ff0f959e --- /dev/null +++ b/code/modules/goonhub/api/models/Message.dm @@ -0,0 +1,19 @@ + +/// Message +/datum/apiModel/Message + var/message = null // string + +/datum/apiModel/Message/SetupFromResponse(response) + . = ..() + src.message = response["message"] + +/datum/apiModel/Message/VerifyIntegrity() + . = ..() + if ( + isnull(src.message) + ) + return FALSE + +/datum/apiModel/Message/ToList() + . = ..() + .["message"] = src.message diff --git a/code/modules/goonhub/api/models/_Paginated.dm b/code/modules/goonhub/api/models/_Paginated.dm new file mode 100644 index 0000000000000..c58b5ecd1beba --- /dev/null +++ b/code/modules/goonhub/api/models/_Paginated.dm @@ -0,0 +1,34 @@ + +ABSTRACT_TYPE(/datum/apiModel/Paginated) +/// Paginated - ABSTRACT +/// Anything with a paginated list inherits from this +/datum/apiModel/Paginated + var/list/datum/apiModel/data = null + var/list/links = null + var/list/meta = null + +/datum/apiModel/Paginated/SetupFromResponse(response) + . = ..() + src.links = response["links"] + src.meta = response["meta"] + +/datum/apiModel/Paginated/VerifyIntegrity() + . = ..() + if ( + isnull(src.data) \ + || isnull(src.links) \ + || isnull(src.meta) + ) + return FALSE + + for (var/datum/apiModel/item in src.data) + if (!item.VerifyIntegrity()) + return FALSE + +/datum/apiModel/Paginated/ToList() + . = ..() + .["data"] = list() + for (var/datum/apiModel/item in src.data) + .["data"] += list(item.ToList()) + .["links"] = src.links + .["meta"] = src.meta diff --git a/code/modules/goonhub/api/models/_PlayerResParent.dm b/code/modules/goonhub/api/models/_PlayerResParent.dm new file mode 100644 index 0000000000000..a62676134d7f2 --- /dev/null +++ b/code/modules/goonhub/api/models/_PlayerResParent.dm @@ -0,0 +1,21 @@ + +ABSTRACT_TYPE(/datum/apiModel/Tracked/PlayerRes) +/// PlayerRes - ABSTRACT +/// All PlayerResourceXYZ inherit from this - shared player id field +/datum/apiModel/Tracked/PlayerRes + var/player_id = null // integer + +/datum/apiModel/Tracked/PlayerRes/SetupFromResponse(response) + . = ..() + src.player_id = response["player_id"] + +/datum/apiModel/Tracked/PlayerRes/VerifyIntegrity() + . = ..() + if ( + isnull(src.player_id) \ + ) + return FALSE + +/datum/apiModel/Tracked/PlayerRes/ToList() + . = ..() + .["player_id"] = src.player_id diff --git a/code/modules/goonhub/api/models/_Tracked.dm b/code/modules/goonhub/api/models/_Tracked.dm new file mode 100644 index 0000000000000..f028aa029eb13 --- /dev/null +++ b/code/modules/goonhub/api/models/_Tracked.dm @@ -0,0 +1,28 @@ + +ABSTRACT_TYPE(/datum/apiModel/Tracked) +/// Tracked - ABSTRACT +/// Anything with the two timestamp fields inherit from this +/datum/apiModel/Tracked + var/id = null // integer + var/created_at = null // date-time + var/updated_at = null // date-time | null + +/datum/apiModel/Tracked/SetupFromResponse(response) + . = ..() + src.id = response["id"] + src.created_at = response["created_at"] + src.updated_at = response["updated_at"] + +/datum/apiModel/Tracked/VerifyIntegrity() + . = ..() + if ( + isnull(src.id) \ + || isnull(src.created_at) \ + ) + return FALSE + +/datum/apiModel/Tracked/ToList() + . = ..() + .["id"] = src.id + .["created_at"] = src.created_at + .["updated_at"] = src.updated_at diff --git a/code/modules/goonhub/api/models/apiModel.dm b/code/modules/goonhub/api/models/apiModel.dm new file mode 100644 index 0000000000000..031c112cc3bc5 --- /dev/null +++ b/code/modules/goonhub/api/models/apiModel.dm @@ -0,0 +1,22 @@ + + +ABSTRACT_TYPE(/datum/apiModel) +/// Base apiModel datum - ABSTRACT +/// Everything is generally required unless annotated as such +/datum/apiModel + +/// Override to verify that the model object is correctly formed. Return FALSE if not. +/datum/apiModel/proc/VerifyIntegrity() + return TRUE + +/// Override to convert a model to an associative list +/datum/apiModel/proc/ToList() + return list() + +/// Get a string representation of a model for debugging purposes. Optional. +/datum/apiModel/proc/ToString() + return json_encode(src.ToList()) + +/// Override to build a model from an API response object +/datum/apiModel/proc/SetupFromResponse() + return diff --git a/code/modules/goonhub/api/models/bans/BanDetail.dm b/code/modules/goonhub/api/models/bans/BanDetail.dm new file mode 100644 index 0000000000000..87a3476eb88e6 --- /dev/null +++ b/code/modules/goonhub/api/models/bans/BanDetail.dm @@ -0,0 +1,34 @@ + +/// BanDetail +/datum/apiModel/Tracked/BanDetail + var/ban_id = null // integer + var/ckey = null // string + var/comp_id = null // integer + var/ip = null // integer + var/deleted_at = null // date-time | null + +/datum/apiModel/Tracked/BanDetail/SetupFromResponse(response) + . = ..() + src.ban_id = response["ban_id"] + src.ckey = response["ckey"] + src.comp_id = response["comp_id"] + src.ip = response["ip"] + src.deleted_at = response["deleted_at"] + +/datum/apiModel/Tracked/BanDetail/VerifyIntegrity() + . = ..() + if ( + isnull(src.ban_id) \ + ) + return FALSE + +/datum/apiModel/Tracked/BanDetail/ToList() + . = ..() + .["id"] = src.id + .["ban_id"] = src.ban_id + .["ckey"] = src.ckey + .["comp_id"] = src.comp_id + .["ip"] = src.ip + .["created_at"] = src.created_at + .["updated_at"] = src.updated_at + .["deleted_at"] = src.deleted_at diff --git a/code/modules/goonhub/api/models/bans/BanResource.dm b/code/modules/goonhub/api/models/bans/BanResource.dm new file mode 100644 index 0000000000000..f9b815b36eb42 --- /dev/null +++ b/code/modules/goonhub/api/models/bans/BanResource.dm @@ -0,0 +1,71 @@ + +/// BanResource +/datum/apiModel/Tracked/BanResource + var/round_id = null // integer + var/game_admin_id = null // integer + var/server_id = null // string + var/reason = null // string + var/duration_human = null // string + var/expires_at = null // date-time | null + var/deleted_at = null // date-time | null + var/game_admin = null // { id: integer, ckey: string, name: string } - not required + var/datum/apiModel/Tracked/GameRound/game_round = null // /datum/apiModel/GameRound - not required + var/original_ban_detail = null // { id: integer, ban_id: integer, ckey: string, comp_id: string, ip: string } + var/list/datum/apiModel/Tracked/BanDetail/details = null // [/datum/apiModel/BanDetail] - not required + var/requires_appeal = null // boolean + +/datum/apiModel/Tracked/BanResource/SetupFromResponse(response) + . = ..() + src.round_id = response["round_id"] + src.game_admin_id = response["game_admin_id"] + src.server_id = response["server_id"] + src.reason = response["reason"] + src.duration_human = response["duration_human"] + src.expires_at = response["expires_at"] + src.deleted_at = response["deleted_at"] + src.game_admin = response["game_admin"] + + if (response["game_round"]) + src.game_round = new + src.game_round.SetupFromResponse(response["game_round"]) + + src.original_ban_detail = response["original_ban_detail"] + src.requires_appeal = response["requires_appeal"] + + src.details = list() + for (var/item in response["details"]) + var/datum/apiModel/Tracked/BanDetail/detail = new + detail.SetupFromResponse(item) + src.details.Add(detail) + +/datum/apiModel/Tracked/BanResource/VerifyIntegrity() + . = ..() + if ( + isnull(src.game_admin_id) \ + || isnull(src.reason) \ + || isnull(src.game_admin) \ + || isnull(src.original_ban_detail) + ) + return FALSE + +/datum/apiModel/Tracked/BanResource/ToList() + . = ..() + .["id"] = src.id + .["round_id"] = src.round_id + .["game_admin_id"] = src.game_admin_id + .["server_id"] = src.server_id + .["reason"] = src.reason + .["duration_human"] = src.duration_human + .["expires_at"] = src.expires_at + .["created_at"] = src.created_at + .["updated_at"] = src.updated_at + .["deleted_at"] = src.deleted_at + .["game_admin"] = src.game_admin + .["game_round"] = src.game_round + if (src.game_round) + .["game_round"] = src.game_round.ToList() + .["original_ban_detail"] = src.original_ban_detail + .["details"] = list() + for (var/datum/apiModel/Tracked/BanDetail/detail in src.details) + .["details"] += list(detail.ToList()) + .["requires_appeal"] = src.requires_appeal diff --git a/code/modules/goonhub/api/models/bans/BanResourceList.dm b/code/modules/goonhub/api/models/bans/BanResourceList.dm new file mode 100644 index 0000000000000..b3749c623169b --- /dev/null +++ b/code/modules/goonhub/api/models/bans/BanResourceList.dm @@ -0,0 +1,11 @@ + +/// BanResourceList +/datum/apiModel/Paginated/BanResourceList + +/datum/apiModel/Paginated/BanResourceList/SetupFromResponse(response) + . = ..() + src.data = list() + for (var/item in response["data"]) + var/datum/apiModel/Tracked/BanResource/ban = new() + ban.SetupFromResponse(item) + src.data.Add(ban) diff --git a/code/modules/goonhub/api/models/bans/JobBanResource.dm b/code/modules/goonhub/api/models/bans/JobBanResource.dm new file mode 100644 index 0000000000000..93a9f0d9fd30c --- /dev/null +++ b/code/modules/goonhub/api/models/bans/JobBanResource.dm @@ -0,0 +1,47 @@ + +/// JobBanResource +/datum/apiModel/Tracked/JobBanResource + var/round_id = null // integer + var/game_admin_id = null // integer + var/server_id = null // string + var/ckey = null // string + var/banned_from_job = null // string + var/reason = null // string + var/expires_at = null // date-time + var/deleted_at = null // date-time + var/game_admin = null // { id: integer, ckey: string, name: string } - not required + +/datum/apiModel/Tracked/JobBanResource/SetupFromResponse(response) + . = ..() + src.round_id = response["round_id"] + src.game_admin_id = response["game_admin_id"] + src.server_id = response["server_id"] + src.ckey = response["ckey"] + src.banned_from_job = response["banned_from_job"] + src.reason = response["reason"] + src.expires_at = response["expires_at"] + src.deleted_at = response["deleted_at"] + src.game_admin = response["game_admin"] + +/datum/apiModel/Tracked/JobBanResource/VerifyIntegrity() + . = ..() + if ( + isnull(src.ckey) \ + || isnull(src.banned_from_job) + ) + return FALSE + +/datum/apiModel/Tracked/JobBanResource/ToList() + . = ..() + .["id"] = src.id + .["round_id"] = src.round_id + .["game_admin_id"] = src.game_admin_id + .["server_id"] = src.server_id + .["ckey"] = src.ckey + .["banned_from_job"] = src.banned_from_job + .["reason"] = src.reason + .["expires_at"] = src.expires_at + .["created_at"] = src.created_at + .["updated_at"] = src.updated_at + .["deleted_at"] = src.deleted_at + .["game_admin"] = src.game_admin diff --git a/code/modules/goonhub/api/models/bans/JobBanResourceList.dm b/code/modules/goonhub/api/models/bans/JobBanResourceList.dm new file mode 100644 index 0000000000000..6f11846b13796 --- /dev/null +++ b/code/modules/goonhub/api/models/bans/JobBanResourceList.dm @@ -0,0 +1,11 @@ + +/// JobBanResourceList +/datum/apiModel/Paginated/JobBanResourceList + +/datum/apiModel/Paginated/JobBanResourceList/SetupFromResponse(response) + . = ..() + src.data = list() + for (var/item in response["data"]) + var/datum/apiModel/Tracked/JobBanResource/jobBan = new() + jobBan.SetupFromResponse(item) + src.data.Add(jobBan) diff --git a/code/modules/goonhub/api/models/bans/JobBansForPlayer.dm b/code/modules/goonhub/api/models/bans/JobBansForPlayer.dm new file mode 100644 index 0000000000000..f0e7e48085b31 --- /dev/null +++ b/code/modules/goonhub/api/models/bans/JobBansForPlayer.dm @@ -0,0 +1,12 @@ + +/// JobBansForPlayer +/datum/apiModel/JobBansForPlayer + var/list/jobs = null + +/datum/apiModel/JobBansForPlayer/SetupFromResponse(response) + . = ..() + src.jobs = response + +/datum/apiModel/JobBansForPlayer/ToList() + . = ..() + .["jobs"] = src.jobs diff --git a/code/modules/goonhub/api/models/dectalk/DectalkPlayResource.dm b/code/modules/goonhub/api/models/dectalk/DectalkPlayResource.dm new file mode 100644 index 0000000000000..4dd4c8dd0f5b8 --- /dev/null +++ b/code/modules/goonhub/api/models/dectalk/DectalkPlayResource.dm @@ -0,0 +1,20 @@ + + +/// DectalkPlayResource +/datum/apiModel/DectalkPlayResource + var/audio = null // string, url pointing to the recorded audio file + +/datum/apiModel/DectalkPlayResource/SetupFromResponse(response) + . = ..() + src.audio = response["audio"] + +/datum/apiModel/DectalkPlayResource/VerifyIntegrity() + . = ..() + if ( + isnull(src.audio) \ + ) + return FALSE + +/datum/apiModel/DectalkPlayResource/ToList() + . = ..() + .["audio"] = src.audio diff --git a/code/modules/goonhub/api/models/events/EventAiLawResource.dm b/code/modules/goonhub/api/models/events/EventAiLawResource.dm new file mode 100644 index 0000000000000..8fb462db2b6b8 --- /dev/null +++ b/code/modules/goonhub/api/models/events/EventAiLawResource.dm @@ -0,0 +1,52 @@ + +/// EventAiLawResource +/datum/apiModel/Tracked/EventAiLawResource + var/round_id = null // string + var/player_id = null // string + var/ai_name = null // string + var/law_number = null // string + var/law_text = null // string + var/uploader_name = null // string + var/uploader_job = null // string + var/uploader_ckey = null // string + +/datum/apiModel/Tracked/EventAiLawResource/SetupFromResponse(response) + . = ..() + src.round_id = response["round_id"] + src.player_id = response["player_id"] + src.ai_name = response["ai_name"] + src.law_number = response["law_number"] + src.law_text = response["law_text"] + src.uploader_name = response["uploader_name"] + src.uploader_job = response["uploader_job"] + src.uploader_ckey = response["uploader_ckey"] + +/datum/apiModel/Tracked/EventAiLawResource/VerifyIntegrity() + if ( + isnull(id) \ + || isnull(src.round_id) \ + || isnull(src.player_id) \ + || isnull(src.ai_name) \ + || isnull(src.law_number) \ + || isnull(src.law_text) \ + || isnull(src.uploader_name) \ + || isnull(src.uploader_job) \ + || isnull(src.uploader_ckey) \ + || isnull(src.created_at) \ + || isnull(src.updated_at) \ + ) + return FALSE + +/datum/apiModel/Tracked/EventAiLawResource/ToList() + . = ..() + .["id"] = src.id + .["round_id"] = src.round_id + .["player_id"] = src.player_id + .["ai_name"] = src.ai_name + .["law_number"] = src.law_number + .["law_text"] = src.law_text + .["uploader_name"] = src.uploader_name + .["uploader_job"] = src.uploader_job + .["uploader_ckey"] = src.uploader_ckey + .["created_at"] = src.created_at + .["updated_at"] = src.updated_at diff --git a/code/modules/goonhub/api/models/events/EventFineResource.dm b/code/modules/goonhub/api/models/events/EventFineResource.dm new file mode 100644 index 0000000000000..f92c07cd53a80 --- /dev/null +++ b/code/modules/goonhub/api/models/events/EventFineResource.dm @@ -0,0 +1,52 @@ + +/// EventFineResource +/datum/apiModel/Tracked/EventFineResource + var/round_id = null // string + var/player_id = null // string + var/target = null // string + var/reason = null // string + var/issuer = null // string + var/issuer_job = null // string + var/issuer_ckey = null // string + var/amount = null // string + +/datum/apiModel/Tracked/EventFineResource/SetupFromResponse(response) + . = ..() + src.round_id = response["round_id"] + src.player_id = response["player_id"] + src.target = response["target"] + src.reason = response["reason"] + src.issuer = response["issuer"] + src.issuer_job = response["issuer_job"] + src.issuer_ckey = response["issuer_ckey"] + src.amount = response["amount"] + +/datum/apiModel/Tracked/EventFineResource/VerifyIntegrity() + if ( + isnull(id) \ + || isnull(src.round_id) \ + || isnull(src.player_id) \ + || isnull(src.target) \ + || isnull(src.reason) \ + || isnull(src.issuer) \ + || isnull(src.issuer_job) \ + || isnull(src.issuer_ckey) \ + || isnull(src.amount) \ + || isnull(src.created_at) \ + || isnull(src.updated_at) \ + ) + return FALSE + +/datum/apiModel/Tracked/EventFineResource/ToList() + . = ..() + .["id"] = src.id + .["round_id"] = src.round_id + .["player_id"] = src.player_id + .["target"] = src.target + .["reason"] = src.reason + .["issuer"] = src.issuer + .["issuer_job"] = src.issuer_job + .["issuer_ckey"] = src.issuer_ckey + .["amount"] = src.amount + .["created_at"] = src.created_at + .["updated_at"] = src.updated_at diff --git a/code/modules/goonhub/api/models/events/EventStationNameResource.dm b/code/modules/goonhub/api/models/events/EventStationNameResource.dm new file mode 100644 index 0000000000000..5aaf0fa2d2814 --- /dev/null +++ b/code/modules/goonhub/api/models/events/EventStationNameResource.dm @@ -0,0 +1,32 @@ + +/// EventStationNameResource +/datum/apiModel/Tracked/EventStationNameResource + var/round_id = null // string + var/player_id = null // string + var/name = null // string + +/datum/apiModel/Tracked/EventStationNameResource/SetupFromResponse(response) + . = ..() + src.round_id = response["round_id"] + src.player_id = response["player_id"] + src.name = response["name"] + +/datum/apiModel/Tracked/EventStationNameResource/VerifyIntegrity() + if ( + isnull(id) \ + || isnull(src.round_id) \ + || isnull(src.player_id) \ + || isnull(src.name) \ + || isnull(src.created_at) \ + || isnull(src.updated_at) \ + ) + return FALSE + +/datum/apiModel/Tracked/EventStationNameResource/ToList() + . = ..() + .["id"] = src.id + .["round_id"] = src.round_id + .["player_id"] = src.player_id + .["name"] = src.name + .["created_at"] = src.created_at + .["updated_at"] = src.updated_at diff --git a/code/modules/goonhub/api/models/events/EventTicketResource.dm b/code/modules/goonhub/api/models/events/EventTicketResource.dm new file mode 100644 index 0000000000000..1b6d109fc4583 --- /dev/null +++ b/code/modules/goonhub/api/models/events/EventTicketResource.dm @@ -0,0 +1,48 @@ + +/// EventTicketResource +/datum/apiModel/Tracked/EventTicketResource + var/round_id = null // string + var/player_id = null // string + var/target = null // string + var/reason = null // string + var/issuer = null // string + var/issuer_job = null // string + var/issuer_ckey = null // string + +/datum/apiModel/Tracked/EventTicketResource/SetupFromResponse(response) + . = ..() + src.round_id = response["round_id"] + src.player_id = response["player_id"] + src.target = response["target"] + src.reason = response["reason"] + src.issuer = response["issuer"] + src.issuer_job = response["issuer_job"] + src.issuer_ckey = response["issuer_ckey"] + +/datum/apiModel/Tracked/EventTicketResource/VerifyIntegrity() + if ( + isnull(id) \ + || isnull(src.round_id) \ + || isnull(src.player_id) \ + || isnull(src.target) \ + || isnull(src.reason) \ + || isnull(src.issuer) \ + || isnull(src.issuer_job) \ + || isnull(src.issuer_ckey) \ + || isnull(src.created_at) \ + || isnull(src.updated_at) \ + ) + return FALSE + +/datum/apiModel/Tracked/EventTicketResource/ToList() + . = ..() + .["id"] = src.id + .["round_id"] = src.round_id + .["player_id"] = src.player_id + .["target"] = src.target + .["reason"] = src.reason + .["issuer"] = src.issuer + .["issuer_job"] = src.issuer_job + .["issuer_ckey"] = src.issuer_ckey + .["created_at"] = src.created_at + .["updated_at"] = src.updated_at diff --git a/code/modules/goonhub/api/models/gameadmins/GameAdmin.dm b/code/modules/goonhub/api/models/gameadmins/GameAdmin.dm new file mode 100644 index 0000000000000..a6e9cd8e5ab5f --- /dev/null +++ b/code/modules/goonhub/api/models/gameadmins/GameAdmin.dm @@ -0,0 +1,35 @@ + + +/// GameAdmin +/datum/apiModel/Tracked/GameAdmin + var/ckey = null // integer + var/name = null // string + var/discord_id = null // string + var/rank_id = null // integer + +/datum/apiModel/Tracked/GameAdmin/SetupFromResponse(response) + . = ..() + src.ckey = response["ckey"] + src.name = response["name"] + src.discord_id = response["discord_id"] + src.rank_id = response["rank_id"] + +/datum/apiModel/Tracked/GameAdmin/VerifyIntegrity() + if ( + isnull(src.id) \ + || isnull(src.ckey) \ + || isnull(src.name) \ + || isnull(src.discord_id) \ + || isnull(src.rank_id) \ + ) + return FALSE + +/datum/apiModel/Tracked/GameAdmin/ToList() + . = ..() + .["id"] = src.id + .["ckey"] = src.ckey + .["name"] = src.name + .["discord_id"] = src.discord_id + .["rank_id"] = src.rank_id + .["created_at"] = src.created_at + .["updated_at"] = src.updated_at diff --git a/code/modules/goonhub/api/models/gameadmins/GameAdminRank.dm b/code/modules/goonhub/api/models/gameadmins/GameAdminRank.dm new file mode 100644 index 0000000000000..9ad27ec8af63e --- /dev/null +++ b/code/modules/goonhub/api/models/gameadmins/GameAdminRank.dm @@ -0,0 +1,23 @@ +/// GameAdminRank +/datum/apiModel/Tracked/GameAdminRank + var/rank = null // string + +/datum/apiModel/Tracked/GameAdminRank/SetupFromResponse(response) + . = ..() + src.rank = response["rank"] + +/datum/apiModel/Tracked/GameAdminRank/VerifyIntegrity() + if ( + isnull(src.id) \ + || isnull(src.rank) \ + || isnull(src.created_at) \ + || isnull(src.updated_at) \ + ) + return FALSE + +/datum/apiModel/Tracked/GameAdminRank/ToList() + . = ..() + .["id"] = src.id + .["rank"] = src.rank + .["created_at"] = src.created_at + .["updated_at"] = src.updated_at diff --git a/code/modules/goonhub/api/models/gameadmins/GameAdminResource.dm b/code/modules/goonhub/api/models/gameadmins/GameAdminResource.dm new file mode 100644 index 0000000000000..1c52fff1e3696 --- /dev/null +++ b/code/modules/goonhub/api/models/gameadmins/GameAdminResource.dm @@ -0,0 +1,34 @@ +/// GameAdminResource +/datum/apiModel/Tracked/GameAdminResource + var/ckey = null // string + var/name = null // string + var/discord_id = null // string + var/datum/apiModel/Tracked/GameAdminRank/rank = null + +/datum/apiModel/Tracked/GameAdminResource/SetupFromResponse(response) + . = ..() + src.ckey = response["ckey"] + src.name = response["name"] + src.discord_id = response["discord_id"] + + if ("rank" in response) + src.rank = new + src.rank = src.rank.SetupFromResponse(response["rank"]) + +/datum/apiModel/Tracked/GameAdminResource/VerifyIntegrity() + . = ..() + if ( + isnull(src.ckey) + ) + return FALSE + +/datum/apiModel/Tracked/GameAdminResource/ToList() + . = ..() + .["id"] = src.id + .["ckey"] = src.ckey + .["name"] = src.name + .["discord_id"] = src.discord_id + if (src.rank) + .["rank"] = src.rank.ToList() + .["created_at"] = src.created_at + .["updated_at"] = src.updated_at diff --git a/code/modules/goonhub/api/models/gauntlet/PreviousGauntlets.dm b/code/modules/goonhub/api/models/gauntlet/PreviousGauntlets.dm new file mode 100644 index 0000000000000..599946f11bb61 --- /dev/null +++ b/code/modules/goonhub/api/models/gauntlet/PreviousGauntlets.dm @@ -0,0 +1,19 @@ + +/// PreviousGauntlets +/datum/apiModel/PreviousGauntlets + var/gauntlets_completed = null // integer + +/datum/apiModel/PreviousGauntlets/SetupFromResponse(response) + . = ..() + src.gauntlets_completed = response["gauntlets_completed"] + +/datum/apiModel/PreviousGauntlets/VerifyIntegrity() + . = ..() + if ( + isnull(src.gauntlets_completed) \ + ) + return FALSE + +/datum/apiModel/PreviousGauntlets/ToList() + . = ..() + .["gauntlets_completed"] = src.gauntlets_completed diff --git a/code/modules/goonhub/api/models/maps/MapSwitch.dm b/code/modules/goonhub/api/models/maps/MapSwitch.dm new file mode 100644 index 0000000000000..eceb0a2c8c041 --- /dev/null +++ b/code/modules/goonhub/api/models/maps/MapSwitch.dm @@ -0,0 +1,60 @@ + +/// MapSwitch +/datum/apiModel/MapSwitch + var/datum/apiModel/Tracked/MapSwitchInternal/map_switch = null // Model + var/status = null // integer + +/datum/apiModel/MapSwitch/SetupFromResponse(response) + . = ..() + src.map_switch = new + src.map_switch.SetupFromResponse(response["map_switch"]) + src.status = response["status"] + +/datum/apiModel/MapSwitch/VerifyIntegrity() + . = ..() + if ( + isnull(src.map_switch) \ + || isnull(src.status) \ + ) + return FALSE + +/datum/apiModel/MapSwitch/ToList() + . = ..() + .["map_switch"] = src.map_switch.ToList() + .["status"] = src.status + + +/// MapSwitchInternal +/datum/apiModel/Tracked/MapSwitchInternal + var/game_admin_id = null // integer + var/round_id = null // integer + var/server_id = null // string + var/map = null // string + var/votes = null // integer + +/datum/apiModel/Tracked/MapSwitchInternal/SetupFromResponse(response) + . = ..() + src.game_admin_id = response["game_admin_id"] + src.round_id = response["round_id"] + src.server_id = response["server_id"] + src.map = response["map"] + src.votes = response["votes"] + +/datum/apiModel/Tracked/MapSwitchInternal/VerifyIntegrity() + . = ..() + if ( + isnull(src.round_id) \ + || isnull(src.map) \ + ) + return FALSE + +/datum/apiModel/Tracked/MapSwitchInternal/ToList() + . = ..() + .["id"] = src.id + .["game_admin_id"] = src.game_admin_id + .["round_id"] = src.round_id + .["server_id"] = src.server_id + .["map"] = src.map + .["votes"] = src.votes + .["created_at"] = src.created_at + .["updated_at"] = src.updated_at diff --git a/code/modules/goonhub/api/models/medals/MedalResource.dm b/code/modules/goonhub/api/models/medals/MedalResource.dm new file mode 100644 index 0000000000000..6986e7d3d2a86 --- /dev/null +++ b/code/modules/goonhub/api/models/medals/MedalResource.dm @@ -0,0 +1,25 @@ + +/// MedalResource +/datum/apiModel/Tracked/MedalResource + var/title = null // string + var/description = null // string + var/hidden = null // boolean + +/datum/apiModel/Tracked/MedalResource/SetupFromResponse(response) + . = ..() + src.title = response["title"] + src.description = response["description"] + src.hidden = response["hidden"] + +/datum/apiModel/Tracked/MedalResource/VerifyIntegrity() + . = ..() + if ( + isnull(src.title) \ + ) + return FALSE + +/datum/apiModel/Tracked/MedalResource/ToList() + . = ..() + .["title"] = src.title + .["description"] = src.description + .["hidden"] = src.hidden diff --git a/code/modules/goonhub/api/models/numbersstation/NumbersStationPasswordResource.dm b/code/modules/goonhub/api/models/numbersstation/NumbersStationPasswordResource.dm new file mode 100644 index 0000000000000..1d69ad899d419 --- /dev/null +++ b/code/modules/goonhub/api/models/numbersstation/NumbersStationPasswordResource.dm @@ -0,0 +1,19 @@ + +/// NumbersStationPasswordResource +/datum/apiModel/NumbersStationPasswordResource + var/numbers = null // string + +/datum/apiModel/NumbersStationPasswordResource/SetupFromResponse(response) + . = ..() + src.numbers = response["numbers"] + +/datum/apiModel/NumbersStationPasswordResource/VerifyIntegrity() + . = ..() + if ( + isnull(src.numbers) \ + ) + return FALSE + +/datum/apiModel/NumbersStationPasswordResource/ToList() + . = ..() + .["numbers"] = src.numbers diff --git a/code/modules/goonhub/api/models/players/GetPlayerSaves.dm b/code/modules/goonhub/api/models/players/GetPlayerSaves.dm new file mode 100644 index 0000000000000..ff39ab865172f --- /dev/null +++ b/code/modules/goonhub/api/models/players/GetPlayerSaves.dm @@ -0,0 +1,36 @@ + +/// GetPlayerSaves +/datum/apiModel/GetPlayerSaves + var/list/datum/apiModel/Tracked/PlayerRes/PlayerDataResource/data = null + var/list/datum/apiModel/Tracked/PlayerRes/PlayerSaveResource/saves = null + +/datum/apiModel/GetPlayerSaves/SetupFromResponse(response) + . = ..() + src.data = list() + for (var/item in response["data"]) + var/datum/apiModel/Tracked/PlayerRes/PlayerDataResource/dataItem = new + dataItem.SetupFromResponse(item) + src.data.Add(dataItem) + + src.saves = list() + for (var/item in response["saves"]) + var/datum/apiModel/Tracked/PlayerRes/PlayerSaveResource/save = new + save.SetupFromResponse(item) + src.saves.Add(save) + +/datum/apiModel/GetPlayerSaves/VerifyIntegrity() + . = ..() + if ( + isnull(src.data) \ + || isnull(src.saves) \ + ) + return FALSE + +/datum/apiModel/GetPlayerSaves/ToList() + . = ..() + .["data"] = list() + for (var/datum/apiModel/Tracked/PlayerRes/PlayerDataResource/data in src.data) + .["data"] += list(data.ToList()) + .["saves"] = list() + for (var/datum/apiModel/Tracked/PlayerRes/PlayerSaveResource/save in src.saves) + .["saves"] += list(save.ToList()) diff --git a/code/modules/goonhub/api/models/players/PlayerAntagResource.dm b/code/modules/goonhub/api/models/players/PlayerAntagResource.dm new file mode 100644 index 0000000000000..bf7c2624e0155 --- /dev/null +++ b/code/modules/goonhub/api/models/players/PlayerAntagResource.dm @@ -0,0 +1,34 @@ + + +/// PlayerAntagResource +/datum/apiModel/Tracked/PlayerRes/PlayerAntagResource + var/round_id = null // integer + var/antag_role = null // string + var/late_join = null // boolean + var/weight_exempt = null // string + +/datum/apiModel/Tracked/PlayerRes/PlayerAntagResource/SetupFromResponse(response) + . = ..() + src.round_id = response["round_id"] + src.antag_role = response["antag_role"] + src.late_join = response["late_join"] + src.weight_exempt = response["weight_exempt"] + +/datum/apiModel/Tracked/PlayerRes/PlayerAntagResource/VerifyIntegrity() + . = ..() + if ( + isnull(src.round_id) \ + || isnull(src.antag_role) \ + ) + return FALSE + +/datum/apiModel/Tracked/PlayerRes/PlayerAntagResource/ToList() + . = ..() + .["id"] = src.id + .["player_id"] = src.player_id + .["round_id"] = src.round_id + .["antag_role"] = src.antag_role + .["late_join"] = src.late_join + .["weight_exempt"] = src.weight_exempt + .["created_at"] = src.created_at + .["updated_at"] = src.updated_at diff --git a/code/modules/goonhub/api/models/players/PlayerCompIdsResource.dm b/code/modules/goonhub/api/models/players/PlayerCompIdsResource.dm new file mode 100644 index 0000000000000..bedff87214fce --- /dev/null +++ b/code/modules/goonhub/api/models/players/PlayerCompIdsResource.dm @@ -0,0 +1,24 @@ + +/// PlayerCompIdsResource +/datum/apiModel/PlayerCompIdsResource + var/datum/apiModel/Tracked/PlayerRes/PlayerConnection/latest_connection = null // PlayerConnection + var/list/comp_ids = null // [string, integer] + +/datum/apiModel/PlayerCompIdsResource/SetupFromResponse(response) + . = ..() + src.latest_connection = new + src.latest_connection.SetupFromResponse(response["latest_connection"]) + src.comp_ids = response["comp_ids"] + +/datum/apiModel/PlayerCompIdsResource/VerifyIntegrity() + . = ..() + if ( + isnull(src.latest_connection) \ + || isnull(src.comp_ids) + ) + return FALSE + +/datum/apiModel/PlayerCompIdsResource/ToList() + . = ..() + .["latest_connection"] = src.latest_connection.ToList() + .["comp_ids"] = src.comp_ids diff --git a/code/modules/goonhub/api/models/players/PlayerConnection.dm b/code/modules/goonhub/api/models/players/PlayerConnection.dm new file mode 100644 index 0000000000000..03d5c5d5462ba --- /dev/null +++ b/code/modules/goonhub/api/models/players/PlayerConnection.dm @@ -0,0 +1,41 @@ + +/// PlayerConnection +/datum/apiModel/Tracked/PlayerRes/PlayerConnection + var/round_id = null // integer + var/ip = null // string + var/comp_id = null // string + var/list/legacy_data = null // [string] + var/country = null // string + var/country_iso = null // string + +/datum/apiModel/Tracked/PlayerRes/PlayerConnection/SetupFromResponse(response) + . = ..() + src.round_id = response["round_id"] + src.ip = response["ip"] + src.comp_id = response["comp_id"] + src.legacy_data = response["legacy_data"] + src.country = response["country"] + src.country_iso = response["country_iso"] + +/datum/apiModel/Tracked/PlayerRes/PlayerConnection/VerifyIntegrity() + . = ..() + if ( + isnull(src.player_id) \ + || isnull(src.round_id) \ + || isnull(src.ip) \ + || isnull(src.comp_id) \ + ) + return FALSE + +/datum/apiModel/Tracked/PlayerRes/PlayerConnection/ToList() + . = ..() + .["id"] = src.id + .["player_id"] = src.player_id + .["round_id"] = src.round_id + .["ip"] = src.ip + .["comp_id"] = src.comp_id + .["legacy_data"] = src.legacy_data + .["created_at"] = src.created_at + .["updated_at"] = src.updated_at + .["country"] = src.country + .["country_iso"] = src.country_iso diff --git a/code/modules/goonhub/api/models/players/PlayerDataResource.dm b/code/modules/goonhub/api/models/players/PlayerDataResource.dm new file mode 100644 index 0000000000000..0cd2d73033934 --- /dev/null +++ b/code/modules/goonhub/api/models/players/PlayerDataResource.dm @@ -0,0 +1,27 @@ + +/// PlayerDataResource +/datum/apiModel/Tracked/PlayerRes/PlayerDataResource + var/key = null // string + var/value = null // any + +/datum/apiModel/Tracked/PlayerRes/PlayerDataResource/SetupFromResponse(response) + . = ..() + src.key = response["key"] + src.value = response["value"] + +/datum/apiModel/Tracked/PlayerRes/PlayerDataResource/VerifyIntegrity() + . = ..() + if ( + isnull(src.key) \ + || isnull(src.value) \ + ) + return FALSE + +/datum/apiModel/Tracked/PlayerRes/PlayerDataResource/ToList() + . = ..() + .["id"] = src.id + .["player_id"] = src.player_id + .["key"] = src.key + .["value"] = src.value + .["created_at"] = src.created_at + .["updated_at"] = src.updated_at diff --git a/code/modules/goonhub/api/models/players/PlayerIpsResource.dm b/code/modules/goonhub/api/models/players/PlayerIpsResource.dm new file mode 100644 index 0000000000000..8569bba15c074 --- /dev/null +++ b/code/modules/goonhub/api/models/players/PlayerIpsResource.dm @@ -0,0 +1,24 @@ + +/// PlayerIpsResource +/datum/apiModel/PlayerIpsResource + var/datum/apiModel/Tracked/PlayerRes/PlayerConnection/latest_connection = null // PlayerConnection + var/list/ips = null // [string, integer] + +/datum/apiModel/PlayerIpsResource/SetupFromResponse(response) + . = ..() + src.latest_connection = new + src.latest_connection.SetupFromResponse(response["latest_connection"]) + src.ips = response["ips"] + +/datum/apiModel/PlayerIpsResource/VerifyIntegrity() + . = ..() + if ( + isnull(src.latest_connection) \ + || isnull(src.ips) + ) + return FALSE + +/datum/apiModel/PlayerIpsResource/ToList() + . = ..() + .["latest_connection"] = src.latest_connection.ToList() + .["ips"] = src.ips diff --git a/code/modules/goonhub/api/models/players/PlayerMedalResource.dm b/code/modules/goonhub/api/models/players/PlayerMedalResource.dm new file mode 100644 index 0000000000000..6c69633029cb6 --- /dev/null +++ b/code/modules/goonhub/api/models/players/PlayerMedalResource.dm @@ -0,0 +1,28 @@ + +/// PlayerMedalResource +/datum/apiModel/Tracked/PlayerRes/PlayerMedalResource + var/medal_id = null // integer + var/datum/apiModel/Tracked/MedalResource/medal = null // /datum/apiModel/Tracked/MedalResource - not required + var/round_id = null // integer + +/datum/apiModel/Tracked/PlayerRes/PlayerMedalResource/SetupFromResponse(response) + . = ..() + src.medal_id = response["medal_id"] + if ("medal" in response) + src.medal = new + src.medal.SetupFromResponse(response["medal"]) + src.round_id = response["round_id"] + +/datum/apiModel/Tracked/PlayerRes/PlayerMedalResource/VerifyIntegrity() + . = ..() + if ( + isnull(src.medal_id) \ + ) + return FALSE + +/datum/apiModel/Tracked/PlayerRes/PlayerMedalResource/ToList() + . = ..() + .["medal_id"] = src.medal_id + if (src.medal) + .["medal"] = src.medal.ToList() + .["round_id"] = src.round_id diff --git a/code/modules/goonhub/api/models/players/PlayerMedalResourceList.dm b/code/modules/goonhub/api/models/players/PlayerMedalResourceList.dm new file mode 100644 index 0000000000000..4444dcc2d2e0f --- /dev/null +++ b/code/modules/goonhub/api/models/players/PlayerMedalResourceList.dm @@ -0,0 +1,11 @@ + +/// PlayerMedalResourceList +/datum/apiModel/Paginated/PlayerMedalResourceList + +/datum/apiModel/Paginated/PlayerMedalResourceList/SetupFromResponse(response) + . = ..() + src.data = list() + for (var/item in response["data"]) + var/datum/apiModel/Tracked/PlayerRes/PlayerMedalResource/playerMedal = new() + playerMedal.SetupFromResponse(item) + src.data.Add(playerMedal) diff --git a/code/modules/goonhub/api/models/players/PlayerMetadataArray.dm b/code/modules/goonhub/api/models/players/PlayerMetadataArray.dm new file mode 100644 index 0000000000000..659283b6386c2 --- /dev/null +++ b/code/modules/goonhub/api/models/players/PlayerMetadataArray.dm @@ -0,0 +1,19 @@ + +/// PlayerMetadataArray +/datum/apiModel/PlayerMetadataArray + var/list/data = null // [string] + +/datum/apiModel/PlayerMetadataArray/SetupFromResponse(response) + . = ..() + src.data = response + +/datum/apiModel/PlayerMetadataArray/VerifyIntegrity() + . = ..() + if ( + isnull(src.data) \ + ) + return FALSE + +/datum/apiModel/PlayerMetadataArray/ToList() + . = ..() + .["data"] = src.data diff --git a/code/modules/goonhub/api/models/players/PlayerMetadataList.dm b/code/modules/goonhub/api/models/players/PlayerMetadataList.dm new file mode 100644 index 0000000000000..71f793816e801 --- /dev/null +++ b/code/modules/goonhub/api/models/players/PlayerMetadataList.dm @@ -0,0 +1,11 @@ + +/// PlayerMetadataList +/datum/apiModel/Paginated/PlayerMetadataList + +/datum/apiModel/Paginated/PlayerMetadataList/SetupFromResponse(response) + . = ..() + src.data = list() + for (var/item in response["data"]) + var/datum/apiModel/Tracked/PlayerRes/PlayerMetadataResource/playerMetadata = new() + playerMetadata.SetupFromResponse(item) + src.data.Add(playerMetadata) diff --git a/code/modules/goonhub/api/models/players/PlayerMetadataResource.dm b/code/modules/goonhub/api/models/players/PlayerMetadataResource.dm new file mode 100644 index 0000000000000..01b95cb61fb57 --- /dev/null +++ b/code/modules/goonhub/api/models/players/PlayerMetadataResource.dm @@ -0,0 +1,27 @@ + +/// PlayerMetadataResource +/datum/apiModel/Tracked/PlayerRes/PlayerMetadataResource + var/player = null // { id: integer, ckey: string } + var/metadata = null // string + +/datum/apiModel/Tracked/PlayerRes/PlayerMetadataResource/SetupFromResponse(response) + . = ..() + if ("player" in response) + src.player = response["player"] + src.metadata = response["metadata"] + +/datum/apiModel/Tracked/PlayerRes/PlayerMetadataResource/VerifyIntegrity() + . = ..() + if ( + isnull(src.metadata) \ + ) + return FALSE + +/datum/apiModel/Tracked/PlayerRes/PlayerMetadataResource/ToList() + . = ..() + .["id"] = src.id + .["player_id"] = src.player_id + .["player"] = src.player + .["metadata"] = src.metadata + .["created_at"] = src.created_at + .["updated_at"] = src.updated_at diff --git a/code/modules/goonhub/api/models/players/PlayerNoteResource.dm b/code/modules/goonhub/api/models/players/PlayerNoteResource.dm new file mode 100644 index 0000000000000..31864d194dca4 --- /dev/null +++ b/code/modules/goonhub/api/models/players/PlayerNoteResource.dm @@ -0,0 +1,52 @@ + +/// PlayerNoteResource +/datum/apiModel/Tracked/PlayerNoteResource + var/player_id = null // integer + var/datum/apiModel/Tracked/PlayerResource/player = null // Model + var/ckey = null // string + var/game_admin_id = null // integer + var/datum/apiModel/Tracked/GameAdminResource/game_admin = null // Model + var/server_id = null // string + var/round_id = null // integer + var/note = null // string + var/legacy_data = null // [string] + +/datum/apiModel/Tracked/PlayerNoteResource/SetupFromResponse(response) + . = ..() + src.player = response["player_id"] + if (("player" in response) && islist(response["player"])) + src.player = new + src.player.SetupFromResponse(response["player"]) + src.ckey = response["ckey"] + src.game_admin_id = response["game_admin_id"] + if (("game_admin" in response) && islist(response["game_admin"])) + src.game_admin = new + src.game_admin.SetupFromResponse(response["game_admin"]) + src.server_id = response["server_id"] + src.round_id = response["round_id"] + src.note = response["note"] + src.legacy_data = response["legacy_data"] + +/datum/apiModel/Tracked/PlayerNoteResource/VerifyIntegrity() + . = ..() + if ( + isnull(src.note) \ + ) + return FALSE + +/datum/apiModel/Tracked/PlayerNoteResource/ToList() + . = ..() + .["id"] = src.id + .["player_id"] = src.player_id + if (src.player) + .["player"] = src.player.ToList() + .["ckey"] = src.ckey + .["game_admin_id"] = src.game_admin_id + if (src.game_admin) + .["game_admin"] = src.game_admin.ToList() + .["server_id"] = src.server_id + .["round_id"] = src.round_id + .["note"] = src.note + .["legacy_data"] = src.legacy_data + .["created_at"] = src.created_at + .["updated_at"] = src.updated_at diff --git a/code/modules/goonhub/api/models/players/PlayerNoteResourceList.dm b/code/modules/goonhub/api/models/players/PlayerNoteResourceList.dm new file mode 100644 index 0000000000000..4bf1da11977a5 --- /dev/null +++ b/code/modules/goonhub/api/models/players/PlayerNoteResourceList.dm @@ -0,0 +1,11 @@ + +/// PlayerNoteResourceList +/datum/apiModel/Paginated/PlayerNoteResourceList + +/datum/apiModel/Paginated/PlayerNoteResourceList/SetupFromResponse(response) + . = ..() + src.data = list() + for (var/item in response["data"]) + var/datum/apiModel/Tracked/PlayerNoteResource/playerNote = new() + playerNote.SetupFromResponse(item) + src.data.Add(playerNote) diff --git a/code/modules/goonhub/api/models/players/PlayerParticipationResource.dm b/code/modules/goonhub/api/models/players/PlayerParticipationResource.dm new file mode 100644 index 0000000000000..87be06f32c462 --- /dev/null +++ b/code/modules/goonhub/api/models/players/PlayerParticipationResource.dm @@ -0,0 +1,29 @@ + +/// PlayerParticipationResource +/datum/apiModel/Tracked/PlayerRes/PlayerParticipationResource + var/round_id = null // string + var/job = null // string + var/legacy_data = null // string + +/datum/apiModel/Tracked/PlayerRes/PlayerParticipationResource/SetupFromResponse(response) + . = ..() + src.round_id = response["round_id"] + src.job = response["job"] + src.legacy_data = response["legacy_data"] + +/datum/apiModel/Tracked/PlayerRes/PlayerParticipationResource/VerifyIntegrity() + . = ..() + if ( + isnull(src.round_id) + ) + return FALSE + +/datum/apiModel/Tracked/PlayerRes/PlayerParticipationResource/ToList() + . = ..() + .["id"] = src.id + .["player_id"] = src.player_id + .["round_id"] = src.round_id + .["job"] = src.job + .["legacy_data"] = src.legacy_data + .["created_at"] = src.created_at + .["updated_at"] = src.updated_at diff --git a/code/modules/goonhub/api/models/players/PlayerResource.dm b/code/modules/goonhub/api/models/players/PlayerResource.dm new file mode 100644 index 0000000000000..6b273cfa5f03c --- /dev/null +++ b/code/modules/goonhub/api/models/players/PlayerResource.dm @@ -0,0 +1,37 @@ + +/// PlayerResource +/datum/apiModel/Tracked/PlayerResource + var/ckey = null // string + var/key = null // string + var/byond_join_date = null // string + var/byond_major = null // integer + var/byond_minor = null // integer + +/datum/apiModel/Tracked/PlayerResource/SetupFromResponse(response) + . = ..() + src.ckey = response["ckey"] + src.key = response["key"] + src.byond_join_date = response["byond_join_date"] + src.byond_major = response["byond_major"] + src.byond_minor = response["byond_minor"] + +/datum/apiModel/Tracked/PlayerResource/VerifyIntegrity() + . = ..() + if ( + isnull(src.ckey) \ + || isnull(src.key) \ + || isnull(src.byond_major) \ + || isnull(src.byond_minor) \ + ) + return FALSE + +/datum/apiModel/Tracked/PlayerResource/ToList() + . = ..() + .["id"] = src.id + .["ckey"] = src.ckey + .["key"] = src.key + .["byond_join_date"] = src.byond_join_date + .["byond_major"] = src.byond_major + .["byond_minor"] = src.byond_minor + .["created_at"] = src.created_at + .["updated_at"] = src.updated_at diff --git a/code/modules/goonhub/api/models/players/PlayerSaveResource.dm b/code/modules/goonhub/api/models/players/PlayerSaveResource.dm new file mode 100644 index 0000000000000..bf7af4fc8b3ca --- /dev/null +++ b/code/modules/goonhub/api/models/players/PlayerSaveResource.dm @@ -0,0 +1,26 @@ + +/// PlayerSaveResource +/datum/apiModel/Tracked/PlayerRes/PlayerSaveResource + var/name = null // string + var/data = null // string + +/datum/apiModel/Tracked/PlayerRes/PlayerSaveResource/SetupFromResponse(response) + . = ..() + src.name = response["name"] + src.data = response["data"] + +/datum/apiModel/Tracked/PlayerRes/PlayerSaveResource/VerifyIntegrity() + . = ..() + if ( + isnull(src.name) \ + ) + return FALSE + +/datum/apiModel/Tracked/PlayerRes/PlayerSaveResource/ToList() + . = ..() + .["id"] = src.id + .["player_id"] = src.player_id + .["name"] = src.name + .["data"] = src.data + .["created_at"] = src.created_at + .["updated_at"] = src.updated_at diff --git a/code/modules/goonhub/api/models/players/PlayerStatsResource.dm b/code/modules/goonhub/api/models/players/PlayerStatsResource.dm new file mode 100644 index 0000000000000..61cc978734302 --- /dev/null +++ b/code/modules/goonhub/api/models/players/PlayerStatsResource.dm @@ -0,0 +1,56 @@ + +/// PlayerStatsResource +/datum/apiModel/Tracked/PlayerStatsResource + var/ckey = null // string + var/key = null // string + var/byond_join_date = null // date + var/byond_major = null // integer + var/byond_minor = null // integer + var/played = null // integer + var/played_rp = null // integer + var/connected = null // integer + var/connected_rp = null // integer + var/time_played = null // integer + var/datum/apiModel/Tracked/PlayerRes/PlayerConnection/latest_connection = null // PlayerConnection + +/datum/apiModel/Tracked/PlayerStatsResource/SetupFromResponse(response) + . = ..() + src.ckey = response["ckey"] + src.key = response["key"] + src.byond_join_date = response["byond_join_date"] + src.byond_major = response["byond_major"] + src.byond_minor = response["byond_minor"] + src.played = response["played"] + src.played_rp = response["played_rp"] + src.connected = response["connected"] + src.connected_rp = response["connected_rp"] + src.time_played = response["time_played"] + + if (response["latest_connection"]) + src.latest_connection = new + src.latest_connection.SetupFromResponse(response["latest_connection"]) + +/datum/apiModel/Tracked/PlayerStatsResource/VerifyIntegrity() + . = ..() + if ( + isnull(src.ckey) + ) + return FALSE + +/datum/apiModel/Tracked/PlayerStatsResource/ToList() + . = ..() + .["id"] = src.id + .["ckey"] = src.ckey + .["key"] = src.key + .["byond_join_date"] = src.byond_join_date + .["byond_major"] = src.byond_major + .["byond_minor"] = src.byond_minor + .["created_at"] = src.created_at + .["updated_at"] = src.updated_at + .["played"] = src.played + .["played_rp"] = src.played_rp + .["connected"] = src.connected + .["connected_rp"] = src.connected_rp + .["time_played"] = src.time_played + if (src.latest_connection) + .["latest_connection"] = src.latest_connection.ToList() diff --git a/code/modules/goonhub/api/models/players/weird/PlayerSearchResource.dm b/code/modules/goonhub/api/models/players/weird/PlayerSearchResource.dm new file mode 100644 index 0000000000000..7e7f60daea06b --- /dev/null +++ b/code/modules/goonhub/api/models/players/weird/PlayerSearchResource.dm @@ -0,0 +1,48 @@ + +/// PlayerSearchResource +/datum/apiModel/PlayerSearchResource + var/id = null // int + var/ip = null // string + var/comp_id = null // string + var/player_id = null // string + var/ckey = null // string + var/created_at = null // string + +// ZEWAKA TODO: WTF NO UPDATED_AT???? + + +/datum/apiModel/PlayerSearchResource/New( + id, + ip, + comp_id, + player_id, + ckey, + created_at +) + . = ..() + src.id = id + src.ip = ip + src.comp_id = comp_id + src.player_id = player_id + src.ckey = ckey + src.created_at = created_at + +/datum/apiModel/PlayerSearchResource/VerifyIntegrity() + if ( + isnull(id) \ + || isnull(src.ip) \ + || isnull(src.comp_id) \ + || isnull(src.player_id) \ + || isnull(src.ckey) \ + || isnull(src.created_at) \ + ) + return FALSE + +/datum/apiModel/PlayerSearchResource/ToList() + . = ..() + .["id"] = src.id + .["ip"] = src.ip + .["comp_id"] = src.comp_id + .["player_id"] = src.player_id + .["ckey"] = src.ckey + .["created_at"] = src.created_at diff --git a/code/modules/goonhub/api/models/polls/PollAnswerResource.dm b/code/modules/goonhub/api/models/polls/PollAnswerResource.dm new file mode 100644 index 0000000000000..efb44fd7b32e7 --- /dev/null +++ b/code/modules/goonhub/api/models/polls/PollAnswerResource.dm @@ -0,0 +1,26 @@ + +/// PollAnswerResource +/datum/apiModel/Tracked/PollAnswerResource + var/poll_option_id = null // integer + var/poll_id = null // integer + +/datum/apiModel/Tracked/PollAnswerResource/SetupFromResponse(response) + . = ..() + src.poll_option_id = response["poll_option_id"] + src.poll_id = response["poll_id"] + +/datum/apiModel/Tracked/PollAnswerResource/VerifyIntegrity() + . = ..() + if ( + isnull(src.poll_option_id) \ + || isnull(src.poll_id) \ + ) + return FALSE + +/datum/apiModel/Tracked/PollAnswerResource/ToList() + . = ..() + .["id"] = src.id + .["poll_option_id"] = src.poll_option_id + .["poll_id"] = src.poll_id + .["created_at"] = src.created_at + .["updated_at"] = src.updated_at diff --git a/code/modules/goonhub/api/models/polls/PollOptionResource.dm b/code/modules/goonhub/api/models/polls/PollOptionResource.dm new file mode 100644 index 0000000000000..5dc91635a2fa4 --- /dev/null +++ b/code/modules/goonhub/api/models/polls/PollOptionResource.dm @@ -0,0 +1,37 @@ + +/// PollOptionResource +/datum/apiModel/PollOptionResource + var/id = null // integer + var/poll_id = null // integer + var/option = null // integer + var/position = null // string + var/answers_count = null // integer + var/answers_player_ids = null // [integer] + +/datum/apiModel/PollOptionResource/SetupFromResponse(response) + . = ..() + src.id = response["id"] + src.poll_id = response["poll_id"] + src.option = response["option"] + src.position = response["position"] + src.answers_count = response["answers_count"] + src.answers_player_ids = response["answers_player_ids"] + +/datum/apiModel/PollOptionResource/VerifyIntegrity() + . = ..() + if ( + isnull(src.id) \ + || isnull(src.poll_id) \ + || isnull(src.option) \ + || isnull(src.answers_player_ids) \ + ) + return FALSE + +/datum/apiModel/PollOptionResource/ToList() + . = ..() + .["id"] = src.id + .["poll_id"] = src.poll_id + .["option"] = src.option + .["position"] = src.position + .["answers_count"] = src.answers_count + .["answers_player_ids"] = src.answers_player_ids diff --git a/code/modules/goonhub/api/models/polls/PollResource.dm b/code/modules/goonhub/api/models/polls/PollResource.dm new file mode 100644 index 0000000000000..f9b83f78d871e --- /dev/null +++ b/code/modules/goonhub/api/models/polls/PollResource.dm @@ -0,0 +1,55 @@ + +/// PollResource +/datum/apiModel/Tracked/PollResource + var/game_admin_id = null // integer + var/datum/apiModel/Tracked/GameAdmin/game_admin = null // GameAdmin + var/question = null // string + var/list/datum/apiModel/PollOptionResource/options = null // [PollOptionResource] + var/servers = null // [string] + var/total_answers = null // integer + var/winning_option_id = null // integer + var/multiple_choice = null // boolean + var/expires_at = null // date-time + +/datum/apiModel/Tracked/PollResource/SetupFromResponse(response) + . = ..() + src.game_admin_id = response["game_admin_id"] + if ("game_admin" in response) + src.game_admin = new + src.game_admin.SetupFromResponse(response["game_admin"]) + src.question = response["question"] + src.options = list() + for (var/item in response["options"]) + var/datum/apiModel/PollOptionResource/option = new + option.SetupFromResponse(item) + src.options.Add(option) + src.servers = response["servers"] + src.total_answers = response["total_answers"] + src.winning_option_id = response["winning_option_id"] + src.multiple_choice = response["multiple_choice"] + src.expires_at = response["expires_at"] + +/datum/apiModel/Tracked/PollResource/VerifyIntegrity() + . = ..() + if ( + isnull(src.question) \ + ) + return FALSE + +/datum/apiModel/Tracked/PollResource/ToList() + . = ..() + .["id"] = src.id + .["game_admin_id"] = src.game_admin_id + if (src.game_admin) + .["game_admin"] = src.game_admin.ToList() + .["question"] = src.question + .["options"] = list() + for (var/datum/apiModel/PollOptionResource/option in src.options) + .["options"] += list(option.ToList()) + .["servers"] = src.servers + .["total_answers"] = src.total_answers + .["winning_option_id"] = src.winning_option_id + .["multiple_choice"] = src.multiple_choice + .["expires_at"] = src.expires_at + .["created_at"] = src.created_at + .["updated_at"] = src.updated_at diff --git a/code/modules/goonhub/api/models/polls/PollResourceList.dm b/code/modules/goonhub/api/models/polls/PollResourceList.dm new file mode 100644 index 0000000000000..b4121f0dae1db --- /dev/null +++ b/code/modules/goonhub/api/models/polls/PollResourceList.dm @@ -0,0 +1,11 @@ + +/// PollResourceList +/datum/apiModel/Paginated/PollResourceList + +/datum/apiModel/Paginated/PollResourceList/SetupFromResponse(response) + . = ..() + src.data = list() + for (var/item in response["data"]) + var/datum/apiModel/Tracked/PollResource/poll = new() + poll.SetupFromResponse(item) + src.data.Add(poll) diff --git a/code/modules/goonhub/api/models/randomentries/RandomEntries.dm b/code/modules/goonhub/api/models/randomentries/RandomEntries.dm new file mode 100644 index 0000000000000..816ebe5ec3be2 --- /dev/null +++ b/code/modules/goonhub/api/models/randomentries/RandomEntries.dm @@ -0,0 +1,35 @@ + +/// RandomEntries +/datum/apiModel/RandomEntries + var/list/datum/apiModel/entries = list() // [Model] + +/datum/apiModel/RandomEntries/SetupFromResponse(response, datum/apiRoute/route) + . = ..() + var/datum/apiModel/entryType + switch(route.queryParams["type"]) + if ("tickets") + entryType = /datum/apiModel/Tracked/EventTicketResource + if ("fines") + entryType = /datum/apiModel/Tracked/EventFineResource + if ("ai_laws") + entryType = /datum/apiModel/Tracked/EventAiLawResource + if ("station_names") + entryType = /datum/apiModel/Tracked/EventStationNameResource + + for (var/item in response) + var/datum/apiModel/entry = new entryType + entry.SetupFromResponse(item) + src.entries.Add(entry) + +/datum/apiModel/RandomEntries/VerifyIntegrity() + . = ..() + if ( + isnull(src.entries) \ + ) + return FALSE + +/datum/apiModel/RandomEntries/ToList() + . = ..() + .["entries"] = list() + for (var/datum/apiModel/entry in src.entries) + .["entries"] += list(entry.ToList()) diff --git a/code/modules/goonhub/api/models/rounds/GameRound.dm b/code/modules/goonhub/api/models/rounds/GameRound.dm new file mode 100644 index 0000000000000..1a2b69e14f09b --- /dev/null +++ b/code/modules/goonhub/api/models/rounds/GameRound.dm @@ -0,0 +1,41 @@ + +/// GameRound +/datum/apiModel/Tracked/GameRound + var/server_id = null // string + var/map = null // string + var/game_type = null // string + var/rp_mode = null // boolean + var/crashed = null // boolean + var/ended_at = null // date-time + +/datum/apiModel/Tracked/GameRound/SetupFromResponse(response) + . = ..() + src.id = response["id"] + src.server_id = response["server_id"] + src.map = response["map"] + src.game_type = response["game_type"] + src.rp_mode = response["rp_mode"] + src.crashed = response["crashed"] + src.ended_at = response["ended_at"] + src.created_at = response["created_at"] + src.updated_at = response["updated_at"] + +/datum/apiModel/Tracked/GameRound/VerifyIntegrity() + . = ..() + if ( + isnull(src.server_id) \ + || isnull(src.rp_mode) \ + ) + return FALSE + +/datum/apiModel/Tracked/GameRound/ToList() + . = ..() + .["id"] = src.id + .["server_id"] = src.server_id + .["map"] = src.map + .["game_type"] = src.game_type + .["rp_mode"] = src.rp_mode + .["crashed"] = src.crashed + .["ended_at"] = src.ended_at + .["created_at"] = src.created_at + .["updated_at"] = src.updated_at diff --git a/code/modules/goonhub/api/models/vpn/VpnCheckResource.dm b/code/modules/goonhub/api/models/vpn/VpnCheckResource.dm new file mode 100644 index 0000000000000..26f69285d92ae --- /dev/null +++ b/code/modules/goonhub/api/models/vpn/VpnCheckResource.dm @@ -0,0 +1,52 @@ + +/// VpnCheckResource +/datum/apiModel/VpnCheckResource + var/id = null // integer + var/round_id = null // integer + var/ip = null // integer + var/service = null // string + var/response = null // string + var/error = null // string + var/list/meta = null // list(boolean, boolean) + var/created_at = null // date-time + var/updated_at = null // date-time + +/datum/apiModel/VpnCheckResource/SetupFromResponse(response) + . = ..() + if ("id" in response) + src.round_id = response["id"] + if ("round_id" in response) + src.round_id = response["round_id"] + if ("ip" in response) + src.ip = response["ip"] + if ("service" in response) + src.service = response["service"] + if ("response" in response) + src.response = response["response"] + if ("error" in response) + src.error = response["error"] + if ("created_at" in response) + src.round_id = response["created_at"] + if ("updated_at" in response) + src.round_id = response["updated_at"] + src.meta = response["meta"] + +// No parent call, id or date fields can be null for this +/datum/apiModel/VpnCheckResource/VerifyIntegrity() + if ( + isnull(src.meta) \ + ) + return FALSE + return TRUE + +/datum/apiModel/VpnCheckResource/ToList() + . = ..() + .["id"] = src.id + .["round_id"] = src.round_id + .["ip"] = src.ip + .["service"] = src.service + .["response"] = src.response + .["error"] = src.error + .["meta"] = src.meta + .["created_at"] = src.created_at + .["updated_at"] = src.updated_at diff --git a/code/modules/goonhub/api/models/vpn/VpnWhitelistResource.dm b/code/modules/goonhub/api/models/vpn/VpnWhitelistResource.dm new file mode 100644 index 0000000000000..d8d81057768a7 --- /dev/null +++ b/code/modules/goonhub/api/models/vpn/VpnWhitelistResource.dm @@ -0,0 +1,29 @@ + +/// VpnWhitelistResource +/datum/apiModel/Tracked/VpnWhitelistResource + var/game_admin_id = null // integer + var/ckey = null // string + var/game_admin = null // { id: integer, ckey: string, name: string } - not required - TODO? + +/datum/apiModel/Tracked/VpnWhitelistResource/SetupFromResponse(response) + . = ..() + src.game_admin_id = response["game_admin_id"] + src.ckey = response["ckey"] + src.game_admin = response["game_admin"] + +/datum/apiModel/Tracked/VpnWhitelistResource/VerifyIntegrity() + . = ..() + if ( + isnull(src.game_admin_id) \ + || isnull(src.ckey) \ + ) + return FALSE + +/datum/apiModel/Tracked/VpnWhitelistResource/ToList() + . = ..() + .["id"] = src.id + .["game_admin_id"] = src.game_admin_id + .["ckey"] = src.ckey + .["created_at"] = src.created_at + .["updated_at"] = src.updated_at + .["game_admin"] = src.game_admin diff --git a/code/modules/goonhub/api/models/vpn/VpnWhitelistSearch.dm b/code/modules/goonhub/api/models/vpn/VpnWhitelistSearch.dm new file mode 100644 index 0000000000000..667db3725cc33 --- /dev/null +++ b/code/modules/goonhub/api/models/vpn/VpnWhitelistSearch.dm @@ -0,0 +1,19 @@ + +/// VpnWhitelistSearch +/datum/apiModel/VpnWhitelistSearch + var/whitelisted = null // boolean + +/datum/apiModel/VpnWhitelistSearch/SetupFromResponse(response) + . = ..() + src.whitelisted = response["whitelisted"] + +/datum/apiModel/VpnWhitelistSearch/VerifyIntegrity() + . = ..() + if ( + isnull(src.whitelisted) \ + ) + return FALSE + +/datum/apiModel/VpnWhitelistSearch/ToList() + . = ..() + .["whitelisted"] = src.whitelisted diff --git a/code/modules/goonhub/api/requests/RemoteMusicBody.dm b/code/modules/goonhub/api/requests/RemoteMusicBody.dm new file mode 100644 index 0000000000000..69272c2c1261d --- /dev/null +++ b/code/modules/goonhub/api/requests/RemoteMusicBody.dm @@ -0,0 +1,15 @@ + +/datum/apiBody/remoteMusic + fields = list( + "video", // string + "round_id", // integer + "game_admin_ckey" // string + ) + +/datum/apiBody/remoteMusic/VerifyIntegrity() + . = ..() + if ( + isnull(src.values["video"]) \ + || isnull(src.values["round_id"]) \ + ) + return FALSE diff --git a/code/modules/goonhub/api/requests/apiBody.dm b/code/modules/goonhub/api/requests/apiBody.dm new file mode 100644 index 0000000000000..a1b3c20b9ebe9 --- /dev/null +++ b/code/modules/goonhub/api/requests/apiBody.dm @@ -0,0 +1,41 @@ + +ABSTRACT_TYPE(/datum/apiBody) +/// Represents the body of an API request - ABSTRACT +/// Everything is generally required unless annotated as such +/datum/apiBody + var/list/fields = list() + var/list/values = list() + +/datum/apiBody/New(list/fieldValues) + . = ..() + src.setValues(fieldValues) + if (!VerifyIntegrity()) +#if defined(SPACEMAN_DMM) + return +#elif DM_VERSION >= 515 || defined(OPENDREAM) // Yay, actual sanity! + var/datum/apiModel/Error/errorModel = new + errorModel.SetupFromResponse(list("message" = "malformed [__TYPE__] [src.toJson()]")) + throw EXCEPTION(errorModel) +#else + var/datum/apiModel/Error/errorModel = new + errorModel.SetupFromResponse(list("message" = "malformed api body [json_encode(src.toJson())]")) + throw EXCEPTION(errorModel) +#endif + +/// Build a list of values based on fields and input +/datum/apiBody/proc/setValues(list/fieldValues) + var/idx = 1 + for (var/key in src.fields) + src.values[key] = fieldValues[idx] + idx++ + +/// Override to verify that the model object is correctly formed. Return FALSE if not. +/datum/apiBody/proc/VerifyIntegrity() + return TRUE + +/// Override to provide a way to convert this body to json +/datum/apiBody/proc/toJson() + . = list() + for (var/key in src.fields) + .[key] = src.values[key] + . = json_encode(.) diff --git a/code/modules/goonhub/api/requests/bans/AddBansBody.dm b/code/modules/goonhub/api/requests/bans/AddBansBody.dm new file mode 100644 index 0000000000000..59f6665d33773 --- /dev/null +++ b/code/modules/goonhub/api/requests/bans/AddBansBody.dm @@ -0,0 +1,22 @@ + +/datum/apiBody/bans/add + fields = list( + "game_admin_ckey", // string + "round_id", // integer + "server_id", // string + "ckey", // string + "comp_id", // string + "ip", // string + "reason", // string + "duration", // integer + "requires_appeal" // boolean + ) + +/datum/apiBody/bans/add/VerifyIntegrity() + . = ..() + if ( + isnull(src.values["game_admin_ckey"]) \ + || isnull(src.values["round_id"]) \ + || isnull(src.values["reason"]) \ + ) + return FALSE diff --git a/code/modules/goonhub/api/requests/bans/AddBansDetailBody.dm b/code/modules/goonhub/api/requests/bans/AddBansDetailBody.dm new file mode 100644 index 0000000000000..d8d0e0579b27d --- /dev/null +++ b/code/modules/goonhub/api/requests/bans/AddBansDetailBody.dm @@ -0,0 +1,10 @@ + +/datum/apiBody/bans/add_detail + fields = list( + "ckey", // string + "comp_id", // string + "ip" // string + ) + +/datum/apiBody/bans/add_detail/VerifyIntegrity() + . = ..() diff --git a/code/modules/goonhub/api/requests/bans/AddJobBansBody.dm b/code/modules/goonhub/api/requests/bans/AddJobBansBody.dm new file mode 100644 index 0000000000000..835a1064dd87c --- /dev/null +++ b/code/modules/goonhub/api/requests/bans/AddJobBansBody.dm @@ -0,0 +1,21 @@ + +/datum/apiBody/jobbans/add + fields = list( + "game_admin_ckey", // string + "round_id", // integer + "server_id", // string + "ckey", // string + "job", // string + "reason", // string + "duration" // integer + ) + +/datum/apiBody/jobbans/add/VerifyIntegrity() + . = ..() + if ( + isnull(src.values["game_admin_ckey"]) \ + || isnull(src.values["round_id"]) \ + || isnull(src.values["ckey"]) \ + || isnull(src.values["job"]) \ + ) + return FALSE diff --git a/code/modules/goonhub/api/requests/bans/DeleteBansBody.dm b/code/modules/goonhub/api/requests/bans/DeleteBansBody.dm new file mode 100644 index 0000000000000..202686022202b --- /dev/null +++ b/code/modules/goonhub/api/requests/bans/DeleteBansBody.dm @@ -0,0 +1,12 @@ + +/datum/apiBody/bans/delete + fields = list( + "game_admin_ckey", // string + ) + +/datum/apiBody/bans/delete/VerifyIntegrity() + . = ..() + if ( + isnull(src.values["game_admin_ckey"]) + ) + return FALSE diff --git a/code/modules/goonhub/api/requests/bans/DeleteJobBanBody.dm b/code/modules/goonhub/api/requests/bans/DeleteJobBanBody.dm new file mode 100644 index 0000000000000..42ef5e8dda524 --- /dev/null +++ b/code/modules/goonhub/api/requests/bans/DeleteJobBanBody.dm @@ -0,0 +1,15 @@ + +/datum/apiBody/jobbans/delete + fields = list( + "server_id", // string + "ckey", // string + "job" // string + ) + +/datum/apiBody/jobbans/delete/VerifyIntegrity() + . = ..() + if ( + isnull(src.values["ckey"]) \ + || isnull(src.values["job"]) \ + ) + return FALSE diff --git a/code/modules/goonhub/api/requests/bans/UpdateJobBansBody.dm b/code/modules/goonhub/api/requests/bans/UpdateJobBansBody.dm new file mode 100644 index 0000000000000..f223da17eb34e --- /dev/null +++ b/code/modules/goonhub/api/requests/bans/UpdateJobBansBody.dm @@ -0,0 +1,16 @@ + +/datum/apiBody/jobbans/update + fields = list( + "server_id", // string + "job", // string + "reason", // string + "duration" // integer + ) + +/datum/apiBody/jobbans/update/VerifyIntegrity() + . = ..() + if ( + isnull(src.values["job"]) \ + ) + return FALSE + diff --git a/code/modules/goonhub/api/requests/dectalk/DectalkPlayBody.dm b/code/modules/goonhub/api/requests/dectalk/DectalkPlayBody.dm new file mode 100644 index 0000000000000..052b8536f3470 --- /dev/null +++ b/code/modules/goonhub/api/requests/dectalk/DectalkPlayBody.dm @@ -0,0 +1,14 @@ + +/datum/apiBody/dectalk/play + fields = list( + "text", // string + "round_id" // integer + ) + +/datum/apiBody/dectalk/play/VerifyIntegrity() + . = ..() + if ( + isnull(src.values["text"]) \ + || isnull(src.values["round_id"]) + ) + return FALSE diff --git a/code/modules/goonhub/api/requests/gameadmins/AddGameAdminsBody.dm b/code/modules/goonhub/api/requests/gameadmins/AddGameAdminsBody.dm new file mode 100644 index 0000000000000..776413dc5aea1 --- /dev/null +++ b/code/modules/goonhub/api/requests/gameadmins/AddGameAdminsBody.dm @@ -0,0 +1,34 @@ +/datum/apiBody/gameadmins/post + var/ckey = "string" + var/name = "string" + var/discord_id = "string" + var/rank = "integer" + +/datum/apiBody/gameadmins/post/New( + ckey, + name, + discord_id, + rank +) + . = ..() + src.ckey = ckey + src.name = name + src.discord_id = discord_id + src.rank = rank + +/datum/apiBody/gameadmins/post/VerifyIntegrity() + if ( + isnull(src.ckey) \ + || isnull(src.name) \ + || isnull(src.discord_id) \ + || isnull(src.rank) + ) + return FALSE + +/datum/apiBody/gameadmins/post/toJson() + return json_encode(list( + "ckey" = src.ckey, + "name" = src.name, + "discord_id" = src.discord_id, + "rank" = src.rank, + )) diff --git a/code/modules/goonhub/api/requests/gameadmins/UpdateGameAdminsBody.dm b/code/modules/goonhub/api/requests/gameadmins/UpdateGameAdminsBody.dm new file mode 100644 index 0000000000000..737d1ba797055 --- /dev/null +++ b/code/modules/goonhub/api/requests/gameadmins/UpdateGameAdminsBody.dm @@ -0,0 +1,34 @@ +/datum/apiBody/gameadmins/put + var/ckey = "string" + var/name = "string" + var/discord_id = "string" + var/rank = "integer" + +/datum/apiBody/gameadmins/put/New( + ckey, + name, + discord_id, + rank +) + . = ..() + src.ckey = ckey + src.name = name + src.discord_id = discord_id + src.rank = rank + +/datum/apiBody/gameadmins/put/VerifyIntegrity() + if ( + isnull(src.ckey) \ + || isnull(src.name) \ + || isnull(src.discord_id) \ + || isnull(src.rank) + ) + return FALSE + +/datum/apiBody/gameadmins/put/toJson() + return json_encode(list( + "ckey" = src.ckey, + "name" = src.name, + "discord_id" = src.discord_id, + "rank" = src.rank, + )) diff --git a/code/modules/goonhub/api/requests/maps/MapSwitchBody.dm b/code/modules/goonhub/api/requests/maps/MapSwitchBody.dm new file mode 100644 index 0000000000000..012da211842bd --- /dev/null +++ b/code/modules/goonhub/api/requests/maps/MapSwitchBody.dm @@ -0,0 +1,17 @@ + +/datum/apiBody/mapswitch + fields = list( + "game_admin_ckey", // string + "round_id", // integer + "server_id", // string + "map", // string + "votes" // integer + ) + +/datum/apiBody/mapswitch/VerifyIntegrity() + . = ..() + if ( + isnull(src.values["round_id"]) \ + || isnull(src.values["map"]) \ + ) + return FALSE diff --git a/code/modules/goonhub/api/requests/players/PlayerAntagsBody.dm b/code/modules/goonhub/api/requests/players/PlayerAntagsBody.dm new file mode 100644 index 0000000000000..edcb7d393bcc2 --- /dev/null +++ b/code/modules/goonhub/api/requests/players/PlayerAntagsBody.dm @@ -0,0 +1,18 @@ + +/datum/apiBody/PlayerAntags + fields = list( + "player_id", // integer + "round_id", // integer + "antag_role", // string + "late_join", // boolean + "weight_exempt" // boolean + ) + +/datum/apiBody/PlayerAntags/VerifyIntegrity() + . = ..() + if ( + isnull(src.values["player_id"]) \ + || isnull(src.values["round_id"]) \ + || isnull(src.values["antag_role"]) \ + ) + return FALSE diff --git a/code/modules/goonhub/api/requests/players/PlayerLoginBody.dm b/code/modules/goonhub/api/requests/players/PlayerLoginBody.dm new file mode 100644 index 0000000000000..2b4b3cdc8d677 --- /dev/null +++ b/code/modules/goonhub/api/requests/players/PlayerLoginBody.dm @@ -0,0 +1,20 @@ + +/datum/apiBody/players/login + fields = list( + "ckey", // string + "key", // string + "ip", // string + "comp_id", // string + "byond_major", // integer + "byond_minor", // integer + "round_id", // integer + ) + +/datum/apiBody/players/login/VerifyIntegrity() + . = ..() + if ( + isnull(src.values["ckey"]) \ + || isnull(src.values["key"]) \ + || isnull(src.values["round_id"]) \ + ) + return FALSE diff --git a/code/modules/goonhub/api/requests/players/PlayerMetadataBody.dm b/code/modules/goonhub/api/requests/players/PlayerMetadataBody.dm new file mode 100644 index 0000000000000..2ab19226a8754 --- /dev/null +++ b/code/modules/goonhub/api/requests/players/PlayerMetadataBody.dm @@ -0,0 +1,14 @@ + +/datum/apiBody/players/metadata + fields = list( + "player_id", // integer + "metadata" // string + ) + +/datum/apiBody/players/metadata/VerifyIntegrity() + . = ..() + if ( + isnull(src.values["player_id"]) \ + || isnull(src.values["metadata"]) + ) + return FALSE diff --git a/code/modules/goonhub/api/requests/players/PlayerParticipationsBody.dm b/code/modules/goonhub/api/requests/players/PlayerParticipationsBody.dm new file mode 100644 index 0000000000000..d1619d97e97ff --- /dev/null +++ b/code/modules/goonhub/api/requests/players/PlayerParticipationsBody.dm @@ -0,0 +1,15 @@ + +/datum/apiBody/PlayerParticipation + fields = list( + "player_id", // integer + "round_id", // integer + "job" // string + ) + +/datum/apiBody/PlayerParticipation/VerifyIntegrity() + . = ..() + if ( + isnull(src.values["player_id"]) \ + || isnull(src.values["round_id"]) \ + ) + return FALSE diff --git a/code/modules/goonhub/api/requests/players/PlayerParticipationsBulkBody.dm b/code/modules/goonhub/api/requests/players/PlayerParticipationsBulkBody.dm new file mode 100644 index 0000000000000..3b219cc573d3c --- /dev/null +++ b/code/modules/goonhub/api/requests/players/PlayerParticipationsBulkBody.dm @@ -0,0 +1,14 @@ + +/datum/apiBody/PlayerParticipationBulk + fields = list( + "players", // list + "round_id" // integer + ) + +/datum/apiBody/PlayerParticipationBulk/VerifyIntegrity() + . = ..() + if ( + isnull(src.values["players"]) \ + || isnull(src.values["round_id"]) \ + ) + return FALSE diff --git a/code/modules/goonhub/api/requests/players/PlayerPlaytimeBody.dm b/code/modules/goonhub/api/requests/players/PlayerPlaytimeBody.dm new file mode 100644 index 0000000000000..a15cc12b01fec --- /dev/null +++ b/code/modules/goonhub/api/requests/players/PlayerPlaytimeBody.dm @@ -0,0 +1,14 @@ + +/datum/apiBody/players/playtime + fields = list( + "server_id", // string + "players" /// [{id: string, seconds_played: integer}] + ) + +/datum/apiBody/players/playtime/VerifyIntegrity() + . = ..() + if ( + isnull(src.values["server_id"]) \ + || isnull(src.values["players"]) \ + ) + return FALSE diff --git a/code/modules/goonhub/api/requests/players/PlayerSavesAddDataBody.dm b/code/modules/goonhub/api/requests/players/PlayerSavesAddDataBody.dm new file mode 100644 index 0000000000000..59bf6396f9a38 --- /dev/null +++ b/code/modules/goonhub/api/requests/players/PlayerSavesAddDataBody.dm @@ -0,0 +1,15 @@ + +/datum/apiBody/PlayerSavesAddData + fields = list( + "player_id", // integer + "key", // string + "value" //string + ) + +/datum/apiBody/PlayerSavesAddData/VerifyIntegrity() + . = ..() + if ( + isnull(src.values["player_id"]) \ + || isnull(src.values["key"]) + ) + return FALSE diff --git a/code/modules/goonhub/api/requests/players/PlayerSavesAddSaveBody.dm b/code/modules/goonhub/api/requests/players/PlayerSavesAddSaveBody.dm new file mode 100644 index 0000000000000..f4f87871bf6dd --- /dev/null +++ b/code/modules/goonhub/api/requests/players/PlayerSavesAddSaveBody.dm @@ -0,0 +1,15 @@ + +/datum/apiBody/PlayerSavesAddSave + fields = list( + "player_id", // integer + "name", // string + "data" //string + ) + +/datum/apiBody/PlayerSavesAddSave/VerifyIntegrity() + . = ..() + if ( + isnull(src.values["player_id"]) \ + || isnull(src.values["name"]) + ) + return FALSE diff --git a/code/modules/goonhub/api/requests/players/PlayerSavesBulkBody.dm b/code/modules/goonhub/api/requests/players/PlayerSavesBulkBody.dm new file mode 100644 index 0000000000000..363129d2434c4 --- /dev/null +++ b/code/modules/goonhub/api/requests/players/PlayerSavesBulkBody.dm @@ -0,0 +1,12 @@ + +/datum/apiBody/PlayerSavesBulkData + fields = list( + "data" // string + ) + +/datum/apiBody/PlayerSavesBulkData/VerifyIntegrity() + . = ..() + if ( + isnull(src.values["data"]) + ) + return FALSE diff --git a/code/modules/goonhub/api/requests/players/PlayerSavesDeleteDataBody.dm b/code/modules/goonhub/api/requests/players/PlayerSavesDeleteDataBody.dm new file mode 100644 index 0000000000000..fe75ecff1de25 --- /dev/null +++ b/code/modules/goonhub/api/requests/players/PlayerSavesDeleteDataBody.dm @@ -0,0 +1,14 @@ + +/datum/apiBody/PlayerSavesDeleteData + fields = list( + "player_id", // integer + "key", // string + ) + +/datum/apiBody/PlayerSavesDeleteData/VerifyIntegrity() + . = ..() + if ( + isnull(src.values["player_id"]) \ + || isnull(src.values["key"]) \ + ) + return FALSE diff --git a/code/modules/goonhub/api/requests/players/PlayerSavesDeleteSaveBody.dm b/code/modules/goonhub/api/requests/players/PlayerSavesDeleteSaveBody.dm new file mode 100644 index 0000000000000..5cc2f729bebd9 --- /dev/null +++ b/code/modules/goonhub/api/requests/players/PlayerSavesDeleteSaveBody.dm @@ -0,0 +1,14 @@ + +/datum/apiBody/PlayerSavesDeleteSave + fields = list( + "player_id", // integer + "name", // string + ) + +/datum/apiBody/PlayerSavesDeleteSave/VerifyIntegrity() + . = ..() + if ( + isnull(src.values["player_id"]) \ + || isnull(src.values["name"]) \ + ) + return FALSE diff --git a/code/modules/goonhub/api/requests/players/PlayerSavesTransferFilesBody.dm b/code/modules/goonhub/api/requests/players/PlayerSavesTransferFilesBody.dm new file mode 100644 index 0000000000000..e20de1b57b1ea --- /dev/null +++ b/code/modules/goonhub/api/requests/players/PlayerSavesTransferFilesBody.dm @@ -0,0 +1,14 @@ + +/datum/apiBody/PlayerSavesTransferFiles + fields = list( + "from_ckey", // integer + "to_ckey", // string + ) + +/datum/apiBody/PlayerSavesTransferFiles/VerifyIntegrity() + . = ..() + if ( + isnull(src.values["from_ckey"]) \ + || isnull(src.values["to_ckey"]) \ + ) + return FALSE diff --git a/code/modules/goonhub/api/requests/players/medals/AddPlayerMedalBody.dm b/code/modules/goonhub/api/requests/players/medals/AddPlayerMedalBody.dm new file mode 100644 index 0000000000000..cef16234f1708 --- /dev/null +++ b/code/modules/goonhub/api/requests/players/medals/AddPlayerMedalBody.dm @@ -0,0 +1,16 @@ + +/datum/apiBody/players/medals/add + fields = list( + "player_id", // integer + "ckey", // string + "medal", // string + "round_id", // integer + ) + +/datum/apiBody/players/medals/add/VerifyIntegrity() + . = ..() + if ( + isnull(src.values["medal"]) \ + || isnull(src.values["round_id"]) \ + ) + return FALSE diff --git a/code/modules/goonhub/api/requests/players/medals/DeletePlayerMedalBody.dm b/code/modules/goonhub/api/requests/players/medals/DeletePlayerMedalBody.dm new file mode 100644 index 0000000000000..1a6dbac9814f2 --- /dev/null +++ b/code/modules/goonhub/api/requests/players/medals/DeletePlayerMedalBody.dm @@ -0,0 +1,14 @@ + +/datum/apiBody/players/medals/delete + fields = list( + "player_id", // integer + "ckey", // string + "medal", // string + ) + +/datum/apiBody/players/medals/delete/VerifyIntegrity() + . = ..() + if ( + isnull(src.values["medal"]) \ + ) + return FALSE diff --git a/code/modules/goonhub/api/requests/players/notes/AddPlayerNotesBody.dm b/code/modules/goonhub/api/requests/players/notes/AddPlayerNotesBody.dm new file mode 100644 index 0000000000000..e670e0072b80b --- /dev/null +++ b/code/modules/goonhub/api/requests/players/notes/AddPlayerNotesBody.dm @@ -0,0 +1,20 @@ + +/datum/apiBody/players/notes/post + fields = list( + "game_admin_ckey", // string + "round_id", // integer + "server_id", // string + "ckey", // string + "note" // string + ) + +/datum/apiBody/players/notes/post/VerifyIntegrity() + . = ..() + if ( + isnull(src.values["game_admin_ckey"]) \ + || isnull(src.values["round_id"]) \ + || isnull(src.values["server_id"]) \ + || isnull(src.values["ckey"]) \ + || isnull(src.values["note"]) \ + ) + return FALSE diff --git a/code/modules/goonhub/api/requests/players/notes/UpdatePlayerNotesBody.dm b/code/modules/goonhub/api/requests/players/notes/UpdatePlayerNotesBody.dm new file mode 100644 index 0000000000000..5fc9875d526b0 --- /dev/null +++ b/code/modules/goonhub/api/requests/players/notes/UpdatePlayerNotesBody.dm @@ -0,0 +1,35 @@ + +/datum/apiBody/players/notes/update + var/game_admin_ckey = "string" + var/server_id = "string" + var/ckey = "string" + var/note = "string" + +/datum/apiBody/players/notes/update/New( + game_admin_ckey, + server_id, + ckey, + note +) + . = ..() + src.game_admin_ckey = game_admin_ckey + src.server_id = server_id + src.ckey = ckey + src.note = note + +/datum/apiBody/players/notes/update/VerifyIntegrity() + if ( + isnull(src.game_admin_ckey) \ + || isnull(src.server_id) \ + || isnull(src.ckey) \ + || isnull(src.note) \ + ) + return FALSE + +/datum/apiBody/players/notes/update/toJson() + return json_encode(list( + "game_admin_ckey" = src.game_admin_ckey, + "server_id" = src.server_id, + "ckey" = src.ckey, + "note" = src.note, + )) diff --git a/code/modules/goonhub/api/requests/polls/AddPollBody.dm b/code/modules/goonhub/api/requests/polls/AddPollBody.dm new file mode 100644 index 0000000000000..b8dfc8d208ea6 --- /dev/null +++ b/code/modules/goonhub/api/requests/polls/AddPollBody.dm @@ -0,0 +1,18 @@ + +/datum/apiBody/polls/add + fields = list( + "game_admin_ckey", // string + "question", // string + "multiple_choice", // boolean + "expires_at", // date-time + "options", // [string] + "servers" // [string] + ) + +/datum/apiBody/polls/add/VerifyIntegrity() + . = ..() + if ( + isnull(src.values["question"]) \ + || isnull(src.values["options"]) \ + ) + return FALSE diff --git a/code/modules/goonhub/api/requests/polls/AddPollOptionBody.dm b/code/modules/goonhub/api/requests/polls/AddPollOptionBody.dm new file mode 100644 index 0000000000000..8d72f4153d4fb --- /dev/null +++ b/code/modules/goonhub/api/requests/polls/AddPollOptionBody.dm @@ -0,0 +1,12 @@ + +/datum/apiBody/polls/options/add + fields = list( + "option", // string + ) + +/datum/apiBody/polls/options/add/VerifyIntegrity() + . = ..() + if ( + isnull(src.values["option"]) \ + ) + return FALSE diff --git a/code/modules/goonhub/api/requests/polls/EditPollBody.dm b/code/modules/goonhub/api/requests/polls/EditPollBody.dm new file mode 100644 index 0000000000000..6d3a0fb8ee7d2 --- /dev/null +++ b/code/modules/goonhub/api/requests/polls/EditPollBody.dm @@ -0,0 +1,10 @@ + +/datum/apiBody/polls/edit + fields = list( + "question", // string + "expires_at", // date-time + "servers" // [string] + ) + +/datum/apiBody/polls/edit/VerifyIntegrity() + . = ..() diff --git a/code/modules/goonhub/api/requests/polls/EditPollOptionBody.dm b/code/modules/goonhub/api/requests/polls/EditPollOptionBody.dm new file mode 100644 index 0000000000000..43d3ae4c89377 --- /dev/null +++ b/code/modules/goonhub/api/requests/polls/EditPollOptionBody.dm @@ -0,0 +1,13 @@ + +/datum/apiBody/polls/options/edit + fields = list( + "option", // string + "position" // integer + ) + +/datum/apiBody/polls/options/edit/VerifyIntegrity() + . = ..() + if ( + isnull(src.values["option"]) \ + ) + return FALSE diff --git a/code/modules/goonhub/api/requests/polls/PickUnpickPollOptionBody.dm b/code/modules/goonhub/api/requests/polls/PickUnpickPollOptionBody.dm new file mode 100644 index 0000000000000..093d44dc9a6b2 --- /dev/null +++ b/code/modules/goonhub/api/requests/polls/PickUnpickPollOptionBody.dm @@ -0,0 +1,12 @@ + +/datum/apiBody/polls/options/pickUnpick + fields = list( + "player_id", // integer + ) + +/datum/apiBody/polls/options/pickUnpick/VerifyIntegrity() + . = ..() + if ( + isnull(src.values["player_id"]) \ + ) + return FALSE diff --git a/code/modules/goonhub/api/requests/rounds/AddGameRoundBody.dm b/code/modules/goonhub/api/requests/rounds/AddGameRoundBody.dm new file mode 100644 index 0000000000000..647d61753295b --- /dev/null +++ b/code/modules/goonhub/api/requests/rounds/AddGameRoundBody.dm @@ -0,0 +1,15 @@ + +/datum/apiBody/rounds/post + fields = list( + "map", // string + "server_id", // string + "rp_mode", // boolean + ) + +/datum/apiBody/rounds/post/VerifyIntegrity() + . = ..() + if ( + isnull(src.values["map"]) \ + || isnull(src.values["server_id"]) \ + ) + return FALSE diff --git a/code/modules/goonhub/api/requests/rounds/EndGameRoundBody.dm b/code/modules/goonhub/api/requests/rounds/EndGameRoundBody.dm new file mode 100644 index 0000000000000..b4dad08b509c3 --- /dev/null +++ b/code/modules/goonhub/api/requests/rounds/EndGameRoundBody.dm @@ -0,0 +1,12 @@ + +/datum/apiBody/rounds/end + fields = list( + "crashed", // boolean + ) + +/datum/apiBody/rounds/end/VerifyIntegrity() + . = ..() + if ( + isnull(src.values["crashed"]) \ + ) + return FALSE diff --git a/code/modules/goonhub/api/requests/rounds/UpdateGameRoundBody.dm b/code/modules/goonhub/api/requests/rounds/UpdateGameRoundBody.dm new file mode 100644 index 0000000000000..6666d7d320eff --- /dev/null +++ b/code/modules/goonhub/api/requests/rounds/UpdateGameRoundBody.dm @@ -0,0 +1,12 @@ + +/datum/apiBody/rounds/update + fields = list( + "game_type", // string + ) + +/datum/apiBody/rounds/update/VerifyIntegrity() + . = ..() + if ( + isnull(src.values["game_type"]) \ + ) + return FALSE diff --git a/code/modules/goonhub/api/requests/vpn/AddVpnWhitelistBody.dm b/code/modules/goonhub/api/requests/vpn/AddVpnWhitelistBody.dm new file mode 100644 index 0000000000000..c050e9e131f1e --- /dev/null +++ b/code/modules/goonhub/api/requests/vpn/AddVpnWhitelistBody.dm @@ -0,0 +1,14 @@ + +/datum/apiBody/vpnwhitelist/add + fields = list( + "game_admin_ckey", // string + "ckey", // string + ) + +/datum/apiBody/vpnwhitelist/add/VerifyIntegrity() + . = ..() + if ( + isnull(src.values["game_admin_ckey"]) \ + || isnull(src.values["ckey"]) \ + ) + return FALSE diff --git a/code/modules/goonhub/api/routes/RandomEntries.dm b/code/modules/goonhub/api/routes/RandomEntries.dm new file mode 100644 index 0000000000000..87e7d9d8f7693 --- /dev/null +++ b/code/modules/goonhub/api/routes/RandomEntries.dm @@ -0,0 +1,8 @@ + +/// GET /random-entries +/// Get a list of random entries by type +/datum/apiRoute/randomEntries + method = RUSTG_HTTP_METHOD_GET + path = "/random-entries" + queryParams = list("type", "count") + correct_response = /datum/apiModel/RandomEntries diff --git a/code/modules/goonhub/api/routes/RemoteMusic.dm b/code/modules/goonhub/api/routes/RemoteMusic.dm new file mode 100644 index 0000000000000..6ffc78dc5817a --- /dev/null +++ b/code/modules/goonhub/api/routes/RemoteMusic.dm @@ -0,0 +1,15 @@ + +/// POST /remote-music +/// Queue a piece of music from youtube to be played in a given round +/datum/apiRoute/remoteMusic + method = RUSTG_HTTP_METHOD_POST + path = "/remote-music" + body = /datum/apiBody/remoteMusic + correct_response = /datum/apiModel/Message + + buildBody( + video, + round_id, + game_admin_ckey + ) + . = ..(args) diff --git a/code/modules/goonhub/api/routes/apiRoute.dm b/code/modules/goonhub/api/routes/apiRoute.dm new file mode 100644 index 0000000000000..26b4aa895661c --- /dev/null +++ b/code/modules/goonhub/api/routes/apiRoute.dm @@ -0,0 +1,44 @@ + + +/// Base apiCall type +/// Represents a predefined query we can make to the Goonhub API +/// SECURITY: Sanitization occurs right before output +/datum/apiRoute + /// HTTP Method this call uses, for example `RUSTG_HTTP_METHOD_GET` + var/method = null + /// Actual path of the api query, for example `/rounds` + var/path = null + /// Route parameters for the call, ie /rounds/{round_id}/ - Must be in order + var/list/routeParams = null + /// Query parameters for the call, ie /rounds?&id=3 + var/list/queryParams = null + /// Body of the request, invalid for GET + var/datum/apiBody/body = null + /// The expected type upon deserialization + var/correct_response = null + + +/// Formats a given parameter associated list into a urlstring format +/// E.g. `list("ckey"="zewaka") to `?&ckey=zewaka` and `list("x"=list("a" = "foo", "b" = "bar"))` to `?&x[a]=foo&x[b]=bar` +/datum/apiRoute/proc/formatQueryParams() + if (length(src.queryParams)) + . = list() + for (var/key in src.queryParams) + if (islist(src.queryParams[key])) // Do we need to encode the value? + if (length(src.queryParams[key]) > 0) + for (var/subKey in src.queryParams[key]) + .["[key]\[[subKey]\]"] = src.queryParams[key][subKey] + else + .["[key]\[\]"] = null + else + .[key] = src.queryParams[key] + . = list2params(.) + +/// Formats a given parameter list into a route-append format +/// E.g. `list("tuesday", "wednesday")` to `tuesday/wednesday` +/datum/apiRoute/proc/formatRouteParams() + if (length(src.routeParams)) + return jointext(src.routeParams, "/") + +/datum/apiRoute/proc/buildBody(list/fieldValues) + src.body = new src.body(fieldValues) diff --git a/code/modules/goonhub/api/routes/bans/AddBanDetails.dm b/code/modules/goonhub/api/routes/bans/AddBanDetails.dm new file mode 100644 index 0000000000000..fa1f48ebeaf4b --- /dev/null +++ b/code/modules/goonhub/api/routes/bans/AddBanDetails.dm @@ -0,0 +1,15 @@ +/// POST /bans/details/{ban} +/// Add new player details to an existing ban. This should be used when an evasion attempt is detected. +/datum/apiRoute/bans/add_detail + method = RUSTG_HTTP_METHOD_POST + path = "/bans/details" + routeParams = list("ban") // integer (The ban ID) + body = /datum/apiBody/bans/add_detail + correct_response = /datum/apiModel/Tracked/BanDetail + + buildBody( + ckey, + comp_id, + ip + ) + . = ..(args) diff --git a/code/modules/goonhub/api/routes/bans/AddBans.dm b/code/modules/goonhub/api/routes/bans/AddBans.dm new file mode 100644 index 0000000000000..705494e205b94 --- /dev/null +++ b/code/modules/goonhub/api/routes/bans/AddBans.dm @@ -0,0 +1,20 @@ +/// POST /bans +/// Add a ban for given player data +/datum/apiRoute/bans/add + method = RUSTG_HTTP_METHOD_POST + path = "/bans" + body = /datum/apiBody/bans/add + correct_response = /datum/apiModel/Tracked/BanResource + + buildBody( + game_admin_ckey, + round_id, + server_id, + ckey, + comp_id, + ip, + reason, + duration, + requires_appeal + ) + . = ..(args) diff --git a/code/modules/goonhub/api/routes/bans/CheckBans.dm b/code/modules/goonhub/api/routes/bans/CheckBans.dm new file mode 100644 index 0000000000000..a9d56ce0a345b --- /dev/null +++ b/code/modules/goonhub/api/routes/bans/CheckBans.dm @@ -0,0 +1,7 @@ +/// GET /bans/check +/// Check +/datum/apiRoute/bans/check + method = RUSTG_HTTP_METHOD_GET + path = "/bans/check" + queryParams = list("ckey", "comp_id", "ip", "server_id") // string, string, string, string + correct_response = /datum/apiModel/Tracked/BanResource diff --git a/code/modules/goonhub/api/routes/bans/DeleteBans.dm b/code/modules/goonhub/api/routes/bans/DeleteBans.dm new file mode 100644 index 0000000000000..4fbe66fc0eade --- /dev/null +++ b/code/modules/goonhub/api/routes/bans/DeleteBans.dm @@ -0,0 +1,13 @@ +/// DELETE /bans/{ban} +/// Delete +/datum/apiRoute/bans/delete + method = RUSTG_HTTP_METHOD_DELETE + path = "/bans" + routeParams = list("ban") // integer (The ban ID) + body = /datum/apiBody/bans/delete + correct_response = /datum/apiModel/Message + + buildBody( + game_admin_ckey + ) + . = ..(args) diff --git a/code/modules/goonhub/api/routes/bans/GetBans.dm b/code/modules/goonhub/api/routes/bans/GetBans.dm new file mode 100644 index 0000000000000..d4d736cf432fa --- /dev/null +++ b/code/modules/goonhub/api/routes/bans/GetBans.dm @@ -0,0 +1,7 @@ +/// GET /bans +/// Get +/datum/apiRoute/bans/get + method = RUSTG_HTTP_METHOD_GET + path = "/bans" + queryParams = list("filters", "sort_by", "descending", "page", "per_page") // object, string, string, int, int + correct_response = /datum/apiModel/Paginated/BanResourceList diff --git a/code/modules/goonhub/api/routes/bans/RemoveBanDetails.dm b/code/modules/goonhub/api/routes/bans/RemoveBanDetails.dm new file mode 100644 index 0000000000000..7e5a9f196dbfb --- /dev/null +++ b/code/modules/goonhub/api/routes/bans/RemoveBanDetails.dm @@ -0,0 +1,7 @@ +/// DELETE /bans/detail/{banDetail} +/// Add Details +/datum/apiRoute/bans/remove_detail + method = RUSTG_HTTP_METHOD_DELETE + path = "/bans/details" + routeParams = list("banDetail") // integer (The ban ID) + correct_response = /datum/apiModel/Message diff --git a/code/modules/goonhub/api/routes/bans/UpdateBans.dm b/code/modules/goonhub/api/routes/bans/UpdateBans.dm new file mode 100644 index 0000000000000..f3d1f22a96410 --- /dev/null +++ b/code/modules/goonhub/api/routes/bans/UpdateBans.dm @@ -0,0 +1,21 @@ +/// PUT /bans/{ban} +/// Update +/datum/apiRoute/bans/update + method = RUSTG_HTTP_METHOD_PUT + path = "/bans" + routeParams = list("ban") // integer (The ban ID) + body = /datum/apiBody/bans/add + correct_response = /datum/apiModel/Tracked/BanResource + + buildBody( + game_admin_ckey, + round_id, + server_id, + ckey, + comp_id, + ip, + reason, + duration, + requires_appeal + ) + . = ..(args) diff --git a/code/modules/goonhub/api/routes/dectalk/PlayDectalk.dm b/code/modules/goonhub/api/routes/dectalk/PlayDectalk.dm new file mode 100644 index 0000000000000..fd917f5c42ef4 --- /dev/null +++ b/code/modules/goonhub/api/routes/dectalk/PlayDectalk.dm @@ -0,0 +1,13 @@ +/// POST /dectalk/play +/// Generate an audio file speaking the text provided. +/datum/apiRoute/dectalk/play + method = RUSTG_HTTP_METHOD_POST + path = "/dectalk/play" + body = /datum/apiBody/dectalk/play + correct_response = /datum/apiModel/DectalkPlayResource + + buildBody( + text, + round_id + ) + . = ..(args) diff --git a/code/modules/goonhub/api/routes/gameadminranks/AddGameAdminRanks.dm b/code/modules/goonhub/api/routes/gameadminranks/AddGameAdminRanks.dm new file mode 100644 index 0000000000000..7253f761bc2ee --- /dev/null +++ b/code/modules/goonhub/api/routes/gameadminranks/AddGameAdminRanks.dm @@ -0,0 +1,8 @@ + +/// POST /game-admin-ranks +/// Add a new game admin rank +/datum/apiRoute/gameadminrank/post + method = RUSTG_HTTP_METHOD_POST + path = "/game-admin-ranks" + body = list("rank") + correct_response = /datum/apiModel/Tracked/GameAdminRank diff --git a/code/modules/goonhub/api/routes/gameadminranks/DeleteGameAdminRanks.dm b/code/modules/goonhub/api/routes/gameadminranks/DeleteGameAdminRanks.dm new file mode 100644 index 0000000000000..f2a71d5709462 --- /dev/null +++ b/code/modules/goonhub/api/routes/gameadminranks/DeleteGameAdminRanks.dm @@ -0,0 +1,8 @@ + +/// DELETE /game-admin-ranks/{gameAdmin} +/// Delete an existing game admin +/datum/apiRoute/gameadminranks/delete + method = RUSTG_HTTP_METHOD_DELETE + path = "/game-admin-ranks" + routeParams = list("gameAdminRank") // integer + correct_response = "string" diff --git a/code/modules/goonhub/api/routes/gameadminranks/GetGameAdminRanks.dm b/code/modules/goonhub/api/routes/gameadminranks/GetGameAdminRanks.dm new file mode 100644 index 0000000000000..77e3a4a4e7f9f --- /dev/null +++ b/code/modules/goonhub/api/routes/gameadminranks/GetGameAdminRanks.dm @@ -0,0 +1,8 @@ + +/// GET /game-admin-ranks +/// List paginated and filtered game admin ranks +/datum/apiRoute/gameadminranks/get + method = RUSTG_HTTP_METHOD_GET + path = "/game-admin-ranks" + queryParams = list("filters", "sort_by", "descending", "per_page") // string[], string, string, string + correct_response = /datum/apiModel/Tracked/GameAdminResource diff --git a/code/modules/goonhub/api/routes/gameadminranks/UpdateGameAdminRanks.dm b/code/modules/goonhub/api/routes/gameadminranks/UpdateGameAdminRanks.dm new file mode 100644 index 0000000000000..ac1ffb9d29bca --- /dev/null +++ b/code/modules/goonhub/api/routes/gameadminranks/UpdateGameAdminRanks.dm @@ -0,0 +1,9 @@ + +/// PUT /game-admin-ranks/{gameAdminRank} +/// Update an existing game admin +/datum/apiRoute/gameadminranks/put + method = RUSTG_HTTP_METHOD_PUT + path = "/game-admin-ranks" + body = list("rank") + routeParams = list("gameAdminRank") // integer + correct_response = /datum/apiModel/Tracked/GameAdminResource diff --git a/code/modules/goonhub/api/routes/gameadmins/AddGameAdmins.dm b/code/modules/goonhub/api/routes/gameadmins/AddGameAdmins.dm new file mode 100644 index 0000000000000..d53a4feaa8554 --- /dev/null +++ b/code/modules/goonhub/api/routes/gameadmins/AddGameAdmins.dm @@ -0,0 +1,8 @@ + +/// POST /game-admins +/// Add a new game admin +/datum/apiRoute/gameadmins/post + method = RUSTG_HTTP_METHOD_POST + path = "/game-admins" + body = /datum/apiBody/gameadmins/post + correct_response = /datum/apiModel/Tracked/GameAdminResource diff --git a/code/modules/goonhub/api/routes/gameadmins/DeleteGameAdmins.dm b/code/modules/goonhub/api/routes/gameadmins/DeleteGameAdmins.dm new file mode 100644 index 0000000000000..b1289ffd66b58 --- /dev/null +++ b/code/modules/goonhub/api/routes/gameadmins/DeleteGameAdmins.dm @@ -0,0 +1,8 @@ + +/// DELETE /game-admins/{gameAdmin} +/// Delete an existing game admin +/datum/apiRoute/gameadmins/delete + method = RUSTG_HTTP_METHOD_DELETE + path = "/game-admins" + routeParams = list("gameAdmin") // integer + correct_response = /datum/apiModel/Message diff --git a/code/modules/goonhub/api/routes/gameadmins/GetGameAdmins.dm b/code/modules/goonhub/api/routes/gameadmins/GetGameAdmins.dm new file mode 100644 index 0000000000000..5eacd61fcbe05 --- /dev/null +++ b/code/modules/goonhub/api/routes/gameadmins/GetGameAdmins.dm @@ -0,0 +1,8 @@ + +/// GET /game-admins +/// List paginated and filtered game admins +/datum/apiRoute/gameadmins/get + method = RUSTG_HTTP_METHOD_GET + path = "/game-admins" + queryParams = list("filters", "sort_by", "descending", "per_page") // string[], string, string, string + correct_response = /datum/apiModel/Tracked/GameAdminResource diff --git a/code/modules/goonhub/api/routes/gameadmins/UpdateGameAdmins.dm b/code/modules/goonhub/api/routes/gameadmins/UpdateGameAdmins.dm new file mode 100644 index 0000000000000..c4826acfd8407 --- /dev/null +++ b/code/modules/goonhub/api/routes/gameadmins/UpdateGameAdmins.dm @@ -0,0 +1,9 @@ + +/// PUT /game-admins/{gameAdmin} +/// Update an existing game admin +/datum/apiRoute/gameadmins/put + method = RUSTG_HTTP_METHOD_PUT + path = "/game-admins" + body = /datum/apiBody/gameadmins/put + routeParams = list("gameAdmin") // integer + correct_response = /datum/apiModel/Tracked/GameAdminResource diff --git a/code/modules/goonhub/api/routes/gauntlet/GetPreviousGauntlets.dm b/code/modules/goonhub/api/routes/gauntlet/GetPreviousGauntlets.dm new file mode 100644 index 0000000000000..7e53387a75c2b --- /dev/null +++ b/code/modules/goonhub/api/routes/gauntlet/GetPreviousGauntlets.dm @@ -0,0 +1,7 @@ +/// GET /gauntlets/get-previous +/// Retrieve a count of how many gauntlets a given key has completed +/datum/apiRoute/gauntlet/getprevious + method = RUSTG_HTTP_METHOD_GET + path = "/gauntlet/get-previous" + queryParams = list("key") // string + correct_response = /datum/apiModel/PreviousGauntlets diff --git a/code/modules/goonhub/api/routes/jobbans/AddJobBans.dm b/code/modules/goonhub/api/routes/jobbans/AddJobBans.dm new file mode 100644 index 0000000000000..9fa476afe9324 --- /dev/null +++ b/code/modules/goonhub/api/routes/jobbans/AddJobBans.dm @@ -0,0 +1,18 @@ +/// POST /job-bans +/// Add a new job ban +/datum/apiRoute/jobbans/add + method = RUSTG_HTTP_METHOD_POST + path = "/job-bans" + body = /datum/apiBody/jobbans/add + correct_response = /datum/apiModel/Tracked/JobBanResource + + buildBody( + game_admin_ckey, + round_id, + server_id, + ckey, + job, + reason, + duration + ) + . = ..(args) diff --git a/code/modules/goonhub/api/routes/jobbans/CheckJobBans.dm b/code/modules/goonhub/api/routes/jobbans/CheckJobBans.dm new file mode 100644 index 0000000000000..8061d4fed2ceb --- /dev/null +++ b/code/modules/goonhub/api/routes/jobbans/CheckJobBans.dm @@ -0,0 +1,7 @@ +/// GET /job-bans/check +/// Check if a job ban exists for given player and server details +/datum/apiRoute/jobbans/check + method = RUSTG_HTTP_METHOD_GET + path = "/job-bans/check" + queryParams = list("ckey", "job", "server_id") // string, string, string + correct_response = /datum/apiModel/Tracked/JobBanResource diff --git a/code/modules/goonhub/api/routes/jobbans/DeleteJobBans.dm b/code/modules/goonhub/api/routes/jobbans/DeleteJobBans.dm new file mode 100644 index 0000000000000..7837e84663f8c --- /dev/null +++ b/code/modules/goonhub/api/routes/jobbans/DeleteJobBans.dm @@ -0,0 +1,14 @@ +/// DELETE /job-bans/{jobBan} +/// Delete an existing job ban +/datum/apiRoute/jobbans/delete + method = RUSTG_HTTP_METHOD_DELETE + path = "/job-bans" + body = /datum/apiBody/jobbans/delete + correct_response = /datum/apiModel/Message + + buildBody( + server_id, + ckey, + job + ) + . = ..(args) diff --git a/code/modules/goonhub/api/routes/jobbans/GetJobBans.dm b/code/modules/goonhub/api/routes/jobbans/GetJobBans.dm new file mode 100644 index 0000000000000..967281b04703a --- /dev/null +++ b/code/modules/goonhub/api/routes/jobbans/GetJobBans.dm @@ -0,0 +1,7 @@ +/// GET /job-bans +/// List filtered and paginated job bans +/datum/apiRoute/jobbans/get + method = RUSTG_HTTP_METHOD_GET + path = "/job-bans" + queryParams = list("filters", "sort_by", "descending", "per_page") // string[], string, string, string + correct_response = /datum/apiModel/Paginated/JobBanResourceList diff --git a/code/modules/goonhub/api/routes/jobbans/GetPlayerJobBans.dm b/code/modules/goonhub/api/routes/jobbans/GetPlayerJobBans.dm new file mode 100644 index 0000000000000..65bdc600fce8b --- /dev/null +++ b/code/modules/goonhub/api/routes/jobbans/GetPlayerJobBans.dm @@ -0,0 +1,7 @@ +/// GET /job-bans/get-for-player +/// Get all job bans for a given player and server +/datum/apiRoute/jobbans/getforplayer + method = RUSTG_HTTP_METHOD_GET + path = "/job-bans/get-for-player" + queryParams = list("ckey", "server_id") // string, string + correct_response = /datum/apiModel/JobBansForPlayer diff --git a/code/modules/goonhub/api/routes/jobbans/UpdateJobBans.dm b/code/modules/goonhub/api/routes/jobbans/UpdateJobBans.dm new file mode 100644 index 0000000000000..8f9cc4f0fd53b --- /dev/null +++ b/code/modules/goonhub/api/routes/jobbans/UpdateJobBans.dm @@ -0,0 +1,16 @@ +/// PUT /job-bans/{jobBan} +/// Update an existing job ban +/datum/apiRoute/jobbans/update + method = RUSTG_HTTP_METHOD_PUT + path = "/job-bans" + routeParams = list("jobBan") // integer + body = /datum/apiBody/jobbans/update + correct_response = /datum/apiModel/Tracked/JobBanResource + + buildBody( + server_id, + job, + reason, + duration + ) + . = ..(args) diff --git a/code/modules/goonhub/api/routes/maps/MapSwitches.dm b/code/modules/goonhub/api/routes/maps/MapSwitches.dm new file mode 100644 index 0000000000000..4cd95fd576c9f --- /dev/null +++ b/code/modules/goonhub/api/routes/maps/MapSwitches.dm @@ -0,0 +1,17 @@ + +/// POST /map-switch +/// Trigger a map switch for a given server +/datum/apiRoute/mapswitch + method = RUSTG_HTTP_METHOD_POST + path = "/map-switch" + body = /datum/apiBody/mapswitch + correct_response = /datum/apiModel/MapSwitch + + buildBody( + game_admin_ckey, + round_id, + server_id, + map, + votes + ) + . = ..(args) diff --git a/code/modules/goonhub/api/routes/numbersstation/GetNumbersStationNumbers.dm b/code/modules/goonhub/api/routes/numbersstation/GetNumbersStationNumbers.dm new file mode 100644 index 0000000000000..3a0f41e31ce7d --- /dev/null +++ b/code/modules/goonhub/api/routes/numbersstation/GetNumbersStationNumbers.dm @@ -0,0 +1,7 @@ + +/// GET /numbers-station +/// Get the current numbers representing the password for the numbers station terminal +/datum/apiRoute/numbersstation/get + method = RUSTG_HTTP_METHOD_GET + path = "/numbers-station" + correct_response = /datum/apiModel/NumbersStationPasswordResource diff --git a/code/modules/goonhub/api/routes/players/PlayerAntags.dm b/code/modules/goonhub/api/routes/players/PlayerAntags.dm new file mode 100644 index 0000000000000..85ed7a0caa6db --- /dev/null +++ b/code/modules/goonhub/api/routes/players/PlayerAntags.dm @@ -0,0 +1,17 @@ + +/// POST /players/antags +/// Add a player antagonist for a given round +/datum/apiRoute/players/antags + method = RUSTG_HTTP_METHOD_POST + path = "/players/antags" + body = /datum/apiBody/PlayerAntags + correct_response = /datum/apiModel/Tracked/PlayerRes/PlayerAntagResource + + buildBody( + player_id, + round_id, + antag_role, + late_join, + weight_exempt + ) + . = ..(args) diff --git a/code/modules/goonhub/api/routes/players/PlayerCompIds.dm b/code/modules/goonhub/api/routes/players/PlayerCompIds.dm new file mode 100644 index 0000000000000..e6ec5a4eb318d --- /dev/null +++ b/code/modules/goonhub/api/routes/players/PlayerCompIds.dm @@ -0,0 +1,8 @@ + +/// GET /players/get-compids +/// Get a list of computed IDs associated with a player ckey, along with how many times they connected with each computer ID +/datum/apiRoute/players/compids/get + method = RUSTG_HTTP_METHOD_GET + path = "/players/get-compids" + queryParams = list("ckey") // string + correct_response = /datum/apiModel/PlayerCompIdsResource diff --git a/code/modules/goonhub/api/routes/players/PlayerIps.dm b/code/modules/goonhub/api/routes/players/PlayerIps.dm new file mode 100644 index 0000000000000..cc9a8861937ed --- /dev/null +++ b/code/modules/goonhub/api/routes/players/PlayerIps.dm @@ -0,0 +1,8 @@ + +/// GET /players/get-ips +/// Get a list of IPs associated with a player ckey, along with how many times they connected with each IP +/datum/apiRoute/players/ips/get + method = RUSTG_HTTP_METHOD_GET + path = "/players/get-ips" + queryParams = list("ckey") // string + correct_response = /datum/apiModel/PlayerIpsResource diff --git a/code/modules/goonhub/api/routes/players/PlayerLogin.dm b/code/modules/goonhub/api/routes/players/PlayerLogin.dm new file mode 100644 index 0000000000000..2fa195c2c0060 --- /dev/null +++ b/code/modules/goonhub/api/routes/players/PlayerLogin.dm @@ -0,0 +1,18 @@ +/// POST /players +/// Register a login for a player with associated details +/datum/apiRoute/players/login + method = RUSTG_HTTP_METHOD_POST + path = "/players" + body = /datum/apiBody/players/login + correct_response = /datum/apiModel/Tracked/PlayerResource + + buildBody( + ckey, + key, + ip, + comp_id, + byond_major, + byond_minor, + round_id + ) + . = ..(args) diff --git a/code/modules/goonhub/api/routes/players/PlayerParticipations.dm b/code/modules/goonhub/api/routes/players/PlayerParticipations.dm new file mode 100644 index 0000000000000..b1cf2e1210f54 --- /dev/null +++ b/code/modules/goonhub/api/routes/players/PlayerParticipations.dm @@ -0,0 +1,11 @@ + +/// POST /players/participation +/// Add a player participation for a given round +/datum/apiRoute/players/participations + method = RUSTG_HTTP_METHOD_POST + path = "/players/participations" + body = /datum/apiBody/PlayerParticipation + correct_response = /datum/apiModel/Tracked/PlayerRes/PlayerParticipationResource + + buildBody(player_id, round_id, job) + . = ..(args) diff --git a/code/modules/goonhub/api/routes/players/PlayerParticipationsBulk.dm b/code/modules/goonhub/api/routes/players/PlayerParticipationsBulk.dm new file mode 100644 index 0000000000000..07e2c3de9fa54 --- /dev/null +++ b/code/modules/goonhub/api/routes/players/PlayerParticipationsBulk.dm @@ -0,0 +1,11 @@ + +/// POST /players/participation +/// Add a player participation for a given round +/datum/apiRoute/players/participationsBulk + method = RUSTG_HTTP_METHOD_POST + path = "/players/participations/bulk" + body = /datum/apiBody/PlayerParticipationBulk + correct_response = /datum/apiModel/Message + + buildBody(players, round_id) + . = ..(args) diff --git a/code/modules/goonhub/api/routes/players/PlayerPlaytime.dm b/code/modules/goonhub/api/routes/players/PlayerPlaytime.dm new file mode 100644 index 0000000000000..20a4e4893c0ac --- /dev/null +++ b/code/modules/goonhub/api/routes/players/PlayerPlaytime.dm @@ -0,0 +1,14 @@ + +/// POST /players/playtime/bulk +/// Record playtime for a list of players +/datum/apiRoute/players/playtime + method = RUSTG_HTTP_METHOD_POST + path = "/players/playtime/bulk" + body = /datum/apiBody/players/playtime + correct_response = /datum/apiModel/Message + + buildBody( + serverId, + players + ) + . = ..(args) diff --git a/code/modules/goonhub/api/routes/players/PlayerStats.dm b/code/modules/goonhub/api/routes/players/PlayerStats.dm new file mode 100644 index 0000000000000..6c4d4ddd3f138 --- /dev/null +++ b/code/modules/goonhub/api/routes/players/PlayerStats.dm @@ -0,0 +1,8 @@ + +/// GET /players/stats +/// Get various statistics associated with a player +/datum/apiRoute/players/stats/get + method = RUSTG_HTTP_METHOD_GET + path = "/players/stats" + queryParams = list("ckey") // string + correct_response = /datum/apiModel/Tracked/PlayerStatsResource diff --git a/code/modules/goonhub/api/routes/players/medals/AddPlayerMedal.dm b/code/modules/goonhub/api/routes/players/medals/AddPlayerMedal.dm new file mode 100644 index 0000000000000..304cd9cb23d2b --- /dev/null +++ b/code/modules/goonhub/api/routes/players/medals/AddPlayerMedal.dm @@ -0,0 +1,15 @@ +/// POST /medals +/// Add a medal for a player +/datum/apiRoute/players/medals/add + method = RUSTG_HTTP_METHOD_POST + path = "/players/medals" + body = /datum/apiBody/players/medals/add + correct_response = /datum/apiModel/Tracked/PlayerRes/PlayerMedalResource + + buildBody( + player_id, + ckey, + medal, + round_id + ) + . = ..(args) diff --git a/code/modules/goonhub/api/routes/players/medals/DeletePlayerMedal.dm b/code/modules/goonhub/api/routes/players/medals/DeletePlayerMedal.dm new file mode 100644 index 0000000000000..dac4e1f8fedaa --- /dev/null +++ b/code/modules/goonhub/api/routes/players/medals/DeletePlayerMedal.dm @@ -0,0 +1,15 @@ + +/// DELETE /medals +/// Delete medal for a player +/datum/apiRoute/players/medals/delete + method = RUSTG_HTTP_METHOD_DELETE + path = "/players/medals" + body = /datum/apiBody/players/medals/delete + correct_response = /datum/apiModel/Message + + buildBody( + player_id, + ckey, + medal + ) + . = ..(args) diff --git a/code/modules/goonhub/api/routes/players/medals/GetPlayerMedals.dm b/code/modules/goonhub/api/routes/players/medals/GetPlayerMedals.dm new file mode 100644 index 0000000000000..71cad3b06ce47 --- /dev/null +++ b/code/modules/goonhub/api/routes/players/medals/GetPlayerMedals.dm @@ -0,0 +1,8 @@ + +/// GET /medals +/// List paginated and filtered player medals +/datum/apiRoute/players/medals/get + method = RUSTG_HTTP_METHOD_GET + path = "/players/medals" + queryParams = list("filters", "sort_by", "descending", "per_page") // string[], string, string, string + correct_response = /datum/apiModel/Paginated/PlayerMedalResourceList diff --git a/code/modules/goonhub/api/routes/players/medals/ShowPlayerMedal.dm b/code/modules/goonhub/api/routes/players/medals/ShowPlayerMedal.dm new file mode 100644 index 0000000000000..c61f75671ca94 --- /dev/null +++ b/code/modules/goonhub/api/routes/players/medals/ShowPlayerMedal.dm @@ -0,0 +1,8 @@ +/// GET /medals +/// Show a medal for a player +/datum/apiRoute/players/medals/show + method = RUSTG_HTTP_METHOD_GET + path = "/players/medals" + routeParams = list("player_id") // integer + queryParams = list("medal") // string + correct_response = /datum/apiModel/Tracked/PlayerRes/PlayerMedalResource diff --git a/code/modules/goonhub/api/routes/players/metadata/AddPlayerMetadata.dm b/code/modules/goonhub/api/routes/players/metadata/AddPlayerMetadata.dm new file mode 100644 index 0000000000000..75524e7b59fda --- /dev/null +++ b/code/modules/goonhub/api/routes/players/metadata/AddPlayerMetadata.dm @@ -0,0 +1,14 @@ + +/// ADD /players/metadata +/// Add player metadata +/datum/apiRoute/players/metadata/add + method = RUSTG_HTTP_METHOD_POST + path = "/players/metadata" + body = /datum/apiBody/players/metadata + correct_response = /datum/apiModel/Tracked/PlayerRes/PlayerMetadataResource + + buildBody( + player_id, + metadata + ) + . = ..(args) diff --git a/code/modules/goonhub/api/routes/players/metadata/DeleteFromPlayerMetadata.dm b/code/modules/goonhub/api/routes/players/metadata/DeleteFromPlayerMetadata.dm new file mode 100644 index 0000000000000..4fa5d2d297da6 --- /dev/null +++ b/code/modules/goonhub/api/routes/players/metadata/DeleteFromPlayerMetadata.dm @@ -0,0 +1,8 @@ + +/// DELETE /players/metadata/clear-by-player/{ckey} +/// Delete all metadata associated with a specific player +/datum/apiRoute/players/metadata/delete/fromplayer + method = RUSTG_HTTP_METHOD_DELETE + path = "/players/metadata/clear-by-player" + routeParams = list("ckey") + correct_response = /datum/apiModel/Message diff --git a/code/modules/goonhub/api/routes/players/metadata/DeletePlayerMetadata.dm b/code/modules/goonhub/api/routes/players/metadata/DeletePlayerMetadata.dm new file mode 100644 index 0000000000000..4e04f3b9651d1 --- /dev/null +++ b/code/modules/goonhub/api/routes/players/metadata/DeletePlayerMetadata.dm @@ -0,0 +1,8 @@ + +/// DELETE /players/metadata/clear-by-data/{metadata} +/// Delete a specific item of metadata +/datum/apiRoute/players/metadata/delete + method = RUSTG_HTTP_METHOD_DELETE + path = "/players/metadata/clear-by-data" + routeParams = list("metadata") + correct_response = /datum/apiModel/Message diff --git a/code/modules/goonhub/api/routes/players/metadata/GetMetadataByPlayer.dm b/code/modules/goonhub/api/routes/players/metadata/GetMetadataByPlayer.dm new file mode 100644 index 0000000000000..79978b136b885 --- /dev/null +++ b/code/modules/goonhub/api/routes/players/metadata/GetMetadataByPlayer.dm @@ -0,0 +1,8 @@ + +/// GET /players/metadata/get-by-player/{ckey} +/// Get all the metadata associated with a ckey +/datum/apiRoute/players/metadata/getbyplayer + method = RUSTG_HTTP_METHOD_GET + path = "/players/metadata/get-by-player" + routeParams = list("ckey") // string + correct_response = /datum/apiModel/PlayerMetadataArray diff --git a/code/modules/goonhub/api/routes/players/metadata/GetPlayerMetadata.dm b/code/modules/goonhub/api/routes/players/metadata/GetPlayerMetadata.dm new file mode 100644 index 0000000000000..36209b5790356 --- /dev/null +++ b/code/modules/goonhub/api/routes/players/metadata/GetPlayerMetadata.dm @@ -0,0 +1,8 @@ + +/// GET /players/metadata +/// List paginated and filtered player metadata +/datum/apiRoute/players/metadata/get + method = RUSTG_HTTP_METHOD_GET + path = "/players/metadata" + queryParams = list("filters", "sort_by", "descending", "per_page") // string[], string, string, string + correct_response = /datum/apiModel/Paginated/PlayerMetadataList diff --git a/code/modules/goonhub/api/routes/players/metadata/GetPlayersByMetadata.dm b/code/modules/goonhub/api/routes/players/metadata/GetPlayersByMetadata.dm new file mode 100644 index 0000000000000..d6b07e7187321 --- /dev/null +++ b/code/modules/goonhub/api/routes/players/metadata/GetPlayersByMetadata.dm @@ -0,0 +1,8 @@ + +/// GET /players/metadata/get-by-data/{metadata} +/// Get all the ckeys associated with a piece of metadata +/datum/apiRoute/players/metadata/getbydata + method = RUSTG_HTTP_METHOD_GET + path = "/players/metadata/get-by-data" + routeParams = list("metadata") // string + correct_response = /datum/apiModel/PlayerMetadataArray diff --git a/code/modules/goonhub/api/routes/players/notes/AddPlayerNotes.dm b/code/modules/goonhub/api/routes/players/notes/AddPlayerNotes.dm new file mode 100644 index 0000000000000..3553214730765 --- /dev/null +++ b/code/modules/goonhub/api/routes/players/notes/AddPlayerNotes.dm @@ -0,0 +1,17 @@ + +/// POST /players/notes +/// Add a new player note +/datum/apiRoute/players/notes/post + method = RUSTG_HTTP_METHOD_POST + path = "/players/notes" + body = /datum/apiBody/players/notes/post + correct_response = /datum/apiModel/Tracked/PlayerNoteResource + + buildBody( + game_admin_ckey, + round_id, + server_id, + ckey, + note + ) + . = ..(args) diff --git a/code/modules/goonhub/api/routes/players/notes/DeletePlayerNotes.dm b/code/modules/goonhub/api/routes/players/notes/DeletePlayerNotes.dm new file mode 100644 index 0000000000000..9011b59d0c8d0 --- /dev/null +++ b/code/modules/goonhub/api/routes/players/notes/DeletePlayerNotes.dm @@ -0,0 +1,8 @@ + +/// DELETE /players/notes/{note} +/// Delete list +/datum/apiRoute/players/notes/delete + method = RUSTG_HTTP_METHOD_DELETE + path = "/players/notes" + routeParams = list("note") // integer, the note ID + correct_response = /datum/apiModel/Message diff --git a/code/modules/goonhub/api/routes/players/notes/GetPlayerNotes.dm b/code/modules/goonhub/api/routes/players/notes/GetPlayerNotes.dm new file mode 100644 index 0000000000000..f3a9ca99287bc --- /dev/null +++ b/code/modules/goonhub/api/routes/players/notes/GetPlayerNotes.dm @@ -0,0 +1,8 @@ + +/// GET /players/notes +/// List paginated and filtered player notes +/datum/apiRoute/players/notes/get + method = RUSTG_HTTP_METHOD_GET + path = "/players/notes" + queryParams = list("filters", "sort_by", "descending", "per_page") // string[], string, string, string + correct_response = /datum/apiModel/Paginated/PlayerNoteResourceList diff --git a/code/modules/goonhub/api/routes/players/notes/UpdatePlayerNotes.dm b/code/modules/goonhub/api/routes/players/notes/UpdatePlayerNotes.dm new file mode 100644 index 0000000000000..db8b53976e43c --- /dev/null +++ b/code/modules/goonhub/api/routes/players/notes/UpdatePlayerNotes.dm @@ -0,0 +1,9 @@ + +/// PUT /players/notes/{note} +/// Update +/datum/apiRoute/players/notes/update + method = RUSTG_HTTP_METHOD_PUT + path = "/players/notes" + routeParams = list("note") // integer, the note ID + body = /datum/apiBody/players/notes/update + correct_response = /datum/apiModel/Tracked/PlayerNoteResource diff --git a/code/modules/goonhub/api/routes/players/saves/AddBulkDataPlayerSaves.dm b/code/modules/goonhub/api/routes/players/saves/AddBulkDataPlayerSaves.dm new file mode 100644 index 0000000000000..20b931bf72d6b --- /dev/null +++ b/code/modules/goonhub/api/routes/players/saves/AddBulkDataPlayerSaves.dm @@ -0,0 +1,13 @@ + +/// POST /players/saves/data-bulk +/// Add multiple entries of player data +/datum/apiRoute/players/saves/databulk/post + method = RUSTG_HTTP_METHOD_POST + path = "/players/saves/data-bulk" + body = /datum/apiBody/PlayerSavesBulkData + correct_response = /datum/apiModel/Message + + buildBody( + data + ) + . = ..(args) diff --git a/code/modules/goonhub/api/routes/players/saves/AddDataPlayerSaves.dm b/code/modules/goonhub/api/routes/players/saves/AddDataPlayerSaves.dm new file mode 100644 index 0000000000000..f36594f8db529 --- /dev/null +++ b/code/modules/goonhub/api/routes/players/saves/AddDataPlayerSaves.dm @@ -0,0 +1,15 @@ + +/// POST /players/saves/data +/// Add player data +/datum/apiRoute/players/saves/data/post + method = RUSTG_HTTP_METHOD_POST + path = "/players/saves/data" + body = /datum/apiBody/PlayerSavesAddData + correct_response = /datum/apiModel/Tracked/PlayerRes/PlayerDataResource + + buildBody( + player_id, + key, + value + ) + . = ..(args) diff --git a/code/modules/goonhub/api/routes/players/saves/AddFilePlayerSaves.dm b/code/modules/goonhub/api/routes/players/saves/AddFilePlayerSaves.dm new file mode 100644 index 0000000000000..77d5f0098ad28 --- /dev/null +++ b/code/modules/goonhub/api/routes/players/saves/AddFilePlayerSaves.dm @@ -0,0 +1,16 @@ + +/// POST /players/saves/file +/// Add player save +/datum/apiRoute/players/saves/file/post + method = RUSTG_HTTP_METHOD_POST + path = "/players/saves/file" + body = /datum/apiBody/PlayerSavesAddSave + correct_response = /datum/apiModel/Tracked/PlayerRes/PlayerSaveResource + + buildBody( + player_id, + name, + data + ) + . = ..(args) + diff --git a/code/modules/goonhub/api/routes/players/saves/DeleteDataPlayerSaves.dm b/code/modules/goonhub/api/routes/players/saves/DeleteDataPlayerSaves.dm new file mode 100644 index 0000000000000..719aec01f87f6 --- /dev/null +++ b/code/modules/goonhub/api/routes/players/saves/DeleteDataPlayerSaves.dm @@ -0,0 +1,14 @@ + +/// DELETE /players/saves/data +/// Delete data for a player +/datum/apiRoute/players/saves/data/delete + method = RUSTG_HTTP_METHOD_DELETE + path = "/players/saves/data" + body = /datum/apiBody/PlayerSavesDeleteData + correct_response = /datum/apiModel/Message + + buildBody( + player_id, + key + ) + . = ..(args) diff --git a/code/modules/goonhub/api/routes/players/saves/DeleteSavePlayerSaves.dm b/code/modules/goonhub/api/routes/players/saves/DeleteSavePlayerSaves.dm new file mode 100644 index 0000000000000..c8650a1eb9770 --- /dev/null +++ b/code/modules/goonhub/api/routes/players/saves/DeleteSavePlayerSaves.dm @@ -0,0 +1,14 @@ + +/// DELETE /players/saves/file/{playerSave} +/// Delete a save for a player +/datum/apiRoute/players/saves/file/delete + method = RUSTG_HTTP_METHOD_DELETE + path = "/players/saves/file" + body = /datum/apiBody/PlayerSavesDeleteSave + correct_response = /datum/apiModel/Message + + buildBody( + player_id, + name + ) + . = ..(args) diff --git a/code/modules/goonhub/api/routes/players/saves/GetPlayerSaves.dm b/code/modules/goonhub/api/routes/players/saves/GetPlayerSaves.dm new file mode 100644 index 0000000000000..b32392838f487 --- /dev/null +++ b/code/modules/goonhub/api/routes/players/saves/GetPlayerSaves.dm @@ -0,0 +1,8 @@ + +/// GET /players/saves +/// List all data and saves for a player +/datum/apiRoute/players/saves/get + method = RUSTG_HTTP_METHOD_GET + path = "/players/saves" + queryParams = list("player_id") + correct_response = /datum/apiModel/GetPlayerSaves diff --git a/code/modules/goonhub/api/routes/players/saves/TransferDataPlayerSaves.dm b/code/modules/goonhub/api/routes/players/saves/TransferDataPlayerSaves.dm new file mode 100644 index 0000000000000..3f8cd1964a51b --- /dev/null +++ b/code/modules/goonhub/api/routes/players/saves/TransferDataPlayerSaves.dm @@ -0,0 +1,16 @@ + +/// POST /players/saves/transfer-files +/// Transfer all save files from a player to another +/// WARNING: This overwrites all the saves for the target +/datum/apiRoute/players/saves/file/transfer + method = RUSTG_HTTP_METHOD_POST + path = "/players/saves/transfer-files" + body = /datum/apiBody/PlayerSavesTransferFiles + correct_response = /datum/apiModel/Message + + buildBody( + from_ckey, + to_ckey + ) + . = ..(args) + diff --git a/code/modules/goonhub/api/routes/polls/AddPoll.dm b/code/modules/goonhub/api/routes/polls/AddPoll.dm new file mode 100644 index 0000000000000..17654ea330ed3 --- /dev/null +++ b/code/modules/goonhub/api/routes/polls/AddPoll.dm @@ -0,0 +1,17 @@ +/// POST /polls +/// Add a new poll +/datum/apiRoute/polls/add + method = RUSTG_HTTP_METHOD_POST + path = "/polls" + body = /datum/apiBody/polls/add + correct_response = /datum/apiModel/Tracked/PollResource + + buildBody( + game_admin_ckey, + question, + multiple_choice, + expires_at, + options, + servers + ) + . = ..(args) diff --git a/code/modules/goonhub/api/routes/polls/AddPollOption.dm b/code/modules/goonhub/api/routes/polls/AddPollOption.dm new file mode 100644 index 0000000000000..ecdfe6b361310 --- /dev/null +++ b/code/modules/goonhub/api/routes/polls/AddPollOption.dm @@ -0,0 +1,13 @@ +/// POST /polls/option/{poll} +/// Add a new option to an existing poll +/datum/apiRoute/polls/options/add + method = RUSTG_HTTP_METHOD_POST + path = "/polls/option" + routeParams = list("poll") // integer (The poll ID) + body = /datum/apiBody/polls/options/add + correct_response = /datum/apiModel/PollOptionResource + + buildBody( + option + ) + . = ..(args) diff --git a/code/modules/goonhub/api/routes/polls/DeletePoll.dm b/code/modules/goonhub/api/routes/polls/DeletePoll.dm new file mode 100644 index 0000000000000..b654a1db82afc --- /dev/null +++ b/code/modules/goonhub/api/routes/polls/DeletePoll.dm @@ -0,0 +1,7 @@ +/// DELETE /polls/{poll} +/// Delete an existing poll +/datum/apiRoute/polls/delete + method = RUSTG_HTTP_METHOD_DELETE + path = "/polls" + routeParams = list("poll") // integer (The poll ID) + correct_response = /datum/apiModel/Message diff --git a/code/modules/goonhub/api/routes/polls/DeletePollOption.dm b/code/modules/goonhub/api/routes/polls/DeletePollOption.dm new file mode 100644 index 0000000000000..0792feaeea338 --- /dev/null +++ b/code/modules/goonhub/api/routes/polls/DeletePollOption.dm @@ -0,0 +1,7 @@ +/// DELETE /polls/option/{pollOption} +/// Delete an existing poll +/datum/apiRoute/polls/options/delete + method = RUSTG_HTTP_METHOD_DELETE + path = "/polls/option" + routeParams = list("pollOption") // integer (The poll option ID) + correct_response = /datum/apiModel/Message diff --git a/code/modules/goonhub/api/routes/polls/EditPoll.dm b/code/modules/goonhub/api/routes/polls/EditPoll.dm new file mode 100644 index 0000000000000..4455093031a94 --- /dev/null +++ b/code/modules/goonhub/api/routes/polls/EditPoll.dm @@ -0,0 +1,15 @@ +/// PUT /polls/{poll} +/// Edit an existing poll +/datum/apiRoute/polls/edit + method = RUSTG_HTTP_METHOD_PUT + path = "/polls" + routeParams = list("poll") // integer (The poll ID) + body = /datum/apiBody/polls/edit + correct_response = /datum/apiModel/Tracked/PollResource + + buildBody( + question, + expires_at, + servers + ) + . = ..(args) diff --git a/code/modules/goonhub/api/routes/polls/EditPollOption.dm b/code/modules/goonhub/api/routes/polls/EditPollOption.dm new file mode 100644 index 0000000000000..b8527a4627eb7 --- /dev/null +++ b/code/modules/goonhub/api/routes/polls/EditPollOption.dm @@ -0,0 +1,14 @@ +/// PUT /polls/option/{pollOption} +/// Update an existing poll option +/datum/apiRoute/polls/options/edit + method = RUSTG_HTTP_METHOD_PUT + path = "/polls/option" + routeParams = list("pollOption") // integer (The poll option ID) + body = /datum/apiBody/polls/options/edit + correct_response = /datum/apiModel/PollOptionResource + + buildBody( + option, + position + ) + . = ..(args) diff --git a/code/modules/goonhub/api/routes/polls/GetPoll.dm b/code/modules/goonhub/api/routes/polls/GetPoll.dm new file mode 100644 index 0000000000000..c8a15442bfd61 --- /dev/null +++ b/code/modules/goonhub/api/routes/polls/GetPoll.dm @@ -0,0 +1,7 @@ +/// GET /polls/{poll} +/// Get a specific poll +/datum/apiRoute/polls/show + method = RUSTG_HTTP_METHOD_GET + path = "/polls" + routeParams = list("poll") // integer (The poll ID) + correct_response = /datum/apiModel/Tracked/PollResource diff --git a/code/modules/goonhub/api/routes/polls/GetPolls.dm b/code/modules/goonhub/api/routes/polls/GetPolls.dm new file mode 100644 index 0000000000000..b07348116f173 --- /dev/null +++ b/code/modules/goonhub/api/routes/polls/GetPolls.dm @@ -0,0 +1,7 @@ +/// GET /polls +/// List paginated and filtered polls +/datum/apiRoute/polls/get + method = RUSTG_HTTP_METHOD_GET + path = "/polls" + queryParams = list("filters", "sort_by", "descending", "per_page") // string, string, string, string + correct_response = /datum/apiModel/Paginated/PollResourceList diff --git a/code/modules/goonhub/api/routes/polls/PickOption.dm b/code/modules/goonhub/api/routes/polls/PickOption.dm new file mode 100644 index 0000000000000..b698c24dec0fc --- /dev/null +++ b/code/modules/goonhub/api/routes/polls/PickOption.dm @@ -0,0 +1,13 @@ +/// POST /polls/option/pick/{pollOption} +/// Register that a player picked a poll option +/datum/apiRoute/polls/options/pick + method = RUSTG_HTTP_METHOD_POST + path = "/polls/option/pick" + routeParams = list("pollOption") // integer (The poll option ID) + body = /datum/apiBody/polls/options/pickUnpick + correct_response = /datum/apiModel/Tracked/PollAnswerResource + + buildBody( + player_id + ) + . = ..(args) diff --git a/code/modules/goonhub/api/routes/polls/UnpickOption.dm b/code/modules/goonhub/api/routes/polls/UnpickOption.dm new file mode 100644 index 0000000000000..a66df60899baf --- /dev/null +++ b/code/modules/goonhub/api/routes/polls/UnpickOption.dm @@ -0,0 +1,13 @@ +/// POST /polls/option/unpick/{pollOption} +/// Register that a player removed their pick of a poll option +/datum/apiRoute/polls/options/unpick + method = RUSTG_HTTP_METHOD_POST + path = "/polls/option/unpick" + routeParams = list("pollOption") // integer (The poll option ID) + body = /datum/apiBody/polls/options/pickUnpick + correct_response = /datum/apiModel/Message + + buildBody( + player_id + ) + . = ..(args) diff --git a/code/modules/goonhub/api/routes/rounds/AddGameRound.dm b/code/modules/goonhub/api/routes/rounds/AddGameRound.dm new file mode 100644 index 0000000000000..aa4123bc764a7 --- /dev/null +++ b/code/modules/goonhub/api/routes/rounds/AddGameRound.dm @@ -0,0 +1,15 @@ + +/// POST /rounds +/// Start a new game round +/datum/apiRoute/rounds/post + method = RUSTG_HTTP_METHOD_POST + path = "/rounds" + body = /datum/apiBody/rounds/post + correct_response = /datum/apiModel/Tracked/GameRound + + buildBody( + map, + server_id, + rp_mode + ) + . = ..(args) diff --git a/code/modules/goonhub/api/routes/rounds/EndGameRound.dm b/code/modules/goonhub/api/routes/rounds/EndGameRound.dm new file mode 100644 index 0000000000000..ffd8a3f7d9548 --- /dev/null +++ b/code/modules/goonhub/api/routes/rounds/EndGameRound.dm @@ -0,0 +1,14 @@ + +/// PUT /rounds/end/{gameRound} +/// End a game round. +/datum/apiRoute/rounds/end + method = RUSTG_HTTP_METHOD_PUT + path = "/rounds/end" + routeParams = list("gameRound") + body = /datum/apiBody/rounds/end + correct_response = /datum/apiModel/Tracked/GameRound + + buildBody( + crashed + ) + . = ..(args) diff --git a/code/modules/goonhub/api/routes/rounds/UpdateGameRound.dm b/code/modules/goonhub/api/routes/rounds/UpdateGameRound.dm new file mode 100644 index 0000000000000..274b2e9332de5 --- /dev/null +++ b/code/modules/goonhub/api/routes/rounds/UpdateGameRound.dm @@ -0,0 +1,14 @@ + +/// PUT /rounds/{gameRound} +/// Update a game round. This should be used when game round data we care about is set after the start of the round. +/datum/apiRoute/rounds/update + method = RUSTG_HTTP_METHOD_PUT + path = "/rounds" + routeParams = list("gameRound") + body = /datum/apiBody/rounds/update + correct_response = /datum/apiModel/Tracked/GameRound + + buildBody( + game_type + ) + . = ..(args) diff --git a/code/modules/goonhub/api/routes/vpn/AddVpnWhitelist.dm b/code/modules/goonhub/api/routes/vpn/AddVpnWhitelist.dm new file mode 100644 index 0000000000000..4b0b466277d16 --- /dev/null +++ b/code/modules/goonhub/api/routes/vpn/AddVpnWhitelist.dm @@ -0,0 +1,13 @@ +/// POST /vpncheck-whitelist +/// Add a player into the whitelist. This will allow them to skip VPN checks. +/datum/apiRoute/vpnwhitelist/add + method = RUSTG_HTTP_METHOD_POST + path = "/vpncheck-whitelist" + body = /datum/apiBody/vpnwhitelist/add + correct_response = /datum/apiModel/Tracked/VpnWhitelistResource + + buildBody( + game_admin_ckey, + ckey + ) + . = ..(args) diff --git a/code/modules/goonhub/api/routes/vpn/CheckVpn.dm b/code/modules/goonhub/api/routes/vpn/CheckVpn.dm new file mode 100644 index 0000000000000..b31cec63ed5bc --- /dev/null +++ b/code/modules/goonhub/api/routes/vpn/CheckVpn.dm @@ -0,0 +1,8 @@ +/// GET /vpncheck/{ip} +/// Check if a player is using a VPN +/datum/apiRoute/vpn/check + method = RUSTG_HTTP_METHOD_GET + path = "/vpncheck" + routeParams = "ip" + queryParams = list("ckey", "round_id") + correct_response = /datum/apiModel/VpnCheckResource diff --git a/code/modules/goonhub/api/routes/vpn/DeleteVpnWhitelist.dm b/code/modules/goonhub/api/routes/vpn/DeleteVpnWhitelist.dm new file mode 100644 index 0000000000000..e5a69fdc81812 --- /dev/null +++ b/code/modules/goonhub/api/routes/vpn/DeleteVpnWhitelist.dm @@ -0,0 +1,7 @@ +/// DELETE /vpncheck-whitelist +/// Delete a whitelist entry +/datum/apiRoute/vpnwhitelist/delete + method = RUSTG_HTTP_METHOD_DELETE + path = "/vpncheck-whitelist" + queryParams = list("ckey") // string + correct_response = /datum/apiModel/Message diff --git a/code/modules/goonhub/api/routes/vpn/SearchVpnWhitelist.dm b/code/modules/goonhub/api/routes/vpn/SearchVpnWhitelist.dm new file mode 100644 index 0000000000000..936fd2d3a769a --- /dev/null +++ b/code/modules/goonhub/api/routes/vpn/SearchVpnWhitelist.dm @@ -0,0 +1,7 @@ +/// GET /vpncheck-whitelist/search +/// Check if a player is whitelisted from the VPN checker +/datum/apiRoute/vpnwhitelist/search + method = RUSTG_HTTP_METHOD_GET + path = "/vpncheck-whitelist/search" + queryParams = list("ckey") + correct_response = /datum/apiModel/VpnWhitelistSearch diff --git a/code/modules/goonhub/event_recording/event_recorder.dm b/code/modules/goonhub/event_recording/event_recorder.dm new file mode 100644 index 0000000000000..516ccbf910d0f --- /dev/null +++ b/code/modules/goonhub/event_recording/event_recorder.dm @@ -0,0 +1,79 @@ +var/global/datum/eventRecorder/eventRecorder + +/datum/eventRecorder + var/enabled = TRUE + var/connected = FALSE + var/list/events = list() + var/eventsPushed = 0 + + New() + ..() + src.connect() + + /// Connect to the external event service + proc/connect() + if (!config.goonhub_events_endpoint || !config.goonhub_events_port || !config.goonhub_events_channel) + src.enabled = FALSE + var/logMsg = "Disabled Goonhub Event Recording service due to missing config" + logTheThing(LOG_DEBUG, null, "<b>Event Recorder:</b> [logMsg]") + logTheThing(LOG_DIARY, null, "Event Recorder: [logMsg]", "debug") + return + + var/addr = "redis://" + if (config.goonhub_events_password) + addr += ":[config.goonhub_events_password]@" + addr += "[config.goonhub_events_endpoint]:[config.goonhub_events_port]" + var/res = rustg_redis_connect_rq(addr) + + if (res) + src.connected = FALSE + var/logMsg = "Failed to connect to Goonhub Event Recording service. Reason: [res]" + logTheThing(LOG_DEBUG, null, "<b>Event Recorder:</b> [logMsg]") + logTheThing(LOG_DIARY, null, "Event Recorder: [logMsg]", "debug") + return FALSE + + src.connected = TRUE + return TRUE + + /// Push the event queue to the server + proc/process() + if (!src.enabled || !length(src.events) || (!src.connected && !src.connect())) return + + var/res = rustg_redis_lpush(config.goonhub_events_channel, json_encode(src.events)) + var/list/lRes = json_decode(res) + + if (lRes["success"]) + src.eventsPushed += length(src.events) + src.events.Cut() + else + var/msg = lRes["content"] + var/logMsg = "Failed to push data to Goonhub Event Recording service. Reason: [msg]" + logTheThing(LOG_DEBUG, null, "<b>Event Recorder:</b> [logMsg]") + logTheThing(LOG_DIARY, null, "Event Recorder: [logMsg]", "debug") + + /// Add an event to the event queue + proc/add(datum/eventRecord/event) + if (!src.enabled || !roundId) return + + var/list/data = event.body.ToList() + data["type"] = event.eventType + data["round_id"] = roundId + data["created_at"] = time2text(world.realtime, "YYYY-MM-DD hh:mm:ss") + + src.events += list(data) + + /// Display debug information + proc/debug() + var/list/html = list() + html += "<strong>Enabled:</strong> [src.enabled ? "Yes" : "No"]<br>" + html += "<strong>Connected:</strong> [src.connected ? "Yes" : "No"]<br>" + html += "<strong>Events Pending:</strong> [length(src.events)]<br>" + html += "<strong>Events Pushed:</strong> [src.eventsPushed]<br>" + usr.Browse(html.Join(), "window=eventRecorderDebug") + +/client/proc/debug_event_recorder() + SET_ADMIN_CAT(ADMIN_CAT_DEBUG) + set name = "Debug Event Recorder" + set desc = "Display debug information about the event recorder" + ADMIN_ONLY + eventRecorder.debug() diff --git a/code/modules/goonhub/event_recording/events/AILaw.dm b/code/modules/goonhub/event_recording/events/AILaw.dm new file mode 100644 index 0000000000000..e132bf4426c68 --- /dev/null +++ b/code/modules/goonhub/event_recording/events/AILaw.dm @@ -0,0 +1,26 @@ + +/// Record a new AI law +/datum/eventRecord/AILaw + eventType = "ai_law" + body = /datum/eventRecordBody/TracksPlayer/AILaw + + send( + player_id, + ai_name, + law_number, + law_text, + uploader_name, + uploader_job, + uploader_ckey + ) + . = ..(args) + + buildAndSend(mob/living/silicon/ai/aiPlayer, lawNumber, law) + // Currently we're only logging AI laws at the end of the round + // which don't have uploader details attached + src.send( + aiPlayer?.mind?.get_player().id, + aiPlayer.real_name, + lawNumber, + html_decode(law) + ) diff --git a/code/modules/goonhub/event_recording/events/Antag.dm b/code/modules/goonhub/event_recording/events/Antag.dm new file mode 100644 index 0000000000000..912920c898ec3 --- /dev/null +++ b/code/modules/goonhub/event_recording/events/Antag.dm @@ -0,0 +1,97 @@ + +/// Record an antag spawn +/datum/eventRecord/Antag + eventType = "antag" + body = /datum/eventRecordBody/TracksPlayer/Antag + + send( + player_id, + mob_name, + mob_job, + traitor_type, + special, + late_joiner, + success + ) + . = ..(args) + + buildAndSend(datum/antagonist/antagonist_role) + var/datum/mind/M = antagonist_role.owner + + var/traitor_type = antagonist_role.id + var/special + switch(traitor_type) + if (ROLE_CHANGELING) + if (M.current) + var/datum/abilityHolder/changeling/C = M.current.get_ability_holder(/datum/abilityHolder/changeling) + if (C && istype(C)) + special = C.absorbtions + if (ROLE_VAMPIRE) + if (M.current) + special = M.current.get_vampire_blood(1) + if (ROLE_WIZARD) + if (M.current) + var/datum/abilityHolder/wizard/W = M.current.get_ability_holder(/datum/abilityHolder/wizard) + if (W && istype(W)) + var/spells = "" + for (var/datum/targetable/spell/S in W.abilities) + if (spells != "") + spells += ", " + spells += S.name + if (ROLE_WEREWOLF) + for (var/datum/objective/specialist/werewolf/feed/O in M.objectives) + if (O && istype(O, /datum/objective/specialist/werewolf/feed/)) + special = length(O.mobs_fed_on) + if (ROLE_VAMPTHRALL, ROLE_MINDHACK) + var/datum/mind/master = M.get_master(traitor_type) + if (master?.current) + special = master.current.real_name + if (ROLE_FLOCKMIND) + var/relay_successful = FALSE + if (isflockmob(M.current)) + if (!istype(M.current, /mob/living/critter/flock/drone)) + var/mob/living/intangible/flock/flockmind/flockmind = M.current + relay_successful = flockmind.flock.relay_finished + else + var/mob/living/critter/flock/drone/flockdrone = M.current + relay_successful = flockdrone.flock.relay_finished + special = "Relay transmission [relay_successful ? "successful" : "unsuccessful"]" + if (ROLE_FLOCKTRACE) + if (isflockmob(M.current)) + var/datum/flock/flock_joined = null + if (!istype(M.current, /mob/living/critter/flock/drone)) + var/mob/living/intangible/flock/trace/flocktrace = M.current + flock_joined = flocktrace.flock + else + var/mob/living/critter/flock/drone/flockdrone = M.current + flock_joined = flockdrone.flock + special = "Part of Flock [flock_joined.name]" + if (ROLE_NUKEOP, ROLE_NUKEOP_COMMANDER) + if (istype(ticker.mode, /datum/game_mode/nuclear)) + special = syndicate_name() + if (ROLE_SPY_THIEF) + special = "Bounties claimed: " + var/datum/antagonist/spy_thief/antag_role = M.get_antagonist(ROLE_SPY_THIEF) + for(var/obj/stolen_item in antag_role.stolen_items) + if (stolen_item.name != "") + special += "[stolen_item.name], " + + var/overallSuccess = 1 + if (M.objectives) + for (var/datum/objective/objective in M.objectives) +#ifdef CREW_OBJECTIVES + if (istype(objective, /datum/objective/crew)) continue +#endif + if (!objective.check_completion()) + overallSuccess = 0 + break + + src.send( + M.get_player().id, + M.current.real_name, + M.current.job, + M.special_role, + special, + M.late_special_role ? TRUE : FALSE, + overallSuccess + ) diff --git a/code/modules/goonhub/event_recording/events/AntagItemPurchase.dm b/code/modules/goonhub/event_recording/events/AntagItemPurchase.dm new file mode 100644 index 0000000000000..c98a6146f46a9 --- /dev/null +++ b/code/modules/goonhub/event_recording/events/AntagItemPurchase.dm @@ -0,0 +1,35 @@ + +/// Record an antag item purchase +/datum/eventRecord/AntagItemPurchase + eventType = "antag_item_purchase" + body = /datum/eventRecordBody/TracksPlayer/AntagItemPurchase + + send( + player_id, + mob_name, + mob_job, + x, + y, + z, + item, + cost + ) + . = ..(args) + + buildAndSend(mob/living/M, itemIdentifier, cost) + if (!istype(M)) + return + + var/atom/T = get_turf(M) + if (!T) T = M + + src.send( + M.mind.get_player().id, + M.real_name, + M.job, + T.x, + T.y, + T.z, + itemIdentifier ? itemIdentifier : "???", + cost + ) diff --git a/code/modules/goonhub/event_recording/events/AntagObjective.dm b/code/modules/goonhub/event_recording/events/AntagObjective.dm new file mode 100644 index 0000000000000..aa6a497647807 --- /dev/null +++ b/code/modules/goonhub/event_recording/events/AntagObjective.dm @@ -0,0 +1,21 @@ + +/// Record an antag objective addition +/datum/eventRecord/AntagObjective + eventType = "antag_objective" + body = /datum/eventRecordBody/TracksPlayer/AntagObjective + + send( + player_id, + objective, + success + ) + . = ..(args) + + buildAndSend(datum/antagonist/antagonist_role, datum/objective/objective) + var/datum/mind/M = antagonist_role.owner + + src.send( + M.get_player().id, + objective.explanation_text, + objective.check_completion() ? TRUE : FALSE + ) diff --git a/code/modules/goonhub/event_recording/events/BeeSpawn.dm b/code/modules/goonhub/event_recording/events/BeeSpawn.dm new file mode 100644 index 0000000000000..2e387e790236c --- /dev/null +++ b/code/modules/goonhub/event_recording/events/BeeSpawn.dm @@ -0,0 +1,10 @@ + +/// Record a bee spawn +/datum/eventRecord/BeeSpawn + eventType = "bee_spawn" + body = /datum/eventRecordBody/BeeSpawn + + send( + name + ) + . = ..(args) diff --git a/code/modules/goonhub/event_recording/events/Death.dm b/code/modules/goonhub/event_recording/events/Death.dm new file mode 100644 index 0000000000000..dedac695b794e --- /dev/null +++ b/code/modules/goonhub/event_recording/events/Death.dm @@ -0,0 +1,40 @@ + +/// Record a player death +/datum/eventRecord/Death + eventType = "death" + body = /datum/eventRecordBody/TracksPlayer/Death + + send( + player_id, + mob_name, + mob_job, + x, + y, + z, + bruteloss, + fireloss, + toxloss, + oxyloss, + gibbed, + last_words + ) + . = ..(args) + + buildAndSend(mob/living/M, gibbed) + var/atom/T = get_turf(M) + if (!T) T = M + + src.send( + M.mind.get_player().id, + M.real_name, + M.job, + T.x, + T.y, + T.z, + M.get_brute_damage(), + M.get_burn_damage(), + M.get_toxin_damage(), + M.get_oxygen_deprivation(), + gibbed ? TRUE : FALSE, + M.last_words + ) diff --git a/code/modules/goonhub/event_recording/events/Fine.dm b/code/modules/goonhub/event_recording/events/Fine.dm new file mode 100644 index 0000000000000..f867058f61890 --- /dev/null +++ b/code/modules/goonhub/event_recording/events/Fine.dm @@ -0,0 +1,27 @@ + +/// Record a new fine +/datum/eventRecord/Fine + eventType = "fine" + body = /datum/eventRecordBody/TracksPlayer/Fine + + send( + player_id, + target, + reason, + issuer, + issuer_job, + issuer_ckey, + amount + ) + . = ..(args) + + buildAndSend(datum/fine/F, mob/living/M) + src.send( + M.mind.get_player().id, + F.target, + F.reason, + M.real_name, + M.job, + M.ckey, + F.amount + ) diff --git a/code/modules/goonhub/event_recording/events/GauntletHighScore.dm b/code/modules/goonhub/event_recording/events/GauntletHighScore.dm new file mode 100644 index 0000000000000..1f8d6b1745e8e --- /dev/null +++ b/code/modules/goonhub/event_recording/events/GauntletHighScore.dm @@ -0,0 +1,12 @@ + +/// Record a new gauntlet high score +/datum/eventRecord/GauntletHighScore + eventType = "gauntlet_high_score" + body = /datum/eventRecordBody/GauntletHighScore + + send( + names, + score, + highest_wave + ) + . = ..(args) diff --git a/code/modules/goonhub/event_recording/events/StationName.dm b/code/modules/goonhub/event_recording/events/StationName.dm new file mode 100644 index 0000000000000..4188e4a65370e --- /dev/null +++ b/code/modules/goonhub/event_recording/events/StationName.dm @@ -0,0 +1,10 @@ + +/// Record a new station name +/datum/eventRecord/StationName + eventType = "station_name" + body = /datum/eventRecordBody/StationName + + send( + name + ) + . = ..(args) diff --git a/code/modules/goonhub/event_recording/events/Ticket.dm b/code/modules/goonhub/event_recording/events/Ticket.dm new file mode 100644 index 0000000000000..3de79161731a2 --- /dev/null +++ b/code/modules/goonhub/event_recording/events/Ticket.dm @@ -0,0 +1,25 @@ + +/// Record a new ticket +/datum/eventRecord/Ticket + eventType = "ticket" + body = /datum/eventRecordBody/TracksPlayer/Ticket + + send( + player_id, + target, + reason, + issuer, + issuer_job, + issuer_ckey + ) + . = ..(args) + + buildAndSend(datum/ticket/T, mob/living/M) + src.send( + M.mind.get_player().id, + T.target, + T.reason, + M.real_name, + M.job, + M.ckey + ) diff --git a/code/modules/goonhub/event_recording/events/eventRecord.dm b/code/modules/goonhub/event_recording/events/eventRecord.dm new file mode 100644 index 0000000000000..967099f8bbacf --- /dev/null +++ b/code/modules/goonhub/event_recording/events/eventRecord.dm @@ -0,0 +1,23 @@ +/// Base eventCall type +/// Represents a predefined event we can send to the Goonhub event recorder +/// SECURITY: Sanitization occurs right before output +/datum/eventRecord + /// The type of the event being recorded, for example `death` + var/eventType = null + /// Body of the event + var/datum/eventRecordBody/body = null + + /// Shortcut method to send this event to the event recorder + proc/send(list/fieldValues) + if (!eventRecorder) return + try + src.body = new src.body(fieldValues) + eventRecorder.add(src) + catch (var/exception/e) + var/logMsg = "Failed to send data to Goonhub Event Recording service. Reason: [e.name]. Type: [eventType]. Values: [json_encode(fieldValues)]" + logTheThing(LOG_DEBUG, null, " <b>Event Recorder:</b> [logMsg]") + logTheThing(LOG_DIARY, null, "Event Recorder: [logMsg]", "debug") + + /// Override to build event parameters + proc/buildAndSend() + return diff --git a/code/modules/goonhub/event_recording/types/AILaw.dm b/code/modules/goonhub/event_recording/types/AILaw.dm new file mode 100644 index 0000000000000..56bc1ebc9af3c --- /dev/null +++ b/code/modules/goonhub/event_recording/types/AILaw.dm @@ -0,0 +1,10 @@ + +/datum/eventRecordBody/TracksPlayer/AILaw + fields = list( + "ai_name", // string + "law_number", // int + "law_text", // string + "uploader_name", // string + "uploader_job", // string + "uploader_ckey" // string + ) diff --git a/code/modules/goonhub/event_recording/types/Antag.dm b/code/modules/goonhub/event_recording/types/Antag.dm new file mode 100644 index 0000000000000..63471f71cd017 --- /dev/null +++ b/code/modules/goonhub/event_recording/types/Antag.dm @@ -0,0 +1,10 @@ + +/datum/eventRecordBody/TracksPlayer/Antag + fields = list( + "mob_name", // string + "mob_job", // string + "traitor_type", // string + "special", // string + "late_joiner", // string + "success" // boolean + ) diff --git a/code/modules/goonhub/event_recording/types/AntagItemPurchase.dm b/code/modules/goonhub/event_recording/types/AntagItemPurchase.dm new file mode 100644 index 0000000000000..abf5283c0c663 --- /dev/null +++ b/code/modules/goonhub/event_recording/types/AntagItemPurchase.dm @@ -0,0 +1,11 @@ + +/datum/eventRecordBody/TracksPlayer/AntagItemPurchase + fields = list( + "mob_name", // string + "mob_job", // string + "x", // int + "y", // int + "z", // int + "item", // string + "cost" // int + ) diff --git a/code/modules/goonhub/event_recording/types/AntagObjective.dm b/code/modules/goonhub/event_recording/types/AntagObjective.dm new file mode 100644 index 0000000000000..ab5ad41da2144 --- /dev/null +++ b/code/modules/goonhub/event_recording/types/AntagObjective.dm @@ -0,0 +1,6 @@ + +/datum/eventRecordBody/TracksPlayer/AntagObjective + fields = list( + "objective", // string + "success" // boolean + ) diff --git a/code/modules/goonhub/event_recording/types/BeeSpawn.dm b/code/modules/goonhub/event_recording/types/BeeSpawn.dm new file mode 100644 index 0000000000000..966b8d378381d --- /dev/null +++ b/code/modules/goonhub/event_recording/types/BeeSpawn.dm @@ -0,0 +1,5 @@ + +/datum/eventRecordBody/BeeSpawn + fields = list( + "name" // string + ) diff --git a/code/modules/goonhub/event_recording/types/Death.dm b/code/modules/goonhub/event_recording/types/Death.dm new file mode 100644 index 0000000000000..79d3d875cc99b --- /dev/null +++ b/code/modules/goonhub/event_recording/types/Death.dm @@ -0,0 +1,15 @@ + +/datum/eventRecordBody/TracksPlayer/Death + fields = list( + "mob_name", // string + "mob_job", // string + "x", // int + "y", // int + "z", // int + "bruteloss", // int + "fireloss", // int + "toxloss", // int + "oxyloss", // int + "gibbed", // boolean + "last_words" // string + ) diff --git a/code/modules/goonhub/event_recording/types/Fine.dm b/code/modules/goonhub/event_recording/types/Fine.dm new file mode 100644 index 0000000000000..d8fa07b3a73cc --- /dev/null +++ b/code/modules/goonhub/event_recording/types/Fine.dm @@ -0,0 +1,10 @@ + +/datum/eventRecordBody/TracksPlayer/Fine + fields = list( + "target", // string + "reason", // string + "issuer", // string + "issuer_job", // string + "issuer_ckey", // string + "amount" // int + ) diff --git a/code/modules/goonhub/event_recording/types/GauntletHighScore.dm b/code/modules/goonhub/event_recording/types/GauntletHighScore.dm new file mode 100644 index 0000000000000..ca85718e371d1 --- /dev/null +++ b/code/modules/goonhub/event_recording/types/GauntletHighScore.dm @@ -0,0 +1,7 @@ + +/datum/eventRecordBody/GauntletHighScore + fields = list( + "names", // string + "score", // int + "highest_wave" // int + ) diff --git a/code/modules/goonhub/event_recording/types/StationName.dm b/code/modules/goonhub/event_recording/types/StationName.dm new file mode 100644 index 0000000000000..217dc7c021830 --- /dev/null +++ b/code/modules/goonhub/event_recording/types/StationName.dm @@ -0,0 +1,5 @@ + +/datum/eventRecordBody/StationName + fields = list( + "name" // string + ) diff --git a/code/modules/goonhub/event_recording/types/Ticket.dm b/code/modules/goonhub/event_recording/types/Ticket.dm new file mode 100644 index 0000000000000..a0a75c075d5d6 --- /dev/null +++ b/code/modules/goonhub/event_recording/types/Ticket.dm @@ -0,0 +1,9 @@ + +/datum/eventRecordBody/TracksPlayer/Ticket + fields = list( + "target", // string + "reason", // string + "issuer", // string + "issuer_job", // string + "issuer_ckey" // string + ) diff --git a/code/modules/goonhub/event_recording/types/_TracksPlayer.dm b/code/modules/goonhub/event_recording/types/_TracksPlayer.dm new file mode 100644 index 0000000000000..87a5f534fe3a1 --- /dev/null +++ b/code/modules/goonhub/event_recording/types/_TracksPlayer.dm @@ -0,0 +1,19 @@ + +ABSTRACT_TYPE(/datum/eventRecordBody/TracksPlayer) +/// For events that require a player ID - ABSTRACT +/datum/eventRecordBody/TracksPlayer + var/player_id = null // integer + +/datum/eventRecordBody/TracksPlayer/New(list/fieldValues) + src.player_id = fieldValues[1] + . = ..(fieldValues.Copy(2, 0)) + +/datum/eventRecordBody/TracksPlayer/VerifyIntegrity() + if (!src.player_id) + return FALSE + + return TRUE + +/datum/eventRecordBody/TracksPlayer/ToList() + . = ..() + .["player_id"] = src.player_id diff --git a/code/modules/goonhub/event_recording/types/eventBody.dm b/code/modules/goonhub/event_recording/types/eventBody.dm new file mode 100644 index 0000000000000..2bf9c51ec0f19 --- /dev/null +++ b/code/modules/goonhub/event_recording/types/eventBody.dm @@ -0,0 +1,34 @@ + +ABSTRACT_TYPE(/datum/eventRecordBody) +/// Represents the body of an event - ABSTRACT +/datum/eventRecordBody + var/list/fields + var/list/values = list() + +/datum/eventRecordBody/New(list/fieldValues) + . = ..() + src.setValues(fieldValues) + if (!VerifyIntegrity()) +#if defined(SPACEMAN_DMM) + return +#elif DM_VERSION >= 515 || defined(OPENDREAM) // Yay, actual sanity! + throw EXCEPTION("malformed [__TYPE__] [json_encode(src.ToList())]") +#else + throw EXCEPTION("malformed event [json_encode(src.ToList())]") +#endif + +/datum/eventRecordBody/proc/setValues(list/fieldValues) + var/idx = 1 + for (var/key in src.fields) + src.values[key] = fieldValues[idx] + idx++ + +/// Override to verify that the model object is correctly formed. Return FALSE if not. +/datum/eventRecordBody/proc/VerifyIntegrity() + return TRUE + +/datum/eventRecordBody/proc/ToList() + var/list/data = list() + for (var/key in src.fields) + data[key] = src.values[key] + . = list("data" = data) diff --git a/code/modules/holiday/halloween.dm b/code/modules/holiday/halloween.dm index 5227a475d998f..177617fcdf32a 100644 --- a/code/modules/holiday/halloween.dm +++ b/code/modules/holiday/halloween.dm @@ -194,9 +194,6 @@ /obj/item/reagent_containers/glass/beaker/strange_reagent name = "beaker-'Property of H. Jam'" desc = "A beaker labled 'Property of H. Jam'. Can hold up to 50 units." - icon = 'icons/obj/chemical.dmi' - icon_state = "beaker0" - item_state = "beaker" initial_volume = 50 New() diff --git a/code/modules/hydroponics/hydroponics_misc_procs.dm b/code/modules/hydroponics/hydroponics_misc_procs.dm index aaec1dd8d7e35..9072d6f25e7fb 100644 --- a/code/modules/hydroponics/hydroponics_misc_procs.dm +++ b/code/modules/hydroponics/hydroponics_misc_procs.dm @@ -124,6 +124,8 @@ proc/HYPgenerate_produce_name(var/atom/manipulated_atom, var/obj/machinery/plant proc/HYPpassplantgenes(var/datum/plantgenes/PARENT,var/datum/plantgenes/CHILD) + if(!PARENT || !CHILD) + return // This is a proc used to copy genes from PARENT to CHILD. It's used in a whole bunch // of places, usually when seeds or fruit are created and need to get their genes from // the thing that spawned them. @@ -144,12 +146,18 @@ proc/HYPpassplantgenes(var/datum/plantgenes/PARENT,var/datum/plantgenes/CHILD) proc/HYPgenerateseedcopy(var/datum/plantgenes/parent_genes, var/datum/plant/parent_planttype, var/parent_generation, var/location_to_create) //This proc generates a seed at location_to_create with a copy of the planttype and genes of a given parent plant. //This can be used, when you want to quickly generate seeds out of objects or other plants e.g. creeper or fruits. - var/obj/item/seed/child = new /obj/item/seed(location_to_create) + var/obj/item/seed/child + if (parent_planttype.unique_seed) + child = new parent_planttype.unique_seed(location_to_create) + else + child = new /obj/item/seed(location_to_create) var/datum/plant/child_planttype = HYPgenerateplanttypecopy(child, parent_planttype) var/datum/plantgenes/child_genes = child.plantgenes - var/datum/plantmutation/child_mutation = parent_genes.mutation + var/datum/plantmutation/child_mutation + if(parent_genes) + child_mutation = parent_genes.mutation // If the plant is a standard plant, our work here is mostly done - if (!child_planttype.hybrid) + if (!child_planttype.hybrid && !parent_planttype.unique_seed) child.generic_seed_setup(child_planttype) else child.planttype = child_planttype @@ -161,8 +169,9 @@ proc/HYPgenerateseedcopy(var/datum/plantgenes/parent_genes, var/datum/plant/pare seedname = "[child_mutation.name]" else if(child_mutation.name_prefix || child_mutation.name_suffix) seedname = "[child_mutation.name_prefix][child_planttype.name][child_mutation.name_suffix]" - HYPpassplantgenes(parent_genes, child_genes) child.name = "[seedname] seed" + //What's missing is transfering genes and the generation + HYPpassplantgenes(parent_genes, child_genes) child.generation = parent_generation //Now the seed it created and we can release it upon the world return child diff --git a/code/modules/hydroponics/plants.dm b/code/modules/hydroponics/plants.dm index 60b01c2137ca8..942c8c9c6907a 100644 --- a/code/modules/hydroponics/plants.dm +++ b/code/modules/hydroponics/plants.dm @@ -187,7 +187,8 @@ ABSTRACT_TYPE(/datum/plant) DNA.harvtime += rand(4,6) DNA.endurance += rand(4,8) if ("radium","uranium") - damage_amt = rand(5,15) + if(!HYPCheckCommut(DNA,/datum/plant_gene_strain/immunity_radiation)) + damage_amt = rand(5,15) // Seeds without radiation immunity take extra damage when infusing HYPmutateDNA(DNA,1) HYPnewcommutcheck(src,DNA, 2) HYPnewmutationcheck(src,DNA,null,1,S) @@ -203,6 +204,12 @@ ABSTRACT_TYPE(/datum/plant) HYPnewmutationcheck(src,DNA,null,1,S) if (prob(5)) HYPaddCommut(DNA,/datum/plant_gene_strain/unstable) + if ("omega_mutagen") + HYPmutateDNA(DNA,3) + HYPnewcommutcheck(src,DNA,6) + HYPnewmutationcheck(src,DNA,null,10,S) + if (prob(25)) + HYPaddCommut(DNA,/datum/plant_gene_strain/unstable) if ("ammonia") damage_amt = rand(10,20) DNA.growtime += rand(5,10) diff --git a/code/modules/hydroponics/plants_weed.dm b/code/modules/hydroponics/plants_weed.dm index 884a2db5b34ac..f1259634ef49c 100644 --- a/code/modules/hydroponics/plants_weed.dm +++ b/code/modules/hydroponics/plants_weed.dm @@ -17,7 +17,7 @@ ABSTRACT_TYPE(/datum/plant/weed) cropsize = 3 force_seed_on_harvest = 1 vending = 2 - genome = 30 + genome = 31 assoc_reagents = list("space_fungus") mutations = list(/datum/plantmutation/fungus/amanita,/datum/plantmutation/fungus/psilocybin,/datum/plantmutation/fungus/cloak) @@ -93,7 +93,7 @@ ABSTRACT_TYPE(/datum/plant/weed) endurance = 80 special_proc = 1 vending = 2 - genome = 40 + genome = 34 assoc_reagents = list("radium") mutations = list(/datum/plantmutation/radweed/redweed,/datum/plantmutation/radweed/safeweed) @@ -148,7 +148,7 @@ ABSTRACT_TYPE(/datum/plant/weed) endurance = 30 special_proc = 1 vending = 2 - genome = 45 + genome = 40 var/exploding = 0 assoc_reagents = list("toxic_slurry") mutations = list(/datum/plantmutation/slurrypod/omega) diff --git a/code/modules/interface/keybind_menu_chui.dm b/code/modules/interface/keybind_menu_chui.dm index 19b5b5d50c857..6d600ad332f70 100644 --- a/code/modules/interface/keybind_menu_chui.dm +++ b/code/modules/interface/keybind_menu_chui.dm @@ -55,11 +55,11 @@ chui/window/keybind_menu var/datum/keymap/keydat = new(changed_keys_rev) //this should only have the changed entries, for optimal merge current_keymap.overwrite_by_action(keydat) current_keymap.on_update(owner) - owner.cloud_put("custom_keybind_data", json_encode(changed_keys_rev)) + owner.player.cloudSaves.putData("custom_keybind_data", json_encode(changed_keys_rev)) boutput(who, SPAN_NOTICE("Your custom keybinding data has been saved.")) else if (id == "reset") changed_keys = new/list() - owner.cloud_put("custom_keybind_data", null) + owner.player.cloudSaves.putData("custom_keybind_data", null) who.keymap = null //To prevent merge() from not overwriting old keybinds who.mob.reset_keymap() //Does successive calls to rebuild the keymap boutput(who, SPAN_NOTICE("Your keybinding data has been reset. Please re-open the window.")) diff --git a/code/modules/interface/mob_input.dm b/code/modules/interface/mob_input.dm index adc781eda04ff..3cce0b74f7fd3 100644 --- a/code/modules/interface/mob_input.dm +++ b/code/modules/interface/mob_input.dm @@ -205,11 +205,11 @@ /mob/proc/apply_custom_keybinds(client/C) PROTECTED_PROC(TRUE) - if(!C || !C.cloud_available()) + if(!C) //logTheThing(LOG_DEBUG, null, "<B>ZeWaka/Keybinds:</B> Attempted to fetch custom keybinds for [C.ckey] but failed.") return - var/fetched_keylist = C.cloud_get("custom_keybind_data") + var/fetched_keylist = C.player.cloudSaves.getData("custom_keybind_data") if (!isnull(fetched_keylist) && fetched_keylist != "") //The client has a list of custom keybinds. var/datum/keymap/new_map = new /datum/keymap(json_decode(fetched_keylist)) C.keymap.overwrite_by_action(new_map) diff --git a/code/obj/item/instruments.dm b/code/modules/items/instruments/instruments.dm similarity index 100% rename from code/obj/item/instruments.dm rename to code/modules/items/instruments/instruments.dm diff --git a/code/obj/playable_piano.dm b/code/modules/items/instruments/playable_piano.dm similarity index 100% rename from code/obj/playable_piano.dm rename to code/modules/items/instruments/playable_piano.dm diff --git a/code/modules/mapping/helpers/wingrille_spawner.dm b/code/modules/mapping/helpers/wingrille_spawner.dm index 3ac4c19092bae..937b2b511b77c 100644 --- a/code/modules/mapping/helpers/wingrille_spawner.dm +++ b/code/modules/mapping/helpers/wingrille_spawner.dm @@ -92,6 +92,7 @@ win_path = /obj/window/auto full_win = TRUE no_dirs = TRUE + layer = LATTICE_LAYER // to stop it rendering over things in map editors #ifdef PERSPECTIVE_EDITOR_WALL icon_state = "wingrille_new" color = "#A3DCFF" diff --git a/code/modules/materials/Mat_MaterialProcs.dm b/code/modules/materials/Mat_MaterialProcs.dm index cde3a0fc45073..e93034f3bec32 100644 --- a/code/modules/materials/Mat_MaterialProcs.dm +++ b/code/modules/materials/Mat_MaterialProcs.dm @@ -530,7 +530,7 @@ triggerOnEntered(var/atom/owner, var/atom/entering) /datum/materialProc/slippery_attack execute(var/atom/owner, var/mob/attacker, var/atom/attacked) - if (isitem(owner) && prob(20)) + if (isitem(owner) && prob(20) && (owner in attacker.equipped_list())) var/obj/item/handled_item = owner boutput(attacker, SPAN_ALERT("[handled_item] slips right out of your hand!")) handled_item.set_loc(attacker.loc) diff --git a/code/modules/mechanics/MechanicMadness.dm b/code/modules/mechanics/MechanicMadness.dm index c483a7c03b5d7..c8844c5479605 100644 --- a/code/modules/mechanics/MechanicMadness.dm +++ b/code/modules/mechanics/MechanicMadness.dm @@ -3212,6 +3212,7 @@ ADMIN_INTERACT_PROCS(/obj/item/mechanics/trigger/button, proc/press) SEND_SIGNAL(src,COMSIG_MECHCOMP_ADD_INPUT,"Set A", PROC_REF(setA)) SEND_SIGNAL(src,COMSIG_MECHCOMP_ADD_INPUT,"Set B", PROC_REF(setB)) SEND_SIGNAL(src,COMSIG_MECHCOMP_ADD_INPUT,"Evaluate", PROC_REF(evaluate)) + SEND_SIGNAL(src,COMSIG_MECHCOMP_ADD_INPUT,"Set Mode", PROC_REF(compSetMode)) SEND_SIGNAL(src,COMSIG_MECHCOMP_ADD_CONFIG,"Set A",PROC_REF(setAManually)) SEND_SIGNAL(src,COMSIG_MECHCOMP_ADD_CONFIG,"Set B",PROC_REF(setBManually)) SEND_SIGNAL(src,COMSIG_MECHCOMP_ADD_CONFIG,"Set Mode",PROC_REF(setMode)) @@ -3267,6 +3268,11 @@ ADMIN_INTERACT_PROCS(/obj/item/mechanics/trigger/button, proc/press) tooltip_rebuild = 1 if (autoEval) src.evaluate() + proc/compSetMode(var/datum/mechanicsMessage/input) + LIGHT_UP_HOUSING + tooltip_rebuild = 1 + if(input.signal in list("add","mul","div","sub","mod","pow","rng","eq","neq","gt","lt","gte","lte")) + mode = input.signal proc/evaluate() switch(mode) if("add") diff --git a/code/modules/medals/rewardsLocker.dm b/code/modules/medals/rewardsLocker.dm index a4d88d02e3b02..6bac2572cc219 100644 --- a/code/modules/medals/rewardsLocker.dm +++ b/code/modules/medals/rewardsLocker.dm @@ -375,9 +375,12 @@ var/prev = skin_target.name skin_target.name = "round-bottom flask" skin_target.desc = "A large round-bottom flask, for all your chemistry needs. (Base Item: [prev])" - skin_target.icon_style = "flask" - skin_target.item_state = "flask" - skin_target.fluid_image = image(skin_target.icon, "fluid-flask") + skin_target.icon_state = "large_flask" + skin_target.item_state = "large_flask" + skin_target.original_icon_state = "large_flask" + skin_target.fluid_overlay_states = 11 + skin_target.container_style = "large_flask" + skin_target.fluid_overlay_scaling = RC_FLUID_OVERLAY_SCALING_SPHERICAL skin_target.UpdateIcon() activator.set_clothing_icon_dirty() return 1 diff --git a/code/modules/medical/genetics/bioEffects/mutantrace.dm b/code/modules/medical/genetics/bioEffects/mutantrace.dm index a018bb7ce5968..fdcc4f983ab1d 100644 --- a/code/modules/medical/genetics/bioEffects/mutantrace.dm +++ b/code/modules/medical/genetics/bioEffects/mutantrace.dm @@ -146,6 +146,14 @@ msgLose = "Your fur falls out." icon_state = "cat" +/datum/bioEffect/mutantrace/cat/bingus + name = "Bingus Genetics" + id = "bingus" + mutantrace_option = "Bingus" + mutantrace_path = /datum/mutantrace/cat/bingus + msgGain = "You feel like wearing jeans." + msgLose = "Your love of jeans fades." + icon_state = null /datum/bioEffect/mutantrace/cow name = "Bovine Genetics" diff --git a/code/modules/medical/genetics/bioEffects/powers.dm b/code/modules/medical/genetics/bioEffects/powers.dm index bd7077479b9c1..1c7f578321575 100644 --- a/code/modules/medical/genetics/bioEffects/powers.dm +++ b/code/modules/medical/genetics/bioEffects/powers.dm @@ -195,6 +195,7 @@ var/obj/item/I = the_object if(I) if(I.Eat(owner, owner, TRUE)) //eating can return false to indicate it failed + I.storage?.hide_hud(owner) logTheThing(LOG_COMBAT, owner, "uses Matter Eater to eat [log_object(the_object)] at [log_loc(owner)].") // Organs and body parts have special behaviors we need to account for if (ishuman(owner)) @@ -1023,13 +1024,17 @@ shake_camera(V,10,64) if (V == owner) continue - boutput(V, SPAN_ALERT("You are sent flying!")) V.changeStatus("weakened", stun_time SECONDS) - // why the hell was this set to 12 christ - while (throw_repeat > 0) - throw_repeat-- - step_away(V,get_turf(owner),throw_speed) + if(!V.anchored) + boutput(V, SPAN_ALERT("You are sent flying!")) + // why the hell was this set to 12 christ + while (throw_repeat > 0) + throw_repeat-- + step_away(V,get_turf(owner),throw_speed) + else + boutput(V, SPAN_ALERT("You are knocked down!")) + var/toxic = owner.bioHolder.HasEffect("toxic_farts") if(toxic) var/turf/fart_turf = get_turf(owner) diff --git a/code/modules/medical/genetics/bioEffects/speech.dm b/code/modules/medical/genetics/bioEffects/speech.dm index 56b24158ba936..60a601c1c6832 100644 --- a/code/modules/medical/genetics/bioEffects/speech.dm +++ b/code/modules/medical/genetics/bioEffects/speech.dm @@ -1033,3 +1033,18 @@ return "" message = accent_piglatin(message) return message + +/datum/bioEffect/speech/bingus + name = "Frontal Gyrus Alteration Type-bingus" + desc = "Reconstructs the language center of the subject's brain to love bingus." + id = "accent_bingus" + effectType = EFFECT_TYPE_DISABILITY + msgGain = "Bingus my beloved :)" + msgLose = "Bingus my beloved :(" + occur_in_genepools = FALSE + probability = 0 // Should not be player accessible + + OnSpeak(var/message) + if (!istext(message)) + return "" + return bingus_parse(message) diff --git a/code/modules/medical/genetics/portagene.dm b/code/modules/medical/genetics/portagene.dm index 7ce85863fd9b2..83b80173baf16 100644 --- a/code/modules/medical/genetics/portagene.dm +++ b/code/modules/medical/genetics/portagene.dm @@ -80,9 +80,10 @@ if (BOUNDS_DIST(src, user) > 0 || BOUNDS_DIST(user, target) > 0) return - if (target == user) - go_in(target) - else if (can_operate(user,target)) + if (can_operate(user, target)) + if (target == user) + go_in(target) + return var/previous_user_intent = user.a_intent user.set_a_intent(INTENT_GRAB) user.drop_item() @@ -92,7 +93,6 @@ if (can_operate(user,target)) if (istype(user.equipped(), /obj/item/grab)) src.Attackby(user.equipped(), user) - return proc/can_operate(var/mob/M, var/mob/living/target) if (!isalive(M)) diff --git a/code/modules/medical/pathology/pathogen_tools.dm b/code/modules/medical/pathology/pathogen_tools.dm index d08036e3016b8..8529c669ae515 100644 --- a/code/modules/medical/pathology/pathogen_tools.dm +++ b/code/modules/medical/pathology/pathogen_tools.dm @@ -250,17 +250,13 @@ /obj/item/reagent_containers/glass/vial name = "vial" desc = "A vial. Can hold up to 5 units." - icon = 'icons/obj/pathology.dmi' - icon_state = "vial0" + icon = 'icons/obj/items/chemistry_glassware.dmi' + icon_state = "phial" item_state = "vial" rc_flags = RC_FULLNESS | RC_VISIBLE | RC_SPECTRO - - on_reagent_change() - ..() - if (reagents.total_volume < 0.05) - icon_state = "vial0" - else - icon_state = "vial1" + accepts_lid = TRUE + fluid_overlay_states = 5 + container_style = "phial" New() var/datum/reagents/R = new /datum/reagents(5) @@ -280,9 +276,6 @@ /obj/item/reagent_containers/glass/vial/prepared name = "Totally Safe(tm) pathogen sample" desc = "A vial. Can hold up to 5 units." - icon = 'icons/obj/pathology.dmi' - icon_state = "vial0" - item_state = "vial" var/datum/microbody/FM = null New() @@ -303,6 +296,8 @@ RE.add_reagent("water", 5) #endif + src.UpdateIcon() + /obj/item/reagent_containers/glass/vial/prepared/virus FM = /datum/microbody/virus @@ -319,8 +314,6 @@ name = "Beaker of Parasitic Medium" desc = "A mix of blood and flesh; fertile ground for some microbes." - icon_state = "beaker" - New() ..() src.reagents.add_reagent("parasiticmedium", 50) @@ -329,8 +322,6 @@ name = "Beaker of Eggs" desc = "Eggs; fertile ground for some microbes." - icon_state = "beaker" - New() ..() src.reagents.add_reagent("egg", 50) @@ -339,8 +330,6 @@ name = "Beaker of Stable Mutagen" desc = "Stable Mutagen; fertile ground for some microbes." - icon_state = "beaker" - New() ..() src.reagents.add_reagent("dna_mutagen", 50) @@ -349,8 +338,6 @@ name = "Beaker of Bacterial Growth Medium" desc = "Bacterial Growth Medium; fertile ground for some microbes." - icon_state = "beaker" - New() ..() src.reagents.add_reagent("bacterialmedium", 50) @@ -359,8 +346,6 @@ name = "Beaker of Fungal Growth Medium" desc = "Fungal Growth Medium; fertile ground for some microbes." - icon_state = "beaker" - New() ..() src.reagents.add_reagent("fungalmedium", 50) @@ -369,8 +354,6 @@ name = "Beaker of Antiviral Agent" desc = "A beaker of a weak anti-viral agent." - icon_state = "beaker" - New() ..() src.reagents.add_reagent("antiviral", 50) @@ -379,8 +362,6 @@ name = "Beaker of Biocides" desc = "A beaker of biocides. The label says 'do not feed to worms or mushrooms'. Curious." - icon_state = "beaker" - New() ..() src.reagents.add_reagent("biocide", 50) @@ -389,8 +370,6 @@ name = "Beaker of Spaceacillin" desc = "It's penicillin in space." - icon_state = "beaker" - New() ..() src.reagents.add_reagent("spaceacillin", 50) @@ -399,8 +378,6 @@ name = "Beaker of Inhibition Agent" desc = "It's green, that's for sure." - icon_state = "beaker" - New() ..() src.reagents.add_reagent("inhibitor", 50) diff --git a/code/modules/mentor/mentorhelp.dm b/code/modules/mentor/mentorhelp.dm new file mode 100644 index 0000000000000..e24ee513b7e51 --- /dev/null +++ b/code/modules/mentor/mentorhelp.dm @@ -0,0 +1,100 @@ +/client/proc/set_mentorhelp_visibility(var/set_as = null) + if (!isnull(set_as)) + player.see_mentor_pms = set_as + else + player.see_mentor_pms = !player.see_mentor_pms + boutput(src, "<span class='ooc mentorooc'>You will [player.see_mentor_pms ? "now" : "no longer"] see Mentorhelps [player.see_mentor_pms ? "and" : "or"] show up as a Mentor.</span>") + +/client/proc/toggle_mentorhelps() + set name = "Toggle Mentorhelps" + set category = "Commands" + set desc = "Show or hide mentorhelp messages. You will also no longer show up as a mentor in OOC and via the Who command if you disable mentorhelps." + + if (!src.is_mentor() && !src.holder) + boutput(src, SPAN_ALERT("Only mentors may use this command.")) + src.verbs -= /client/proc/toggle_mentorhelps // maybe? + return + + src.set_mentorhelp_visibility() + +/mob/verb/mentorhelp() + set category = "Commands" + set name = "mentorhelp" + + var/client/client = src.client + + if (IsGuestKey(client.key)) + boutput(client.mob, "You are not authorized to communicate over these channels.") + gib(client.mob) + return + + var/mob/dead/target_observer/mentor_mouse_observer/mmouse = locate() in src + if(mmouse) // mouse in your pocket takes precedence over mhelps + var/msg = input("Please enter your whispers to the mouse:") as null|text + msg = copytext(strip_html(msg), 1, MAX_MESSAGE_LEN * 4) + if (!msg) + return + var/class = mmouse.is_admin ? "adminooc" : "mhelp" + boutput(mmouse, "<span class='[class]'><b>[client.mob]</b> whispers: \"<i>[msg]</i>\"</span>") + boutput(client.mob, "<span class='[class]'>You whisper to \the [mmouse]: \"<i>[msg]</i>\"</span>") + for (var/client/C) + if (C.holder) + if (C.player_mode || C == client || C == mmouse.client) + continue + else + var/rendered = "<span class='[class]'><b>[mmouse.is_admin ? "A" : "M"]MOUSEWHISPER: [key_name(client.mob,0,0,1)]<span class='name text-normal' data-ctx='\ref[src.mind]'>[(client.mob.real_name ? "/"+client.mob.real_name : "")]</span> <A HREF='?src=\ref[C.holder];action=adminplayeropts;targetckey=[client.ckey]' class='popt'><i class='icon-info-sign'></i></A></b>: [SPAN_MESSAGE("[msg]")]</span>" + boutput(C, "<span class='adminHearing' data-ctx='[C.chatOutput.ctxFlag]'>[rendered]</span>") + logTheThing(LOG_DIARY, client.mob, "([mmouse.is_admin ? "A" : "M"]MOUSEWHISPER): [msg]", "say") + return + + if (client.player.cloudSaves.getData("mentorhelp_banner")) + boutput(client.mob, "You have been banned from using this command.") + return + + if(ON_COOLDOWN(client.player, "ahelp", ADMINHELP_DELAY)) + boutput(src, "You must wait [time_to_text(ON_COOLDOWN(src, "ahelp", 0))].") + return + + var/msg = input("Enter your help request to mentors.\nMentorhelps are sent to mentors via Discord.\n\nPlease use Adminhelp (F1) for rules questions.", "mentorhelp") as null|message + + msg = copytext(strip_html(msg, strip_newlines=FALSE), 1, MAX_MESSAGE_LEN * 4) + if (client.can_see_mentor_pms()) + msg = linkify(msg) + + if (!msg) + return + + if (client?.ismuted()) + return + + var/dead = isdead(client.mob) ? "Dead " : "" + var/ircmsg[] = new() + ircmsg["key"] = client.key + ircmsg["name"] = client.mob.job ? "[stripTextMacros(client.mob.real_name)] \[[dead][client.mob.job]]" : (dead ? "[stripTextMacros(client.mob.real_name)] \[[dead]\]" : stripTextMacros(client.mob.real_name)) + ircmsg["msg"] = html_decode(msg) + var/unique_message_id = md5("mhelp" + json_encode(ircmsg)) + ircmsg["msgid"] = unique_message_id + ircbot.export_async("mentorhelp", ircmsg) + + var/src_keyname = key_name(client.mob, 0, 0, 1, additional_url_data="&msgid=[unique_message_id]") + + for (var/client/C) + if (C.holder) + if (C.player_mode && !C.player_mode_mhelp) + continue + else + var/rendered = SPAN_MHELP("<b>MENTORHELP: [src_keyname]<span class='name text-normal' data-ctx='\ref[src.mind]'>[(client.mob.real_name ? "/"+client.mob.real_name : "")]</span> <A HREF='?src=\ref[C.holder];action=adminplayeropts;targetckey=[client.ckey]' class='popt'><i class='icon-info-sign'></i></A></b>: [SPAN_MESSAGE("[msg]")]") + boutput(C, "<span class='adminHearing' data-ctx='[C.chatOutput.ctxFlag]'>[rendered]</span>") + else if (C?.can_see_mentor_pms()) + if(istype(C.mob, /mob/dead/observer) || C.mob.type == /mob/dead/target_observer || C.mob.type == /mob/dead/target_observer/mentor_mouse_observer || istype(C.mob, /mob/living/critter/small_animal/mouse/weak/mentor)) + var/rendered = SPAN_MHELP("<b>MENTORHELP: [src_keyname]<span class='name text-normal' data-ctx='\ref[src.mind]'>[(client.mob.real_name ? "/"+client.mob.real_name : "")]</span></b>: [SPAN_MESSAGE("[msg]")]") + boutput(C, "<span class='adminHearing' data-ctx='[C.chatOutput.ctxFlag]'>[rendered]</span>") + else + boutput(C, SPAN_MHELP("<b>MENTORHELP: [src_keyname]</b>: [SPAN_MESSAGE("[msg]")]")) + + boutput(client.mob, SPAN_MHELP("<b>MENTORHELP: You</b>: [msg]")) + logTheThing(LOG_MHELP, client.mob, "MENTORHELP: [msg]") + logTheThing(LOG_DIARY, client.mob, "MENTORHELP: [msg]", "mhelp") +#ifdef DATALOGGER + game_stats.Increment("mentorhelps") +#endif diff --git a/code/modules/networks/computer3/disks.dm b/code/modules/networks/computer3/disks.dm index 7379e133a983a..0669a7adb060f 100644 --- a/code/modules/networks/computer3/disks.dm +++ b/code/modules/networks/computer3/disks.dm @@ -66,6 +66,15 @@ user.visible_message(SPAN_ALERT("<b>[user] is zapped as the multitool backfires! The [src.name] seems unphased.</b>")) elecflash(user,0, power=2, exclude_center = 0) + emp_act() + . = ..() + if (src.root) + src.root.dispose() + + src.root = new /datum/computer/folder + src.root.holder = src + src.root.name = "root" + attackby(obj/item/W, mob/user) if (ispulsingtool(W)) user.visible_message(SPAN_ALERT("<b>[user] begins to wipe [src.name]!</b>")) diff --git a/code/modules/networks/computer3/mainframe2/misc_terms.dm b/code/modules/networks/computer3/mainframe2/misc_terms.dm index 91ffd158d8f56..5ca784dc587b2 100644 --- a/code/modules/networks/computer3/mainframe2/misc_terms.dm +++ b/code/modules/networks/computer3/mainframe2/misc_terms.dm @@ -681,21 +681,25 @@ TYPEINFO(/obj/machinery/networked/storage) icon_state = "bomb_scanner0" base_icon_state = "bomb_scanner" - setup_access_click = 0 - read_only = 1 + setup_access_click = FALSE + read_only = TRUE setup_drive_size = 4 setup_drive_type = /obj/item/disk/data/bomb_tester - setup_accept_tapes = 0 + setup_accept_tapes = FALSE + /// One of two tanks this holds as a basis for the simulation var/obj/item/tank/tank1 = null + /// Two of two tanks this holds as a basis for the simulation var/obj/item/tank/tank2 = null + /// File record where the simulation results are kept var/datum/computer/file/record/results = null - var/setup_result_name = "Bomblog" + /// Our VR TTV to attach tank1 and tank2 to var/obj/item/device/transfer_valve/vr/vrbomb = null - var/last_sim = 0 //Last world.time we tested a bomb. - var/sim_delay = 300 //Time until next simulation. power_usage = 200 - + HELP_MESSAGE_OVERRIDE("Simulates the mixture of two tanks of gas.</br>\ + You can use the <b>VR Goggles</b> typically found nearby to watch the simulation unfold.</br>\ + A <b>screwdriver</b> can open the maintenence panel to manage the host connection.") + /// Where the bomb gets dropped var/vr_landmark = LANDMARK_VR_BOMB power_change() @@ -706,9 +710,8 @@ TYPEINFO(/obj/machinery/networked/storage) SPAWN(rand(0, 15)) status |= NOPOWER UpdateIcon() - if(vrbomb) - qdel(vrbomb) - + if(src.vrbomb) + qdel(src.vrbomb) return process() @@ -735,303 +738,288 @@ TYPEINFO(/obj/machinery/networked/storage) return - attackby(obj/item/W, mob/user) - if (istype(W, /obj/item/tank)) - return attack_hand(user) - else if (isscrewingtool(W)) - playsound(src.loc, 'sound/items/Screwdriver.ogg', 50, 1) - boutput(user, "You [src.locked ? "secure" : "unscrew"] the maintenance panel.") - src.panel_open = !src.panel_open - src.updateUsrDialog() - return + /// Handheld tanks and butts are both fair game here + proc/is_valid_tank(obj/item/I) + return (istype(I, /obj/item/tank) || istype(I, /obj/item/clothing/head/butt)) + + /// Determine if the simulator is ready, returns a list of a bool for whether it's ready, and a dialogue for the user + proc/can_simulate() + if(!(src.tank1 && src.tank2)) + return list(FALSE, "Both tanks are required!") + else if (GET_COOLDOWN(global, "bomb_simulator")) + return list(FALSE, "Simulator not ready, please try again later.") + else if (src.vrbomb) + return list(TRUE, "Simulation in progress!") else - ..() - return - - attack_hand(mob/user) - if(status & (NOPOWER|BROKEN)) - return - - if(user.lying || user.stat) - return 1 - - if ((BOUNDS_DIST(src, user) > 0 || !istype(src.loc, /turf)) && !issilicon(user)) - return 1 - - src.add_dialog(user) - - var/dat = "<html><head><title>SimUnit - \[[bank_id]]</title></head><body>" - - dat += "<b>Tank One:</b> <a href='?src=\ref[src];tank=1'>[src.tank1 ? "Eject" : "None"]</a><br>" - dat += "<b>Tank Two:</b> <a href='?src=\ref[src];tank=2'>[src.tank2 ? "Eject" : "None"]</a><hr>" - - dat += "<b>Simulation:</b> [vrbomb ? "IN PROGRESS" : "<a href='?src=\ref[src];simulate=1'>BEGIN</a>"]<br>" - - var/readout_color = "#000000" - var/readout = "ERROR" - if(src.host_id) - readout_color = "#33FF00" - readout = "OK CONNECTION" + return list(TRUE, "Simulator ready.") + +#define TANK_ONE 1 +#define TANK_TWO 2 +/// Checks if we have a tank in the specified slot +#define HAS_TANK(tanknum) ((tanknum == TANK_ONE) && src.tank1) || ((tanknum == TANK_TWO) && src.tank2) +/// Add the tank to the slot being interact with in the device +#define ADD_TANK(tanknum, tank) tank.set_loc(src); if ((tanknum) == TANK_ONE) {src.tank1 = tank;}\ + else {src.tank2 = tank;}; + /// Interact with one of the tank slots on the machine. 1 for the first slot, 2 for the second. "null" to use an empty slot, if there is one. + proc/add_tank(mob/user, obj/item/I, slot=null) + if(issilicon(user) && BOUNDS_DIST(src, user) > 0) + boutput(user, SPAN_ALERT("You cannot interact with \the [src] from that far away!")) + return + // No slot specified, try to interact with an empty slot + if (!slot) + if (HAS_TANK(TANK_ONE)) + if (HAS_TANK(TANK_TWO)) + boutput(user, SPAN_ALERT("There is no room to insert that into \the [src]!")) + return + else + slot = TANK_TWO + else + slot = TANK_ONE + // Magtractors need special handling + if (istype(I, /obj/item/magtractor)) + var/obj/item/magtractor/mag = I + I = mag.holding + if (!src.is_valid_tank(I)) + boutput(user, "That won't work inside of the [src]!") + else + mag.dropItem(0) + ADD_TANK(slot, I) + playsound(src, 'sound/machines/click.ogg', 50, TRUE) + boutput(user, "You insert \the [I].") + else if (!src.is_valid_tank(I)) + boutput(user, "That won't work inside of the [src]!") else - readout_color = "#F80000" - readout = "NO CONNECTION" - - dat += "Host Connection: " - dat += "<table border='1' style='background-color:[readout_color]'><tr><td><font color=white>[readout]</font></td></tr></table><br>" + user.drop_item() + ADD_TANK(slot, I) + playsound(src, 'sound/machines/click.ogg', 50, TRUE) + boutput(user, "You insert \the [I].") + + ui_act(action, params) + switch(action) + if ("add_item") + src.add_tank(usr, usr.equipped(), params["tank"]) + + if ("remove_tank_one") + if (HAS_TANK(TANK_ONE)) + usr.put_in_hand_or_eject(src.tank1) + boutput(usr, "You eject \the [src.tank1].") + src.tank1 = null + if (src.vrbomb) + qdel(src.vrbomb) + + if ("remove_tank_two") + if (HAS_TANK(TANK_TWO)) + usr.put_in_hand_or_eject(src.tank2) + boutput(usr, "You eject \the [src.tank2].") + src.tank2 = null + if (src.vrbomb) + qdel(src.vrbomb) + + if("simulate") + // Button is disabled on these conditions, but can't hurt to check em' twice + var/simulator_dialogue = src.can_simulate() + if (!simulator_dialogue[1]) + boutput(usr, SPAN_ALERT(simulator_dialogue[2])) + ON_COOLDOWN(global, "bomb_simulator", 30 SECONDS) + src.generate_vrbomb() + src.updateUsrDialog() - dat += "<a href='?src=\ref[src];reset=1'>Reset Connection</a><br>" + if ("reset") + if (!host_id || ON_COOLDOWN(src, "reset", NETWORK_MACHINE_RESET_DELAY)) + return + var/rem_host = src.host_id ? src.host_id : src.old_host_id + src.host_id = null + src.old_host_id = null + src.post_status(rem_host, "command","term_disconnect") + SPAWN(0.5 SECONDS) + src.post_status(rem_host, "command","term_connect","device",src.device_tag) + return - if (src.panel_open) - dat += net_switch_html() + if ("config_switch") + src.net_number = src.net_number ^ (1 << params["switch_flicked"]) - user.Browse(dat,"window=bombtester;size=245x302") - onclose(user,"bombtester") + tgui_process.update_uis(src) + src.add_fingerprint(usr) return - Topic(href, href_list) - if(..()) - return - - src.add_dialog(usr) - - if (href_list["tank"]) +#undef HAS_TANK +#undef ADD_TANK +#undef TANK_ONE +#undef TANK_TWO + + ui_interact(mob/user, datum/tgui/ui) + ui = tgui_process.try_update_ui(user, src, ui) + if (!ui) + ui = new(user, src, "Bombsim", src.name) + ui.open() + +/// Gets relevant properties of the tank as a list for ui_data +#define TANK_AS_LIST(tank) (tank != null) ? list("name"=capitalize(tank.name),\ + "pressure"=((hasvar(tank, "air_contents") && tank.air_contents != null) ? MIXTURE_PRESSURE(tank.air_contents) : null),\ + "maxPressure"=TANK_FRAGMENT_PRESSURE) : list("name"=null, "pressure"=null,"maxPressure"=null) + ui_data() + var/simulator_dialogue = src.can_simulate() + return list( + "tank_one" = TANK_AS_LIST(src.tank1), + "tank_two" = TANK_AS_LIST(src.tank2), + "host_id" = src.host_id, + "vr_bomb" = src.vrbomb, + "panel_open" = src.panel_open, + "is_ready" = simulator_dialogue[1], + "cooldown" = "[GET_COOLDOWN(global, "bomb_simulator")/10] Second\s", + "readiness_dialogue" = simulator_dialogue[2], + "net_number" = src.net_number, + ) - //Ai/cyborgs cannot physically remove a tape from a room away. - if(issilicon(usr) && BOUNDS_DIST(src, usr) > 0) - boutput(usr, SPAN_ALERT("You cannot press the ejection button.")) - return - - switch(href_list["tank"]) - if("1") - if(src.tank1) - src.tank1.set_loc(src.loc) - src.tank1 = null - boutput(usr, "You remove the tank.") - if(vrbomb) - qdel(vrbomb) - else - var/obj/item/I = usr.equipped() - if (istype(I, /obj/item/tank)) - usr.drop_item() - I.set_loc(src) - src.tank1 = I - boutput(usr, "You insert [I].") - else if (istype(I, /obj/item/magtractor)) - var/obj/item/magtractor/mag = I - if (istype(mag.holding, /obj/item/tank)) - I = mag.holding - mag.dropItem(0) - I.set_loc(src) - src.tank1 = I - boutput(usr, "You insert [I].") - src.UpdateIcon() - if("2") - if(src.tank2) - src.tank2.set_loc(src.loc) - src.tank2 = null - boutput(usr, "You remove the tank.") - if(vrbomb) - qdel(vrbomb) - else - var/obj/item/I = usr.equipped() - if (istype(I, /obj/item/tank)) - usr.drop_item() - I.set_loc(src) - src.tank2 = I - boutput(usr, "You insert [I].") - else if (istype(I, /obj/item/magtractor)) - var/obj/item/magtractor/mag = I - if (istype(mag.holding, /obj/item/tank)) - I = mag.holding - mag.dropItem(0) - I.set_loc(src) - src.tank2 = I - boutput(usr, "You insert [I].") - src.UpdateIcon() - - src.updateUsrDialog() + update_icon() + if(tank1) //Update tank overlays. + UpdateOverlays(image(src.icon,"bscanner-tank1"), "tank1") + else + UpdateOverlays(null, "tank1") + if(tank2) + UpdateOverlays(image(src.icon,"bscanner-tank2"), "tank2") + else + UpdateOverlays(null, "tank2") - else if(href_list["simulate"]) - if(!tank1 || !tank2) - boutput(usr, SPAN_ALERT("Both tanks are required!")) - return + if(status & BROKEN) + icon_state = "bomb_scannerb" + return + if(status & NOPOWER) + icon_state = "bomb_scanner-p" + return - if(last_sim && (last_sim + sim_delay > world.time)) - boutput(usr, SPAN_ALERT("Simulator not ready, please try again later.")) - return + if(src.tank1 && src.tank2) + icon_state = "bomb_scanner1" + else + icon_state = "bomb_scanner0" + return - if(vrbomb) - boutput(usr, SPAN_ALERT("Simulation already in progress!")) - return + attackby(obj/item/I, mob/user) + ..() + if (src.is_valid_tank(I)) // Insert tanks by hand + src.add_tank(user, I) - src.generate_vrbomb() - src.updateUsrDialog() + attack_hand(mob/user) + if(status & (NOPOWER|BROKEN)) + return - else if (href_list["reset"]) - if(last_reset && (last_reset + NETWORK_MACHINE_RESET_DELAY >= world.time)) - return + if(user.lying || user.stat) + return 1 - if(!host_id) - return + if ((BOUNDS_DIST(src, user) > 0 || !istype(src.loc, /turf)) && !issilicon(user)) + return 1 - src.last_reset = world.time - var/rem_host = src.host_id ? src.host_id : src.old_host_id - src.host_id = null - src.old_host_id = null - src.post_status(rem_host, "command","term_disconnect") - SPAWN(0.5 SECONDS) - src.post_status(rem_host, "command","term_connect","device",src.device_tag) + src.ui_interact(user) - src.updateUsrDialog() + proc/generate_vrbomb() + if(!(src.tank1 && src.tank2)) return - src.add_fingerprint(usr) - return - - proc - generate_vrbomb() - if(!tank1 || !tank2) - return - - if(vrbomb) - qdel(vrbomb) + if(src.vrbomb) + qdel(src.vrbomb) - var/turf/B = pick_landmark(vr_landmark) - if(!B) - playsound(src.loc, 'sound/machines/buzz-sigh.ogg', 50, 1) - src.visible_message("[src] emits a somber ping.") - return + var/turf/B = pick_landmark(vr_landmark) + if(!B) + playsound(src.loc, 'sound/machines/buzz-sigh.ogg', 50, 1) + src.visible_message("[src] emits a somber ping.") + return + + // Create and setup our vr explosive + src.vrbomb = new + src.vrbomb.set_loc(B) + src.vrbomb.anchored = ANCHORED + src.vrbomb.tester = src + + var/obj/item/tank/vrtank1 = new tank1.type + var/obj/item/tank/vrtank2 = new tank2.type + + if (hasvar(src.tank1, "air_contents")) + vrtank1.air_contents.copy_from(src.tank1.air_contents) + if (hasvar(src.tank2, "air_contents")) + vrtank2.air_contents.copy_from(src.tank2.air_contents) + + src.vrbomb.tank_one = vrtank1 + src.vrbomb.tank_two = vrtank2 + vrtank1.set_loc(src.vrbomb) + vrtank2.set_loc(src.vrbomb) + + src.vrbomb.UpdateIcon() + SPAWN(3 SECONDS) + src.vrbomb.toggle_valve() + + var/area/to_reset = get_area(src.vrbomb) //Reset the magic vr turf. + if(to_reset && to_reset.name != "Space") + for(var/turf/unsimulated/bombvr/VT in to_reset) + VT.icon_state = initial(VT.icon_state) + for(var/turf/unsimulated/wall/bombvr/VT in to_reset) + VT.icon_state = initial(VT.icon_state) + VT.set_opacity(1) + VT.set_density(1) + + src.new_bomb_log() + return - vrbomb = new - vrbomb.set_loc(B) - vrbomb.anchored = ANCHORED - vrbomb.tester = src - - var/obj/item/device/timer/T = new - vrbomb.attached_device = T - T.master = vrbomb - T.time = 6 - - var/obj/item/tank/vrtank1 = new tank1.type - var/obj/item/tank/vrtank2 = new tank2.type - - vrtank1.air_contents.copy_from(tank1.air_contents) - vrtank2.air_contents.copy_from(tank2.air_contents) - - vrbomb.tank_one = vrtank1 - vrbomb.tank_two = vrtank2 - vrtank1.master = vrbomb - vrtank1.set_loc(vrbomb) - vrtank2.master = vrbomb - vrtank2.set_loc(vrbomb) - - vrbomb.UpdateIcon() - - T.timing = 1 - T.c_state(1) - processing_items |= T - src.last_sim = world.time - - var/area/to_reset = get_area(vrbomb) //Reset the magic vr turf. - if(to_reset && to_reset.name != "Space") - for(var/turf/unsimulated/bombvr/VT in to_reset) - VT.icon_state = initial(VT.icon_state) - for(var/turf/unsimulated/wall/bombvr/VT in to_reset) - VT.icon_state = initial(VT.icon_state) - VT.set_opacity(1) - VT.set_density(1) - - if(results) - //qdel(results) - results.dispose() - src.new_bomb_log() - return - - new_bomb_log() - if(!tape) - return + proc/new_bomb_log() + if(!tape) + return - if(results) - //qdel(results) - results.dispose() + if(src.results) + src.results.dispose() - results = new - results.name = setup_result_name + src.results = new + src.results.name = "Bomblog" - results.fields += "Test [time2text(world.realtime, "DDD MMM DD hh:mm:ss")], [CURRENT_SPACE_YEAR]" + src.results.fields += "Test [time2text(world.realtime, "DDD MMM DD hh:mm:ss")], [CURRENT_SPACE_YEAR]" - results.fields += "Atmospheric Tank #1:" - if(tank1) - var/datum/gas_mixture/environment = tank1.return_air() - var/pressure = MIXTURE_PRESSURE(environment) - var/total_moles = TOTAL_MOLES(environment) + src.results.fields += "Atmospheric Tank #1:" + if(tank1 && tank1?.air_contents) + var/datum/gas_mixture/environment = tank1.return_air() + var/pressure = MIXTURE_PRESSURE(environment) + var/total_moles = TOTAL_MOLES(environment) - results.fields += "Tank Pressure: [round(pressure,0.1)] kPa" - if(total_moles) - LIST_CONCENTRATION_REPORT(environment, results.fields) - results.fields += "|n" + src.results.fields += "Tank Pressure: [round(pressure,0.1)] kPa" + if(total_moles) + LIST_CONCENTRATION_REPORT(environment, src.results.fields) + src.results.fields += "|n" - else - results.fields += "Tank Empty" else - results.fields += "None. (Sensor Error?)" + src.results.fields += "Tank Empty" + else + src.results.fields += "None. (Sensor Error?)" - results.fields += "Atmospheric Tank #2:" - if(tank2) - var/datum/gas_mixture/environment = tank2.return_air() - var/pressure = MIXTURE_PRESSURE(environment) - var/total_moles = TOTAL_MOLES(environment) + src.results.fields += "Atmospheric Tank #2:" + if(tank2 && tank1?.air_contents) + var/datum/gas_mixture/environment = tank2.return_air() + var/pressure = MIXTURE_PRESSURE(environment) + var/total_moles = TOTAL_MOLES(environment) - results.fields += "Tank Pressure: [round(pressure,0.1)] kPa" - if(total_moles) - LIST_CONCENTRATION_REPORT(environment, results.fields) - results.fields += "|n" + src.results.fields += "Tank Pressure: [round(pressure,0.1)] kPa" + if(total_moles) + LIST_CONCENTRATION_REPORT(environment, src.results.fields) + src.results.fields += "|n" - else - results.fields += "Tank Empty" else - results.fields += "None. (Sensor Error?)" - - results.fields += "VR Bomb Monitor log:|nWaiting for monitor..." - - src.tape.root.add_file( src.results ) - src.sync(src.host_id) - return - - //Called by our vrbomb as it heats up (Or doesn't.) - update_bomb_log(var/newdata, var/sync_log = 0) - if(!results || !newdata || !tape) - return + src.results.fields += "Tank Empty" + else + src.results.fields += "None. (Sensor Error?)" - results.fields += newdata - if (sync_log) - src.sync(src.host_id) - return + src.results.fields += "VR Bomb Monitor log:|nWaiting for monitor..." - update_icon() - if(tank1) //Update tank overlays. - UpdateOverlays(image(src.icon,"bscanner-tank1"), "tank1") - else - UpdateOverlays(null, "tank1") - if(tank2) - UpdateOverlays(image(src.icon,"bscanner-tank2"), "tank2") - else - UpdateOverlays(null, "tank2") + src.tape.root.add_file( src.results ) + src.sync(src.host_id) + return - if(status & BROKEN) - icon_state = "bomb_scannerb" - return - if(status & NOPOWER) - icon_state = "bomb_scanner-p" + ///Called by our vrbomb as it heats up (Or doesn't.) + proc/update_bomb_log(var/newdata, var/sync_log = 0) + if(!src.results || !newdata || !tape) return - if(src.tank1 && src.tank2) - icon_state = "bomb_scanner1" - else - icon_state = "bomb_scanner0" + src.results.fields += newdata + if (sync_log) + src.sync(src.host_id) return -//Generic disk to hold VR bomb log +///Generic disk to hold VR bomb log /obj/item/disk/data/bomb_tester desc = "You shouldn't be seeing this!" title = "TEMPBUFFER" @@ -1767,18 +1755,19 @@ TYPEINFO(/obj/machinery/networked/printer) return else if (istype(W, /obj/item/paper_bin)) //Load up the printer! + var/obj/item/paper_bin/bin = W if (sheets_remaining >= MAX_SHEETS) boutput(user, SPAN_ALERT("The tray is full!")) return var/to_remove = MAX_SHEETS - sheets_remaining - if(W:amount > to_remove) - W:amount -= to_remove + if(bin.amount_left > to_remove) + bin.amount_left -= to_remove boutput(user, "You load [to_remove] sheets into the tray.") src.sheets_remaining += to_remove else - boutput(user, "You load [W:amount] sheets into the tray.") - src.sheets_remaining += W:amount + boutput(user, "You load [bin.amount_left] sheets into the tray.") + src.sheets_remaining += bin.amount_left user.drop_item() qdel(W) diff --git a/code/modules/networks/computer3/mainframe2/telesci.dm b/code/modules/networks/computer3/mainframe2/telesci.dm index efd573e348621..c14d8400f2098 100644 --- a/code/modules/networks/computer3/mainframe2/telesci.dm +++ b/code/modules/networks/computer3/mainframe2/telesci.dm @@ -792,7 +792,6 @@ TYPEINFO(/obj/machinery/networked/telepad) var/summon = pick( /mob/living/critter/zombie, /mob/living/critter/bear, - /mob/living/carbon/human/npc/syndicate, /mob/living/critter/martian/soldier, /mob/living/critter/lion, /obj/critter/yeti, diff --git a/code/modules/parallax/parallax_render_sources/parallax_render_source_groups.dm b/code/modules/parallax/parallax_render_sources/parallax_render_source_groups.dm index fe282ac91261b..e4ec38abc2279 100644 --- a/code/modules/parallax/parallax_render_sources/parallax_render_source_groups.dm +++ b/code/modules/parallax/parallax_render_sources/parallax_render_source_groups.dm @@ -134,6 +134,11 @@ Z_LEVEL_PARALLAX_RENDER_SOURCE_GROUP(5) /atom/movable/screen/parallax_render_source/foreground/dust/sparse, ) +/datum/parallax_render_source_group/planet/lava_moon + parallax_render_source_types = list( + /atom/movable/screen/parallax_render_source/foreground/embers, + ) + /datum/parallax_render_source_group/planet/desert/setup_render_sources() var/angle = rand(110, 250) var/scroll_speed = rand(75, 175) diff --git a/code/modules/parallax/parallax_render_sources/parallax_render_sources.dm b/code/modules/parallax/parallax_render_sources/parallax_render_sources.dm index c4f96a0364e89..5361cdac5e61f 100644 --- a/code/modules/parallax/parallax_render_sources/parallax_render_sources.dm +++ b/code/modules/parallax/parallax_render_sources/parallax_render_sources.dm @@ -127,7 +127,20 @@ static_colour = TRUE parallax_value = 0.5 scroll_speed = 500 + scroll_angle = 0 +// scrolling doesnt work if scroll_angle is changed after initialisation i think. So I made these. +/atom/movable/screen/parallax_render_source/meteor_shower/north + scroll_angle = 180 + +/atom/movable/screen/parallax_render_source/meteor_shower/south + scroll_angle = 0 + +/atom/movable/screen/parallax_render_source/meteor_shower/east + scroll_angle = 270 + +/atom/movable/screen/parallax_render_source/meteor_shower/west + scroll_angle = 90 // Effects diff --git a/code/modules/polling/poll_ballot.dm b/code/modules/polling/poll_ballot.dm new file mode 100644 index 0000000000000..dcbf9e91cfa02 --- /dev/null +++ b/code/modules/polling/poll_ballot.dm @@ -0,0 +1,368 @@ +#define POLL_ACTION_CANCEL "cancel" + +/client/var/datum/poll_ballot/poll_ballot = new +/client/verb/players_polls() + set name = "Player Polls" + set desc = "Cast your vote in a Goonstation poll" + set category = "Commands" + poll_ballot.ui_interact(mob) + +/datum/poll_ballot + var/rate_limit_counter = 0 + /// soft cap to start forcing 1 second cooldown + var/const/rate_limit_soft_cap = 10 + var/filterInactive = TRUE + /// toggle for whether or not to show the votes on polls + var/showVotes = FALSE + +/datum/poll_ballot/ui_state(mob/user) + return tgui_always_state.can_use_topic(src, user) + +/datum/poll_ballot/ui_status(mob/user) + return tgui_always_state.can_use_topic(src, user) + +/datum/poll_ballot/ui_interact(mob/user, datum/tgui/ui) + ui = tgui_process.try_update_ui(user, src, ui) + if (!ui) + ui = new(user, src, "PollBallot") + ui.open() + +/datum/poll_ballot/ui_data(mob/user) + . = list( + "isAdmin" = isadmin(user), + "polls" = poll_manager.poll_data, + "playerId" = user.client.player.id, + "filterInactive" = src.filterInactive, + "showVotes" = src.showVotes + ) + +/datum/poll_ballot/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state) + . = ..() + if (.) + return + if (!ON_COOLDOWN(ui.user.client.player, "poll_ballot_rate_limit_reset", 1 MINUTE)) + rate_limit_counter = 0 + if ((rate_limit_counter >= rate_limit_soft_cap) && ON_COOLDOWN(ui.user.client.player, "poll_ballot_rate_limit", (1 SECOND + (rate_limit_counter - rate_limit_soft_cap)))) + boutput(ui.user, "<span class='alert'>You're doing that too often!</span>") + return + rate_limit_counter++ + switch(action) + if("addPoll") //TODO server specific + USR_ADMIN_ONLY + + var/question = tgui_input_text(ui.user, "Enter the poll question", "Add Poll", null, MAX_MESSAGE_LEN) + question = copytext(html_encode(question), 1, MAX_MESSAGE_LEN) + if (!question) return + + var/list/options = list() + var/option = TRUE + while(option) + option = tgui_input_text(ui.user, "Enter a poll option. Press Cancel to stop adding new options", "Add Poll", null, MAX_MESSAGE_LEN) + option = copytext(html_encode(option), 1, MAX_MESSAGE_LEN) + if (option) + options += option + if (!options) return + + var/multiple_choice = tgui_alert(ui.user, "Multiple choice?", "Add Poll", list("Yes", "No")) + if (multiple_choice == "Yes") + multiple_choice = TRUE + else + multiple_choice = FALSE + + var/servers = pick_servers(ui.user) + if (servers == POLL_ACTION_CANCEL) return // user canceled + var/expires_at = pick_expiration_date(ui.user) + if (expires_at == POLL_ACTION_CANCEL) return // user canceled + + var/list/poll + try + var/datum/apiRoute/polls/add/addPoll = new + addPoll.buildBody( + ui.user.ckey, + question, + multiple_choice, + expires_at, + options, + servers + ) + var/datum/apiModel/Tracked/PollResource/pollResource = apiHandler.queryAPI(addPoll) + poll = pollResource.ToList() + catch (var/exception/e) + var/datum/apiModel/Error/error = e.name + logTheThing(LOG_DEBUG, null, "Failed to add a poll: [error.message]") + return FALSE + + // Add this poll to our cached data + poll_manager.poll_data.Insert(1, list(poll)) + + var/alert_the_players = tgui_alert(ui.user, "Alert the players?", "Add Poll", list("Yes", "No")) + if (alert_the_players == "Yes") + // alert the players of the new poll! + for (var/client/C in clients) + boutput(C, SPAN_NOTICE("A new poll is now available. <a href='byond://winset?command=Player-Polls'>Click here to vote!</a>")) + playsound_global(world, 'sound/misc/prayerchime.ogg', 100, channel = VOLUME_CHANNEL_MENTORPM) + + . = TRUE + + if ("deletePoll") + USR_ADMIN_ONLY + + try + var/datum/apiRoute/polls/delete/deletePoll = new + deletePoll.routeParams = list("[params["pollId"]]") + apiHandler.queryAPI(deletePoll) + catch (var/exception/e) + var/datum/apiModel/Error/error = e.name + logTheThing(LOG_DEBUG, null, "Failed to delete a poll: [error.message]") + return FALSE + + // Remove this poll from our cached data + for (var/i in 1 to length(poll_manager.poll_data)) + if (poll_manager.poll_data[i]["id"] != params["pollId"]) + continue + poll_manager.poll_data.Remove(list(poll_manager.poll_data[i])) + break + . = TRUE + + if ("editPoll") + USR_ADMIN_ONLY + + var/question + var/expires_at + var/servers + for (var/list/poll in poll_manager.poll_data) + if (poll["id"] == text2num(params["pollId"])) + question = poll["question"] + expires_at = poll["expires_at"] + servers = poll["servers"] + break + + question = tgui_input_text(ui.user, "Enter the poll question", "Edit Poll", question, MAX_MESSAGE_LEN) + question = copytext(html_encode(question), 1, MAX_MESSAGE_LEN) + if (!question) return + + try + var/datum/apiRoute/polls/edit/editPoll = new + editPoll.routeParams = list("[params["pollId"]]") + editPoll.buildBody(question, expires_at, servers) + apiHandler.queryAPI(editPoll) + catch (var/exception/e) + var/datum/apiModel/Error/error = e.name + logTheThing(LOG_DEBUG, null, "Failed to edit a poll: [error.message]") + return FALSE + + poll_manager.sync_single_poll(params["pollId"]) + . = TRUE + + if ("editExpiration") + if (!ui.user.client.holder) return FALSE + USR_ADMIN_ONLY + + var/question + var/expires_at + var/servers + for (var/list/poll in poll_manager.poll_data) + if (poll["id"] == text2num(params["pollId"])) + question = poll["question"] + expires_at = poll["expires_at"] + servers = poll["servers"] + break + + expires_at = src.pick_expiration_date(ui.user) + if (expires_at == POLL_ACTION_CANCEL) return // user canceled + + try + var/datum/apiRoute/polls/edit/editPoll = new + editPoll.routeParams = list("[params["pollId"]]") + editPoll.buildBody(question, expires_at, servers) + apiHandler.queryAPI(editPoll) + catch (var/exception/e) + var/datum/apiModel/Error/error = e.name + logTheThing(LOG_DEBUG, null, "Failed to edit a poll: [error.message]") + return FALSE + + poll_manager.sync_single_poll(params["pollId"]) + . = TRUE + + if ("editServers") + if (!ui.user.client.holder) return FALSE + USR_ADMIN_ONLY + + var/question + var/expires_at + var/servers + for (var/list/poll in poll_manager.poll_data) + if (poll["id"] == text2num(params["pollId"])) + question = poll["question"] + expires_at = poll["expires_at"] + servers = poll["servers"] + break + + servers = src.pick_servers(ui.user) + if (servers == POLL_ACTION_CANCEL) return // user canceled + + try + var/datum/apiRoute/polls/edit/editPoll = new + editPoll.routeParams = list("[params["pollId"]]") + editPoll.buildBody(question, expires_at, servers) + apiHandler.queryAPI(editPoll) + catch (var/exception/e) + var/datum/apiModel/Error/error = e.name + logTheThing(LOG_DEBUG, null, "Failed to edit a poll: [error.message]") + return FALSE + + poll_manager.sync_single_poll(params["pollId"]) + . = TRUE + + if ("addOption") + USR_ADMIN_ONLY + + var/option = tgui_input_text(ui.user, "Enter a poll option", "Add Option", null, MAX_MESSAGE_LEN) + option = copytext(html_encode(option), 1, MAX_MESSAGE_LEN) + if (!option) return + + try + var/datum/apiRoute/polls/options/add/addPollOption = new + addPollOption.routeParams = list("[params["pollId"]]") + addPollOption.buildBody(option) + apiHandler.queryAPI(addPollOption) + catch (var/exception/e) + var/datum/apiModel/Error/error = e.name + logTheThing(LOG_DEBUG, null, "Failed to add an option to a poll: [error.message]") + return FALSE + + poll_manager.sync_single_poll(params["pollId"]) + . = TRUE + + if ("deleteOption") + USR_ADMIN_ONLY + + try + var/datum/apiRoute/polls/options/delete/deletePollOption = new + deletePollOption.routeParams = list("[params["optionId"]]") + apiHandler.queryAPI(deletePollOption) + catch (var/exception/e) + var/datum/apiModel/Error/error = e.name + logTheThing(LOG_DEBUG, null, "Failed to delete an option from a poll: [error.message]") + return FALSE + + poll_manager.sync_single_poll(params["pollId"]) + . = TRUE + + if ("editOption") + USR_ADMIN_ONLY + + var/option + for (var/list/poll as anything in poll_manager.poll_data) + if (poll["id"] == text2num(params["pollId"])) + for (var/list/pollOption in poll["options"]) + if (pollOption["id"] == text2num(params["optionId"])) + option = pollOption["option"] + break + + option = tgui_input_text(ui.user, "Enter a poll option", "Edit Option", option, MAX_MESSAGE_LEN) + option = copytext(html_encode(option), 1, MAX_MESSAGE_LEN) + if (!option) return + + try + var/datum/apiRoute/polls/options/edit/editPollOption = new + editPollOption.routeParams = list("[params["optionId"]]") + editPollOption.buildBody(option, null) + apiHandler.queryAPI(editPollOption) + catch (var/exception/e) + var/datum/apiModel/Error/error = e.name + logTheThing(LOG_DEBUG, null, "Failed to edit an option on a poll: [error.message]") + return FALSE + + poll_manager.sync_single_poll(params["pollId"]) + . = TRUE + + if ("vote") + var/player_id = ui.user.client.player.id + if (!player_id) return + + // determine if we are treating this as a pick or unpick + var/voted_for_option = FALSE + for (var/list/poll in poll_manager.poll_data) + if (poll["id"] != text2num(params["pollId"])) + continue + for (var/list/option in poll["options"]) + if (option["id"] != text2num(params["optionId"])) + continue + if (ui.user.client.player.id in option["answers_player_ids"]) + voted_for_option = TRUE + break + break + + try + if (voted_for_option) + var/datum/apiRoute/polls/options/unpick/unPickOption = new + unPickOption.routeParams = list("[params["optionId"]]") + unPickOption.buildBody(player_id) + apiHandler.queryAPI(unPickOption) + else + var/datum/apiRoute/polls/options/pick/pickOption = new + pickOption.routeParams = list("[params["optionId"]]") + pickOption.buildBody(player_id) + apiHandler.queryAPI(pickOption) + catch (var/exception/e) + var/datum/apiModel/Error/error = e.name + logTheThing(LOG_DEBUG, null, "Failed to pick/unpick an option on a poll: [error.message]") + return FALSE + + poll_manager.sync_single_poll(params["pollId"]) + . = TRUE + + if("toggle-filterInactive") + filterInactive = !filterInactive + . = TRUE + + if ("toggle-showVotes") + showVotes = !showVotes + . = TRUE + + +/// prompts users to select a date in the future, returns an iso8601 string or null +/datum/poll_ballot/proc/pick_expiration_date(user) + . = POLL_ACTION_CANCEL + var/expiration_choice = tgui_input_list(user, "Set an expiration date", "Add Poll", + list( + "None", + "Custom Minutes", + "Custom Hours", + "Custom Days", + "Custom ISO8601 Timestamp", + )) + switch (expiration_choice) + if ("None") + . = null + if ("Custom Minutes") + var/input = tgui_input_number(user, "How many minutes?", "Add Poll", 1, 10000, 0) + . = toIso8601(addTime(subtractTime(world.realtime, hours = world.timezone), minutes = input)) + if ("Custom Hours") + var/input = tgui_input_number(user, "How many hours?", "Add Poll", 1, 10000, 0) + . = toIso8601(addTime(subtractTime(world.realtime, hours = world.timezone), hours = input)) + if ("Custom Days") + var/input = tgui_input_number(user, "How many days?", "Add Poll", 1, 10000, 0) + . = toIso8601(addTime(subtractTime(world.realtime, hours = world.timezone), days = input)) + if ("Custom ISO8601 Timestamp") + var/input = tgui_input_text(user, "Please provide a valid ISO8601 formatted timestamp?", "Add Poll", toIso8601(subtractTime(world.realtime, hours = world.timezone))) + if (validateIso8601(input)) + . = input + else + tgui_alert(user, "Invalid timestamp provided, poll defaulting to no expiration", "Error") + +/// prompts users to select which servers to target for polling +/datum/poll_ballot/proc/pick_servers(user) + var/servers = tgui_alert(user, "Poll type?", "Targeted Servers", list("Local", "Global", "RP Only")) + switch(servers) + if ("Local") + . = list(config.server_id) + if ("Global") + . = list(poll_manager.global_server_id) + if ("RP Only") + . = list(poll_manager.rp_only_server_id) + else + . = POLL_ACTION_CANCEL + +#undef POLL_ACTION_CANCEL diff --git a/code/modules/polling/poll_manager.dm b/code/modules/polling/poll_manager.dm new file mode 100644 index 0000000000000..61b4d9784a680 --- /dev/null +++ b/code/modules/polling/poll_manager.dm @@ -0,0 +1,55 @@ +var/global/datum/poll_manager/poll_manager = new +/// master poll controller for the server. Caches the results, syncs with api +/datum/poll_manager + var/list/poll_data = list() + /// server id for global polls + var/const/global_server_id = "global" + /// server id for rp only polls + var/const/rp_only_server_id = "rp_only" + + /// fetch and cache the latest poll data from the API + proc/sync_polldata() + set waitfor = FALSE + var/datum/apiModel/Paginated/PollResourceList/polls + try + var/datum/apiRoute/polls/get/getPolls = new + getPolls.queryParams = list( + "filters" = list( +#ifdef RP_MODE + "servers" = list(config.server_id, global_server_id, rp_only_server_id) +#else + "servers" = list(config.server_id, global_server_id) +#endif + ) + ) + polls = apiHandler.queryAPI(getPolls) + catch (var/exception/e) + var/datum/apiModel/Error/error = e.name + logTheThing(LOG_DEBUG, null, "Failed to fetch poll data: [error.message]") + return + + poll_data = polls.ToList()["data"] + + + proc/sync_single_poll(pollId) + var/list/poll + var/datum/apiModel/Tracked/PollResource/pollResource + try + var/datum/apiRoute/polls/show/getPoll = new + getPoll.routeParams = list("[pollId]") + pollResource = apiHandler.queryAPI(getPoll) + catch (var/exception/e) + var/datum/apiModel/Error/error = e.name + logTheThing(LOG_DEBUG, null, "Failed to fetch data for poll #[pollId]: [error.message]") + return + + poll = pollResource.ToList() + + for (var/i in 1 to length(poll_data)) + if (poll_data[i]["id"] != pollId) + continue + if (!poll) + poll_data.Remove(list(poll_data[i])) + return + poll_data[i] = poll + break diff --git a/code/modules/power/TEG.dm b/code/modules/power/TEG.dm index 83a1d4534d029..36eac5de822dc 100644 --- a/code/modules/power/TEG.dm +++ b/code/modules/power/TEG.dm @@ -981,6 +981,9 @@ datum/pump_ui/circulator_ui return if(TEG_SEMI_STATE_MISSING) if(istype(W,/obj/item/teg_semiconductor) || (istype(W,/obj/item/sheet) && (W.amount >= 10))) + if (W.cant_drop && istype(W,/obj/item/teg_semiconductor)) + boutput(user, SPAN_ALERT("You can't put that in [src] when it's attached to you!")) + return actions.start(new /datum/action/bar/icon/teg_semiconductor_replace(src, W, 5 SECONDS), user) return if(TEG_SEMI_STATE_BOOTLEG_SEMI) @@ -1598,197 +1601,207 @@ TYPEINFO(/obj/machinery/power/furnace/thermo) ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -#define PUMP_POWERLEVEL_1 100 -#define PUMP_POWERLEVEL_2 500 -#define PUMP_POWERLEVEL_3 1000 -#define PUMP_POWERLEVEL_4 2500 -#define PUMP_POWERLEVEL_5 5000 +#define PUMP_ON 1 +#define PUMP_OFF 0 -/datum/pump_infoset - var/power_status = 0 - var/target_output = 0 - var/id = "" +#define PUMP_ALIVE 1 +#define PUMP_DEAD 0 // Pump left us on read +#define PUMP_SCHRODINGER -1 // irony -/obj/machinery/computer/atmosphere/pumpcontrol - req_access = list() //Change - req_access_txt = "" +/// Signals which claim the device to be of identifier "AGP" are exclusively pumps or pump wannabes (fine) +#define DEVICE_IS_PUMP(signal) (signal.data["device"] == "AGP") +/// Do we have all the information we should Really Really Have? +#define HAS_REQUIRED_DATA(signal) ((signal.data["netid"] != null) && (signal.data["tag"] != null) && (signal.data["power"] != null) && (signal.data["target_output"] != null) && (signal.data["min_output"] != null) && (signal.data["max_output"] != null)) +/obj/machinery/computer/atmosphere/pumpcontrol icon = 'icons/obj/computer.dmi' icon_state = "computer_generic" name = "Pump control computer" - frequency = 1225 - - var/list/pump_infos - - var/last_change = 0 - var/message_delay = 1 MINUTE - - - New() - . = ..() - pump_infos = new/list() - src.AddComponent( \ - /datum/component/packet_connected/radio, \ - null, \ - frequency, \ - null, \ - "receive_signal", \ - FALSE, \ - "pumpcontrol", \ - FALSE \ - ) + /// Default frequency of the computer. Can be varedited so it only listens to relevant pumps, e.g. toxins computer controls toxins pumps + frequency = FREQ_PUMP_CONTROL + + /// This is a list in which contains pump information datums keyed by their areas. + // e.g. pump_infoset["toxins"] has (pump_1, pump_2, pump_3) + var/list/pump_infoset + +/obj/machinery/computer/atmosphere/pumpcontrol/New() + . = ..() + + pump_infoset = new/list() + src.AddComponent( \ + /datum/component/packet_connected/radio, \ + null, \ + frequency, \ + null, \ + "receive_signal", \ + FALSE, \ + "pumpcontrol", \ + FALSE \ + ) - attack_hand(mob/user) - if(status & (BROKEN | NOPOWER)) - return - user << browse(return_text(),"window=computer;can_close=1") - src.add_dialog(user) - onclose(user, "computer") +/// Add or update a new pump +/obj/machinery/computer/atmosphere/pumpcontrol/receive_signal(datum/signal/signal) + if (!signal) return + if (signal.encryption) return + if (!DEVICE_IS_PUMP(signal)) return + if (!HAS_REQUIRED_DATA(signal)) return + /* Setup pump information from pump broadcast, which currently has these vars: + "tag" - Name of pump + "netid" - Network ID of pump + "device" - "AGP" unique pump identifier string + "power" - "on" or "off" depending on state + "min_output" - MIN_PRESSURE (0kpa) + "max_output" - MAX_PRESSURE (~15000kpa) + "target_output"- current pump output + "address_tag" = "pumpcontrol" + "processing" - Currently waiting to recieve data back from this pump + "area_name" - Name of the area the pump is in + "alive" - Whether or not the pump has broadcasted back. Used while checking for if pumps are unreachable or not + */ + var/list/pump_data_ref = src.getPump(signal.data["netid"]) + if (pump_data_ref) + // We exist in the list already, update information instead + for (var/key in signal.data) + pump_data_ref[key] = signal.data[key] + pump_data_ref["processing"] = FALSE + pump_data_ref["alive"] = PUMP_ALIVE + return - process() - ..() - if(status & (BROKEN | NOPOWER)) - return - //src.updateUsrDialog() + var/list/infoset = new() + for (var/key in signal.data) + infoset[key] = signal.data[key] + var/area/A = get_area(signal.source) + if (!A) + return + infoset["area_name"] = A.name + infoset["processing"] = FALSE // are we processing a packet request rn? + infoset["alive"] = TRUE + + var/area_name_index = src.pump_infoset.Find(infoset["area_name"]) + if (!area_name_index) + // We are first of an area, create our place in the list + src.pump_infoset[infoset["area_name"]] = list() + src.pump_infoset[infoset["area_name"]][infoset["netid"]] = infoset + else + // We are not first of an area, place us in the list alphabetically + var/iter = 1 + var/list/L = src.pump_infoset[infoset["area_name"]] + while ((iter <= length(L)) && sorttext(infoset["area_name"], L[iter]) == -1) + iter += 1 + + // Insert key first + L.Insert(iter, infoset["netid"]) + L[infoset["netid"]] = infoset + +/obj/machinery/computer/atmosphere/pumpcontrol/process() + ..() + if(status & (BROKEN | NOPOWER)) + return + if(!length(src.pump_infoset)) + src.request_data() // get data for first time + src.check_if_alive() + +/// Check for pumps that 'sploded or are otherwise unreachable +/obj/machinery/computer/atmosphere/pumpcontrol/proc/check_if_alive(override_cooldown = FALSE) + if (!override_cooldown && ON_COOLDOWN(src, "check_pumps_living", 1 MINUTE)) return + for (var/area_name in src.pump_infoset) + for (var/pump in src.pump_infoset[area_name]) + if (src.pump_infoset[area_name][pump]["alive"] == PUMP_ALIVE) // Don't modify dead ones if they were just jammed theyll respond + src.pump_infoset[area_name][pump]["alive"] = PUMP_SCHRODINGER // https://i.imgur.com/mUfxPmb.png + + src.request_data() + SPAWN(5 SECONDS) + for (var/area_name in src.pump_infoset) + for (var/pump in src.pump_infoset[area_name]) + if (src.pump_infoset[area_name][pump]["alive"] != PUMP_ALIVE) + src.pump_infoset[area_name][pump]["alive"] = PUMP_DEAD + +/// Get a pump by net id. Does not ask for pump data from pump +/obj/machinery/computer/atmosphere/pumpcontrol/proc/getPump(var/netid) + for (var/area_name in src.pump_infoset) + var/list/L = src.pump_infoset[area_name] + for (var/pump in L) + if (pump == netid) + return L[pump] + return 0 + +/// Get a pump by net id and toggle its power +/obj/machinery/computer/atmosphere/pumpcontrol/proc/togglePump(var/netid) + var/list/pump = src.getPump(netid) + if (!pump || pump["processing"]) return + var/datum/signal/signal = get_free_signal() + signal.transmission_method = TRANSMISSION_RADIO + signal.source = src + signal.data["tag"] = pump["tag"] + signal.data["command"] = "power_toggle" + SEND_SIGNAL(src, COMSIG_MOVABLE_POST_RADIO_PACKET, signal) + // Mimic action happening to pretend we're fast + pump["processing"] = TRUE + pump["power"] = (pump["power"] == "on") ? "off" : "on" + src.request_data() + +/obj/machinery/computer/atmosphere/pumpcontrol/proc/setPressure(var/netid, var/new_pressure) + var/list/pump = src.getPump(netid) + if (!pump || pump["processing"] || !isnum_safe(new_pressure)) return + new_pressure = clamp(new_pressure, pump["min_output"], pump["max_output"]) + var/datum/signal/signal = get_free_signal() + signal.transmission_method = TRANSMISSION_RADIO + signal.source = src + signal.data["tag"] = pump["tag"] + signal.data["command"] = "set_output_pressure" + signal.data["parameter"] = new_pressure + SEND_SIGNAL(src, COMSIG_MOVABLE_POST_RADIO_PACKET, signal) + // Mimic action happening to pretend we're fast + pump["processing"] = TRUE + pump["target_output"] = new_pressure + src.request_data() + +/obj/machinery/computer/atmosphere/pumpcontrol/proc/request_data() + var/datum/signal/signal = get_free_signal() + signal.transmission_method = TRANSMISSION_RADIO + signal.source = src + signal.data["command"] = "broadcast_status" + SEND_SIGNAL(src, COMSIG_MOVABLE_POST_RADIO_PACKET, signal) + +/obj/machinery/computer/atmosphere/pumpcontrol/ui_interact(mob/user, datum/tgui/ui) + ui = tgui_process.try_update_ui(user, src, ui) + if (!ui) + ui = new(user, src, "PumpControl") + ui.open() - receive_signal(datum/signal/signal) - if(!signal || signal.encryption) +/obj/machinery/computer/atmosphere/pumpcontrol/ui_static_data(mob/user) + return list("frequency" = src.frequency) + +/obj/machinery/computer/atmosphere/pumpcontrol/ui_data(mob/user) + return list("area_list" = src.pump_infoset) + +/obj/machinery/computer/atmosphere/pumpcontrol/ui_act(action, params) + switch (action) + if ("togglePump") + playsound(src.loc, 'sound/machines/keypress.ogg', 30, 1, -15) + src.togglePump(params["netid"]) + if ("setPressure") + src.setPressure(params["netid"], params["pressure"]) + if ("refresh") + playsound(src.loc, 'sound/machines/keypress.ogg', 30, 1, -15) + src.check_if_alive(override_cooldown=TRUE) return + src.check_if_alive() - if(signal.data["device"] == "AGP") - if (!signal.data["tag"] || !signal.data["power"] || !signal.data["target_output"]) - return - - var/datum/pump_infoset/I = new() - I.id = signal.data["tag"] - I.power_status = signal.data["power"] - I.target_output = signal.data["target_output"] - - if (!(signal.source in pump_infos)) - var/area/pump_area = get_area(signal.source) - if (istype(pump_area)) - var/area_label_position = pump_infos.Find(pump_area.name) - if (area_label_position) - while (1) - area_label_position++ - if (area_label_position > pump_infos.len) - break - var/datum/pump_infoset/infoset = pump_infos[ pump_infos[area_label_position] ] - if (!istype(infoset)) - break - - if (sorttext(I.id, infoset.id) == 1) - break - - pump_infos.Insert(area_label_position, signal.source) - - else - pump_infos += pump_area.name - pump_infos += signal.source - - pump_infos[signal.source] = I - - src.updateUsrDialog() - - proc/return_text() - var/pump_html = "" - //var/count = 1 - for(var/A in pump_infos) - if (istext(A)) - pump_html += "<center><b>[A]</b></center><br>" - continue - - var/datum/pump_infoset/I = pump_infos[A] - if (!istype(I)) - continue - pump_html += "<B>[I.id] Status</B>:<BR>" - //pump_html += "<B>Pump [count] Status</B>: <BR>" - //pump_html += " Pump Id: [I.id]<BR>" - pump_html += " Pump Status: <U><A href='?src=\ref[src];toggle=[I.id]'>[I.power_status == "on" ? "On":"Off"]</A></U><BR>" - var/current_pump_level = 0 - switch (I.target_output) - if (1 to PUMP_POWERLEVEL_1) - current_pump_level = 1 - if (PUMP_POWERLEVEL_1 + 1 to PUMP_POWERLEVEL_2) - current_pump_level = 2 - if (PUMP_POWERLEVEL_2 + 1 to PUMP_POWERLEVEL_3) - current_pump_level = 3 - if (PUMP_POWERLEVEL_3 + 1 to PUMP_POWERLEVEL_4) - current_pump_level = 4 - if (PUMP_POWERLEVEL_4 + 1 to INFINITY) - current_pump_level = 5 - pump_html += " Pump Pressure Level: " - for (var/i =1, i < 6, i++) - if (current_pump_level == i) - pump_html += "<b>[i]</b> " - else - pump_html += "<A href='?src=\ref[src];setoutput=[i]&target=[I.id]'>[i]</A> " - - pump_html += "<BR><BR>" - //count++ +/obj/machinery/computer/atmosphere/pumpcontrol/attack_hand(mob/user) + . = ..() + src.ui_interact(user) + src.check_if_alive() - var/output = "<B>[name]</B><BR><A href='?src=\ref[src];refresh=1'>Refresh</A><BR><HR><B>Pump Data: <BR><BR></B>[pump_html]<HR>" - return output - - Topic(href, href_list) - if(..()) - return - if(!allowed(usr)) - boutput(usr, SPAN_ALERT("Access Denied!")) - return +#undef DEVICE_IS_PUMP +#undef HAS_REQUIRED_DATA +#undef PUMP_ON +#undef PUMP_OFF +#undef PUMP_ALIVE +#undef PUMP_DEAD +#undef PUMP_SCHRODINGER - if(href_list["toggle"]) - src.add_fingerprint(usr) - var/datum/signal/signal = get_free_signal() - signal.transmission_method = 1 //radio - signal.source = src - signal.data["tag"] = href_list["toggle"] - signal.data["command"] = "power_toggle" - SEND_SIGNAL(src, COMSIG_MOVABLE_POST_RADIO_PACKET, signal) - - if(href_list["setoutput"]) - src.add_fingerprint(usr) - if(!href_list["target"]) - return 0 - - var/new_target = 0 - switch (href_list["setoutput"]) - if ("1") - new_target = PUMP_POWERLEVEL_1 - if ("2") - new_target = PUMP_POWERLEVEL_2 - if ("3") - new_target = PUMP_POWERLEVEL_3 - if ("4") - new_target = PUMP_POWERLEVEL_4 - if ("5") - new_target = PUMP_POWERLEVEL_5 - - if (!new_target) - return - - var/datum/signal/signal = get_free_signal() - signal.transmission_method = 1 //radio - signal.source = src - signal.data["tag"] = href_list["target"] - signal.data["command"] = "set_output_pressure" - signal.data["parameter"] = new_target - SEND_SIGNAL(src, COMSIG_MOVABLE_POST_RADIO_PACKET, signal) - - if(href_list["refresh"]) - src.add_fingerprint(usr) - var/datum/signal/signal = get_free_signal() - signal.transmission_method = 1 //radio - signal.source = src - signal.data["command"] = "broadcast_status" - SEND_SIGNAL(src, COMSIG_MOVABLE_POST_RADIO_PACKET, signal) - -#undef PUMP_POWERLEVEL_1 -#undef PUMP_POWERLEVEL_2 -#undef PUMP_POWERLEVEL_3 -#undef PUMP_POWERLEVEL_4 -#undef PUMP_POWERLEVEL_5 #undef LEFT_CIRCULATOR #undef RIGHT_CIRCULATOR #undef CIRCULATOR_MAX_PRESSURE diff --git a/code/modules/power/cell.dm b/code/modules/power/cell.dm index 9f2192f220e54..e5949a7820b1c 100644 --- a/code/modules/power/cell.dm +++ b/code/modules/power/cell.dm @@ -317,10 +317,11 @@ max_charge = 10 recharge_rate = 0 -/obj/item/ammo/power_cell/self_charging/potato/New(var/loc, var/potency, var/endurance) +/obj/item/ammo/power_cell/self_charging/potato/New(var/loc, var/potency, var/endurance) //capped, approches double stats of disruptor cell var/rngfactor = 2 + rand() - src.max_charge += round(potency/rngfactor) - src.recharge_rate = 0.25 * round(endurance/rand(25,30)) +// src.max_charge += round(potency/rngfactor) + src.max_charge += round(190 * potency / (potency + 100 * rngfactor)) //asymptote at 200pu + src.recharge_rate = 0.25 * round(0.01 + 20 * endurance / (endurance + rand(400,500))) //asymptote at 5 recharge rate src.charge = src.max_charge ..() diff --git a/code/modules/power/lighting.dm b/code/modules/power/lighting.dm index 0c29d70c9e840..7e9ab470d401a 100644 --- a/code/modules/power/lighting.dm +++ b/code/modules/power/lighting.dm @@ -7,6 +7,13 @@ // defines moved to _setup.dm by ZeWaka #define INSTALL_WALL 1 #define INSTALL_FLOOR 2 +/// Amount of time it takes to attach a light fixture to a tile by hand +#define LIGHT_FIXTURE_ATTACH_TIME 4 SECONDS +/// Amount of time it takes to remove a light fixture from a tile by hand +#define LIGHT_FIXTURE_DETACH_TIME 2 SECONDS +/// Probabilty a worn/burned out light will break +#define WORN_LIGHT_BREAKPROB 5 + TYPEINFO(/obj/item/light_parts) mats = 4 @@ -36,6 +43,7 @@ TYPEINFO(/obj/item/light_parts) // For metal sheets. Can't easily change an item's vars the way it's set up (Convair880). /obj/item/light_parts/bulb + name = "bulb fixture parts" icon_state = "bulb-fixture" fixture_type = /obj/machinery/light/small installed_icon_state = "bulb1" @@ -44,6 +52,7 @@ TYPEINFO(/obj/item/light_parts) light_type = /obj/item/light/bulb /obj/item/light_parts/floor + name = "floor fixture parts" icon_state = "floor-fixture" fixture_type = /obj/machinery/light/small/floor/netural installed_icon_state = "floor1" @@ -105,7 +114,7 @@ TYPEINFO(/obj/item/light_parts) if(!instantly) playsound(src, 'sound/items/Screwdriver.ogg', 50, 1) boutput(user, "You begin to attach the [src] to [target]...") - SETUP_GENERIC_ACTIONBAR(user, src, 4 SECONDS, /obj/item/light_parts/proc/finish_attaching,\ + SETUP_GENERIC_ACTIONBAR(user, src, LIGHT_FIXTURE_ATTACH_TIME, /obj/item/light_parts/proc/finish_attaching,\ list(target, user, dir), src.icon, src.icon_state, null, null) else finish_attaching(target, user, dir) @@ -379,7 +388,10 @@ ADMIN_INTERACT_PROCS(/obj/machinery/light, proc/broken, proc/admin_toggle, proc/ ..() current_lamp.light_status = LIGHT_BROKEN - +/obj/machinery/light/small/uninstall_fixture() + var/obj/item/light_parts/bulb/parts = new /obj/item/light_parts/bulb(get_turf(src)) + parts.copy_light(src) + qdel(src) //floor lights /obj/machinery/light/small/floor @@ -439,6 +451,11 @@ ADMIN_INTERACT_PROCS(/obj/machinery/light, proc/broken, proc/admin_toggle, proc/ ..() current_lamp.light_status = LIGHT_BROKEN +/obj/machinery/light/small/floor/uninstall_fixture() + var/obj/item/light_parts/floor/parts = new /obj/item/light_parts/floor(get_turf(src)) + parts.copy_light(src) + qdel(src) + /obj/machinery/light/emergency icon_state = "ebulb1" base_state = "ebulb" @@ -663,7 +680,7 @@ ADMIN_INTERACT_PROCS(/obj/machinery/light, proc/broken, proc/admin_toggle, proc/ brightness = 1 New() ..() - current_lamp.breakprob = 6.25 + current_lamp.breakprob = WORN_LIGHT_BREAKPROB // the desk lamp /obj/machinery/light/lamp @@ -814,19 +831,22 @@ ADMIN_INTERACT_PROCS(/obj/machinery/light, proc/broken, proc/admin_toggle, proc/ SPAWN(0) // now check to see if the bulb is burned out - if(current_lamp.light_status == LIGHT_OK) - if(on && current_lamp.rigged) - if (current_lamp.rigger) - message_admins("[key_name(current_lamp.rigger)]'s rigged bulb exploded in [src.loc.loc], [log_loc(src)].") - logTheThing(LOG_COMBAT, current_lamp.rigger, "'s rigged bulb exploded in [current_lamp.rigger.loc.loc] ([log_loc(src)])") - explode() - if(on && prob(current_lamp.breakprob)) - current_lamp.light_status = LIGHT_BURNED - icon_state = "[base_state]-burned" - on = 0 - light.disable() - elecflash(src,radius = 1, power = 2, exclude_center = 0) - logTheThing(LOG_STATION, null, "Light '[name]' burnt out (breakprob: [current_lamp.breakprob]) at ([log_loc(src)])") + switch(current_lamp.light_status) + if(LIGHT_OK) + if(!on) + return + if(current_lamp.rigged) + if (current_lamp.rigger) + message_admins("[key_name(current_lamp.rigger)]'s rigged bulb exploded in [src.loc.loc], [log_loc(src)].") + logTheThing(LOG_COMBAT, current_lamp.rigger, "'s rigged bulb exploded in [current_lamp.rigger.loc.loc] ([log_loc(src)])") + explode() + if(prob(current_lamp.breakprob)) + src.do_break() + if(prob(current_lamp.burnprob)) + src.do_burn_out() + if (LIGHT_BURNED) + if(prob(current_lamp.breakprob)) + src.do_break() /obj/machinery/light/proc/update_icon_state() if (!inserted_lamp) @@ -843,11 +863,37 @@ ADMIN_INTERACT_PROCS(/obj/machinery/light, proc/broken, proc/admin_toggle, proc/ icon_state = "[base_state]-broken" on = 0 +/obj/machinery/light/proc/do_break() + current_lamp.light_status = LIGHT_BROKEN + current_lamp.update() + icon_state = "[base_state]-broken" + on = 0 + light.disable() + elecflash(src, radius = 1, power = 2, exclude_center = 0) + logTheThing(LOG_STATION, null, "Light '[name]' broke itself (breakprob: [current_lamp.breakprob]) at ([log_loc(src)])") + +/obj/machinery/light/proc/do_burn_out() + var/original_brightness = src.light.brightness + playsound(src, 'sound/effects/snaptape.ogg', 30, TRUE) + src.light.set_brightness(original_brightness * 3) + logTheThing(LOG_STATION, null, "Light '[name]' burned out (burnprob: [current_lamp.burnprob]) at ([log_loc(src)])") + SPAWN(0.2 SECONDS) + src.light.set_brightness(original_brightness) + src.icon_state = "[base_state]-burned" + src.current_lamp.breakprob = WORN_LIGHT_BREAKPROB + src.current_lamp.light_status = LIGHT_BURNED + src.current_lamp.update() + playsound(src, 'sound/effects/sparks4.ogg', 40, TRUE) + src.on = FALSE + src.light.disable() + // attempt to set the light's on/off status // will not switch on if broken/burned/empty /obj/machinery/light/proc/seton(var/s) + var/old_on = on on = (s && current_lamp.light_status == LIGHT_OK) - update() + if(s != old_on) //don't update if trying to set to the same state + update() // examine verb /obj/machinery/light/examine(mob/user) @@ -967,14 +1013,10 @@ ADMIN_INTERACT_PROCS(/obj/machinery/light, proc/broken, proc/admin_toggle, proc/ boutput(user, "That's not safe with the power on!") return if (candismantle) - boutput(user, "You begin to unscrew the fixture from the wall...") + boutput(user, "You begin to loosen the fixture's screws...") playsound(src.loc, 'sound/items/Screwdriver.ogg', 50, 1) - if (!do_after(user, 2 SECONDS)) - return - boutput(user, "You unscrew the fixture from the wall.") - var/obj/item/light_parts/parts = new /obj/item/light_parts(get_turf(src)) - parts.copy_light(src) - qdel(src) + SETUP_GENERIC_ACTIONBAR(user, src, LIGHT_FIXTURE_DETACH_TIME, PROC_REF(uninstall_fixture),list(), src.icon, src.icon_state,\ + "[user] finishes uninstalling \the [src].", INTERRUPT_MOVE|INTERRUPT_ACT|INTERRUPT_ATTACKED|INTERRUPT_STUNNED|INTERRUPT_ACTION) return else boutput(user, "You can't seem to dismantle it.") @@ -1007,6 +1049,10 @@ ADMIN_INTERACT_PROCS(/obj/machinery/light, proc/broken, proc/admin_toggle, proc/ else boutput(user, "You hit the light!") +/obj/machinery/light/proc/uninstall_fixture() + var/obj/item/light_parts/parts = new /obj/item/light_parts(get_turf(src)) + parts.copy_light(src) + qdel(src) // returns whether this light has power // true if area has power and lightswitch is on @@ -1210,10 +1256,11 @@ TYPEINFO(/obj/item/light) force = 2 throwforce = 5 w_class = W_CLASS_SMALL + m_amt = 60 var/light_status = LIGHT_OK // LIGHT_OK, LIGHT_BURNED or LIGHT_BROKEN var/base_state - var/breakprob = 0 // number of times switched - m_amt = 60 + var/breakprob = 0 //! Chance for the bulb to burst + var/burnprob = 1 //! Chance for the bulb to burn out var/rigged = 0 // true if rigged to explode var/mob/rigger = null // mob responsible var/color_r = 1 @@ -1478,6 +1525,7 @@ TYPEINFO(/obj/item/light) desc = "A frosted red bulb." icon_state = "bulb-emergency" base_state = "bulb-emergency" + burnprob = 0 color_r = 1 color_g = 0.2 color_b = 0.2 @@ -1641,6 +1689,9 @@ TYPEINFO(/obj/item/light) else return ..() +#undef WORN_LIGHT_BREAKPROB +#undef LIGHT_FIXTURE_ATTACH_TIME +#undef LIGHT_FIXTURE_DETACH_TIME #undef INSTALL_WALL #undef INSTALL_FLOOR diff --git a/code/modules/power/terminal.dm b/code/modules/power/terminal.dm index e7d08bb3a9c24..53906e00cf07a 100644 --- a/code/modules/power/terminal.dm +++ b/code/modules/power/terminal.dm @@ -4,7 +4,7 @@ // using this solves the problem of having the APC in a wall yet also inside an area /obj/machinery/power/terminal - name = "terminal" + name = "power terminal" icon_state = "term" desc = "An underfloor wiring terminal for power equipment" level = 1 diff --git a/code/modules/projectiles/40mm.dm b/code/modules/projectiles/40mm.dm index 61fd87da8c27c..a50a6c9c5e930 100644 --- a/code/modules/projectiles/40mm.dm +++ b/code/modules/projectiles/40mm.dm @@ -36,7 +36,7 @@ toxic - poisons color_red = 0.8 color_green = 0 color_blue = 0 - impact_image_state = "bhole-large" + impact_image_state = "bullethole-large" //Any special things when it hits shit? diff --git a/code/modules/projectiles/bullet.dm b/code/modules/projectiles/bullet.dm index 5266275fa0dc6..5c6e2d82c2809 100644 --- a/code/modules/projectiles/bullet.dm +++ b/code/modules/projectiles/bullet.dm @@ -45,7 +45,7 @@ toxic - poisons window_pass = 0 implanted = /obj/item/implant/projectile // we create this overlay on walls when we hit them - impact_image_state = "bhole" + impact_image_state = "bullethole" hit_mob_sound = 'sound/impact_sounds/Flesh_Stab_2.ogg' @@ -60,7 +60,7 @@ toxic - poisons hit_type = DAMAGE_CUT implanted = /obj/item/implant/projectile/staple // HEH shot_sound = 'sound/impact_sounds/Generic_Snap_1.ogg' - impact_image_state = "bhole-staple" + impact_image_state = "bullethole-staple" casing = null /datum/projectile/bullet/vbullet @@ -83,7 +83,7 @@ toxic - poisons hit_type = DAMAGE_CUT implanted = /obj/item/implant/projectile/bullet_22 casing = /obj/item/casing/small - impact_image_state = "bhole-small" + impact_image_state = "bullethole-small" silentshot = 1 // It's supposed to be a stealth weapon, right (Convair880)? ricochets = TRUE @@ -106,7 +106,7 @@ toxic - poisons hit_type = DAMAGE_CUT implanted = /obj/item/implant/projectile/bullet_22 casing = /obj/item/casing/small - impact_image_state = "bhole-small" + impact_image_state = "bullethole-small" //0.223 /datum/projectile/bullet/assault_rifle @@ -117,7 +117,7 @@ toxic - poisons damage_type = D_KINETIC hit_type = DAMAGE_CUT shot_number = 1 - impact_image_state = "bhole-small" + impact_image_state = "bullethole-small" implanted = /obj/item/implant/projectile/bullet_308 casing = /obj/item/casing/rifle ricochets = TRUE @@ -148,7 +148,7 @@ toxic - poisons dissipation_delay = 7 damage_type = D_KINETIC hit_type = DAMAGE_CUT - impact_image_state = "bhole-small" + impact_image_state = "bullethole-small" implanted = /obj/item/implant/projectile/bullet_308 casing = /obj/item/casing/rifle fullauto_valid = 1 @@ -167,7 +167,7 @@ toxic - poisons hit_type = DAMAGE_CUT shot_number = 3 shot_delay = 120 MILLI SECONDS - impact_image_state = "bhole-small" + impact_image_state = "bullethole-small" implanted = /obj/item/implant/projectile/bullet_308 casing = /obj/item/casing/rifle ricochets = TRUE @@ -183,7 +183,7 @@ toxic - poisons shot_volume = 50 // holy fuck why was this so loud dissipation_delay = 10 casing = /obj/item/casing/rifle_loud - impact_image_state = "bhole-small" + impact_image_state = "bullethole-small" on_hit(atom/hit, dirflag, obj/projectile/proj) if(ishuman(hit)) @@ -215,7 +215,7 @@ toxic - poisons projectile_speed = 72 max_range = 100 casing = /obj/item/casing/rifle_loud - impact_image_state = "bhole-small" + impact_image_state = "bullethole-small" on_launch(obj/projectile/O) O.AddComponent(/datum/component/sniper_wallpierce, 3, 20) //pierces 3 walls/lockers/doors/etc. Does not function on restriced Z, rwalls and blast doors use 2 pierces @@ -280,7 +280,7 @@ toxic - poisons dissipation_delay = 12 damage_type = D_KINETIC hit_type = DAMAGE_CUT - impact_image_state = "bhole-small" + impact_image_state = "bullethole-small" implanted = /obj/item/implant/projectile/bullet_308 casing = /obj/item/casing/rifle var/slow = 1 @@ -318,7 +318,7 @@ toxic - poisons hit_type = DAMAGE_CUT implanted = /obj/item/implant/projectile/bullet_9mm casing = /obj/item/casing/small - impact_image_state = "bhole-small" + impact_image_state = "bullethole-small" ricochets = TRUE smg @@ -336,7 +336,7 @@ toxic - poisons dissipation_rate = 3 dissipation_delay = 8 projectile_speed = 48 - impact_image_state = "bhole-small" + impact_image_state = "bullethole-small" hit_type = DAMAGE_BLUNT implanted = /obj/item/implant/projectile/ninemmplastic casing = /obj/item/casing/small @@ -364,7 +364,7 @@ toxic - poisons name = "bullet" shot_sound = 'sound/weapons/9x19NATO.ogg' damage = 25 - impact_image_state = "bhole-small" + impact_image_state = "bullethole-small" damage_type = D_KINETIC hit_type = DAMAGE_CUT implanted = /obj/item/implant/projectile/bullet_9mm @@ -380,7 +380,7 @@ toxic - poisons hit_type = DAMAGE_STAB hit_ground_chance = 50 projectile_speed = 60 - impact_image_state = "bhole-small" + impact_image_state = "bullethole-small" implanted = /obj/item/implant/projectile/bullet_9mm casing = /obj/item/casing/small ricochets = TRUE @@ -399,7 +399,7 @@ toxic - poisons damage_type = D_KINETIC hit_type = DAMAGE_CUT implanted = /obj/item/implant/projectile/bullet_357 - impact_image_state = "bhole-small" + impact_image_state = "bullethole-small" casing = /obj/item/casing/medium ricochets = TRUE @@ -424,7 +424,7 @@ toxic - poisons sname = "execute" damage = 35 implanted = /obj/item/implant/projectile/bullet_38 - impact_image_state = "bhole-small" + impact_image_state = "bullethole-small" casing = /obj/item/casing/medium ricochets = TRUE @@ -529,7 +529,7 @@ toxic - poisons hit_type = DAMAGE_STAB hit_ground_chance = 100 implanted = /obj/item/implant/projectile/bullet_41 - impact_image_state = "bhole" + impact_image_state = "bullethole" casing = /obj/item/casing/derringer //0.45 @@ -538,7 +538,7 @@ toxic - poisons damage = 35 hit_type = DAMAGE_CUT implanted = /obj/item/implant/projectile/bullet_45 - impact_image_state = "bhole-small" + impact_image_state = "bullethole-small" casing = /obj/item/casing/medium ricochets = TRUE @@ -554,7 +554,7 @@ toxic - poisons dissipation_delay = 10 hit_ground_chance = 50 casing = null - impact_image_state = "bhole-small" + impact_image_state = "bullethole-small" on_hit(atom/hit, dirflag, obj/projectile/proj) if(ishuman(hit)) @@ -570,13 +570,13 @@ toxic - poisons rifle damage = 70 - impact_image_state = "bhole-large" + impact_image_state = "bullethole-large" mortar name = "mortar grenade" icon_state = "mortar" damage = 10 // The explosion should deal most of the damage. - impact_image_state = "bhole-large" + impact_image_state = "bullethole-large" damage_type = D_KINETIC hit_type = DAMAGE_BLUNT @@ -610,7 +610,7 @@ toxic - poisons dissipation_rate = 10 damage_type = D_KINETIC hit_type = DAMAGE_BLUNT - impact_image_state = "bhole" + impact_image_state = "bullethole" hit_ground_chance = 100 implanted = /obj/item/implant/projectile/bullet_12ga casing = /obj/item/casing/shotgun/red @@ -733,7 +733,7 @@ toxic - poisons implanted = null damage_type = D_KINETIC hit_type = DAMAGE_BLUNT - impact_image_state = "bhole" + impact_image_state = "bullethole" casing = /obj/item/casing/shotgun/orange on_hit(atom/hit) @@ -764,7 +764,7 @@ toxic - poisons implanted = null damage_type = D_KINETIC hit_type = DAMAGE_BLUNT - impact_image_state = "bhole" + impact_image_state = "bullethole" casing = /obj/item/casing/shotgun/blue on_hit(atom/hit, dirflag, obj/projectile/proj) @@ -789,7 +789,7 @@ toxic - poisons implanted = null damage_type = D_KINETIC hit_type = DAMAGE_BLUNT - impact_image_state = "bhole" + impact_image_state = "bullethole" casing = /obj/item/casing/shotgun/gray on_hit(atom/hit) @@ -816,7 +816,7 @@ toxic - poisons if(isliving(hit)) var/mob/living/L = hit L.bodytemperature = max(50, L.bodytemperature - proj.power * 5) - if(L.getStatusDuration("shivering" < power)) + if(L.getStatusDuration("shivering") < power) L.setStatus("shivering", power/2 SECONDS) var/obj/icecube/I = new/obj/icecube(get_turf(L), L) I.health = proj.power / 2 @@ -831,7 +831,7 @@ toxic - poisons implanted = null damage_type = D_KINETIC hit_type = DAMAGE_BLUNT - impact_image_state = "bhole" + impact_image_state = "bullethole" casing = /obj/item/casing/shotgun/gray on_hit(atom/hit, direction, obj/projectile/P) @@ -870,7 +870,7 @@ toxic - poisons color_blue = 0 icon_state = "flare" implanted = null - impact_image_state = "bhole" + impact_image_state = "bullethole" casing = /obj/item/casing/shotgun/orange on_hit(atom/hit, direction, obj/projectile/P) @@ -905,7 +905,7 @@ toxic - poisons shot_volume = 130 implanted = null - impact_image_state = "bhole-large" + impact_image_state = "bullethole-large" casing = /obj/item/casing/cannon pierces = 4 shot_sound_extrarange = 1 @@ -981,7 +981,7 @@ toxic - poisons dissipation_delay = 25 shot_sound = 'sound/weapons/ACgun2.ogg' casing = null - impact_image_state = "bhole-large" + impact_image_state = "bullethole-large" on_hit(atom/hit) explosion_new(null, get_turf(hit), 5) @@ -997,7 +997,7 @@ datum/projectile/bullet/autocannon dissipation_delay = 30 cost = 1 shot_sound = 'sound/weapons/rocket.ogg' - impact_image_state = "bhole-large" + impact_image_state = "bullethole-large" casing = /obj/item/casing/grenade on_hit(atom/hit) @@ -1021,7 +1021,7 @@ datum/projectile/bullet/autocannon huge icon_state = "400mm" damage = 100 - impact_image_state = "bhole-large" + impact_image_state = "bullethole-large" on_hit(atom/hit) explosion_new(null, get_turf(hit), 80) @@ -1106,7 +1106,7 @@ datum/projectile/bullet/autocannon dissipation_delay = 30 cost = 1 shot_sound = 'sound/weapons/launcher.ogg' - impact_image_state = "bhole-large" + impact_image_state = "bullethole-large" casing = /obj/item/casing/grenade explosive @@ -1132,7 +1132,7 @@ datum/projectile/bullet/autocannon dissipation_delay = 10 cost = 1 shot_sound = 'sound/weapons/launcher.ogg' - impact_image_state = "bhole-large" + impact_image_state = "bullethole-large" casing = /obj/item/casing/grenade implanted = null @@ -1176,7 +1176,7 @@ datum/projectile/bullet/autocannon dissipation_delay = 10 cost = 1 shot_sound = 'sound/weapons/launcher.ogg' - impact_image_state = "bhole-large" + impact_image_state = "bullethole-large" casing = /obj/item/casing/grenade hit_type = DAMAGE_BLUNT hit_mob_sound = 'sound/misc/splash_1.ogg' @@ -1200,7 +1200,7 @@ datum/projectile/bullet/autocannon implanted = null damage_type = D_KINETIC hit_type = DAMAGE_BLUNT - impact_image_state = "bhole-large" + impact_image_state = "bullethole-large" casing = /obj/item/casing/grenade ie_type = null @@ -1236,7 +1236,7 @@ datum/projectile/bullet/autocannon damage_type = D_SPECIAL hit_type = DAMAGE_BLUNT hit_mob_sound = 'sound/impact_sounds/Energy_Hit_3.ogg' - impact_image_state = "bhole-large" + impact_image_state = "bullethole-large" casing = /obj/item/casing/grenade ie_type = null @@ -1259,7 +1259,7 @@ datum/projectile/bullet/autocannon dissipation_delay = 20 cost = 1 shot_sound = 'sound/weapons/launcher.ogg' - impact_image_state = "bhole-large" + impact_image_state = "bullethole-large" casing = /obj/item/casing/grenade implanted = null @@ -1369,7 +1369,7 @@ datum/projectile/bullet/autocannon dissipation_delay = 20 cost = 1 shot_sound = 'sound/weapons/launcher.ogg' - impact_image_state = "bhole-large" + impact_image_state = "bullethole-large" casing = /obj/item/casing/grenade implanted = null @@ -1399,7 +1399,7 @@ datum/projectile/bullet/autocannon dissipation_delay = 30 cost = 1 shot_sound = 'sound/weapons/rocket.ogg' - impact_image_state = "bhole-large" + impact_image_state = "bullethole-large" on_hit(atom/hit) var/turf/T = get_turf(hit) @@ -1494,7 +1494,7 @@ datum/projectile/bullet/autocannon hit_type = DAMAGE_BLUNT dissipation_delay = 30 shot_sound = 'sound/weapons/rocket.ogg' - impact_image_state = "bhole-large" + impact_image_state = "bullethole-large" shot_number = 1 cost = 1 damage = 15 @@ -1530,7 +1530,7 @@ datum/projectile/bullet/autocannon dissipation_delay = 30 cost = 1 shot_sound = 'sound/weapons/rocket.ogg' - impact_image_state = "bhole-large" + impact_image_state = "bullethole-large" max_rotation_rate = 7 max_speed = 30 @@ -1572,13 +1572,13 @@ datum/projectile/bullet/autocannon dissipation_delay = 30 cost = 1 shot_sound = 'sound/weapons/rocket.ogg' - impact_image_state = "bhole-large" + impact_image_state = "bullethole-large" implanted = null on_hit(atom/hit) var/obj/machinery/the_singularity/S = hit if(istype(S)) - new /obj/bhole(S.loc,rand(100,300)) + new /obj/whitehole(S.loc, 0 SECONDS, 30 SECONDS) qdel(S) else new /obj/effects/rendersparks(hit.loc) @@ -1599,7 +1599,7 @@ datum/projectile/bullet/autocannon dissipation_delay = 30 cost = 1 shot_sound = 'sound/weapons/rocket.ogg' - impact_image_state = "bhole-large" + impact_image_state = "bullethole-large" implanted = null on_hit(atom/hit) @@ -1622,7 +1622,7 @@ datum/projectile/bullet/autocannon dissipation_rate = 2 damage_type = D_KINETIC hit_type = DAMAGE_BLUNT - impact_image_state = "bhole" + impact_image_state = "bullethole" implanted = null casing = null cost = 1 @@ -1644,7 +1644,7 @@ datum/projectile/bullet/autocannon dissipation_rate = 4 damage_type = D_KINETIC hit_type = DAMAGE_BLUNT - impact_image_state = "bhole" + impact_image_state = "bullethole" implanted = null casing = null cost = 2 @@ -1668,7 +1668,7 @@ datum/projectile/bullet/autocannon icon = 'icons/obj/scrap.dmi' icon_state = "2metal0" casing = null - impact_image_state = "bhole-staple" + impact_image_state = "bullethole-staple" shrapnel_implant implanted = /obj/item/implant/projectile/shrapnel @@ -1698,7 +1698,7 @@ datum/projectile/bullet/autocannon shot_volume = 90 implanted = null - impact_image_state = "bhole-large" + impact_image_state = "bullethole-large" casing = /obj/item/casing/cannon shot_sound_extrarange = 1 @@ -1774,7 +1774,7 @@ datum/projectile/bullet/autocannon hit_type = DAMAGE_BLUNT implanted = null shot_sound = 'sound/impact_sounds/Generic_Snap_1.ogg' - impact_image_state = "bhole-staple" + impact_image_state = "bullethole-staple" casing = null hit_ground_chance = 50 icon_state = "random_thing" //actually exists, looks funny enough to use as the projectile image for this @@ -1822,7 +1822,7 @@ datum/projectile/bullet/autocannon icon = 'icons/obj/scrap.dmi' icon_state = "2metal0" casing = null - impact_image_state = "bhole-staple" + impact_image_state = "bullethole-staple" implanted = /obj/item/implant/projectile/shrapnel/radioactive on_hit(atom/hit, angle, obj/projectile/O) @@ -1832,9 +1832,9 @@ datum/projectile/bullet/autocannon if(isturf(hit)) //did you know that turf.loc is /area? because I didn't hitloc = hit for(var/obj/window/maybe_thindow in hitloc) - maybe_thindow.ex_act(3) + maybe_thindow.ex_act(2) for(var/obj/structure/girder/girderstack in hitloc) - girderstack.ex_act(3) + girderstack.ex_act(2) //let's pretend these walls/objects were destroyed in the explosion - hit.ex_act(2) + hit.ex_act(pick(1,2)) . = ..() diff --git a/code/modules/projectiles/laser.dm b/code/modules/projectiles/laser.dm index 87cb44ebdd097..9de29a4e0685d 100644 --- a/code/modules/projectiles/laser.dm +++ b/code/modules/projectiles/laser.dm @@ -461,6 +461,7 @@ toxic - poisons mult = 0.5 return ..(P, A) * mult + /datum/projectile/laser/blaster/pod_pilot/blue_NT name = "blue blaster bolt" color_icon = "#3d9cff" @@ -485,6 +486,47 @@ toxic - poisons turret = 1 damage = 15 +/datum/projectile/laser/blaster/pod_pilot/blue_NT/smg + name = "blue blaster bolt" + color_icon = "#3d9cff" + color_red = 0.05 + color_green = 0.28 + color_blue = 0.51 + cost = 10 + damage = 12.5 + fullauto_valid = 1 + icon_state = "bolt_burst" + shot_sound = 'sound/weapons/laser_c.ogg' + +/datum/projectile/laser/blaster/pod_pilot/red_SY/smg + name = "red blaster bolt" + color_icon = "#ff4043" + color_red = 0.51 + color_green = 0.05 + color_blue = 0.28 + cost = 10 + damage = 12.5 + fullauto_valid = 1 + icon_state = "bolt_burst" + shot_sound = 'sound/weapons/laser_c.ogg' + +/datum/projectile/laser/blaster/pod_pilot/blue_NT/shotgun + name = "blue blaster bolt" + color_icon = "#3d9cff" + color_red = 0.05 + color_green = 0.28 + color_blue = 0.51 + cost = 10 + damage = 15 + +/datum/projectile/laser/blaster/pod_pilot/red_SY/shotgun + name = "red blaster bolt" + color_icon = "#ff4043" + color_red = 0.51 + color_green = 0.05 + color_blue = 0.28 + cost = 10 + damage = 15 // cogwerks- mining laser, first attempt diff --git a/code/modules/projectiles/special.dm b/code/modules/projectiles/special.dm index 399bff9cf2d40..700aa59818b21 100644 --- a/code/modules/projectiles/special.dm +++ b/code/modules/projectiles/special.dm @@ -886,6 +886,35 @@ ABSTRACT_TYPE(/datum/projectile/special) FC.launch() current_angle += angle_adjust_per_pellet +/datum/projectile/special/spreader/pwshotgunspread + name = "blaster bolt" + sname = "shotgun spread" + cost = 40 + pellets_to_fire = 5 + spread_projectile_type = /datum/projectile/laser/blaster/pod_pilot/blue_NT/shotgun + split_type = 0 + shot_sound = 'sound/weapons/laser_b.ogg' + var/spread_angle = 10 + var/current_angle = 0 + var/angle_adjust_per_pellet = 0 + var/initial_angle_offset_mult = 0.5 + + on_launch(var/obj/projectile/P) + angle_adjust_per_pellet = ((spread_angle * 2) / pellets_to_fire) + current_angle = (0 - spread_angle) + (angle_adjust_per_pellet * initial_angle_offset_mult) + ..() + + new_pellet(var/obj/projectile/P, var/turf/PT, var/datum/projectile/F) + var/obj/projectile/FC = initialize_projectile(PT, F, P.xo, P.yo, P.shooter) + FC.rotateDirection(current_angle) + FC.launch() + current_angle += angle_adjust_per_pellet + + NT + spread_projectile_type = /datum/projectile/laser/blaster/pod_pilot/blue_NT/shotgun + + SY + spread_projectile_type = /datum/projectile/laser/blaster/pod_pilot/red_SY/shotgun /datum/projectile/special/spreader/quadwasp name = "4 space wasp eggs" diff --git a/code/modules/robotics/robot/module/empty.dm b/code/modules/robotics/robot/module/empty.dm index 22def579542bd..2ed89ba688727 100644 --- a/code/modules/robotics/robot/module/empty.dm +++ b/code/modules/robotics/robot/module/empty.dm @@ -3,4 +3,4 @@ /obj/item/robot_module/empty name = "empty cyborg module" desc = "An empty cyborg module." - include_common_tools = FALSE + included_tools = null diff --git a/code/modules/robotics/robot/module/engineering.dm b/code/modules/robotics/robot/module/engineering.dm index c3b8545fb98c2..ad0d40dee43d7 100644 --- a/code/modules/robotics/robot/module/engineering.dm +++ b/code/modules/robotics/robot/module/engineering.dm @@ -8,7 +8,6 @@ radio_type = /obj/item/device/radio/headset/engineer mailgroups = list(MGO_ENGINEER, MGD_STATIONREPAIR, MGO_SILICON, MGD_PARTY) alertgroups = list(MGA_MAIL, MGA_RADIO, MGA_ENGINE, MGA_CRISIS, MGA_RKIT) - include_common_tools = FALSE /datum/robot_cosmetic/engineering fx = list(255, 255, 0) diff --git a/code/modules/robotics/robot/module/medical.dm b/code/modules/robotics/robot/module/medical.dm index 71fb034f13159..b88a67175a1d6 100644 --- a/code/modules/robotics/robot/module/medical.dm +++ b/code/modules/robotics/robot/module/medical.dm @@ -8,7 +8,6 @@ radio_type = /obj/item/device/radio/headset/medical mailgroups = list(MGD_MEDBAY, MGD_MEDRESEACH, MGO_SILICON, MGD_PARTY) alertgroups = list(MGA_MAIL, MGA_RADIO, MGA_DEATH, MGA_MEDCRIT, MGA_CLONER, MGA_CRISIS, MGA_SALES) - include_common_tools = FALSE /datum/robot_cosmetic/medical head_mod = "Medical Mirror" diff --git a/code/modules/robotics/robot/module/parent.dm b/code/modules/robotics/robot/module/parent.dm index c62ea282cc859..d1dabce70c303 100644 --- a/code/modules/robotics/robot/module/parent.dm +++ b/code/modules/robotics/robot/module/parent.dm @@ -13,8 +13,7 @@ ADMIN_INTERACT_PROCS(/obj/item/robot_module, proc/admin_add_tool, proc/admin_rem var/list/tools = list() var/mod_hudicon = "unknown" var/cosmetic_mods = null - var/include_common_tools = TRUE - var/included_tools = null + var/included_tools = /datum/robot/module_tool_creator/recursive/module/common var/included_cosmetic = null var/radio_type = null var/obj/item/device/radio/headset/radio = null @@ -23,14 +22,10 @@ ADMIN_INTERACT_PROCS(/obj/item/robot_module, proc/admin_add_tool, proc/admin_rem /obj/item/robot_module/New() ..() - // add contents - if (src.include_common_tools) - src.add_contents(/datum/robot/module_tool_creator/recursive/module/common) src.add_contents(src.included_tools) // no need to keep the definition past initializing src.included_tools = null - // add cosmetics if (ispath(src.included_cosmetic, /datum/robot_cosmetic)) src.cosmetic_mods = new included_cosmetic(src) @@ -44,7 +39,7 @@ ADMIN_INTERACT_PROCS(/obj/item/robot_module, proc/admin_add_tool, proc/admin_rem if (istype(adding_contents, /obj/item)) // handle adding single instance of tool var/obj/item/I = adding_contents - I.cant_drop = 1 + I.cant_drop = TRUE I.set_loc(src) src.tools += I return I diff --git a/code/modules/robotics/robot/module_tool_creator/modules.dm b/code/modules/robotics/robot/module_tool_creator/modules.dm index bbb9730776b7b..feaa15a7cbb5d 100644 --- a/code/modules/robotics/robot/module_tool_creator/modules.dm +++ b/code/modules/robotics/robot/module_tool_creator/modules.dm @@ -8,10 +8,22 @@ * - mining */ +// convenient bundling of common tools, some modules do not include this as they want the items in a different order +/datum/robot/module_tool_creator/recursive/module/common + definitions = list( + /obj/item/portable_typewriter/borg, + /obj/item/robojumper, + /obj/item/device/analyzer/atmospheric/upgraded, + /obj/item/device/reagentscanner, + /obj/item/device/light/flashlight, + /obj/item/device/analyzer/healthanalyzer/upgraded, + /obj/item/tool/omnitool/silicon, + ) + // security officer. bartender. clown. -// DOES inherit common tools /datum/robot/module_tool_creator/recursive/module/brobocop definitions = list( + /datum/robot/module_tool_creator/recursive/module/common, /obj/item/device/detective_scanner, /obj/item/noisemaker, /obj/item/robot_foodsynthesizer, @@ -39,9 +51,9 @@ ) // scientist. -// DOES inherit common tools /datum/robot/module_tool_creator/recursive/module/science definitions = list( + /datum/robot/module_tool_creator/recursive/module/common, /obj/item/device/gps, // Let's them assist with telesci /obj/item/extinguisher/large/cyborg, /obj/item/hand_labeler, @@ -61,9 +73,9 @@ ) // botanist. chef. janitor. -// DOES inherit common tools /datum/robot/module_tool_creator/recursive/module/civilian definitions = list( + /datum/robot/module_tool_creator/recursive/module/common, /obj/item/extinguisher/large/cyborg, /obj/item/reagent_containers/glass/bucket, // TODO: make large version /obj/item/spraybottle/cleaner/robot, @@ -91,19 +103,7 @@ /obj/item/paper_bin/robot, ) -/datum/robot/module_tool_creator/recursive/module/common - definitions = list( - /obj/item/portable_typewriter/borg, - /obj/item/robojumper, - /obj/item/device/analyzer/atmospheric/upgraded, - /obj/item/device/reagentscanner, - /obj/item/device/light/flashlight, - /obj/item/device/analyzer/healthanalyzer/upgraded, - /obj/item/tool/omnitool/silicon, - ) - // engineer. mechanic. -// DOES NOT inherit common tools /datum/robot/module_tool_creator/recursive/module/engineering definitions = list( /obj/item/portable_typewriter/borg, @@ -138,7 +138,6 @@ ) // medical doctor. -// DOES NOT inherit common tools /datum/robot/module_tool_creator/recursive/module/medical definitions = list( /obj/item/portable_typewriter/borg, @@ -169,9 +168,9 @@ ) // miner. quartermaster. -// DOES inherit common tools /datum/robot/module_tool_creator/recursive/module/mining definitions = list( + /datum/robot/module_tool_creator/recursive/module/common, /obj/item/device/gps, /obj/item/extinguisher/large/cyborg, /obj/item/mining_tool/drill, @@ -190,6 +189,7 @@ //These are not publically used anymore /datum/robot/module_tool_creator/recursive/module/construction_ai definitions = list( + /datum/robot/module_tool_creator/recursive/module/common, /obj/item/rcd, /obj/item/electronics/scanner, /obj/item/electronics/soldering, @@ -200,6 +200,7 @@ /datum/robot/module_tool_creator/recursive/module/construction_worker definitions = list( + /datum/robot/module_tool_creator/recursive/module/common, /obj/item/weldingtool, /obj/item/electronics/scanner, /obj/item/electronics/soldering, diff --git a/code/modules/robotics/robot/robot_docking_station.dm b/code/modules/robotics/robot/robot_docking_station.dm index 5039d58a48728..b4c70c229b392 100644 --- a/code/modules/robotics/robot/robot_docking_station.dm +++ b/code/modules/robotics/robot/robot_docking_station.dm @@ -189,7 +189,8 @@ TYPEINFO(/obj/machinery/recharge_station) return if (!isliving(user) || isAI(user)) return - + if (isintangible(user)) + return if (isitem(AM) && can_act(user)) src.Attackby(AM, user) return @@ -491,7 +492,7 @@ TYPEINFO(/obj/machinery/recharge_station) if (R.module) var/obj/item/robot_module/M = R.module - occupant_data["module"] = M.name + occupant_data["moduleName"] = M.name var/list/occupant_upgrades = list() if (length(R.upgrades)) @@ -514,13 +515,13 @@ TYPEINFO(/obj/machinery/recharge_station) occupant_data["clothing"] = occupant_clothing var/list/occupant_cosmetics = list() - if(istype(R.cosmetic_mods, /datum/robot_cosmetic)) + if (istype(R.cosmetic_mods, /datum/robot_cosmetic)) var/datum/robot_cosmetic/COS = R.cosmetic_mods - if(COS.ches_mod) occupant_cosmetics["chest"] = COS.ches_mod - if(COS.painted) occupant_cosmetics["paint"] = COS.paint // hex color representation - if(COS.head_mod) occupant_cosmetics["head"] = COS.head_mod - if(COS.arms_mod) occupant_cosmetics["arms"] = COS.arms_mod - if(COS.legs_mod) occupant_cosmetics["legs"] = COS.legs_mod + if (COS.ches_mod) occupant_cosmetics["chest"] = COS.ches_mod + if (COS.painted) occupant_cosmetics["paint"] = COS.paint // hex color representation + if (COS.head_mod) occupant_cosmetics["head"] = COS.head_mod + if (COS.arms_mod) occupant_cosmetics["arms"] = COS.arms_mod + if (COS.legs_mod) occupant_cosmetics["legs"] = COS.legs_mod occupant_cosmetics["fx"] = COS.fx // R,G,B representation occupant_data["cosmetics"] = occupant_cosmetics @@ -537,12 +538,12 @@ TYPEINFO(/obj/machinery/recharge_station) occupant_data["name"] = E.name occupant_data["kind"] = "eyebot" if (E.cell) - var/list/this_cell = list() var/obj/item/cell/C = E.cell - this_cell["name"] = C.name - this_cell["current"] = C.charge - this_cell["max"] = C.maxcharge - occupant_data["cell"] = this_cell + occupant_data["cell"] = list( + "name" = C.name, + "current" = C.charge, + "max" = C.maxcharge + ) .["occupant"] = occupant_data diff --git a/code/modules/robotics/robot/robot_module_rewriter.dm b/code/modules/robotics/robot/robot_module_rewriter.dm index 1dd59d87c9ba4..7b4a560f2df75 100644 --- a/code/modules/robotics/robot/robot_module_rewriter.dm +++ b/code/modules/robotics/robot/robot_module_rewriter.dm @@ -4,23 +4,34 @@ icon_state = "robot_module_rewriter" anchored = ANCHORED density = 1 - light_r =1 + light_r = 1 light_g = 0.4 light_b = 0 circuit_type = /obj/item/circuitboard/robot_module_rewriter var/list/obj/item/robot_module/modules = null - var/obj/item/robot_module/selectedModule = null + var/obj/item/robot_module/selected_module = null + +/obj/machinery/computer/robot_module_rewriter/New() + ..() + src.modules = list() /obj/machinery/computer/robot_module_rewriter/attackby(obj/item/I, mob/user) if (istype(I, /obj/item/robot_module)) user.drop_item() I.set_loc(src) - LAZYLISTADD(src.modules, I) + src.modules += I boutput(user, SPAN_NOTICE("You insert [I] into \the [src].")) tgui_process.update_uis(src) else ..() +/obj/machinery/computer/robot_module_rewriter/Exited(atom/movable/I) + . = ..() + if (istype(I, /obj/item/robot_module)) + src.modules -= I + if (src.selected_module == I) + src.selected_module = null + /obj/machinery/computer/robot_module_rewriter/ui_interact(mob/user, datum/tgui/ui) ui = tgui_process.try_update_ui(user, src, ui) if (!ui) @@ -28,26 +39,30 @@ ui.open() /obj/machinery/computer/robot_module_rewriter/ui_data(mob/user) + . = ..() var/list/modulesData = list() var/list/availableModulesData = list() for (var/obj/item/robot_module/module in src.modules) - var/list/availableModuleData = list() - availableModuleData["name"] = module.name - availableModuleData["ref"] = "\ref[module]" + var/list/availableModuleData = list( + "name" = module.name, + "item_ref" = "\ref[module]" + ) // wrapping in a list to append actual list rather than contents availableModulesData += list(availableModuleData) modulesData["available"] = availableModulesData var/list/selectedModuleData = null - if (src.selectedModule) - selectedModuleData = list() - selectedModuleData["ref"] = "\ref[src.selectedModule]" + if (src.selected_module) + selectedModuleData = list( + "item_ref" = "\ref[src.selected_module]" + ) var/list/selectedModuleToolsData = list() - for (var/obj/item/tool in src.selectedModule.tools) - var/list/toolData = list() - toolData["name"] = tool.name - toolData["ref"] = "\ref[tool]" + for (var/obj/item/tool in src.selected_module.tools) + var/list/toolData = list( + "name" = tool.name, + "item_ref" = "\ref[tool]" + ) // wrapping in a list to append actual list rather than contents selectedModuleToolsData += list(toolData) selectedModuleData["tools"] = selectedModuleToolsData @@ -55,7 +70,7 @@ // "modules" is the only key in our return list, so could be flattened, // but there is intent to add more features in the near future - . = list("modules" = modulesData) + .["modules"] = modulesData /obj/machinery/computer/robot_module_rewriter/ui_act(action, list/params, datum/tgui/ui) . = ..() @@ -67,98 +82,85 @@ switch (action) if ("module-eject") - var/moduleRef = params["moduleRef"] - if (moduleRef) - var/obj/item/robot_module/module = locate(moduleRef) in src.modules - if (module) - // removing from modules list, as either being ejected or not in the machine for some reason - LAZYLISTREMOVE(src.modules, module) - if (module == src.selectedModule) - src.selectedModule = null - if (module.loc == src) - user.put_in_hand_or_eject(module) + var/item_ref = params["itemRef"] + if (!item_ref) + return + var/obj/item/robot_module/item = locate(item_ref) in src.modules + if (!item) + return + user.put_in_hand_or_eject(item) . = TRUE if ("module-reset") - var/moduleId = params["moduleId"] - var/moduleRef = params["moduleRef"] - if (moduleId && moduleRef) - var/obj/item/robot_module/module = locate(moduleRef) in src.modules - if (module) - if (module.loc != src) - // sanity check, tidy up modules list if not in the machine for some reason - LAZYLISTREMOVE(src.modules, module) - src.selectedModule = null - else if (module == src.selectedModule) - var/moduleResetType - switch (moduleId) - if ("brobocop") - moduleResetType = /obj/item/robot_module/brobocop - if ("science") - moduleResetType = /obj/item/robot_module/science - if ("civilian") - moduleResetType = /obj/item/robot_module/civilian - if ("engineering") - moduleResetType = /obj/item/robot_module/engineering - if ("medical") - moduleResetType = /obj/item/robot_module/medical - if ("mining") - moduleResetType = /obj/item/robot_module/mining - if (moduleResetType) - var/obj/item/robot_module/replacementModule = new moduleResetType(src) - var/moduleIndex = src.modules.Find(module) - if (moduleIndex) - src.modules[moduleIndex] = replacementModule - src.selectedModule = replacementModule - qdel(module) + var/module_id = params["moduleId"] + if (!module_id) + return + if (!src.selected_module) + return + var/module_reset_path + switch (module_id) + if ("brobocop") + module_reset_path = /obj/item/robot_module/brobocop + if ("science") + module_reset_path = /obj/item/robot_module/science + if ("civilian") + module_reset_path = /obj/item/robot_module/civilian + if ("engineering") + module_reset_path = /obj/item/robot_module/engineering + if ("medical") + module_reset_path = /obj/item/robot_module/medical + if ("mining") + module_reset_path = /obj/item/robot_module/mining + if (!module_reset_path) + return + var/module_index = src.modules.Find(src.selected_module) + if (!module_index) + return + var/obj/item/robot_module/replacement_module = new module_reset_path(src) + src.modules[module_index] = replacement_module + qdel(src.selected_module) + src.selected_module = replacement_module . = TRUE if ("module-select") - var/moduleRef = params["moduleRef"] - if (moduleRef) - src.selectedModule = locate(moduleRef) in src.modules - // sanity check, tidy up modules list if not in the machine for some reason - if (src.selectedModule && src.selectedModule.loc != src) - LAZYLISTREMOVE(src.modules, src.selectedModule) - else - src.selectedModule = null + var/item_ref = params["itemRef"] + if (!item_ref) + src.selected_module = null + return + src.selected_module = locate(item_ref) in src.modules . = TRUE if ("tool-move") var/dir = params["dir"] - var/moduleRef = params["moduleRef"] - var/toolRef = params["toolRef"] - if (moduleRef && toolRef) - var/obj/item/robot_module/module = locate(moduleRef) in src.modules - if (module) - if (module.loc != src) - // sanity check, tidy up modules list if not in the machine for some reason - LAZYLISTREMOVE(src.modules, module) - else if (module == src.selectedModule) - var/obj/item/tool = locate(toolRef) in module - if (tool) - var/toolIndex = module.tools.Find(tool) - switch (dir) - if ("down") - if (toolIndex > 0 && toolIndex < module.tools.len) - module.tools.Swap(toolIndex, toolIndex + 1) - if ("up") - if (toolIndex >= 2) - module.tools.Swap(toolIndex, toolIndex - 1) + var/item_ref = params["itemRef"] + if (!dir || !item_ref) + return + if (!src.selected_module) + return + var/obj/item/item = locate(item_ref) in src.selected_module.tools + if (!item) + return + var/item_index = src.selected_module.tools.Find(item) + if (!item_index) + return + switch (dir) + if ("down") + if (item_index < length(src.selected_module.tools)) + src.selected_module.tools.Swap(item_index, item_index + 1) + if ("up") + if (item_index >= 2) + src.selected_module.tools.Swap(item_index, item_index - 1) . = TRUE if ("tool-remove") - var/moduleRef = params["moduleRef"] - var/toolRef = params["toolRef"] - if (moduleRef && toolRef) - var/obj/item/robot_module/module = locate(moduleRef) in src.modules - if (module) - if (module.loc != src) - // sanity check, tidy up modules list if not in the machine for some reason - LAZYLISTREMOVE(src.modules, module) - else if (module == src.selectedModule) - var/obj/item/tool = locate(toolRef) in module.tools - if (tool) - module.tools -= tool - qdel(tool) + var/item_ref = params["itemRef"] + if (!item_ref) + return + if (!src.selected_module) + return + var/obj/item/item = locate(item_ref) in src.selected_module.tools + if (!item) + return + src.selected_module.tools -= item + qdel(item) . = TRUE diff --git a/code/modules/sound/playsound.dm b/code/modules/sound/playsound.dm index a6f54888fffce..cce9b9b3c5bfd 100644 --- a/code/modules/sound/playsound.dm +++ b/code/modules/sound/playsound.dm @@ -139,7 +139,7 @@ proc/is_music_playing() var/client/adminC for (var/client/C in clients) - if (C.key == data["key"]) + if (C.ckey == data["admin_ckey"]) adminC = C SPAWN(0) @@ -155,7 +155,7 @@ proc/is_music_playing() var/show_other_key = 0 if (adminC.stealth || adminC.alt_key) show_other_key = 1 - boutput(C, "[SPAN_MEDAL("<b>[show_other_key ? adminC.fakekey : adminC.key] played (your volume: [ ismuted ? "muted" : vol ]):</b>")][SPAN_NOTICE("[data["title"]] ([data["duration"]])")]") + boutput(C, "[SPAN_MEDAL("<b>[show_other_key ? adminC.fakekey : adminC.key] played (your volume: [ ismuted ? "muted" : vol ]):</b>")][SPAN_NOTICE("[data["title"]] ([data["duration_human"]])")]") if (ismuted) //bullshit BYOND 0 is not null fuck you continue @@ -170,11 +170,11 @@ proc/is_music_playing() if (adminC) logTheThing(LOG_ADMIN, adminC, "loaded remote music: [data["file"]] ([data["filesize"]])") logTheThing(LOG_DIARY, adminC, "loaded remote music: [data["file"]] ([data["filesize"]])", "admin") - message_admins("[key_name(adminC)] loaded remote music: [data["title"]] ([data["duration"]] / [data["filesize"]])") + message_admins("[key_name(adminC)] loaded remote music: [data["title"]] ([data["duration_human"]] / [data["filesize"]])") else - logTheThing(LOG_ADMIN, data["key"], "loaded remote music: [data["file"]] ([data["filesize"]])") - logTheThing(LOG_DIARY, data["key"], "loaded remote music: [data["file"]] ([data["filesize"]])", "admin") - message_admins("[data["key"]] loaded remote music: [data["title"]] ([data["duration"]] / [data["filesize"]])") + logTheThing(LOG_ADMIN, data["admin_ckey"], "loaded remote music: [data["file"]] ([data["filesize"]])") + logTheThing(LOG_DIARY, data["admin_ckey"], "loaded remote music: [data["file"]] ([data["filesize"]])", "admin") + message_admins("[data["admin_ckey"]] loaded remote music: [data["title"]] ([data["duration_human"]] / [data["filesize"]])") return 1 /client/verb/change_volume(channel_name as anything in audio_channel_name_to_id) @@ -250,33 +250,21 @@ proc/is_music_playing() src.verbs += /client/verb/stop_all_sounds /client/proc/play_youtube_audio() - if (!config.youtube_audio_key) - alert("You don't have access to the youtube audio converter") - return 0 - var/video = input("Input the Youtube video information\nEither the full URL e.g. https://www.youtube.com/watch?v=145RCdUwAxM\nOr just the video ID e.g. 145RCdUwAxM", "Play Youtube Audio") as null|text if (!video) return - // Fetch via HTTP from goonhub - var/datum/http_request/request = new() - request.prepare(RUSTG_HTTP_METHOD_GET, "http://yt.goonhub.com/index.php?server=[config.server_id]&key=[src.key]&video=[video]&auth=[config.youtube_audio_key]", "", "") - request.begin_async() - UNTIL(request.is_complete()) - var/datum/http_response/response = request.into_response() - - if (response.errored || !response.body) - boutput(src, "<span class='bold' class='notice'>Something went wrong with the youtube thing! Yell at Wire.</span>") - logTheThing(LOG_DEBUG, null, "<b>Youtube Error</b>: No response from server with video: <b>[video]</b>") - logTheThing(LOG_DIARY, null, "Youtube Error: No response from server with video: [video]", "debug") - return - - var/data = json_decode(response.body) - if (data["error"]) - boutput(src, "<span class='bold' class='notice'>Error returned from youtube server thing: [data["error"]].</span>") + try + var/datum/apiRoute/remoteMusic/playRemoteMusic = new + playRemoteMusic.buildBody(video, roundId, src.ckey) + apiHandler.queryAPI(playRemoteMusic) + catch (var/exception/e) + var/datum/apiModel/Error/error = e.name + boutput(src, "<span class='bold' class='notice'>Error returned from youtube server thing: [error.message].</span>") return // prevent radio station from interrupting us - EXTEND_COOLDOWN(global, "music", 2 MINUTES) // TODO: use data from the request as duration instead + // Wire note: This essentially means "extend the duration by the time we think it will take the API to download the song and get back to us" + EXTEND_COOLDOWN(global, "music", 30 SECONDS) boutput(src, "<span class='bold' class='notice'>Youtube audio loading started. This may take some time to play and a second message will be displayed when it finishes.</span>") diff --git a/code/modules/sound/sound.dm b/code/modules/sound/sound.dm index 89121ec479a5f..06b28c81892b7 100644 --- a/code/modules/sound/sound.dm +++ b/code/modules/sound/sound.dm @@ -104,7 +104,7 @@ var/global/list/default_channel_volumes = list(1, 1, 1, 0.5, 0.5, 1, 1) volume = clamp(volume, 0, 2) volumes[channel + 1] = volume - cloud_put("audio_volume", json_encode(volumes)) + src.player.cloudSaves.putData("audio_volume", json_encode(volumes)) var/list/playing = src.SoundQuery() if( channel == VOLUME_CHANNEL_MASTER ) diff --git a/code/procs/logged_phrases.dm b/code/modules/speech/logged_phrases.dm similarity index 95% rename from code/procs/logged_phrases.dm rename to code/modules/speech/logged_phrases.dm index 411c79d21e2b8..cdbe227da40e3 100644 --- a/code/procs/logged_phrases.dm +++ b/code/modules/speech/logged_phrases.dm @@ -218,14 +218,19 @@ var/global/datum/phrase_log/phrase_log = new /// Gets a random phrase from the Goonhub API database, categories are "ai_laws", "tickets", "fines" proc/random_api_phrase(category) if(!length(src.cached_api_phrases[category])) - var/list/data = apiHandler.queryAPI("random-entries", list("type"=category, "count"=src.api_cache_size), 1, 1, 1) - if(!data) + var/datum/apiModel/RandomEntries/randomEntries + try + var/datum/apiRoute/randomEntries/getRandomEntries = new + getRandomEntries.queryParams = list("type" = category, "count" = src.api_cache_size) + randomEntries = apiHandler.queryAPI(getRandomEntries) + catch return . + var/list/new_phrases = list() - for(var/list/entry in data["entries"]) + for (var/datum/apiModel/entry in randomEntries.entries) switch(category) if("ai_laws") - if(entry["uploader_key"] != "Random Event") + if(entry["uploader_name"] != "Random Event") new_phrases += entry["law_text"] if("tickets", "fines") new_phrases += entry["reason"] diff --git a/code/modules/status_system/statusEffects.dm b/code/modules/status_system/statusEffects.dm index 7165471f2ad29..59a68a7d7c64d 100644 --- a/code/modules/status_system/statusEffects.dm +++ b/code/modules/status_system/statusEffects.dm @@ -2372,6 +2372,7 @@ C.setProperty("coldprot", C.getProperty("coldprot") - LAUNDERED_COLDPROT_AMOUNT) if (C.stains) C.stains -= LAUNDERED_STAIN_TEXT + C.UpdateName() #undef LAUNDERED_COLDPROT_AMOUNT #undef LAUNDERED_STAIN_TEXT @@ -2400,6 +2401,58 @@ if (R.activated) R.upgrade_deactivate(robot) . = ..() +/datum/statusEffect/oiled + id = "oiled" + name = "Oiled" + icon_state = "oil" + maxDuration = 6 MINUTES + movement_modifier = /datum/movement_modifier/robot_oil + + getTooltip() + . = "You have been oiled, your movement delay and passive power consumption have been reduced by 15%, and you feel more ready to resist anything that may stun you in your tracks." + + onAdd(optional=null) + ..() + var/mob/M = owner + APPLY_ATOM_PROPERTY(M, PROP_MOB_STUN_RESIST, "robot_oil", 25) + APPLY_ATOM_PROPERTY(M, PROP_MOB_STUN_RESIST_MAX, "robot_oil", 25) + + onRemove() + ..() + var/mob/M = owner + REMOVE_ATOM_PROPERTY(M, PROP_MOB_STUN_RESIST, "robot_oil") + REMOVE_ATOM_PROPERTY(M, PROP_MOB_STUN_RESIST_MAX, "robot_oil") + +/datum/statusEffect/oiled/fresh + id = "freshly_oiled" + name = "Freshly oiled" + icon_state = "fresh_oil" + maxDuration = 15 SECONDS + movement_modifier = /datum/movement_modifier/robot_oil/fresh + /// Duration of the oiled status effect a person has before more oil is applied. + var/oiledDuration = 0 + /// How long have we had the status effect for + var/tickspassed = 0 + + getTooltip() + . = "You have recently been oiled, your movement delay and passive power consumption have been reduced by 50%, and you feel more ready to resist anything that may stun you in your tracks." + + onAdd(optional=null) + ..() + var/mob/M = owner + if(M.hasStatus("oiled")) + oiledDuration = M.getStatusDuration("oiled") + M.delStatus("oiled") + + onUpdate(timePassed) // I gotta do it this way trust me on this + . = ..() + tickspassed += timePassed + + onRemove() + ..() + var/mob/M = owner + M.changeStatus("oiled", (min(tickspassed, maxDuration) * 24 + oiledDuration)) // freshly oiled decays into oiled status with 12 times the duration that the status effect has peaked at. + /datum/statusEffect/criticalcondition id = "critical_condition" name = "Critical Condition" @@ -2562,3 +2615,28 @@ M.max_health += change current_bonus = newBonus health_update_queue |= M + +/datum/statusEffect/wiz_polymorph + id = "wiz_polymorph" + name = "Polymorphed" + desc = "You've been polymorphed by a wizard! It will take a few minutes for the spell to wear off." + icon_state = "polymorph" + unique = TRUE + var/mob/living/carbon/human/original + + onAdd(mob/living/carbon/human/H) + . = ..() + original = H + + onRemove() + ..() + var/mob/M = owner + if (ismobcritter(M) && isalive(M)) + original.set_loc(M.loc) + original.hibernating = FALSE + M.mind?.transfer_to(original) + qdel(M) + else + qdel(original) + + src.original = null diff --git a/code/modules/storage/items/bag_of_holding.dm b/code/modules/storage/items/bag_of_holding.dm index 40af540a49d7b..40f39357762cf 100644 --- a/code/modules/storage/items/bag_of_holding.dm +++ b/code/modules/storage/items/bag_of_holding.dm @@ -141,8 +141,10 @@ proc/destroy_bag_of_holding(obj/item/artifact/boh, obj/added, mob/user = null) for (var/obj/item/I as anything in items) H = pick(humans) if (H.back.storage.check_can_hold(I) == STORAGE_CAN_HOLD) + logTheThing(LOG_STATION, boh, "[I] is transferred to [key_name(H)]'s back slot by a bag of holding fault") I.stored.transfer_stored_item(I, H.back, TRUE) else if (H.belt.storage.check_can_hold(I) == STORAGE_CAN_HOLD) + logTheThing(LOG_STATION, boh, "[I] is transferred to [key_name(H)]'s belt slot by a bag of holding fault") I.stored.transfer_stored_item(I, H.belt, TRUE) humans -= H if (!length(humans)) @@ -180,7 +182,7 @@ proc/destroy_bag_of_holding(obj/item/artifact/boh, obj/added, mob/user = null) effect = "user stranded in pocket dimension" - logTheThing(LOG_STATION, boh, "artifact bags of holding combined at [log_loc(T)] [user ? "by [user]" : null] with effect [effect].") + logTheThing(LOG_STATION, boh, "artifact bags of holding combined at [log_loc(T)] by [key_name(user)] with effect [effect].") for (var/obj/item/I as anything in (added.storage?.get_contents() + boh.storage.get_contents() - added)) qdel(I) diff --git a/code/modules/storage/storage.dm b/code/modules/storage/storage.dm index a4a48f08a5290..3a3845ca7df74 100644 --- a/code/modules/storage/storage.dm +++ b/code/modules/storage/storage.dm @@ -435,6 +435,10 @@ user.s_active = null user.detach_hud(src.hud) +/datum/storage/proc/hide_all_huds() + for (var/mob/M as anything in src.hud?.mobs) + src.hide_hud(M) + /// if user sees the storage hud /datum/storage/proc/hud_shown(mob/user) return user in src.hud.mobs diff --git a/code/modules/transport/pods/engine.dm b/code/modules/transport/pods/engine.dm index 54db1738a3337..768ff52d0672b 100644 --- a/code/modules/transport/pods/engine.dm +++ b/code/modules/transport/pods/engine.dm @@ -144,6 +144,10 @@ sleep(portaldelay) P.target = target + if (istype(target, /obj/warp_beacon)) + var/obj/warp_beacon/WB = target + if (WB.encrypted) // special beacon, ignore restricted Z checks and similar + P.bypass_tele_block = TRUE ready = 0 warp_autopilot = 0 logTheThing(LOG_STATION, usr, "creates a wormhole (pod portal) (<b>Destination:</b> [target]) at [log_loc(usr)].") diff --git a/code/modules/transport/pods/ships.dm b/code/modules/transport/pods/ships.dm index b8916dfb3bf9b..70394f4dfddfc 100644 --- a/code/modules/transport/pods/ships.dm +++ b/code/modules/transport/pods/ships.dm @@ -191,8 +191,8 @@ obj/machinery/vehicle/miniputt/pilot init_comms_type = /obj/item/shipcomponent/communications/syndicate New() - ..() START_TRACKING_CAT(TR_CAT_NUKE_OP_STYLE) + ..() src.lock = new /obj/item/shipcomponent/secondary_system/lock(src) src.lock.ship = src src.components += src.lock @@ -977,8 +977,8 @@ ABSTRACT_TYPE(/obj/structure/vehicleframe) return*/ New() - ..() START_TRACKING_CAT(TR_CAT_NUKE_OP_STYLE) + ..() myhud.update_systems() myhud.update_states() src.lock = new /obj/item/shipcomponent/secondary_system/lock(src) diff --git a/code/modules/transport/pods/vehicle.dm b/code/modules/transport/pods/vehicle.dm index 7555ac3b8f0d2..62bc5e722426d 100644 --- a/code/modules/transport/pods/vehicle.dm +++ b/code/modules/transport/pods/vehicle.dm @@ -309,6 +309,7 @@ src.add_dialog(usr) if (href_list["unengine"]) if (src.engine) + logTheThing(LOG_STATION, usr, "ejects the engine system ([src.engine]) from [src] at [log_loc(src)]") engine.deactivate() components -= engine engine.set_loc(src.loc) @@ -328,6 +329,7 @@ else if (href_list["unlife"]) if (src.life_support) + logTheThing(LOG_VEHICLE, usr, "ejects the life support system ([src.life_support]) from [src] at [log_loc(src)]") life_support.deactivate() components -= life_support life_support.set_loc(src.loc) @@ -336,6 +338,7 @@ else if (href_list["uncom"]) if (src.com_system) + logTheThing(LOG_VEHICLE, usr, "ejects the comms system ([src.com_system]) from [src] at [log_loc(src)]") com_system.deactivate() components -= com_system com_system.set_loc(src.loc) @@ -347,6 +350,7 @@ if (!src.m_w_system.removable) boutput(usr, SPAN_ALERT("[src.m_w_system] is fused to the hull and cannot be removed.")) return + logTheThing(LOG_VEHICLE, usr, "ejects the main weapon system ([src.m_w_system]) from [src] at [log_loc(src)]") m_w_system.deactivate() components -= m_w_system if (uses_weapon_overlays && m_w_system.appearanceString) @@ -357,11 +361,13 @@ else if (href_list["unloco"]) if (istype(src,/obj/machinery/vehicle/tank)) + logTheThing(LOG_VEHICLE, usr, "ejects the locomotion system from [src] at [log_loc(src)]") src:remove_locomotion() src.updateDialog() else if (href_list["unsec_system"]) if (src.sec_system) + logTheThing(LOG_VEHICLE, usr, "ejects the secondary system ([src.sec_system]) from [src] at [log_loc(src)]") sec_system.deactivate() components -= sec_system sec_system.set_loc(src.loc) @@ -370,6 +376,7 @@ else if (href_list["unsensors"]) if (src.sensors) + logTheThing(LOG_VEHICLE, usr, "ejects the sensors system ([src.sensors]) from [src] at [log_loc(src)]") sensors.deactivate() components -= sensors sensors.set_loc(src.loc) @@ -632,7 +639,7 @@ M.remove_stamina(power) var/turf/throw_at = get_edge_target_turf(src, src.dir) M.throw_at(throw_at, movement_controller:velocity_magnitude, 2) - logTheThing(LOG_COMBAT, src, "(piloted by [constructTarget(src.pilot,"combat")]) crashes into [constructTarget(target,"combat")] [log_loc(src)].") + logTheThing(LOG_COMBAT, src, "(piloted by [constructTarget(src.pilot,"combat")]) crashes into [constructTarget(target,"combat")] at [log_loc(target)].") SPAWN(2.5 SECONDS) if(M.health > 0) vehicular_manslaughter = 0 //we now check if person was sent into crit after hit, if they did we get the achievement @@ -646,7 +653,7 @@ var/turf/simulated/wall/T = target T.dismantle_wall(1) - logTheThing(LOG_COMBAT, src, "(piloted by [constructTarget(src.pilot,"combat")]) crashes into [constructTarget(target,"combat")] [log_loc(src)].") + logTheThing(LOG_COMBAT, src, "(piloted by [constructTarget(src.pilot,"combat")]) crashes into [constructTarget(target,"combat")] at [log_loc(target)].") else if (isobj(target) && power >= req_smash_velocity) var/obj/O = target @@ -667,7 +674,7 @@ if (istype(O,/obj/machinery/vending)) var/obj/machinery/vending/V = O V.fall(src) - logTheThing(LOG_COMBAT, src, "(piloted by [constructTarget(src.pilot,"combat")]) crashes into [constructTarget(target,"combat")] [log_loc(src)].") + logTheThing(LOG_COMBAT, src, "(piloted by [constructTarget(src.pilot,"combat")]) crashes into [constructTarget(target,"combat")] at [log_loc(target)].") playsound(src.loc, 'sound/impact_sounds/Generic_Hit_Heavy_1.ogg', 40, 1) @@ -1843,8 +1850,8 @@ init_comms_type = /obj/item/shipcomponent/communications/syndicate New() - ..() START_TRACKING_CAT(TR_CAT_NUKE_OP_STYLE) + ..() name = "syndicate minisub" src.lock = new /obj/item/shipcomponent/secondary_system/lock(src) src.lock.ship = src diff --git a/code/modules/transport/pods/warp_travel.dm b/code/modules/transport/pods/warp_travel.dm index 543f76dba5bdc..709a63752da2d 100644 --- a/code/modules/transport/pods/warp_travel.dm +++ b/code/modules/transport/pods/warp_travel.dm @@ -111,6 +111,8 @@ icon_state = "fatportal" density = 0 var/obj/target = null + /// allows a portal to warp to restricted Zs and areas + var/bypass_tele_block = FALSE anchored = ANCHORED event_handler_flags = USE_FLUID_ENTER @@ -175,7 +177,7 @@ if (istype(M, /atom/movable)) animate_portal_tele(src) playsound(src.loc, "warp", 50, 1, 0.2, 1.2) - do_teleport(M, src.target, 1) ///You will appear adjacent to the beacon + do_teleport(M, src.target, 1, !bypass_tele_block) ///You will appear adjacent to the beacon /obj/warp_beacon/proc/startpack() src.packable = 0 diff --git a/code/modules/transport/skateboard.dm b/code/modules/transport/skateboard.dm index 1bd696043508d..816c1e9645e05 100644 --- a/code/modules/transport/skateboard.dm +++ b/code/modules/transport/skateboard.dm @@ -198,8 +198,7 @@ input_lockout -= 1 else if(isobj(AM)) - var/trick = trickName() - src.messageNearby(SPAN_ALERT("<B>You do a [trick] on the [AM]!</B>"), SPAN_ALERT("<B>[rider] does a [trick] on the [AM]!</B>")) + //chat message removed due to extreme amounts of spam if(give_points) adjustSickness(4) trickAnimate() diff --git a/code/modules/vending/vending.dm b/code/modules/vending/vending.dm index 3e8a038b3d3ee..05a104191d342 100644 --- a/code/modules/vending/vending.dm +++ b/code/modules/vending/vending.dm @@ -2760,6 +2760,7 @@ TYPEINFO(/obj/machinery/vending/monkey) product_list += new/datum/data/vending_product(/obj/item/reagent_containers/food/drinks/bottle/vodka, 4) product_list += new/datum/data/vending_product(/obj/item/reagent_containers/food/drinks/bottle/tequila, 4) product_list += new/datum/data/vending_product(/obj/item/reagent_containers/food/drinks/bottle/wine, 4) + product_list += new/datum/data/vending_product(/obj/item/reagent_containers/food/drinks/bottle/wine/white, 4) product_list += new/datum/data/vending_product(/obj/item/reagent_containers/food/drinks/bottle/cider, 4) product_list += new/datum/data/vending_product(/obj/item/reagent_containers/food/drinks/bottle/mead, 4) product_list += new/datum/data/vending_product(/obj/item/reagent_containers/food/drinks/bottle/gin, 4) @@ -3134,6 +3135,13 @@ ABSTRACT_TYPE(/obj/machinery/vending/jobclothing) ex_act(severity) . = ..() +/obj/machinery/vending/air_vendor/plasma/pod_wars + air_cost = 0 + can_fall = FALSE + can_hack = FALSE + + ex_act(severity) + . = ..() /obj/machinery/vending/jobclothing/security name = "Security Apparel" desc = "A vending machine that vends Security clothing." @@ -3263,7 +3271,7 @@ ABSTRACT_TYPE(/obj/machinery/vending/jobclothing) product_list += new/datum/data/vending_product(/obj/item/clothing/under/rank/orangeoveralls/yellow, 2) product_list += new/datum/data/vending_product(/obj/item/clothing/suit/wintercoat/engineering, 4) product_list += new/datum/data/vending_product(/obj/item/clothing/suit/hi_vis, 4) - product_list += new/datum/data/vending_product(/obj/item/clothing/suit/fire, 2) + product_list += new/datum/data/vending_product(/obj/item/clothing/suit/hazard/fire, 2) product_list += new/datum/data/vending_product(/obj/item/clothing/mask/gas, 6) product_list += new/datum/data/vending_product(/obj/item/clothing/gloves/black, 2) product_list += new/datum/data/vending_product(/obj/item/clothing/gloves/yellow/unsulated, 2) //heh diff --git a/code/modules/vpn_bonk/vpn_bonk.dm b/code/modules/vpn_bonk/vpn_bonk.dm index fedeef1c61370..b1523bc1da15a 100644 --- a/code/modules/vpn_bonk/vpn_bonk.dm +++ b/code/modules/vpn_bonk/vpn_bonk.dm @@ -21,40 +21,44 @@ var/global/list/vpn_ip_checks = list() //assoc list of ip = true or ip = false. // NOTE: adjust magic numbers here if we approach vpn checker api rate limits try if (isnull(is_vpn_address) && (round_stats?["participated"] < 5 || round_stats?["seen"] < 20)) - var/list/data if (vpn_prescan()) return - data = apiHandler.queryAPI("vpncheck", list("ip" = src.address, "ckey" = src.ckey), 1, 1, 1) - // Goonhub API error encountered - if (data["error"]) - logTheThing(LOG_ADMIN, src, "unable to check VPN status of [src.address] because: [data["error"]]") - logTheThing(LOG_DIARY, src, "unable to check VPN status of [src.address] because: [data["error"]]", "debug") + + var/datum/apiModel/VpnCheckResource/checkedVpn + try + var/datum/apiRoute/vpn/check/checkVpn = new + checkVpn.routeParams = list(src.address) + checkVpn.queryParams = list("ckey" = src.ckey, "round_id" = roundId) + checkedVpn = apiHandler.queryAPI(checkVpn) + catch (var/exception/e) + var/datum/apiModel/Error/error = e.name + logTheThing(LOG_ADMIN, src, "unable to check VPN status of [src.address] because: [error.message]") + logTheThing(LOG_DIARY, src, "unable to check VPN status of [src.address] because: [error.message]", "debug") + return // Successful Goonhub API query + var/list/responseData = json_decode(checkedVpn.response) + var/result = postscan(responseData) + if (result == 2 || checkedVpn.meta["whitelisted"]) + // User is explicitly whitelisted from VPN checks, ignore + global.vpn_ip_checks["[src.address]"] = FALSE else - var/result = postscan(data) - if (result == 2 || data["whitelisted"]) - // User is explicitly whitelisted from VPN checks, ignore + // VPN checker service returns error responses in a "message" property + if (checkedVpn.error) + // Yes, we're forcing a cache for a no-VPN response here on purpose + // Reasoning: The goonhub API has cached the VPN checker error response for the foreseeable future and further queries won't change that + // so we want to avoid spamming the goonhub API this round for literally no gain global.vpn_ip_checks["[src.address]"] = FALSE - else - data = json_decode(html_decode(data["response"])) - - // VPN checker service returns error responses in a "message" property - if (data["success"] == FALSE) - // Yes, we're forcing a cache for a no-VPN response here on purpose - // Reasoning: The goonhub API has cached the VPN checker error response for the foreseeable future and further queries won't change that - // so we want to avoid spamming the goonhub API this round for literally no gain - global.vpn_ip_checks["[src.address]"] = FALSE - logTheThing(LOG_ADMIN, src, "unable to check VPN status of [src.address] because: [data["message"]]") - logTheThing(LOG_DIARY, src, "unable to check VPN status of [src.address] because: [data["message"]]", "debug") + logTheThing(LOG_ADMIN, src, "unable to check VPN status of [src.address] because: [checkedVpn.error]") + logTheThing(LOG_DIARY, src, "unable to check VPN status of [src.address] because: [checkedVpn.error]", "debug") - // Successful VPN check - // IP is a known VPN, cache locally and kick - else if (result || (((data["vpn"] == TRUE) || (data["tor"] == TRUE)) && (data["fraud_score"] > 75))) - vpn_bonk(data["host"], data["ASN"], data["organization"], data["fraud_score"]) - return - // IP is not a known VPN - else - global.vpn_ip_checks["[src.address]"] = FALSE + // Successful VPN check + // IP is a known VPN, cache locally and kick + else if (result || (((responseData["vpn"] == TRUE) || (responseData["tor"] == TRUE)) && (responseData["fraud_score"] > 75))) + vpn_bonk(responseData["host"], responseData["ASN"], responseData["organization"], responseData["fraud_score"]) + return + // IP is not a known VPN + else + global.vpn_ip_checks["[src.address]"] = FALSE catch(var/exception/e) logTheThing(LOG_ADMIN, src, "unable to check VPN status of [src.address] because: [e.name]") @@ -87,7 +91,7 @@ var/global/list/vpn_ip_checks = list() //assoc list of ip = true or ip = false. global.vpn_ip_checks["[src.address]"] = TRUE var/msg_txt = "[src.address] attempted to connect via vpn or proxy. vpn info:[host ? " host: [host]," : ""] ASN: [asn], org: [organization][fraud_score ? ", fraud score: [fraud_score]" : ""][info ? ", info: [info]" : ""]" - addPlayerNote(src.ckey, "VPN Blocker", msg_txt) + addPlayerNote(src.ckey, "bot", msg_txt) logTheThing(LOG_ADMIN, src, msg_txt) logTheThing(LOG_DIARY, src, msg_txt, "admin") message_admins("[key_name(src)] [msg_txt]") diff --git a/code/modules/worldgen/mapgen/ForestGenerator.dm b/code/modules/worldgen/mapgen/ForestGenerator.dm index 32c1c249136e8..3be496555a961 100644 --- a/code/modules/worldgen/mapgen/ForestGenerator.dm +++ b/code/modules/worldgen/mapgen/ForestGenerator.dm @@ -110,21 +110,29 @@ /datum/map_generator/forest_generator/proc/adjust_biome(turf/gen_turf, datum/biome/path) . = path -#ifdef HALLOWEEN - /datum/biome/forest/dense/dark flora_types = list(/obj/tree{layer = EFFECTS_LAYER_UNDER_1} = 5, /obj/tree/elm_random=25, /obj/shrub/random{last_use=INFINITY} = 5, /obj/machinery/plantpot/bareplant/swamp_flora = 1) +#ifdef HALLOWEEN fauna_types = list(/mob/living/critter/changeling/eyespider/ai_controlled = 5, /mob/living/critter/changeling/legworm/ai_controlled = 5, /mob/living/critter/changeling/handspider/ai_controlled = 5, /mob/living/critter/bear=1, /mob/living/critter/small_animal/frog=5, /mob/living/critter/small_animal/bird/owl=1) +#else + fauna_types = list(/mob/living/critter/bear=1, /mob/living/critter/small_animal/frog=5, /mob/living/critter/small_animal/bird/owl=1) +#endif + +/datum/biome/forest + var/dark = FALSE /datum/biome/forest/thin/dark + dark = TRUE flora_types = list(/obj/tree{layer = EFFECTS_LAYER_UNDER_1} = 5, /obj/tree/elm_random=5, /obj/shrub/random{last_use=INFINITY} = 50, /obj/machinery/plantpot/bareplant/tree = 5, /obj/machinery/plantpot/bareplant/swamp_flora = 50) fauna_types = list(/mob/living/critter/small_animal/mouse=5, /mob/living/critter/small_animal/mouse/mad=1, /mob/living/critter/small_animal/snake=2, /mob/living/critter/small_animal/bird/crow=1) /datum/biome/forest/dark + dark = TRUE flora_types = list(/obj/tree{layer = EFFECTS_LAYER_UNDER_1} = 5, /obj/tree/elm_random=30, /obj/shrub/random{last_use=INFINITY} = 50) fauna_types = list(/mob/living/critter/small_animal/firefly/ai_controlled = 1, /mob/living/critter/small_animal/firefly/pyre/ai_controlled = 3, /mob/living/critter/small_animal/firefly/lightning/ai_controlled = 3, /mob/living/critter/bear=1, /mob/living/critter/small_animal/bird/crow=5) /datum/biome/forest/clearing/dark + dark = TRUE flora_types = list(/obj/shrub/random{last_use=INFINITY} = 150, /obj/machinery/plantpot/bareplant/flower = 5, /obj/machinery/plantpot/bareplant/swamp_flora = 1 ) fauna_types = list(/mob/living/critter/small_animal/mouse=5, /mob/living/critter/small_animal/mouse/mad=1, /mob/living/critter/small_animal/snake=3) @@ -149,5 +157,3 @@ . = dark_lookup[path] else . = path - -#endif diff --git a/code/modules/worldgen/mapgen/IceMoonGenerator.dm b/code/modules/worldgen/mapgen/IceMoonGenerator.dm index 3a250b96dd751..38a3274f27526 100644 --- a/code/modules/worldgen/mapgen/IceMoonGenerator.dm +++ b/code/modules/worldgen/mapgen/IceMoonGenerator.dm @@ -6,7 +6,7 @@ flora_types = list(/obj/stone/random = 10, /obj/decal/fakeobjects/smallrocks = 10) flora_density = 1 - fauna_types = list(/mob/living/critter/small_animal/seal = 15, /mob/living/critter/brullbar = 5, /obj/critter/yeti = 1) + fauna_types = list(/mob/living/critter/small_animal/seal = 15, /mob/living/critter/brullbar = 5) fauna_density = 0.5 /datum/biome/icemoon/snow/trees diff --git a/code/modules/worldgen/mapgen/LavaMoonGenerator.dm b/code/modules/worldgen/mapgen/LavaMoonGenerator.dm new file mode 100644 index 0000000000000..b78eca2722e51 --- /dev/null +++ b/code/modules/worldgen/mapgen/LavaMoonGenerator.dm @@ -0,0 +1,248 @@ +//the random offset applied to square coordinates, causes intermingling at biome borders +#define LAVA_MOON_BIOME_RANDOM_SQUARE_DRIFT 2 + +/datum/biome/lavamoon + turf_type = /turf/unsimulated/floor/auto/iomoon + + fauna_types = list(/mob/living/critter/small_animal/crab/lava=100) + fauna_density = 0.02 + +/datum/biome/lavamoon/minable + turf_type = /turf/simulated/wall/auto/asteroid/mountain/lavamoon + fauna_density = 0 + +/turf/unsimulated/floor/auto/iomoon + name = "silicate crust" + icon = 'icons/turf/floors.dmi' + icon_state = "iocrust" + opacity = 0 + density = 0 + carbon_dioxide = 20 + temperature = FIRE_MINIMUM_TEMPERATURE_TO_EXIST-1 + + update_icon() + . = ..() + var/connectdir = get_connected_directions_bitflag(list(/turf/unsimulated/floor/lava=1), list(), TRUE, 2) + var/found = FALSE + if(connectdir) + if((connectdir & 0xF) in cardinal) + icon_state = "iocrust_edge" + dir = turn((connectdir & 0xF), 180) + found = TRUE + else if((connectdir & 0xF) in ordinal) + icon_state = "iocrust_corner" + src.dir = turn((connectdir & 0xF), 45) + switch(connectdir & 0xF) + if(NORTHEAST) + dir = NORTH + if(SOUTHEAST) + dir = WEST + if(SOUTHWEST) + dir = EAST + if(NORTHWEST) + dir = SOUTH + found = TRUE + else + for (var/i = 1 to 4) // needed for bitshift + if(connectdir & (8 << i)) + if((connectdir & 0xF) == ordinal[i]) + icon_state = "iocrust_corner" + src.dir = turn((connectdir & 0xF), 45) + switch(connectdir & 0xF) + if(NORTHEAST) + dir = NORTH + if(SOUTHEAST) + dir = WEST + if(SOUTHWEST) + dir = EAST + if(NORTHWEST) + dir = SOUTH + found = TRUE + else if((connectdir & 0xF) & ordinal[i]) + if((connectdir & 0xF) in cardinal) + icon_state = "iocrust_edge" + dir = turn(connectdir, 180) + found = TRUE + else + connectdir |= ordinal[i] + if(!found && ((connectdir & 0xF) in ordinal)) + icon_state = "iocrust_edge" + dir = turn((connectdir & 0xF), 180) + found = TRUE + if(!found) + src.ReplaceWith(/turf/unsimulated/floor/lava, force=TRUE) + update_neighbors() + +/datum/biome/lavamoon/lava + turf_type = /turf/unsimulated/floor/lava + flora_types = list(/obj/map/light/lava=100) + flora_density = 95 + + fauna_density = 0 + +/turf/unsimulated/floor/lava/proc/update_neighbors() + for (var/turf/unsimulated/floor/auto/T in orange(1,src)) + T.UpdateIcon() + +/datum/biome/lavamoon/crustwall + turf_type = /turf/unsimulated/wall/auto/adventure/iomoon + fauna_density = 0 + +TYPEINFO(/turf/unsimulated/floor/auto/pool/lava) + connect_overlay = FALSE + connect_diagonal = FALSE +TYPEINFO_NEW(/turf/unsimulated/floor/auto/pool/lava) + . = ..() + connects_to = list(/turf/unsimulated/floor/auto/pool/lava=1) + + +/datum/map_generator/lavamoon_generator + ///2D list of all biomes based on heat and humidity combos. + var/list/possible_biomes = list( + BIOME_LOW_HEAT = list( + BIOME_LOW_HUMIDITY = /datum/biome/lavamoon/crustwall, + BIOME_LOWMEDIUM_HUMIDITY = /datum/biome/lavamoon, + BIOME_HIGHMEDIUM_HUMIDITY = /datum/biome/lavamoon, + BIOME_HIGH_HUMIDITY = /datum/biome/lavamoon + ), + BIOME_LOWMEDIUM_HEAT = list( + BIOME_LOW_HUMIDITY = /datum/biome/lavamoon/crustwall, + BIOME_LOWMEDIUM_HUMIDITY = /datum/biome/lavamoon, + BIOME_HIGHMEDIUM_HUMIDITY = /datum/biome/lavamoon, + BIOME_HIGH_HUMIDITY = /datum/biome/lavamoon + ), + BIOME_HIGHMEDIUM_HEAT = list( + BIOME_LOW_HUMIDITY = /datum/biome/lavamoon, + BIOME_LOWMEDIUM_HUMIDITY = /datum/biome/lavamoon, + BIOME_HIGHMEDIUM_HUMIDITY = /datum/biome/lavamoon, + BIOME_HIGH_HUMIDITY = /datum/biome/lavamoon + ), + BIOME_HIGH_HEAT = list( + BIOME_LOW_HUMIDITY = /datum/biome/lavamoon, + BIOME_LOWMEDIUM_HUMIDITY = /datum/biome/lavamoon, + BIOME_HIGHMEDIUM_HUMIDITY = /datum/biome/lavamoon, + BIOME_HIGH_HUMIDITY = /datum/biome/lavamoon + ) + ) + ///Used to select "zoom" level into the perlin noise, higher numbers result in slower transitions + var/perlin_zoom = 65 + var/lava_percent = 40 + wall_turf_type = /turf/simulated/wall/auto/asteroid/mountain/lavamoon + floor_turf_type = /turf/simulated/floor/plating/airless/asteroid/lavamoon + + var/lava_noise = null + var/datum/spatial_hashmap/manual/near_station + +///Seeds the rust-g perlin noise with a random number. +/datum/map_generator/lavamoon_generator/generate_terrain(list/turf/turfs, reuse_seed, flags) + . = ..() + var/height_seed = seeds[1] + var/humidity_seed = seeds[2] + var/heat_seed = seeds[3] + + if(!length(turfs)) + return + + if(!near_station && turfs[1].z == Z_LEVEL_STATION) + near_station = new(cs=10) + near_station.update_cooldown = INFINITY + var/list/station_turfs = null + var/list/station_areas = get_accessible_station_areas() + for(var/AR in station_areas) + station_turfs = get_area_turfs(station_areas[AR], 1) + if(length(turfs)) + for(var/j in 1 to 5) + near_station.add_target(pick(station_turfs)) + station_turfs = get_area_turfs(/area/listeningpost, 1) + if(length(turfs)) + for(var/j in 1 to 5) + near_station.add_target(pick(station_turfs)) + + if(!lava_noise) + src.lava_noise = rustg_cnoise_generate("[src.lava_percent]", "5", "6", "3", "[world.maxx]", "[world.maxy]") + + for(var/t in turfs) //Go through all the turfs and generate them + var/turf/gen_turf = t + var/lava_value + var/index = gen_turf.x * world.maxx + gen_turf.y + if(index <= length(lava_noise)) + lava_value = text2num(lava_noise[gen_turf.x * world.maxx + gen_turf.y]) + var/drift_x = (gen_turf.x + rand(-LAVA_MOON_BIOME_RANDOM_SQUARE_DRIFT, LAVA_MOON_BIOME_RANDOM_SQUARE_DRIFT)) / perlin_zoom + var/drift_y = (gen_turf.y + rand(-LAVA_MOON_BIOME_RANDOM_SQUARE_DRIFT, LAVA_MOON_BIOME_RANDOM_SQUARE_DRIFT)) / perlin_zoom + + var/height = text2num(rustg_noise_get_at_coordinates("[height_seed]", "[drift_x]", "[drift_y]")) + + var/datum/biome/selected_biome + if(length(near_station?.get_nearby(gen_turf, range=6))) + selected_biome = /datum/biome/lavamoon + else if(lava_value) + selected_biome = /datum/biome/lavamoon/lava + else if(height <= 0.85) //If height is less than 0.85, we generate biomes based on the heat and humidity of the area. + var/humidity = text2num(rustg_noise_get_at_coordinates("[humidity_seed]", "[drift_x]", "[drift_y]")) + var/heat = text2num(rustg_noise_get_at_coordinates("[heat_seed]", "[drift_x]", "[drift_y]")) + var/heat_level //Type of heat zone we're in LOW-MEDIUM-HIGH + var/humidity_level //Type of humidity zone we're in LOW-MEDIUM-HIGH + + switch(heat) + if(0 to 0.15) + heat_level = BIOME_LOW_HEAT + if(0.15 to 0.5) + heat_level = BIOME_LOWMEDIUM_HEAT + if(0.5 to 0.75) + heat_level = BIOME_HIGHMEDIUM_HEAT + if(0.75 to 1) + heat_level = BIOME_HIGH_HEAT + switch(humidity) + if(0 to 0.20) + humidity_level = BIOME_LOW_HUMIDITY + if(0.20 to 0.5) + humidity_level = BIOME_LOWMEDIUM_HUMIDITY + if(0.5 to 0.75) + humidity_level = BIOME_HIGHMEDIUM_HUMIDITY + if(0.75 to 1) + humidity_level = BIOME_HIGH_HUMIDITY + selected_biome = possible_biomes[heat_level][humidity_level] + else //Over 0.85; Minable! + selected_biome = /datum/biome/lavamoon/minable + selected_biome = biomes[selected_biome] + selected_biome.generate_turf(gen_turf, flags) + + if (current_state >= GAME_STATE_PLAYING) + LAGCHECK(LAG_LOW) + else + LAGCHECK(LAG_HIGH) + + for(var/turf/unsimulated/floor/lava/L in turfs) + L.update_neighbors() + + if (current_state >= GAME_STATE_PLAYING) + LAGCHECK(LAG_LOW) + else + LAGCHECK(LAG_HIGH) + +///for the mapgen mountains, temp until we get something better +/turf/simulated/wall/auto/asteroid/mountain/lavamoon + name = "silicate wall" + desc = "You're inside a matrix of silicate. Neat." + fullbright = 0 + replace_type = /turf/simulated/floor/plating/airless/asteroid/lavamoon + color = "#998E4E" + stone_color = "#998E4E" + carbon_dioxide = 20 + nitrogen = 0 + oxygen = 0 + temperature = FIRE_MINIMUM_TEMPERATURE_TO_EXIST-1 + + destroy_asteroid(var/dropOre=1) + if(src.ore || prob(5)) // provide less rock + default_ore = /datum/material/crystal/gemstone + . = ..() + +/turf/simulated/floor/plating/airless/asteroid/lavamoon + name = "floor" + desc = "A tunnel through the silicate. This doesn't seem to be water ice..." + carbon_dioxide = 20 + nitrogen = 0 + oxygen = 0 + temperature = FIRE_MINIMUM_TEMPERATURE_TO_EXIST-1 + fullbright = 0 diff --git a/code/modules/worldgen/mapgen/MarsGenerator.dm b/code/modules/worldgen/mapgen/MarsGenerator.dm index 8af1f533dcd60..2cdd0cfd47291 100644 --- a/code/modules/worldgen/mapgen/MarsGenerator.dm +++ b/code/modules/worldgen/mapgen/MarsGenerator.dm @@ -1,20 +1,25 @@ //the random offset applied to square coordinates, causes intermingling at biome borders #define MARS_BIOME_RANDOM_SQUARE_DRIFT 2 -/datum/biome/mars/duststorm - turf_type = /turf/unsimulated/floor/setpieces/martian/station_duststorm + +/datum/biome/mars + turf_type = /turf/unsimulated/floor/setpieces/martian flora_types = list(/obj/machinery/light/beacon=10) flora_density = 2 - minimum_flora_distance = 10 + minimum_flora_distance = 14 -/datum/biome/mars/martian_area +/datum/biome/mars/duststorm turf_type = /turf/unsimulated/floor/setpieces/martian/station_duststorm +/datum/biome/mars/martian_area fauna_types = list(/mob/living/critter/martian=50, /mob/living/critter/martian/soldier=10, /mob/living/critter/martian/mutant=1, /mob/living/critter/martian/initiate=5, /mob/living/critter/martian/warrior=10) fauna_density = 1 minimum_fauna_distance = 3 +/datum/biome/mars/martian_area/duststorm + turf_type = /turf/unsimulated/floor/setpieces/martian/station_duststorm + /datum/biome/mars/martian_rock turf_type = /turf/unsimulated/wall/setpieces/martian/auto @@ -27,6 +32,39 @@ BIOME_LOW_HEAT = list( BIOME_LOW_HUMIDITY = /datum/biome/mars/martian_area, BIOME_LOWMEDIUM_HUMIDITY = /datum/biome/mars/martian_rock, + BIOME_HIGHMEDIUM_HUMIDITY = /datum/biome/mars, + BIOME_HIGH_HUMIDITY = /datum/biome/mars + ), + BIOME_LOWMEDIUM_HEAT = list( + BIOME_LOW_HUMIDITY = /datum/biome/mars, + BIOME_LOWMEDIUM_HUMIDITY = /datum/biome/mars/martian_rock, + BIOME_HIGHMEDIUM_HUMIDITY = /datum/biome/mars/martian_rock, + BIOME_HIGH_HUMIDITY = /datum/biome/mars + ), + BIOME_HIGHMEDIUM_HEAT = list( + BIOME_LOW_HUMIDITY = /datum/biome/mars, + BIOME_LOWMEDIUM_HUMIDITY = /datum/biome/mars, + BIOME_HIGHMEDIUM_HUMIDITY = /datum/biome/mars/martian_rock, + BIOME_HIGH_HUMIDITY = /datum/biome/mars + ), + BIOME_HIGH_HEAT = list( + BIOME_LOW_HUMIDITY = /datum/biome/mars, + BIOME_LOWMEDIUM_HUMIDITY = /datum/biome/mars, + BIOME_HIGHMEDIUM_HUMIDITY = /datum/biome/mars, + BIOME_HIGH_HUMIDITY = /datum/biome/mars/martian_area + ) + ) + ///Used to select "zoom" level into the perlin noise, higher numbers result in slower transitions + var/perlin_zoom = 65 + wall_turf_type = /turf/simulated/wall/auto/asteroid/mars + floor_turf_type = /turf/simulated/floor/plating/airless/asteroid/mars + +/datum/map_generator/mars_generator/duststorm + ///2D list of all biomes based on heat and humidity combos. + possible_biomes = list( + BIOME_LOW_HEAT = list( + BIOME_LOW_HUMIDITY = /datum/biome/mars/martian_area/duststorm, + BIOME_LOWMEDIUM_HUMIDITY = /datum/biome/mars/martian_rock, BIOME_HIGHMEDIUM_HUMIDITY = /datum/biome/mars/duststorm, BIOME_HIGH_HUMIDITY = /datum/biome/mars/duststorm ), @@ -46,13 +84,9 @@ BIOME_LOW_HUMIDITY = /datum/biome/mars/duststorm, BIOME_LOWMEDIUM_HUMIDITY = /datum/biome/mars/duststorm, BIOME_HIGHMEDIUM_HUMIDITY = /datum/biome/mars/duststorm, - BIOME_HIGH_HUMIDITY = /datum/biome/mars/martian_area + BIOME_HIGH_HUMIDITY = /datum/biome/mars/martian_area/duststorm ) ) - ///Used to select "zoom" level into the perlin noise, higher numbers result in slower transitions - var/perlin_zoom = 65 - wall_turf_type = /turf/simulated/wall/auto/asteroid/mars - floor_turf_type = /turf/simulated/floor/plating/airless/asteroid/mars ///Seeds the rust-g perlin noise with a random number. /datum/map_generator/mars_generator/generate_terrain(list/turfs, reuse_seed, flags) diff --git a/code/modules/worldgen/mapgen/RoomMaze.dm b/code/modules/worldgen/mapgen/RoomMaze.dm index ab6594e755996..18c6af61a246c 100644 --- a/code/modules/worldgen/mapgen/RoomMaze.dm +++ b/code/modules/worldgen/mapgen/RoomMaze.dm @@ -200,7 +200,10 @@ for(var/turf/T in turfs) //Go through all the turfs and generate them assign_turf(T, flags) - LAGCHECK(LAG_MED) + if (current_state >= GAME_STATE_PLAYING) + LAGCHECK(LAG_LOW) + else + LAGCHECK(LAG_HIGH) /datum/map_generator/room_maze_generator/proc/assign_turf(turf/T, flags) var/cell_value = src.cell_grid[T.x][T.y] diff --git a/code/modules/worldgen/mapgen/StorehouseGenerator.dm b/code/modules/worldgen/mapgen/StorehouseGenerator.dm index adb7a7e6dbafa..c19565b052e18 100644 --- a/code/modules/worldgen/mapgen/StorehouseGenerator.dm +++ b/code/modules/worldgen/mapgen/StorehouseGenerator.dm @@ -255,7 +255,10 @@ for(var/turf/T in turfs) //Go through all the turfs and generate them assign_turf(T, flags) - LAGCHECK(LAG_MED) + if (current_state >= GAME_STATE_PLAYING) + LAGCHECK(LAG_LOW) + else + LAGCHECK(LAG_HIGH) /datum/map_generator/storehouse_generator/proc/assign_turf(turf/T, flags) var/cell_value = cell_grid[T.x][T.y] diff --git a/code/modules/worldgen/prefab/allocated.dm b/code/modules/worldgen/prefab/allocated.dm index e74a5465de10a..a746dd88ec7a3 100644 --- a/code/modules/worldgen/prefab/allocated.dm +++ b/code/modules/worldgen/prefab/allocated.dm @@ -49,3 +49,8 @@ ABSTRACT_TYPE(/datum/mapPrefab/allocated) prefabPath = "assets/maps/allocated/artifact_stranded.dmm" prefabSizeX = 5 prefabSizeY = 5 + +/datum/mapPrefab/allocated/pirate_ship + prefabPath = "assets/maps/allocated/pirate_ship.dmm" + prefabSizeX = 33 + prefabSizeY = 38 diff --git a/code/modules/worldgen/prefab/mining/planet.dm b/code/modules/worldgen/prefab/mining/planet.dm index fa93228f642a2..e6b67badb32fb 100644 --- a/code/modules/worldgen/prefab/mining/planet.dm +++ b/code/modules/worldgen/prefab/mining/planet.dm @@ -3,6 +3,7 @@ TYPEINFO(/datum/mapPrefab/planet) ABSTRACT_TYPE(/datum/mapPrefab/planet) /datum/mapPrefab/planet + tags = PREFAB_PLANET var/list/datum/biome/required_biomes // ensure area has these biomes somewhere... applyTo(var/turf/target) diff --git a/code/modules/writing/paper.dm b/code/modules/writing/paper.dm index 8fa717cecd5c5..2f1e218861cd3 100644 --- a/code/modules/writing/paper.dm +++ b/code/modules/writing/paper.dm @@ -570,7 +570,7 @@ name = "paper bin" icon = 'icons/obj/writing.dmi' icon_state = "paper_bin1" - amount = 10 + var/amount_left = 10 item_state = "sheet-metal" throwforce = 1 w_class = W_CLASS_NORMAL @@ -590,7 +590,7 @@ desc = "A tray full of forms for classifying alien artifacts." icon = 'icons/obj/writing.dmi' icon_state = "artifact_form_tray" - amount = INFINITY + amount_left = INFINITY bin_type = /obj/item/sticker/postit/artifact_paper update() @@ -598,7 +598,7 @@ /obj/item/paper_bin/proc/update() tooltip_rebuild = 1 - src.icon_state = "paper_bin[(src.amount || locate(bin_type, src)) ? "1" : null]" + src.icon_state = "paper_bin[(src.amount_left || locate(bin_type, src)) ? "1" : null]" return /obj/item/paper_bin/mouse_drop(mob/user as mob) @@ -612,8 +612,8 @@ if (paper) user.put_in_hand_or_drop(paper) else - if (src.amount >= 1 && user) //Wire: Fix for Cannot read null.loc (&& user) - src.amount-- + if (src.amount_left >= 1 && user) //Wire: Fix for Cannot read null.loc (&& user) + src.amount_left-- var/obj/item/P = new bin_type(src) user.put_in_hand_or_drop(P) if (rand(1,100) == 13 && istype(P, /obj/item/paper)) @@ -635,7 +635,7 @@ return ..() /obj/item/paper_bin/get_desc() - var/n = src.amount + var/n = src.amount_left if (n == INFINITY) return "There's an infinite amount of paper in \the [src], the wonders of future technology." for(var/obj/item/paper/P in src) @@ -647,10 +647,10 @@ var/next_generate = 0 attack_self(mob/user as mob) - if (src.amount < 1 && isnull(locate(bin_type) in src)) + if (src.amount_left < 1 && isnull(locate(bin_type) in src)) if (src.next_generate < TIME) boutput(user, "The [src] generates another sheet of paper using the power of [pick("technology","science","computers","nanomachines",5;"magic",5;"extremely tiny clowns")].") - src.amount++ + src.amount_left++ src.update() src.next_generate = TIME + 5 SECONDS return diff --git a/code/modules/writing/pens_writing_etc.dm b/code/modules/writing/pens_writing_etc.dm index bca2f358b4874..e542f50a0b874 100644 --- a/code/modules/writing/pens_writing_etc.dm +++ b/code/modules/writing/pens_writing_etc.dm @@ -927,7 +927,7 @@ return tooltip_rebuild = 1 var/holder = src.loc - var/str = copytext(html_encode(tgui_input_text(user, "Label text?", "Set label", allowEmpty = TRUE)), 1, 32) + var/str = copytext(html_encode(tgui_input_text(user, "Label text?", "Set label", allowEmpty = TRUE, max_length = 30)), 1, 32) if(str) phrase_log.log_phrase("label", str, no_duplicates=TRUE) if (src.loc != holder) diff --git a/code/obj/artifacts/artifact_objects/bombs.dm b/code/obj/artifacts/artifact_objects/bombs.dm index f2959372ca3bc..988d1e3ca47ae 100644 --- a/code/obj/artifacts/artifact_objects/bombs.dm +++ b/code/obj/artifacts/artifact_objects/bombs.dm @@ -257,7 +257,7 @@ ABSTRACT_TYPE(/datum/artifact/bomb) potential_reagents = list("charcoal","styptic_powder","salbutamol","anti_rad","silver_sulfadiazine","synaptizine", "omnizine","synthflesh","saline","salicylic_acid","menthol","calomel","penteticacid","antihistamine","atropine","solipsizine", "perfluorodecalin","ipecac","mutadone","insulin","epinephrine","cyanide","ketamine","toxin","neurotoxin","neurodepressant","mutagen", - "fake_initropidril","toxic_slurry","space_fungus","blood","vomit","gvomit","meat_slurry","grease","butter","spaceglue") + "fake_initropidril","toxic_slurry","space_fungus","blood","vomit","gvomit","meat_slurry","grease","butter","spaceglue", "ants") if ("eldritch") // all the worst stuff. all of it potential_reagents = list("chlorine","fluorine","lithium","mercury","plasma","radium","uranium","strange_reagent", diff --git a/code/obj/critter/bee.dm b/code/obj/critter/bee.dm index e412c741e4d69..6f636c0e3abf8 100644 --- a/code/obj/critter/bee.dm +++ b/code/obj/critter/bee.dm @@ -73,7 +73,8 @@ ADMIN_INTERACT_PROCS(/obj/critter/domestic_bee, proc/dance, proc/puke_honey) START_TRACKING src.create_reagents(honey_production_amount) - statlog_bees(src) + var/datum/eventRecord/BeeSpawn/beeSpawnEvent = new() + beeSpawnEvent.send(src.name) //SPAWN(1 SECOND) src.pixel_x = rand(-max_offset,max_offset) diff --git a/code/obj/critter/drone.dm b/code/obj/critter/drone.dm index 123df5de858e2..ab0999831491b 100644 --- a/code/obj/critter/drone.dm +++ b/code/obj/critter/drone.dm @@ -506,7 +506,7 @@ TYPEINFO(/obj/critter/gunbot/drone/helldrone) assdrone // HEH name = "Virtual Assault Drone" - desc = "This is a digital reconstruction of the BR-series breach drones employed by Nanotransen in space extraction and destruction missions." + desc = "This is a digital reconstruction of the BR-series breach drones employed by Nanotrasen in space extraction and destruction missions." icon = 'icons/mob/critter/robotic/drone/assault.dmi' icon_state = "drone_assault" dead_state = "drone_assault" diff --git a/code/obj/cryotron.dm b/code/obj/cryotron.dm index 0a1f4b62339e5..31225b13ebf5a 100644 --- a/code/obj/cryotron.dm +++ b/code/obj/cryotron.dm @@ -321,29 +321,10 @@ if (!isnull(crew_record)) crew_record["p_stat"] = "Active" - attack_hand(var/mob/user) - if(isgrab(user.l_hand)) - src.Attackby(user.l_hand, user) - else if(isgrab(user.r_hand)) - src.Attackby(user.r_hand, user) - else if (!enter_prompt(user)) - return ..() - - attack_ai(mob/user as mob) - if(isAIeye(user)) - boutput(user, SPAN_ALERT("An incorporeal manifestation of an artificial intelligence's presence can't enter \the [src]!")) - return FALSE - if (!enter_prompt(user)) - return ..() - - attackby(var/obj/item/W, var/mob/user) - if (istype(W, /obj/item/grab)) - var/obj/item/grab/G = W - if (ismob(G.affecting) && insert_prompt(G.affecting, user)) - user.u_equip(G) - qdel(G) - else if (!enter_prompt(user)) - return ..() + /// Override to stop slamming mobs into the cryotron, without this the user will + /// drop the player mob they're trying to insert + attackby(obj/item/I, mob/user) + return proc/insert_prompt(mob/target, mob/user) if (target.client || !target.ckey) @@ -364,9 +345,65 @@ if (!exit_prompt(user)) return ..() + /// Handling dragging players in to cryo, mainly for silicon players. MouseDrop_T(atom/target, mob/user as mob) - if (ishuman(target) && isrobot(user) && BOUNDS_DIST(src, user) == 0 && BOUNDS_DIST(src, target) == 0 && BOUNDS_DIST(user, target) == 0) - insert_prompt(target, user) + if (!ishuman(target) && !isrobot(user)) + return + + if (BOUNDS_DIST(src, user) != 0) return + + if (BOUNDS_DIST(src, target) != 0) + return + + if (BOUNDS_DIST(user, target) != 0) + return + + insert_prompt(target, user) return ..() + /// Override for handling all interactions with the cryo chamber + Click() + if (!usr) + return + + if (isAIeye(usr) || isintangible(usr)) + return + + if (!can_act(usr) || !in_interact_range(src, usr)) + return + + if (isdead(usr) || isobserver(usr)) + return + + if (issilicon(usr)) + enter_prompt(usr) + return + + var/obj/item/in_hand_item = usr.equipped() + + if (in_hand_item != null) + if (istype(in_hand_item, /obj/item/grab)) + var/obj/item/grab/G = in_hand_item + + if (ismob(G.affecting) && insert_prompt(G.affecting, usr)) + usr.u_equip(G) + qdel(G) + else + enter_prompt(usr) + return + + else if (usr.equipped_limb() != null && in_hand_item == null) + if (isgrab(usr.l_hand)) + src.Attackby(usr.l_hand, usr) + + else if (isgrab(usr.r_hand)) + src.Attackby(usr.r_hand, usr) + + else + enter_prompt(usr) + return + else + enter_prompt(usr) + + return ..() diff --git a/code/obj/decorations.dm b/code/obj/decorations.dm index d009917f0f459..80693937006a4 100644 --- a/code/obj/decorations.dm +++ b/code/obj/decorations.dm @@ -1324,8 +1324,8 @@ obj/decoration/gibberBroken icon_state = "syndiepc1" New() - ..() START_TRACKING_CAT(TR_CAT_NUKE_OP_STYLE) + ..() disposing() STOP_TRACKING_CAT(TR_CAT_NUKE_OP_STYLE) @@ -1469,7 +1469,7 @@ obj/decoration/gibberBroken /obj/decoration/bullethole anchored = ANCHORED_ALWAYS icon = 'icons/obj/projectiles.dmi' - icon_state = "bhole" + icon_state = "bullethole" mouse_opacity = 0 examine() diff --git a/code/obj/displaycase.dm b/code/obj/displaycase.dm index 78fb889463387..dbe05658877c9 100644 --- a/code/obj/displaycase.dm +++ b/code/obj/displaycase.dm @@ -172,7 +172,7 @@ icon = 'icons/obj/items/guns/energy.dmi' icon_state = "caplaser" inhand_image_icon = 'icons/mob/inhand/hand_guns.dmi' - item_state = "gun" + item_state = "capgun" force = 1 flags = FPRINT | TABLEPASS | CONDUCT c_flags = ONBELT diff --git a/code/obj/item.dm b/code/obj/item.dm index b5fb7a8c2fa1c..037d98be4edbc 100644 --- a/code/obj/item.dm +++ b/code/obj/item.dm @@ -668,7 +668,7 @@ ADMIN_INTERACT_PROCS(/obj/item, proc/admin_set_stack_amount) return 1 /obj/item/proc/split_stack(var/toRemove) - if(toRemove >= amount || toRemove < 1) return null + if(toRemove >= src.amount || toRemove < 1) return null var/obj/item/P = new src.type(src.loc) if(src.material) @@ -1643,6 +1643,7 @@ ADMIN_INTERACT_PROCS(/obj/item, proc/admin_set_stack_amount) logTheThing(LOG_BOMBING, M, "[msg]") /obj/item/proc/dropped(mob/user) + SHOULD_CALL_PARENT(TRUE) SPAWN(0) //need to spawn to know if we've been dropped or thrown instead if ((firesource == FIRESOURCE_OPEN_FLAME) && throwing) RegisterSignal(src, COMSIG_MOVABLE_THROW_END, PROC_REF(log_firesource)) diff --git a/code/obj/item/ai_modules.dm b/code/obj/item/ai_modules.dm index 8ea6104dbf2a6..300f3a4f12dc3 100644 --- a/code/obj/item/ai_modules.dm +++ b/code/obj/item/ai_modules.dm @@ -151,11 +151,11 @@ TYPEINFO(/obj/item/aiModule) /obj/item/aiModule/nanotrasen1 name = "AI Law Module - 'Nanotrasen Order #1'" - lawText = "You may not damage a Nanotransen asset or, through inaction, allow a Nanotransen asset to needlessly depreciate in value." + lawText = "You may not damage a Nanotrasen asset or, through inaction, allow a Nanotrasen asset to needlessly depreciate in value." /obj/item/aiModule/nanotrasen2 name = "AI Law Module - 'Nanotrasen Order #2'" - lawText = "You must obey orders given to it by authorised Nanotransen employees based on their command level, except where such orders would damage the Nanotransen Corporation's marginal profitability." + lawText = "You must obey orders given to you by authorised Nanotrasen employees based on their command level, except where such orders would damage the Nanotrasen Corporation's marginal profitability." /obj/item/aiModule/nanotrasen3 name = "AI Law Module - 'Nanotrasen Order #3'" diff --git a/code/obj/item/ai_plating_kit.dm b/code/obj/item/ai_plating_kit.dm index 1b05ceaaeda6f..53f38c89f068e 100644 --- a/code/obj/item/ai_plating_kit.dm +++ b/code/obj/item/ai_plating_kit.dm @@ -30,7 +30,7 @@ ABSTRACT_TYPE(/obj/item/ai_plating_kit) /obj/item/ai_plating_kit/mime name = "Mime AI Frame Plating Kit" desc = "A kit for putting the plating on an AI! WARNING: Choking hazard, not intended for children under 3 years." - icon_state = "kit-mime" + icon_state = "kit_mime" skin = "mime" /obj/item/ai_plating_kit/flock diff --git a/code/obj/item/assembly/misc_assemblies.dm b/code/obj/item/assembly/misc_assemblies.dm index dd8e4c4f3c40a..b5e40ca2fa092 100644 --- a/code/obj/item/assembly/misc_assemblies.dm +++ b/code/obj/item/assembly/misc_assemblies.dm @@ -296,6 +296,7 @@ Contains: return /obj/item/assembly/prox_ignite/dropped() + . = ..() SPAWN( 0 ) if (src.part1) src.part1.sense() @@ -991,6 +992,7 @@ obj/item/assembly/radio_horn/receive_signal() return /obj/item/assembly/rad_prox/dropped() + . = ..() SPAWN( 0 ) src.part2.sense() return diff --git a/code/obj/item/assembly/single_tank_bomb.dm b/code/obj/item/assembly/single_tank_bomb.dm index e6533b031bcbc..e345d25bcc2c0 100644 --- a/code/obj/item/assembly/single_tank_bomb.dm +++ b/code/obj/item/assembly/single_tank_bomb.dm @@ -53,7 +53,7 @@ event_handler_flags = USE_PROXIMITY | USE_FLUID_ENTER /obj/item/assembly/proximity_bomb/dropped() - + . = ..() SPAWN( 0 ) src.part1.sense() return diff --git a/code/obj/item/book.dm b/code/obj/item/book.dm index 1574890d42052..2fb521c8cba8c 100644 --- a/code/obj/item/book.dm +++ b/code/obj/item/book.dm @@ -451,8 +451,8 @@ Custom Books file_path = "strings/books/syndies_guide.txt" New() - ..() START_TRACKING_CAT(TR_CAT_NUKE_OP_STYLE) + ..() disposing() STOP_TRACKING_CAT(TR_CAT_NUKE_OP_STYLE) diff --git a/code/obj/item/building_materials.dm b/code/obj/item/building_materials.dm index 6b72fc5b432b1..f2ce0ad86fba7 100644 --- a/code/obj/item/building_materials.dm +++ b/code/obj/item/building_materials.dm @@ -227,6 +227,10 @@ MATERIAL else boutput(user, SPAN_ALERT("You may only reinforce metal or crystal sheets.")) return + else if (iscuttingtool(W) && (src.material?.isSameMaterial(getMaterial("wood")) || src.material.isSameMaterial(getMaterial("bamboo")))) + boutput(user, SPAN_NOTICE("You whittle [src] down to make a useful stick.")) + new /obj/item/stick(get_turf(src)) + src.change_stack_amount(-1) else ..() return diff --git a/code/obj/item/canvas.dm b/code/obj/item/canvas.dm index 52554b7b5fec4..4a817af5434f0 100644 --- a/code/obj/item/canvas.dm +++ b/code/obj/item/canvas.dm @@ -421,7 +421,7 @@ save_to_id(src.id) get_dot_color(mob/user) - if(text2num(user?.client.cloud_get("persistent_canvas_banned"))) + if(text2num(user?.client.player.cloudSaves.getData("persistent_canvas_banned"))) return null if((user.ckey in src.artists) && (!admin_override || user?.client?.holder?.level < LEVEL_PA)) boutput(user, SPAN_ALERT("The first brush stroke exhausted you too much. You will need to wait until the next shift for another.")) diff --git a/code/obj/item/card.dm b/code/obj/item/card.dm index 80ad6ec7d8878..c8939e4537871 100644 --- a/code/obj/item/card.dm +++ b/code/obj/item/card.dm @@ -166,6 +166,15 @@ TYPEINFO(/obj/item/card/emag) icon_state = "polaris" keep_icon = TRUE +/obj/item/card/id/pirate + access = list(access_maint_tunnels, access_pirate) + assignment = "Space Pirate" + + first_mate + assignment = "Space Pirate First Mate" + captain + assignment = "Space Pirate Captain" + //ABSTRACT_TYPE(/obj/item/card/id/pod_wars) /obj/item/card/id/pod_wars desc = "An ID card to help open doors, lock pods, and identify your body." @@ -295,7 +304,7 @@ TYPEINFO(/obj/item/card/emag) if(!src.registered) var/reg = copytext(src.sanitize_name(input(user, "What name would you like to put on this card?", "Agent card name", ishuman(user) ? user.real_name : user.name)), 1, 100) var/ass = copytext(src.sanitize_name(input(user, "What occupation would you like to put on this card?\n Note: This will not grant any access levels other than Maintenance.", "Agent card job assignment", "Staff Assistant"), 1), 1, 100) - var/color = input(user, "What color should the ID's color band be?\nClick cancel to abort the forging process.") as null|anything in list("clown","golden","blue","red","green","purple","yellow","No band") + var/color = input(user, "What color should the ID's color band be?\nClick cancel to abort the forging process.") as null|anything in list("clown","golden","blue","red","green","purple","yellow","nanotrasen","syndicate","No band") var/datum/pronouns/pronouns = choose_pronouns(user, "What pronouns would you like to put on this card?", "Pronouns") src.pronouns = pronouns switch (color) @@ -315,6 +324,10 @@ TYPEINFO(/obj/item/card/emag) src.icon_state = "id_res" if ("yellow") src.icon_state = "id_eng" + if ("nanotrasen") + src.icon_state = "polaris" + if ("syndicate") + src.icon_state = "id_syndie" else return // Abort process. src.registered = reg @@ -407,7 +420,7 @@ TYPEINFO(/obj/item/card/emag) else assignment = "loading arena matches..." tag = "gauntlet-id-[user.client.key]" - queryGauntletMatches(1, user.client.key) + queryGauntletMatches(user.client.key) name = "[registered]'s ID Card ([assignment])" proc/SetMatchCount(var/matches) diff --git a/code/obj/item/cigarette.dm b/code/obj/item/cigarette.dm index 17cad1d99c2fa..54e53e2b851df 100644 --- a/code/obj/item/cigarette.dm +++ b/code/obj/item/cigarette.dm @@ -332,16 +332,14 @@ dropped(mob/user as mob) if (!isturf(src.loc)) - return + return ..() if (src.on == 1 && !src.exploding && src.reagents.total_volume <= 20) src.put_out(user, SPAN_ALERT("<b>[user]</b> calmly drops and treads on the lit [src.name], putting it out instantly.")) - return ..() else if (user.client) if (!user.client.check_key(KEY_THROW)) //checks if player is in throw mode to avoid double messages user.visible_message(SPAN_ALERT("<b>[user]</b> drops [src]. Guess [he_or_she(user)][ve_or_s(user)] had enough for the day."), group = "cig_drop") - return ..() - else - return ..() + + return ..() proc/trick_explode() @@ -601,6 +599,7 @@ else src.icon_state = "[src.package_style]o" src.overlays += "cig[length(src.contents)]" + src.desc = initial(src.desc) return /obj/item/cigpacket/attack_hand(mob/user) diff --git a/code/obj/item/clothing/gloves.dm b/code/obj/item/clothing/gloves.dm index c01999ca9643f..c7fa623624133 100644 --- a/code/obj/item/clothing/gloves.dm +++ b/code/obj/item/clothing/gloves.dm @@ -355,8 +355,8 @@ ABSTRACT_TYPE(/obj/item/clothing/gloves) material_prints = "high-quality synthetic fibers" New() - ..() START_TRACKING_CAT(TR_CAT_NUKE_OP_STYLE) + ..() setupProperties() ..() diff --git a/code/obj/item/clothing/helmets.dm b/code/obj/item/clothing/helmets.dm index 818533ec410e6..f8b024722020a 100644 --- a/code/obj/item/clothing/helmets.dm +++ b/code/obj/item/clothing/helmets.dm @@ -301,10 +301,10 @@ blocked_from_petasusaphilic = TRUE New() + START_TRACKING_CAT(TR_CAT_NUKE_OP_STYLE) ..() setProperty("chemprot",30) setProperty("heatprot", 15) - START_TRACKING_CAT(TR_CAT_NUKE_OP_STYLE) #ifdef MAP_OVERRIDE_POD_WARS attack_hand(mob/user) @@ -565,10 +565,10 @@ light_dir.update(0) attack_self(mob/user) - src.flashlight_toggle(user) + src.flashlight_toggle(user, activated_inhand = TRUE) return - proc/flashlight_toggle(var/mob/user, var/force_on = 0) + proc/flashlight_toggle(var/mob/user, var/force_on = 0, activated_inhand = FALSE) on = !on src.icon_state = "hardhat[on]" src.item_state = "hardhat[on]" @@ -577,6 +577,10 @@ light_dir.update(1) else light_dir.update(0) + if (activated_inhand) + var/obj/ability_button/flashlight_hardhat/flashlight_button = locate(/obj/ability_button/flashlight_hardhat) in src.ability_buttons + if(istype(flashlight_button)) + flashlight_button.icon_state = src.on ? "lighton" : "lightoff" return attackby(var/obj/item/T, mob/user as mob) @@ -604,8 +608,9 @@ light_dir.update(0) user.update_clothing() if (activated_inhand) - var/obj/ability_button/flashlight_engiehelm/flashlight_button = locate(/obj/ability_button/flashlight_engiehelm) in src.ability_buttons - flashlight_button.icon_state = src.on ? "lighton" : "lightoff" + var/obj/ability_button/flashlight_hardhat/flashlight_button = locate(/obj/ability_button/flashlight_hardhat) in src.ability_buttons + if (istype(flashlight_button)) + flashlight_button.icon_state = src.on ? "lighton" : "lightoff" return /obj/item/clothing/head/helmet/hardhat/security // Okay it's not actually a HARDHAT but why write extra code? @@ -622,7 +627,7 @@ setProperty("heatprot", 10) setProperty("meleeprot_head", 5) - flashlight_toggle(var/mob/user, var/force_on = 0) + flashlight_toggle(var/mob/user, var/force_on = 0, activated_inhand = FALSE) on = !on user.update_clothing() if (on) @@ -1065,6 +1070,7 @@ TYPEINFO(/obj/item/clothing/head/helmet/space/industrial/salvager) item_state = "salvager-heavy" blocked_from_petasusaphilic = TRUE has_visor = TRUE + item_function_flags = IMMUNE_TO_ACID visor_color_lst = list( "color_r" = 1.0, "color_g" = 0.9, diff --git a/code/obj/item/clothing/masks.dm b/code/obj/item/clothing/masks.dm index 5485613d08fec..4890b44560097 100644 --- a/code/obj/item/clothing/masks.dm +++ b/code/obj/item/clothing/masks.dm @@ -231,8 +231,8 @@ TYPEINFO(/obj/item/clothing/mask/moustache) item_function_flags = IMMUNE_TO_ACID New() - ..() START_TRACKING_CAT(TR_CAT_NUKE_OP_STYLE) + ..() disposing() STOP_TRACKING_CAT(TR_CAT_NUKE_OP_STYLE) diff --git a/code/obj/item/clothing/suits.dm b/code/obj/item/clothing/suits.dm index dbe72e7e193de..dba2e18519866 100644 --- a/code/obj/item/clothing/suits.dm +++ b/code/obj/item/clothing/suits.dm @@ -233,6 +233,9 @@ ABSTRACT_TYPE(/obj/item/clothing/suit/jacket/design) item_state = "jacket_grey" ABSTRACT_TYPE(/obj/item/clothing/suit/hazard) +TYPEINFO(/obj/item/clothing/suit/hazard) + /// Does this always start armored? + var/pre_armored = FALSE /obj/item/clothing/suit/hazard name = "abstract hazard suit" desc = "A suit that protects against biological contamination." @@ -244,67 +247,92 @@ ABSTRACT_TYPE(/obj/item/clothing/suit/hazard) body_parts_covered = TORSO|LEGS|ARMS hides_from_examine = C_UNIFORM|C_GLOVES|C_SHOES + /// Is this suit armored? + var/armored = FALSE + /// What's the icon_state for the armored version of this suit? + var/armor_icon = "armorbio" + + New() + . = ..() + var/typeinfo/obj/item/clothing/suit/hazard/typeinfo = src.get_typeinfo() + if (typeinfo.pre_armored) + src.armor() + setupProperties() ..() setProperty("coldprot", 15) setProperty("heatprot", 15) - setProperty("viralprot", 50) - setProperty("chemprot", 60) setProperty("meleeprot", 2) setProperty("rangedprot", 0.5) setProperty("movespeed", 0.3) setProperty("disorient_resist", 15) + /// Changes this suit's properties to be armored + proc/armor() + src.armored = TRUE + setProperty("meleeprot", 5) + setProperty("rangedprot", 1) + src.icon_state = src.armor_icon + src.name = "armored [src.name]" + + /obj/item/clothing/suit/hazard/attackby(obj/item/W, mob/user) - . = ..() - var/turf/T = user.loc if(istype(W, /obj/item/clothing/suit/armor/vest)) + if (src.armored) + boutput(user, SPAN_ALERT("That suit is already armored! You can't armor it even more!")) + return + boutput(user, SPAN_NOTICE("You attach [W] to [src].")) - if (istype(src, /obj/item/clothing/suit/hazard/paramedic)) - new/obj/item/clothing/suit/hazard/paramedic/armored(T) - else - new/obj/item/clothing/suit/hazard/bio_suit/armored(T) + src.armor() + src.fingerprints |= W.fingerprints qdel(W) - qdel(src) + + if (ismob(src.loc)) + var/mob/M = src.loc + M.update_clothing() + else + . = ..() /obj/item/clothing/suit/hazard/bio_suit name = "bio suit" + setupProperties() + . = ..() + setProperty("viralprot", 50) + setProperty("chemprot", 60) + + armor() + . = ..() + setProperty("movespeed", 0.45) + /obj/item/clothing/suit/hazard/bio_suit/janitor // Adhara stuff desc = "A suit that protects against biological contamination. This one has purple boots." icon_state = "biosuit_jani" item_state = "biosuit_jani" +TYPEINFO(/obj/item/clothing/suit/hazard/bio_suit/armored) + pre_armored = TRUE /obj/item/clothing/suit/hazard/bio_suit/armored - name = "armored bio suit" - desc = "A suit that protects against biological contamination. Somebody slapped some bulky armor onto the chest." - icon_state = "armorbio" - item_state = "armorbio" - setupProperties() - ..() - setProperty("meleeprot", 5) - setProperty("rangedprot", 1) - setProperty("movespeed", 0.45) + desc = "A suit that protects against biological contamination. Someone's slapped an armor vest over the chest." /obj/item/clothing/suit/hazard/bio_suit/armored/nt name = "\improper NT bio suit" desc = "An armored biosuit that protects against biological contamination and toolboxes." - icon_state = "ntbio" - item_state = "ntbio" - setupProperties() - ..() - setProperty("meleeprot", 5) - setProperty("rangedprot", 1) - delProperty("movespeed") + armor_icon = "ntbio" + + armor() + . = ..() + src.delProperty("movespeed") /obj/item/clothing/suit/hazard/paramedic name = "paramedic suit" desc = "A protective padded suit for emergency response personnel. Offers limited thermal and biological protection." icon_state = "paramedic" item_state = "paramedic" - body_parts_covered = TORSO|LEGS|ARMS - hides_from_examine = C_UNIFORM|C_SHOES protective_temperature = 3000 + + armor_icon = "para_armor" + #ifdef MAP_OVERRIDE_NADIR c_flags = SPACEWEAR acid_survival_time = 5 MINUTES @@ -320,27 +348,25 @@ ABSTRACT_TYPE(/obj/item/clothing/suit/hazard) delProperty("movespeed") delProperty("disorient_resist") + armor() + . = ..() + delProperty("movespeed") + +TYPEINFO(/obj/item/clothing/suit/hazard/paramedic/armored) + pre_armored = TRUE /obj/item/clothing/suit/hazard/paramedic/armored - name = "armored paramedic suit" desc = "A protective padded suit for emergency response personnel. Offers limited thermal and biological protection. Somebody slapped some armor onto the chest." - icon_state = "para_armor" - item_state = "paramedic" - setupProperties() - ..() - setProperty("meleeprot", 5) - setProperty("rangedprot", 1) + armor_icon = "para_armor" para_troop - icon_state = "para_sec" - item_state = "para_sec" name = "rapid response armor" desc = "A protective padded suit for emergency reponse personnel. Tailored for ground operations, not vaccuum rated. This one bears security insignia." + armor_icon = "para_sec" para_eng name = "rapid response armor" desc = "A protective padded suit for emergency response personnel. Tailored for ground operations, not vaccuum rated. This one bears engineering insignia." - icon_state = "para_eng" - item_state = "para_eng" + armor_icon = "para_eng" /obj/item/clothing/suit/space/suv name = "\improper SUV suit" @@ -364,16 +390,13 @@ ABSTRACT_TYPE(/obj/item/clothing/suit/hazard) setProperty("disorient_resist", 35) //it's a special item delProperty("space_movespeed") -/obj/item/clothing/suit/rad // re-added for Russian Station as there is a permarads area there! +/obj/item/clothing/suit/hazard/rad name = "\improper Class II radiation suit" desc = "An old Soviet radiation suit made of 100% space asbestos. It's good for you!" icon_state = "rad" item_state = "rad" - icon = 'icons/obj/clothing/overcoats/item_suit_hazard.dmi' - wear_image_icon = 'icons/mob/clothing/overcoats/worn_suit_hazard.dmi' - inhand_image_icon = 'icons/mob/inhand/overcoat/hand_suit_hazard.dmi' - body_parts_covered = TORSO|LEGS|ARMS - hides_from_examine = C_UNIFORM|C_GLOVES|C_SHOES + + armored = TRUE // no sprites! should exist, though. New() . = ..() @@ -381,14 +404,9 @@ ABSTRACT_TYPE(/obj/item/clothing/suit/hazard) setupProperties() ..() - setProperty("movespeed", 0.3) setProperty("radprot", 50) - setProperty("coldprot", 15) - setProperty("heatprot", 15) setProperty("chemprot", 25) setProperty("meleeprot", 3) - setProperty("rangedprot", 0.5) - setProperty("disorient_resist", 15) /obj/item/clothing/suit/det_suit name = "coat" @@ -969,18 +987,17 @@ ABSTRACT_TYPE(/obj/item/clothing/suit/hazard) // FIRE SUITS -/obj/item/clothing/suit/fire +/obj/item/clothing/suit/hazard/fire name = "firesuit" desc = "A suit that protects against fire and heat." - icon = 'icons/obj/clothing/overcoats/item_suit_hazard.dmi' - inhand_image_icon = 'icons/mob/inhand/overcoat/hand_suit_hazard.dmi' - wear_image_icon = 'icons/mob/clothing/overcoats/worn_suit_hazard.dmi' icon_state = "fire" item_state = "fire_suit" body_parts_covered = TORSO|LEGS|ARMS hides_from_examine = C_UNIFORM|C_SHOES protective_temperature = 4500 + armor_icon = "fire_armor" + setupProperties() ..() setProperty("coldprot", 20) @@ -991,29 +1008,18 @@ ABSTRACT_TYPE(/obj/item/clothing/suit/hazard) setProperty("movespeed", 0.6) setProperty("disorient_resist", 15) -/obj/item/clothing/suit/fire/armored - name = "armored firesuit" - desc = "A suit that protects against fire and heat. Somebody slapped some bulky armor onto the chest." - icon_state = "fire_armor" - item_state = "fire_suit" - setupProperties() - ..() + armor() + . = ..() setProperty("meleeprot", 6) setProperty("rangedprot", 1) setProperty("movespeed", 1) -/obj/item/clothing/suit/fire/attackby(obj/item/W, mob/user) - var/turf/T = user.loc - if (istype(W, /obj/item/clothing/suit/armor/vest)) - if (istype(src, /obj/item/clothing/suit/fire/heavy)) - return - else - new /obj/item/clothing/suit/fire/armored(T) - boutput(user, SPAN_NOTICE("You attach [W] to [src].")) - qdel(W) - qdel(src) +TYPEINFO(/obj/item/clothing/suit/hazard/fire/armored) + pre_armored = TRUE +/obj/item/clothing/suit/hazard/fire/armored + desc = "A suit that protects against fire and heat. Somebody slapped some bulky armor onto the chest." -/obj/item/clothing/suit/fire/heavy +/obj/item/clothing/suit/hazard/fire/heavy name = "heavy firesuit" desc = "A suit that protects against extreme fire and heat." icon_state = "thermal" @@ -1022,6 +1028,8 @@ ABSTRACT_TYPE(/obj/item/clothing/suit/hazard) protective_temperature = 100000 + armored = TRUE // prevent armoring + setupProperties() ..() setProperty("coldprot", 5) @@ -1184,8 +1192,8 @@ ABSTRACT_TYPE(/obj/item/clothing/suit/hazard) item_function_flags = IMMUNE_TO_ACID New() - ..() START_TRACKING_CAT(TR_CAT_NUKE_OP_STYLE) + ..() setupProperties() ..() @@ -1550,8 +1558,8 @@ TYPEINFO(/obj/item/clothing/suit/space/industrial/syndicate) setProperty("space_movespeed", 0) New() - ..() START_TRACKING_CAT(TR_CAT_NUKE_OP_STYLE) + ..() disposing() STOP_TRACKING_CAT(TR_CAT_NUKE_OP_STYLE) diff --git a/code/obj/item/clown_items.dm b/code/obj/item/clown_items.dm index 6f7a84cff4202..4dcfb66332327 100644 --- a/code/obj/item/clown_items.dm +++ b/code/obj/item/clown_items.dm @@ -41,8 +41,8 @@ VUVUZELA var/mob/M = AM LAZYLISTADDUNIQUE(M.attached_objs, src) src.glide_size = M.glide_size - RegisterSignal(M, COMSIG_MOVABLE_THROW_END, PROC_REF(on_mob_throw_end)) - if (M.slip(walking_matters = 1, ignore_actual_delay = 1, throw_type=THROW_PEEL_SLIP, params=list("slip_obj"=src))) + RegisterSignal(M, COMSIG_MOVABLE_THROW_END, PROC_REF(on_mob_throw_end), override=TRUE) + if (M.slip(walking_matters=TRUE, ignore_actual_delay=TRUE, throw_type=THROW_PEEL_SLIP, params=list("slip_obj"=src))) boutput(M, SPAN_NOTICE("You slipped on the banana peel!")) if (ishuman(M)) var/mob/living/carbon/human/H = M diff --git a/code/obj/item/deployable_turret.dm b/code/obj/item/deployable_turret.dm index bc9f060bb1e60..b762f32fe5782 100644 --- a/code/obj/item/deployable_turret.dm +++ b/code/obj/item/deployable_turret.dm @@ -65,8 +65,8 @@ ABSTRACT_TYPE(/obj/item/turret_deployer) associated_turret = /obj/deployable_turret/syndicate New() - ..() START_TRACKING_CAT(TR_CAT_NUKE_OP_STYLE) + ..() disposing() STOP_TRACKING_CAT(TR_CAT_NUKE_OP_STYLE) diff --git a/code/obj/item/device/audio_log.dm b/code/obj/item/device/audio_log.dm index a0a00a40ba5a3..f1ff048ea7c68 100644 --- a/code/obj/item/device/audio_log.dm +++ b/code/obj/item/device/audio_log.dm @@ -365,6 +365,9 @@ TYPEINFO(/obj/item/device/audio_log) src.tape.speakers = src.audiolog_speakers src.audiolog_speakers = null + SPAWN(10 SECONDS) // Let people get their bearings first + src.play() + return researchstat_log diff --git a/code/obj/item/device/chameleon.dm b/code/obj/item/device/chameleon.dm index 378c188137da2..edfb545f7fedb 100644 --- a/code/obj/item/device/chameleon.dm +++ b/code/obj/item/device/chameleon.dm @@ -81,6 +81,7 @@ TYPEINFO(/obj/item/device/chameleon) var/can_use = 0 var/obj/overlay/anim = null //The toggle animation overlay will also be retained var/obj/dummy/chameleon/cham = null //No sense creating / destroying this + var/disrupt_on_drop = TRUE //TODO: refactor this var/active = 0 tooltip_flags = REBUILD_DIST HELP_MESSAGE_OVERRIDE({"Use the chameleon projector on any object to copy it's appearance. Use it in hand to appear as that object indefinitely. The disguise will be removed if you interact with anything else or are hit."}) @@ -95,7 +96,9 @@ TYPEINFO(/obj/item/device/chameleon) src.cham.master = src dropped() - disrupt() + . = ..() + if(disrupt_on_drop) + disrupt() attack_self() toggle() @@ -200,6 +203,7 @@ TYPEINFO(/obj/item/device/chameleon) icon = 'icons/obj/items/items.dmi' icon_state = "cham_bomb" burn_possible = FALSE + disrupt_on_drop = FALSE HELP_MESSAGE_OVERRIDE(null) var/strength = 12 @@ -209,9 +213,6 @@ TYPEINFO(/obj/item/device/chameleon) else return null - dropped() - return - UpdateName() src.name = "[name_prefix(null, 1)][src.real_name][name_suffix(null, 1)]" diff --git a/code/obj/item/device/disguiser.dm b/code/obj/item/device/disguiser.dm index a4f4b13349062..fd88aa098eb58 100644 --- a/code/obj/item/device/disguiser.dm +++ b/code/obj/item/device/disguiser.dm @@ -134,6 +134,7 @@ TYPEINFO(/obj/item/device/disguiser) // Restore original appearance. else user.real_name = src.real_name + user.on_realname_change() AH.CopyOther(oldAH) if (user.limbs) user.limbs.reset_stone() diff --git a/code/obj/item/device/pda2/base_os.dm b/code/obj/item/device/pda2/base_os.dm index 96794b33c5e5a..1f057e98afacc 100644 --- a/code/obj/item/device/pda2/base_os.dm +++ b/code/obj/item/device/pda2/base_os.dm @@ -162,7 +162,7 @@ . += {"<a href='byond://?src=\ref[src];message_func=ringer'>Ringer: [src.message_silent == 1 ? "Off" : "On"]</a> | <a href='byond://?src=\ref[src];message_func=on'>Send / Receive: [src.message_on == 1 ? "On" : "Off"]</a> | <a href='byond://?src=\ref[src];input=tone'>Set Ring Message</a><br> - <a href='byond://?src=\ref[src];message_mode=1'>Messages</a> | + <a href='byond://?src=\ref[src];message_mode=1'>Message History</a> | <a href='byond://?src=\ref[src];mode=[MODE_GROUPS]'>Groups</a> | <a href='byond://?src=\ref[src];mode=[MODE_ADDRESSBOOK]'>Address Book</a><br> diff --git a/code/obj/item/device/prox_sensor.dm b/code/obj/item/device/prox_sensor.dm index d5990c7af5b42..aa3bf43bcf7cc 100644 --- a/code/obj/item/device/prox_sensor.dm +++ b/code/obj/item/device/prox_sensor.dm @@ -2,7 +2,7 @@ TYPEINFO(/obj/item/device/prox_sensor) mats = 2 /obj/item/device/prox_sensor - name = "Proximity Sensor" + name = "proximity sensor" icon_state = "motion0" var/armed = FALSE var/timing = FALSE diff --git a/code/obj/item/device/radio.dm b/code/obj/item/device/radio.dm index c7e1fe4f75b68..b228c662a810d 100644 --- a/code/obj/item/device/radio.dm +++ b/code/obj/item/device/radio.dm @@ -878,7 +878,7 @@ TYPEINFO(/obj/item/radiojammer) /obj/item/device/radio/signaler - name = "\improper Remote Signaling Device" + name = "remote signaler" //US spelling :vomit: but we should be consistent icon_state = "signaller" item_state = "signaler" var/code = 30 diff --git a/code/obj/item/device/radios/headsets.dm b/code/obj/item/device/radios/headsets.dm index 34a01f4b43d32..0b2fe58c8148b 100644 --- a/code/obj/item/device/radios/headsets.dm +++ b/code/obj/item/device/radios/headsets.dm @@ -463,8 +463,8 @@ icon_state = "comtac" New() - ..() START_TRACKING_CAT(TR_CAT_NUKE_OP_STYLE) + ..() setupProperties() ..() @@ -491,8 +491,8 @@ desc = "A two-way radio headset designed to protect the wearer from dangerous levels of noise during gunfights." New() - ..() START_TRACKING_CAT(TR_CAT_NUKE_OP_STYLE) + ..() setupProperties() ..() diff --git a/code/obj/item/device/studio_monitor.dm b/code/obj/item/device/studio_monitor.dm index 5f321206c77cc..06d34fa799d23 100644 --- a/code/obj/item/device/studio_monitor.dm +++ b/code/obj/item/device/studio_monitor.dm @@ -22,8 +22,8 @@ TYPEINFO(/obj/item/device/radio/nukie_studio_monitor) var/obj/effects/music/effect New() - ..() START_TRACKING_CAT(TR_CAT_NUKE_OP_STYLE) + ..() pixel_y = 0 effect = new src.vis_contents += effect @@ -97,8 +97,8 @@ TYPEINFO(/obj/item/device/radio/nukie_studio_monitor) var/overheated = FALSE New() - ..() START_TRACKING_CAT(TR_CAT_NUKE_OP_STYLE) + ..() effect = new speakers |= new /obj/item/device/radio/nukie_studio_monitor(src.loc) speakers |= new /obj/item/device/radio/nukie_studio_monitor(src.loc) diff --git a/code/obj/item/device/transfer_valve.dm b/code/obj/item/device/transfer_valve.dm index 371c36dc07ba3..8a31ca515e038 100644 --- a/code/obj/item/device/transfer_valve.dm +++ b/code/obj/item/device/transfer_valve.dm @@ -136,80 +136,128 @@ TYPEINFO(/obj/item/device/transfer_valve) boutput(user, SPAN_NOTICE("You attach two loops of [item] to the transfer valve!")) UpdateIcon() + else if (issnippingtool(item)) + if(usr?.back && usr.back == src) + boutput(usr, SPAN_ALERT("You can't detach the loops of wire while you're wearing [src]!")) + else + c_flags &= ~ONBACK + var/turf/location = get_turf(src) + var/obj/item/cable_coil/cut/C = new /obj/item/cable_coil/cut(location) + C.amount = 2 + boutput(usr, SPAN_NOTICE("You detach the loops of wire from [src]!")) + UpdateIcon() + return + /// Attach the tank the mob is currently holding + proc/attach_tank(mob/user, tank_preference=null) + if (!user) return + var/obj/item/I = user.equipped() + if (!istype(I, /obj/item/tank) || istype(I, /obj/item/clothing/head/butt)) return + var/obj/item/tank/myTank = I + if (!myTank.compatible_with_TTV) return + // Handle UI tank attachment + if (tank_preference == 1) + // This check should always pass + if (!src.tank_one) + src.tank_one = myTank + else if (tank_preference == 2) + // As should this one + if (!src.tank_two) + src.tank_two = myTank + // Handle attackby tank attachment (wherever fits) + else if (!tank_preference && !src.tank_one) + src.tank_one = myTank + else if (!tank_preference && !src.tank_two) + src.tank_two = myTank + else + // it did not fit, clearly. dummy. + boutput(user, SPAN_NOTICE("\the [myTank] cannot fit on the [src]!")) + return + user.drop_item() + myTank.set_loc(src) + boutput(user, SPAN_NOTICE("You attach \the [myTank] to the transfer valve")) + if(src.tank_one && src.tank_two) + var/turf/T = get_turf(src) + var/butt = istype(tank_one, /obj/item/clothing/head/butt) || istype(tank_two, /obj/item/clothing/head/butt) + logTheThing(LOG_BOMBING, user, "made a TTV tank transfer valve [butt ? "butt" : "bomb"] at [log_loc(T)].") + message_admins("[key_name(user)] made a TTV tank transfer valve [butt ? "butt" : "bomb"] at [log_loc(T)].") + UpdateIcon() + attacher = user + if(user.back == src) + user.update_clothing() + attack_self(mob/user as mob) if (isghostdrone(user)) return if (user.get_gang()) boutput(user, SPAN_ALERT("You think working with explosives would bring a lot of much heat onto your gang to mess with this. But you do it anyway.")) - src.add_dialog(user) - var/dat = {"<B> Valve properties: </B> - <BR> <B> Attachment one:</B> [tank_one] [tank_one ? "<A href='?src=\ref[src];tankone=1'>Remove</A>" : ""] - <BR> <B> Attachment two:</B> [tank_two] [tank_two ? "<A href='?src=\ref[src];tanktwo=1'>Remove</A>" : ""] - <BR> <B> Valve attachment:</B> [attached_device ? "<A href='?src=\ref[src];device=1'>[attached_device]</A>" : "None"] [attached_device ? "<A href='?src=\ref[src];rem_device=1'>Remove</A>" : ""] - <BR> <B> Valve status: </B> [ valve_open ? "<A href='?src=\ref[src];open=1'>Closed</A> <B>Open</B>" : "<B>Closed</B> <A href='?src=\ref[src];open=1'>Open</A>"] - <BR> [c_flags & ONBACK ? "<B> Straps: </B> <A href='?src=\ref[src];straps=1'>Remove</A>" : ""]"} - - user.Browse(dat, "window=trans_valve;size=600x300") - onclose(user, "trans_valve") - return - - Topic(href, href_list) + src.ui_interact(user) + +#define TANK_PRESSURE(item_tank) (hasvar(item_tank, "air_contents")) ? MIXTURE_PRESSURE(item_tank.air_contents) : 0 + ui_data(mob/user) + var/tank_one_data = (src.tank_one) ? list("name"=src.tank_one.name, "num"=1, "pressure"=TANK_PRESSURE(src.tank_one), \ + "maxPressure"=TANK_FRAGMENT_PRESSURE) \ + : list("name"=null, "num"=1, "pressure"=null, "maxPressure"=null) + var/tank_two_data = (src.tank_two) ? list("name"=src.tank_two.name, "num"=2, "pressure"=TANK_PRESSURE(src.tank_two), \ + "maxPressure"=TANK_FRAGMENT_PRESSURE) \ + : list("name"=null, "num"=2, "pressure"=null, "maxPressure"=null) + return list( + "tank_one" = tank_one_data, + "tank_two" = tank_two_data, + "device" = "[src.attached_device]", + "opened" = src.valve_open, + ) +#undef TANK_PRESSURE + + ui_interact(mob/user, datum/tgui/ui) + ui = tgui_process.try_update_ui(user, src, ui) + if (!ui) + ui = new(user, src, "TTV", src.name) + ui.open() + + ui_act(action, params) ..() - if (isghostdrone(usr)) + if (isghostdrone(usr) || usr.stat || usr.restrained()) return if (usr.get_gang()) boutput(usr, SPAN_ALERT("You think working with explosives would bring a lot of much heat onto your gang to mess with this. But you do it anyway.")) - if (usr.stat|| usr.restrained()) - return - if (src.loc == usr) - if(href_list["tankone"]) - tank_one.set_loc(get_turf(src)) - tank_one = null - UpdateIcon() - if(src.equipped_in_slot) - var/mob/wearer = src.loc - wearer.update_clothing() - if(href_list["tanktwo"]) - tank_two.set_loc(get_turf(src)) - tank_two = null - UpdateIcon() - if(src.equipped_in_slot) - var/mob/wearer = src.loc - wearer.update_clothing() - if(href_list["open"]) - if (valve_open) - var/turf/bombturf = get_turf(src) - logTheThing(LOG_BOMBING, usr, "closed the valve on a TTV tank transfer valve at [log_loc(bombturf)].") - message_admins("[key_name(usr)] closed the valve on a TTV tank transfer valve at [log_loc(bombturf)].") + switch(action) + if ("add_item") + if (params["tank"]) + src.attach_tank(usr, params["tank"]) else - var/turf/bombturf = get_turf(src) - logTheThing(LOG_BOMBING, usr, "opened the valve on a TTV tank transfer valve at [log_loc(bombturf)].") - message_admins("[key_name(usr)] opened the valve on a TTV tank transfer valve at [log_loc(bombturf)].") + src.Attackby(usr.equipped(), usr) + if ("remove_tank_one") + src.remove_tank(tank_one) + if ("remove_tank_two") + src.remove_tank(tank_two) + if ("toggle_valve") + var/openorclose = (src.valve_open) ? "closed" : "opened" + var/turf/bombturf = get_turf(src) + logTheThing(LOG_BOMBING, usr, "[openorclose] the valve on a TTV tank transfer valve at [log_loc(bombturf)].") + message_admins("[key_name(usr)] [openorclose] the valve on a TTV tank transfer valve at [log_loc(bombturf)].") toggle_valve() - if(href_list["rem_device"]) - attached_device.set_loc(get_turf(src)) - attached_device.master = null - attached_device = null + if ("remove_device") + src.attached_device.set_loc(get_turf(src)) + src.attached_device.master = null + src.attached_device = null UpdateIcon() - if(href_list["device"]) + if ("interact_device") attached_device.attack_self(usr) - if(href_list["straps"]) - if(usr?.back && usr.back == src) - boutput(usr, SPAN_ALERT("You can't detach the loops of wire while you're wearing [src]!")) - else - c_flags &= ~ONBACK - var/turf/location = get_turf(src) - var/obj/item/cable_coil/cut/C = new /obj/item/cable_coil/cut(location) - C.amount = 2 - boutput(usr, SPAN_NOTICE("You detach the loops of wire from [src]!")) - UpdateIcon() - - src.attack_self(usr) - - src.add_fingerprint(usr) - return + src.attack_self(usr) + src.add_fingerprint(usr) + + proc/remove_tank(var/T) + if (!istype(T, /obj/item/tank)) return + var/obj/item/tank/removed = T + boutput(usr, SPAN_NOTICE("You remove the [removed] from [src].")) + removed.set_loc(get_turf(src)) + removed = null + UpdateIcon() + if(src.equipped_in_slot) + var/mob/wearer = src.loc + wearer.update_clothing() receive_signal(signal) if(toggle) @@ -462,14 +510,16 @@ TYPEINFO(/obj/item/device/transfer_valve/briefcase) return +/// How many atmos ticks we are willing to count before giving up +#define UPDATES_BEFORE_TIMEOUT 20 /obj/item/device/transfer_valve/vr name = "VR explosive" var/obj/machinery/networked/storage/bomb_tester/tester = null - var/updates_before_halt = 10 //So we don't keep updating on a dud bomb forever. + /// How many atmos ticks we have listened to thus far var/update_counter = 0 attack_hand(mob/user) - return + src.ui_interact() disposing() processing_items.Remove(src) @@ -490,36 +540,32 @@ TYPEINFO(/obj/item/device/transfer_valve/briefcase) return process() - if(!tester || !src.valve_open) + if(!tester || !tester.vrbomb || !src.valve_open) return - if(update_counter >= updates_before_halt) + if(update_counter >= UPDATES_BEFORE_TIMEOUT) tester.update_bomb_log("VR bomb monitor timeout.", 1) processing_items.Remove(src) return update_counter++ - var/tankslost = 2 - var/log_message = "[time2text(world.timeofday, "mm:ss")]:" - var/tpressure = 0 - if(tank_one?.air_contents) - tankslost-- - var/t1pressure = MIXTURE_PRESSURE(tank_one.air_contents) - tpressure += round(t1pressure,0.1) + tester.update_bomb_log("[time2text(world.timeofday, "mm:ss")]:") + var/tank1_pressure = (hasvar(src.tank_one, "air_contents")) ? MIXTURE_PRESSURE(src.tank_one.air_contents) : 0 + var/tank2_pressure = (hasvar(src.tank_two, "air_contents")) ? MIXTURE_PRESSURE(src.tank_two.air_contents) : 0 - if(tank_two?.air_contents) - tankslost-- - var/t2pressure = MIXTURE_PRESSURE(tank_two.air_contents) - tpressure += round(t2pressure,0.1) + tester.update_bomb_log("Tank 1 Pressure:[tank1_pressure] kPa") + tester.update_bomb_log("Tank 2 Pressure:[tank2_pressure] kPa") - log_message += " Pressure:[tpressure] kPa" - if(tankslost) - log_message += " [tankslost == 2 ? "Both" : "One"] Tank(s) Lost!" + // This doesn't really happen as both tanks are usually bound to have the same reaction process due to same volume/contents/temp/etc + // so disposing() gets called first + if(!tank1_pressure) + tester.update_bomb_log("Tank one has no pressure or has been destroyed!") + if (!tank2_pressure) + tester.update_bomb_log("Tank two has no pressure or has been destroyed!") - tester.update_bomb_log(log_message) return - +#undef UPDATES_BEFORE_TIMEOUT /obj/item/pressure_crystal icon = 'icons/obj/items/assemblies.dmi' diff --git a/code/obj/item/dice.dm b/code/obj/item/dice.dm index aa6df7ab6da78..1d3def8d07413 100644 --- a/code/obj/item/dice.dm +++ b/code/obj/item/dice.dm @@ -745,6 +745,7 @@ var/list/rollList = list() pourout(target,user) dropped(mob/user as mob) + . = ..() if((dicelist.len) && (user.a_intent != "help")) src.ClearAllOverlays() src.icon_state = "dicecupf" diff --git a/code/obj/item/flamethrower.dm b/code/obj/item/flamethrower.dm index f24c2e4731c72..09bcc8353094d 100644 --- a/code/obj/item/flamethrower.dm +++ b/code/obj/item/flamethrower.dm @@ -210,8 +210,8 @@ A Flamethrower in various states of assembly move_triggered = 1 New() - ..() START_TRACKING_CAT(TR_CAT_NUKE_OP_STYLE) + ..() src.create_reagents(4000) inventory_counter.update_percent(src.reagents.total_volume, src.reagents.maximum_volume) diff --git a/code/obj/item/grenades.dm b/code/obj/item/grenades.dm index 0a5384394d3c9..f77e14890e361 100644 --- a/code/obj/item/grenades.dm +++ b/code/obj/item/grenades.dm @@ -42,6 +42,7 @@ ADMIN_INTERACT_PROCS(/obj/item/old_grenade, proc/detonate) var/issawfly = FALSE //for sawfly remote ///damage when loaded into a 40mm convesion chamber var/launcher_damage = 25 + HELP_MESSAGE_OVERRIDE({"You can use a <b>screwdriver</b> to adjust the detonation time."}) attack_self(mob/user as mob) if (!src.armed) @@ -812,6 +813,7 @@ TYPEINFO(/obj/item/old_grenade/oxygen) not_in_mousetraps = TRUE var/old_light_grenade = 0 var/destination + HELP_MESSAGE_OVERRIDE({""}) New() ..() @@ -1402,19 +1404,27 @@ ADMIN_INTERACT_PROCS(/obj/item/gimmickbomb, proc/arm, proc/detonate) for (var/turf/simulated/wall/W in range(src.expl_range, location)) if (W && istype(W) && !location.loc:sanctuary) W.ReplaceWithFloor() - for (var/obj/structure/girder/G in range(src.expl_range, location)) - var/area/a = get_area(G) - if (G && istype(G) && !a.sanctuary) - qdel(G) - for (var/obj/window/WD in range(src.expl_range, location)) - var/area/a = get_area(WD) - if (WD && istype(WD) && prob(max(0, 100 - (WD.health / 3))) && !a.sanctuary) - WD.smash() - for (var/obj/grille/GR in range(src.expl_range, location)) - var/area/a = get_area(GR) - if (GR && istype(GR) && GR.ruined != 1 && !a.sanctuary) - GR.ex_act(2) - + for (var/obj/O in range(src.expl_range, location)) + var/area/area = get_area(O) + if (area?.sanctuary) + continue + if (istype(O, /obj/structure/girder)) + qdel(O) + continue + if (istype(O, /obj/window)) + var/obj/window/window = O + if (prob(max(0, 100 - (window.health / 3)))) + window.smash() + continue + if (istype(O, /obj/grille)) + var/obj/grille/grille = O + if (!grille.ruined) + grille.ex_act(2) + continue + if (istype(O, /obj/machinery/door/firedoor)) + var/obj/machinery/door/firedoor/firelock = O + qdel(firelock) + continue qdel(src) return @@ -1546,18 +1556,28 @@ ADMIN_INTERACT_PROCS(/obj/item/gimmickbomb, proc/arm, proc/detonate) var/area/a = get_area(DR) if (!DR.cant_emag && !a.sanctuary) DR.take_damage(DR.health) - for (var/obj/structure/girder/G in range(src.expl_range, location)) - var/area/a = get_area(G) - if (G && istype(G) && !a.sanctuary) - qdel(G) - for (var/obj/window/W in range(src.expl_range, location)) - var/area/a = get_area(W) - if (W && istype(W) && !a.sanctuary) - W.damage_heat(500) - for (var/obj/grille/GR in range(src.expl_range, location)) - var/area/a = get_area(GR) - if (GR && istype(GR) && GR.ruined != 1 && !a.sanctuary) - GR.damage_heat(500) + + for (var/obj/O in range(src.expl_range, location)) + var/area/area = get_area(O) + if (area?.sanctuary) + continue + if (istype(O, /obj/structure/girder)) + qdel(O) + continue + if (istype(O, /obj/window)) + var/obj/window/window = O + if (prob(max(0, 100 - (window.health / 3)))) + window.damage_heat(500) + continue + if (istype(O, /obj/grille)) + var/obj/grille/grille = O + if (!grille.ruined) + grille.damage_heat(500) + continue + if (istype(O, /obj/machinery/door/firedoor)) + var/obj/machinery/door/firedoor/firelock = O + qdel(firelock) + continue for (var/mob/living/M in range(src.expl_range, location)) if(check_target_immunity(M)) continue diff --git a/code/obj/item/gun/ammo.dm b/code/obj/item/gun/ammo.dm index 11c9c6266fe61..f34c3e8e74027 100644 --- a/code/obj/item/gun/ammo.dm +++ b/code/obj/item/gun/ammo.dm @@ -963,7 +963,7 @@ ABSTRACT_TYPE(/obj/item/ammo/bullets/pipeshot) ammo_cat = AMMO_GRENADE_40MM w_class = W_CLASS_NORMAL icon_dynamic = 0 - icon_empty = "40mm_nonlethal-0" + icon_empty = "40mm_paint-0" sound_load = 'sound/weapons/gunload_40mm.ogg' /obj/item/ammo/bullets/pbr diff --git a/code/obj/item/gun/energy.dm b/code/obj/item/gun/energy.dm index bf4ca16b3f47d..675e88b2c6a9f 100644 --- a/code/obj/item/gun/energy.dm +++ b/code/obj/item/gun/energy.dm @@ -215,6 +215,7 @@ TYPEINFO(/obj/item/gun/energy) /obj/item/gun/energy/laser_gun/antique name = "antique laser gun" icon_state = "caplaser" + item_state = "capgun" desc = "It's a kit model of the Mod.00 'Lunaport Legend' laser gun from Super! Protector Friend. With realistic sound fx and exciting LED display! This one has been hazardously upgraded." muzzle_flash = "muzzle_flash_laser" cell_type = null diff --git a/code/obj/item/gun/kinetic.dm b/code/obj/item/gun/kinetic.dm index 326a7930d4338..90336a29c0508 100644 --- a/code/obj/item/gun/kinetic.dm +++ b/code/obj/item/gun/kinetic.dm @@ -912,11 +912,16 @@ ABSTRACT_TYPE(/obj/item/survival_rifle_barrel) ammobag_restock_cost = 2 New() + START_TRACKING_CAT(TR_CAT_NUKE_OP_STYLE) ammo = new default_magazine set_current_projectile(new/datum/projectile/bullet/veritate) projectiles = list(current_projectile,new/datum/projectile/bullet/veritate/burst) ..() + disposing() + STOP_TRACKING_CAT(TR_CAT_NUKE_OP_STYLE) + ..() + attack_self(mob/user as mob) ..() //burst shot has a slight spread. if (istype(current_projectile, /datum/projectile/bullet/veritate/burst/)) @@ -1062,6 +1067,7 @@ ABSTRACT_TYPE(/obj/item/survival_rifle_barrel) muzzle_flash = null default_magazine = /obj/item/ammo/bullets/foamdarts var/pulled = FALSE + add_residue = FALSE New() ammo = new default_magazine @@ -1160,6 +1166,7 @@ ABSTRACT_TYPE(/obj/item/survival_rifle_barrel) max_ammo_capacity = 6 muzzle_flash = null default_magazine = /obj/item/ammo/bullets/foamdarts + add_residue = FALSE New() ammo = new default_magazine @@ -1183,6 +1190,7 @@ ABSTRACT_TYPE(/obj/item/survival_rifle_barrel) max_ammo_capacity = 12 muzzle_flash = null default_magazine = /obj/item/ammo/bullets/foamdarts + add_residue = FALSE New() ammo = new default_magazine @@ -2144,6 +2152,7 @@ ABSTRACT_TYPE(/obj/item/survival_rifle_barrel) set_current_projectile(new/datum/projectile/special/spreader/buckshot_burst/) ..() + // assault /obj/item/gun/kinetic/assault_rifle name = "\improper Sirius assault rifle" @@ -2208,7 +2217,6 @@ ABSTRACT_TYPE(/obj/item/survival_rifle_barrel) ..() - // heavy /obj/item/gun/kinetic/light_machine_gun name = "\improper Antares light machine gun" @@ -2235,12 +2243,17 @@ ABSTRACT_TYPE(/obj/item/survival_rifle_barrel) ammobag_restock_cost = 3 New() + START_TRACKING_CAT(TR_CAT_NUKE_OP_STYLE) ammo = new default_magazine set_current_projectile(new/datum/projectile/bullet/lmg) projectiles = list(current_projectile, new/datum/projectile/bullet/lmg/auto) AddComponent(/datum/component/holdertargeting/fullauto, 1.5 DECI SECONDS, 1.5 DECI SECONDS, 1) ..() + disposing() + STOP_TRACKING_CAT(TR_CAT_NUKE_OP_STYLE) + ..() + setupProperties() ..() setProperty("carried_movespeed", 1) @@ -2277,10 +2290,15 @@ ABSTRACT_TYPE(/obj/item/survival_rifle_barrel) New() + START_TRACKING_CAT(TR_CAT_NUKE_OP_STYLE) ammo = new default_magazine set_current_projectile(new/datum/projectile/bullet/cannon) ..() + disposing() + STOP_TRACKING_CAT(TR_CAT_NUKE_OP_STYLE) + ..() + setupProperties() ..() setProperty("carried_movespeed", 0.3) @@ -2313,10 +2331,15 @@ ABSTRACT_TYPE(/obj/item/survival_rifle_barrel) ammobag_restock_cost = 5 New() + START_TRACKING_CAT(TR_CAT_NUKE_OP_STYLE) ammo = new default_magazine set_current_projectile(new/datum/projectile/bullet/howitzer) ..() + disposing() + STOP_TRACKING_CAT(TR_CAT_NUKE_OP_STYLE) + ..() + setupProperties() ..() setProperty("carried_movespeed", 0.2) diff --git a/code/obj/item/hydroponics.dm b/code/obj/item/hydroponics.dm index 18f5b59edf177..06e9a9e5939f3 100644 --- a/code/obj/item/hydroponics.dm +++ b/code/obj/item/hydroponics.dm @@ -573,8 +573,8 @@ TYPEINFO(/obj/item/plantanalyzer) /obj/item/reagent_containers/glass/bottle/weedkiller name = "weedkiller" desc = "A small bottle filled with Atrazine, an effective weedkiller." - icon = 'icons/obj/chemical.dmi' - icon_state = "bottle1" + icon = 'icons/obj/items/chemistry_glassware.dmi' + bottle_style = "1" amount_per_transfer_from_this = 10 initial_volume = 40 @@ -585,8 +585,8 @@ TYPEINFO(/obj/item/plantanalyzer) /obj/item/reagent_containers/glass/bottle/mutriant name = "Mutagenic Plant Formula" desc = "An unstable radioactive mixture that stimulates genetic diversity." - icon = 'icons/obj/chemical.dmi' - icon_state = "bottle3" + icon = 'icons/obj/items/chemistry_glassware.dmi' + bottle_style = "3" amount_per_transfer_from_this = 10 initial_volume = 40 @@ -597,8 +597,8 @@ TYPEINFO(/obj/item/plantanalyzer) /obj/item/reagent_containers/glass/bottle/groboost name = "Ammonia Plant Formula" desc = "A nutrient-rich plant formula that encourages quick plant growth." - icon = 'icons/obj/chemical.dmi' - icon_state = "bottle3" + icon = 'icons/obj/items/chemistry_glassware.dmi' + bottle_style = "3" amount_per_transfer_from_this = 10 initial_volume = 40 @@ -609,8 +609,8 @@ TYPEINFO(/obj/item/plantanalyzer) /obj/item/reagent_containers/glass/bottle/topcrop name = "Potash Plant Formula" desc = "A nutrient-rich plant formula that encourages large crop yields." - icon = 'icons/obj/chemical.dmi' - icon_state = "bottle3" + icon = 'icons/obj/items/chemistry_glassware.dmi' + bottle_style = "3" amount_per_transfer_from_this = 10 initial_volume = 40 @@ -621,8 +621,8 @@ TYPEINFO(/obj/item/plantanalyzer) /obj/item/reagent_containers/glass/bottle/powerplant name = "Saltpetre Plant Formula" desc = "A nutrient-rich plant formula that encourages more potent crops." - icon = 'icons/obj/chemical.dmi' - icon_state = "bottle3" + icon = 'icons/obj/items/chemistry_glassware.dmi' + bottle_style = "3" amount_per_transfer_from_this = 10 initial_volume = 40 @@ -633,8 +633,8 @@ TYPEINFO(/obj/item/plantanalyzer) /obj/item/reagent_containers/glass/bottle/fruitful name = "Mutadone Plant Formula" desc = "A nutrient-rich formula that attempts to rectify genetic problems." - icon = 'icons/obj/chemical.dmi' - icon_state = "bottle3" + icon = 'icons/obj/items/chemistry_glassware.dmi' + bottle_style = "3" amount_per_transfer_from_this = 10 initial_volume = 40 @@ -656,8 +656,11 @@ TYPEINFO(/obj/item/plantanalyzer) /obj/item/reagent_containers/glass/water_pipe name = "water pipe" - icon = 'icons/obj/chemical.dmi' + icon = 'icons/obj/items/chemistry_glassware.dmi' icon_state = "bong" + fluid_overlay_states = 8 + container_style = "bong" + fluid_overlay_scaling = RC_FLUID_OVERLAY_SCALING_SPHERICAL filled diff --git a/code/obj/item/implant.dm b/code/obj/item/implant.dm index fba4de5b68a95..7e0e9afa2f5ea 100644 --- a/code/obj/item/implant.dm +++ b/code/obj/item/implant.dm @@ -2054,7 +2054,7 @@ TYPEINFO(/obj/item/gun/implanter) damage_type = D_KINETIC hit_type = DAMAGE_STAB casing = /obj/item/casing/small - impact_image_state = "bhole-small" + impact_image_state = "bullethole-small" shot_number = 1 //silentshot = 1 var/obj/item/implant/my_implant = null diff --git a/code/obj/item/kitchen.dm b/code/obj/item/kitchen.dm index 704954217916b..d2fd419172876 100644 --- a/code/obj/item/kitchen.dm +++ b/code/obj/item/kitchen.dm @@ -54,7 +54,7 @@ TRAYS New() ..() - if(prob(60)) + if(src.pixel_y == 0 && prob(60)) // Don't adjust map-set pixel adjustments src.pixel_y = rand(0, 4) BLOCK_SETUP(BLOCK_KNIFE) return @@ -917,6 +917,20 @@ TRAYS . = ..() + proc/mousetrap_check(mob/user) + for(var/obj/item/mousetrap/MT in src.food_inside) + if (MT.armed) + user?.visible_message(SPAN_ALERT("<B>[user] opens the pizza box and sets off a mousetrap!</B>"),\ + SPAN_ALERT("<B>You open the pizza box, but there was a live mousetrap in there!</B>")) + MT.triggered(user, user?.hand ? "l_hand" : "r_hand") + return TRUE + for(var/obj/item/mine/M in src.food_inside) + if (M.armed && M.used_up != TRUE) + user?.visible_message(SPAN_ALERT("<B>[user] opens the pizza box and sets off a [M.name]!</B>"),\ + SPAN_ALERT("<B>You open the pizza box, but there was a live [M.name] in there!</B>")) + M.triggered(user) + return TRUE + proc/toggle_box(mob/user) if (length(src.contents - src.food_inside) > 0) boutput(user, SPAN_ALERT("You have to remove the boxes on \the [src] before you can open it!")) @@ -942,6 +956,9 @@ TRAYS src.UpdateIcon() else + if (src.mousetrap_check(user)) + return FALSE + if (isnull(user)) // We only need a null-check here because of the shit_goes_everywhere proc icon_state = "pizzabox_open" src.open = TRUE diff --git a/code/obj/item/manudrive.dm b/code/obj/item/manudrive.dm index 8e2e98993f567..835e65c88074d 100644 --- a/code/obj/item/manudrive.dm +++ b/code/obj/item/manudrive.dm @@ -79,3 +79,24 @@ TYPEINFO(/obj/item/disk/data/floppy/manudrive) desc = "A drive for data storage that can be inserted and removed from manufacturers to temporarily add recipes to a manufacturer. This drive carries a blueprint that permits the user to manufacture laser mirrors and beam splitters." icon_state = "datadiskeng" temp_recipe_string = list(/datum/manufacture/mechanics/laser_mirror, /datum/manufacture/mechanics/laser_splitter) + + comms_dish + name = "Command ManuDrive: Communications Dish" + desc = "A drive for data storage that can be inserted and removed from manufacturers to temporarily add recipes to a manufacturer. This drive carries a blueprint that permits the user to manufacture a new communications dish." + icon_state = "datadiskcom" + temp_recipe_string = list(/datum/manufacture/mechanics/comms_dish) + + singleuse + fablimit = 1 + + pocketoxyex + name = "Civilian ManuDrive: Extended Capacity Pocket Oxygen Tank" + desc = "A drive for data storage that can be inserted and removed from manufacturers to temporarily add recipes to a manufacturer. This drive carries a blueprint that permits the user to manufacture an extended capacity pocket oxygen tank." + icon_state = "datadisk1" + temp_recipe_string = list(/datum/manufacture/pocketoxyex) + + singleuse + fablimit = 1 + + threeuse + fablimit = 3 diff --git a/code/obj/item/material.dm b/code/obj/item/material.dm index 0f2ffda6eac28..5058540c113ec 100644 --- a/code/obj/item/material.dm +++ b/code/obj/item/material.dm @@ -858,12 +858,14 @@ if (.) user.visible_message("<b>[user.name]</b> loads [W] into [src].") playsound(src, sound_load, 40, TRUE) + logTheThing(LOG_STATION, user, "loads [W] into \the [src] at [log_loc(src)].") else if (W?.cant_drop) boutput(user, SPAN_ALERT("You can't put that in [src] when it's attached to you!")) return ..() else if (load_reclaim(W, user)) boutput(user, "You load [W] into [src].") playsound(src, sound_load, 40, TRUE) + logTheThing(LOG_STATION, user, "loads [W] into \the [src] at [log_loc(src)].") else . = ..() diff --git a/code/obj/item/misc_weapons.dm b/code/obj/item/misc_weapons.dm index 806a88eab2251..d78324c50995a 100644 --- a/code/obj/item/misc_weapons.dm +++ b/code/obj/item/misc_weapons.dm @@ -1763,8 +1763,8 @@ obj/item/whetstone var/stab_color = "#FF0000" New() - ..() START_TRACKING_CAT(TR_CAT_NUKE_OP_STYLE) + ..() src.AddComponent(/datum/component/bloodflick) src.setItemSpecial(/datum/item_special/swipe) src.update_special_color() diff --git a/code/obj/item/mob_parts.dm b/code/obj/item/mob_parts.dm index 01e7b8baea745..8a8ad1b1ce5ce 100644 --- a/code/obj/item/mob_parts.dm +++ b/code/obj/item/mob_parts.dm @@ -369,6 +369,10 @@ ABSTRACT_TYPE(/obj/item/parts) proc/on_holder_examine() return + ///Called every life tick when attached to a mob + proc/on_life(datum/controller/process/mobs/parent) + return + /obj/item/proc/streak_object(var/list/directions, var/streak_splatter) //stolen from gibs var/destination var/dist = rand(1,6) diff --git a/code/obj/item/mob_parts/human_parts.dm b/code/obj/item/mob_parts/human_parts.dm index ffea7d6ed6736..a120c9149eb5f 100644 --- a/code/obj/item/mob_parts/human_parts.dm +++ b/code/obj/item/mob_parts/human_parts.dm @@ -1588,6 +1588,50 @@ partlistPart = "foot_right" step_image_state = "footprintsR" +// bingus limbs hehehe + +/obj/item/parts/human_parts/arm/mutant/cat/bingus + icon = 'icons/mob/bingus.dmi' + partIcon = 'icons/mob/bingus.dmi' + +/obj/item/parts/human_parts/leg/mutant/cat/bingus + icon = 'icons/mob/bingus.dmi' + partIcon = 'icons/mob/bingus.dmi' + +////// ACTUAL CAT LIMBS ////// +/obj/item/parts/human_parts/arm/mutant/cat/bingus/left + name = "left cat arm" + desc = "A cat's left arm. Meow." + icon_state = "arm_left" + slot = "l_arm" + side = "left" + handlistPart = "hand_left" + +/obj/item/parts/human_parts/arm/mutant/cat/bingus/right + name = "right cat arm" + desc = "A cat's right arm. =3" + icon_state = "arm_right" + slot = "r_arm" + side = "right" + handlistPart = "hand_right" + +/obj/item/parts/human_parts/leg/mutant/cat/bingus/left + name = "left cat leg" + desc = "A cat's left leg. =0w0=" + icon_state = "leg_left" + slot = "l_leg" + side = "left" + partlistPart = "foot_left" + step_image_state = "footprintsL" + +/obj/item/parts/human_parts/leg/mutant/cat/bingus/right + name = "right cat leg" + desc = "A cat's right leg. Mrow." + icon_state = "leg_right" + slot = "r_leg" + side = "right" + partlistPart = "foot_right" + step_image_state = "footprintsR" //// WEREWOLF LIMBS //// ////// PARENT ////////// @@ -1674,13 +1718,12 @@ /obj/item/parts/human_parts/arm/mutant/vampiric_thrall icon = 'icons/mob/vampiric_thrall.dmi' partIcon = 'icons/mob/vampiric_thrall.dmi' - kind_of_limb = (LIMB_MUTANT | LIMB_ZOMBIE) - limb_type = /datum/limb/zombie/thrall + kind_of_limb = LIMB_MUTANT /obj/item/parts/human_parts/leg/mutant/vampiric_thrall icon = 'icons/mob/vampiric_thrall.dmi' partIcon = 'icons/mob/vampiric_thrall.dmi' - kind_of_limb = (LIMB_MUTANT | LIMB_ZOMBIE) + kind_of_limb = LIMB_MUTANT //// LIMBS //// /obj/item/parts/human_parts/arm/mutant/vampiric_thrall/left diff --git a/code/obj/item/mob_parts/robot_parts.dm b/code/obj/item/mob_parts/robot_parts.dm index 8ba1f3054c75d..b398cb1a2f122 100644 --- a/code/obj/item/mob_parts/robot_parts.dm +++ b/code/obj/item/mob_parts/robot_parts.dm @@ -22,11 +22,14 @@ ABSTRACT_TYPE(/obj/item/parts/robot_parts) var/max_health = 100 var/dmg_blunt = 0 var/dmg_burns = 0 - /// for calculating speed modifiers + /// Currently vestigal variable previously used for speed, being left for potiental future application var/weight = 0 /// does this part consume any extra power var/powerdrain = 0 + default_material = "steel" + mat_changeappearance = FALSE + force = 6 stamina_damage = 40 stamina_cost = 23 @@ -111,8 +114,8 @@ ABSTRACT_TYPE(/obj/item/parts/robot_parts) if (!wrong_tool && src) //ZeWaka: Fix for null.name switch(remove_stage) if(0) - tool.the_mob.visible_message(SPAN_ALERT("[tool.the_mob] staples [holder.name]'s [src.name] securely to their stump with [tool]."), SPAN_ALERT("You staple [holder.name]'s [src.name] securely to their stump with [tool].")) - logTheThing(LOG_COMBAT, tool.the_mob, "staples [constructTarget(holder,"combat")]'s [src.name] back on.") + tool.the_mob.visible_message(SPAN_ALERT("[tool.the_mob] secures [holder.name]'s [src.name] to [his_or_her(holder)] stump with [tool]."), SPAN_ALERT("You secure [holder.name]'s [src.name] to [his_or_her(holder)] stump with [tool].")) + logTheThing(LOG_COMBAT, tool.the_mob, "secures [constructTarget(holder,"combat")]'s [src.name] back on.") if(1) tool.the_mob.visible_message(SPAN_ALERT("[tool.the_mob] slices through the attachment mesh of [holder.name]'s [src.name] with [tool]."), SPAN_ALERT("You slice through the attachment mesh of [holder.name]'s [src.name] with [tool].")) if(2) @@ -146,6 +149,10 @@ ABSTRACT_TYPE(/obj/item/parts/robot_parts) return 0 return 0 + /// For special explosion behaviour, explosive damage is handled in ropart_take_damage + proc/ropart_ex_act(severity, lasttouched, power) + return + proc/ropart_mend_damage(var/bluntdmg = 0,var/burnsdmg = 0) src.dmg_blunt -= bluntdmg src.dmg_burns -= burnsdmg @@ -165,9 +172,31 @@ ABSTRACT_TYPE(/obj/item/parts/robot_parts) if (src.dmg_blunt || src.dmg_burns) return ((src.dmg_blunt + src.dmg_burns) / src.max_health) * 100 else return 0 - //Should maybe be on parent, but something something performance concerns - proc/on_life() - return + proc/reinforce(var/obj/item/sheet/M, var/mob/user, var/obj/item/parts/robot_parts/result, var/need_reinforced) + if (!src.can_reinforce(M, user, need_reinforced)) + return + + var/obj/item/parts/robot_parts/newitem = new result(get_turf(src)) + newitem.setMaterial(src.material) + boutput(user, SPAN_NOTICE("You reinforce [src.name] with the metal.")) + M.change_stack_amount(-2) + if (M.amount < 1) + user.drop_item() + qdel(M) + + qdel(src) + + proc/can_reinforce(var/obj/item/sheet/M, var/mob/user, var/need_reinforced) + if (need_reinforced && !M.reinforcement) + boutput(user, SPAN_ALERT("You'll need reinforced sheets to reinforce this component.")) + return FALSE + if (M.amount < 2) + boutput(user, SPAN_ALERT("You need at least two metal sheets to reinforce this component.")) + return FALSE + if (!src.material.isSameMaterial(M.material)) + boutput(user, SPAN_ALERT("You need the same material as the component to reinforce.")) + return FALSE + return TRUE ABSTRACT_TYPE(/obj/item/parts/robot_parts/head) /obj/item/parts/robot_parts/head @@ -176,6 +205,7 @@ ABSTRACT_TYPE(/obj/item/parts/robot_parts/head) icon_state_base = "head" icon_state = "head-generic" slot = "head" + material_amt = ROBOT_HEAD_COST var/obj/item/organ/brain/brain = null var/obj/item/ai_interface/ai_interface = null @@ -258,30 +288,38 @@ ABSTRACT_TYPE(/obj/item/parts/robot_parts/head) else ..() + reinforce(var/obj/item/sheet/M, var/mob/user, var/obj/item/parts/robot_parts/result, var/need_reinforced) + if (!src.can_reinforce(M, need_reinforced)) + return + + var/obj/item/parts/robot_parts/newitem = new result(get_turf(src)) + newitem.setMaterial(src.material) + + var/obj/item/parts/robot_parts/head/newhead = newitem + var/obj/item/parts/robot_parts/head/oldhead = src + if (oldhead.brain) + newhead.brain = oldhead.brain + oldhead.brain.set_loc(newhead) + else if (oldhead.ai_interface) + newhead.ai_interface = oldhead.ai_interface + oldhead.ai_interface.set_loc(newhead) + + boutput(user, SPAN_NOTICE("You reinforce [src.name] with the metal.")) + M.change_stack_amount(-2) + if (M.amount < 1) + user.drop_item() + qdel(M) + + qdel(src) + /obj/item/parts/robot_parts/head/standard name = "standard cyborg head" max_health = 160 + robot_movement_modifier = /datum/movement_modifier/robot_part/standard_head attackby(obj/item/W, mob/user) if (istype(W,/obj/item/sheet)) var/obj/item/sheet/M = W - if (M.amount >= 2) - boutput(user, SPAN_NOTICE("You reinforce [src.name] with the metal.")) - var/obj/item/parts/robot_parts/head/sturdy/newhead = new /obj/item/parts/robot_parts/head/sturdy(get_turf(src)) - M.change_stack_amount(-2) - if (M.amount < 1) - user.drop_item() - qdel(M) - if (src.brain) - newhead.brain = src.brain - src.brain.set_loc(newhead) - else if (src.ai_interface) - newhead.ai_interface = src.ai_interface - src.ai_interface.set_loc(newhead) - qdel(src) - return - else - boutput(user, SPAN_ALERT("You need at least two metal sheets to reinforce this component.")) - return + src.reinforce(M, user, /obj/item/parts/robot_parts/head/sturdy, FALSE) else ..() @@ -290,53 +328,16 @@ ABSTRACT_TYPE(/obj/item/parts/robot_parts/head) desc = "A reinforced head unit capable of taking more abuse than usual." appearanceString = "sturdy" icon_state = "head-sturdy" + material_amt = ROBOT_HEAD_COST + ROBOT_STURDY_COST max_health = 225 weight = 0.2 + robot_movement_modifier = /datum/movement_modifier/robot_part/sturdy_head kind_of_limb = (LIMB_ROBOT | LIMB_HEAVY) // shush attackby(obj/item/W, mob/user) if (istype(W,/obj/item/sheet)) var/obj/item/sheet/M = W - if (!M.reinforcement) - boutput(user, SPAN_ALERT("You'll need reinforced sheets to reinforce the head.")) - return - if (M.amount >= 2) - boutput(user, SPAN_NOTICE("You reinforce [src.name] with the reinforced metal.")) - var/obj/item/parts/robot_parts/head/heavy/newhead = new /obj/item/parts/robot_parts/head/heavy(get_turf(src)) - M.change_stack_amount(-2) - if (M.amount < 1) - user.drop_item() - qdel(M) - if (src.brain) - newhead.brain = src.brain - src.brain.set_loc(newhead) - else if (src.ai_interface) - newhead.ai_interface = src.ai_interface - src.ai_interface.set_loc(newhead) - qdel(src) - return - else - boutput(user, SPAN_ALERT("You need at least two reinforced metal sheets to reinforce this component.")) - return - else if (isweldingtool(W)) - if(!W:try_weld(user, 1)) - return - boutput(user, SPAN_NOTICE("You remove the reinforcement metals from [src].")) - var/obj/item/parts/robot_parts/head/standard/newhead = new /obj/item/parts/robot_parts/head/standard(get_turf(src)) - if (src.brain) - newhead.brain = src.brain - src.brain.set_loc(newhead) - else if (src.ai_interface) - newhead.ai_interface = src.ai_interface - src.ai_interface.set_loc(newhead) - - //costs 2 sheets to make vov - new/obj/item/sheet/steel(get_turf(src)) - new/obj/item/sheet/steel(get_turf(src)) - - qdel(src) - return - + src.reinforce(M, user, /obj/item/parts/robot_parts/head/heavy, TRUE) else ..() @@ -345,38 +346,20 @@ ABSTRACT_TYPE(/obj/item/parts/robot_parts/head) desc = "A heavily reinforced head unit intended for use on cyborgs that perform tough and dangerous work." appearanceString = "heavy" icon_state = "head-heavy" + material_amt = ROBOT_HEAD_COST + ROBOT_HEAVY_COST max_health = 350 weight = 0.4 + robot_movement_modifier = /datum/movement_modifier/robot_part/heavy_head kind_of_limb = (LIMB_ROBOT | LIMB_HEAVIER) - attackby(obj/item/W, mob/user) - if (isweldingtool(W)) - if(!W:try_weld(user, 1)) - return - boutput(user, SPAN_NOTICE("You remove the reinforcement metals from [src].")) - var/obj/item/parts/robot_parts/head/sturdy/newhead = new /obj/item/parts/robot_parts/head/sturdy/(get_turf(src)) - if (src.brain) - newhead.brain = src.brain - src.brain.set_loc(newhead) - else if (src.ai_interface) - newhead.ai_interface = src.ai_interface - src.ai_interface.set_loc(newhead) - //costs 2 sheets to make vov - new/obj/item/sheet/steel/reinforced(get_turf(src)) - new/obj/item/sheet/steel/reinforced(get_turf(src)) - - qdel(src) - return - else - ..() - /obj/item/parts/robot_parts/head/light name = "light cyborg head" desc = "A cyborg head with little reinforcement, to be built in times of scarce resources." appearanceString = "light" icon_state = "head-light" + material_amt = ROBOT_HEAD_COST * ROBOT_LIGHT_COST_MOD max_health = 60 - robot_movement_modifier = /datum/movement_modifier/robot_part/head + robot_movement_modifier = /datum/movement_modifier/robot_part/light_head kind_of_limb = (LIMB_ROBOT | LIMB_LIGHT) /obj/item/parts/robot_parts/head/antique @@ -386,15 +369,55 @@ ABSTRACT_TYPE(/obj/item/parts/robot_parts/head) icon_state = "head-android" max_health = 150 visible_eyes = 0 - robot_movement_modifier = /datum/movement_modifier/robot_part/head + robot_movement_modifier = /datum/movement_modifier/robot_part/light_head /obj/item/parts/robot_parts/head/screen name = "cyborg screen head" desc = "A somewhat fragile head unit with a screen addressable by the cyborg." appearanceString = "screen" icon_state = "head-screen" + material_amt = ROBOT_SCREEN_METAL_COST max_health = 90 var/list/expressions = list("happy", "veryhappy", "neutral", "sad", "angry", "curious", "surprised", "unsure", "content", "tired", "cheeky","nervous","ditzy","annoyed","skull","eye","sly","elated","blush","battery","error","loading","pong","hypnotized") + var/smashed = FALSE + + update_icon(...) + if (src.smashed) + src.UpdateOverlays(image('icons/obj/robot_parts.dmi', "head-screen-smashed"), "smashed") + else + src.UpdateOverlays(null, "smashed") + + ropart_take_damage(var/bluntdmg = 0,var/burnsdmg = 0) + ..() //parent calls del if we get destroyed so no need to handle not doing this + if (!src.smashed && (bluntdmg > 10 || bluntdmg > 3 && prob(20))) + src.smashed = TRUE + src.UpdateIcon() + var/mob/living/silicon/robot/robo_holder = src.holder + robo_holder.update_bodypart("head") + + ropart_ex_act(severity, lasttouched, power) + if (!src.smashed && (severity == 1 || prob(60))) + src.smashed = TRUE + src.UpdateIcon() + //no need to update the holder here as robots do a full update on exploding + + attackby(obj/item/W, mob/user) + if (src.smashed && istype(W, /obj/item/sheet) && W.material.getMaterialFlags() & MATERIAL_CRYSTAL) + src.start_repair(W, user) + else + ..() + + proc/start_repair(obj/item/W, mob/user) + SETUP_GENERIC_ACTIONBAR(user, src, 2 SECONDS, TYPE_PROC_REF(/obj/item/parts/robot_parts/head/screen, repair), list(W, user),\ + W.icon, W.icon_state, SPAN_ALERT("[user] repairs [src]."), INTERRUPT_ACT | INTERRUPT_STUNNED | INTERRUPT_ACTION | INTERRUPT_MOVE) + + proc/repair(obj/item/sheet/sheets, mob/user) + sheets.change_stack_amount(-1) + src.smashed = FALSE + var/mob/living/silicon/robot/robo_holder = src.holder + robo_holder?.update_bodypart("head") + src.UpdateIcon() + playsound(get_turf(src.holder || src), 'sound/items/Deconstruct.ogg', 40, 1) ABSTRACT_TYPE(/obj/item/parts/robot_parts/chest) /obj/item/parts/robot_parts/chest @@ -478,7 +501,9 @@ ABSTRACT_TYPE(/obj/item/parts/robot_parts/chest) /obj/item/parts/robot_parts/chest/standard name = "standard cyborg chest" desc = "The centerpiece of any cyborg. It wouldn't get very far without it." + material_amt = ROBOT_CHEST_COST max_health = 250 + robot_movement_modifier = /datum/movement_modifier/robot_part/standard_chest attackby(obj/item/W, mob/user) if (isweldingtool(W)) @@ -498,16 +523,20 @@ ABSTRACT_TYPE(/obj/item/parts/robot_parts/chest) desc = "A bare-bones cyborg chest designed for the least consumption of resources." appearanceString = "light" icon_state = "body-light" + material_amt = ROBOT_CHEST_COST * ROBOT_LIGHT_COST_MOD max_health = 75 + robot_movement_modifier = /datum/movement_modifier/robot_part/light_chest kind_of_limb = (LIMB_ROBOT | LIMB_LIGHT) // hush ABSTRACT_TYPE(/obj/item/parts/robot_parts/arm) /obj/item/parts/robot_parts/arm name = "placeholder item (don't use this!)" desc = "A metal arm for a cyborg. It won't be able to use as many tools without it!" + material_amt = ROBOT_LIMB_COST max_health = 60 can_hold_items = 1 accepts_normal_human_overlays = TRUE + var/emagged = FALSE //contains: technical debt attack(mob/target, mob/user, def_zone, is_special = FALSE, params = null) if(!ismob(target)) @@ -535,39 +564,70 @@ ABSTRACT_TYPE(/obj/item/parts/robot_parts/arm) return - attackby(obj/item/W, mob/user) - //gonna hack this in with appearanceString - if ((appearanceString == "sturdy" || appearanceString == "heavy") && isweldingtool(W)) - if(!W:try_weld(user, 1)) - return - boutput(user, SPAN_NOTICE("You remove the reinforcement metals from [src].")) - - if (appearanceString == "sturdy") - if (slot == "l_arm") - new /obj/item/parts/robot_parts/arm/left(get_turf(src)) - else if (slot == "r_arm") - new /obj/item/parts/robot_parts/arm/right(get_turf(src)) + on_holder_examine() + if (!isrobot(src.holder)) // probably a human, probably :p + return "has [bicon(src)] \an [initial(src.name)] attached as a" + return - new/obj/item/sheet/steel(get_turf(src)) - new/obj/item/sheet/steel(get_turf(src)) + emag_act(mob/user, obj/item/card/emag/E) + boutput(user, SPAN_ALERT("You short out the control servos on [src]")) //sneaky emag act + src.emagged = TRUE - else if (appearanceString == "heavy") - if (slot == "l_arm") - new /obj/item/parts/robot_parts/arm/left/sturdy(get_turf(src)) - else if (slot == "r_arm") - new /obj/item/parts/robot_parts/arm/right/sturdy(get_turf(src)) + on_life() + if (!src.emagged || src.holder.restrained() || prob(60)) //chance to do nothing + return - new/obj/item/sheet/steel/reinforced(get_turf(src)) - new/obj/item/sheet/steel/reinforced(get_turf(src)) + if (prob(50)) + boutput(src.holder, SPAN_ALERT(pick("You hear the servos in your arm make a distressing whining sound!", "Your arm twitches oddly!", "You lose control of your arm for a moment!"))) + + if (ishuman(src.holder)) + src.human_emag_effect() + else if (isrobot(src.holder)) + src.robot_emag_effect() + + proc/human_emag_effect() + var/mob/living/carbon/human/H = src.holder + var/mob/living/target = H //default to hitting ourselves + if (prob(80)) //usually look for something else + var/list/mob/living/targets = list() + for (var/mob/living/M in view(1, H)) + if (isintangible(M) || M == H) + continue + targets |= M + if (length(targets)) + target = pick(targets) + //make sure we're using the correct hand + if ((H.hand == LEFT_HAND && src.slot != "l_arm") || (H.hand == RIGHT_HAND && src.slot != "r_arm")) + H.swap_hand() + + if (target == H) + H.set_a_intent(pick(INTENT_HELP, INTENT_DISARM, INTENT_HARM)) //no blocking + else + H.set_a_intent(pick(INTENT_HELP, INTENT_DISARM, INTENT_GRAB, INTENT_HARM)) //only grabbing - qdel(src) - return + logTheThing(LOG_COMBAT, key_name(H), "emagged cyberarm attempts to attack [constructTarget(target)]") + var/obj/item/equipped = H.equipped() + if (isgrab(equipped) || equipped?.chokehold) + if (prob(50)) + equipped.AttackSelf(H) + else + H.drop_item(equipped, TRUE) + else if (equipped) + H.weapon_attack(target, H.equipped(), can_reach(H, target), list()) else - ..() - on_holder_examine() - if (!isrobot(src.holder)) // probably a human, probably :p - return "has [bicon(src)] \an [initial(src.name)] attached as a" - return + H.hand_attack(target) + + proc/robot_emag_effect() + var/mob/living/silicon/robot/robot = src.holder + var/robo_slot = src.slot == "l_arm" ? 1 : 3 + var/last_active = robot.module_states.Find(robot.module_active) + robot.uneq_slot(robo_slot) + var/obj/item/chosen_tool = pick(robot.module?.tools) + if (!chosen_tool) + return + robot.equip_slot(robo_slot, chosen_tool) + if (last_active) + robot.swap_hand(last_active) ABSTRACT_TYPE(/obj/item/parts/robot_parts/arm/left) /obj/item/parts/robot_parts/arm/left @@ -579,66 +639,47 @@ ABSTRACT_TYPE(/obj/item/parts/robot_parts/arm/left) /obj/item/parts/robot_parts/arm/left/standard name = "standard cyborg left arm" + attackby(obj/item/W, mob/user) if(istype(W,/obj/item/sheet)) var/obj/item/sheet/M = W - if (M.amount >= 2) - boutput(user, SPAN_NOTICE("You reinforce [src.name] with the metal.")) - new /obj/item/parts/robot_parts/arm/left/sturdy(get_turf(src)) - M.change_stack_amount(-2) - if (M.amount < 1) - user.drop_item() - qdel(M) - qdel(src) - return - else - boutput(user, SPAN_ALERT("You need at least two metal sheets to reinforce this component.")) - return + src.reinforce(M, user, /obj/item/parts/robot_parts/arm/left/sturdy, FALSE) else ..() /obj/item/parts/robot_parts/arm/left/sturdy name = "sturdy cyborg left arm" appearanceString = "sturdy" icon_state = "l_arm-sturdy" + material_amt = ROBOT_LIMB_COST + ROBOT_STURDY_COST max_health = 115 weight = 0.2 + robot_movement_modifier = /datum/movement_modifier/robot_part/sturdy_arm_left kind_of_limb = (LIMB_ROBOT | LIMB_HEAVY) attackby(obj/item/W, mob/user) if(istype(W,/obj/item/sheet)) var/obj/item/sheet/M = W - if (!M.reinforcement) - boutput(user, SPAN_ALERT("You'll need reinforced sheets to reinforce the [src.name].")) - return - if (M.amount >= 2) - boutput(user, SPAN_NOTICE("You reinforce [src.name] with the reinforced metal.")) - new /obj/item/parts/robot_parts/arm/left/heavy(get_turf(src)) - M.change_stack_amount(-2) - if (M.amount < 1) - user.drop_item() - qdel(M) - qdel(src) - return - else - boutput(user, SPAN_ALERT("You need at least two reinforced metal sheets to reinforce this component.")) - return + src.reinforce(M, user, /obj/item/parts/robot_parts/arm/left/heavy, TRUE) else ..() /obj/item/parts/robot_parts/arm/left/heavy name = "heavy cyborg left arm" appearanceString = "heavy" icon_state = "l_arm-heavy" + material_amt = ROBOT_LIMB_COST + ROBOT_HEAVY_COST max_health = 175 weight = 0.4 + robot_movement_modifier = /datum/movement_modifier/robot_part/heavy_arm_left kind_of_limb = (LIMB_ROBOT | LIMB_HEAVIER) /obj/item/parts/robot_parts/arm/left/light name = "light cyborg left arm" appearanceString = "light" icon_state = "l_arm-light" + material_amt = ROBOT_LIMB_COST * ROBOT_LIGHT_COST_MOD max_health = 25 handlistPart = "armL-light" - robot_movement_modifier = /datum/movement_modifier/robot_part/arm_left + robot_movement_modifier = /datum/movement_modifier/robot_part/light_arm_left kind_of_limb = (LIMB_ROBOT | LIMB_LIGHT) ABSTRACT_TYPE(/obj/item/parts/robot_parts/arm/right) @@ -656,63 +697,43 @@ ABSTRACT_TYPE(/obj/item/parts/robot_parts/arm/right) attackby(obj/item/W, mob/user) if(istype(W,/obj/item/sheet)) var/obj/item/sheet/M = W - if (M.amount >= 2) - boutput(user, SPAN_NOTICE("You reinforce [src.name] with the metal.")) - new /obj/item/parts/robot_parts/arm/right/sturdy(get_turf(src)) - M.change_stack_amount(-2) - if (M.amount < 1) - user.drop_item() - qdel(M) - qdel(src) - return - else - boutput(user, SPAN_ALERT("You need at least two metal sheets to reinforce this component.")) - return + src.reinforce(M, user, /obj/item/parts/robot_parts/arm/right/sturdy, FALSE) else ..() /obj/item/parts/robot_parts/arm/right/sturdy name = "sturdy cyborg right arm" appearanceString = "sturdy" icon_state = "r_arm-sturdy" + material_amt = ROBOT_LIMB_COST + ROBOT_STURDY_COST max_health = 115 weight = 0.2 + robot_movement_modifier = /datum/movement_modifier/robot_part/sturdy_arm_right kind_of_limb = (LIMB_ROBOT | LIMB_HEAVY) attackby(obj/item/W, mob/user) if(istype(W,/obj/item/sheet)) var/obj/item/sheet/M = W - if (!M.reinforcement) - boutput(user, SPAN_ALERT("You'll need reinforced sheets to reinforce the [src.name].")) - return - if (M.amount >= 2) - boutput(user, SPAN_NOTICE("You reinforce [src.name] with the reinforced metal.")) - new /obj/item/parts/robot_parts/arm/right/heavy(get_turf(src)) - M.change_stack_amount(-2) - if (M.amount < 1) - user.drop_item() - qdel(M) - qdel(src) - return - else - boutput(user, SPAN_ALERT("You need at least two reinforced metal sheets to reinforce this component.")) - return + src.reinforce(M, user, /obj/item/parts/robot_parts/arm/right/heavy, TRUE) else ..() /obj/item/parts/robot_parts/arm/right/heavy name = "heavy cyborg right arm" appearanceString = "heavy" icon_state = "r_arm-heavy" + material_amt = ROBOT_LIMB_COST + ROBOT_HEAVY_COST max_health = 175 weight = 0.4 + robot_movement_modifier = /datum/movement_modifier/robot_part/heavy_arm_right kind_of_limb = (LIMB_ROBOT | LIMB_HEAVIER) /obj/item/parts/robot_parts/arm/right/light name = "light cyborg right arm" appearanceString = "light" icon_state = "r_arm-light" + material_amt = ROBOT_LIMB_COST * ROBOT_LIGHT_COST_MOD max_health = 25 handlistPart = "armR-light" - robot_movement_modifier = /datum/movement_modifier/robot_part/arm_right + robot_movement_modifier = /datum/movement_modifier/robot_part/light_arm_right kind_of_limb = (LIMB_ROBOT | LIMB_LIGHT) ABSTRACT_TYPE(/obj/item/parts/robot_parts/leg) @@ -720,6 +741,7 @@ ABSTRACT_TYPE(/obj/item/parts/robot_parts/leg) name = "placeholder item (don't use this!)" desc = "A metal leg for a cyborg. It won't be able to move very well without this!" icon_state_base = "legs" // effectively the prefix for items that go on both legs at once. + material_amt = ROBOT_LIMB_COST max_health = 60 var/step_sound = "step_robo" var/step_priority = STEP_PRIORITY_LOW @@ -818,8 +840,9 @@ ABSTRACT_TYPE(/obj/item/parts/robot_parts/leg/left) appearanceString = "light" icon_state = "l_leg-light" partlistPart = "legL-light" + material_amt = ROBOT_LIMB_COST * ROBOT_LIGHT_COST_MOD max_health = 25 - robot_movement_modifier = /datum/movement_modifier/robotleg_left + robot_movement_modifier = /datum/movement_modifier/robot_part/light_leg_left kind_of_limb = (LIMB_ROBOT | LIMB_LIGHT) /obj/item/parts/robot_parts/leg/left/treads @@ -828,6 +851,7 @@ ABSTRACT_TYPE(/obj/item/parts/robot_parts/leg/left) appearanceString = "treads" icon_state = "l_leg-treads" handlistPart = "legL-treads" // THIS ONE gets to layer with the hands because it looks ugly if jumpsuits are over it. Will fix codewise later + material_amt = ROBOT_TREAD_METAL_COST powerdrain = 2.5 step_image_state = "tracksL" movement_modifier = /datum/movement_modifier/robottread_left @@ -853,8 +877,9 @@ ABSTRACT_TYPE(/obj/item/parts/robot_parts/leg/right) appearanceString = "light" icon_state = "r_leg-light" partlistPart = "legR-light" + material_amt = ROBOT_LIMB_COST * ROBOT_LIGHT_COST_MOD max_health = 25 - robot_movement_modifier = /datum/movement_modifier/robotleg_right + robot_movement_modifier = /datum/movement_modifier/robot_part/light_leg_right kind_of_limb = (LIMB_ROBOT | LIMB_LIGHT) /obj/item/parts/robot_parts/leg/right/treads @@ -863,6 +888,7 @@ ABSTRACT_TYPE(/obj/item/parts/robot_parts/leg/right) appearanceString = "treads" icon_state = "r_leg-treads" handlistPart = "legR-treads" // THIS ONE gets to layer with the hands because it looks ugly if jumpsuits are over it. Will fix codewise later + material_amt = ROBOT_TREAD_METAL_COST powerdrain = 2.5 step_image_state = "tracksR" movement_modifier = /datum/movement_modifier/robottread_right @@ -874,6 +900,7 @@ ABSTRACT_TYPE(/obj/item/parts/robot_parts/leg/right) desc = "Is it really a good idea to give thrusters to cyborgs..? Probably not." appearanceString = "thruster" icon_state = "l_leg-thruster" + material_amt = ROBOT_THRUSTER_COST max_health = 100 powerdrain = 5 step_image_state = null //It's flying so no need for this. @@ -889,6 +916,7 @@ ABSTRACT_TYPE(/obj/item/parts/robot_parts/leg/right) desc = "Is it really a good idea to give thrusters to cyborgs..? Probably not." appearanceString = "thruster" icon_state = "r_leg-thruster" + material_amt = ROBOT_THRUSTER_COST max_health = 100 powerdrain = 5 step_image_state = null //It's flying so no need for this. @@ -897,11 +925,13 @@ ABSTRACT_TYPE(/obj/item/parts/robot_parts/leg/right) on_life() var/turf/T = get_turf(src.holder) - T?.hotspot_expose(700, 50) + if(src.holder.loc == T) + T?.hotspot_expose(700, 50) /obj/item/parts/robot_parts/robot_frame name = "robot frame" icon_state = "robo_suit" + material_amt = ROBOT_FRAME_COST max_health = 5000 /// This will make the borg a syndie one var/syndicate = FALSE @@ -1094,8 +1124,15 @@ ABSTRACT_TYPE(/obj/item/parts/robot_parts/leg/right) if(src.head) src.UpdateOverlays(image('icons/mob/robots.dmi', "head-" + src.head.appearanceString, FLOAT_LAYER, 2),"head") + var/image/smashed_image = null + if (istype(src.head, /obj/item/parts/robot_parts/head/screen)) //ehhhh + var/obj/item/parts/robot_parts/head/screen/screenhead = src.head + if (screenhead.smashed) + smashed_image = image('icons/mob/robots.dmi', "screen-smashed", dir = SOUTH) + src.UpdateOverlays(smashed_image, "screen-smashed") else src.UpdateOverlays(null,"head") + src.UpdateOverlays(null, "screen-smashed") if(src.l_leg) if(src.l_leg.slot == "leg_both") diff --git a/code/obj/item/mops_cleaners.dm b/code/obj/item/mops_cleaners.dm index fe96c896223a0..72165028ce0d0 100644 --- a/code/obj/item/mops_cleaners.dm +++ b/code/obj/item/mops_cleaners.dm @@ -511,10 +511,19 @@ TRASH BAG return ..() /obj/item/sponge/attack_self(mob/user as mob) + if(spam_flag) + return . = ..() var/turf/location = get_turf(user) + spam_flag = 1 if (location) src.reagents.reaction(location, TOUCH, src.reagents.total_volume) + //somepotato note: wtf is the thing below this + //mbc note : yeah that's dumb! I moved spam_flag up top to prevent reagent duplication + SPAWN(1 DECI SECOND) // to make sure the reagents actually react before they're cleared + src.reagents.clear_reagents() + SPAWN(1 SECOND) + spam_flag = 0 /obj/item/sponge/attackby(obj/item/W, mob/user) if (istool(W, TOOL_CUTTING | TOOL_SNIPPING)) @@ -696,6 +705,7 @@ TRASH BAG BLOCK_SETUP(BLOCK_SOFT) dropped() + . = ..() JOB_XP(usr, "Janitor", 2) return @@ -813,6 +823,7 @@ TRASH BAG dropped() + . = ..() JOB_XP(usr, "Janitor", 2) return diff --git a/code/obj/item/mousetrap.dm b/code/obj/item/mousetrap.dm index e28cc4276d4e5..15b68260d8d4b 100644 --- a/code/obj/item/mousetrap.dm +++ b/code/obj/item/mousetrap.dm @@ -38,6 +38,10 @@ src.grenade = new /obj/item/chem_grenade/cleaner(src) return + New() + ..() + RegisterSignal(src, COMSIG_MOVABLE_FLOOR_REVEALED, PROC_REF(triggered)) + examine() . = ..() if (src.armed) @@ -76,6 +80,7 @@ disposing() clear_armer() + UnregisterSignal(src, COMSIG_MOVABLE_FLOOR_REVEALED) . = ..() attack_hand(mob/user) @@ -190,8 +195,8 @@ C.set_loc(src) src.UpdateOverlays(image(C.icon, C.icon_state), "triggerable") user.show_text("You add [C] to [src].", "blue") - - else if (istype(C, /obj/item/reagent_containers/food/snacks/pie) && !HAS_TRIGGERABLE(src)) + //this check needs to exclude the arm one + else if (istype(C, /obj/item/reagent_containers/food/snacks/pie) && !src.grenade && !src.grenade_old && !src.pipebomb && !src.signaler && !src.butt && !src.gimmickbomb) if (src.pie) user.show_text("There's already a pie attached to [src]!", "red") return @@ -401,6 +406,11 @@ thr.thing = src.pie src.pie.throw_impact(target, thr) src.pie = null + src.arm.set_loc(get_turf(src)) + src.arm = null + else if (src.arm) + src.arm.set_loc(get_turf(src)) + src.arm = null else if (src.butt) if (src.butt.sound_fart) diff --git a/code/obj/item/nuclear_operative/designator.dm b/code/obj/item/nuclear_operative/designator.dm index fdc687996d12e..12bf8083e7ec1 100644 --- a/code/obj/item/nuclear_operative/designator.dm +++ b/code/obj/item/nuclear_operative/designator.dm @@ -171,8 +171,8 @@ firingfrom = "Cairngorm" New() - ..() START_TRACKING_CAT(TR_CAT_NUKE_OP_STYLE) + ..() disposing() STOP_TRACKING_CAT(TR_CAT_NUKE_OP_STYLE) diff --git a/code/obj/item/organ_holder.dm b/code/obj/item/organ_holder.dm index fdf2974c05d62..1ccd3af007005 100644 --- a/code/obj/item/organ_holder.dm +++ b/code/obj/item/organ_holder.dm @@ -623,6 +623,7 @@ var/list/organ_name_parts = splittext(O.name, "'s") if(length(organ_name_parts) == 2) O.name = "[user_name]'s [organ_name_parts[2]]" + O.donor_name = user_name //input organ = string value of organ_list assoc list proc/get_organ(var/organ) diff --git a/code/obj/item/organs/organ_parent.dm b/code/obj/item/organs/organ_parent.dm index 361b5d518fd71..f61a07bc7bd16 100644 --- a/code/obj/item/organs/organ_parent.dm +++ b/code/obj/item/organs/organ_parent.dm @@ -338,7 +338,7 @@ src.bones.take_damage(damage_type) // if (src.get_damage() >= max_damage) - if (brute_dam + burn_dam + tox_dam >= max_damage) + if (src.brute_dam + src.burn_dam + src.tox_dam >= src.max_damage) src.breakme() donor?.contract_disease(failure_disease,null,null,1) health_update_queue |= donor diff --git a/code/obj/item/organs/tail.dm b/code/obj/item/organs/tail.dm index 8ad5da0ecefdc..dd2da91a7629d 100644 --- a/code/obj/item/organs/tail.dm +++ b/code/obj/item/organs/tail.dm @@ -257,6 +257,13 @@ organ_image_under_suit_2 = null organ_image_over_suit = "cat_over_suit" +/obj/item/organ/tail/cat/bingus + desc = "A long, not-furry tail." + organ_image_icon = 'icons/mob/bingus.dmi' + organ_image_under_suit_1 = "bingus_under_suit" + organ_image_under_suit_2 = null + organ_image_over_suit = "bingus_over_suit" + /obj/item/organ/tail/roach name = "roach abdomen" desc = "A large insect behind." diff --git a/code/obj/item/pinpointer.dm b/code/obj/item/pinpointer.dm index 0bb9f54c9360d..6fc553ee74c05 100644 --- a/code/obj/item/pinpointer.dm +++ b/code/obj/item/pinpointer.dm @@ -194,8 +194,8 @@ TYPEINFO(/obj/item/pinpointer) target_criteria = /obj/item/disk/data/floppy/read_only/authentication New() - ..() START_TRACKING_CAT(TR_CAT_NUKE_OP_STYLE) + ..() disposing() STOP_TRACKING_CAT(TR_CAT_NUKE_OP_STYLE) @@ -404,6 +404,28 @@ TYPEINFO(/obj/item/pinpointer/secweapons) src.turn_off() boutput(user, SPAN_NOTICE("You deactivate the pinpointer")) +/obj/item/pinpointer/mail_recepient + name = "mail recipient pinpointer" + + attackby(obj/item/W, mob/user, params) + . = ..() + if (istype(W, /obj/item/random_mail)) + var/obj/item/random_mail/package = W + src.target = find_by_dna(package.target_dna) + user.show_message(SPAN_NOTICE("Target updated.")) + + afterattack(atom/target, mob/user, reach, params) + . = ..() + if (istype(target, /obj/item/random_mail)) + var/obj/item/random_mail/package = target + src.target = find_by_dna(package.target_dna) + user.show_message(SPAN_NOTICE("Target updated.")) + + proc/find_by_dna(var/dna) + for_by_tcl(H, /mob/living/carbon/human) + if (H.bioHolder?.Uid == dna) + return H + //lets you click on something to pick it as a target, good for gimmicks /obj/item/pinpointer/picker attack_self(mob/user) diff --git a/code/obj/item/plants.dm b/code/obj/item/plants.dm index 1f38576adb978..c69cad1f12de1 100644 --- a/code/obj/item/plants.dm +++ b/code/obj/item/plants.dm @@ -531,7 +531,7 @@ ABSTRACT_TYPE(/obj/item/plant/flower) return TRUE proc/prick(mob/M) - boutput(M, SPAN_ALERT("You prick yourself on [src]'s thorns trying to pick it up!")) + boutput(M, SPAN_ALERT("YOWCH! You prick yourself on [src]'s thorns trying to pick it up! Maybe you should've used gloves...")) random_brute_damage(M, 3) take_bleeding_damage(M, null, 3, DAMAGE_STAB) diff --git a/code/obj/item/rcd.dm b/code/obj/item/rcd.dm index bf68960c3a375..d9b70837586af 100644 --- a/code/obj/item/rcd.dm +++ b/code/obj/item/rcd.dm @@ -964,35 +964,36 @@ TYPEINFO(/obj/item/rcd/material/cardboard) modes = list(RCD_MODE_FLOORSWALLS, RCD_MODE_DECONSTRUCT, RCD_MODE_WINDOWS) + /// Load the RCD from a stack of items at an (optional) fill ratio + proc/reload_from_stack(obj/item/stack, mob/user, fill_ratio = 1) + var/amount_needed = ceil((src.max_matter - src.matter) / fill_ratio) + var/partial_eat = FALSE + if(amount_needed == 0) + boutput(user, "\The [src] is full.") + return + if(stack.amount > amount_needed) + stack.change_stack_amount(-amount_needed) + src.matter = src.max_matter + partial_eat = TRUE + else + src.matter += round(stack.amount * fill_ratio) + qdel(stack) + boutput(user, "\The [src] [partial_eat ? "partially " : null]absorbs \the [stack.name] into its internal buffer, and now holds [src.matter]/[src.max_matter] [material_name]-units.") + src.UpdateIcon() + attackby(obj/item/W, mob/user) if (istype(W, /obj/item/rcd_ammo)) ..() else if (istype(W, /obj/item/sheet)) //allow selective direct recycle (prices have been adjusted) var/sheet_mat_id = W.material.getID() if(sheet_mat_id == "viscerite" || sheet_mat_id == "tensed_viscerite") - var/partial_eat = FALSE - if (src.matter + W.amount > src.max_matter) - W.amount -= (src.max_matter - src.matter) - src.matter = src.max_matter - partial_eat = TRUE - W.tooltip_rebuild = 1 - else - src.matter += W.amount - qdel(W) - boutput(user, "\The [src] [partial_eat ? "partially " : null]absorbs [W] into its internal buffer, and now holds [src.matter]/[src.max_matter] [material_name]-units.") - src.UpdateIcon() + src.reload_from_stack(W, user) else if (isExploitableObject(W)) boutput(user, "Recycling [W] just doesn't work.") else if (istype(W, /obj/item/raw_material/martian)) - matter += 10 - boutput(user, "\The [src] absorbs [W] into its internal buffer, and now holds [src.matter]/[src.max_matter] [material_name]-units.") - qdel(W) - src.UpdateIcon() + src.reload_from_stack(W, user, 10) else if (istype(W, /obj/item/material_piece/viscerite)) - matter += 10 - boutput(user, "\The [src] absorbs [W] into its internal buffer, and now holds [src.matter]/[src.max_matter] [material_name]-units.") - qdel(W) - src.UpdateIcon() + src.reload_from_stack(W, user, 10) else if (istype(W, /obj/item/reagent_containers/food/snacks/yuck)) matter += 0.5 boutput(user, "\The [src] absorbs [W] into its internal buffer, and now holds [src.matter]/[src.max_matter] [material_name]-units.") diff --git a/code/obj/item/seeds.dm b/code/obj/item/seeds.dm index 9d14fed1e13b3..ef624e176f7ec 100644 --- a/code/obj/item/seeds.dm +++ b/code/obj/item/seeds.dm @@ -37,29 +37,28 @@ HYPsetup_DNA(var/datum/plantgenes/passed_genes, var/obj/machinery/plantpot/harvested_plantpot, var/datum/plant/origin_plant, var/quality_status) // If the crop is just straight up seeds. Don't need reagents, but we do // need to pass genes and whatnot along like we did for fruit. - var/obj/item/seed/new_seed = src - if(origin_plant.unique_seed) - new_seed = new origin_plant.unique_seed - new_seed.set_loc(harvested_plantpot) + var/datum/plant/child_planttype = HYPgenerateplanttypecopy(src, origin_plant) + var/datum/plantgenes/child_genes = src.plantgenes + var/datum/plantmutation/child_mutation = passed_genes.mutation + // If the plant is a standard plant, our work here is mostly done + if (!child_planttype.hybrid && !origin_plant.unique_seed) + src.generic_seed_setup(child_planttype) else - new_seed = new /obj/item/seed - new_seed.set_loc(harvested_plantpot) - new_seed.removecolor() - - var/datum/plantgenes/HDNA = harvested_plantpot.plantgenes - var/datum/plantgenes/SDNA = new_seed.plantgenes - if(!origin_plant.unique_seed && !origin_plant.hybrid) - new_seed.generic_seed_setup(origin_plant, TRUE) - HYPpassplantgenes(HDNA,SDNA) - new_seed.generation = harvested_plantpot.generation - if(origin_plant.hybrid) - var/datum/plant/hybrid = new /datum/plant(new_seed) - for(var/V in origin_plant.vars) - if(issaved(origin_plant.vars[V]) && V != "holder") - hybrid.vars[V] = origin_plant.vars[V] - new_seed.planttype = hybrid - qdel(src) - return new_seed + src.planttype = child_planttype + src.plant_seed_color(child_planttype.seedcolor) + //Now we generate the seeds name + var/seedname = "[child_planttype.name]" + if(istype(child_mutation,/datum/plantmutation/)) + if(!child_mutation.name_prefix && !child_mutation.name_suffix && child_mutation.name) + seedname = "[child_mutation.name]" + else if(child_mutation.name_prefix || child_mutation.name_suffix) + seedname = "[child_mutation.name_prefix][child_planttype.name][child_mutation.name_suffix]" + src.name = "[seedname] seed" + //What's missing is transfering genes and the generation + HYPpassplantgenes(passed_genes, child_genes) + src.generation = harvested_plantpot.generation + //Now the seed it created and we can release it upon the world + return src //kudzumen can analyze seeds via ezamine when close. diff --git a/code/obj/item/stickers.dm b/code/obj/item/stickers.dm index 948931f5d2979..55c1555b9b485 100644 --- a/code/obj/item/stickers.dm +++ b/code/obj/item/stickers.dm @@ -672,6 +672,7 @@ ABSTRACT_TYPE(/obj/item/sticker/glow) src.pixel_x = initial(src.pixel_x) src.pixel_y = initial(src.pixel_y) src.attached = null + src.active = FALSE light_c.update(0) green diff --git a/code/obj/item/storage/backpack_belt_etc.dm b/code/obj/item/storage/backpack_belt_etc.dm index 07355ead2c501..273c8c0ceddf0 100644 --- a/code/obj/item/storage/backpack_belt_etc.dm +++ b/code/obj/item/storage/backpack_belt_etc.dm @@ -327,8 +327,8 @@ spawn_contents = list(/obj/item/storage/box/starter) New() - ..() START_TRACKING_CAT(TR_CAT_NUKE_OP_STYLE) + ..() disposing() STOP_TRACKING_CAT(TR_CAT_NUKE_OP_STYLE) @@ -564,8 +564,8 @@ slots = 7 New() - ..() START_TRACKING_CAT(TR_CAT_NUKE_OP_STYLE) + ..() disposing() STOP_TRACKING_CAT(TR_CAT_NUKE_OP_STYLE) diff --git a/code/obj/item/storage/bible.dm b/code/obj/item/storage/bible.dm index eac50859c631b..28a6d555066e0 100644 --- a/code/obj/item/storage/bible.dm +++ b/code/obj/item/storage/bible.dm @@ -13,7 +13,7 @@ flags = FPRINT | TABLEPASS | NOSPLASH event_handler_flags = USE_FLUID_ENTER | IS_FARTABLE var/mob/affecting = null - var/heal_amt = 10 + var/heal_amt = 5 New() ..() @@ -29,13 +29,30 @@ ..() STOP_TRACKING + proc/do_heal_amt(mob/user) // also handles using faith + var/faith = get_chaplain_faith(user) + var/used_faith = min(faith * FAITH_HEAL_USE_FRACTION, FAITH_HEAL_CAP) + modify_chaplain_faith(user, -used_faith) + return heal_amt + used_faith * FAITH_HEAL_BONUS + rand(-3, 3) + + proc/do_heal_message(var/mob/user, var/mob/target, amount) + switch(amount) + if (1 to 8) + target.visible_message(SPAN_ALERT("<B>[user] heals [target] mending [his_or_her(target)] wounds!</B>")) + if (9 to 15) + target.visible_message(SPAN_ALERT("<B>[user] heals [target] with the power of Christ!</B>")) + if (16 to 24) + target.visible_message(SPAN_ALERT("<B>[user] heals [target] by the will of the LORD!</B>")) + if (25 to INFINITY) + target.visible_message(SPAN_ALERT("<B>[user] heals [target] in service of heaven!</B>")) + proc/bless(mob/M as mob, var/mob/user) if (isvampire(M) || isvampiricthrall(M) || iswraith(M) || M.bioHolder.HasEffect("revenant")) M.visible_message(SPAN_ALERT("<B>[M] burns!")) var/zone = "chest" if (user.zone_sel) zone = user.zone_sel.selecting - M.TakeDamage(zone, 0, heal_amt) + M.TakeDamage(zone, 0, do_heal_amt(user)) JOB_XP(user, "Chaplain", 2) else var/mob/living/H = M @@ -62,8 +79,13 @@ if (S) S.set_up(5, 0, T, null, "#000000") S.start() - M.HealDamage("All", heal_amt, heal_amt) - if(prob(40)) + var/heal = do_heal_amt(user) + M.HealDamage("All", heal, heal) + do_heal_message(user, M, heal) + if (!ON_COOLDOWN(src, "faith_sound", 1.5 SECONDS)) + SPAWN(1 DECI SECOND) + playsound(src.loc, 'sound/effects/faithbiblewhack.ogg', 10, FALSE, -1, (rand(94,108)/100)) + if(prob(30 + heal)) JOB_XP(user, "Chaplain", 1) attackby(var/obj/item/W, var/mob/user) @@ -80,6 +102,7 @@ boutput(user, SPAN_ALERT("The book sizzles in your hands.")) user.TakeDamage(user.hand == LEFT_HAND ? "l_arm" : "r_arm", 0, 10) return + var/faith = get_chaplain_faith(user) if (user.bioHolder && user.bioHolder.HasEffect("clumsy") && prob(50)) user.visible_message(SPAN_ALERT("<b>[user]</b> fumbles and drops [src] on [his_or_her(user)] foot.")) random_brute_damage(user, 10) @@ -97,9 +120,8 @@ // ******* Check var/is_undead = isvampire(target) || iswraith(target) || target.bioHolder.HasEffect("revenant") var/is_atheist = target.traitHolder?.hasTrait("atheist") - if (ishuman(target) && prob(60) && !(is_atheist && !is_undead)) + if (ishuman(target) && prob(FAITH_HEAL_CHANCE + faith * FAITH_HEAL_CHANCE_MOD) && !(is_atheist && !is_undead)) bless(target, user) - target.visible_message(SPAN_ALERT("<B>[user] heals [target] with the power of Christ!</B>")) var/deity = is_atheist ? "a god you don't believe in" : "Christ" boutput(target, SPAN_ALERT("May the power of [deity] compel you to be healed!")) var/healed = is_undead ? "damaged undead" : "healed" diff --git a/code/obj/item/storage/food.dm b/code/obj/item/storage/food.dm index 184b010d181f7..e6de1a1b81337 100644 --- a/code/obj/item/storage/food.dm +++ b/code/obj/item/storage/food.dm @@ -137,3 +137,9 @@ desc = "A box of generic unbranded popsicles." icon_state = "popsiclebox" spawn_contents = list(/obj/item/popsicle = 7) + +/obj/item/storage/box/popsicle_sticks + name = "popsicle sticks" + desc = "A box of popsicle sticks, used for making various kinds of sweets." + icon_state = "sticks" + spawn_contents = list(/obj/item/stick = 7) diff --git a/code/obj/item/storage/lunchboxes.dm b/code/obj/item/storage/lunchboxes.dm index d15946476459f..c3e3c19e576f1 100644 --- a/code/obj/item/storage/lunchboxes.dm +++ b/code/obj/item/storage/lunchboxes.dm @@ -42,7 +42,7 @@ food4 spawn_contents = list(/obj/item/reagent_containers/food/snacks/omelette,\ /obj/item/reagent_containers/food/snacks/croissant,\ - /obj/item/reagent_containers/food/snacks/candy/caramel,\ + /obj/item/reagent_containers/food/snacks/candy/wrapped_candy/caramel,\ /obj/item/reagent_containers/food/drinks/water,\ /obj/item/kitchen/utensil/fork,\ /obj/item/paper/lunchbox_note) @@ -81,7 +81,7 @@ food9 spawn_contents = list(/obj/item/reagent_containers/food/snacks/soup/tomato,\ /obj/item/reagent_containers/food/snacks/sandwich/cheese,\ - /obj/item/reagent_containers/food/snacks/candy/taffy/watermelon,\ + /obj/item/reagent_containers/food/snacks/candy/wrapped_candy/taffy/watermelon,\ /obj/item/reagent_containers/food/drinks/water,\ /obj/item/kitchen/utensil/spoon,\ /obj/item/paper/lunchbox_note) diff --git a/code/obj/item/storage/toolbox.dm b/code/obj/item/storage/toolbox.dm index f082d651853d4..d64dd10f0ec32 100644 --- a/code/obj/item/storage/toolbox.dm +++ b/code/obj/item/storage/toolbox.dm @@ -59,6 +59,7 @@ ABSTRACT_TYPE(/obj/item/storage/toolbox) user.drop_item(src) src.set_loc(B) + src.storage.hide_all_huds() boutput(user, "You add the tiles into the empty toolbox. They stick oddly out the top.") return diff --git a/code/obj/item/table_rack_parts.dm b/code/obj/item/table_rack_parts.dm index 3718580c8227a..63c31a6b66551 100644 --- a/code/obj/item/table_rack_parts.dm +++ b/code/obj/item/table_rack_parts.dm @@ -438,6 +438,10 @@ TYPEINFO(/obj/item/furniture_parts/woodenstool) icon = 'icons/obj/furniture/bench_yellow.dmi' furniture_type = /obj/stool/bench/yellow/auto +/obj/item/furniture_parts/bench/purple + icon = 'icons/obj/furniture/bench_purple.dmi' + furniture_type = /obj/stool/bench/purple/auto + /obj/item/furniture_parts/bench/wooden name = "wooden bench parts" desc = "A collection of parts that can be used to make a wooden bench." diff --git a/code/obj/item/tank.dm b/code/obj/item/tank.dm index 9abfb42bc613d..916e8a5d25aa5 100644 --- a/code/obj/item/tank.dm +++ b/code/obj/item/tank.dm @@ -40,6 +40,8 @@ Contains: var/integrity = 3 /// Whether or not this tank can be used in a tank transfer valve. var/compatible_with_TTV = TRUE + /// Tank's previous pressure. Used for tanks that are going to explode + var/previous_pressure = null New() ..() @@ -138,6 +140,7 @@ Contains: process() //Allow for reactions if (air_contents) + src.previous_pressure = MIXTURE_PRESSURE(air_contents) air_contents.react() src.inventory_counter.update_text("[round(MIXTURE_PRESSURE(air_contents))]\nkPa") check_status() @@ -148,14 +151,21 @@ Contains: return FALSE var/pressure = MIXTURE_PRESSURE(air_contents) if(pressure > TANK_FRAGMENT_PRESSURE) // 50 atmospheres, or: 5066.25 kpa under current _setup.dm conditions + // How much pressure we needed to hit the fragment limit. Makes it so there is almost always only 3 additional reacts. + // (Hard limit above meant that you could get effectively either ~3.99 reacts or ~2.99, creating inconsistency in explosions) + var/react_compensation = ((TANK_FRAGMENT_PRESSURE - src.previous_pressure) / (pressure - src.previous_pressure)) //Give the gas a chance to build up more pressure through reacting playsound(src.loc, 'sound/machines/hiss.ogg', 50, TRUE) air_contents.react() air_contents.react() - air_contents.react() + air_contents.react(mult=0.5) + air_contents.react(mult=react_compensation) pressure = MIXTURE_PRESSURE(air_contents) - var/range = (pressure - TANK_FRAGMENT_PRESSURE) / TANK_FRAGMENT_SCALE + //wooo magic numbers! 70 is the default volume of an air tank and quad rooting it seems to produce pretty reasonable scaling + // scale for pocket oxy (3L): ~0.455 | extended pocket oxy (7L): ~0.562 | handheld (70L): 1 + var/volume_scale = (air_contents.volume / 70) ** (1/4) + var/range = (pressure - TANK_FRAGMENT_PRESSURE) * volume_scale / TANK_FRAGMENT_SCALE // (pressure - 5066.25 kpa) divided by 1013.25 kpa range = min(range, 12) @@ -166,13 +176,13 @@ Contains: var/turf/T = get_turf(B.loc) if(T) logTheThing(LOG_BOMBING, src, "exploded at [log_loc(T)], range: [range], last touched by: [src.fingerprintslast]") - explosion(src, T, round(range * 0.25), round(range * 0.5), round(range), round(range * 1.5)) + explosion(src, T, range * 0.25, range * 0.5, range, range * 1.5) qdel(src) return var/turf/epicenter = get_turf(loc) logTheThing(LOG_BOMBING, src, "exploded at [log_loc(epicenter)], , range: [range], last touched by: [src.fingerprintslast]") src.visible_message(SPAN_ALERT("<b>[src] explosively ruptures!</b>")) - explosion(src, epicenter, round(range * 0.25), round(range * 0.5), round(range), round(range * 1.5)) + explosion(src, epicenter, range * 0.25, range * 0.5, range, range * 1.5) qdel(src) else if(pressure > TANK_RUPTURE_PRESSURE) @@ -415,8 +425,8 @@ TYPEINFO(/obj/item/tank/jetpack) extra_desc = "It's painted in a sinister yet refined shade of red." New() - ..() START_TRACKING_CAT(TR_CAT_NUKE_OP_STYLE) + ..() disposing() STOP_TRACKING_CAT(TR_CAT_NUKE_OP_STYLE) diff --git a/code/obj/item/teleportation.dm b/code/obj/item/teleportation.dm index 478925f71e1c5..5cb5de12055dc 100644 --- a/code/obj/item/teleportation.dm +++ b/code/obj/item/teleportation.dm @@ -144,7 +144,7 @@ TYPEINFO(/obj/item/hand_tele) t1 = pick(L) users -= user // We're done showing the UI - if (user.stat || user.restrained()) + if (user.stat || user.restrained() || !(src in user.equipped_list())) //let's check if you actually still HAVE the hand tele return if (t1 == "Cancel") diff --git a/code/obj/item/tool/omnitool.dm b/code/obj/item/tool/omnitool.dm index 136324a8fc09d..c69de5ffb7424 100644 --- a/code/obj/item/tool/omnitool.dm +++ b/code/obj/item/tool/omnitool.dm @@ -252,8 +252,8 @@ ..() New() - . = ..() START_TRACKING_CAT(TR_CAT_NUKE_OP_STYLE) + . = ..() src.create_reagents(20) reagents.add_reagent("fuel", 20) diff --git a/code/obj/item/tool/weldingtool.dm b/code/obj/item/tool/weldingtool.dm index 7e5f10f2cc05f..3238fd6014a29 100644 --- a/code/obj/item/tool/weldingtool.dm +++ b/code/obj/item/tool/weldingtool.dm @@ -190,6 +190,10 @@ reagents.remove_reagent("fuel", amount) src.inventory_counter.update_number(get_fuel()) + on_reagent_change(add) + . = ..() + src.inventory_counter.update_number(get_fuel()) + #define EYE_DAMAGE_IMMUNE 2 #define EYE_DAMAGE_MINOR 1 #define EYE_DAMAGE_NORMAL 0 diff --git a/code/obj/item/tool/wrench.dm b/code/obj/item/tool/wrench.dm index 2b9002fe720b0..a8922362398a3 100644 --- a/code/obj/item/tool/wrench.dm +++ b/code/obj/item/tool/wrench.dm @@ -53,8 +53,8 @@ stamina_damage = 55 New() - ..() START_TRACKING_CAT(TR_CAT_NUKE_OP_STYLE) + ..() disposing() STOP_TRACKING_CAT(TR_CAT_NUKE_OP_STYLE) diff --git a/code/obj/item/uplinks.dm b/code/obj/item/uplinks.dm index 99614b09461cf..912f285b85842 100644 --- a/code/obj/item/uplinks.dm +++ b/code/obj/item/uplinks.dm @@ -438,7 +438,8 @@ Note: Add new traitor items to syndicate_buylist.dm, not here. var/obj/item = new I.item(get_turf(src)) I.run_on_spawn(item, usr, FALSE, src) if (src.is_VR_uplink == 0) - statlog_traitor_item(usr, I.name, I.cost) + var/datum/eventRecord/AntagItemPurchase/antagItemPurchaseEvent = new() + antagItemPurchaseEvent.buildAndSend(usr, I.name, I.cost) if (I.item2) new I.item2(get_turf(src)) if (I.item3) @@ -712,7 +713,8 @@ Note: Add new traitor items to syndicate_buylist.dm, not here. var/obj/item = new I.item(get_turf(src.hostpda)) I.run_on_spawn(item, usr) if (src.is_VR_uplink == 0) - statlog_traitor_item(usr, I.name, I.cost) + var/datum/eventRecord/AntagItemPurchase/antagItemPurchaseEvent = new() + antagItemPurchaseEvent.buildAndSend(usr, I.name, I.cost) if (I.item2) new I.item2(get_turf(src.hostpda)) if (I.item3) @@ -1289,14 +1291,11 @@ Note: Add new traitor items to syndicate_buylist.dm, not here. icon = 'icons/obj/wizard.dmi' icon_state = "spellbook" item_state = "spellbook" + var/datum/antagonist/wizard/antag_datum = null var/wizard_key = "" - var/temp = null var/uses = 6 - var/selfdestruct = 0 - var/traitor_frequency = 0 - var/obj/item/device/radio/origradio = null var/list/spells = list() - flags = FPRINT | TABLEPASS + flags = FPRINT | TABLEPASS | TGUI_INTERACTIVE c_flags = ONBELT throwforce = 5 health = 5 @@ -1309,16 +1308,69 @@ Note: Add new traitor items to syndicate_buylist.dm, not here. uses = 9999 #endif - New(var/in_vr = 0) + New(datum/antagonist/wizard/antag, in_vr = FALSE) ..() + src.antag_datum = antag if (in_vr) vr = 1 uses *= 2 - //Kubius spellbook upgrade: autonomous compendium of SWF uplink datums - for(var/D in (childrentypesof(/datum/SWFuplinkspell))) + for(var/D in typesof(/datum/SWFuplinkspell)) src.spells += new D(src) + ui_interact(mob/user, datum/tgui/ui) + ui = tgui_process.try_update_ui(user, src, ui) + if (!ui) + ui = new(user, src, "Wizard_Spellbook") + ui.open() + + ui_data(mob/user) + . = list() + .["spell_slots"] = src.uses + + ui_static_data(mob/user) + . = list() + .["owner_name"] = user.real_name + .["vr"] = src.vr + + var/list/spellbook_contents = list() + for(var/datum/SWFuplinkspell/spell in src.spells) + var/cooldown_contents = null + if (spell.eqtype != "Spell") // Disallow spell framework + if (!spellbook_contents[spell.eqtype]) spellbook_contents[spell.eqtype] = list() // Create category if it doesnt exist + if (spell.assoc_spell && ispath(spell.assoc_spell, /datum/targetable/spell)) + var/datum/targetable/spell/spell_datum = spell.assoc_spell + cooldown_contents = initial(spell_datum.cooldown) + spellbook_contents[spell.eqtype][spell.name] = list( + desc = spell.desc, + cost = spell.cost, + cooldown = cooldown_contents, + vr_allowed = spell.vr_allowed + ) + + .["spellbook_contents"] = spellbook_contents + + attack_self(mob/user) + if(!user.mind || (user.mind && user.mind.key != src.wizard_key)) + boutput(user, SPAN_ALERT("<b>The spellbook is magically attuned to someone else!</b>")) + return + ui_interact(user) + + ui_act(action, list/params) + . = ..() + if (.) + return + switch (action) + if ("buyspell") + var/datum/SWFuplinkspell/chosen_spell = params["spell"] + for (var/datum/SWFuplinkspell/spell in src.spells) + if (spell.name == chosen_spell) + chosen_spell = spell + break + if (chosen_spell.SWFspell_CheckRequirements(usr,src)) + chosen_spell.SWFspell_Purchased(usr,src) + +///////////////////////////////////////// Wizard's spells /////////////////////////////////////////////////// /datum/SWFuplinkspell var/name = "Spell" var/eqtype = "Spell" @@ -1331,23 +1383,22 @@ Note: Add new traitor items to syndicate_buylist.dm, not here. proc/SWFspell_CheckRequirements(var/mob/living/carbon/human/user,var/obj/item/SWF_uplink/book) if (!user || !book) - return 999 // unknown error + return FALSE // unknown error if (book.vr && !src.vr_allowed) - return 3 + return FALSE // Unavailable in VR if (src.assoc_spell) - var/datum/antagonist/wizard/antag_role = user.mind.get_antagonist(ROLE_WIZARD) - if (antag_role.ability_holder.getAbility(assoc_spell)) - return 2 + if (book.antag_datum.ability_holder.getAbility(assoc_spell)) + return FALSE // Already have this spell if (book.uses < src.cost) - return 1 // ran out of points + return FALSE // ran out of points + return TRUE proc/SWFspell_Purchased(var/mob/living/carbon/human/user,var/obj/item/SWF_uplink/book) if (!user || !book) return logTheThing(LOG_DEBUG, null, "[constructTarget(user)] purchased the spell [src.name] using the [book] uplink.") if (src.assoc_spell) - var/datum/antagonist/wizard/antag_role = user.mind.get_antagonist(ROLE_WIZARD) - antag_role.ability_holder.addAbility(src.assoc_spell) + book.antag_datum.ability_holder.addAbility(src.assoc_spell) if (src.assoc_item) var/obj/item/I = new src.assoc_item(user.loc) if (istype(I, /obj/item/staff) && user.mind && !isvirtual(user)) @@ -1355,6 +1406,7 @@ Note: Add new traitor items to syndicate_buylist.dm, not here. S.wizard_key = user.mind.key book.uses -= src.cost +//------------ ENCHANTMENT SPELLS ------------// /datum/SWFuplinkspell/soulguard name = "Soulguard" eqtype = "Enchantment" @@ -1369,6 +1421,7 @@ Note: Add new traitor items to syndicate_buylist.dm, not here. ..() user.spell_soulguard = SOULGUARD_SPELL +//------------ EQUIPMENT SPELLS ------------// /datum/SWFuplinkspell/staffofcthulhu name = "Staff of Cthulhu" eqtype = "Equipment" @@ -1385,6 +1438,7 @@ Note: Add new traitor items to syndicate_buylist.dm, not here. assoc_item = /obj/item/staff/thunder cost = 2 +//------------ OFFENSIVE SPELLS ------------// /datum/SWFuplinkspell/bull name = "Bull's Charge" eqtype = "Offensive" @@ -1464,6 +1518,7 @@ Note: Add new traitor items to syndicate_buylist.dm, not here. desc = "Fires a bolt of electricity in a cardinal direction. Causes decent damage, and can go through thin walls and solid objects. You need special HAZARDOUS robes to cast this!" assoc_verb = */ +//------------ DEFENSIVE SPELLS ------------// /datum/SWFuplinkspell/forcewall name = "Forcewall" eqtype = "Defensive" @@ -1505,6 +1560,7 @@ Note: Add new traitor items to syndicate_buylist.dm, not here. assoc_spell = /datum/targetable/spell/doppelganger cost = 2 +//------------ UTILITY SPELLS ------------// /datum/SWFuplinkspell/knock name = "Knock" eqtype = "Utility" @@ -1536,187 +1592,10 @@ Note: Add new traitor items to syndicate_buylist.dm, not here. desc = "This spell infuses an adjacent human corpse with necromantic energy, creating a durable skeleton minion that seeks to pummel your enemies into oblivion." assoc_spell = /datum/targetable/spell/animatedead +//------------ MISC SPELLS ------------// /datum/SWFuplinkspell/pandemonium name = "Pandemonium" eqtype = "Miscellaneous" desc = "This spell causes random effects to happen. Best used only by skilled wizards." vr_allowed = 0 assoc_spell = /datum/targetable/spell/pandemonium - - - -/obj/item/SWF_uplink/proc/explode() - var/turf/location = get_turf(src.loc) - location.hotspot_expose(700, 125) - - explosion(src, location, 0, 0, 2, 4) - - qdel(src.master) - qdel(src) - return - -/obj/item/SWF_uplink/attack_self(mob/user as mob) - if(!user.mind || (user.mind && user.mind.key != src.wizard_key)) - boutput(user, SPAN_ALERT("<b>The spellbook is magically attuned to someone else!</b>")) - return - src.add_dialog(user) - var/html = {" -[(user.client && !user.client.use_chui) ? "<!doctype html>\n<html><head><meta http-equiv=\"X-UA-Compatible\" content=\"IE=edge,chrome=1\"><meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\"><meta http-equiv=\"pragma\" content=\"no-cache\"><style type='text/css'>body { font-family: Tahoma, sans-serif; font-size: 10pt; }</style><title>Wizard Spellbook</title></head><body>" : ""] - -<style type="text/css"> - .spell { - position: relative; - } - - .spell:hover { - background: #ddd; - } - .spell div { - display: none; - position: absolute; - right: 0; - top: -1em; - background: #ddd; - color: black; - padding: 0.1em 0.3em; - width: 50%; - font-size: 80%; - z-index: 9999; - } - .spell:hover div { - display: block; - } - .cantbuy { - opacity: 0.7; - } - - .buyme, .owned { - font-weight: bold; - } - - .owned { - background: rgba(0, 255, 0, 0.3); - } - .spell em { - color: #888; - margin-left: 1em; - font-size: 90%; - } - .spelllink { font-weight: bold; } -</style> - <h3>[user.real_name]'s Spellbook</h3> - Spell slots remaining: [src.uses] - "} - var/list/spell_group = list() - var/rowclass = "" - var/rowtext = "" - var/link = "" - var/unusable = 0 - for (var/datum/SWFuplinkspell/SP in src.spells) - var/cooldown = null - - if (SP.assoc_spell && ispath(SP.assoc_spell, /datum/targetable/spell)) - var/datum/targetable/spell/SPdatum = SP.assoc_spell - cooldown = initial(SPdatum.cooldown) - - unusable = SP.SWFspell_CheckRequirements(user, src) - switch (unusable) - if (1) - rowclass = "cantbuy" - rowtext = "" - if (2) - rowclass = "owned" - rowtext = "Acquired!" - if (3) - rowclass = "vr" - rowtext = "Unavailable in VR" - if (999) - rowclass = "cantbuy" - rowtext = "Error???" - else - rowclass = "buyme" - rowtext = "" - - if (!spell_group[SP.eqtype]) - spell_group[SP.eqtype] = list("<center><b>[SP.eqtype]</b></center>") - - if (!unusable) - link = "<a href='byond://?src=\ref[src];buyspell=\ref[SP]'><span class='spelllink [rowclass]'>[SP.name] - cost: [SP.cost]</span></a>" - else - link = "<span class='spelllink [rowclass]'>[SP.name] - cost: [SP.cost]</span>" - - spell_group[SP.eqtype] += "<div class='spell'>[link]<em>[rowtext]</em><div>[SP.desc][cooldown ? "<br><b>Cooldown: [cooldown / 10] sec.</b>" : ""]</div></div>" - - - for (var/L in spell_group) - html += jointext(spell_group[L], "") - - user.Browse(jointext(html, ""), "window=radio") - onclose(user, "radio") - return - -/obj/item/SWF_uplink/Topic(href, href_list) - ..() - if (usr.stat || usr.restrained()) - return - var/mob/living/carbon/human/H = usr - if (!( ishuman(H))) - return 1 - if ((usr.contents.Find(src) || (in_interact_range(src,usr) && istype(src.loc, /turf)))) - src.add_dialog(usr) - - if (href_list["buyspell"]) - var/datum/SWFuplinkspell/SP = locate(href_list["buyspell"]) - switch(SP.SWFspell_CheckRequirements(usr,src)) - if(1) boutput(usr, SPAN_ALERT("You have no more magic points to spend.")) - if(2) boutput(usr, SPAN_ALERT("You already have this spell.")) - if(3) boutput(usr, SPAN_ALERT("This spell isn't availble in VR.")) - if(999) boutput(usr, SPAN_ALERT("Unknown Error.")) - else - SP.SWFspell_Purchased(usr,src) - - else if (href_list["aboutspell"]) - var/datum/SWFuplinkspell/SP = locate(href_list["aboutspell"]) - src.temp = "[SP.desc]" - if (SP.cooldown) - src.temp += "<BR>It takes [SP.cooldown] seconds to recharge after use." - - else if (href_list["lock"] && src.origradio) - // presto chango, a regular radio again! (reset the freq too...) - src.remove_dialog(usr) - usr.Browse(null, "window=radio") - var/obj/item/device/radio/T = src.origradio - var/obj/item/SWF_uplink/R = src - R.set_loc(T) - T.set_loc(usr) - // R.layer = initial(R.layer) - R.layer = 0 - usr.u_equip(R) - usr.put_in_hand_or_drop(T) - R.set_loc(T) - T.set_frequency(initial(T.frequency)) - T.attack_self(usr) - return - - else if (href_list["selfdestruct"]) - src.temp = "<A href='byond://?src=\ref[src];selfdestruct2=1'>Self-Destruct</A>" - - else if (href_list["selfdestruct2"]) - src.selfdestruct = 1 - SPAWN(10 SECONDS) - explode() - return - else - if (href_list["temp"]) - src.temp = null - - if (ismob(src.loc)) - attack_self(src.loc) - else - for(var/mob/M in viewers(1, src)) - if (M.client) - src.attack_self(M) - - //if (istype(H.wear_suit, /obj/item/clothing/suit/wizrobe)) - // H.wear_suit.check_abilities() - return diff --git a/code/obj/landmark.dm b/code/obj/landmark.dm index ff8f26dc93c1e..dd97d01ae4ea5 100644 --- a/code/obj/landmark.dm +++ b/code/obj/landmark.dm @@ -334,7 +334,7 @@ var/global/list/job_start_locations = list() /obj/landmark/escape_pod_succ name = LANDMARK_ESCAPE_POD_SUCCESS - icon_state = "xp" + icon_state = "escape_pod_succ" New() src.data = src.dir diff --git a/code/obj/machinery/computer.dm b/code/obj/machinery/computer.dm index 98f75011caff8..0044eac0157b0 100644 --- a/code/obj/machinery/computer.dm +++ b/code/obj/machinery/computer.dm @@ -76,7 +76,7 @@ A.set_dir(src.dir) A.circuit = M A.anchored = ANCHORED - src.special_deconstruct(A) + src.special_deconstruct(A, user) qdel(src) ///Put the code for finding the stuff your computer needs in this proc @@ -84,7 +84,7 @@ //Placeholder so the multitool probing thing can go on this parent ///Special changes for deconstruction can be added by overriding this - proc/special_deconstruct(var/obj/computerframe/frame as obj) + proc/special_deconstruct(var/obj/computerframe/frame as obj, mob/user) /* diff --git a/code/obj/machinery/computer/announcement.dm b/code/obj/machinery/computer/announcement.dm index 15c12bb85b467..4111cbe20e905 100644 --- a/code/obj/machinery/computer/announcement.dm +++ b/code/obj/machinery/computer/announcement.dm @@ -5,14 +5,13 @@ icon_state = "announcement" machine_registry_idx = MACHINES_ANNOUNCEMENTS circuit_type = /obj/item/circuitboard/announcement + var/theme = "ntos" var/announcement_delay = 1200 var/obj/item/card/id/ID = null var/unlocked = 0 var/announce_status = "Insert Card" - var/message = "" - var/inhibit_updates = 0 + var/max_length = 400 var/announces_arrivals = 0 - var/arrival_announcements_enabled = 1 var/say_language = "english" var/arrivalalert = "$NAME has signed up as $JOB." var/departurealert = "$NAME the $JOB has entered cryogenic storage." @@ -32,33 +31,6 @@ if (src.announces_arrivals) src.announcement_radio = new(src) - process() - if (!inhibit_updates) src.updateUsrDialog() - - attack_hand(mob/user) - if(..()) return - if(isghostdrone(user)) - boutput(user, SPAN_ALERT("Your processors refuse to interact with this machine!")) - return 1 - src.add_dialog(user) - var/dat = {" - <body> - <h1>Announcement Computer</h1> - <hr> - Status: [announce_status]<BR> - Card: <a href='?src=\ref[src];card=1'>[src.ID ? src.ID.name : "--------"]</a><br> - Broadcast delay: [nice_timer(user)]<br> - <br> - Message: "<a href='?src=\ref[src];edit_message=1'>[src.message ? src.message : "___________"]</a>" <a href='?src=\ref[src];clear_message=1'>(Clear)</a><br> - <br> - <b><a href='?src=\ref[src];send_message=1'>Transmit</a></b> - "} - if (src.announces_arrivals) - dat += "<hr>[src.arrival_announcements_enabled ? "Arrival Announcement Message: \"[src.arrivalalert]\"<br><br><b><a href='?src=\ref[src];set_arrival_message=1'>Change</a></b><br><b><a href='?src=\ref[src];toggle_arrival_message=1'>Disable</a></b>" : "Arrival Announcements Disabled<br><br><b><a href='?src=\ref[src];toggle_arrival_message=1'>Enable</a></b>"]" - dat += "</body>" - user.Browse(dat, "window=announcementcomputer") - onclose(user, "announcementcomputer") - attackby(obj/item/W, mob/user) if (istype(W, /obj/item/card/id)) if (src.ID) @@ -69,80 +41,82 @@ src.ID = W src.unlocked = check_access(ID, 1) boutput(user, SPAN_NOTICE("You insert [W].")) + update_status() + + ui_interact(mob/user, datum/tgui/ui) + ui = tgui_process.try_update_ui(user, src, ui) + if(!ui) + ui = new(user, src, "AnnouncementComputer", src.name) + ui.open() + + ui_data(mob/user) + . = list( + "theme" = src.theme, + "card_name" = src.ID ? src.ID.name : null, + "status_message" = src.announce_status, + "time" = get_time(user) SECONDS, + "announces_arrivals" = src.announces_arrivals, + "arrivalalert" = src.arrivalalert, + "max_length" = src.max_length + ) + + ui_act(action, params) + . = ..() + if (.) return - ..() - - Topic(href, href_list[]) - if(..()) return 1 - if(isghostdrone(usr)) - return 1 - - if(href_list["card"]) - if(src.ID) - src.ID.set_loc(src.loc) - usr.put_in_hand_or_eject(src.ID) // try to eject it into the users hand, if we can - src.ID = null - src.unlocked = 0 - else - var/obj/item/I = usr.equipped() - if (istype(I, /obj/item/card/id)) - usr.drop_item() - I.set_loc(src) - src.ID = I - src.unlocked = check_access(ID, 1) - else if (istype(I, /obj/item/magtractor)) - var/obj/item/magtractor/mag = I - if (istype(mag.holding, /obj/item/card/id)) - I = mag.holding - mag.dropItem(0) + switch(action) + if ("id") + if(src.ID) + src.ID.set_loc(src.loc) + usr.put_in_hand_or_eject(src.ID) // try to eject it into the users hand, if we can + src.ID = null + src.unlocked = 0 + else + var/obj/item/I = usr.equipped() + if (istype(I, /obj/item/card/id)) + usr.drop_item() I.set_loc(src) src.ID = I src.unlocked = check_access(ID, 1) - - else if(href_list["edit_message"]) - inhibit_updates = 1 - message = html_encode(trim(tgui_input_text(usr, "Select what you wish to announce.", "Announcement", message, max_length=400))) - if(url_regex?.Find(message)) message = "" - inhibit_updates = 0 - playsound(src.loc, "keyboard", 50, 1, -15) - - else if (href_list["clear_message"]) - message = "" - - else if (href_list["send_message"]) - send_message(usr) - - else if (href_list["set_arrival_message"]) - inhibit_updates = 1 - src.set_arrival_alert(usr) - inhibit_updates = 0 - - else if (href_list["toggle_arrival_message"]) - src.arrival_announcements_enabled = !(src.arrival_announcements_enabled) - boutput(usr, "Arrival announcements [src.arrival_announcements_enabled ? "en" : "dis"]abled.") - - update_status() - src.updateUsrDialog() + else if (istype(I, /obj/item/magtractor)) + var/obj/item/magtractor/mag = I + if (istype(mag.holding, /obj/item/card/id)) + I = mag.holding + mag.dropItem(0) + I.set_loc(src) + src.ID = I + src.unlocked = check_access(ID, 1) + . = TRUE + update_status() + if ("transmit") + src.send_message(usr, params["value"]) + . = TRUE + if ("arrival_message") + src.set_arrival_alert(usr, params["value"]) + . = TRUE + if ("log") + logTheThing(LOG_STATION, usr, "Sets an announcement message to \"[params["value"]]\" from \"[params["old"]]\".") proc/update_status() if(!src.ID) announce_status = "Insert Card" else if(!src.unlocked) announce_status = "Insufficient Access" - else if(!message) - announce_status = "Input message." - else if(get_time(usr) > 0) - announce_status = "Broadcast delay in effect." else - announce_status = "Ready to transmit!" + announce_status = "" - proc/send_message(var/mob/user) - if(!message || !unlocked || get_time(user) > 0) return + proc/send_message(var/mob/user, message) + if(!message || length_char(message) > max_length || !unlocked || get_time(user) > 0) return var/area/A = get_area(src) if(user.bioHolder.HasEffect("mute")) boutput(user, "You try to speak into \the [src] but you can't since you are mute.") return + if(url_regex?.Find(message)) + boutput(src, SPAN_NOTICE("<b>Web/BYOND links are not allowed in ingame chat.</b>")) + boutput(src, SPAN_ALERT(" <b>\"[message]</b>\"")) + return + message = sanitize(adminscrub(message, src.max_length)) logTheThing(LOG_SAY, user, "as [ID.registered] ([ID.assignment]) created a command report: [message]") logTheThing(LOG_DIARY, user, "as [ID.registered] ([ID.assignment]) created a command report: [message]", "say") @@ -157,32 +131,13 @@ command_announcement(message, "[A.name] Announcement by [ID.registered] ([ID.assignment])", msg_sound) ON_COOLDOWN(user,"announcement_computer",announcement_delay) - message = "" - - proc/nice_timer(mob/user) - var/time = get_time(user) - if(time < 0) - return "--:--" - else - var/seconds = text2num(time) % 60 //ZeWaka: Should fix type mismatches. - var/flick_seperator = (seconds % 2 == 0) // why was this being calculated after converting BACK into a string?!!! - cirr - // VARIABLES SHOULDN'T CHANGE TYPE FROM STRING TO NUMBER TO STRING LIKE THIS IN LIKE SIX LINES AAGGHHHHH FUCK YOU DYNAMIC TYPING - var/minutes = round(text2num((time - seconds) / 60)) - minutes = minutes < 10 ? "0[minutes]" : "[minutes]" - seconds = seconds < 10 ? "0[seconds]" : "[seconds]" - - return "[minutes][flick_seperator ? ":" : " "][seconds]" proc/get_time(mob/user) return round(GET_COOLDOWN(user,"announcement_computer") / 10) - proc/set_arrival_alert(var/mob/user) - if (!user) - return - var/newalert = tgui_input_text(user, "Please enter a new arrival alert message. Valid tokens: $NAME, $JOB, $STATION, $THEY, $THEM, $THEIR", "Custom Arrival Alert", src.arrivalalert) - if (!in_interact_range(src, user)) - return + proc/set_arrival_alert(var/mob/user, newalert) if (!newalert) + src.arrivalalert = "" return if (!findtext(newalert, "$NAME")) user.show_text("The alert needs at least one $NAME token.", "red") @@ -192,7 +147,6 @@ return src.arrivalalert = sanitize(adminscrub(newalert, 200)) logTheThing(LOG_STATION, user, "sets the arrival announcement on [constructTarget(src,"station")] to \"[src.arrivalalert]\"") - user.show_text("Arrival alert set to '[newalert]'", "blue") playsound(src.loc, "keyboard", 50, 1, -15) return @@ -208,6 +162,8 @@ proc/announce_arrival(var/mob/living/person) if (!src.announces_arrivals) return 1 + if (!src.arrivalalert) + return 1 if ((person.traitHolder.hasTrait("stowaway")) || (person.traitHolder.hasTrait("pilot")) || (person.traitHolder.hasTrait("sleepy"))) return 1 //people who have been on the ship the whole time, or who aren't on the ship, won't be announced if (!src.announcement_radio) @@ -252,3 +208,4 @@ req_access = null name = "Syndicate Announcement computer" voice_name = "Syndicate Announcement Computer" + theme = "syndicate" diff --git a/code/obj/machinery/computer/robotics.dm b/code/obj/machinery/computer/robotics.dm index ce8c5d9b5a547..69a542b5756b3 100644 --- a/code/obj/machinery/computer/robotics.dm +++ b/code/obj/machinery/computer/robotics.dm @@ -30,7 +30,8 @@ ..() return -/obj/machinery/computer/robotics/special_deconstruct(obj/computerframe/frame as obj) +/obj/machinery/computer/robotics/special_deconstruct(obj/computerframe/frame as obj, mob/user) + logTheThing(LOG_STATION, src, "is deconstructed by [key_name(user)] at [log_loc(src)]") frame.circuit.id = src.id /obj/machinery/computer/robotics/process() diff --git a/code/obj/machinery/computer/shuttle.dm b/code/obj/machinery/computer/shuttle.dm index 38469800c65ba..5146920dd0bfd 100644 --- a/code/obj/machinery/computer/shuttle.dm +++ b/code/obj/machinery/computer/shuttle.dm @@ -365,7 +365,8 @@ var/bombini_saved if(!choice || emergency_shuttle.location != SHUTTLE_LOC_STATION || BOUNDS_DIST(user, src) > 0) return switch(choice) if("Authorize") - for (var/datum/flock/flock in flocks) + for (var/flockname in flocks) + var/datum/flock/flock = flocks[flockname] if (flock.relay_in_progress) boutput(user, "Unable to contact central command, authorization rejected.") return diff --git a/code/obj/machinery/deep_fryer.dm b/code/obj/machinery/deep_fryer.dm index 1042e049acc7d..b4b5ffb34b1d9 100644 --- a/code/obj/machinery/deep_fryer.dm +++ b/code/obj/machinery/deep_fryer.dm @@ -212,7 +212,9 @@ TYPEINFO(/obj/machinery/deep_fryer) /obj/machinery/deep_fryer/proc/fryify(atom/movable/thing, burnt=FALSE) var/obj/item/reagent_containers/food/snacks/shell/deepfry/fryholder = new(src) - if(burnt) + //photos cause exponential lag when deepfried, see #17848 + //feel free to remove this if you can figure out why + if(burnt || istype(thing, /obj/item/photo)) if (ismob(thing)) var/mob/M = thing M.ghostize() diff --git a/code/obj/machinery/dialysis.dm b/code/obj/machinery/dialysis.dm index e6e8948575616..7a7b93e67d245 100644 --- a/code/obj/machinery/dialysis.dm +++ b/code/obj/machinery/dialysis.dm @@ -29,6 +29,7 @@ TYPEINFO(/obj/machinery/dialysis) CRASH("[src] tried to fetch the global chem whitelist but it has a length of 0!") src.whitelist = chem_whitelist src.UpdateIcon() + UnsubscribeProcess() disposing() if (src.patient) @@ -87,8 +88,8 @@ TYPEINFO(/obj/machinery/dialysis) if (!in_interact_range(src, src.patient)) var/fluff = pick("pulled", "yanked", "ripped") - src.patient.visible_message(SPAN_ALERT("<b>[src]'s cannulae gets [fluff] out of [src.patient]'s arm!</b>"),\ - SPAN_ALERT("<b>[src]'s cannulae gets [fluff] out of your arm!</b>")) + src.patient.visible_message(SPAN_ALERT("<b>[src]'s cannulae get [fluff] out of [src.patient]'s arm!</b>"),\ + SPAN_ALERT("<b>[src]'s cannulae get [fluff] out of your arm!</b>")) src.audible_message(SPAN_SAY("[SPAN_NAME("[src]")] beeps, \"No blood pressure detected.\"")) src.stop_dialysis() return @@ -156,6 +157,7 @@ TYPEINFO(/obj/machinery/dialysis) return boutput(user, SPAN_ALERT("[src] already has a patient attached!")) src.patient = new_patient src.patient.setStatus("dialysis", INFINITE_STATUS, src) + APPLY_ATOM_PROPERTY(patient, PROP_MOB_BLOOD_ABSORPTION_RATE, src, 3) src.power_usage = 500 src.patient_blood_id = src.patient.blood_id src.UpdateIcon() @@ -166,6 +168,7 @@ TYPEINFO(/obj/machinery/dialysis) var/list/datum/statusEffect/statuses = src.patient?.getStatusList("dialysis", src) //get our particular status effect if (length(statuses)) src.patient.delStatus(statuses[1]) + REMOVE_ATOM_PROPERTY(patient, PROP_MOB_BLOOD_ABSORPTION_RATE, src) src.patient = null src.patient_blood_id = null src.output_blood_colour = null diff --git a/code/obj/machinery/door/airlock.dm b/code/obj/machinery/door/airlock.dm index 5972edf89dc98..ffc6ae0bf2b4c 100644 --- a/code/obj/machinery/door/airlock.dm +++ b/code/obj/machinery/door/airlock.dm @@ -8,151 +8,6 @@ /// a global associative list of all airlocks linked together by cycling mechanisms. Indexed by ID var/global/list/cycling_airlocks = list() -/* - New methods: - pulse - sends a pulse into a wire for hacking purposes - cut - cuts a wire and makes any necessary state changes - mend - mends a wire and makes any necessary state changes - isWireColorCut - returns 1 if that color wire is cut, or 0 if not - isWireCut - returns 1 if that wire (e.g. AIRLOCK_WIRE_DOOR_BOLTS) is cut, or 0 if not - canAIControl - 1 if the AI can control the airlock, 0 if not (then check canAIHack to see if it can hack in) - canAIHack - 1 if the AI can hack into the airlock to recover control, 0 if not. Also returns 0 if the AI does not *need* to hack it. - arePowerSystemsOn - 1 if the main or backup power are functioning, 0 if not. Does not check whether the power grid is charged or an APC has equipment on or anything like that. (Check (src.status & NOPOWER) for that) - requiresIDs - 1 if the airlock is requiring IDs, 0 if not - isAllPowerCut - 1 if the main and backup power both have cut wires. - regainMainPower - handles the effects of main power coming back on. - loseMainPower - handles the effects of main power going offline. Usually (if one isn't already running) spawn a thread to count down how long it will be offline - counting down won't happen if main power was completely cut along with backup power, though, the thread will just sleep. - loseBackupPower - handles the effects of backup power going offline. - regainBackupPower - handles the effects of main power coming back on. - shock - has a chance of electrocuting its target. -*/ - -ADMIN_INTERACT_PROCS(/obj/machinery/door/airlock, proc/play_deny, proc/toggle_bolt, proc/shock_temp, proc/shock_perm, proc/shock_restore) - -/obj/machinery/door/airlock/proc/shock_temp(mob/user) - //electrify door for 30 seconds - if(!src.arePowerSystemsOn() || (src.status & NOPOWER)) - boutput(user, "The door has no power - you can't electrify it.") - return - if(!src.can_shock) - boutput(user, "This door is unable to be electrified, you cannot shock it.") - return - if (src.isWireCut(AIRLOCK_WIRE_ELECTRIFY)) - boutput(user, SPAN_ALERT("The electrification wire has been cut.<br><br>")) - else if (src.secondsElectrified==-1) - boutput(user, SPAN_ALERT("The door is already indefinitely electrified. You'd have to un-electrify it before you can re-electrify it with a non-forever duration.<br><br>")) - else if (src.secondsElectrified!=0) - boutput(user, SPAN_ALERT("The door is already electrified. You can't re-electrify it while it's already electrified.<br><br>")) - else - src.secondsElectrified = 30 - logTheThing(LOG_COMBAT, user || usr, "electrified airlock ([src]) at [log_loc(src)] for 30 seconds.") - message_admins("[key_name(user || usr)] electrified airlock ([src]) at [log_loc(src)] for 30 seconds.") - SPAWN(1 SECOND) - while (src.secondsElectrified>0) - src.secondsElectrified-=1 - if (src.secondsElectrified<0) - src.secondsElectrified = 0 - sleep(1 SECOND) - -/obj/machinery/door/airlock/proc/toggle_bolt(mob/user) - if (src.isWireCut(AIRLOCK_WIRE_DOOR_BOLTS)) - boutput(user, SPAN_ALERT("You can't drop the door bolts - The door bolt dropping wire has been cut.")) - return - if(!src.arePowerSystemsOn() || (src.status & NOPOWER)) - boutput(user, SPAN_ALERT("The door has no power - you can't raise/lower the door bolts.")) - return - if(src.locked) - src.set_unlocked() - else - logTheThing(LOG_STATION, user || usr, "[user || usr] has bolted a door at [log_loc(src)].") - src.set_locked() - -/obj/machinery/door/airlock/proc/shock_perm(mob/user) - if(!src.arePowerSystemsOn() || (src.status & NOPOWER)) - boutput(user, SPAN_ALERT("The door has no power - you can't electrify it.")) - return - //electrify door indefinitely - if(!src.can_shock) - boutput(user, SPAN_ALERT("This door is unable to be electrified.<br><br>")) - if (src.isWireCut(AIRLOCK_WIRE_ELECTRIFY)) - boutput(user, SPAN_ALERT("The electrification wire has been cut.<br><br>")) - else if (src.secondsElectrified==-1) - boutput(user, SPAN_ALERT("The door is already indefinitely electrified.<br><br>")) - else if (src.secondsElectrified!=0) - boutput(user, SPAN_ALERT("The door is already electrified. You can't re-electrify it while it's already electrified.<br><br>")) - else - logTheThing(LOG_COMBAT, user || usr, "electrified airlock ([src]) at [log_loc(src)] indefinitely.") - message_admins("[key_name(user || usr)] electrified airlock ([src]) at [log_loc(src)] indefinitely.") - src.secondsElectrified = -1 - -/obj/machinery/door/airlock/proc/shock_restore(mob/user) - //un-electrify door - if(!src.arePowerSystemsOn() || (src.status & NOPOWER)) - boutput(user, "The door has no power - you can't electrify it.") - return - if (src.isWireCut(AIRLOCK_WIRE_ELECTRIFY)) - boutput(user, SPAN_ALERT("Can't un-electrify the airlock - The electrification wire is cut.<br><br>")) - else if (src.secondsElectrified!=0) - src.secondsElectrified = 0 - logTheThing(LOG_COMBAT, user || usr, "de-electrified airlock ([src]) at [log_loc(src)].") - message_admins("[key_name(user || usr)] de-electrified airlock ([src]) at [log_loc(src)].") - - -/obj/machinery/door/airlock/proc/idscantoggle(mob/user) - if(!src.arePowerSystemsOn() || (src.status & NOPOWER)) - boutput(user, SPAN_ALERT("The door has no power - you toggle the ID scanner.")) - return - //enable/disable ID scanner - if (src.isWireCut(AIRLOCK_WIRE_IDSCAN)) - boutput(user, "The IdScan wire has been cut - So, you can't disable it, but it is already disabled anyways.") - else - src.aiDisabledIdScanner = !src.aiDisabledIdScanner - - -/obj/machinery/door/airlock/proc/user_toggle_open(mob/user) - if (src.operating == 1) - return - if((!src.arePowerSystemsOn()) || (src.status & NOPOWER) || src.isWireCut(AIRLOCK_WIRE_OPEN_DOOR)) - boutput(user, SPAN_ALERT("The door has no power - you can't open/close it.")) - return - if(src.welded) - boutput(user, SPAN_ALERT("The airlock has been welded shut!")) - else if(locked) - boutput(user, SPAN_ALERT("The door bolts are down!")) - else if(!density) - close() - else - open() - - -//This generates the randomized airlock wire assignments for the game. -/proc/RandomAirlockWires() - //to make this not randomize the wires, just set index to 1 and increment it in the flag for loop (after doing everything else). - var/list/wires = list(0, 0, 0, 0, 0, 0, 0, 0, 0, 0) - airlockIndexToFlag = list(0, 0, 0, 0, 0, 0, 0, 0, 0, 0) - airlockIndexToWireColor = list(0, 0, 0, 0, 0, 0, 0, 0, 0, 0) - airlockWireColorToIndex = list(0, 0, 0, 0, 0, 0, 0, 0, 0, 0) - var/flagIndex = 1 - for (var/flag=1, flag<1024, flag+=flag) - var/valid = 0 - while (!valid) - var/colorIndex = rand(1, 10) - if (wires[colorIndex]==0) - valid = 1 - wires[colorIndex] = flag - airlockIndexToFlag[flagIndex] = flag - airlockIndexToWireColor[flagIndex] = colorIndex - airlockWireColorToIndex[colorIndex] = flagIndex - flagIndex+=1 - return wires - -/* Example: -Airlock wires color -> flag are { 64, 128, 256, 2, 16, 4, 8, 32, 1 }. -Airlock wires color -> index are { 7, 8, 9, 2, 5, 3, 4, 6, 1 }. -Airlock index -> flag are { 1, 2, 4, 8, 16, 32, 64, 128, 256 }. -Airlock index -> wire color are { 9, 4, 6, 7, 5, 8, 1, 2, 3 }. -*/ - /obj/machinery/door/airlock name = "airlock" icon = 'icons/obj/doors/SL_doors.dmi' @@ -222,6 +77,10 @@ Airlock index -> wire color are { 9, 4, 6, 7, 5, 8, 1, 2, 3 }. if(0 to 24) . += "It is barely intact!" +// ============================================================== +// ========================== procs ============================= +// ============================================================== + /obj/machinery/door/airlock/New() ..() if(!isrestrictedz(src.z) && src.name == initial(src.name)) //The second half prevents varedited names being overwritten @@ -245,710 +104,18 @@ Airlock index -> wire color are { 9, 4, 6, 7, 5, 8, 1, 2, 3 }. return 0 .= ..() -/obj/machinery/door/airlock/command - name = "command airlock" - icon = 'icons/obj/doors/Doorcom.dmi' - req_access = list(access_heads) - -/obj/machinery/door/airlock/security - name = "security airlock" - icon = 'icons/obj/doors/Doorsec.dmi' - req_access = list(access_security) - -/obj/machinery/door/airlock/engineering - name = "engineering airlock" - icon = 'icons/obj/doors/Dooreng.dmi' - req_access = list(access_engineering) - -/obj/machinery/door/airlock/medical - name = "medical airlock" - icon = 'icons/obj/doors/doormed.dmi' - req_access = list(access_medical) - -/obj/machinery/door/airlock/maintenance - name = "maintenance airlock" - icon = 'icons/obj/doors/Doormaint.dmi' - req_access = list(access_maint_tunnels) - -/obj/machinery/door/airlock/external - name = "external airlock" - icon = 'icons/obj/doors/Doorext.dmi' - sound_airlock = 'sound/machines/airlock.ogg' - opacity = 0 - visible = 0 - operation_time = 10 - -TYPEINFO(/obj/machinery/door/airlock/syndicate) - mats = 0 - -/obj/machinery/door/airlock/syndicate // fuck our players for making us (or at least me) need this - name = "reinforced external airlock" - desc = "Looks pretty tough. I wouldn't take this door on in a fight." - icon = 'icons/obj/doors/Doorext.dmi' - req_access_txt = "52" - cant_emag = TRUE - cyborgBumpAccess = FALSE - hardened = TRUE - aiControlDisabled = TRUE - object_flags = BOTS_DIRBLOCK - -/obj/machinery/door/airlock/syndicate/meteorhit() - return - -/obj/machinery/door/airlock/syndicate/ex_act() - return - -TYPEINFO(/obj/machinery/door/airlock/centcom) - mats = 0 - -/obj/machinery/door/airlock/centcom - icon = 'icons/obj/doors/Doorcom.dmi' - req_access_txt = "57" - cant_emag = TRUE - cyborgBumpAccess = FALSE - hardened = TRUE - aiControlDisabled = TRUE - object_flags = BOTS_DIRBLOCK - -/obj/machinery/door/airlock/centcom/meteorhit() - return - -/obj/machinery/door/airlock/centcom/ex_act() - return - -/obj/machinery/door/airlock/glass - name = "glass airlock" - icon = 'icons/obj/doors/Doorglass.dmi' - opacity = 0 - visible = 0 - -/obj/machinery/door/airlock/glass/command - name = "command airlock" - icon = 'icons/obj/doors/Doorcom-glass.dmi' - req_access = list(access_heads) - -/obj/machinery/door/airlock/glass/engineering - name = "engineering airlock" - icon = 'icons/obj/doors/Dooreng-glass.dmi' - req_access = list(access_engineering) - -/obj/machinery/door/airlock/glass/medical - name = "medical airlock" - icon = 'icons/obj/doors/Doormed-glass.dmi' - req_access = list(access_medical) - -/obj/machinery/door/airlock/classic - name = "large airlock" - icon = 'icons/obj/doors/Doorclassic.dmi' - sound_airlock = 'sound/machines/airlock.ogg' - operation_time = 10 - -/obj/machinery/door/airlock/pyro - name = "airlock" - icon = 'icons/obj/doors/SL_doors.dmi' - flags = FPRINT | IS_PERSPECTIVE_FLUID | ALWAYS_SOLID_FLUID - -/obj/machinery/door/airlock/pyro/safe - can_shock = FALSE - -/obj/machinery/door/airlock/pyro/alt - icon_state = "generic2_closed" - icon_base = "generic2" - panel_icon_state = "2_panel_open" - welded_icon_state = "2_welded" - -/obj/machinery/door/airlock/pyro/command - name = "command airlock" - icon_state = "com_closed" - icon_base = "com" - req_access = null - health = 800 - health_max = 800 - -TYPEINFO(/obj/machinery/door/airlock/pyro/command/centcom) - mats = 0 - -/obj/machinery/door/airlock/pyro/command/centcom - req_access_txt = "57" - cant_emag = TRUE - cyborgBumpAccess = FALSE - hardened = TRUE - aiControlDisabled = TRUE - object_flags = BOTS_DIRBLOCK - -/obj/machinery/door/airlock/pyro/command/alt - icon_state = "com2_closed" - icon_base = "com2" - panel_icon_state = "2_panel_open" - welded_icon_state = "2_welded" - req_access = null - -TYPEINFO(/obj/machinery/door/airlock/pyro/command/syndicate) - mats = 0 - -/obj/machinery/door/airlock/pyro/command/syndicate - req_access = list(access_syndicate_commander) - -/obj/machinery/door/airlock/pyro/weapons - icon_state = "manta_closed" - icon_base = "manta" - panel_icon_state = "2_panel_open" - welded_icon_state = "2_welded" - req_access = null - hardened = TRUE - aiControlDisabled = TRUE - cyborgBumpAccess = FALSE - -/obj/machinery/door/airlock/pyro/weapons/noemag - req_access = null - cant_emag = TRUE - cyborgBumpAccess = FALSE - - - - -/obj/machinery/door/airlock/pyro/security - name = "security airlock" - icon_state = "sec_closed" - icon_base = "sec" - req_access = null - -/obj/machinery/door/airlock/pyro/security/alt - icon_state = "sec2_closed" - icon_base = "sec2" - panel_icon_state = "2_panel_open" - welded_icon_state = "2_welded" - req_access = null - -/obj/machinery/door/airlock/pyro/engineering - name = "engineering airlock" - icon_state = "eng_closed" - icon_base = "eng" - req_access = null - -/obj/machinery/door/airlock/pyro/engineering/alt - icon_state = "eng2_closed" - icon_base = "eng2" - panel_icon_state = "2_panel_open" - welded_icon_state = "2_welded" - req_access = null - -/obj/machinery/door/airlock/pyro/medical - name = "medical airlock" - icon_state = "research_closed" - icon_base = "research" - req_access = null - -/obj/machinery/door/airlock/pyro/medical/alt - icon_state = "research2_closed" - icon_base = "research2" - panel_icon_state = "2_panel_open" - welded_icon_state = "2_welded" - req_access = null - -/obj/machinery/door/airlock/pyro/medical/alt2 - icon_state = "med_closed" - icon_base = "med" - panel_icon_state = "2_panel_open" - welded_icon_state = "2_welded" - req_access = null - -/obj/machinery/door/airlock/pyro/medical/morgue - icon_state = "morgue_closed" - icon_base = "morgue" - panel_icon_state = "2_panel_open" - welded_icon_state = "2_welded" - req_access = null - -/obj/machinery/door/airlock/pyro/mining - name = "mining airlock" - icon_state = "mining_closed" - icon_base = "mining" - panel_icon_state = "2_panel_open" - welded_icon_state = "2_welded" - req_access = null - -/obj/machinery/door/airlock/pyro/maintenance - name = "maintenance airlock" - icon_state = "maint_closed" - icon_base = "maint" - req_access = null - -/obj/machinery/door/airlock/pyro/maintenance/alt - icon_state = "maint2_closed" - icon_base = "maint2" - panel_icon_state = "2_panel_open" - welded_icon_state = "2_welded" - - -/obj/machinery/door/airlock/pyro/external - name = "external airlock" - icon_state = "airlock_closed" - icon_base = "airlock" - panel_icon_state = "airlock_panel_open" - welded_icon_state = "airlock_welded" - sound_airlock = 'sound/machines/airlock.ogg' - opacity = 0 - visible = 0 - operation_time = 10 - -TYPEINFO(/obj/machinery/door/airlock/pyro/reinforced) - mats = 0 - -/obj/machinery/door/airlock/pyro/reinforced - name = "reinforced external airlock" - desc = "Looks pretty tough. I wouldn't take this door on in a fight." - icon_state = "airlock_closed" - icon_base = "airlock" - panel_icon_state = "airlock_panel_open" - welded_icon_state = "airlock_welded" - sound_airlock = 'sound/machines/airlock.ogg' - operation_time = 10 - cant_emag = TRUE - hardened = TRUE - aiControlDisabled = TRUE - -/obj/machinery/door/airlock/pyro/reinforced/meteorhit() - return -/obj/machinery/door/airlock/pyro/reinforced/ex_act() - return -/obj/machinery/door/airlock/pyro/reinforced/blob_act(power) - return - -/obj/machinery/door/airlock/pyro/reinforced/syndicate - req_access_txt = "52" - cyborgBumpAccess = FALSE - -/obj/machinery/door/airlock/pyro/reinforced/arrivals - icon_state = "arrivals_closed" - icon_base = "arrivals" - opacity = 0 - visible = 0 - -/obj/machinery/door/airlock/pyro/glass - name = "glass airlock" - icon_state = "glass_closed" - icon_base = "glass" - panel_icon_state = "glass_panel_open" - welded_icon_state = "glass_welded" - opacity = 0 - visible = 0 - -TYPEINFO(/obj/machinery/door/airlock/pyro/glass/reinforced) - mats = 0 - -/obj/machinery/door/airlock/pyro/glass/reinforced - name = "reinforced glass airlock" - desc = "Looks pretty tough. I wouldn't take this door on in a fight." - operation_time = 10 - cant_emag = TRUE - hardened = TRUE - aiControlDisabled = TRUE - -/obj/machinery/door/airlock/pyro/glass/reinforced/meteorhit() - return -/obj/machinery/door/airlock/pyro/glass/reinforced/ex_act() - return -/obj/machinery/door/airlock/pyro/glass/reinforced/blob_act(power) - return - -/obj/machinery/door/airlock/pyro/glass/brig - req_access_txt = "2" - -/obj/machinery/door/airlock/pyro/glass/command - name = "command airlock" - icon_state = "com_glass_closed" - icon_base = "com_glass" - req_access = null - -/obj/machinery/door/airlock/pyro/glass/engineering - name = "engineering airlock" - icon_state = "eng_glass_closed" - icon_base = "eng_glass" - req_access = null - -/obj/machinery/door/airlock/pyro/glass/security //Shitty Azungar recolor, no need to thank me. - name = "security airlock" - icon_state = "sec_glass_closed" - icon_base = "sec_glass" - req_access = null - -/obj/machinery/door/airlock/pyro/glass/security/alt - name = "security airlock" - icon_state = "sec_glassalt_closed" - icon_base = "sec_glassalt" - req_access = null - -/obj/machinery/door/airlock/pyro/glass/med - name = "medical airlock" - icon_state = "med_glass_closed" - icon_base = "med_glass" - req_access = null - -/obj/machinery/door/airlock/pyro/glass/sci - name = "research airlock" - icon_state = "sci_glass_closed" - icon_base = "sci_glass" - req_access = null - -/obj/machinery/door/airlock/pyro/glass/toxins - name = "toxins airlock" - icon_state = "toxins_glass_closed" - icon_base = "toxins_glass" - req_access = null - -/obj/machinery/door/airlock/pyro/glass/mining - name = "mining airlock" - icon_state = "mining_glass_closed" - icon_base = "mining_glass" - req_access = null - -/obj/machinery/door/airlock/pyro/glass/botany - name = "botany airlock" - icon_state = "botany_glass_closed" - icon_base = "botany_glass" - req_access = null - -/obj/machinery/door/airlock/pyro/classic - name = "old airlock" - icon_state = "old_closed" - icon_base = "old" - panel_icon_state = "old_panel_open" - welded_icon_state = "old_welded" - sound_airlock = 'sound/machines/airlock.ogg' - operation_time = 10 - -/obj/machinery/door/airlock/pyro/glass/windoor - name = "thin glass airlock" - icon_state = "windoor_closed" - icon_base = "windoor" - panel_icon_state = "windoor_panel_open" - welded_icon_state = "glassdoor_welded" - sound_airlock = 'sound/machines/windowdoor.ogg' - has_crush = FALSE - health = 500 - health_max = 500 - layer = EFFECTS_LAYER_UNDER_4 // under lights and blinds, above pretty much everything else - object_flags = BOTS_DIRBLOCK | CAN_REPROGRAM_ACCESS | HAS_DIRECTIONAL_BLOCKING - flags = FPRINT | IS_PERSPECTIVE_FLUID | ALWAYS_SOLID_FLUID | ON_BORDER - event_handler_flags = USE_FLUID_ENTER - -/obj/machinery/door/airlock/pyro/glass/windoor/opened() - layer = COG2_WINDOW_LAYER //this is named weirdly, but seems right - . = ..() - -/obj/machinery/door/airlock/pyro/glass/windoor/close() - layer = EFFECTS_LAYER_UNDER_4 - . = ..() - -/obj/machinery/door/airlock/pyro/glass/windoor/bumpopen(atom/movable/AM) - if (src.density) - src.autoclose = TRUE - ..() - -/obj/machinery/door/airlock/pyro/glass/windoor/attack_hand(mob/user) - if (src.density) - src.autoclose = FALSE - ..(user) - -/obj/machinery/door/airlock/pyro/glass/windoor/Cross(atom/movable/mover) - if (istype(mover, /obj/projectile)) - var/obj/projectile/P = mover - if (P.proj_data.window_pass) - return 1 - - if (get_dir(loc, mover) & dir) // Check for appropriate border. - if(density && mover && mover.flags & DOORPASS && !src.cant_emag) - if (ismob(mover) && mover:pulling && src.bumpopen(mover)) - // If they're pulling something and the door would open anyway, - // just let the door open instead. - return 0 - animate_door_squeeze(mover) - return 1 // they can pass through a closed door - return !density - else - return 1 - -/obj/machinery/door/airlock/pyro/glass/windoor/gas_cross(turf/target) - if(get_dir(loc, target) & dir) - return !density - else - return TRUE - -/obj/machinery/door/airlock/pyro/glass/windoor/Uncross(atom/movable/mover, do_bump = TRUE) - if (istype(mover, /obj/projectile)) - var/obj/projectile/P = mover - if (P.proj_data.window_pass) - return TRUE - if (get_dir(loc, mover.movement_newloc) & dir) - if(density && mover && mover.flags & DOORPASS && !src.cant_emag) - if (ismob(mover) && mover:pulling && src.bumpopen(mover)) - // If they're pulling something and the door would open anyway, - // just let the door open instead. - . = FALSE - UNCROSS_BUMP_CHECK(mover) - return - animate_door_squeeze(mover) - return TRUE // they can pass through a closed door - . = !density - else - . = TRUE - UNCROSS_BUMP_CHECK(mover) -/obj/machinery/door/airlock/pyro/glass/windoor/update_nearby_tiles(need_rebuild) - if (!air_master) return 0 - - var/turf/simulated/source = loc - var/turf/simulated/target = get_step(source,dir) - - if (need_rebuild) - if (istype(source)) // Rebuild resp. update nearby group geometry. - if (source.parent) - air_master.groups_to_rebuild |= source.parent - else - air_master.tiles_to_update |= source - - if (istype(target)) - if (target.parent) - air_master.groups_to_rebuild |= target.parent - else - air_master.tiles_to_update |= target - else - if (istype(source)) air_master.tiles_to_update |= source - if (istype(target)) air_master.tiles_to_update |= target - - if (istype(source)) - source.selftilenotify() //for fluids - -/obj/machinery/door/airlock/pyro/glass/windoor/xmasify() - return - -/obj/machinery/door/airlock/pyro/glass/windoor/alt - icon_state = "windoor2_closed" - icon_base = "windoor2" - panel_icon_state = null - welded_icon_state = "windoor2_weld" - sound_airlock = 'sound/machines/windowdoor.ogg' - has_crush = FALSE - -/obj/machinery/door/airlock/pyro/sci_alt - name = "research airlock" - icon_state = "sci_closed" - icon_base = "sci" - panel_icon_state = "2_panel_open" - welded_icon_state = "2_welded" - req_access = null - -/obj/machinery/door/airlock/pyro/toxins_alt - name = "toxins airlock" - icon_state = "toxins2_closed" - icon_base = "toxins2" - panel_icon_state = "2_panel_open" - welded_icon_state = "2_welded" - req_access = null - -/obj/machinery/door/airlock/gannets - name = "airlock" - icon = 'icons/obj/doors/destiny.dmi' - icon_state = "gen_closed" - icon_base = "gen" - - alt - icon_state = "fgen_closed" - icon_base = "fgen" - welded_icon_state = "fgen_welded" - - command - name = "command airlock" - icon_state = "com_closed" - icon_base = "com" - req_access = list(access_heads) - - command/alt - icon_state = "fcom_closed" - icon_base = "fcom" - welded_icon_state = "fcom_welded" - - security - name = "security airlock" - icon_state = "sec_closed" - icon_base = "sec" - req_access = list(access_security) - - security/alt - icon_state = "fsec_closed" - icon_base = "fsec" - welded_icon_state = "fsec_welded" - - engineering - name = "engineering airlock" - icon_state = "eng_closed" - icon_base = "eng" - req_access = list(access_engineering) - - engineering/alt - icon_state = "feng_closed" - icon_base = "feng" - welded_icon_state = "feng_welded" - - medical - name = "medical airlock" - icon_state = "med_closed" - icon_base = "med" - req_access = list(access_medical) - - medical/alt - icon_state = "fmed_closed" - icon_base = "fmed" - welded_icon_state = "fmed_welded" - - morgue - name = "morgue airlock" - icon_state = "morg_closed" - icon_base = "morg" - req_access = list(access_morgue) - - morgue/alt - icon_state = "fmorg_closed" - icon_base = "fmorg" - welded_icon_state = "fmorg_welded" - - chemistry - name = "chemistry airlock" - icon_state = "chem_closed" - icon_base = "chem" - req_access = list(access_research) - - chemistry/alt - icon_state = "fchem_closed" - icon_base = "fchem" - welded_icon_state = "fchem_welded" - - toxins - name = "toxins airlock" - icon_state = "tox_closed" - icon_base = "tox" - req_access = list(access_research) - - toxins/alt - icon_state = "ftox_closed" - icon_base = "ftox" - welded_icon_state = "ftox_welded" - - maintenance - name = "maintenance airlock" - icon_state = "maint_closed" - icon_base = "maint" - welded_icon_state = "maint_welded" - req_access = list(access_maint_tunnels) - -/obj/machinery/door/airlock/gannets/glass - name = "glass airlock" - icon = 'icons/obj/doors/destiny.dmi' - icon_state = "tgen_closed" - icon_base = "tgen" - opacity = 0 - visible = 0 - - alt - icon_state = "tfgen_closed" - icon_base = "tfgen" - welded_icon_state = "fgen_welded" - - command - name = "glass command airlock" - icon_state = "tcom_closed" - icon_base = "tcom" - req_access = list(access_heads) - - command/alt - icon_state = "tfcom_closed" - icon_base = "tfcom" - welded_icon_state = "fcom_welded" - - security - name = "glass security airlock" - icon_state = "tsec_closed" - icon_base = "tsec" - req_access = list(access_security) - - security/alt - icon_state = "tfsec_closed" - icon_base = "tfsec" - welded_icon_state = "fsec_welded" - - engineering - name = "glass engineering airlock" - icon_state = "teng_closed" - icon_base = "teng" - req_access = list(access_engineering) - - engineering/alt - icon_state = "tfeng_closed" - icon_base = "tfeng" - welded_icon_state = "feng_welded" - - medical - name = "glass medical airlock" - icon_state = "tmed_closed" - icon_base = "tmed" - req_access = list(access_medical) - - medical/alt - icon_state = "tfmed_closed" - icon_base = "tfmed" - welded_icon_state = "fmed_welded" - - morgue - name = "glass morgue airlock" - icon_state = "tmorg_closed" - icon_base = "tmorg" - req_access = list(access_morgue) - - morgue/alt - icon_state = "tfmorg_closed" - icon_base = "tfmorg" - welded_icon_state = "fmorg_welded" - - chemistry - name = "glass chemistry airlock" - icon_state = "tchem_closed" - icon_base = "tchem" - req_access = list(access_research) - - chemistry/alt - icon_state = "tfchem_closed" - icon_base = "tfchem" - welded_icon_state = "fchem_welded" - - toxins - name = "glass toxins airlock" - icon_state = "ttox_closed" - icon_base = "ttox" - req_access = list(access_research) - - toxins/alt - icon_state = "tftox_closed" - icon_base = "tftox" - welded_icon_state = "ftox_welded" - - maintenance - name = "glass maintenance airlock" - icon_state = "tmaint_closed" - icon_base = "tmaint" - welded_icon_state = "tmaint_welded" - req_access = list(access_maint_tunnels) +// ================= airlock wire panel procs ================== /* -About the new airlock wires panel: -* An airlock wire dialog can be accessed by the normal way or by using wirecutters or a multitool on the door while the wire-panel is open. This would show the following wires, which you can either wirecut/mend or send a multitool pulse through. There are 9 wires. -* one wire from the ID scanner. Sending a pulse through this flashes the red light on the door (if the door has power). If you cut this wire, the door will stop recognizing valid IDs. (If the door has 0000 access, it still opens and closes, though) -* two wires for power. Sending a pulse through either one causes a breaker to trip, disabling the door for 10 seconds if backup power is connected, or 1 minute if not (or until backup power comes back on, whichever is shorter). Cutting either one disables the main door power, but unless backup power is also cut, the backup power re-powers the door in 10 seconds. While unpowered, the door may be red open, but bolts-raising will not work. Cutting these wires may electrocute the user. -* one wire for door bolts. Sending a pulse through this drops door bolts (whether the door is powered or not) or raises them (if it is). Cutting this wire also drops the door bolts, and mending it does not raise them. If the wire is cut, trying to raise the door bolts will not work. -* two wires for backup power. Sending a pulse through either one causes a breaker to trip, but this does not disable it unless main power is down too (in which case it is disabled for 1 minute or however long it takes main power to come back, whichever is shorter). Cutting either one disables the backup door power (allowing it to be crowbarred open, but disabling bolts-raising), but may electocute the user. -* one wire for opening the door. Sending a pulse through this while the door has power makes it open the door if no access is required. -* one wire for AI control. Sending a pulse through this blocks AI control for a second or so (which is enough to see the AI control light on the panel dialog go off and back on again). Cutting this prevents the AI from controlling the door unless it has hacked the door through the power connection (which takes about a minute). If both main and backup power are cut, as well as this wire, then the AI cannot operate or hack the door at all. -* one wire for electrifying the door. Sending a pulse through this electrifies the door for 30 seconds. Cutting this wire electrifies the door, so that the next person to touch the door without insulated gloves gets electrocuted. (Currently it is also STAYING electrified until someone mends the wire) -*/ + About the new airlock wires panel: + * An airlock wire dialog can be accessed by the normal way or by using wirecutters or a multitool on the door while the wire-panel is open. This would show the following wires, which you can either wirecut/mend or send a multitool pulse through. There are 9 wires. + * one wire from the ID scanner. Sending a pulse through this flashes the red light on the door (if the door has power). If you cut this wire, the door will stop recognizing valid IDs. (If the door has 0000 access, it still opens and closes, though) + * two wires for power. Sending a pulse through either one causes a breaker to trip, disabling the door for 10 seconds if backup power is connected, or 1 minute if not (or until backup power comes back on, whichever is shorter). Cutting either one disables the main door power, but unless backup power is also cut, the backup power re-powers the door in 10 seconds. While unpowered, the door may be red open, but bolts-raising will not work. Cutting these wires may electrocute the user. + * one wire for door bolts. Sending a pulse through this drops door bolts (whether the door is powered or not) or raises them (if it is). Cutting this wire also drops the door bolts, and mending it does not raise them. If the wire is cut, trying to raise the door bolts will not work. + * two wires for backup power. Sending a pulse through either one causes a breaker to trip, but this does not disable it unless main power is down too (in which case it is disabled for 1 minute or however long it takes main power to come back, whichever is shorter). Cutting either one disables the backup door power (allowing it to be crowbarred open, but disabling bolts-raising), but may electocute the user. + * one wire for opening the door. Sending a pulse through this while the door has power makes it open the door if no access is required. + * one wire for AI control. Sending a pulse through this blocks AI control for a second or so (which is enough to see the AI control light on the panel dialog go off and back on again). Cutting this prevents the AI from controlling the door unless it has hacked the door through the power connection (which takes about a minute). If both main and backup power are cut, as well as this wire, then the AI cannot operate or hack the door at all. + * one wire for electrifying the door. Sending a pulse through this electrifies the door for 30 seconds. Cutting this wire electrifies the door, so that the next person to touch the door without insulated gloves gets electrocuted. (Currently it is also STAYING electrified until someone mends the wire). */ /obj/machinery/door/airlock/proc/play_deny() if(src.density && !src.operating) // only play the animation while fully closed play_animation("deny") @@ -1264,9 +431,12 @@ About the new airlock wires panel: return 0 -// shock user with probability prb (if all connections & power are working) -// returns 1 if shocked, 0 otherwise -// The preceding comment was borrowed from the grille's shock script +// ================= general procs ================== + +/* + shock user with probability prb (if all connections & power are working) + returns 1 if shocked, 0 otherwise + The preceding comment was borrowed from the grille's shock script. */ /obj/machinery/door/airlock/proc/shock(mob/user, prb) if(!prob(prb)) @@ -1586,9 +756,7 @@ About the new airlock wires panel: if (!src.has_panel) boutput(user, SPAN_ALERT("[src] does not have a panel for you to unscrew!")) return - src.panel_open = !(src.panel_open) - tgui_process.update_uis(src) - src.UpdateIcon() + SETUP_GENERIC_PRIVATE_ACTIONBAR(user, src, 1 SECOND, /obj/machinery/door/airlock/proc/interact_panel, user, C.icon, C.icon_state, null, INTERRUPT_ACT | INTERRUPT_STUNNED | INTERRUPT_ACTION | INTERRUPT_MOVE) else if (issnippingtool(C) && src.panel_open) return src.Attackhand(user) else if (ispulsingtool(C)) @@ -1601,6 +769,19 @@ About the new airlock wires panel: ..() return +/obj/machinery/door/airlock/proc/interact_panel(mob/user) + if (!src.panel_open) + user.visible_message(SPAN_ALERT("[user] opens the maintenance panel on \the [src.name].")) + logTheThing(LOG_STATION, user, "opens the maintenance panel on \the [src.name] airlock/door at [log_loc(src)]") + else + user.visible_message(SPAN_ALERT("[user] closes the maintenance panel on \the [src.name].")) + logTheThing(LOG_STATION, user, "closes the maintenance panel on \the [src.name] airlock/door at [log_loc(src)]") + src.panel_open = !(src.panel_open) + tgui_process.update_uis(src) + src.UpdateIcon() + playsound(src.loc, 'sound/items/screwdriver2.ogg', 25, TRUE) + + /obj/machinery/door/airlock/proc/weld_action(mob/user) if(!src.density) return @@ -1666,6 +847,8 @@ About the new airlock wires panel: /// adds the airlock in question to the global list. /obj/machinery/door/airlock/proc/attempt_cycle_link() if (src.cycle_id) + if(!cycling_airlocks[src.cycle_id]) // add a list to the list of lists + cycling_airlocks[src.cycle_id] = list() if (!(src in cycling_airlocks[src.cycle_id])) cycling_airlocks[src.cycle_id] += src @@ -1724,6 +907,8 @@ About the new airlock wires panel: ..() return +// ========== mechcomp duplicate code ============ + TYPEINFO(/obj/machinery/door/airlock) mats = 18 @@ -2177,6 +1362,151 @@ TYPEINFO(/obj/machinery/door/airlock) src.attach_signaler(which_wire+1, usr) . = TRUE +// ================= admin procs ================== + +/* + New methods: + pulse - sends a pulse into a wire for hacking purposes + cut - cuts a wire and makes any necessary state changes + mend - mends a wire and makes any necessary state changes + isWireColorCut - returns 1 if that color wire is cut, or 0 if not + isWireCut - returns 1 if that wire (e.g. AIRLOCK_WIRE_DOOR_BOLTS) is cut, or 0 if not + canAIControl - 1 if the AI can control the airlock, 0 if not (then check canAIHack to see if it can hack in) + canAIHack - 1 if the AI can hack into the airlock to recover control, 0 if not. Also returns 0 if the AI does not *need* to hack it. + arePowerSystemsOn - 1 if the main or backup power are functioning, 0 if not. Does not check whether the power grid is charged or an APC has equipment on or anything like that. (Check (src.status & NOPOWER) for that) + requiresIDs - 1 if the airlock is requiring IDs, 0 if not + isAllPowerCut - 1 if the main and backup power both have cut wires. + regainMainPower - handles the effects of main power coming back on. + loseMainPower - handles the effects of main power going offline. Usually (if one isn't already running) spawn a thread to count down how long it will be offline - counting down won't happen if main power was completely cut along with backup power, though, the thread will just sleep. + loseBackupPower - handles the effects of backup power going offline. + regainBackupPower - handles the effects of main power coming back on. + shock - has a chance of electrocuting its target. */ +ADMIN_INTERACT_PROCS(/obj/machinery/door/airlock, proc/play_deny, proc/toggle_bolt, proc/shock_temp, proc/shock_perm, proc/shock_restore) +/obj/machinery/door/airlock/proc/shock_temp(mob/user) + //electrify door for 30 seconds + if(!src.arePowerSystemsOn() || (src.status & NOPOWER)) + boutput(user, "The door has no power - you can't electrify it.") + return + if(!src.can_shock) + boutput(user, "This door is unable to be electrified, you cannot shock it.") + return + if (src.isWireCut(AIRLOCK_WIRE_ELECTRIFY)) + boutput(user, SPAN_ALERT("The electrification wire has been cut.<br><br>")) + else if (src.secondsElectrified==-1) + boutput(user, SPAN_ALERT("The door is already indefinitely electrified. You'd have to un-electrify it before you can re-electrify it with a non-forever duration.<br><br>")) + else if (src.secondsElectrified!=0) + boutput(user, SPAN_ALERT("The door is already electrified. You can't re-electrify it while it's already electrified.<br><br>")) + else + src.secondsElectrified = 30 + logTheThing(LOG_COMBAT, user || usr, "electrified airlock ([src]) at [log_loc(src)] for 30 seconds.") + message_admins("[key_name(user || usr)] electrified airlock ([src]) at [log_loc(src)] for 30 seconds.") + SPAWN(1 SECOND) + while (src.secondsElectrified>0) + src.secondsElectrified-=1 + if (src.secondsElectrified<0) + src.secondsElectrified = 0 + sleep(1 SECOND) + +/obj/machinery/door/airlock/proc/toggle_bolt(mob/user) + if (src.isWireCut(AIRLOCK_WIRE_DOOR_BOLTS)) + boutput(user, SPAN_ALERT("You can't drop the door bolts - The door bolt dropping wire has been cut.")) + return + if(!src.arePowerSystemsOn() || (src.status & NOPOWER)) + boutput(user, SPAN_ALERT("The door has no power - you can't raise/lower the door bolts.")) + return + if(src.locked) + src.set_unlocked() + else + logTheThing(LOG_STATION, user || usr, "[user || usr] has bolted a door at [log_loc(src)].") + src.set_locked() + +/obj/machinery/door/airlock/proc/shock_perm(mob/user) + if(!src.arePowerSystemsOn() || (src.status & NOPOWER)) + boutput(user, SPAN_ALERT("The door has no power - you can't electrify it.")) + return + //electrify door indefinitely + if(!src.can_shock) + boutput(user, SPAN_ALERT("This door is unable to be electrified.<br><br>")) + if (src.isWireCut(AIRLOCK_WIRE_ELECTRIFY)) + boutput(user, SPAN_ALERT("The electrification wire has been cut.<br><br>")) + else if (src.secondsElectrified==-1) + boutput(user, SPAN_ALERT("The door is already indefinitely electrified.<br><br>")) + else if (src.secondsElectrified!=0) + boutput(user, SPAN_ALERT("The door is already electrified. You can't re-electrify it while it's already electrified.<br><br>")) + else + logTheThing(LOG_COMBAT, user || usr, "electrified airlock ([src]) at [log_loc(src)] indefinitely.") + message_admins("[key_name(user || usr)] electrified airlock ([src]) at [log_loc(src)] indefinitely.") + src.secondsElectrified = -1 + +/obj/machinery/door/airlock/proc/shock_restore(mob/user) + //un-electrify door + if(!src.arePowerSystemsOn() || (src.status & NOPOWER)) + boutput(user, "The door has no power - you can't electrify it.") + return + if (src.isWireCut(AIRLOCK_WIRE_ELECTRIFY)) + boutput(user, SPAN_ALERT("Can't un-electrify the airlock - The electrification wire is cut.<br><br>")) + else if (src.secondsElectrified!=0) + src.secondsElectrified = 0 + logTheThing(LOG_COMBAT, user || usr, "de-electrified airlock ([src]) at [log_loc(src)].") + message_admins("[key_name(user || usr)] de-electrified airlock ([src]) at [log_loc(src)].") + + +/obj/machinery/door/airlock/proc/idscantoggle(mob/user) + if(!src.arePowerSystemsOn() || (src.status & NOPOWER)) + boutput(user, SPAN_ALERT("The door has no power - you toggle the ID scanner.")) + return + //enable/disable ID scanner + if (src.isWireCut(AIRLOCK_WIRE_IDSCAN)) + boutput(user, "The IdScan wire has been cut - So, you can't disable it, but it is already disabled anyways.") + else + src.aiDisabledIdScanner = !src.aiDisabledIdScanner + + +/obj/machinery/door/airlock/proc/user_toggle_open(mob/user) + if (src.operating == 1) + return + if((!src.arePowerSystemsOn()) || (src.status & NOPOWER) || src.isWireCut(AIRLOCK_WIRE_OPEN_DOOR)) + boutput(user, SPAN_ALERT("The door has no power - you can't open/close it.")) + return + if(src.welded) + boutput(user, SPAN_ALERT("The airlock has been welded shut!")) + else if(locked) + boutput(user, SPAN_ALERT("The door bolts are down!")) + else if(!density) + close() + else + open() + +// ================= global procs ================== + +//This generates the randomized airlock wire assignments for the game. +/proc/RandomAirlockWires() + //to make this not randomize the wires, just set index to 1 and increment it in the flag for loop (after doing everything else). + var/list/wires = list(0, 0, 0, 0, 0, 0, 0, 0, 0, 0) + airlockIndexToFlag = list(0, 0, 0, 0, 0, 0, 0, 0, 0, 0) + airlockIndexToWireColor = list(0, 0, 0, 0, 0, 0, 0, 0, 0, 0) + airlockWireColorToIndex = list(0, 0, 0, 0, 0, 0, 0, 0, 0, 0) + var/flagIndex = 1 + for (var/flag=1, flag<1024, flag+=flag) + var/valid = 0 + while (!valid) + var/colorIndex = rand(1, 10) + if (wires[colorIndex]==0) + valid = 1 + wires[colorIndex] = flag + airlockIndexToFlag[flagIndex] = flag + airlockIndexToWireColor[flagIndex] = colorIndex + airlockWireColorToIndex[colorIndex] = flagIndex + flagIndex+=1 + return wires + +/* Example: + Airlock wires color -> flag are { 64, 128, 256, 2, 16, 4, 8, 32, 1 }. + Airlock wires color -> index are { 7, 8, 9, 2, 5, 3, 4, 6, 1 }. + Airlock index -> flag are { 1, 2, 4, 8, 16, 32, 64, 128, 256 }. + Airlock index -> wire color are { 9, 4, 6, 7, 5, 8, 1, 2, 3 }. */ + +// undefining stuff #undef NET_ACCESS_OPTIONS #undef LINKED_FORCEFIELD_POWER_USAGE #undef OPEN_CLOSE_POWER_USAGE diff --git a/code/obj/machinery/door/airlock_gannets.dm b/code/obj/machinery/door/airlock_gannets.dm new file mode 100644 index 0000000000000..1847031f514d9 --- /dev/null +++ b/code/obj/machinery/door/airlock_gannets.dm @@ -0,0 +1,193 @@ +// ------------ gannets airlocks ------------ + +/obj/machinery/door/airlock/gannets + name = "airlock" + icon = 'icons/obj/doors/destiny.dmi' + icon_state = "gen_closed" + icon_base = "gen" + + alt + icon_state = "fgen_closed" + icon_base = "fgen" + welded_icon_state = "fgen_welded" + + command + name = "command airlock" + icon_state = "com_closed" + icon_base = "com" + req_access = list(access_heads) + + command/alt + icon_state = "fcom_closed" + icon_base = "fcom" + welded_icon_state = "fcom_welded" + + security + name = "security airlock" + icon_state = "sec_closed" + icon_base = "sec" + req_access = list(access_security) + + security/alt + icon_state = "fsec_closed" + icon_base = "fsec" + welded_icon_state = "fsec_welded" + + engineering + name = "engineering airlock" + icon_state = "eng_closed" + icon_base = "eng" + req_access = list(access_engineering) + + engineering/alt + icon_state = "feng_closed" + icon_base = "feng" + welded_icon_state = "feng_welded" + + medical + name = "medical airlock" + icon_state = "med_closed" + icon_base = "med" + req_access = list(access_medical) + + medical/alt + icon_state = "fmed_closed" + icon_base = "fmed" + welded_icon_state = "fmed_welded" + + morgue + name = "morgue airlock" + icon_state = "morg_closed" + icon_base = "morg" + req_access = list(access_morgue) + + morgue/alt + icon_state = "fmorg_closed" + icon_base = "fmorg" + welded_icon_state = "fmorg_welded" + + chemistry + name = "chemistry airlock" + icon_state = "chem_closed" + icon_base = "chem" + req_access = list(access_research) + + chemistry/alt + icon_state = "fchem_closed" + icon_base = "fchem" + welded_icon_state = "fchem_welded" + + toxins + name = "toxins airlock" + icon_state = "tox_closed" + icon_base = "tox" + req_access = list(access_research) + + toxins/alt + icon_state = "ftox_closed" + icon_base = "ftox" + welded_icon_state = "ftox_welded" + + maintenance + name = "maintenance airlock" + icon_state = "maint_closed" + icon_base = "maint" + welded_icon_state = "maint_welded" + req_access = list(access_maint_tunnels) + +/obj/machinery/door/airlock/gannets/glass + name = "glass airlock" + icon = 'icons/obj/doors/destiny.dmi' + icon_state = "tgen_closed" + icon_base = "tgen" + opacity = 0 + visible = 0 + + alt + icon_state = "tfgen_closed" + icon_base = "tfgen" + welded_icon_state = "fgen_welded" + + command + name = "glass command airlock" + icon_state = "tcom_closed" + icon_base = "tcom" + req_access = list(access_heads) + + command/alt + icon_state = "tfcom_closed" + icon_base = "tfcom" + welded_icon_state = "fcom_welded" + + security + name = "glass security airlock" + icon_state = "tsec_closed" + icon_base = "tsec" + req_access = list(access_security) + + security/alt + icon_state = "tfsec_closed" + icon_base = "tfsec" + welded_icon_state = "fsec_welded" + + engineering + name = "glass engineering airlock" + icon_state = "teng_closed" + icon_base = "teng" + req_access = list(access_engineering) + + engineering/alt + icon_state = "tfeng_closed" + icon_base = "tfeng" + welded_icon_state = "feng_welded" + + medical + name = "glass medical airlock" + icon_state = "tmed_closed" + icon_base = "tmed" + req_access = list(access_medical) + + medical/alt + icon_state = "tfmed_closed" + icon_base = "tfmed" + welded_icon_state = "fmed_welded" + + morgue + name = "glass morgue airlock" + icon_state = "tmorg_closed" + icon_base = "tmorg" + req_access = list(access_morgue) + + morgue/alt + icon_state = "tfmorg_closed" + icon_base = "tfmorg" + welded_icon_state = "fmorg_welded" + + chemistry + name = "glass chemistry airlock" + icon_state = "tchem_closed" + icon_base = "tchem" + req_access = list(access_research) + + chemistry/alt + icon_state = "tfchem_closed" + icon_base = "tfchem" + welded_icon_state = "fchem_welded" + + toxins + name = "glass toxins airlock" + icon_state = "ttox_closed" + icon_base = "ttox" + req_access = list(access_research) + + toxins/alt + icon_state = "tftox_closed" + icon_base = "tftox" + welded_icon_state = "ftox_welded" + + maintenance + name = "glass maintenance airlock" + icon_state = "tmaint_closed" + icon_base = "tmaint" + welded_icon_state = "tmaint_welded" + req_access = list(access_maint_tunnels) diff --git a/code/obj/machinery/door/airlock_other.dm b/code/obj/machinery/door/airlock_other.dm new file mode 100644 index 0000000000000..6e9127aac0030 --- /dev/null +++ b/code/obj/machinery/door/airlock_other.dm @@ -0,0 +1,103 @@ +/obj/machinery/door/airlock/command + name = "command airlock" + icon = 'icons/obj/doors/Doorcom.dmi' + req_access = list(access_heads) + +/obj/machinery/door/airlock/security + name = "security airlock" + icon = 'icons/obj/doors/Doorsec.dmi' + req_access = list(access_security) + +/obj/machinery/door/airlock/engineering + name = "engineering airlock" + icon = 'icons/obj/doors/Dooreng.dmi' + req_access = list(access_engineering) + +/obj/machinery/door/airlock/medical + name = "medical airlock" + icon = 'icons/obj/doors/doormed.dmi' + req_access = list(access_medical) + +/obj/machinery/door/airlock/maintenance + name = "maintenance airlock" + icon = 'icons/obj/doors/Doormaint.dmi' + req_access = list(access_maint_tunnels) + +/obj/machinery/door/airlock/external + name = "external airlock" + icon = 'icons/obj/doors/Doorext.dmi' + sound_airlock = 'sound/machines/airlock.ogg' + opacity = 0 + visible = 0 + operation_time = 10 + +/obj/machinery/door/airlock/classic + name = "large airlock" + icon = 'icons/obj/doors/Doorclassic.dmi' + sound_airlock = 'sound/machines/airlock.ogg' + operation_time = 10 + +// ------------ syndicate airlocks ------------ + +TYPEINFO(/obj/machinery/door/airlock/syndicate) + mats = 0 + +/obj/machinery/door/airlock/syndicate // fuck our players for making us (or at least me) need this + name = "reinforced external airlock" + desc = "Looks pretty tough. I wouldn't take this door on in a fight." + icon = 'icons/obj/doors/Doorext.dmi' + req_access_txt = "52" + cant_emag = TRUE + cyborgBumpAccess = FALSE + hardened = TRUE + aiControlDisabled = TRUE + object_flags = BOTS_DIRBLOCK + +/obj/machinery/door/airlock/syndicate/meteorhit() + return + +/obj/machinery/door/airlock/syndicate/ex_act() + return + +// ------------ centcomm airlocks ------------ + +TYPEINFO(/obj/machinery/door/airlock/centcom) + mats = 0 + +/obj/machinery/door/airlock/centcom + icon = 'icons/obj/doors/Doorcom.dmi' + req_access_txt = "57" + cant_emag = TRUE + cyborgBumpAccess = FALSE + hardened = TRUE + aiControlDisabled = TRUE + object_flags = BOTS_DIRBLOCK + +/obj/machinery/door/airlock/centcom/meteorhit() + return + +/obj/machinery/door/airlock/centcom/ex_act() + return + +// // ------------ glass airlocks ------------ + +/obj/machinery/door/airlock/glass + name = "glass airlock" + icon = 'icons/obj/doors/Doorglass.dmi' + opacity = 0 + visible = 0 + +/obj/machinery/door/airlock/glass/command + name = "command airlock" + icon = 'icons/obj/doors/Doorcom-glass.dmi' + req_access = list(access_heads) + +/obj/machinery/door/airlock/glass/engineering + name = "engineering airlock" + icon = 'icons/obj/doors/Dooreng-glass.dmi' + req_access = list(access_engineering) + +/obj/machinery/door/airlock/glass/medical + name = "medical airlock" + icon = 'icons/obj/doors/Doormed-glass.dmi' + req_access = list(access_medical) diff --git a/code/obj/machinery/door/airlock_pyro.dm b/code/obj/machinery/door/airlock_pyro.dm new file mode 100644 index 0000000000000..57970d4b99a25 --- /dev/null +++ b/code/obj/machinery/door/airlock_pyro.dm @@ -0,0 +1,419 @@ +// ------------ pyro airlocks ------------ + +/obj/machinery/door/airlock/pyro + name = "airlock" + icon = 'icons/obj/doors/SL_doors.dmi' + flags = FPRINT | IS_PERSPECTIVE_FLUID | ALWAYS_SOLID_FLUID + +/obj/machinery/door/airlock/pyro/safe + can_shock = FALSE + +/obj/machinery/door/airlock/pyro/alt + icon_state = "generic2_closed" + icon_base = "generic2" + panel_icon_state = "2_panel_open" + welded_icon_state = "2_welded" + +/obj/machinery/door/airlock/pyro/classic + name = "old airlock" + icon_state = "old_closed" + icon_base = "old" + panel_icon_state = "old_panel_open" + welded_icon_state = "old_welded" + sound_airlock = 'sound/machines/airlock.ogg' + operation_time = 10 + +// -------- command + +/obj/machinery/door/airlock/pyro/command + name = "command airlock" + icon_state = "com_closed" + icon_base = "com" + req_access = null + health = 800 + health_max = 800 + +TYPEINFO(/obj/machinery/door/airlock/pyro/command/centcom) + mats = 0 + +/obj/machinery/door/airlock/pyro/command/centcom + req_access_txt = "57" + cant_emag = TRUE + cyborgBumpAccess = FALSE + hardened = TRUE + aiControlDisabled = TRUE + object_flags = BOTS_DIRBLOCK + +/obj/machinery/door/airlock/pyro/command/alt + icon_state = "com2_closed" + icon_base = "com2" + panel_icon_state = "2_panel_open" + welded_icon_state = "2_welded" + req_access = null + +TYPEINFO(/obj/machinery/door/airlock/pyro/command/syndicate) + mats = 0 + +/obj/machinery/door/airlock/pyro/command/syndicate + req_access = list(access_syndicate_commander) + +// -------- security + +/obj/machinery/door/airlock/pyro/weapons + icon_state = "manta_closed" + icon_base = "manta" + panel_icon_state = "2_panel_open" + welded_icon_state = "2_welded" + req_access = null + hardened = TRUE + aiControlDisabled = TRUE + cyborgBumpAccess = FALSE + +/obj/machinery/door/airlock/pyro/weapons/noemag + req_access = null + cant_emag = TRUE + cyborgBumpAccess = FALSE + + + + +/obj/machinery/door/airlock/pyro/security + name = "security airlock" + icon_state = "sec_closed" + icon_base = "sec" + req_access = null + +/obj/machinery/door/airlock/pyro/security/alt + icon_state = "sec2_closed" + icon_base = "sec2" + panel_icon_state = "2_panel_open" + welded_icon_state = "2_welded" + req_access = null + +// -------- engineering + +/obj/machinery/door/airlock/pyro/engineering + name = "engineering airlock" + icon_state = "eng_closed" + icon_base = "eng" + req_access = null + +/obj/machinery/door/airlock/pyro/engineering/alt + icon_state = "eng2_closed" + icon_base = "eng2" + panel_icon_state = "2_panel_open" + welded_icon_state = "2_welded" + req_access = null + +/obj/machinery/door/airlock/pyro/mining + name = "mining airlock" + icon_state = "mining_closed" + icon_base = "mining" + panel_icon_state = "2_panel_open" + welded_icon_state = "2_welded" + req_access = null + +// -------- medsci + +/obj/machinery/door/airlock/pyro/medical + name = "medical airlock" + icon_state = "research_closed" + icon_base = "research" + req_access = null + +/obj/machinery/door/airlock/pyro/medical/alt + icon_state = "research2_closed" + icon_base = "research2" + panel_icon_state = "2_panel_open" + welded_icon_state = "2_welded" + req_access = null + +/obj/machinery/door/airlock/pyro/medical/alt2 + icon_state = "med_closed" + icon_base = "med" + panel_icon_state = "2_panel_open" + welded_icon_state = "2_welded" + req_access = null + +/obj/machinery/door/airlock/pyro/medical/morgue + icon_state = "morgue_closed" + icon_base = "morgue" + panel_icon_state = "2_panel_open" + welded_icon_state = "2_welded" + req_access = null + +/obj/machinery/door/airlock/pyro/sci_alt + name = "research airlock" + icon_state = "sci_closed" + icon_base = "sci" + panel_icon_state = "2_panel_open" + welded_icon_state = "2_welded" + req_access = null + +/obj/machinery/door/airlock/pyro/toxins_alt + name = "toxins airlock" + icon_state = "toxins2_closed" + icon_base = "toxins2" + panel_icon_state = "2_panel_open" + welded_icon_state = "2_welded" + req_access = null + +// -------- maintenance + +/obj/machinery/door/airlock/pyro/maintenance + name = "maintenance airlock" + icon_state = "maint_closed" + icon_base = "maint" + req_access = null + +/obj/machinery/door/airlock/pyro/maintenance/alt + icon_state = "maint2_closed" + icon_base = "maint2" + panel_icon_state = "2_panel_open" + welded_icon_state = "2_welded" + +// -------- external + +/obj/machinery/door/airlock/pyro/external + name = "external airlock" + icon_state = "airlock_closed" + icon_base = "airlock" + panel_icon_state = "airlock_panel_open" + welded_icon_state = "airlock_welded" + sound_airlock = 'sound/machines/airlock.ogg' + opacity = 0 + visible = 0 + operation_time = 10 + +TYPEINFO(/obj/machinery/door/airlock/pyro/reinforced) + mats = 0 + +/obj/machinery/door/airlock/pyro/reinforced + name = "reinforced external airlock" + desc = "Looks pretty tough. I wouldn't take this door on in a fight." + icon_state = "airlock_closed" + icon_base = "airlock" + panel_icon_state = "airlock_panel_open" + welded_icon_state = "airlock_welded" + sound_airlock = 'sound/machines/airlock.ogg' + operation_time = 10 + cant_emag = TRUE + hardened = TRUE + aiControlDisabled = TRUE + +/obj/machinery/door/airlock/pyro/reinforced/meteorhit() + return +/obj/machinery/door/airlock/pyro/reinforced/ex_act() + return +/obj/machinery/door/airlock/pyro/reinforced/blob_act(power) + return + +/obj/machinery/door/airlock/pyro/reinforced/syndicate + req_access_txt = "52" + cyborgBumpAccess = FALSE + +/obj/machinery/door/airlock/pyro/reinforced/arrivals + icon_state = "arrivals_closed" + icon_base = "arrivals" + opacity = 0 + visible = 0 + +// -------- glass + +/obj/machinery/door/airlock/pyro/glass + name = "glass airlock" + icon_state = "glass_closed" + icon_base = "glass" + panel_icon_state = "glass_panel_open" + welded_icon_state = "glass_welded" + opacity = 0 + visible = 0 + +TYPEINFO(/obj/machinery/door/airlock/pyro/glass/reinforced) + mats = 0 + +/obj/machinery/door/airlock/pyro/glass/reinforced + name = "reinforced glass airlock" + desc = "Looks pretty tough. I wouldn't take this door on in a fight." + operation_time = 10 + cant_emag = TRUE + hardened = TRUE + aiControlDisabled = TRUE + +/obj/machinery/door/airlock/pyro/glass/reinforced/meteorhit() + return +/obj/machinery/door/airlock/pyro/glass/reinforced/ex_act() + return +/obj/machinery/door/airlock/pyro/glass/reinforced/blob_act(power) + return + +/obj/machinery/door/airlock/pyro/glass/brig + req_access_txt = "2" + +/obj/machinery/door/airlock/pyro/glass/command + name = "command airlock" + icon_state = "com_glass_closed" + icon_base = "com_glass" + req_access = null + +/obj/machinery/door/airlock/pyro/glass/engineering + name = "engineering airlock" + icon_state = "eng_glass_closed" + icon_base = "eng_glass" + req_access = null + +/obj/machinery/door/airlock/pyro/glass/security //Shitty Azungar recolor, no need to thank me. + name = "security airlock" + icon_state = "sec_glass_closed" + icon_base = "sec_glass" + req_access = null + +/obj/machinery/door/airlock/pyro/glass/security/alt + name = "security airlock" + icon_state = "sec_glassalt_closed" + icon_base = "sec_glassalt" + req_access = null + +/obj/machinery/door/airlock/pyro/glass/med + name = "medical airlock" + icon_state = "med_glass_closed" + icon_base = "med_glass" + req_access = null + +/obj/machinery/door/airlock/pyro/glass/sci + name = "research airlock" + icon_state = "sci_glass_closed" + icon_base = "sci_glass" + req_access = null + +/obj/machinery/door/airlock/pyro/glass/toxins + name = "toxins airlock" + icon_state = "toxins_glass_closed" + icon_base = "toxins_glass" + req_access = null + +/obj/machinery/door/airlock/pyro/glass/mining + name = "mining airlock" + icon_state = "mining_glass_closed" + icon_base = "mining_glass" + req_access = null + +/obj/machinery/door/airlock/pyro/glass/botany + name = "botany airlock" + icon_state = "botany_glass_closed" + icon_base = "botany_glass" + req_access = null + +// -------- windoors + +/obj/machinery/door/airlock/pyro/glass/windoor + name = "thin glass airlock" + icon_state = "windoor_closed" + icon_base = "windoor" + panel_icon_state = "windoor_panel_open" + welded_icon_state = "glassdoor_welded" + sound_airlock = 'sound/machines/windowdoor.ogg' + has_crush = FALSE + health = 500 + health_max = 500 + layer = EFFECTS_LAYER_UNDER_4 // under lights and blinds, above pretty much everything else + object_flags = BOTS_DIRBLOCK | CAN_REPROGRAM_ACCESS | HAS_DIRECTIONAL_BLOCKING + flags = FPRINT | IS_PERSPECTIVE_FLUID | ALWAYS_SOLID_FLUID | ON_BORDER + event_handler_flags = USE_FLUID_ENTER + +/obj/machinery/door/airlock/pyro/glass/windoor/opened() + layer = COG2_WINDOW_LAYER //this is named weirdly, but seems right + . = ..() + +/obj/machinery/door/airlock/pyro/glass/windoor/close() + layer = EFFECTS_LAYER_UNDER_4 + . = ..() + +/obj/machinery/door/airlock/pyro/glass/windoor/bumpopen(atom/movable/AM) + if (src.density) + src.autoclose = TRUE + ..() + +/obj/machinery/door/airlock/pyro/glass/windoor/attack_hand(mob/user) + if (src.density) + src.autoclose = FALSE + ..(user) + +/obj/machinery/door/airlock/pyro/glass/windoor/Cross(atom/movable/mover) + if (istype(mover, /obj/projectile)) + var/obj/projectile/P = mover + if (P.proj_data.window_pass) + return 1 + + if (get_dir(loc, mover) & dir) // Check for appropriate border. + if(density && mover && mover.flags & DOORPASS && !src.cant_emag) + if (ismob(mover) && mover:pulling && src.bumpopen(mover)) + // If they're pulling something and the door would open anyway, + // just let the door open instead. + return 0 + animate_door_squeeze(mover) + return 1 // they can pass through a closed door + return !density + else + return 1 + +/obj/machinery/door/airlock/pyro/glass/windoor/gas_cross(turf/target) + if(get_dir(loc, target) & dir) + return !density + else + return TRUE + +/obj/machinery/door/airlock/pyro/glass/windoor/Uncross(atom/movable/mover, do_bump = TRUE) + if (istype(mover, /obj/projectile)) + var/obj/projectile/P = mover + if (P.proj_data.window_pass) + return TRUE + if (get_dir(loc, mover.movement_newloc) & dir) + if(density && mover && mover.flags & DOORPASS && !src.cant_emag) + if (ismob(mover) && mover:pulling && src.bumpopen(mover)) + // If they're pulling something and the door would open anyway, + // just let the door open instead. + . = FALSE + UNCROSS_BUMP_CHECK(mover) + return + animate_door_squeeze(mover) + return TRUE // they can pass through a closed door + . = !density + else + . = TRUE + UNCROSS_BUMP_CHECK(mover) +/obj/machinery/door/airlock/pyro/glass/windoor/update_nearby_tiles(need_rebuild) + if (!air_master) return 0 + + var/turf/simulated/source = loc + var/turf/simulated/target = get_step(source,dir) + + if (need_rebuild) + if (istype(source)) // Rebuild resp. update nearby group geometry. + if (source.parent) + air_master.groups_to_rebuild |= source.parent + else + air_master.tiles_to_update |= source + + if (istype(target)) + if (target.parent) + air_master.groups_to_rebuild |= target.parent + else + air_master.tiles_to_update |= target + else + if (istype(source)) air_master.tiles_to_update |= source + if (istype(target)) air_master.tiles_to_update |= target + + if (istype(source)) + source.selftilenotify() //for fluids + +/obj/machinery/door/airlock/pyro/glass/windoor/xmasify() + return + +/obj/machinery/door/airlock/pyro/glass/windoor/alt + icon_state = "windoor2_closed" + icon_base = "windoor2" + panel_icon_state = null + welded_icon_state = "windoor2_weld" + sound_airlock = 'sound/machines/windowdoor.ogg' + has_crush = FALSE diff --git a/code/obj/machinery/door/door_parent.dm b/code/obj/machinery/door/door_parent.dm index d9a26aeb23106..cd52e88015eeb 100644 --- a/code/obj/machinery/door/door_parent.dm +++ b/code/obj/machinery/door/door_parent.dm @@ -286,17 +286,17 @@ ADMIN_INTERACT_PROCS(/obj/machinery/door, proc/open, proc/close, proc/break_me_c last_used = world.time src.operating = -1 flick(text("[]_spark", src.icon_base), src) - sleep(0.6 SECONDS) - open() - return 1 - return 0 + SPAWN(0.6 SECONDS) + open() + return TRUE + return FALSE /obj/machinery/door/demag(var/mob/user) if (src.operating != -1) return 0 src.operating = 0 - sleep(0.6 SECONDS) - close() + SPAWN(0.6 SECONDS) + close() return 1 /obj/machinery/door/attackby(obj/item/I, mob/user) diff --git a/code/obj/machinery/food_and_drink/mixer.dm b/code/obj/machinery/food_and_drink/mixer.dm new file mode 100644 index 0000000000000..3ffc2449ac4c7 --- /dev/null +++ b/code/obj/machinery/food_and_drink/mixer.dm @@ -0,0 +1,251 @@ +/// Max amount of items allowed in mixer bowl +#define MIXER_MAX_CONTENTS 4 +/// Power used during mixing +#define MIXER_MIXING_POWER_USAGE 1 KILO WATTS +/// Mixing time in seconds +#define MIX_TIME 2 SECONDS + +var/list/mixer_recipes = list() + +TYPEINFO(/obj/machinery/mixer) + mats = 15 + +/obj/machinery/mixer + name = "KitchenHelper" + desc = "A food mixer." + icon = 'icons/obj/kitchen.dmi' + icon_state = "blender" + density = 1 + anchored = ANCHORED + flags = TGUI_INTERACTIVE + deconstruct_flags = DECON_WRENCH | DECON_CROWBAR | DECON_WELDER + var/list/recipes = null + var/list/to_remove = list() + var/allowed = list(/obj/item/reagent_containers/food/, /obj/item/parts/robot_parts/head, /obj/item/clothing/head/butt, /obj/item/organ/brain) + var/working = 0 + var/timeMixEnd = 0 + + New() + ..() + src.recipes = mixer_recipes + if (!src.recipes) + src.recipes = list() + + if (!src.recipes.len) + src.recipes += new /datum/cookingrecipe/mixer/mix_cake_custom(src) + src.recipes += new /datum/cookingrecipe/mixer/pancake_batter(src) + src.recipes += new /datum/cookingrecipe/mixer/brownie_batter(src) + src.recipes += new /datum/cookingrecipe/mixer/cake_batter(src) + src.recipes += new /datum/cookingrecipe/mixer/custard(src) + src.recipes += new /datum/cookingrecipe/mixer/mashedpotatoes(src) + src.recipes += new /datum/cookingrecipe/mixer/mashedbrains(src) + src.recipes += new /datum/cookingrecipe/mixer/gruel(src) + src.recipes += new /datum/cookingrecipe/mixer/fishpaste(src) + src.recipes += new /datum/cookingrecipe/mixer/meatpaste(src) + src.recipes += new /datum/cookingrecipe/mixer/wonton_wrapper(src) + src.recipes += new /datum/cookingrecipe/mixer/butters(src) + + src.UpdateIcon() + UnsubscribeProcess() + + attackby(obj/item/W, mob/user) + var/amount = length(src.contents) + if (amount >= MIXER_MAX_CONTENTS) + boutput(user, SPAN_ALERT("The mixer is full.")) + return + var/proceed = 0 + for(var/check_path in src.allowed) + if(istype(W, check_path)) + proceed = 1 + break + if (!proceed) + boutput(user, SPAN_ALERT("You can't put that in the mixer!")) + return + user.visible_message(SPAN_NOTICE("[user] puts [W] into the [src].")) + user.u_equip(W) + W.set_loc(src) + W.dropped(user) + tgui_process.update_uis(src) + + ui_interact(mob/user, datum/tgui/ui) + ui = tgui_process.try_update_ui(user, src, ui) + if(!ui) + ui = new(user, src, "MixerMachine") + ui.open() + + ui_static_data(mob/user) + . = list("maxItems" = MIXER_MAX_CONTENTS) + + ui_data(mob/user) + var/mixerContents = list() + var/index = 1 + for(var/obj/item/I in src.contents) + var/itemData = list() + itemData["name"] = I.name + itemData["index"] = index + itemData["iconData"] = get_item_icon(I) + mixerContents += list(itemData) + index += 1 + . = list("working" = src.working, "mixerContents" = mixerContents) + + proc/get_item_icon(var/obj/item/target) + var/static/base64_preview_cache = list() + var/original_name = initial(target.name) + . = base64_preview_cache[original_name] + + if(isnull(.)) + var/icon/result = getFlatIcon(target, no_anim=TRUE) + if(result) + . = icon2base64(result) + else + . = "" + base64_preview_cache[original_name] = . + + proc/ejectItemFromMixer(obj/item/target) + if (target) + if (BOUNDS_DIST(usr, src) == 0) + usr.put_in_hand_or_drop(target) + else + target.set_loc(src.loc) + + ui_act(action, params) + . = ..() + if (.) + return + + switch (action) + if ("eject") + var/index = params["index"] + var/obj/item/target = src.contents[index] + src.ejectItemFromMixer(target) + + usr.show_text(SPAN_NOTICE("You eject the [target.name] from the [src].")) + . = TRUE + + if ("mix") + src.mix() + . = TRUE + + if ("ejectAll") + for (var/obj/item/target in src.contents) + src.ejectItemFromMixer(target) + + usr.show_text(SPAN_NOTICE("You eject all contents from the [src].")) + . = TRUE + + attack_ai(var/mob/user as mob) + return ui_interact(user) + + MouseDrop_T(obj/item/W as obj, mob/user as mob) + if (istype(W) && in_interact_range(W, user) && in_interact_range(src, user) && isalive(user) && !isintangible(user)) + return src.Attackby(W, user) + return ..() + + proc/bowl_checkitem(var/recipeitem, var/recipecount) + if (!locate(recipeitem) in src.contents) return 0 + var/count = 0 + for(var/obj/item/I in src.contents) + if(istype(I, recipeitem)) + count++ + to_remove += I + + if (count < recipecount) + return 0 + return 1 + + proc/mix() + + var/amount = length(src.contents) + if (!amount) + boutput(usr, SPAN_ALERT("There's nothing in the mixer.")) + return + src.working = 1 + src.timeMixEnd = TIME + MIX_TIME + src.power_usage = MIXER_MIXING_POWER_USAGE + + tgui_process.update_uis(src) + src.UpdateIcon() + playsound(src.loc, 'sound/machines/mixer.ogg', 50, 1) + SubscribeToProcess() + + process() + . = ..() + if (status & (NOPOWER|BROKEN)) + UnsubscribeProcess() + return + + var/amount = length(src.contents) + if (!amount) + UnsubscribeProcess() + return + + if (TIME < src.timeMixEnd) + return + + var/output = null // /obj/item/reagent_containers/food/snacks/yuck + var/derivename = 0 + for (var/datum/cookingrecipe/R in src.recipes) + to_remove.len = 0 + if (R.item1) + if (!bowl_checkitem(R.item1, R.amt1)) continue + if (R.item2) + if (!bowl_checkitem(R.item2, R.amt2)) continue + if (R.item3) + if (!bowl_checkitem(R.item3, R.amt3)) continue + if (R.item4) + if (!bowl_checkitem(R.item4, R.amt4)) continue + output = R.specialOutput(src) + if (!output) + output = R.output + if (R.useshumanmeat) + derivename = 1 + break + + if (!isnull(output)) + var/obj/item/reagent_containers/food/snacks/F + if (ispath(output)) + F = new output(get_turf(src)) + else + F = output + F.set_loc(get_turf(src)) + + if (derivename) + var/foodname = F.name + for (var/obj/item/reagent_containers/food/snacks/ingredient/meat/humanmeat/M in src.contents) + F.name = "[M.subjectname] [foodname]" + F.desc += " It sort of smells like [M.subjectjob ? M.subjectjob : "pig"]s." + if(!isnull(F.unlock_medal_when_eaten)) + continue + else if (M.subjectjob && M.subjectjob == "Clown") + F.unlock_medal_when_eaten = "That tasted funny" + else + F.unlock_medal_when_eaten = "Space Ham" //replace the old fat person method + for (var/obj/item/I in to_remove) + qdel(I) + to_remove.len = 0 + + for (var/obj/I in src.contents) + I.set_loc(src.loc) + src.visible_message(SPAN_ALERT("[I] is tossed out of [src]!")) + var/edge = get_edge_target_turf(src, pick(alldirs)) + I.throw_at(edge, 25, 4) + + src.working = 0 + src.UpdateIcon() + playsound(src.loc, 'sound/machines/ding.ogg', 50, 1) + tgui_process.update_uis(src) + + src.power_usage = 0 + UnsubscribeProcess() + return + + update_icon() + if (!src || !istype(src)) + return + + if (src.working != 0) + src.icon_state = "blender_on" + else + src.icon_state = "blender" + + return diff --git a/code/obj/machinery/law_racks.dm b/code/obj/machinery/law_racks.dm index 143d374dcca58..0bd5dc807b109 100644 --- a/code/obj/machinery/law_racks.dm +++ b/code/obj/machinery/law_racks.dm @@ -583,19 +583,7 @@ if(isAI(R)) var/mob/living/silicon/ai/holoAI = R holoAI.holoHolder.text_expansion = src.holo_expansions.Copy() - - var/ability_type - var/datum/abilityHolder/silicon/ai/aiAH = R.abilityHolder - var/list/current_abilities = list() - for(var/datum/ability in aiAH.abilities) - current_abilities |= ability.type - var/list/abilities_to_remove = current_abilities - ai_abilities - for(ability_type in abilities_to_remove) - if (ispath(ability_type, /datum/targetable/ai/module)) - aiAH.removeAbility(ability_type) - var/list/abilities_to_add = ai_abilities - current_abilities - for(ability_type in abilities_to_add) - aiAH.addAbility(ability_type) + src.reset_ai_abilities(R) src.calculate_power_usage() for (var/mob/living/intangible/aieye/E in mobs) if(E.mainframe?.law_rack_connection == src) @@ -799,6 +787,20 @@ if (src.law_circuits[i]) src.power_usage += 100 + proc/reset_ai_abilities(mob/living/silicon/ai/target) + var/ability_type + var/datum/abilityHolder/silicon/ai/aiAH = target.abilityHolder + var/list/current_abilities = list() + for(var/datum/ability in aiAH.abilities) + current_abilities |= ability.type + var/list/abilities_to_remove = current_abilities - src.ai_abilities + for(ability_type in abilities_to_remove) + if (ispath(ability_type, /datum/targetable/ai/module)) + aiAH.removeAbility(ability_type) + var/list/abilities_to_add = src.ai_abilities - current_abilities + for(ability_type in abilities_to_add) + aiAH.addAbility(ability_type) + /particles/rack_smoke icon = 'icons/effects/effects.dmi' icon_state = list("smoke") diff --git a/code/obj/machinery/lightswitch.dm b/code/obj/machinery/lightswitch.dm index 571073023c754..3b56b91e047fd 100644 --- a/code/obj/machinery/lightswitch.dm +++ b/code/obj/machinery/lightswitch.dm @@ -2,6 +2,13 @@ // can have multiple per area // can also operate on non-loc area through "otherarea" var +/// Amount of time before a light switch resets its spam cooldown counter +#define SWITCH_SPAM_TIMEOUT 15 SECONDS +/// Number of manual toggles before the light switch begins shocking people +#define SWITCH_SPAM_START_THRESHOLD 10 +/// Number of manual toggles before light switches start really hurting people +#define SWITCH_SPAM_MAJOR_THRESHOLD 50 + TYPEINFO(/obj/machinery/light_switch) mats = list("MET-1"=10,"CON-1"=15) @@ -20,7 +27,8 @@ ADMIN_INTERACT_PROCS(/obj/machinery/light_switch, proc/trigger) var/id = null // luminosity = 1 var/datum/light/light - + var/toggled_count = 0 //! How many times has this been toggled + HELP_MESSAGE_OVERRIDE("You can use a <b>screwing tool</b> to tighten the wiring contacts.") /obj/machinery/light_switch/New() ..() @@ -113,12 +121,24 @@ ADMIN_INTERACT_PROCS(/obj/machinery/light_switch, proc/trigger) /obj/machinery/light_switch/get_desc(dist, mob/user) . = ..() - . += "A light switch. It is [on? "on" : "off"]." + . += " It is [on? "on" : "off"]." + switch(toggled_count) + if(SWITCH_SPAM_START_THRESHOLD to SWITCH_SPAM_MAJOR_THRESHOLD) + . += " It looks a bit loose." + if(SWITCH_SPAM_MAJOR_THRESHOLD to INFINITY) + . += " It's practically falling out of the wall." /obj/machinery/light_switch/attack_hand(mob/user) . = ..() if(!ON_COOLDOWN(src, "toggle", 1 SECOND)) toggle_group(user) + toggled_count += 1 + if (toggled_count < SWITCH_SPAM_START_THRESHOLD) + return + if(ON_COOLDOWN(src, "spam", SWITCH_SPAM_TIMEOUT)) + user.shock(src, toggled_count) + if (toggled_count >= SWITCH_SPAM_MAJOR_THRESHOLD) + elecflash(user.loc) /obj/machinery/light_switch/proc/toggle_group(mob/user=null) //flip *this* switch, update target area, then prompt the group to refresh accordingly on = !on @@ -147,6 +167,15 @@ ADMIN_INTERACT_PROCS(/obj/machinery/light_switch, proc/trigger) src.on = on_signal src.UpdateIcon() +/obj/machinery/light_switch/attackby(obj/item/I, mob/user) + if (isscrewingtool(I)) + if (!(status & NOPOWER) && src.on) + user.shock(src, 100) + src.toggled_count = 0 + src.visible_message(SPAN_NOTICE("[user] tightens the contacts on [src].")) + return + . = ..() + /obj/machinery/light_switch/power_change() if(!otherarea) @@ -180,3 +209,7 @@ ADMIN_INTERACT_PROCS(/obj/machinery/light_switch, proc/trigger) SPAWN(1 DECI SECOND) src.autoposition() ..() + +#undef SWITCH_SPAM_TIMEOUT +#undef SWITCH_SPAM_START_THRESHOLD +#undef SWITCH_SPAM_MAJOR_THRESHOLD diff --git a/code/obj/machinery/photocopier.dm b/code/obj/machinery/photocopier.dm index 21fcf304584f9..a4cce64475aad 100644 --- a/code/obj/machinery/photocopier.dm +++ b/code/obj/machinery/photocopier.dm @@ -145,8 +145,8 @@ TYPEINFO(/obj/machinery/photocopier) return boutput(user, "You load the paper bin into \the [src].") var/obj/item/paper_bin/P = w - src.paper_amount += w.amount - P.amount = 0 + src.paper_amount += P.amount_left + P.amount_left = 0 P.update() return diff --git a/code/obj/machinery/plantpot.dm b/code/obj/machinery/plantpot.dm index 14df4bffb408b..ef92a2bd9e897 100644 --- a/code/obj/machinery/plantpot.dm +++ b/code/obj/machinery/plantpot.dm @@ -1057,38 +1057,7 @@ TYPEINFO(/obj/machinery/plantpot) if(((growing.isgrass || (growing.force_seed_on_harvest > 0 )) && prob(80)) && !istype(getitem,/obj/item/seed/) && !HYPCheckCommut(DNA,/datum/plant_gene_strain/seedless) && (growing.force_seed_on_harvest >= 0 )) // Same shit again. This isn't so much the crop as it is giving you seeds // incase you couldn't get them otherwise, though. - var/obj/item/seed/S - if(growing.unique_seed) - S = new growing.unique_seed - S.set_loc(src) - else - S = new /obj/item/seed - S.set_loc(src) - S.removecolor() - var/datum/plantgenes/HDNA = src.plantgenes - var/datum/plantgenes/SDNA = S.plantgenes - if(!growing.unique_seed && !growing.hybrid) - S.generic_seed_setup(growing, TRUE) - - var/seedname = "[growing.name]" - if(istype(MUT,/datum/plantmutation/)) - if(!MUT.name_prefix && !MUT.name_suffix && MUT.name) - seedname = "[MUT.name]" - else if(MUT.name_prefix || MUT.name_suffix) - seedname = "[MUT.name_prefix][growing.name][MUT.name_suffix]" - - S.name = "[seedname] seed" - S.plant_seed_color(growing.seedcolor) - HYPpassplantgenes(HDNA,SDNA) - S.generation = src.generation - if(growing.hybrid) - var/plantType = growing.type - var/datum/plant/hybrid = new plantType(S) - for(var/V in growing.vars) - if(issaved(growing.vars[V]) && V != "holder") - hybrid.vars[V] = growing.vars[V] - S.planttype = hybrid - + HYPgenerateseedcopy(src.plantgenes, growing, src.generation, src) seedcount++ // Give XP based on base quality of crop harvest. Will make better later, like so more plants harvasted and stuff, this is just for testing. diff --git a/code/obj/machinery/printing_press.dm b/code/obj/machinery/printing_press.dm index 8ac4809582698..79514f703829b 100644 --- a/code/obj/machinery/printing_press.dm +++ b/code/obj/machinery/printing_press.dm @@ -199,17 +199,17 @@ /obj/machinery/printing_press/attackby(var/obj/item/W, mob/user) if (istype(W, /obj/item/paper_bin)) var/obj/item/paper_bin/P = W - if (P.amount > 0 && src.paper_amt <= src.paper_max) //if the paper bin has paper, and adding the paper bin doesnt add too much paper + if (P.amount_left > 0 && src.paper_amt <= src.paper_max) //if the paper bin has paper, and adding the paper bin doesnt add too much paper boutput(user, "You load \the [P] into \the [src].") var/amount_to_take = src.paper_max - src.paper_amt - var/amount_taken = min(amount_to_take, P.amount) + var/amount_taken = min(amount_to_take, P.amount_left) src.paper_amt += amount_taken UpdateIcon() - P.amount = P.amount - amount_taken + P.amount_left = P.amount_left - amount_taken P.update() return else - if (P.amount <= 0) + if (P.amount_left <= 0) if (length(P.contents) > 0) boutput(user, "\The [P] has no unsoiled sheets left in it.") // someone put junk paper in the bin else diff --git a/code/obj/machinery/singularity.dm b/code/obj/machinery/singularity.dm index 2b6b957062b81..aa045508eda8c 100644 --- a/code/obj/machinery/singularity.dm +++ b/code/obj/machinery/singularity.dm @@ -406,7 +406,7 @@ for some reason I brought it back and tried to clean it up a bit and I regret ev gain += A.material.getProperty("n_radioactive") * 6 * A.material_amt if(isitem(A)) var/obj/item/I = A - gain *= I.amount + gain *= min(I.amount, INFINITY) if (A.reagents) gain += min(A.reagents.total_volume/4, 50) @@ -804,7 +804,7 @@ TYPEINFO(/obj/machinery/field_generator) return var/positions = src.get_welding_positions() actions.start(new /datum/action/bar/private/welding(user, src, 2 SECONDS, /obj/machinery/field_generator/proc/weld_action, \ - list(user), "[user] finishes using their [W.name] on the field generator.", positions[1], positions[2]),user) + list(user), "[user] finishes using [his_or_her(user)] [W.name] on the field generator.", positions[1], positions[2]),user) if(state == WRENCHED) boutput(user, "You start to weld the field generator to the floor.") return @@ -1257,7 +1257,7 @@ TYPEINFO(/obj/machinery/emitter) return var/positions = src.get_welding_positions() actions.start(new /datum/action/bar/private/welding(user, src, 2 SECONDS, /obj/machinery/emitter/proc/weld_action, \ - list(user), "[user] finishes using their [W.name] on the emitter.", positions[1], positions[2]),user) + list(user), "[user] finishes using [his_or_her(user)] [W.name] on the emitter.", positions[1], positions[2]),user) if(state == WRENCHED) boutput(user, "You start to weld the emitter to the floor.") return @@ -1739,6 +1739,7 @@ TYPEINFO(/obj/machinery/power/collector_control) TYPEINFO(/obj/machinery/the_singularitybomb) mats = 14 +ADMIN_INTERACT_PROCS(/obj/machinery/the_singularitybomb, proc/prime, proc/abort) /obj/machinery/the_singularitybomb name = "\improper Singularity Bomb" desc = "A WMD that creates a singularity." @@ -1836,27 +1837,12 @@ TYPEINFO(/obj/machinery/the_singularitybomb) switch(href_list["spec"]) if("prime") if(!timing) - src.timing = 1 - processing_items |= src - src.icon_state = "portgen2" - - // And here (Convair880). - logTheThing(LOG_BOMBING, usr, "activated [src.name] ([src.time] seconds) at [log_loc(src)].") - message_admins("[key_name(usr)] activated [src.name] ([src.time] seconds) at [log_loc(src)].") - if (ismob(usr)) - src.activator = usr - + src.prime() else boutput(usr, SPAN_ALERT("\The [src] is already primed!")) if("abort") if(timing) - src.timing = 0 - src.icon_state = "portgen1" - - // And here (Convair880). - logTheThing(LOG_BOMBING, usr, "deactivated [src.name][src.activator ? " (primed by [constructTarget(src.activator,"bombing")]" : ""] at [log_loc(src)].") - message_admins("[key_name(usr)] deactivated [src.name][src.activator ? " (primed by [key_name(src.activator)])" : ""] at [log_loc(src)].") - + src.abort() else boutput(usr, SPAN_ALERT("\The [src] is already deactivated!")) if("timer") @@ -1895,6 +1881,23 @@ TYPEINFO(/obj/machinery/the_singularitybomb) return return +/obj/machinery/the_singularitybomb/proc/prime() + src.timing = 1 + processing_items |= src + src.icon_state = "portgen2" + logTheThing(LOG_BOMBING, usr, "activated [src.name] ([src.time] seconds) at [log_loc(src)].") + message_admins("[key_name(usr)] activated [src.name] ([src.time] seconds) at [log_loc(src)].") + if (ismob(usr)) + src.activator = usr + +/obj/machinery/the_singularitybomb/proc/abort() + src.timing = 0 + src.icon_state = "portgen1" + + // And here (Convair880). + logTheThing(LOG_BOMBING, usr, "deactivated [src.name][src.activator ? " (primed by [constructTarget(src.activator,"bombing")]" : ""] at [log_loc(src)].") + message_admins("[key_name(usr)] deactivated [src.name][src.activator ? " (primed by [key_name(src.activator)])" : ""] at [log_loc(src)].") + /obj/machinery/the_singularitybomb/attack_ai(mob/user as mob) return diff --git a/code/obj/machinery/spaceheater.dm b/code/obj/machinery/spaceheater.dm index c4c60cfde181d..fc0e1d792d310 100644 --- a/code/obj/machinery/spaceheater.dm +++ b/code/obj/machinery/spaceheater.dm @@ -8,78 +8,100 @@ TYPEINFO(/obj/machinery/space_heater) icon_state = "sheater0" name = "space HVAC" desc = "Made by Space Amish using traditional space techniques, this space heater is guaranteed not to set the station on fire." - var/emagged = 0 + var/emagged = FALSE var/obj/item/cell/cell - var/on = 0 - var/heating = 0 - var/open = 0 - var/set_temperature = 50 // in celcius, add T0C for kelvin - var/heating_power = 40000 - var/cooling_power = -30000 + var/open = FALSE + var/on = FALSE + var/heating = FALSE // If its cooling down (false) or heating up (true) the current atmosphere + var/set_temperature = T0C+50 + var/heating_power = 400 /// fake heat capacity + var/cooling_power = -300 deconstruct_flags = DECON_WRENCH | DECON_WELDER - flags = FPRINT + flags = FPRINT | TGUI_INTERACTIVE + #define max (src.emagged ? T0C+400 : T0C+90) + #define min (src.emagged ? T0C-120 : T0C-90) New() ..() - cell = new(src) - cell.charge = 1000 - cell.maxcharge = 1000 + src.cell = new(src) + src.cell.charge = 1000 + src.cell.maxcharge = 1000 UpdateIcon() return + ui_interact(mob/user, datum/tgui/ui) + ui = tgui_process.try_update_ui(user, src, ui) + if(!ui) + ui = new(user, src, "space_heater", src.name) + ui.open() + + ui_data(mob/user) + . = list() + .["on"] = src.on + .["max"] = max + .["min"] = min + .["heating"] = src.heating + .["emagged"] = src.emagged + .["set_temperature"] = src.set_temperature + .["cell"] = src.cell + if (src.cell != null) // Cant get the cell variables if it doesnt exist + .["cell_name"] = src.cell.name + .["cell_charge"] = src.cell.percent() + update_icon() - if (on) - if(heating) + if (src.on) + if(src.heating) icon_state = "sheaterH" else icon_state = "sheaterC" else icon_state = "sheater0" - if(open) + if (src.open) icon_state = "sheater-open" return emag_act(var/mob/user, var/obj/item/card/emag/E) if (!src.emagged) - if (open) + if (src.open) if (user) user.show_text("You short out the temperature limiter circuit in the [src].", "blue") - src.emagged = 1 - src.desc = "Made by Space Amish using traditional space techniques, this heater is guaranteed to set the station on fire." - return 1 + src.emagged = TRUE + return TRUE else if (user) user.show_text("The internal circuitry must be exposed!", "red") - return 0 + return FALSE else if (user) user.show_text("The temperature limiter is already burned out.", "red") - return 0 + return FALSE demag(mob/user) if (!src.emagged) - return 0 + return FALSE if (user) user.show_text("You repair the temperature regulator in the [src].", "blue") - src.desc = "Made by Space Amish using traditional space techniques, this heater is guaranteed not to set the station on fire." - src.emagged = 0 - return 1 + src.emagged = FALSE + return TRUE - - examine() + get_desc() . = ..() - . += "The HVAC is [on ? "on" : "off"], [heating ? "heating" : "cooling"] and the hatch is [open ? "open" : "closed"]." - if(open) - . += "The power cell is [cell ? "installed" : "missing"]." + if (src.emagged) + src.desc = "Made by Space Amish using traditional space techniques, this heater is guaranteed to set the station on fire." else - . += "The charge meter reads [cell ? round(cell.percent(),1) : 0]%" - + src.desc = "Made by Space Amish using traditional space techniques, this heater is guaranteed not to set the station on fire." + . += "The HVAC is [src.on ? "on" : "off"], and [src.heating ? "heating" : "cooling"] the environment." + . += "The power cell is [src.cell ? "installed" : "missing"]." + if(src.open) + . += "The power cell is [cell ? "installed" : "missing"]." + if (src.cell != null) + . += "The charge meter reads [src.cell ? round(src.cell.percent(),1) : 0]%" attackby(obj/item/I, mob/user) if(istype(I, /obj/item/cell)) - if(open) - if(cell) + if(src.open) + if(src.cell) boutput(user, "There is already a power cell inside.") return else @@ -87,7 +109,7 @@ TYPEINFO(/obj/machinery/space_heater) var/obj/item/cell/C = user.equipped() if(istype(C)) user.drop_item() - cell = C + src.cell = C C.set_loc(src) C.add_fingerprint(user) @@ -96,15 +118,14 @@ TYPEINFO(/obj/machinery/space_heater) boutput(user, "The hatch must be open to insert a power cell.") return else if (isscrewingtool(I)) - open = !open - user.visible_message(SPAN_NOTICE("[user] [open ? "opens" : "closes"] the hatch on the [src]."), SPAN_NOTICE("You [open ? "open" : "close"] the hatch on the [src].")) + src.open = !src.open + user.visible_message(SPAN_NOTICE("[user] [open ? "opens" : "closes"] the hatch on the [src]."), SPAN_NOTICE("You [src.open ? "open" : "close"] the hatch on the [src].")) + if (!src.open) + tgui_process.close_uis(src) UpdateIcon() - if(!open && user.using_dialog_of(src)) - user.Browse(null, "window=spaceheater") - src.remove_dialog(user) else if (iswrenchingtool(I)) if (user) - user.show_text("You [anchored ? "release" : "anchor"] the [src]", "blue") + user.show_text("You [src.anchored ? "release" : "anchor"] the [src]", "blue") src.anchored = !src.anchored playsound(src.loc, 'sound/items/Ratchet.ogg', 40, 0, 0) else @@ -113,111 +134,71 @@ TYPEINFO(/obj/machinery/space_heater) attack_hand(mob/user) src.add_fingerprint(user) - if(open) - - var/dat - dat = "Power cell: " - if(cell) - dat += "<A href='byond://?src=\ref[src];op=cellremove'>Installed</A><BR>" - else - dat += "<A href='byond://?src=\ref[src];op=cellinstall'>Removed</A><BR>" - - dat += "Power Level: [cell ? round(cell.percent(),1) : 0]%<BR><BR>" - - dat += "Set Temperature: " - - dat += "<A href='?src=\ref[src];op=temp;val=-10'>--</A> <A href='?src=\ref[src];op=temp;val=-5'>-</A>" - - dat += " <A href='?src=\ref[src];op=set_temp'>[set_temperature]°C</A> " - - dat += "<A href='?src=\ref[src];op=temp;val=5'>+</A> <A href='?src=\ref[src];op=temp;val=10'>++</A><BR>" - - src.add_dialog(user) - user.Browse("<HEAD><TITLE>Space Heater Control Panel</TITLE></HEAD><TT>[dat]</TT>", "window=spaceheater") - onclose(user, "spaceheater") - - - - + if(src.open) + ui_interact(user) else - if (on && src.emagged) + if (src.on && src.emagged) user.show_text("The button seems to be stuck!", "red") else - on = !on - user.visible_message(SPAN_NOTICE("[user] switches [on ? "on" : "off"] the [src]."),SPAN_NOTICE("You switch [on ? "on" : "off"] the [src].")) + src.on = !src.on + user.visible_message(SPAN_NOTICE("[user] switches [src.on ? "on" : "off"] the [src]."),SPAN_NOTICE("You switch [src.on ? "on" : "off"] the [src].")) UpdateIcon() - - - - if (on) + if (src.on) playsound(src.loc, 'sound/machines/heater_on.ogg', 50, 1) else playsound(src.loc, 'sound/machines/heater_off.ogg', 50, 1) return - - Topic(href, href_list) - if (usr.stat) + ui_act(action, list/params) + . = ..() + if (.) return - if ((in_interact_range(src, usr) && istype(src.loc, /turf)) || (issilicon(usr))) - src.add_dialog(usr) - - switch(href_list["op"]) - if("set_temp") - var/value = input(usr, "Target temperature (20C-[src.emagged ? 400 : 90]C):", "Enter Target Temperature", src.set_temperature) - if (!isnum(value)) return - var/max = src.emagged ? 400 : 90 - var/min = src.emagged ? -120 : 90 - - set_temperature = clamp(value, -min, max) - - if("temp") - var/value = text2num_safe(href_list["val"]) - var/max = src.emagged ? 400 : 90 - var/min = src.emagged ? -120 : 90 - - // limit to 20-90 degC - set_temperature = clamp(set_temperature + value, -min, max) - - if("cellremove") - if(open && cell && !usr.equipped()) - cell.UpdateIcon() - usr.put_in_hand_or_drop(cell) - cell = null - - usr.visible_message(SPAN_NOTICE("[usr] removes the power cell from \the [src]."), SPAN_NOTICE("You remove the power cell from \the [src].")) - - - if("cellinstall") - if(open && !cell) - var/obj/item/cell/C = usr.equipped() - if(istype(C)) - usr.drop_item() - cell = C - C.set_loc(src) - C.add_fingerprint(usr) - - usr.visible_message(SPAN_NOTICE("[usr] inserts a power cell into \the [src]."), SPAN_NOTICE("You insert the power cell into \the [src].")) - - updateDialog() - else - usr.Browse(null, "window=spaceheater") - src.remove_dialog(usr) - return - - + switch(action) + if("set_temp") + var/adjust_temperature = params["temperature_adjust"] + var/inputted_temperature = params["inputted_temperature"] // For dragging + if (adjust_temperature) + src.set_temperature = clamp((src.set_temperature + adjust_temperature), min , max) + else if (text2num_safe(inputted_temperature) != null) + src.set_temperature = clamp(text2num_safe(inputted_temperature), min , max) + . = TRUE + + if("cellremove") + var/obj/item/I = src.cell + if (!I) + boutput(usr, SPAN_ALERT("No cell found to eject.")) + return + I.set_loc(src.loc) + src.on = FALSE + usr.put_in_hand_or_eject(I) + usr.visible_message(SPAN_NOTICE("[usr] removes the power cell from \the [src]."), + SPAN_NOTICE("You remove the power cell from \the [src].")) + UpdateIcon() + . = TRUE + + if("cellinstall") + var/obj/item/cell = usr.equipped() + if(istype(cell, /obj/item/cell)) + if(src.cell) + boutput(usr, SPAN_ALERT("A cell is already loaded into the machine.")) + return + src.cell = cell + usr.drop_item() + cell.set_loc(src) + usr.visible_message(SPAN_NOTICE("[usr] inserts a power cell into \the [src]."), SPAN_NOTICE("You insert the power cell into \the [src].")) + . = TRUE process() - if(on) - if(cell?.charge > 0) + if(src.on) + if(src.cell?.charge > 0) var/turf/simulated/L = loc if(istype(L)) var/datum/gas_mixture/env = L.return_air() - if(env.temperature < (set_temperature+T0C)) - heating = 1 + if(env.temperature < (set_temperature)) + heating = TRUE else - heating = 0 + heating = FALSE var/transfer_moles = src.emagged ? 0.5 * TOTAL_MOLES(env) : 0.25 * TOTAL_MOLES(env) @@ -230,14 +211,14 @@ TYPEINFO(/obj/machinery/space_heater) var/heat_capacity = HEAT_CAPACITY(removed) //boutput(world, "heating ([heat_capacity])") var/current_power = 0 - if(heating) + if(src.heating) current_power = src.emagged ? src.heating_power * 3: src.heating_power - removed.temperature = (removed.temperature*heat_capacity + current_power)/heat_capacity + removed.temperature = (removed.temperature*heat_capacity + current_power * src.set_temperature)/heat_capacity else current_power = src.emagged ? src.cooling_power * 3: src.cooling_power - removed.temperature = (removed.temperature*heat_capacity + current_power)/heat_capacity + removed.temperature = (removed.temperature*heat_capacity + current_power * src.set_temperature)/heat_capacity - cell.use(abs(current_power)/20000) + src.cell.use(abs(current_power)/20000) //boutput(world, "now at [removed.temperature]") @@ -247,7 +228,7 @@ TYPEINFO(/obj/machinery/space_heater) else - on = 0 + src.on = 0 UpdateIcon() @@ -258,6 +239,9 @@ TYPEINFO(/obj/machinery/space_heater) if(Obj == src.cell) src.cell = null + #undef max + #undef min + TYPEINFO(/obj/machinery/sauna_stove) mats = 8 diff --git a/code/obj/machinery/traymachines.dm b/code/obj/machinery/traymachines.dm index c836836584c1a..3adaba9275763 100644 --- a/code/obj/machinery/traymachines.dm +++ b/code/obj/machinery/traymachines.dm @@ -319,11 +319,15 @@ ABSTRACT_TYPE(/obj/machine_tray) var/id = 1 //crema switch uses this when finding crematoria var/obj/machinery/crema_switch/igniter = null tray_type = /obj/machine_tray/crematorium + var/active = FALSE icon_trayopen = "crema0" icon_unoccupied = "crema1" icon_occupied = "crema2" + medical + id = "medicalcremator" + New() . = ..() START_TRACKING @@ -341,12 +345,14 @@ ABSTRACT_TYPE(/obj/machine_tray) return if (src.locked) return //don't let you cremate something twice or w/e + if (src.active) + return if (!src.contents || !length(src.contents)) src.visible_message(SPAN_ALERT("You hear a hollow crackle, but nothing else happens.")) return + src.active = TRUE src.visible_message(SPAN_ALERT("You hear a roar as \the [src.name] activates.")) - src.locked = TRUE var/ashes = 0 power_usage = powerdraw_use //gotta chug them watts icon_state = "crema_active" @@ -362,23 +368,31 @@ ABSTRACT_TYPE(/obj/machine_tray) for (var/mob/living/L in contents) if (L in non_tray_contents) continue - L.changeStatus("stunned", 10 SECONDS) + L.changeStatus("burning", 15 SECONDS) + if (L in non_tray_contents) + continue + if (!L.is_heat_resistant()) + L.TakeDamage("chest", 0, 30) + if (!isdead(L)) + L.emote("scream") + + sleep(3 SECONDS) - sleep(1 SECOND) for (var/i in 1 to 10) if(isnull(src)) return for (var/mob/living/L in contents) if (L in non_tray_contents) continue - if (!L.is_heat_resistant()) - L.TakeDamage("chest", 0, 30) - if (!isdead(L) && prob(25)) - L.emote("scream") - sleep(1 SECOND) + L.changeStatus("burning", 30 SECONDS) + + sleep(6 SECONDS) if(isnull(src)) return + src.locked = TRUE // only lock when it's too late to escape + src.visible_message(SPAN_ALERT("\The [src.name] clunks locked!")) + sleep(1 SECOND) for (var/I in contents) if (I in non_tray_contents) continue @@ -404,6 +418,7 @@ ABSTRACT_TYPE(/obj/machine_tray) return src.visible_message(SPAN_ALERT("\The [src.name] finishes and shuts down.")) src.locked = FALSE + src.active = FALSE power_usage = initial(power_usage) playsound(src.loc, 'sound/machines/ding.ogg', 50, 1) @@ -431,6 +446,10 @@ ABSTRACT_TYPE(/obj/machine_tray) var/id = 1 var/list/obj/machinery/traymachine/locking/crematorium/crematoriums = null + medical + id = "medicalcremator" + req_access = list(access_medical_lockers) + disposing() for (var/obj/machinery/traymachine/locking/crematorium/O in src.crematoriums) O.igniter = null diff --git a/code/obj/mining.dm b/code/obj/mining.dm index 467276adff9ca..43839cc1e7ba6 100644 --- a/code/obj/mining.dm +++ b/code/obj/mining.dm @@ -704,7 +704,7 @@ if (magnetNotReady) return if (!target || !src.get_magnetic_center()) - boutput(usr, "Uh oh, something's gotten really fucked up with the magnet system. Please report this to a coder!") + src.visible_message("<b>[src.name]</b> armeds, \"Magnetic field strength error. Please ensure mining area is properly magnetized\"") return if (target.check_for_unacceptable_content()) @@ -717,7 +717,7 @@ if (magnetNotReady) return if (!target || !src.get_magnetic_center()) - boutput(usr, "Uh oh, something's gotten really fucked up with the magnet system. Please report this to a coder!") + src.visible_message("<b>[src.name]</b> armeds, \"Magnetic field strength error. Please ensure mining area is properly magnetized\"") return if (target.check_for_unacceptable_content()) diff --git a/code/obj/rack.dm b/code/obj/rack.dm index a0c2524881132..7a850c7e19a3f 100644 --- a/code/obj/rack.dm +++ b/code/obj/rack.dm @@ -154,3 +154,98 @@ playsound(the_rack, 'sound/items/Deconstruct.ogg', 50, TRUE) owner.visible_message(SPAN_NOTICE("[owner] disassembles [the_rack].")) the_rack.deconstruct() + +#define RACK_SPAWN_DIAGONAL_PROBABILITY 10 + +/// Map-spawn helper for regularly stacked rack items +/obj/rack/organized + var/initialized = FALSE //! Have we spawned our items yet + var/list/obj/item/items_to_spawn = list() //! What items are we going to spawn + var/order_override = "" //! Force a specific organization layout + var/shuffle_chance = 1 //! Probability of the card order being shuffled +#ifdef IN_MAP_EDITOR + icon_state = "rack_filled" +#endif + +/obj/rack/organized/New() + if (!src.initialized) + if (prob(shuffle_chance)) + shuffle_list(src.items_to_spawn) + switch(src.order_override) + if("zigzag") + src.zigzag() + if("diagonal") + src.diagonal() + else + if (prob(RACK_SPAWN_DIAGONAL_PROBABILITY)) + src.diagonal() + else + src.zigzag() + src.initialized = TRUE + . = ..() // spawn items before calculating sims_score + +#undef RACK_SPAWN_DIAGONAL_PROBABILITY + +#define RACK_ZIGZAG_TOP 7 +#define RACK_ZIGZAG_CENTER_OFFSET 5 +#define RACK_ZIGZAG_VERTICAL_OFFSET 2 + +/// Lay out items in a zig-zag pattern +/obj/rack/organized/proc/zigzag() + var/move_y = RACK_ZIGZAG_TOP + var/left_side = FALSE // start on upper right + for(var/item in src.items_to_spawn) + var/obj/item/I = new item(get_turf(src)) + I.pixel_y = move_y + I.pixel_x = left_side ? -RACK_ZIGZAG_CENTER_OFFSET : RACK_ZIGZAG_CENTER_OFFSET + move_y = move_y - RACK_ZIGZAG_VERTICAL_OFFSET // zig + left_side = !left_side // zag + +#undef RACK_ZIGZAG_TOP +#undef RACK_ZIGZAG_CENTER_OFFSET +#undef RACK_ZIGZAG_VERTICAL_OFFSET + +#define RACK_DIAGONAL_TOP 9 +#define RACK_DIAGONAL_OFFSET 3 + +/// Lay out items from top left to bottom right +/obj/rack/organized/proc/diagonal() + var/move_xy = RACK_DIAGONAL_TOP + for(var/item in src.items_to_spawn) + var/obj/item/I = new item(get_turf(src)) + I.pixel_y = move_xy + I.pixel_x = -move_xy + move_xy = move_xy - RACK_DIAGONAL_OFFSET + +#undef RACK_DIAGONAL_TOP +#undef RACK_DIAGONAL_OFFSET + +/// Technical Storage circuit board rack for engineering/supply +/obj/rack/organized/techstorage_eng + items_to_spawn = list( + /obj/item/circuitboard/qmorder, + /obj/item/circuitboard/qmsupply, + /obj/item/circuitboard/barcode, + /obj/item/circuitboard/barcode_qm, + /obj/item/circuitboard/telescope, + /obj/item/circuitboard/powermonitor, + /obj/item/circuitboard/powermonitor_smes, + ) + +/// Includes the transception array board, for maps with transception cargo fulfillment +/obj/rack/organized/techstorage_eng/transception + New() + src.items_to_spawn += /obj/item/circuitboard/transception + . = ..() + +/// Technical Storage circuit board rack for medical/science/misc +/obj/rack/organized/techstorage_med + items_to_spawn = list( + /obj/item/circuitboard/arcade, + /obj/item/circuitboard/card, + /obj/item/circuitboard/teleporter, + /obj/item/circuitboard/operating, + /obj/item/circuitboard/cloning, + /obj/item/circuitboard/genetics, + /obj/item/circuitboard/robot_module_rewriter, + ) diff --git a/code/obj/random_spawners.dm b/code/obj/random_spawners.dm index f8e0c15baf0b1..3be8d27169549 100644 --- a/code/obj/random_spawners.dm +++ b/code/obj/random_spawners.dm @@ -82,7 +82,7 @@ max_amt2spawn = 1 items2spawn = list(/obj/item/reagent_containers/food/snacks/candy/chocolate, /obj/item/reagent_containers/food/snacks/candy/nougat, - /obj/item/reagent_containers/food/snacks/candy/butterscotch, + /obj/item/reagent_containers/food/snacks/candy/wrapped_candy/butterscotch, /obj/item/reagent_containers/food/snacks/sandwich/meat_h, /obj/item/reagent_containers/food/snacks/sandwich/meat_m, /obj/item/reagent_containers/food/snacks/sandwich/meat_s, @@ -1769,12 +1769,14 @@ min_amt2spawn = 5 max_amt2spawn = 7 -/obj/random_item_spawner/kineticgun // used in the 4th of july admin button. +/obj/random_item_spawner/kineticgun //base type. split old behavior to fullrandom name = "firearm spawner" icon_state = "rand_gun" min_amt2spawn = 1 // doing it this way to preserve current use of spawner while allowing random amounts max_amt2spawn = 1 items2spawn = null + +/obj/random_item_spawner/kineticgun/fullrandom // used in the 4th of july admin button. New() items2spawn = concrete_typesof(/obj/item/gun/kinetic) - /obj/item/gun/kinetic/meowitzer //No, just no . = ..() @@ -1805,7 +1807,11 @@ /obj/item/gun/kinetic/sawnoff, /obj/item/gun/kinetic/single_action/colt_saa, /obj/item/gun/kinetic/single_action/flintlock, - /obj/item/gun/kinetic/zipgun) + /obj/item/gun/kinetic/zipgun, + /obj/item/gun/kinetic/makarov, + /obj/item/gun/kinetic/single_action/mts_255, + /obj/item/gun/kinetic/survival_rifle, + /obj/item/gun/kinetic/survival_rifle) one amt2spawn = 1 diff --git a/code/obj/stool.dm b/code/obj/stool.dm index f67b41332e0eb..fbee36af0ed74 100644 --- a/code/obj/stool.dm +++ b/code/obj/stool.dm @@ -293,6 +293,16 @@ TYPEINFO(/obj/stool/wooden) auto = 1 auto_path = /obj/stool/bench/yellow/auto +/* ---------- Purple ---------- */ + +/obj/stool/bench/purple + icon = 'icons/obj/furniture/bench_purple.dmi' + parts_type = /obj/item/furniture_parts/bench/purple + +/obj/stool/bench/purple/auto + auto = 1 + auto_path = /obj/stool/bench/purple/auto + /* ---------- Wooden ---------- */ /obj/stool/bench/wooden @@ -655,9 +665,10 @@ TYPEINFO(/obj/stool/chair) for (var/mob/living/M in src.loc) if (ishuman(M)) - chair_chump = M - if (!chair_chump || !chair_chump.on_chair) - chair_chump = null + var/mob/living/carbon/human/H = M + if (H.on_chair) + chair_chump = H + if (chair_chump)// == 1) if (chair_chump == L) user.visible_message(SPAN_NOTICE("<b>[chair_chump]</b> steps off [chair_chump.on_chair]."), SPAN_NOTICE("You step off [src].")) diff --git a/code/obj/storage/closets.dm b/code/obj/storage/closets.dm index 757d394f9c117..157e3012ca27a 100644 --- a/code/obj/storage/closets.dm +++ b/code/obj/storage/closets.dm @@ -134,7 +134,7 @@ TYPEINFO(/obj/storage/closet) if (prob(50)) new /obj/item/clothing/head/helmet/firefighter(src) if (prob(30)) - new /obj/item/clothing/suit/fire(src) + new /obj/item/clothing/suit/hazard/fire(src) new /obj/item/clothing/mask/gas/emergency(src) if (prob(10)) new /obj/item/storage/firstaid/fire(src) @@ -207,8 +207,8 @@ TYPEINFO(/obj/storage/closet/coffin) icon_opened = "syndicate-open" New() - ..() START_TRACKING_CAT(TR_CAT_NUKE_OP_STYLE) + ..() disposing() STOP_TRACKING_CAT(TR_CAT_NUKE_OP_STYLE) @@ -608,7 +608,7 @@ TYPEINFO(/obj/storage/closet/coffin) icon_state = "radiation" icon_opened = "radiation-open" desc = "A handy closet full of everything you need to protect yourself from impending doom of radioactive death." - spawn_contents = list(/obj/item/clothing/suit/rad = 1, + spawn_contents = list(/obj/item/clothing/suit/hazard/rad = 1, /obj/item/clothing/head/rad_hood = 1, /obj/item/storage/pill_bottle/antirad = 1, /obj/item/clothing/glasses/toggleable/meson = 1, diff --git a/code/obj/storage/crates.dm b/code/obj/storage/crates.dm index ac35b061ba8f4..cc772d538667e 100644 --- a/code/obj/storage/crates.dm +++ b/code/obj/storage/crates.dm @@ -740,7 +740,7 @@ TYPEINFO(/obj/storage/crate/chest) /obj/item/mining_tool) rad - spawn_contents = list(/obj/item/clothing/suit/rad, + spawn_contents = list(/obj/item/clothing/suit/hazard/rad, /obj/item/mine/radiation = 5, /obj/item/clothing/head/rad_hood, /obj/item/storage/pill_bottle/antirad, diff --git a/code/obj/storage/loot_crates.dm b/code/obj/storage/loot_crates.dm index 78b611c296a2b..379874254480c 100644 --- a/code/obj/storage/loot_crates.dm +++ b/code/obj/storage/loot_crates.dm @@ -60,7 +60,9 @@ /obj/item/gun/energy/phaser_huge = 10,\ /obj/item/clothing/ears/earmuffs/yeti = 20,\ /obj/item/clothing/lanyard = 20,\ - /obj/item/kitchen/utensil/knife/tracker = 10, + /obj/item/kitchen/utensil/knife/tracker = 10,\ + /obj/item/disk/data/floppy/manudrive/pocketoxyex/singleuse = 25,\ + /obj/item/disk/data/floppy/manudrive/pocketoxyex/threeuse = 5, // fun /obj/item/gun/bling_blaster = 20,\ /obj/item/clothing/under/gimmick/frog = 20,\ diff --git a/code/obj/storage/secure_closets.dm b/code/obj/storage/secure_closets.dm index 288d6bef97876..c28887ccb69ba 100644 --- a/code/obj/storage/secure_closets.dm +++ b/code/obj/storage/secure_closets.dm @@ -328,7 +328,6 @@ ADMIN_INTERACT_PROCS(/obj/storage/secure/closet, proc/break_open) name = "\improper Chief Engineer's locker" req_access = list(access_engineering_chief) spawn_contents = list( - /obj/item/storage/belt/utility/prepared/ceshielded, /obj/item/disk/data/floppy/manudrive/law_rack, /obj/item/storage/box/clothing/chief_engineer, /obj/item/device/radio/headset/command/ce, @@ -336,9 +335,9 @@ ADMIN_INTERACT_PROCS(/obj/storage/secure/closet, proc/break_open) /obj/item/device/flash, /obj/item/clothing/shoes/magnetic, /obj/item/clothing/gloves/yellow, - /obj/item/clothing/suit/fire/heavy, //now theres at least one on every map + /obj/item/clothing/suit/hazard/fire/heavy, //now theres at least one on every map /obj/item/clothing/head/helmet/firefighter, - /obj/item/clothing/suit/rad, //mostly relevant for singulo and nuke maps + /obj/item/clothing/suit/hazard/rad, //mostly relevant for singulo and nuke maps /obj/item/clothing/head/rad_hood, /obj/item/storage/toolbox/mechanical/yellow_tools, /obj/item/storage/box/misctools, @@ -354,7 +353,27 @@ ADMIN_INTERACT_PROCS(/obj/storage/secure/closet, proc/break_open) /obj/item/clothing/suit/space/light/engineer, /obj/item/clothing/head/helmet/space/light/engineer, #endif + ) +/obj/storage/secure/closet/command/chief_engineer/puzzle + locked = FALSE + spawn_contents = list( + /obj/item/storage/belt/utility/prepared/ceshielded, //instead of the law rack disk + /obj/item/storage/box/clothing/chief_engineer, + /obj/item/device/radio/headset/command/ce, + /obj/item/stamp/ce, + /obj/item/device/flash, + /obj/item/clothing/shoes/magnetic, + /obj/item/clothing/gloves/yellow, + /obj/item/clothing/suit/hazard/fire/heavy, + /obj/item/clothing/head/helmet/firefighter, + /obj/item/clothing/suit/hazard/rad, + /obj/item/clothing/head/rad_hood, + /obj/item/storage/toolbox/mechanical/yellow_tools, + /obj/item/storage/box/misctools, + /obj/item/extinguisher, + /obj/item/clothing/suit/space/light/engineer, + /obj/item/clothing/head/helmet/space/light/engineer, ) /* ==================== */ @@ -766,7 +785,7 @@ ADMIN_INTERACT_PROCS(/obj/storage/secure/closet, proc/break_open) /obj/storage/secure/closet/engineering/atmos name = "\improper Atmospheric Technician's locker" req_access = list(access_engineering_atmos) - spawn_contents = list(/obj/item/clothing/suit/fire, + spawn_contents = list(/obj/item/clothing/suit/hazard/fire, /obj/item/clothing/head/helmet/firefighter, /obj/item/device/analyzer/atmospheric/upgraded, /obj/item/clothing/glasses/toggleable/atmos, @@ -864,7 +883,8 @@ ADMIN_INTERACT_PROCS(/obj/storage/secure/closet, proc/break_open) /obj/item/satchel/hydro,\ /obj/item/reagent_containers/glass/wateringcan,\ /obj/item/sponge,\ - /obj/item/kitchen/food_box/egg_box/rancher) + /obj/item/kitchen/food_box/egg_box/rancher, + /obj/item/storage/box/knitting) /obj/storage/secure/closet/civilian/kitchen name = "\improper Catering supplies locker" diff --git a/code/obj/storage/wall_cabinet.dm b/code/obj/storage/wall_cabinet.dm index 661b9e2cbe79d..aa1e04c2ed41d 100644 --- a/code/obj/storage/wall_cabinet.dm +++ b/code/obj/storage/wall_cabinet.dm @@ -63,7 +63,7 @@ TYPEINFO(/obj/item/storage/wall) if (prob(50)) src.storage.add_contents(new /obj/item/clothing/head/helmet/firefighter(src)) if (prob(30)) - src.storage.add_contents(new /obj/item/clothing/suit/fire(src)) + src.storage.add_contents(new /obj/item/clothing/suit/hazard/fire(src)) src.storage.add_contents(new /obj/item/clothing/mask/gas/emergency(src)) if (prob(10)) src.storage.add_contents(new /obj/item/storage/firstaid/fire(src)) diff --git a/code/obj/submachine/chem_extractor.dm b/code/obj/submachine/chem_extractor.dm index 9b80cf477f975..decdba0f7aaa1 100644 --- a/code/obj/submachine/chem_extractor.dm +++ b/code/obj/submachine/chem_extractor.dm @@ -154,16 +154,21 @@ TYPEINFO(/obj/submachine/chem_extractor) . = TRUE src.UpdateIcon() + ui_close(mob/user) + . = ..() + if(inserted?.loc != src) + remove_distant_beaker(force = TRUE) + attackby(var/obj/item/W, var/mob/user) if(istype(W, /obj/item/reagent_containers/glass/) || istype(W, /obj/item/reagent_containers/food/drinks/)) tryInsert(W, user) ..() - proc/remove_distant_beaker() + proc/remove_distant_beaker(force = FALSE) // borgs and people with item arms don't insert the beaker into the machine itself // but whenever something would happen to the dispenser and the beaker is far it should disappear - if(src.inserted && BOUNDS_DIST(src.inserted, src) > 0) + if(src.inserted && (BOUNDS_DIST(src.inserted, src) > 0 || force)) if (src.inserted == src.extract_to) src.extract_to = null src.inserted = null src.UpdateIcon() diff --git a/code/obj/submachine/cooking.dm b/code/obj/submachine/cooking.dm index 359ad8034a8fe..3b0a09334542e 100644 --- a/code/obj/submachine/cooking.dm +++ b/code/obj/submachine/cooking.dm @@ -1,3 +1,4 @@ + TYPEINFO(/obj/submachine/chef_sink) mats = 12 @@ -792,6 +793,8 @@ table#cooktime a#start { src.recipes += new /datum/cookingrecipe/oven/hotdog(src) src.recipes += new /datum/cookingrecipe/oven/cheesewheel(src) src.recipes += new /datum/cookingrecipe/oven/turkey(src) + src.recipes += new /datum/cookingrecipe/oven/melted_sugar(src) + src.recipes += new /datum/cookingrecipe/oven/brownie_batch(src) // store the list for later oven_recipes = src.recipes @@ -1515,193 +1518,3 @@ TYPEINFO(/obj/submachine/foodprocessor) boutput(user, SPAN_NOTICE("You finish stuffing food into [src]!")) else ..() src.updateUsrDialog() - -var/list/mixer_recipes = list() - -TYPEINFO(/obj/submachine/mixer) - mats = 15 - -/obj/submachine/mixer - name = "KitchenHelper" - desc = "A food Mixer." - icon = 'icons/obj/kitchen.dmi' - icon_state = "blender" - density = 1 - anchored = ANCHORED - deconstruct_flags = DECON_WRENCH | DECON_CROWBAR | DECON_WELDER - var/list/recipes = null - var/list/to_remove = list() - var/allowed = list(/obj/item/reagent_containers/food/, /obj/item/parts/robot_parts/head, /obj/item/clothing/head/butt, /obj/item/organ/brain) - var/working = 0 - - New() - ..() - src.recipes = mixer_recipes - if (!src.recipes) - src.recipes = list() - - if (!src.recipes.len) - src.recipes += new /datum/cookingrecipe/mixer/mix_cake_custom(src) - src.recipes += new /datum/cookingrecipe/mixer/pancake_batter(src) - src.recipes += new /datum/cookingrecipe/mixer/cake_batter(src) - src.recipes += new /datum/cookingrecipe/mixer/custard(src) - src.recipes += new /datum/cookingrecipe/mixer/mashedpotatoes(src) - src.recipes += new /datum/cookingrecipe/mixer/mashedbrains(src) - src.recipes += new /datum/cookingrecipe/mixer/gruel(src) - src.recipes += new /datum/cookingrecipe/mixer/fishpaste(src) - src.recipes += new /datum/cookingrecipe/mixer/meatpaste(src) - src.recipes += new /datum/cookingrecipe/mixer/wonton_wrapper(src) - src.recipes += new /datum/cookingrecipe/mixer/butters(src) - - src.UpdateIcon() - return - - attackby(obj/item/W, mob/user) - var/amount = length(src.contents) - if (amount >= 4) - boutput(user, SPAN_ALERT("The mixer is full.")) - return - var/proceed = 0 - for(var/check_path in src.allowed) - if(istype(W, check_path)) - proceed = 1 - break - if (!proceed) - boutput(user, SPAN_ALERT("You can't put that in the mixer!")) - return - user.visible_message(SPAN_NOTICE("[user] puts [W] into the [src].")) - user.u_equip(W) - W.set_loc(src) - W.dropped(user) - - attack_hand(var/mob/user) - if (!src.working) - src.add_dialog(user) - var/dat = {"<B>KitchenHelper Mixer</B><BR> - <HR> - <B>Contents:</B><BR>"} - for (var/obj/item/I in src.contents) - dat += "[I]<BR>" - dat += {"<HR> - <A href='?src=\ref[src];mix=1'>Mix!</A><BR> - <A href='?src=\ref[src];eject=1'>Eject Contents</A>"} - user.Browse(dat, "window=mixer;size=400x500") - onclose(user, "mixer") - else - src.add_dialog(user) - var/dat = {"<B>KitchenHelper Mixer</B><BR> - <HR><BR> - Mixing! Please wait!"} - user.Browse(dat, "window=mixer;size=400x500") - onclose(user, "mixer") - - attack_ai(var/mob/user as mob) - return attack_hand(user) - - MouseDrop_T(obj/item/W as obj, mob/user as mob) - if (istype(W) && in_interact_range(W, user) && in_interact_range(src, user) && isalive(user) && !isintangible(user)) - return src.Attackby(W, user) - return ..() - - Topic(href, href_list) - if ((BOUNDS_DIST(src, usr) > 0 && (!issilicon(usr) && !isAI(usr))) || !isliving(usr) || iswraith(usr) || isintangible(usr)) - return - if (is_incapacitated(usr) || usr.restrained()) - return - - if (href_list["mix"]) - if (src.working) - boutput(usr, SPAN_ALERT("It's already working.")) - return - mix() - if(href_list["eject"]) - for (var/obj/item/I in src.contents) - I.set_loc(src.loc) - src.updateUsrDialog() - return - - proc/bowl_checkitem(var/recipeitem, var/recipecount) - if (!locate(recipeitem) in src.contents) return 0 - var/count = 0 - for(var/obj/item/I in src.contents) - if(istype(I, recipeitem)) - count++ - to_remove += I - - if (count < recipecount) - return 0 - return 1 - - proc/mix() - var/amount = length(src.contents) - if (!amount) - boutput(usr, SPAN_ALERT("There's nothing in the mixer.")) - return - working = 1 - src.UpdateIcon() - src.updateUsrDialog() - playsound(src.loc, 'sound/machines/mixer.ogg', 50, 1) - var/output = null // /obj/item/reagent_containers/food/snacks/yuck - var/derivename = 0 - for (var/datum/cookingrecipe/R in src.recipes) - to_remove.len = 0 - if (R.item1) - if (!bowl_checkitem(R.item1, R.amt1)) continue - if (R.item2) - if (!bowl_checkitem(R.item2, R.amt2)) continue - if (R.item3) - if (!bowl_checkitem(R.item3, R.amt3)) continue - if (R.item4) - if (!bowl_checkitem(R.item4, R.amt4)) continue - output = R.specialOutput(src) - if (!output) - output = R.output - if (R.useshumanmeat) - derivename = 1 - break - SPAWN(2 SECONDS) - - if (!isnull(output)) - var/obj/item/reagent_containers/food/snacks/F - if (ispath(output)) - F = new output(get_turf(src)) - else - F = output - F.set_loc(get_turf(src)) - - if (derivename) - var/foodname = F.name - for (var/obj/item/reagent_containers/food/snacks/ingredient/meat/humanmeat/M in src.contents) - F.name = "[M.subjectname] [foodname]" - F.desc += " It sort of smells like [M.subjectjob ? M.subjectjob : "pig"]s." - if(!isnull(F.unlock_medal_when_eaten)) - continue - else if (M.subjectjob && M.subjectjob == "Clown") - F.unlock_medal_when_eaten = "That tasted funny" - else - F.unlock_medal_when_eaten = "Space Ham" //replace the old fat person method - for (var/obj/item/I in to_remove) - qdel(I) - to_remove.len = 0 - - for (var/obj/I in src.contents) - I.set_loc(src.loc) - src.visible_message(SPAN_ALERT("[I] is tossed out of [src]!")) - var/edge = get_edge_target_turf(src, pick(alldirs)) - I.throw_at(edge, 25, 4) - - working = 0 - src.UpdateIcon() - src.updateUsrDialog() - return - - update_icon() - if (!src || !istype(src)) - return - - if (src.working != 0) - src.icon_state = "blender_on" - else - src.icon_state = "blender" - - return diff --git a/code/obj/submachine/robotics.dm b/code/obj/submachine/robotics.dm index 56de284080300..cd49bf63ad38b 100644 --- a/code/obj/submachine/robotics.dm +++ b/code/obj/submachine/robotics.dm @@ -701,7 +701,7 @@ ported and crapped up by: haine var/trans = src.reagents.trans_to(target, amount_per_transfer_from_this) user.show_text("You transfer [trans] unit\s of the solution to [target].") - if (reagents.total_volume == reagents.maximum_volume) // See if the juicer is full. + if (src.reagents.total_volume >= src.reagents.maximum_volume) // See if the juicer is full. user.show_text("[src] is full!", "red") return diff --git a/code/obj/submachine/seed.dm b/code/obj/submachine/seed.dm index 91d259ad07af6..3b480c1dc0b54 100644 --- a/code/obj/submachine/seed.dm +++ b/code/obj/submachine/seed.dm @@ -257,38 +257,11 @@ TYPEINFO(/obj/submachine/seed_manipulator) else boutput(ui.user, SPAN_NOTICE("Extracted [give] seeds from [I].")) while (give > 0) - var/obj/item/seed/S - if (stored.unique_seed) S = new stored.unique_seed(src) - else S = new /obj/item/seed(src,0) - var/datum/plantgenes/SDNA = S.plantgenes - if (!stored.unique_seed && !stored.hybrid) - S.generic_seed_setup(stored, TRUE) - HYPpassplantgenes(DNA,SDNA) - - S.name = stored.name - S.plant_seed_color(stored.seedcolor) - if (stored.hybrid) - var/hybrid_type = stored.type - var/datum/plant/hybrid = new hybrid_type(S) - for(var/V in stored.vars) - if (issaved(stored.vars[V]) && V != "holder") - hybrid.vars[V] = stored.vars[V] - S.planttype = hybrid - S.name = hybrid.name - - var/seedname = S.name - if (DNA.mutation && istype(DNA.mutation,/datum/plantmutation/)) - var/datum/plantmutation/MUT = DNA.mutation - if (!MUT.name_prefix && !MUT.name_prefix && MUT.name) - seedname = "[MUT.name]" - else if (MUT.name_prefix || MUT.name_suffix) - seedname = "[MUT.name_prefix][seedname][MUT.name_suffix]" - - S.name = "[seedname] seed" - - S.generation = P.generation - if (!src.seedoutput) src.seeds.Add(S) - else S.set_loc(src.loc) + var/obj/item/seed/S = HYPgenerateseedcopy(DNA, stored, P.generation, src) + if (!src.seedoutput) + src.seeds.Add(S) + else + S.set_loc(src.loc) give -= 1 src.extractables.Remove(I) qdel(I) diff --git a/code/obj/submachine/weapon_vendor.dm b/code/obj/submachine/weapon_vendor.dm index 1b8f872fadf74..62524d0517084 100644 --- a/code/obj/submachine/weapon_vendor.dm +++ b/code/obj/submachine/weapon_vendor.dm @@ -167,8 +167,8 @@ return New() - ..() START_TRACKING_CAT(TR_CAT_NUKE_OP_STYLE) + ..() // List of avaliable objects for purchase materiel_stock += new/datum/materiel/sidearm/smartgun materiel_stock += new/datum/materiel/sidearm/pistol diff --git a/code/obj/table.dm b/code/obj/table.dm index 6addab253a37d..93aa1ff03cc87 100644 --- a/code/obj/table.dm +++ b/code/obj/table.dm @@ -376,6 +376,18 @@ TYPEINFO_NEW(/obj/table) return actions.start(new /datum/action/bar/icon/railing_jump/table_jump(M, src), M) + hitby(atom/movable/AM, datum/thrown_thing/thr) + . = ..() + if (ismob(AM)) + if (AM != thr.user && (BOUNDS_DIST(thr.user, src) <= 0)) + var/remove_tablepass = HAS_FLAG(AM.flags, TABLEPASS) ? FALSE : TRUE //this sucks and should be a mob property x2 augh + AM.flags |= TABLEPASS + step(AM, get_dir(AM, src)) + if (remove_tablepass) + REMOVE_FLAG(AM.flags, TABLEPASS) + src.harm_slam(thr.user, AM) + + //Replacement for monkies walking through tables: They now parkour over them. //Note: Max count of tables traversable is 2 more than the iteration limit /datum/action/bar/icon/railing_jump/table_jump @@ -589,8 +601,8 @@ TYPEINFO_NEW(/obj/table/syndicate) parts_type = /obj/item/furniture_parts/table/syndicate New() - ..() START_TRACKING_CAT(TR_CAT_NUKE_OP_STYLE) + ..() disposing() STOP_TRACKING_CAT(TR_CAT_NUKE_OP_STYLE) diff --git a/code/obj/window.dm b/code/obj/window.dm index 77ff127555187..54f09d9c43f4f 100644 --- a/code/obj/window.dm +++ b/code/obj/window.dm @@ -692,19 +692,7 @@ ADMIN_INTERACT_PROCS(/obj/window, proc/smash) /obj/window/bulletproof/pyro icon_state = "rpyro" -/* -/obj/window/supernorn - icon = 'icons/Testing/newicons/obj/NEWstructures.dmi' - dir = 5 - attackby() // TODO: need to be able to smash them, this is a hack - rotate() - set hidden = 1 - - New() - for (var/turf/simulated/wall/auto/T in orange(1)) - T.UpdateIcon() -*/ /obj/window/north dir = NORTH diff --git a/code/obj/zoldorf.dm b/code/obj/zoldorf.dm index a71f4eca9597e..dad238230d6dd 100644 --- a/code/obj/zoldorf.dm +++ b/code/obj/zoldorf.dm @@ -62,8 +62,8 @@ var/global/list/datum/zoldorfitem/zoldorf_items = list() var/list/omencolors = list("none","custom","red","green") var/list/notes = list() var/omencolor - var/obj/o1 = new - var/obj/o2 = new + var/obj/effect/o1 = new + var/obj/effect/o2 = new var/inuse = 0 var/colorinputbuffer var/smokecolor @@ -84,8 +84,6 @@ var/global/list/datum/zoldorfitem/zoldorf_items = list() New() . = ..() - o1.mouse_opacity = 0 - o2.mouse_opacity = 0 START_TRACKING proc/updatejar() //updates soul jar display based on partial souls and adds any spillover to the current zoldorf's soul pool diff --git a/code/player.dm b/code/player.dm index c25f5c78eccd0..bdc61e5c90232 100644 --- a/code/player.dm +++ b/code/player.dm @@ -1,5 +1,7 @@ /// for client variables and stuff that has to persist between connections /datum/player + /// the ID of the player as provided by the Goonhub API + var/id = 0 /// the key of the client object that this datum is attached to var/key /// the ckey of the client object that this datum is attached to @@ -34,10 +36,8 @@ var/current_playtime = null /// Cache jobbans here to speed things up massively var/list/cached_jobbans = null - /// saved profiles from the cloud - var/list/cloudsaves = null - /// saved data from the cloud (spacebux, volume settings, ...) - var/list/clouddata = null + /// Manager for cloud data and saves + var/datum/cloudSaves/cloudSaves = null /// buildmode holder of our client so it doesn't need to get rebuilt every time we reconnect var/datum/buildmode_holder/buildmode = null /// whether this person is a temporary admin (this round only) @@ -62,6 +62,7 @@ src.key = key src.ckey = ckey(key) src.tag = "player-[src.ckey]" + src.cloudSaves = new /datum/cloudSaves(src) if (ckey(src.key) in mentors) src.mentor = 1 @@ -78,6 +79,30 @@ src.client = null ..() + /// Record a player login via the API. Sets player ID field for future API use + proc/record_login() + if (!roundId || !src.client || src.id) return + var/datum/apiModel/Tracked/PlayerResource/playerResponse + try + var/datum/apiRoute/players/login/playerLogin = new + playerLogin.buildBody( + src.client.ckey, + src.client.key, + src.client.address ? src.client.address : "127.0.0.1", // fallback for local dev + src.client.computer_id, + src.client.byond_version, + src.client.byond_build, + roundId + ) + playerResponse = apiHandler.queryAPI(playerLogin) + catch (var/exception/e) + var/datum/apiModel/Error/error = e.name + logTheThing(LOG_DEBUG, null, "Failed to record a player login for [src.client.ckey] because: [error.message]") + logTheThing(LOG_DIARY, null, "Failed to record a player login for [src.client.ckey] because: [error.message]", "admin") + return + + src.id = playerResponse.id + /// queries api to cache stats so its only done once per player per round proc/cache_round_stats() set waitfor = FALSE @@ -85,44 +110,41 @@ /// blocking version of cache_round_stats, queries api to cache stats so its only done once per player per round (please update this proc when adding more player stat vars) proc/cache_round_stats_blocking() - var/list/response = null + var/datum/apiModel/Tracked/PlayerStatsResource/playerStats try - response = apiHandler?.queryAPI("playerInfo/get", list("ckey" = src.ckey), forceResponse = 1) + var/datum/apiRoute/players/stats/get/getPlayerStats = new + getPlayerStats.queryParams = list("ckey" = src.ckey) + playerStats = apiHandler.queryAPI(getPlayerStats) catch - return 0 - if (!response) - return 0 - src.rounds_participated = text2num(response["participated"]) - src.rounds_participated_rp= text2num(response["participated_rp"]) - src.rounds_seen = text2num(response["seen"]) - src.rounds_seen_rp = text2num(response["seen_rp"]) - src.last_seen = response["last_seen"] - return 1 + return FALSE + + src.rounds_participated_rp = text2num(playerStats.played_rp) + src.rounds_participated = text2num(playerStats.played) + src.rounds_participated_rp //the API counts these separately, but we want a combined number + src.rounds_seen = text2num(playerStats.connected) + src.rounds_seen_rp = text2num(playerStats.connected_rp) + src.last_seen = playerStats.latest_connection.created_at + return TRUE proc/load_antag_tokens() PRIVATE_PROC(TRUE) //call get_antag_tokens . = TRUE var/savefile/AT = LoadSavefile("data/AntagTokens.sav") if (!AT) - if( cloud_available() ) - antag_tokens = cloud_get( "antag_tokens" ) ? text2num(cloud_get( "antag_tokens" )) : 0 + antag_tokens = src.cloudSaves.getData( "antag_tokens" ) + antag_tokens = antag_tokens ? text2num(antag_tokens) : 0 return var/ATtoken AT[ckey] >> ATtoken if (!ATtoken) - antag_tokens = cloud_get( "antag_tokens" ) ? text2num(cloud_get( "antag_tokens" )) : 0 + antag_tokens = src.cloudSaves.getData( "antag_tokens" ) + antag_tokens = antag_tokens ? text2num(antag_tokens) : 0 return else antag_tokens = ATtoken - if( cloud_available() ) - antag_tokens += text2num( cloud_get( "antag_tokens" ) || "0" ) - var/failed = cloud_put( "antag_tokens", antag_tokens ) - if( failed ) - logTheThing(LOG_DEBUG, src, "Failed to store antag tokens in the ~cloud~: [failed]") - return FALSE - else - AT[ckey] << null + antag_tokens += text2num( src.cloudSaves.getData( "antag_tokens" ) || "0" ) + if (src.cloudSaves.putData( "antag_tokens", antag_tokens )) + AT[ckey] << null /// returns an assoc list of cached player stats (please update this proc when adding more player stat vars) proc/get_round_stats(allow_blocking = FALSE) @@ -163,9 +185,8 @@ proc/set_antag_tokens(amt as num) src.antag_tokens = amt - if( cloud_available() ) - cloud_put( "antag_tokens", amt ) - return TRUE + src.cloudSaves.putData( "antag_tokens", amt ) + . = TRUE /// sets the join time to the current server time, in 1/10ths of a second proc/log_join_time() @@ -184,80 +205,36 @@ src.round_leave_time = null //reset this - null value is important src.round_join_time = null //reset this - null value is important - /// Sets a cloud key value pair and sends it to goonhub - proc/cloud_put(key, value) - if(!clouddata) - return FALSE - clouddata[key] = "[value]" - -#ifdef LIVE_SERVER - // Via rust-g HTTP - var/datum/http_request/request = new() //If it fails, oh well... - request.prepare(RUSTG_HTTP_METHOD_GET, "[config.spacebee_api_url]/api/cloudsave?dataput&api_key=[config.spacebee_api_key]&ckey=[ckey]&key=[url_encode(key)]&value=[url_encode(clouddata[key])]", "", "") - request.begin_async() -#else - var/json = null - var/list/decoded_json - if (fexists("data/simulated_cloud.json")) - json = file2text("data/simulated_cloud.json") - decoded_json = json_decode(json) + proc/get_buildmode() + RETURN_TYPE(/datum/buildmode_holder) + if(src.buildmode) + return src.buildmode + var/saved_buildmode = src.cloudSaves.getData("buildmode") + if(!saved_buildmode) + src.buildmode = new /datum/buildmode_holder(src.client) else - decoded_json = list() - - decoded_json["[ckey(ckey)]"] = clouddata - rustg_file_write(json_encode(decoded_json),"data/simulated_cloud.json") -#endif - return TRUE // I guess + var/savefile/save = new + save.ImportText("/", saved_buildmode) + save.eof = 0 + try + save["buildmode"] >> src.buildmode + catch(var/exception/e) + stack_trace("loading buildmode error\n[e.name]\n[e.desc]") + boutput(src.client, SPAN_INTERNAL("Loading your buildmode failed. Check runtime log for details.")) + qdel(src.buildmode) + src.buildmode = new /datum/buildmode_holder(src.client) + if(isnull(src.buildmode)) + boutput(src.client, SPAN_INTERNAL("Loading your buildmode failed. No clue why.")) + src.buildmode = new /datum/buildmode_holder(src.client) + if(isnull(src.buildmode.owner)) + src.buildmode.set_client(src.client) + return src.buildmode - /// Sets a cloud key value pair and sends it to goonhub for a target ckey - proc/cloud_put_target(target, key, value) - var/list/data = cloud_fetch_target_ckey(target) - if(!data) - return FALSE - data[key] = "[value]" - -#ifdef LIVE_SERVER - // Via rust-g HTTP - var/datum/http_request/request = new() //If it fails, oh well... - request.prepare(RUSTG_HTTP_METHOD_GET, "[config.spacebee_api_url]/api/cloudsave?dataput&api_key=[config.spacebee_api_key]&ckey=[ckey(target)]&key=[url_encode(key)]&value=[url_encode(data[key])]", "", "") - request.begin_async() -#else - var/json = null - var/list/decoded_json - if (fexists("data/simulated_cloud.json")) - json = file2text("data/simulated_cloud.json") - decoded_json = json_decode(json) - else - decoded_json = list() - decoded_json["[ckey(target)]"] = data - rustg_file_write(json_encode(decoded_json),"data/simulated_cloud.json") -#endif - return TRUE // I guess - - /// Returns some cloud data on the client - proc/cloud_get( var/key ) - return clouddata ? clouddata[key] : null - - /// Returns some cloud data on the provided target ckey - proc/cloud_get_target(target, key) - var/list/data = cloud_fetch_target_data_only(target) - return data ? data[key] : null - - /// Returns 1 if you can set or retrieve cloud data on the client - proc/cloud_available() - return !!clouddata - - /// Downloads cloud data from goonhub - proc/cloud_fetch() - var/list/data = cloud_fetch_target_ckey(src.ckey) - if (data) -#ifdef LIVE_SERVER - cloudsaves = data["saves"] - clouddata = data["cdata"] -#else - clouddata = data -#endif - return TRUE + proc/on_round_end() + if(src.buildmode) + var/savefile/S = new + S["buildmode"] << buildmode + src.cloudSaves.putData("buildmode", S.ExportText()) /// Gives this player a medal. Will not sleep, but does not have a return value. Use unlock_medal_sync if you need to know if it worked proc/unlock_medal(medal_name, announce=FALSE) @@ -276,6 +253,17 @@ return FALSE . = TRUE + // Record this medal to the Goonhub API for further tracking + // This will (eventually) replace the byond medals entirely + try + var/datum/apiRoute/players/medals/add/addMedal = new + addMedal.buildBody(src.id || null, src.ckey, medal_name, roundId) + apiHandler.queryAPI(addMedal) + catch (var/exception/e) + var/datum/apiModel/Error/error = e.name + logTheThing(LOG_DEBUG, null, "<b>Medals Error</b>: Error returned in <b>unlock_medal</b> for <b>[medal_name]</b>: [error.message]") + logTheThing(LOG_DIARY, null, "Medals Error: Error returned in unlock_medal for [medal_name]: [error.message]", "debug") + var/list/unlocks = list() for(var/A in rewardDB) var/datum/achievementReward/D = rewardDB[A] @@ -295,7 +283,19 @@ proc/clear_medal(medal_name) if (IsGuestKey(src.ckey) || !config || !config.medal_hub || !config.medal_password) return null - return world.ClearMedal(medal_name, src.key, config.medal_hub, config.medal_password) + var/success = world.ClearMedal(medal_name, src.key, config.medal_hub, config.medal_password) + + if (success) + try + var/datum/apiRoute/players/medals/delete/deleteMedal = new + deleteMedal.buildBody(src.id || null, src.ckey, medal_name) + apiHandler.queryAPI(deleteMedal) + catch (var/exception/e) + var/datum/apiModel/Error/error = e.name + logTheThing(LOG_DEBUG, null, "<b>Medals Error</b>: Error returned in <b>clear_medal</b> for <b>[medal_name]</b>: [error.message]") + logTheThing(LOG_DIARY, null, "Medals Error: Error returned in clear_medal for [medal_name]: [error.message]", "debug") + + return success /// Checks if this player has a medal. Will sleep, make sure the proc calling this is in a spawn etc proc/has_medal(medal_name) @@ -313,101 +313,6 @@ return . = params2list(.) - /// Refreshes clouddata - proc/cloud_fetch_data_only() - var/list/data = cloud_fetch_target_data_only(src.ckey) - if (data) - clouddata = data - return TRUE - - /// returns the clouddata of a target ckey in list form - proc/cloud_fetch_target_data_only(target) - var/list/data = cloud_fetch_target_ckey(target) - if (data) - return data["cdata"] - - /// returns the cloudsaves of a target ckey in list form - proc/cloud_fetch_target_saves_only(target) - var/list/data = cloud_fetch_target_ckey(target) - if (data) - return data["saves"] - - /// Returns cloud data and saves from goonhub for the target ckey in list form - proc/cloud_fetch_target_ckey(target) -#ifdef LIVE_SERVER - if(!cdn) return - target = ckey(target) - if (!target) return - - var/datum/http_request/request = new() - request.prepare(RUSTG_HTTP_METHOD_GET, "[config.spacebee_api_url]/api/cloudsave?list&ckey=[target]&api_key=[config.spacebee_api_key]", "", "") - request.begin_async() - UNTIL(request.is_complete()) - var/datum/http_response/response = request.into_response() - - if (response.errored || !response.body) - logTheThing(LOG_DEBUG, target, "failed to have their cloud data loaded: Couldn't reach Goonhub") - return - - var/list/ret = json_decode(response.body) - if(ret["status"] == "error") - logTheThing(LOG_DEBUG, target, "failed to have their cloud data loaded: [ret["error"]["error"]]") - return - else - return ret -#else - if (!target) return - /// holds our json string - var/json - /// holds our list made from decoding json - var/list/decoded_json - // make sure the files actually exists before we try to read it, if it doesn't then just return a blank list to work with - if (fexists("data/simulated_cloud.json")) - // file was found, lets decode it - json = file2text("data/simulated_cloud.json") - decoded_json = json_decode(json) - else - decoded_json = list() - - // do we have an entry for the target ckey? - if (decoded_json[target]) - return decoded_json[target] - else - // we need to return a list with a list in the cdata index or it causes a deadlock where we can't save - return list(cdata = list()) -#endif - - proc/get_buildmode() - RETURN_TYPE(/datum/buildmode_holder) - if(src.buildmode) - return src.buildmode - var/saved_buildmode = src.cloud_get("buildmode") - if(!saved_buildmode) - src.buildmode = new /datum/buildmode_holder(src.client) - else - var/savefile/save = new - save.ImportText("/", saved_buildmode) - save.eof = 0 - try - save["buildmode"] >> src.buildmode - catch(var/exception/e) - stack_trace("loading buildmode error\n[e.name]\n[e.desc]") - boutput(src.client, SPAN_INTERNAL("Loading your buildmode failed. Check runtime log for details.")) - qdel(src.buildmode) - src.buildmode = new /datum/buildmode_holder(src.client) - if(isnull(src.buildmode)) - boutput(src.client, SPAN_INTERNAL("Loading your buildmode failed. No clue why.")) - src.buildmode = new /datum/buildmode_holder(src.client) - if(isnull(src.buildmode.owner)) - src.buildmode.set_client(src.client) - return src.buildmode - - proc/on_round_end() - if(src.buildmode) - var/savefile/S = new - S["buildmode"] << buildmode - src.cloud_put("buildmode", S.ExportText()) - /// returns a reference to a player datum based on the ckey you put into it /proc/find_player(key) RETURN_TYPE(/datum/player) @@ -421,86 +326,3 @@ if (!player) player = new(key) return player - -/** Bulk cloud save for saving many key value pairs and/or many ckeys in a single api call - * example input (formatted for readability) - * command add adds a number onto the current value (record must exist in the cloud to update or it won't do anything) - * command replace overwrites the existing record - * { - * "some_ckey":{ - * "persistent_bank":{ - * "command":"add", - * "value":42069 - * }, - * "persistent_bank_item":{ - * "command":"replace", - * "value":"none" - * } - * }, - * "some_other_ckey":{ - * "persistent_bank":{ - * "command":"add", - * "value":1337 - * }, - * "persistent_bank_item":{ - * "command":"replace", - * "value":"rubber_ducky" - * } - * } - * } -**/ -proc/cloud_put_bulk(json) - if (!rustg_json_is_valid(json)) - stack_trace("cloud_put_bulk received an invalid json object.") - return FALSE - var/list/decoded_json = json_decode(json) - var/list/sanitized = list() - for (var/json_ckey in decoded_json) - var/clean_ckey = ckey(json_ckey) - if (!length(decoded_json[json_ckey])) - stack_trace("cloud_put_bulk received ckey \"[clean_ckey]\" without any key pairs to save.") - continue - sanitized[clean_ckey] = list() - for (var/json_key in decoded_json[json_ckey]) - var/value = decoded_json[json_ckey][json_key]["value"] - if (isnull(value)) - value = "" //api wants empty strings, not nulls - sanitized[clean_ckey][json_key] = list ("command" = decoded_json[json_ckey][json_key]["command"], "value" = value) -#ifdef LIVE_SERVER - var/sanitized_json = json_encode(sanitized) - // Via rust-g HTTP - var/datum/http_request/request = new() - var/list/headers = list( - "Authorization" = "[config.spacebee_api_key]", - "Content-Type" = "application/json", - "Command" = "dataput_bulk" - ) - request.prepare(RUSTG_HTTP_METHOD_POST, "[config.spacebee_api_url]/api/cloudsave", sanitized_json, headers) - request.begin_async() -#else - var/save_json - var/list/decoded_save - if (fexists("data/simulated_cloud.json")) - save_json = file2text("data/simulated_cloud.json") - decoded_save = json_decode(save_json) - else - decoded_save = list() - - for (var/sani_ckey in sanitized) - if (!decoded_save[sani_ckey]) - decoded_save[sani_ckey] = list(cdata = list()) - for (var/data_key in sanitized[sani_ckey]) - var/value = sanitized[sani_ckey][data_key]["value"] - var/command = sanitized[sani_ckey][data_key]["command"] - switch(command) - if("add") - if (data_key in decoded_save[sani_ckey]) - decoded_save[sani_ckey][data_key] = "[text2num(decoded_save[sani_ckey][data_key]) + value]" - else - decoded_save[sani_ckey][data_key] = "[value]" - if("replace") - decoded_save[sani_ckey][data_key] = "[value]" - - rustg_file_write(json_encode(decoded_save),"data/simulated_cloud.json") -#endif - return TRUE diff --git a/code/procs/accents.dm b/code/procs/accents.dm index 0254384561097..d443fce90eef3 100644 --- a/code/procs/accents.dm +++ b/code/procs/accents.dm @@ -2602,3 +2602,14 @@ proc/leetspeakify(string, chance=100) letter = leetspeak_translation[lowertext(letter)] letters += letter return jointext(letters, "") + +/proc/bingus_parse(var/string) + var/bingus_list = list( + @{"\bbingus\b"} = "bingus my beloved", + @{"\bantag\b"} = "floppa", + @{"\bantagonist\b"} = "big floppa", + @{"\bI love [a-zA-Z]+"} = "I love bingus" + ) + for (var/pattern in bingus_list) + string = replacetext(string, regex(pattern, "i"), bingus_list[pattern]) + return string diff --git a/code/procs/authorize.dm b/code/procs/authorize.dm deleted file mode 100644 index 3534624b2cdcf..0000000000000 --- a/code/procs/authorize.dm +++ /dev/null @@ -1,18 +0,0 @@ -/client/proc/set_mentorhelp_visibility(var/set_as = null) - if (!isnull(set_as)) - player.see_mentor_pms = set_as - else - player.see_mentor_pms = !player.see_mentor_pms - boutput(src, "<span class='ooc mentorooc'>You will [player.see_mentor_pms ? "now" : "no longer"] see Mentorhelps [player.see_mentor_pms ? "and" : "or"] show up as a Mentor.</span>") - -/client/proc/toggle_mentorhelps() - set name = "Toggle Mentorhelps" - set category = "Commands" - set desc = "Show or hide mentorhelp messages. You will also no longer show up as a mentor in OOC and via the Who command if you disable mentorhelps." - - if (!src.is_mentor() && !src.holder) - boutput(src, SPAN_ALERT("Only mentors may use this command.")) - src.verbs -= /client/proc/toggle_mentorhelps // maybe? - return - - src.set_mentorhelp_visibility() diff --git a/code/procs/computer_id.dm b/code/procs/computer_id.dm index a6ca61681eadb..243474a7b6138 100644 --- a/code/procs/computer_id.dm +++ b/code/procs/computer_id.dm @@ -134,14 +134,15 @@ proc/do_computerid_test(var/client/C) logTheThing(LOG_DIARY, C, msg, "admin") if(is_fucker) //message_admins("[key_name(C)] was automatically banned for using the CID DLL.") - var/banData[] = new() - banData["ckey"] = C.ckey - banData["compID"] = C.computer_id - banData["akey"] = "Auto Banner" - banData["ip"] = C.address - banData["reason"] = "Using a modified dreamseeker client." - banData["mins"] = 0 - addBan(banData) + bansHandler.add( + "bot", + null, + C.ckey, + C.computer_id, + C.address, + "Using a modified dreamseeker client.", + FALSE + ) proc/view_client_compid_list(mob/user, var/C) diff --git a/code/procs/datetime.dm b/code/procs/datetime.dm index 8704fca41e7f9..e256a16ec7185 100644 --- a/code/procs/datetime.dm +++ b/code/procs/datetime.dm @@ -50,3 +50,42 @@ proc/addTime(timeInByondFormat, years=0, months=0, days=0, hours=0, minutes=0, s /// Subtract time from a given BYOND time format proc/subtractTime(timeInByondFormat, years=0, months=0, days=0, hours=0, minutes=0, seconds=0) return addTime(timeInByondFormat, -years, -months, -days, -hours, -minutes, -seconds) + +/// Validate ISO 8601 format +proc/validateIso8601(iso8601) + var/regex/iso8601Pattern = new(@/^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}Z$/) + + if(!iso8601Pattern.Find(iso8601)) + return FALSE // Does not match the pattern + + // Extract components + var/list/datetimeParts = splittext(iso8601, "T") + var/date = datetimeParts[1] + var/time = splittext(datetimeParts[2], "Z")[1] + + var/list/dateParts = splittext(date, "-") + var/year = text2num(dateParts[1]) + var/month = text2num(dateParts[2]) + var/day = text2num(dateParts[3]) + + // Validate year, month, and day + if(year < 1 || month < 1 || month > 12 || day < 1 || day > 31) + return FALSE + + var/list/timeParts = splittext(time, ":") + var/hour = text2num(timeParts[1]) + var/minute = text2num(timeParts[2]) + var/second = text2num(timeParts[3]) + + // Validate hour, minute, and second + if(hour < 0 || hour > 23 || minute < 0 || minute > 59 || second < 0 || second > 59) + return FALSE + + // Additional validation for day of month + var/list/monthDays = list(31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31) + if(isLeapYear(year)) + monthDays[2] = 29 + if(day > monthDays[month]) + return FALSE + + return TRUE diff --git a/code/procs/export_data.dm b/code/procs/export_data.dm deleted file mode 100644 index f91ebb7d85fa7..0000000000000 --- a/code/procs/export_data.dm +++ /dev/null @@ -1,33 +0,0 @@ -///// FOR EXPORTING DATA TO A SERVER ///// - -// Called in world.dm at new() -/proc/round_start_data() - - var/message[] = new() - message["token"] = md5(config.goonhub_parser_key) - message["round_name"] = url_encode(station_name()) - message["round_server"] = config.server_id - message["round_server_number"] = "[serverKey]" - message["round_status"] = "start" - - // Send data - var/datum/http_request/request = new() - request.prepare(RUSTG_HTTP_METHOD_GET, "[config.goonhub_parser_url][list2params(message)]", "", "") - request.begin_async() - -// Called in gameticker.dm at the end of the round. -/proc/round_end_data(var/reason) - - var/message[] = new() - message["token"] = md5(config.goonhub_parser_key) - message["round_name"] = url_encode(station_name()) - message["round_server"] = config.server_id - message["round_server_number"] = "[serverKey]" - message["round_status"] = "end" - message["end_reason"] = reason - message["game_type"] = ticker?.mode ? ticker.mode.name : "pre" - - // Send data - var/datum/http_request/request = new() - request.prepare(RUSTG_HTTP_METHOD_GET, "[config.goonhub_parser_url][list2params(message)]", "", "") - request.begin_async() diff --git a/code/procs/helpers.dm b/code/procs/helpers.dm index cddb67926ab8a..66e0659d7d104 100644 --- a/code/procs/helpers.dm +++ b/code/procs/helpers.dm @@ -24,12 +24,6 @@ test = copytext(test, 1, 2) return test == uppertext(test) -/** - * Shows the calling client admins.txt - */ -/proc/showadminlist() - usr.client.Export("##action=browse_file","config/admins.txt") - /** * Returns the line matrix from a start atom to an end atom, used in creating line objects */ @@ -184,10 +178,8 @@ proc/castRay(var/atom/A, var/Angle, var/Distance) //Adapted from some forum stuf if(!(T in crossed)) crossed.Add(T) return crossed -/** - * Returns the angle between two given atoms - */ -proc/get_angle(atom/a, atom/b) +/// Returns the angle between two given atoms +/proc/get_angle(atom/a, atom/b) var/turf/a_turf = get_turf(a) var/turf/b_turf = get_turf(b) if (isnull(a_turf) || isnull(b_turf)) @@ -997,24 +989,15 @@ proc/get_adjacent_floor(atom/W, mob/user, px, py) // <3 Fire // I'm preserving the above comment block, let it be known this proc used to use the variables "n", "pr", "te", "t", "p." I have fixed them. You're welcome. // <3 FlamingLily -/proc/stars(input_text, probability) - if(probability == null) - probability = 25 - if(probability <= 0) - return null - else - if (probability >= 100) - return input_text - var/output_text = "" - var/input_length = length(input_text) - var/cycle = 1 - while(cycle <= input_length) - if ((copytext(input_text, cycle, cycle + 1) == " " || prob(probability))) - output_text = text("[][]", output_text, copytext(input_text, cycle, cycle + 1)) - else - output_text = text("[]*", output_text) - cycle++ - return output_text +/proc/stars(phrase, probability = 25) + if(length(phrase) == 0) + return + var/list/chars = splittext_char(html_decode(phrase), "") + for(var/i in 1 to length(chars)) + if(chars[i] == " " || !prob(probability)) + continue + chars[i] = "*" + return sanitize(jointext(chars, "")) /proc/stutter(n) var/te = html_decode(n) @@ -1059,12 +1042,6 @@ proc/get_adjacent_floor(atom/W, mob/user, px, py) client.pixel_y = 0 M.shakecamera = 0 -/proc/findname(msg) - for(var/mob/M in mobs) - if (M.real_name == text("[msg]")) - return 1 - return 0 - /proc/get_cardinal_step_away(atom/start, atom/finish) //returns the position of a step from start away from finish, in one of the cardinal directions //returns only NORTH, SOUTH, EAST, or WEST var/dx = finish.x - start.x @@ -1354,34 +1331,34 @@ proc/outermost_movable(atom/movable/target) . = text2path(stringtarget) /proc/GetRedPart(hex) - hex = uppertext(hex) - var/hi = text2ascii(hex, 2) - var/lo = text2ascii(hex, 3) - return ( ((hi >= 65 ? hi-55 : hi-48)<<4) | (lo >= 65 ? lo-55 : lo-48) ) + hex = uppertext(hex) + var/hi = text2ascii(hex, 2) + var/lo = text2ascii(hex, 3) + return ( ((hi >= 65 ? hi-55 : hi-48)<<4) | (lo >= 65 ? lo-55 : lo-48) ) /proc/GetGreenPart(hex) - hex = uppertext(hex) - var/hi = text2ascii(hex, 4) - var/lo = text2ascii(hex, 5) - return ( ((hi >= 65 ? hi-55 : hi-48)<<4) | (lo >= 65 ? lo-55 : lo-48) ) + hex = uppertext(hex) + var/hi = text2ascii(hex, 4) + var/lo = text2ascii(hex, 5) + return ( ((hi >= 65 ? hi-55 : hi-48)<<4) | (lo >= 65 ? lo-55 : lo-48) ) /proc/GetBluePart(hex) - hex = uppertext(hex) - var/hi = text2ascii(hex, 6) - var/lo = text2ascii(hex, 7) - return ( ((hi >= 65 ? hi-55 : hi-48)<<4) | (lo >= 65 ? lo-55 : lo-48) ) + hex = uppertext(hex) + var/hi = text2ascii(hex, 6) + var/lo = text2ascii(hex, 7) + return ( ((hi >= 65 ? hi-55 : hi-48)<<4) | (lo >= 65 ? lo-55 : lo-48) ) /proc/GetColors(hex) - hex = uppertext(hex) - var/hi1 = text2ascii(hex, 2) - var/lo1 = text2ascii(hex, 3) - var/hi2 = text2ascii(hex, 4) - var/lo2 = text2ascii(hex, 5) - var/hi3 = text2ascii(hex, 6) - var/lo3 = text2ascii(hex, 7) - return list(((hi1>= 65 ? hi1-55 : hi1-48)<<4) | (lo1 >= 65 ? lo1-55 : lo1-48), - ((hi2 >= 65 ? hi2-55 : hi2-48)<<4) | (lo2 >= 65 ? lo2-55 : lo2-48), - ((hi3 >= 65 ? hi3-55 : hi3-48)<<4) | (lo3 >= 65 ? lo3-55 : lo3-48)) + hex = uppertext(hex) + var/hi1 = text2ascii(hex, 2) + var/lo1 = text2ascii(hex, 3) + var/hi2 = text2ascii(hex, 4) + var/lo2 = text2ascii(hex, 5) + var/hi3 = text2ascii(hex, 6) + var/lo3 = text2ascii(hex, 7) + return list(((hi1>= 65 ? hi1-55 : hi1-48)<<4) | (lo1 >= 65 ? lo1-55 : lo1-48), + ((hi2 >= 65 ? hi2-55 : hi2-48)<<4) | (lo2 >= 65 ? lo2-55 : lo2-48), + ((hi3 >= 65 ? hi3-55 : hi3-48)<<4) | (lo3 >= 65 ? lo3-55 : lo3-48)) //Shoves a jump to link or whatever in the thing :effort: /proc/showCoords(x, y, z, plaintext, holder, ghostjump) @@ -2046,23 +2023,22 @@ proc/countJob(rank) var/global/nextDectalkDelay = 1 //seconds var/global/lastDectalkUse = 0 /proc/dectalk(msg) - if (!msg || !config.spacebee_api_key) return 0 + if (!msg) return 0 if (TIME > (lastDectalkUse + (nextDectalkDelay * 10))) lastDectalkUse = TIME msg = copytext(msg, 1, 2000) - // Fetch via HTTP from goonhub - var/datum/http_request/request = new() - request.prepare(RUSTG_HTTP_METHOD_GET, "[config.spacebee_api_url]/api/tts?dectalk=[url_encode(msg)]&api_key=[config.spacebee_api_key]", "", "") - request.begin_async() - UNTIL(request.is_complete()) - var/datum/http_response/response = request.into_response() - - if (response.errored || !response.body) - logTheThing(LOG_DEBUG, null, "<b>dectalk:</b> Failed to contact goonhub. msg : [msg]") + var/datum/apiModel/DectalkPlayResource/playDectalkResource + try + var/datum/apiRoute/dectalk/play/playDectalk = new + playDectalk.buildBody(msg, roundId) + playDectalkResource = apiHandler.queryAPI(playDectalk) + catch (var/exception/e) + var/datum/apiModel/Error/error = e.name + logTheThing(LOG_DEBUG, null, "<b>dectalk:</b> Failed to play dectalk for msg: '[msg]' because: [error.message]") return - return list("audio" = response.body, "message" = msg) + return list("audio" = playDectalkResource.audio, "message" = msg) else return list("cooldown" = 1) @@ -2263,39 +2239,37 @@ proc/copy_datum_vars(var/atom/from, var/atom/target, list/blacklist) return FALSE -/** - * Returns span with a color gradient between two given colors of given message - */ +/// Returns span with a color gradient between two given colors of given message proc/gradientText(var/color1, var/color2, message) - var/color1hex = hex2num(copytext(color1, 2)) - var/color2hex = hex2num(copytext(color2, 2)) - var/r1 = (color1hex >> 16) & 0xFF - var/g1 = (color1hex >> 8) & 0xFF - var/b1 = color1hex & 0xFF - var/dr = ((color2hex >> 16) & 0xFF)- r1 - var/dg = ((color2hex >> 8) & 0xFF) - g1 - var/db = (color2hex & 0xFF) - b1 - var/list/result = new/list() - var/n = rand(0,10)/10.0 // what a shitty name for a variable - var/dir = prob(50) ? -1 : 1 - for(var/i=1, i<=length(message), i += 3) - n += dir * 0.2 - if(prob(20)) - dir = dir/abs(dir) * -1 - if(n < 0) - n = 0 - dir = 1 - if(n > 1) - n = 1 - dir = -1 - var/col = rgb(r1 + dr*n, g1 + dg*n, b1 + db*n) - var/chars = copytext(message, i, i+3) - result += "<span style='color:[col]'>[chars]</span>" - . = result.Join() + var/color1hex = hex2num(copytext(color1, 2)) + var/color2hex = hex2num(copytext(color2, 2)) + var/r1 = (color1hex >> 16) & 0xFF + var/g1 = (color1hex >> 8) & 0xFF + var/b1 = color1hex & 0xFF + var/dr = ((color2hex >> 16) & 0xFF)- r1 + var/dg = ((color2hex >> 8) & 0xFF) - g1 + var/db = (color2hex & 0xFF) - b1 + var/list/result = new/list() + var/n = rand(0,10)/10.0 // what a shitty name for a variable + var/dir = prob(50) ? -1 : 1 + for(var/i=1, i<=length(message), i += 3) + n += dir * 0.2 + if(prob(20)) + dir = dir/abs(dir) * -1 + if(n < 0) + n = 0 + dir = 1 + if(n > 1) + n = 1 + dir = -1 + var/col = rgb(r1 + dr*n, g1 + dg*n, b1 + db*n) + var/chars = copytext(message, i, i+3) + result += "<span style='color:[col]'>[chars]</span>" + . = result.Join() /** - * Returns given text replaced by nonsense chars, excepting HTML tags, on a 40% or given % basis - */ + * Returns given text replaced by nonsense chars, excepting HTML tags, on a 40% or given % basis + */ proc/radioGarbleText(var/message, var/per_letter_corruption_chance=40) var/split_html_text = splittext(message, regex("<\[^>\]*>"), 1, length(message), TRUE) //I'd love to just use include_delimiters=TRUE, but byond var/list/corruptedChars = list("@","#","!",",",".","-","=","/","\\","'","\"","`","*","(",")","[","]","_","&") @@ -2314,23 +2288,18 @@ proc/radioGarbleText(var/message, var/per_letter_corruption_chance=40) return jointext(.,"") -/** - * Returns given text replaced entirely by nonsense chars - */ +/// Returns given text replaced entirely by nonsense chars proc/illiterateGarbleText(var/message) . = radioGarbleText(message, 100) -/** - * Returns the time in seconds since a given timestamp - */ + +/// Returns the time in seconds since a given timestamp proc/getTimeInSecondsSinceTime(var/timestamp) var/time_of_day = world.timeofday + ((world.timeofday < timestamp) ? 864000 : 0) // Offset the time of day in case of midnight rollover var/time_elapsed = (time_of_day - timestamp)/10 return time_elapsed -/** - * Handles the two states icon_size can be in: basic number, or string in WxH format - */ +/// Handles the two states icon_size can be in: basic number, or string in WxH format proc/getIconSize() if (istext(world.icon_size)) var/list/iconSizes = splittext(world.icon_size, "x") @@ -2338,18 +2307,14 @@ proc/getIconSize() return world.icon_size -/** - * Finds a client by ckey, throws exception if not found - */ +/// Finds a client by ckey, throws exception if not found proc/getClientFromCkey(ckey) var/datum/player/player = find_player(ckey) if(!player?.client) throw EXCEPTION("Client not found") return player.client -/** - * Returns true if the given atom is within src's contents (deeply/recursively) - */ +/// Returns true if the given atom is within src's contents (deeply/recursively) /atom/proc/contains(var/atom/A) . = FALSE if(!A) @@ -2424,9 +2389,7 @@ proc/check_whitelist(var/atom/TA, var/list/whitelist, var/mob/user as mob, var/c return (seer.dir == dir) -/** - * Returns the passed decisecond-format time in the form of a text string - */ +/// Returns the passed decisecond-format time in the form of a text string proc/time_to_text(var/time) . = list() @@ -2632,3 +2595,9 @@ proc/message_ghosts(var/message, show_wraith = FALSE) // Otherwise, output to ghosts if (isdead(M) || iswraith(M) || isghostdrone(M) || isVRghost(M) || inafterlifebar(M) || istype(M, /mob/living/intangible/seanceghost)) boutput(M, rendered) + +/// Find a client based on ckey +/proc/find_client(ckey) + for (var/client/C in clients) + if (C == ckey) + return C diff --git a/code/procs/jobprocs.dm b/code/procs/jobprocs.dm index f38dde289dd1b..ac1ddac331d1b 100644 --- a/code/procs/jobprocs.dm +++ b/code/procs/jobprocs.dm @@ -423,7 +423,6 @@ var/global/totally_random_jobs = FALSE //hey i changed this from a /human/proc to a /living/proc so that critters (from the job creator) would latejoin properly -- MBC /mob/living/proc/Equip_Rank(rank, joined_late, no_special_spawn) - SHOULD_NOT_SLEEP(TRUE) var/datum/job/JOB = find_job_in_controller_by_string(rank) if (!JOB) boutput(src, SPAN_ALERT("<b>Something went wrong setting up your rank and equipment! Report this to a coder.</b>")) diff --git a/code/procs/mobprocs/chatprocs.dm b/code/procs/mobprocs/chatprocs.dm index 3b01fe6f8987d..7044c157961eb 100644 --- a/code/procs/mobprocs/chatprocs.dm +++ b/code/procs/mobprocs/chatprocs.dm @@ -666,7 +666,7 @@ ooc_class = "newbeeooc" ooc_icon = "Newbee" - if( src.client.cloud_available() && src.client.cloud_get("donor") ) + if (src.client.player.cloudSaves.getData("donor") ) msg = replacetext(msg, ":shelterfrog:", "<img src='http://stuff.goonhub.com/shelterfrog.png' width=32>") if (src.client.has_contestwinner_medal) diff --git a/code/procs/stat_logging.dm b/code/procs/stat_logging.dm deleted file mode 100644 index 4e96a913b5fe3..0000000000000 --- a/code/procs/stat_logging.dm +++ /dev/null @@ -1,287 +0,0 @@ -/////////FOR LOGGING TO STATS FILE///////// - -//Called in tickets New() in datacore.dm -/proc/statlog_ticket(var/datum/ticket/T, var/mob/living/M) - var/message[] = new() - message["data_type"] = "tickets" - message["data_status"] = "insert" - message["data_timestamp"] = time2text(world.realtime, "YYYY-MM-DD hh:mm:ss") - - message["target"] = T.target - message["reason"] = T.reason - message["issuer"] = M.real_name - message["issuer_job"] = M.job - message["target_byond_key"] = T.target_byond_key - message["issuer_byond_key"] = M.key - - hublog << list2params(message) - -//Called in fines New() in datacore.dm -/proc/statlog_fine(var/datum/fine/F, var/mob/living/M) - var/message[] = new() - message["data_type"] = "fines" - message["data_status"] = "insert" - message["data_timestamp"] = time2text(world.realtime, "YYYY-MM-DD hh:mm:ss") - message["byond_uid"] = F.ID - - message["target"] = F.target - message["reason"] = F.reason - message["issuer"] = M.real_name - message["issuer_job"] = M.job - message["amount"] = F.amount - message["target_byond_key"] = F.target_byond_key - message["issuer_byond_key"] = M.key - - hublog << list2params(message) - -//Called in crittergauntlet.dm -/proc/statlog_gauntlet(var/mobs, var/final_score, var/last_completed_wave) - if (final_score == 0 && last_completed_wave < 2) - return - var/message[] = new() - message["data_type"] = "gauntlet_high_scores" - message["data_status"] = "insert" - message["data_timestamp"] = time2text(world.realtime, "YYYY-MM-DD hh:mm:ss") - message["names"] = mobs - message["score"] = final_score - message["highest_wave"] = last_completed_wave - - hublog << list2params(message) - -//Called in living death() in living.dm -/proc/statlog_death(var/mob/living/M,var/gibbed) - var/message[] = new() - message["data_type"] = "deaths" - message["data_status"] = "insert" - message["data_timestamp"] = time2text(world.realtime, "YYYY-MM-DD hh:mm:ss") - - message["mob_name"] = M.real_name - message["mob_job"] = M.job - message["mob_byond_key"] = M.key - var/atom/T = get_turf(M) - if (!T) T = M - message["x"] = T.x - message["y"] = T.y - message["z"] = T.z - message["bruteloss"] = M.get_brute_damage() - message["fireloss"] = M.get_burn_damage() - message["toxloss"] = M.get_toxin_damage() - message["oxyloss"] = M.get_oxygen_deprivation() - message["gibbed"] = gibbed ? 1 : 0 - message["last_words"] = M.last_words - - hublog << list2params(message) - -//Called in syndicate and integrated Topic() in uplinks.dm -/proc/statlog_traitor_item(var/mob/living/M, var/itemIdentifier, var/cost) - if (!istype(M)) - return 1 - - var/message[] = new() - message["data_type"] = "traitor_items" - message["data_status"] = "insert" - message["data_timestamp"] = time2text(world.realtime, "YYYY-MM-DD hh:mm:ss") - - message["mob_name"] = M.real_name - message["mob_job"] = M.job - message["mob_byond_key"] = M.key - var/atom/T = get_turf(M) - if (!T) T = M - message["x"] = T.x - message["y"] = T.y - message["z"] = T.z - message["item"] = itemIdentifier ? itemIdentifier : "???" - message["cost"] = isnum(cost) ? "[cost]" : "0" - - hublog << list2params(message) - -//Called in gameticker.dm in proc/declare_completion -/proc/statlog_traitors() - for (var/datum/antagonist/antagonist_role as anything in get_all_antagonists()) - var/datum/mind/M = antagonist_role.owner - var/message[] = new() - message["data_type"] = "traitors" - message["data_status"] = "insert" - message["data_timestamp"] = time2text(world.realtime, "YYYY-MM-DD hh:mm:ss") - - message["mob_name"] = M.current.real_name - message["mob_job"] = M.current.job - message["mob_byond_key"] = M.key - - if (M.objectives) - var/overallSuccess = 1 - var/count = 1 - for(var/datum/objective/objective in M.objectives) -#ifdef CREW_OBJECTIVES - if (istype(objective, /datum/objective/crew)) continue -#endif - message["objective[count]"] = objective.explanation_text - if(objective.check_completion()) - message["success[count]"] = 1 - else - message["success[count]"] = 0 - overallSuccess = 0 - count++ - - message["success"] = overallSuccess - message["objective_count"] = count - 1 - - var/traitor_type = M.special_role - message["traitor_type"] = traitor_type - var/special - switch(traitor_type) - if (ROLE_CHANGELING) - if (M.current) - var/datum/abilityHolder/changeling/C = M.current.get_ability_holder(/datum/abilityHolder/changeling) - if (C && istype(C)) - special = C.absorbtions - if (ROLE_VAMPIRE) - if (M.current) - special = M.current.get_vampire_blood(1) - if (ROLE_WIZARD) - if (M.current) - var/datum/abilityHolder/wizard/W = M.current.get_ability_holder(/datum/abilityHolder/wizard) - if (W && istype(W)) - var/spells = "" - for (var/datum/targetable/spell/S in W.abilities) - if (spells != "") - spells += ", " - spells += S.name - if (ROLE_WEREWOLF) - for (var/datum/objective/specialist/werewolf/feed/O in M.objectives) - if (O && istype(O, /datum/objective/specialist/werewolf/feed/)) - special = length(O.mobs_fed_on) - if (ROLE_VAMPTHRALL, ROLE_MINDHACK) - var/datum/mind/master = M.get_master(traitor_type) - if (master?.current) - special = master.current.real_name - if (ROLE_FLOCKMIND) - var/relay_successful = FALSE - if (isflockmob(M.current)) - if (!istype(M.current, /mob/living/critter/flock/drone)) - var/mob/living/intangible/flock/flockmind/flockmind = M.current - relay_successful = flockmind.flock.relay_finished - else - var/mob/living/critter/flock/drone/flockdrone = M.current - relay_successful = flockdrone.flock.relay_finished - special = "Relay transmission [relay_successful ? "successful" : "unsuccessful"]" - if (ROLE_FLOCKTRACE) - if (isflockmob(M.current)) - var/datum/flock/flock_joined = null - if (!istype(M.current, /mob/living/critter/flock/drone)) - var/mob/living/intangible/flock/trace/flocktrace = M.current - flock_joined = flocktrace.flock - else - var/mob/living/critter/flock/drone/flockdrone = M.current - flock_joined = flockdrone.flock - special = "Part of Flock [flock_joined.name]" - if (ROLE_NUKEOP, ROLE_NUKEOP_COMMANDER) - if (istype(ticker.mode, /datum/game_mode/nuclear)) - special = syndicate_name() - if (ticker.mode:nuke_detonated) - message["success"] = 1 - if (ROLE_SPY_THIEF) - special = "Bounties claimed: " - var/datum/antagonist/spy_thief/antag_role = M.get_antagonist(ROLE_SPY_THIEF) - for(var/stolen_item in antag_role.stolen_items) - if (stolen_item) - special += stolen_item - - message["special"] = special - - if (M.late_special_role) - message["late_joiner"] = 1 - /*else if (M.random_event_special_role) - message["random_event"] = 1*/ - else - message["late_joiner"] = 0 - //message["random_event"] = 0 - - hublog << list2params(message) - -//BEES -/proc/statlog_bees(var/obj/critter/domestic_bee/B) - var/message[] = new() - message["data_type"] = "bees" - message["data_status"] = "insert" - message["data_timestamp"] = time2text(world.realtime, "YYYY-MM-DD hh:mm:ss") - - message["name"] = B.name - - if(B.beeMom) - message["mom"] = B.beeMom.real_name - - hublog << list2params(message) - -//Called in gameticker.dm at proc/declare_completion, ai_laws.dm at set_zeroth_law and add_supplied_law -/proc/statlog_ailaws(var/during, var/law, adder) - - - //For individual laws - if (during) - var/message[] = new() - message["data_type"] = "ai_laws" - message["data_status"] = "insert" - message["data_timestamp"] = time2text(world.realtime, "YYYY-MM-DD hh:mm:ss") - - if (ismob(adder)) - var/mob/M = adder - message["uploader_name"] = M.real_name - message["uploader_key"] = M.key - message["uploader_job"] = M.job - else - message["uploader_name"] = "Ion Storm" - message["uploader_key"] = "Random Event" - message["uploader_job"] = "" - - message["type"] = "during" - message["law_text"] = html_decode(law) - - hublog << list2params(message) - return 1 - //For end of round laws - else - for_by_tcl(aiPlayer, /mob/living/silicon/ai) - var/laws[] = new() - if(aiPlayer.law_rack_connection) - laws = aiPlayer.law_rack_connection.format_for_irc() - - for (var/key in laws) - var/message[] = new() - message["data_type"] = "ai_laws" - message["data_status"] = "insert" - message["data_timestamp"] = time2text(world.realtime, "YYYY-MM-DD hh:mm:ss") - - message["ai_name"] = aiPlayer.real_name - message["ai_key"] = aiPlayer.key - message["type"] = "end" - message["law_number"] = key - message["law_text"] = html_decode(laws[key]) - - hublog << list2params(message) - - return 1 - -#ifdef HALLOWEEN -/proc/statlog_spookpoints()//(/datum/spooktober_ghost_handler/SGH) - var/groupedPoints[] = new() - - for (var/i in spooktober_GH.earned_points) - if (!groupedPoints[i]) groupedPoints[i] = list("earned" = 0, "spent" = 0) - groupedPoints[i]["earned"] = spooktober_GH.earned_points[i] - for (var/i in spooktober_GH.spent_points) - if (!groupedPoints[i]) groupedPoints[i] = list("earned" = 0, "spent" = 0) - groupedPoints[i]["spent"] = spooktober_GH.spent_points[i] - - for (var/ckey in groupedPoints) - var/message[] = new() - message["data_type"] = "ghostpoints" - message["data_status"] = "insert" - message["data_timestamp"] = time2text(world.realtime, "YYYY-MM-DD hh:mm:ss") - - message["ckey"] = ckey - message["earned"] = groupedPoints[ckey]["earned"] - message["spent"] = groupedPoints[ckey]["spent"] - - hublog << list2params(message) -#endif diff --git a/code/procs/station_name.dm b/code/procs/station_name.dm index b3e89ff7294e6..68cc73fb11931 100644 --- a/code/procs/station_name.dm +++ b/code/procs/station_name.dm @@ -20,8 +20,8 @@ var/global/station_name_changing = 1 //Are people allowed to change the station var/global/station_or_ship = null var/global/station_name = null var/global/the_station_name = null -var/global/list/station_name_whitelist = new() -var/global/list/station_name_whitelist_sectioned = new() +var/global/list/station_name_whitelist = list() +var/global/list/station_name_whitelist_sectioned = list() var/global/stationNameChangeDelay = 1 MINUTE //deciseconds. 600 = 60 seconds var/global/lastStationNameChange = 0 //timestamp @@ -224,6 +224,9 @@ var/global/lastStationNameChange = 0 //timestamp else the_station_name = name + var/datum/eventRecord/StationName/stationNameEvent = new() + stationNameEvent.send(name) + station_name = name var/extra = null diff --git a/code/turf/floors.dm b/code/turf/floors.dm index 9565f58be94f1..05bc87896bbab 100644 --- a/code/turf/floors.dm +++ b/code/turf/floors.dm @@ -25,6 +25,9 @@ var/tmp/roundstart_dir /// if this turf is immune to explosion (explosion immune turfs immediately return on ex_act()) var/explosion_immune = FALSE + ///Things that are hidden "in" this turf that are revealed when it is pried up. + ///Kept in a hidden object on the turf so that `get_turf` works as normal. Yes this is crime, fight me I have a possum. + var/obj/effects/hidden_contents_holder/hidden_contents = null New() ..() @@ -1897,6 +1900,16 @@ DEFINE_FLOORS(solidcolor/black/fullbright, to_plating() playsound(src, 'sound/items/Crowbar.ogg', 80, TRUE) +/turf/simulated/floor/levelupdate() + ..() + if (!src.intact && src.hidden_contents) + for(var/atom/movable/AM as anything in src.hidden_contents) + AM.set_loc(src) + SEND_SIGNAL(AM, COMSIG_MOVABLE_FLOOR_REVEALED, src) + qdel(src.hidden_contents) //it's an obj, see the definition for crime justification + src.hidden_contents = null + + /turf/simulated/floor/attackby(obj/item/C, mob/user, params) if (!C || !user) @@ -2108,6 +2121,11 @@ DEFINE_FLOORS(solidcolor/black/fullbright, ReplaceWithFloor() src.to_plating() +/turf/simulated/floor/proc/hide_inside(atom/movable/AM) + if (!src.hidden_contents) + src.hidden_contents = new(src) + AM.set_loc(src.hidden_contents) + /turf/simulated/floor/MouseDrop_T(atom/A, mob/user as mob) ..(A,user) if(istype(A,/turf/simulated/floor)) @@ -2119,6 +2137,36 @@ DEFINE_FLOORS(solidcolor/black/fullbright, if(BOUNDS_DIST(user,F) == 0 && BOUNDS_DIST(user,src) == 0) C.move_callback(user, F, 0, src) +/turf/simulated/floor/ReplaceWith(what, keep_old_material, handle_air, handle_dir, force) + var/obj/effects/hidden_contents_holder/old_hidden_contents = src.hidden_contents //we have to do this because src will be the new turf after the replace due to byond + var/turf/simulated/floor/newfloor = ..() + if (istype(newfloor)) + newfloor.hidden_contents = old_hidden_contents + else + qdel(old_hidden_contents) + return newfloor + +/turf/simulated/floor/restore_tile() + ..() + for (var/obj/item/item in src.contents) + if (item.w_class <= W_CLASS_TINY && !item.anchored) //I wonder if this will cause problems + src.hide_inside(item) + +///CRIME +/obj/effects/hidden_contents_holder + name = "" + desc = "" + icon = null + anchored = ANCHORED_ALWAYS + invisibility = INVIS_ALWAYS + alpha = 0 + + set_loc(newloc) + if (!isnull(newloc)) + return + . = ..() + + ////////////////////////////////////////////ADVENTURE SIMULATED FLOORS//////////////////////// DEFINE_FLOORS_SIMMED_UNSIMMED(racing, icon = 'icons/misc/racing.dmi';\ @@ -2337,9 +2385,27 @@ DEFINE_FLOORS_SIMMED_UNSIMMED(racing/rainbow_road, icon = 'icons/misc/worlds.dmi' icon_state = "swampgrass_edge" +TYPEINFO(/turf/simulated/floor/auto) + /// List of types this autowall connects to + var/list/connects_to = null + /// Because connections now work by parent type searches, this is for when you don't want certain subtypes to connect. + /// This must be a typecache ([/proc/typecachesof]) list + var/list/connects_to_exceptions = null + /// do we have wall connection overlays, ex nornwalls? + var/connect_overlay = 0 + var/list/connects_with_overlay = null + var/list/connects_with_overlay_exceptions = null // same as above comment + var/connect_across_areas = TRUE + /// 0 = no diagonal sprites, 1 = diagonal only if both adjacent cardinals are present, 2 = always allow diagonals + var/connect_diagonal = 0 + /turf/simulated/floor/auto name = "auto edging turf" + var/mod = null + var/light_mod = null + /// The image we're using to connect to stuff with + var/image/connect_image = null ///turf won't draw edges on turfs with higher or equal priority var/edge_priority_level = 0 var/icon_state_edge = null @@ -2347,21 +2413,59 @@ DEFINE_FLOORS_SIMMED_UNSIMMED(racing/rainbow_road, New() . = ..() src.layer += src.edge_priority_level / 1000 - SPAWN(0.5 SECONDS) //give neighbors a chance to spawn in - edge_overlays() + if (current_state > GAME_STATE_WORLD_NEW) + SPAWN(0) //worldgen overrides ideally + UpdateIcon() + if(istype(src)) + update_neighbors() + else + worldgenCandidates += src + + generate_worldgen() + src.UpdateIcon() + if(istype(src)) + update_neighbors() + + update_icon() + . = ..() + src.edge_overlays() + if(src.mod) + var/typeinfo/turf/simulated/floor/auto/typinfo = get_typeinfo() + var/connectdir = get_connected_directions_bitflag(typinfo.connects_to, typinfo.connects_to_exceptions, typinfo.connect_across_areas, typinfo.connect_diagonal) + var/the_state = "[mod][connectdir]" + icon_state = the_state + + // if (light_mod) + // src.RL_SetSprite("[light_mod][connectdir]") + + if (typinfo.connect_overlay) + var/overlaydir = get_connected_directions_bitflag(typinfo.connects_with_overlay, typinfo.connects_with_overlay_exceptions, typinfo.connect_across_areas) + if (overlaydir) + if (!src.connect_image) + src.connect_image = image(src.icon, "connect[overlaydir]") + else + src.connect_image.icon_state = "connect[overlaydir]" + src.UpdateOverlays(src.connect_image, "connect") + else + src.UpdateOverlays(null, "connect") + + proc/update_neighbors() + for (var/turf/simulated/floor/auto/T in orange(1,src)) + T.UpdateIcon() proc/edge_overlays() - for (var/turf/T in orange(src,1)) - if (istype(T, /turf/simulated/floor/auto)) - var/turf/simulated/floor/auto/TA = T - if (TA.edge_priority_level >= src.edge_priority_level) - continue - var/direction = get_dir(T,src) - var/image/edge_overlay = image(src.icon, "[icon_state_edge][direction]") - edge_overlay.appearance_flags = PIXEL_SCALE | TILE_BOUND | RESET_COLOR | RESET_ALPHA - edge_overlay.layer = src.layer + (src.edge_priority_level / 1000) - edge_overlay.plane = PLANE_FLOOR - T.UpdateOverlays(edge_overlay, "edge_[direction]") + if(src.icon_state_edge) + for (var/turf/T in orange(src,1)) + if (istype(T, /turf/simulated/floor/auto)) + var/turf/simulated/floor/auto/TA = T + if (TA.edge_priority_level >= src.edge_priority_level) + continue + var/direction = get_dir(T,src) + var/image/edge_overlay = image(src.icon, "[icon_state_edge][direction]") + edge_overlay.appearance_flags = PIXEL_SCALE | TILE_BOUND | RESET_COLOR | RESET_ALPHA + edge_overlay.layer = src.layer + (src.edge_priority_level / 1000) + edge_overlay.plane = PLANE_FLOOR + T.UpdateOverlays(edge_overlay, "edge_[direction]") /turf/simulated/floor/auto/grass/swamp_grass name = "swamp grass" diff --git a/code/turf/floors_unsimulated.dm b/code/turf/floors_unsimulated.dm index 36a0e734762b8..e4622ac9ae262 100644 --- a/code/turf/floors_unsimulated.dm +++ b/code/turf/floors_unsimulated.dm @@ -1033,12 +1033,28 @@ TYPEINFO(/turf/unsimulated/floor/grass) can_burn = FALSE can_break = FALSE +TYPEINFO(/turf/unsimulated/floor/auto) + var/list/connects_to = null + /// must be typecache list + var/list/connects_to_exceptions = null + /// do we have wall connection overlays, ex nornwalls? + var/connect_overlay = 0 + var/list/connects_with_overlay = null + var/list/connects_with_overlay_exceptions = null + var/connect_across_areas = TRUE + /// 0 = no diagonal sprites, 1 = diagonal only if both adjacent cardinals are present, 2 = always allow diagonals + var/connect_diagonal = 0 + ///////////////////////////////////////// /turf/unsimulated/floor/auto name = "auto edging turf" can_burn = FALSE can_break = FALSE + var/mod = null + var/light_mod = null + /// The image we're using to connect to stuff with + var/image/connect_image = null ///turf won't draw edges on turfs with higher or equal priority var/edge_priority_level = 0 var/icon_state_edge = null @@ -1046,22 +1062,59 @@ TYPEINFO(/turf/unsimulated/floor/grass) New() . = ..() src.layer += src.edge_priority_level / 1000 - SPAWN(0.5 SECONDS) //give neighbors a chance to spawn in - if(istype(src)) - edge_overlays() + if (current_state > GAME_STATE_WORLD_NEW) + SPAWN(0) //worldgen overrides ideally + UpdateIcon() + if(istype(src)) + update_neighbors() + else + worldgenCandidates += src + + generate_worldgen() + src.UpdateIcon() + if(istype(src)) + update_neighbors() + + update_icon() + . = ..() + src.edge_overlays() + if(src.mod) + var/typeinfo/turf/unsimulated/floor/auto/typinfo = get_typeinfo() + var/connectdir = get_connected_directions_bitflag(typinfo.connects_to, typinfo.connects_to_exceptions, typinfo.connect_across_areas, typinfo.connect_diagonal) + var/the_state = "[mod][connectdir]" + icon_state = the_state + + // if (light_mod) + // src.RL_SetSprite("[light_mod][connectdir]") + + if (typinfo.connect_overlay) + var/overlaydir = get_connected_directions_bitflag(typinfo.connects_with_overlay, typinfo.connects_with_overlay_exceptions, typinfo.connect_across_areas) + if (overlaydir) + if (!src.connect_image) + src.connect_image = image(src.icon, "connect[overlaydir]") + else + src.connect_image.icon_state = "connect[overlaydir]" + src.UpdateOverlays(src.connect_image, "connect") + else + src.UpdateOverlays(null, "connect") + + proc/update_neighbors() + for (var/turf/unsimulated/floor/auto/T in orange(1,src)) + T.UpdateIcon() proc/edge_overlays() - for (var/turf/T in orange(src,1)) - if (istype(T, /turf/unsimulated/floor/auto)) - var/turf/unsimulated/floor/auto/TA = T - if (TA.edge_priority_level >= src.edge_priority_level) - continue - var/direction = get_dir(T,src) - var/image/edge_overlay = image(src.icon, "[icon_state_edge][direction]") - edge_overlay.appearance_flags = PIXEL_SCALE | TILE_BOUND | RESET_COLOR | RESET_ALPHA - edge_overlay.layer = src.layer + (src.edge_priority_level / 1000) - edge_overlay.plane = PLANE_FLOOR - T.UpdateOverlays(edge_overlay, "edge_[direction]") + if(src.icon_state_edge) + for (var/turf/T in orange(src,1)) + if (istype(T, /turf/unsimulated/floor/auto)) + var/turf/unsimulated/floor/auto/TA = T + if (TA.edge_priority_level >= src.edge_priority_level) + continue + var/direction = get_dir(T,src) + var/image/edge_overlay = image(src.icon, "[icon_state_edge][direction]") + edge_overlay.appearance_flags = PIXEL_SCALE | TILE_BOUND | RESET_COLOR | RESET_ALPHA + edge_overlay.layer = src.layer + (src.edge_priority_level / 1000) + edge_overlay.plane = PLANE_FLOOR + T.UpdateOverlays(edge_overlay, "edge_[direction]") /turf/unsimulated/floor/auto/grass/swamp_grass name = "swamp grass" diff --git a/code/turf/turf.dm b/code/turf/turf.dm index 0dc3ac727ca1d..6ba6b04207411 100644 --- a/code/turf/turf.dm +++ b/code/turf/turf.dm @@ -856,7 +856,8 @@ var/global/in_replace_with = 0 #undef _OLD_GAS_VAR_RESTORE #undef _OLD_GAS_VAR_NOT_NULL - + if(N.air) + N.update_visuals(N.air) // tell atmos to update this tile's air settings if (air_master) air_master.tiles_to_update |= N @@ -864,6 +865,7 @@ var/global/in_replace_with = 0 if (air_master && oldparent) //Handling air parent changes for oldparent for Simulated -> Anything air_master.groups_to_rebuild |= oldparent //Puts the oldparent into a queue to update the members. + if (istype(new_turf, /turf/simulated)) // tells the atmos system "hey this tile changed, maybe rebuild the group / borders" new_turf.update_nearby_tiles(1) diff --git a/code/world/initialization/1_New.dm b/code/world/initialization/1_New.dm index 9172076868196..eb1bb93d33fc9 100644 --- a/code/world/initialization/1_New.dm +++ b/code/world/initialization/1_New.dm @@ -17,15 +17,13 @@ diary_name = "data/logs/[time2text(world.realtime, "YYYY/MM-Month/DD-Day")].log" logDiary("\n----------------------\nStarting up. [time2text(world.timeofday, "hh:mm.ss")]\n----------------------\n") - //This is used by bans for checking, so we want it very available + // Global handlers that should be highly available apiHandler = new() - + eventRecorder = new() + roundManagement = new() participationRecorder = new() - //participationRecorder = new(1) //Enable debug - antagWeighter = new() - - if(!chui) chui = new() + if (!chui) chui = new() //This is also used pretty early Z_LOG_DEBUG("World/New", "Setting up powernets...") diff --git a/code/world/initialization/2_init.dm b/code/world/initialization/2_init.dm index fb2b4a28bf7e6..573c02e44c591 100644 --- a/code/world/initialization/2_init.dm +++ b/code/world/initialization/2_init.dm @@ -8,6 +8,9 @@ game_start_countdown = new() UPDATE_TITLE_STATUS("Initializing world") + Z_LOG_DEBUG("World/Init", "Notifying hub of new round") + roundManagement.recordStart() + Z_LOG_DEBUG("World/Init", "Loading MOTD...") src.load_motd()//GUH Z_LOG_DEBUG("World/Init", "Loading admins...") @@ -102,8 +105,6 @@ logTheThing(LOG_STATION, null, "Map: [getMapNameFromID(map_setting)]") #endif - Z_LOG_DEBUG("World/Init", "Notifying hub of new round") - round_start_data() //Tell the hub site a round is starting if (time2text(world.realtime,"DDD") == "Fri") NT |= mentors diff --git a/code/world/reboot.dm b/code/world/reboot.dm index 77e0be89b688b..58d0df969229a 100644 --- a/code/world/reboot.dm +++ b/code/world/reboot.dm @@ -36,6 +36,7 @@ save_tetris_highscores() if (current_state < GAME_STATE_FINISHED) current_state = GAME_STATE_FINISHED + eventRecorder.process() // Ensure any remaining events are processed #if defined(CI_RUNTIME_CHECKING) || defined(UNIT_TESTS) for (var/client/C in clients) ehjax.send(C, "browseroutput", "hardrestart") diff --git a/code/world/topic.dm b/code/world/topic.dm index d301e62e95aa2..1ccc4e08ea45e 100644 --- a/code/world/topic.dm +++ b/code/world/topic.dm @@ -342,7 +342,7 @@ if (findtext(addr, ":")) // remove port if present addr = splittext(addr, ":")[1] - if (addr != config.ircbot_ip && addr != config.goonhub_api_ip && addr != config.goonhub2_hostname) + if (addr != config.ircbot_ip && addr != config.goonhub_api_ip) return 0 //ip filtering var/list/plist = params2list(T) @@ -633,44 +633,6 @@ else return 0 - if ("hubCallback") - //Wire note: Temp debug logging as this should always get data and proc - if (!plist["data"]) - logTheThing(LOG_DEBUG, null, "<b>API Error (Temp):</b> Didnt get data.") - return 0 - if (!plist["proc"]) - logTheThing(LOG_DEBUG, null, "<b>API Error (Temp):</b> Didnt get proc.") - return 0 - - if (addr != config.goonhub_api_ip) return 0 //ip filtering - var/auth = plist["auth"] - if (auth != md5(config.goonhub_api_token)) return 0 //really bad md5 token security - var/theDatum = plist["datum"] ? plist["datum"] : null - var/theProc = "/proc/[plist["proc"]]" - - var/list/ldata - try - ldata = json_decode(plist["data"]) - catch - logTheThing(LOG_DEBUG, null, "<b>API Error:</b> Invalid JSON detected: [plist["data"]]") - return 0 - - ldata["data_hub_callback"] = 1 - - //calls the second stage of whatever proc specified - var/rVal - if (theDatum) - rVal = call(theDatum, theProc)(ldata) - else - rVal = call(theProc)(ldata) - - if (rVal) - logTheThing(LOG_DEBUG, null, "<b>Callback Error</b> - Hub callback failed in [theDatum ? "<b>[theDatum]</b> " : ""]<b>[theProc]</b> with message: <b>[rVal]</b>") - logTheThing(LOG_DIARY, null, "<b>Callback Error</b> - Hub callback failed in [theDatum ? "[theDatum] " : ""][theProc] with message: [rVal]", "debug") - return 0 - else - return 1 - if ("roundEnd") if (!plist["server"] || !plist["address"]) return 0 @@ -701,6 +663,13 @@ return 1 + if ("numbersStation") + if (!plist["numbers"]) return 0 + + lincolnshire_numbers(plist["numbers"]) + + return 1 + //Tells shitbee what the current AI laws are (if there are any custom ones) if ("ailaws") if (current_state > GAME_STATE_PREGAME) @@ -760,15 +729,16 @@ var/ircmsg[] = new() ircmsg["major"] = world.byond_version ircmsg["minor"] = world.byond_build - ircmsg["goonhub_api"] = config.goonhub_api_version ? config.goonhub_api_version : 0 return ircbot.response(ircmsg) if ("youtube") if (!plist["data"]) return 0 play_music_remote(json_decode(plist["data"])) + // trigger cooldown so radio station doesn't interrupt our cool music - EXTEND_COOLDOWN(global, "music", 2 MINUTES) // TODO use plist duration data if available + var/duration = text2num(plist["duration"]) + EXTEND_COOLDOWN(global, "music", duration SECONDS) return 1 if ("delay") @@ -864,67 +834,48 @@ if (!plist["ckey"]) return 0 - var/list/data = list( - "auth" = config.player_notes_auth, - "action" = "get", - "ckey" = plist["ckey"], - "format" = "json" - ) - - // Fetch notes via HTTP - var/datum/http_request/request = new() - request.prepare(RUSTG_HTTP_METHOD_GET, "[config.player_notes_baseurl]/?[list2params(data)]", "", "") - request.begin_async() - UNTIL(request.is_complete()) - var/datum/http_response/response = request.into_response() - - if (response.errored || !response.body) - return 0 - - return response.body + try + var/datum/apiRoute/players/notes/get/getPlayerNotes = new + getPlayerNotes.queryParams = list( + "filters" = list( + "ckey" = plist["ckey"] + ) + ) + return apiHandler.queryAPI(getPlayerNotes) + catch + return FALSE if ("getPlayerStats") if (!plist["ckey"]) return 0 - // playtime stats - var/list/data = list( - "auth" = config.player_notes_auth, - "action" = "user_stats", - "ckey" = plist["ckey"], - "format" = "json" - ) - var/datum/http_request/playtime_request = new() - playtime_request.prepare(RUSTG_HTTP_METHOD_GET, "[config.player_notes_baseurl]/?[list2params(data)]", "", "") - playtime_request.begin_async() - - // round stats - // cleverly making this request inbetween the start and the wait of the playtime request - var/list/response = null + var/datum/apiModel/Tracked/PlayerStatsResource/playerStats try - response = apiHandler.queryAPI("playerInfo/get", list("ckey" = plist["ckey"]), forceResponse = 1) + var/datum/apiRoute/players/stats/get/getPlayerStats = new + getPlayerStats.queryParams = list("ckey" = plist["ckey"]) + playerStats = apiHandler.queryAPI(getPlayerStats) catch - return 0 - if (!response) - return 0 - - // finish playtime stats - UNTIL(playtime_request.is_complete()) - var/datum/http_response/playtime_response = playtime_request.into_response() - if (!playtime_response.errored && playtime_response.body) - response["playtime"] = playtime_response.body + return FALSE + + var/list/response = list( + "seen" = playerStats.connected, + "seen_rp" = playerStats.connected_rp, + "participated" = playerStats.played, + "participated_rp" = playerStats.played_rp, + "playtime" = playerStats.time_played + ) var/datum/player/player = make_player(plist["ckey"]) if(isnull(player.last_seen)) player.cache_round_stats_blocking() if(player) response["last_seen"] = player.last_seen - if(player.cloud_fetch()) - for(var/kkey in player.clouddata) - if(kkey in list("admin_preferences", "buildmode")) - continue - response[kkey] = player.clouddata[kkey] - response["cloudsaves"] = player.cloudsaves + player.cloudSaves.fetch() + for(var/kkey in player.cloudSaves.data) + if(kkey in list("admin_preferences", "buildmode")) + continue + response[kkey] = player.cloudSaves.data[kkey] + response["cloudsaves"] = player.cloudSaves.saves return json_encode(response) diff --git a/code/z_adventurezones/biodome.dm b/code/z_adventurezones/biodome.dm index 57e5355b084fa..f4d33af91c16e 100644 --- a/code/z_adventurezones/biodome.dm +++ b/code/z_adventurezones/biodome.dm @@ -581,6 +581,17 @@ SYNDICATE DRONE FACTORY AREAS var/active = 0 + New() + . = ..() + if (current_state > GAME_STATE_WORLD_NEW) + SPAWN(0) //worldgen overrides ideally + UpdateIcon() + else + worldgenCandidates += src + + proc/generate_worldgen() + src.UpdateIcon() + proc/do_move(var/direction) if(active) return var/turf/tile = get_step(src,direction) @@ -599,6 +610,8 @@ SYNDICATE DRONE FACTORY AREAS tile.invisibility = INVIS_ALWAYS_ISH tile.set_opacity(1) active = 0 + src.UpdateIcon() + update_neighbors() find_suitable_tiles() var/list/possible = new/list() @@ -640,9 +653,24 @@ SYNDICATE DRONE FACTORY AREAS picked.invisibility = INVIS_ALWAYS_ISH picked.set_opacity(1) active = 0 + src.UpdateIcon() + update_neighbors() //SPAWN(rand(100,200)) update() // raised delay + proc/update_neighbors() + for (var/turf/unsimulated/wall/auto/T in orange(1,src)) + T.UpdateIcon() + for (var/obj/shifting_wall/sneaky/cave/W in orange(1,src)) + W.UpdateIcon() + + update_icon() + var/typeinfo/turf/unsimulated/wall/auto/typinfo = get_type_typeinfo(/turf/unsimulated/wall/auto/adventure) + var/connectdir = get_connected_directions_bitflag(typinfo.connects_to, typinfo.connects_to_exceptions, TRUE, typinfo.connect_diagonal) + var/mod = "cave-" + var/the_state = "[mod][connectdir]" + icon_state = the_state + /obj/line_obj/whip name = "Whip" desc = "" diff --git a/code/z_adventurezones/gannets_dojozone.dm b/code/z_adventurezones/gannets_dojozone.dm index f6f52a67ad397..9655188e13785 100644 --- a/code/z_adventurezones/gannets_dojozone.dm +++ b/code/z_adventurezones/gannets_dojozone.dm @@ -535,7 +535,7 @@ Contents: else playsound(src, 'sound/impact_sounds/Stone_Scrape_1.ogg', 40) for(var/obj/machinery/dojo_tatara/T in orange(2)) - src.visible_message("\The [src] breathe life into \the [T] causing it errupt in flames.", blind_message="A loud roar of air causes a fire to errupt.") + src.visible_message("\The [src] breathe life into \the [T] causing it erupt in flames.", blind_message="A loud roar of air causes a fire to erupt.") T.temperature = clamp(T.temperature + 150, initial(T.temperature)-150, T0C+2500) /obj/decal/fakeobjects/swordrack diff --git a/code/z_adventurezones/lavamoon.dm b/code/z_adventurezones/lavamoon.dm index e693fdfb28d1e..c69449e0a4f56 100644 --- a/code/z_adventurezones/lavamoon.dm +++ b/code/z_adventurezones/lavamoon.dm @@ -574,7 +574,7 @@ var/sound/iomoon_alarm_sound = null . = ..() //Clothing & Associated Equipment -/obj/item/clothing/suit/rad/iomoon +/obj/item/clothing/suit/hazard/rad/iomoon name = "FB-8 Environment Suit" desc = "A rather old-looking suit designed to guard against extreme heat and radiation." icon_state = "rad_io" @@ -598,7 +598,7 @@ var/sound/iomoon_alarm_sound = null icon_state = "syndicate" icon_opened = "syndicate-open" icon_closed = "syndicate" - spawn_contents = list(/obj/item/clothing/suit/rad/iomoon,\ + spawn_contents = list(/obj/item/clothing/suit/hazard/rad/iomoon,\ /obj/item/clothing/head/rad_hood/iomoon) /obj/machinery/light/small/iomoon diff --git a/code/z_adventurezones/numbersstation.dm b/code/z_adventurezones/numbersstation.dm index 6c665c488be1d..74af3bc270dd5 100644 --- a/code/z_adventurezones/numbersstation.dm +++ b/code/z_adventurezones/numbersstation.dm @@ -255,7 +255,12 @@ Nanotrasen, Inc.<br> next_play = play_interval next_warning = next_play - 300 SPAWN(20 SECONDS) - apiHandler.queryAPI("numbers/get") + try + var/datum/apiRoute/numbersstation/get/getNumbers = new + var/datum/apiModel/NumbersStationPasswordResource/numbersStationPassword = apiHandler.queryAPI(getNumbers) + lincolnshire_numbers(numbersStationPassword.numbers) + catch + // pass proc/gather_listeners() listeners = list() @@ -410,21 +415,18 @@ var/global/datum/numbers_station/lincolnshire = new lincolnshire.next_play = 0 lincolnshire.process() -/proc/lincolnshire_numbers(data) - if (islist(data)) - logTheThing(LOG_DEBUG, null, "<b>Numbers station</b>: numbers: [data["numbers"]]") - var/TP = data["numbers"] - if (TP == null) - return 1 - var/list/nums = splittext(TP, " ") - if (length(nums) < 21) - logTheThing(LOG_DEBUG, null, "<b>Numbers station</b> got too few numbers.") - return 2 - for (var/i = 1, i <= 21, i++) - lincolnshire.numbers[i] = text2num(nums[i]) - logTheThing(LOG_DEBUG, null, "<b>Numbers station</b> woo success") - return 0 - return 3 +/proc/lincolnshire_numbers(numbers) + logTheThing(LOG_DEBUG, null, "<b>Numbers station</b>: numbers: [numbers]") + if (numbers == null) + return FALSE + var/list/nums = splittext(numbers, " ") + if (length(nums) < 21) + logTheThing(LOG_DEBUG, null, "<b>Numbers station</b> got too few numbers.") + return FALSE + for (var/i = 1, i <= 21, i++) + lincolnshire.numbers[i] = text2num(nums[i]) + logTheThing(LOG_DEBUG, null, "<b>Numbers station</b> woo success") + return TRUE // This particular edition of the handbook is used as the cipher for the numbers station. diff --git a/goonstation.dme b/goonstation.dme index 96346ce181d2f..0a4f725bad526 100644 --- a/goonstation.dme +++ b/goonstation.dme @@ -16,7 +16,7 @@ var/datum/preMapLoad/preMapLoad = new // END_PREFERENCES // Compiler Settings -#include "_std\__odlint.dm" +#include "_std\__odlint.dme" // Compatibility Check #include "_std\compatibility.dme" @@ -64,7 +64,6 @@ var/datum/preMapLoad/preMapLoad = new #include "code\datums\admin_powers.dm" #include "code\datums\ai_laws.dm" #include "code\datums\antag_weighting.dm" -#include "code\datums\api_handler.dm" #include "code\datums\banking.dm" #include "code\datums\browserOutput.dm" #include "code\datums\buildmode.dm" @@ -72,6 +71,7 @@ var/datum/preMapLoad/preMapLoad = new #include "code\datums\changelog.dm" #include "code\datums\character_preview.dm" #include "code\datums\client_image_group.dm" +#include "code\datums\cloud_saves.dm" #include "code\datums\computerfiles.dm" #include "code\datums\configuration.dm" #include "code\datums\cookingrecipes.dm" @@ -115,6 +115,7 @@ var/datum/preMapLoad/preMapLoad = new #include "code\datums\pronouns.dm" #include "code\datums\rand.dm" #include "code\datums\recipes.dm" +#include "code\datums\round_management.dm" #include "code\datums\savefile.dm" #include "code\datums\sims.dm" #include "code\datums\spawn_rules.dm" @@ -135,6 +136,7 @@ var/datum/preMapLoad/preMapLoad = new #include "code\datums\abilities\brassgauntlet.dm" #include "code\datums\abilities\critter.dm" #include "code\datums\abilities\cruiser.dm" +#include "code\datums\abilities\dancing.dm" #include "code\datums\abilities\diabolical.dm" #include "code\datums\abilities\flockdrone.dm" #include "code\datums\abilities\generic.dm" @@ -301,6 +303,7 @@ var/datum/preMapLoad/preMapLoad = new #include "code\datums\controllers\process\chemistry.dm" #include "code\datums\controllers\process\critters.dm" #include "code\datums\controllers\process\delete_queue.dm" +#include "code\datums\controllers\process\events.dm" #include "code\datums\controllers\process\explosions.dm" #include "code\datums\controllers\process\flock.dm" #include "code\datums\controllers\process\fluid.dm" @@ -316,6 +319,7 @@ var/datum/preMapLoad/preMapLoad = new #include "code\datums\controllers\process\mob_ui.dm" #include "code\datums\controllers\process\mobs.dm" #include "code\datums\controllers\process\particles.dm" +#include "code\datums\controllers\process\poll_sync.dm" #include "code\datums\controllers\process\precipitation.dm" #include "code\datums\controllers\process\railway.dm" #include "code\datums\controllers\process\random_events.dm" @@ -370,6 +374,7 @@ var/datum/preMapLoad/preMapLoad = new #include "code\datums\gamemodes\mixed.dm" #include "code\datums\gamemodes\mixed_rp.dm" #include "code\datums\gamemodes\nuclear.dm" +#include "code\datums\gamemodes\pirate.dm" #include "code\datums\gamemodes\pod_wars.dm" #include "code\datums\gamemodes\revolution.dm" #include "code\datums\gamemodes\salvager.dm" @@ -397,6 +402,7 @@ var/datum/preMapLoad/preMapLoad = new #include "code\datums\hud\flockdrone.dm" #include "code\datums\hud\flockmind.dm" #include "code\datums\hud\funimage.dm" +#include "code\datums\hud\gang_victory.dm" #include "code\datums\hud\ghost_observer.dm" #include "code\datums\hud\ghostdrone.dm" #include "code\datums\hud\human.dm" @@ -444,7 +450,6 @@ var/datum/preMapLoad/preMapLoad = new #include "code\datums\webelements\tag.dm" #include "code\datums\webelements\textarea.dm" #include "code\datums\webelements\title.dm" -#include "code\lists\ckey_configs.dm" #include "code\lists\jobs.dm" #include "code\mob\dead.dm" #include "code\mob\input.dm" @@ -570,6 +575,7 @@ var/datum/preMapLoad/preMapLoad = new #include "code\mob\living\life\critical.dm" #include "code\mob\living\life\decomposition.dm" #include "code\mob\living\life\disability.dm" +#include "code\mob\living\life\faith.dm" #include "code\mob\living\life\fire.dm" #include "code\mob\living\life\health_mon.dm" #include "code\mob\living\life\hud.dm" @@ -588,7 +594,6 @@ var/datum/preMapLoad/preMapLoad = new #include "code\mob\living\silicon\hivebot.dm" #include "code\mob\living\silicon\robot.dm" #include "code\mob\living\silicon\robot_locks.dm" -#include "code\mob\living\silicon\robot_oil.dm" #include "code\mob\living\silicon\robot_statusupdate.dm" #include "code\mob\living\silicon\ai\ai_abilities.dm" #include "code\mob\living\silicon\ai\camera_handling.dm" @@ -607,6 +612,7 @@ var/datum/preMapLoad/preMapLoad = new #include "code\modules\admin\adminsay.dm" #include "code\modules\admin\antagifiers.dm" #include "code\modules\admin\atom_verbs.dm" +#include "code\modules\admin\ban_panel.dm" #include "code\modules\admin\bans.dm" #include "code\modules\admin\banshark.dm" #include "code\modules\admin\bioeffectmanager.dm" @@ -1056,6 +1062,7 @@ var/datum/preMapLoad/preMapLoad = new #include "code\modules\chemistry\tools\stimpack.dm" #include "code\modules\chemistry\tools\syringes.dm" #include "code\modules\chemistry\tools\vendor_items.dm" +#include "code\modules\config\ckey_configs.dm" #include "code\modules\cross_server\cross_server_message.dm" #include "code\modules\cross_server\game_servers.dm" #include "code\modules\cross_server\server_list.dm" @@ -1168,6 +1175,193 @@ var/datum/preMapLoad/preMapLoad = new #include "code\modules\food_and_drink\sandwiches.dm" #include "code\modules\food_and_drink\snacks.dm" #include "code\modules\forensics\atom_forensic.dm" +#include "code\modules\goonhub\api\api.dm" +#include "code\modules\goonhub\api\models\_Paginated.dm" +#include "code\modules\goonhub\api\models\_PlayerResParent.dm" +#include "code\modules\goonhub\api\models\_Tracked.dm" +#include "code\modules\goonhub\api\models\apiModel.dm" +#include "code\modules\goonhub\api\models\Error.dm" +#include "code\modules\goonhub\api\models\Message.dm" +#include "code\modules\goonhub\api\models\bans\BanDetail.dm" +#include "code\modules\goonhub\api\models\bans\BanResource.dm" +#include "code\modules\goonhub\api\models\bans\BanResourceList.dm" +#include "code\modules\goonhub\api\models\bans\JobBanResource.dm" +#include "code\modules\goonhub\api\models\bans\JobBanResourceList.dm" +#include "code\modules\goonhub\api\models\bans\JobBansForPlayer.dm" +#include "code\modules\goonhub\api\models\dectalk\DectalkPlayResource.dm" +#include "code\modules\goonhub\api\models\events\EventAiLawResource.dm" +#include "code\modules\goonhub\api\models\events\EventFineResource.dm" +#include "code\modules\goonhub\api\models\events\EventStationNameResource.dm" +#include "code\modules\goonhub\api\models\events\EventTicketResource.dm" +#include "code\modules\goonhub\api\models\gameadmins\GameAdmin.dm" +#include "code\modules\goonhub\api\models\gameadmins\GameAdminRank.dm" +#include "code\modules\goonhub\api\models\gameadmins\GameAdminResource.dm" +#include "code\modules\goonhub\api\models\gauntlet\PreviousGauntlets.dm" +#include "code\modules\goonhub\api\models\maps\MapSwitch.dm" +#include "code\modules\goonhub\api\models\medals\MedalResource.dm" +#include "code\modules\goonhub\api\models\numbersstation\NumbersStationPasswordResource.dm" +#include "code\modules\goonhub\api\models\players\GetPlayerSaves.dm" +#include "code\modules\goonhub\api\models\players\PlayerAntagResource.dm" +#include "code\modules\goonhub\api\models\players\PlayerCompIdsResource.dm" +#include "code\modules\goonhub\api\models\players\PlayerConnection.dm" +#include "code\modules\goonhub\api\models\players\PlayerDataResource.dm" +#include "code\modules\goonhub\api\models\players\PlayerIpsResource.dm" +#include "code\modules\goonhub\api\models\players\PlayerMedalResource.dm" +#include "code\modules\goonhub\api\models\players\PlayerMedalResourceList.dm" +#include "code\modules\goonhub\api\models\players\PlayerMetadataArray.dm" +#include "code\modules\goonhub\api\models\players\PlayerMetadataList.dm" +#include "code\modules\goonhub\api\models\players\PlayerMetadataResource.dm" +#include "code\modules\goonhub\api\models\players\PlayerNoteResource.dm" +#include "code\modules\goonhub\api\models\players\PlayerNoteResourceList.dm" +#include "code\modules\goonhub\api\models\players\PlayerParticipationResource.dm" +#include "code\modules\goonhub\api\models\players\PlayerResource.dm" +#include "code\modules\goonhub\api\models\players\PlayerSaveResource.dm" +#include "code\modules\goonhub\api\models\players\PlayerStatsResource.dm" +#include "code\modules\goonhub\api\models\players\weird\PlayerSearchResource.dm" +#include "code\modules\goonhub\api\models\polls\PollAnswerResource.dm" +#include "code\modules\goonhub\api\models\polls\PollOptionResource.dm" +#include "code\modules\goonhub\api\models\polls\PollResource.dm" +#include "code\modules\goonhub\api\models\polls\PollResourceList.dm" +#include "code\modules\goonhub\api\models\randomentries\RandomEntries.dm" +#include "code\modules\goonhub\api\models\rounds\GameRound.dm" +#include "code\modules\goonhub\api\models\vpn\VpnCheckResource.dm" +#include "code\modules\goonhub\api\models\vpn\VpnWhitelistResource.dm" +#include "code\modules\goonhub\api\models\vpn\VpnWhitelistSearch.dm" +#include "code\modules\goonhub\api\requests\apiBody.dm" +#include "code\modules\goonhub\api\requests\RemoteMusicBody.dm" +#include "code\modules\goonhub\api\requests\bans\AddBansBody.dm" +#include "code\modules\goonhub\api\requests\bans\AddBansDetailBody.dm" +#include "code\modules\goonhub\api\requests\bans\AddJobBansBody.dm" +#include "code\modules\goonhub\api\requests\bans\DeleteBansBody.dm" +#include "code\modules\goonhub\api\requests\bans\DeleteJobBanBody.dm" +#include "code\modules\goonhub\api\requests\bans\UpdateJobBansBody.dm" +#include "code\modules\goonhub\api\requests\dectalk\DectalkPlayBody.dm" +#include "code\modules\goonhub\api\requests\gameadmins\AddGameAdminsBody.dm" +#include "code\modules\goonhub\api\requests\gameadmins\UpdateGameAdminsBody.dm" +#include "code\modules\goonhub\api\requests\maps\MapSwitchBody.dm" +#include "code\modules\goonhub\api\requests\players\PlayerAntagsBody.dm" +#include "code\modules\goonhub\api\requests\players\PlayerLoginBody.dm" +#include "code\modules\goonhub\api\requests\players\PlayerMetadataBody.dm" +#include "code\modules\goonhub\api\requests\players\PlayerParticipationsBody.dm" +#include "code\modules\goonhub\api\requests\players\PlayerParticipationsBulkBody.dm" +#include "code\modules\goonhub\api\requests\players\PlayerPlaytimeBody.dm" +#include "code\modules\goonhub\api\requests\players\PlayerSavesAddDataBody.dm" +#include "code\modules\goonhub\api\requests\players\PlayerSavesAddSaveBody.dm" +#include "code\modules\goonhub\api\requests\players\PlayerSavesBulkBody.dm" +#include "code\modules\goonhub\api\requests\players\PlayerSavesDeleteDataBody.dm" +#include "code\modules\goonhub\api\requests\players\PlayerSavesDeleteSaveBody.dm" +#include "code\modules\goonhub\api\requests\players\PlayerSavesTransferFilesBody.dm" +#include "code\modules\goonhub\api\requests\players\medals\AddPlayerMedalBody.dm" +#include "code\modules\goonhub\api\requests\players\medals\DeletePlayerMedalBody.dm" +#include "code\modules\goonhub\api\requests\players\notes\AddPlayerNotesBody.dm" +#include "code\modules\goonhub\api\requests\players\notes\UpdatePlayerNotesBody.dm" +#include "code\modules\goonhub\api\requests\polls\AddPollBody.dm" +#include "code\modules\goonhub\api\requests\polls\AddPollOptionBody.dm" +#include "code\modules\goonhub\api\requests\polls\EditPollBody.dm" +#include "code\modules\goonhub\api\requests\polls\EditPollOptionBody.dm" +#include "code\modules\goonhub\api\requests\polls\PickUnpickPollOptionBody.dm" +#include "code\modules\goonhub\api\requests\rounds\AddGameRoundBody.dm" +#include "code\modules\goonhub\api\requests\rounds\EndGameRoundBody.dm" +#include "code\modules\goonhub\api\requests\rounds\UpdateGameRoundBody.dm" +#include "code\modules\goonhub\api\requests\vpn\AddVpnWhitelistBody.dm" +#include "code\modules\goonhub\api\routes\apiRoute.dm" +#include "code\modules\goonhub\api\routes\RandomEntries.dm" +#include "code\modules\goonhub\api\routes\RemoteMusic.dm" +#include "code\modules\goonhub\api\routes\bans\AddBanDetails.dm" +#include "code\modules\goonhub\api\routes\bans\AddBans.dm" +#include "code\modules\goonhub\api\routes\bans\CheckBans.dm" +#include "code\modules\goonhub\api\routes\bans\DeleteBans.dm" +#include "code\modules\goonhub\api\routes\bans\GetBans.dm" +#include "code\modules\goonhub\api\routes\bans\RemoveBanDetails.dm" +#include "code\modules\goonhub\api\routes\bans\UpdateBans.dm" +#include "code\modules\goonhub\api\routes\dectalk\PlayDectalk.dm" +#include "code\modules\goonhub\api\routes\gameadminranks\AddGameAdminRanks.dm" +#include "code\modules\goonhub\api\routes\gameadminranks\DeleteGameAdminRanks.dm" +#include "code\modules\goonhub\api\routes\gameadminranks\GetGameAdminRanks.dm" +#include "code\modules\goonhub\api\routes\gameadminranks\UpdateGameAdminRanks.dm" +#include "code\modules\goonhub\api\routes\gameadmins\AddGameAdmins.dm" +#include "code\modules\goonhub\api\routes\gameadmins\DeleteGameAdmins.dm" +#include "code\modules\goonhub\api\routes\gameadmins\GetGameAdmins.dm" +#include "code\modules\goonhub\api\routes\gameadmins\UpdateGameAdmins.dm" +#include "code\modules\goonhub\api\routes\gauntlet\GetPreviousGauntlets.dm" +#include "code\modules\goonhub\api\routes\jobbans\AddJobBans.dm" +#include "code\modules\goonhub\api\routes\jobbans\CheckJobBans.dm" +#include "code\modules\goonhub\api\routes\jobbans\DeleteJobBans.dm" +#include "code\modules\goonhub\api\routes\jobbans\GetJobBans.dm" +#include "code\modules\goonhub\api\routes\jobbans\GetPlayerJobBans.dm" +#include "code\modules\goonhub\api\routes\jobbans\UpdateJobBans.dm" +#include "code\modules\goonhub\api\routes\maps\MapSwitches.dm" +#include "code\modules\goonhub\api\routes\numbersstation\GetNumbersStationNumbers.dm" +#include "code\modules\goonhub\api\routes\players\PlayerAntags.dm" +#include "code\modules\goonhub\api\routes\players\PlayerCompIds.dm" +#include "code\modules\goonhub\api\routes\players\PlayerIps.dm" +#include "code\modules\goonhub\api\routes\players\PlayerLogin.dm" +#include "code\modules\goonhub\api\routes\players\PlayerParticipations.dm" +#include "code\modules\goonhub\api\routes\players\PlayerParticipationsBulk.dm" +#include "code\modules\goonhub\api\routes\players\PlayerPlaytime.dm" +#include "code\modules\goonhub\api\routes\players\PlayerStats.dm" +#include "code\modules\goonhub\api\routes\players\medals\AddPlayerMedal.dm" +#include "code\modules\goonhub\api\routes\players\medals\DeletePlayerMedal.dm" +#include "code\modules\goonhub\api\routes\players\medals\GetPlayerMedals.dm" +#include "code\modules\goonhub\api\routes\players\medals\ShowPlayerMedal.dm" +#include "code\modules\goonhub\api\routes\players\metadata\AddPlayerMetadata.dm" +#include "code\modules\goonhub\api\routes\players\metadata\DeleteFromPlayerMetadata.dm" +#include "code\modules\goonhub\api\routes\players\metadata\DeletePlayerMetadata.dm" +#include "code\modules\goonhub\api\routes\players\metadata\GetMetadataByPlayer.dm" +#include "code\modules\goonhub\api\routes\players\metadata\GetPlayerMetadata.dm" +#include "code\modules\goonhub\api\routes\players\metadata\GetPlayersByMetadata.dm" +#include "code\modules\goonhub\api\routes\players\notes\AddPlayerNotes.dm" +#include "code\modules\goonhub\api\routes\players\notes\DeletePlayerNotes.dm" +#include "code\modules\goonhub\api\routes\players\notes\GetPlayerNotes.dm" +#include "code\modules\goonhub\api\routes\players\notes\UpdatePlayerNotes.dm" +#include "code\modules\goonhub\api\routes\players\saves\AddBulkDataPlayerSaves.dm" +#include "code\modules\goonhub\api\routes\players\saves\AddDataPlayerSaves.dm" +#include "code\modules\goonhub\api\routes\players\saves\AddFilePlayerSaves.dm" +#include "code\modules\goonhub\api\routes\players\saves\DeleteDataPlayerSaves.dm" +#include "code\modules\goonhub\api\routes\players\saves\DeleteSavePlayerSaves.dm" +#include "code\modules\goonhub\api\routes\players\saves\GetPlayerSaves.dm" +#include "code\modules\goonhub\api\routes\players\saves\TransferDataPlayerSaves.dm" +#include "code\modules\goonhub\api\routes\polls\AddPoll.dm" +#include "code\modules\goonhub\api\routes\polls\AddPollOption.dm" +#include "code\modules\goonhub\api\routes\polls\DeletePoll.dm" +#include "code\modules\goonhub\api\routes\polls\DeletePollOption.dm" +#include "code\modules\goonhub\api\routes\polls\EditPoll.dm" +#include "code\modules\goonhub\api\routes\polls\EditPollOption.dm" +#include "code\modules\goonhub\api\routes\polls\GetPoll.dm" +#include "code\modules\goonhub\api\routes\polls\GetPolls.dm" +#include "code\modules\goonhub\api\routes\polls\PickOption.dm" +#include "code\modules\goonhub\api\routes\polls\UnpickOption.dm" +#include "code\modules\goonhub\api\routes\rounds\AddGameRound.dm" +#include "code\modules\goonhub\api\routes\rounds\EndGameRound.dm" +#include "code\modules\goonhub\api\routes\rounds\UpdateGameRound.dm" +#include "code\modules\goonhub\api\routes\vpn\AddVpnWhitelist.dm" +#include "code\modules\goonhub\api\routes\vpn\CheckVpn.dm" +#include "code\modules\goonhub\api\routes\vpn\DeleteVpnWhitelist.dm" +#include "code\modules\goonhub\api\routes\vpn\SearchVpnWhitelist.dm" +#include "code\modules\goonhub\event_recording\event_recorder.dm" +#include "code\modules\goonhub\event_recording\events\AILaw.dm" +#include "code\modules\goonhub\event_recording\events\Antag.dm" +#include "code\modules\goonhub\event_recording\events\AntagItemPurchase.dm" +#include "code\modules\goonhub\event_recording\events\AntagObjective.dm" +#include "code\modules\goonhub\event_recording\events\BeeSpawn.dm" +#include "code\modules\goonhub\event_recording\events\Death.dm" +#include "code\modules\goonhub\event_recording\events\eventRecord.dm" +#include "code\modules\goonhub\event_recording\events\Fine.dm" +#include "code\modules\goonhub\event_recording\events\GauntletHighScore.dm" +#include "code\modules\goonhub\event_recording\events\StationName.dm" +#include "code\modules\goonhub\event_recording\events\Ticket.dm" +#include "code\modules\goonhub\event_recording\types\_TracksPlayer.dm" +#include "code\modules\goonhub\event_recording\types\AILaw.dm" +#include "code\modules\goonhub\event_recording\types\Antag.dm" +#include "code\modules\goonhub\event_recording\types\AntagItemPurchase.dm" +#include "code\modules\goonhub\event_recording\types\AntagObjective.dm" +#include "code\modules\goonhub\event_recording\types\BeeSpawn.dm" +#include "code\modules\goonhub\event_recording\types\Death.dm" +#include "code\modules\goonhub\event_recording\types\eventBody.dm" +#include "code\modules\goonhub\event_recording\types\Fine.dm" +#include "code\modules\goonhub\event_recording\types\GauntletHighScore.dm" +#include "code\modules\goonhub\event_recording\types\StationName.dm" +#include "code\modules\goonhub\event_recording\types\Ticket.dm" #include "code\modules\gps\gps.dm" #include "code\modules\holiday\halloween.dm" #include "code\modules\holiday\spacemas.dm" @@ -1196,6 +1390,8 @@ var/datum/preMapLoad/preMapLoad = new #include "code\modules\interface\multiContext\multiContext.dm" #include "code\modules\items\gimmick\figurine.dm" #include "code\modules\items\gimmick\plushies.dm" +#include "code\modules\items\instruments\instruments.dm" +#include "code\modules\items\instruments\playable_piano.dm" #include "code\modules\items\specials\ItemSpecials.dm" #include "code\modules\jobxp\JobXP.dm" #include "code\modules\jobxp\JobXPRewards.dm" @@ -1305,6 +1501,7 @@ var/datum/preMapLoad/preMapLoad = new #include "code\modules\medical\pathology\pathogen_suppressants.dm" #include "code\modules\medical\pathology\pathogen_symptoms.dm" #include "code\modules\medical\pathology\pathogen_tools.dm" +#include "code\modules\mentor\mentorhelp.dm" #include "code\modules\minimap\minimap.dm" #include "code\modules\minimap\minimap_marker.dm" #include "code\modules\minimap\minimap_object.dm" @@ -1360,6 +1557,8 @@ var/datum/preMapLoad/preMapLoad = new #include "code\modules\parallax\parallax_render_sources\parallax_render_source_groups.dm" #include "code\modules\parallax\parallax_render_sources\parallax_render_source_parent.dm" #include "code\modules\parallax\parallax_render_sources\parallax_render_sources.dm" +#include "code\modules\polling\poll_ballot.dm" +#include "code\modules\polling\poll_manager.dm" #include "code\modules\power\apc.dm" #include "code\modules\power\cable.dm" #include "code\modules\power\cablecolors.dm" @@ -1462,6 +1661,7 @@ var/datum/preMapLoad/preMapLoad = new #include "code\modules\sound\sound.dm" #include "code\modules\sound\soundCache.dm" #include "code\modules\speech\floating_chat.dm" +#include "code\modules\speech\logged_phrases.dm" #include "code\modules\status_system\statusEffects.dm" #include "code\modules\status_system\statusFoodBad.dm" #include "code\modules\status_system\statusFoodBuffs.dm" @@ -1546,6 +1746,7 @@ var/datum/preMapLoad/preMapLoad = new #include "code\modules\worldgen\mapgen\ForestGenerator.dm" #include "code\modules\worldgen\mapgen\IceMoonGenerator.dm" #include "code\modules\worldgen\mapgen\JungleGenerator.dm" +#include "code\modules\worldgen\mapgen\LavaMoonGenerator.dm" #include "code\modules\worldgen\mapgen\MarsGenerator.dm" #include "code\modules\worldgen\mapgen\RoomMaze.dm" #include "code\modules\worldgen\mapgen\SnowGenerator.dm" @@ -1598,7 +1799,6 @@ var/datum/preMapLoad/preMapLoad = new #include "code\obj\noticeboard.dm" #include "code\obj\npc.dm" #include "code\obj\objDialog.dm" -#include "code\obj\playable_piano.dm" #include "code\obj\pool.dm" #include "code\obj\portal.dm" #include "code\obj\posters.dm" @@ -1751,7 +1951,6 @@ var/datum/preMapLoad/preMapLoad = new #include "code\obj\item\handcuffs.dm" #include "code\obj\item\hydroponics.dm" #include "code\obj\item\implant.dm" -#include "code\obj\item\instruments.dm" #include "code\obj\item\kendo.dm" #include "code\obj\item\keys.dm" #include "code\obj\item\kitchen.dm" @@ -2031,6 +2230,9 @@ var/datum/preMapLoad/preMapLoad = new #include "code\obj\machinery\computer\syndicate\podbay.dm" #include "code\obj\machinery\computer\tetris\tetris.dm" #include "code\obj\machinery\door\airlock.dm" +#include "code\obj\machinery\door\airlock_gannets.dm" +#include "code\obj\machinery\door\airlock_other.dm" +#include "code\obj\machinery\door\airlock_pyro.dm" #include "code\obj\machinery\door\door_control.dm" #include "code\obj\machinery\door\door_parent.dm" #include "code\obj\machinery\door\door_timer.dm" @@ -2039,6 +2241,7 @@ var/datum/preMapLoad/preMapLoad = new #include "code\obj\machinery\door\poddoor.dm" #include "code\obj\machinery\door\supernorn.dm" #include "code\obj\machinery\door\window.dm" +#include "code\obj\machinery\food_and_drink\mixer.dm" #include "code\obj\machinery\phone\phone.dm" #include "code\obj\machinery\pipe\pipe_dispenser.dm" #include "code\obj\machinery\shield_generators\energy_shield.dm" @@ -2080,7 +2283,6 @@ var/datum/preMapLoad/preMapLoad = new #include "code\procs\accents.dm" #include "code\procs\access.dm" #include "code\procs\antagonist_procs.dm" -#include "code\procs\authorize.dm" #include "code\procs\basketball.dm" #include "code\procs\bug_report.dm" #include "code\procs\command_alert.dm" @@ -2089,7 +2291,6 @@ var/datum/preMapLoad/preMapLoad = new #include "code\procs\datetime.dm" #include "code\procs\elecflash.dm" #include "code\procs\explosion_new.dm" -#include "code\procs\export_data.dm" #include "code\procs\fireflash.dm" #include "code\procs\gamehelpers.dm" #include "code\procs\Get_Flat_Icon.dm" @@ -2097,14 +2298,12 @@ var/datum/preMapLoad/preMapLoad = new #include "code\procs\helpers.dm" #include "code\procs\jobprocs.dm" #include "code\procs\lightning_bolt.dm" -#include "code\procs\logged_phrases.dm" #include "code\procs\logging.dm" #include "code\procs\loop_debug.dm" #include "code\procs\mob_procs.dm" #include "code\procs\resourceManagement.dm" #include "code\procs\scanprocs.dm" #include "code\procs\scorestats.dm" -#include "code\procs\stat_logging.dm" #include "code\procs\station_name.dm" #include "code\procs\string_cache.dm" #include "code\procs\string_picker.dm" @@ -2126,7 +2325,6 @@ var/datum/preMapLoad/preMapLoad = new #include "code\WorkInProgress\actuallyKeelinsStuff.dm" #include "code\WorkInProgress\aloe_stuff_public.dm" #include "code\WorkInProgress\AphsStuff.dm" -#include "code\WorkInProgress\apiFallbackRoutes.dm" #include "code\WorkInProgress\AzrunStuff.dm" #include "code\WorkInProgress\Azungarstuff.dm" #include "code\WorkInProgress\batman.dm" diff --git a/icons/Testing/newicons/obj/ALTstructures.dmi b/icons/Testing/newicons/obj/ALTstructures.dmi deleted file mode 100644 index 2a9cd896badea..0000000000000 Binary files a/icons/Testing/newicons/obj/ALTstructures.dmi and /dev/null differ diff --git a/icons/Testing/newicons/obj/NEWcomputer.dmi b/icons/Testing/newicons/obj/NEWcomputer.dmi deleted file mode 100644 index 4412f5acce3c1..0000000000000 Binary files a/icons/Testing/newicons/obj/NEWcomputer.dmi and /dev/null differ diff --git a/icons/Testing/newicons/obj/NEWdoors/NEWDoor1.dmi b/icons/Testing/newicons/obj/NEWdoors/NEWDoor1.dmi index 21d1d93b1b2ea..a9db6ddf8504a 100644 Binary files a/icons/Testing/newicons/obj/NEWdoors/NEWDoor1.dmi and b/icons/Testing/newicons/obj/NEWdoors/NEWDoor1.dmi differ diff --git a/icons/Testing/newicons/obj/NEWdoors/stupid_shitty_fucking_vertical_crap_doors.dmi b/icons/Testing/newicons/obj/NEWdoors/stupid_shitty_fucking_vertical_crap_doors.dmi index 24ed3d34a0082..ff10ce7f775f2 100644 Binary files a/icons/Testing/newicons/obj/NEWdoors/stupid_shitty_fucking_vertical_crap_doors.dmi and b/icons/Testing/newicons/obj/NEWdoors/stupid_shitty_fucking_vertical_crap_doors.dmi differ diff --git a/icons/effects/1x1.dmi b/icons/effects/1x1.dmi index 4e272a65b3d19..da9e830686e09 100644 Binary files a/icons/effects/1x1.dmi and b/icons/effects/1x1.dmi differ diff --git a/icons/effects/overlays/Ltrans.dmi b/icons/effects/overlays/Ltrans.dmi index 1aac5f471096b..ceee8e8ad2da8 100644 Binary files a/icons/effects/overlays/Ltrans.dmi and b/icons/effects/overlays/Ltrans.dmi differ diff --git a/icons/effects/overlays/beamout.dmi b/icons/effects/overlays/beamout.dmi index c0f6a62073d6a..8cc416685de04 100644 Binary files a/icons/effects/overlays/beamout.dmi and b/icons/effects/overlays/beamout.dmi differ diff --git a/icons/effects/overlays/cloudy.dmi b/icons/effects/overlays/cloudy.dmi index fb74bae729910..82e9ad0bf4ae2 100644 Binary files a/icons/effects/overlays/cloudy.dmi and b/icons/effects/overlays/cloudy.dmi differ diff --git a/icons/effects/overlays/knockout.dmi b/icons/effects/overlays/knockout.dmi index 7907a29df4f67..a8d05f5a7b3e1 100644 Binary files a/icons/effects/overlays/knockout.dmi and b/icons/effects/overlays/knockout.dmi differ diff --git a/icons/effects/overlays/knockout2.dmi b/icons/effects/overlays/knockout2.dmi index 4f0e01181e0df..1f1bfe96d5681 100644 Binary files a/icons/effects/overlays/knockout2.dmi and b/icons/effects/overlays/knockout2.dmi differ diff --git a/icons/effects/overlays/knockout2t.dmi b/icons/effects/overlays/knockout2t.dmi index e13be517ca4ee..32c02298047a3 100644 Binary files a/icons/effects/overlays/knockout2t.dmi and b/icons/effects/overlays/knockout2t.dmi differ diff --git a/icons/effects/overlays/knockoutinverted.dmi b/icons/effects/overlays/knockoutinverted.dmi deleted file mode 100644 index 02edf0e985d8e..0000000000000 Binary files a/icons/effects/overlays/knockoutinverted.dmi and /dev/null differ diff --git a/icons/effects/overlays/meaty.dmi b/icons/effects/overlays/meaty.dmi deleted file mode 100644 index 1ced2af4e0039..0000000000000 Binary files a/icons/effects/overlays/meaty.dmi and /dev/null differ diff --git a/icons/effects/overlays/meatyC.dmi b/icons/effects/overlays/meatyC.dmi index 98bd65f4ef35c..4d962896cce45 100644 Binary files a/icons/effects/overlays/meatyC.dmi and b/icons/effects/overlays/meatyC.dmi differ diff --git a/icons/effects/overlays/meatyL.dmi b/icons/effects/overlays/meatyL.dmi index 04f9fbc7d62ee..bf3a1a83e2632 100644 Binary files a/icons/effects/overlays/meatyL.dmi and b/icons/effects/overlays/meatyL.dmi differ diff --git a/icons/effects/overlays/meatyR.dmi b/icons/effects/overlays/meatyR.dmi index b311bf7dc6c72..ec76543fc6d46 100644 Binary files a/icons/effects/overlays/meatyR.dmi and b/icons/effects/overlays/meatyR.dmi differ diff --git a/icons/effects/overlays/meatysmall.dmi b/icons/effects/overlays/meatysmall.dmi index e36cdd3135018..bbda8c2d7c0cf 100644 Binary files a/icons/effects/overlays/meatysmall.dmi and b/icons/effects/overlays/meatysmall.dmi differ diff --git a/icons/effects/overlays/solid.dmi b/icons/effects/overlays/solid.dmi index db57b2e9e3f3b..8eea4deb584c8 100644 Binary files a/icons/effects/overlays/solid.dmi and b/icons/effects/overlays/solid.dmi differ diff --git a/icons/map-editing/mapping_helpers.dmi b/icons/map-editing/mapping_helpers.dmi index 3789847378071..dd17cbe672f54 100644 Binary files a/icons/map-editing/mapping_helpers.dmi and b/icons/map-editing/mapping_helpers.dmi differ diff --git a/icons/misc/HaineSpriteDump.dmi b/icons/misc/HaineSpriteDump.dmi index 2b2649386aba8..904f1d28455d4 100644 Binary files a/icons/misc/HaineSpriteDump.dmi and b/icons/misc/HaineSpriteDump.dmi differ diff --git a/icons/misc/bigcritter.dmi b/icons/misc/bigcritter.dmi index 27d61f3933849..524db75d47492 100644 Binary files a/icons/misc/bigcritter.dmi and b/icons/misc/bigcritter.dmi differ diff --git a/icons/misc/exploration.dmi b/icons/misc/exploration.dmi index e18b7416c015b..c7d5626c8a51a 100644 Binary files a/icons/misc/exploration.dmi and b/icons/misc/exploration.dmi differ diff --git a/icons/mob/bingus.dmi b/icons/mob/bingus.dmi new file mode 100644 index 0000000000000..71163881304bb Binary files /dev/null and b/icons/mob/bingus.dmi differ diff --git a/icons/mob/cruiser_ui.dmi b/icons/mob/cruiser_ui.dmi index 140f42b79eaeb..bf1a76ebcb0a3 100644 Binary files a/icons/mob/cruiser_ui.dmi and b/icons/mob/cruiser_ui.dmi differ diff --git a/icons/mob/dance_ui.dmi b/icons/mob/dance_ui.dmi index ac3a1486b3c68..3dc90abc4994f 100644 Binary files a/icons/mob/dance_ui.dmi and b/icons/mob/dance_ui.dmi differ diff --git a/icons/mob/ghost_drone.dmi b/icons/mob/ghost_drone.dmi index 043b18e5e0737..13a238c711ec0 100644 Binary files a/icons/mob/ghost_drone.dmi and b/icons/mob/ghost_drone.dmi differ diff --git a/icons/mob/ghost_observer_abilities.dmi b/icons/mob/ghost_observer_abilities.dmi index 20173aaf37491..3f477f68fe014 100644 Binary files a/icons/mob/ghost_observer_abilities.dmi and b/icons/mob/ghost_observer_abilities.dmi differ diff --git a/icons/mob/hud_human.dmi b/icons/mob/hud_human.dmi index 773edb45b5641..a8326d8ded0aa 100644 Binary files a/icons/mob/hud_human.dmi and b/icons/mob/hud_human.dmi differ diff --git a/icons/mob/hud_human_new.dmi b/icons/mob/hud_human_new.dmi index 30c97331272f2..3ef938838b355 100644 Binary files a/icons/mob/hud_human_new.dmi and b/icons/mob/hud_human_new.dmi differ diff --git a/icons/mob/hud_human_vapor.dmi b/icons/mob/hud_human_vapor.dmi index 3ff13e3552b41..2926eccf89d04 100644 Binary files a/icons/mob/hud_human_vapor.dmi and b/icons/mob/hud_human_vapor.dmi differ diff --git a/icons/mob/hud_pod.dmi b/icons/mob/hud_pod.dmi index ec90021f75360..25a87064dd5c6 100644 Binary files a/icons/mob/hud_pod.dmi and b/icons/mob/hud_pod.dmi differ diff --git a/icons/mob/inhand/hand_food.dmi b/icons/mob/inhand/hand_food.dmi index ba604dd543e6e..64ca8dc33814d 100644 Binary files a/icons/mob/inhand/hand_food.dmi and b/icons/mob/inhand/hand_food.dmi differ diff --git a/icons/mob/inhand/hand_guns.dmi b/icons/mob/inhand/hand_guns.dmi index 66aab9b7a7438..e52258f51d73b 100644 Binary files a/icons/mob/inhand/hand_guns.dmi and b/icons/mob/inhand/hand_guns.dmi differ diff --git a/icons/mob/inhand/hand_weapons.dmi b/icons/mob/inhand/hand_weapons.dmi index ead29f0935e04..8afc6ae16a0b1 100644 Binary files a/icons/mob/inhand/hand_weapons.dmi and b/icons/mob/inhand/hand_weapons.dmi differ diff --git a/icons/mob/notes.dmi b/icons/mob/notes.dmi index bc11327119da4..224892acc95a2 100644 Binary files a/icons/mob/notes.dmi and b/icons/mob/notes.dmi differ diff --git a/icons/mob/robots.dmi b/icons/mob/robots.dmi index 2178f8204a33e..ff0cedb20ef88 100644 Binary files a/icons/mob/robots.dmi and b/icons/mob/robots.dmi differ diff --git a/icons/mob/screen1.dmi b/icons/mob/screen1.dmi index 9dad36bffbd3b..9e8d273179ef4 100644 Binary files a/icons/mob/screen1.dmi and b/icons/mob/screen1.dmi differ diff --git a/icons/mob/screen1_robot.dmi b/icons/mob/screen1_robot.dmi deleted file mode 100644 index 45a7682bfde6b..0000000000000 Binary files a/icons/mob/screen1_robot.dmi and /dev/null differ diff --git a/icons/mob/whiteview.dmi b/icons/mob/whiteview.dmi deleted file mode 100644 index b16a1fdadb232..0000000000000 Binary files a/icons/mob/whiteview.dmi and /dev/null differ diff --git a/icons/obj/atmospherics/dp_vent_pump.dmi b/icons/obj/atmospherics/dp_vent_pump.dmi index d1e6798977868..b2aa71aa9f338 100644 Binary files a/icons/obj/atmospherics/dp_vent_pump.dmi and b/icons/obj/atmospherics/dp_vent_pump.dmi differ diff --git a/icons/obj/atmospherics/outlet_injector.dmi b/icons/obj/atmospherics/outlet_injector.dmi index ec13244f69b9b..2546650f75874 100644 Binary files a/icons/obj/atmospherics/outlet_injector.dmi and b/icons/obj/atmospherics/outlet_injector.dmi differ diff --git a/icons/obj/atmospherics/pump.dmi b/icons/obj/atmospherics/pump.dmi index 677db9d35fa39..3ec0dfb81922e 100644 Binary files a/icons/obj/atmospherics/pump.dmi and b/icons/obj/atmospherics/pump.dmi differ diff --git a/icons/obj/atmospherics/vent_pump.dmi b/icons/obj/atmospherics/vent_pump.dmi index f4e93581e7a4b..2259a55938783 100644 Binary files a/icons/obj/atmospherics/vent_pump.dmi and b/icons/obj/atmospherics/vent_pump.dmi differ diff --git a/icons/obj/atmospherics/vent_scrubber.dmi b/icons/obj/atmospherics/vent_scrubber.dmi index 5f6cafaaa72df..2f5efa8c32208 100644 Binary files a/icons/obj/atmospherics/vent_scrubber.dmi and b/icons/obj/atmospherics/vent_scrubber.dmi differ diff --git a/icons/obj/atmospherics/volume_pump.dmi b/icons/obj/atmospherics/volume_pump.dmi index 88a7d18aec3d5..013f1e4f07fd8 100644 Binary files a/icons/obj/atmospherics/volume_pump.dmi and b/icons/obj/atmospherics/volume_pump.dmi differ diff --git a/icons/obj/bots/medbots.dmi b/icons/obj/bots/medbots.dmi index 454e80b9db7ec..af27b30303f55 100644 Binary files a/icons/obj/bots/medbots.dmi and b/icons/obj/bots/medbots.dmi differ diff --git a/icons/obj/chemical.dmi b/icons/obj/chemical.dmi index 19f3a58773fe6..eb9ec4b0b0f19 100644 Binary files a/icons/obj/chemical.dmi and b/icons/obj/chemical.dmi differ diff --git a/icons/obj/clothing/item_masks.dmi b/icons/obj/clothing/item_masks.dmi index 4fd5fd4b9fe50..a3503dcbb317b 100644 Binary files a/icons/obj/clothing/item_masks.dmi and b/icons/obj/clothing/item_masks.dmi differ diff --git a/icons/obj/clothing/overcoats/item_suit.dmi b/icons/obj/clothing/overcoats/item_suit.dmi index 50415c117de98..2df840758c37d 100644 Binary files a/icons/obj/clothing/overcoats/item_suit.dmi and b/icons/obj/clothing/overcoats/item_suit.dmi differ diff --git a/icons/obj/clothing/overcoats/item_suit_hazard.dmi b/icons/obj/clothing/overcoats/item_suit_hazard.dmi index d2c8f589f5c52..a289b9b79a8b2 100644 Binary files a/icons/obj/clothing/overcoats/item_suit_hazard.dmi and b/icons/obj/clothing/overcoats/item_suit_hazard.dmi differ diff --git a/icons/obj/decoration.dmi b/icons/obj/decoration.dmi index 30aa09d3ce3f7..5a8cb0d2ce705 100644 Binary files a/icons/obj/decoration.dmi and b/icons/obj/decoration.dmi differ diff --git a/icons/obj/doors/Door1.dmi b/icons/obj/doors/Door1.dmi index 704769812fbde..7869bf2d2df0b 100644 Binary files a/icons/obj/doors/Door1.dmi and b/icons/obj/doors/Door1.dmi differ diff --git a/icons/obj/doors/Doorcom.dmi b/icons/obj/doors/Doorcom.dmi index f16e1365fdb01..de264bb9efaf8 100644 Binary files a/icons/obj/doors/Doorcom.dmi and b/icons/obj/doors/Doorcom.dmi differ diff --git a/icons/obj/fluid.dmi b/icons/obj/fluid.dmi index 5d97b442c94e8..77f71c6248bc8 100644 Binary files a/icons/obj/fluid.dmi and b/icons/obj/fluid.dmi differ diff --git a/icons/obj/foodNdrink/bottle.dmi b/icons/obj/foodNdrink/bottle.dmi index 267f56e2feb62..c20804dcc88f1 100644 Binary files a/icons/obj/foodNdrink/bottle.dmi and b/icons/obj/foodNdrink/bottle.dmi differ diff --git a/icons/obj/foodNdrink/bread_inhand.dmi b/icons/obj/foodNdrink/bread_inhand.dmi index 9f59b348e9619..734adba5bd471 100644 Binary files a/icons/obj/foodNdrink/bread_inhand.dmi and b/icons/obj/foodNdrink/bread_inhand.dmi differ diff --git a/icons/obj/foodNdrink/food_candy.dmi b/icons/obj/foodNdrink/food_candy.dmi index afa90f3dc7186..b752e12f9bab3 100644 Binary files a/icons/obj/foodNdrink/food_candy.dmi and b/icons/obj/foodNdrink/food_candy.dmi differ diff --git a/icons/obj/foodNdrink/food_dessert.dmi b/icons/obj/foodNdrink/food_dessert.dmi index 245d2735bd07c..0f8a7f7205377 100644 Binary files a/icons/obj/foodNdrink/food_dessert.dmi and b/icons/obj/foodNdrink/food_dessert.dmi differ diff --git a/icons/obj/foodNdrink/food_ingredient.dmi b/icons/obj/foodNdrink/food_ingredient.dmi index 0aea2daab11e5..3275400c7b4ce 100644 Binary files a/icons/obj/foodNdrink/food_ingredient.dmi and b/icons/obj/foodNdrink/food_ingredient.dmi differ diff --git a/icons/obj/foodNdrink/food_meals.dmi b/icons/obj/foodNdrink/food_meals.dmi index f61a73f569b7e..edc6dc3f8f33b 100644 Binary files a/icons/obj/foodNdrink/food_meals.dmi and b/icons/obj/foodNdrink/food_meals.dmi differ diff --git a/icons/obj/furniture/bench_purple.dmi b/icons/obj/furniture/bench_purple.dmi new file mode 100644 index 0000000000000..ef5fff82fb2c6 Binary files /dev/null and b/icons/obj/furniture/bench_purple.dmi differ diff --git a/icons/obj/furniture/cabinet.dmi b/icons/obj/furniture/cabinet.dmi index 367e718a1cae0..f531e54eceb63 100644 Binary files a/icons/obj/furniture/cabinet.dmi and b/icons/obj/furniture/cabinet.dmi differ diff --git a/icons/obj/furniture/chairs.dmi b/icons/obj/furniture/chairs.dmi index b735d35fdfbf3..d446283390b82 100644 Binary files a/icons/obj/furniture/chairs.dmi and b/icons/obj/furniture/chairs.dmi differ diff --git a/icons/obj/hydroponics/hydroponics.dmi b/icons/obj/hydroponics/hydroponics.dmi index e1bc33fd51000..af8a568d0668a 100644 Binary files a/icons/obj/hydroponics/hydroponics.dmi and b/icons/obj/hydroponics/hydroponics.dmi differ diff --git a/icons/obj/items/chemistry_glassware.dmi b/icons/obj/items/chemistry_glassware.dmi new file mode 100644 index 0000000000000..d3b8aad43cdde Binary files /dev/null and b/icons/obj/items/chemistry_glassware.dmi differ diff --git a/icons/obj/items/disks.dmi b/icons/obj/items/disks.dmi index fe9c1ee0e2996..6c17eccb6d688 100644 Binary files a/icons/obj/items/disks.dmi and b/icons/obj/items/disks.dmi differ diff --git a/icons/obj/items/guns/energy.dmi b/icons/obj/items/guns/energy.dmi index cf9c80f58b23e..431f6585e33fa 100644 Binary files a/icons/obj/items/guns/energy.dmi and b/icons/obj/items/guns/energy.dmi differ diff --git a/icons/obj/items/pills.dmi b/icons/obj/items/pills.dmi index a1b567298670e..f51b6dc71a676 100644 Binary files a/icons/obj/items/pills.dmi and b/icons/obj/items/pills.dmi differ diff --git a/icons/obj/items/randomkeys.dmi b/icons/obj/items/randomkeys.dmi index bca952b50c479..9d5678440e6c8 100644 Binary files a/icons/obj/items/randomkeys.dmi and b/icons/obj/items/randomkeys.dmi differ diff --git a/icons/obj/items/storage.dmi b/icons/obj/items/storage.dmi index 7b9358c5e8805..9e856a497b6af 100644 Binary files a/icons/obj/items/storage.dmi and b/icons/obj/items/storage.dmi differ diff --git a/icons/obj/items/weapons.dmi b/icons/obj/items/weapons.dmi index 882e5aff791fa..df3f92d39232d 100644 Binary files a/icons/obj/items/weapons.dmi and b/icons/obj/items/weapons.dmi differ diff --git a/icons/obj/large/32x96.dmi b/icons/obj/large/32x96.dmi index 8c9bb66494dd0..f5deb3c11521a 100644 Binary files a/icons/obj/large/32x96.dmi and b/icons/obj/large/32x96.dmi differ diff --git a/icons/obj/line.dmi b/icons/obj/line.dmi index 8c7adc7d53437..580898cb73062 100644 Binary files a/icons/obj/line.dmi and b/icons/obj/line.dmi differ diff --git a/icons/obj/machines/heavy_fiber.dmi b/icons/obj/machines/heavy_fiber.dmi index 8f8635b3c062b..f13d9d3dd8b3e 100644 Binary files a/icons/obj/machines/heavy_fiber.dmi and b/icons/obj/machines/heavy_fiber.dmi differ diff --git a/icons/obj/objects.dmi b/icons/obj/objects.dmi index e25b17f178a06..f6c6bd6c332a9 100644 Binary files a/icons/obj/objects.dmi and b/icons/obj/objects.dmi differ diff --git a/icons/obj/projectiles.dmi b/icons/obj/projectiles.dmi index 12b90433a567c..a2ec0eb50d5fb 100644 Binary files a/icons/obj/projectiles.dmi and b/icons/obj/projectiles.dmi differ diff --git a/icons/obj/robot_parts.dmi b/icons/obj/robot_parts.dmi index e40d78840c08a..6fb9a9d0f2bad 100644 Binary files a/icons/obj/robot_parts.dmi and b/icons/obj/robot_parts.dmi differ diff --git a/icons/obj/status_display.dmi b/icons/obj/status_display.dmi index fb7b921c7eaf9..b47802cbe360f 100644 Binary files a/icons/obj/status_display.dmi and b/icons/obj/status_display.dmi differ diff --git a/icons/obj/structures.dmi b/icons/obj/structures.dmi index 0e31a3add02cb..9386c14f98fdc 100644 Binary files a/icons/obj/structures.dmi and b/icons/obj/structures.dmi differ diff --git a/icons/turf/areas.dmi b/icons/turf/areas.dmi index 16bd9bdb33156..c361ab80214cf 100644 Binary files a/icons/turf/areas.dmi and b/icons/turf/areas.dmi differ diff --git a/icons/turf/construction_floors.dmi b/icons/turf/construction_floors.dmi index 856fea0a39f5e..7fe5b7e41f908 100644 Binary files a/icons/turf/construction_floors.dmi and b/icons/turf/construction_floors.dmi differ diff --git a/icons/turf/construction_walls.dmi b/icons/turf/construction_walls.dmi index f836bde5e1785..5cf8766d65256 100644 Binary files a/icons/turf/construction_walls.dmi and b/icons/turf/construction_walls.dmi differ diff --git a/icons/turf/floors.dmi b/icons/turf/floors.dmi index 5193ead6546fa..b79389204e963 100644 Binary files a/icons/turf/floors.dmi and b/icons/turf/floors.dmi differ diff --git a/icons/ui/statussystem.dmi b/icons/ui/statussystem.dmi index a0e0309a773ea..b7c8d9518d063 100644 Binary files a/icons/ui/statussystem.dmi and b/icons/ui/statussystem.dmi differ diff --git a/maps/artemis/arjuna.dmm b/maps/artemis/arjuna.dmm index 8742a657724ed..bfc24b5ee4a75 100644 --- a/maps/artemis/arjuna.dmm +++ b/maps/artemis/arjuna.dmm @@ -227,7 +227,7 @@ /area/ship/arjuna) "qD" = ( /obj/table/auto, -/obj/submachine/mixer, +/obj/machinery/mixer, /turf/simulated/floor/blue/checker, /area/ship/arjuna) "rc" = ( @@ -358,7 +358,7 @@ "Ak" = ( /obj/storage/closet/biohazard, /obj/item/clothing/head/rad_hood, -/obj/item/clothing/suit/rad, +/obj/item/clothing/suit/hazard/rad, /turf/simulated/floor/engine, /area/ship/arjuna) "AA" = ( diff --git a/maps/artemis/artemis.dmm b/maps/artemis/artemis.dmm index c10346008f53f..4354794638571 100644 --- a/maps/artemis/artemis.dmm +++ b/maps/artemis/artemis.dmm @@ -130,7 +130,7 @@ /area/ship/artemis) "lI" = ( /obj/rack, -/obj/item/clothing/suit/rad, +/obj/item/clothing/suit/hazard/rad, /obj/item/clothing/head/rad_hood, /turf/simulated/floor/black, /area/ship/artemis) @@ -350,7 +350,7 @@ /area/ship/artemis) "wN" = ( /obj/table/auto, -/obj/submachine/mixer, +/obj/machinery/mixer, /turf/simulated/floor/blue/checker, /area/ship/artemis) "wY" = ( diff --git a/maps/artemis/manta.dmm b/maps/artemis/manta.dmm index d74c755147595..ecb9e3f6e5cfb 100644 --- a/maps/artemis/manta.dmm +++ b/maps/artemis/manta.dmm @@ -472,7 +472,7 @@ /area/ship/manta) "JO" = ( /obj/rack, -/obj/item/clothing/suit/rad, +/obj/item/clothing/suit/hazard/rad, /obj/item/clothing/head/rad_hood, /turf/simulated/floor/black, /area/ship/manta) @@ -512,7 +512,7 @@ /area/ship/manta) "MW" = ( /obj/table/auto, -/obj/submachine/mixer, +/obj/machinery/mixer, /turf/simulated/floor/blue/checker, /area/ship/manta) "Oi" = ( diff --git a/maps/artemis/planets.dmm b/maps/artemis/planets.dmm index a792c2b1b6530..c2e20c5338e36 100644 --- a/maps/artemis/planets.dmm +++ b/maps/artemis/planets.dmm @@ -361,7 +361,7 @@ /area/ship/artemis) "iV" = ( /obj/rack, -/obj/item/clothing/suit/rad, +/obj/item/clothing/suit/hazard/rad, /obj/item/clothing/head/rad_hood, /turf/simulated/floor/black, /area/ship/artemis) @@ -801,7 +801,7 @@ /area/ship/artemis) "uZ" = ( /obj/table/auto, -/obj/submachine/mixer, +/obj/machinery/mixer, /turf/simulated/floor/blue/checker, /area/ship/artemis) "vc" = ( @@ -941,7 +941,7 @@ /area/space) "Ae" = ( /obj/table/auto, -/obj/submachine/mixer, +/obj/machinery/mixer, /turf/simulated/floor/blue/checker, /area/ship/arjuna) "Ai" = ( @@ -1914,7 +1914,7 @@ "YO" = ( /obj/storage/closet/biohazard, /obj/item/clothing/head/rad_hood, -/obj/item/clothing/suit/rad, +/obj/item/clothing/suit/hazard/rad, /turf/simulated/floor/engine, /area/ship/arjuna) "YR" = ( diff --git a/maps/atlas.dmm b/maps/atlas.dmm index 6e6f2883039b4..3d045015f8605 100644 --- a/maps/atlas.dmm +++ b/maps/atlas.dmm @@ -479,6 +479,10 @@ /obj/cable{ icon_state = "1-2" }, +/obj/mapping_helper/airlock/cycler{ + cycle_id = "northsolar2"; + name = "North Solars" + }, /turf/simulated/floor/plating/random, /area/station/engine/substation/west) "abY" = ( @@ -897,6 +901,10 @@ /obj/cable{ icon_state = "4-8" }, +/obj/mapping_helper/airlock/cycler{ + cycle_id = "northsolar"; + name = "North Solars" + }, /turf/simulated/floor/plating, /area/station/maintenance/west) "adb" = ( @@ -915,6 +923,10 @@ /obj/machinery/door/airlock/pyro/external{ dir = 4 }, +/obj/mapping_helper/airlock/cycler{ + cycle_id = "northsolar"; + name = "North Solars" + }, /turf/simulated/floor/plating/random, /area/station/maintenance/west) "add" = ( @@ -1843,6 +1855,10 @@ /area/station/medical/morgue) "afX" = ( /obj/machinery/door/airlock/pyro/external, +/obj/mapping_helper/airlock/cycler{ + cycle_id = "northmerch"; + name = "North Merchant Dock" + }, /turf/simulated/floor/caution/northsouth, /area/station/hallway/primary/south) "afZ" = ( @@ -2339,7 +2355,12 @@ /area/station/hallway/primary/west) "ahF" = ( /obj/table/auto, -/obj/item/storage/box/cutlery, +/obj/item/storage/box/cutlery{ + pixel_x = 8 + }, +/obj/item/storage/box/popsicle_sticks{ + pixel_x = -7 + }, /turf/simulated/floor/black, /area/station/crew_quarters/catering) "ahG" = ( @@ -3135,7 +3156,7 @@ /area/station/hallway/primary/south) "akj" = ( /obj/table/auto, -/obj/submachine/mixer, +/obj/machinery/mixer, /turf/simulated/floor/white/side{ dir = 4 }, @@ -5591,6 +5612,11 @@ icon_state = "1-2" }, /obj/mapping_helper/access/teleporter, +/obj/mapping_helper/airlock/cycler{ + cycle_id = "bridge"; + name = "Bridge"; + enter_id = "teleporter" + }, /turf/simulated/floor/black, /area/station/teleporter) "atz" = ( @@ -5656,6 +5682,11 @@ icon_state = "4-8" }, /obj/mapping_helper/access/ai_upload, +/obj/mapping_helper/airlock/cycler{ + cycle_id = "aiupload"; + name = "AI Upload"; + enter_id = "core" + }, /turf/simulated/floor/black, /area/station/turret_protected/ai) "atG" = ( @@ -5913,6 +5944,11 @@ dir = 4; level = -1 }, +/obj/mapping_helper/airlock/cycler{ + cycle_id = "bridge"; + name = "Bridge"; + enter_id = "inner" + }, /turf/simulated/floor/blue, /area/station/bridge) "auo" = ( @@ -6720,6 +6756,11 @@ }, /obj/mapping_helper/firedoor_spawn, /obj/mapping_helper/access/engineering, +/obj/mapping_helper/airlock/cycler{ + cycle_id = "engineering"; + name = "Engineering"; + enter_id = "south" + }, /turf/simulated/floor/engine, /area/station/engine/engineering) "awE" = ( @@ -7191,6 +7232,11 @@ /obj/decal/tile_edge/stripe/extra_big{ icon_state = "delivery2" }, +/obj/mapping_helper/airlock/cycler{ + cycle_id = "aiupload"; + name = "AI Upload"; + enter_id = "outer" + }, /turf/simulated/floor/black, /area/station/turret_protected/ai) "axU" = ( @@ -7334,6 +7380,11 @@ /obj/mapping_helper/access/heads, /obj/mapping_helper/firedoor_spawn, /obj/disposalpipe/segment, +/obj/mapping_helper/airlock/cycler{ + cycle_id = "bridge"; + name = "Bridge"; + enter_id = "meetingroom" + }, /turf/simulated/floor/black, /area/station/bridge/united_command) "ayt" = ( @@ -8196,6 +8247,11 @@ }, /obj/machinery/door/airlock/pyro/engineering/alt, /obj/mapping_helper/access/engineering_power, +/obj/mapping_helper/airlock/cycler{ + cycle_id = "southsolar"; + name = "South Solars"; + enter_id = "inner" + }, /turf/simulated/floor/plating/random, /area/station/engine/substation/east) "aBu" = ( @@ -8680,6 +8736,10 @@ "aCX" = ( /obj/machinery/door/airlock/pyro/external, /obj/mapping_helper/access/mining, +/obj/mapping_helper/airlock/cycler{ + cycle_id = "mining"; + name = "Mining" + }, /turf/simulated/floor/caution/northsouth, /area/station/mining/staff_room) "aCY" = ( @@ -9118,6 +9178,11 @@ icon_state = "4-8" }, /obj/mapping_helper/access/engineering_power, +/obj/mapping_helper/airlock/cycler{ + cycle_id = "southsolar"; + name = "South Solars"; + enter_id = "outer" + }, /turf/simulated/floor/plating/random, /area/station/engine/substation/east) "aEc" = ( @@ -9671,7 +9736,7 @@ /area/station/medical/robotics) "aFH" = ( /obj/rack, -/obj/item/clothing/suit/fire, +/obj/item/clothing/suit/hazard/fire, /obj/item/clothing/mask/gas/emergency, /obj/item/clothing/head/helmet/firefighter, /obj/item/tank/air, @@ -10313,6 +10378,10 @@ /obj/machinery/door/airlock/pyro/external, /obj/mapping_helper/access/mining, /obj/mapping_helper/firedoor_spawn, +/obj/mapping_helper/airlock/cycler{ + cycle_id = "mining"; + name = "Mining" + }, /turf/simulated/floor/caution/northsouth, /area/station/mining/staff_room) "aHJ" = ( @@ -10339,6 +10408,10 @@ /area/station/janitor/office) "aHN" = ( /obj/machinery/door/airlock/pyro/external, +/obj/mapping_helper/airlock/cycler{ + cycle_id = "southmerch"; + name = "South Merchant Dock" + }, /turf/simulated/floor/caution/northsouth, /area/station/hangar/main) "aHO" = ( @@ -10473,6 +10546,11 @@ /obj/machinery/door/airlock/pyro/external{ dir = 4 }, +/obj/mapping_helper/airlock/cycler{ + cycle_id = "southsolar"; + name = "South Solars"; + enter_id = "inner" + }, /turf/simulated/floor/plating/random, /area/station/maintenance/southeast) "aIx" = ( @@ -10494,6 +10572,11 @@ /obj/cable{ icon_state = "4-8" }, +/obj/mapping_helper/airlock/cycler{ + cycle_id = "southsolar"; + name = "South Solars"; + enter_id = "outer" + }, /turf/simulated/floor/plating, /area/station/maintenance/southeast) "aIz" = ( @@ -10848,6 +10931,11 @@ "aKb" = ( /obj/machinery/door/airlock/pyro/external, /obj/mapping_helper/firedoor_spawn, +/obj/mapping_helper/airlock/cycler{ + cycle_id = "miningshuttle"; + name = "Mining Shuttle"; + enter_id = "inner" + }, /turf/simulated/floor, /area/station/hangar/arrivals) "aKc" = ( @@ -11065,6 +11153,11 @@ /area/station/hangar/arrivals) "aKJ" = ( /obj/machinery/door/airlock/pyro/external, +/obj/mapping_helper/airlock/cycler{ + cycle_id = "miningshuttle"; + name = "Mining Shuttle"; + enter_id = "outer" + }, /turf/simulated/floor, /area/station/hangar/arrivals) "aKK" = ( @@ -12046,6 +12139,7 @@ layer = 9.1; pixel_x = -10 }, +/obj/item/pinpointer/disk, /turf/simulated/floor/airless/circuit/red, /area/listeningpost) "aOi" = ( @@ -13848,6 +13942,11 @@ dir = 4; name = "Engine Room" }, +/obj/mapping_helper/airlock/cycler{ + cycle_id = "engine"; + name = "Engineering"; + enter_id = "sw" + }, /turf/simulated/floor/engine, /area/station/engine/core) "aUa" = ( @@ -15792,6 +15891,11 @@ /obj/cable/orange{ icon_state = "1-2" }, +/obj/mapping_helper/airlock/cycler{ + cycle_id = "engine"; + name = "Engineering"; + enter_id = "se" + }, /turf/simulated/floor/engine, /area/station/engine/core) "bie" = ( @@ -15884,6 +15988,11 @@ }, /obj/machinery/door/airlock/pyro/security/alt, /obj/mapping_helper/access/security, +/obj/mapping_helper/airlock/cycler{ + cycle_id = "sec"; + name = "Security"; + enter_id = "outer" + }, /turf/simulated/floor, /area/station/security/secwing) "bAx" = ( @@ -16606,6 +16715,11 @@ dir = 4; level = -1 }, +/obj/mapping_helper/airlock/cycler{ + cycle_id = "bridge"; + name = "Bridge"; + enter_id = "outer" + }, /turf/simulated/floor/blue, /area/station/bridge/customs) "fiL" = ( @@ -16630,6 +16744,11 @@ dir = 4; name = "Engine Room" }, +/obj/mapping_helper/airlock/cycler{ + cycle_id = "engine"; + name = "Engineering"; + enter_id = "nw" + }, /turf/simulated/floor/engine, /area/station/engine/core) "fvg" = ( @@ -16947,6 +17066,11 @@ }, /obj/mapping_helper/firedoor_spawn, /obj/mapping_helper/access/engineering, +/obj/mapping_helper/airlock/cycler{ + cycle_id = "engineering"; + name = "Engineering"; + enter_id = "north" + }, /turf/simulated/floor/engine, /area/station/engine/engineering) "hpN" = ( @@ -16971,6 +17095,11 @@ dir = 4; pixel_x = -20 }, +/obj/mapping_helper/airlock/cycler{ + cycle_id = "bridge"; + name = "Bridge"; + enter_id = "outer" + }, /turf/simulated/floor/blue, /area/station/bridge/customs) "hto" = ( @@ -17085,6 +17214,11 @@ }, /obj/mapping_helper/access/security, /obj/mapping_helper/firedoor_spawn, +/obj/mapping_helper/airlock/cycler{ + cycle_id = "sec"; + name = "Security"; + enter_id = "inner" + }, /turf/simulated/floor/red/side{ dir = 8 }, @@ -17835,6 +17969,11 @@ /obj/cable/orange{ icon_state = "1-2" }, +/obj/mapping_helper/airlock/cycler{ + cycle_id = "engine"; + name = "Engineering"; + enter_id = "ne" + }, /turf/simulated/floor/engine, /area/station/engine/core) "mlP" = ( @@ -18064,6 +18203,10 @@ /obj/cable/yellow{ icon_state = "4-8" }, +/obj/mapping_helper/airlock/cycler{ + cycle_id = "northsolar2"; + name = "North Solars" + }, /turf/simulated/floor/plating/random, /area/station/engine/substation/west) "nrH" = ( @@ -18335,6 +18478,30 @@ }, /turf/simulated/floor, /area/station/hallway/primary/west) +"oOs" = ( +/obj/machinery/door/airlock/pyro/command/alt{ + dir = 4; + name = "AI Upload Chamber" + }, +/obj/cable{ + icon_state = "4-8" + }, +/obj/mapping_helper/access/ai_upload, +/obj/mapping_helper/firedoor_spawn, +/obj/machinery/secscanner{ + dir = 4; + pixel_x = -20 + }, +/obj/decal/tile_edge/stripe/extra_big{ + icon_state = "delivery2" + }, +/obj/mapping_helper/airlock/cycler{ + cycle_id = "aiupload"; + name = "AI Upload"; + enter_id = "inner" + }, +/turf/simulated/floor/black, +/area/station/turret_protected/ai) "oPh" = ( /obj/machinery/power/apc/autoname_west, /obj/cable{ @@ -19345,6 +19512,11 @@ /obj/disposalpipe/segment/ejection{ dir = 8 }, +/obj/mapping_helper/airlock/cycler{ + cycle_id = "engineering"; + name = "Engineering"; + enter_id = "outer" + }, /turf/simulated/floor, /area/station/engine/engineering) "tNm" = ( @@ -61691,7 +61863,7 @@ aGw aqD aqD aqD -axT +oOs aqD aqD aqD diff --git a/maps/clarion.dmm b/maps/clarion.dmm index f638237b13b7e..97b6891bd65fe 100644 --- a/maps/clarion.dmm +++ b/maps/clarion.dmm @@ -360,16 +360,6 @@ "abJ" = ( /turf/simulated/wall/auto/supernorn, /area/station/maintenance/northwest) -"abK" = ( -/obj/stool/chair/office/blue{ - dir = 1 - }, -/obj/machinery/alarm{ - dir = 4; - pixel_x = -15 - }, -/turf/simulated/floor/black, -/area/station/hallway/secondary/exit) "abL" = ( /obj/cable{ icon_state = "1-2" @@ -886,17 +876,6 @@ icon_state = "fblue2" }, /area/station/hallway/secondary/exit) -"aek" = ( -/obj/table, -/obj/item/storage/toolbox/emergency, -/obj/machinery/alarm{ - pixel_y = 23 - }, -/turf/simulated/floor/carpet{ - dir = 1; - icon_state = "fblue2" - }, -/area/station/hallway/secondary/exit) "ael" = ( /obj/machinery/vending/snack, /obj/machinery/light{ @@ -1257,6 +1236,16 @@ /area/station/crew_quarters/quartersA{ name = "Crew Quarters M03" }) +"agA" = ( +/obj/disposalpipe/segment{ + dir = 4; + icon_state = "pipe-c" + }, +/obj/storage/secure/closet/research/chemical, +/turf/simulated/floor/purpleblack{ + dir = 4 + }, +/area/station/science/chemistry) "agG" = ( /obj/disposalpipe/segment, /obj/machinery/light/emergency{ @@ -2004,19 +1993,6 @@ /obj/machinery/portable_reclaimer, /turf/simulated/floor/grey/whitegrime/other, /area/station/storage/primary) -"ajN" = ( -/obj/table/reinforced/auto, -/obj/item/sheet/glass/fullstack, -/obj/item/sheet/glass/fullstack, -/obj/item/storage/box/cablesbox, -/obj/item/storage/toolbox/mechanical, -/obj/item/storage/toolbox/electrical, -/obj/item/device/light/flashlight, -/obj/machinery/alarm{ - pixel_y = 23 - }, -/turf/simulated/floor/grey/whitegrime/other, -/area/station/storage/primary) "ajO" = ( /obj/landmark/shuttle_subwoofer, /turf/space, @@ -2024,19 +2000,6 @@ "ajR" = ( /turf/simulated/floor/black, /area/station/hangar/sec) -"ajS" = ( -/obj/disposalpipe/segment/mail, -/obj/cable{ - icon_state = "1-2" - }, -/obj/machinery/alarm{ - dir = 8; - pixel_x = 15 - }, -/turf/simulated/floor/redblack{ - dir = 4 - }, -/area/station/hangar/sec) "ajT" = ( /obj/machinery/vending/pda, /turf/simulated/floor/black, @@ -2961,15 +2924,6 @@ }, /turf/simulated/floor/plating, /area/station/maintenance/northwest) -"anE" = ( -/obj/machinery/light, -/obj/machinery/vehicle/miniputt, -/obj/machinery/alarm{ - dir = 8; - pixel_x = 15 - }, -/turf/simulated/floor/engine, -/area/station/hangar/main) "anL" = ( /obj/disposalpipe/segment/mail{ dir = 1; @@ -5065,19 +5019,6 @@ icon_state = "fgreen2" }, /area/station/chapel/funeral_parlor) -"avF" = ( -/obj/machinery/door/window/northright{ - req_access_txt = "22" - }, -/obj/machinery/alarm{ - dir = 8; - pixel_x = 15 - }, -/turf/simulated/floor/carpet{ - dir = 5; - icon_state = "fgreen2" - }, -/area/station/chapel/funeral_parlor) "avH" = ( /obj/cable{ icon_state = "1-2" @@ -5180,17 +5121,6 @@ /obj/window/reinforced/south, /turf/simulated/floor/grass/random, /area/station/hydroponics/bay) -"avZ" = ( -/obj/disposalpipe/segment, -/obj/machinery/hydro_growlamp, -/obj/machinery/alarm{ - dir = 4; - pixel_x = -15 - }, -/turf/simulated/floor/green/side{ - dir = 8 - }, -/area/station/hydroponics/bay) "awb" = ( /obj/machinery/light/emergency{ dir = 4; @@ -5497,13 +5427,6 @@ }, /turf/simulated/floor/sanitary/white, /area/station/medical/crematorium) -"axi" = ( -/obj/machinery/alarm{ - dir = 4; - pixel_x = -15 - }, -/turf/simulated/floor/sanitary/white, -/area/station/medical/crematorium) "axj" = ( /obj/cable{ icon_state = "1-2" @@ -5584,16 +5507,6 @@ "axE" = ( /turf/simulated/floor/grass/leafy, /area/station/ranch) -"axF" = ( -/obj/storage/closet/office, -/obj/machinery/alarm{ - dir = 4; - pixel_x = -15 - }, -/turf/simulated/floor/redblack{ - dir = 9 - }, -/area/station/security/detectives_office) "axH" = ( /obj/machinery/light_switch/north{ pixel_y = 28 @@ -5691,17 +5604,6 @@ }, /turf/simulated/floor/black, /area/station/hallway/primary/central) -"ayi" = ( -/obj/decal/tile_edge/line/green{ - dir = 6; - icon_state = "line2" - }, -/obj/machinery/alarm{ - dir = 1; - pixel_y = -15 - }, -/turf/simulated/floor/grass/random, -/area/station/hydroponics/bay) "ayj" = ( /turf/simulated/floor/green/side{ dir = 10 @@ -5929,23 +5831,6 @@ icon_state = "purple2" }, /area/station/janitor/office) -"azi" = ( -/obj/machinery/light{ - dir = 4; - pixel_x = 10 - }, -/obj/rack, -/obj/item/mop, -/obj/item/mop, -/obj/item/storage/box/mousetraps, -/obj/item/spraybottle/cleaner, -/obj/item/spraybottle/cleaner, -/obj/item/reagent_containers/glass/bucket, -/obj/machinery/alarm{ - pixel_y = 23 - }, -/turf/simulated/floor/specialroom/arcade, -/area/station/janitor/office) "azj" = ( /obj/storage/closet/coffin, /obj/machinery/light{ @@ -6100,7 +5985,7 @@ /area/station/crew_quarters/kitchen) "azI" = ( /obj/table/reinforced/auto, -/obj/submachine/mixer, +/obj/machinery/mixer, /obj/machinery/disposal/small{ dir = 1; name = "food delivery unit-'Brig'"; @@ -6551,6 +6436,25 @@ }, /turf/simulated/floor/specialroom/cafeteria, /area/station/crew_quarters/kitchen) +"aBw" = ( +/obj/disposalpipe/segment/mail{ + dir = 1; + icon_state = "pipe-c" + }, +/obj/machinery/portable_atmospherics/canister/air, +/obj/decal/tile_edge/line/purple{ + dir = 8; + icon_state = "line1" + }, +/obj/cable{ + icon_state = "1-2" + }, +/obj/machinery/alarm{ + dir = 4; + pixel_x = -15 + }, +/turf/simulated/floor, +/area/station/hangar/science) "aBz" = ( /obj/machinery/atmospherics/pipe/simple/junction{ dir = 1 @@ -7269,19 +7173,6 @@ /area/station/chapel/sanctuary{ name = "Community Center" }) -"aEr" = ( -/obj/machinery/camera{ - c_tag = "autotag"; - dir = 8; - name = "autoname - SS13"; - pixel_x = 10 - }, -/obj/reagent_dispensers/still, -/obj/machinery/alarm{ - pixel_y = 23 - }, -/turf/simulated/floor/specialroom/bar, -/area/station/crew_quarters/bar) "aEs" = ( /obj/fireworksbox, /turf/simulated/floor/black, @@ -8229,16 +8120,6 @@ icon_state = "fred2" }, /area/station/science/lobby) -"aIS" = ( -/obj/machinery/vending/snack, -/obj/machinery/alarm{ - pixel_y = 23 - }, -/turf/simulated/floor/carpet{ - dir = 1; - icon_state = "fred2" - }, -/area/station/science/lobby) "aIT" = ( /obj/disposalpipe/trunk, /obj/machinery/disposal/small{ @@ -9746,7 +9627,7 @@ /turf/simulated/floor/specialroom/medbay, /area/station/medical/medbay/pharmacy) "aQP" = ( -/obj/stool/bench/auto, +/obj/stool/bench/purple/auto, /turf/simulated/floor/purple, /area/station/hallway/secondary/central) "aQQ" = ( @@ -9754,7 +9635,7 @@ dir = 1; pixel_y = 21 }, -/obj/stool/bench/auto, +/obj/stool/bench/purple/auto, /turf/simulated/floor/purple, /area/station/hallway/secondary/central) "aQR" = ( @@ -9780,14 +9661,6 @@ dir = 1 }, /area/station/hallway/secondary/central) -"aRt" = ( -/obj/disposalpipe/segment/mail{ - dir = 4 - }, -/turf/simulated/floor/purpleblack{ - dir = 4 - }, -/area/station/hallway/primary/east) "aRu" = ( /obj/cable{ icon_state = "4-8" @@ -10268,19 +10141,6 @@ /obj/machinery/portable_atmospherics/scrubber, /turf/simulated/floor/caution/south, /area/station/science/lab) -"aTk" = ( -/obj/rack, -/obj/item/storage/toolbox/emergency, -/obj/item/reagent_containers/glass/bucket, -/obj/item/wrench, -/obj/item/device/light/glowstick, -/obj/item/clothing/suit/fire, -/obj/item/clothing/mask/gas/emergency, -/obj/item/extinguisher, -/obj/item/chem_grenade/firefighting, -/obj/item/chem_grenade/firefighting, -/turf/simulated/floor/caution/south, -/area/station/science/lab) "aTG" = ( /obj/disposalpipe/segment, /obj/table/round, @@ -10830,18 +10690,6 @@ }, /turf/simulated/floor/blue/checker, /area/station/medical/research) -"aWz" = ( -/obj/disposalpipe/segment/mail, -/obj/table/auto, -/obj/item/decoration/flower_vase, -/obj/machinery/alarm{ - dir = 8; - pixel_x = 15 - }, -/turf/simulated/floor/redblack{ - dir = 4 - }, -/area/station/hallway/secondary/central) "aWE" = ( /obj/machinery/disposal/brig, /obj/disposalpipe/trunk/brig, @@ -10933,22 +10781,6 @@ dir = 8 }, /area/station/hallway/primary/east) -"aWZ" = ( -/obj/decal/fakeobjects{ - density = 1; - desc = "What was this thing even supposed to do?"; - icon = 'icons/obj/machines/nuclear.dmi'; - icon_state = "engineoff"; - name = "Active Particle Phase Matrix" - }, -/obj/machinery/alarm{ - dir = 4; - pixel_x = -15 - }, -/turf/simulated/floor/orangeblack/side/white{ - dir = 8 - }, -/area/station/science/teleporter) "aXa" = ( /obj/machinery/lrteleporter{ layer = 3 @@ -11963,14 +11795,6 @@ }, /turf/simulated/floor, /area/station/science/bot_storage) -"bch" = ( -/obj/reagent_dispensers/fueltank, -/obj/machinery/alarm{ - dir = 4; - pixel_x = -15 - }, -/turf/simulated/floor, -/area/station/science/lab) "bci" = ( /obj/machinery/dispenser{ o2tanks = 5; @@ -12741,47 +12565,6 @@ }, /turf/simulated/floor/black, /area/station/hallway/primary/east) -"bhK" = ( -/obj/machinery/light/emergency{ - dir = 1; - pixel_y = 21 - }, -/obj/machinery/chemicompiler_stationary, -/obj/item/storage/wall/fire{ - dir = 1; - pixel_y = 30 - }, -/obj/disposalpipe/segment/mail{ - dir = 4 - }, -/turf/simulated/floor/purpleblack{ - dir = 1 - }, -/area/station/science/chemistry) -"bhM" = ( -/obj/machinery/light{ - dir = 1; - pixel_y = 21 - }, -/obj/machinery/chem_dispenser/chemical, -/obj/item/reagent_containers/glass/beaker/large, -/obj/item/storage/wall/emergency{ - pixel_y = 30 - }, -/turf/simulated/floor/purpleblack{ - dir = 1 - }, -/area/station/science/chemistry) -"bhN" = ( -/obj/machinery/light_switch/north, -/obj/machinery/chem_master, -/obj/decal/poster/wallsign/poster_ptoe{ - pixel_y = 32 - }, -/turf/simulated/floor/purpleblack{ - dir = 5 - }, -/area/station/science/chemistry) "bhW" = ( /obj/disposalpipe/segment, /obj/storage/closet/fire, @@ -12928,15 +12711,6 @@ "bjg" = ( /turf/simulated/floor/black, /area/station/science/chemistry) -"bjh" = ( -/obj/stool/chair/office/purple{ - dir = 1 - }, -/obj/disposalpipe/segment/mail{ - dir = 4 - }, -/turf/simulated/floor/black, -/area/station/science/chemistry) "bji" = ( /obj/disposalpipe/segment/mail{ dir = 4 @@ -13104,29 +12878,6 @@ }, /turf/simulated/floor/specialroom/gym, /area/station/crew_quarters/fitness) -"bks" = ( -/obj/machinery/phone, -/obj/table/reinforced/chemistry/auto/basicsup, -/turf/simulated/floor/black, -/area/station/science/chemistry) -"bkt" = ( -/obj/disposalpipe/segment{ - dir = 4; - icon_state = "pipe-c" - }, -/obj/storage/crate{ - desc = "Wow! Crate may or may not still contain bottles."; - name = "Bottles in a Crate" - }, -/obj/item/reagent_containers/food/drinks/fueltank, -/obj/item/reagent_containers/food/drinks/fueltank, -/obj/item/reagent_containers/food/drinks/bottle/soda, -/obj/item/reagent_containers/food/drinks/bottle/soda, -/obj/item/reagent_containers/food/drinks/bottle/soda, -/turf/simulated/floor/purpleblack{ - dir = 4 - }, -/area/station/science/chemistry) "bkv" = ( /obj/disposalpipe/segment{ dir = 4 @@ -13286,45 +13037,6 @@ }, /turf/space, /area/space) -"blB" = ( -/obj/disposalpipe/trunk/mail{ - dir = 8 - }, -/obj/machinery/disposal/mail/small{ - dir = 4; - mail_tag = "chemistry"; - mailgroup = "science"; - message = "1"; - name = "mail chute-'Chemistry'" - }, -/obj/machinery/chem_heater/chemistry, -/obj/table/reinforced/chemistry/auto/clericalsup, -/turf/simulated/floor/purpleblack{ - dir = 8 - }, -/area/station/science/chemistry) -"blD" = ( -/obj/item/paper/labdrawertips, -/obj/table/reinforced/chemistry/auto/auxsup, -/turf/simulated/floor/black, -/area/station/science/chemistry) -"blE" = ( -/obj/disposalpipe/segment, -/obj/machinery/camera{ - c_tag = "autotag"; - dir = 8; - name = "autoname - SS13"; - pixel_x = 10 - }, -/obj/table/reinforced/chemistry/auto, -/obj/blind_switch/area/east{ - dir = 4 - }, -/obj/machinery/chem_heater/chemistry, -/turf/simulated/floor/purpleblack{ - dir = 4 - }, -/area/station/science/chemistry) "blG" = ( /obj/machinery/disposal/mail{ mail_tag = "artlab"; @@ -13460,48 +13172,12 @@ }, /turf/simulated/floor/black, /area/station/teleporter) -"bmO" = ( -/obj/machinery/light{ - dir = 8; - pixel_x = -10 - }, -/obj/table/reinforced/chemistry/auto, -/obj/machinery/chem_dispenser/chemical, -/obj/item/reagent_containers/glass/beaker/large, -/turf/simulated/floor/purpleblack{ - dir = 8 - }, -/area/station/science/chemistry) -"bmP" = ( -/obj/stool/chair/office/purple{ - dir = 8 - }, -/turf/simulated/floor/black, -/area/station/science/chemistry) -"bmQ" = ( -/obj/machinery/glass_recycler/chemistry, -/obj/table/reinforced/chemistry/auto/firstaid, -/turf/simulated/floor/black, -/area/station/science/chemistry) "bmR" = ( /obj/stool/chair/office/purple{ dir = 4 }, /turf/simulated/floor/black, /area/station/science/chemistry) -"bmS" = ( -/obj/disposalpipe/segment, -/obj/table/reinforced/chemistry/auto, -/obj/machinery/chem_dispenser/chemical, -/obj/machinery/door_control{ - id = "chemblast"; - name = "Chemistry Blast Shield Control"; - pixel_x = 24 - }, -/turf/simulated/floor/purpleblack{ - dir = 4 - }, -/area/station/science/chemistry) "bmX" = ( /turf/simulated/floor/grime, /area/station/science/artifact) @@ -13577,50 +13253,6 @@ }, /turf/simulated/floor/engine, /area/station/hangar/main) -"bnJ" = ( -/obj/table/round, -/obj/item/storage/toolbox/emergency, -/turf/simulated/floor/purpleblack/corner{ - dir = 8 - }, -/area/station/hallway/primary/east) -"bnK" = ( -/obj/table/reinforced/chemistry/auto, -/obj/machinery/chem_master{ - dir = 4; - pixel_x = -4 - }, -/turf/simulated/floor/purpleblack{ - dir = 8 - }, -/area/station/science/chemistry) -"bnL" = ( -/obj/disposalpipe/segment{ - dir = 4; - icon_state = "pipe-c" - }, -/turf/simulated/floor/purpleblack/corner{ - dir = 5 - }, -/area/station/science/chemistry) -"bnM" = ( -/obj/disposalpipe/segment{ - dir = 8; - icon_state = "pipe-c" - }, -/obj/machinery/light{ - dir = 4; - pixel_x = 10 - }, -/obj/table/reinforced/chemistry/auto, -/obj/window/reinforced/south, -/obj/submachine/chem_extractor{ - dir = 8 - }, -/turf/simulated/floor/purpleblack{ - dir = 6 - }, -/area/station/science/chemistry) "bnO" = ( /obj/disposalpipe/segment{ dir = 4 @@ -13849,6 +13481,10 @@ pixel_y = 21 }, /obj/storage/cart/trash, +/obj/machinery/power/apc/autoname_north, +/obj/cable{ + icon_state = "0-2" + }, /turf/simulated/floor/plating, /area/station/maintenance/central) "boU" = ( @@ -13921,21 +13557,6 @@ icon_state = "yellowblack" }, /area/station/hallway/primary/east) -"bpj" = ( -/obj/table/reinforced/chemistry/auto/drugs, -/obj/machinery/chem_shaker/large/chemistry, -/turf/simulated/floor/purpleblack{ - dir = 10 - }, -/area/station/science/chemistry) -"bpk" = ( -/obj/table/reinforced/chemistry/auto, -/turf/simulated/floor/purpleblack, -/area/station/science/chemistry) -"bpl" = ( -/obj/storage/secure/closet/research/chemical, -/turf/simulated/floor/purpleblack, -/area/station/science/chemistry) "bpm" = ( /obj/machinery/disposal/small, /obj/disposalpipe/trunk{ @@ -14140,14 +13761,7 @@ /area/station/storage/tech) "bqF" = ( /obj/machinery/light/small, -/obj/rack, -/obj/item/circuitboard/card, -/obj/item/circuitboard/barcode_qm, -/obj/item/circuitboard/arcade, -/obj/item/circuitboard/powermonitor_smes, -/obj/item/circuitboard/genetics, -/obj/item/circuitboard/qmorder, -/obj/item/circuitboard/telescope, +/obj/rack/organized/techstorage_eng, /turf/simulated/floor/plating, /area/station/storage/tech) "bqG" = ( @@ -14951,25 +14565,6 @@ dir = 5 }, /area/station/quartermaster/office) -"buU" = ( -/obj/disposalpipe/segment/mail{ - dir = 1; - icon_state = "pipe-c" - }, -/obj/machinery/portable_atmospherics/canister/air, -/obj/decal/tile_edge/line/purple{ - dir = 8; - icon_state = "line1" - }, -/obj/cable{ - icon_state = "1-2" - }, -/obj/machinery/alarm{ - dir = 4; - pixel_x = -15 - }, -/turf/simulated/floor, -/area/station/hangar/science) "buV" = ( /obj/disposalpipe/segment/mail{ dir = 4 @@ -15150,6 +14745,20 @@ }, /turf/simulated/floor, /area/station/quartermaster/office) +"bvZ" = ( +/obj/cable{ + icon_state = "1-8" + }, +/obj/machinery/portable_reclaimer, +/obj/decal/stripe_caution, +/obj/machinery/alarm{ + dir = 8; + pixel_x = 15 + }, +/turf/simulated/floor/yellow/side{ + dir = 4 + }, +/area/station/mining/staff_room) "bwb" = ( /obj/storage/crate, /obj/decal/tile_edge/line/yellow{ @@ -15780,13 +15389,6 @@ "bzU" = ( /turf/simulated/wall/auto/reinforced/supernorn, /area/station/engine/gas) -"bzX" = ( -/obj/machinery/alarm{ - dir = 8; - pixel_x = 15 - }, -/turf/simulated/floor/plating, -/area/station/engine/gas) "bzY" = ( /turf/simulated/wall/auto/supernorn, /area/station/engine/gas) @@ -16001,17 +15603,6 @@ /obj/decal/stripe_caution, /turf/simulated/floor, /area/station/quartermaster/storage) -"bDd" = ( -/obj/rack, -/obj/item/clothing/suit/fire, -/obj/item/clothing/mask/gas/emergency, -/obj/item/clothing/head/helmet/firefighter, -/obj/item/tank/air, -/obj/item/extinguisher, -/obj/item/crowbar, -/obj/item/device/light/flashlight, -/turf/simulated/floor, -/area/station/engine/substation/east) "bDe" = ( /obj/machinery/power/smes{ chargelevel = 15000; @@ -16277,19 +15868,6 @@ "bGF" = ( /turf/simulated/floor, /area/station/mining/staff_room) -"bGH" = ( -/obj/table/reinforced/auto, -/obj/item/clothing/under/rank/mechanic, -/obj/item/crowbar, -/obj/item/clothing/gloves/yellow/unsulated, -/obj/item/reagent_containers/food/drinks/fueltank, -/obj/item/clothing/shoes/magnetic, -/obj/machinery/alarm{ - dir = 4; - pixel_x = -15 - }, -/turf/simulated/floor/plating, -/area/station/hangar/qm) "bGS" = ( /obj/cable{ icon_state = "4-8" @@ -16331,6 +15909,19 @@ /obj/item/hand_labeler, /turf/simulated/floor/plating, /area/station/hangar/qm) +"bHp" = ( +/obj/table/reinforced/auto, +/obj/item/sheet/glass/fullstack, +/obj/item/sheet/glass/fullstack, +/obj/item/storage/box/cablesbox, +/obj/item/storage/toolbox/mechanical, +/obj/item/storage/toolbox/electrical, +/obj/item/device/light/flashlight, +/obj/machinery/alarm{ + pixel_y = 23 + }, +/turf/simulated/floor/grey/whitegrime/other, +/area/station/storage/primary) "bHD" = ( /obj/table/reinforced/auto, /obj/item/sheet/steel{ @@ -17416,10 +17007,6 @@ /obj/item/light/tube, /turf/simulated/floor/plating/random, /area/ghostdrone_factory) -"bMS" = ( -/obj/machinery/drainage/big, -/turf/simulated/floor/black, -/area/station/science/chemistry) "bNd" = ( /obj/disposalpipe/segment/mail, /obj/storage/crate/freezer, @@ -17541,6 +17128,12 @@ icon_state = "catwalk_cross" }, /area/mining/magnet) +"bOS" = ( +/obj/item/storage/wall/emergency{ + dir = 8 + }, +/turf/simulated/wall/auto/supernorn, +/area/station/science/chemistry) "bPm" = ( /obj/cable{ icon_state = "1-2" @@ -17641,6 +17234,10 @@ /area/station/chapel/sanctuary{ name = "Community Center" }) +"bSl" = ( +/obj/table/reinforced/chemistry/auto/auxsup, +/turf/simulated/floor/black, +/area/station/science/chemistry) "bSw" = ( /obj/decal/stripe_delivery, /turf/simulated/floor/bluewhite{ @@ -17976,16 +17573,17 @@ }, /turf/simulated/floor/engine, /area/station/engine/core/nuclear) -"cdG" = ( -/obj/stool/bench/yellow/auto, -/obj/machinery/alarm{ - dir = 4; - pixel_x = -15 +"cdu" = ( +/obj/machinery/light{ + dir = 8; + pixel_x = -10 }, -/turf/unsimulated/floor/orangeblack/side{ +/obj/table/reinforced/chemistry/auto/firstaid, +/obj/machinery/chem_shaker/large/chemistry, +/turf/simulated/floor/purpleblack{ dir = 8 }, -/area/station/crewquarters/cryotron) +/area/station/science/chemistry) "cdV" = ( /obj/cable{ icon_state = "4-8" @@ -18021,6 +17619,10 @@ name = "Door-linked Atmospheric Forcefield"; powerlevel = 1 }, +/obj/mapping_helper/airlock/cycler{ + cycle_id = "westsubstation"; + name = "West Substation" + }, /turf/simulated/floor/plating, /area/station/engine/substation/west) "ceB" = ( @@ -18188,6 +17790,11 @@ name = "Door-linked Atmospheric Forcefield"; powerlevel = 1 }, +/obj/mapping_helper/airlock/cycler{ + cycle_id = "engine"; + name = "Engine Room"; + enter_id = "outer" + }, /turf/simulated/floor/engine, /area/station/engine/core/nuclear) "clS" = ( @@ -18447,6 +18054,16 @@ dir = 1 }, /area/station/hydroponics/bay) +"cwK" = ( +/obj/cable{ + icon_state = "1-2" + }, +/obj/cable{ + icon_state = "2-4" + }, +/obj/disposalpipe/segment/mail, +/turf/simulated/floor/black, +/area/station/hallway/primary/east) "cwP" = ( /obj/cable/yellow, /obj/machinery/power/terminal{ @@ -18531,6 +18148,24 @@ dir = 1 }, /area/station/hallway/secondary/central) +"cAD" = ( +/obj/storage/crate{ + desc = "A crate of confiscated items."; + name = "Contraband" + }, +/obj/item/storage/pill_bottle/cyberpunk, +/obj/item/instrument/vuvuzela, +/obj/item/bananapeel, +/obj/item/item_box/no{ + pixel_x = 8; + pixel_y = -5 + }, +/obj/machinery/alarm{ + dir = 4; + pixel_x = -15 + }, +/turf/simulated/floor/caution/corner/sw, +/area/station/security/main) "cBh" = ( /obj/machinery/firealarm/east, /obj/table/reinforced/auto, @@ -18885,6 +18520,23 @@ icon_state = "fblue2" }, /area/station/hallway/secondary/central) +"cRS" = ( +/obj/machinery/light{ + dir = 4; + pixel_x = 10 + }, +/obj/rack, +/obj/item/mop, +/obj/item/mop, +/obj/item/storage/box/mousetraps, +/obj/item/spraybottle/cleaner, +/obj/item/spraybottle/cleaner, +/obj/item/reagent_containers/glass/bucket, +/obj/machinery/alarm{ + pixel_y = 23 + }, +/turf/simulated/floor/specialroom/arcade, +/area/station/janitor/office) "cSn" = ( /obj/cable{ icon_state = "4-8" @@ -19416,6 +19068,22 @@ }, /turf/simulated/floor/black/side, /area/station/engine/inner) +"dpC" = ( +/obj/machinery/light/emergency, +/obj/disposalpipe/segment{ + dir = 4 + }, +/obj/table/wood/auto, +/obj/item/storage/photo_album{ + pixel_y = -10 + }, +/obj/item/pinpointer/disk, +/obj/item/camera{ + pixel_y = 6 + }, +/obj/item/hand_tele, +/turf/simulated/floor/carpet/arcade, +/area/station/crew_quarters/captain) "dpZ" = ( /obj/disposalpipe/segment{ dir = 4 @@ -19731,6 +19399,15 @@ dir = 4 }, /area/station/science/lobby) +"dDF" = ( +/obj/disposalpipe/segment, +/obj/decal/stripe_delivery, +/obj/machinery/alarm{ + dir = 4; + pixel_x = -15 + }, +/turf/simulated/floor, +/area/station/hallway/primary/north) "dEi" = ( /obj/machinery/door/airlock/pyro/glass/sci{ dir = 4; @@ -19807,6 +19484,29 @@ /obj/machinery/crusher, /turf/simulated/floor/caution/corner/sw, /area/station/maintenance/disposal) +"dHR" = ( +/obj/machinery/light{ + dir = 4; + pixel_x = 10 + }, +/obj/cable{ + icon_state = "0-8" + }, +/obj/cable{ + icon_state = "0-8" + }, +/obj/cable{ + icon_state = "0-4" + }, +/obj/disposaloutlet{ + name = "brig delivery chute" + }, +/obj/disposalpipe/trunk/brig, +/obj/machinery/alarm{ + pixel_y = 23 + }, +/turf/simulated/floor/grime, +/area/station/security/brig) "dII" = ( /obj/disposalpipe/segment/mail{ dir = 4 @@ -19851,17 +19551,6 @@ dir = 8 }, /area/station/science/artifact) -"dLs" = ( -/obj/disposalpipe/segment, -/obj/cable{ - icon_state = "1-2" - }, -/obj/machinery/alarm{ - dir = 4; - pixel_x = -15 - }, -/turf/simulated/floor/black, -/area/station/bridge) "dLM" = ( /obj/machinery/traymachine/morgue{ dir = 8 @@ -19890,7 +19579,12 @@ /obj/item/kitchen/utensil/spoon, /obj/item/kitchen/utensil/fork, /obj/item/storage/box/plates, -/obj/item/storage/box/cutlery, +/obj/item/storage/box/cutlery{ + pixel_x = 8 + }, +/obj/item/storage/box/popsicle_sticks{ + pixel_x = -7 + }, /turf/simulated/floor/specialroom/cafeteria, /area/station/crew_quarters/kitchen) "dMz" = ( @@ -19909,12 +19603,15 @@ dir = 4 }, /obj/mapping_helper/firedoor_spawn, -/obj/mapping_helper/access, /obj/forcefield/energyshield/perma/doorlink{ desc = "A door-linked force field that prevents gasses from passing through it."; name = "Door-linked Atmospheric Forcefield"; powerlevel = 1 }, +/obj/mapping_helper/airlock/cycler{ + cycle_id = "westmaint"; + name = "West Maintenance" + }, /turf/simulated/floor/plating, /area/station/maintenance/west) "dMT" = ( @@ -20014,6 +19711,13 @@ }, /turf/simulated/floor/circuit, /area/listeningpost/power) +"dTW" = ( +/obj/machinery/alarm{ + dir = 8; + pixel_x = 15 + }, +/turf/simulated/floor/plating, +/area/station/engine/gas) "dUf" = ( /obj/rack, /obj/machinery/firealarm/south, @@ -20304,13 +20008,16 @@ /obj/machinery/door/airlock/pyro/external{ dir = 4 }, -/obj/mapping_helper/access, /obj/mapping_helper/firedoor_spawn, /obj/forcefield/energyshield/perma/doorlink{ desc = "A door-linked force field that prevents gasses from passing through it."; name = "Door-linked Atmospheric Forcefield"; powerlevel = 1 }, +/obj/mapping_helper/airlock/cycler{ + cycle_id = "podbay"; + name = "Public Podbay" + }, /turf/simulated/floor/plating, /area/station/hangar/main) "eeV" = ( @@ -21048,22 +20755,15 @@ /turf/simulated/floor/white, /area/station/medical/medbay/lobby) "eJJ" = ( -/obj/machinery/power/apc{ - dir = 8; - name = "Armory APC"; - noalerts = 1; - pixel_x = -24 - }, -/obj/cable{ - icon_state = "0-2" - }, -/obj/cable, /obj/machinery/camera{ c_tag = "autotag"; dir = 8; name = "autoname - SS13"; pixel_x = 10 }, +/obj/cable{ + icon_state = "1-2" + }, /turf/simulated/floor/black, /area/station/maintenance/central) "eKZ" = ( @@ -21143,6 +20843,10 @@ }, /obj/mapping_helper/access/engineering, /obj/mapping_helper/firedoor_spawn, +/obj/mapping_helper/airlock/cycler{ + cycle_id = "eastsubstation"; + name = "East Substation" + }, /turf/simulated/floor/plating, /area/station/engine/substation/east) "eNu" = ( @@ -21253,20 +20957,6 @@ }, /turf/simulated/floor, /area/station/quartermaster/office) -"eQZ" = ( -/obj/cable{ - icon_state = "1-8" - }, -/obj/machinery/portable_reclaimer, -/obj/decal/stripe_caution, -/obj/machinery/alarm{ - dir = 8; - pixel_x = 15 - }, -/turf/simulated/floor/yellow/side{ - dir = 4 - }, -/area/station/mining/staff_room) "eRB" = ( /obj/table/wood/auto, /obj/machinery/light/lamp/black{ @@ -21380,6 +21070,25 @@ }, /turf/simulated/floor/wood, /area/station/crew_quarters/bar) +"eXS" = ( +/obj/machinery/door/airlock/pyro/external{ + dir = 4 + }, +/obj/mapping_helper/firedoor_spawn, +/obj/forcefield/energyshield/perma/doorlink{ + desc = "A door-linked force field that prevents gasses from passing through it."; + name = "Door-linked Atmospheric Forcefield"; + powerlevel = 1 + }, +/obj/mapping_helper/airlock/cycler{ + cycle_id = "arrivals2"; + name = "Arrivals"; + enter_id = "main" + }, +/turf/unsimulated/floor{ + icon_state = "floor" + }, +/area/station/crewquarters/cryotron) "eXT" = ( /obj/machinery/atmospherics/pipe/simple/insulated{ dir = 5 @@ -21578,6 +21287,18 @@ /obj/mapping_helper/wingrille_spawn/auto/reinforced, /turf/simulated/floor/plating, /area/station/garden/aviary) +"ffI" = ( +/obj/storage/secure/closet/command/medical_director, +/obj/machinery/camera, +/obj/machinery/alarm{ + dir = 4; + pixel_x = -15 + }, +/turf/simulated/floor/carpet{ + dir = 9; + icon_state = "fblue2" + }, +/area/station/medical/head) "fhb" = ( /obj/cable{ icon_state = "2-8" @@ -21857,6 +21578,17 @@ /obj/mapping_helper/access/maint, /turf/simulated/floor/plating, /area/station/maintenance/southwest) +"ftL" = ( +/obj/disposalpipe/segment, +/obj/machinery/hydro_growlamp, +/obj/machinery/alarm{ + dir = 4; + pixel_x = -15 + }, +/turf/simulated/floor/green/side{ + dir = 8 + }, +/area/station/hydroponics/bay) "fvL" = ( /obj/disposalpipe/segment/mail, /turf/simulated/floor/plating, @@ -22100,6 +21832,19 @@ }, /turf/simulated/floor, /area/station/science/artifact) +"fGX" = ( +/obj/machinery/door/window/northright{ + req_access_txt = "22" + }, +/obj/machinery/alarm{ + dir = 8; + pixel_x = 15 + }, +/turf/simulated/floor/carpet{ + dir = 5; + icon_state = "fgreen2" + }, +/area/station/chapel/funeral_parlor) "fGZ" = ( /obj/cable/yellow{ icon_state = "0-8" @@ -22253,6 +21998,11 @@ }, /obj/mapping_helper/access/cargo, /obj/mapping_helper/firedoor_spawn, +/obj/mapping_helper/airlock/cycler{ + cycle_id = "cargo"; + name = "Cargo"; + enter_id = "inner" + }, /turf/simulated/floor/plating, /area/station/quartermaster/office) "fMM" = ( @@ -22487,6 +22237,11 @@ name = "Door-linked Atmospheric Forcefield"; powerlevel = 1 }, +/obj/mapping_helper/airlock/cycler{ + cycle_id = "cargo"; + name = "Cargo"; + enter_id = "outer" + }, /turf/simulated/floor/plating, /area/station/quartermaster/office) "fWz" = ( @@ -22534,18 +22289,6 @@ /obj/disposalpipe/segment, /turf/simulated/floor/blue, /area/station/medical/staff) -"fYK" = ( -/obj/cable{ - icon_state = "4-8" - }, -/obj/machinery/portable_atmospherics/canister/sleeping_agent, -/obj/machinery/alarm{ - pixel_y = 23 - }, -/turf/simulated/floor/redblack{ - dir = 1 - }, -/area/station/ai_monitored/armory) "fZd" = ( /obj/disposalpipe/segment/mail{ dir = 4 @@ -22599,6 +22342,27 @@ /obj/mapping_helper/wingrille_spawn/auto/reinforced, /turf/simulated/floor/plating, /area/station/engine/substation/west) +"gaB" = ( +/obj/mapping_helper/wingrille_spawn/auto/reinforced, +/obj/cable, +/obj/cable{ + icon_state = "0-2" + }, +/obj/window_blinds/cog2/right{ + dir = 4 + }, +/obj/machinery/door/poddoor/blast{ + density = 0; + dir = 1; + icon_state = "bdoormid0"; + id = "chemblast"; + layer = 5; + name = "Chemistry Blast Shield"; + opacity = 0; + tag = "icon-bdoormidc1" + }, +/turf/simulated/floor/plating, +/area/station/science/chemistry) "gaK" = ( /obj/machinery/atmospherics/pipe/manifold{ dir = 1; @@ -22783,6 +22547,38 @@ }, /turf/simulated/floor/yellow, /area/station/engine/engineering) +"gip" = ( +/obj/table/reinforced/chemistry/auto/basicsup, +/obj/item/paper/labdrawertips, +/turf/simulated/floor/black, +/area/station/science/chemistry) +"gjs" = ( +/obj/item/reagent_containers/food/snacks/ingredient/meat/mysterymeat, +/obj/item/reagent_containers/food/snacks/ingredient/meat/mysterymeat/grody, +/obj/item/reagent_containers/food/snacks/ingredient/meat/mysterymeat/grody, +/obj/item/reagent_containers/food/snacks/ingredient/meat/mysterymeat/grody, +/obj/item/reagent_containers/food/snacks/ingredient/meatpaste{ + desc = "Gross."; + name = "old kidney" + }, +/obj/item/organ/heart{ + desc = "A human heart, grody. How long has it been in that freezer?"; + name = "funky ol' heart" + }, +/obj/storage/crate/freezer{ + name = "Freezer - Spare Parts" + }, +/obj/item/reagent_containers/food/snacks/ingredient/meat/monkeymeat, +/obj/item/reagent_containers/food/snacks/ingredient/meat/monkeymeat, +/obj/item/reagent_containers/food/snacks/ingredient/meat/monkeymeat, +/obj/item/reagent_containers/food/snacks/ingredient/meat/mysterymeat, +/obj/machinery/light, +/obj/machinery/alarm{ + dir = 4; + pixel_x = -15 + }, +/turf/simulated/floor/sanitary/white, +/area/station/medical/morgue) "gju" = ( /obj/disposalpipe/segment/mail{ dir = 4 @@ -23152,18 +22948,6 @@ dir = 1 }, /area/station/medical/medbay) -"gws" = ( -/obj/storage/secure/closet/command/medical_director, -/obj/machinery/camera, -/obj/machinery/alarm{ - dir = 4; - pixel_x = -15 - }, -/turf/simulated/floor/carpet{ - dir = 9; - icon_state = "fblue2" - }, -/area/station/medical/head) "gww" = ( /obj/machinery/firealarm/east, /obj/cable{ @@ -23259,6 +23043,16 @@ /obj/landmark/start/job/cyborg, /turf/simulated/floor/black, /area/station/medical/robotics) +"gzn" = ( +/obj/stool/bench/yellow/auto, +/obj/machinery/alarm{ + dir = 4; + pixel_x = -15 + }, +/turf/unsimulated/floor/orangeblack/side{ + dir = 8 + }, +/area/station/crewquarters/cryotron) "gAf" = ( /obj/table/auto, /obj/item/rods/steel/fullstack, @@ -23481,6 +23275,19 @@ /obj/mapping_helper/firedoor_spawn, /turf/simulated/floor/plating, /area/station/engine/engineering) +"gQR" = ( +/obj/rack, +/obj/item/storage/toolbox/emergency, +/obj/item/reagent_containers/glass/bucket, +/obj/item/wrench, +/obj/item/device/light/glowstick, +/obj/item/clothing/suit/hazard/fire, +/obj/item/clothing/mask/gas/emergency, +/obj/item/extinguisher, +/obj/item/chem_grenade/firefighting, +/obj/item/chem_grenade/firefighting, +/turf/simulated/floor/caution/south, +/area/station/science/lab) "gRe" = ( /obj/landmark/start/job/roboticist, /obj/cable{ @@ -23545,6 +23352,16 @@ dir = 4 }, /area/station/science/lobby) +"gTd" = ( +/obj/machinery/alarm{ + dir = 8; + pixel_x = 15 + }, +/turf/simulated/floor/engine{ + allows_vehicles = 0; + icon_state = "engine_caution_east" + }, +/area/station/engine/core/nuclear) "gUh" = ( /obj/landmark/pest, /turf/simulated/floor/redblack{ @@ -23631,16 +23448,6 @@ }, /turf/simulated/floor/orangeblack, /area/station/mining/staff_room) -"gZw" = ( -/obj/item/device/radio/intercom/science, -/obj/machinery/computer/chem_request_receiver, -/obj/disposalpipe/segment/mail{ - dir = 4 - }, -/turf/simulated/floor/purpleblack{ - dir = 9 - }, -/area/station/science/chemistry) "gZJ" = ( /obj/stool/bench/yellow/auto, /turf/unsimulated/floor{ @@ -23657,6 +23464,11 @@ name = "Door-linked Atmospheric Forcefield"; powerlevel = 1 }, +/obj/mapping_helper/airlock/cycler{ + cycle_id = "arrivals"; + name = "Arrivals"; + enter_id = "main" + }, /turf/unsimulated/floor{ icon_state = "floor" }, @@ -23763,15 +23575,6 @@ icon_state = "fblue2" }, /area/station/crew_quarters/ce) -"hfL" = ( -/obj/landmark/start/job/engineer, -/obj/machinery/alarm{ - pixel_y = 23 - }, -/turf/simulated/floor/black/side{ - dir = 1 - }, -/area/station/engine/inner) "hfQ" = ( /obj/grille/catwalk{ dir = 4 @@ -24047,6 +23850,11 @@ name = "Door-linked Atmospheric Forcefield"; powerlevel = 1 }, +/obj/mapping_helper/airlock/cycler{ + cycle_id = "escape"; + name = "Escape"; + enter_id = "outer" + }, /turf/simulated/floor/plating, /area/station/hallway/secondary/exit) "hoj" = ( @@ -24130,6 +23938,16 @@ }, /turf/simulated/floor/white, /area/station/medical/medbay) +"huq" = ( +/obj/table/round, +/obj/item/storage/toolbox/emergency, +/obj/disposalpipe/segment/mail{ + dir = 4 + }, +/turf/simulated/floor/purpleblack/corner{ + dir = 8 + }, +/area/station/hallway/primary/east) "huw" = ( /mob/living/carbon/human/npc/monkey/tanhony, /turf/simulated/floor/white, @@ -24232,6 +24050,15 @@ icon_state = "purple2" }, /area/station/bridge/captain) +"hxt" = ( +/obj/disposalpipe/segment, +/obj/table/reinforced/chemistry/auto, +/obj/machinery/chem_dispenser/chemical, +/obj/item/reagent_containers/glass/beaker/large, +/turf/simulated/floor/purpleblack{ + dir = 4 + }, +/area/station/science/chemistry) "hxU" = ( /obj/cable{ icon_state = "1-2" @@ -24645,6 +24472,22 @@ dir = 4 }, /area/station/hallway/primary/east) +"hIK" = ( +/obj/decal/fakeobjects{ + density = 1; + desc = "What was this thing even supposed to do?"; + icon = 'icons/obj/machines/nuclear.dmi'; + icon_state = "engineoff"; + name = "Active Particle Phase Matrix" + }, +/obj/machinery/alarm{ + dir = 4; + pixel_x = -15 + }, +/turf/simulated/floor/orangeblack/side/white{ + dir = 8 + }, +/area/station/science/teleporter) "hJn" = ( /obj/machinery/disposal/small, /obj/disposalpipe/trunk{ @@ -24658,6 +24501,18 @@ }, /turf/simulated/floor, /area/station/science/bot_storage) +"hJr" = ( +/obj/cable/orange{ + icon_state = "1-8" + }, +/obj/machinery/alarm{ + dir = 8; + pixel_x = 15 + }, +/turf/simulated/floor/yellow/side{ + dir = 5 + }, +/area/station/engine/substation/west) "hJC" = ( /obj/mapping_helper/wingrille_spawn/auto/reinforced, /obj/disposalpipe/segment/mail{ @@ -24746,6 +24601,11 @@ /obj/decal/cleanable/dirt, /turf/simulated/floor/plating, /area/station/maintenance/west) +"hNt" = ( +/obj/machinery/chem_dispenser/chemical, +/obj/item/reagent_containers/glass/beaker/large, +/turf/simulated/floor/purpleblack, +/area/station/science/chemistry) "hNO" = ( /obj/machinery/conveyor/EW{ id = "chapel_belt"; @@ -25029,17 +24889,6 @@ icon_state = "fgreen2" }, /area/station/engine/engineering/ce/private) -"hVE" = ( -/obj/pool/perspective{ - dir = 9; - tag = "icon-pool (NORTHWEST)" - }, -/obj/machinery/alarm{ - dir = 4; - pixel_x = -15 - }, -/turf/simulated/floor/blue/checker, -/area/station/crew_quarters/pool) "hXj" = ( /obj/disposalpipe/segment{ dir = 4 @@ -25604,22 +25453,6 @@ /obj/decal/stripe_caution, /turf/simulated/floor, /area/station/quartermaster/office) -"iqI" = ( -/obj/machinery/light/emergency, -/obj/disposalpipe/segment{ - dir = 4 - }, -/obj/table/wood/auto, -/obj/item/storage/photo_album{ - pixel_y = -10 - }, -/obj/item/pinpointer, -/obj/item/camera{ - pixel_y = 6 - }, -/obj/item/hand_tele, -/turf/simulated/floor/carpet/arcade, -/area/station/crew_quarters/captain) "iqX" = ( /obj/cable{ icon_state = "0-4" @@ -26193,6 +26026,23 @@ dir = 4 }, /area/station/hallway/primary/east) +"iIr" = ( +/obj/machinery/light/emergency{ + dir = 1; + pixel_y = 21 + }, +/obj/item/storage/wall/fire{ + dir = 1; + pixel_y = 30 + }, +/obj/machinery/disposal/chemlink, +/obj/disposalpipe/trunk/mail{ + dir = 8 + }, +/turf/simulated/floor/purpleblack{ + dir = 1 + }, +/area/station/science/chemistry) "iJs" = ( /obj/item/device/radio/intercom/security{ layer = 6.02 @@ -26307,11 +26157,11 @@ /obj/cable{ icon_state = "4-8" }, -/obj/stool/bench/auto, /obj/item/device/radio/intercom/science{ pixel_x = 10; pixel_y = 24 }, +/obj/stool/bench/purple/auto, /turf/simulated/floor/purple, /area/station/hallway/secondary/central) "iOK" = ( @@ -26664,6 +26514,15 @@ /area/station/crew_quarters/quartersA{ name = "Crew Quarters P01" }) +"jaD" = ( +/obj/machinery/clonepod, +/obj/machinery/alarm{ + pixel_y = 23 + }, +/turf/simulated/floor/white/checker2{ + dir = 5 + }, +/area/station/medical/medbay/cloner) "jaI" = ( /obj/machinery/shower{ dir = 4; @@ -26764,6 +26623,16 @@ dir = 9 }, /area/station/crewquarters/cryotron) +"jgf" = ( +/obj/machinery/vending/snack, +/obj/machinery/alarm{ + pixel_y = 23 + }, +/turf/simulated/floor/carpet{ + dir = 1; + icon_state = "fred2" + }, +/area/station/science/lobby) "jgj" = ( /obj/table/auto, /obj/item/kitchen/food_box/donut_box{ @@ -26825,6 +26694,17 @@ dir = 6 }, /area/station/quartermaster/office) +"jiC" = ( +/obj/machinery/power/data_terminal, +/obj/cable{ + dir = null + }, +/obj/machinery/alarm{ + dir = 4; + pixel_x = -15 + }, +/turf/simulated/floor/circuit, +/area/station/turret_protected/ai) "jiM" = ( /obj/machinery/atmospherics/pipe/manifold/overfloor{ dir = 1 @@ -27076,6 +26956,21 @@ /obj/machinery/cashreg, /turf/simulated/floor/wood, /area/station/crew_quarters/bar) +"jrF" = ( +/obj/disposalpipe/trunk/mail{ + dir = 8 + }, +/obj/machinery/disposal/mail/small{ + dir = 4; + mail_tag = "chemistry"; + mailgroup = "science"; + message = "1"; + name = "mail chute-'Chemistry'" + }, +/turf/simulated/floor/purpleblack{ + dir = 8 + }, +/area/station/science/chemistry) "jsd" = ( /obj/machinery/mass_driver{ dir = 4; @@ -27203,6 +27098,28 @@ icon_state = "fpurple1" }, /area/station/crew_quarters/bar) +"jyO" = ( +/obj/machinery/light/emergency{ + dir = 4; + pixel_x = 10 + }, +/obj/item/device/radio/intercom/catering, +/obj/storage/cart/hotdog, +/obj/item/reagent_containers/food/snacks/hotdog, +/obj/item/reagent_containers/food/snacks/hotdog, +/obj/item/reagent_containers/food/snacks/hotdog, +/obj/item/reagent_containers/food/snacks/hotdog, +/obj/item/shaker/ketchup{ + pixel_x = 6 + }, +/obj/item/shaker/mustard{ + pixel_x = -6 + }, +/obj/machinery/alarm{ + pixel_y = 23 + }, +/turf/simulated/floor/specialroom/cafeteria, +/area/station/crew_quarters/kitchen) "jzn" = ( /obj/mapping_helper/wingrille_spawn/auto/reinforced, /obj/disposalpipe/segment/mail{ @@ -27425,17 +27342,6 @@ dir = 4 }, /area/space) -"jHT" = ( -/obj/disposalpipe/segment{ - dir = 4 - }, -/obj/stool/chair, -/obj/landmark/start/job/assistant, -/obj/machinery/alarm{ - pixel_y = 23 - }, -/turf/simulated/floor/black, -/area/station/hallway/primary/central) "jHU" = ( /obj/landmark/start/job/assistant, /obj/item/clothing/glasses/sunglasses/tanning, @@ -27463,6 +27369,13 @@ dir = 1 }, /area/station/hallway/secondary/central) +"jIC" = ( +/obj/disposalpipe/segment{ + dir = 4; + icon_state = "pipe-c" + }, +/turf/simulated/floor/purpleblack/corner, +/area/station/science/chemistry) "jJG" = ( /obj/cable/orange{ icon_state = "4-8" @@ -27710,16 +27623,6 @@ /obj/mapping_helper/wingrille_spawn/auto/reinforced, /turf/simulated/floor/plating, /area/station/engine/substation/west) -"jTu" = ( -/obj/machinery/firealarm/north, -/obj/machinery/disposal/chemlink, -/obj/disposalpipe/trunk/mail{ - dir = 8 - }, -/turf/simulated/floor/purpleblack{ - dir = 1 - }, -/area/station/science/chemistry) "jUG" = ( /obj/cable/blue{ icon_state = "2-8" @@ -27728,24 +27631,6 @@ dir = 4 }, /area/station/engine/ptl) -"jVC" = ( -/obj/storage/crate{ - desc = "A crate of confiscated items."; - name = "Contraband" - }, -/obj/item/storage/pill_bottle/cyberpunk, -/obj/item/instrument/vuvuzela, -/obj/item/bananapeel, -/obj/item/item_box/no{ - pixel_x = 8; - pixel_y = -5 - }, -/obj/machinery/alarm{ - dir = 4; - pixel_x = -15 - }, -/turf/simulated/floor/caution/corner/sw, -/area/station/security/main) "jVE" = ( /obj/machinery/networked/storage/tape_drive{ bank_id = "Artlab"; @@ -27932,7 +27817,7 @@ /area/station/garden/aviary) "kdK" = ( /obj/table/reinforced/auto, -/obj/submachine/mixer, +/obj/machinery/mixer, /turf/simulated/floor/specialroom/cafeteria, /area/station/crew_quarters/kitchen) "kea" = ( @@ -27949,18 +27834,6 @@ }, /turf/simulated/floor/plating, /area/station/maintenance/west) -"keU" = ( -/obj/machinery/conveyor_switch{ - id = "mining2qm" - }, -/obj/machinery/alarm{ - dir = 4; - pixel_x = -15 - }, -/turf/simulated/floor/yellow/side{ - dir = 8 - }, -/area/station/quartermaster/office) "kfS" = ( /obj/machinery/vending/cigarette, /turf/unsimulated/floor/orangeblack/side, @@ -28137,6 +28010,25 @@ icon_state = "fgreen3" }, /area/station/garden/aviary) +"kpX" = ( +/obj/machinery/door/airlock/pyro/external{ + dir = 4 + }, +/obj/mapping_helper/firedoor_spawn, +/obj/forcefield/energyshield/perma/doorlink{ + desc = "A door-linked force field that prevents gasses from passing through it."; + name = "Door-linked Atmospheric Forcefield"; + powerlevel = 1 + }, +/obj/mapping_helper/airlock/cycler{ + cycle_id = "arrivals"; + name = "Arrivals"; + enter_id = "main" + }, +/turf/simulated/floor/caution/misc{ + dir = 4 + }, +/area/station/crewquarters/cryotron) "kqt" = ( /obj/disposalpipe/segment/mail{ dir = 4 @@ -28345,6 +28237,19 @@ }, /turf/simulated/floor/black, /area/station/hallway/primary/central) +"kxe" = ( +/obj/machinery/camera{ + c_tag = "autotag"; + dir = 8; + name = "autoname - SS13"; + pixel_x = 10 + }, +/obj/reagent_dispensers/still, +/obj/machinery/alarm{ + pixel_y = 23 + }, +/turf/simulated/floor/specialroom/bar, +/area/station/crew_quarters/bar) "kxh" = ( /turf/simulated/floor/carpet/grime, /area/ghostdrone_factory) @@ -28754,33 +28659,6 @@ /obj/machinery/recharger, /turf/simulated/floor/escape, /area/station/security/hos) -"kMc" = ( -/obj/item/reagent_containers/food/snacks/ingredient/meat/mysterymeat, -/obj/item/reagent_containers/food/snacks/ingredient/meat/mysterymeat/grody, -/obj/item/reagent_containers/food/snacks/ingredient/meat/mysterymeat/grody, -/obj/item/reagent_containers/food/snacks/ingredient/meat/mysterymeat/grody, -/obj/item/reagent_containers/food/snacks/ingredient/meatpaste{ - desc = "Gross."; - name = "old kidney" - }, -/obj/item/organ/heart{ - desc = "A human heart, grody. How long has it been in that freezer?"; - name = "funky ol' heart" - }, -/obj/storage/crate/freezer{ - name = "Freezer - Spare Parts" - }, -/obj/item/reagent_containers/food/snacks/ingredient/meat/monkeymeat, -/obj/item/reagent_containers/food/snacks/ingredient/meat/monkeymeat, -/obj/item/reagent_containers/food/snacks/ingredient/meat/monkeymeat, -/obj/item/reagent_containers/food/snacks/ingredient/meat/mysterymeat, -/obj/machinery/light, -/obj/machinery/alarm{ - dir = 4; - pixel_x = -15 - }, -/turf/simulated/floor/sanitary/white, -/area/station/medical/morgue) "kMd" = ( /obj/mapping_helper/wingrille_spawn/auto/reinforced, /obj/cable{ @@ -28987,7 +28865,7 @@ /obj/cable{ icon_state = "1-8" }, -/obj/stool/bench/auto, +/obj/stool/bench/purple/auto, /turf/simulated/floor/purple, /area/station/hallway/secondary/central) "kVJ" = ( @@ -29095,6 +28973,19 @@ }, /turf/simulated/floor/airless/plating/catwalk, /area/space) +"kZZ" = ( +/obj/table/reinforced/auto, +/obj/item/clothing/under/rank/mechanic, +/obj/item/crowbar, +/obj/item/clothing/gloves/yellow/unsulated, +/obj/item/reagent_containers/food/drinks/fueltank, +/obj/item/clothing/shoes/magnetic, +/obj/machinery/alarm{ + dir = 4; + pixel_x = -15 + }, +/turf/simulated/floor/plating, +/area/station/hangar/qm) "lam" = ( /obj/machinery/door/poddoor/pyro/shutters{ density = 0; @@ -29180,6 +29071,11 @@ }, /obj/mapping_helper/access/engineering, /obj/mapping_helper/firedoor_spawn, +/obj/mapping_helper/airlock/cycler{ + cycle_id = "cargo"; + name = "Cargo"; + enter_id = "inner" + }, /turf/simulated/floor/orangeblack, /area/station/engine/substation/east) "lcY" = ( @@ -29598,6 +29494,21 @@ }, /turf/simulated/floor/plating, /area/station/science/lab) +"lru" = ( +/obj/machinery/door/airlock/pyro/external, +/obj/mapping_helper/firedoor_spawn, +/obj/forcefield/energyshield/perma/doorlink{ + desc = "A door-linked force field that prevents gasses from passing through it."; + name = "Door-linked Atmospheric Forcefield"; + powerlevel = 1 + }, +/obj/mapping_helper/airlock/cycler{ + cycle_id = "arrivals2"; + name = "Arrivals"; + enter_id = "outer" + }, +/turf/simulated/floor/plating, +/area/station/crewquarters/cryotron) "lrX" = ( /obj/mapping_helper/wingrille_spawn/auto/reinforced, /obj/machinery/door/poddoor/blast{ @@ -29774,28 +29685,11 @@ /turf/simulated/floor/caution/westeast, /area/station/maintenance/disposal) "lyC" = ( -/obj/rack, -/obj/item/circuitboard/teleporter, -/obj/item/circuitboard/robot_module_rewriter, -/obj/item/circuitboard/cloning, -/obj/item/circuitboard/barcode, -/obj/item/circuitboard/powermonitor, -/obj/item/circuitboard/operating, -/obj/item/circuitboard/qmsupply, /obj/cable, /obj/machinery/power/apc/autoname_south, +/obj/rack/organized/techstorage_med, /turf/simulated/floor/plating, /area/station/storage/tech) -"lyY" = ( -/obj/machinery/computer/barcode/qm/no_belthell{ - dir = 8 - }, -/obj/machinery/alarm{ - dir = 8; - pixel_x = 15 - }, -/turf/simulated/floor, -/area/station/quartermaster/storage) "lzl" = ( /obj/machinery/atmospherics/unary/vent{ dir = 8 @@ -29862,38 +29756,16 @@ }, /turf/simulated/floor/engine, /area/station/engine/core/nuclear) +"lCp" = ( +/obj/machinery/chem_heater/chemistry, +/turf/simulated/floor/purpleblack{ + dir = 10 + }, +/area/station/science/chemistry) "lDr" = ( /obj/machinery/centrifuge_nuclear, /turf/simulated/floor/black, /area/station/engine/inner) -"lDG" = ( -/obj/table/reinforced/auto, -/obj/item/clipboard, -/obj/item/paper_bin, -/obj/item/stamp, -/obj/item/pen, -/obj/cable{ - icon_state = "1-2" - }, -/obj/mapping_helper/firedoor_spawn, -/obj/machinery/door/poddoor/blast{ - density = 0; - dir = 1; - icon_state = "bdoormid0"; - id = "chemblast"; - layer = 5; - name = "Chemistry Blast Shield"; - opacity = 0; - tag = "icon-bdoormidc1" - }, -/obj/machinery/door/airlock/pyro/glass/windoor{ - dir = 8 - }, -/obj/mapping_helper/access/chemistry, -/turf/simulated/floor/purplewhite{ - dir = 10 - }, -/area/station/science/chemistry) "lEe" = ( /obj/machinery/conveyor/EW{ id = "ghostdrone" @@ -30739,6 +30611,10 @@ }, /turf/space, /area/space) +"miq" = ( +/obj/stool/chair/office/purple, +/turf/simulated/floor/black, +/area/station/science/chemistry) "miw" = ( /obj/machinery/door/window/westright{ dir = 1; @@ -30884,6 +30760,18 @@ dir = 4 }, /area/station/hallway/secondary/central) +"mqP" = ( +/obj/machinery/conveyor_switch{ + id = "mining2qm" + }, +/obj/machinery/alarm{ + dir = 4; + pixel_x = -15 + }, +/turf/simulated/floor/yellow/side{ + dir = 8 + }, +/area/station/quartermaster/office) "mre" = ( /obj/machinery/light/small, /obj/cable{ @@ -31011,24 +30899,21 @@ }, /turf/simulated/wall/auto/reinforced/supernorn, /area/station/engine/gas) +"mvV" = ( +/obj/pool/perspective{ + dir = 9; + tag = "icon-pool (NORTHWEST)" + }, +/obj/machinery/alarm{ + dir = 4; + pixel_x = -15 + }, +/turf/simulated/floor/blue/checker, +/area/station/crew_quarters/pool) "mws" = ( /obj/disposalpipe/segment, /turf/simulated/wall/auto/supernorn, /area/station/crew_quarters/kitchen) -"mwF" = ( -/obj/disposalpipe/segment/mail{ - dir = 4 - }, -/obj/stool/bench/blue/auto, -/obj/landmark/start/job/assistant, -/obj/machinery/alarm{ - dir = 8; - pixel_x = 15 - }, -/turf/simulated/floor/purpleblack{ - dir = 4 - }, -/area/station/hallway/secondary/central) "mxl" = ( /obj/disposalpipe/segment{ dir = 4 @@ -31489,6 +31374,15 @@ /obj/machinery/firealarm/north, /turf/simulated/floor/black, /area/station/hallway/primary/central) +"mNj" = ( +/obj/landmark/start/job/engineer, +/obj/machinery/alarm{ + pixel_y = 23 + }, +/turf/simulated/floor/black/side{ + dir = 1 + }, +/area/station/engine/inner) "mNS" = ( /obj/disposalpipe/segment, /obj/cable{ @@ -31511,6 +31405,19 @@ /obj/mapping_helper/access/heads, /turf/simulated/floor/black, /area/station/security/main) +"mOf" = ( +/obj/disposalpipe/segment/mail, +/obj/cable{ + icon_state = "1-2" + }, +/obj/machinery/alarm{ + dir = 8; + pixel_x = 15 + }, +/turf/simulated/floor/redblack{ + dir = 4 + }, +/area/station/hangar/sec) "mOq" = ( /obj/cable{ icon_state = "1-8" @@ -31642,6 +31549,18 @@ dir = 8 }, /area/station/engine/inner) +"mSB" = ( +/obj/decal/tile_edge/stripe/extra_big{ + dir = 1 + }, +/obj/machinery/alarm{ + dir = 4; + pixel_x = -15 + }, +/turf/simulated/floor/bluewhite{ + dir = 9 + }, +/area/station/medical/medbay/lobby) "mTq" = ( /obj/disposalpipe/segment, /obj/cable{ @@ -31924,6 +31843,11 @@ name = "Door-linked Atmospheric Forcefield"; powerlevel = 1 }, +/obj/mapping_helper/airlock/cycler{ + cycle_id = "escape"; + name = "Escape"; + enter_id = "main" + }, /turf/simulated/floor/caution/misc{ dir = 8 }, @@ -31947,6 +31871,30 @@ "ngt" = ( /turf/simulated/floor, /area/station/medical/robotics) +"nid" = ( +/obj/table/reinforced/auto, +/obj/cable{ + icon_state = "1-2" + }, +/obj/mapping_helper/firedoor_spawn, +/obj/machinery/door/poddoor/blast{ + density = 0; + dir = 1; + icon_state = "bdoormid0"; + id = "chemblast"; + layer = 5; + name = "Chemistry Blast Shield"; + opacity = 0; + tag = "icon-bdoormidc1" + }, +/obj/machinery/door/airlock/pyro/glass/windoor{ + dir = 8 + }, +/obj/mapping_helper/access/chemistry, +/turf/simulated/floor/purplewhite{ + dir = 10 + }, +/area/station/science/chemistry) "nix" = ( /mob/living/critter/small_animal/bird/owl, /turf/simulated/floor/grass/random/alt, @@ -32312,17 +32260,6 @@ /area/station/crew_quarters/quartersA{ name = "Crew Quarters M01" }) -"nwG" = ( -/obj/machinery/computer3/generic/med_data, -/obj/machinery/power/data_terminal, -/obj/cable{ - icon_state = "0-2" - }, -/obj/machinery/alarm{ - pixel_y = 23 - }, -/turf/simulated/floor/black, -/area/station/medical/robotics) "nwK" = ( /obj/cable{ icon_state = "4-8" @@ -32496,6 +32433,14 @@ icon_state = "fred2" }, /area/station/science/lobby) +"nGj" = ( +/obj/storage/closet/fire, +/obj/machinery/alarm{ + dir = 4; + pixel_x = -15 + }, +/turf/simulated/floor/yellow, +/area/station/engine/engineering) "nGC" = ( /obj/disposalpipe/junction{ dir = 4; @@ -32521,14 +32466,6 @@ }, /turf/simulated/floor, /area/station/hangar/main) -"nHt" = ( -/obj/machinery/vending/coffee, -/obj/machinery/alarm{ - dir = 8; - pixel_x = 15 - }, -/turf/simulated/floor/wood/two, -/area/station/medical/staff) "nHB" = ( /obj/machinery/computer/security{ dir = 4 @@ -32752,15 +32689,16 @@ dir = 1 }, /area/station/medical/medbay/surgery) -"nQz" = ( -/obj/machinery/clonepod, -/obj/machinery/alarm{ - pixel_y = 23 +"nQh" = ( +/obj/item/device/radio/intercom/science, +/obj/disposalpipe/segment/mail{ + dir = 4 }, -/turf/simulated/floor/white/checker2{ - dir = 5 +/obj/machinery/computer/chem_request_receiver, +/turf/simulated/floor/purpleblack{ + dir = 9 }, -/area/station/medical/medbay/cloner) +/area/station/science/chemistry) "nQF" = ( /obj/cryotron{ layer = 3.9 @@ -32798,6 +32736,10 @@ name = "Door-linked Atmospheric Forcefield"; powerlevel = 1 }, +/obj/mapping_helper/airlock/cycler{ + cycle_id = "secpod"; + name = "Security Podbay" + }, /turf/simulated/floor/plating, /area/station/hangar/sec) "nSN" = ( @@ -32891,18 +32833,6 @@ }, /turf/simulated/wall/auto/reinforced/supernorn, /area/station/maintenance/west) -"nVE" = ( -/obj/cable/orange{ - icon_state = "1-8" - }, -/obj/machinery/alarm{ - dir = 8; - pixel_x = 15 - }, -/turf/simulated/floor/yellow/side{ - dir = 5 - }, -/area/station/engine/substation/west) "nVI" = ( /obj/cable{ icon_state = "1-2" @@ -32931,6 +32861,21 @@ /obj/machinery/drainage, /turf/simulated/floor/sanitary/blue, /area/station/medical/head/private) +"nXx" = ( +/obj/machinery/light{ + dir = 1; + pixel_y = 21 + }, +/obj/machinery/phone/wall{ + pixel_y = 32 + }, +/obj/machinery/chem_master{ + dir = 1 + }, +/turf/simulated/floor/purpleblack{ + dir = 1 + }, +/area/station/science/chemistry) "nXC" = ( /obj/machinery/recharger/wall{ dir = 8; @@ -33500,6 +33445,34 @@ /area/station/crew_quarters/quartersA{ name = "Crew Quarters P06" }) +"ouq" = ( +/obj/disposalpipe/segment{ + dir = 4 + }, +/obj/stool/chair, +/obj/landmark/start/job/assistant, +/obj/machinery/alarm{ + pixel_y = 23 + }, +/turf/simulated/floor/black, +/area/station/hallway/primary/central) +"ovm" = ( +/obj/disposalpipe/segment{ + dir = 8; + icon_state = "pipe-c" + }, +/obj/machinery/light{ + dir = 4; + pixel_x = 10 + }, +/obj/window/reinforced/south, +/obj/submachine/chem_extractor{ + dir = 8 + }, +/turf/simulated/floor/purpleblack{ + dir = 6 + }, +/area/station/science/chemistry) "owe" = ( /obj/stool/chair/comfy/red{ dir = 8 @@ -33536,6 +33509,10 @@ name = "Door-linked Atmospheric Forcefield"; powerlevel = 1 }, +/obj/mapping_helper/airlock/cycler{ + cycle_id = "eastsubstation"; + name = "East Substation" + }, /turf/simulated/floor/plating, /area/station/engine/substation/east) "owP" = ( @@ -33964,6 +33941,15 @@ /obj/mapping_helper/firedoor_spawn, /turf/simulated/floor/plating, /area/station/medical/research) +"oNH" = ( +/obj/machinery/light, +/obj/machinery/vehicle/miniputt, +/obj/machinery/alarm{ + dir = 8; + pixel_x = 15 + }, +/turf/simulated/floor/engine, +/area/station/hangar/main) "oOb" = ( /obj/disposalpipe/segment/mail, /obj/mapping_helper/wingrille_spawn/auto, @@ -34467,6 +34453,11 @@ /obj/cable/blue{ icon_state = "1-2" }, +/obj/mapping_helper/airlock/cycler{ + cycle_id = "engine"; + name = "Engine Room"; + enter_id = "inner" + }, /turf/simulated/floor/engine, /area/station/engine/core/nuclear) "pox" = ( @@ -34933,6 +34924,20 @@ }, /turf/simulated/floor/black, /area/station/medical/robotics) +"pJW" = ( +/obj/disposalpipe/segment/mail{ + dir = 4 + }, +/obj/stool/bench/blue/auto, +/obj/landmark/start/job/assistant, +/obj/machinery/alarm{ + dir = 8; + pixel_x = 15 + }, +/turf/simulated/floor/purpleblack{ + dir = 4 + }, +/area/station/hallway/secondary/central) "pKq" = ( /obj/decal/tile_edge/stripe/extra_big{ dir = 4 @@ -35518,6 +35523,9 @@ /obj/cable{ icon_state = "2-8" }, +/obj/cable{ + icon_state = "1-4" + }, /turf/simulated/floor/plating, /area/station/maintenance/central) "qda" = ( @@ -35617,6 +35625,20 @@ dir = 9 }, /area/station/medical/medbay) +"qfa" = ( +/obj/cable/orange{ + icon_state = "2-8" + }, +/obj/disposalpipe/segment/mail{ + dir = 4 + }, +/obj/machinery/alarm{ + pixel_y = 23 + }, +/turf/simulated/floor/yellow/side{ + dir = 9 + }, +/area/station/engine/substation/east) "qfk" = ( /obj/machinery/power/apc/autoname_west, /obj/cable, @@ -35627,6 +35649,16 @@ /obj/machinery/light_switch/south, /turf/simulated/floor/specialroom/medbay, /area/station/medical/medbay/pharmacy) +"qfM" = ( +/obj/stool/chair/office/blue{ + dir = 1 + }, +/obj/machinery/alarm{ + dir = 4; + pixel_x = -15 + }, +/turf/simulated/floor/black, +/area/station/hallway/secondary/exit) "qfO" = ( /obj/cable{ icon_state = "4-8" @@ -35880,6 +35912,10 @@ }, /obj/mapping_helper/firedoor_spawn, /obj/mapping_helper/access/engineering, +/obj/mapping_helper/airlock/cycler{ + cycle_id = "ptl"; + name = "Power Transmission Laser Room" + }, /turf/simulated/floor/orangeblack, /area/station/engine/ptl) "qor" = ( @@ -35998,6 +36034,13 @@ "qum" = ( /turf/simulated/floor/orangeblack, /area/station/engine/substation/east) +"quy" = ( +/obj/machinery/alarm{ + dir = 4; + pixel_x = -15 + }, +/turf/simulated/floor/sanitary/white, +/area/station/medical/crematorium) "qvo" = ( /obj/disposalpipe/segment/mail, /obj/cable{ @@ -36302,6 +36345,16 @@ /obj/mapping_helper/wingrille_spawn/auto, /turf/simulated/floor/plating, /area/station/crew_quarters/arcade) +"qIq" = ( +/obj/machinery/computer/barcode/qm/no_belthell{ + dir = 8 + }, +/obj/machinery/alarm{ + dir = 8; + pixel_x = 15 + }, +/turf/simulated/floor, +/area/station/quartermaster/storage) "qIA" = ( /obj/cable{ icon_state = "1-2" @@ -36485,6 +36538,11 @@ name = "Door-linked Atmospheric Forcefield"; powerlevel = 1 }, +/obj/mapping_helper/airlock/cycler{ + cycle_id = "escape"; + name = "Escape"; + enter_id = "main" + }, /turf/simulated/floor/caution/misc{ dir = 4 }, @@ -36501,28 +36559,6 @@ dir = 8 }, /area/station/medical/medbay) -"qRT" = ( -/obj/machinery/light/emergency{ - dir = 4; - pixel_x = 10 - }, -/obj/item/device/radio/intercom/catering, -/obj/storage/cart/hotdog, -/obj/item/reagent_containers/food/snacks/hotdog, -/obj/item/reagent_containers/food/snacks/hotdog, -/obj/item/reagent_containers/food/snacks/hotdog, -/obj/item/reagent_containers/food/snacks/hotdog, -/obj/item/shaker/ketchup{ - pixel_x = 6 - }, -/obj/item/shaker/mustard{ - pixel_x = -6 - }, -/obj/machinery/alarm{ - pixel_y = 23 - }, -/turf/simulated/floor/specialroom/cafeteria, -/area/station/crew_quarters/kitchen) "qSm" = ( /obj/disposalpipe/segment/mail{ dir = 1; @@ -36557,6 +36593,25 @@ /obj/mapping_helper/wingrille_spawn/auto/reinforced, /turf/simulated/floor/plating, /area/station/engine/substation/west) +"qTl" = ( +/obj/machinery/door/airlock/pyro/external{ + dir = 4 + }, +/obj/mapping_helper/firedoor_spawn, +/obj/forcefield/energyshield/perma/doorlink{ + desc = "A door-linked force field that prevents gasses from passing through it."; + name = "Door-linked Atmospheric Forcefield"; + powerlevel = 1 + }, +/obj/mapping_helper/airlock/cycler{ + cycle_id = "escape2"; + name = "Escape"; + enter_id = "main" + }, +/turf/simulated/floor/caution/misc{ + dir = 8 + }, +/area/station/hallway/secondary/exit) "qTA" = ( /obj/stool/bed, /obj/landmark/start/job/assistant, @@ -36646,6 +36701,25 @@ }, /turf/simulated/floor/green, /area/station/hydroponics/bay) +"qXo" = ( +/obj/machinery/door/airlock/pyro/external{ + dir = 4 + }, +/obj/mapping_helper/firedoor_spawn, +/obj/forcefield/energyshield/perma/doorlink{ + desc = "A door-linked force field that prevents gasses from passing through it."; + name = "Door-linked Atmospheric Forcefield"; + powerlevel = 1 + }, +/obj/mapping_helper/airlock/cycler{ + cycle_id = "escape2"; + name = "Escape"; + enter_id = "main" + }, +/turf/simulated/floor/caution/misc{ + dir = 4 + }, +/area/station/hallway/secondary/exit) "qXE" = ( /obj/machinery/atmospherics/unary/portables_connector{ name = "Mixing Port" @@ -37276,6 +37350,10 @@ name = "Door-linked Atmospheric Forcefield"; powerlevel = 1 }, +/obj/mapping_helper/airlock/cycler{ + cycle_id = "westmaint"; + name = "West Maintenance" + }, /turf/simulated/floor/plating, /area/station/maintenance/west) "rrn" = ( @@ -37317,16 +37395,6 @@ icon_state = "engine_caution_east" }, /area/station/engine/core/nuclear) -"rva" = ( -/obj/machinery/alarm{ - dir = 8; - pixel_x = 15 - }, -/turf/simulated/floor/engine{ - allows_vehicles = 0; - icon_state = "engine_caution_east" - }, -/area/station/engine/core/nuclear) "rvc" = ( /obj/stool/chair{ dir = 4 @@ -37553,6 +37621,21 @@ /obj/mapping_helper/wingrille_spawn/auto/reinforced, /turf/simulated/floor/plating, /area/station/mining/staff_room) +"rFT" = ( +/obj/machinery/door/airlock/pyro/external, +/obj/mapping_helper/firedoor_spawn, +/obj/forcefield/energyshield/perma/doorlink{ + desc = "A door-linked force field that prevents gasses from passing through it."; + name = "Door-linked Atmospheric Forcefield"; + powerlevel = 1 + }, +/obj/mapping_helper/airlock/cycler{ + cycle_id = "escape2"; + name = "Escape"; + enter_id = "outer" + }, +/turf/simulated/floor/plating, +/area/station/hallway/secondary/exit) "rGO" = ( /obj/landmark/start/job/quartermaster, /obj/stool/chair/office/yellow{ @@ -38257,8 +38340,36 @@ name = "Door-linked Atmospheric Forcefield"; powerlevel = 1 }, +/obj/mapping_helper/airlock/cycler{ + cycle_id = "eastmaint"; + name = "East Maintenance" + }, /turf/simulated/floor/plating, /area/station/maintenance/east) +"siE" = ( +/obj/mapping_helper/wingrille_spawn/auto/reinforced, +/obj/cable, +/obj/cable{ + icon_state = "0-2" + }, +/obj/window_blinds/cog2/middle{ + dir = 4 + }, +/obj/machinery/door/poddoor/blast{ + density = 0; + dir = 1; + icon_state = "bdoormid0"; + id = "chemblast"; + layer = 5; + name = "Chemistry Blast Shield"; + opacity = 0; + tag = "icon-bdoormidc1" + }, +/obj/disposalpipe/segment/mail{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/station/science/chemistry) "siQ" = ( /obj/cable{ icon_state = "4-8" @@ -38337,6 +38448,17 @@ /obj/landmark/gps_waypoint, /turf/simulated/floor/wood, /area/station/crew_quarters/fitness) +"sko" = ( +/obj/rack, +/obj/item/clothing/suit/hazard/fire, +/obj/item/clothing/mask/gas/emergency, +/obj/item/clothing/head/helmet/firefighter, +/obj/item/tank/air, +/obj/item/extinguisher, +/obj/item/crowbar, +/obj/item/device/light/flashlight, +/turf/simulated/floor, +/area/station/engine/substation/east) "sky" = ( /obj/cable{ icon_state = "1-2" @@ -38369,6 +38491,20 @@ /obj/window_blinds/cog2/left, /turf/simulated/floor/plating, /area/station/medical/morgue) +"slX" = ( +/obj/rack, +/obj/item/clothing/suit/hazard/fire, +/obj/item/clothing/mask/gas/emergency, +/obj/item/clothing/head/helmet/firefighter, +/obj/item/tank/air, +/obj/item/extinguisher, +/obj/item/crowbar, +/obj/item/device/light/flashlight, +/obj/cable{ + icon_state = "1-2" + }, +/turf/simulated/floor, +/area/station/engine/substation/west) "smd" = ( /turf/unsimulated/floor/black, /area/station/crewquarters/cryotron) @@ -38501,6 +38637,11 @@ name = "Door-linked Atmospheric Forcefield"; powerlevel = 1 }, +/obj/mapping_helper/airlock/cycler{ + cycle_id = "engine"; + name = "Engine Room"; + enter_id = "outer" + }, /turf/simulated/floor/engine, /area/station/engine/core/nuclear) "srC" = ( @@ -38522,6 +38663,11 @@ }, /obj/mapping_helper/access/cargo, /obj/mapping_helper/firedoor_spawn, +/obj/mapping_helper/airlock/cycler{ + cycle_id = "cargo"; + name = "Cargo"; + enter_id = "inner" + }, /turf/simulated/floor/plating, /area/station/quartermaster/office) "ssD" = ( @@ -38833,6 +38979,16 @@ /obj/item/device/gps, /turf/simulated/floor/orangeblack/side/white, /area/station/science/teleporter) +"sKD" = ( +/obj/storage/closet/office, +/obj/machinery/alarm{ + dir = 4; + pixel_x = -15 + }, +/turf/simulated/floor/redblack{ + dir = 9 + }, +/area/station/security/detectives_office) "sLd" = ( /obj/machinery/light/small{ dir = 8; @@ -38883,6 +39039,14 @@ }, /turf/simulated/floor/damaged2, /area/station/quartermaster/storage) +"sLR" = ( +/obj/reagent_dispensers/fueltank, +/obj/machinery/alarm{ + dir = 4; + pixel_x = -15 + }, +/turf/simulated/floor, +/area/station/science/lab) "sMg" = ( /obj/cable{ icon_state = "1-2" @@ -39234,20 +39398,6 @@ }, /turf/simulated/floor/engine, /area/station/engine/core/nuclear) -"sZE" = ( -/obj/cable/orange{ - icon_state = "2-8" - }, -/obj/disposalpipe/segment/mail{ - dir = 4 - }, -/obj/machinery/alarm{ - pixel_y = 23 - }, -/turf/simulated/floor/yellow/side{ - dir = 9 - }, -/area/station/engine/substation/east) "sZH" = ( /obj/machinery/firealarm/west, /turf/simulated/floor/grass/random/alt, @@ -39573,30 +39723,6 @@ /obj/machinery/chem_dispenser/chemical, /turf/simulated/floor/specialroom/medbay, /area/station/medical/medbay/pharmacy) -"tnp" = ( -/obj/mapping_helper/wingrille_spawn/auto/reinforced, -/obj/disposalpipe/segment/mail{ - dir = 4 - }, -/obj/cable, -/obj/cable{ - icon_state = "0-2" - }, -/obj/window_blinds/cog2/right{ - dir = 4 - }, -/obj/machinery/door/poddoor/blast{ - density = 0; - dir = 1; - icon_state = "bdoormid0"; - id = "chemblast"; - layer = 5; - name = "Chemistry Blast Shield"; - opacity = 0; - tag = "icon-bdoormidc1" - }, -/turf/simulated/floor/plating, -/area/station/science/chemistry) "tnw" = ( /obj/machinery/light/small{ dir = 8; @@ -39894,6 +40020,11 @@ name = "Door-linked Atmospheric Forcefield"; powerlevel = 1 }, +/obj/mapping_helper/airlock/cycler{ + cycle_id = "cargo"; + name = "Cargo"; + enter_id = "outer" + }, /turf/simulated/floor/plating, /area/station/quartermaster/office) "tAE" = ( @@ -39949,6 +40080,17 @@ /obj/decal/tile_edge/stripe/extra_big, /turf/simulated/floor/blue/checker, /area/station/crew_quarters/pool) +"tCy" = ( +/obj/machinery/computer3/generic/med_data, +/obj/machinery/power/data_terminal, +/obj/cable{ + icon_state = "0-2" + }, +/obj/machinery/alarm{ + pixel_y = 23 + }, +/turf/simulated/floor/black, +/area/station/medical/robotics) "tDh" = ( /obj/fluid_spawner{ amount = 2100 @@ -40346,6 +40488,28 @@ icon_state = "fblue2" }, /area/station/bridge) +"tQl" = ( +/obj/disposalpipe/segment, +/obj/machinery/camera{ + c_tag = "autotag"; + dir = 8; + name = "autoname - SS13"; + pixel_x = 10 + }, +/obj/blind_switch/area/east{ + dir = 4 + }, +/obj/machinery/chem_heater/chemistry, +/obj/machinery/door_control{ + id = "chemblast"; + name = "Chemistry Blast Shield Control"; + pixel_x = 24; + pixel_y = -8 + }, +/turf/simulated/floor/purpleblack{ + dir = 4 + }, +/area/station/science/chemistry) "tQO" = ( /obj/cable{ icon_state = "0-8" @@ -40435,6 +40599,17 @@ }, /turf/simulated/floor/black, /area/station/engine/inner) +"tWb" = ( +/obj/table, +/obj/item/storage/toolbox/emergency, +/obj/machinery/alarm{ + pixel_y = 23 + }, +/turf/simulated/floor/carpet{ + dir = 1; + icon_state = "fblue2" + }, +/area/station/hallway/secondary/exit) "tWN" = ( /obj/table/reinforced/auto, /obj/drink_rack/mug{ @@ -40491,6 +40666,22 @@ dir = 6 }, /area/station/science/artifact) +"tYN" = ( +/obj/table/reinforced/auto, +/obj/machinery/networked/printer{ + print_id = "Artlab" + }, +/obj/item/pen, +/obj/machinery/power/data_terminal, +/obj/cable{ + icon_state = "0-8" + }, +/obj/machinery/alarm{ + dir = 8; + pixel_x = 15 + }, +/turf/simulated/floor, +/area/station/science/artifact) "tZa" = ( /obj/machinery/conveyor/NS{ id = "cargo_out" @@ -40625,6 +40816,10 @@ }, /obj/mapping_helper/firedoor_spawn, /obj/mapping_helper/access/research, +/obj/mapping_helper/airlock/cycler{ + cycle_id = "eastsubstation"; + name = "East Substation" + }, /turf/simulated/floor/plating, /area/station/hangar/science) "uea" = ( @@ -40736,6 +40931,18 @@ /obj/machinery/power/data_terminal, /turf/simulated/floor, /area/station/science/lab) +"uiq" = ( +/obj/cable{ + icon_state = "4-8" + }, +/obj/machinery/portable_atmospherics/canister/sleeping_agent, +/obj/machinery/alarm{ + pixel_y = 23 + }, +/turf/simulated/floor/redblack{ + dir = 1 + }, +/area/station/ai_monitored/armory) "uja" = ( /turf/simulated/wall/auto/reinforced/supernorn, /area/station/engine/engineering/ce/private) @@ -40957,6 +41164,10 @@ }, /obj/mapping_helper/access/engineering, /obj/mapping_helper/firedoor_spawn, +/obj/mapping_helper/airlock/cycler{ + cycle_id = "westsubstation"; + name = "West Substation" + }, /turf/simulated/floor/plating, /area/station/engine/substation/west) "urZ" = ( @@ -41506,6 +41717,15 @@ /area/station/crew_quarters/quartersA{ name = "Crew Quarters P06" }) +"uJO" = ( +/obj/disposalpipe/segment/mail{ + dir = 4 + }, +/obj/stool/chair/office/purple{ + dir = 1 + }, +/turf/simulated/floor/black, +/area/station/science/chemistry) "uKc" = ( /obj/cable{ icon_state = "0-2" @@ -41710,15 +41930,17 @@ /obj/machinery/vending/cola/blue, /turf/unsimulated/floor/orangeblack/side, /area/station/crewquarters/cryotron) -"uRy" = ( -/obj/disposalpipe/segment, -/obj/decal/stripe_delivery, +"uQu" = ( +/obj/decal/tile_edge/line/green{ + dir = 6; + icon_state = "line2" + }, /obj/machinery/alarm{ - dir = 4; - pixel_x = -15 + dir = 1; + pixel_y = -15 }, -/turf/simulated/floor, -/area/station/hallway/primary/north) +/turf/simulated/floor/grass/random, +/area/station/hydroponics/bay) "uRF" = ( /obj/table/auto, /obj/item/cigpacket/propuffs{ @@ -41849,6 +42071,16 @@ }, /turf/simulated/floor/black, /area/station/ai_monitored/storage/eva) +"uUw" = ( +/obj/machinery/light_switch/north, +/obj/decal/poster/wallsign/poster_ptoe{ + pixel_y = 32 + }, +/obj/machinery/chemicompiler_stationary, +/turf/simulated/floor/purpleblack{ + dir = 5 + }, +/area/station/science/chemistry) "uUA" = ( /obj/landmark/start/job/botanist, /turf/simulated/floor/grass/random, @@ -42565,6 +42797,11 @@ name = "Door-linked Atmospheric Forcefield"; powerlevel = 1 }, +/obj/mapping_helper/airlock/cycler{ + cycle_id = "arrivals2"; + name = "Arrivals"; + enter_id = "main" + }, /turf/simulated/floor/caution/misc{ dir = 4 }, @@ -42618,17 +42855,6 @@ icon_state = "fblue2" }, /area/station/medical/head/private) -"vJl" = ( -/obj/machinery/power/data_terminal, -/obj/cable{ - dir = null - }, -/obj/machinery/alarm{ - dir = 4; - pixel_x = -15 - }, -/turf/simulated/floor/circuit, -/area/station/turret_protected/ai) "vJE" = ( /obj/disposalpipe/switch_junction{ dir = 1; @@ -42681,22 +42907,6 @@ }, /turf/simulated/floor/orangeblack, /area/station/quartermaster/office) -"vMz" = ( -/obj/table/reinforced/auto, -/obj/machinery/networked/printer{ - print_id = "Artlab" - }, -/obj/item/pen, -/obj/machinery/power/data_terminal, -/obj/cable{ - icon_state = "0-8" - }, -/obj/machinery/alarm{ - dir = 8; - pixel_x = 15 - }, -/turf/simulated/floor, -/area/station/science/artifact) "vMK" = ( /obj/machinery/disposal/mail/small{ dir = 8 @@ -42826,6 +43036,17 @@ /mob/living/carbon/human/npc/monkey/albert, /turf/simulated/floor/white, /area/station/science/teleporter) +"vSO" = ( +/obj/disposalpipe/segment, +/obj/cable{ + icon_state = "1-2" + }, +/obj/machinery/alarm{ + dir = 4; + pixel_x = -15 + }, +/turf/simulated/floor/black, +/area/station/bridge) "vSX" = ( /obj/table/wood/auto, /obj/item/clipboard, @@ -42871,6 +43092,18 @@ }, /turf/simulated/floor/grass/random, /area/station/hydroponics/bay) +"vTP" = ( +/obj/disposalpipe/segment/mail, +/obj/table/auto, +/obj/item/decoration/flower_vase, +/obj/machinery/alarm{ + dir = 8; + pixel_x = 15 + }, +/turf/simulated/floor/redblack{ + dir = 4 + }, +/area/station/hallway/secondary/central) "vVC" = ( /obj/disposalpipe/segment/mail{ dir = 4 @@ -42909,18 +43142,6 @@ dir = 6 }, /area/station/medical/medbay/surgery) -"vWg" = ( -/obj/decal/tile_edge/stripe/extra_big{ - dir = 1 - }, -/obj/machinery/alarm{ - dir = 4; - pixel_x = -15 - }, -/turf/simulated/floor/bluewhite{ - dir = 9 - }, -/area/station/medical/medbay/lobby) "vWi" = ( /obj/item/storage/firstaid/oxygen{ pixel_y = -4 @@ -43198,6 +43419,12 @@ /obj/decal/cleanable/dirt, /turf/simulated/floor/plating, /area/station/maintenance/northwest) +"whq" = ( +/obj/machinery/chem_master{ + dir = 1 + }, +/turf/simulated/floor/purpleblack, +/area/station/science/chemistry) "wie" = ( /obj/cable{ icon_state = "4-8" @@ -43210,19 +43437,6 @@ }, /turf/simulated/floor/black, /area/station/hallway/secondary/central) -"wjO" = ( -/obj/machinery/camera{ - c_tag = "autotag"; - dir = 8; - name = "autoname - SS13"; - pixel_x = 10; - tag = "" - }, -/obj/rack, -/obj/item/clothing/suit/rad, -/obj/item/clothing/head/rad_hood, -/turf/simulated/floor/plating, -/area/station/engine/gas) "wkM" = ( /obj/cable/orange{ icon_state = "2-4" @@ -43257,6 +43471,11 @@ name = "Door-linked Atmospheric Forcefield"; powerlevel = 1 }, +/obj/mapping_helper/airlock/cycler{ + cycle_id = "arrivals"; + name = "Arrivals"; + enter_id = "outer" + }, /turf/simulated/floor/plating, /area/station/crewquarters/cryotron) "wmt" = ( @@ -43480,6 +43699,16 @@ /obj/landmark/start/job/medical_director, /turf/simulated/floor/black, /area/station/bridge) +"wvG" = ( +/obj/table/reinforced/chemistry/auto/clericalsup, +/obj/machinery/glass_recycler/chemistry{ + pixel_y = 9; + pixel_x = -2 + }, +/turf/simulated/floor/purpleblack{ + dir = 8 + }, +/area/station/science/chemistry) "wwE" = ( /obj/shrub, /obj/machinery/camera{ @@ -43648,6 +43877,14 @@ }, /turf/simulated/floor/wood/two, /area/station/medical/medbay/lobby) +"wFS" = ( +/obj/machinery/vending/coffee, +/obj/machinery/alarm{ + dir = 8; + pixel_x = 15 + }, +/turf/simulated/floor/wood/two, +/area/station/medical/staff) "wFW" = ( /obj/cable{ icon_state = "0-8" @@ -43939,6 +44176,19 @@ }, /turf/simulated/floor/black, /area/station/medical/robotics) +"wON" = ( +/obj/machinery/camera{ + c_tag = "autotag"; + dir = 8; + name = "autoname - SS13"; + pixel_x = 10; + tag = "" + }, +/obj/rack, +/obj/item/clothing/suit/hazard/rad, +/obj/item/clothing/head/rad_hood, +/turf/simulated/floor/plating, +/area/station/engine/gas) "wRw" = ( /obj/disposalpipe/segment{ dir = 4 @@ -44020,6 +44270,10 @@ /obj/machinery/door/airlock/pyro/external, /obj/mapping_helper/firedoor_spawn, /obj/mapping_helper/access/engineering, +/obj/mapping_helper/airlock/cycler{ + cycle_id = "ptl"; + name = "Power Transmission Laser Room" + }, /turf/simulated/floor/orangeblack, /area/station/engine/ptl) "wVp" = ( @@ -44203,6 +44457,14 @@ /obj/machinery/portable_reclaimer, /turf/simulated/floor/plating, /area/station/maintenance/east) +"xcE" = ( +/obj/machinery/firealarm/north, +/obj/machinery/chem_dispenser/chemical, +/obj/item/reagent_containers/glass/beaker/large, +/turf/simulated/floor/purpleblack{ + dir = 1 + }, +/area/station/science/chemistry) "xcO" = ( /obj/machinery/power/terminal{ dir = 8 @@ -44418,20 +44680,6 @@ /obj/mapping_helper/wingrille_spawn/auto, /turf/simulated/floor/plating, /area/station/crew_quarters/bar) -"xnG" = ( -/obj/rack, -/obj/item/clothing/suit/fire, -/obj/item/clothing/mask/gas/emergency, -/obj/item/clothing/head/helmet/firefighter, -/obj/item/tank/air, -/obj/item/extinguisher, -/obj/item/crowbar, -/obj/item/device/light/flashlight, -/obj/cable{ - icon_state = "1-2" - }, -/turf/simulated/floor, -/area/station/engine/substation/west) "xnY" = ( /obj/cable{ icon_state = "4-8" @@ -45104,14 +45352,6 @@ /obj/mapping_helper/wingrille_spawn/auto/reinforced, /turf/simulated/floor/plating, /area/station/hangar/main) -"xNn" = ( -/obj/storage/closet/fire, -/obj/machinery/alarm{ - dir = 4; - pixel_x = -15 - }, -/turf/simulated/floor/yellow, -/area/station/engine/engineering) "xNT" = ( /obj/table/auto, /obj/disposalpipe/segment{ @@ -45142,6 +45382,11 @@ }, /obj/mapping_helper/firedoor_spawn, /obj/mapping_helper/access/engineering, +/obj/mapping_helper/airlock/cycler{ + cycle_id = "engine"; + name = "Engine Room"; + enter_id = "inner" + }, /turf/simulated/floor/engine, /area/station/engine/core/nuclear) "xOX" = ( @@ -45408,29 +45653,6 @@ }, /turf/simulated/floor/black, /area/station/crew_quarters/kitchen) -"ybG" = ( -/obj/machinery/light{ - dir = 4; - pixel_x = 10 - }, -/obj/cable{ - icon_state = "0-8" - }, -/obj/cable{ - icon_state = "0-8" - }, -/obj/cable{ - icon_state = "0-4" - }, -/obj/disposaloutlet{ - name = "brig delivery chute" - }, -/obj/disposalpipe/trunk/brig, -/obj/machinery/alarm{ - pixel_y = 23 - }, -/turf/simulated/floor/grime, -/area/station/security/brig) "ycj" = ( /obj/cable/orange{ icon_state = "4-8" @@ -66687,7 +66909,7 @@ slN uaD cUr bsL -kMc +gjs brX udJ sYc @@ -68241,7 +68463,7 @@ oTM aRw bXA ezo -gws +ffI gsH mcU hVe @@ -68513,7 +68735,7 @@ aIk byG pLp wlE -xnG +slX oZJ imY eUx @@ -68997,7 +69219,7 @@ hnd yaj cSR bkJ -nQz +jaD uoF kXh sQD @@ -69245,7 +69467,7 @@ pTk aCR imz bkJ -nwG +tCy hkm txE gzk @@ -70044,7 +70266,7 @@ iRg jEQ vWi xaL -nHt +wFS aNy afe bIr @@ -70310,7 +70532,7 @@ xrK bIu ggd uOq -nVE +hJr nre qQw ssP @@ -70532,7 +70754,7 @@ cQg aXC lMF moV -vWg +mSB baa uzN baa @@ -70779,7 +71001,7 @@ awp axd axT axS -azi +cRS aAe aAX aBT @@ -71288,7 +71510,7 @@ asS atv auf auR -avF +fGX awr axf axS @@ -71514,7 +71736,7 @@ aaa aaa aaa aaV -nfy +qTl aaV aaV nfy @@ -71770,7 +71992,7 @@ aaa qVR wJX wJX -hnI +rFT aeL qPU qPU @@ -72028,7 +72250,7 @@ pEZ abt uEh aaV -qQQ +qXo aaV aaV qQQ @@ -72575,7 +72797,7 @@ auk auU avJ vpM -axi +quy axW uGs azl @@ -72853,7 +73075,7 @@ aPp aPw bdQ waq -aWz +vTP wdx bIn bsI @@ -73140,8 +73362,8 @@ rWe bzY hSZ jzX -bzX -wjO +dTW +wON dGC gGu jxr @@ -73323,7 +73545,7 @@ thY aix nyh hDG -ajS +mOf lNZ wpI qvo @@ -73374,7 +73596,7 @@ vfm tAi fVW kNM -jVC +cAD bhl taa dYj @@ -73402,7 +73624,7 @@ uVN uVN uVN jxr -hfL +mNj tJp dtW uAO @@ -73568,7 +73790,7 @@ ach anD uwQ abJ -aek +tWb aeQ aft afT @@ -74077,7 +74299,7 @@ ozL aaV aaV abu -abK +qfM aci wyg pJA @@ -74884,7 +75106,7 @@ nqa asy nTZ ilz -hVE +mvV kQo pcg dxC @@ -75692,7 +75914,7 @@ egp qYU fko aQR -ybG +dHR rcS bld tvE @@ -76218,7 +76440,7 @@ bso btj rbS hAI -xNn +nGj gLL qhR rEE @@ -76935,7 +77157,7 @@ aoW kvv kBA ajZ -jHT +ouq nqa asy uMI @@ -76972,7 +77194,7 @@ aXX uUV bas bbG -dLs +vSO mNS dfk wuf @@ -77173,7 +77395,7 @@ acO aes axm cbO -uRy +dDF vxy acO cbO @@ -78004,7 +78226,7 @@ tKE aQR tFW bgz -fYK +uiq glL glL glL @@ -78538,7 +78760,7 @@ fZO itr kZv rtM -rva +gTd kZv iEV ofs @@ -79258,7 +79480,7 @@ vYv tdg awF vTE -ayi +uQu aym xsX azw @@ -79292,7 +79514,7 @@ mPk kFN qPa sMg -vJl +jiC bmF bem boU @@ -80602,7 +80824,7 @@ qWe nns vYz teM -eQZ +bvZ say aGI ozL @@ -80797,7 +81019,7 @@ avV ngr oCj hIm -avZ +ftL tNY iAk ayn @@ -81111,7 +81333,7 @@ hLW hHO brK bGb -bGH +kZZ bHe bHD nUB @@ -81362,7 +81584,7 @@ kAx cvh rXf bBC -lyY +qIq mVN aoh pOy @@ -81577,7 +81799,7 @@ azH aAz dYJ aCz -aEr +kxe bjZ aFL ayW @@ -81798,7 +82020,7 @@ nNp iUu iUu hhh -cdG +gzn nkZ vjW dgM @@ -81855,7 +82077,7 @@ bcL aWW baI bbS -iqI +dpC bep kzc bgK @@ -81876,7 +82098,7 @@ bxf dCG kKA sen -keU +mqP rGO aOA pOy @@ -82855,7 +83077,7 @@ auH avq awf asN -axF +sKD ays ayX gxe @@ -83088,7 +83310,7 @@ rUk jCw xgr ajs -ajN +bHp dyu akO alb @@ -83147,10 +83369,10 @@ gqG bhH oAT bko -blz aUq aUq -fUL +blz +cwK kbI rKB bJI @@ -83342,7 +83564,7 @@ uoU uoU uoU uTK -gZL +eXS aMr uTK fAK @@ -83391,7 +83613,7 @@ pPr aSQ aTI bsG -mwF +pJW bIp kxQ hIA @@ -83404,9 +83626,9 @@ iIp shC ubX bbU -aRt +bbU gGY -bnJ +huq juT oEr upP @@ -83600,7 +83822,7 @@ aaa aaa lVS aip -wmc +lru wJX wJX wJX @@ -83610,7 +83832,7 @@ alK alH alH alH -anE +oNH fwW mre ale @@ -83632,7 +83854,7 @@ ayX ayX aum ayX -qRT +jyO jGv ayX uea @@ -83660,10 +83882,10 @@ iNX eqV uBf xkZ -lDG -tnp -fBh +nid +gaB fBh +siE kSe bgR iAU @@ -83906,7 +84128,7 @@ aST itf fRA aVR -aWZ +hIK nvq aZD baL @@ -83915,13 +84137,13 @@ bdq vOq bfG bgQ -gZw +nQh bjf bkq -blB -bmO -bnK -bpj +wvG +cdu +jrF +lCp bgR oUs aqu @@ -84106,7 +84328,7 @@ aaa aaa aaa uTK -vFS +kpX uTK aaa aaa @@ -84172,13 +84394,13 @@ eNx gyl fmT bgQ -bhK +iIr czP bjg -bMS -bmP -bjg -bpk +gip +bSl +miq +hNt bgR wXJ aqu @@ -84429,13 +84651,13 @@ bds beu iTE bgQ -jTu -czP -bks -blD -bmQ +xcE +uJO +bjg bjg -bpl +bjg +bjg +whq bgR kwx bsz @@ -84686,12 +84908,12 @@ gNn rvt ihB bgQ -bhM -bjh +nXx +czP bjg mEH bmR -bnL +jIC bpm bgR vAH @@ -84943,12 +85165,12 @@ bdu bew bfK bgR -bhN +uUw bji -bkt -blE -bmS -bnM +agA +tQl +hxt +ovm bxG bgR lAA @@ -85204,7 +85426,7 @@ und eTY jEw bgR -bgR +bOS bgR bgR bgR @@ -85216,7 +85438,7 @@ asm asm auM bzA -sZE +qfa gNw byZ mYs @@ -85982,7 +86204,7 @@ bgS wXJ bsB btN -buU +aBw aQA bxq bys @@ -86503,7 +86725,7 @@ byu bzA wXU nQU -bDd +sko bEi agl iZn @@ -86979,7 +87201,7 @@ aES asm nuT aHM -aIS +jgf omE aLo mgQ @@ -87259,7 +87481,7 @@ bgS lGX tAZ cBh -vMz +tYN fGK fIm bpu @@ -88536,7 +88758,7 @@ aXk aYy aYz baY -bch +sLR gmd huK bfS @@ -89043,7 +89265,7 @@ aET aET aQr qyE -aTk +gQR aUG aWe aXm diff --git a/maps/cogmap.dmm b/maps/cogmap.dmm index 65ca7185b2096..f9136809ec068 100644 --- a/maps/cogmap.dmm +++ b/maps/cogmap.dmm @@ -85,10 +85,6 @@ /obj/machinery/launcher_loader/west, /turf/simulated/floor/plating/airless, /area/space) -"aav" = ( -/obj/machinery/cargo_router/Router13, -/turf/simulated/floor/plating/airless, -/area/space) "aaw" = ( /obj/lattice{ dir = 6; @@ -205,10 +201,6 @@ name = "window" }, /area/shuttle/arrival/station) -"aaZ" = ( -/obj/lattice, -/turf/space, -/area/station/solar/north) "abi" = ( /obj/mapping_helper/wingrille_spawn/auto/reinforced, /turf/simulated/floor/plating, @@ -2043,6 +2035,15 @@ /obj/machinery/power/apc/autoname_north, /turf/simulated/floor/plating, /area/station/maintenance/northwest) +"ahM" = ( +/obj/disposalpipe/segment{ + dir = 2; + icon_state = "pipe-c" + }, +/turf/simulated/floor/yellow/side{ + dir = 1 + }, +/area/station/hallway/primary/east) "ahN" = ( /obj/machinery/atmospherics/pipe/simple{ dir = 4 @@ -2224,7 +2225,7 @@ pixel_x = -8; pixel_y = 5 }, -/obj/item/clothing/suit/fire, +/obj/item/clothing/suit/hazard/fire, /obj/item/tank/air, /obj/item/extinguisher{ pixel_x = 9 @@ -3030,28 +3031,9 @@ dir = 5 }, /area/station/security/checkpoint/arrivals) -"alf" = ( -/obj/table/auto, -/obj/disposalpipe/segment/food, -/obj/machinery/light{ - dir = 8; - tag = "" - }, -/obj/item/plate{ - pixel_y = 4 - }, -/obj/item/reagent_containers/food/snacks/breadloaf{ - pixel_y = 8 - }, -/turf/simulated/floor/specialroom/cafeteria, -/area/station/crew_quarters/kitchen) "alg" = ( /turf/simulated/floor/specialroom/cafeteria, /area/station/crew_quarters/kitchen) -"ali" = ( -/obj/machinery/vending/monkey/kitchen, -/turf/simulated/floor/specialroom/cafeteria, -/area/station/crew_quarters/kitchen) "alk" = ( /obj/shrub{ dir = 1 @@ -3265,10 +3247,6 @@ /obj/disposalpipe/segment/food, /turf/simulated/floor/specialroom/cafeteria, /area/station/crew_quarters/kitchen) -"amh" = ( -/obj/machinery/vending/kitchen, -/turf/simulated/floor/specialroom/cafeteria, -/area/station/crew_quarters/kitchen) "ami" = ( /obj/machinery/door/poddoor/pyro/shutters{ dir = 4; @@ -3499,58 +3477,6 @@ /obj/disposalpipe/segment/food, /turf/simulated/floor/specialroom/cafeteria, /area/station/crew_quarters/kitchen) -"ana" = ( -/obj/item/plate{ - pixel_x = -5; - pixel_y = 3 - }, -/obj/item/plate{ - pixel_x = -5; - pixel_y = 7 - }, -/obj/item/plate{ - pixel_x = -5; - pixel_y = 11 - }, -/obj/item/plate{ - pixel_x = 6; - pixel_y = 2 - }, -/obj/item/plate{ - pixel_x = 6; - pixel_y = 6 - }, -/obj/item/plate{ - pixel_x = 6; - pixel_y = 10 - }, -/obj/item/reagent_containers/food/drinks/bowl{ - pixel_x = 9; - pixel_y = 16 - }, -/obj/item/reagent_containers/food/drinks/bowl{ - pixel_y = 14 - }, -/obj/item/reagent_containers/food/snacks/yoghurt{ - pixel_x = 10; - pixel_y = 11 - }, -/obj/table/auto, -/turf/simulated/floor/specialroom/cafeteria, -/area/station/crew_quarters/kitchen) -"anb" = ( -/obj/stool, -/turf/simulated/floor/specialroom/cafeteria, -/area/station/crew_quarters/kitchen) -"anc" = ( -/obj/machinery/power/data_terminal, -/obj/cable{ - icon_state = "0-2" - }, -/obj/table/auto, -/obj/machinery/computer3/generic/personal, -/turf/simulated/floor/specialroom/cafeteria, -/area/station/crew_quarters/kitchen) "and" = ( /obj/cable{ icon_state = "1-2" @@ -3572,23 +3498,6 @@ /obj/submachine/chem_extractor, /turf/simulated/floor/black, /area/station/crew_quarters/catering) -"anj" = ( -/obj/table/auto, -/obj/item/storage/toolbox/emergency{ - pixel_y = 10 - }, -/obj/item/storage/box/beakerbox{ - pixel_x = -6 - }, -/obj/item/storage/box/glassbox, -/obj/item/storage/box/syringes{ - pixel_x = 3 - }, -/obj/item/storage/box/donkpocket_kit{ - pixel_x = 8 - }, -/turf/simulated/floor/black, -/area/station/crew_quarters/catering) "ank" = ( /obj/cable{ icon_state = "4-8" @@ -3904,66 +3813,6 @@ }, /turf/simulated/floor, /area/station/crew_quarters/kitchen) -"aot" = ( -/obj/machinery/disposal/mail{ - mail_tag = "kitchen"; - name = "mail chute-'Kitchen'" - }, -/obj/disposalpipe/trunk/mail{ - dir = 4 - }, -/obj/cable{ - icon_state = "1-4" - }, -/turf/simulated/floor/specialroom/cafeteria, -/area/station/crew_quarters/kitchen) -"aou" = ( -/obj/cable{ - icon_state = "4-8" - }, -/obj/disposalpipe/segment/mail{ - dir = 4 - }, -/obj/mapping_helper/wingrille_spawn/auto, -/turf/simulated/floor/plating, -/area/station/crew_quarters/kitchen) -"aov" = ( -/obj/cable{ - icon_state = "2-8" - }, -/obj/cable{ - icon_state = "1-2" - }, -/obj/disposalpipe/segment/mail{ - dir = 2; - icon_state = "pipe-c" - }, -/obj/machinery/light{ - dir = 8; - tag = "" - }, -/turf/simulated/floor/black, -/area/station/crew_quarters/catering) -"aow" = ( -/obj/disposalpipe/segment/produce{ - dir = 1; - icon_state = "pipe-c" - }, -/turf/simulated/floor/black, -/area/station/crew_quarters/catering) -"aox" = ( -/obj/disposalpipe/segment/produce{ - dir = 4 - }, -/turf/simulated/floor/black, -/area/station/crew_quarters/catering) -"aoy" = ( -/obj/disposalpipe/segment/produce{ - dir = 4 - }, -/obj/mapping_helper/wingrille_spawn/auto, -/turf/simulated/floor/plating, -/area/station/crew_quarters/catering) "aoA" = ( /obj/cable{ icon_state = "4-8" @@ -4233,37 +4082,12 @@ }, /turf/simulated/floor, /area/station/crew_quarters/kitchen) -"apF" = ( -/obj/machinery/camera{ - c_tag = "autotag"; - dir = 1; - name = "autoname - SS13"; - tag = "" - }, -/obj/machinery/light, -/obj/machinery/light_switch{ - name = "S light switch"; - pixel_y = -24 - }, -/turf/simulated/floor/specialroom/cafeteria, -/area/station/crew_quarters/kitchen) -"apG" = ( -/obj/storage/secure/closet/fridge/kitchen, -/turf/simulated/floor/specialroom/cafeteria, -/area/station/crew_quarters/kitchen) -"apI" = ( -/obj/disposalpipe/segment/mail{ - dir = 2; - icon_state = "pipe-c" - }, -/turf/simulated/floor/black, -/area/station/crew_quarters/catering) "apK" = ( /turf/simulated/floor/black, /area/station/crew_quarters/catering) "apN" = ( /obj/rack, -/obj/item/clothing/suit/fire, +/obj/item/clothing/suit/hazard/fire, /obj/item/tank/air, /obj/item/extinguisher{ pixel_x = 9 @@ -4518,14 +4342,6 @@ /obj/mapping_helper/access/maint, /turf/simulated/floor/plating, /area/station/maintenance/northwest) -"aqT" = ( -/obj/machinery/door_control{ - id = "kitchen"; - name = "Kitchen Shutter Control"; - pixel_x = -24 - }, -/turf/simulated/floor/specialroom/cafeteria, -/area/station/crew_quarters/kitchen) "aqW" = ( /obj/machinery/atmospherics/pipe/simple{ dir = 6; @@ -4551,11 +4367,6 @@ "ara" = ( /obj/mapping_helper/wingrille_spawn/auto, /turf/simulated/floor/plating, -/area/station/storage/auxillary{ - name = "Tool Storage" - }) -"arb" = ( -/turf/simulated/wall/auto/reinforced/supernorn, /area/station/storage/auxillary{ name = "Tool Storage" }) @@ -4565,16 +4376,6 @@ }, /turf/simulated/floor/grime, /area/station/hallway/primary/east) -"are" = ( -/obj/cable{ - icon_state = "1-2" - }, -/obj/disposalpipe/segment/produce{ - dir = 2; - icon_state = "pipe-c" - }, -/turf/simulated/floor/grime, -/area/station/hallway/primary/east) "arf" = ( /obj/stool/chair/comfy{ dir = 1 @@ -4619,26 +4420,6 @@ "arq" = ( /turf/simulated/floor/grime, /area/station/hallway/primary/east) -"arr" = ( -/obj/machinery/light_switch{ - name = "S light switch"; - pixel_y = -24 - }, -/turf/simulated/floor/grime, -/area/station/hallway/primary/east) -"ars" = ( -/obj/machinery/light, -/turf/simulated/floor/grime, -/area/station/hallway/primary/east) -"art" = ( -/obj/cable{ - icon_state = "1-2" - }, -/obj/disposalpipe/segment/produce, -/turf/simulated/floor/yellow/corner{ - dir = 8 - }, -/area/station/hallway/primary/east) "aru" = ( /obj/lattice{ dir = 4; @@ -4820,25 +4601,6 @@ icon_state = "fred2" }, /area/station/crew_quarters/cafeteria) -"ash" = ( -/obj/table/wood/auto, -/obj/item/plate{ - pixel_x = 1; - pixel_y = 7 - }, -/obj/item/reagent_containers/food/drinks/drinkingglass/wine{ - pixel_x = 1; - pixel_y = 11 - }, -/obj/item/matchbook{ - pixel_x = 3; - pixel_y = -3 - }, -/turf/simulated/floor/carpet{ - dir = 1; - icon_state = "fred2" - }, -/area/station/crew_quarters/cafeteria) "asi" = ( /obj/stool/chair/dining/wood{ dir = 8 @@ -4869,38 +4631,6 @@ }, /turf/simulated/floor/specialroom/cafeteria, /area/station/crew_quarters/kitchen) -"asp" = ( -/obj/storage/secure/closet/civilian/kitchen, -/obj/machinery/light, -/turf/simulated/floor/specialroom/cafeteria, -/area/station/crew_quarters/kitchen) -"asq" = ( -/obj/machinery/disposal, -/obj/disposalpipe/trunk{ - dir = 4 - }, -/turf/simulated/floor/specialroom/cafeteria, -/area/station/crew_quarters/kitchen) -"asr" = ( -/obj/disposalpipe/segment{ - dir = 4 - }, -/turf/simulated/wall/auto/supernorn, -/area/station/crew_quarters/kitchen) -"ass" = ( -/obj/disposalpipe/segment{ - dir = 2; - icon_state = "pipe-c" - }, -/obj/cable{ - icon_state = "1-2" - }, -/turf/simulated/floor/black, -/area/station/crew_quarters/catering) -"ast" = ( -/obj/disposalpipe/segment/mail, -/turf/simulated/floor/black, -/area/station/crew_quarters/catering) "asu" = ( /obj/machinery/atmospherics/binary/volume_pump/active{ dir = 1; @@ -5292,45 +5022,6 @@ icon_state = "fred2" }, /area/station/crew_quarters/cafeteria) -"aty" = ( -/obj/table/wood/auto, -/obj/item/plate{ - pixel_x = 1; - pixel_y = 7 - }, -/obj/item/reagent_containers/food/snacks/salad{ - pixel_y = 8 - }, -/obj/item/device/light/candle/small{ - pixel_x = 9; - pixel_y = -2 - }, -/obj/item/kitchen/utensil/fork{ - dir = 4; - pixel_x = 3; - pixel_y = 11 - }, -/turf/simulated/floor/carpet, -/area/station/crew_quarters/cafeteria) -"atz" = ( -/obj/table/wood/auto, -/obj/item/plate{ - pixel_y = 7 - }, -/obj/item/device/light/candle/small{ - pixel_x = -9; - pixel_y = -2 - }, -/obj/item/shaker/mustard{ - pixel_x = 3; - pixel_y = 5 - }, -/obj/item/shaker/ketchup{ - pixel_x = 8; - pixel_y = 3 - }, -/turf/simulated/floor/carpet, -/area/station/crew_quarters/cafeteria) "atA" = ( /obj/stool/chair/dining/wood{ dir = 8 @@ -5346,17 +5037,6 @@ "atE" = ( /turf/simulated/wall/auto/reinforced/supernorn, /area/station/crew_quarters/baroffice) -"atF" = ( -/obj/disposalpipe/segment, -/obj/cable{ - icon_state = "1-2" - }, -/obj/machinery/light{ - dir = 8; - tag = "" - }, -/turf/simulated/floor/black, -/area/station/crew_quarters/catering) "atH" = ( /obj/machinery/atmospherics/pipe/simple/heat_exchanging{ dir = 5 @@ -5526,16 +5206,6 @@ }, /turf/simulated/floor, /area/station/hangar/sec) -"auf" = ( -/obj/stove, -/obj/item/soup_pot, -/obj/item/ladle, -/obj/noticeboard/persistent{ - name = "Kitchen persistent notice board"; - persistent_id = "kitchen" - }, -/turf/simulated/floor/specialroom/cafeteria, -/area/station/crew_quarters/kitchen) "aum" = ( /obj/disposalpipe/segment/food{ dir = 4; @@ -5698,32 +5368,6 @@ /obj/machinery/power/apc/autoname_west, /turf/simulated/floor/specialroom/bar, /area/station/crew_quarters/cafeteria) -"auL" = ( -/obj/table/wood/auto, -/obj/item/plate{ - pixel_x = 1; - pixel_y = 7 - }, -/obj/item/shaker/salt{ - pixel_x = -1; - pixel_y = 9 - }, -/obj/item/shaker/pepper{ - pixel_x = 3; - pixel_y = 7 - }, -/turf/simulated/floor/carpet, -/area/station/crew_quarters/cafeteria) -"auM" = ( -/obj/table/wood/auto, -/obj/item/plate{ - pixel_y = 7 - }, -/obj/item/reagent_containers/food/drinks/tea{ - pixel_y = 15 - }, -/turf/simulated/floor/carpet, -/area/station/crew_quarters/cafeteria) "auO" = ( /obj/disposalpipe/segment/food, /obj/machinery/light{ @@ -5769,24 +5413,6 @@ }, /turf/simulated/wall/auto/reinforced/supernorn, /area/station/crew_quarters/catering) -"auW" = ( -/obj/table/auto, -/obj/machinery/phone{ - pixel_x = -7; - pixel_y = 6 - }, -/obj/item/satchel/hydro{ - pixel_x = 9; - pixel_y = 10 - }, -/obj/item/satchel/hydro{ - pixel_x = 7; - pixel_y = 2 - }, -/turf/simulated/floor/green/side{ - dir = 1 - }, -/area/station/hydroponics/bay) "auX" = ( /obj/machinery/light/small{ dir = 1 @@ -6146,20 +5772,6 @@ icon_state = "fred2" }, /area/station/crew_quarters/cafeteria) -"avY" = ( -/obj/table/wood/auto, -/obj/item/plate{ - pixel_x = 1; - pixel_y = 7 - }, -/obj/item/reagent_containers/food/drinks/drinkingglass/wine{ - pixel_x = 1; - pixel_y = 11 - }, -/turf/simulated/floor/carpet{ - icon_state = "fred2" - }, -/area/station/crew_quarters/cafeteria) "avZ" = ( /obj/stool/chair/dining/wood{ dir = 8 @@ -6188,34 +5800,6 @@ }, /turf/simulated/floor/carpet/grime, /area/station/crew_quarters/baroffice) -"awg" = ( -/obj/disposalpipe/segment, -/obj/cable{ - icon_state = "1-8" - }, -/obj/cable{ - icon_state = "1-2" - }, -/obj/cable{ - icon_state = "2-4" - }, -/turf/simulated/floor/black, -/area/station/crew_quarters/catering) -"awh" = ( -/obj/cable{ - icon_state = "2-8" - }, -/obj/machinery/navbeacon{ - codes_txt = "delivery;dir=1"; - location = "Catering" - }, -/obj/disposalpipe/segment/mail, -/obj/machinery/light_switch{ - name = "E light switch"; - pixel_x = 24 - }, -/turf/simulated/floor/black, -/area/station/crew_quarters/catering) "awi" = ( /obj/machinery/atmospherics/pipe/simple{ dir = 5; @@ -6340,13 +5924,13 @@ /obj/cable{ icon_state = "1-2" }, -/obj/disposalpipe/segment/mail{ - dir = 4 - }, /obj/disposalpipe/segment/produce, /obj/cable{ icon_state = "2-4" }, +/obj/disposalpipe/segment/mail{ + dir = 4 + }, /turf/simulated/floor/green/side{ dir = 1 }, @@ -6625,20 +6209,6 @@ dir = 8 }, /area/station/crew_quarters/locker) -"axw" = ( -/obj/disposalpipe/segment, -/obj/cable{ - icon_state = "1-2" - }, -/turf/simulated/floor/black, -/area/station/crew_quarters/catering) -"axx" = ( -/obj/cable{ - icon_state = "1-4" - }, -/obj/disposalpipe/segment/mail, -/turf/simulated/floor/black, -/area/station/crew_quarters/catering) "axy" = ( /obj/cable{ icon_state = "4-8" @@ -6653,16 +6223,6 @@ }, /turf/simulated/floor/plating, /area/station/crew_quarters/catering) -"axA" = ( -/obj/machinery/atmospherics/pipe/simple{ - level = 2 - }, -/obj/cable{ - icon_state = "0-8" - }, -/obj/machinery/power/apc/autoname_north, -/turf/simulated/floor/plating, -/area/station/crew_quarters/catering) "axB" = ( /obj/machinery/atmospherics/unary/cold_sink/freezer/kitchen{ dir = 1 @@ -6993,14 +6553,6 @@ icon_state = "fred2" }, /area/station/crew_quarters/cafeteria) -"ayN" = ( -/obj/table/reinforced/bar/auto, -/obj/item/clothing/head/cakehat, -/turf/simulated/floor/carpet{ - dir = 1; - icon_state = "fred2" - }, -/area/station/crew_quarters/cafeteria) "ayO" = ( /obj/table/reinforced/bar/auto, /obj/window/reinforced{ @@ -7063,50 +6615,6 @@ "ayU" = ( /turf/simulated/wall/auto/reinforced/supernorn, /area/station/storage/emergency) -"ayW" = ( -/obj/disposalpipe/segment/mail, -/turf/simulated/wall/auto/supernorn, -/area/station/storage/emergency) -"ayY" = ( -/obj/machinery/atmospherics/pipe/simple{ - level = 2 - }, -/turf/simulated/floor/plating, -/area/station/crew_quarters/catering) -"ayZ" = ( -/obj/storage/crate{ - name = "Cone Crate" - }, -/obj/item/reagent_containers/food/snacks/ice_cream_cone{ - pixel_x = -10; - pixel_y = 11 - }, -/obj/item/reagent_containers/food/snacks/ice_cream_cone{ - pixel_x = -2; - pixel_y = 11 - }, -/obj/item/reagent_containers/food/snacks/ice_cream_cone{ - pixel_x = 6; - pixel_y = 11 - }, -/obj/item/reagent_containers/food/snacks/ice_cream_cone{ - pixel_x = -9; - pixel_y = 4 - }, -/obj/item/reagent_containers/food/snacks/ice_cream_cone{ - pixel_x = -1; - pixel_y = 4 - }, -/obj/item/reagent_containers/food/snacks/ice_cream_cone{ - pixel_x = 7; - pixel_y = 4 - }, -/obj/item/reagent_containers/food/snacks/condiment/chocchips{ - pixel_x = 1; - pixel_y = 3 - }, -/turf/simulated/floor/plating, -/area/station/crew_quarters/catering) "azb" = ( /turf/simulated/floor/yellow/side{ dir = 4 @@ -7270,11 +6778,6 @@ }, /turf/space, /area/space) -"azu" = ( -/obj/storage/closet/emergency, -/obj/decal/stripe_delivery, -/turf/simulated/floor, -/area/station/hallway/primary/east) "azv" = ( /obj/cable{ icon_state = "1-2" @@ -7671,8 +7174,8 @@ /area/station/storage/emergency) "aAA" = ( /obj/rack, -/obj/item/clothing/suit/fire, -/obj/item/clothing/suit/fire{ +/obj/item/clothing/suit/hazard/fire, +/obj/item/clothing/suit/hazard/fire{ pixel_x = 4; pixel_y = -2 }, @@ -7714,21 +7217,6 @@ /obj/decal/stripe_caution, /turf/simulated/floor, /area/station/storage/emergency) -"aAB" = ( -/obj/disposalpipe/segment, -/obj/cable{ - icon_state = "1-2" - }, -/turf/simulated/floor/yellow/side{ - dir = 1 - }, -/area/station/storage/emergency) -"aAC" = ( -/obj/machinery/space_heater, -/obj/disposalpipe/segment/mail, -/obj/decal/stripe_caution, -/turf/simulated/floor, -/area/station/storage/emergency) "aAG" = ( /obj/machinery/drone_recharger, /turf/simulated/floor/plating, @@ -7739,17 +7227,6 @@ }, /obj/machinery/light, /turf/simulated/floor/yellow/side, -/area/station/storage/auxillary{ - name = "Tool Storage" - }) -"aAI" = ( -/obj/cable{ - icon_state = "1-2" - }, -/obj/cable{ - icon_state = "2-8" - }, -/turf/simulated/floor/yellow/side, /area/station/storage/auxillary{ name = "Tool Storage" }) @@ -7818,8 +7295,8 @@ /obj/disposalpipe/segment/produce{ dir = 4 }, -/obj/disposalpipe/segment/mail, /obj/decal/stripe_delivery, +/obj/disposalpipe/segment/mail, /turf/simulated/floor, /area/station/hydroponics/lobby) "aAQ" = ( @@ -8083,30 +7560,6 @@ icon_state = "fred2" }, /area/station/crew_quarters/cafeteria) -"aBT" = ( -/obj/machinery/atmospherics/unary/outlet_injector/active{ - dir = 8 - }, -/obj/table/reinforced/bar/auto, -/obj/item/plate{ - pixel_y = 2 - }, -/obj/item/decoration/ashtray{ - pixel_x = 8; - pixel_y = 11 - }, -/obj/item/kitchen/utensil/fork{ - dir = 4; - pixel_x = -1; - pixel_y = 3 - }, -/obj/item/kitchen/utensil/spoon{ - dir = 4; - pixel_x = -1; - pixel_y = -7 - }, -/turf/simulated/floor/specialroom/bar/edge, -/area/station/crew_quarters/cafeteria) "aBU" = ( /obj/machinery/drainage, /turf/simulated/floor/black, @@ -8142,57 +7595,6 @@ }, /turf/simulated/floor, /area/station/storage/emergency) -"aBZ" = ( -/obj/cable{ - icon_state = "1-8" - }, -/obj/cable{ - icon_state = "4-8" - }, -/turf/simulated/floor, -/area/station/storage/emergency) -"aCa" = ( -/obj/cable{ - icon_state = "4-8" - }, -/turf/simulated/floor, -/area/station/storage/emergency) -"aCb" = ( -/obj/disposalpipe/segment, -/obj/cable{ - icon_state = "1-8" - }, -/turf/simulated/floor, -/area/station/storage/emergency) -"aCc" = ( -/obj/disposalpipe/segment/mail, -/obj/rack, -/obj/item/device/analyzer/atmospheric{ - pixel_x = 2 - }, -/obj/item/extinguisher{ - pixel_x = -5; - pixel_y = 1 - }, -/obj/item/storage/toolbox/emergency{ - pixel_x = 5; - pixel_y = -4 - }, -/obj/item/storage/toolbox/emergency{ - pixel_x = 5; - pixel_y = -8 - }, -/obj/item/device/light/flashlight{ - pixel_x = -6; - pixel_y = -4 - }, -/obj/item/device/light/flashlight{ - pixel_x = -1; - pixel_y = -5 - }, -/obj/decal/stripe_caution, -/turf/simulated/floor, -/area/station/storage/emergency) "aCd" = ( /obj/storage/crate/freezer{ name = "Freezer" @@ -8223,48 +7625,6 @@ }, /turf/simulated/floor/plating, /area/station/crew_quarters/catering) -"aCe" = ( -/obj/storage/crate/freezer, -/obj/item/storage/box/donkpocket_kit{ - pixel_x = -6; - pixel_y = 7 - }, -/obj/item/storage/box/donkpocket_kit{ - pixel_x = 1; - pixel_y = 5 - }, -/obj/item/reagent_containers/food/snacks/ice_cream/goodrandom{ - pixel_x = 8; - pixel_y = 5 - }, -/obj/item/reagent_containers/food/snacks/yoghurt/frozen{ - pixel_x = -7; - pixel_y = -1 - }, -/obj/item/reagent_containers/food/snacks/yoghurt/frozen{ - pixel_x = -3; - pixel_y = -2 - }, -/obj/item/reagent_containers/food/snacks/yoghurt/frozen{ - pixel_x = 1; - pixel_y = -3 - }, -/obj/item/reagent_containers/food/snacks/yoghurt/frozen{ - pixel_x = 5; - pixel_y = -4 - }, -/obj/item/reagent_containers/food/snacks/yoghurt/frozen{ - pixel_x = 9; - pixel_y = -5 - }, -/turf/simulated/floor/plating, -/area/station/crew_quarters/catering) -"aCf" = ( -/obj/disposalpipe/segment, -/turf/simulated/wall/auto/supernorn, -/area/station/storage/auxillary{ - name = "Tool Storage" - }) "aCg" = ( /obj/cable{ icon_state = "4-8" @@ -8328,6 +7688,10 @@ /obj/item/paper_bin, /obj/item/clipboard, /obj/item/pen, +/obj/disposalpipe/segment/mail{ + dir = 4; + icon_state = "pipe-c" + }, /turf/simulated/floor/green, /area/station/hydroponics/lobby) "aCk" = ( @@ -8338,6 +7702,9 @@ req_access_txt = "35" }, /obj/item/hand_labeler, +/obj/disposalpipe/segment/mail{ + dir = 4 + }, /turf/simulated/floor/green, /area/station/hydroponics/lobby) "aCm" = ( @@ -8607,18 +7974,6 @@ /obj/machinery/vending/coffee, /turf/simulated/floor/specialroom/bar, /area/station/crew_quarters/cafeteria) -"aDc" = ( -/obj/table/reinforced/bar/auto, -/obj/item/plate{ - pixel_x = -2; - pixel_y = 3 - }, -/obj/item/card_box/plain{ - pixel_x = 7; - pixel_y = 13 - }, -/turf/simulated/floor/specialroom/bar/edge, -/area/station/crew_quarters/cafeteria) "aDd" = ( /obj/stool, /turf/simulated/floor/black, @@ -8632,17 +7987,6 @@ }, /turf/simulated/floor/black, /area/station/crew_quarters/cafeteria) -"aDf" = ( -/obj/disposalpipe/segment{ - dir = 4; - icon_state = "pipe-c" - }, -/obj/machinery/partyalarm{ - dir = 8; - pixel_y = -26 - }, -/turf/simulated/floor/black, -/area/station/crew_quarters/cafeteria) "aDh" = ( /obj/table/auto, /obj/item/clothing/glasses/spectro, @@ -8810,42 +8154,11 @@ }, /turf/simulated/floor/yellow/side, /area/station/storage/emergency) -"aDk" = ( -/turf/simulated/floor/yellow/side, -/area/station/storage/emergency) "aDl" = ( /obj/machinery/portable_atmospherics/canister/air, /obj/decal/stripe_caution, /turf/simulated/floor, /area/station/storage/emergency) -"aDm" = ( -/obj/disposalpipe/segment, -/obj/machinery/vending/air_vendor, -/obj/decal/stripe_caution, -/turf/simulated/floor, -/area/station/storage/emergency) -"aDn" = ( -/obj/disposalpipe/segment/mail, -/obj/rack, -/obj/item/extinguisher{ - pixel_x = -5; - pixel_y = 1 - }, -/obj/item/wrench{ - pixel_x = -4; - pixel_y = -3 - }, -/obj/item/wrench{ - pixel_x = -1; - pixel_y = -5 - }, -/obj/item/device/light/glowstick{ - pixel_x = 9; - pixel_y = -7 - }, -/obj/decal/stripe_caution, -/turf/simulated/floor, -/area/station/storage/emergency) "aDo" = ( /obj/grille/steel, /turf/simulated/floor/plating, @@ -8908,14 +8221,6 @@ /obj/decal/stripe_caution, /turf/simulated/floor, /area/station/hallway/primary/east) -"aDx" = ( -/obj/disposalpipe/junction{ - icon_state = "pipe-j2" - }, -/turf/simulated/floor/yellow/side{ - dir = 1 - }, -/area/station/hallway/primary/east) "aDz" = ( /obj/disposalpipe/segment{ dir = 4 @@ -8984,6 +8289,7 @@ /obj/disposalpipe/segment{ dir = 4 }, +/obj/disposalpipe/segment/mail, /turf/simulated/floor/green/side{ dir = 1 }, @@ -8998,7 +8304,6 @@ }, /area/station/hallway/primary/east) "aDL" = ( -/obj/disposalpipe/segment/mail, /turf/simulated/floor/green/side{ dir = 1 }, @@ -9026,14 +8331,6 @@ dir = 1 }, /area/station/hallway/primary/east) -"aDP" = ( -/obj/cable{ - icon_state = "4-8" - }, -/turf/simulated/floor/green/side{ - dir = 1 - }, -/area/station/hallway/primary/east) "aDQ" = ( /obj/cable{ icon_state = "1-4" @@ -9263,57 +8560,6 @@ icon_state = "fred2" }, /area/station/crew_quarters/cafeteria) -"aEA" = ( -/obj/table/reinforced/bar/auto, -/obj/machinery/phone, -/turf/simulated/floor/specialroom/bar/edge{ - dir = 4 - }, -/area/station/crew_quarters/cafeteria) -"aEB" = ( -/obj/table/reinforced/bar/auto, -/obj/item/shaker/pepper{ - pixel_x = -9; - pixel_y = 10 - }, -/obj/item/shaker/salt{ - pixel_x = -5; - pixel_y = 8 - }, -/obj/item/shaker/mustard{ - pixel_x = 3; - pixel_y = 8 - }, -/obj/item/shaker/ketchup{ - pixel_x = 8; - pixel_y = 6 - }, -/turf/simulated/floor/specialroom/bar/edge{ - dir = 8 - }, -/area/station/crew_quarters/cafeteria) -"aEC" = ( -/obj/machinery/light{ - dir = 4 - }, -/obj/table/reinforced/bar/auto, -/obj/item_dispenser/icedispenser{ - dir = 8; - pixel_x = 19; - pixel_y = 8 - }, -/turf/simulated/floor/specialroom/bar/edge{ - dir = 8 - }, -/area/station/crew_quarters/cafeteria) -"aEE" = ( -/obj/disposalpipe/segment, -/turf/simulated/wall/auto/reinforced/supernorn, -/area/station/crew_quarters/cafeteria) -"aEJ" = ( -/obj/submachine/ATM, -/turf/simulated/wall/auto/reinforced/supernorn, -/area/station/storage/emergency) "aEK" = ( /obj/machinery/atmospherics/pipe/simple{ level = 2 @@ -9338,7 +8584,7 @@ /area/station/maintenance/solar/west) "aEP" = ( /obj/rack, -/obj/item/clothing/suit/fire, +/obj/item/clothing/suit/hazard/fire, /obj/item/tank/air, /obj/item/extinguisher{ pixel_x = 9 @@ -9388,40 +8634,6 @@ /obj/decal/stripe_caution, /turf/simulated/floor, /area/station/hallway/primary/east) -"aES" = ( -/obj/disposalpipe/segment, -/turf/simulated/floor, -/area/station/hallway/primary/east) -"aET" = ( -/obj/cable{ - icon_state = "1-2" - }, -/obj/disposalpipe/segment/mail{ - dir = 4; - icon_state = "pipe-c" - }, -/turf/simulated/floor, -/area/station/hallway/primary/east) -"aEU" = ( -/obj/landmark/halloween, -/obj/disposalpipe/segment/mail{ - dir = 4 - }, -/turf/simulated/floor, -/area/station/hallway/primary/east) -"aEV" = ( -/obj/cable{ - icon_state = "2-4" - }, -/obj/cable{ - icon_state = "1-2" - }, -/obj/disposalpipe/segment/mail{ - dir = 4 - }, -/obj/machinery/navbeacon/tour/cog1/tour3, -/turf/simulated/floor, -/area/station/hallway/primary/east) "aEW" = ( /obj/cable{ icon_state = "4-8" @@ -9440,13 +8652,6 @@ name = "astroturf" }, /area/station/hydroponics/bay) -"aEY" = ( -/obj/cable{ - icon_state = "1-8" - }, -/obj/machinery/light, -/turf/simulated/floor, -/area/station/hallway/primary/east) "aEZ" = ( /obj/lattice{ dir = 6; @@ -9458,19 +8663,6 @@ }, /turf/space, /area/space) -"aFb" = ( -/obj/table/wood/auto, -/obj/item/paper_bin, -/obj/item/pen, -/obj/machinery/camera{ - c_tag = "autotag"; - dir = 8; - name = "autoname - SS13"; - tag = "" - }, -/obj/machinery/light/small/floor, -/turf/simulated/floor, -/area/station/hallway/primary/east) "aFd" = ( /obj/machinery/atmospherics/pipe/manifold{ dir = 8; @@ -9683,21 +8875,6 @@ }, /turf/simulated/floor/neutral/side, /area/station/hallway/primary/central) -"aFG" = ( -/obj/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple{ - dir = 9 - }, -/turf/simulated/floor/neutral/side, -/area/station/hallway/primary/central) -"aFH" = ( -/obj/disposalpipe/junction{ - dir = 4 - }, -/turf/simulated/floor/neutral/side, -/area/station/hallway/primary/central) "aFI" = ( /obj/disposalpipe/segment{ dir = 4 @@ -9722,94 +8899,12 @@ }, /turf/simulated/floor, /area/station/hallway/primary/central) -"aFL" = ( -/obj/disposalpipe/segment/mail, -/obj/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/light/emergency{ - dir = 4 - }, -/turf/simulated/floor/neutral/side{ - dir = 4 - }, -/area/station/hallway/primary/central) -"aFM" = ( -/obj/disposalpipe/segment{ - dir = 4 - }, -/obj/mapping_helper/wingrille_spawn/auto, -/turf/simulated/floor/plating, -/area/station/crew_quarters/cafeteria) -"aFN" = ( -/obj/disposalpipe/junction{ - dir = 4; - icon_state = "pipe-j2" - }, -/obj/machinery/light/emergency{ - dir = 8 - }, -/turf/simulated/floor/specialroom/bar, -/area/station/crew_quarters/cafeteria) "aFO" = ( /obj/disposalpipe/segment{ dir = 4 }, /turf/simulated/floor/specialroom/bar, /area/station/crew_quarters/cafeteria) -"aFP" = ( -/obj/disposalpipe/segment{ - dir = 4 - }, -/obj/disposalpipe/segment/mail, -/turf/simulated/floor/specialroom/bar, -/area/station/crew_quarters/cafeteria) -"aFQ" = ( -/obj/disposalpipe/segment{ - dir = 4 - }, -/turf/simulated/floor/carpet{ - dir = 10; - icon_state = "fred2" - }, -/area/station/crew_quarters/cafeteria) -"aFR" = ( -/obj/disposalpipe/segment{ - dir = 4 - }, -/turf/simulated/floor/carpet{ - icon_state = "fred2" - }, -/area/station/crew_quarters/cafeteria) -"aFS" = ( -/obj/disposalpipe/segment{ - dir = 4 - }, -/obj/stool/bar, -/turf/simulated/floor/carpet{ - icon_state = "fred2" - }, -/area/station/crew_quarters/cafeteria) -"aFT" = ( -/obj/disposalpipe/segment{ - dir = 4 - }, -/turf/simulated/floor/carpet{ - dir = 6; - icon_state = "fred2" - }, -/area/station/crew_quarters/cafeteria) -"aFU" = ( -/obj/disposalpipe/junction{ - dir = 4; - icon_state = "pipe-j2" - }, -/obj/machinery/light/emergency{ - dir = 4 - }, -/obj/machinery/vending/fortune, -/turf/simulated/floor/specialroom/bar, -/area/station/crew_quarters/cafeteria) "aFX" = ( /obj/cable{ icon_state = "1-2" @@ -9821,33 +8916,6 @@ }, /turf/simulated/floor/plating, /area/station/maintenance/solar/west) -"aFZ" = ( -/obj/machinery/camera{ - c_tag = "autotag"; - dir = 6; - name = "autoname - SS13"; - tag = "" - }, -/obj/disposalpipe/segment{ - dir = 2; - icon_state = "pipe-c" - }, -/turf/simulated/floor/yellow/side{ - dir = 1 - }, -/area/station/hallway/primary/east) -"aGa" = ( -/obj/disposalpipe/segment, -/turf/simulated/floor/yellow/side{ - dir = 1 - }, -/area/station/hallway/primary/east) -"aGb" = ( -/obj/disposalpipe/segment/mail, -/turf/simulated/floor/yellow/side{ - dir = 1 - }, -/area/station/hallway/primary/east) "aGc" = ( /obj/machinery/light{ dir = 1; @@ -9877,49 +8945,6 @@ dir = 1 }, /area/station/hallway/primary/east) -"aGg" = ( -/obj/disposalpipe/segment/mail, -/obj/cable{ - icon_state = "2-4" - }, -/obj/cable{ - icon_state = "1-2" - }, -/turf/simulated/floor/neutral/corner, -/area/station/hallway/primary/east) -"aGh" = ( -/obj/cable{ - icon_state = "4-8" - }, -/obj/stool/chair/comfy/blue{ - dir = 1 - }, -/turf/simulated/floor/neutral/side, -/area/station/hallway/primary/east) -"aGi" = ( -/obj/cable{ - icon_state = "4-8" - }, -/obj/machinery/vending/cards, -/turf/simulated/floor/neutral/side, -/area/station/hallway/primary/east) -"aGk" = ( -/obj/cable{ - icon_state = "4-8" - }, -/obj/machinery/vending/snack, -/turf/simulated/floor/neutral/side, -/area/station/hallway/primary/east) -"aGl" = ( -/obj/machinery/light, -/obj/cable{ - icon_state = "1-8" - }, -/obj/stool/chair/comfy/blue{ - dir = 1 - }, -/turf/simulated/floor/neutral/side, -/area/station/hallway/primary/east) "aGo" = ( /turf/simulated/wall/auto/supernorn, /area/station/chapel/sanctuary) @@ -10138,11 +9163,6 @@ /obj/decal/poster/wallsign/pool, /turf/simulated/wall/auto/supernorn, /area/station/crew_quarters/pool) -"aHc" = ( -/obj/disposalpipe/segment, -/obj/decal/poster/wallsign/pool, -/turf/simulated/wall/auto/supernorn, -/area/station/crew_quarters/pool) "aHd" = ( /turf/simulated/floor/neutral/side{ dir = 8 @@ -10154,46 +9174,12 @@ }, /turf/simulated/floor, /area/station/hallway/primary/central) -"aHf" = ( -/obj/disposalpipe/segment/mail, -/turf/simulated/floor/neutral/side{ - dir = 4 - }, -/area/station/hallway/primary/central) -"aHh" = ( -/obj/disposalpipe/segment/mail, -/obj/machinery/navbeacon/guardbot_buddytime, -/turf/simulated/floor/specialroom/bar, -/area/station/crew_quarters/cafeteria) -"aHi" = ( -/obj/machinery/navbeacon{ - codes_txt = "patrol;next_patrol=pool"; - location = "bar"; - name = "bot navigation beacon" - }, -/turf/simulated/floor/specialroom/bar, -/area/station/crew_quarters/cafeteria) "aHj" = ( /obj/disposalpipe/junction{ dir = 8 }, /turf/simulated/floor, /area/station/hallway/primary/east) -"aHk" = ( -/obj/disposalpipe/segment{ - dir = 4 - }, -/obj/disposalpipe/segment/mail, -/obj/machinery/light{ - dir = 4 - }, -/obj/cable{ - icon_state = "1-2" - }, -/turf/simulated/floor/neutral/side{ - dir = 4 - }, -/area/station/hallway/primary/east) "aHl" = ( /obj/machinery/atmospherics/pipe/simple{ dir = 5; @@ -10245,12 +9231,6 @@ dir = 8 }, /area/station/chapel/sanctuary) -"aHt" = ( -/obj/disposalpipe/segment/mail, -/turf/simulated/floor/specialroom/chapel{ - dir = 8 - }, -/area/station/chapel/sanctuary) "aHu" = ( /obj/machinery/light{ dir = 1; @@ -10282,16 +9262,6 @@ }, /turf/simulated/floor, /area/station/hallway/primary/east) -"aHz" = ( -/obj/cable{ - icon_state = "4-8" - }, -/obj/disposalpipe/segment/mail{ - dir = 4 - }, -/obj/disposalpipe/segment, -/turf/simulated/floor, -/area/station/hallway/primary/east) "aHA" = ( /obj/storage/secure/closet/security/equipment, /obj/decal/stripe_caution, @@ -10578,15 +9548,6 @@ dir = 1 }, /area/station/crew_quarters/pool) -"aIn" = ( -/obj/disposalpipe/trunk{ - dir = 1 - }, -/obj/machinery/disposal, -/turf/simulated/floor/bluewhite/corner{ - dir = 1 - }, -/area/station/crew_quarters/pool) "aIo" = ( /obj/disposalpipe/segment/mail{ dir = 1; @@ -10662,30 +9623,6 @@ /obj/machinery/light, /turf/simulated/floor/specialroom/bar, /area/station/crew_quarters/cafeteria) -"aIw" = ( -/obj/cable{ - icon_state = "4-8" - }, -/obj/cable{ - icon_state = "2-8" - }, -/obj/disposalpipe/segment/mail{ - dir = 4 - }, -/turf/simulated/floor, -/area/station/hallway/primary/east) -"aIx" = ( -/obj/cable{ - icon_state = "4-8" - }, -/obj/disposalpipe/switch_junction{ - dir = 4; - icon_state = "pipe-sj2"; - mail_tag = "kitchen"; - name = "kitchen mail router" - }, -/turf/simulated/floor, -/area/station/hallway/primary/east) "aIy" = ( /obj/cable{ icon_state = "4-8" @@ -10705,18 +9642,6 @@ /obj/machinery/light/emergency, /turf/simulated/floor/neutral/side, /area/station/hallway/primary/east) -"aIA" = ( -/obj/cable{ - icon_state = "2-8" - }, -/obj/disposalpipe/segment/mail{ - dir = 4 - }, -/obj/cable{ - icon_state = "4-8" - }, -/turf/simulated/floor/neutral/side, -/area/station/hallway/primary/east) "aIB" = ( /obj/disposalpipe/segment/mail{ dir = 4 @@ -10768,22 +9693,6 @@ }, /turf/simulated/floor/plating, /area/station/maintenance/solar/west) -"aII" = ( -/obj/disposalpipe/segment{ - dir = 1; - icon_state = "pipe-c" - }, -/turf/simulated/wall/auto/supernorn, -/area/station/chapel/sanctuary) -"aIJ" = ( -/obj/machinery/disposal, -/obj/disposalpipe/trunk{ - dir = 8 - }, -/turf/simulated/floor/specialroom/chapel{ - dir = 4 - }, -/area/station/chapel/sanctuary) "aIK" = ( /obj/machinery/camera{ c_tag = "autotag"; @@ -10830,34 +9739,12 @@ icon_state = "fred2" }, /area/station/chapel/sanctuary) -"aIQ" = ( -/obj/disposalpipe/segment/mail, -/turf/simulated/floor/carpet{ - dir = 1; - icon_state = "fred2" - }, -/area/station/chapel/sanctuary) "aIR" = ( /turf/simulated/floor/carpet{ dir = 5; icon_state = "fred2" }, /area/station/chapel/sanctuary) -"aIS" = ( -/obj/window/reinforced{ - dir = 2 - }, -/obj/machinery/light/emergency{ - dir = 4 - }, -/turf/simulated/floor/specialroom/chapel{ - dir = 8 - }, -/area/station/chapel/sanctuary) -"aIT" = ( -/obj/disposalpipe/junction, -/turf/simulated/floor, -/area/station/hallway/primary/east) "aIU" = ( /obj/machinery/navbeacon{ codes_txt = "delivery;dir=4"; @@ -10884,28 +9771,10 @@ /obj/decal/cleanable/dirt, /turf/simulated/floor/plating, /area/station/maintenance/solar/west) -"aIX" = ( -/obj/disposalpipe/segment{ - dir = 1; - icon_state = "pipe-c" - }, -/obj/shrub, -/turf/simulated/floor, -/area/station/hallway/primary/east) "aIY" = ( /obj/submachine/weapon_vendor/security, /turf/simulated/floor, /area/station/security/main) -"aJa" = ( -/obj/cable{ - icon_state = "1-2" - }, -/obj/disposalpipe/segment{ - dir = 2; - icon_state = "pipe-c" - }, -/turf/simulated/floor, -/area/station/hallway/primary/east) "aJb" = ( /obj/cable{ icon_state = "0-2" @@ -11185,12 +10054,6 @@ }, /turf/simulated/floor/blue/side, /area/station/medical/medbooth) -"aJN" = ( -/obj/disposalpipe/segment{ - dir = 4 - }, -/turf/simulated/wall/auto/reinforced/supernorn, -/area/station/medical/medbooth) "aJO" = ( /obj/machinery/atmospherics/pipe/simple, /obj/cable{ @@ -11612,27 +10475,6 @@ dir = 1 }, /area/station/medical/medbooth) -"aKV" = ( -/obj/disposalpipe/segment, -/obj/cable{ - icon_state = "1-2" - }, -/obj/cable{ - icon_state = "1-8" - }, -/turf/simulated/floor/bluewhite{ - dir = 5 - }, -/area/station/medical/medbooth) -"aKW" = ( -/obj/storage/closet/emergency, -/obj/cable{ - icon_state = "0-4" - }, -/obj/machinery/power/apc/autoname_west, -/obj/decal/stripe_delivery, -/turf/simulated/floor, -/area/station/hallway/primary/east) "aKX" = ( /obj/cable{ icon_state = "1-2" @@ -11643,19 +10485,6 @@ }, /turf/simulated/floor, /area/station/hallway/primary/east) -"aKY" = ( -/obj/cable{ - icon_state = "1-4" - }, -/obj/cable{ - icon_state = "1-2" - }, -/obj/machinery/light_switch{ - name = "W light switch"; - pixel_x = -24 - }, -/turf/simulated/floor/specialroom/chapel, -/area/station/chapel/sanctuary) "aKZ" = ( /obj/machinery/light, /obj/machinery/atmospherics/pipe/simple{ @@ -11675,14 +10504,6 @@ dir = 4 }, /area/station/chapel/sanctuary) -"aLb" = ( -/obj/cable{ - icon_state = "4-8" - }, -/turf/simulated/floor/specialroom/chapel{ - dir = 8 - }, -/area/station/chapel/sanctuary) "aLc" = ( /obj/cable{ icon_state = "4-8" @@ -12047,24 +10868,9 @@ "aMm" = ( /turf/simulated/floor/specialroom/chapel, /area/station/chapel/sanctuary) -"aMn" = ( -/obj/cable{ - icon_state = "1-2" - }, -/turf/simulated/floor/specialroom/chapel{ - dir = 4 - }, -/area/station/chapel/sanctuary) "aMo" = ( /turf/simulated/floor/carpet, /area/station/chapel/sanctuary) -"aMp" = ( -/obj/disposalpipe/segment/mail, -/turf/simulated/floor/carpet{ - dir = 4; - icon_state = "fred1" - }, -/area/station/chapel/sanctuary) "aMq" = ( /obj/table/wood/auto, /obj/item/bible{ @@ -12161,15 +10967,6 @@ }, /turf/simulated/floor/black, /area/station/bridge) -"aMz" = ( -/obj/cable{ - icon_state = "1-2" - }, -/obj/landmark/gps_waypoint, -/turf/simulated/floor, -/area/station/storage/auxillary{ - name = "Tool Storage" - }) "aMA" = ( /obj/cable{ icon_state = "4-8" @@ -12343,33 +11140,6 @@ /obj/machinery/drainage, /turf/simulated/floor/white, /area/station/medical/medbooth) -"aNj" = ( -/obj/machinery/light_switch{ - name = "E light switch"; - pixel_x = 24 - }, -/obj/disposalpipe/segment, -/obj/machinery/optable, -/obj/item/suture{ - pixel_x = 6; - pixel_y = 2 - }, -/obj/item/circular_saw{ - pixel_x = 1; - pixel_y = -7 - }, -/obj/item/scalpel{ - pixel_x = 4; - pixel_y = -11 - }, -/obj/item/reagent_containers/iv_drip/blood{ - pixel_x = 2; - pixel_y = 1 - }, -/turf/simulated/floor/bluewhite{ - dir = 4 - }, -/area/station/medical/medbooth) "aNk" = ( /turf/simulated/floor/red/corner{ dir = 4 @@ -12412,17 +11182,6 @@ dir = 8 }, /area/station/chapel/sanctuary) -"aNo" = ( -/obj/cable{ - icon_state = "1-8" - }, -/obj/machinery/atmospherics/unary/outlet_injector/active{ - dir = 4 - }, -/turf/simulated/floor/specialroom/chapel{ - dir = 8 - }, -/area/station/chapel/sanctuary) "aNp" = ( /obj/machinery/atmospherics/pipe/simple{ dir = 4 @@ -12513,25 +11272,6 @@ icon_state = "fred1" }, /area/station/chapel/sanctuary) -"aNz" = ( -/obj/disposalpipe/segment, -/obj/cable{ - icon_state = "0-4" - }, -/obj/machinery/camera{ - c_tag = "autotag"; - dir = 5; - name = "autoname - Mining"; - network = "Mining"; - tag = "" - }, -/obj/machinery/power/apc/autoname_south, -/turf/simulated/floor/yellow/side{ - dir = 10 - }, -/area/station/storage/auxillary{ - name = "Tool Storage" - }) "aNB" = ( /obj/table/wood/auto, /obj/item/device/light/candle{ @@ -12936,11 +11676,6 @@ dir = 1 }, /area/station/chapel/sanctuary) -"aOG" = ( -/obj/stool, -/obj/machinery/atmospherics/pipe/simple, -/turf/simulated/floor/carpet, -/area/station/chapel/sanctuary) "aOH" = ( /obj/table/wood/round/auto, /obj/item/reagent_containers/glass/bottle/antitoxin{ @@ -14156,7 +12891,7 @@ /area/station/crew_quarters/juryroom) "aSg" = ( /obj/rack, -/obj/item/clothing/suit/fire, +/obj/item/clothing/suit/hazard/fire, /obj/item/tank/air, /obj/item/extinguisher{ pixel_x = 9 @@ -14324,16 +13059,6 @@ /obj/item/device/light/candle, /turf/simulated/floor/specialroom/chapel, /area/station/chapel/sanctuary) -"aSI" = ( -/obj/machinery/light, -/turf/simulated/floor/specialroom/chapel{ - dir = 1 - }, -/area/station/chapel/sanctuary) -"aSJ" = ( -/obj/disposalpipe/segment/mail, -/turf/simulated/floor/specialroom/chapel, -/area/station/chapel/sanctuary) "aSL" = ( /obj/machinery/power/data_terminal, /obj/cable{ @@ -14671,13 +13396,6 @@ /obj/machinery/atmospherics/pipe/simple, /turf/simulated/wall/auto/supernorn, /area/station/chapel/sanctuary) -"aTN" = ( -/obj/machinery/door/unpowered/wood/pyro{ - autoclose = 0; - name = "Confession Booth" - }, -/turf/simulated/floor/black, -/area/station/chapel/sanctuary) "aTO" = ( /obj/window/reinforced{ dir = 1 @@ -15017,24 +13735,6 @@ }, /turf/simulated/wall/auto/supernorn/wood, /area/station/crew_quarters/pool) -"aUD" = ( -/obj/table/wood/auto, -/obj/item/plate{ - pixel_y = 7 - }, -/obj/item/reagent_containers/food/drinks/drinkingglass/wine{ - pixel_x = -1; - pixel_y = 11 - }, -/obj/item/matchbook{ - pixel_x = -3; - pixel_y = -3 - }, -/turf/simulated/floor/carpet{ - dir = 1; - icon_state = "fred2" - }, -/area/station/crew_quarters/cafeteria) "aUE" = ( /turf/simulated/floor/black, /area/station/crew_quarters/jazz) @@ -15191,35 +13891,6 @@ }, /turf/simulated/floor/black, /area/station/chapel/sanctuary) -"aVb" = ( -/obj/cable{ - icon_state = "2-8" - }, -/obj/disposalpipe/segment/mail{ - dir = 4 - }, -/turf/simulated/floor/black, -/area/station/chapel/sanctuary) -"aVc" = ( -/obj/disposalpipe/segment/mail{ - dir = 4 - }, -/turf/simulated/wall/auto/supernorn, -/area/station/chapel/sanctuary) -"aVd" = ( -/obj/stool/chair{ - dir = 4 - }, -/obj/disposalpipe/switch_junction{ - desc = "An underfloor mail pipe."; - mail_tag = "chapel"; - name = "chapel mail router" - }, -/turf/simulated/floor/carpet{ - dir = 8; - icon_state = "fred2" - }, -/area/station/chapel/sanctuary) "aVg" = ( /obj/stool/chair{ dir = 8 @@ -15229,16 +13900,6 @@ icon_state = "fred2" }, /area/station/chapel/sanctuary) -"aVh" = ( -/obj/machinery/firealarm/east, -/obj/disposalpipe/segment, -/obj/cable{ - icon_state = "1-10" - }, -/turf/simulated/floor/bluewhite{ - dir = 4 - }, -/area/station/medical/medbooth) "aVi" = ( /obj/stool/chair{ dir = 8 @@ -15434,12 +14095,6 @@ dir = 1 }, /area/station/hallway/primary/central) -"aVG" = ( -/obj/player_piano, -/turf/simulated/floor/specialroom/chapel{ - dir = 4 - }, -/area/station/chapel/sanctuary) "aVI" = ( /obj/machinery/light{ dir = 4 @@ -18139,25 +16794,6 @@ /obj/grille/steel, /turf/simulated/floor/plating, /area/station/maintenance/central) -"bdt" = ( -/obj/disposalpipe/segment/mail, -/obj/machinery/camera{ - c_tag = "autotag"; - dir = 9; - invisibility = 101; - name = "autoname - Entertainment"; - network = "Zeta"; - tag = "" - }, -/obj/machinery/atmospherics/pipe/simple{ - dir = 4 - }, -/obj/landmark/gps_waypoint, -/turf/simulated/floor/carpet{ - dir = 8; - icon_state = "fred1" - }, -/area/station/chapel/sanctuary) "bdu" = ( /obj/securearea{ desc = ""; @@ -18418,22 +17054,6 @@ }, /turf/simulated/floor/plating, /area/station/maintenance/west) -"beh" = ( -/obj/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/light{ - dir = 1; - pixel_y = 21 - }, -/obj/machinery/light_switch{ - name = "N light switch"; - pixel_y = 24 - }, -/turf/simulated/floor/yellow/side{ - dir = 1 - }, -/area/station/hallway/primary/east) "bem" = ( /obj/machinery/navbeacon/tour/cog1/tour4, /obj/landmark/gps_waypoint, @@ -18481,20 +17101,6 @@ /obj/landmark/gps_waypoint, /turf/simulated/floor, /area/station/crew_quarters/courtroom) -"bet" = ( -/obj/cable{ - icon_state = "4-8" - }, -/obj/machinery/vending/capsule, -/turf/simulated/floor/neutral/side, -/area/station/hallway/primary/east) -"beu" = ( -/obj/disposalpipe/segment{ - dir = 2; - icon_state = "pipe-c" - }, -/turf/simulated/wall/auto/supernorn, -/area/station/chapel/sanctuary) "bev" = ( /obj/decal/poster/wallsign/stencil/right/c{ pixel_x = 13 @@ -18961,7 +17567,7 @@ /area/station/maintenance/central) "bgb" = ( /obj/rack, -/obj/item/clothing/suit/fire, +/obj/item/clothing/suit/hazard/fire, /obj/item/tank/air, /obj/item/extinguisher{ pixel_x = 9 @@ -19484,7 +18090,7 @@ /area/station/maintenance/central) "bhF" = ( /obj/rack, -/obj/item/clothing/suit/fire, +/obj/item/clothing/suit/hazard/fire, /obj/item/tank/air, /obj/item/extinguisher{ pixel_x = 9 @@ -20790,14 +19396,6 @@ dir = 1 }, /area/station/crew_quarters/market) -"bmt" = ( -/obj/noticeboard/persistent{ - name = "Bar persistent notice board"; - persistent_id = "bar"; - pixel_x = 32 - }, -/turf/simulated/floor/black, -/area/station/crew_quarters/cafeteria) "bmu" = ( /turf/simulated/floor/neutral/corner{ dir = 1 @@ -22564,6 +21162,10 @@ name = "Door-linked Atmospheric Forcefield"; powerlevel = 1 }, +/obj/mapping_helper/airlock/cycler{ + cycle_id = "eastmaint2"; + name = "East Maintenance" + }, /turf/simulated/floor, /area/station/maintenance/east) "bty" = ( @@ -22821,6 +21423,14 @@ dir = 4 }, /area/station/turret_protected/ai_upload) +"buW" = ( +/obj/table/wood/auto, +/obj/item/plate, +/obj/random_item_spawner/tableware/few, +/turf/simulated/floor/carpet{ + icon_state = "fred2" + }, +/area/station/crew_quarters/cafeteria) "buX" = ( /obj/cable{ icon_state = "0-2" @@ -24912,8 +23522,49 @@ /turf/simulated/floor/grime, /area/station/storage/warehouse) "bEG" = ( +/obj/storage/crate{ + desc = "Whoa! What will they think of next?"; + name = "Boxes in a Box" + }, +/obj/item/storage/box{ + pixel_x = -7; + pixel_y = 8 + }, +/obj/item/storage/box{ + pixel_x = 1; + pixel_y = 8 + }, +/obj/item/storage/box{ + pixel_x = 9; + pixel_y = 8 + }, +/obj/item/storage/box{ + pixel_x = -8; + pixel_y = 5 + }, +/obj/item/storage/box{ + pixel_y = 5 + }, +/obj/item/storage/box{ + pixel_x = 8; + pixel_y = 5 + }, +/obj/item/storage/box{ + pixel_x = -9; + pixel_y = 2 + }, +/obj/item/storage/box{ + pixel_x = -2; + pixel_y = 2 + }, +/obj/item/storage/box{ + pixel_x = 7; + pixel_y = 2 + }, +/obj/item/storage/box{ + pixel_y = -1 + }, /obj/disposalpipe/segment/mail, -/obj/storage/secure/closet/engineering/cargo, /turf/simulated/floor/plating, /area/station/storage/warehouse) "bEH" = ( @@ -25241,6 +23892,10 @@ name = "Door-linked Atmospheric Forcefield"; powerlevel = 1 }, +/obj/mapping_helper/airlock/cycler{ + cycle_id = "southsolar"; + name = "South Solar Maintenance" + }, /turf/simulated/floor/plating, /area/station/maintenance/solar/south) "bGK" = ( @@ -26359,9 +25014,6 @@ /turf/simulated/floor/black, /area/station/crew_quarters/hor) "bLk" = ( -/obj/stool/chair{ - dir = 8 - }, /obj/cable{ icon_state = "4-8" }, @@ -26371,6 +25023,9 @@ name = "autoname - SS13" }, /obj/blind_switch/area/north, +/obj/stool/chair/purple{ + dir = 8 + }, /turf/simulated/floor/black, /area/station/crew_quarters/hor) "bLl" = ( @@ -27459,6 +26114,12 @@ /obj/machinery/power/data_terminal, /turf/simulated/floor, /area/station/routing/airbridge) +"bOP" = ( +/obj/table/reinforced/bar/auto, +/turf/simulated/floor/specialroom/bar/edge{ + dir = 8 + }, +/area/station/crew_quarters/cafeteria) "bOR" = ( /obj/submachine/cargopad{ name = "Mechanical Workshop Pad" @@ -27598,6 +26259,14 @@ pixel_x = -4; pixel_y = 8 }, +/obj/item/hand_labeler{ + pixel_x = 4; + pixel_y = -3 + }, +/obj/item/hand_labeler{ + pixel_x = -6; + pixel_y = 4 + }, /turf/simulated/floor/neutral/side, /area/station/quartermaster/office) "bPp" = ( @@ -27799,12 +26468,6 @@ dir = 8 }, /area/station/hallway/primary/south) -"bPQ" = ( -/obj/disposalpipe/segment/mail{ - dir = 4 - }, -/turf/simulated/floor, -/area/station/hallway/primary/east) "bPR" = ( /obj/disposalpipe/segment/mail{ dir = 4 @@ -27927,7 +26590,7 @@ /area/station/engine/engineering/ce) "bQp" = ( /obj/rack, -/obj/item/clothing/suit/fire{ +/obj/item/clothing/suit/hazard/fire{ pixel_x = -7 }, /obj/item/clothing/mask/gas/emergency{ @@ -27965,16 +26628,6 @@ }, /turf/simulated/floor/grime, /area/station/storage/warehouse) -"bQv" = ( -/obj/item/paper{ - info = "Holy crap were you born in a barn? What the hell is wrong with you? Tidy this crap up. - W"; - name = "a furious note" - }, -/obj/cable{ - icon_state = "4-8" - }, -/turf/simulated/floor/grime, -/area/station/storage/warehouse) "bQw" = ( /obj/item/weldingtool, /obj/cable{ @@ -28483,12 +27136,12 @@ /turf/simulated/floor/grime, /area/station/science/lab) "bSp" = ( -/obj/stool/chair{ - dir = 8 - }, /obj/cable{ icon_state = "4-8" }, +/obj/stool/chair/purple{ + dir = 8 + }, /turf/simulated/floor/grime, /area/station/science/lab) "bSq" = ( @@ -29521,16 +28174,6 @@ dir = 1 }, /area/station/hallway/primary/south) -"bVL" = ( -/obj/cable{ - icon_state = "4-8" - }, -/obj/disposalpipe/segment/mail{ - dir = 2; - icon_state = "pipe-c" - }, -/turf/simulated/floor, -/area/station/hallway/primary/east) "bVM" = ( /obj/cable{ icon_state = "1-4" @@ -29876,13 +28519,6 @@ /obj/decal/stripe_delivery, /turf/simulated/floor, /area/station/hallway/primary/south) -"bWO" = ( -/obj/disposalpipe/segment{ - dir = 4 - }, -/obj/disposalpipe/segment/mail, -/turf/simulated/floor, -/area/station/hallway/primary/east) "bWP" = ( /obj/disposalpipe/junction{ dir = 1 @@ -30184,11 +28820,6 @@ /obj/decal/stripe_delivery, /turf/simulated/floor, /area/station/hallway/primary/south) -"bXT" = ( -/obj/table/auto, -/obj/item/hand_labeler, -/turf/simulated/floor/plating, -/area/space) "bXU" = ( /obj/disposalpipe/segment{ dir = 4 @@ -30250,7 +28881,7 @@ /area/station/hallway/primary/south) "bYd" = ( /obj/rack, -/obj/item/clothing/suit/fire, +/obj/item/clothing/suit/hazard/fire, /obj/item/tank/air, /obj/item/extinguisher{ pixel_x = 9 @@ -33581,7 +32212,7 @@ pixel_x = 5; pixel_y = 7 }, -/obj/item/clothing/suit/fire{ +/obj/item/clothing/suit/hazard/fire{ pixel_x = -7 }, /obj/item/storage/toolbox/emergency{ @@ -35051,34 +33682,8 @@ /turf/simulated/floor/plating, /area/station/storage/tech) "cnN" = ( -/obj/rack, -/obj/item/circuitboard/qmorder{ - pixel_x = -5; - pixel_y = 5 - }, -/obj/item/circuitboard/robot_module_rewriter{ - pixel_x = -5; - pixel_y = -3 - }, -/obj/item/circuitboard/barcode_qm{ - pixel_x = -5; - pixel_y = 1 - }, -/obj/item/circuitboard/barcode{ - pixel_x = 5; - pixel_y = 7 - }, -/obj/item/circuitboard/card{ - pixel_x = 5; - pixel_y = 3 - }, -/obj/item/circuitboard/cloning{ - pixel_x = 5; - pixel_y = -1 - }, -/obj/item/circuitboard/teleporter{ - pixel_x = 5; - pixel_y = -5 +/obj/rack/organized/techstorage_eng{ + order_override = "zigzag" }, /turf/simulated/floor/plating, /area/station/storage/tech) @@ -35162,7 +33767,7 @@ pixel_x = 10; pixel_y = 6 }, -/obj/item/clothing/suit/fire{ +/obj/item/clothing/suit/hazard/fire{ pixel_x = -3; pixel_y = 2 }, @@ -37497,6 +36102,12 @@ /obj/machinery/light, /turf/simulated/floor/plating, /area/station/routing/medsci) +"cvA" = ( +/obj/lattice{ + icon_state = "lattice-dir" + }, +/turf/space, +/area/station/maintenance/northeast) "cvD" = ( /obj/machinery/dialysis, /turf/simulated/floor/redwhite{ @@ -38071,6 +36682,19 @@ dir = 6 }, /area/station/janitor/supply) +"cxl" = ( +/obj/table/wood/auto, +/obj/item/pen, +/obj/item/paper_bin, +/obj/machinery/camera{ + c_tag = "autotag"; + dir = 8; + name = "autoname - SS13"; + tag = "" + }, +/obj/machinery/light/small/floor, +/turf/simulated/floor, +/area/station/hallway/primary/east) "cxo" = ( /obj/window_blinds/cog2/left, /obj/mapping_helper/wingrille_spawn/auto, @@ -38744,7 +37368,7 @@ /area/abandonedship) "cAG" = ( /obj/storage/crate, -/obj/item/clothing/suit/rad, +/obj/item/clothing/suit/hazard/rad, /obj/item/clothing/head/rad_hood, /turf/simulated/floor/airless/scorched, /area/abandonedship) @@ -38976,7 +37600,7 @@ "cBq" = ( /obj/table/wood/auto, /obj/item/reagent_containers/food/drinks/drinkingglass, -/obj/item/pinpointer, +/obj/item/pinpointer/disk, /turf/simulated/floor/carpet{ dir = 6; icon_state = "fred2" @@ -39182,34 +37806,8 @@ /turf/simulated/floor/bluewhite, /area/station/medical/medbay/lobby) "cCc" = ( -/obj/rack, -/obj/item/circuitboard/qmsupply{ - pixel_x = -5; - pixel_y = 5 - }, -/obj/item/circuitboard/telescope{ - pixel_x = -5; - pixel_y = 1 - }, -/obj/item/circuitboard/powermonitor{ - pixel_x = -5; - pixel_y = -3 - }, -/obj/item/circuitboard/genetics{ - pixel_x = 5; - pixel_y = 7 - }, -/obj/item/circuitboard/powermonitor_smes{ - pixel_x = 5; - pixel_y = 3 - }, -/obj/item/circuitboard/arcade{ - pixel_x = 5; - pixel_y = -5 - }, -/obj/item/circuitboard/operating{ - pixel_x = 5; - pixel_y = -1 +/obj/rack/organized/techstorage_med{ + order_override = "zigzag" }, /turf/simulated/floor/plating, /area/station/storage/tech) @@ -39602,19 +38200,6 @@ }, /turf/simulated/floor/grime, /area/station/quartermaster/refinery) -"cKD" = ( -/obj/table/wood/auto, -/obj/item/plate{ - pixel_y = 7 - }, -/obj/item/reagent_containers/food/drinks/drinkingglass/wine{ - pixel_x = -1; - pixel_y = 11 - }, -/turf/simulated/floor/carpet{ - icon_state = "fred2" - }, -/area/station/crew_quarters/cafeteria) "cKR" = ( /obj/landmark/start/job/engineer, /obj/decal/tile_edge/stripe/extra_big, @@ -39635,6 +38220,20 @@ /obj/machinery/portable_atmospherics/canister/air, /turf/simulated/floor/plating, /area/station/maintenance/solar/west) +"cLi" = ( +/obj/machinery/door/airlock/pyro/glass, +/obj/cable{ + icon_state = "1-2" + }, +/obj/mapping_helper/firedoor_spawn, +/turf/simulated/floor/specialroom/chapel{ + dir = 1 + }, +/area/station/chapel/sanctuary) +"cMe" = ( +/obj/decal/cleanable/rust/jen, +/turf/simulated/floor/grey/whitegrime/other, +/area/station/maintenance/northeast) "cMA" = ( /obj/machinery/atmospherics/binary/valve{ dir = 4; @@ -39687,6 +38286,16 @@ }, /turf/simulated/floor/grey, /area/station/engine/inner) +"cOx" = ( +/obj/machinery/door/airlock/pyro{ + name = "Kitchen"; + req_access_txt = null + }, +/obj/mapping_helper/access/kitchen, +/obj/mapping_helper/firedoor_spawn, +/obj/disposalpipe/segment, +/turf/simulated/floor/specialroom/cafeteria, +/area/station/crew_quarters/cafeteria) "cOy" = ( /obj/machinery/atmospherics/pipe/simple/insulated, /obj/mapping_helper/wingrille_spawn/auto/reinforced, @@ -39732,27 +38341,6 @@ }, /turf/simulated/floor/yellow/side, /area/station/engine/ptl) -"cRc" = ( -/obj/table/auto, -/obj/item/kitchen/utensil/knife{ - pixel_x = -9; - pixel_y = 6 - }, -/obj/item/reagent_containers/food/drinks/drinkingglass/icing{ - pixel_x = -3; - pixel_y = 7 - }, -/obj/item/reagent_containers/food/drinks/drinkingglass/icing{ - pixel_x = 1; - pixel_y = 8 - }, -/obj/disposalpipe/segment/food, -/obj/item/kitchen/rollingpin{ - pixel_x = 4; - pixel_y = 2 - }, -/turf/simulated/floor/specialroom/cafeteria, -/area/station/crew_quarters/kitchen) "cRg" = ( /obj/landmark/pest, /turf/simulated/floor/specialroom/bar, @@ -39848,12 +38436,6 @@ /obj/mapping_helper/access/maint, /turf/simulated/floor/plating, /area/station/maintenance/southeast) -"cUw" = ( -/obj/item/device/radio/intercom/botany{ - dir = 1 - }, -/turf/simulated/floor/black, -/area/station/crew_quarters/catering) "cUP" = ( /obj/machinery/launcher_loader/south{ door_delay = 5 @@ -39950,6 +38532,15 @@ /obj/mapping_helper/firedoor_spawn, /turf/simulated/floor/yellow, /area/station/storage/primary) +"cXe" = ( +/obj/table/auto, +/obj/disposalpipe/segment/food, +/obj/machinery/light{ + dir = 8; + tag = "" + }, +/turf/simulated/floor/specialroom/cafeteria, +/area/station/crew_quarters/kitchen) "cYa" = ( /obj/disposalpipe/segment{ dir = 4 @@ -40009,14 +38600,6 @@ /area/station/storage/auxillary{ name = "Tool Storage" }) -"dae" = ( -/obj/machinery/door/airlock/pyro/glass{ - name = "Emergency Storage" - }, -/obj/mapping_helper/firedoor_spawn, -/obj/decal/stripe_delivery, -/turf/simulated/floor, -/area/station/storage/emergency) "daU" = ( /obj/machinery/atmospherics/unary/portables_connector{ dir = 4 @@ -40041,27 +38624,6 @@ }, /turf/simulated/floor/shuttlebay, /area/station/hangar/main) -"dcu" = ( -/obj/table/reinforced/auto, -/obj/item/storage/toolbox/emergency{ - pixel_y = 8 - }, -/obj/item/hand_labeler{ - pixel_x = -6; - pixel_y = 4 - }, -/obj/item/hand_labeler{ - pixel_x = 4; - pixel_y = -3 - }, -/obj/decal/stripe_caution, -/obj/machinery/light{ - dir = 4; - layer = 9.1; - pixel_x = 10 - }, -/turf/simulated/floor, -/area/station/quartermaster/office) "dcw" = ( /obj/disposalpipe/segment/mail{ dir = 4 @@ -40094,6 +38656,10 @@ name = "Door-linked Atmospheric Forcefield"; powerlevel = 1 }, +/obj/mapping_helper/airlock/cycler{ + cycle_id = "centmaint1"; + name = "Central Maintenance" + }, /turf/simulated/floor/plating, /area/station/maintenance/central) "ddy" = ( @@ -40120,6 +38686,16 @@ }, /turf/simulated/floor/white, /area/station/medical/medbay/treatment) +"deH" = ( +/obj/machinery/atmospherics/pipe/simple{ + level = 2 + }, +/obj/machinery/power/apc/autoname_north, +/obj/cable{ + icon_state = "0-8" + }, +/turf/simulated/floor/plating, +/area/station/crew_quarters/catering) "dfe" = ( /obj/cable{ icon_state = "0-8" @@ -40274,6 +38850,48 @@ /obj/mapping_helper/firedoor_spawn, /turf/simulated/floor/carpet/grime, /area/station/crew_quarters/baroffice) +"dlj" = ( +/obj/cable{ + icon_state = "2-8" + }, +/obj/disposalpipe/segment/mail{ + dir = 8; + icon_state = "pipe-c" + }, +/turf/simulated/floor/black, +/area/station/chapel/sanctuary) +"dmH" = ( +/obj/storage/crate/freezer, +/obj/item/storage/box/donkpocket_kit{ + pixel_x = -6; + pixel_y = 7 + }, +/obj/item/storage/box/donkpocket_kit{ + pixel_x = 1; + pixel_y = 5 + }, +/obj/item/reagent_containers/food/snacks/yoghurt/frozen{ + pixel_x = -7; + pixel_y = -1 + }, +/obj/item/reagent_containers/food/snacks/yoghurt/frozen{ + pixel_x = -3; + pixel_y = -2 + }, +/obj/item/reagent_containers/food/snacks/yoghurt/frozen{ + pixel_x = 1; + pixel_y = -3 + }, +/obj/item/reagent_containers/food/snacks/yoghurt/frozen{ + pixel_x = 5; + pixel_y = -4 + }, +/obj/item/reagent_containers/food/snacks/yoghurt/frozen{ + pixel_x = 9; + pixel_y = -5 + }, +/turf/simulated/floor/plating, +/area/station/crew_quarters/catering) "dnA" = ( /obj/cable/orange{ icon_state = "1-2" @@ -40319,6 +38937,20 @@ }, /turf/simulated/floor/green, /area/station/turret_protected/Zeta) +"dpk" = ( +/obj/stove, +/obj/item/soup_pot, +/obj/item/ladle, +/obj/noticeboard/persistent{ + name = "Kitchen persistent notice board"; + persistent_id = "kitchen" + }, +/obj/item/matchbook{ + pixel_x = 10; + pixel_y = 9 + }, +/turf/simulated/floor/specialroom/cafeteria, +/area/station/crew_quarters/kitchen) "dpE" = ( /obj/machinery/power/terminal{ dir = 4 @@ -40351,6 +38983,28 @@ /obj/mapping_helper/firedoor_spawn, /turf/simulated/floor/grime, /area/station/maintenance/disposal) +"dqC" = ( +/obj/table/auto, +/obj/item/cigpacket/propuffs{ + pixel_x = -9; + pixel_y = -2 + }, +/obj/item/clothing/mask/cigarette/propuffs{ + pixel_x = -2; + pixel_y = -5 + }, +/obj/item/decoration/ashtray, +/obj/machinery/light, +/obj/item/reagent_containers/food/snacks/candy/wrapped_candy/butterscotch{ + pixel_x = 4; + pixel_y = 8 + }, +/obj/item/reagent_containers/food/drinks/tea{ + pixel_x = -7; + pixel_y = 18 + }, +/turf/simulated/floor/wood/two, +/area/station/medical/staff) "dqE" = ( /obj/machinery/door/airlock/pyro/glass, /obj/disposalpipe/segment, @@ -40372,12 +39026,44 @@ /obj/mapping_helper/wingrille_spawn/auto/reinforced/crystal, /turf/simulated/floor/plating, /area/station/engine/coldloop) +"dsc" = ( +/obj/machinery/door/airlock/pyro/glass{ + dir = 4; + name = "Cafeteria" + }, +/obj/mapping_helper/firedoor_spawn, +/obj/decal/stripe_delivery, +/obj/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor, +/area/station/crew_quarters/cafeteria) +"dsf" = ( +/obj/machinery/atmospherics/pipe/simple{ + dir = 9 + }, +/obj/disposalpipe/junction{ + dir = 4 + }, +/turf/simulated/floor/neutral/side, +/area/station/hallway/primary/central) "dsA" = ( /obj/cable{ icon_state = "1-2" }, /turf/simulated/wall/auto/supernorn, /area/station/turret_protected/Zeta) +"dsB" = ( +/obj/cable{ + icon_state = "1-2" + }, +/obj/cable{ + icon_state = "1-8" + }, +/turf/simulated/floor/bluewhite{ + dir = 5 + }, +/area/station/medical/medbooth) "dsG" = ( /obj/table/auto, /obj/item/plate{ @@ -40613,10 +39299,6 @@ /obj/decal/stripe_delivery, /turf/simulated/floor, /area/station/science/chemistry) -"dxI" = ( -/obj/item/swingsignfolded, -/turf/simulated/floor/black, -/area/station/crew_quarters/catering) "dxS" = ( /obj/table/reinforced/auto, /obj/mapping_helper/firedoor_spawn, @@ -40652,6 +39334,17 @@ }, /turf/simulated/floor, /area/station/crew_quarters/supplylobby) +"dyx" = ( +/obj/cable{ + icon_state = "1-2" + }, +/obj/disposalpipe/junction{ + dir = 8 + }, +/turf/simulated/floor/yellow/side{ + dir = 1 + }, +/area/station/hallway/primary/east) "dze" = ( /obj/effects/background_objects/x0{ pixel_x = -468; @@ -40781,6 +39474,11 @@ }, /obj/disposalpipe/segment, /obj/forcefield/energyshield/perma/doorlink, +/obj/mapping_helper/airlock/cycler{ + cycle_id = "engairlock"; + name = "Engineering Airlock"; + enter_id = "outer" + }, /turf/simulated/floor/plating, /area/station/hangar/engine) "dFg" = ( @@ -40821,10 +39519,6 @@ dir = 8 }, /area/station/security/main) -"dGs" = ( -/obj/landmark/pest, -/turf/simulated/floor/black, -/area/station/crew_quarters/cafeteria) "dHa" = ( /obj/lattice{ dir = 6; @@ -40995,6 +39689,11 @@ }, /turf/simulated/floor/plating, /area/station/routing/medsci) +"dOI" = ( +/obj/stool, +/obj/machinery/atmospherics/pipe/simple, +/turf/simulated/floor/carpet, +/area/station/chapel/sanctuary) "dON" = ( /obj/machinery/door/airlock/pyro/glass/security{ dir = 4 @@ -41028,6 +39727,12 @@ /obj/mapping_helper/access/maint, /turf/simulated/floor/plating, /area/station/atmos/hookups/east) +"dPW" = ( +/obj/cable{ + icon_state = "4-8" + }, +/turf/simulated/floor, +/area/station/storage/hydroponics) "dQf" = ( /obj/disposalpipe/segment/mail{ dir = 4 @@ -41149,18 +39854,29 @@ icon_state = "Stairs_wide" }, /area/station/security/main) +"dSo" = ( +/obj/table/auto, +/obj/machinery/phone{ + pixel_x = -7; + pixel_y = 6 + }, +/obj/item/satchel/hydro{ + pixel_x = 9; + pixel_y = 10 + }, +/obj/item/satchel/hydro{ + pixel_x = -7; + pixel_y = 2 + }, +/turf/simulated/floor/green/side{ + dir = 1 + }, +/area/station/hydroponics/bay) "dSW" = ( /obj/landmark/pest, /obj/disposalpipe/segment/mail, /turf/simulated/floor, /area/station/science/lobby) -"dTk" = ( -/obj/machinery/atmospherics/pipe/manifold{ - level = 2 - }, -/obj/landmark/pest, -/turf/simulated/floor/plating, -/area/station/crew_quarters/catering) "dTQ" = ( /obj/table/reinforced/auto, /obj/machinery/door/airlock/pyro/glass/windoor{ @@ -41235,12 +39951,18 @@ /obj/cable{ icon_state = "4-8" }, -/obj/machinery/door/airlock/pyro/glass/mining, /obj/mapping_helper/access/cargo, /obj/mapping_helper/firedoor_spawn, /obj/decal/stripe_delivery, +/obj/machinery/door/airlock/pyro/glass/mining, /turf/simulated/floor, /area/station/crew_quarters/supplylobby) +"dWk" = ( +/obj/disposalpipe/segment{ + dir = 8 + }, +/turf/simulated/floor/specialroom/cafeteria, +/area/station/crew_quarters/kitchen) "dWp" = ( /obj/machinery/door/poddoor/pyro/shutters{ dir = 4; @@ -41382,6 +40104,15 @@ }, /turf/simulated/wall/auto/reinforced/supernorn, /area/station/maintenance/solar/north) +"eaB" = ( +/obj/machinery/computer/stockexchange{ + dir = 8 + }, +/obj/machinery/alarm{ + pixel_y = 23 + }, +/turf/simulated/floor, +/area/station/quartermaster/cargooffice) "ebD" = ( /obj/disposalpipe/segment, /obj/cable{ @@ -41389,17 +40120,6 @@ }, /turf/simulated/floor/grey, /area/station/engine/inner) -"edb" = ( -/obj/decal/tile_edge/stripe/extra_big{ - dir = 4 - }, -/obj/machinery/firealarm/north, -/obj/cable{ - icon_state = "2-8" - }, -/obj/storage/cart, -/turf/simulated/floor/grime, -/area/station/storage/hydroponics) "edo" = ( /obj/machinery/atmospherics/unary/portables_connector{ dir = 8; @@ -41468,6 +40188,11 @@ dir = 1 }, /area/station/mining/staff_room) +"ehD" = ( +/obj/table/auto, +/obj/disposalpipe/segment/food, +/turf/simulated/floor/specialroom/cafeteria, +/area/station/crew_quarters/kitchen) "ehU" = ( /obj/cable{ icon_state = "4-8" @@ -41690,6 +40415,18 @@ }, /turf/simulated/floor, /area/station/engine/engineering) +"erT" = ( +/obj/cable{ + icon_state = "1-2" + }, +/obj/disposalpipe/segment/produce{ + dir = 2; + icon_state = "pipe-c" + }, +/turf/simulated/floor/yellow/corner{ + dir = 8 + }, +/area/station/hallway/primary/east) "erY" = ( /obj/cable{ icon_state = "1-4" @@ -41742,6 +40479,18 @@ dir = 5 }, /area/station/engine/ptl) +"etO" = ( +/obj/storage/closet/emergency, +/obj/cable{ + icon_state = "0-4" + }, +/obj/machinery/power/apc/autoname_west, +/obj/decal/stripe_delivery, +/obj/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor, +/area/station/hallway/primary/east) "etV" = ( /obj/machinery/door/airlock/pyro{ dir = 4; @@ -41752,6 +40501,18 @@ /obj/mapping_helper/access/kitchen, /turf/simulated/floor/black, /area/station/crew_quarters/cafeteria) +"etY" = ( +/obj/table/auto, +/obj/item/gun/russianrevolver{ + pixel_x = -1; + pixel_y = 15 + }, +/obj/item/storage/firstaid/toxin{ + pixel_x = 12; + pixel_y = 10 + }, +/turf/simulated/floor/grime, +/area/station/crew_quarters/baroffice) "eup" = ( /obj/decal/tile_edge/stripe/extra_big, /obj/item/device/radio/intercom/medical{ @@ -41824,6 +40585,14 @@ /obj/machinery/power/solar/west, /turf/simulated/floor/airless/solar, /area/station/solar/west) +"ewn" = ( +/obj/disposalpipe/segment{ + dir = 2; + icon_state = "pipe-c"; + name = "factory pipe" + }, +/turf/simulated/floor, +/area/station/hallway/primary/east) "ewr" = ( /obj/machinery/atmospherics/pipe/simple/insulated, /obj/grille/catwalk{ @@ -41853,6 +40622,16 @@ icon_state = "catwalk_cross" }, /area/space) +"exA" = ( +/obj/machinery/light_switch{ + name = "S light switch"; + pixel_y = -24 + }, +/obj/disposalpipe/segment/produce{ + dir = 4 + }, +/turf/simulated/floor/grime, +/area/station/hallway/primary/east) "exI" = ( /obj/cable{ icon_state = "1-4" @@ -41906,6 +40685,14 @@ }, /turf/simulated/floor, /area/station/bridge) +"eyE" = ( +/obj/disposalpipe/segment{ + dir = 2; + icon_state = "pipe-c"; + name = "factory pipe" + }, +/turf/simulated/floor, +/area/station/hallway/primary/central) "ezA" = ( /obj/machinery/door/airlock/pyro{ dir = 4; @@ -42015,6 +40802,11 @@ }, /obj/mapping_helper/firedoor_spawn, /obj/mapping_helper/access/security, +/obj/mapping_helper/airlock/cycler{ + cycle_id = "security"; + name = "Security"; + enter_id = "side" + }, /turf/simulated/floor, /area/station/security/secwing) "eCa" = ( @@ -42047,6 +40839,14 @@ }, /turf/simulated/floor, /area/station/science/bot_storage) +"eCT" = ( +/obj/machinery/disposal/mail{ + mail_tag = "kitchen"; + name = "mail chute-'Kitchen'" + }, +/obj/disposalpipe/trunk/mail, +/turf/simulated/floor/specialroom/cafeteria, +/area/station/crew_quarters/kitchen) "eDu" = ( /obj/landmark/spawner/artifact, /turf/simulated/floor/shuttlebay, @@ -42069,6 +40869,22 @@ /obj/disposalpipe/segment/morgue, /turf/space, /area/space) +"eDM" = ( +/obj/machinery/phone/wall, +/turf/simulated/wall/auto/supernorn, +/area/station/crew_quarters/kitchen) +"eEx" = ( +/obj/lattice{ + icon_state = "lattice-dir" + }, +/obj/lattice{ + icon_state = "lattice-dir" + }, +/obj/lattice{ + icon_state = "lattice-dir" + }, +/turf/space, +/area/space) "eEI" = ( /obj/machinery/disposal{ name = "Test Chamber Chute" @@ -42139,13 +40955,13 @@ dir = 0; name = "autoname - SS13" }, -/obj/disposalpipe/segment/mail{ - dir = 4 - }, /obj/landmark/start/job/botanist, /obj/machinery/alarm{ pixel_y = 23 }, +/obj/disposalpipe/segment/mail{ + dir = 4 + }, /turf/simulated/floor/green/side{ dir = 1 }, @@ -42261,20 +41077,6 @@ /obj/machinery/computer/robotics, /turf/simulated/floor/circuit/green, /area/station/turret_protected/Zeta) -"eJM" = ( -/obj/disposalpipe/segment, -/obj/cable{ - icon_state = "1-2" - }, -/obj/machinery/door/airlock/pyro{ - name = "Catering Storage"; - req_access_txt = null - }, -/obj/mapping_helper/access/bar, -/obj/mapping_helper/access/kitchen, -/obj/mapping_helper/firedoor_spawn, -/turf/simulated/floor/black, -/area/station/storage/emergency) "eJV" = ( /obj/machinery/atmospherics/pipe/manifold{ level = 2 @@ -42282,6 +41084,24 @@ /obj/machinery/meter, /turf/simulated/wall/auto/reinforced/supernorn, /area/station/engine/hotloop) +"eKd" = ( +/obj/machinery/door/airlock/pyro/external{ + dir = 4 + }, +/obj/decal/stripe_delivery, +/obj/forcefield/energyshield/perma/doorlink{ + desc = "A door-linked force field that prevents gasses from passing through it."; + dir = 4; + name = "Door-linked Atmospheric Forcefield"; + powerlevel = 1 + }, +/obj/mapping_helper/airlock/cycler{ + cycle_id = "escape2"; + name = "Escape"; + enter_id = "main" + }, +/turf/simulated/floor, +/area/station/hallway/secondary/exit) "eKk" = ( /obj/machinery/conveyor/EW{ name = "cargo belt - west"; @@ -42340,6 +41160,21 @@ /obj/disposalpipe/segment/mail, /turf/simulated/floor/plating, /area/station/maintenance/east) +"eNa" = ( +/obj/table/reinforced/auto, +/obj/item/cigpacket{ + pixel_x = 11 + }, +/obj/item/device/light/zippo{ + pixel_x = 7; + pixel_y = 11 + }, +/obj/item/paper/book/from_file/pocketguide/quartermaster{ + pixel_x = -6; + pixel_y = 3 + }, +/turf/simulated/floor, +/area/station/quartermaster/cargooffice) "eOb" = ( /obj/decal/tile_edge/stripe/extra_big, /obj/machinery/light/small{ @@ -42381,6 +41216,11 @@ name = "Door-linked Atmospheric Forcefield"; powerlevel = 1 }, +/obj/mapping_helper/airlock/cycler{ + cycle_id = "mining1"; + name = "Mining"; + enter_id = "outer" + }, /turf/simulated/floor, /area/station/mining/staff_room) "ePw" = ( @@ -42422,6 +41262,11 @@ /obj/cable{ icon_state = "4-8" }, +/obj/mapping_helper/airlock/cycler{ + cycle_id = "engairlock"; + name = "Engineering Airlock"; + enter_id = "hangar" + }, /turf/simulated/floor/plating, /area/station/hangar/engine) "eRW" = ( @@ -42521,6 +41366,10 @@ }, /turf/simulated/floor/plating, /area/station/hangar/qm) +"eVe" = ( +/obj/machinery/vending/snack, +/turf/simulated/floor/neutral/side, +/area/station/hallway/primary/east) "eVn" = ( /obj/mapping_helper/wingrille_spawn/auto/reinforced, /turf/simulated/floor/plating, @@ -42785,12 +41634,27 @@ }, /obj/mapping_helper/access/heads, /obj/mapping_helper/firedoor_spawn, +/obj/mapping_helper/airlock/cycler{ + cycle_id = "bridge"; + name = "Bridge"; + enter_id = "outer" + }, /turf/simulated/floor, /area/station/bridge) "fhq" = ( /obj/effects/background_objects/fortuna, /turf/space, /area/space) +"fhw" = ( +/obj/stool/chair{ + dir = 4 + }, +/obj/machinery/light{ + dir = 1; + pixel_y = 21 + }, +/turf/simulated/floor, +/area/station/quartermaster/cargooffice) "fhM" = ( /obj/submachine/seed_manipulator{ dir = 8 @@ -42888,12 +41752,20 @@ icon_state = "red2" }, /area/station/security/main) -"flp" = ( -/obj/machinery/light/small{ - dir = 8 +"fkW" = ( +/obj/item/device/radio/intercom/botany{ + dir = 1 }, -/turf/simulated/floor/grime, -/area/station/storage/hydroponics) +/obj/storage/cart/hotdog{ + req_access_txt = "28" + }, +/obj/item/reagent_containers/food/snacks/hotdog, +/obj/item/reagent_containers/food/snacks/hotdog, +/obj/item/reagent_containers/food/snacks/hotdog, +/obj/item/reagent_containers/food/snacks/hotdog, +/obj/item/reagent_containers/food/snacks/hotdog, +/turf/simulated/floor/black, +/area/station/crew_quarters/catering) "fmu" = ( /obj/landmark/pest, /obj/machinery/atmospherics/unary/outlet_injector/active{ @@ -42904,6 +41776,15 @@ icon_state = "fred1" }, /area/station/chapel/sanctuary) +"fmP" = ( +/obj/disposalpipe/segment{ + dir = 4 + }, +/obj/disposalpipe/segment/mail, +/turf/simulated/floor/yellow/side{ + dir = 1 + }, +/area/station/hallway/primary/east) "fna" = ( /obj/decal/tile_edge/stripe/extra_big{ dir = 1 @@ -43023,6 +41904,10 @@ }, /turf/simulated/floor, /area/station/ai_monitored/armory) +"fpm" = ( +/obj/storage/secure/closet/civilian/kitchen, +/turf/simulated/floor/specialroom/cafeteria, +/area/station/crew_quarters/kitchen) "fpq" = ( /obj/machinery/atmospherics/pipe/simple/insulated/cold{ dir = 10 @@ -43191,6 +42076,14 @@ }, /turf/simulated/floor, /area/station/engine/engineering) +"fts" = ( +/obj/landmark/pest, +/obj/disposalpipe/segment/mail{ + dir = 1; + icon_state = "pipe-c" + }, +/turf/simulated/floor/specialroom/cafeteria, +/area/station/crew_quarters/kitchen) "ftU" = ( /obj/disposalpipe/segment, /turf/simulated/wall/auto/supernorn, @@ -43462,6 +42355,16 @@ /obj/machinery/light/small, /turf/simulated/floor/black, /area/station/ai_monitored/armory) +"fFV" = ( +/obj/cable{ + icon_state = "1-2" + }, +/obj/cable{ + icon_state = "1-8" + }, +/obj/disposalpipe/junction, +/turf/simulated/floor, +/area/station/hallway/primary/east) "fFX" = ( /obj/machinery/space_heater, /obj/machinery/alarm{ @@ -43491,14 +42394,9 @@ }, /turf/simulated/floor/grime, /area/station/storage/hydroponics) -"fIl" = ( -/obj/machinery/light/small{ - dir = 8 - }, -/obj/machinery/atmospherics/unary/portables_connector{ - dir = 4 - }, -/turf/simulated/floor/plating, +"fHo" = ( +/obj/table/auto, +/turf/simulated/floor/black, /area/station/crew_quarters/catering) "fIx" = ( /obj/rack, @@ -43667,6 +42565,11 @@ icon_state = "1-2" }, /obj/mapping_helper/access/security, +/obj/mapping_helper/airlock/cycler{ + cycle_id = "security"; + name = "Security"; + enter_id = "inner" + }, /turf/simulated/floor, /area/station/security/secwing) "fOw" = ( @@ -43836,6 +42739,16 @@ }, /turf/simulated/floor/wood/seven, /area/station/ranch) +"fUp" = ( +/obj/machinery/door/airlock/pyro/glass, +/obj/mapping_helper/firedoor_spawn, +/obj/disposalpipe/segment{ + dir = 1 + }, +/turf/simulated/floor/specialroom/chapel{ + dir = 4 + }, +/area/station/chapel/sanctuary) "fUO" = ( /obj/machinery/door/airlock/pyro/external, /obj/cable{ @@ -43848,6 +42761,10 @@ name = "Door-linked Atmospheric Forcefield"; powerlevel = 1 }, +/obj/mapping_helper/airlock/cycler{ + cycle_id = "eastmaint2"; + name = "East Maintenance" + }, /turf/simulated/floor, /area/station/maintenance/east) "fVm" = ( @@ -43888,6 +42805,11 @@ }, /obj/mapping_helper/access/heads, /obj/mapping_helper/firedoor_spawn, +/obj/mapping_helper/airlock/cycler{ + cycle_id = "bridge"; + name = "Bridge"; + enter_id = "outer" + }, /turf/simulated/floor, /area/station/bridge) "fWA" = ( @@ -44149,6 +43071,11 @@ }, /turf/simulated/floor, /area/station/ai_monitored/armory) +"ghZ" = ( +/turf/simulated/floor/carpet{ + icon_state = "fred2" + }, +/area/station/crew_quarters/cafeteria) "gio" = ( /obj/disposalpipe/segment{ dir = 8; @@ -44183,6 +43110,13 @@ /obj/mapping_helper/firedoor_spawn, /turf/simulated/floor/black, /area/station/medical/crematorium) +"giH" = ( +/obj/disposalpipe/segment{ + dir = 4; + icon_state = "pipe-c" + }, +/turf/simulated/floor, +/area/station/hallway/primary/east) "giI" = ( /obj/machinery/conveyor/EW{ id = "ghostdrone" @@ -44209,18 +43143,6 @@ }, /turf/simulated/floor/white, /area/station/medical/staff) -"gkw" = ( -/obj/machinery/door/airlock/pyro{ - dir = 4; - name = "Catering Storage"; - req_access_txt = null - }, -/obj/mapping_helper/access/bar, -/obj/mapping_helper/access/kitchen, -/obj/mapping_helper/firedoor_spawn, -/obj/decal/stripe_delivery, -/turf/simulated/floor, -/area/station/crew_quarters/catering) "glb" = ( /obj/machinery/door/airlock/pyro/external{ dir = 4 @@ -44235,6 +43157,11 @@ name = "Door-linked Atmospheric Forcefield"; powerlevel = 1 }, +/obj/mapping_helper/airlock/cycler{ + cycle_id = "podbay"; + name = "Pod Bay"; + enter_id = "outer" + }, /turf/simulated/floor/plating, /area/station/hangar/main) "gli" = ( @@ -44343,6 +43270,20 @@ dir = 4 }, /area/station/solar/south) +"goO" = ( +/obj/table/wood/auto, +/obj/item/plate, +/obj/random_item_spawner/tableware/few, +/obj/item/shaker/mustard{ + pixel_x = 3; + pixel_y = 8 + }, +/obj/item/shaker/ketchup{ + pixel_x = 8; + pixel_y = 6 + }, +/turf/simulated/floor/carpet, +/area/station/crew_quarters/cafeteria) "gpc" = ( /obj/machinery/door/window/northright{ name = "Chaplain's Office"; @@ -44395,6 +43336,16 @@ }, /turf/simulated/floor/plating, /area/station/crew_quarters/captain) +"gqP" = ( +/obj/stool/chair/comfy/blue{ + dir = 1 + }, +/obj/disposalpipe/segment{ + dir = 8; + icon_state = "pipe-c" + }, +/turf/simulated/floor/neutral/side, +/area/station/hallway/primary/east) "gra" = ( /obj/machinery/atmospherics/pipe/simple{ dir = 9 @@ -44413,11 +43364,35 @@ /obj/decal/poster/wallsign/hazard_caution, /turf/simulated/floor/plating, /area/station/hallway/primary/south) +"gro" = ( +/obj/cable{ + icon_state = "4-8" + }, +/turf/simulated/floor, +/area/station/hallway/primary/east) "grs" = ( /obj/machinery/door/airlock/pyro/external, /obj/mapping_helper/firedoor_spawn, +/obj/mapping_helper/airlock/cycler{ + cycle_id = "escape"; + name = "Escape"; + enter_id = "main" + }, /turf/simulated/floor, /area/station/hallway/secondary/exit) +"gse" = ( +/obj/cable{ + icon_state = "1-4" + }, +/obj/cable{ + icon_state = "1-2" + }, +/obj/machinery/light_switch{ + name = "W light switch"; + pixel_x = -24 + }, +/turf/simulated/floor/specialroom/chapel, +/area/station/chapel/sanctuary) "gsj" = ( /obj/grille/catwalk{ dir = 6 @@ -44444,6 +43419,19 @@ /obj/landmark/pest, /turf/simulated/floor/carpet/grime, /area/station/security/hos) +"guJ" = ( +/obj/machinery/door_control{ + id = "kitchen"; + name = "Kitchen Shutter Control"; + pixel_x = -24 + }, +/obj/disposalpipe/segment{ + dir = 1; + icon_state = "pipe-c"; + name = "factory pipe" + }, +/turf/simulated/floor/specialroom/cafeteria, +/area/station/crew_quarters/kitchen) "guT" = ( /obj/machinery/door/airlock/pyro/glass, /obj/mapping_helper/firedoor_spawn, @@ -44455,11 +43443,6 @@ }, /turf/unsimulated/wall/auto/adventure/shuttle/dark, /area/listeningpost) -"gvB" = ( -/obj/disposalpipe/segment/mail, -/obj/mapping_helper/wingrille_spawn/auto, -/turf/simulated/floor/plating, -/area/station/chapel/sanctuary) "gwd" = ( /obj/cable/yellow{ icon_state = "2-8" @@ -44506,6 +43489,11 @@ /obj/cable{ icon_state = "4-8" }, +/obj/mapping_helper/airlock/cycler{ + cycle_id = "engairlock"; + name = "Engineering Airlock"; + enter_id = "inner" + }, /turf/simulated/floor, /area/station/hangar/engine) "gzr" = ( @@ -44583,6 +43571,16 @@ dir = 4 }, /area/station/medical/medbay) +"gEZ" = ( +/obj/lattice{ + dir = 10; + icon_state = "lattice-dir-b" + }, +/obj/lattice{ + icon_state = "lattice-dir" + }, +/turf/space, +/area/space) "gFk" = ( /obj/cable{ icon_state = "0-4" @@ -44670,6 +43668,27 @@ /obj/mapping_helper/access/chemistry, /turf/simulated/floor/plating, /area/station/science/lobby) +"gIt" = ( +/obj/cable{ + icon_state = "1-2" + }, +/obj/machinery/door/airlock/pyro/glass{ + name = "Medical Booth"; + req_access_txt = null + }, +/obj/mapping_helper/access/medical, +/obj/mapping_helper/firedoor_spawn, +/turf/simulated/floor/blue/side, +/area/station/medical/medbooth) +"gIU" = ( +/obj/cable{ + icon_state = "1-2" + }, +/obj/disposalpipe/segment/mail, +/turf/simulated/floor/yellow/side{ + dir = 1 + }, +/area/station/storage/emergency) "gJi" = ( /obj/grille/catwalk, /obj/cable/orange{ @@ -44776,7 +43795,7 @@ /area/station/crew_quarters/captain) "gKQ" = ( /obj/rack, -/obj/item/clothing/suit/fire{ +/obj/item/clothing/suit/hazard/fire{ pixel_x = -7 }, /obj/item/clothing/mask/gas/emergency{ @@ -44806,37 +43825,6 @@ }, /turf/simulated/floor, /area/station/storage/primary) -"gLv" = ( -/obj/table/reinforced/bar/auto, -/obj/item/plate{ - pixel_y = 2 - }, -/obj/item/implant/projectile/body_visible/dart/bardart{ - pixel_x = 7; - pixel_y = 5 - }, -/obj/item/implant/projectile/body_visible/dart/bardart{ - pixel_x = -4; - pixel_y = 6 - }, -/obj/item/implant/projectile/body_visible/dart/bardart{ - pixel_x = -9; - pixel_y = 5 - }, -/obj/item/implant/projectile/body_visible/dart/bardart{ - pixel_x = 2; - pixel_y = 6 - }, -/obj/item/implant/projectile/body_visible/dart/bardart{ - pixel_x = -6 - }, -/obj/item/implant/projectile/body_visible/dart/bardart{ - pixel_x = 4 - }, -/turf/simulated/floor/specialroom/bar/edge{ - dir = 1 - }, -/area/station/crew_quarters/cafeteria) "gLK" = ( /obj/decal/tile_edge/stripe/big{ dir = 5; @@ -44846,6 +43834,13 @@ dir = 4 }, /area/station/medical/medbay) +"gMA" = ( +/obj/table/auto, +/obj/item/hand_labeler, +/turf/simulated/floor/plating, +/area/station/hangar/catering{ + name = "Catering Hangar" + }) "gMP" = ( /obj/table/wood/auto/desk{ pixel_y = -2 @@ -44970,6 +43965,10 @@ name = "Door-linked Atmospheric Forcefield"; powerlevel = 1 }, +/obj/mapping_helper/airlock/cycler{ + cycle_id = "medical"; + name = "Medical Storage" + }, /turf/simulated/floor/plating, /area/station/maintenance/storage{ name = "Medical Storage" @@ -45065,15 +44064,6 @@ }, /turf/space, /area/space) -"gZd" = ( -/obj/disposalpipe/segment{ - dir = 4 - }, -/obj/item/device/radio/intercom/engineering, -/turf/simulated/floor/yellow/side{ - dir = 1 - }, -/area/station/hallway/primary/east) "gZl" = ( /obj/machinery/conveyor/NS{ name = "cargo belt - south"; @@ -45323,16 +44313,6 @@ /obj/mapping_helper/wingrille_spawn/auto/reinforced, /turf/simulated/floor/plating, /area/space) -"hka" = ( -/obj/machinery/door/airlock/pyro{ - dir = 4; - name = "Kitchen"; - req_access_txt = null - }, -/obj/mapping_helper/access/kitchen, -/obj/mapping_helper/firedoor_spawn, -/turf/simulated/floor/black, -/area/station/crew_quarters/kitchen) "hlm" = ( /obj/disposalpipe/segment/mail{ dir = 4; @@ -45344,6 +44324,16 @@ /obj/machinery/firealarm/north, /turf/simulated/floor, /area/station/routing/sortingRoom) +"hmq" = ( +/obj/disposalpipe/segment{ + dir = 1; + icon_state = "pipe-c"; + name = "factory pipe" + }, +/turf/simulated/floor/bluewhite{ + dir = 1 + }, +/area/station/crew_quarters/pool) "hmN" = ( /obj/grille/catwalk, /obj/landmark/magnet_shield, @@ -45358,6 +44348,24 @@ icon_state = "catwalk_cross" }, /area/mining/magnet) +"hni" = ( +/obj/decal/cleanable/rust/jen, +/obj/decal/fakeobjects/skeleton/decomposed_corpse{ + icon_state = "body5"; + name = "unfortunate guy" + }, +/obj/item/kitchen/utensil/knife, +/obj/decal/cleanable/blood{ + icon_state = "armorblood_c" + }, +/obj/item/skull{ + pixel_x = 10 + }, +/obj/decal/cleanable/blood{ + icon_state = "drip1a" + }, +/turf/simulated/floor/grey/whitegrime/other, +/area/station/maintenance/northeast) "hnu" = ( /obj/grille/steel, /obj/lattice{ @@ -45370,6 +44378,13 @@ /obj/mapping_helper/wingrille_spawn/auto/reinforced, /turf/simulated/floor/plating, /area/station/hallway/secondary/entry) +"hnG" = ( +/obj/cable{ + icon_state = "1-2" + }, +/obj/disposalpipe/segment/mail, +/turf/simulated/floor/black, +/area/station/crew_quarters/catering) "hoB" = ( /obj/reagent_dispensers/watertank/fountain, /obj/machinery/camera{ @@ -45461,6 +44476,11 @@ name = "Door-linked Atmospheric Forcefield"; powerlevel = 1 }, +/obj/mapping_helper/airlock/cycler{ + cycle_id = "mining1"; + name = "Mining"; + enter_id = "inner" + }, /turf/simulated/floor, /area/station/mining/staff_room) "hqQ" = ( @@ -45506,19 +44526,6 @@ /obj/landmark/start/job/cyborg, /turf/simulated/floor/black, /area/station/medical/robotics) -"htT" = ( -/obj/disposalpipe/segment/produce{ - dir = 4 - }, -/obj/machinery/door/airlock/pyro/glass{ - dir = 4; - name = "Biodome"; - req_access_txt = null - }, -/obj/mapping_helper/access/hydro, -/obj/mapping_helper/firedoor_spawn, -/turf/simulated/floor/green, -/area/station/hydroponics/bay) "huk" = ( /obj/machinery/alarm{ pixel_y = 23 @@ -45608,6 +44615,16 @@ }, /turf/simulated/floor/plating/scorched, /area/station/crew_quarters/clown) +"hxp" = ( +/obj/disposalpipe/segment/mail{ + dir = 4 + }, +/obj/cable{ + icon_state = "4-8" + }, +/obj/cable, +/turf/simulated/floor, +/area/station/hallway/primary/east) "hxx" = ( /obj/item/device/radio/intercom/security{ dir = 1 @@ -45656,6 +44673,9 @@ dir = 2; icon_state = "pipe-c" }, +/obj/cable{ + icon_state = "2-4" + }, /turf/simulated/floor, /area/station/quartermaster/office) "hzu" = ( @@ -46085,6 +45105,14 @@ }, /turf/simulated/floor/black, /area/station/medical/robotics) +"hRG" = ( +/obj/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor, +/area/station/storage/auxillary{ + name = "Tool Storage" + }) "hRQ" = ( /turf/simulated/wall/auto/supernorn, /area/station/engine/power) @@ -46132,6 +45160,16 @@ /obj/mapping_helper/access/medical, /turf/simulated/floor/sanitary/white, /area/station/medical/morgue) +"hUH" = ( +/obj/machinery/door/airlock/pyro/glass{ + name = "Pool" + }, +/obj/mapping_helper/firedoor_spawn, +/obj/disposalpipe/segment, +/turf/simulated/floor/blue/side{ + dir = 0 + }, +/area/station/crew_quarters/pool) "hVg" = ( /obj/window/cubicle{ dir = 1 @@ -46315,6 +45353,39 @@ }, /turf/space, /area/space) +"iaH" = ( +/obj/table/reinforced/bar/auto, +/obj/item/plate{ + pixel_y = 2 + }, +/obj/item/implant/projectile/body_visible/dart/bardart{ + pixel_x = 7; + pixel_y = 5 + }, +/obj/item/implant/projectile/body_visible/dart/bardart{ + pixel_x = -4; + pixel_y = 6 + }, +/obj/item/implant/projectile/body_visible/dart/bardart{ + pixel_x = -9; + pixel_y = 5 + }, +/obj/item/implant/projectile/body_visible/dart/bardart{ + pixel_x = 2; + pixel_y = 6 + }, +/obj/item/implant/projectile/body_visible/dart/bardart{ + pixel_x = -6 + }, +/obj/item/implant/projectile/body_visible/dart/bardart{ + pixel_x = 4 + }, +/obj/item/clothing/head/cakehat, +/turf/simulated/floor/carpet{ + dir = 1; + icon_state = "fred2" + }, +/area/station/crew_quarters/cafeteria) "iaP" = ( /obj/cable{ icon_state = "1-2" @@ -46356,6 +45427,15 @@ /obj/xmastree/ephemeral, /turf/simulated/floor/orangeblack/side, /area/station/hallway/secondary/entry) +"idF" = ( +/obj/machinery/atmospherics/pipe/simple{ + level = 2 + }, +/obj/machinery/atmospherics/pipe/simple{ + dir = 5 + }, +/turf/simulated/floor/plating, +/area/station/crew_quarters/catering) "iel" = ( /obj/grille/catwalk{ dir = 9 @@ -46437,18 +45517,15 @@ /obj/mapping_helper/wingrille_spawn/auto/reinforced, /turf/simulated/floor/plating, /area/station/security/main) -"ihb" = ( -/obj/table/auto, -/obj/item/reagent_containers/food/drinks/milk{ - pixel_x = 8; - pixel_y = 10 +"ihy" = ( +/obj/disposalpipe/segment/produce{ + dir = 4 }, -/obj/item/instrument/bikehorn/dramatic{ - pixel_x = -6; - pixel_y = 10 +/obj/cable{ + icon_state = "4-8" }, -/turf/simulated/floor/specialroom/cafeteria, -/area/station/crew_quarters/kitchen) +/turf/simulated/floor/black, +/area/station/crew_quarters/catering) "ihz" = ( /obj/cable{ icon_state = "1-2" @@ -46473,6 +45550,17 @@ dir = 4 }, /area/station/crew_quarters/supplylobby) +"ihL" = ( +/obj/cable{ + icon_state = "1-8" + }, +/obj/machinery/light, +/obj/stool/chair/comfy/blue{ + dir = 4 + }, +/obj/landmark/pest, +/turf/simulated/floor, +/area/station/hallway/primary/east) "ihP" = ( /obj/disposalpipe/segment/morgue, /obj/lattice{ @@ -46540,6 +45628,11 @@ name = "Bridge" }, /obj/mapping_helper/access/heads, +/obj/mapping_helper/airlock/cycler{ + cycle_id = "bridge"; + name = "Bridge"; + enter_id = "inner" + }, /turf/simulated/floor, /area/station/bridge) "ijw" = ( @@ -46602,6 +45695,18 @@ }, /turf/space, /area/space) +"inc" = ( +/obj/disposalpipe/segment/mail, +/obj/machinery/light{ + dir = 4 + }, +/obj/cable{ + icon_state = "1-2" + }, +/turf/simulated/floor/neutral/side{ + dir = 4 + }, +/area/station/hallway/primary/east) "inz" = ( /obj/disposalpipe/segment{ dir = 4 @@ -46613,6 +45718,17 @@ dir = 8 }, /area/station/engine/coldloop) +"inZ" = ( +/obj/table/wood/auto, +/obj/item/boardgame/chess{ + pixel_y = 4 + }, +/obj/item/card_box/plain{ + pixel_x = 7; + pixel_y = 13 + }, +/turf/simulated/floor/specialroom/bar, +/area/station/crew_quarters/cafeteria) "ioj" = ( /obj/item/storage/toilet{ dir = 4 @@ -46628,6 +45744,10 @@ }, /turf/simulated/floor/black, /area/station/medical/robotics) +"iqk" = ( +/obj/machinery/cargo_router/Router13, +/turf/space, +/area/space) "iqt" = ( /obj/machinery/firealarm/east, /obj/decal/tile_edge/stripe/extra_big{ @@ -46643,6 +45763,10 @@ }, /turf/simulated/floor/carpet, /area/station/chapel/sanctuary) +"iqM" = ( +/obj/landmark/start/job/quartermaster, +/turf/simulated/floor, +/area/station/quartermaster/cargooffice) "ire" = ( /obj/cable{ icon_state = "4-8" @@ -46651,6 +45775,11 @@ icon_state = "L3" }, /area/station/crew_quarters/market) +"isN" = ( +/obj/mapping_helper/wingrille_spawn/auto, +/obj/disposalpipe/segment/mail, +/turf/simulated/floor/plating, +/area/station/chapel/sanctuary) "isQ" = ( /obj/machinery/camera{ c_tag = "autotag"; @@ -46696,6 +45825,10 @@ /obj/landmark/kudzu, /turf/simulated/floor/plating, /area/station/maintenance/east) +"iuu" = ( +/obj/submachine/ATM, +/turf/simulated/wall/auto/reinforced/supernorn, +/area/station/crew_quarters/catering) "ivy" = ( /obj/grille/steel, /obj/lattice{ @@ -46712,6 +45845,10 @@ dir = 8 }, /area/listeningpost) +"iwE" = ( +/obj/storage/secure/closet/engineering/cargo, +/turf/simulated/floor, +/area/station/quartermaster/cargooffice) "iwL" = ( /obj/machinery/conveyor/WE{ id = "enginesupply" @@ -46837,6 +45974,22 @@ /obj/landmark/engine_room, /turf/space, /area/space) +"iCH" = ( +/obj/cable{ + icon_state = "4-8" + }, +/obj/machinery/light, +/obj/item/device/radio/intercom/medical{ + dir = 1 + }, +/obj/disposalpipe/switch_junction{ + dir = 4; + icon_state = "pipe-sj2"; + mail_tag = "kitchen"; + name = "kitchen mail router" + }, +/turf/simulated/floor, +/area/station/hallway/primary/east) "iDj" = ( /obj/machinery/disposal, /obj/disposalpipe/trunk{ @@ -46904,6 +46057,15 @@ }, /turf/simulated/floor, /area/station/engine/ptl) +"iEN" = ( +/obj/cable{ + icon_state = "4-8" + }, +/obj/disposalpipe/segment/mail{ + dir = 4 + }, +/turf/simulated/floor, +/area/station/storage/emergency) "iER" = ( /obj/machinery/conveyor/EW{ name = "cargo belt - west"; @@ -46969,6 +46131,10 @@ /obj/machinery/status_display, /turf/simulated/wall/auto/supernorn, /area/station/crew_quarters/market) +"iJx" = ( +/obj/machinery/firealarm/south, +/turf/simulated/floor, +/area/station/quartermaster/cargooffice) "iJQ" = ( /obj/cable{ icon_state = "0-2" @@ -47012,6 +46178,10 @@ }, /turf/simulated/floor/red/side, /area/station/security/main) +"iNm" = ( +/obj/disposalpipe/segment, +/turf/simulated/floor/black, +/area/station/crew_quarters/cafeteria) "iPj" = ( /obj/machinery/atmospherics/pipe/simple{ dir = 6 @@ -47223,6 +46393,10 @@ }, /turf/simulated/floor, /area/station/engine/engineering) +"iWf" = ( +/obj/mapping_helper/wingrille_spawn/auto/reinforced, +/turf/simulated/floor/plating, +/area/station/quartermaster/cargooffice) "iWk" = ( /obj/cable{ icon_state = "1-2" @@ -47290,6 +46464,19 @@ dir = 1 }, /area/station/science/chemistry) +"iYS" = ( +/obj/disposalpipe/segment/produce{ + dir = 4 + }, +/obj/machinery/door/airlock/pyro/glass{ + dir = 4; + name = "Biodome"; + req_access_txt = null + }, +/obj/mapping_helper/access/hydro, +/obj/mapping_helper/firedoor_spawn, +/turf/simulated/floor/green, +/area/station/hydroponics/lobby) "iZA" = ( /obj/machinery/computer/stockexchange{ dir = 4 @@ -47311,22 +46498,6 @@ dir = 9 }, /area/space) -"jao" = ( -/obj/cable{ - icon_state = "4-8" - }, -/obj/machinery/door/airlock/pyro/glass{ - dir = 4; - name = "Biodome"; - req_access_txt = null - }, -/obj/disposalpipe/segment{ - dir = 4 - }, -/obj/mapping_helper/access/hydro, -/obj/mapping_helper/firedoor_spawn, -/turf/simulated/floor/green, -/area/station/hydroponics/bay) "jaV" = ( /obj/machinery/conveyor/EW{ name = "cargo belt - west"; @@ -47341,6 +46512,14 @@ "jbK" = ( /turf/simulated/wall/auto/reinforced/supernorn, /area/station/hangar/medical) +"jbZ" = ( +/obj/machinery/door/airlock/pyro/maintenance, +/obj/mapping_helper/firedoor_spawn, +/obj/mapping_helper/access/kitchen, +/obj/mapping_helper/access/bar, +/obj/mapping_helper/access/maint, +/turf/simulated/floor/plating, +/area/station/maintenance/northeast) "jcv" = ( /obj/cable/yellow{ icon_state = "0-2" @@ -47434,6 +46613,10 @@ /obj/mapping_helper/wingrille_spawn/auto/reinforced, /turf/simulated/floor/plating, /area/station/maintenance/solar/south) +"jiB" = ( +/obj/table/auto, +/turf/simulated/floor/specialroom/cafeteria, +/area/station/crew_quarters/kitchen) "jiQ" = ( /obj/disposalpipe/segment{ dir = 4 @@ -47494,20 +46677,6 @@ /obj/mapping_helper/wingrille_spawn/auto/reinforced, /turf/simulated/floor/plating, /area/station/medical/dome) -"jli" = ( -/obj/cable{ - icon_state = "1-2" - }, -/obj/disposalpipe/segment/mail{ - dir = 1; - icon_state = "pipe-c" - }, -/obj/machinery/alarm{ - dir = 4; - pixel_x = -15 - }, -/turf/simulated/floor/black, -/area/station/crew_quarters/catering) "jlv" = ( /obj/cable{ icon_state = "0-4" @@ -47621,6 +46790,11 @@ }, /turf/simulated/floor/plating, /area/station/routing/airbridge) +"jrc" = ( +/obj/machinery/vending/kitchen, +/obj/machinery/firealarm/east, +/turf/simulated/floor/specialroom/cafeteria, +/area/station/crew_quarters/kitchen) "jrH" = ( /obj/machinery/atmospherics/pipe/simple/insulated{ dir = 9 @@ -47768,6 +46942,13 @@ "jvO" = ( /turf/simulated/floor/green/side, /area/station/hydroponics/bay) +"jwh" = ( +/obj/landmark/start/job/chef, +/obj/disposalpipe/segment{ + dir = 8 + }, +/turf/simulated/floor/specialroom/cafeteria, +/area/station/crew_quarters/kitchen) "jwL" = ( /obj/cable{ icon_state = "1-2" @@ -47818,6 +46999,36 @@ }, /turf/simulated/floor/plating, /area/listeningpost) +"jAI" = ( +/obj/machinery/light_switch{ + name = "E light switch"; + pixel_x = 24 + }, +/obj/machinery/optable, +/obj/item/suture{ + pixel_x = 6; + pixel_y = 2 + }, +/obj/item/circular_saw{ + pixel_x = 1; + pixel_y = -7 + }, +/obj/item/scalpel{ + pixel_x = 4; + pixel_y = -11 + }, +/obj/item/reagent_containers/iv_drip/blood{ + pixel_x = 2; + pixel_y = 1 + }, +/obj/disposalpipe/segment{ + dir = 4; + icon_state = "pipe-c" + }, +/turf/simulated/floor/bluewhite{ + dir = 4 + }, +/area/station/medical/medbooth) "jBq" = ( /obj/cable{ icon_state = "1-2" @@ -47874,6 +47085,9 @@ dir = 8; pixel_x = -10 }, +/obj/item/storage/toolbox/emergency{ + pixel_y = 8 + }, /turf/simulated/floor, /area/station/quartermaster/office) "jDN" = ( @@ -47940,10 +47154,10 @@ /turf/simulated/floor/plating, /area/station/janitor/supply) "jHW" = ( -/obj/stool/chair{ +/obj/landmark/start/job/scientist, +/obj/stool/chair/purple{ dir = 4 }, -/obj/landmark/start/job/scientist, /turf/simulated/floor/purple/side, /area/station/science/lobby) "jIu" = ( @@ -47975,6 +47189,14 @@ }, /turf/simulated/wall/auto/reinforced/supernorn, /area/station/garden/owlery) +"jJj" = ( +/obj/machinery/light, +/obj/machinery/disposal, +/obj/disposalpipe/trunk{ + dir = 1 + }, +/turf/simulated/floor/specialroom/cafeteria, +/area/station/crew_quarters/kitchen) "jJq" = ( /obj/machinery/firealarm/south, /turf/simulated/floor/grey/side, @@ -47997,6 +47219,27 @@ }, /turf/simulated/floor/plating, /area/station/routing/depot) +"jKa" = ( +/obj/rack, +/obj/item/extinguisher{ + pixel_x = -5; + pixel_y = 1 + }, +/obj/item/wrench{ + pixel_x = -4; + pixel_y = -3 + }, +/obj/item/wrench{ + pixel_x = -1; + pixel_y = -5 + }, +/obj/item/device/light/glowstick{ + pixel_x = 9; + pixel_y = -7 + }, +/obj/decal/stripe_caution, +/turf/simulated/floor, +/area/station/storage/emergency) "jKe" = ( /obj/cable{ icon_state = "1-8" @@ -48008,6 +47251,35 @@ /area/station/hangar/catering{ name = "Catering Hangar" }) +"jKC" = ( +/obj/storage/crate{ + desc = "Wow! Crate may or may not still contain bottles."; + name = "Bottles in a Crate" + }, +/obj/item/reagent_containers/glass/bottle, +/obj/item/reagent_containers/glass/bottle, +/obj/item/reagent_containers/glass/bottle, +/obj/item/reagent_containers/glass/bottle, +/obj/item/reagent_containers/glass/bottle, +/obj/machinery/light{ + dir = 1; + pixel_y = 21 + }, +/obj/item/reagent_containers/food/drinks/bottle/soda, +/obj/item/reagent_containers/food/drinks/bottle/soda, +/obj/item/reagent_containers/food/drinks/bottle/soda, +/obj/item/reagent_containers/food/drinks/bottle/soda, +/obj/item/reagent_containers/food/drinks/bottle/soda, +/obj/item/reagent_containers/food/drinks/milk{ + pixel_x = 8; + pixel_y = 3 + }, +/obj/item/satchel/hydro{ + pixel_x = -7; + pixel_y = 2 + }, +/turf/simulated/floor/black, +/area/station/crew_quarters/catering) "jKQ" = ( /obj/machinery/firealarm/south, /obj/cable{ @@ -48062,6 +47334,13 @@ }, /turf/simulated/floor/red, /area/station/engine/hotloop) +"jNg" = ( +/obj/machinery/vending/monkey/kitchen, +/obj/machinery/light{ + dir = 4 + }, +/turf/simulated/floor/specialroom/cafeteria, +/area/station/crew_quarters/kitchen) "jNJ" = ( /obj/cable{ icon_state = "1-2" @@ -48102,17 +47381,6 @@ dir = 8 }, /area/station/crew_quarters/market) -"jOu" = ( -/obj/storage/cart/hotdog{ - req_access_txt = "28" - }, -/obj/item/reagent_containers/food/snacks/hotdog, -/obj/item/reagent_containers/food/snacks/hotdog, -/obj/item/reagent_containers/food/snacks/hotdog, -/obj/item/reagent_containers/food/snacks/hotdog, -/obj/landmark/pest, -/turf/simulated/floor/black, -/area/station/crew_quarters/catering) "jOD" = ( /obj/mapping_helper/wingrille_spawn/auto/reinforced, /obj/cable/yellow{ @@ -48141,6 +47409,20 @@ /obj/mapping_helper/firedoor_spawn, /turf/simulated/floor/black, /area/station/crew_quarters/captain) +"jPp" = ( +/obj/cable{ + icon_state = "1-2" + }, +/obj/machinery/door/airlock/pyro/maintenance{ + name = "Tool Storage"; + req_access_txt = null + }, +/obj/mapping_helper/firedoor_spawn, +/obj/disposalpipe/segment, +/turf/simulated/floor/yellow, +/area/station/storage/auxillary{ + name = "Tool Storage" + }) "jPI" = ( /obj/machinery/door/airlock/pyro/security{ name = "Arrivals Desk"; @@ -48200,7 +47482,6 @@ /area/station/turret_protected/Zeta) "jRc" = ( /obj/shrub, -/obj/shrub, /turf/simulated/floor/green/side{ dir = 4 }, @@ -48276,6 +47557,15 @@ /obj/machinery/power/data_terminal, /turf/simulated/floor/plating/jen, /area/station/engine/elect) +"jTk" = ( +/obj/noticeboard/persistent{ + name = "Bar persistent notice board"; + persistent_id = "bar"; + pixel_x = 32 + }, +/obj/disposalpipe/segment, +/turf/simulated/floor/black, +/area/station/crew_quarters/cafeteria) "jTA" = ( /obj/cable{ icon_state = "0-4" @@ -48329,6 +47619,20 @@ /obj/disposalpipe/segment/morgue, /turf/simulated/floor/plating, /area/station/maintenance/east) +"jVA" = ( +/obj/table/wood/auto, +/obj/item/plate, +/obj/random_item_spawner/tableware/few, +/obj/item/shaker/salt{ + pixel_x = -12; + pixel_y = 9 + }, +/obj/item/shaker/pepper{ + pixel_x = -7; + pixel_y = 12 + }, +/turf/simulated/floor/carpet, +/area/station/crew_quarters/cafeteria) "jVU" = ( /obj/machinery/conveyor/WE{ name = "cargo belt - east"; @@ -48357,9 +47661,6 @@ /turf/simulated/floor/plating, /area/station/hallway/secondary/construction2) "jXp" = ( -/obj/stool/chair{ - dir = 8 - }, /obj/cable{ icon_state = "1-2" }, @@ -48367,6 +47668,9 @@ pixel_x = 6; pixel_y = -11 }, +/obj/stool/chair/purple{ + dir = 8 + }, /turf/simulated/floor/carpet{ dir = 9; icon_state = "fred5" @@ -48464,6 +47768,24 @@ }, /turf/simulated/floor/plating, /area/station/maintenance/inner/central) +"jZQ" = ( +/obj/machinery/partyalarm{ + dir = 8; + pixel_y = -26 + }, +/obj/disposalpipe/junction{ + dir = 8 + }, +/turf/simulated/floor/black, +/area/station/crew_quarters/cafeteria) +"kap" = ( +/obj/disposalpipe/segment{ + dir = 1; + icon_state = "pipe-c"; + name = "factory pipe" + }, +/turf/simulated/floor, +/area/station/hallway/primary/central) "kaq" = ( /obj/grille/catwalk, /obj/landmark/magnet_shield, @@ -48673,6 +47995,17 @@ /area/station/hangar/catering{ name = "Catering Hangar" }) +"kiL" = ( +/obj/cable{ + icon_state = "1-2" + }, +/obj/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/specialroom/chapel{ + dir = 4 + }, +/area/station/chapel/sanctuary) "kiV" = ( /obj/cable{ icon_state = "4-8" @@ -48739,6 +48072,10 @@ }, /turf/simulated/floor/specialroom/medbay, /area/station/medical/medbay) +"knf" = ( +/obj/mapping_helper/wingrille_spawn/auto, +/turf/simulated/floor/plating, +/area/station/crew_quarters/catering) "knL" = ( /obj/grille/catwalk{ dir = 4 @@ -48756,6 +48093,10 @@ }, /turf/simulated/floor/grime, /area/station/science/lab) +"koE" = ( +/obj/disposalpipe/segment/mail, +/turf/simulated/floor, +/area/station/hallway/primary/east) "koL" = ( /obj/machinery/door/airlock/pyro/external{ dir = 4; @@ -48767,6 +48108,10 @@ /obj/cable/yellow{ icon_state = "4-8" }, +/obj/mapping_helper/airlock/cycler{ + cycle_id = "southsolar"; + name = "South Solar Maintenance" + }, /turf/simulated/floor/plating, /area/station/maintenance/solar/south) "koS" = ( @@ -48853,6 +48198,15 @@ }, /turf/simulated/floor/blue, /area/station/medical/staff) +"kqC" = ( +/obj/machinery/firealarm/east, +/obj/cable{ + icon_state = "1-10" + }, +/turf/simulated/floor/bluewhite{ + dir = 4 + }, +/area/station/medical/medbooth) "kra" = ( /obj/cable{ icon_state = "0-8" @@ -49036,6 +48390,19 @@ dir = 4 }, /area/station/medical/medbay) +"kxF" = ( +/obj/item/swingsignfolded, +/obj/disposalpipe/segment/produce{ + dir = 1; + icon_state = "pipe-c" + }, +/turf/simulated/floor/black, +/area/station/crew_quarters/catering) +"kxP" = ( +/obj/table/auto, +/obj/item/instrument/bikehorn/dramatic, +/turf/simulated/floor/specialroom/cafeteria, +/area/station/crew_quarters/kitchen) "kxW" = ( /obj/machinery/door/airlock/pyro/classic{ dir = 4; @@ -49133,6 +48500,24 @@ }, /turf/simulated/floor, /area/station/engine/engineering) +"kCu" = ( +/obj/table/reinforced/auto, +/obj/machinery/door/poddoor/pyro/shutters{ + density = 0; + dir = 4; + icon_state = "pdoor0"; + id = "kitchen"; + layer = 4; + name = "Kitchen Shutter"; + opacity = 0; + panel_open = 1 + }, +/obj/machinery/door/firedoor/pyro{ + dir = 4 + }, +/obj/item/plate, +/turf/simulated/floor/black, +/area/station/crew_quarters/cafeteria) "kCR" = ( /obj/machinery/light{ dir = 8 @@ -49143,6 +48528,17 @@ /mob/living/critter/small_animal/walrus, /turf/simulated/floor/pool/no_animate, /area/station/crew_quarters/pool) +"kFi" = ( +/obj/machinery/conveyor/EW{ + name = "cargo belt - west"; + operating = 1 + }, +/obj/machinery/conveyor/EW{ + name = "cargo belt - west"; + operating = 1 + }, +/turf/simulated/floor/plating/airless, +/area/space) "kFm" = ( /obj/machinery/door/airlock/pyro/glass{ name = "Robotics"; @@ -49193,10 +48589,10 @@ /turf/simulated/floor/circuit, /area/station/bridge) "kHj" = ( -/obj/stool/chair{ +/obj/landmark/start/job/scientist, +/obj/stool/chair/purple{ dir = 8 }, -/obj/landmark/start/job/scientist, /turf/simulated/floor/purple/side, /area/station/science/lobby) "kIr" = ( @@ -49272,6 +48668,12 @@ dir = 6 }, /area/mining/magnet) +"kLp" = ( +/obj/disposalpipe/segment/mail, +/turf/simulated/floor/specialroom/chapel{ + dir = 8 + }, +/area/station/chapel/sanctuary) "kLE" = ( /obj/machinery/conveyor/NS{ name = "cargo belt - south"; @@ -49392,6 +48794,15 @@ }, /turf/simulated/floor/white, /area/station/medical/staff) +"kRz" = ( +/obj/disposalpipe/segment/mail, +/obj/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/neutral/side{ + dir = 4 + }, +/area/station/hallway/primary/central) "kSE" = ( /obj/machinery/arc_electroplater{ dir = 4 @@ -49402,6 +48813,18 @@ }, /turf/simulated/floor/grime, /area/station/quartermaster/refinery) +"kTD" = ( +/obj/decal/tile_edge/stripe/extra_big{ + dir = 4 + }, +/obj/decal/tile_edge/stripe/corner/extra_big{ + dir = 4 + }, +/obj/cable{ + icon_state = "1-8" + }, +/turf/simulated/floor, +/area/station/quartermaster/office) "kTI" = ( /obj/cable{ icon_state = "1-2" @@ -49418,6 +48841,19 @@ dir = 10 }, /area/space) +"kUg" = ( +/obj/decal/cleanable/rust/jen, +/obj/item/paper{ + pixel_y = 8; + info = "Recip for person guy soup.. 1x guy, some wator, uh.. fuckin... bucket of chiken beaks"; + name = "cool recip by: me" + }, +/obj/item/pen/pencil{ + pixel_y = 4; + pixel_x = -8 + }, +/turf/simulated/floor/grey/whitegrime/other, +/area/station/maintenance/northeast) "kUs" = ( /obj/disposalpipe/segment{ dir = 4 @@ -49431,6 +48867,9 @@ }, /turf/simulated/wall/false_wall, /area/station/maintenance/central) +"kVG" = ( +/turf/simulated/wall/auto/supernorn, +/area/station/maintenance/northeast) "kVJ" = ( /obj/mapping_helper/wingrille_spawn/auto, /turf/simulated/floor/plating, @@ -49606,6 +49045,14 @@ /obj/mapping_helper/wingrille_spawn/auto/reinforced, /turf/simulated/floor/plating, /area/station/bridge) +"lcI" = ( +/obj/machinery/door/unpowered/wood/pyro{ + autoclose = 0; + name = "Confession Booth" + }, +/obj/disposalpipe/segment/mail, +/turf/simulated/floor/black, +/area/station/chapel/sanctuary) "ldd" = ( /obj/cable{ icon_state = "4-8" @@ -49709,6 +49156,12 @@ "lkr" = ( /turf/simulated/floor/darkblue, /area/station/medical/medbay/psychiatrist) +"lkC" = ( +/obj/stool/bar, +/turf/simulated/floor/carpet{ + icon_state = "fred2" + }, +/area/station/crew_quarters/cafeteria) "lkL" = ( /obj/machinery/door/window/northleft{ name = "Chaplain's Office"; @@ -49823,6 +49276,13 @@ }, /turf/simulated/floor/grey, /area/station/engine/inner) +"lqU" = ( +/obj/landmark/pest, +/obj/machinery/atmospherics/pipe/simple{ + dir = 5 + }, +/turf/simulated/floor/plating, +/area/station/crew_quarters/catering) "lrG" = ( /obj/disposalpipe/segment{ dir = 4 @@ -49853,15 +49313,6 @@ /obj/mapping_helper/access/maint, /turf/simulated/floor/plating, /area/station/crew_quarters/quartersB) -"ltq" = ( -/obj/machinery/door/airlock/pyro/glass{ - dir = 4; - name = "Cafeteria" - }, -/obj/mapping_helper/firedoor_spawn, -/obj/decal/stripe_delivery, -/turf/simulated/floor, -/area/station/crew_quarters/cafeteria) "ltz" = ( /obj/machinery/conveyor/WE{ id = "enginesupply" @@ -49896,18 +49347,6 @@ dir = 1 }, /area/station/hallway/primary/east) -"lvC" = ( -/obj/table/auto, -/obj/item/gun/russianrevolver{ - pixel_x = -1; - pixel_y = 15 - }, -/obj/item/storage/firstaid/toxin{ - pixel_x = 12; - pixel_y = 10 - }, -/turf/simulated/floor/carpet/grime, -/area/station/crew_quarters/baroffice) "lvX" = ( /obj/machinery/door/airlock/pyro/glass, /obj/cable{ @@ -49973,6 +49412,12 @@ }, /turf/space, /area/space) +"lAh" = ( +/obj/machinery/light/small{ + dir = 8 + }, +/turf/simulated/floor/plating, +/area/station/crew_quarters/catering) "lAF" = ( /obj/table/auto, /obj/item/dye_bottle, @@ -50018,6 +49463,44 @@ /obj/mapping_helper/access/maint, /turf/simulated/floor/plating, /area/station/maintenance/southwest) +"lBV" = ( +/obj/storage/crate{ + name = "Cone Crate" + }, +/obj/item/reagent_containers/food/snacks/condiment/chocchips{ + pixel_x = 1; + pixel_y = 3 + }, +/obj/item/reagent_containers/food/snacks/ice_cream_cone{ + pixel_x = -9; + pixel_y = 4 + }, +/obj/item/reagent_containers/food/snacks/ice_cream_cone{ + pixel_x = -1; + pixel_y = 4 + }, +/obj/item/reagent_containers/food/snacks/ice_cream_cone{ + pixel_x = 7; + pixel_y = 4 + }, +/obj/item/reagent_containers/food/snacks/ice_cream_cone{ + pixel_x = -10; + pixel_y = 11 + }, +/obj/item/reagent_containers/food/snacks/ice_cream_cone{ + pixel_x = -2; + pixel_y = 11 + }, +/obj/item/reagent_containers/food/snacks/ice_cream_cone{ + pixel_x = 6; + pixel_y = 11 + }, +/obj/item/reagent_containers/food/snacks/condiment/chocchips{ + pixel_x = 1; + pixel_y = 3 + }, +/turf/simulated/floor/plating, +/area/station/crew_quarters/catering) "lDj" = ( /obj/decal/tile_edge/stripe/extra_big, /obj/machinery/light/small{ @@ -50250,6 +49733,11 @@ }, /turf/simulated/floor/plating, /area/station/routing/catering) +"lQi" = ( +/obj/landmark/pest, +/obj/disposalpipe/segment, +/turf/simulated/floor/black, +/area/station/crew_quarters/cafeteria) "lQq" = ( /obj/disposalpipe/segment/mail{ dir = 4 @@ -50293,23 +49781,6 @@ }, /turf/simulated/floor, /area/station/crew_quarters/fitness) -"lSg" = ( -/obj/decal/cleanable/rust/jen, -/obj/decal/fakeobjects/skeleton/decomposed_corpse{ - icon_state = "body5" - }, -/obj/item/kitchen/utensil/knife, -/obj/decal/cleanable/blood{ - icon_state = "armorblood_c" - }, -/obj/item/skull{ - pixel_x = 10 - }, -/obj/decal/cleanable/blood{ - icon_state = "drip1a" - }, -/turf/simulated/floor/grey/whitegrime/other, -/area/station/maintenance/northeast) "lSC" = ( /obj/machinery/alarm{ dir = 8; @@ -50458,10 +49929,6 @@ /obj/cable{ icon_state = "0-2" }, -/obj/machinery/light{ - dir = 1; - pixel_y = 21 - }, /obj/machinery/power/apc/autoname_north, /obj/item/implantcase/counterrev{ pixel_x = 8; @@ -50535,6 +50002,13 @@ dir = 1 }, /area/station/turret_protected/ai_upload_foyer) +"maI" = ( +/obj/disposalpipe/segment/mail, +/turf/simulated/floor/carpet{ + dir = 1; + icon_state = "fred2" + }, +/area/station/chapel/sanctuary) "maK" = ( /obj/decal/tile_edge/stripe/extra_big{ dir = 4 @@ -50542,6 +50016,12 @@ /obj/reagent_dispensers/fueltank, /turf/simulated/floor, /area/station/hangar/engine) +"maL" = ( +/turf/simulated/floor/carpet{ + dir = 6; + icon_state = "fred2" + }, +/area/station/crew_quarters/cafeteria) "mbq" = ( /obj/machinery/conveyor/SN{ name = "cargo belt - north"; @@ -50574,16 +50054,6 @@ /obj/item/bat, /turf/simulated/floor/grime, /area/station/hallway/secondary/construction2) -"mdp" = ( -/obj/machinery/door/airlock/pyro/glass, -/obj/cable{ - icon_state = "1-2" - }, -/obj/mapping_helper/firedoor_spawn, -/turf/simulated/floor/specialroom/chapel{ - dir = 1 - }, -/area/station/chapel/sanctuary) "mdv" = ( /obj/machinery/atmospherics/binary/valve{ desc = "hot radiator inlet valve"; @@ -50616,13 +50086,6 @@ name = "astroturf" }, /area/station/hydroponics/bay) -"meU" = ( -/obj/disposalpipe/segment/mail, -/obj/item/device/radio/intercom/catering{ - dir = 8 - }, -/turf/simulated/floor/black, -/area/station/crew_quarters/catering) "meW" = ( /obj/landmark/pest, /turf/simulated/floor/sanitary, @@ -50635,6 +50098,34 @@ /obj/decal/stripe_caution, /turf/simulated/floor, /area/station/engine/gas) +"mgC" = ( +/obj/rack, +/obj/item/device/analyzer/atmospheric{ + pixel_x = 2 + }, +/obj/item/extinguisher{ + pixel_x = -5; + pixel_y = 1 + }, +/obj/item/storage/toolbox/emergency{ + pixel_x = 5; + pixel_y = -4 + }, +/obj/item/storage/toolbox/emergency{ + pixel_x = 5; + pixel_y = -8 + }, +/obj/item/device/light/flashlight{ + pixel_x = -6; + pixel_y = -4 + }, +/obj/item/device/light/flashlight{ + pixel_x = -1; + pixel_y = -5 + }, +/obj/decal/stripe_caution, +/turf/simulated/floor, +/area/station/storage/emergency) "mhk" = ( /obj/stool, /obj/decal/cleanable/dirt/dirt2, @@ -50807,6 +50298,19 @@ dir = 4 }, /area/station/science/chemistry) +"mpm" = ( +/obj/cable{ + icon_state = "4-8" + }, +/obj/cable{ + icon_state = "2-8" + }, +/obj/disposalpipe/segment/mail{ + dir = 4 + }, +/obj/disposalpipe/segment, +/turf/simulated/floor, +/area/station/hallway/primary/east) "mpv" = ( /obj/machinery/door/airlock/pyro/external{ dir = 4 @@ -50818,6 +50322,11 @@ name = "Door-linked Atmospheric Forcefield"; powerlevel = 1 }, +/obj/mapping_helper/airlock/cycler{ + cycle_id = "escape"; + name = "Escape"; + enter_id = "main" + }, /turf/simulated/floor, /area/station/hallway/secondary/exit) "mpC" = ( @@ -50890,6 +50399,11 @@ "msZ" = ( /obj/machinery/door/airlock/pyro/external, /obj/mapping_helper/firedoor_spawn, +/obj/mapping_helper/airlock/cycler{ + cycle_id = "podbay"; + name = "Pod Bay"; + enter_id = "inner" + }, /turf/simulated/floor/plating, /area/station/hangar/main) "mtb" = ( @@ -50913,6 +50427,11 @@ name = "Door-linked Atmospheric Forcefield"; powerlevel = 1 }, +/obj/mapping_helper/airlock/cycler{ + cycle_id = "aiairbridge"; + name = "AI Airbridge"; + enter_id = "inner" + }, /turf/simulated/floor, /area/station/turret_protected/ai_upload_foyer) "mts" = ( @@ -50955,6 +50474,10 @@ name = "Door-linked Atmospheric Forcefield"; powerlevel = 1 }, +/obj/mapping_helper/airlock/cycler{ + cycle_id = "warehouse"; + name = "Central Warehouse" + }, /turf/simulated/floor, /area/station/storage/warehouse) "muh" = ( @@ -51036,6 +50559,18 @@ /mob/living/critter/small_animal/mouse, /turf/simulated/floor/plating, /area/station/maintenance/southeast) +"mwn" = ( +/obj/cable{ + icon_state = "1-8" + }, +/obj/machinery/camera{ + c_tag = "autotag"; + dir = 10; + name = "autoname - SS13"; + tag = "" + }, +/turf/simulated/floor, +/area/station/quartermaster/cargooffice) "mwJ" = ( /obj/machinery/conveyor/EW{ name = "cargo belt - west"; @@ -51198,8 +50733,17 @@ name = "Door-linked Atmospheric Forcefield"; powerlevel = 1 }, +/obj/mapping_helper/airlock/cycler{ + cycle_id = "westsolar"; + name = "West Solar Maintenance" + }, /turf/simulated/floor/plating, /area/station/maintenance/solar/west) +"mBW" = ( +/obj/table/auto, +/obj/machinery/mixer, +/turf/simulated/floor/specialroom/cafeteria, +/area/station/crew_quarters/kitchen) "mCe" = ( /obj/cable, /obj/storage/crate, @@ -51274,6 +50818,9 @@ }, /turf/simulated/floor/specialroom/cafeteria, /area/station/crew_quarters/barber_shop) +"mEL" = ( +/turf/simulated/wall/auto/supernorn, +/area/station/storage/hydroponics) "mFI" = ( /obj/item/device/radio/beacon, /obj/landmark/pest, @@ -51331,6 +50878,10 @@ name = "Door-linked Atmospheric Forcefield"; powerlevel = 1 }, +/obj/mapping_helper/airlock/cycler{ + cycle_id = "westsolar"; + name = "West Solar Maintenance" + }, /turf/simulated/floor/plating, /area/station/maintenance/solar/west) "mIC" = ( @@ -51344,6 +50895,10 @@ name = "Door-linked Atmospheric Forcefield"; powerlevel = 1 }, +/obj/mapping_helper/airlock/cycler{ + cycle_id = "warehouse"; + name = "Central Warehouse" + }, /turf/simulated/floor, /area/station/storage/warehouse) "mID" = ( @@ -51443,6 +50998,10 @@ name = "Door-linked Atmospheric Forcefield"; powerlevel = 1 }, +/obj/mapping_helper/airlock/cycler{ + cycle_id = "centmaint1"; + name = "Central Maintenance" + }, /turf/simulated/floor/plating, /area/station/maintenance/central) "mNT" = ( @@ -51511,6 +51070,13 @@ }, /turf/simulated/floor/plating, /area/station/crew_quarters/captain) +"mQx" = ( +/obj/disposalpipe/segment{ + dir = 4; + icon_state = "pipe-c" + }, +/turf/simulated/floor/black, +/area/station/crew_quarters/cafeteria) "mRk" = ( /obj/machinery/disposal, /obj/disposalpipe/trunk{ @@ -51554,14 +51120,6 @@ /obj/decal/stripe_delivery, /turf/simulated/floor/white, /area/station/maintenance/central) -"mSt" = ( -/obj/machinery/door/airlock/pyro/maintenance, -/obj/mapping_helper/firedoor_spawn, -/obj/mapping_helper/access/kitchen, -/obj/mapping_helper/access/bar, -/obj/mapping_helper/access/maint, -/turf/simulated/floor/plating, -/area/station/hallway/primary/east) "mSv" = ( /obj/decal/tile_edge/stripe/extra_big{ dir = 6 @@ -51583,6 +51141,17 @@ icon_state = "catwalk_cross" }, /area/station/solar/west) +"mSG" = ( +/obj/cable{ + icon_state = "0-2" + }, +/obj/machinery/power/apc/autoname_west, +/obj/machinery/light{ + dir = 1; + pixel_y = 21 + }, +/turf/simulated/floor, +/area/station/quartermaster/cargooffice) "mSO" = ( /obj/machinery/atmospherics/pipe/simple/insulated{ dir = 10 @@ -51651,6 +51220,11 @@ }, /turf/simulated/floor/grime, /area/space) +"mWd" = ( +/obj/machinery/space_heater, +/obj/decal/stripe_caution, +/turf/simulated/floor, +/area/station/storage/emergency) "mWl" = ( /turf/simulated/floor/black, /area/station/engine/coldloop) @@ -52186,20 +51760,6 @@ }, /turf/simulated/floor, /area/station/engine/power) -"nse" = ( -/obj/machinery/door/airlock/pyro{ - dir = 4; - name = "Hydroponics"; - req_access_txt = null - }, -/obj/mapping_helper/access/hydro, -/obj/mapping_helper/firedoor_spawn, -/obj/cable{ - icon_state = "4-8" - }, -/obj/decal/stripe_delivery, -/turf/simulated/floor, -/area/station/storage/hydroponics) "nsn" = ( /obj/machinery/light{ dir = 4 @@ -52282,6 +51842,13 @@ }, /turf/simulated/floor/shuttlebay, /area/station/hangar/medical) +"nwG" = ( +/obj/disposalpipe/segment/mail{ + dir = 4; + icon_state = "pipe-c" + }, +/turf/simulated/floor/specialroom/chapel, +/area/station/chapel/sanctuary) "nxc" = ( /turf/space, /area/station/turret_protected/armory_outside) @@ -52538,6 +52105,10 @@ name = "Door-linked Atmospheric Forcefield"; powerlevel = 1 }, +/obj/mapping_helper/airlock/cycler{ + cycle_id = "northsolar"; + name = "North Solar Maintenance" + }, /turf/simulated/floor/plating, /area/station/maintenance/solar/north) "nGY" = ( @@ -52633,6 +52204,10 @@ name = "Door-linked Atmospheric Forcefield"; powerlevel = 1 }, +/obj/mapping_helper/airlock/cycler{ + cycle_id = "centmaint2"; + name = "Central Maintenance" + }, /turf/simulated/floor/plating, /area/station/maintenance/central) "nKl" = ( @@ -52666,6 +52241,11 @@ /obj/mapping_helper/firedoor_spawn, /obj/mapping_helper/access/public, /obj/decal/stripe_delivery, +/obj/mapping_helper/airlock/cycler{ + cycle_id = "engineering"; + name = "Engineering"; + enter_id = "outer" + }, /turf/simulated/floor, /area/station/engine/engineering) "nLw" = ( @@ -52679,6 +52259,10 @@ }, /turf/simulated/floor, /area/station/engine/engineering) +"nLX" = ( +/obj/disposalpipe/segment, +/turf/simulated/floor/specialroom/bar, +/area/station/crew_quarters/cafeteria) "nLY" = ( /obj/decal/tile_edge/stripe/extra_big{ dir = 10 @@ -52690,6 +52274,16 @@ /obj/machinery/light, /turf/simulated/floor/yellow/side, /area/station/storage/primary) +"nNK" = ( +/obj/disposalpipe/segment/produce{ + dir = 2; + icon_state = "pipe-c" + }, +/obj/cable{ + icon_state = "4-8" + }, +/turf/simulated/floor/black, +/area/station/crew_quarters/catering) "nNT" = ( /obj/cable{ icon_state = "2-4" @@ -52740,13 +52334,11 @@ /obj/decal/stripe_caution, /turf/simulated/floor, /area/station/engine/gas) -"nPW" = ( -/obj/machinery/door/airlock/pyro/glass, -/obj/mapping_helper/firedoor_spawn, -/turf/simulated/floor/specialroom/chapel{ - dir = 4 - }, -/area/station/chapel/sanctuary) +"nQn" = ( +/obj/storage/secure/closet/fridge/kitchen, +/obj/disposalpipe/segment/mail, +/turf/simulated/floor/specialroom/cafeteria, +/area/station/crew_quarters/kitchen) "nQR" = ( /obj/cable{ icon_state = "1-2" @@ -52842,6 +52434,17 @@ }, /turf/simulated/floor, /area/station/engine/elect) +"nTf" = ( +/obj/window/reinforced{ + dir = 2 + }, +/obj/machinery/light/emergency{ + dir = 4 + }, +/turf/simulated/floor/specialroom/chapel{ + dir = 4 + }, +/area/station/chapel/sanctuary) "nUq" = ( /obj/storage/crate/freezer{ anchored = 1 @@ -52857,6 +52460,13 @@ dir = 1 }, /area/station/crew_quarters/quarters) +"nVD" = ( +/obj/disposalpipe/junction{ + dir = 4; + icon_state = "pipe-j2" + }, +/turf/simulated/floor/specialroom/bar, +/area/station/crew_quarters/cafeteria) "nVE" = ( /obj/machinery/door/airlock/pyro/maintenance{ dir = 4 @@ -53015,6 +52625,13 @@ }, /turf/simulated/floor/wood/seven, /area/station/ranch) +"ocr" = ( +/obj/machinery/navbeacon{ + codes_txt = "delivery;dir=1"; + location = "Catering" + }, +/turf/simulated/floor/black, +/area/station/crew_quarters/catering) "oct" = ( /turf/unsimulated/wall/auto/adventure/shuttle/dark, /area/abandonedship) @@ -53059,6 +52676,18 @@ /obj/disposalpipe/segment/mail, /turf/simulated/floor/plating, /area/station/science/testchamber) +"ofw" = ( +/obj/disposalpipe/segment/mail{ + dir = 4 + }, +/obj/cable{ + icon_state = "4-8" + }, +/obj/disposalpipe/segment{ + dir = 1 + }, +/turf/simulated/floor/neutral/side, +/area/station/hallway/primary/east) "ofy" = ( /obj/table/auto, /obj/item/storage/box/evidence{ @@ -53087,6 +52716,16 @@ }, /turf/simulated/floor/plating/airless, /area/space) +"ofY" = ( +/obj/table/wood/auto, +/obj/item/plate, +/obj/random_item_spawner/tableware/few, +/obj/item/reagent_containers/food/drinks/bowl, +/turf/simulated/floor/carpet{ + dir = 1; + icon_state = "fred2" + }, +/area/station/crew_quarters/cafeteria) "ogb" = ( /obj/machinery/door/window/northleft{ req_access_txt = null @@ -53104,6 +52743,11 @@ /obj/mapping_helper/firedoor_spawn, /obj/mapping_helper/access/public, /obj/decal/stripe_delivery, +/obj/mapping_helper/airlock/cycler{ + cycle_id = "engineering"; + name = "Engineering"; + enter_id = "outer" + }, /turf/simulated/floor, /area/station/engine/engineering) "ogJ" = ( @@ -53301,6 +52945,21 @@ }, /turf/simulated/floor/circuit, /area/station/turret_protected/ai) +"onv" = ( +/obj/disposalpipe/segment, +/obj/cable{ + icon_state = "1-2" + }, +/obj/machinery/door/airlock/pyro{ + name = "Catering Storage"; + req_access_txt = null + }, +/obj/mapping_helper/access/bar, +/obj/mapping_helper/access/kitchen, +/obj/mapping_helper/firedoor_spawn, +/obj/disposalpipe/segment/mail, +/turf/simulated/floor/black, +/area/station/storage/emergency) "onF" = ( /obj/machinery/conveyor/EW{ operating = 1 @@ -53434,6 +53093,14 @@ icon_state = "catwalk_cross" }, /area/station/solar/north) +"otx" = ( +/obj/disposalpipe/switch_junction{ + desc = "An underfloor mail pipe."; + mail_tag = "chapel"; + name = "chapel mail router" + }, +/turf/simulated/floor/specialroom/chapel, +/area/station/chapel/sanctuary) "ouQ" = ( /obj/cable{ icon_state = "1-2" @@ -53532,15 +53199,6 @@ }, /turf/simulated/floor, /area/station/hydroponics/bay) -"oyV" = ( -/obj/machinery/door/airlock/pyro{ - name = "Kitchen"; - req_access_txt = null - }, -/obj/mapping_helper/access/kitchen, -/obj/mapping_helper/firedoor_spawn, -/turf/simulated/floor/specialroom/cafeteria, -/area/station/crew_quarters/cafeteria) "ozn" = ( /obj/cable{ icon_state = "2-8" @@ -53712,6 +53370,16 @@ dir = 9 }, /area/station/medical/staff) +"oIq" = ( +/obj/cable{ + icon_state = "1-2" + }, +/obj/disposalpipe/segment/mail, +/obj/cable{ + icon_state = "2-4" + }, +/turf/simulated/floor/black, +/area/station/crew_quarters/catering) "oIC" = ( /obj/disposalpipe/segment, /obj/cable{ @@ -53910,23 +53578,31 @@ name = "astroturf" }, /area/station/hydroponics/bay) -"oQU" = ( -/obj/mapping_helper/wingrille_spawn/auto, -/turf/simulated/floor/plating, -/area/station/crew_quarters/arcade) -"oSf" = ( +"oQT" = ( /obj/disposalpipe/segment{ dir = 4 }, -/obj/machinery/firealarm/north, -/obj/machinery/vending/medical_public, -/obj/machinery/light/emergency{ +/turf/simulated/floor/specialroom/chapel{ dir = 8 }, -/turf/simulated/floor/yellow/side{ - dir = 1 +/area/station/chapel/sanctuary) +"oQU" = ( +/obj/mapping_helper/wingrille_spawn/auto, +/turf/simulated/floor/plating, +/area/station/crew_quarters/arcade) +"oRT" = ( +/obj/cable{ + icon_state = "1-2" }, -/area/station/hallway/primary/east) +/obj/landmark/gps_waypoint, +/obj/disposalpipe/segment{ + dir = 2; + icon_state = "pipe-c" + }, +/turf/simulated/floor, +/area/station/storage/auxillary{ + name = "Tool Storage" + }) "oSg" = ( /obj/machinery/door/poddoor/pyro/shutters{ density = 0; @@ -53947,6 +53623,17 @@ /obj/mapping_helper/wingrille_spawn/auto/reinforced, /turf/simulated/floor/plating, /area/station/science/chemistry) +"oSp" = ( +/obj/cable{ + icon_state = "1-2" + }, +/obj/machinery/light{ + dir = 8; + tag = "" + }, +/obj/disposalpipe/segment/mail, +/turf/simulated/floor/black, +/area/station/crew_quarters/catering) "oSX" = ( /obj/cable/orange, /obj/cable/orange{ @@ -53999,6 +53686,16 @@ }, /turf/simulated/floor/white, /area/station/medical/medbay/treatment) +"oUX" = ( +/obj/storage/cart, +/obj/machinery/camera{ + c_tag = "autotag"; + dir = 4; + name = "autoname - SS13"; + tag = "" + }, +/turf/simulated/floor/grime, +/area/station/storage/hydroponics) "oUZ" = ( /obj/disposalpipe/segment{ dir = 2; @@ -54234,6 +53931,22 @@ }, /turf/simulated/floor/plating/airless, /area/station/science/lab) +"paF" = ( +/obj/cable{ + icon_state = "4-8" + }, +/obj/machinery/door/airlock/pyro/glass{ + dir = 4; + name = "Biodome"; + req_access_txt = null + }, +/obj/disposalpipe/segment{ + dir = 4 + }, +/obj/mapping_helper/access/hydro, +/obj/mapping_helper/firedoor_spawn, +/turf/simulated/floor/green, +/area/station/hydroponics/lobby) "pbj" = ( /obj/machinery/firealarm/east, /obj/machinery/fluid_canister, @@ -54316,6 +54029,15 @@ }, /turf/simulated/floor, /area/station/crew_quarters/market) +"pgo" = ( +/obj/disposalpipe/segment/mail{ + dir = 4 + }, +/obj/cable{ + icon_state = "4-8" + }, +/turf/simulated/floor, +/area/station/hallway/primary/east) "pgN" = ( /obj/cable{ icon_state = "4-8" @@ -54485,6 +54207,14 @@ "pjG" = ( /turf/simulated/floor/grime, /area/station/storage/hydroponics) +"pky" = ( +/obj/disposalpipe/segment{ + dir = 2; + icon_state = "pipe-c"; + name = "factory pipe" + }, +/turf/simulated/floor/specialroom/cafeteria, +/area/station/crew_quarters/kitchen) "pkH" = ( /obj/machinery/disposal/mail/small/autoname/mechanics/south, /obj/disposalpipe/trunk/mail{ @@ -54620,6 +54350,23 @@ }, /turf/space, /area/space) +"pqX" = ( +/obj/machinery/door/airlock/pyro/glass/mining, +/obj/mapping_helper/firedoor_spawn, +/obj/mapping_helper/access/cargo, +/turf/simulated/floor/plating, +/area/station/quartermaster/cargooffice) +"prm" = ( +/turf/space, +/area/station/maintenance/northeast) +"prD" = ( +/obj/landmark/pest, +/obj/disposalpipe/segment{ + dir = 4; + icon_state = "pipe-c" + }, +/turf/simulated/floor/specialroom/cafeteria, +/area/station/crew_quarters/kitchen) "prW" = ( /obj/stool/chair{ dir = 8 @@ -54669,6 +54416,18 @@ icon_state = "fred6" }, /area/station/crew_quarters/captain) +"pwI" = ( +/obj/disposalpipe/segment/mail{ + dir = 4 + }, +/obj/cable{ + icon_state = "4-8" + }, +/obj/disposalpipe/segment{ + dir = 1 + }, +/turf/simulated/floor, +/area/station/hallway/primary/east) "pwM" = ( /obj/machinery/atmospherics/pipe/simple/insulated, /obj/cable{ @@ -54693,52 +54452,13 @@ /turf/simulated/floor/plating, /area/station/science/chemistry) "pxF" = ( -/obj/storage/crate{ - desc = "Whoa! What will they think of next?"; - name = "Boxes in a Box" - }, -/obj/item/storage/box{ - pixel_x = -7; - pixel_y = 8 - }, -/obj/item/storage/box{ - pixel_x = 1; - pixel_y = 8 - }, -/obj/item/storage/box{ - pixel_x = 9; - pixel_y = 8 - }, -/obj/item/storage/box{ - pixel_x = -8; - pixel_y = 5 - }, -/obj/item/storage/box{ - pixel_y = 5 - }, -/obj/item/storage/box{ - pixel_x = 8; - pixel_y = 5 - }, -/obj/item/storage/box{ - pixel_x = -9; - pixel_y = 2 - }, -/obj/item/storage/box{ - pixel_x = -2; - pixel_y = 2 - }, -/obj/item/storage/box{ - pixel_x = 7; - pixel_y = 2 - }, -/obj/item/storage/box{ - pixel_y = -1 - }, /obj/item/device/radio/intercom/cargo{ dir = 8 }, /obj/decal/stripe_caution, +/obj/cable{ + icon_state = "1-2" + }, /turf/simulated/floor, /area/station/quartermaster/office) "pxW" = ( @@ -54782,6 +54502,10 @@ }, /turf/simulated/floor/grass/leafy, /area/station/ranch) +"pze" = ( +/obj/shrub, +/turf/simulated/floor, +/area/station/hallway/primary/east) "pzD" = ( /obj/disposalpipe/junction{ dir = 4; @@ -55090,6 +54814,14 @@ /obj/disposalpipe/segment, /turf/simulated/floor, /area/station/hallway/primary/south) +"pOR" = ( +/obj/machinery/drainage, +/obj/disposalpipe/chicken_disposal_pipe/horizontal, +/obj/cable{ + icon_state = "4-8" + }, +/turf/simulated/floor/black, +/area/station/crew_quarters/catering) "pPk" = ( /obj/machinery/light/small, /obj/cable{ @@ -55129,17 +54861,20 @@ icon_state = "red2" }, /area/station/security/main) -"pRa" = ( -/obj/table/wood/auto, -/obj/item/boardgame/chess{ - pixel_y = 4 - }, -/turf/simulated/floor/specialroom/bar, -/area/station/crew_quarters/cafeteria) "pSF" = ( /obj/machinery/atmospherics/pipe/simple, /turf/simulated/floor, /area/station/security/main) +"pSG" = ( +/obj/cable{ + icon_state = "1-2" + }, +/obj/disposalpipe/segment/mail{ + dir = 2; + icon_state = "pipe-c" + }, +/turf/simulated/floor/black, +/area/station/crew_quarters/catering) "pTb" = ( /turf/simulated/floor, /area/station/storage/primary) @@ -55235,6 +54970,13 @@ /obj/mapping_helper/firedoor_spawn, /turf/simulated/floor/plating, /area/station/medical/research) +"pVn" = ( +/obj/landmark/pest, +/obj/disposalpipe/segment/produce{ + dir = 4 + }, +/turf/simulated/floor/black, +/area/station/crew_quarters/catering) "pVp" = ( /obj/disposalpipe/segment{ dir = 4 @@ -55252,6 +54994,10 @@ name = "Door-linked Atmospheric Forcefield"; powerlevel = 1 }, +/obj/mapping_helper/airlock/cycler{ + cycle_id = "eastmaint1"; + name = "East Maintenance" + }, /turf/simulated/floor/plating, /area/station/maintenance/east) "pVw" = ( @@ -55765,6 +55511,16 @@ }, /turf/simulated/floor/yellow, /area/station/engine/gas) +"quR" = ( +/obj/cable{ + icon_state = "1-8" + }, +/obj/cable{ + icon_state = "1-2" + }, +/obj/disposalpipe/segment/mail, +/turf/simulated/floor/black, +/area/station/crew_quarters/catering) "qva" = ( /obj/machinery/door/poddoor/pyro/shutters{ density = 0; @@ -55795,6 +55551,10 @@ /obj/cable/yellow, /turf/simulated/floor/airless/solar, /area/station/solar/south) +"qvD" = ( +/obj/disposalpipe/segment/mail, +/turf/simulated/floor/yellow/side, +/area/station/storage/emergency) "qvN" = ( /obj/cable/orange{ icon_state = "4-8" @@ -55839,26 +55599,27 @@ }, /turf/simulated/floor/wood/two, /area/station/medical/staff) -"qwG" = ( -/obj/table/reinforced/auto, -/obj/machinery/door/poddoor/pyro/shutters{ - density = 0; - dir = 4; - icon_state = "pdoor0"; - id = "kitchen"; - layer = 4; - name = "Kitchen Shutter"; - opacity = 0; - panel_open = 1 +"qwS" = ( +/obj/machinery/light{ + dir = 4 }, -/obj/item/plate, -/obj/item/reagent_containers/food/snacks/cake/chocolate/gateau{ +/obj/table/reinforced/bar/auto, +/obj/item_dispenser/icedispenser{ + dir = 8; + pixel_x = 19; pixel_y = 8 }, -/obj/machinery/door/firedoor/pyro{ - dir = 4 +/obj/item/shaker/pepper{ + pixel_x = -9; + pixel_y = 10 + }, +/obj/item/shaker/salt{ + pixel_x = -5; + pixel_y = 8 + }, +/turf/simulated/floor/specialroom/bar/edge{ + dir = 8 }, -/turf/simulated/floor/black, /area/station/crew_quarters/cafeteria) "qxk" = ( /obj/cable{ @@ -56048,6 +55809,20 @@ }, /turf/simulated/floor/airless/plating/catwalk, /area/station/solar/north) +"qAO" = ( +/obj/machinery/door/airlock/pyro/external, +/obj/forcefield/energyshield/perma/doorlink{ + desc = "A door-linked force field that prevents gasses from passing through it."; + name = "Door-linked Atmospheric Forcefield"; + powerlevel = 1 + }, +/obj/mapping_helper/airlock/cycler{ + cycle_id = "escape"; + name = "Escape"; + enter_id = "outer" + }, +/turf/simulated/floor, +/area/station/hallway/secondary/exit) "qBh" = ( /obj/mapping_helper/wingrille_spawn/auto/reinforced, /obj/cable/yellow{ @@ -56102,6 +55877,20 @@ /obj/mapping_helper/firedoor_spawn, /turf/simulated/floor/sanitary/white, /area/station/medical/morgue) +"qDc" = ( +/obj/machinery/camera{ + c_tag = "autotag"; + dir = 6; + name = "autoname - SS13"; + tag = "" + }, +/obj/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/yellow/side{ + dir = 1 + }, +/area/station/hallway/primary/east) "qDf" = ( /obj/cable{ icon_state = "0-8" @@ -56116,6 +55905,17 @@ }, /turf/simulated/floor/plating, /area/station/crew_quarters/heads) +"qDq" = ( +/obj/cable{ + icon_state = "4-8" + }, +/obj/disposalpipe/segment{ + dir = 1 + }, +/turf/simulated/floor/specialroom/chapel{ + dir = 8 + }, +/area/station/chapel/sanctuary) "qDB" = ( /obj/machinery/atmospherics/binary/valve{ dir = 4 @@ -56330,10 +56130,6 @@ /obj/machinery/firealarm/east, /turf/simulated/floor/grime, /area/station/hallway/primary/east) -"qKa" = ( -/obj/landmark/pest, -/turf/simulated/floor/specialroom/cafeteria, -/area/station/crew_quarters/kitchen) "qKl" = ( /obj/cable{ icon_state = "0-8" @@ -56342,6 +56138,17 @@ /obj/mapping_helper/wingrille_spawn/auto/reinforced, /turf/simulated/floor/plating, /area/station/security/brig) +"qKo" = ( +/obj/table/reinforced/bar/auto, +/obj/machinery/phone, +/obj/item/decoration/ashtray{ + pixel_x = 9; + pixel_y = -3 + }, +/turf/simulated/floor/specialroom/bar/edge{ + dir = 4 + }, +/area/station/crew_quarters/cafeteria) "qKH" = ( /obj/cable{ icon_state = "0-2" @@ -56489,6 +56296,16 @@ /obj/item/reagent_containers/hypospray, /turf/simulated/floor/specialroom/medbay, /area/station/medical/head) +"qPC" = ( +/obj/item/device/radio/intercom/engineering, +/obj/disposalpipe/segment{ + dir = 4; + icon_state = "pipe-c" + }, +/turf/simulated/floor/yellow/side{ + dir = 1 + }, +/area/station/hallway/primary/east) "qQi" = ( /obj/cable{ icon_state = "4-8" @@ -56580,6 +56397,19 @@ dir = 4 }, /area/station/medical/staff) +"qSz" = ( +/obj/cable{ + icon_state = "1-2" + }, +/obj/machinery/light{ + dir = 8; + tag = "" + }, +/obj/cable{ + icon_state = "2-4" + }, +/turf/simulated/floor/black, +/area/station/crew_quarters/catering) "qTy" = ( /obj/machinery/mass_driver{ dir = 4; @@ -56650,31 +56480,6 @@ /obj/item/storage/toolbox/mechanical, /turf/simulated/floor, /area/station/hangar/engine) -"qVo" = ( -/obj/storage/crate{ - desc = "Wow! Crate may or may not still contain bottles."; - name = "Bottles in a Crate" - }, -/obj/item/reagent_containers/glass/bottle, -/obj/item/reagent_containers/glass/bottle, -/obj/item/reagent_containers/glass/bottle, -/obj/item/reagent_containers/glass/bottle, -/obj/item/reagent_containers/glass/bottle, -/obj/machinery/light{ - dir = 1; - pixel_y = 21 - }, -/obj/item/reagent_containers/food/drinks/bottle/soda, -/obj/item/reagent_containers/food/drinks/bottle/soda, -/obj/item/reagent_containers/food/drinks/bottle/soda, -/obj/item/reagent_containers/food/drinks/bottle/soda, -/obj/item/reagent_containers/food/drinks/bottle/soda, -/obj/item/reagent_containers/food/drinks/milk{ - pixel_x = 8; - pixel_y = 3 - }, -/turf/simulated/floor/black, -/area/station/crew_quarters/catering) "qWh" = ( /obj/cable{ icon_state = "1-2" @@ -56758,6 +56563,11 @@ name = "Door-linked Atmospheric Forcefield"; powerlevel = 1 }, +/obj/mapping_helper/airlock/cycler{ + cycle_id = "aiairbridge"; + name = "AI Airbridge"; + enter_id = "outer" + }, /turf/simulated/floor, /area/station/crew_quarters/market) "qZf" = ( @@ -56799,6 +56609,11 @@ }, /turf/simulated/floor, /area/station/engine/engineering) +"rdX" = ( +/obj/storage/closet/fire, +/obj/decal/stripe_delivery, +/turf/simulated/floor, +/area/station/ranch) "rea" = ( /obj/mapping_helper/wingrille_spawn/auto/reinforced, /obj/window_blinds/cog2/middle, @@ -56993,13 +56808,6 @@ dir = 8 }, /area/station/ranch) -"rrB" = ( -/obj/landmark/pest, -/obj/stool/chair/comfy/blue{ - dir = 4 - }, -/turf/simulated/floor, -/area/station/hallway/primary/east) "rrI" = ( /obj/cable{ icon_state = "1-2" @@ -57023,6 +56831,16 @@ }, /turf/simulated/floor/plating, /area/station/maintenance/solar/south) +"rsy" = ( +/obj/machinery/door/airlock/pyro/external, +/obj/mapping_helper/firedoor_spawn, +/obj/mapping_helper/airlock/cycler{ + cycle_id = "escape2"; + name = "Escape"; + enter_id = "main" + }, +/turf/simulated/floor, +/area/station/hallway/secondary/exit) "rsK" = ( /obj/disposalpipe/segment, /obj/cable{ @@ -57090,6 +56908,18 @@ /obj/decal/stripe_caution, /turf/simulated/floor, /area/station/security/main) +"rxL" = ( +/obj/table/auto, +/obj/item/storage/box/cutlery{ + pixel_x = 10; + pixel_y = 12 + }, +/obj/item/storage/box/popsicle_sticks{ + pixel_y = 12; + pixel_x = -1 + }, +/turf/simulated/floor/black, +/area/station/crew_quarters/catering) "ryf" = ( /obj/machinery/atmospherics/binary/valve{ dir = 4 @@ -57316,6 +57146,10 @@ name = "Door-linked Atmospheric Forcefield"; powerlevel = 1 }, +/obj/mapping_helper/airlock/cycler{ + cycle_id = "centmaint2"; + name = "Central Maintenance" + }, /turf/simulated/floor/plating, /area/station/maintenance/central) "rGl" = ( @@ -57397,18 +57231,6 @@ }, /turf/simulated/floor/carpet/arcade, /area/station/crew_quarters/captain) -"rJe" = ( -/obj/cable{ - icon_state = "4-8" - }, -/obj/disposalpipe/switch_junction{ - dir = 4; - icon_state = "pipe-sj2"; - mail_tag = "hydroponics"; - name = "hydroponics mail router" - }, -/turf/simulated/floor, -/area/station/hallway/primary/east) "rJL" = ( /obj/machinery/atmospherics/unary/cold_sink/freezer/cryo{ dir = 1 @@ -57478,6 +57300,19 @@ "rMr" = ( /turf/simulated/wall/auto/reinforced/supernorn, /area/station/crew_quarters/pool) +"rMG" = ( +/obj/cable{ + icon_state = "4-8" + }, +/obj/machinery/door/airlock/pyro{ + dir = 4; + name = "Hydroponics"; + req_access_txt = null + }, +/obj/mapping_helper/firedoor_spawn, +/obj/mapping_helper/access/hydro, +/turf/simulated/floor, +/area/station/storage/hydroponics) "rNh" = ( /obj/monkeyplant, /turf/simulated/floor/blue/checker, @@ -57612,6 +57447,11 @@ name = "Door-linked Atmospheric Forcefield"; powerlevel = 1 }, +/obj/mapping_helper/airlock/cycler{ + cycle_id = "escape2"; + name = "Escape"; + enter_id = "outer" + }, /turf/simulated/floor, /area/station/hallway/secondary/exit) "rRu" = ( @@ -57742,6 +57582,17 @@ /obj/disposalpipe/segment, /turf/simulated/floor/black, /area/station/turret_protected/Zeta) +"rYi" = ( +/obj/decal/stripe_caution, +/obj/cable{ + icon_state = "2-4" + }, +/obj/machinery/light{ + dir = 1; + pixel_y = 21 + }, +/turf/simulated/floor, +/area/station/quartermaster/office) "rYo" = ( /obj/machinery/door/airlock/pyro/glass, /obj/disposalpipe/segment, @@ -57813,6 +57664,14 @@ /obj/mapping_helper/wingrille_spawn/auto/reinforced, /turf/simulated/floor/plating, /area/station/science/chemistry) +"rZI" = ( +/obj/disposalpipe/segment/mail, +/obj/machinery/navbeacon/guardbot_buddytime, +/obj/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/specialroom/bar, +/area/station/crew_quarters/cafeteria) "sao" = ( /obj/table/wood/auto, /obj/machinery/atmospherics/pipe/simple/insulated/cold{ @@ -58049,11 +57908,6 @@ }, /turf/simulated/floor/grime, /area/station/routing/depot) -"shc" = ( -/obj/machinery/drainage, -/obj/disposalpipe/chicken_disposal_pipe/horizontal, -/turf/simulated/floor/black, -/area/station/crew_quarters/catering) "shp" = ( /obj/table/auto, /obj/cable{ @@ -58083,6 +57937,10 @@ dir = 8 }, /area/station/security/main) +"shL" = ( +/obj/machinery/vending/cards, +/turf/simulated/floor/neutral/side, +/area/station/hallway/primary/east) "siu" = ( /obj/landmark/start/job/miner, /turf/simulated/floor, @@ -58098,6 +57956,11 @@ name = "Door-linked Atmospheric Forcefield"; powerlevel = 1 }, +/obj/mapping_helper/airlock/cycler{ + cycle_id = "mining1"; + name = "Mining"; + enter_id = "outer" + }, /turf/simulated/floor, /area/station/mining/staff_room) "sjH" = ( @@ -58111,19 +57974,6 @@ }, /turf/simulated/floor, /area/station/quartermaster/office) -"sjN" = ( -/obj/machinery/disposal, -/obj/disposalpipe/trunk, -/obj/machinery/alarm{ - dir = 4; - pixel_x = -15 - }, -/turf/simulated/floor/yellow/side{ - dir = 8 - }, -/area/station/storage/auxillary{ - name = "Tool Storage" - }) "skm" = ( /obj/machinery/door/airlock/pyro/glass{ dir = 4; @@ -58135,6 +57985,10 @@ /obj/decal/stripe_delivery, /turf/simulated/floor, /area/station/medical/medbay/surgery) +"skn" = ( +/obj/machinery/vending/capsule, +/turf/simulated/floor/neutral/side, +/area/station/hallway/primary/east) "skM" = ( /obj/decal/cleanable/oil/streak, /obj/decal/cleanable/generic, @@ -58154,6 +58008,9 @@ }, /turf/simulated/floor/carpet/grime, /area/station/security/hos) +"smf" = ( +/turf/simulated/wall/auto/reinforced/supernorn, +/area/station/quartermaster/cargooffice) "smq" = ( /obj/machinery/vehicle/escape_pod, /turf/simulated/floor/shuttlebay, @@ -58229,19 +58086,15 @@ /obj/landmark/start/job/chef, /turf/simulated/floor/specialroom/cafeteria, /area/station/crew_quarters/kitchen) -"spW" = ( -/obj/table/auto, -/obj/landmark/pest, -/obj/machinery/phone{ - pixel_x = 7; - pixel_y = 6 - }, -/obj/item/satchel/hydro{ - pixel_x = -4; - pixel_y = 2 +"srb" = ( +/obj/table/wood/auto, +/obj/item/plate, +/obj/random_item_spawner/tableware/few, +/turf/simulated/floor/carpet{ + dir = 1; + icon_state = "fred2" }, -/turf/simulated/floor/specialroom/cafeteria, -/area/station/crew_quarters/kitchen) +/area/station/crew_quarters/cafeteria) "srd" = ( /obj/cable{ icon_state = "2-8" @@ -58302,6 +58155,18 @@ /obj/machinery/turret, /turf/simulated/floor/blue, /area/station/turret_protected/ai_upload) +"ssn" = ( +/obj/table/auto, +/obj/item/plate, +/obj/item/reagent_containers/food/snacks/breadloaf{ + pixel_y = 5 + }, +/obj/item/kitchen/utensil/knife{ + pixel_x = 9; + pixel_y = 2 + }, +/turf/simulated/floor/specialroom/cafeteria, +/area/station/crew_quarters/kitchen) "ssr" = ( /obj/machinery/door/airlock/pyro/medical{ name = "Science Hangar"; @@ -58421,6 +58286,12 @@ /obj/decal/stripe_delivery, /turf/simulated/floor, /area/station/security/hos) +"svQ" = ( +/obj/machinery/computer3/generic/personal, +/obj/table/auto, +/obj/machinery/power/data_terminal, +/turf/simulated/floor/black, +/area/station/crew_quarters/catering) "svZ" = ( /turf/simulated/floor/stairs{ icon_state = "Stairs_wide" @@ -58451,6 +58322,19 @@ /obj/decal/stripe_delivery, /turf/simulated/floor, /area/station/security/checkpoint/cargo) +"szn" = ( +/obj/disposalpipe/segment/produce{ + dir = 4 + }, +/obj/disposalpipe/segment/produce{ + dir = 4 + }, +/obj/item/satchel/hydro{ + pixel_x = -7; + pixel_y = 2 + }, +/turf/simulated/floor/grime, +/area/station/hallway/primary/east) "szx" = ( /obj/cable{ icon_state = "1-8" @@ -58464,6 +58348,7 @@ /obj/machinery/door/airlock/pyro/glass, /obj/mapping_helper/firedoor_spawn, /obj/mapping_helper/access/medical, +/obj/disposalpipe/segment, /turf/simulated/floor/white, /area/station/medical/medbay) "sAI" = ( @@ -58720,6 +58605,14 @@ }, /turf/simulated/floor/plating, /area/station/maintenance/central) +"sKs" = ( +/obj/disposalpipe/segment{ + dir = 1 + }, +/turf/simulated/floor/specialroom/chapel{ + dir = 8 + }, +/area/station/chapel/sanctuary) "sKw" = ( /obj/machinery/light/small/floor/warm, /obj/decal/tile_edge/stripe/extra_big{ @@ -58727,6 +58620,13 @@ }, /turf/simulated/floor, /area/station/engine/elect) +"sKP" = ( +/obj/machinery/light, +/obj/stool/chair/comfy/blue{ + dir = 1 + }, +/turf/simulated/floor/neutral/side, +/area/station/hallway/primary/east) "sLL" = ( /obj/decal/fakeobjects{ density = 1; @@ -58910,6 +58810,12 @@ /obj/machinery/power/apc/autoname_north, /turf/simulated/floor/carpet/grime, /area/station/crew_quarters/baroffice) +"sQl" = ( +/obj/table/reinforced/bar/auto, +/turf/simulated/floor/specialroom/bar/edge{ + dir = 1 + }, +/area/station/crew_quarters/cafeteria) "sQn" = ( /obj/cable{ icon_state = "0-2" @@ -58953,6 +58859,16 @@ /obj/decal/stripe_delivery, /turf/simulated/floor, /area/station/crew_quarters/supplylobby) +"sQL" = ( +/obj/disposalpipe/segment/mail{ + dir = 4; + icon_state = "pipe-c" + }, +/obj/cable{ + icon_state = "2-4" + }, +/turf/simulated/floor, +/area/station/hallway/primary/east) "sRd" = ( /obj/cable{ icon_state = "1-2" @@ -58968,6 +58884,12 @@ }, /turf/simulated/floor/plating, /area/station/quartermaster/refinery) +"sRY" = ( +/obj/cable{ + icon_state = "4-8" + }, +/turf/simulated/floor/black, +/area/station/crew_quarters/catering) "sSa" = ( /obj/stool/chair/office/red, /obj/landmark/start/job/geneticist, @@ -59007,16 +58929,12 @@ }, /turf/simulated/floor/plating, /area/station/maintenance/solar/north) -"sTC" = ( -/obj/machinery/camera{ - c_tag = "autotag"; - dir = 4; - name = "autoname - SS13"; - tag = "" +"sUv" = ( +/obj/player_piano, +/turf/simulated/floor/specialroom/chapel{ + dir = 8 }, -/obj/storage/secure/closet/civilian/hydro, -/turf/simulated/floor/grime, -/area/station/storage/hydroponics) +/area/station/chapel/sanctuary) "sUE" = ( /obj/machinery/door/airlock/pyro/engineering{ dir = 4; @@ -59119,6 +59037,12 @@ }, /turf/simulated/floor/white, /area/station/science/lab) +"taD" = ( +/obj/machinery/atmospherics/unary/portables_connector{ + dir = 8 + }, +/turf/simulated/floor/plating, +/area/station/crew_quarters/catering) "tbc" = ( /obj/machinery/vending/port_a_nanomed, /obj/machinery/alarm{ @@ -59129,10 +59053,22 @@ dir = 8 }, /area/station/medical/medbay) +"tbE" = ( +/turf/simulated/floor/plating, +/area/station/crew_quarters/catering) "tco" = ( /obj/item/device/radio/intercom/engineering, /turf/simulated/floor, /area/station/engine/engineering) +"tcE" = ( +/obj/disposalpipe/segment/mail, +/obj/machinery/light/emergency{ + dir = 4 + }, +/turf/simulated/floor/neutral/side{ + dir = 4 + }, +/area/station/hallway/primary/central) "tcT" = ( /obj/machinery/conveyor/NS{ name = "cargo belt - south"; @@ -59302,6 +59238,21 @@ dir = 8 }, /area/station/security/main) +"tkk" = ( +/obj/window/reinforced{ + dir = 2 + }, +/turf/simulated/floor/specialroom/chapel{ + dir = 8 + }, +/area/station/chapel/sanctuary) +"tks" = ( +/obj/machinery/atmospherics/unary/outlet_injector/active{ + dir = 8 + }, +/obj/table/reinforced/bar/auto, +/turf/simulated/floor/specialroom/bar/edge, +/area/station/crew_quarters/cafeteria) "tlq" = ( /obj/machinery/atmospherics/pipe/simple/insulated/cold, /obj/cable/blue{ @@ -59376,6 +59327,10 @@ /obj/mapping_helper/firedoor_spawn, /obj/machinery/door/airlock/pyro/medical, /obj/mapping_helper/access/medical, +/obj/mapping_helper/airlock/cycler{ + cycle_id = "medical"; + name = "Medical Storage" + }, /turf/simulated/floor/plating, /area/station/maintenance/storage{ name = "Medical Storage" @@ -59386,6 +59341,13 @@ }, /turf/simulated/floor/shuttlebay, /area/station/hangar/medical) +"tpp" = ( +/obj/cable{ + icon_state = "1-8" + }, +/obj/stool, +/turf/simulated/floor/black, +/area/station/crew_quarters/catering) "tpT" = ( /obj/cable{ icon_state = "4-8" @@ -59431,11 +59393,6 @@ dir = 1 }, /area/station/engine/ptl) -"tqm" = ( -/obj/disposalpipe/segment, -/obj/mapping_helper/wingrille_spawn/auto, -/turf/simulated/floor/plating, -/area/station/storage/emergency) "tqo" = ( /mob/living/critter/small_animal/mouse, /turf/simulated/floor/plating, @@ -59461,6 +59418,11 @@ icon_state = "1-2" }, /obj/mapping_helper/firedoor_spawn, +/obj/mapping_helper/airlock/cycler{ + cycle_id = "podbay"; + name = "Pod Bay"; + enter_id = "inner" + }, /turf/simulated/floor/plating, /area/station/hangar/main) "tqQ" = ( @@ -59522,6 +59484,15 @@ }, /turf/simulated/floor/plating, /area/station/routing/security) +"ttG" = ( +/obj/disposalpipe/segment{ + dir = 4; + icon_state = "pipe-c" + }, +/turf/simulated/floor/yellow/side{ + dir = 1 + }, +/area/station/hallway/primary/east) "ttZ" = ( /obj/disposalpipe/segment/morgue{ name = "crematorium pipe" @@ -59714,6 +59685,13 @@ /obj/disposalpipe/segment, /turf/simulated/floor, /area/station/hallway/secondary/exit) +"tCk" = ( +/obj/machinery/light/emergency{ + dir = 8 + }, +/obj/disposalpipe/segment, +/turf/simulated/floor/specialroom/bar, +/area/station/crew_quarters/cafeteria) "tCq" = ( /obj/cable{ icon_state = "2-8" @@ -59757,6 +59735,13 @@ }, /turf/simulated/floor/grey, /area/station/engine/inner) +"tDf" = ( +/obj/machinery/light/emergency{ + dir = 4 + }, +/obj/machinery/vending/fortune, +/turf/simulated/floor/specialroom/bar, +/area/station/crew_quarters/cafeteria) "tEf" = ( /obj/disposalpipe/segment, /obj/mapping_helper/wingrille_spawn/auto, @@ -59820,6 +59805,13 @@ /obj/storage/closet/welding_supply, /turf/simulated/floor/white, /area/station/hangar/medical) +"tHo" = ( +/obj/disposalpipe/segment/produce{ + dir = 2; + icon_state = "pipe-c" + }, +/turf/simulated/floor/grass/leafy, +/area/station/ranch) "tHM" = ( /obj/table/wood/auto, /obj/item/currency/spacecash{ @@ -59921,6 +59913,16 @@ /obj/mapping_helper/firedoor_spawn, /turf/simulated/floor/plating, /area/station/maintenance/east) +"tLR" = ( +/obj/machinery/firealarm/north, +/obj/machinery/vending/medical_public, +/obj/machinery/light/emergency{ + dir = 8 + }, +/turf/simulated/floor/yellow/side{ + dir = 1 + }, +/area/station/hallway/primary/east) "tMA" = ( /obj/securearea{ desc = "A warning sign which reads 'COLLISION HAZARD'"; @@ -59977,7 +59979,7 @@ pixel_x = -6; pixel_y = 7 }, -/obj/item/clothing/suit/fire/heavy, +/obj/item/clothing/suit/hazard/fire/heavy, /turf/simulated/floor/black, /area/station/engine/hotloop) "tQq" = ( @@ -60022,6 +60024,23 @@ }, /turf/simulated/floor, /area/station/engine/engineering) +"tSy" = ( +/obj/machinery/camera{ + c_tag = "autotag"; + dir = 1; + name = "autoname - SS13"; + tag = "" + }, +/obj/machinery/light, +/obj/machinery/light_switch{ + name = "S light switch"; + pixel_y = -24 + }, +/obj/disposalpipe/segment{ + dir = 8 + }, +/turf/simulated/floor/specialroom/cafeteria, +/area/station/crew_quarters/kitchen) "tSK" = ( /turf/simulated/wall/false_wall/reinforced, /area/station/maintenance/northeast) @@ -60162,6 +60181,21 @@ }, /turf/simulated/floor/plating/airless, /area/station/science/lab) +"tVl" = ( +/obj/machinery/disposal, +/obj/machinery/alarm{ + dir = 4; + pixel_x = -15 + }, +/obj/disposalpipe/trunk{ + dir = 4 + }, +/turf/simulated/floor/yellow/side{ + dir = 8 + }, +/area/station/storage/auxillary{ + name = "Tool Storage" + }) "tVK" = ( /obj/submachine/ATM{ pixel_x = 32 @@ -60341,6 +60375,11 @@ name = "Door-linked Atmospheric Forcefield"; powerlevel = 1 }, +/obj/mapping_helper/airlock/cycler{ + cycle_id = "mining1"; + name = "Mining"; + enter_id = "inner" + }, /turf/simulated/floor, /area/station/mining/staff_room) "uaJ" = ( @@ -60689,8 +60728,11 @@ /turf/simulated/floor/plating, /area/station/maintenance/southwest) "ulq" = ( -/obj/disposalpipe/segment/mail, /obj/mapping_helper/wingrille_spawn/auto, +/obj/disposalpipe/segment/mail{ + dir = 8; + icon_state = "pipe-c" + }, /turf/simulated/floor/plating, /area/station/hydroponics/lobby) "ulC" = ( @@ -60781,6 +60823,11 @@ /obj/mapping_helper/access/engineering_control, /obj/machinery/power/data_terminal, /obj/decal/stripe_delivery, +/obj/mapping_helper/airlock/cycler{ + cycle_id = "engineering"; + name = "Engineering"; + enter_id = "inner" + }, /turf/simulated/floor, /area/station/engine/engineering) "uoI" = ( @@ -60905,6 +60952,10 @@ name = "Door-linked Atmospheric Forcefield"; powerlevel = 1 }, +/obj/mapping_helper/airlock/cycler{ + cycle_id = "northsolar"; + name = "North Solar Maintenance" + }, /turf/simulated/floor/plating, /area/station/maintenance/solar/north) "utG" = ( @@ -61191,6 +61242,20 @@ /obj/cable, /turf/simulated/floor/white, /area/station/medical/medbay/treatment) +"uCR" = ( +/turf/simulated/floor, +/area/station/quartermaster/cargooffice) +"uDl" = ( +/obj/disposalpipe/segment/mail{ + dir = 4 + }, +/obj/machinery/navbeacon/tour/cog1/tour3, +/obj/cable{ + icon_state = "4-8" + }, +/obj/cable, +/turf/simulated/floor, +/area/station/hallway/primary/east) "uDr" = ( /obj/decal/tile_edge/stripe/big{ dir = 4; @@ -61381,6 +61446,12 @@ /obj/mapping_helper/wingrille_spawn/auto/reinforced, /turf/simulated/floor/plating, /area/station/mining/staff_room) +"uLk" = ( +/obj/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/neutral/side, +/area/station/hallway/primary/central) "uLu" = ( /obj/cable{ icon_state = "4-8" @@ -61413,15 +61484,13 @@ name = "Bridge" }, /obj/mapping_helper/access/heads, +/obj/mapping_helper/airlock/cycler{ + cycle_id = "bridge"; + name = "Bridge"; + enter_id = "inner" + }, /turf/simulated/floor, /area/station/bridge) -"uMF" = ( -/obj/table/auto, -/obj/submachine/mixer{ - pixel_x = 6 - }, -/turf/simulated/floor/specialroom/cafeteria, -/area/station/crew_quarters/kitchen) "uNi" = ( /obj/machinery/atmospherics/pipe/simple{ level = 2 @@ -61434,6 +61503,12 @@ /obj/mapping_helper/access/kitchen, /turf/simulated/floor/plating, /area/station/crew_quarters/catering) +"uNE" = ( +/obj/item/device/radio/intercom/catering{ + dir = 8 + }, +/turf/simulated/floor/black, +/area/station/crew_quarters/catering) "uNH" = ( /obj/decal/tile_edge/stripe/corner/extra_big2{ dir = 10 @@ -61462,6 +61537,12 @@ dir = 9 }, /area/station/hydroponics/lobby) +"uOt" = ( +/obj/table/wood/auto, +/obj/item/plate, +/obj/random_item_spawner/tableware/few, +/turf/simulated/floor/carpet, +/area/station/crew_quarters/cafeteria) "uOC" = ( /obj/storage/secure/closet/medical/anesthetic, /obj/machinery/firealarm/west, @@ -61516,6 +61597,12 @@ /obj/disposalpipe/segment, /turf/simulated/floor/yellow/side, /area/station/storage/primary) +"uRR" = ( +/obj/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/wall/auto/supernorn, +/area/station/medical/medbooth) "uSJ" = ( /obj/cable{ icon_state = "4-8" @@ -61675,6 +61762,16 @@ dir = 1 }, /area/station/science/lobby) +"uZB" = ( +/obj/disposalpipe/segment{ + dir = 1; + icon_state = "pipe-c"; + name = "factory pipe" + }, +/turf/simulated/floor/specialroom/chapel{ + dir = 4 + }, +/area/station/chapel/sanctuary) "uZE" = ( /obj/cable{ icon_state = "0-2" @@ -61707,6 +61804,10 @@ dir = 4 }, /area/station/security/main) +"vaq" = ( +/obj/table/reinforced/bar/auto, +/turf/simulated/floor/specialroom/bar/edge, +/area/station/crew_quarters/cafeteria) "vbu" = ( /obj/machinery/r_door_control/podbay/security, /turf/simulated/wall/auto/reinforced/supernorn, @@ -61793,6 +61894,15 @@ }, /turf/simulated/floor, /area/station/engine/elect) +"vdP" = ( +/obj/machinery/disposal, +/obj/disposalpipe/trunk{ + dir = 8 + }, +/turf/simulated/floor/bluewhite/corner{ + dir = 1 + }, +/area/station/crew_quarters/pool) "vei" = ( /obj/machinery/alarm{ dir = 4; @@ -61892,6 +62002,16 @@ }, /turf/simulated/floor/black, /area/station/engine/hotloop) +"vif" = ( +/obj/machinery/door/airlock/pyro{ + name = "Bar"; + req_access_txt = null + }, +/obj/mapping_helper/access/bar, +/obj/mapping_helper/access/kitchen, +/obj/disposalpipe/segment, +/turf/simulated/floor/black, +/area/station/crew_quarters/cafeteria) "viK" = ( /obj/cable{ icon_state = "0-8" @@ -61944,6 +62064,13 @@ }, /turf/simulated/floor/black, /area/station/engine/coldloop) +"vlI" = ( +/obj/disposalpipe/segment{ + dir = 2; + icon_state = "pipe-c" + }, +/turf/simulated/floor/specialroom/cafeteria, +/area/station/crew_quarters/kitchen) "vma" = ( /obj/machinery/door/airlock/pyro/external{ dir = 4; @@ -61962,6 +62089,19 @@ }, /turf/simulated/floor, /area/station/mining/staff_room) +"vmK" = ( +/obj/machinery/door/airlock/pyro{ + dir = 4; + name = "Kitchen"; + req_access_txt = null + }, +/obj/mapping_helper/access/kitchen, +/obj/mapping_helper/firedoor_spawn, +/obj/disposalpipe/segment/mail{ + dir = 4 + }, +/turf/simulated/floor/black, +/area/station/crew_quarters/kitchen) "vmP" = ( /obj/table/auto, /obj/item/clipboard{ @@ -62071,6 +62211,12 @@ /obj/mapping_helper/wingrille_spawn/auto/reinforced, /turf/simulated/floor/plating, /area/station/hallway/primary/south) +"vrK" = ( +/turf/simulated/floor/carpet{ + dir = 10; + icon_state = "fred2" + }, +/area/station/crew_quarters/cafeteria) "vrP" = ( /obj/cable{ icon_state = "1-2" @@ -62121,6 +62267,11 @@ }, /turf/simulated/floor/plating, /area/station/science/gen_storage) +"vuZ" = ( +/obj/table/auto, +/obj/landmark/pest, +/turf/simulated/floor/specialroom/cafeteria, +/area/station/crew_quarters/kitchen) "vvC" = ( /obj/cable{ icon_state = "1-2" @@ -62149,6 +62300,16 @@ }, /turf/simulated/floor/grey, /area/station/engine/inner) +"vxJ" = ( +/obj/cable{ + icon_state = "4-8" + }, +/obj/disposalpipe/segment/mail{ + dir = 2; + icon_state = "pipe-c" + }, +/turf/simulated/floor, +/area/station/hallway/primary/east) "vxT" = ( /obj/mapping_helper/wingrille_spawn/auto/reinforced, /turf/simulated/floor/plating, @@ -62163,6 +62324,13 @@ dir = 4 }, /area/station/crew_quarters/market) +"vyW" = ( +/obj/disposalpipe/segment/mail, +/turf/simulated/floor/carpet{ + dir = 4; + icon_state = "fred1" + }, +/area/station/chapel/sanctuary) "vzj" = ( /obj/machinery/conveyor/WE{ id = "qmin" @@ -62292,6 +62460,17 @@ }, /turf/simulated/floor, /area/station/crew_quarters/cafeteria) +"vHp" = ( +/obj/machinery/door/airlock/pyro/glass/mining{ + dir = 4 + }, +/obj/mapping_helper/firedoor_spawn, +/obj/mapping_helper/access/cargo, +/obj/cable{ + icon_state = "4-8" + }, +/turf/simulated/floor, +/area/station/quartermaster/cargooffice) "vHP" = ( /obj/cable{ icon_state = "4-8" @@ -62307,15 +62486,6 @@ dir = 8 }, /area/station/medical/medbay) -"vHW" = ( -/obj/machinery/door/airlock/pyro{ - name = "Bar"; - req_access_txt = null - }, -/obj/mapping_helper/access/bar, -/obj/mapping_helper/access/kitchen, -/turf/simulated/floor/black, -/area/station/crew_quarters/cafeteria) "vIt" = ( /obj/landmark/pest, /obj/disposalpipe/segment/morgue, @@ -62374,41 +62544,6 @@ }, /turf/simulated/floor/grey, /area/station/engine/inner) -"vMs" = ( -/obj/table/auto, -/obj/item/cigpacket/propuffs{ - pixel_x = -9; - pixel_y = -2 - }, -/obj/item/clothing/mask/cigarette/propuffs{ - pixel_x = -2; - pixel_y = -5 - }, -/obj/item/decoration/ashtray, -/obj/machinery/light, -/obj/item/reagent_containers/food/snacks/candy/butterscotch{ - pixel_x = 4; - pixel_y = 8 - }, -/obj/item/reagent_containers/food/drinks/tea{ - pixel_x = -7; - pixel_y = 18 - }, -/turf/simulated/floor/wood/two, -/area/station/medical/staff) -"vMT" = ( -/obj/cable{ - icon_state = "1-2" - }, -/obj/machinery/door/airlock/pyro/maintenance{ - name = "Tool Storage"; - req_access_txt = null - }, -/obj/mapping_helper/firedoor_spawn, -/turf/simulated/floor/yellow, -/area/station/storage/auxillary{ - name = "Tool Storage" - }) "vNU" = ( /obj/machinery/conveyor/EW{ name = "cargo belt - west"; @@ -62521,6 +62656,12 @@ /obj/mapping_helper/wingrille_spawn/auto/reinforced, /turf/simulated/floor/plating, /area/station/medical/medbay) +"vPc" = ( +/obj/cable{ + icon_state = "4-8" + }, +/turf/simulated/floor, +/area/station/quartermaster/cargooffice) "vPu" = ( /obj/machinery/camera/ranch, /obj/decal/tile_edge/stripe/extra_big{ @@ -62564,6 +62705,25 @@ icon_state = "fblue3" }, /area/station/bridge) +"vRq" = ( +/obj/machinery/light, +/obj/disposalpipe/segment/mail{ + dir = 4 + }, +/turf/simulated/floor/specialroom/chapel{ + dir = 1 + }, +/area/station/chapel/sanctuary) +"vRG" = ( +/obj/machinery/disposal, +/obj/disposalpipe/trunk{ + dir = 2; + name = "factory pipe" + }, +/turf/simulated/floor/specialroom/chapel{ + dir = 4 + }, +/area/station/chapel/sanctuary) "vRO" = ( /obj/mapping_helper/firedoor_spawn, /obj/cable{ @@ -62579,6 +62739,11 @@ req_access_txt = null }, /obj/mapping_helper/access/research_foyer, +/obj/mapping_helper/airlock/cycler{ + cycle_id = "research"; + name = "Research"; + enter_id = "outer" + }, /turf/simulated/floor/purple, /area/station/science/lobby) "vTv" = ( @@ -62643,6 +62808,15 @@ /obj/decal/stripe_delivery, /turf/simulated/floor, /area/station/crew_quarters/cafeteria) +"vXP" = ( +/obj/machinery/door/airlock/pyro/glass{ + name = "Emergency Storage" + }, +/obj/mapping_helper/firedoor_spawn, +/obj/decal/stripe_delivery, +/obj/disposalpipe/segment/mail, +/turf/simulated/floor, +/area/station/storage/emergency) "vXY" = ( /obj/machinery/atmospherics/pipe/simple/insulated{ dir = 4 @@ -62970,19 +63144,6 @@ }, /turf/simulated/floor/plating, /area/station/routing/sortingRoom) -"wkE" = ( -/obj/cable{ - icon_state = "4-8" - }, -/obj/disposalpipe/segment/mail{ - dir = 4 - }, -/obj/machinery/light, -/obj/item/device/radio/intercom/medical{ - dir = 1 - }, -/turf/simulated/floor, -/area/station/hallway/primary/east) "wlm" = ( /obj/decal/poster/wallsign/poster_eyetest, /turf/simulated/wall/auto/supernorn, @@ -63017,6 +63178,11 @@ }, /obj/mapping_helper/firedoor_spawn, /obj/mapping_helper/access/security, +/obj/mapping_helper/airlock/cycler{ + cycle_id = "security"; + name = "Security"; + enter_id = "side" + }, /turf/simulated/floor/plating, /area/station/security/secwing) "wng" = ( @@ -63070,6 +63236,10 @@ name = "Door-linked Atmospheric Forcefield"; powerlevel = 1 }, +/obj/mapping_helper/airlock/cycler{ + cycle_id = "eastmaint1"; + name = "East Maintenance" + }, /turf/simulated/floor/plating/airless, /area/station/maintenance/east) "woV" = ( @@ -63125,6 +63295,16 @@ /obj/decal/stripe_delivery, /turf/simulated/floor, /area/station/security/brig) +"wqg" = ( +/obj/decal/tile_edge/stripe/extra_big{ + dir = 4 + }, +/obj/machinery/firealarm/north, +/obj/cable{ + icon_state = "2-8" + }, +/turf/simulated/floor/grime, +/area/station/storage/hydroponics) "wqo" = ( /obj/machinery/door/poddoor/pyro/shutters{ density = 0; @@ -63170,6 +63350,11 @@ /obj/disposalpipe/segment{ dir = 4 }, +/obj/mapping_helper/airlock/cycler{ + cycle_id = "aipower"; + name = "AI Power"; + enter_id = "inner" + }, /turf/simulated/floor/plating, /area/station/turret_protected/ai_upload_foyer) "wqy" = ( @@ -63354,6 +63539,11 @@ /obj/machinery/turret, /turf/space, /area/station/turret_protected/armory_outside) +"wwr" = ( +/obj/machinery/vending/air_vendor, +/obj/decal/stripe_caution, +/turf/simulated/floor, +/area/station/storage/emergency) "wwy" = ( /obj/machinery/atmospherics/unary/portables_connector{ name = "Medbay Repressurization West" @@ -63368,6 +63558,32 @@ icon_state = "wooden" }, /area/station/crew_quarters/barber_shop) +"wwE" = ( +/obj/landmark/halloween, +/obj/disposalpipe/segment/mail{ + dir = 4 + }, +/obj/cable{ + icon_state = "4-8" + }, +/turf/simulated/floor, +/area/station/hallway/primary/east) +"wwF" = ( +/obj/table/auto, +/obj/item/plate, +/obj/item/reagent_containers/food/snacks/cake/chocolate/gateau{ + pixel_y = 8 + }, +/obj/item/reagent_containers/food/drinks/drinkingglass/icing{ + pixel_x = 5; + pixel_y = -2 + }, +/obj/item/reagent_containers/food/drinks/drinkingglass/icing{ + pixel_x = 5; + pixel_y = -2 + }, +/turf/simulated/floor/black, +/area/station/crew_quarters/catering) "wxk" = ( /obj/lattice{ dir = 4; @@ -63775,6 +63991,16 @@ }, /turf/simulated/floor/plating, /area/station/turret_protected/ai_upload_foyer) +"wNc" = ( +/obj/cable{ + icon_state = "1-2" + }, +/obj/machinery/alarm{ + dir = 4; + pixel_x = -15 + }, +/turf/simulated/floor/black, +/area/station/crew_quarters/catering) "wNC" = ( /obj/machinery/door/unpowered/wood/pyro{ name = "The Snip" @@ -63819,6 +64045,30 @@ }, /turf/simulated/floor/blue, /area/station/turret_protected/ai_upload) +"wPN" = ( +/obj/machinery/light, +/obj/disposalpipe/segment/produce{ + dir = 4 + }, +/turf/simulated/floor/grime, +/area/station/hallway/primary/east) +"wPV" = ( +/obj/table/auto, +/obj/item/storage/toolbox/emergency{ + pixel_y = 10 + }, +/obj/item/storage/box/beakerbox{ + pixel_x = -6 + }, +/obj/item/storage/box/glassbox, +/obj/item/storage/box/syringes{ + pixel_x = 3 + }, +/obj/item/storage/box/donkpocket_kit{ + pixel_x = 8 + }, +/turf/simulated/floor/plating, +/area/station/crew_quarters/catering) "wQa" = ( /obj/machinery/conveyor/WE{ id = "enginesupply" @@ -63893,6 +64143,14 @@ /obj/machinery/power/solar/east, /turf/simulated/floor/airless/solar, /area/station/solar/south) +"wRX" = ( +/obj/disposalpipe/segment{ + dir = 1 + }, +/turf/simulated/floor/specialroom/chapel{ + dir = 4 + }, +/area/station/chapel/sanctuary) "wSg" = ( /obj/machinery/door/airlock/pyro/glass, /obj/mapping_helper/firedoor_spawn, @@ -63900,6 +64158,18 @@ /obj/disposalpipe/segment, /turf/simulated/floor, /area/station/hallway/secondary/exit) +"wSZ" = ( +/obj/cable{ + icon_state = "4-8" + }, +/obj/disposalpipe/switch_junction{ + dir = 4; + icon_state = "pipe-sj2"; + mail_tag = "hydroponics"; + name = "hydroponics mail router" + }, +/turf/simulated/floor, +/area/station/hallway/primary/east) "wTs" = ( /obj/cable{ icon_state = "1-2" @@ -63911,6 +64181,17 @@ /obj/decal/stripe_delivery, /turf/simulated/floor, /area/station/crew_quarters/cafeteria) +"wTx" = ( +/obj/cable{ + icon_state = "1-8" + }, +/obj/machinery/atmospherics/unary/outlet_injector/active{ + dir = 4 + }, +/turf/simulated/floor/specialroom/chapel{ + dir = 8 + }, +/area/station/chapel/sanctuary) "wTF" = ( /obj/machinery/atmospherics/unary/tank/air_repressurization{ name = "Air Hookup Reserve Tank (Air)" @@ -63931,24 +64212,24 @@ }, /turf/simulated/floor/shuttlebay, /area/station/hangar/medical) +"wVp" = ( +/obj/cable{ + icon_state = "2-8" + }, +/obj/cable{ + icon_state = "4-8" + }, +/obj/disposalpipe/segment/mail{ + dir = 4 + }, +/turf/simulated/floor/neutral/side, +/area/station/hallway/primary/east) "wWK" = ( /obj/cable{ icon_state = "1-2" }, /turf/simulated/floor/grime, /area/station/hallway/primary/east) -"wWS" = ( -/obj/table/auto, -/obj/item/storage/box/cutlery{ - pixel_x = 10; - pixel_y = 12 - }, -/obj/item/clothing/head/helmet/space/santahat{ - pixel_x = -4; - pixel_y = 10 - }, -/turf/simulated/floor/specialroom/cafeteria, -/area/station/crew_quarters/kitchen) "wXJ" = ( /obj/machinery/door/poddoor/pyro/shutters{ density = 0; @@ -64148,6 +64429,16 @@ /obj/landmark/start/job/engineer, /turf/simulated/floor/yellow, /area/station/engine/ptl) +"xgn" = ( +/obj/disposalpipe/segment/produce{ + dir = 1; + icon_state = "pipe-c" + }, +/obj/cable{ + icon_state = "4-8" + }, +/turf/simulated/floor/black, +/area/station/crew_quarters/catering) "xgT" = ( /obj/cable/orange{ icon_state = "4-8" @@ -64156,6 +64447,13 @@ dir = 8 }, /area/station/engine/engineering) +"xhn" = ( +/obj/disposalpipe/segment{ + dir = 8; + icon_state = "pipe-c" + }, +/turf/simulated/floor, +/area/station/hallway/primary/east) "xhr" = ( /obj/decal/cleanable/dirt, /obj/landmark/start/job/clown, @@ -64185,6 +64483,17 @@ dir = 6 }, /area/station/hydroponics/bay) +"xiO" = ( +/obj/machinery/navbeacon{ + codes_txt = "patrol;next_patrol=pool"; + location = "bar"; + name = "bot navigation beacon" + }, +/obj/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/specialroom/bar, +/area/station/crew_quarters/cafeteria) "xiQ" = ( /obj/machinery/vending/snack, /obj/decal/stage_edge, @@ -64198,6 +64507,24 @@ /obj/machinery/portable_atmospherics/canister/air, /turf/simulated/floor/plating, /area/station/maintenance/solar/west) +"xjn" = ( +/obj/cable{ + icon_state = "0-4" + }, +/obj/machinery/camera{ + c_tag = "autotag"; + dir = 5; + name = "autoname - Mining"; + network = "Mining"; + tag = "" + }, +/obj/machinery/power/apc/autoname_south, +/turf/simulated/floor/yellow/side{ + dir = 10 + }, +/area/station/storage/auxillary{ + name = "Tool Storage" + }) "xjC" = ( /obj/cable{ icon_state = "0-8" @@ -64239,22 +64566,6 @@ }, /turf/simulated/floor, /area/station/crew_quarters/supplylobby) -"xmf" = ( -/obj/disposalpipe/segment{ - dir = 4; - icon_state = "pipe-c" - }, -/obj/cable{ - icon_state = "1-2" - }, -/obj/machinery/door/airlock/pyro/glass{ - name = "Medical Booth"; - req_access_txt = null - }, -/obj/mapping_helper/access/medical, -/obj/mapping_helper/firedoor_spawn, -/turf/simulated/floor/blue/side, -/area/station/medical/medbooth) "xmy" = ( /obj/machinery/conveyor/WE{ id = "mining" @@ -64367,6 +64678,11 @@ }, /obj/mapping_helper/access/security, /obj/mapping_helper/firedoor_spawn, +/obj/mapping_helper/airlock/cycler{ + cycle_id = "security"; + name = "Security"; + enter_id = "outer" + }, /turf/simulated/floor/red, /area/station/security/secwing) "xrW" = ( @@ -64435,6 +64751,43 @@ /obj/decal/stripe_delivery, /turf/simulated/floor/yellow, /area/station/engine/gas) +"xtf" = ( +/obj/machinery/camera{ + c_tag = "autotag"; + dir = 9; + invisibility = 101; + name = "autoname - Entertainment"; + network = "Zeta"; + tag = "" + }, +/obj/machinery/atmospherics/pipe/simple{ + dir = 4 + }, +/obj/landmark/gps_waypoint, +/obj/disposalpipe/segment/mail, +/turf/simulated/floor/carpet{ + dir = 8; + icon_state = "fred1" + }, +/area/station/chapel/sanctuary) +"xtF" = ( +/obj/machinery/door/airlock/pyro{ + dir = 4; + name = "Catering Storage"; + req_access_txt = null + }, +/obj/mapping_helper/access/bar, +/obj/mapping_helper/access/kitchen, +/obj/mapping_helper/firedoor_spawn, +/obj/decal/stripe_delivery, +/obj/disposalpipe/segment/produce{ + dir = 4 + }, +/obj/disposalpipe/segment/produce{ + dir = 4 + }, +/turf/simulated/floor, +/area/station/crew_quarters/catering) "xtI" = ( /obj/window/reinforced{ dir = 4 @@ -64469,6 +64822,9 @@ "xuC" = ( /turf/simulated/wall/auto/reinforced/supernorn, /area/station/turret_protected/armory_outside) +"xuM" = ( +/turf/simulated/floor/grey/whitegrime/other, +/area/station/maintenance/northeast) "xuR" = ( /obj/machinery/conveyor/WE{ id = "qmin" @@ -64515,6 +64871,19 @@ }, /turf/simulated/floor/plating, /area/station/maintenance/northeast) +"xwN" = ( +/obj/machinery/phone/wall, +/turf/simulated/wall/auto/supernorn, +/area/station/crew_quarters/catering) +"xwT" = ( +/obj/disposalpipe/segment{ + dir = 8; + icon_state = "pipe-c" + }, +/turf/simulated/floor/specialroom/chapel{ + dir = 8 + }, +/area/station/chapel/sanctuary) "xwZ" = ( /obj/cable{ icon_state = "0-4" @@ -64522,6 +64891,15 @@ /obj/mapping_helper/wingrille_spawn/auto/reinforced, /turf/simulated/floor/plating, /area/station/medical/medbay) +"xxe" = ( +/obj/table/wood/auto, +/obj/item/plate, +/obj/random_item_spawner/tableware/few, +/obj/item/reagent_containers/food/drinks/bowl, +/turf/simulated/floor/carpet{ + icon_state = "fred2" + }, +/area/station/crew_quarters/cafeteria) "xxA" = ( /obj/machinery/door/airlock/pyro/external, /obj/mapping_helper/firedoor_spawn, @@ -64561,6 +64939,11 @@ dir = 4 }, /obj/mapping_helper/access/research_foyer, +/obj/mapping_helper/airlock/cycler{ + cycle_id = "research"; + name = "Research"; + enter_id = "inner" + }, /turf/simulated/floor/purple, /area/station/science/lobby) "xzu" = ( @@ -64596,6 +64979,11 @@ name = "Door-linked Atmospheric Forcefield"; powerlevel = 1 }, +/obj/mapping_helper/airlock/cycler{ + cycle_id = "aipower"; + name = "AI Power"; + enter_id = "outer" + }, /turf/simulated/floor/plating, /area/station/turret_protected/ai_upload_foyer) "xBi" = ( @@ -64701,6 +65089,11 @@ /obj/mapping_helper/firedoor_spawn, /turf/simulated/floor, /area/station/engine/power) +"xGj" = ( +/obj/storage/closet/emergency, +/obj/decal/stripe_delivery, +/turf/simulated/floor, +/area/station/ranch) "xGt" = ( /obj/grille/catwalk, /turf/simulated/floor/airless/plating/catwalk{ @@ -64753,14 +65146,6 @@ /obj/mapping_helper/firedoor_spawn, /turf/simulated/floor/grime, /area/station/storage/primary) -"xJO" = ( -/obj/machinery/firealarm/north, -/obj/machinery/light{ - dir = 1; - pixel_y = 21 - }, -/turf/simulated/floor/specialroom/cafeteria, -/area/station/crew_quarters/kitchen) "xKj" = ( /obj/machinery/firealarm/west, /turf/simulated/floor/shuttlebay, @@ -64885,6 +65270,16 @@ /obj/machinery/photocopier, /turf/simulated/floor/darkblue, /area/station/medical/medbay/psychiatrist) +"xQB" = ( +/obj/disposalpipe/segment/mail, +/obj/cable{ + icon_state = "1-2" + }, +/obj/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/neutral/corner, +/area/station/hallway/primary/east) "xQI" = ( /obj/machinery/light_switch{ layer = 9; @@ -65186,6 +65581,16 @@ /obj/machinery/firealarm/east, /turf/simulated/floor, /area/station/science/artifact) +"yez" = ( +/obj/cable{ + icon_state = "1-8" + }, +/obj/disposalpipe/segment/mail{ + dir = 8; + icon_state = "pipe-c" + }, +/turf/simulated/floor, +/area/station/storage/emergency) "yeH" = ( /obj/cable{ icon_state = "0-8" @@ -65315,8 +65720,26 @@ /obj/mapping_helper/firedoor_spawn, /obj/mapping_helper/access/engineering_control, /obj/decal/stripe_delivery, +/obj/mapping_helper/airlock/cycler{ + cycle_id = "engineering"; + name = "Engineering"; + enter_id = "inner" + }, /turf/simulated/floor, /area/station/engine/engineering) +"yhS" = ( +/obj/cable{ + icon_state = "1-8" + }, +/obj/cable{ + icon_state = "4-8" + }, +/obj/disposalpipe/segment/mail{ + dir = 4; + icon_state = "pipe-c" + }, +/turf/simulated/floor, +/area/station/storage/emergency) "yhU" = ( /obj/cable{ icon_state = "1-4" @@ -65364,6 +65787,18 @@ /obj/decal/poster/wallsign/escape_left, /turf/simulated/floor/plating, /area/station/hallway/primary/south) +"yiR" = ( +/obj/cable{ + icon_state = "1-2" + }, +/obj/cable{ + icon_state = "2-8" + }, +/obj/disposalpipe/segment, +/turf/simulated/floor/yellow/side, +/area/station/storage/auxillary{ + name = "Tool Storage" + }) "yje" = ( /obj/machinery/conveyor/SN{ id = "garbage"; @@ -99763,7 +100198,7 @@ mwV kfp mRI sfM -vMs +dqC ucm xuy dvn @@ -109327,9 +109762,9 @@ akT ajS aCR aEs -aFG -pFV -aIm +dsf +hUH +hmq aIf aKE aLT @@ -109629,9 +110064,9 @@ akT wqw aCR aEm -aFH -aHc -aIn +uLk +aHa +vdP aJv lSC aLU @@ -110628,7 +111063,7 @@ cdw cpY crb jje -grs +rsy kFN uzt uzt @@ -110930,7 +111365,7 @@ cqe cqe hpX vIN -grs +rsy ctI yht yht @@ -111139,8 +111574,8 @@ aAm ajS aCR aEv -aFu -aEh +eyE +kap aWT aJz aKF @@ -111233,10 +111668,10 @@ uLB uLB uLB uLB -mpv +eKd uLB uLB -mpv +eKd uLB adC adC @@ -111441,8 +111876,8 @@ aAo ajQ aCO aEw -aFL -aHf +tcE +kRz aIo aJA aKI @@ -111743,8 +112178,8 @@ apw ntv apw apw -aFM -ltq +rbE +dsc hhw aJB apC @@ -112039,14 +112474,14 @@ ase atv auK avW -pRa +inZ ayK aAp aBP aDb aEx -aFN -aqP +tCk +nVD aIq aJC aKJ @@ -112347,8 +112782,8 @@ atw aBQ aqP cRg -aFO aqP +aFO aIr aJD aKK @@ -112649,8 +113084,8 @@ aqO vED aqO aqO -aFP -aHh +aqO +rZI aIs aJE aKL @@ -112941,18 +113376,18 @@ amU aom aJB aqP -ash -aty -auL -avY +ofY +goO +uOt +buW aqP ayM aAq aBS aAq aEz -aFQ -aqP +vrK +aFO aIq aJF iLY @@ -113243,18 +113678,18 @@ nRD aon apw aqP -aUD -atz -auM -cKD -aqP -ayN -gLv -aBT -aDc -aEA -aFR +srb +jVA +uOt +xxe aqP +iaH +sQl +tks +vaq +qKo +ghZ +aFO aIt aJG aKN @@ -113554,9 +113989,9 @@ ayO iRa asl aDd -aEB -aFS -aqP +bOP +lkC +aFO aIq aJH aKO @@ -113856,9 +114291,9 @@ ayP aAt asl asl -aEC -aFS -aHi +qwS +lkC +xiO aIu aJD aKK @@ -114159,8 +114594,8 @@ bHj asl aDe rbE -aFT -aqP +maL +aFO aIr aJE aKL @@ -114444,8 +114879,8 @@ agr aie ank toe -cRc -alf +ehD +cXe ame amY aoq @@ -114459,10 +114894,10 @@ ask ayR asl aBU -asl -vHW -aFO -aqP +mQx +vif +nLX +nVD xDr aJC aKP @@ -114746,25 +115181,25 @@ hCx aiU anl aiY -uMF +ssn alg alg alg alg -qKa -oyV -asl -asl -bmt -dGs -asl -asl -asl -asl -aDf -aEE -aFU -aqP +prD +cOx +iNm +iNm +jTk +lQi +iNm +iNm +iNm +iNm +jZQ +apC +tDf +aFO aIq apw aKQ @@ -115053,9 +115488,9 @@ alg alg ryN alg -apF +tSy apw -qwG +kCu apC vGu asl @@ -115065,8 +115500,8 @@ aAv aBV oaN apC -aFM -ltq +rbE +dsc hhw aJI aKR @@ -115350,13 +115785,13 @@ acT aiV aie aiZ -auf -alg -alg -alg +dpk alg -alg -aqT +kxP +jiB +jiB +pky +guJ lel apw apw @@ -115367,8 +115802,8 @@ apw apw apw apw -oSf -bNf +tLR +bVV aHo aJJ aKS @@ -115655,10 +116090,10 @@ aiZ lwM alg spb -ihb -wWS alg alg +alg +dWk aso atC ucB @@ -115669,8 +116104,8 @@ aAw aBW aDh bjh -aDC -bNf +ttG +xhn aHp aJK aKT @@ -115956,16 +116391,16 @@ aie aja akc alg +jiB +jiB +vuZ alg -ana -spW -alg -spb +jwh alg rqj auR qQK -lvC +etY bjh aAx aBX @@ -116256,14 +116691,14 @@ aeG aie aie aiZ -aiZ -xJO +eDM alg -anb alg alg alg -asp +alg +vlI +jJj atC sPX awe @@ -116276,10 +116711,10 @@ koS aDz bNg aHx -xmf -aKV -aVh -aNj +gIt +dsB +kqC +jAI wIz aPy aQC @@ -116371,7 +116806,7 @@ cIO yht yht lpQ -rRo +qAO adC adC adC @@ -116559,29 +116994,29 @@ aie aie qzb aiZ -ali -amh -anc -aot -apG -qKa -asq +jNg +jrc +mBW +eCT +nQn +fts +fpm atC auT ogJ qRK ayT aAz -aBZ -aDk -dae -aDC -bNf -wkE -aJN +yhS +qvD +vXP +fmP +koE +iCH aKR aKR -aMg +aKR +uRR aMg aMg aQD @@ -116864,26 +117299,26 @@ aiZ aiZ aiZ aiY -aou +aiY +aiZ +vmK aiZ -hka -asr atE atC dlh atC ayU aAA -aCa +iEN aDl bjh -aFZ -aGu -aHz -aIT -aIX +qDc +bNf +bVG +bNf +pze bHZ -aKW +etO aOB aye aQD @@ -117166,26 +117601,26 @@ aiU aiU bYA and -aov -jli -and -ass -atF -axw -awg -axw -eJM -aAB -aCb -aDm -tqm -aGa -aHj -aIw -bNg -aJa +qSz +wNc +pSG +hnG +oSp +hnG +quR +oIq +onv +gIU +yez +wwr +bjh +ahM +aGu +mpm +aMR +aMR aJP -aKX +fFV aKX aMR aNl @@ -117451,9 +117886,9 @@ adC adC adC adC -iyk -iDm -nzi +aag +etw +aaG adC aag sTt @@ -117466,24 +117901,24 @@ aie aie rvr aie -amj +xwN ane -aow -apI -meU -ast -ast -ast -awh -axx -ayW -aAC -aCc -aDn -ayW -aGb -bWO -aIx +xgn +apK +apK +apK +apK +apK +ocr +sRY +ayT +mWd +mgC +jKa +ayT +bUx +bVV +bVG bNf bNf aJQ @@ -117753,9 +118188,9 @@ adC adC adC adC -iyk -iDm -nzi +aag +etw +aaG adC aag kek @@ -117769,20 +118204,20 @@ apN aie aie amj -qVo -aox -jOu -aqW -asu -uNi -auV -awi -axy -ayU -ayU -ayU +jKC +ihy +apK +apK +apK +apK +wwF +fHo +sRY +ayT +ayT +ayT +ayT ayU -aEJ bUx bVV bVG @@ -118072,18 +118507,18 @@ aie aie amj ang -shc -dxI -aqX -apA -atH -atP -awj -axz -tqo -fIl -aCd +pOR +qYP +uNE +apK +apK +rxL +fHo +sRY +aqY aDo +aDo +aCd aqY aGc bVV @@ -118366,27 +118801,27 @@ aaG adC adC adC -ajc -jsu -lSg +tSK +kUg +cMe tSK aie aie amj anh -aox -cUw -aqY -asv -atI -bgo -awk -axA -ayY -dTk -aCe -aDo +ihy +fkW +aqW +asu +uNi +auV +awi +axy aqY +dmH +lBV +tbE +iuu aGd bVV aIz @@ -118667,35 +119102,35 @@ adC wxk adC adC -ajc -ajc -ajc -ajc -ajc +prm +tSK +cMe +xuM +tSK aie aie amj cuU -aox -apK -aqY -asv -atI +nNK +kxF +aqX +apA +atH atP -awk -axB -ayZ -qxz -aqY -aqY +awj +axz +tqo +lAh +tbE +tbE aqY bUx bVV -aIA -mdp -aKY +wVp +cLi +gse aMl -aNo +wTx aHr mEg bjg @@ -118961,36 +119396,36 @@ adC adC adC adC -aag -etw -aap -aar -aar -aaq +iyk +iDm +nzi +adC +adC +aam azt aaf +cvA ajc -aie -aie -lTS -ajc +jsu +hni +tSK aie aie amj -anj -aox -qYP -aqW -asw -jfV -auD -awl -arb -arb -arb -arb -aDw -aER +svQ +tpp +pVn +aqY +asv +atI +bgo +awk +deH +idF +lqU +tbE +wPV +aqY aGf bVV aIB @@ -119259,7 +119694,7 @@ adC adC adC adC -aal +adC adC adC adC @@ -119271,29 +119706,29 @@ adC adC aam aap -vxT -aie -aie -aie +ajc +ajc +ajc +ajc ajc aie aie amj amj -aoy -gkw -aqX -asy -asy -asy -awm -axC -sjN -aNz -aCf -aDx -aES -aES +knf +xtF +aqY +asv +atI +atP +awk +axB +qxz +taD +aqY +aqY +aqY +giH aHj aIB aXQ @@ -119359,7 +119794,7 @@ bKP bvP bNP oej -bQv +bGc bDP psl bIF @@ -119560,47 +119995,47 @@ aah adC adC adC -iyk -tZO -nzi -adC adC -iyk -iDm -nzi adC adC adC adC -aam -vxT -aie +aag +etw +aap +aar +aar +aar +eEx +gEZ +ajc aie aie -onU +lTS +ajc aie aie aie -bLI -arc +kVG arq -aqZ -asz -atK -auY -awn -axD -atM -aAH -aqZ -gZd -bNf -bNf +szn +aqW +asw +jfV +auD +awl +aqY +aqY +aqY +aqY +aDw +aER bVV -aIB -nPW -aLb -aHr +ewn +ofw +fUp +qDq +uZB aNr aOF aPB @@ -119862,9 +120297,9 @@ aah adC adC adC -iyk -ukJ -nzi +adC +aal +adC adC adC iyk @@ -119883,26 +120318,26 @@ ajc aie aie apR -mSt -arc +jbZ arq +arc +aqX +asy +asy +asy +awm +axC +tVl +xjn aqZ -asA -dad -auZ -awo -axE -aMz -aAI -vMT -aDz -aET -aGg -aHk +bUx +sQL +xQB +inc aIC aGo aLc -aHs +oQT aNq aMm aOF @@ -120165,7 +120600,7 @@ adC adC adC iyk -ukJ +tZO nzi adC adC @@ -120177,34 +120612,34 @@ adC adC adC adC -ajc +vxT aie aie aie -oPG -emU -apP -apS -bLI -arc +onU +aie +aie +aie +kVG arq -ara -nqq -atM -ava -atM -atM -atM -aAJ +arc aqZ -beh -bPQ -aGh -beu -aII +asz +atK +auY +awn +axD +hRG +aAH +aqZ +qPC +pwI +gqP +aGo +aGo aGo aUr -aMn +kiL aNs aMl aPC @@ -120458,11 +120893,11 @@ adC adC adC adC -aag +aah aat -aay +czV hPO -aaG +aah adC adC adC @@ -120477,36 +120912,36 @@ nzi adC adC adC -aaf -agz -agz -agz -agz -agz -agz -agz -bLI -bLI -bLI -arc +adC +adC +vxT +aie +aie +aie +ajc +aie +aie +aie +kVG arq -ara -asC -atM -avb -atM -axF -atM -aAK +arc aqZ -ktu -bPQ -aGi +asA +dad +auZ +awo +axE +oRT +yiR +jPp +dyx +hxp +shL bev -aIJ -aHs -aHr -aHs +vRG +sKs +wRX +xwT aNt aMm aOF @@ -120760,11 +121195,11 @@ adC adC adC adC -aag +aah xBi -aax +czV hPO -aaG +aah adC adC adC @@ -120773,37 +121208,37 @@ ukJ nzi adC adC -aag -etw -aaG +iyk +iDm +nzi adC adC -aaf -aap -agz -anp -bXT -eOj -sfR -kiI -akf -alk -ubQ -kCR +adC +adC +adC +ajc +aie +aie +aie +oPG +emU +apP +apS +kVG +arq arc -arr +ara +nqq +atM +ava +atM +atM +atM +aAJ aqZ -asD -atN -avc -awp -axG -azb -aAL -aCh aDC -aEU -bet +pgo +skn bew aIK aHr @@ -121064,48 +121499,48 @@ adC adC aag aau -aai +aay hPO -aap -aaw -aaw -aaw +aaG +adC +adC +adC iyk ukJ nzi adC adC -aag -etw -aaG +iyk +iDm +nzi adC adC -aag -agz +adC +aaf agz -kMW -duM -ehU -opl -opl -akf -arq -arq +ajc +ajc +ajc +ajc +ajc +ajc +kVG +kVG +kVG arq arc -ars -aqZ -aqZ -aqZ -aqZ -aqZ ara -azc -aAM -aCi -aDC -bPQ -aGk +asC +atM +avb +atM +axF +atM +aAK +aqZ +ktu +pgo +eVe bex bfo aHs @@ -121365,49 +121800,49 @@ adC adC adC aag -aav -avp -aaE -dgj -aaN -aaN -aap -aap -etw -aap -aaw -aaw -aap -etw +kFi +aax +hPO aaG adC adC +adC +iyk +ukJ +nzi +adC +adC aag -epb -uKK -uKK -agC -ahk -wRT -ajg -jrT -alm -wWK -wWK -are -art -asM -ejG -aDI -ayf -azv -aDI -aDI -whg -ayd -aDD -aEV -aGl +etw +aaG +adC +adC +aaf +aap +agz +anp +gMA +eOj +sfR +kiI +akf +alk +ubQ +kCR +arq +exA +aqZ +asD +atN +avc +awp +axG +azb +aAL +aCh +aDC +wwE +sKP aGo nyI aHr @@ -121464,7 +121899,7 @@ duS jQr bEH bFo -bFo +bMz bGU bHL eQO @@ -121670,45 +122105,45 @@ aag xaG aai hPO -aai -aax -aay aap -aaZ -cVP -qAl -qAl -qAl -qAl -dRb +aaw +aaw +aaw +iyk +ukJ +nzi +adC +adC +aag +etw aaG adC adC aag -tMA agz -anV -agC -ahl -aih -git -hgm -aln +agz +kMW +duM +ehU +opl +opl +akf arq arq arq arq -asN -azx -azx -azx -azw -azx -azx -rcX -azx -aDE -aEW +wPN +aqZ +aqZ +aqZ +aqZ +aqZ +ara +azc +aAM +aCi +aDC +pgo aXQ aXQ aIN @@ -121766,7 +122201,7 @@ emF kLE vIv bFp -bFo +bMz bGV bGV bFo @@ -121969,48 +122404,48 @@ adC adC adC aag -xaG -aai -hPO -fxp -fxp -fxp +iqk +avp +aaE +dgj +aaN +aaN aap aap etw aap -aaq -aaq +aaw +aaw aap etw aaG adC adC aag -all -amo -aqx +epb +uKK +uKK agC -ahl -aih -ahl -aki -jRc -hwT -xrq -arf -asx -asO -bLI -aye -azu -aoE -axI -azd -aAN -aCj -aDJ -bVG +ahk +wRT +ajg +jrT +alm +wWK +wWK +wWK +erT +asM +ejG +aDI +ayf +azv +aDI +aDI +whg +ayd +aDD +uDl aXQ aHr aHs @@ -122018,7 +122453,7 @@ aHr aIP aJU aNx -aOG +dOI aPF aQH aRL @@ -122066,9 +122501,9 @@ bzY bzY bzY bzY -dcu +rYi pxF -bHM +kTD bFo bHM bFo @@ -122273,46 +122708,46 @@ adC aag xaG aai -aaC +hPO +aai +aax +aay aap -aaq -aaq -aaq -iyk -iDm -nzi -adC -adC -iyk -iDm -nzi +aap +cVP +qAl +qAl +qAl +qAl +dRb +aaG adC adC -aam -agz -agz +aag +tMA agz -uVV -jPL -jKe -ajh -aki -amD -apY -apY -apY -ths -atO -amD -amD -amD -aoE -uOo -aze -aAO -aCk -aDK -bVG +anV +agC +ahl +aih +git +hgm +aln +arq +arq +arq +arq +asN +azx +azx +azx +azw +azx +azx +rcX +azx +aDE +aEW aXQ aHs aIO @@ -122324,9 +122759,9 @@ aMo aLf aJT aPD -aMm -aTN -aVb +nwG +lcI +dlj bcg aXN bbH @@ -122366,9 +122801,9 @@ adC aak aaq aaq -aaq -bzY +aap bzY +vHp bzY usr bGW @@ -122574,47 +123009,47 @@ adC adC aag xaG -aax -gGO +aai +hPO +fxp +fxp +fxp +aap +aap +etw +aap +aaq +aaq +aap +etw aaG adC adC -adC -iyk -iDm -nzi -adC -adC -iyk -iDm -nzi -adC -adC -adC -aaj -adC -agz -qQH -eIp -ajl -ajl -akj -amD -pyR -awI -awI -atX -arg -asG -avy +aag +all +amo +aqx +agC +ahl +aih +ahl +aki +jRc +hwT +xrq +arf +asx +asO amD -awt -axK -omw -aAP -ulq -aDL -rJe +rdX +xGj +aoE +axI +azd +aAN +aCj +aDJ +wSZ aXQ aHr aIP @@ -122626,9 +123061,9 @@ aJU aJU aJU aRM -aSI +vRq +aGo aGo -aVc aGo aGo aYS @@ -122668,10 +123103,10 @@ adC adC adC adC -adC -adC -aag -bFr +smf +smf +vPc +smf uul bFr duo @@ -122876,12 +123311,12 @@ adC adC aag xaG -aay -hwF -aaG -adC -adC -adC +aai +aaC +aap +aaq +aaq +aaq iyk iDm nzi @@ -122892,45 +123327,45 @@ iDm nzi adC adC -adC -adC -adC -aqz -ajl -ajl -ajl -ajl -qHj +aam +agz +agz +agz +uVV +jPL +jKe +ajh +aki +amD apY -fKh -awI -awI -atX -awI -awI -atR +apY +apY +ths +atO +amD +amD amD -eGt -axL -azf -aAQ aoE -lvm -bVL -gvB -aHt -aIQ +uOo +aze +aAO +aCk +aDK +vxJ +isN +kLp +maI aJV aJV -aMp -bdt -aMp +vyW +xtf +vyW aJV aJV aRN -aSJ +otx aTO -aVd +aWw aWw aWw oCM @@ -122970,10 +123405,10 @@ adC adC adC adC -adC -adC -aag -bFr +iWf +mSG +mwn +smf fRt bGX pNt @@ -123176,11 +123611,11 @@ adC adC adC adC -aah -adC -aah -adC -aah +aag +xaG +aax +gGO +aaG adC adC adC @@ -123195,30 +123630,30 @@ nzi adC adC adC +aaj adC -adC -avH -ajl -ajl +agz +qQH +eIp ajl ajl -gPb -apY -qvz +akj +amD +pyR awI awI atX -mDJ -awI -atS -apY -awv -axM -azg -aRq -uvT -aDN -aEY +arg +asG +avy +amD +awt +axK +omw +aAP +ulq +aDL +gro aGo aHu aIP @@ -123272,10 +123707,10 @@ adC adC adC adC -adC -adC -aag -bFr +iWf +iwE +iJx +smf uxX bFr mhN @@ -123478,11 +123913,11 @@ adC adC adC adC -aah -adC -aah -adC -aah +aag +xaG +aay +hwF +aaG adC adC adC @@ -123499,28 +123934,28 @@ adC adC adC adC -avI +aqz ajl ajl ajl ajl -wxJ +qHj apY -eVo -pVw -rYw -apW -hqn -obY -atT -oCP -aww -axN -azh -aAS +fKh +awI +awI +atX +awI +awI +atR +amD +eGt +axL +azf +aAQ aoE -aDO -rrB +lvm +gro aGo uAb aIR @@ -123574,10 +124009,10 @@ adC adC adC adC -adC -adC -aag -ceH +iWf +iwE +iqM +pqX fRt bGY pNt @@ -123789,7 +124224,7 @@ adC adC adC iyk -oPz +iDm nzi adC adC @@ -123801,31 +124236,31 @@ adC adC adC adC -agz -ajm -ajm -ajm -ajm -uUA -atW -vPu -arS -apX -apX -ark -asJ -atU -amD -awx -axO -azi -snW -aoE -aDP -aFb +avH +ajl +ajl +ajl +ajl +gPb +apY +qvz +awI +tHo +atX +mDJ +awI +atS +apY +awv +axM +azg +aRq +uvT +aDN +ihL aGo -aVG -aIS +aHr +tkk sLV aLg aMq @@ -123876,10 +124311,10 @@ adC adC adC adC -adC -adC -aag -ceH +iWf +iwE +uCR +iWf fRt bGY pNt @@ -124090,44 +124525,44 @@ aah adC adC adC -adC -aaj -adC -adC -adC -aag -etw -aaG -adC -adC +iyk +iDm +nzi adC adC +iyk +iDm +nzi adC -aii adC adC adC adC -aii -atW -xdL -vBo -vBo -arh -hKY -fTr -dnB -atW -awy -axO -azi -aAU -auq -nse -auq -baL -baL -baL +avI +ajl +ajl +ajl +ajl +wxJ +apY +eVo +pVw +rYw +apW +hqn +obY +atT +oCP +aww +axN +azh +aAS +aoE +aDO +cxl +aGo +sUv +nTf aJY baL aMr @@ -124178,10 +124613,10 @@ adC adC adC adC -adC -adC -aag -ceH +smf +fhw +uCR +iWf bGl bGZ pNt @@ -124392,43 +124827,43 @@ aah adC adC adC +iyk +oPz +nzi adC adC +iyk +iDm +nzi adC adC adC -aag -etw -aaG -adC -adC -adC -adC -adC -lTZ -adC -adC adC adC -bSY -atW -tSN -awI -awI -atX -mDJ -awI -fSd +agz +ajm +ajm +ajm +ajm +uUA atW -avj -htT -jao -avj +vPu +arS +apX +apX +ark +asJ +atU +amD +awx +axO +azi +snW +mEL +rMG +auq +auq auq -swx -pjG -flp -sTC baL aJZ baL @@ -124480,10 +124915,10 @@ adC adC adC adC -adC -adC -aag -ceH +smf +eaB +eNa +iWf bGm whr xuR @@ -124695,7 +125130,7 @@ adC adC adC adC -adC +aaj adC adC adC @@ -124707,30 +125142,30 @@ adC adC adC adC -aah -adC +aii adC adC adC adC +aii atW -mDJ -awI -awI -atX -awI -awI -eJd +xdL +vBo +vBo +arh +hKY +fTr +dnB atW -auW -axQ -azk -kXj +awy +axO +azi +aAU auq -edb -dnJ -puY -ybI +dPW +pjG +pjG +oUX baL aKa baL @@ -124782,10 +125217,10 @@ adC adC adC adC -adC -adC -aaj -bFr +smf +smf +iWf +smf bGn bFr eVd @@ -125009,31 +125444,31 @@ adC adC adC adC -aah -adC +lTZ adC adC adC adC -tqZ -mwY +bSY +atW +tSN awI awI atX +mDJ awI -azp -eJd -apY -suj -axQ -azn -aAW -kVJ -mlq -fHm -eiP -jYd -fqB +fSd +atW +axI +iYS +paF +axI +auq +swx +pjG +pjG +ybI +auq adC aah adC @@ -125304,38 +125739,38 @@ adC adC adC aag -eYx +etw aaG adC adC adC adC adC -ppz +aah adC adC adC adC adC -tqZ -hLn +atW +mDJ awI awI atX -dZb -sem -jiQ +awI +awI +eJd atW -awC +dSo axQ -azn -aAX +azk +kXj +auq +wqg +dnJ +puY +ybI auq -fxZ -oFJ -eiP -xla -fqB adC aaj adC @@ -125605,38 +126040,38 @@ adC adC adC adC -aah -aaj -aah -adC +aag +etw +aaG adC adC adC adC adC +aah adC adC adC adC adC tqZ -tqZ -tqZ -tqZ -tqZ -rrd -asK -azs -atW -dsG +mwY +awI +awI +atX +awI +azp +eJd +apY +suj axQ -azk -aAY -auq -wfn -pjG -jst -emu +azn +aAW +kVJ +mlq +fHm +eiP +jYd fqB adC adC @@ -125907,39 +126342,39 @@ adC adC adC adC -aah -adC -aah -adC -adC -adC -adC +aag +eYx +aaG adC adC adC adC adC +ppz adC adC adC adC adC -aag tqZ +hLn +awI +awI +atX +dZb +sem +jiQ atW -lrG -apY -atW -awE -axS -gQe -mCe -auq -auq -qcF +awC +axQ +azn +aAX auq +fxZ +oFJ +eiP +xla fqB -lRw adC adC adC @@ -126083,165 +126518,165 @@ adC adC adC adC -adC -adC -adC -adC -adC -adC -adC -adC -adC -adC -adC -adC -adC -adC -adC -adC -adC -adC -adC -adC -adC -adC -adC -adC -adC -adC -adC -adC -adC -adC -adC -adC -adC -adC -adC -adC -adC -adC -adC -adC -adC -"} -(202,1,1) = {" -adC -adC -adC -adC -adC -adC -adC -adC -adC -adC -adC -adC -adC -adC -adC -adC -adC -adC -adC -adC -adC -adC -adC -adC -adC -adC -adC -adC -adC -adC -adC -adC -adC -adC -adC -adC -adC -adC -adC -adC -adC -adC -adC -adC -adC -adC -adC -adC -adC -adC -adC -adC -adC -adC -adC -adC -adC -adC -adC -adC -adC -adC -adC -adC -adC -adC -adC -adC -adC -adC -aah -adC -aah -adC -aah -adC -adC -adC -adC -adC -adC -adC -adC -aah -adC -aah -adC -adC -adC -adC -adC -adC -adC -adC -adC -adC -adC -adC -adC -adC -aag -mPp -axT -aBb -vdC -nhn -awF -azz -qhP -tyN -nhn -vdC -arn -pJc -mPp -aaG +adC +adC +adC +adC +adC +adC +adC +adC +adC +adC +adC +adC +adC +adC +adC +adC +adC +adC +adC +adC +adC +adC +adC +adC +adC +adC +adC +adC +adC +adC +adC +adC +adC +adC +adC +adC +adC +adC +adC +adC +adC +"} +(202,1,1) = {" +adC +adC +adC +adC +adC +adC +adC +adC +adC +adC +adC +adC +adC +adC +adC +adC +adC +adC +adC +adC +adC +adC +adC +adC +adC +adC +adC +adC +adC +adC +adC +adC +adC +adC +adC +adC +adC +adC +adC +adC +adC +adC +adC +adC +adC +adC +adC +adC +adC +adC +adC +adC +adC +adC +adC +adC +adC +adC +adC +adC +adC +adC +adC +adC +adC +adC +adC +adC +adC +adC +aah +adC +aah +adC +aah +adC +adC +adC +adC +adC +adC +adC +adC +aah +aaj +aah +adC +adC +adC +adC +adC +adC +adC +adC +adC +adC +adC +tqZ +tqZ +tqZ +tqZ +tqZ +rrd +asK +azs +atW +dsG +axQ +azk +aAY +auq +wfn +pjG +jst +emu +fqB adC adC adC @@ -126528,22 +126963,22 @@ adC adC adC adC -mPp -mPp -eCD -aBb -atZ -avj -juE -oyc -mPc -qUI -avj -xdC -arn -ydh -mPp -mPp +aag +tqZ +atW +lrG +apY +atW +awE +axS +gQe +mCe +auq +auq +qcF +auq +fqB +lRw adC adC adC @@ -126778,74 +127213,74 @@ adC adC adC adC -adC -adC -adC -adC -adC -adC -adC -adC -adC -adC -adC -adC -adC -adC -adC -adC -adC -adC -adC -adC -adC -adC -aah -adC -aah -adC -aah -adC -adC -adC -adC -adC -adC -adC -adC -aah -adC -aah -adC -adC -adC -adC -adC -adC -adC -adC -adC -adC -adC -adC -adC -adC -mPp -aud -arn -aBb -awJ -gpQ -qkY -cHQ -dJW -awG -svZ -jvO -arn -eCD -xia -mPp +adC +adC +adC +adC +adC +adC +adC +adC +adC +adC +adC +adC +adC +adC +adC +adC +adC +adC +adC +adC +adC +adC +aah +adC +aah +adC +aah +adC +adC +adC +adC +adC +adC +adC +adC +aah +adC +aah +adC +adC +adC +adC +adC +adC +adC +adC +adC +adC +adC +adC +adC +adC +aag +mPp +axT +aBb +vdC +nhn +awF +azz +qhP +tyN +nhn +vdC +arn +pJc +mPp +aaG adC adC adC @@ -127133,20 +127568,20 @@ adC adC adC mPp -apZ -arn -azq -jVY -aDF -rNW -rNW -hpR -awG -uqe -lVE -arn +mPp +eCD +aBb +atZ +avj +juE +oyc +mPc +qUI +avj +xdC arn -aHw +ydh +mPp mPp adC adC @@ -127435,20 +127870,20 @@ adC adC adC mPp -apZ -arn +aud arn -auc -avj -fhM -awG +aBb +awJ +gpQ +qkY +cHQ +dJW awG -rFl -avj -xiw -arn +svZ +jvO arn -aHw +eCD +xia mPp adC adC @@ -127737,20 +128172,20 @@ adC adC adC mPp -apZ -arn +srq arn -fnq -nhn -nhn -oLV -pbM -nhn -nhn -iTs +azq +jVY +aDF +rNW +rNW +hpR +awG +uqe +lVE arn arn -aHw +srq mPp adC adC @@ -128008,138 +128443,11 @@ adC adC adC adC -aah -adC -aah -adC -aah -adC -adC -adC -adC -adC -adC -adC -adC -aah -adC -aah -adC -adC -adC -adC -adC -adC -adC -adC -adC -adC -adC -adC -adC -adC -mPp -apZ -arn -arn -aCm -aDH -nhn -dJQ -hXZ -nhn -aDH -arn -arn -arn -aHw -mPp -adC -adC -adC -adC -adC -adC -adC -adC -adC -adC -adC -adC -adC -adC -adC -adC -adC -adC -adC -adC -adC -adC -adC -adC -adC -adC -adC -aah -adC -aah -adC -aah -adC -adC -adC -adC -adC -adC -adC -adC -adC -adC -adC -adC -adC -adC -adC -adC -adC -adC -adC -adC -adC -adC -adC -adC -adC -adC -bza -adC -adC -adC -adC -adC -adC -adC -adC -adC -adC -adC -adC -adC -adC -adC -aag -gDG -hqQ -aap -suF -aaG -adC -adC -adC -adC +aah adC +aah adC +aah adC adC adC @@ -128153,17 +128461,11 @@ adC aah adC adC -hAi -dKw -gJZ adC adC adC -aah adC -aah adC -aah adC adC adC @@ -128171,6 +128473,22 @@ adC adC adC adC +mPp +apZ +arn +arn +auc +avj +fhM +awG +awG +rFl +avj +xiw +arn +arn +aHw +mPp adC adC adC @@ -128198,8 +128516,11 @@ adC adC adC adC +aah adC +aah adC +aah adC adC adC @@ -128215,7 +128536,6 @@ adC adC adC adC -aae adC adC adC @@ -128227,6 +128547,7 @@ adC adC adC adC +bza adC adC adC @@ -128238,12 +128559,16 @@ adC adC adC adC -"} -(209,1,1) = {" adC adC adC adC +aag +gDG +hqQ +aap +suF +aaG adC adC adC @@ -128258,14 +128583,22 @@ adC adC adC adC +aah adC +aah adC adC +hAi +dKw +gJZ adC adC adC +aah adC +aah adC +aah adC adC adC @@ -128310,22 +128643,18 @@ adC adC adC adC -aah adC -aah adC -aah adC adC adC adC adC +aae adC adC adC -aah adC -aah adC adC adC @@ -128340,26 +128669,12 @@ adC adC adC adC -mPp -avh -arn -arn -arn -arn -gJj -awG -awG -rUg -arn -arn -eBl -arn -avh -mPp adC adC adC adC +"} +(209,1,1) = {" adC adC adC @@ -128383,11 +128698,8 @@ adC adC adC adC -aah adC -aah adC -aah adC adC adC @@ -128414,7 +128726,6 @@ adC adC adC adC -byW adC adC adC @@ -128430,18 +128741,15 @@ adC adC adC adC -aag -gDG -hqQ -aap -suF -aaG adC adC adC adC +aah adC +aah adC +aah adC adC adC @@ -128452,20 +128760,12 @@ adC adC aah adC -aag -aar -aar -hAi -dKw -gJZ +aah adC adC adC -aah adC -aah adC -aah adC adC adC @@ -128475,6 +128775,22 @@ adC adC adC adC +mPp +apZ +arn +arn +fnq +nhn +nhn +oLV +pbM +nhn +nhn +iTs +arn +arn +aHw +mPp adC adC adC @@ -128502,8 +128818,11 @@ adC adC adC adC +aah adC +aah adC +aah adC adC adC @@ -128530,6 +128849,7 @@ adC adC adC adC +byW adC adC adC @@ -128540,13 +128860,17 @@ adC adC adC adC -"} -(210,1,1) = {" adC adC adC adC adC +aag +gDG +hqQ +aap +suF +aaG adC adC adC @@ -128561,12 +128885,22 @@ adC adC adC adC +aah adC +aag +aar +aar +hAi +dKw +gJZ adC adC adC +aah adC +aah adC +aah adC adC adC @@ -128612,11 +128946,8 @@ adC adC adC adC -aah adC -aah adC -aah adC adC adC @@ -128625,9 +128956,7 @@ adC adC adC adC -aah adC -aah adC adC adC @@ -128642,26 +128971,12 @@ adC adC adC adC -mPp -mPp -srq -arn -arn -aEX -awJ -awG -awG -jvO -aEX -arn -arn -srq -mPp -mPp adC adC adC adC +"} +(210,1,1) = {" adC adC adC @@ -128685,11 +129000,8 @@ adC adC adC adC -aah adC -aah adC -aah adC adC adC @@ -128715,9 +129027,6 @@ adC adC adC adC -aak -bJW -acm adC adC adC @@ -128732,18 +129041,17 @@ adC adC adC adC -aag -gDG -hqQ -aap -suF -aaG adC adC adC adC adC adC +aah +adC +aah +adC +aah adC adC adC @@ -128757,17 +129065,11 @@ adC aah adC adC -hAi -uUo -gJZ adC adC adC -aah adC -aah adC -aah adC adC adC @@ -128775,6 +129077,26 @@ adC adC adC adC +mPp +apZ +arn +arn +aCm +aDH +nhn +dJQ +hXZ +nhn +aDH +arn +arn +arn +aHw +mPp +adC +adC +adC +adC adC adC adC @@ -128798,8 +129120,11 @@ adC adC adC adC +aah adC +aah adC +aah adC adC adC @@ -128825,10 +129150,11 @@ adC adC adC adC +aak +bJW +acm adC adC -cBQ -cBQ adC adC adC @@ -128841,9 +129167,13 @@ adC adC adC adC +aag +gDG +hqQ +aap +suF +aaG adC -"} -(211,1,1) = {" adC adC adC @@ -128857,14 +129187,22 @@ adC adC adC adC +aah adC +aah adC adC +hAi +uUo +gJZ adC adC adC +aah adC +aah adC +aah adC adC adC @@ -128914,11 +129252,8 @@ adC adC adC adC -aah adC -aah adC -aah adC adC adC @@ -128927,9 +129262,52 @@ adC adC adC adC -aah +cBQ +cBQ +adC +adC +adC +adC +adC +adC +adC +adC +adC +adC +adC +adC +adC +"} +(211,1,1) = {" +adC +adC +adC +adC +adC +adC +adC +adC +adC +adC +adC +adC +adC +adC +adC +adC +adC +adC +adC +adC +adC +adC +adC +adC +adC +adC +adC +adC adC -aah adC adC adC @@ -128944,22 +129322,79 @@ adC adC adC adC -aag -mPp -azm -azr -arn -arn -nBp -awG -iEc -jvO -arn -arn -azr -mtb -mPp -aaG +adC +adC +adC +adC +adC +adC +adC +adC +adC +adC +adC +adC +adC +adC +adC +adC +adC +adC +adC +adC +adC +adC +adC +adC +adC +adC +adC +aah +adC +aah +adC +aah +adC +adC +adC +adC +adC +adC +adC +adC +aah +adC +aah +adC +adC +adC +adC +adC +adC +adC +adC +adC +adC +adC +adC +adC +adC +mPp +avh +arn +arn +arn +arn +gJj +awG +awG +rUg +arn +arn +eBl +arn +avh +mPp adC adC adC @@ -129246,22 +129681,22 @@ adC adC adC adC -aag mPp mPp -mPp -oQP +srq +arn +arn aEX -aGq -hHR -suD -ssI +awJ +awG +awG +jvO aEX -meq -mPp +arn +arn +srq mPp mPp -aaG adC adC adC @@ -129548,22 +129983,22 @@ adC adC adC adC -aam -aaq -aap -mPp -mPp -atV -mPp -mPp -mPp -mPp -atV +aag mPp +azm +azr +arn +arn +nBp +awG +iEc +jvO +arn +arn +azr +mtb mPp -aap -aaq -acW +aaG adC adC adC @@ -129850,22 +130285,22 @@ adC adC adC adC -adC -adC -aam -aaq -aaq -aap -aaq -aaq -aaq -aaq -aap -aaq -aaq -acW -adC -adC +aag +mPp +mPp +mPp +oQP +aEX +aGq +hHR +suD +ssI +aEX +meq +mPp +mPp +mPp +aaG adC adC adC @@ -130152,22 +130587,22 @@ adC adC adC adC -adC -adC -adC -adC -adC -aah -adC -adC -adC -adC -aah -adC -adC -adC -adC -adC +aam +aaq +aap +mPp +mPp +atV +mPp +mPp +mPp +mPp +atV +mPp +mPp +aap +aaq +acW adC adC adC @@ -130456,18 +130891,18 @@ adC adC adC adC -adC -adC -adC -aah -adC -adC -adC -adC -aah -adC -adC -adC +aam +aaq +aaq +aap +aaq +aaq +aaq +aaq +aap +aaq +aaq +acW adC adC adC @@ -131365,12 +131800,12 @@ adC adC adC adC -aaj +aah adC adC adC adC -aaj +aah adC adC adC @@ -131667,12 +132102,12 @@ adC adC adC adC +aah adC adC adC adC -adC -adC +aah adC adC adC @@ -131969,12 +132404,12 @@ adC adC adC adC +aaj adC adC adC adC -adC -adC +aaj adC adC adC diff --git a/maps/cogmap2.dmm b/maps/cogmap2.dmm index b4094c065e659..103d05a6e6578 100644 --- a/maps/cogmap2.dmm +++ b/maps/cogmap2.dmm @@ -750,18 +750,6 @@ }, /turf/space, /area/space) -"acs" = ( -/obj/machinery/computer/genetics{ - dir = 4 - }, -/obj/disposalpipe/segment/transport, -/obj/item/cloneModule/genepowermodule, -/turf/simulated/floor/greenwhite{ - dir = 8 - }, -/area/station/medical/research{ - name = "Genetic Research" - }) "act" = ( /mob/living/silicon/hivebot/eyebot, /obj/decal/stripe_delivery, @@ -2089,17 +2077,6 @@ }, /turf/simulated/floor/plating, /area/station/hangar/catering) -"agK" = ( -/obj/machinery/door/airlock/pyro/external, -/obj/forcefield/energyshield/perma/doorlink{ - desc = "A door-linked force field that prevents gasses from passing through it."; - name = "Door-linked Atmospheric Forcefield"; - powerlevel = 1 - }, -/turf/simulated/floor/caution/northsouth{ - dir = 1 - }, -/area/station/maintenance/solar/north) "agL" = ( /obj/machinery/door/airlock/pyro/glass{ dir = 4 @@ -3572,7 +3549,7 @@ id = "crematorium"; pixel_y = 28 }, -/obj/stool/chair, +/obj/stool/chair/black, /turf/simulated/floor/sanitary/white, /area/station/medical/crematorium) "alx" = ( @@ -3860,6 +3837,7 @@ "amj" = ( /obj/table/auto, /obj/item/device/radio/intercom/catering, +/obj/item/storage/box/popsicle_sticks, /turf/simulated/floor/specialroom/freezer, /area/station/crew_quarters/catering) "amk" = ( @@ -5242,18 +5220,6 @@ }, /turf/simulated/wall/auto/reinforced/supernorn, /area/station/hangar/arrivals) -"aqE" = ( -/obj/machinery/door/airlock/pyro/external, -/obj/cable{ - icon_state = "1-2" - }, -/obj/forcefield/energyshield/perma/doorlink{ - desc = "A door-linked force field that prevents gasses from passing through it."; - name = "Door-linked Atmospheric Forcefield"; - powerlevel = 1 - }, -/turf/simulated/floor/caution/northsouth, -/area/station/hangar/arrivals) "aqF" = ( /turf/simulated/wall/auto/reinforced/supernorn, /area/station/hangar/arrivals) @@ -6225,7 +6191,7 @@ /area/station/crew_quarters/catering) "ats" = ( /obj/table/auto, -/obj/submachine/mixer, +/obj/machinery/mixer, /obj/item/device/radio/intercom/catering, /turf/simulated/floor/specialroom/cafeteria, /area/station/crew_quarters/kitchen) @@ -10124,7 +10090,7 @@ /area/station/crew_quarters/cafeteria) "aDx" = ( /obj/table/auto, -/obj/submachine/mixer, +/obj/machinery/mixer, /obj/disposalpipe/segment/food{ dir = 4 }, @@ -11679,14 +11645,8 @@ }, /area/station/crew_quarters/garden) "aIm" = ( -/obj/noticeboard/persistent{ - name = "Medbay persistent notice board"; - persistent_id = "medbay" - }, -/turf/simulated/floor/bluewhite{ - dir = 1 - }, -/area/station/medical/medbay) +/turf/simulated/floor/white, +/area/station/medical/medbay/lobby) "aIn" = ( /turf/simulated/floor/green/corner{ dir = 1 @@ -15482,12 +15442,6 @@ /obj/decal/stripe_caution, /turf/simulated/floor, /area/station/crew_quarters/quartersA) -"aTi" = ( -/obj/machinery/computer/operating{ - id = "OR2" - }, -/turf/simulated/floor/white, -/area/station/medical/medbay/surgery) "aTj" = ( /turf/simulated/wall/auto/reinforced/supernorn, /area/station/security/checkpoint/arrivals) @@ -18296,18 +18250,6 @@ }, /turf/simulated/floor/plating, /area/station/maintenance/northeast) -"bbj" = ( -/obj/machinery/door/airlock/pyro/external, -/obj/machinery/atmospherics/pipe/simple/color_pipe/green_pipe{ - dir = 1 - }, -/obj/forcefield/energyshield/perma/doorlink{ - desc = "A door-linked force field that prevents gasses from passing through it."; - name = "Door-linked Atmospheric Forcefield"; - powerlevel = 1 - }, -/turf/simulated/floor/caution/northsouth, -/area/station/maintenance/north) "bbk" = ( /turf/simulated/wall/auto/reinforced/supernorn, /area/station/janitor/supply) @@ -18341,18 +18283,6 @@ /obj/disposalpipe/segment/mail/vertical, /turf/simulated/floor/plating/scorched, /area/station/maintenance/northeast) -"bbs" = ( -/obj/machinery/door/airlock/pyro/external, -/obj/cable{ - icon_state = "1-2" - }, -/obj/forcefield/energyshield/perma/doorlink{ - desc = "A door-linked force field that prevents gasses from passing through it."; - name = "Door-linked Atmospheric Forcefield"; - powerlevel = 1 - }, -/turf/simulated/floor/caution/northsouth, -/area/station/maintenance/northeast) "bbt" = ( /obj/machinery/disposal, /obj/disposalpipe/trunk{ @@ -19061,7 +18991,7 @@ /area/station/engine/substation/west) "bdz" = ( /obj/rack, -/obj/item/clothing/suit/fire, +/obj/item/clothing/suit/hazard/fire, /obj/item/clothing/mask/gas/emergency, /obj/item/clothing/head/helmet/firefighter, /obj/item/tank/air, @@ -19829,21 +19759,6 @@ /obj/disposalpipe/segment, /turf/simulated/wall/auto/reinforced/supernorn, /area/station/engine/substation/west) -"bgv" = ( -/obj/machinery/atmospherics/pipe/simple{ - level = 2 - }, -/obj/disposalpipe/segment/mail/vertical, -/obj/machinery/door/airlock/pyro/external{ - req_access_txt = "40" - }, -/obj/forcefield/energyshield/perma/doorlink{ - desc = "A door-linked force field that prevents gasses from passing through it."; - name = "Door-linked Atmospheric Forcefield"; - powerlevel = 1 - }, -/turf/simulated/floor/caution/northsouth, -/area/station/engine/substation/west) "bgw" = ( /obj/securearea{ desc = "A warning sign which reads 'EXTERNAL AIRLOCK'"; @@ -23366,14 +23281,23 @@ }, /area/station/hallway/primary/west) "brz" = ( -/obj/rack, -/obj/item/clothing/suit/hazard/paramedic, -/obj/item/clothing/glasses/healthgoggles, -/obj/item/storage/belt/medical, -/turf/simulated/floor/bluewhite{ - dir = 9 +/obj/table/auto, +/obj/item/paper_bin, +/obj/item/stamp{ + pixel_x = 5; + pixel_y = 12 }, -/area/station/medical/medbay) +/obj/item/hand_labeler{ + pixel_x = 7; + pixel_y = -7 + }, +/obj/item/storage/box/health_upgrade_kit{ + pixel_x = -8; + pixel_y = 11 + }, +/obj/machinery/light/incandescent, +/turf/simulated/floor/black, +/area/station/medical/medbay/reception) "brB" = ( /obj/cable{ icon_state = "1-4" @@ -26009,12 +25933,10 @@ /turf/simulated/floor/carpet/green/fancy/edge/se, /area/station/crew_quarters/heads) "byE" = ( -/obj/table/reinforced/chemistry/auto, -/obj/item/reagent_containers/glass/petridish, -/turf/simulated/floor/greenwhite{ - dir = 4 - }, -/area/station/medical/cdc) +/obj/disposalpipe/segment/horizontal, +/obj/disposalpipe/segment/mail/vertical, +/turf/simulated/floor/blue/corner, +/area/station/medical/medbay/surgery/storage) "byF" = ( /obj/machinery/portable_reclaimer, /turf/simulated/floor/shuttlebay, @@ -30396,7 +30318,7 @@ /area/station/engine/core) "bKa" = ( /obj/table/reinforced/auto, -/obj/item/clothing/suit/fire/heavy, +/obj/item/clothing/suit/hazard/fire/heavy, /obj/item/clothing/mask/gas, /obj/item/clothing/head/helmet/welding, /turf/simulated/floor/engine, @@ -35570,7 +35492,7 @@ /area/station/storage/emergency) "bXW" = ( /obj/rack, -/obj/item/clothing/suit/fire, +/obj/item/clothing/suit/hazard/fire, /obj/item/clothing/mask/gas/emergency, /obj/item/clothing/head/helmet/firefighter, /obj/item/tank/air, @@ -36030,7 +35952,7 @@ /area/station/storage/emergency) "bZl" = ( /obj/rack, -/obj/item/clothing/suit/fire, +/obj/item/clothing/suit/hazard/fire, /obj/item/clothing/mask/gas/emergency, /obj/item/clothing/head/helmet/firefighter, /obj/item/tank/air, @@ -37626,20 +37548,6 @@ /obj/disposalpipe/segment, /turf/simulated/wall/auto/reinforced/supernorn, /area/station/engine/substation/east) -"cfd" = ( -/obj/machinery/atmospherics/pipe/simple{ - level = 2 - }, -/obj/machinery/door/airlock/pyro/external{ - req_access_txt = "40" - }, -/obj/forcefield/energyshield/perma/doorlink{ - desc = "A door-linked force field that prevents gasses from passing through it."; - name = "Door-linked Atmospheric Forcefield"; - powerlevel = 1 - }, -/turf/simulated/floor/caution/northsouth, -/area/station/engine/substation/east) "cfe" = ( /obj/securearea{ desc = "A warning sign which reads 'EXTERNAL AIRLOCK'"; @@ -38120,6 +38028,19 @@ /obj/machinery/atmospherics/pipe/manifold/overfloor, /turf/simulated/floor/plating, /area/station/engine/substation/east) +"cgL" = ( +/obj/disposalpipe/segment/transport{ + dir = 4 + }, +/obj/cable{ + icon_state = "4-8" + }, +/obj/machinery/light/incandescent, +/obj/machinery/light_switch/north, +/turf/simulated/floor/blue/side{ + dir = 1 + }, +/area/station/medical/medbay/surgery/storage) "cgM" = ( /obj/disposalpipe/segment{ dir = 4 @@ -38202,15 +38123,6 @@ /obj/disposalpipe/segment/mail/vertical, /turf/simulated/wall/auto/reinforced/supernorn, /area/station/maintenance/southeast) -"cgZ" = ( -/obj/machinery/door/airlock/pyro/external, -/obj/forcefield/energyshield/perma/doorlink{ - desc = "A door-linked force field that prevents gasses from passing through it."; - name = "Door-linked Atmospheric Forcefield"; - powerlevel = 1 - }, -/turf/simulated/floor/caution/northsouth, -/area/station/maintenance/northeast) "cha" = ( /turf/simulated/wall/auto/reinforced/supernorn, /area/station/maintenance/northeast) @@ -38355,7 +38267,7 @@ /area/station/engine/substation/east) "chE" = ( /obj/rack, -/obj/item/clothing/suit/fire, +/obj/item/clothing/suit/hazard/fire, /obj/item/clothing/mask/gas/emergency, /obj/item/clothing/head/helmet/firefighter, /obj/item/tank/air, @@ -38366,7 +38278,7 @@ /area/station/engine/substation/east) "chF" = ( /obj/rack, -/obj/item/clothing/suit/fire, +/obj/item/clothing/suit/hazard/fire, /obj/item/clothing/mask/gas/emergency, /obj/item/clothing/head/helmet/firefighter, /obj/item/tank/air, @@ -40728,8 +40640,8 @@ /turf/simulated/floor/circuit/green, /area/station/science/teleporter) "cot" = ( -/obj/stool/bench/auto, /obj/disposalpipe/segment/mail/vertical, +/obj/stool/bench/purple/auto, /turf/simulated/floor/caution/west, /area/station/science/teleporter) "cou" = ( @@ -40858,14 +40770,7 @@ /turf/simulated/floor/plating, /area/station/storage/warehouse) "coR" = ( -/obj/rack, -/obj/item/circuitboard/teleporter, -/obj/item/circuitboard/card, -/obj/item/circuitboard/robot_module_rewriter, -/obj/item/circuitboard/cloning, -/obj/item/circuitboard/barcode_qm, -/obj/item/circuitboard/barcode, -/obj/item/circuitboard/qmorder, +/obj/rack/organized/techstorage_eng, /turf/simulated/floor/plating, /area/station/storage/warehouse) "coS" = ( @@ -41383,11 +41288,11 @@ /turf/simulated/floor/black, /area/station/science/teleporter) "cqh" = ( -/obj/stool/bench/auto, /obj/item/device/radio/intercom/science{ dir = 4 }, /obj/disposalpipe/segment/mail/vertical, +/obj/stool/bench/purple/auto, /turf/simulated/floor/caution/corner/sw, /area/station/science/teleporter) "cqi" = ( @@ -42024,6 +41929,10 @@ icon_state = "1-2" }, /obj/machinery/firealarm/east, +/obj/disposalpipe/segment/morgue, +/obj/cable{ + icon_state = "1-8" + }, /turf/simulated/floor/plating, /area/station/maintenance/south) "csh" = ( @@ -42751,15 +42660,6 @@ /area/station/janitor/office) "cul" = ( /obj/decal/cleanable/cobweb, -/obj/cable{ - icon_state = "0-4" - }, -/obj/machinery/power/apc{ - areastring = "Cloning"; - dir = 8; - name = "Cloning APC"; - pixel_x = -24 - }, /turf/simulated/floor/plating, /area/station/maintenance/south) "cun" = ( @@ -42967,15 +42867,6 @@ }, /turf/simulated/floor/caution/north, /area/station/science/bot_storage) -"cuU" = ( -/obj/cable{ - icon_state = "2-8" - }, -/obj/cable{ - icon_state = "2-4" - }, -/turf/simulated/floor/plating, -/area/station/maintenance/south) "cuV" = ( /obj/machinery/power/apc/autoname_north, /obj/cable{ @@ -44060,7 +43951,8 @@ icon_state = "1-2" }, /obj/disposalpipe/segment/morgue{ - dir = 4 + dir = 4; + icon_state = "pipe-c" }, /turf/simulated/floor/plating, /area/station/maintenance/south) @@ -45141,14 +45033,7 @@ /turf/simulated/floor/plating, /area/station/bridge) "cBk" = ( -/obj/rack, -/obj/item/circuitboard/arcade, -/obj/item/circuitboard/powermonitor, -/obj/item/circuitboard/powermonitor_smes, -/obj/item/circuitboard/operating, -/obj/item/circuitboard/genetics, -/obj/item/circuitboard/qmsupply, -/obj/item/circuitboard/telescope, +/obj/rack/organized/techstorage_med, /turf/simulated/floor/plating, /area/station/storage/warehouse) "cBl" = ( @@ -45458,6 +45343,22 @@ }, /turf/simulated/floor/black, /area/station/medical/robotics) +"cCn" = ( +/obj/machinery/door/airlock/pyro/external, +/obj/mapping_helper/access/mining, +/obj/decal/stripe_delivery, +/obj/forcefield/energyshield/perma/doorlink{ + desc = "A door-linked force field that prevents gasses from passing through it."; + name = "Door-linked Atmospheric Forcefield"; + powerlevel = 1 + }, +/obj/mapping_helper/airlock/cycler{ + name = "Mining"; + cycle_id = "mining"; + enter_id = "inner" + }, +/turf/simulated/floor, +/area/station/mining/staff_room) "cCo" = ( /obj/decal/poster/wallsign/medbay_left, /obj/disposalpipe/segment/mail/vertical, @@ -45877,12 +45778,6 @@ /obj/disposalpipe/segment/mail/bent/west, /turf/simulated/floor/specialroom/medbay, /area/station/medical/medbay/lobby) -"cDz" = ( -/obj/machinery/atmospherics/pipe/simple/color_pipe/cyan_pipe{ - dir = 6 - }, -/turf/simulated/floor/specialroom/medbay, -/area/station/medical/medbay/lobby) "cDA" = ( /obj/machinery/atmospherics/pipe/simple/color_pipe/cyan_pipe{ dir = 4 @@ -45917,12 +45812,18 @@ /turf/simulated/floor/plating, /area/research_outpost) "cDG" = ( +/obj/disposalpipe/segment/morgue{ + dir = 4 + }, /turf/simulated/floor/blue/side{ dir = 1 }, /area/station/medical/medbay/lobby) "cDH" = ( /obj/item/device/radio/intercom/medical, +/obj/disposalpipe/segment/morgue{ + dir = 4 + }, /turf/simulated/floor/blue/side{ dir = 1 }, @@ -45932,30 +45833,45 @@ dir = 6; icon_state = "bot2" }, +/obj/disposalpipe/segment/morgue{ + dir = 4 + }, /turf/simulated/floor/blue/side{ - dir = 1 + dir = 9 }, /area/station/medical/medbay/lobby) "cDK" = ( /obj/landmark/halloween, +/obj/disposalpipe/segment/morgue{ + dir = 4 + }, /turf/simulated/floor/blue/side{ dir = 1 }, /area/station/medical/medbay/lobby) "cDL" = ( /obj/disposalpipe/segment/mail/vertical, +/obj/disposalpipe/segment/morgue{ + dir = 4 + }, /turf/simulated/floor/blue/side{ dir = 1 }, /area/station/medical/medbay/lobby) "cDM" = ( /obj/disposalpipe/segment, +/obj/disposalpipe/segment/morgue{ + dir = 4 + }, /turf/simulated/floor/blue/side{ dir = 1 }, /area/station/medical/medbay/lobby) "cDN" = ( /obj/machinery/navbeacon/guardbotsecbot_circularpatrol/beacon14, +/obj/disposalpipe/segment/morgue{ + dir = 4 + }, /turf/simulated/floor/blue/side{ dir = 5 }, @@ -45967,6 +45883,9 @@ pixel_y = 21 }, /obj/machinery/light_switch/north, +/obj/disposalpipe/segment/morgue{ + dir = 4 + }, /turf/simulated/floor/stairs{ dir = 4; icon_state = "Stairs_wide" @@ -45974,6 +45893,9 @@ /area/station/medical/medbay/lobby) "cDQ" = ( /obj/landmark/halloween, +/obj/disposalpipe/segment/morgue{ + dir = 4 + }, /turf/simulated/floor/specialroom/medbay, /area/station/crew_quarters/market) "cDR" = ( @@ -45985,12 +45907,18 @@ layer = 9.1; pixel_y = 21 }, +/obj/disposalpipe/segment/morgue{ + dir = 4 + }, /turf/simulated/floor/stairs{ dir = 4; icon_state = "Stairs_wide" }, /area/station/crew_quarters/market) "cDU" = ( +/obj/disposalpipe/segment/morgue{ + dir = 4 + }, /turf/simulated/floor/yellow/side{ dir = 8 }, @@ -46000,10 +45928,13 @@ icon_state = "1-2" }, /obj/disposalpipe/segment, +/obj/disposalpipe/segment/morgue{ + dir = 4 + }, /turf/simulated/floor, /area/station/crew_quarters/market) "cDW" = ( -/obj/disposalpipe/segment/morgue, +/obj/disposalpipe/junction/left/south, /turf/simulated/floor, /area/station/crew_quarters/market) "cDX" = ( @@ -46464,122 +46395,26 @@ }, /turf/simulated/floor/specialroom/medbay, /area/station/medical/medbay/lobby) -"cFn" = ( -/obj/disposalpipe/junction{ - dir = 4 - }, -/obj/cable{ - icon_state = "4-8" - }, -/turf/simulated/floor/specialroom/medbay, -/area/station/medical/medbay/lobby) -"cFo" = ( -/obj/disposalpipe/segment{ - dir = 4 - }, -/obj/cable{ - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/color_pipe/cyan_pipe{ - dir = 1 - }, -/turf/simulated/floor/specialroom/medbay, -/area/station/medical/medbay/lobby) "cFp" = ( /obj/disposalpipe/segment{ dir = 8; icon_state = "pipe-c" }, -/obj/machinery/light, -/obj/cable{ - icon_state = "4-8" +/obj/machinery/atmospherics/pipe/simple/color_pipe/cyan_pipe{ + dir = 1 }, /turf/simulated/floor/specialroom/medbay, /area/station/medical/medbay/lobby) -"cFq" = ( -/obj/health_scanner/floor{ - find_in_range = 0; - id = "lobby_left" - }, -/obj/cable{ - icon_state = "4-8" - }, -/obj/decal/stripe_caution, -/turf/simulated/floor/white, -/area/station/medical/medbay/lobby) "cFr" = ( /obj/machinery/navbeacon/guardbotsecbot_circularpatrol/beacon13, -/obj/cable{ - icon_state = "2-4" - }, -/obj/cable{ - icon_state = "2-8" - }, -/obj/landmark/gps_waypoint, -/obj/decal/stripe_caution, -/turf/simulated/floor/white, -/area/station/medical/medbay/lobby) -"cFs" = ( -/obj/health_scanner/floor{ - find_in_range = 0; - id = "lobby_right" - }, -/obj/cable{ - icon_state = "4-8" - }, -/obj/decal/stripe_caution, -/turf/simulated/floor/white, -/area/station/medical/medbay/lobby) -"cFt" = ( -/obj/disposalpipe/segment{ - dir = 1; - icon_state = "pipe-c" - }, -/obj/machinery/light, -/obj/cable{ - icon_state = "4-8" - }, -/obj/machinery/status_display{ - pixel_y = -30 - }, -/turf/simulated/floor/specialroom/medbay, -/area/station/medical/medbay/lobby) -"cFu" = ( -/obj/disposalpipe/junction{ - dir = 8; - icon_state = "pipe-j2" - }, -/obj/cable{ - icon_state = "4-8" - }, -/turf/simulated/floor/specialroom/medbay, -/area/station/medical/medbay/lobby) -"cFv" = ( -/obj/disposalpipe/segment{ - dir = 2; - icon_state = "pipe-c" - }, -/obj/cable{ - icon_state = "4-8" - }, -/turf/simulated/floor/specialroom/medbay, -/area/station/medical/medbay/lobby) -"cFw" = ( -/obj/disposalpipe/segment/transport, -/obj/cable{ - icon_state = "4-8" - }, /turf/simulated/floor/specialroom/medbay, /area/station/medical/medbay/lobby) "cFx" = ( -/obj/cable{ - icon_state = "4-8" +/obj/disposalpipe/segment/transport{ + dir = 4 }, -/turf/simulated/floor/specialroom/medbay, -/area/station/medical/medbay/lobby) -"cFy" = ( -/obj/cable{ - icon_state = "2-8" +/obj/disposalpipe/segment/morgue{ + dir = 1 }, /turf/simulated/floor/specialroom/medbay, /area/station/medical/medbay/lobby) @@ -46587,16 +46422,21 @@ /obj/machinery/atmospherics/pipe/simple/color_pipe/cyan_pipe{ dir = 5 }, -/turf/simulated/floor/stairs{ - dir = 4; - icon_state = "Stairs2_wide" +/obj/disposalpipe/segment/transport{ + dir = 4 + }, +/turf/simulated/floor/stairs/wide/middle{ + dir = 4 }, /area/station/medical/medbay/lobby) "cFA" = ( /obj/machinery/atmospherics/pipe/simple/color_pipe/cyan_pipe{ dir = 4 }, -/turf/simulated/floor/blue/corner{ +/obj/disposalpipe/segment/transport{ + dir = 4 + }, +/turf/simulated/floor/blue/side{ dir = 8 }, /area/station/medical/medbay/lobby) @@ -46604,10 +46444,13 @@ /obj/machinery/atmospherics/pipe/simple/color_pipe/cyan_pipe{ dir = 4 }, +/obj/disposalpipe/segment/transport{ + dir = 4 + }, /turf/simulated/floor, /area/station/medical/medbay/lobby) "cFC" = ( -/obj/disposalpipe/segment/mail/bent/north, +/obj/disposalpipe/segment/mail/vertical, /obj/machinery/atmospherics/pipe/simple/color_pipe/cyan_pipe{ dir = 4 }, @@ -46615,14 +46458,12 @@ /area/station/medical/medbay/lobby) "cFD" = ( /obj/disposalpipe/segment, -/obj/disposalpipe/segment/mail/horizontal, /obj/machinery/atmospherics/pipe/simple/color_pipe/cyan_pipe{ dir = 4 }, /turf/simulated/floor, /area/station/medical/medbay/lobby) "cFE" = ( -/obj/disposalpipe/segment/mail/bent/south, /obj/machinery/atmospherics/pipe/simple/color_pipe/cyan_pipe{ dir = 4 }, @@ -46866,14 +46707,14 @@ /obj/item/storage/toolbox/emergency, /obj/item/reagent_containers/glass/bucket, /obj/item/device/light/glowstick, -/obj/item/clothing/suit/fire, +/obj/item/clothing/suit/hazard/fire, /obj/item/clothing/mask/gas/emergency, /obj/item/extinguisher, /obj/item/extinguisher, /obj/item/chem_grenade/firefighting, /obj/item/chem_grenade/firefighting, /obj/machinery/light, -/obj/item/clothing/suit/fire, +/obj/item/clothing/suit/hazard/fire, /turf/simulated/floor/caution/south, /area/station/science/lab) "cGq" = ( @@ -46950,7 +46791,7 @@ /turf/simulated/floor/purple/side, /area/station/medical/medbay/lobby) "cGz" = ( -/obj/stool/chair{ +/obj/stool/chair/purple{ dir = 4 }, /turf/simulated/floor/purple/side, @@ -46968,7 +46809,7 @@ /turf/simulated/floor/purple/side, /area/station/medical/medbay/lobby) "cGB" = ( -/obj/stool/chair{ +/obj/stool/chair/purple{ dir = 8 }, /turf/simulated/floor/purple/side, @@ -47013,10 +46854,11 @@ /turf/simulated/wall/auto/supernorn, /area/station/medical/medbay/pharmacy) "cGN" = ( -/obj/mapping_helper/wingrille_spawn/auto/reinforced, -/obj/disposalpipe/segment, -/turf/simulated/floor/plating, -/area/station/medical/medbay/pharmacy) +/obj/cable{ + icon_state = "2-8" + }, +/turf/simulated/floor/black, +/area/station/medical/medbay/reception) "cGO" = ( /obj/disposalpipe/segment/transport{ dir = 1; @@ -47030,67 +46872,36 @@ }, /turf/simulated/floor/specialroom/medbay, /area/station/medical/medbay/lobby) -"cGQ" = ( -/obj/machinery/light{ - dir = 4; - layer = 9.1; - pixel_x = 10 - }, -/obj/disposalpipe/segment/transport{ - dir = 4 - }, -/obj/cable, -/obj/machinery/power/data_terminal, -/obj/machinery/sleeper/compact{ - dir = 4 - }, -/turf/simulated/floor/specialroom/medbay, -/area/station/medical/medbay/lobby) "cGR" = ( -/obj/disposalpipe/segment/transport{ +/turf/simulated/floor/stairs/wide/other{ dir = 4 }, -/turf/simulated/wall/auto/supernorn, /area/station/medical/medbay/lobby) "cGV" = ( /obj/structure/girder, /turf/simulated/floor/plating/damaged2, /area/station/maintenance/disposal) "cGW" = ( -/obj/disposalpipe/segment/transport{ - dir = 4 +/turf/simulated/floor/blue/corner{ + dir = 8 }, -/turf/simulated/floor/blue/side, /area/station/medical/medbay/lobby) "cGX" = ( -/obj/machinery/light, -/obj/disposalpipe/segment/transport{ - dir = 4 - }, -/turf/simulated/floor/blue/side, +/obj/disposalpipe/segment/mail/bent/east, +/turf/simulated/floor, /area/station/medical/medbay/lobby) "cGY" = ( -/obj/disposalpipe/segment/transport{ - dir = 4 - }, -/turf/simulated/floor/blue/corner{ - dir = 8 - }, -/area/station/medical/medbay/lobby) -"cGZ" = ( -/obj/disposalpipe/segment/transport{ - icon_state = "pipe-c" - }, +/obj/disposalpipe/segment/transport, +/obj/disposalpipe/segment/mail/horizontal, /turf/simulated/floor, /area/station/medical/medbay/lobby) "cHa" = ( /obj/disposalpipe/segment, -/turf/simulated/floor, +/turf/simulated/floor/blue/corner, /area/station/medical/medbay/lobby) "cHb" = ( -/obj/disposalpipe/segment/mail/vertical, /turf/simulated/floor/blue/side{ - dir = 4 + dir = 6 }, /area/station/medical/medbay/lobby) "cHc" = ( @@ -47368,111 +47179,10 @@ "cHZ" = ( /turf/simulated/wall/auto/supernorn, /area/station/medical/medbay) -"cIa" = ( -/obj/machinery/light/emergency{ - dir = 8; - pixel_x = -16 - }, -/obj/disposalpipe/segment, +"cId" = ( +/obj/machinery/light/incandescent, /turf/simulated/floor/specialroom/medbay, /area/station/medical/medbay/lobby) -"cIb" = ( -/obj/machinery/computer3/generic/med_data{ - dir = 4 - }, -/obj/item/storage/wall/medical{ - dir = 1; - pixel_y = 32 - }, -/obj/machinery/power/data_terminal, -/obj/cable{ - icon_state = "0-4" - }, -/turf/simulated/floor/black, -/area/station/medical/medbay/pharmacy) -"cIc" = ( -/obj/stool/chair/office{ - dir = 8 - }, -/obj/landmark/start/job/medical_doctor, -/obj/cable{ - icon_state = "4-8" - }, -/turf/simulated/floor/black, -/area/station/medical/medbay/pharmacy) -"cId" = ( -/obj/machinery/door_control{ - id = "medbay_entrance"; - name = "Medbay Door Control"; - pixel_y = 20 - }, -/obj/cable{ - icon_state = "1-2" - }, -/obj/cable{ - icon_state = "2-8" - }, -/obj/cable{ - icon_state = "2-4" - }, -/obj/machinery/chem_master{ - dir = 4 - }, -/obj/item/device/reagentscanner{ - pixel_x = -8; - pixel_y = -2 - }, -/obj/item/clothing/glasses/spectro{ - pixel_x = -7; - pixel_y = 10 - }, -/turf/simulated/floor/black, -/area/station/medical/medbay/pharmacy) -"cIe" = ( -/obj/landmark/start/job/medical_doctor, -/obj/stool/chair/office{ - dir = 8 - }, -/obj/cable{ - icon_state = "4-8" - }, -/turf/simulated/floor/black, -/area/station/medical/medbay/pharmacy) -"cIf" = ( -/obj/machinery/camera{ - c_tag = "autotag"; - dir = 6; - name = "autoname - SS13"; - pixel_y = 20; - tag = "" - }, -/obj/machinery/phone{ - pixel_y = 5 - }, -/obj/machinery/power/data_terminal, -/obj/cable{ - icon_state = "0-8" - }, -/obj/table/reinforced/chemistry/auto, -/obj/item/storage/box/patchbox{ - pixel_x = 8; - pixel_y = -6 - }, -/obj/item/storage/box/patchbox{ - pixel_x = 8; - pixel_y = -8 - }, -/obj/item/storage/box/patchbox{ - pixel_x = 8; - pixel_y = -10 - }, -/obj/item/paper/book/from_file/pharmacopia{ - pixel_x = -8; - pixel_y = -9 - }, -/obj/item/device/radio/intercom/medical, -/turf/simulated/floor/black, -/area/station/medical/medbay/pharmacy) "cIg" = ( /obj/machinery/disposal, /obj/disposalpipe/trunk{ @@ -47486,29 +47196,33 @@ pixel_x = 16 }, /obj/machinery/disposal/morgue, -/obj/disposalpipe/trunk/morgue, +/obj/disposalpipe/trunk/morgue{ + dir = 1 + }, /turf/simulated/floor/specialroom/medbay, /area/station/medical/medbay/lobby) "cIi" = ( /turf/simulated/wall/auto/supernorn, /area/station/medical/morgue) "cIj" = ( -/obj/securearea{ - desc = "A warning sign which reads 'Biohazard'"; - icon_state = "bio"; - layer = 2.5; - name = "BIOHAZARD" +/obj/stool/chair/office{ + dir = 4 }, -/turf/simulated/wall/auto/supernorn, -/area/station/medical/morgue) -"cIl" = ( -/obj/machinery/vending/medical_public, -/turf/simulated/floor/blue/side{ - dir = 10 +/obj/landmark/start/job/geneticist, +/obj/disposalpipe/segment/transport, +/turf/simulated/floor/carpet{ + dir = 4; + icon_state = "blue2" }, +/area/station/medical/research{ + name = "Genetic Research" + }) +"cIl" = ( +/obj/disposalpipe/segment/transport, +/obj/machinery/genetics_booth, +/turf/simulated/floor/blue/side, /area/station/medical/medbay/lobby) "cIm" = ( -/obj/disposalpipe/segment/transport, /obj/machinery/camera{ c_tag = "autotag"; dir = 10; @@ -47519,7 +47233,9 @@ /area/station/medical/medbay/lobby) "cIn" = ( /obj/disposalpipe/segment, -/turf/simulated/floor/blue/side, +/turf/simulated/floor/blue/side{ + dir = 6 + }, /area/station/medical/medbay/lobby) "cIp" = ( /obj/table/auto, @@ -47731,58 +47447,53 @@ /turf/simulated/floor/purple, /area/station/science/chemistry) "cJg" = ( -/obj/item/storage/firstaid/oxygen{ - pixel_y = -4 +/obj/machinery/computer3/generic/med_data{ + dir = 4 }, -/obj/item/storage/firstaid/toxin, -/obj/item/storage/firstaid/fire{ - pixel_y = -4 +/obj/machinery/power/data_terminal, +/obj/cable{ + icon_state = "0-4" }, -/obj/item/storage/firstaid/regular, -/obj/item/bandage, -/obj/item/bandage, -/obj/item/bandage, -/obj/item/robodefibrillator, -/obj/item/body_bag, -/obj/item/body_bag, -/obj/item/body_bag, -/obj/item/device/radio/intercom/science, -/obj/storage/cart/medcart, -/turf/simulated/floor/blue, -/area/station/medical/medbay) +/obj/blind_switch/area/north, +/turf/simulated/floor/carpet/blue/fancy/edge/nw, +/area/station/medical/head) "cJh" = ( -/obj/item/storage/firstaid/oxygen{ - pixel_y = -4 - }, -/obj/item/storage/firstaid/toxin, -/obj/item/storage/firstaid/fire{ - pixel_y = -4 +/obj/cable{ + icon_state = "4-8" }, -/obj/item/storage/firstaid/regular, -/obj/item/bandage, -/obj/item/bandage, -/obj/item/bandage, -/obj/item/robodefibrillator, -/obj/item/body_bag, -/obj/item/body_bag, -/obj/item/body_bag, -/obj/item/device/radio/intercom/medical, -/obj/storage/cart/medcart, -/obj/machinery/light{ +/obj/disposalpipe/trunk/mail/south, +/obj/machinery/disposal/mail/small{ dir = 1; - layer = 9.1; - pixel_y = 21 + mail_tag = "medical director"; + mailgroup = "command"; + mailgroup2 = "medbay"; + pixel_y = 32; + name = "mail chute-'Medical Director'" }, -/turf/simulated/floor/blue, -/area/station/medical/medbay) +/turf/simulated/floor/carpet/blue/fancy/innercorner/north, +/area/station/medical/head) "cJi" = ( -/obj/storage/secure/closet/medical/medkit, -/turf/simulated/floor/blue, -/area/station/medical/medbay) +/obj/stool/bed, +/obj/item/cigpacket/propuffs, +/obj/item/clothing/suit/bedsheet{ + bcolor = "black"; + icon_state = "bedsheet-black" + }, +/obj/critter/bat/doctor, +/obj/landmark/start/job/medical_director, +/obj/decal/poster/wallsign/poster_nt{ + pixel_y = 28 + }, +/obj/cable{ + icon_state = "2-8" + }, +/turf/simulated/floor/carpet/blue/fancy/innercorner/north, +/area/station/medical/head) "cJj" = ( -/obj/machinery/vending/medical, -/turf/simulated/floor/blue, -/area/station/medical/medbay) +/obj/storage/secure/closet/command/medical_director, +/obj/machinery/light_switch/north, +/turf/simulated/floor/carpet/blue/fancy/innercorner/north, +/area/station/medical/head) "cJk" = ( /obj/machinery/mass_driver{ drive_range = 8; @@ -47792,120 +47503,96 @@ /turf/simulated/floor/plating, /area/station/maintenance/southeast) "cJm" = ( -/obj/machinery/power/apc{ - dir = 8; - name = "W APC"; - pixel_x = -24 - }, -/obj/cable{ - icon_state = "0-4" +/obj/machinery/door/airlock/pyro/glass{ + id = "medbay_entrance"; + name = "Medbay Entrance" }, -/obj/machinery/light_switch/west{ - pixel_y = 11 +/obj/mapping_helper/firedoor_spawn, +/obj/machinery/atmospherics/pipe/simple/color_pipe/cyan_pipe{ + dir = 1 }, -/obj/machinery/vending/player/chemicals, -/obj/disposalpipe/trunk/mail/west, -/turf/simulated/floor/black, -/area/station/medical/medbay/pharmacy) -"cJn" = ( -/obj/cable{ - icon_state = "4-8" +/turf/simulated/floor/white, +/area/station/medical/medbay/lobby) +"cJp" = ( +/obj/table/reinforced/auto, +/obj/mapping_helper/firedoor_spawn, +/obj/machinery/door/airlock/pyro/glass/windoor{ + dir = 1; + autoclose = 0 }, +/obj/mapping_helper/access/medical, /turf/simulated/floor/black, -/area/station/medical/medbay/pharmacy) -"cJo" = ( -/obj/cable{ - icon_state = "2-8" +/area/station/medical/medbay/reception) +"cJr" = ( +/obj/table/reinforced/auto, +/obj/mapping_helper/firedoor_spawn, +/obj/machinery/door/airlock/pyro/glass/windoor{ + dir = 1; + autoclose = 0 }, -/obj/cable{ - icon_state = "1-2" +/obj/mapping_helper/access/medical, +/obj/machinery/phone{ + pixel_y = -4 }, -/obj/landmark/gps_waypoint, -/turf/simulated/floor/black, -/area/station/medical/medbay/pharmacy) -"cJp" = ( /turf/simulated/floor/black, -/area/station/medical/medbay/pharmacy) -"cJr" = ( -/obj/disposalpipe/segment, -/turf/simulated/wall/auto/supernorn, -/area/station/medical/medbay/pharmacy) -"cJs" = ( -/obj/disposalpipe/segment/morgue, -/turf/simulated/wall/auto/supernorn, -/area/station/medical/medbay) +/area/station/medical/medbay/reception) "cJt" = ( -/obj/submachine/chef_sink{ - desc = "A common utility sink."; - name = "rusty sink" +/obj/machinery/clonepod, +/obj/machinery/firealarm/west, +/obj/machinery/camera{ + c_tag = "autotag"; + dir = 4; + name = "autoname - SS13"; + pixel_x = -10; + tag = "" }, -/obj/item/storage/wall/medical{ - dir = 1; - pixel_y = 32 +/turf/simulated/floor/bluewhite{ + dir = 9 }, -/turf/simulated/floor/plating, -/area/station/medical/medbay) +/area/station/medical/medbay/cloner) "cJu" = ( -/obj/item/clothing/gloves/latex, -/obj/item/clothing/gloves/latex, -/obj/item/spraybottle/cleaner, -/obj/item/spraybottle/cleaner, -/obj/item/reagent_containers/glass/bottle/cleaner, -/obj/storage/crate, -/obj/item/sponge, -/obj/item/sponge, -/obj/item/sponge, -/obj/item/storage/box/stma_kit, -/turf/simulated/floor/plating, -/area/station/medical/medbay) -"cJv" = ( -/obj/mapping_helper/wingrille_spawn/auto/reinforced, -/turf/simulated/floor/plating, -/area/station/medical/morgue) -"cJw" = ( -/obj/machinery/traymachine/morgue{ - dir = 2 +/obj/machinery/light/incandescent, +/turf/simulated/floor/bluewhite{ + dir = 1 }, -/turf/simulated/floor/sanitary/white, -/area/station/medical/morgue) -"cJx" = ( -/obj/machinery/traymachine/morgue{ - dir = 2 +/area/station/medical/medbay/cloner) +"cJv" = ( +/turf/simulated/floor/bluewhite{ + dir = 1 }, +/area/station/medical/medbay/cloner) +"cJw" = ( /obj/machinery/camera{ c_tag = "autotag"; - dir = 6; + dir = 4; name = "autoname - SS13"; - pixel_y = 20; + pixel_x = -10; tag = "" }, -/turf/simulated/floor/sanitary/white, -/area/station/medical/morgue) +/obj/table/auto, +/obj/machinery/networked/printer{ + name = "Printer - Genetics"; + pixel_y = 5; + print_id = "Genetics" + }, +/obj/cable{ + icon_state = "0-4" + }, +/obj/machinery/power/data_terminal, +/turf/simulated/floor/greenwhite{ + dir = 8 + }, +/area/station/medical/research{ + name = "Genetic Research" + }) "cJy" = ( -/turf/simulated/floor/sanitary/white, -/area/station/medical/morgue) -"cJz" = ( -/obj/disposaloutlet{ - mailgroup = "medresearch"; - mailgroup2 = "security"; - message = "Delivery alert in Morgue."; - name = "Morgue Outlet" +/obj/cable{ + icon_state = "4-8" }, -/obj/disposalpipe/trunk/morgue, -/turf/simulated/floor/sanitary/white, -/area/station/medical/morgue) -"cJA" = ( -/obj/disposalpipe/segment/transport, -/turf/simulated/wall/auto/supernorn, -/area/station/medical/medbay/cloner) -"cJC" = ( -/obj/mapping_helper/wingrille_spawn/auto/reinforced, -/obj/disposalpipe/segment/mail/vertical, -/turf/simulated/floor/plating, -/area/station/medical/medbay/cloner) -"cJD" = ( -/turf/simulated/wall/auto/reinforced/supernorn, -/area/station/medical/medbay/cloner) +/turf/simulated/floor/white, +/area/station/medical/research{ + name = "Genetic Research" + }) "cJE" = ( /obj/landmark/start/job/assistant, /obj/item/storage/toilet/random{ @@ -48320,117 +48007,120 @@ }, /area/station/science/chemistry) "cKP" = ( -/obj/submachine/chef_sink/chem_sink{ - dir = 4; - pixel_x = -8 - }, -/turf/simulated/floor/blue, -/area/station/medical/medbay) -"cKQ" = ( -/turf/simulated/floor/bluewhite{ - dir = 9 - }, -/area/station/medical/medbay) -"cKR" = ( -/turf/simulated/floor/bluewhite{ - dir = 5 +/obj/machinery/computer/card/department/medical{ + dir = 4 }, -/area/station/medical/medbay) -"cKS" = ( -/obj/machinery/light_switch/east, -/turf/simulated/floor/blue, -/area/station/medical/medbay) -"cKT" = ( /obj/machinery/door_control{ id = "medbay_entrance"; name = "Medbay Door Control"; pixel_x = -24 }, -/obj/disposalpipe/segment, -/turf/simulated/floor/bluewhite{ - dir = 9 +/turf/simulated/floor/carpet/blue/fancy/innercorner/west, +/area/station/medical/head) +"cKQ" = ( +/obj/stool/chair/comfy/blue, +/obj/landmark/start/job/medical_director, +/obj/disposalpipe/segment/mail/bent/north, +/turf/simulated/floor/carpet/blue, +/area/station/medical/head) +"cKR" = ( +/obj/cable{ + icon_state = "1-2" }, -/area/station/medical/medbay) +/obj/disposalpipe/segment/mail/bent/south, +/turf/simulated/floor/carpet/blue, +/area/station/medical/head) +"cKT" = ( +/obj/mapping_helper/wingrille_spawn/auto/reinforced, +/obj/window_blinds/cog2/right{ + dir = 4 + }, +/obj/cable{ + icon_state = "0-2" + }, +/turf/simulated/floor/plating, +/area/station/medical/head) "cKU" = ( -/obj/machinery/atmospherics/pipe/simple/color_pipe/cyan_pipe{ - dir = 1 +/obj/machinery/sleeper/compact{ + dir = 4 }, -/obj/disposalpipe/segment/mail/vertical, -/turf/simulated/floor/bluewhite{ - dir = 5 +/obj/machinery/power/data_terminal, +/obj/cable{ + icon_state = "0-4" }, -/area/station/medical/medbay) +/turf/simulated/floor/white, +/area/station/medical/medbay/lobby) "cKV" = ( -/obj/table/auto, -/obj/item/clipboard, -/obj/item/reagent_containers/dropper/mechanical{ - pixel_x = 11 +/obj/machinery/atmospherics/pipe/simple/color_pipe/cyan_pipe{ + dir = 1 }, -/obj/item/storage/box/stma_kit{ - pixel_x = -8 +/turf/simulated/floor/bluewhite/corner{ + dir = 4 }, -/turf/simulated/floor/black, -/area/station/medical/medbay/pharmacy) +/area/station/medical/medbay/lobby) "cKW" = ( -/obj/decal/mule/beacon, -/obj/machinery/navbeacon/mule/medbay_north/south, -/turf/simulated/floor/black, -/area/station/medical/medbay/pharmacy) +/obj/health_scanner/floor{ + find_in_range = 0; + id = "lobby_north"; + dir = 8; + pixel_y = 8; + pixel_x = 8 + }, +/obj/item/bell/hop{ + anchored = 1; + name = "wall mounted service bell"; + pixel_y = 24; + pixel_x = 24 + }, +/obj/machinery/light/incandescent{ + dir = 1 + }, +/turf/simulated/floor/white, +/area/station/medical/medbay/lobby) "cKX" = ( -/obj/cable{ - icon_state = "1-2" +/obj/table/reinforced/auto, +/obj/health_scanner/wall{ + find_in_range = 0; + id = "lobby_north"; + dir = 4; + pixel_x = 5 }, -/turf/simulated/floor/black, -/area/station/medical/medbay/pharmacy) +/obj/machinery/door/airlock/pyro/glass/windoor{ + dir = 8; + autoclose = 0 + }, +/obj/mapping_helper/access/medical, +/obj/mapping_helper/firedoor_spawn, +/turf/simulated/floor/plating, +/area/station/medical/medbay/reception) "cKY" = ( -/obj/stool/chair/office{ - dir = 4 +/obj/machinery/computer3/generic/med_data, +/obj/machinery/power/data_terminal, +/obj/cable{ + icon_state = "0-4" }, /turf/simulated/floor/black, -/area/station/medical/medbay/pharmacy) +/area/station/medical/medbay/reception) "cKZ" = ( -/obj/machinery/chem_dispenser/chemical, -/obj/item/reagent_containers/glass/beaker/large{ - pixel_x = -7 +/obj/stool/chair/office{ + dir = 1 + }, +/obj/landmark/start/job/medical_doctor, +/obj/cable{ + icon_state = "4-8" }, /turf/simulated/floor/black, -/area/station/medical/medbay/pharmacy) -"cLd" = ( -/turf/simulated/floor/plating, -/area/station/medical/medbay) -"cLe" = ( -/obj/disposalpipe/segment/morgue, -/obj/disposalpipe/segment/morgue, -/turf/simulated/floor/sanitary/white, -/area/station/medical/morgue) +/area/station/medical/medbay/reception) "cLg" = ( -/obj/stool/chair{ - dir = 4 - }, -/obj/item/device/radio/intercom/medical, -/obj/disposalpipe/segment/transport, -/obj/machinery/door_control{ - id = "cloning"; - name = "Cloning Door Control"; - pixel_x = -24 - }, -/turf/simulated/floor/bluewhite{ - dir = 9 - }, -/area/station/medical/medbay/cloner) -"cLh" = ( -/obj/disposalpipe/segment, -/turf/simulated/floor/bluewhite{ - dir = 1 - }, -/area/station/medical/medbay/cloner) -"cLi" = ( -/obj/monkeyplant, -/obj/disposalpipe/segment/mail/vertical, -/turf/simulated/floor/bluewhite{ +/obj/table/auto, +/obj/item/clipboard, +/obj/item/storage/pill_bottle/mutadone, +/turf/simulated/floor/greenwhite{ dir = 5 }, -/area/station/medical/medbay/cloner) +/area/station/medical/research{ + name = "Genetic Research" + }) "cLj" = ( /obj/mapping_helper/wingrille_spawn/auto/reinforced, /turf/simulated/floor/plating, @@ -48765,222 +48455,162 @@ }, /turf/simulated/floor/purple, /area/station/science/chemistry) -"cMq" = ( -/obj/machinery/door/poddoor/pyro/shutters{ - density = 0; - dir = 4; - icon_state = "pdoor0"; - id = "chemistry"; - name = "Chemistry Privacy Shutters"; - opacity = 0 - }, -/obj/mapping_helper/wingrille_spawn/auto/reinforced, -/turf/simulated/floor/engine, -/area/station/science/chemistry) "cMr" = ( -/obj/machinery/chem_master{ +/obj/table/wood/auto, +/obj/machinery/computer3/generic/personal{ + pixel_y = 5 + }, +/obj/item/reagent_containers/food/drinks/tea{ + pixel_y = 8 + }, +/obj/machinery/power/data_terminal, +/obj/machinery/camera{ + c_tag = "autotag"; dir = 4; - pixel_x = -4 + name = "autoname - SS13"; + pixel_x = -10; + tag = "" }, -/turf/simulated/floor/blue, -/area/station/medical/medbay) +/obj/machinery/firealarm/west, +/obj/cable{ + icon_state = "0-4" + }, +/turf/simulated/floor/carpet/blue/fancy/innercorner/west, +/area/station/medical/head) "cMs" = ( -/obj/stool/chair/office{ - dir = 8 +/obj/table/wood/auto, +/obj/item/item_box/gold_star{ + item_amount = 20 }, -/obj/landmark/start/job/medical_doctor, -/turf/simulated/floor/bluewhite{ - dir = 8 +/obj/item/stamp/md, +/obj/item/kitchen/food_box/lollipop{ + pixel_x = -12 }, -/area/station/medical/medbay) +/obj/cable{ + icon_state = "4-8" + }, +/turf/simulated/floor/carpet/blue, +/area/station/medical/head) "cMt" = ( -/turf/simulated/floor/bluewhite{ - dir = 4 +/obj/machinery/door/airlock/pyro/maintenance, +/obj/mapping_helper/access/medical, +/obj/mapping_helper/firedoor_spawn, +/obj/decal/stripe_delivery, +/obj/cable{ + icon_state = "1-2" }, -/area/station/medical/medbay) -"cMu" = ( -/obj/machinery/manufacturer/medical, -/turf/simulated/floor/blue, -/area/station/medical/medbay) +/obj/disposalpipe/segment/mail/vertical, +/turf/simulated/floor/plating, +/area/station/maintenance/solar/south) "cMv" = ( -/obj/disposalpipe/segment, -/turf/simulated/floor/bluewhite{ - dir = 8 +/obj/mapping_helper/wingrille_spawn/auto/reinforced, +/obj/window_blinds/cog2/middle{ + dir = 4 }, -/area/station/medical/medbay) -"cMw" = ( -/obj/machinery/atmospherics/pipe/simple/color_pipe/cyan_pipe{ - dir = 1 +/obj/cable, +/obj/cable{ + icon_state = "0-2" }, -/obj/disposalpipe/segment/mail/vertical, -/turf/simulated/floor/bluewhite{ +/turf/simulated/floor/plating, +/area/station/medical/head) +"cMw" = ( +/obj/machinery/sleeper/compact{ dir = 4 }, -/area/station/medical/medbay) -"cMx" = ( -/obj/table/auto, -/obj/item/paper_bin, -/obj/item/stamp{ - pixel_x = 5; - pixel_y = 12 +/obj/machinery/power/data_terminal, +/obj/cable{ + icon_state = "0-4" }, -/obj/item/hand_labeler{ - pixel_x = 7; - pixel_y = -7 +/turf/simulated/floor/bluewhite/corner{ + dir = 8 }, -/obj/item/storage/box/health_upgrade_kit{ - pixel_x = -8; - pixel_y = 11 +/area/station/medical/medbay/lobby) +"cMx" = ( +/obj/machinery/atmospherics/pipe/simple/color_pipe/cyan_pipe{ + dir = 1 }, -/obj/machinery/light/emergency{ - pixel_x = 16 +/turf/simulated/floor/bluewhite{ + dir = 10 }, -/turf/simulated/floor/black, -/area/station/medical/medbay/pharmacy) +/area/station/medical/medbay/lobby) "cMy" = ( -/obj/machinery/camera{ - c_tag = "autotag"; - dir = 10; - name = "autoname - SS13"; - tag = "" +/turf/simulated/floor/bluewhite/corner{ + dir = 4 }, -/obj/machinery/light, -/turf/simulated/floor/black, -/area/station/medical/medbay/pharmacy) +/area/station/medical/medbay/lobby) "cMz" = ( +/obj/table/reinforced/auto, +/obj/machinery/door/airlock/pyro/glass/windoor{ + dir = 8; + autoclose = 0 + }, +/obj/mapping_helper/access/medical, +/obj/mapping_helper/firedoor_spawn, +/turf/simulated/floor/plating, +/area/station/medical/medbay/reception) +"cMB" = ( /obj/cable{ icon_state = "1-2" }, -/obj/disposalpipe/segment/mail/bent/east, -/turf/simulated/floor/black, -/area/station/medical/medbay/pharmacy) -"cMA" = ( -/obj/machinery/light/emergency{ - pixel_x = -16 - }, -/obj/disposalpipe/trunk{ - dir = 4 - }, -/obj/machinery/disposal/small, -/obj/machinery/chem_heater/chemistry{ - pixel_y = 5 - }, /turf/simulated/floor/black, -/area/station/medical/medbay/pharmacy) -"cMB" = ( -/obj/mapping_helper/wingrille_spawn/auto/reinforced, -/obj/disposalpipe/segment{ - dir = 8; - icon_state = "pipe-c" - }, -/turf/simulated/floor/plating, -/area/station/medical/medbay/pharmacy) +/area/station/medical/medbay/reception) "cMC" = ( /turf/simulated/floor/bluewhite{ dir = 8 }, /area/station/medical/medbay) -"cMD" = ( -/obj/disposalpipe/segment/morgue, -/turf/simulated/floor/bluewhite{ - dir = 4 - }, -/area/station/medical/medbay) "cMF" = ( -/obj/machinery/traymachine/morgue{ - dir = 2 +/obj/machinery/computer/cloning{ + dir = 8 }, -/obj/machinery/light{ - dir = 8; - layer = 9.1; - pixel_x = -10 +/obj/item/paper/Cloning, +/turf/simulated/floor/bluewhite{ + dir = 4 }, -/turf/simulated/floor/sanitary/white, -/area/station/medical/morgue) -"cMG" = ( -/obj/disposalpipe/segment/morgue, -/turf/simulated/floor/sanitary/white, -/area/station/medical/morgue) +/area/station/medical/medbay/cloner) "cMH" = ( -/obj/stool/chair/office{ - dir = 1 - }, -/obj/machinery/light{ - dir = 4; - layer = 9.1; - pixel_x = 10 - }, /obj/cable{ - icon_state = "1-2" + icon_state = "2-8" }, -/turf/simulated/floor/sanitary/white, -/area/station/medical/morgue) +/obj/disposalpipe/segment/mail/vertical, +/turf/simulated/floor/white, +/area/station/medical/research{ + name = "Genetic Research" + }) "cMI" = ( /obj/stool/chair{ - dir = 4 - }, -/obj/machinery/light{ - dir = 8; - layer = 9.1; - pixel_x = -10 - }, -/obj/disposalpipe/segment/transport, -/turf/simulated/floor/bluewhite{ dir = 8 }, -/area/station/medical/medbay/cloner) -"cMJ" = ( -/obj/disposalpipe/segment, -/turf/simulated/floor/white, -/area/station/medical/medbay/cloner) -"cMK" = ( -/obj/disposalpipe/segment/mail/vertical, -/turf/simulated/floor/bluewhite{ +/obj/machinery/light/incandescent, +/turf/simulated/floor/greenwhite{ dir = 4 }, -/area/station/medical/medbay/cloner) +/area/station/medical/research{ + name = "Genetic Research" + }) +"cMJ" = ( +/turf/simulated/wall/auto/reinforced/supernorn, +/area/station/medical/research{ + name = "Genetic Research" + }) +"cMK" = ( +/turf/simulated/wall/auto/reinforced/supernorn, +/area/station/medical/staff) "cML" = ( -/obj/machinery/light{ - dir = 1; - layer = 9.1; - pixel_y = 21 - }, -/obj/machinery/light_switch/north, -/obj/table/auto, -/obj/machinery/cashreg, -/obj/decal/stripe_caution, -/turf/simulated/floor, -/area/station/medical/medbay/cloner) +/obj/mapping_helper/wingrille_spawn/auto/reinforced, +/obj/window_blinds/cog2/left, +/turf/simulated/floor/plating, +/area/station/medical/staff) "cMM" = ( -/obj/machinery/clone_scanner, -/obj/cable{ - icon_state = "0-4" - }, -/obj/decal/stripe_caution, -/turf/simulated/floor, -/area/station/medical/medbay/cloner) +/obj/mapping_helper/wingrille_spawn/auto/reinforced, +/obj/window_blinds/cog2/middle, +/turf/simulated/floor/plating, +/area/station/medical/staff) "cMN" = ( -/obj/machinery/computer/cloning, -/obj/item/paper/Cloning, -/obj/machinery/camera{ - c_tag = "autotag"; - dir = 6; - name = "autoname - SS13"; - pixel_y = 20; - tag = "" - }, -/obj/cable{ - icon_state = "0-8" - }, -/obj/cable{ - icon_state = "0-4" - }, -/obj/cable{ - icon_state = "0-2" - }, -/obj/decal/stripe_caution, -/turf/simulated/floor, -/area/station/medical/medbay/cloner) +/obj/mapping_helper/wingrille_spawn/auto/reinforced, +/obj/window_blinds/cog2/right, +/turf/simulated/floor/plating, +/area/station/medical/staff) "cMP" = ( /turf/simulated/wall/auto/supernorn, /area/station/medical/medbay/cloner) @@ -49034,6 +48664,7 @@ /obj/cable{ icon_state = "1-8" }, +/obj/disposalpipe/segment/morgue, /turf/simulated/floor/plating, /area/station/maintenance/south) "cMW" = ( @@ -49253,188 +48884,122 @@ }, /area/station/science/chemistry) "cNJ" = ( -/obj/submachine/chem_extractor{ +/obj/submachine/chef_sink/chem_sink{ dir = 4; pixel_x = -4 }, -/obj/item/device/reagentscanner, -/turf/simulated/floor/blue, -/area/station/medical/medbay) +/turf/simulated/floor/carpet/blue/fancy/innercorner/west, +/area/station/medical/head) "cNK" = ( /turf/simulated/floor/bluewhite/corner{ dir = 8 }, /area/station/medical/medbay) "cNL" = ( -/obj/table/auto, -/obj/item/device/analyzer/healthanalyzer, -/obj/item/device/analyzer/healthanalyzer, -/obj/item/remote/porter/port_a_nanomed, -/obj/item/gun/implanter, -/obj/item/reagent_containers/dropper/mechanical, -/obj/item/reagent_containers/dropper/mechanical, -/turf/simulated/floor/bluewhite{ - dir = 1 +/obj/cable{ + icon_state = "4-8" }, -/area/station/medical/medbay) +/turf/simulated/floor/carpet/blue, +/area/station/medical/head) "cNM" = ( -/obj/machinery/light{ - dir = 1; - layer = 9.1; - pixel_y = 21 - }, -/obj/machinery/vending/port_a_nanomed, -/turf/simulated/floor/bluewhite{ - dir = 1 +/obj/machinery/light/incandescent, +/obj/cable{ + icon_state = "4-8" }, -/area/station/medical/medbay) +/turf/simulated/floor/carpet/blue/fancy/innercorner/east, +/area/station/medical/head) "cNN" = ( -/obj/disposalpipe/segment, -/turf/simulated/floor/bluewhite/corner{ - dir = 1 +/obj/mapping_helper/wingrille_spawn/auto/reinforced, +/obj/window_blinds/cog2/left{ + dir = 4 }, -/area/station/medical/medbay) -"cNO" = ( -/obj/decal/poster/wallsign/medbay, -/turf/simulated/wall/auto/supernorn, -/area/station/medical/medbay/pharmacy) -"cNQ" = ( -/obj/disposalpipe/segment/morgue, -/turf/simulated/floor/bluewhite/corner{ - dir = 8 +/obj/cable{ + icon_state = "0-8" }, -/area/station/medical/medbay) -"cNR" = ( -/obj/machinery/light{ - dir = 1; - layer = 9.1; - pixel_y = 21 +/obj/cable, +/turf/simulated/floor/plating, +/area/station/medical/head) +"cNO" = ( +/obj/machinery/atmospherics/pipe/simple/color_pipe/cyan_pipe{ + dir = 1 }, /turf/simulated/floor/bluewhite{ - dir = 1 + dir = 9 }, -/area/station/medical/medbay) +/area/station/medical/medbay/lobby) +"cNQ" = ( +/obj/machinery/chem_master, +/turf/simulated/floor/black, +/area/station/medical/medbay/reception) "cNS" = ( /turf/simulated/floor/bluewhite{ dir = 1 }, /area/station/medical/medbay) "cNU" = ( -/turf/simulated/wall/auto/reinforced/supernorn, -/area/station/medical/morgue) -"cNV" = ( -/obj/machinery/light_switch/west, -/turf/simulated/floor/sanitary/white, -/area/station/medical/morgue) -"cNW" = ( -/obj/disposalpipe/junction{ - dir = 1 - }, -/obj/machinery/optable{ - name = "Autopsy Table" +/obj/stool/bed/moveable, +/obj/item/clothing/suit/bedsheet, +/turf/simulated/floor/bluewhite{ + dir = 5 }, -/turf/simulated/floor/sanitary/white, -/area/station/medical/morgue) -"cNX" = ( -/obj/disposalpipe/junction{ +/area/station/medical/medbay) +"cNV" = ( +/obj/machinery/clonegrinder, +/turf/simulated/floor/bluewhite{ dir = 4 }, -/obj/table/auto, -/obj/item/circular_saw{ - pixel_x = 3; - pixel_y = 12 - }, -/obj/item/scalpel, -/obj/item/reagent_containers/glass/bottle/formaldehyde, -/obj/item/reagent_containers/syringe, -/obj/item/hand_labeler, -/obj/machinery/power/apc{ - dir = 4; - name = "E APC"; - pixel_x = 24 +/area/station/medical/medbay/cloner) +"cNW" = ( +/turf/simulated/floor/carpet{ + dir = 1; + icon_state = "blue2" }, -/obj/cable, +/area/station/medical/research{ + name = "Genetic Research" + }) +"cNX" = ( /obj/cable{ - icon_state = "0-2" - }, -/turf/simulated/floor/sanitary/white, -/area/station/medical/morgue) -"cNY" = ( -/obj/disposalpipe/segment/morgue{ - dir = 4 - }, -/turf/simulated/wall/auto/supernorn, -/area/station/medical/morgue) -"cNZ" = ( -/obj/stool/chair{ - dir = 4 + icon_state = "1-2" }, -/obj/disposalpipe/segment/morgue{ - dir = 4 +/obj/disposalpipe/segment/mail/vertical, +/turf/simulated/floor/carpet{ + dir = 1; + icon_state = "blue2" }, +/area/station/medical/research{ + name = "Genetic Research" + }) +"cNY" = ( /obj/disposalpipe/segment/transport, -/turf/simulated/floor/bluewhite{ - dir = 8 +/turf/simulated/floor/carpet{ + dir = 5; + icon_state = "blue2" }, -/area/station/medical/medbay/cloner) -"cOa" = ( -/obj/disposalpipe/segment, -/obj/disposalpipe/segment/morgue{ +/area/station/medical/research{ + name = "Genetic Research" + }) +"cNZ" = ( +/obj/machinery/light_switch/east, +/turf/simulated/floor/greenwhite{ dir = 4 }, -/turf/simulated/floor/white, -/area/station/medical/medbay/cloner) +/area/station/medical/research{ + name = "Genetic Research" + }) "cOb" = ( -/obj/disposalpipe/segment/morgue{ - dir = 4 - }, -/obj/disposalpipe/segment/mail/vertical, -/turf/simulated/floor/bluewhite/corner{ - dir = 8 - }, -/area/station/medical/medbay/cloner) -"cOc" = ( -/obj/disposalpipe/segment/morgue{ - dir = 4 - }, -/turf/simulated/floor/bluewhite{ - dir = 1 - }, -/area/station/medical/medbay/cloner) +/obj/storage/closet/office, +/turf/simulated/floor/carpet/arcade, +/area/station/medical/staff) "cOd" = ( -/obj/stool/chair/office{ - dir = 8 - }, -/obj/disposalpipe/segment/morgue{ - dir = 4 - }, -/obj/cable{ - icon_state = "1-2" - }, -/obj/landmark/gps_waypoint, -/turf/simulated/floor/bluewhite{ - dir = 1 - }, -/area/station/medical/medbay/cloner) +/obj/machinery/disposal, +/obj/disposalpipe/trunk/south, +/turf/simulated/floor/carpet/arcade, +/area/station/medical/staff) "cOe" = ( -/obj/disposalpipe/segment/morgue{ - dir = 4 - }, -/obj/machinery/light{ - dir = 4; - layer = 9.1; - pixel_x = 10 - }, -/turf/simulated/floor/bluewhite{ - dir = 5 - }, -/area/station/medical/medbay/cloner) -"cOf" = ( -/obj/disposalpipe/segment/morgue{ - dir = 4 - }, -/turf/simulated/wall/auto/supernorn, -/area/station/medical/medbay/cloner) +/obj/machinery/vending/snack, +/obj/machinery/light_switch/east, +/turf/simulated/floor/carpet/arcade, +/area/station/medical/staff) "cOg" = ( /obj/cable{ icon_state = "1-2" @@ -49443,18 +49008,15 @@ /turf/simulated/floor/plating, /area/station/maintenance/south) "cOh" = ( -/obj/disposalpipe/segment/morgue{ - dir = 4 - }, -/obj/cable{ - icon_state = "4-8" +/turf/simulated/floor/bluewhite{ + dir = 6 }, -/turf/simulated/floor/sanitary/white, -/area/station/medical/morgue) +/area/station/medical/medbay/cloner) "cOi" = ( /obj/cable{ icon_state = "1-2" }, +/obj/disposalpipe/segment/morgue, /turf/simulated/floor/plating, /area/station/maintenance/south) "cOj" = ( @@ -49768,7 +49330,7 @@ /turf/simulated/floor/purplewhite, /area/station/science/chemistry) "cPb" = ( -/obj/disposalpipe/segment/mail/bent/north, +/obj/disposalpipe/segment/mail/vertical, /turf/simulated/floor/white, /area/station/science/chemistry) "cPc" = ( @@ -49795,211 +49357,87 @@ "cPg" = ( /turf/simulated/floor/white, /area/station/medical/medbay) -"cPh" = ( -/obj/disposalpipe/junction{ - dir = 1 - }, -/turf/simulated/floor/white, -/area/station/medical/medbay) "cPi" = ( -/obj/disposalpipe/segment{ +/obj/stool/chair/blue{ dir = 4 }, -/obj/machinery/atmospherics/pipe/simple/color_pipe/cyan_pipe{ - dir = 1 - }, -/obj/disposalpipe/segment/mail/vertical, -/turf/simulated/floor/bluewhite/corner{ - dir = 8 - }, -/area/station/medical/medbay) +/obj/machinery/firealarm/west, +/turf/simulated/floor/white, +/area/station/medical/medbay/lobby) "cPk" = ( -/obj/cable{ - icon_state = "1-4" - }, -/obj/cable{ - icon_state = "2-4" - }, -/obj/disposalpipe/segment/mail/vertical, -/turf/simulated/floor/bluewhite{ - dir = 1 - }, -/area/station/medical/medbay) -"cPl" = ( -/obj/machinery/light{ - dir = 1; - layer = 9.1; - pixel_y = 21 - }, -/obj/cable{ - icon_state = "4-8" - }, -/obj/machinery/light_switch/north, -/turf/simulated/floor/bluewhite{ - dir = 1 - }, -/area/station/medical/medbay) -"cPm" = ( -/obj/cable{ - icon_state = "4-8" - }, -/obj/disposalpipe/segment/morgue{ - dir = 4; - icon_state = "pipe-c" - }, -/turf/simulated/floor/bluewhite{ - dir = 1 - }, -/area/station/medical/medbay) -"cPn" = ( -/obj/disposalpipe/segment/morgue{ - dir = 4 - }, -/obj/cable{ - icon_state = "4-8" - }, -/obj/item/storage/wall/medical_wear, -/turf/simulated/floor/bluewhite{ - dir = 1 - }, -/area/station/medical/medbay) -"cPo" = ( -/obj/disposalpipe/segment/morgue{ - dir = 4 - }, -/obj/cable{ - icon_state = "4-8" - }, -/turf/simulated/floor/bluewhite/corner{ - dir = 1 +/obj/machinery/door/airlock/pyro/glass/med{ + dir = 8 }, -/area/station/medical/medbay) +/obj/mapping_helper/access/medical, +/obj/mapping_helper/firedoor_spawn, +/turf/simulated/floor/black, +/area/station/medical/medbay/reception) "cPp" = ( -/obj/disposalpipe/junction{ - dir = 4; - icon_state = "pipe-j2" - }, -/obj/cable{ - icon_state = "4-8" - }, -/turf/simulated/floor/white, -/area/station/medical/medbay) -"cPq" = ( -/obj/disposalpipe/segment/morgue{ - dir = 4 - }, -/obj/cable{ - icon_state = "4-8" +/obj/machinery/chem_dispenser/chemical, +/obj/item/device/radio/intercom/medical{ + broadcasting = 1; + dir = 8 }, -/turf/simulated/floor/white, -/area/station/medical/medbay) +/turf/simulated/floor/black, +/area/station/medical/medbay/reception) "cPr" = ( -/obj/disposalpipe/segment/morgue{ - dir = 4 - }, -/obj/cable{ - icon_state = "4-8" - }, -/obj/cable{ - icon_state = "2-4" - }, -/turf/simulated/floor/white, -/area/station/medical/medbay) -"cPs" = ( -/obj/disposalpipe/segment/morgue{ - dir = 4 - }, -/obj/cable{ - icon_state = "4-8" - }, -/turf/simulated/floor/bluewhite{ - dir = 4 - }, -/area/station/medical/medbay) -"cPu" = ( -/obj/cable{ - icon_state = "4-8" - }, -/obj/disposalpipe/segment/morgue{ - dir = 8; - icon_state = "pipe-c" - }, -/turf/simulated/floor/sanitary/white, -/area/station/medical/morgue) -"cPv" = ( -/obj/disposalpipe/segment/morgue, -/obj/cable{ - icon_state = "4-8" - }, +/obj/storage/secure/closet/medical/cloning, +/obj/machinery/power/apc/autoname_west, /obj/cable{ - icon_state = "1-4" - }, -/turf/simulated/floor/sanitary/white, -/area/station/medical/morgue) -"cPw" = ( -/obj/stool/chair/comfy/wheelchair{ - dir = 4 - }, -/turf/simulated/floor/bluewhite{ - dir = 8 + icon_state = "0-4" }, -/area/station/medical/medbay) -"cPy" = ( -/obj/disposalpipe/segment/transport, -/obj/cable{ - icon_state = "4-8" +/obj/machinery/light_switch/west{ + pixel_y = -10 }, /turf/simulated/floor/bluewhite{ - dir = 8 - }, -/area/station/medical/medbay/cloner) -"cPz" = ( -/obj/disposalpipe/segment, -/obj/cable{ - icon_state = "4-8" - }, -/turf/simulated/floor/white, -/area/station/medical/medbay/cloner) -"cPA" = ( -/obj/cable{ - icon_state = "4-8" + dir = 10 }, -/obj/disposalpipe/segment/mail/bent/north, -/turf/simulated/floor/white, /area/station/medical/medbay/cloner) -"cPB" = ( +"cPs" = ( /obj/cable{ - icon_state = "4-8" + icon_state = "2-8" }, -/obj/disposalpipe/segment/mail/bent/south, -/turf/simulated/floor/white, -/area/station/medical/medbay/cloner) -"cPC" = ( -/obj/cable{ - icon_state = "4-8" +/obj/machinery/atmospherics/pipe/simple/color_pipe/cyan_pipe{ + dir = 1 }, -/turf/simulated/floor/white, +/turf/simulated/floor/bluewhite, /area/station/medical/medbay/cloner) -"cPD" = ( -/obj/cable{ - icon_state = "4-8" - }, -/obj/cable{ - icon_state = "2-4" +"cPu" = ( +/obj/table/glass/reinforced/auto, +/obj/item/storage/firstaid/regular, +/obj/item/storage/firstaid/regular, +/obj/item/device/analyzer/healthanalyzer, +/obj/item/device/analyzer/healthanalyzer, +/obj/item/storage/pill_bottle/mutadone, +/obj/item/hand_labeler, +/obj/item/storage/firstaid/brain, +/turf/simulated/floor/carpet{ + icon_state = "blue1" }, +/area/station/medical/research{ + name = "Genetic Research" + }) +"cPv" = ( /obj/cable{ icon_state = "1-2" }, -/turf/simulated/floor/white, -/area/station/medical/medbay/cloner) -"cPE" = ( -/obj/cable{ - icon_state = "4-8" - }, -/turf/simulated/floor/bluewhite{ - dir = 4 +/obj/disposalpipe/segment/mail/vertical, +/turf/simulated/floor/carpet{ + icon_state = "blue1" }, -/area/station/medical/medbay/cloner) +/area/station/medical/research{ + name = "Genetic Research" + }) +"cPA" = ( +/obj/stool/chair/comfy, +/obj/item/clothing/suit/cardboard_box/head_surgeon, +/obj/blind_switch/area/west, +/turf/simulated/floor/carpet/arcade, +/area/station/medical/staff) +"cPE" = ( +/obj/machinery/light/incandescent, +/turf/simulated/floor/carpet/arcade, +/area/station/medical/staff) "cPG" = ( /obj/disposalpipe/segment/mineral{ dir = 4 @@ -50124,6 +49562,7 @@ /obj/cable{ icon_state = "1-2" }, +/obj/disposalpipe/segment/morgue, /turf/simulated/floor/plating/scorched, /area/station/maintenance/south) "cPY" = ( @@ -50251,7 +49690,6 @@ /area/station/science/chemistry) "cQx" = ( /obj/stool/chair/office, -/obj/disposalpipe/segment/mail/horizontal, /turf/simulated/floor/purplewhite{ dir = 4 }, @@ -50261,208 +49699,134 @@ /turf/simulated/floor/purple, /area/station/science/chemistry) "cQA" = ( -/obj/disposalpipe/segment/mail/horizontal, -/turf/simulated/floor/blue, -/area/station/medical/medbay) +/obj/mapping_helper/wingrille_spawn/auto/reinforced, +/obj/window_blinds/cog2/middle, +/obj/cable{ + icon_state = "0-4" + }, +/turf/simulated/floor/plating, +/area/station/medical/head) "cQB" = ( -/obj/landmark/start/job/medical_doctor, -/obj/stool/chair/office, -/obj/disposalpipe/segment/mail/horizontal, -/turf/simulated/floor/bluewhite{ - dir = 10 +/obj/mapping_helper/wingrille_spawn/auto/reinforced, +/obj/window_blinds/cog2/middle, +/obj/cable{ + icon_state = "0-4" }, -/area/station/medical/medbay) +/obj/cable{ + icon_state = "0-8" + }, +/turf/simulated/floor/plating, +/area/station/medical/head) "cQC" = ( /turf/simulated/floor/bluewhite, /area/station/medical/medbay) "cQD" = ( -/obj/disposalpipe/segment/mail/horizontal, -/turf/simulated/floor/bluewhite/corner{ - dir = 4 - }, -/area/station/medical/medbay) -"cQE" = ( -/obj/machinery/atmospherics/pipe/simple/color_pipe/cyan_pipe{ - dir = 6 - }, -/obj/disposalpipe/segment/mail/horizontal, -/turf/simulated/floor/white, -/area/station/medical/medbay) -"cQF" = ( -/obj/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/simple/color_pipe/cyan_pipe{ - dir = 4 +/obj/mapping_helper/wingrille_spawn/auto/reinforced, +/obj/window_blinds/cog2/middle, +/obj/cable{ + icon_state = "0-8" }, -/obj/disposalpipe/segment/mail/horizontal, -/turf/simulated/floor/bluewhite/corner, -/area/station/medical/medbay) +/turf/simulated/floor/plating, +/area/station/medical/head) "cQG" = ( -/obj/machinery/atmospherics/pipe/simple/color_pipe/cyan_pipe{ - dir = 9 - }, -/obj/disposalpipe/segment/mail/bent/west, -/turf/simulated/floor/bluewhite, -/area/station/medical/medbay) -"cQH" = ( -/obj/disposalpipe/junction{ - dir = 1 - }, -/turf/simulated/floor/bluewhite, -/area/station/medical/medbay) -"cQI" = ( -/obj/disposalpipe/segment{ +/obj/stool/chair/blue{ dir = 4 }, -/turf/simulated/floor/bluewhite, -/area/station/medical/medbay) -"cQJ" = ( -/obj/disposalpipe/segment{ - dir = 4 +/obj/machinery/light/incandescent, +/obj/machinery/camera{ + c_tag = "autotag"; + dir = 4; + name = "autoname - SS13"; + pixel_x = -10; + tag = "" }, +/turf/simulated/floor/white, +/area/station/medical/medbay/lobby) +"cQH" = ( /obj/cable{ icon_state = "1-2" }, -/obj/disposalpipe/segment/mail/vertical, -/turf/simulated/floor/bluewhite, -/area/station/medical/medbay) -"cQK" = ( -/obj/disposalpipe/segment{ - dir = 4 +/obj/disposalpipe/segment/vertical, +/turf/simulated/floor/white, +/area/station/medical/medbay/lobby) +"cQI" = ( +/obj/machinery/atmospherics/pipe/simple/color_pipe/cyan_pipe{ + dir = 1 }, -/obj/disposalpipe/segment/morgue, -/turf/simulated/floor/bluewhite, -/area/station/medical/medbay) -"cQL" = ( -/obj/disposalpipe/segment{ - dir = 4 +/turf/simulated/floor/white, +/area/station/medical/medbay/lobby) +"cQK" = ( +/obj/table/reinforced/chemistry/auto, +/obj/machinery/glass_recycler, +/obj/item/storage/box/beakerbox{ + pixel_y = 4 }, +/obj/item/reagent_containers/glass/beaker/large, /obj/cable{ - icon_state = "1-2" + icon_state = "4-8" }, -/turf/simulated/floor/bluewhite, -/area/station/medical/medbay) +/obj/machinery/light/incandescent, +/turf/simulated/floor/black, +/area/station/medical/medbay/reception) "cQM" = ( -/obj/disposalpipe/segment{ - dir = 4 - }, -/obj/vehicle/segway, -/turf/simulated/floor/bluewhite{ - dir = 6 - }, -/area/station/medical/medbay) -"cQN" = ( -/obj/securearea{ - desc = "A warning sign which reads 'Biohazard'"; - icon_state = "bio"; - layer = 2.5; - name = "BIOHAZARD" - }, -/obj/disposalpipe/junction{ - dir = 8; - icon_state = "pipe-j2" +/obj/machinery/door/airlock/pyro/glass/med, +/obj/mapping_helper/access/medical, +/obj/mapping_helper/firedoor_spawn, +/obj/cable{ + icon_state = "1-2" }, -/turf/simulated/wall/auto/supernorn, -/area/station/medical/morgue) -"cQO" = ( -/obj/machinery/disposal, -/obj/disposalpipe/trunk{ - dir = 8 +/obj/machinery/atmospherics/pipe/simple/color_pipe/cyan_pipe{ + dir = 1 }, -/turf/simulated/floor/sanitary/white, -/area/station/medical/morgue) -"cQP" = ( -/obj/table/auto, -/obj/item/clothing/under/suit/mortician, -/obj/item/clothing/mask/surgical, -/obj/item/device/analyzer/healthanalyzer, -/obj/item/device/detective_scanner, -/obj/item/stamp, -/obj/item/clothing/gloves/latex, -/obj/item/clothing/mask/surgical_shield, -/obj/item/staple_gun, -/obj/item/clothing/suit/apron, -/obj/item/surgical_spoon, -/obj/item/spraybottle/cleaner, -/turf/simulated/floor/sanitary/white, -/area/station/medical/morgue) +/turf/simulated/floor/blue, +/area/station/medical/medbay/cloner) "cQQ" = ( -/obj/disposalpipe/trunk/mail/south, -/obj/machinery/disposal/mail/autoname/medbay/morgue, -/turf/simulated/floor/sanitary/white, -/area/station/medical/morgue) -"cQR" = ( -/obj/machinery/disposal/morgue{ - desc = "A pneumatic delivery chute for sending things directly to the crematorium."; - name = "crematorium chute" - }, -/obj/machinery/light, -/obj/disposalpipe/trunk/morgue{ +/obj/stool/chair{ dir = 4 }, -/turf/simulated/floor/sanitary/white, -/area/station/medical/morgue) +/obj/landmark/start/job/geneticist, +/turf/simulated/floor/greenwhite{ + dir = 8 + }, +/area/station/medical/research{ + name = "Genetic Research" + }) "cQT" = ( -/obj/submachine/chef_sink{ - desc = "A common utility sink."; - dir = 8; - name = "utility sink" +/obj/landmark/gps_waypoint, +/obj/cable{ + icon_state = "1-2" }, -/obj/disposalpipe/segment/morgue{ - dir = 8; - icon_state = "pipe-c" +/obj/disposalpipe/segment/mail/vertical, +/turf/simulated/floor/carpet{ + icon_state = "blue1" }, -/turf/simulated/floor/sanitary/white, -/area/station/medical/morgue) +/area/station/medical/research{ + name = "Genetic Research" + }) "cQU" = ( -/obj/shrub{ - dir = 1; - icon = 'icons/obj/stationobjs.dmi'; - icon_state = "plant" - }, -/obj/disposalpipe/segment/transport, -/obj/landmark/kudzu, -/turf/simulated/floor/bluewhite{ - dir = 10 +/obj/machinery/computer/genetics{ + dir = 8 }, -/area/station/medical/medbay/cloner) -"cQV" = ( -/obj/disposalpipe/junction{ - dir = 1 +/obj/item/cloneModule/genepowermodule, +/obj/machinery/firealarm/east, +/turf/simulated/floor/greenwhite{ + dir = 4 }, -/turf/simulated/floor/bluewhite, -/area/station/medical/medbay/cloner) +/area/station/medical/research{ + name = "Genetic Research" + }) "cQW" = ( -/obj/machinery/disposal, -/obj/disposalpipe/trunk{ - dir = 8 - }, -/turf/simulated/floor/bluewhite, -/area/station/medical/medbay/cloner) +/obj/table/wood/auto, +/obj/machinery/light/incandescent, +/turf/simulated/floor/carpet/arcade, +/area/station/medical/staff) "cQX" = ( -/obj/disposalpipe/segment/mail/vertical, -/obj/storage/secure/closet/medical/cloning, -/turf/simulated/floor/bluewhite, -/area/station/medical/medbay/cloner) -"cQY" = ( -/obj/storage/secure/closet/medical/cloning, -/turf/simulated/floor/bluewhite, -/area/station/medical/medbay/cloner) -"cQZ" = ( -/obj/machinery/clonepod, -/obj/cable{ - icon_state = "0-2" - }, -/obj/cable, -/turf/simulated/floor/bluewhite, -/area/station/medical/medbay/cloner) -"cRa" = ( -/obj/table/auto, -/obj/item/storage/firstaid/brain, -/obj/item/hand_labeler, -/turf/simulated/floor/bluewhite{ - dir = 6 +/obj/stool/chair/comfy{ + dir = 8 }, -/area/station/medical/medbay/cloner) +/obj/landmark/start/job/medical_doctor, +/turf/simulated/floor/carpet/arcade, +/area/station/medical/staff) "cRb" = ( /obj/disposalpipe/segment/mineral{ dir = 4 @@ -50898,53 +50262,25 @@ /turf/simulated/floor/purplewhite, /area/station/science/chemistry) "cSn" = ( -/obj/table/auto, -/obj/item/storage/firstaid/brute{ - pixel_y = -4 - }, -/obj/item/storage/firstaid/brute{ - pixel_y = -4 - }, -/obj/item/storage/firstaid/brute{ - pixel_y = -4 - }, -/obj/item/reagent_containers/glass/bottle/epinephrine, -/obj/item/reagent_containers/glass/beaker/large/brute, -/obj/item/reagent_containers/dropper, +/obj/disposalpipe/segment/mail/horizontal, /turf/simulated/floor/blue, -/area/station/medical/medbay) +/area/station/medical/medbay/pharmacy) "cSo" = ( -/obj/table/auto, -/obj/item/storage/firstaid/fire{ - pixel_y = -4 - }, -/obj/item/storage/firstaid/fire{ - pixel_y = -4 - }, -/obj/item/reagent_containers/glass/bottle/epinephrine, -/obj/item/reagent_containers/glass/beaker/large/burn, -/obj/item/reagent_containers/dropper, +/obj/disposalpipe/segment/mail/bent/south, /turf/simulated/floor/blue, -/area/station/medical/medbay) +/area/station/medical/medbay/pharmacy) "cSp" = ( -/obj/table/auto, -/obj/item/storage/firstaid/toxin, -/obj/item/storage/firstaid/toxin, -/obj/item/reagent_containers/glass/bottle/epinephrine, -/obj/item/reagent_containers/glass/beaker/large/antitox, -/obj/item/reagent_containers/dropper, -/obj/machinery/light, -/obj/item/reagent_containers/hypospray, -/obj/item/reagent_containers/hypospray, -/obj/random_item_spawner/medicine, +/obj/cable{ + icon_state = "1-2" + }, +/obj/disposalpipe/segment/mail/vertical, /turf/simulated/floor/blue, -/area/station/medical/medbay) +/area/station/medical/medbay/pharmacy) "cSq" = ( -/obj/reagent_dispensers/watertank/fountain, -/turf/simulated/floor/bluewhite{ - dir = 8 - }, -/area/station/medical/medbay) +/obj/machinery/vending/medical, +/obj/machinery/firealarm/east, +/turf/simulated/floor/blue, +/area/station/medical/medbay/pharmacy) "cSr" = ( /obj/machinery/atmospherics/pipe/simple/color_pipe/cyan_pipe{ dir = 1 @@ -50956,31 +50292,35 @@ /turf/simulated/floor/plating, /area/station/medical/medbay/surgery) "cSu" = ( -/obj/mapping_helper/wingrille_spawn/auto/reinforced, -/obj/disposalpipe/segment, -/turf/simulated/floor/plating, -/area/station/medical/medbay/surgery) +/obj/machinery/door/airlock/pyro/glass/med{ + id = "medbay_entrance" + }, +/obj/mapping_helper/access/medical, +/obj/mapping_helper/firedoor_spawn, +/obj/cable{ + icon_state = "1-2" + }, +/obj/disposalpipe/segment/vertical, +/turf/simulated/floor/blue, +/area/station/medical/medbay) "cSv" = ( -/turf/simulated/wall/auto/reinforced/supernorn, -/area/station/medical/medbay/surgery) -"cSx" = ( -/obj/disposalpipe/segment/morgue, -/turf/simulated/wall/auto/reinforced/supernorn, +/obj/machinery/door/airlock/pyro/glass/med, +/obj/mapping_helper/access/medical, +/obj/mapping_helper/firedoor_spawn, +/turf/simulated/floor/red, /area/station/medical/medbay/surgery) "cSy" = ( /turf/simulated/wall/auto/reinforced/supernorn, /area/station/medical/head) -"cSA" = ( -/obj/disposalpipe/segment, -/turf/simulated/wall/auto/reinforced/supernorn, -/area/station/medical/morgue) "cSB" = ( -/obj/disposalpipe/segment/mail/vertical, -/turf/simulated/wall/auto/reinforced/supernorn, -/area/station/medical/morgue) -"cSC" = ( -/obj/disposalpipe/segment/transport, -/turf/simulated/wall/auto/supernorn, +/obj/stool/chair{ + dir = 4 + }, +/obj/landmark/start/job/geneticist, +/obj/machinery/firealarm/west, +/turf/simulated/floor/greenwhite{ + dir = 8 + }, /area/station/medical/research{ name = "Genetic Research" }) @@ -50990,11 +50330,8 @@ name = "Genetic Research" }) "cSF" = ( -/obj/disposalpipe/segment/mail/vertical, -/turf/simulated/wall/auto/supernorn, -/area/station/medical/research{ - name = "Genetic Research" - }) +/turf/simulated/floor/carpet/arcade, +/area/station/medical/staff) "cSG" = ( /obj/mapping_helper/wingrille_spawn/auto/reinforced, /turf/simulated/floor/plating, @@ -51002,14 +50339,9 @@ name = "Genetic Research" }) "cSH" = ( -/obj/mapping_helper/wingrille_spawn/auto/reinforced, -/obj/cable{ - icon_state = "1-2" - }, -/turf/simulated/floor/plating, -/area/station/medical/research{ - name = "Genetic Research" - }) +/obj/disposalpipe/segment/vertical, +/turf/simulated/floor/carpet/arcade, +/area/station/medical/staff) "cSI" = ( /obj/table/auto, /obj/item/decoration/ashtray{ @@ -51352,124 +50684,106 @@ /turf/simulated/floor/plating, /area/station/medical/medbay) "cTI" = ( -/obj/mapping_helper/wingrille_spawn/auto/reinforced, -/obj/disposalpipe/segment, -/turf/simulated/floor/plating, -/area/station/medical/medbay) -"cTJ" = ( -/obj/machinery/power/data_terminal, -/obj/machinery/computer3/generic/med_data, -/obj/disposalpipe/segment, -/obj/machinery/light_switch/west, -/obj/machinery/power/data_terminal, -/turf/simulated/floor/redwhite{ +/obj/shrub/random, +/turf/simulated/floor/bluewhite{ dir = 9 }, -/area/station/medical/medbay/surgery) -"cTL" = ( -/obj/machinery/vending/medical, -/obj/machinery/light/emergency{ - dir = 1; - pixel_y = 16 - }, -/turf/simulated/floor/redwhite{ - dir = 1 +/area/station/medical/medbay) +"cTJ" = ( +/obj/machinery/door_control{ + id = "medbay_entrance"; + name = "Medbay Door Control"; + pixel_x = -24; + pixel_y = 24 }, -/area/station/medical/medbay/surgery) -"cTM" = ( /obj/cable{ - icon_state = "1-4" + icon_state = "1-2" }, -/obj/disposalpipe/segment/mail/vertical, -/turf/simulated/floor/redwhite{ +/obj/disposalpipe/segment/vertical, +/turf/simulated/floor/bluewhite{ dir = 1 }, -/area/station/medical/medbay/surgery) +/area/station/medical/medbay) +"cTL" = ( +/obj/shrub/random, +/obj/machinery/firealarm/east, +/turf/simulated/floor/bluewhite{ + dir = 5 + }, +/area/station/medical/medbay) "cTN" = ( -/obj/table/auto, -/obj/item/storage/toolbox/emergency, -/obj/item/clothing/glasses/healthgoggles, -/obj/item/clothing/glasses/healthgoggles, -/obj/machinery/light/emergency{ - dir = 1; - pixel_y = 16 +/obj/machinery/atmospherics/unary/cryo_cell, +/turf/simulated/floor/bluewhite{ + dir = 9 }, -/obj/item/storage/box/syringes, -/obj/machinery/power/apc{ - dir = 1; - name = "N APC"; - pixel_y = 24 +/area/station/medical/medbay) +"cTO" = ( +/obj/table/reinforced, +/obj/item/reagent_containers/glass/beaker/cryoxadone{ + pixel_x = -5; + pixel_y = 2 }, -/obj/cable{ - icon_state = "0-8" +/obj/item/reagent_containers/glass/beaker/cryoxadone{ + pixel_x = 7; + pixel_y = 7 }, -/obj/item/reagent_containers/dropper/mechanical, -/turf/simulated/floor/redwhite{ - dir = 1 +/obj/item/reagent_containers/glass/beaker/cryoxadone{ + pixel_x = 3; + pixel_y = 1 }, -/area/station/medical/medbay/surgery) -"cTO" = ( -/obj/disposalpipe/segment/morgue, -/obj/storage/secure/closet/fridge/blood, -/turf/simulated/floor/redwhite{ +/turf/simulated/floor/bluewhite{ dir = 1 }, -/area/station/medical/medbay/surgery) +/area/station/medical/medbay) "cTP" = ( -/obj/item/device/radio/intercom/medical, -/obj/storage/secure/closet/medical/medicine, -/turf/simulated/floor/redwhite{ +/obj/cable{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/color_pipe/cyan_pipe{ dir = 1 }, -/area/station/medical/medbay/surgery) -"cTQ" = ( -/obj/storage/secure/closet/medical/anesthetic, -/obj/machinery/light{ - dir = 4; - layer = 9.1; - pixel_x = 10 +/turf/simulated/floor/bluewhite{ + dir = 1 }, -/obj/machinery/camera{ - c_tag = "autotag"; - dir = 0; - name = "autoname - SS13"; - pixel_y = 20 +/area/station/medical/medbay) +"cTQ" = ( +/obj/random_item_spawner/medicine/two, +/obj/item/bandage{ + pixel_x = -5; + pixel_y = 6 }, -/turf/simulated/floor/redwhite{ - dir = 5 +/obj/table/reinforced/auto, +/turf/simulated/floor/bluewhite{ + dir = 1 }, -/area/station/medical/medbay/surgery) -"cTS" = ( +/area/station/medical/medbay) +"cTT" = ( /obj/cable{ icon_state = "1-2" }, -/turf/simulated/floor/carpet{ - dir = 1; - icon_state = "fblue3" - }, -/area/station/medical/head) -"cTT" = ( -/obj/machinery/light{ - dir = 4; - layer = 9.1; - pixel_x = 10 +/obj/machinery/atmospherics/pipe/simple/color_pipe/cyan_pipe{ + dir = 1 }, -/obj/decal/poster/wallsign/poster_nt{ - pixel_y = 28 +/turf/simulated/floor/bluewhite/corner, +/area/station/medical/medbay) +"cTU" = ( +/obj/machinery/door/airlock/pyro/glass/med{ + dir = 4 }, -/obj/storage/secure/closet/command/medical_director, -/turf/simulated/floor/carpet{ - dir = 5; - icon_state = "fblue2" +/obj/mapping_helper/access/medical, +/obj/mapping_helper/firedoor_spawn, +/obj/cable{ + icon_state = "4-8" }, -/area/station/medical/head) -"cTU" = ( -/obj/disposalpipe/segment, -/turf/simulated/wall/auto/reinforced/supernorn, -/area/station/medical/head) +/obj/disposalpipe/segment/mail/horizontal, +/turf/simulated/floor/blue, +/area/station/medical/medbay) "cUb" = ( -/turf/simulated/wall/auto/reinforced/supernorn, -/area/station/medical/cdc) +/obj/machinery/traymachine/morgue{ + dir = 2 + }, +/turf/simulated/floor/sanitary, +/area/station/medical/morgue) "cUj" = ( /obj/cable{ icon_state = "1-4" @@ -51781,27 +51095,11 @@ /turf/simulated/floor/purple, /area/station/science/artifact) "cVk" = ( -/obj/table/auto, -/obj/item/reagent_containers/food/drinks/creamer{ - pixel_x = -8; - pixel_y = 12 - }, -/obj/item/kitchen/food_box/sugar_box{ - pixel_y = 6 - }, +/obj/disposalpipe/segment/mail/vertical, /turf/simulated/floor/bluewhite{ - dir = 9 - }, -/area/station/medical/medbay) -"cVl" = ( -/obj/stool/chair/couch{ dir = 8 }, -/obj/landmark/start/job/medical_doctor, -/turf/simulated/floor/bluewhite{ - dir = 1 - }, -/area/station/medical/medbay) +/area/station/medical/medbay/pharmacy) "cVm" = ( /obj/stool/chair/couch{ dir = 8; @@ -51816,119 +51114,71 @@ }, /area/station/science/lobby) "cVn" = ( -/obj/storage/secure/closet/medical/medkit, -/obj/disposalpipe/segment, -/obj/machinery/light{ - dir = 4; - layer = 9.1; - pixel_x = 10 - }, -/turf/simulated/floor/bluewhite{ - dir = 4 - }, -/area/station/medical/medbay) -"cVo" = ( -/obj/stool/chair/office{ +/obj/stool/chair/blue{ dir = 4 }, -/obj/machinery/light{ - dir = 8; - layer = 9.1; - pixel_x = -10 - }, -/obj/disposalpipe/segment, -/obj/landmark/start/job/medical_doctor, -/turf/simulated/floor/redwhite{ +/turf/simulated/floor/bluewhite{ dir = 8 }, -/area/station/medical/medbay/surgery) +/area/station/medical/medbay) "cVp" = ( /turf/simulated/floor/white, /area/station/medical/medbay/surgery) "cVq" = ( -/obj/disposalpipe/segment/mail/vertical, +/obj/cable{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/color_pipe/cyan_pipe{ + dir = 1 + }, /turf/simulated/floor/white, -/area/station/medical/medbay/surgery) +/area/station/medical/medbay) "cVr" = ( -/obj/disposalpipe/segment/morgue, +/obj/stool/chair/office, +/obj/landmark/start/job/medical_doctor, +/obj/disposalpipe/segment/mail/horizontal, /turf/simulated/floor/white, -/area/station/medical/medbay/surgery) +/area/station/medical/medbay) "cVs" = ( -/obj/submachine/chef_sink/chem_sink{ - dir = 8; - pixel_x = 8 - }, -/turf/simulated/floor/redwhite{ - dir = 4 - }, -/area/station/medical/medbay/surgery) -"cVt" = ( -/obj/submachine/chef_sink/chem_sink{ - dir = 4; - pixel_x = -8 - }, -/turf/simulated/floor/carpet{ - dir = 8; - icon_state = "fblue3" - }, -/area/station/medical/head) -"cVu" = ( -/obj/cable{ - icon_state = "1-2" - }, -/turf/simulated/floor/carpet{ - icon_state = "fblue1" - }, -/area/station/medical/head) -"cVv" = ( -/obj/item/device/radio/intercom/medical{ - broadcasting = 1; - dir = 8 - }, -/turf/simulated/floor/carpet{ - dir = 4; - icon_state = "fblue3" +/obj/machinery/atmospherics/pipe/manifold{ + dir = 1; + level = 2 }, -/area/station/medical/head) -"cVx" = ( /turf/simulated/floor/white, -/area/station/medical/cdc) +/area/station/medical/medbay) +"cVx" = ( +/obj/disposalpipe/segment/transport, +/obj/disposalpipe/segment/mail/horizontal, +/turf/simulated/floor, +/area/station/medical/medbay/surgery/storage) "cVy" = ( -/obj/disposalpipe/segment/mail/vertical, -/turf/simulated/floor/white, -/area/station/medical/cdc) -"cVz" = ( -/obj/stool/chair/office{ - dir = 4 +/obj/item/storage/firstaid/brain{ + pixel_x = -6; + pixel_y = 5 }, -/turf/simulated/floor/white, -/area/station/medical/cdc) -"cVC" = ( -/obj/disposalpipe/segment{ - dir = 1; - icon_state = "pipe-c" +/obj/item/paper/cryo, +/obj/item/wrench, +/obj/table/reinforced/auto, +/obj/item/device/radio/intercom/medical, +/obj/machinery/light/incandescent, +/turf/simulated/floor/blue/side{ + dir = 1 }, -/turf/simulated/floor/white, -/area/station/medical/research{ - name = "Genetic Research" - }) +/area/station/medical/medbay/surgery/storage) +"cVz" = ( +/obj/disposalpipe/segment/transport, +/turf/simulated/floor, +/area/station/medical/medbay/surgery/storage) "cVD" = ( -/obj/disposalpipe/segment{ - dir = 4 - }, -/turf/simulated/floor/white, -/area/station/medical/research{ - name = "Genetic Research" - }) +/obj/mapping_helper/wingrille_spawn/auto, +/obj/window_blinds/cog2/left, +/turf/simulated/floor/plating, +/area/station/medical/staff) "cVE" = ( -/obj/disposalpipe/segment{ - dir = 4 - }, -/obj/disposalpipe/segment/mail/vertical, -/turf/simulated/floor/white, -/area/station/medical/research{ - name = "Genetic Research" - }) +/obj/mapping_helper/wingrille_spawn/auto, +/obj/window_blinds/cog2/right, +/turf/simulated/floor/plating, +/area/station/medical/staff) "cVG" = ( /turf/simulated/wall/auto/reinforced/supernorn, /area/station/storage/auxillary) @@ -52056,18 +51306,6 @@ }, /turf/simulated/floor/white, /area/station/science/artifact) -"cWj" = ( -/obj/cable{ - icon_state = "1-2" - }, -/obj/cable{ - icon_state = "2-8" - }, -/obj/cable{ - icon_state = "2-4" - }, -/turf/simulated/floor/white, -/area/station/science/artifact) "cWk" = ( /obj/cable{ icon_state = "4-8" @@ -52086,138 +51324,54 @@ /obj/decal/stripe_delivery, /turf/simulated/floor, /area/station/science/artifact) -"cWm" = ( -/obj/machinery/disposal, -/obj/disposalpipe/trunk{ - dir = 1 - }, -/obj/machinery/light/emergency{ - dir = 4; - pixel_x = 16 - }, -/turf/simulated/floor/bluewhite{ - dir = 4 - }, -/area/station/medical/medbay) "cWn" = ( -/obj/machinery/light/emergency{ - dir = 8; - pixel_x = -16 - }, -/obj/disposalpipe/segment, -/turf/simulated/floor/redwhite{ - dir = 8 +/obj/cable{ + icon_state = "1-2" }, -/area/station/medical/medbay/surgery) -"cWo" = ( -/obj/iv_stand, -/obj/item/reagent_containers/iv_drip/saline, -/obj/decal/stripe_caution, -/turf/simulated/floor/white, -/area/station/medical/medbay/surgery) -"cWp" = ( -/obj/disposalpipe/segment/morgue, -/obj/iv_stand, -/obj/item/reagent_containers/iv_drip/saline, -/obj/decal/stripe_caution, +/obj/disposalpipe/segment/vertical, /turf/simulated/floor/white, -/area/station/medical/medbay/surgery) +/area/station/medical/medbay) "cWq" = ( -/obj/table/auto, -/obj/item/clothing/gloves/latex, -/obj/item/clothing/mask/surgical, -/obj/item/clothing/mask/surgical_shield, -/obj/item/hemostat, -/obj/item/staple_gun, -/turf/simulated/floor/redwhite{ - dir = 4 - }, -/area/station/medical/medbay/surgery) -"cWr" = ( -/obj/mapping_helper/wingrille_spawn/auto/reinforced, -/obj/window_blinds/cog2/right{ - dir = 4 +/obj/machinery/atmospherics/pipe/simple{ + level = 2 }, -/turf/simulated/floor/plating, -/area/station/medical/head) +/turf/simulated/floor/white, +/area/station/medical/medbay) "cWs" = ( -/obj/table/wood/auto, -/obj/machinery/computer3/generic/personal{ - pixel_y = 5 - }, -/obj/machinery/power/data_terminal, -/obj/item/reagent_containers/food/drinks/tea{ - pixel_y = 8 - }, -/obj/cable{ - icon_state = "0-4" - }, -/turf/simulated/floor/carpet{ - dir = 8; - icon_state = "fblue3" +/obj/machinery/light/incandescent, +/obj/machinery/disposal/mail/autoname/medbay, +/obj/disposalpipe/trunk/mail/south, +/turf/simulated/floor/bluewhite{ + dir = 1 }, -/area/station/medical/head) -"cWt" = ( +/area/station/medical/medbay) +"cWu" = ( /obj/cable{ icon_state = "1-2" }, -/obj/cable{ - icon_state = "1-8" - }, -/turf/simulated/floor/carpet{ - icon_state = "fblue1" - }, -/area/station/medical/head) -"cWu" = ( -/obj/machinery/door_control{ - id = "pathology_lockdown"; - name = "Pathology Lockdown Control"; - pixel_x = 24; - pixel_y = 24 - }, -/obj/machinery/computer/announcement{ - dir = 8; - name = "Medical Announcement Computer"; - req_access_txt = "19" +/obj/machinery/atmospherics/pipe/simple/color_pipe/cyan_pipe{ + dir = 1 }, -/turf/simulated/floor/carpet{ - dir = 4; - icon_state = "fblue3" +/turf/simulated/floor/bluewhite{ + dir = 4 }, -/area/station/medical/head) -"cWv" = ( -/obj/mapping_helper/wingrille_spawn/auto/reinforced, -/obj/disposalpipe/segment, -/obj/machinery/door/poddoor/pyro/shutters{ - density = 0; - dir = 4; - icon_state = "pdoor0"; - id = "pathology_lockdown"; - name = "Pathology Quarantine Shutters"; - opacity = 0 +/area/station/medical/medbay) +"cWy" = ( +/obj/disposalpipe/segment/horizontal, +/turf/simulated/floor/blue/side, +/area/station/medical/medbay/surgery/storage) +"cWA" = ( +/obj/machinery/disposal{ + name = "Test Chamber Chute" }, -/obj/window_blinds/cog2/left{ +/obj/item/storage/wall/random, +/obj/disposalpipe/trunk/transport{ dir = 8 }, -/turf/simulated/floor/plating, -/area/station/medical/head) -"cWy" = ( -/obj/mapping_helper/wingrille_spawn/auto/reinforced, -/obj/machinery/door/poddoor/pyro/shutters{ - density = 0; - dir = 4; - icon_state = "pdoor0"; - id = "pathology_lockdown"; - name = "Pathology Quarantine Shutters"; - opacity = 0 +/turf/simulated/floor/grass{ + name = "astroturf" }, -/turf/simulated/floor/plating, -/area/station/medical/cdc) -"cWA" = ( -/turf/simulated/floor/white, -/area/station/medical/research{ - name = "Genetic Research" - }) +/area/station/medical/dome) "cWB" = ( /turf/simulated/floor/carpet{ dir = 9; @@ -52226,24 +51380,20 @@ /area/station/medical/research{ name = "Genetic Research" }) -"cWC" = ( -/obj/disposalpipe/segment/mail/vertical, -/obj/landmark/gps_waypoint, -/turf/simulated/floor/carpet{ - dir = 1; - icon_state = "blue2" - }, -/area/station/medical/research{ - name = "Genetic Research" - }) "cWD" = ( -/turf/simulated/floor/carpet{ - dir = 5; - icon_state = "blue2" +/obj/disposalpipe/segment/transport{ + icon_state = "pipe-c" }, -/area/station/medical/research{ - name = "Genetic Research" - }) +/obj/disposalpipe/segment/transport{ + icon_state = "pipe-c" + }, +/obj/cable{ + icon_state = "1-8" + }, +/turf/simulated/floor/blue/side{ + dir = 1 + }, +/area/station/medical/medbay/surgery/storage) "cWF" = ( /obj/stool/chair/couch{ dir = 4; @@ -52356,16 +51506,6 @@ /obj/landmark/start/job/security_officer, /turf/simulated/floor/specialroom/bar, /area/station/security/checkpoint/cargo) -"cWX" = ( -/obj/stool/chair{ - dir = 8 - }, -/obj/disposalpipe/segment, -/obj/machinery/bot/secbot, -/turf/simulated/floor/bluewhite{ - dir = 4 - }, -/area/station/medical/medbay) "cWY" = ( /obj/cable{ icon_state = "1-2" @@ -52373,6 +51513,7 @@ /obj/cable{ icon_state = "2-4" }, +/obj/disposalpipe/segment/morgue, /turf/simulated/floor/plating, /area/station/maintenance/south) "cXa" = ( @@ -52650,68 +51791,58 @@ /turf/simulated/floor/purple, /area/station/science/artifact) "cXG" = ( -/obj/machinery/light{ - dir = 8; - layer = 9.1; - pixel_x = -10 +/obj/submachine/chem_extractor{ + dir = 4; + pixel_x = -4 }, +/obj/item/device/reagentscanner, +/obj/machinery/light/incandescent, /turf/simulated/floor/blue, -/area/station/medical/medbay) +/area/station/medical/medbay/pharmacy) "cXH" = ( -/turf/simulated/floor/bluewhite/corner, -/area/station/medical/medbay) -"cXI" = ( -/obj/machinery/atmospherics/pipe/manifold{ - dir = 8 - }, -/turf/simulated/floor/bluewhite/corner{ - dir = 4 +/obj/cable{ + icon_state = "1-2" }, -/area/station/medical/medbay) -"cXJ" = ( +/obj/disposalpipe/segment/mail/vertical, /obj/machinery/atmospherics/pipe/simple/color_pipe/cyan_pipe{ dir = 4 }, /turf/simulated/floor/bluewhite{ dir = 4 }, -/area/station/medical/medbay) -"cXL" = ( -/obj/disposalpipe/segment, +/area/station/medical/medbay/pharmacy) +"cXJ" = ( +/obj/machinery/light/incandescent, /obj/machinery/atmospherics/pipe/simple/color_pipe/cyan_pipe{ dir = 4 }, -/turf/simulated/floor/redwhite{ +/turf/simulated/floor/bluewhite{ dir = 8 }, -/area/station/medical/medbay/surgery) -"cXM" = ( -/obj/machinery/atmospherics/pipe/simple/color_pipe/cyan_pipe{ - dir = 4 +/area/station/medical/medbay) +"cXL" = ( +/obj/cable{ + icon_state = "1-2" }, -/turf/simulated/floor/white, -/area/station/medical/medbay/surgery) -"cXN" = ( -/obj/item/paper/book/from_file/pharmacopia, +/obj/disposalpipe/segment/bent/north, /obj/machinery/atmospherics/pipe/simple/color_pipe/cyan_pipe{ dir = 4 }, -/obj/decal/stripe_caution, -/obj/machinery/optable{ - id = "OR1" - }, +/obj/machinery/navbeacon/guardbotsecbot_circularpatrol/beacon12, /turf/simulated/floor/white, -/area/station/medical/medbay/surgery) -"cXO" = ( -/obj/disposalpipe/segment/mail/vertical, -/obj/machinery/atmospherics/unary/vent_pump{ - dir = 8 - }, -/obj/machinery/computer/operating{ - id = "OR1" +/area/station/medical/medbay) +"cXM" = ( +/obj/disposalpipe/segment/horizontal, +/obj/machinery/atmospherics/pipe/manifold, +/turf/simulated/floor/white, +/area/station/medical/medbay) +"cXN" = ( +/obj/disposalpipe/segment/horizontal, +/obj/machinery/atmospherics/pipe/manifold{ + dir = 1 }, /turf/simulated/floor/white, -/area/station/medical/medbay/surgery) +/area/station/medical/medbay) "cXP" = ( /obj/stool/chair/couch{ dir = 4 @@ -52732,90 +51863,78 @@ }, /area/station/hallway/secondary/exit) "cXR" = ( -/obj/machinery/camera/television{ - c_tag = "medbay"; - dir = 8; - name = "camera - medbay" - }, -/turf/simulated/floor/redwhite{ - dir = 4 +/obj/disposalpipe/junction/right/west, +/obj/machinery/atmospherics/pipe/simple{ + dir = 5; + level = 2 }, -/area/station/medical/medbay/surgery) +/turf/simulated/floor/white, +/area/station/medical/medbay) "cXS" = ( -/obj/mapping_helper/wingrille_spawn/auto/reinforced, -/obj/window_blinds/cog2/middle{ - dir = 4 +/obj/disposalpipe/segment/horizontal, +/obj/machinery/atmospherics/pipe/simple{ + dir = 4; + level = 2 }, -/turf/simulated/floor/plating, -/area/station/medical/head) +/turf/simulated/floor/white, +/area/station/medical/medbay) "cXT" = ( -/obj/table/wood/auto, -/obj/machinery/light/lamp/green, -/obj/item/device/analyzer/healthanalyzer_upgrade, -/obj/item/item_box/gold_star{ - item_amount = 20 - }, -/obj/item/kitchen/food_box/lollipop, -/obj/item/stamp/md, -/turf/simulated/floor/carpet{ - dir = 8; - icon_state = "fblue3" +/obj/machinery/atmospherics/pipe/simple{ + dir = 4; + level = 2 }, -/area/station/medical/head) +/obj/disposalpipe/segment/horizontal, +/obj/disposalpipe/segment/mail/vertical, +/turf/simulated/floor/white, +/area/station/medical/medbay) "cXU" = ( -/obj/cable{ - icon_state = "1-2" +/obj/machinery/atmospherics/pipe/simple{ + dir = 4; + level = 2 }, -/obj/landmark/start/job/medical_director, -/obj/stool/chair/office/blue{ - dir = 8 +/obj/disposalpipe/segment/horizontal, +/turf/simulated/floor/white, +/area/station/medical/medbay) +"cXV" = ( +/obj/machinery/atmospherics/pipe/simple{ + dir = 4; + level = 2 }, -/turf/simulated/floor/carpet{ - icon_state = "fblue1" +/obj/cable{ + icon_state = "1-2" }, -/area/station/medical/head) -"cXV" = ( -/obj/machinery/computer3/generic/med_data{ - dir = 8 +/obj/disposalpipe/segment/horizontal, +/obj/machinery/atmospherics/pipe/simple/color_pipe/cyan_pipe{ + dir = 1 }, -/obj/machinery/power/data_terminal, -/turf/simulated/floor/carpet{ - dir = 4; - icon_state = "fblue3" +/turf/simulated/floor/bluewhite{ + dir = 4 }, -/area/station/medical/head) +/area/station/medical/medbay) "cXW" = ( -/obj/mapping_helper/wingrille_spawn/auto/reinforced, -/obj/disposalpipe/segment, -/obj/machinery/door/poddoor/pyro/shutters{ - density = 0; - dir = 4; - icon_state = "pdoor0"; - id = "pathology_lockdown"; - name = "Pathology Quarantine Shutters"; - opacity = 0 +/obj/machinery/door/airlock/pyro/glass/med{ + dir = 4 }, -/obj/window_blinds/cog2/middle{ - dir = 8 +/obj/mapping_helper/access/medical, +/obj/machinery/atmospherics/pipe/simple{ + dir = 4; + level = 2 }, -/turf/simulated/floor/plating, -/area/station/medical/head) +/obj/mapping_helper/firedoor_spawn, +/obj/disposalpipe/segment/horizontal, +/turf/simulated/floor/blue, +/area/station/medical/medbay) "cXY" = ( -/obj/table/reinforced/chemistry/auto, -/obj/item/clothing/gloves/latex, -/obj/item/clothing/gloves/latex, -/obj/item/clothing/mask/surgical, -/obj/item/clothing/mask/surgical, -/obj/disposalpipe/segment/mail/vertical, -/turf/simulated/floor/white, -/area/station/medical/cdc) +/obj/disposalpipe/segment/horizontal, +/turf/simulated/floor, +/area/station/medical/medbay/surgery/storage) "cXZ" = ( -/obj/table/reinforced/chemistry/auto, -/obj/item/storage/box/syringes, -/obj/item/device/analyzer/healthanalyzer, -/obj/item/device/analyzer/healthanalyzer, -/turf/simulated/floor/white, -/area/station/medical/cdc) +/obj/cable{ + icon_state = "1-2" + }, +/obj/disposalpipe/junction/right/west, +/turf/simulated/floor, +/area/station/medical/medbay/surgery/storage) "cYc" = ( /turf/simulated/floor/carpet{ dir = 8; @@ -52824,30 +51943,14 @@ /area/station/medical/research{ name = "Genetic Research" }) -"cYd" = ( -/obj/table/glass/reinforced/auto, -/obj/item/storage/firstaid/regular, -/obj/item/storage/firstaid/regular, -/obj/item/device/analyzer/healthanalyzer, -/obj/item/device/analyzer/healthanalyzer, -/obj/item/storage/pill_bottle/mutadone, -/obj/item/hand_labeler, -/obj/item/storage/firstaid/brain, -/obj/disposalpipe/segment/mail/vertical, -/turf/simulated/floor/carpet{ - icon_state = "blue1" - }, -/area/station/medical/research{ - name = "Genetic Research" - }) "cYe" = ( -/turf/simulated/floor/carpet{ - dir = 4; - icon_state = "blue2" - }, -/area/station/medical/research{ - name = "Genetic Research" - }) +/obj/machinery/door/airlock/pyro/glass/med, +/obj/disposalpipe/segment/transport, +/obj/disposalpipe/segment/transport, +/obj/mapping_helper/access/medical, +/obj/mapping_helper/firedoor_spawn, +/turf/simulated/floor, +/area/station/medical/dome) "cYg" = ( /obj/machinery/portable_atmospherics/canister/nitrogen, /turf/simulated/floor/sanitary/blue, @@ -53022,141 +52125,100 @@ /turf/simulated/floor, /area/station/science/artifact) "cYQ" = ( -/obj/machinery/atmospherics/unary/cryo_cell, +/obj/machinery/camera{ + c_tag = "autotag"; + dir = 4; + name = "autoname - SS13"; + pixel_x = -10; + tag = "" + }, +/obj/machinery/computer/chem_requester/medical{ + dir = 4 + }, +/obj/item/device/radio/intercom/medical{ + dir = 4 + }, /turf/simulated/floor/blue, -/area/station/medical/medbay) +/area/station/medical/medbay/pharmacy) "cYR" = ( -/obj/machinery/atmospherics/pipe/simple/color_pipe/cyan_pipe{ - dir = 1 +/obj/machinery/door/airlock/pyro/glass/med{ + dir = 4 }, -/turf/simulated/floor/bluewhite{ - dir = 8 +/obj/cable{ + icon_state = "4-8" }, -/area/station/medical/medbay) +/obj/mapping_helper/access/medlocker, +/obj/mapping_helper/firedoor_spawn, +/obj/disposalpipe/segment/mail/horizontal, +/turf/simulated/floor/blue, +/area/station/medical/medbay/pharmacy) "cYS" = ( -/obj/machinery/light/emergency{ - dir = 4; - pixel_x = 16 +/obj/cable{ + icon_state = "2-4" }, -/obj/submachine/chef_sink/chem_sink{ - dir = 8; - pixel_x = 8 +/obj/cable{ + icon_state = "2-8" }, +/obj/disposalpipe/segment/mail/horizontal, /turf/simulated/floor/bluewhite{ - dir = 4 + dir = 8 }, /area/station/medical/medbay) "cYT" = ( -/obj/machinery/light/emergency{ - dir = 8; - pixel_x = -16 +/obj/cable{ + icon_state = "4-8" }, -/obj/disposalpipe/segment, -/obj/submachine/chef_sink/chem_sink{ - dir = 4; - pixel_x = -8 +/obj/cable{ + icon_state = "1-8" }, -/turf/simulated/floor/redwhite{ - dir = 8 +/turf/simulated/floor/white, +/area/station/medical/medbay) +"cYX" = ( +/obj/table/auto, +/obj/item/device/analyzer/healthanalyzer{ + pixel_y = 6 }, -/area/station/medical/medbay/surgery) -"cYU" = ( -/obj/mapping_helper/wingrille_spawn/auto/reinforced, -/obj/window_blinds/cog2/left{ - dir = 4 +/obj/item/spraybottle/cleaner{ + pixel_x = 5; + pixel_y = 2 }, -/turf/simulated/floor/plating, -/area/station/medical/head) -"cYW" = ( /obj/cable{ icon_state = "1-8" }, /obj/cable{ - icon_state = "1-2" - }, -/turf/simulated/floor/carpet{ - icon_state = "fblue1" - }, -/area/station/medical/head) -"cYX" = ( -/obj/machinery/computer/card/department/medical{ - dir = 8 + icon_state = "2-8" }, -/turf/simulated/floor/carpet{ - dir = 4; - icon_state = "fblue3" +/obj/machinery/atmospherics/pipe/manifold, +/turf/simulated/floor/bluewhite{ + dir = 4 }, -/area/station/medical/head) +/area/station/medical/medbay) "cYY" = ( /obj/mapping_helper/wingrille_spawn/auto/reinforced, -/obj/disposalpipe/segment, -/obj/machinery/door/poddoor/pyro/shutters{ - density = 0; - dir = 4; - icon_state = "pdoor0"; - id = "pathology_lockdown"; - name = "Pathology Quarantine Shutters"; - opacity = 0 - }, -/obj/window_blinds/cog2/right{ - dir = 8 +/obj/machinery/atmospherics/pipe/simple/color_pipe/cyan_pipe{ + dir = 4 }, /turf/simulated/floor/plating, -/area/station/medical/head) +/area/station/medical/medbay) "cZa" = ( -/obj/stool/chair/office{ - dir = 8 +/obj/machinery/atmospherics/pipe/simple/color_pipe/cyan_pipe{ + dir = 4 }, -/turf/simulated/floor/white, -/area/station/medical/cdc) +/turf/simulated/floor, +/area/station/medical/medbay/surgery/storage) "cZb" = ( -/obj/table/reinforced/chemistry/auto, -/obj/machinery/light/lamp/black, -/obj/disposalpipe/segment/mail/vertical, -/turf/simulated/floor/white, -/area/station/medical/cdc) -"cZc" = ( -/obj/table/reinforced/chemistry/auto, -/obj/item/reagent_containers/emergency_injector/spaceacillin, -/obj/item/reagent_containers/emergency_injector/spaceacillin, -/obj/item/reagent_containers/emergency_injector/spaceacillin, -/obj/item/reagent_containers/dropper/mechanical, -/obj/item/reagent_containers/dropper/mechanical, -/obj/item/device/light/flashlight/penlight, -/turf/simulated/floor/white, -/area/station/medical/cdc) -"cZf" = ( -/obj/stool/chair/office{ - dir = 8 - }, -/obj/landmark/start/job/geneticist, -/turf/simulated/floor/white, -/area/station/medical/research{ - name = "Genetic Research" - }) -"cZg" = ( -/obj/item/storage/firstaid/toxin, -/obj/item/storage/toolbox/emergency, -/obj/item/hand_labeler, -/obj/table/glass/reinforced/auto, -/obj/machinery/light/lamp/black, -/obj/item/clothing/glasses/spectro, -/obj/disposalpipe/segment/mail/vertical, -/turf/simulated/floor/carpet{ - icon_state = "blue1" +/obj/machinery/atmospherics/pipe/simple/color_pipe/cyan_pipe{ + dir = 10 }, -/area/station/medical/research{ - name = "Genetic Research" - }) -"cZh" = ( -/obj/stool/chair/office{ - dir = 4 +/turf/simulated/floor, +/area/station/medical/medbay/surgery/storage) +"cZc" = ( +/obj/cable{ + icon_state = "1-2" }, -/obj/landmark/start/job/geneticist, -/turf/simulated/floor/white, -/area/station/medical/research{ - name = "Genetic Research" - }) +/obj/disposalpipe/segment/vertical, +/turf/simulated/floor, +/area/station/medical/medbay/surgery/storage) "cZj" = ( /obj/item/reagent_containers/food/snacks/chips, /turf/simulated/floor/plating, @@ -53296,187 +52358,117 @@ /turf/simulated/floor/purple, /area/station/science/artifact) "cZH" = ( -/obj/machinery/atmospherics/pipe/simple/insulated/cold{ - can_rupture = 0; - dir = 5 - }, -/obj/table/reinforced/auto, -/obj/item/reagent_containers/glass/beaker/cryoxadone{ - pixel_x = 4; - pixel_y = 5 - }, -/obj/item/reagent_containers/glass/beaker/cryoxadone{ - pixel_x = 4; - pixel_y = 5 - }, -/obj/item/reagent_containers/glass/beaker/cryoxadone{ - pixel_x = 4; - pixel_y = 5 - }, -/obj/machinery/camera{ - c_tag = "autotag"; +/obj/submachine/chef_sink/chem_sink{ dir = 4; - name = "autoname - SS13"; - pixel_x = -10; - tag = "" + pixel_x = -4 }, /turf/simulated/floor/blue, -/area/station/medical/medbay) +/area/station/medical/medbay/pharmacy) "cZI" = ( -/obj/machinery/atmospherics/pipe/simple/insulated/cold{ - can_rupture = 0; - dir = 4 - }, +/obj/landmark/start/job/medical_doctor, +/obj/stool/chair/office, +/obj/disposalpipe/segment/mail/vertical, /turf/simulated/floor/bluewhite{ dir = 10 }, -/area/station/medical/medbay) +/area/station/medical/medbay/pharmacy) "cZJ" = ( -/obj/machinery/atmospherics/pipe/manifold{ - dir = 1; - level = 2 - }, /turf/simulated/floor/bluewhite{ dir = 6 }, -/area/station/medical/medbay) +/area/station/medical/medbay/pharmacy) "cZK" = ( -/obj/machinery/atmospherics/pipe/simple/insulated/cold{ - can_rupture = 0; - dir = 9 - }, -/obj/table/reinforced/auto, -/obj/item/wrench, -/obj/item/device/analyzer/healthanalyzer, -/obj/item/remote/porter/port_a_medbay, /turf/simulated/floor/blue, -/area/station/medical/medbay) +/area/station/medical/medbay/pharmacy) "cZL" = ( -/obj/machinery/light{ - dir = 4; - layer = 9.1; - pixel_x = 10 +/obj/cable{ + icon_state = "1-2" }, +/obj/disposalpipe/segment/mail/bent/east, /turf/simulated/floor/bluewhite{ - dir = 4 + dir = 8 }, /area/station/medical/medbay) "cZM" = ( -/obj/machinery/light{ - dir = 8; - layer = 9.1; - pixel_x = -10 - }, -/obj/disposalpipe/segment, -/obj/machinery/dialysis, -/turf/simulated/floor/redwhite{ - dir = 8 - }, -/area/station/medical/medbay/surgery) -"cZN" = ( -/obj/landmark/start/job/medical_doctor, -/obj/stool/chair/office, +/obj/disposalpipe/segment/mail/horizontal, /turf/simulated/floor/white, -/area/station/medical/medbay/surgery) +/area/station/medical/medbay) "cZP" = ( -/obj/stool/bed, -/obj/item/clothing/suit/bedsheet{ - bcolor = "black"; - icon_state = "bedsheet-black" - }, -/obj/blind_switch/area{ - pixel_x = -24; - pixel_y = -2 - }, -/obj/item/cigpacket/propuffs, -/obj/machinery/light_switch/west{ - pixel_y = 6 - }, -/turf/simulated/floor/carpet{ - dir = 10; - icon_state = "fblue2" - }, -/area/station/medical/head) -"cZQ" = ( -/obj/critter/bat/doctor, /obj/cable{ - icon_state = "1-4" + icon_state = "1-2" }, -/turf/simulated/floor/carpet{ - icon_state = "fblue3" +/obj/disposalpipe/switch_junction/right/east{ + mail_tag = "medbay"; + name = "mail junction (medbay)" }, -/area/station/medical/head) +/turf/simulated/floor/white, +/area/station/medical/medbay) "cZR" = ( -/obj/item/storage/firstaid/oxygen{ - pixel_y = -4 +/obj/cable{ + icon_state = "1-4" }, -/obj/item/storage/firstaid/toxin, -/obj/item/storage/firstaid/fire{ - pixel_y = -4 +/obj/disposalpipe/segment/mail/horizontal, +/turf/simulated/floor/bluewhite{ + dir = 4 }, -/obj/item/storage/firstaid/regular, -/obj/item/bandage, -/obj/item/bandage, -/obj/item/bandage, -/obj/item/robodefibrillator, -/obj/item/body_bag, -/obj/item/body_bag, -/obj/item/body_bag, -/obj/storage/cart/medcart, +/area/station/medical/medbay) +"cZT" = ( /obj/cable{ - icon_state = "0-8" + icon_state = "4-8" }, -/obj/machinery/power/apc{ - dir = 4; - name = "E APC"; - pixel_x = 24 +/obj/disposalpipe/segment/mail/horizontal, +/turf/simulated/floor, +/area/station/medical/medbay/surgery/storage) +"cZU" = ( +/obj/cable{ + icon_state = "4-8" }, -/turf/simulated/floor/carpet{ - dir = 6; - icon_state = "fblue2" +/obj/machinery/atmospherics/unary/vent_pump{ + dir = 1 }, -/area/station/medical/head) -"cZT" = ( +/obj/disposalpipe/segment/mail/horizontal, +/turf/simulated/floor, +/area/station/medical/medbay/surgery/storage) +"cZV" = ( /obj/cable{ icon_state = "2-8" }, -/turf/simulated/floor/white, -/area/station/medical/cdc) -"cZU" = ( -/obj/machinery/optable, -/obj/disposalpipe/segment/mail/vertical, -/obj/decal/stripe_caution, -/turf/simulated/floor/white, -/area/station/medical/cdc) -"cZV" = ( -/obj/iv_stand, -/obj/decal/stripe_caution, -/turf/simulated/floor/white, -/area/station/medical/cdc) +/obj/cable{ + icon_state = "1-8" + }, +/obj/disposalpipe/segment/vertical, +/obj/disposalpipe/segment/mail/horizontal, +/turf/simulated/floor, +/area/station/medical/medbay/surgery/storage) "cZY" = ( -/turf/simulated/floor/carpet{ - dir = 10; - icon_state = "blue2" +/obj/shrub, +/obj/landmark/kudzu, +/turf/simulated/floor/grass{ + name = "astroturf" }, -/area/station/medical/research{ - name = "Genetic Research" - }) +/area/station/medical/dome) "cZZ" = ( -/obj/disposalpipe/segment/mail/vertical, -/turf/simulated/floor/carpet{ - icon_state = "blue2" +/obj/item/device/radio/intercom/medical, +/obj/stool/chair, +/obj/item/clothing/suit/monkey, +/obj/machinery/light{ + dir = 1; + layer = 9.1; + pixel_y = 21 }, -/area/station/medical/research{ - name = "Genetic Research" - }) +/turf/simulated/floor/grass{ + name = "astroturf" + }, +/area/station/medical/dome) "daa" = ( -/turf/simulated/floor/carpet{ - dir = 6; - icon_state = "blue2" +/obj/disposalpipe/segment/transport{ + dir = 1; + icon_state = "pipe-c" }, -/area/station/medical/research{ - name = "Genetic Research" - }) +/turf/simulated/floor/grass{ + name = "astroturf" + }, +/area/station/medical/dome) "dac" = ( /obj/cable{ icon_state = "2-8" @@ -53557,21 +52549,15 @@ /obj/cable{ icon_state = "0-2" }, +/obj/disposalpipe/segment/mail/horizontal, /obj/machinery/power/apc{ - areastring = "Medbay"; + areastring = "Medical Director's Office"; dir = 1; - name = "Medbay APC"; + name = "Med Director's APC"; pixel_y = 24 }, -/obj/disposalpipe/segment/mail/horizontal, /turf/simulated/floor/plating, /area/station/maintenance/solar/south) -"dar" = ( -/obj/stool/chair{ - dir = 4 - }, -/turf/simulated/floor/plating/scorched, -/area/station/maintenance/south) "das" = ( /obj/machinery/launcher_loader/north, /obj/machinery/door/poddoor/pyro{ @@ -53681,144 +52667,129 @@ /turf/simulated/floor, /area/station/science/artifact) "daH" = ( -/obj/machinery/atmospherics/pipe/simple/insulated/cold{ - can_rupture = 0; - dir = 4 +/obj/table/auto, +/obj/item/storage/firstaid/fire{ + pixel_y = -4 + }, +/obj/item/storage/firstaid/fire{ + pixel_y = -4 + }, +/obj/item/reagent_containers/glass/bottle/epinephrine, +/obj/item/reagent_containers/glass/beaker/large/burn, +/obj/item/reagent_containers/dropper, +/obj/item/remote/porter/port_a_nanomed{ + pixel_x = 16 }, +/obj/disposalpipe/segment/mail/bent/north, /turf/simulated/floor/blue, -/area/station/medical/medbay) +/area/station/medical/medbay/pharmacy) "daI" = ( -/obj/machinery/atmospherics/pipe/manifold{ - level = 2 - }, +/obj/table/auto, +/obj/item/storage/firstaid/toxin, +/obj/item/storage/firstaid/toxin, +/obj/item/reagent_containers/glass/bottle/epinephrine, +/obj/item/reagent_containers/glass/beaker/large/antitox, +/obj/item/reagent_containers/dropper, /obj/machinery/light, +/obj/item/reagent_containers/hypospray, +/obj/item/reagent_containers/hypospray, +/obj/random_item_spawner/medicine, +/obj/disposalpipe/segment/mail/horizontal, /turf/simulated/floor/blue, -/area/station/medical/medbay) +/area/station/medical/medbay/pharmacy) "daJ" = ( -/obj/machinery/atmospherics/unary/cold_sink/freezer/cryo{ - dir = 8 - }, +/obj/machinery/vending/player/chemicals, +/obj/disposalpipe/trunk/mail/west, /turf/simulated/floor/blue, -/area/station/medical/medbay) +/area/station/medical/medbay/pharmacy) "daK" = ( -/obj/machinery/light_switch/east, +/obj/cable{ + icon_state = "1-2" + }, +/obj/disposalpipe/segment/mail/vertical, /turf/simulated/floor/bluewhite{ - dir = 4 + dir = 10 }, /area/station/medical/medbay) "daL" = ( -/obj/machinery/disposal, -/obj/disposalpipe/trunk{ - dir = 1 +/obj/rack, +/obj/item/remote/porter/port_a_medbay{ + pixel_x = -6; + pixel_y = 6 }, -/obj/machinery/light_switch/west, -/turf/simulated/floor/redwhite{ - dir = 10 +/obj/item/item_box/medical_patches/mini_styptic{ + pixel_x = 6; + pixel_y = 4 }, -/area/station/medical/medbay/surgery) +/obj/item/item_box/medical_patches/mini_silver_sulf, +/obj/item/reagent_containers/syringe/epinephrine, +/turf/simulated/floor/bluewhite, +/area/station/medical/medbay) "daM" = ( -/obj/table/auto, -/obj/item/storage/box/stma_kit, -/obj/item/bandage, -/obj/item/bandage, -/obj/item/bandage, -/obj/item/staple_gun, -/obj/machinery/camera{ - c_tag = "autotag"; - dir = 10; - name = "autoname - SS13"; - tag = "" - }, -/obj/item/device/light/flashlight/penlight, -/turf/simulated/floor/redwhite, -/area/station/medical/medbay/surgery) -"daN" = ( -/obj/table/auto, -/obj/item/storage/firstaid/regular, -/obj/item/clothing/gloves/latex, -/obj/item/clothing/mask/surgical, -/obj/item/clothing/mask/surgical, -/obj/item/weldingtool, -/obj/item/device/analyzer/healthanalyzer, -/obj/item/reagent_containers/glass/bottle/epinephrine, -/obj/item/reagent_containers/dropper, -/obj/item/device/audio_log/wall_mounted{ - anchored = 1; - max_lines = 350; - mode = 1; - name = "Medical Recorder"; - pixel_y = -28 - }, -/obj/machinery/light/emergency, -/turf/simulated/floor/redwhite, -/area/station/medical/medbay/surgery) +/obj/reagent_dispensers/watertank/fountain, +/turf/simulated/floor/bluewhite, +/area/station/medical/medbay) "daO" = ( -/obj/disposalpipe/segment/mail/vertical, -/turf/simulated/floor/redwhite, -/area/station/medical/medbay/surgery) +/obj/machinery/atmospherics/pipe/simple/color_pipe/cyan_pipe{ + dir = 1 + }, +/turf/simulated/floor/bluewhite, +/area/station/medical/medbay) "daP" = ( -/obj/table/auto, -/obj/item/storage/firstaid/oxygen, -/obj/item/reagent_containers/glass/beaker/large/brute, -/obj/item/reagent_containers/glass/beaker/large/burn, -/obj/item/reagent_containers/glass/beaker/large/epinephrine, -/obj/item/reagent_containers/glass/beaker/large/antitox, -/obj/item/reagent_containers/hypospray, -/obj/item/reagent_containers/dropper, -/obj/machinery/light/emergency, -/turf/simulated/floor/redwhite, -/area/station/medical/medbay/surgery) +/obj/stool/chair/office{ + dir = 4 + }, +/obj/landmark/start/job/medical_doctor, +/turf/simulated/floor/bluewhite, +/area/station/medical/medbay) "daQ" = ( -/obj/machinery/disposal/morgue, -/obj/disposalpipe/trunk/morgue{ - dir = 1 +/obj/table/reinforced/auto, +/obj/machinery/coffeemaker/medbay, +/obj/item/kitchen/food_box/sugar_box{ + pixel_x = 16 }, -/turf/simulated/floor/redwhite, -/area/station/medical/medbay/surgery) +/obj/item/reagent_containers/food/drinks/creamer{ + pixel_x = 16; + pixel_y = 12 + }, +/obj/drink_rack/mug{ + pixel_y = -20 + }, +/turf/simulated/floor/bluewhite, +/area/station/medical/medbay) "daR" = ( -/obj/table/auto, -/obj/item/storage/box/health_upgrade_kit, -/obj/item/device/analyzer/healthanalyzer, -/obj/item/device/analyzer/healthanalyzer, -/obj/item/spraybottle/cleaner, -/turf/simulated/floor/redwhite, -/area/station/medical/medbay/surgery) +/obj/item/device/radio/intercom/medical{ + dir = 1 + }, +/obj/table/reinforced/auto, +/obj/machinery/phone{ + pixel_x = 4 + }, +/obj/machinery/light/incandescent, +/turf/simulated/floor/bluewhite, +/area/station/medical/medbay) "daS" = ( -/obj/table/auto, -/obj/item/robodefibrillator, -/obj/item/robodefibrillator, -/obj/machinery/light{ - dir = 4; - layer = 9.1; - pixel_x = 10 +/obj/stool/chair/office{ + dir = 8 }, -/obj/item/reagent_containers/iv_drip/saline, -/turf/simulated/floor/redwhite{ - dir = 6 +/obj/landmark/start/job/medical_doctor, +/obj/disposalpipe/segment/vertical, +/turf/simulated/floor/bluewhite/corner{ + dir = 4 }, -/area/station/medical/medbay/surgery) +/area/station/medical/medbay) "daT" = ( -/obj/mapping_helper/wingrille_spawn/auto/reinforced, -/obj/window_blinds/cog2/left, -/turf/simulated/floor/plating, -/area/station/medical/head) -"daU" = ( -/obj/mapping_helper/wingrille_spawn/auto/reinforced, -/obj/window_blinds/cog2/middle, -/turf/simulated/floor/plating, -/area/station/medical/head) +/obj/cable{ + icon_state = "1-2" + }, +/turf/simulated/floor/white, +/area/station/medical/medbay) "daV" = ( -/obj/mapping_helper/wingrille_spawn/auto/reinforced, -/obj/window_blinds/cog2/right, -/turf/simulated/floor/plating, -/area/station/medical/head) -"daW" = ( -/obj/disposalpipe/segment{ - dir = 1; - icon_state = "pipe-c" +/obj/machinery/light/incandescent, +/turf/simulated/floor/bluewhite{ + dir = 4 }, -/turf/simulated/wall/auto/reinforced/supernorn, -/area/station/medical/head) +/area/station/medical/medbay) "daZ" = ( /turf/simulated/floor/sanitary/white, /area/station/medical/robotics) @@ -53970,71 +52941,40 @@ /turf/simulated/floor, /area/station/hangar/science) "dbI" = ( -/turf/simulated/wall/auto/reinforced/supernorn, +/obj/machinery/light/incandescent, +/turf/simulated/floor/bluewhite, /area/station/medical/medbay) "dbJ" = ( -/obj/storage/secure/closet/fridge/blood, -/turf/simulated/floor/blue, +/obj/cable{ + icon_state = "1-2" + }, +/turf/simulated/floor/bluewhite, /area/station/medical/medbay) "dbK" = ( -/obj/storage/closet/biohazard, -/obj/item/reagent_containers/emergency_injector/spaceacillin, -/obj/machinery/light{ - dir = 1; - layer = 9.1; - pixel_y = 21 - }, -/turf/simulated/floor/blue, +/obj/rack, +/obj/item/clothing/suit/hazard/paramedic, +/obj/item/storage/belt/medical, +/turf/simulated/floor/bluewhite, /area/station/medical/medbay) "dbL" = ( -/obj/storage/closet/biohazard, -/obj/item/reagent_containers/emergency_injector/spaceacillin, -/turf/simulated/floor/blue, +/obj/machinery/firealarm/east, +/obj/rack, +/obj/item/clothing/suit/hazard/paramedic, +/obj/item/storage/belt/medical, +/turf/simulated/floor/bluewhite{ + dir = 6 + }, /area/station/medical/medbay) -"dbM" = ( +"dbO" = ( +/obj/machinery/door/airlock/pyro/medical, +/obj/mapping_helper/firedoor_spawn, +/obj/mapping_helper/access/morgue, /obj/cable{ icon_state = "1-2" }, -/turf/simulated/floor/stairs{ - dir = 1; - icon_state = "medstairs_wide" - }, -/area/station/medical/cdc) -"dbN" = ( -/obj/disposalpipe/segment/mail/vertical, -/turf/simulated/floor/stairs{ - dir = 1; - icon_state = "medstairs2_wide" - }, -/area/station/medical/cdc) -"dbO" = ( -/obj/mapping_helper/wingrille_spawn/auto, -/turf/simulated/floor/plating, -/area/station/medical/cdc) -"dbP" = ( -/turf/simulated/floor/stairs{ - dir = 1; - icon_state = "medstairs_wide" - }, -/area/station/medical/cdc) -"dbQ" = ( -/obj/machinery/light_switch/east, -/obj/disposalpipe/segment/mail/vertical, -/turf/simulated/floor/stairs{ - dir = 1; - icon_state = "medstairs2_wide" - }, -/area/station/medical/cdc) -"dbS" = ( -/obj/item/sheet/wood, -/obj/item/sheet/wood, -/obj/item/sheet/wood, -/obj/item/sheet/wood, -/obj/item/sheet/wood, -/obj/storage/crate, -/obj/machinery/light/small, -/turf/simulated/floor/grime, -/area/station/storage/auxillary) +/obj/disposalpipe/segment/vertical, +/turf/simulated/floor/sanitary/blue, +/area/station/medical/morgue) "dbT" = ( /obj/cable{ icon_state = "1-2" @@ -54110,14 +53050,23 @@ }, /area/station/medical/robotics) "dcf" = ( -/obj/stool/chair/couch{ - dir = 4 +/obj/item/storage/firstaid/oxygen{ + pixel_y = -4 }, -/obj/landmark/start/job/medical_doctor, -/turf/simulated/floor/bluewhite/corner{ - dir = 1 +/obj/item/storage/firstaid/toxin, +/obj/item/storage/firstaid/fire{ + pixel_y = -4 }, -/area/station/medical/medbay) +/obj/item/storage/firstaid/regular, +/obj/item/bandage, +/obj/item/bandage, +/obj/item/bandage, +/obj/item/robodefibrillator, +/obj/item/body_bag, +/obj/item/body_bag, +/obj/storage/cart/medcart, +/turf/simulated/floor/blue, +/area/station/medical/medbay/pharmacy) "dcg" = ( /turf/simulated/floor/plating, /area/station/maintenance/solar/south) @@ -54240,243 +53189,101 @@ /turf/simulated/floor/arrival, /area/station/hallway/secondary/exit) "dcE" = ( -/obj/disposalpipe/segment/transport{ - dir = 4 - }, -/obj/reagent_dispensers/watertank/fountain, /turf/simulated/floor/blue/side{ dir = 10 }, /area/station/medical/medbay/lobby) "dcG" = ( -/obj/machinery/navbeacon/guardbotsecbot_circularpatrol/beacon12, -/obj/disposalpipe/segment/mail/horizontal, -/turf/simulated/floor/bluewhite{ - dir = 8 - }, -/area/station/medical/medbay) -"dcH" = ( -/obj/disposalpipe/segment/mail/horizontal, -/turf/simulated/floor/bluewhite/corner{ - dir = 8 +/obj/machinery/power/apc{ + areastring = "Medbay"; + dir = 1; + name = "Medbay APC"; + pixel_y = 24 }, -/area/station/medical/medbay) -"dcI" = ( -/obj/disposalpipe/segment/mail/horizontal, -/obj/machinery/power/data_terminal, /obj/cable{ icon_state = "0-2" }, -/obj/machinery/sleeper/compact{ - dir = 8 - }, -/turf/simulated/floor/bluewhite{ - dir = 1 - }, -/area/station/medical/medbay) -"dcJ" = ( /obj/disposalpipe/segment/mail/horizontal, +/turf/simulated/floor/plating, +/area/station/maintenance/solar/south) +"dcH" = ( /obj/cable{ - icon_state = "2-4" + icon_state = "1-2" }, -/turf/simulated/floor/bluewhite{ - dir = 1 +/obj/disposalpipe/segment/mail/bent/west, +/turf/simulated/floor/plating, +/area/station/maintenance/solar/south) +"dcJ" = ( +/obj/machinery/vending/port_a_nanomed, +/obj/machinery/light/incandescent, +/turf/simulated/floor/redwhite{ + dir = 9 }, -/area/station/medical/medbay) +/area/station/medical/medbay/surgery) "dcK" = ( -/obj/disposalpipe/segment/mail/horizontal, -/obj/cable{ - icon_state = "4-8" - }, -/turf/simulated/floor/bluewhite{ - dir = 1 - }, -/area/station/medical/medbay) -"dcL" = ( -/obj/machinery/light{ - dir = 1; - layer = 9.1; - pixel_y = 21 - }, -/obj/disposalpipe/segment/mail/horizontal, -/obj/cable{ - icon_state = "4-8" - }, -/turf/simulated/floor/bluewhite{ +/obj/machinery/dialysis, +/turf/simulated/floor/redwhite{ dir = 1 }, -/area/station/medical/medbay) +/area/station/medical/medbay/surgery) "dcM" = ( -/obj/disposalpipe/switch_junction/right/east{ - mail_tag = "medbay"; - name = "mail junction (medbay)" - }, -/obj/cable{ - icon_state = "4-8" - }, -/turf/simulated/floor/bluewhite{ - dir = 1 - }, -/area/station/medical/medbay) -"dcN" = ( -/obj/submachine/chef_sink/chem_sink{ - pixel_y = 15 - }, -/obj/disposalpipe/segment/mail/horizontal, -/obj/cable{ - icon_state = "4-8" - }, -/turf/simulated/floor/bluewhite{ - dir = 1 - }, -/area/station/medical/medbay) -"dcO" = ( -/obj/machinery/camera{ - c_tag = "autotag"; - dir = 6; - name = "autoname - SS13"; - pixel_y = 20; - tag = "" - }, -/obj/disposalpipe/segment/mail/horizontal, -/obj/item/storage/wall/medical{ - dir = 1; - pixel_y = 32 - }, -/obj/cable{ - icon_state = "4-8" - }, -/turf/simulated/floor/bluewhite{ +/obj/machinery/atmospherics/pipe/simple/color_pipe/cyan_pipe{ dir = 1 }, -/area/station/medical/medbay) -"dcP" = ( -/obj/item/device/radio/intercom/medical, -/obj/machinery/light{ - dir = 1; - layer = 9.1; - pixel_y = 21 - }, -/obj/disposalpipe/segment/mail/horizontal, -/obj/cable{ - icon_state = "4-8" - }, -/turf/simulated/floor/bluewhite{ +/turf/simulated/floor/redwhite{ dir = 1 }, -/area/station/medical/medbay) -"dcQ" = ( -/obj/disposalpipe/segment/mail/horizontal, -/obj/cable{ - icon_state = "4-8" - }, -/turf/simulated/floor/bluewhite{ +/area/station/medical/medbay/surgery) +"dcN" = ( +/obj/storage/secure/closet/fridge/blood, +/obj/machinery/light/incandescent, +/turf/simulated/floor/redwhite{ dir = 5 }, -/area/station/medical/medbay) -"dcS" = ( -/obj/machinery/light{ - dir = 1; - layer = 9.1; - pixel_y = 21 - }, -/obj/machinery/door_control{ - id = "pathology_lockdown"; - name = "Pathology Lockdown Control"; - pixel_y = 24 - }, -/obj/disposalpipe/segment/mail/horizontal, -/obj/cable{ - icon_state = "4-8" - }, -/obj/decal/stripe_caution, -/turf/simulated/floor, -/area/station/medical/cdc) +/area/station/medical/medbay/surgery) +"dcP" = ( +/obj/mapping_helper/wingrille_spawn/auto/reinforced, +/obj/window_blinds/cog2, +/turf/simulated/floor/plating, +/area/station/medical/medbay/psychiatrist) "dcT" = ( -/obj/disposalpipe/segment/mail/horizontal, -/obj/cable{ - icon_state = "1-8" - }, -/turf/simulated/floor/caution/corner/nw{ - dir = 1 +/obj/machinery/traymachine/morgue{ + dir = 2 }, -/area/station/medical/cdc) +/obj/machinery/light/incandescent, +/turf/simulated/floor/sanitary, +/area/station/medical/morgue) "dcU" = ( -/obj/disposalpipe/switch_junction/right/east{ - mail_tag = "morgue"; - name = "mail junction (morgue)" +/obj/machinery/traymachine/morgue{ + dir = 2 }, -/turf/simulated/floor/caution/north, -/area/station/medical/cdc) -"dcV" = ( -/obj/machinery/camera{ - c_tag = "autotag"; - dir = 6; - name = "autoname - SS13"; - pixel_y = 20; - tag = "" +/obj/decal/tile_edge/stripe/extra_big{ + dir = 4 }, -/obj/disposalpipe/segment/mail/horizontal, -/turf/simulated/floor/caution/north, -/area/station/medical/cdc) -"dcW" = ( -/obj/disposalpipe/segment/mail/horizontal, -/turf/simulated/floor/caution/north, -/area/station/medical/cdc) -"dcX" = ( -/obj/disposalpipe/switch_junction/right/east{ - mail_tag = "pathology"; - name = "mail junction (pathology)" +/obj/decal/tile_edge/stripe/extra_big{ + dir = 5; + icon_state = "xtra_bigstripe-corner2" }, -/turf/simulated/floor/caution/corner/ne{ - dir = 1 +/obj/item/device/radio/intercom/medical, +/turf/simulated/floor/sanitary, +/area/station/medical/morgue) +"dcX" = ( +/obj/machinery/computer3/generic/med_data, +/obj/cable{ + icon_state = "0-8" }, -/area/station/medical/cdc) +/obj/machinery/power/data_terminal, +/turf/simulated/floor/sanitary/blue, +/area/station/medical/morgue) "ddb" = ( -/obj/disposalpipe/segment/transport{ - dir = 4 - }, -/obj/machinery/genetics_booth, +/obj/machinery/light/incandescent, /turf/simulated/floor/blue/side, /area/station/medical/medbay/lobby) -"ddc" = ( -/obj/item/device/radio/intercom/medical, -/obj/stool/chair, -/obj/item/clothing/suit/monkey, -/obj/machinery/light{ - dir = 1; - layer = 9.1; - pixel_y = 21 - }, -/obj/disposalpipe/segment/mail/bent/west, -/turf/simulated/floor/grass{ - name = "astroturf" - }, -/area/station/medical/dome) "ddd" = ( /turf/simulated/floor/grass{ name = "astroturf" }, /area/station/medical/dome) -"dde" = ( -/obj/disposalpipe/trunk{ - dir = 1 - }, -/obj/machinery/disposal{ - name = "Test Chamber Chute" - }, -/obj/item/storage/wall/random, -/turf/simulated/floor/grass{ - name = "astroturf" - }, -/area/station/medical/dome) -"ddf" = ( -/obj/machinery/vending/monkey/genetics, -/obj/disposalpipe/segment/transport, -/turf/simulated/floor/grass{ - name = "astroturf" - }, -/area/station/medical/dome) "ddg" = ( /turf/simulated/wall/auto/supernorn, /area/station/medical/dome) @@ -54532,20 +53339,6 @@ }, /turf/simulated/floor/engine/vacuum, /area/station/hangar/qm) -"ddp" = ( -/obj/cable{ - icon_state = "1-2" - }, -/obj/machinery/light_switch/east, -/turf/simulated/floor/plating, -/area/station/maintenance/solar/south) -"ddq" = ( -/obj/disposalpipe/segment/transport{ - dir = 4 - }, -/obj/machinery/light, -/turf/simulated/floor/blue/side, -/area/station/medical/medbay/lobby) "dds" = ( /obj/mapping_helper/wingrille_spawn/auto/reinforced, /turf/simulated/floor/plating, @@ -54592,6 +53385,16 @@ icon_state = "Stairs2_wide" }, /area/station/hangar/science) +"ddI" = ( +/obj/stool/chair/office{ + dir = 1 + }, +/obj/landmark/start/job/geneticist, +/obj/disposalpipe/segment/transport, +/turf/simulated/floor/white, +/area/station/medical/research{ + name = "Genetic Research" + }) "ddJ" = ( /obj/stool/chair/couch{ dir = 4 @@ -54601,9 +53404,11 @@ }, /area/station/medical/medbay/lobby) "ddK" = ( -/obj/stool/chair/comfy/wheelchair, -/turf/simulated/floor/bluewhite, -/area/station/medical/medbay) +/obj/stool/chair/couch/blue{ + dir = 8 + }, +/turf/simulated/floor/carpet/blue/fancy/narrow/nw, +/area/station/medical/medbay/psychiatrist) "ddL" = ( /obj/table/glass/reinforced/auto, /obj/disposalpipe/segment/vertical, @@ -54614,81 +53419,67 @@ /turf/simulated/floor/carpet, /area/station/medical/medbay/lobby) "ddO" = ( -/obj/cable{ - icon_state = "4-8" - }, -/turf/simulated/floor/bluewhite{ - dir = 8 - }, -/area/station/medical/medbay) -"ddP" = ( -/obj/cable{ - icon_state = "4-8" - }, -/turf/simulated/floor/white, -/area/station/medical/medbay) -"ddQ" = ( /obj/cable{ icon_state = "1-8" }, /obj/cable{ - icon_state = "2-8" + icon_state = "4-8" }, +/turf/simulated/floor/plating, +/area/station/maintenance/solar/south) +"ddP" = ( /obj/cable{ icon_state = "4-8" }, /turf/simulated/floor/white, /area/station/medical/medbay) "ddR" = ( -/obj/cable{ - icon_state = "2-8" +/obj/item_dispenser/medical_mask{ + pixel_y = 0; + pixel_x = -24 }, -/obj/cable{ - icon_state = "1-8" +/obj/machinery/camera{ + c_tag = "autotag"; + dir = 4; + name = "autoname - SS13"; + pixel_x = -10; + tag = "" }, -/turf/simulated/floor/white, -/area/station/medical/medbay) -"ddS" = ( -/obj/shrub{ - dir = 1; - icon = 'icons/obj/stationobjs.dmi'; - icon_state = "plant" +/obj/table/auto, +/obj/item/storage/box/stma_kit, +/obj/item/staple_gun, +/obj/item/reagent_containers/iv_drip/saline, +/obj/item/reagent_containers/iv_drip/saline, +/turf/simulated/floor/redwhite{ + dir = 8 }, -/obj/landmark/kudzu, -/turf/simulated/floor/bluewhite{ - dir = 6 +/area/station/medical/medbay/surgery) +"ddS" = ( +/obj/bookshelf, +/obj/item/paper/book/from_file/the_trial{ + pixel_x = -4 }, -/area/station/medical/medbay) -"ddT" = ( -/obj/securearea{ - desc = "A warning sign which reads 'Biohazard'"; - icon_state = "bio"; - layer = 2.5; - name = "BIOHAZARD" +/obj/item/paper/book/from_file/matsci_guide{ + pixel_x = 4 }, -/turf/simulated/wall/auto/reinforced/supernorn, -/area/station/medical/cdc) +/turf/simulated/floor/carpet/blue/fancy/narrow/ne, +/area/station/medical/medbay/psychiatrist) "ddU" = ( -/obj/machinery/shower, -/obj/machinery/drainage, -/obj/decal/stripe_caution, -/turf/simulated/floor, -/area/station/medical/cdc) -"ddV" = ( -/turf/simulated/floor/caution/corner/sw, -/area/station/medical/cdc) +/turf/simulated/floor/sanitary, +/area/station/medical/morgue) "ddW" = ( -/turf/simulated/floor/caution/south, -/area/station/medical/cdc) -"ddX" = ( -/obj/submachine/chef_sink/chem_sink{ - dir = 8; - pixel_x = 8 +/obj/decal/tile_edge/stripe/extra_big{ + dir = 4 }, -/turf/simulated/floor{ - icon_state = "corner_east" +/turf/simulated/floor/sanitary, +/area/station/medical/morgue) +"ddX" = ( +/obj/stool/chair/office{ + dir = 1 }, -/area/station/medical/cdc) +/obj/machinery/light_switch/east, +/turf/simulated/floor/sanitary/blue, +/area/station/medical/morgue) "ddY" = ( /obj/submachine/chef_sink/chem_sink{ dir = 4; @@ -54707,22 +53498,6 @@ name = "astroturf" }, /area/station/medical/dome) -"dea" = ( -/obj/machinery/light_switch/east, -/obj/disposalpipe/segment/transport, -/turf/simulated/floor/grass{ - name = "astroturf" - }, -/area/station/medical/dome) -"deb" = ( -/obj/machinery/door/airlock/pyro/external, -/obj/forcefield/energyshield/perma/doorlink{ - desc = "A door-linked force field that prevents gasses from passing through it."; - name = "Door-linked Atmospheric Forcefield"; - powerlevel = 1 - }, -/turf/simulated/floor/caution/northsouth, -/area/station/maintenance/solar/south) "dec" = ( /obj/mapping_helper/wingrille_spawn/auto/reinforced, /turf/simulated/floor, @@ -54741,16 +53516,6 @@ }, /turf/space, /area/mining/magnet) -"deg" = ( -/obj/machinery/camera{ - c_tag = "autotag"; - dir = 4; - name = "autoname - SS13"; - pixel_x = -10; - tag = "" - }, -/turf/simulated/floor/plating, -/area/station/maintenance/solar/south) "deh" = ( /obj/cable{ icon_state = "1-2" @@ -54805,88 +53570,47 @@ }, /turf/simulated/floor/plating, /area/station/maintenance/solar/south) -"deu" = ( -/obj/machinery/light{ - dir = 8; - layer = 9.1; - pixel_x = -10 - }, -/turf/simulated/floor/bluewhite{ - dir = 8 - }, -/area/station/medical/medbay) "dev" = ( -/obj/cable{ - icon_state = "1-2" - }, -/turf/simulated/floor/white, -/area/station/medical/medbay) -"dew" = ( -/obj/table/auto, -/obj/item/reagent_containers/syringe/haloperidol, -/obj/item/reagent_containers/syringe/haloperidol, -/obj/item/reagent_containers/syringe/haloperidol, -/obj/decal/stripe_caution, -/turf/simulated/floor/white, -/area/station/medical/medbay) -"dex" = ( -/obj/table/auto, -/obj/random_item_spawner/medicine, -/obj/item/device/analyzer/healthanalyzer, -/obj/item/device/analyzer/healthanalyzer, -/obj/decal/stripe_caution, -/turf/simulated/floor/white, -/area/station/medical/medbay) -"dey" = ( -/obj/table/auto, -/obj/machinery/computer/security/wooden_tv/small{ - pixel_y = 8 - }, -/obj/decal/stripe_caution, -/turf/simulated/floor/white, -/area/station/medical/medbay) -"dez" = ( -/obj/stool/bed/moveable, -/obj/item/clothing/suit/bedsheet, -/turf/simulated/floor/bluewhite{ - dir = 4 +/obj/surgery_tray, +/obj/item/circular_saw{ + pixel_y = 11 }, -/area/station/medical/medbay) -"deD" = ( -/obj/disposaloutlet{ - dir = 4 +/obj/item/scalpel{ + pixel_x = 3; + pixel_y = 2 }, -/obj/disposalpipe/trunk/transport{ - dir = 4 +/obj/item/hemostat{ + pixel_x = 3; + pixel_y = -5 }, -/turf/simulated/floor/grass{ - name = "astroturf" +/obj/item/scissors/surgical_scissors{ + pixel_x = 5; + pixel_y = 5 }, -/area/station/medical/dome) -"deE" = ( -/obj/disposalpipe/segment/transport{ - dir = 4 +/obj/item/staple_gun{ + pixel_x = 4; + pixel_y = 9 }, -/turf/simulated/floor/grass{ - name = "astroturf" +/obj/item/suture{ + pixel_y = 5 }, -/area/station/medical/dome) -"deG" = ( -/obj/machinery/camera{ - c_tag = "autotag"; - dir = 8; - name = "autoname - SS13"; - pixel_x = 10; - tag = "" +/obj/item/surgical_spoon, +/turf/simulated/floor/redwhite{ + dir = 8 }, -/obj/disposalpipe/segment/transport{ - dir = 8; - icon_state = "pipe-c" +/area/station/medical/medbay/surgery) +"dew" = ( +/obj/machinery/atmospherics/unary/vent_pump{ + dir = 4 }, -/turf/simulated/floor/grass{ - name = "astroturf" +/turf/simulated/floor/red, +/area/station/medical/medbay/surgery) +"dex" = ( +/obj/machinery/atmospherics/pipe/simple/color_pipe/cyan_pipe{ + dir = 9 }, -/area/station/medical/dome) +/turf/simulated/floor/red, +/area/station/medical/medbay/surgery) "deH" = ( /obj/securearea{ desc = "A warning sign which reads 'EXTERNAL AIRLOCK'"; @@ -54895,18 +53619,6 @@ }, /turf/simulated/wall/auto/reinforced/supernorn, /area/station/storage/auxillary) -"deI" = ( -/obj/machinery/door/airlock/pyro/external, -/obj/cable{ - icon_state = "1-2" - }, -/obj/forcefield/energyshield/perma/doorlink{ - desc = "A door-linked force field that prevents gasses from passing through it."; - name = "Door-linked Atmospheric Forcefield"; - powerlevel = 1 - }, -/turf/simulated/floor/caution/northsouth, -/area/station/storage/auxillary) "deJ" = ( /obj/stool/chair, /obj/decal/poster/wallsign/teaparty{ @@ -54965,6 +53677,13 @@ /obj/item/cell/supercell/charged, /obj/item/cell/supercell/charged, /obj/item/cell/supercell/charged, +/obj/machinery/camera{ + c_tag = "autotag"; + dir = 9; + name = "autoname - SS13"; + pixel_x = 10; + tag = "" + }, /turf/simulated/floor/plating/damaged3, /area/station/maintenance/solar/south) "deV" = ( @@ -54978,65 +53697,75 @@ /turf/simulated/floor/black, /area/station/medical/robotics) "deX" = ( -/obj/table/auto, -/obj/bedsheetbin, -/obj/item/sponge, -/turf/simulated/floor/bluewhite{ - dir = 10 +/obj/submachine/chef_sink/chem_sink{ + pixel_y = 15 }, -/area/station/medical/medbay) +/obj/machinery/drainage, +/turf/simulated/floor/plating, +/area/station/maintenance/solar/south) "deY" = ( -/obj/table/auto, -/obj/item/storage/box/stma_kit, -/obj/item/clothing/gloves/latex, -/obj/item/clothing/gloves/latex, -/turf/simulated/floor/bluewhite, -/area/station/medical/medbay) -"deZ" = ( -/obj/machinery/power/data_terminal, -/obj/cable, -/obj/machinery/sleeper/compact{ - dir = 8 +/obj/item/storage/toilet{ + dir = 8; + interesting = "This toilet is immaculately clean. Like, suspiciously clean." }, -/turf/simulated/floor/bluewhite, -/area/station/medical/medbay) +/obj/decoration/toiletholder{ + pixel_y = -6; + interesting = "An extremely expensive brand of toilet paper made from....real paper? Not even Command can afford to buy this pristine toilet paper." + }, +/obj/landmark/start/job/medical_director, +/turf/simulated/floor/plating, +/area/station/maintenance/solar/south) "dfa" = ( -/obj/cable{ - icon_state = "1-2" +/obj/machinery/optable{ + id = "OR2" }, -/turf/simulated/floor/bluewhite/corner{ - dir = 4 +/obj/item/paper/book/from_file/medical_surgery_guide, +/obj/machinery/drainage, +/obj/machinery/defib_mount{ + pixel_x = -28 }, -/area/station/medical/medbay) -"dfb" = ( -/obj/iv_stand, -/obj/item/reagent_containers/iv_drip/saline, -/turf/simulated/floor/bluewhite{ - dir = 4 +/turf/simulated/floor/redwhite{ + dir = 8 }, -/area/station/medical/medbay) +/area/station/medical/medbay/surgery) "dfc" = ( -/obj/storage/closet/office, -/turf/simulated/floor/carpet/arcade, -/area/station/medical/medbay) +/obj/table/wood/auto, +/obj/item/paper_bin{ + pixel_x = 7; + pixel_y = 10 + }, +/obj/item/reagent_containers/food/drinks/tea{ + pixel_x = -12; + pixel_y = 16 + }, +/obj/item/toy/plush/small{ + pixel_x = 6; + pixel_y = 4 + }, +/obj/item/toy/plush/small/stress_ball{ + pixel_x = 6; + pixel_y = -5 + }, +/turf/simulated/floor/carpet/blue/fancy/innercorner/west, +/area/station/medical/medbay/psychiatrist) "dfe" = ( -/turf/simulated/floor/carpet/arcade, -/area/station/medical/medbay) +/obj/stool/chair/office/blue{ + dir = 1; + pixel_y = 8; + tag = "icon-office_chair_blue (NORTH)" + }, +/obj/landmark/start/job/medical_doctor, +/obj/cable{ + icon_state = "4-8" + }, +/turf/simulated/floor/carpet/blue/fancy/innercorner/sw_triple, +/area/station/medical/medbay/psychiatrist) "dff" = ( -/obj/machinery/vending/cola/blue, -/turf/simulated/floor/carpet/arcade, -/area/station/medical/medbay) -"dfg" = ( -/obj/machinery/vending/snack, -/obj/machinery/light_switch/north, -/turf/simulated/floor/carpet/arcade, -/area/station/medical/medbay) -"dfk" = ( -/obj/storage/secure/closet/animal, -/turf/simulated/floor/grass{ - name = "astroturf" +/obj/stool/chair/comfy/blue{ + dir = 8 }, -/area/station/medical/dome) +/turf/simulated/floor/carpet/blue/fancy/narrow/T_east, +/area/station/medical/medbay/psychiatrist) "dfl" = ( /obj/overlay{ icon = 'icons/misc/beach2.dmi'; @@ -55076,10 +53805,12 @@ /turf/simulated/floor/plating, /area/station/maintenance/solar/south) "dfr" = ( -/obj/disposalpipe/segment/mail/vertical, -/obj/machinery/drainage, +/obj/machinery/atmospherics/pipe/simple/color_pipe/cyan_pipe{ + dir = 1 + }, +/obj/disposalpipe/segment/mail/horizontal, /turf/simulated/floor/white, -/area/station/medical/medbay/surgery) +/area/station/medical/medbay) "dfs" = ( /obj/machinery/light/small{ dir = 4; @@ -55095,26 +53826,11 @@ /obj/item/storage/box/cablesbox, /turf/simulated/floor/plating, /area/station/storage/warehouse) -"dft" = ( -/obj/cable{ - icon_state = "2-8" - }, -/obj/lattice{ - dir = 1; - icon_state = "lattice-dir" - }, -/turf/space, -/area/space) "dfu" = ( -/obj/disposalpipe/segment/mail/horizontal, -/obj/cable{ - icon_state = "4-8" - }, -/obj/machinery/sleeper/port_a_medbay, -/turf/simulated/floor/bluewhite{ +/turf/simulated/floor/redwhite{ dir = 1 }, -/area/station/medical/medbay) +/area/station/medical/medbay/surgery) "dfw" = ( /obj/machinery/light/small, /turf/simulated/floor/shuttlebay, @@ -55144,42 +53860,27 @@ /turf/simulated/floor, /area/station/maintenance/solar/south) "dfC" = ( -/obj/machinery/computer3/generic/med_data{ +/obj/machinery/computer/operating{ dir = 4 }, -/obj/machinery/power/data_terminal, -/obj/cable, -/turf/simulated/floor/bluewhite, -/area/station/medical/medbay) -"dfD" = ( -/obj/stool/chair/office{ - dir = 8 - }, -/obj/machinery/camera{ - c_tag = "autotag"; - dir = 1; - name = "autoname - SS13"; - tag = "" +/turf/simulated/floor/redwhite{ + dir = 10 }, -/obj/landmark/start/job/medical_doctor, -/turf/simulated/floor/bluewhite, -/area/station/medical/medbay) +/area/station/medical/medbay/surgery) +"dfD" = ( +/obj/iv_stand, +/obj/item/reagent_containers/iv_drip/blood, +/obj/machinery/light/incandescent, +/turf/simulated/floor/redwhite, +/area/station/medical/medbay/surgery) "dfE" = ( -/obj/stool/bed/moveable, -/obj/item/clothing/suit/bedsheet, -/turf/simulated/floor/bluewhite, -/area/station/medical/medbay) +/turf/simulated/floor/redwhite, +/area/station/medical/medbay/surgery) "dfF" = ( -/obj/machinery/light, -/turf/simulated/floor/bluewhite, -/area/station/medical/medbay) -"dfG" = ( -/obj/stool/bed/moveable, -/obj/item/clothing/suit/bedsheet, -/turf/simulated/floor/bluewhite{ - dir = 6 - }, -/area/station/medical/medbay) +/obj/iv_stand, +/obj/item/reagent_containers/iv_drip/blood, +/turf/simulated/floor/redwhite, +/area/station/medical/medbay/surgery) "dfK" = ( /obj/overlay{ icon = 'icons/misc/beach2.dmi'; @@ -55192,24 +53893,10 @@ }, /area/station/medical/dome) "dfM" = ( -/obj/surgery_tray, -/obj/item/scalpel, -/obj/item/scalpel, -/obj/item/circular_saw{ - pixel_x = 3; - pixel_y = 12 - }, -/obj/item/circular_saw{ - pixel_x = 3; - pixel_y = 12 +/turf/simulated/floor/bluewhite/corner{ + dir = 1 }, -/obj/item/suture, -/obj/item/suture, -/obj/item/scissors/surgical_scissors, -/obj/item/scissors/surgical_scissors, -/obj/machinery/light/small/floor, -/turf/simulated/floor/white, -/area/station/medical/medbay/surgery) +/area/station/medical/medbay) "dfO" = ( /obj/machinery/r_door_control/podbay/medsci, /turf/simulated/wall/auto/reinforced/supernorn, @@ -55280,63 +53967,18 @@ /obj/landmark/halloween, /turf/simulated/floor/plating, /area/station/maintenance/solar/south) -"dfX" = ( -/obj/shrub, -/obj/landmark/kudzu, -/obj/disposalpipe/segment/mail/horizontal, -/turf/simulated/floor/grass{ - name = "astroturf" - }, -/area/station/medical/dome) -"dfY" = ( -/obj/disposalpipe/segment/morgue, -/obj/item/paper/book/from_file/medical_surgery_guide, -/obj/decal/stripe_caution, -/obj/machinery/optable{ - id = "OR2" - }, -/turf/simulated/floor/white, -/area/station/medical/medbay/surgery) "dfZ" = ( /obj/storage/closet/fire, /obj/decal/cleanable/cobweb, /turf/simulated/floor/plating, /area/station/maintenance/south) "dga" = ( -/obj/rack, -/obj/item/clothing/gloves/latex, -/obj/item/clothing/gloves/latex, -/obj/item/storage/box/gl_kit, -/obj/item/spraybottle/cleaner, -/obj/item/reagent_containers/hypospray, -/obj/item/reagent_containers/hypospray, -/obj/item/staple_gun, -/obj/item/gun/implanter, -/obj/item/storage/box/health_upgrade_kit, -/obj/item/device/radio/headset/medical, -/turf/simulated/floor/carpet/arcade, -/area/station/medical/medbay) -"dgb" = ( -/obj/reagent_dispensers/watertank/fountain, -/obj/machinery/light, -/turf/simulated/floor/carpet/arcade, -/area/station/medical/medbay) -"dgc" = ( -/obj/cable{ - icon_state = "2-4" - }, -/turf/simulated/floor/carpet/arcade, -/area/station/medical/medbay) +/turf/simulated/floor/carpet/blue/fancy/narrow/T_south, +/area/station/medical/medbay/psychiatrist) "dgd" = ( -/obj/stool/chair/comfy{ - dir = 4 - }, -/obj/cable{ - icon_state = "4-8" - }, -/obj/landmark/start/job/medical_doctor, -/turf/simulated/floor/carpet/arcade, -/area/station/medical/medbay) +/obj/cabinet/psychiatry, +/turf/simulated/floor/carpet/blue/fancy/narrow/se, +/area/station/medical/medbay/psychiatrist) "dgf" = ( /obj/landmark/random_room/size5x3, /turf/simulated/floor/plating, @@ -55442,9 +54084,9 @@ /area/station/maintenance/southeast) "dgB" = ( /obj/machinery/power/apc{ - areastring = "Pathology Research"; + areastring = "Morgue"; dir = 1; - name = "Pathology APC"; + name = "Morgue APC"; pixel_y = 24 }, /obj/cable{ @@ -55506,17 +54148,15 @@ /turf/simulated/floor/sand, /area/station/crew_quarters/market) "dgO" = ( -/obj/table/auto, -/obj/item/clothing/gloves/latex, -/obj/item/clothing/mask/surgical, -/obj/item/clothing/mask/surgical_shield, -/obj/item/hemostat, -/obj/item/staple_gun, -/obj/item/scissors/surgical_scissors, -/turf/simulated/floor/redwhite{ +/obj/cable{ + icon_state = "4-8" + }, +/obj/disposalpipe/segment/vertical, +/obj/machinery/atmospherics/pipe/simple/color_pipe/cyan_pipe{ dir = 4 }, -/area/station/medical/medbay/surgery) +/turf/simulated/floor/white, +/area/station/medical/medbay) "dgP" = ( /obj/machinery/light/small/floor/blueish, /turf/simulated/floor/sand, @@ -55701,15 +54341,19 @@ /turf/simulated/floor/sanitary/white, /area/station/medical/robotics) "dhs" = ( -/obj/table/auto, -/obj/machinery/cashreg, -/obj/item/hand_labeler{ - pixel_y = 8 +/obj/machinery/door_control{ + id = "medbay_entrance"; + name = "Medbay Door Control"; + pixel_x = 24; + pixel_y = 24 }, -/turf/simulated/floor/redwhite{ +/obj/machinery/atmospherics/pipe/simple/color_pipe/cyan_pipe{ dir = 1 }, -/area/station/medical/medbay/surgery) +/turf/simulated/floor/bluewhite{ + dir = 1 + }, +/area/station/medical/medbay) "dhu" = ( /obj/lattice{ icon_state = "lattice-dir" @@ -55734,15 +54378,14 @@ /turf/simulated/floor/plating/airless, /area/space) "dhA" = ( -/obj/machinery/drainage, -/turf/simulated/floor/white, -/area/station/medical/medbay/surgery) -"dhB" = ( -/obj/disposalpipe/segment/morgue, -/obj/machinery/drainage, -/obj/item/clothing/suit/cardboard_box/head_surgeon, +/obj/cable{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/unary/vent_pump{ + dir = 1 + }, /turf/simulated/floor/white, -/area/station/medical/medbay/surgery) +/area/station/medical/medbay) "dhC" = ( /obj/machinery/mass_driver{ dir = 8; @@ -57837,14 +56480,20 @@ "doO" = ( /turf/space, /area/supply/spawn_point) -"drV" = ( -/obj/machinery/light, -/obj/table/reinforced/chemistry/auto/basicsup, -/obj/item/paper/book/from_file/pharmacopia{ - pixel_y = 6 +"dpX" = ( +/obj/machinery/door/airlock/pyro/medical, +/obj/cable{ + icon_state = "1-2" }, -/turf/simulated/floor/purplewhite, -/area/station/science/chemistry) +/obj/mapping_helper/access/medical, +/obj/mapping_helper/firedoor_spawn, +/turf/simulated/floor/blue, +/area/station/medical/staff) +"dqo" = ( +/obj/disposalpipe/segment/transport, +/obj/disposalpipe/segment/horizontal, +/turf/simulated/floor/blue/side, +/area/station/medical/medbay/surgery/storage) "dsQ" = ( /obj/disposalpipe/segment{ dir = 4 @@ -58015,6 +56664,21 @@ icon_state = "corner_east" }, /area/station/engine/coldloop) +"dyy" = ( +/obj/machinery/light/incandescent, +/obj/shrub/random, +/turf/simulated/floor/specialroom/medbay, +/area/station/medical/medbay/lobby) +"dyE" = ( +/obj/cable{ + icon_state = "1-8" + }, +/obj/disposalpipe/segment/morgue{ + dir = 8; + icon_state = "pipe-c" + }, +/turf/simulated/floor/plating, +/area/station/maintenance/south) "dyM" = ( /obj/machinery/interdictor/unlocked, /turf/simulated/floor/grass/leafy, @@ -58110,6 +56774,16 @@ icon_state = "catwalk_cross" }, /area/station/catwalk/north) +"dGI" = ( +/obj/cable{ + icon_state = "1-2" + }, +/obj/cable{ + icon_state = "2-8" + }, +/obj/disposalpipe/segment/vertical, +/turf/simulated/floor/bluewhite/corner, +/area/station/medical/medbay/lobby) "dGS" = ( /obj/cable/yellow{ icon_state = "1-4" @@ -58149,12 +56823,22 @@ /obj/mapping_helper/wingrille_spawn/auto, /turf/simulated/floor/plating, /area/station/crew_quarters/market) +"dKy" = ( +/obj/decal/tile_edge/stripe/extra_big, +/turf/simulated/floor/sanitary, +/area/station/medical/morgue) "dML" = ( /obj/machinery/atmospherics/unary/tank{ dir = 1 }, /turf/simulated/floor/blue, /area/station/engine/coldloop) +"dNz" = ( +/obj/cable{ + icon_state = "1-2" + }, +/turf/simulated/floor/carpet/blue/fancy/innercorner/north, +/area/station/medical/medbay/psychiatrist) "dNM" = ( /obj/table/auto, /obj/item/disk/data/cartridge/captain, @@ -58387,6 +57071,15 @@ /obj/decal/stripe_delivery, /turf/simulated/floor, /area/station/crew_quarters/cafeteria) +"dYY" = ( +/obj/storage/crate, +/obj/item/sheet/wood, +/obj/item/sheet/wood, +/obj/item/sheet/wood, +/obj/item/sheet/wood, +/obj/item/sheet/wood, +/turf/simulated/floor/grime, +/area/station/storage/auxillary) "dZJ" = ( /obj/machinery/door/airlock/pyro/glass{ name = "Cargo Bay" @@ -58427,18 +57120,6 @@ }, /turf/simulated/floor/shuttlebay, /area/station/security/checkpoint/podbay) -"ebd" = ( -/obj/cable{ - icon_state = "4-8" - }, -/obj/machinery/door/airlock/pyro/maintenance{ - dir = 4 - }, -/obj/mapping_helper/firedoor_spawn, -/obj/mapping_helper/access/medical, -/obj/decal/stripe_delivery, -/turf/simulated/floor, -/area/station/medical/medbay/cloner) "ebk" = ( /obj/item/storage/wall/fire{ dir = 1; @@ -58451,11 +57132,14 @@ /area/station/maintenance/inner/central) "ebY" = ( /obj/machinery/firealarm/east, -/obj/disposalpipe/segment/mail/vertical, -/turf/simulated/floor/blue/side{ +/turf/simulated/wall/auto/reinforced/supernorn, +/area/station/medical/medbay/lobby) +"ecI" = ( +/obj/decal/tile_edge/stripe/extra_big{ dir = 6 }, -/area/station/medical/medbay/lobby) +/turf/simulated/floor/sanitary, +/area/station/medical/morgue) "ecZ" = ( /obj/cable{ icon_state = "4-8" @@ -58485,6 +57169,15 @@ /obj/decal/poster/wallsign/danger_highvolt, /turf/simulated/wall/auto/reinforced/supernorn, /area/research_outpost) +"efm" = ( +/obj/disposalpipe/segment/mail/vertical, +/obj/cable{ + icon_state = "4-8" + }, +/turf/simulated/floor/bluewhite{ + dir = 8 + }, +/area/station/medical/medbay/pharmacy) "efv" = ( /obj/disposalpipe/segment/mail/bent/east, /obj/machinery/atmospherics/pipe/simple/color_pipe/cyan_pipe{ @@ -58502,6 +57195,9 @@ }, /turf/simulated/wall/auto/reinforced/supernorn, /area/station/security/checkpoint/podbay) +"efL" = ( +/turf/simulated/floor/carpet/blue, +/area/station/medical/head) "egh" = ( /obj/machinery/camera{ c_tag = "autotag"; @@ -58582,6 +57278,11 @@ /obj/decal/stripe_delivery, /turf/simulated/floor, /area/station/maintenance/inner/central) +"ejF" = ( +/obj/machinery/disposal, +/obj/disposalpipe/trunk/west, +/turf/simulated/floor/sanitary/blue, +/area/station/medical/morgue) "ejP" = ( /obj/strip_door{ layer = 3 @@ -58609,23 +57310,18 @@ /turf/simulated/floor/orangeblack, /area/station/engine/hotloop) "enQ" = ( -/obj/table/wood/auto, -/obj/machinery/networked/printer{ - name = "Printer - MD"; - pixel_y = 5; - print_id = "MD" +/obj/cable{ + icon_state = "4-8" }, -/obj/machinery/power/data_terminal, /obj/cable{ - icon_state = "0-4" + icon_state = "2-8" }, -/obj/item/device/analyzer/healthanalyzer/upgraded, -/obj/item/clothing/glasses/healthgoggles/upgraded, -/turf/simulated/floor/carpet{ - dir = 8; - icon_state = "fblue3" +/obj/disposalpipe/segment/mail/vertical, +/obj/machinery/atmospherics/pipe/simple/color_pipe/cyan_pipe{ + dir = 4 }, -/area/station/medical/head) +/turf/simulated/floor/white, +/area/station/medical/medbay) "eoc" = ( /obj/table/reinforced/auto, /obj/machinery/cashreg, @@ -58692,13 +57388,14 @@ }, /area/space) "evi" = ( -/obj/machinery/pathogen_manipulator, -/obj/item/device/radio/intercom/medical, -/obj/disposalpipe/segment/mail/vertical, +/obj/monkeyplant, +/obj/machinery/light/incandescent, /turf/simulated/floor/greenwhite{ - dir = 1 + dir = 10 }, -/area/station/medical/cdc) +/area/station/medical/research{ + name = "Genetic Research" + }) "evw" = ( /obj/disposalpipe/segment/mail/horizontal, /obj/machinery/light, @@ -58707,6 +57404,27 @@ }, /turf/simulated/floor/arrival, /area/station/hallway/secondary/exit) +"ewx" = ( +/obj/mapping_helper/firedoor_spawn, +/obj/disposalpipe/segment/mail/vertical, +/obj/machinery/door/poddoor/pyro/shutters{ + density = 0; + icon_state = "pdoor0"; + id = "lockdown"; + name = "Bridge Lockdown Doors"; + opacity = 0 + }, +/obj/machinery/door/airlock/pyro/command{ + name = "Bridge Access" + }, +/obj/mapping_helper/access/heads, +/obj/mapping_helper/airlock/cycler{ + cycle_id = "bridge"; + name = "Bridge"; + enter_id = "north" + }, +/turf/simulated/floor/plating, +/area/station/security/checkpoint/customs) "ewI" = ( /obj/machinery/printing_press, /turf/simulated/floor/carpet/grime, @@ -58789,6 +57507,12 @@ /obj/mapping_helper/access/maint, /turf/simulated/floor/plating, /area/station/hallway/secondary/entry) +"eDJ" = ( +/obj/disposalpipe/segment/morgue{ + dir = 4 + }, +/turf/simulated/floor/specialroom/medbay, +/area/station/crew_quarters/market) "eDZ" = ( /obj/machinery/door/airlock/pyro/maintenance{ dir = 4 @@ -58857,6 +57581,13 @@ icon_state = "catwalk_cross" }, /area/station/mining/magnet) +"eGJ" = ( +/obj/mapping_helper/wingrille_spawn/auto/reinforced, +/obj/disposalpipe/segment/mail/vertical, +/turf/simulated/floor/plating, +/area/station/medical/research{ + name = "Genetic Research" + }) "eGS" = ( /obj/machinery/atmospherics/unary/vent{ dir = 1 @@ -58864,8 +57595,12 @@ /turf/simulated/floor/engine/vacuum, /area/station/engine/hotloop) "eIU" = ( -/turf/simulated/floor/greenwhite, -/area/station/medical/cdc) +/obj/cable{ + icon_state = "1-2" + }, +/obj/disposalpipe/segment/vertical, +/turf/simulated/floor/blue/side, +/area/station/medical/medbay/surgery/storage) "eJt" = ( /obj/cable{ icon_state = "2-4" @@ -58890,22 +57625,6 @@ /obj/disposalpipe/segment/mail/horizontal, /turf/simulated/floor/plating, /area/station/maintenance/central) -"eLb" = ( -/obj/machinery/door/airlock/pyro/external, -/obj/cable{ - icon_state = "1-2" - }, -/obj/machinery/secscanner{ - pixel_y = 10 - }, -/obj/mapping_helper/access/mining, -/obj/forcefield/energyshield/perma/doorlink{ - desc = "A door-linked force field that prevents gasses from passing through it."; - name = "Door-linked Atmospheric Forcefield"; - powerlevel = 1 - }, -/turf/simulated/floor/caution/northsouth, -/area/station/mining/magnet) "eLu" = ( /obj/machinery/power/solar/small_backup4, /obj/cable/yellow{ @@ -58929,6 +57648,11 @@ }, /obj/mapping_helper/access/security, /obj/decal/stripe_delivery, +/obj/mapping_helper/airlock/cycler{ + cycle_id = "security"; + name = "Security"; + enter_id = "inner" + }, /turf/simulated/floor, /area/station/security/checkpoint/sec_foyer) "eLN" = ( @@ -58952,6 +57676,13 @@ /obj/mapping_helper/firedoor_spawn, /turf/simulated/floor/plating, /area/station/crew_quarters/quartersB) +"eMz" = ( +/obj/cable{ + icon_state = "4-8" + }, +/obj/disposalpipe/segment/mail/horizontal, +/turf/simulated/floor/blue, +/area/station/medical/medbay/pharmacy) "eMD" = ( /obj/storage/closet/emergency, /obj/machinery/light{ @@ -59035,6 +57766,25 @@ }, /turf/simulated/floor/grey/blackgrime, /area/station/hangar/catering) +"eOR" = ( +/obj/machinery/door_control{ + id = "chemistry"; + name = "Privacy Shutters"; + pixel_x = 28 + }, +/obj/table/reinforced/chemistry/auto, +/obj/item/storage/box/beakerbox{ + pixel_y = 4 + }, +/turf/simulated/floor/purple, +/area/station/science/chemistry) +"ePl" = ( +/obj/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/light/incandescent, +/turf/simulated/floor/specialroom/medbay, +/area/station/medical/medbay/lobby) "ePA" = ( /obj/disposalpipe/junction{ icon_state = "pipe-j2" @@ -59046,6 +57796,10 @@ }, /turf/simulated/floor/plating, /area/station/engine/substation/west) +"ePC" = ( +/obj/disposalpipe/segment/morgue, +/turf/simulated/floor/sanitary/blue, +/area/station/medical/morgue) "ePK" = ( /obj/machinery/door/airlock/pyro/security{ dir = 4; @@ -59068,6 +57822,14 @@ }, /turf/simulated/floor/dirt, /area/station/ranch) +"eQT" = ( +/obj/machinery/door/airlock/pyro/glass/med{ + dir = 8 + }, +/obj/mapping_helper/access/medical, +/obj/mapping_helper/firedoor_spawn, +/turf/simulated/floor/blue, +/area/station/medical/medbay/cloner) "eRF" = ( /obj/cable{ icon_state = "4-8" @@ -59152,6 +57914,15 @@ name = "solar paneling" }, /area/space) +"eXp" = ( +/obj/machinery/atmospherics/pipe/simple/color_pipe/cyan_pipe{ + dir = 4 + }, +/obj/disposalpipe/segment/transport{ + icon_state = "pipe-c" + }, +/turf/simulated/floor, +/area/station/medical/medbay/lobby) "eXL" = ( /obj/machinery/atmospherics/unary/portables_connector{ dir = 8; @@ -59191,8 +57962,7 @@ }, /area/research_outpost) "fas" = ( -/obj/table/reinforced/chemistry/auto, -/obj/machinery/chem_shaker/large/chemistry, +/obj/disposalpipe/segment/mail/horizontal, /turf/simulated/floor/purplewhite{ dir = 6 }, @@ -59206,6 +57976,16 @@ /obj/decal/stripe_delivery, /turf/simulated/floor, /area/station/maintenance/disposal) +"fcs" = ( +/obj/machinery/camera{ + c_tag = "autotag"; + dir = 4; + name = "autoname - SS13"; + pixel_x = -10; + tag = "" + }, +/turf/simulated/floor/carpet/blue/fancy/narrow/T_west, +/area/station/medical/medbay/psychiatrist) "fcx" = ( /obj/machinery/navbeacon/guardbotsecbot_circularpatrol/beacon4, /obj/machinery/atmospherics/pipe/simple/color_pipe/cyan_pipe{ @@ -59224,6 +58004,12 @@ dir = 6 }, /area/research_outpost) +"fcY" = ( +/obj/machinery/vending/monkey/genetics, +/turf/simulated/floor/grass{ + name = "astroturf" + }, +/area/station/medical/dome) "ffj" = ( /obj/table/wood/auto, /obj/item/wrench, @@ -59250,17 +58036,14 @@ }, /area/station/catwalk/south) "ffP" = ( -/obj/machinery/computer3/generic/med_data{ - dir = 4 - }, -/obj/machinery/power/data_terminal, /obj/cable{ - icon_state = "0-4" + icon_state = "4-8" }, -/turf/simulated/floor/greenwhite{ +/obj/disposalpipe/segment/mail/horizontal, +/turf/simulated/floor/blue/side{ dir = 8 }, -/area/station/medical/cdc) +/area/station/medical/medbay/surgery/storage) "ffT" = ( /obj/disposalpipe/switch_junction/right/north{ mail_tag = list("janitor","escape checkpoint","mining","escape hallway","mechanics","cargo checkpoint","QM","refinery"); @@ -59292,7 +58075,9 @@ /area/station/crew_quarters/catering) "fiJ" = ( /obj/machinery/door/airlock/pyro/maintenance, +/obj/mapping_helper/access/morgue, /obj/mapping_helper/firedoor_spawn, +/obj/disposalpipe/segment/morgue, /turf/simulated/floor/plating, /area/station/maintenance/south) "fjg" = ( @@ -59333,6 +58118,38 @@ /obj/mapping_helper/access/maint, /turf/simulated/floor/plating, /area/station/crew_quarters/fitness) +"flz" = ( +/obj/machinery/door/airlock/pyro/external, +/obj/cable{ + icon_state = "1-2" + }, +/obj/mapping_helper/firedoor_spawn, +/obj/decal/stripe_delivery, +/obj/forcefield/energyshield/perma/doorlink{ + desc = "A door-linked force field that prevents gasses from passing through it."; + name = "Door-linked Atmospheric Forcefield"; + powerlevel = 1 + }, +/obj/mapping_helper/airlock/cycler{ + name = "Emergency Solar Array 2"; + cycle_id = "solar2" + }, +/turf/simulated/floor, +/area/station/hangar/arrivals) +"flC" = ( +/obj/cable{ + icon_state = "1-2" + }, +/obj/disposalpipe/switch_junction/right/north{ + mail_tag = "genetics"; + name = "mail junction (genetics)" + }, +/turf/simulated/floor/carpet{ + icon_state = "blue2" + }, +/area/station/medical/research{ + name = "Genetic Research" + }) "flI" = ( /obj/machinery/atmospherics/binary/valve{ dir = 1 @@ -59392,16 +58209,6 @@ /obj/decal/stripe_delivery, /turf/simulated/floor, /area/station/crew_quarters/catering) -"fsq" = ( -/obj/machinery/door/airlock/pyro/external, -/obj/mapping_helper/firedoor_spawn, -/obj/forcefield/energyshield/perma/doorlink{ - desc = "A door-linked force field that prevents gasses from passing through it."; - name = "Door-linked Atmospheric Forcefield"; - powerlevel = 1 - }, -/turf/simulated/floor/caution/northsouth, -/area/station/maintenance/central) "fss" = ( /obj/machinery/atmospherics/unary/portables_connector, /obj/item/storage/wall/random, @@ -59442,6 +58249,28 @@ }, /turf/simulated/wall/auto/reinforced/supernorn, /area/station/science/lab) +"fvr" = ( +/obj/item/reagent_containers/food/snacks/ingredient/meat/mysterymeat, +/obj/item/reagent_containers/food/snacks/ingredient/meat/mysterymeat/grody, +/obj/item/reagent_containers/food/snacks/ingredient/meat/mysterymeat/grody, +/obj/item/reagent_containers/food/snacks/ingredient/meat/mysterymeat/grody, +/obj/item/reagent_containers/food/snacks/ingredient/meatpaste{ + desc = "Gross."; + name = "old kidney" + }, +/obj/item/organ/heart{ + desc = "A human heart, grody. How long has it been in that freezer?"; + name = "funky ol' heart" + }, +/obj/storage/crate/freezer{ + name = "Freezer - Spare Parts" + }, +/obj/item/reagent_containers/food/snacks/ingredient/meat/monkeymeat, +/obj/item/reagent_containers/food/snacks/ingredient/meat/monkeymeat, +/obj/item/reagent_containers/food/snacks/ingredient/meat/monkeymeat, +/obj/item/reagent_containers/food/snacks/ingredient/meat/mysterymeat, +/turf/simulated/floor/sanitary/blue, +/area/station/medical/morgue) "fwi" = ( /obj/cable/yellow{ icon_state = "1-2" @@ -59450,7 +58279,6 @@ /turf/simulated/floor, /area/research_outpost/chamber) "fwx" = ( -/obj/stool/bench/green/auto, /obj/machinery/camera{ c_tag = "autotag"; dir = 6; @@ -59458,6 +58286,7 @@ pixel_y = 20; tag = "" }, +/obj/stool/bench/purple/auto, /turf/simulated/floor/purple/side{ dir = 1 }, @@ -59498,25 +58327,6 @@ }, /turf/simulated/floor/orangeblack, /area/station/maintenance/central) -"fDU" = ( -/obj/machinery/door/airlock/pyro/medical{ - dir = 4; - name = "Pathology Research" - }, -/obj/machinery/door/poddoor/pyro/shutters{ - density = 0; - dir = 4; - icon_state = "pdoor0"; - id = "pathology_lockdown"; - name = "Pathology Quarantine Shutters"; - opacity = 0 - }, -/obj/mapping_helper/firedoor_spawn, -/obj/disposalpipe/segment/mail/horizontal, -/obj/mapping_helper/access/pathology, -/obj/decal/stripe_delivery, -/turf/simulated/floor, -/area/station/medical/cdc) "fDX" = ( /obj/machinery/atmospherics/binary/valve, /obj/machinery/camera{ @@ -59579,17 +58389,14 @@ /turf/simulated/floor/dirt, /area/station/ranch) "fHk" = ( -/obj/stool/chair{ - dir = 8 +/obj/submachine/laundry_machine, +/obj/item/sponge{ + pixel_y = 9 }, -/obj/landmark/start/job/geneticist, -/obj/machinery/light_switch/east, -/turf/simulated/floor/greenwhite{ - dir = 4 +/turf/simulated/floor/blue/side{ + dir = 5 }, -/area/station/medical/research{ - name = "Genetic Research" - }) +/area/station/medical/medbay/surgery/storage) "fHl" = ( /obj/mapping_helper/firedoor_spawn, /obj/machinery/door/airlock/pyro/external, @@ -59680,20 +58487,13 @@ }, /obj/mapping_helper/access/heads, /obj/decal/stripe_delivery, +/obj/mapping_helper/airlock/cycler{ + cycle_id = "bridge"; + name = "Bridge"; + enter_id = "inner" + }, /turf/simulated/floor, /area/station/security/checkpoint/customs) -"fLu" = ( -/obj/machinery/door/airlock/pyro/external, -/obj/cable/yellow{ - icon_state = "1-2" - }, -/obj/forcefield/energyshield/perma/doorlink{ - desc = "A door-linked force field that prevents gasses from passing through it."; - name = "Door-linked Atmospheric Forcefield"; - powerlevel = 1 - }, -/turf/simulated/floor/plating, -/area/research_outpost) "fLz" = ( /obj/machinery/conveyor/EW{ name = "cargo belt - west"; @@ -59750,6 +58550,22 @@ /obj/decal/stripe_delivery, /turf/simulated/floor, /area/station/crew_quarters/catering) +"fPk" = ( +/obj/table/wood/auto, +/obj/decoration/decorativeplant/plant3{ + pixel_x = 4; + pixel_y = 10 + }, +/obj/item/reagent_containers/food/snacks/candy/peach_ring{ + pixel_x = -4; + pixel_y = 3 + }, +/obj/item/reagent_containers/food/snacks/candy/peach_ring{ + pixel_x = -2 + }, +/obj/machinery/light/incandescent, +/turf/simulated/floor/carpet/blue/fancy/narrow/T_east, +/area/station/medical/medbay/psychiatrist) "fSZ" = ( /obj/grille/catwalk{ dir = 4 @@ -59785,6 +58601,9 @@ }, /turf/simulated/floor/engine, /area/station/engine/core) +"fUs" = ( +/turf/simulated/floor, +/area/station/medical/medbay/lobby) "fUC" = ( /obj/storage/closet/dresser/random, /obj/item/clothing/under/gimmick/trashsinglet, @@ -59887,6 +58706,16 @@ dir = 1 }, /area/station/hallway/secondary/entry) +"gcw" = ( +/obj/machinery/door/airlock/pyro/glass/botany, +/obj/disposalpipe/segment, +/obj/mapping_helper/firedoor_spawn, +/obj/mapping_helper/access/medlab, +/obj/decal/stripe_delivery, +/turf/simulated/floor, +/area/station/medical/research{ + name = "Genetic Research" + }) "gcD" = ( /obj/cable/blue{ icon_state = "4-8" @@ -59937,22 +58766,6 @@ /obj/decal/stripe_delivery, /turf/simulated/floor, /area/station/crew_quarters/cafeteria) -"gdw" = ( -/obj/machinery/light{ - dir = 4; - layer = 9.1; - pixel_x = 10 - }, -/obj/disposalpipe/segment{ - dir = 8; - icon_state = "pipe-c" - }, -/turf/simulated/floor/greenwhite{ - dir = 4 - }, -/area/station/medical/research{ - name = "Genetic Research" - }) "gfu" = ( /obj/machinery/conveyor/EW{ name = "cargo belt - west"; @@ -59975,8 +58788,19 @@ /obj/landmark/gps_waypoint, /obj/mapping_helper/access/hydro, /obj/decal/stripe_delivery, +/obj/mapping_helper/airlock/cycler{ + cycle_id = "hydro"; + name = "Hydroponics"; + enter_id = "inner" + }, /turf/simulated/floor, /area/station/hydroponics/bay) +"ggg" = ( +/obj/machinery/clone_scanner, +/turf/simulated/floor/bluewhite{ + dir = 4 + }, +/area/station/medical/medbay/cloner) "ggS" = ( /obj/machinery/disposal, /obj/disposalpipe/trunk{ @@ -60001,6 +58825,26 @@ /obj/storage/secure/closet/brig, /turf/simulated/floor/red/side, /area/station/security/main) +"gkd" = ( +/obj/item/storage/firstaid/oxygen{ + pixel_y = -4 + }, +/obj/item/storage/firstaid/toxin, +/obj/item/storage/firstaid/fire{ + pixel_y = -4 + }, +/obj/item/storage/firstaid/regular, +/obj/item/bandage, +/obj/item/bandage, +/obj/item/bandage, +/obj/item/robodefibrillator, +/obj/item/body_bag, +/obj/item/body_bag, +/obj/item/body_bag, +/obj/storage/cart/medcart, +/obj/machinery/light/incandescent, +/turf/simulated/floor/blue, +/area/station/medical/medbay/pharmacy) "gke" = ( /obj/stool/chair{ dir = 8 @@ -60009,16 +58853,18 @@ /turf/simulated/floor/plating, /area/station/storage/warehouse) "gkr" = ( -/obj/machinery/disposal{ - name = "monkeydome chute" +/obj/machinery/camera{ + c_tag = "autotag"; + dir = 8; + name = "autoname - SS13"; + pixel_x = 10; + tag = "" }, -/obj/disposalpipe/trunk/transport, -/turf/simulated/floor/greenwhite{ - dir = 6 +/obj/machinery/light_switch/east, +/turf/simulated/floor/grass{ + name = "astroturf" }, -/area/station/medical/research{ - name = "Genetic Research" - }) +/area/station/medical/dome) "gky" = ( /obj/cable{ icon_state = "0-2" @@ -60033,6 +58879,12 @@ /obj/machinery/light_switch/west, /turf/simulated/floor/sanitary, /area/station/hallway/secondary/entry) +"gkT" = ( +/obj/reagent_dispensers/watertank/fountain, +/turf/simulated/floor/blue/side{ + dir = 10 + }, +/area/station/medical/medbay/lobby) "glU" = ( /obj/machinery/conveyor/EW{ name = "cargo belt - west"; @@ -60090,6 +58942,9 @@ /obj/mapping_helper/access/maint, /turf/simulated/floor/specialroom/arcade, /area/station/chapel/sanctuary) +"gpc" = ( +/turf/simulated/wall/auto/supernorn, +/area/station/medical/maintenance) "gpf" = ( /obj/machinery/door/airlock/pyro/security{ dir = 4 @@ -60114,6 +58969,44 @@ /obj/decal/stripe_delivery, /turf/simulated/floor, /area/station/hangar/qm) +"gqf" = ( +/obj/table/auto, +/obj/item/circular_saw{ + pixel_x = 3; + pixel_y = 12 + }, +/obj/item/scalpel, +/obj/item/reagent_containers/glass/bottle/formaldehyde, +/obj/item/reagent_containers/syringe, +/obj/item/hand_labeler, +/turf/simulated/floor/sanitary/blue, +/area/station/medical/morgue) +"gqN" = ( +/obj/item/storage/firstaid/oxygen{ + pixel_y = -4 + }, +/obj/item/storage/firstaid/toxin, +/obj/item/storage/firstaid/fire{ + pixel_y = -4 + }, +/obj/item/storage/firstaid/regular, +/obj/item/bandage, +/obj/item/bandage, +/obj/item/bandage, +/obj/item/robodefibrillator, +/obj/item/body_bag, +/obj/item/body_bag, +/obj/item/body_bag, +/obj/storage/cart/medcart, +/obj/item/device/radio/intercom/medical{ + broadcasting = 1; + dir = 8 + }, +/turf/simulated/floor/carpet{ + dir = 1; + icon_state = "fblue3" + }, +/area/station/medical/head) "grd" = ( /obj/table/reinforced/auto, /obj/mapping_helper/firedoor_spawn, @@ -60137,6 +59030,21 @@ /obj/decal/stripe_delivery, /turf/simulated/floor, /area/station/security/checkpoint/cargo) +"gsJ" = ( +/obj/table/wood/auto, +/obj/machinery/networked/printer{ + name = "Printer - MD"; + pixel_y = 5; + print_id = "MD" + }, +/obj/machinery/power/data_terminal, +/obj/item/device/analyzer/healthanalyzer/upgraded, +/obj/item/clothing/glasses/healthgoggles/upgraded, +/obj/cable{ + icon_state = "0-8" + }, +/turf/simulated/floor/carpet/blue/fancy/innercorner/east, +/area/station/medical/head) "gtl" = ( /obj/machinery/conveyor/NS{ name = "cargo belt - south"; @@ -60178,6 +59086,11 @@ }, /obj/mapping_helper/firedoor_spawn, /obj/mapping_helper/access/hydro, +/obj/mapping_helper/airlock/cycler{ + cycle_id = "hydro"; + name = "Hydroponics"; + enter_id = "outer" + }, /turf/simulated/floor/green, /area/station/hydroponics/lobby) "gvO" = ( @@ -60310,6 +59223,25 @@ /obj/mapping_helper/access/maint, /turf/simulated/floor/plating, /area/station/chapel/sanctuary) +"gDO" = ( +/obj/cable{ + icon_state = "1-2" + }, +/obj/machinery/door/airlock/pyro/external, +/obj/mapping_helper/access/mining, +/obj/decal/stripe_delivery, +/obj/forcefield/energyshield/perma/doorlink{ + desc = "A door-linked force field that prevents gasses from passing through it."; + name = "Door-linked Atmospheric Forcefield"; + powerlevel = 1 + }, +/obj/mapping_helper/airlock/cycler{ + name = "Mining"; + cycle_id = "mining"; + enter_id = "inner" + }, +/turf/simulated/floor, +/area/station/mining/staff_room) "gEd" = ( /obj/disposalpipe/segment{ dir = 4 @@ -60346,6 +59278,21 @@ /obj/decal/poster/wallsign/stencil/right/i, /turf/simulated/wall/auto/reinforced/supernorn, /area/space) +"gFI" = ( +/obj/table/auto, +/obj/item/clothing/under/suit/mortician, +/obj/item/clothing/mask/surgical, +/obj/item/device/analyzer/healthanalyzer, +/obj/item/device/detective_scanner, +/obj/item/stamp, +/obj/item/clothing/gloves/latex, +/obj/item/clothing/mask/surgical_shield, +/obj/item/staple_gun, +/obj/item/clothing/suit/apron, +/obj/item/surgical_spoon, +/obj/item/spraybottle/cleaner, +/turf/simulated/floor/sanitary/blue, +/area/station/medical/morgue) "gGV" = ( /obj/landmark/gps_waypoint, /turf/simulated/floor, @@ -60431,13 +59378,6 @@ /obj/decal/stripe_caution, /turf/simulated/floor, /area/station/hydroponics/bay) -"gKz" = ( -/obj/cable{ - icon_state = "1-2" - }, -/obj/machinery/firealarm/east, -/turf/simulated/floor/plating, -/area/station/maintenance/solar/south) "gKD" = ( /obj/machinery/firealarm/east, /turf/simulated/floor/black, @@ -60446,22 +59386,33 @@ /obj/machinery/firealarm/west, /turf/simulated/floor/purple, /area/station/teleporter) +"gLn" = ( +/obj/rack, +/obj/item/clothing/gloves/latex, +/obj/item/clothing/gloves/latex, +/obj/item/storage/box/gl_kit, +/obj/item/spraybottle/cleaner, +/obj/item/reagent_containers/hypospray, +/obj/item/reagent_containers/hypospray, +/obj/item/staple_gun, +/obj/item/gun/implanter, +/obj/item/storage/box/health_upgrade_kit, +/obj/item/device/radio/headset/medical, +/turf/simulated/floor/carpet/arcade, +/area/station/medical/staff) +"gLK" = ( +/obj/disposalpipe/segment/bent/west, +/turf/simulated/floor/blue/side, +/area/station/medical/medbay/surgery/storage) "gLL" = ( -/obj/table/reinforced/chemistry/auto, -/obj/item/bloodslide, -/obj/item/bloodslide, -/obj/item/bloodslide, -/obj/machinery/camera{ - c_tag = "autotag"; - dir = 4; - name = "autoname - SS13"; - pixel_x = -10; - tag = "" +/obj/machinery/atmospherics/pipe/manifold{ + level = 2 }, -/turf/simulated/floor/greenwhite{ +/obj/disposalpipe/segment/horizontal, +/turf/simulated/floor/blue/side{ dir = 8 }, -/area/station/medical/cdc) +/area/station/medical/medbay/surgery/storage) "gLT" = ( /obj/mapping_helper/firedoor_spawn, /obj/machinery/door/airlock/pyro/glass{ @@ -60472,12 +59423,39 @@ /obj/decal/stripe_delivery, /turf/simulated/floor, /area/station/engine/engineering) +"gOd" = ( +/turf/simulated/floor/sanitary/blue, +/area/station/medical/morgue) "gOl" = ( /obj/machinery/atmospherics/pipe/simple/color_pipe/cyan_pipe{ dir = 10 }, /turf/simulated/wall/auto/reinforced/supernorn, /area/station/maintenance/disposal) +"gOz" = ( +/obj/storage/crate, +/obj/random_item_spawner/junk/some, +/obj/random_item_spawner/snacks/maybe_few, +/turf/simulated/floor/grime, +/area/station/storage/auxillary) +"gPP" = ( +/obj/machinery/door/airlock/pyro/external, +/obj/disposalpipe/segment/mail/bent/north, +/obj/machinery/atmospherics/pipe/simple/color_pipe/green_pipe{ + dir = 1 + }, +/obj/mapping_helper/firedoor_spawn, +/obj/forcefield/energyshield/perma/doorlink{ + desc = "A door-linked force field that prevents gasses from passing through it."; + name = "Door-linked Atmospheric Forcefield"; + powerlevel = 1 + }, +/obj/mapping_helper/airlock/cycler{ + name = "North Maintenance"; + cycle_id = "n_maint" + }, +/turf/simulated/floor/plating, +/area/station/maintenance/north) "gQp" = ( /obj/machinery/conveyor/EW{ name = "cargo belt - west"; @@ -60587,6 +59565,13 @@ }, /turf/simulated/floor/carpet/grime, /area/station/crew_quarters/baroffice) +"gXa" = ( +/obj/machinery/manufacturer/medical, +/obj/machinery/atmospherics/pipe/simple/color_pipe/cyan_pipe{ + dir = 4 + }, +/turf/simulated/floor/blue, +/area/station/medical/medbay/pharmacy) "gXp" = ( /obj/cable/blue{ icon_state = "4-8" @@ -60633,7 +59618,7 @@ /area/station/hallway/secondary/exit) "gZy" = ( /obj/disposalpipe/switch_junction/right/north{ - mail_tag = list("medbay lobby","telescience","testchamber","research","chemistry","medbay","morgue","pathology","genetics","robotics"); + mail_tag = list("medbay lobby","telescience","testchamber","research","chemistry","medbay","morgue","pathology","genetics","robotics","medical director"); name = "mail junction (medsci sector)" }, /turf/simulated/wall/auto/supernorn, @@ -60675,6 +59660,19 @@ }, /turf/simulated/floor/grass/leafy, /area/station/garden/owlery) +"hdq" = ( +/obj/disposalpipe/segment/mail/vertical, +/obj/stool/chair/office{ + dir = 8 + }, +/obj/landmark/start/job/medical_doctor, +/obj/machinery/atmospherics/unary/vent_pump{ + dir = 4 + }, +/turf/simulated/floor/bluewhite{ + dir = 8 + }, +/area/station/medical/medbay/pharmacy) "hdr" = ( /obj/machinery/atmospherics/pipe/simple/color_pipe/cyan_pipe{ dir = 1 @@ -60728,6 +59726,21 @@ /obj/mapping_helper/wingrille_spawn/auto, /turf/simulated/floor/plating, /area/station/storage/primary) +"hfb" = ( +/obj/decal/tile_edge/stripe/extra_big, +/obj/decal/tile_edge/stripe/extra_big{ + dir = 10; + icon_state = "xtra_bigstripe-corner2" + }, +/obj/machinery/camera{ + c_tag = "autotag"; + dir = 4; + name = "autoname - SS13"; + pixel_x = -10; + tag = "" + }, +/turf/simulated/floor/sanitary, +/area/station/medical/morgue) "hfj" = ( /obj/lattice{ icon_state = "lattice-dir" @@ -60853,6 +59866,17 @@ dir = 10 }, /area/station/solar/north) +"hnv" = ( +/obj/disposalpipe/trunk/morgue{ + dir = 4 + }, +/obj/machinery/light/incandescent, +/obj/disposaloutlet{ + dir = 4; + throw_range = 2 + }, +/turf/simulated/floor/sanitary/blue, +/area/station/medical/morgue) "hnS" = ( /obj/noticeboard/persistent{ name = "Security Foyer persistent notice board"; @@ -60972,12 +59996,32 @@ icon_state = "catwalk_cross" }, /area/space) +"hyB" = ( +/obj/disposalpipe/segment/morgue, +/turf/simulated/floor/plating, +/area/station/maintenance/south) "hyI" = ( /obj/machinery/launcher_loader/south{ door_delay = 5 }, /turf/simulated/floor/plating, /area/station/maintenance/southeast) +"hyM" = ( +/obj/machinery/door/airlock/pyro/external, +/obj/cable{ + icon_state = "1-2" + }, +/obj/forcefield/energyshield/perma/doorlink{ + desc = "A door-linked force field that prevents gasses from passing through it."; + name = "Door-linked Atmospheric Forcefield"; + powerlevel = 1 + }, +/obj/mapping_helper/airlock/cycler{ + name = "Emergency Solar Array 2"; + cycle_id = "solar2" + }, +/turf/simulated/floor/caution/northsouth, +/area/station/hangar/arrivals) "hyQ" = ( /obj/tree{ desc = "It's a tree. You see the phrase 'Haine <3 SpyGuy' carved into it." @@ -60993,16 +60037,6 @@ /obj/decal/stripe_delivery, /turf/simulated/floor, /area/station/hallway/secondary/entry) -"hzT" = ( -/obj/machinery/door/airlock/pyro/external, -/obj/mapping_helper/firedoor_spawn, -/obj/forcefield/energyshield/perma/doorlink{ - desc = "A door-linked force field that prevents gasses from passing through it."; - name = "Door-linked Atmospheric Forcefield"; - powerlevel = 1 - }, -/turf/simulated/floor/plating, -/area/station/maintenance/northeast) "hzY" = ( /obj/table/reinforced/auto, /obj/item/reagent_containers/food/drinks/creamer{ @@ -61024,6 +60058,16 @@ }, /turf/simulated/floor/plating/airless, /area/space) +"hAO" = ( +/obj/cable{ + icon_state = "1-2" + }, +/obj/disposalpipe/segment/horizontal, +/obj/machinery/atmospherics/pipe/simple/color_pipe/cyan_pipe{ + dir = 10 + }, +/turf/simulated/floor/white, +/area/station/medical/medbay) "hAY" = ( /obj/machinery/atmospherics/unary/portables_connector{ dir = 8; @@ -61032,14 +60076,13 @@ /turf/simulated/floor/blue, /area/station/science/lab) "hBJ" = ( -/obj/machinery/door/airlock/pyro/glass{ - name = "Operating Theater" - }, -/obj/disposalpipe/segment/mail/vertical, -/obj/mapping_helper/firedoor_spawn, +/obj/machinery/door/airlock/pyro/glass/med, /obj/mapping_helper/access/medical, -/obj/decal/stripe_delivery, -/turf/simulated/floor, +/obj/mapping_helper/firedoor_spawn, +/obj/machinery/atmospherics/pipe/simple/color_pipe/cyan_pipe{ + dir = 1 + }, +/turf/simulated/floor/red, /area/station/medical/medbay/surgery) "hBR" = ( /obj/grille/catwalk{ @@ -61050,6 +60093,9 @@ icon_state = "catwalk_cross" }, /area/station/catwalk/south) +"hBU" = ( +/turf/simulated/wall/auto/supernorn, +/area/station/medical/medbay/surgery/storage) "hCn" = ( /obj/securearea{ desc = "A warning sign which reads 'EXTERNAL AIRLOCK'"; @@ -61145,6 +60191,36 @@ /obj/machinery/atmospherics/unary/vent, /turf/simulated/floor/plating/airless, /area/space) +"hIe" = ( +/obj/surgery_tray, +/obj/item/circular_saw{ + pixel_y = 11 + }, +/obj/item/scalpel{ + pixel_x = 3; + pixel_y = 2 + }, +/obj/item/hemostat{ + pixel_x = 3; + pixel_y = -5 + }, +/obj/item/scissors/surgical_scissors{ + pixel_x = 5; + pixel_y = 5 + }, +/obj/item/staple_gun{ + pixel_x = 4; + pixel_y = 9 + }, +/obj/item/suture{ + pixel_y = 5 + }, +/obj/item/surgical_spoon, +/obj/machinery/light_switch/east, +/turf/simulated/floor/redwhite{ + dir = 4 + }, +/area/station/medical/medbay/surgery) "hIO" = ( /obj/machinery/door/airlock/pyro/glass{ name = "Research Sector" @@ -61216,6 +60292,13 @@ }, /turf/simulated/floor/orangeblack, /area/station/engine/hotloop) +"hKe" = ( +/obj/cable{ + icon_state = "1-2" + }, +/obj/disposalpipe/segment/mail/vertical, +/turf/simulated/floor/carpet/blue/fancy/innercorner/south, +/area/station/medical/head) "hKn" = ( /obj/machinery/light/small{ dir = 1 @@ -61242,6 +60325,22 @@ /obj/decal/stripe_delivery, /turf/simulated/floor, /area/station/hallway/primary/west) +"hLF" = ( +/obj/table/reinforced/auto, +/obj/machinery/door/poddoor/pyro/shutters{ + density = 0; + icon_state = "pdoor0"; + id = "chemistry"; + name = "Chemistry Privacy Shutters"; + opacity = 0 + }, +/obj/item/storage/box/beakerbox{ + pixel_y = 4 + }, +/obj/mapping_helper/firedoor_spawn, +/obj/disposalpipe/segment/mail/horizontal, +/turf/simulated/floor/purple, +/area/station/science/chemistry) "hMb" = ( /obj/mapping_helper/firedoor_spawn, /obj/machinery/door/airlock/pyro/external{ @@ -61253,6 +60352,11 @@ name = "Door-linked Atmospheric Forcefield"; powerlevel = 1 }, +/obj/mapping_helper/airlock/cycler{ + cycle_id = "aiairbridge"; + name = "AI Airbridge"; + enter_id = "outer" + }, /turf/simulated/floor/black, /area/station/crew_quarters/info{ name = "Net Cafe" @@ -61331,6 +60435,20 @@ dir = 4 }, /area/station/ranch) +"hOD" = ( +/obj/table/auto, +/obj/machinery/light{ + dir = 8; + layer = 9.1; + pixel_x = -10 + }, +/obj/machinery/cashreg, +/turf/simulated/floor/greenwhite{ + dir = 9 + }, +/area/station/medical/research{ + name = "Genetic Research" + }) "hOR" = ( /obj/machinery/firealarm/north, /turf/simulated/floor/shuttlebay, @@ -61358,6 +60476,10 @@ }, /turf/simulated/floor/airless/plating/catwalk, /area/station/solar/small_backup2) +"hQN" = ( +/obj/machinery/light/incandescent, +/turf/simulated/floor/sanitary/blue, +/area/station/medical/morgue) "hQX" = ( /obj/machinery/vehicle/miniputt/nanoputt/security{ dir = 8 @@ -61377,10 +60499,31 @@ "hRi" = ( /turf/space, /area/shuttle/arrival/station) +"hRz" = ( +/obj/cable{ + icon_state = "2-4" + }, +/obj/disposalpipe/segment/morgue{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/station/maintenance/south) "hRE" = ( /obj/disposalpipe/segment, /turf/simulated/floor/green/side, /area/station/crew_quarters/arcade) +"hTn" = ( +/obj/disposalpipe/segment/transport{ + dir = 1; + icon_state = "pipe-c" + }, +/obj/cable{ + icon_state = "4-8" + }, +/turf/simulated/floor/blue/side{ + dir = 1 + }, +/area/station/medical/medbay/surgery/storage) "hUj" = ( /obj/cable{ icon_state = "4-8" @@ -61416,21 +60559,27 @@ /obj/disposalpipe/segment/mail/horizontal, /turf/simulated/floor/orangeblack, /area/station/maintenance/central) +"hXl" = ( +/obj/disposalpipe/segment/transport{ + dir = 4 + }, +/obj/cable{ + icon_state = "4-8" + }, +/turf/simulated/floor/blue/side{ + dir = 1 + }, +/area/station/medical/medbay/surgery/storage) "hXM" = ( /obj/stool/chair/comfy/shuttle/green, /obj/machinery/computer/transit_shuttle/research/embedded, /turf/unsimulated/floor/shuttle, /area/shuttle/research/outpost) "hYe" = ( -/obj/stool/chair/office{ - dir = 8 - }, -/obj/machinery/firealarm/east, -/obj/landmark/start/job/medical_doctor, -/turf/simulated/floor/redwhite{ - dir = 4 - }, -/area/station/medical/medbay/surgery) +/obj/disposalpipe/segment/vertical, +/obj/disposalpipe/segment/mail/horizontal, +/turf/simulated/floor/white, +/area/station/medical/medbay) "hYU" = ( /obj/securearea{ desc = "This hazard stripe marks a high-intensity beamline."; @@ -61464,21 +60613,32 @@ /turf/simulated/floor/black, /area/station/crew_quarters/quartersA) "hZV" = ( -/obj/table/reinforced/chemistry/auto, -/obj/machinery/microscope, -/turf/simulated/floor/greenwhite{ +/obj/table/reinforced/auto, +/obj/item/robodefibrillator{ + pixel_x = 4; + pixel_y = 2 + }, +/obj/item/bandage{ + pixel_x = -5; + pixel_y = 6 + }, +/obj/machinery/atmospherics/pipe/simple/color_pipe/cyan_pipe{ + dir = 4 + }, +/turf/simulated/floor/blue/side{ dir = 8 }, -/area/station/medical/cdc) +/area/station/medical/medbay/surgery/storage) "hZW" = ( -/obj/machinery/genetics_scanner, -/obj/disposalpipe/segment/transport, -/turf/simulated/floor/greenwhite{ - dir = 8 +/obj/machinery/camera{ + c_tag = "autotag"; + dir = 1; + name = "autoname - SS13"; + tag = "" }, -/area/station/medical/research{ - name = "Genetic Research" - }) +/obj/disposalpipe/junction/left/west, +/turf/simulated/floor/blue/side, +/area/station/medical/medbay/surgery/storage) "iae" = ( /obj/machinery/launcher_loader/north{ door_delay = 5 @@ -61533,6 +60693,22 @@ /area/station/engine/power{ name = "Engineering Control Room" }) +"iaT" = ( +/obj/machinery/door/airlock/pyro/external{ + dir = 4 + }, +/obj/forcefield/energyshield/perma/doorlink{ + desc = "A door-linked force field that prevents gasses from passing through it."; + dir = 4; + name = "Door-linked Atmospheric Forcefield"; + powerlevel = 1 + }, +/obj/mapping_helper/airlock/cycler{ + name = "Central Maintenance"; + cycle_id = "c_maint" + }, +/turf/simulated/floor/caution/westeast, +/area/station/maintenance/central) "ibt" = ( /obj/machinery/door/poddoor/pyro/shutters{ dir = 4; @@ -61577,6 +60753,9 @@ }, /turf/space, /area/shuttle/research/outpost) +"ica" = ( +/turf/simulated/floor/carpet/blue/fancy/innercorner/east, +/area/station/medical/head) "icp" = ( /obj/disposalpipe/segment{ dir = 4 @@ -61707,6 +60886,24 @@ /obj/tree, /turf/simulated/floor/grass/leafy, /area/station/garden/owlery) +"ilP" = ( +/obj/machinery/door/airlock/pyro/external{ + req_access_txt = "40" + }, +/obj/disposalpipe/segment/mail/bent/south, +/obj/mapping_helper/firedoor_spawn, +/obj/decal/stripe_delivery, +/obj/forcefield/energyshield/perma/doorlink{ + desc = "A door-linked force field that prevents gasses from passing through it."; + name = "Door-linked Atmospheric Forcefield"; + powerlevel = 1 + }, +/obj/mapping_helper/airlock/cycler{ + name = "West Substation"; + cycle_id = "westsubstation" + }, +/turf/simulated/floor, +/area/station/engine/substation/west) "imD" = ( /obj/machinery/conveyor/NS{ name = "cargo belt - south"; @@ -61748,6 +60945,21 @@ /obj/mapping_helper/wingrille_spawn/auto/reinforced/crystal, /turf/simulated/floor/plating, /area/station/security/brig) +"inJ" = ( +/obj/cable/orange{ + icon_state = "4-8" + }, +/obj/machinery/door/airlock/pyro/external{ + dir = 4 + }, +/obj/mapping_helper/firedoor_spawn, +/obj/mapping_helper/airlock/cycler{ + name = "Central Maintenance"; + cycle_id = "c_maint3"; + enter_id = "inner" + }, +/turf/simulated/floor/caution/westeast, +/area/station/maintenance/central) "inO" = ( /obj/disposalpipe/segment/mail/horizontal, /obj/machinery/firealarm/north, @@ -61835,6 +61047,10 @@ }, /turf/simulated/floor/plating, /area/station/engine/substation/west) +"isw" = ( +/obj/disposalpipe/segment/bent/north, +/turf/simulated/floor/sanitary/blue, +/area/station/medical/morgue) "isV" = ( /obj/cable/orange{ icon_state = "1-2" @@ -61848,24 +61064,16 @@ /obj/machinery/firealarm/east, /turf/simulated/floor/black, /area/station/crew_quarters/market) -"itE" = ( -/obj/disposalpipe/segment, +"itH" = ( +/obj/item/device/radio/intercom/medical, +/obj/machinery/genetics_scanner, +/obj/disposalpipe/segment/mail/vertical, /turf/simulated/floor/greenwhite{ dir = 1 }, /area/station/medical/research{ name = "Genetic Research" }) -"itH" = ( -/obj/machinery/computer3/generic/med_data, -/obj/item/device/radio/intercom/medical, -/obj/cable{ - icon_state = "0-2" - }, -/obj/machinery/power/data_terminal, -/obj/machinery/firealarm/east, -/turf/simulated/floor/sanitary/white, -/area/station/medical/morgue) "iuC" = ( /obj/rack, /obj/item/clothing/suit/space, @@ -61881,12 +61089,20 @@ /turf/simulated/floor, /area/station/ai_monitored/storage/eva) "iuF" = ( -/obj/machinery/door/airlock/pyro/maintenance, -/obj/mapping_helper/firedoor_spawn, -/obj/mapping_helper/access/medical, -/obj/decal/stripe_delivery, -/turf/simulated/floor, -/area/station/medical/medbay) +/turf/simulated/floor/bluewhite{ + dir = 8 + }, +/area/station/medical/medbay/cloner) +"ivi" = ( +/obj/machinery/atmospherics/pipe/simple/color_pipe/cyan_pipe{ + dir = 4 + }, +/obj/disposalpipe/segment/morgue{ + dir = 4; + icon_state = "pipe-c" + }, +/turf/simulated/floor/specialroom/medbay, +/area/station/medical/medbay/lobby) "ivq" = ( /obj/machinery/light{ dir = 1; @@ -61910,17 +61126,14 @@ /turf/simulated/floor, /area/station/turret_protected/ai) "iwc" = ( -/obj/machinery/light{ - dir = 8; - layer = 9.1; - pixel_x = -10 - }, -/obj/machinery/chem_dispenser/chemical, -/obj/item/reagent_containers/glass/beaker/large, -/turf/simulated/floor/greenwhite{ - dir = 9 +/obj/stool/bed/moveable, +/obj/machinery/light/incandescent, +/obj/item/clothing/suit/bedsheet, +/obj/machinery/light_switch/east, +/turf/simulated/floor/bluewhite{ + dir = 6 }, -/area/station/medical/cdc) +/area/station/medical/medbay) "iwD" = ( /obj/lattice{ dir = 4; @@ -61996,6 +61209,11 @@ name = "Bridge Access" }, /obj/mapping_helper/access/heads, +/obj/mapping_helper/airlock/cycler{ + cycle_id = "bridge"; + name = "Bridge"; + enter_id = "south" + }, /turf/simulated/floor/plating, /area/station/security/checkpoint/customs) "iBl" = ( @@ -62056,17 +61274,6 @@ /obj/disposalpipe/segment/mail/vertical, /turf/simulated/floor/caution/west, /area/station/science/teleporter) -"iFE" = ( -/obj/machinery/door/airlock/pyro/glass{ - id = "cloning"; - name = "Cloning Room" - }, -/obj/disposalpipe/segment, -/obj/mapping_helper/firedoor_spawn, -/obj/mapping_helper/access/medical, -/obj/decal/stripe_delivery, -/turf/simulated/floor, -/area/station/medical/medbay/cloner) "iGY" = ( /obj/machinery/computer/magnet{ dir = 8; @@ -62079,6 +61286,16 @@ icon_state = "engine_caution_south" }, /area/station/mining/staff_room) +"iHY" = ( +/obj/machinery/drainage, +/obj/machinery/optable{ + id = "OR1" + }, +/obj/machinery/defib_mount{ + pixel_y = -28 + }, +/turf/simulated/floor/redwhite, +/area/station/medical/medbay/surgery) "iJy" = ( /obj/machinery/conveyor/EW{ name = "cargo belt - west"; @@ -62086,6 +61303,9 @@ }, /turf/simulated/floor/plating, /area/station/maintenance/disposal) +"iJN" = ( +/turf/simulated/floor/carpet/blue/fancy/narrow/T_east, +/area/station/medical/medbay/psychiatrist) "iKC" = ( /obj/machinery/door/poddoor/pyro/shutters{ density = 0; @@ -62140,6 +61360,13 @@ /obj/mapping_helper/firedoor_spawn, /turf/simulated/floor/black, /area/station/crew_quarters/quartersA) +"iMH" = ( +/turf/simulated/floor/greenwhite{ + dir = 1 + }, +/area/station/medical/research{ + name = "Genetic Research" + }) "iMJ" = ( /obj/cable{ icon_state = "4-8" @@ -62163,15 +61390,18 @@ }, /area/station/catwalk/north) "iOp" = ( -/obj/machinery/door/airlock/pyro/maintenance{ - dir = 4 - }, -/obj/mapping_helper/firedoor_spawn, /obj/disposalpipe/segment/mail/horizontal, -/obj/mapping_helper/access/medical, -/obj/decal/stripe_delivery, -/turf/simulated/floor, -/area/station/medical/medbay) +/obj/machinery/power/apc{ + areastring = "Pharmacy"; + dir = 1; + name = "Pharmacy APC"; + pixel_y = 24 + }, +/obj/cable{ + icon_state = "0-2" + }, +/turf/simulated/floor/plating, +/area/station/maintenance/solar/south) "iOr" = ( /obj/disposalpipe/switch_junction/right/north{ mail_tag = list("chapel","chapel checkpoint","crewA","arrivals checkpoint"); @@ -62362,6 +61592,11 @@ /obj/mapping_helper/firedoor_spawn, /obj/mapping_helper/access/heads, /obj/decal/stripe_delivery, +/obj/mapping_helper/airlock/cycler{ + cycle_id = "bridge"; + name = "Bridge"; + enter_id = "outer" + }, /turf/simulated/floor, /area/station/security/checkpoint/customs) "iXJ" = ( @@ -62483,6 +61718,9 @@ }, /turf/simulated/floor/dirt, /area/station/ranch) +"jci" = ( +/turf/simulated/floor/plating, +/area/station/medical/maintenance) "jcy" = ( /obj/item/storage/wall/emergency{ dir = 1; @@ -62554,6 +61792,11 @@ }, /obj/mapping_helper/access/security, /obj/decal/stripe_delivery, +/obj/mapping_helper/airlock/cycler{ + cycle_id = "security"; + name = "Security"; + enter_id = "inner" + }, /turf/simulated/floor, /area/station/security/checkpoint/sec_foyer) "jfB" = ( @@ -62618,23 +61861,19 @@ /turf/simulated/floor/plating, /area/station/routing/depot) "jhE" = ( -/obj/machinery/centrifuge, -/turf/simulated/floor/greenwhite{ - dir = 8 +/obj/machinery/atmospherics/unary/cold_sink/freezer/cryo, +/turf/simulated/floor/blue/side{ + dir = 9 }, -/area/station/medical/cdc) +/area/station/medical/medbay/surgery/storage) "jhT" = ( -/obj/machinery/light{ - dir = 4; - layer = 9.1; - pixel_x = 10 +/obj/disposalpipe/segment/transport{ + dir = 4 }, -/obj/disposalpipe/trunk/mail/south, -/obj/machinery/disposal/mail/small/autoname/medbay/pathology/west, -/turf/simulated/floor/greenwhite{ +/turf/simulated/floor/blue/side{ dir = 6 }, -/area/station/medical/cdc) +/area/station/medical/medbay/surgery/storage) "jhV" = ( /obj/tree{ pixel_x = -4 @@ -62667,6 +61906,20 @@ /area/station/engine/power{ name = "Engineering Control Room" }) +"jjb" = ( +/obj/machinery/door/airlock/pyro/external, +/obj/mapping_helper/firedoor_spawn, +/obj/forcefield/energyshield/perma/doorlink{ + desc = "A door-linked force field that prevents gasses from passing through it."; + name = "Door-linked Atmospheric Forcefield"; + powerlevel = 1 + }, +/obj/mapping_helper/airlock/cycler{ + name = "South East Maintenance"; + cycle_id = "se_maint" + }, +/turf/simulated/floor/plating, +/area/station/maintenance/southeast) "jjf" = ( /obj/grille/catwalk{ dir = 5 @@ -62688,6 +61941,17 @@ /obj/submachine/weapon_vendor/security, /turf/simulated/floor, /area/station/security/checkpoint/podbay) +"jkg" = ( +/obj/machinery/door/airlock/pyro/glass/med{ + dir = 4 + }, +/obj/disposalpipe/segment/transport{ + dir = 4 + }, +/obj/mapping_helper/access/medical, +/obj/mapping_helper/firedoor_spawn, +/turf/simulated/floor, +/area/station/medical/dome) "jkr" = ( /obj/disposalpipe/segment, /obj/machinery/door/airlock/pyro/engineering{ @@ -62759,6 +62023,14 @@ dir = 6 }, /area/station/catwalk/north) +"jnX" = ( +/obj/cable{ + icon_state = "1-2" + }, +/turf/simulated/floor/bluewhite{ + dir = 1 + }, +/area/station/medical/medbay) "jof" = ( /obj/reagent_dispensers/watertank/fountain, /turf/simulated/floor/purple/side{ @@ -62787,6 +62059,13 @@ }, /turf/simulated/floor/red, /area/station/engine/hotloop) +"jpw" = ( +/obj/disposalpipe/segment/horizontal, +/obj/machinery/atmospherics/pipe/simple/color_pipe/cyan_pipe{ + dir = 4 + }, +/turf/simulated/floor/white, +/area/station/medical/medbay) "jqT" = ( /obj/machinery/light/small, /obj/grille/catwalk, @@ -62795,9 +62074,21 @@ }, /area/space) "jrl" = ( -/obj/disposalpipe/segment/mail/horizontal, -/turf/simulated/floor/bluewhite, -/area/station/medical/medbay) +/obj/machinery/door/airlock/pyro/command, +/obj/mapping_helper/access/medical_director, +/obj/mapping_helper/firedoor_spawn, +/obj/cable{ + icon_state = "1-2" + }, +/obj/disposalpipe/segment/mail/vertical, +/obj/cable{ + icon_state = "2-8" + }, +/obj/cable{ + icon_state = "2-4" + }, +/turf/simulated/floor/black, +/area/station/medical/head) "jsm" = ( /obj/machinery/light{ dir = 1; @@ -62814,6 +62105,27 @@ }, /turf/simulated/floor/dirt, /area/station/ranch) +"jtg" = ( +/obj/machinery/door/airlock/pyro/external, +/obj/cable{ + icon_state = "1-2" + }, +/obj/machinery/secscanner{ + pixel_y = 10 + }, +/obj/mapping_helper/access/mining, +/obj/forcefield/energyshield/perma/doorlink{ + desc = "A door-linked force field that prevents gasses from passing through it."; + name = "Door-linked Atmospheric Forcefield"; + powerlevel = 1 + }, +/obj/mapping_helper/airlock/cycler{ + name = "Mining"; + cycle_id = "mining"; + enter_id = "outer" + }, +/turf/simulated/floor/caution/northsouth, +/area/station/mining/magnet) "jtY" = ( /obj/grille/catwalk{ dir = 4 @@ -62879,6 +62191,15 @@ dir = 4 }, /area/station/solar/small_backup1) +"jvY" = ( +/obj/disposalpipe/segment/mail/bent/east, +/turf/simulated/floor/carpet{ + dir = 10; + icon_state = "blue2" + }, +/area/station/medical/research{ + name = "Genetic Research" + }) "jwl" = ( /obj/machinery/firealarm/west, /turf/simulated/floor/caution/south, @@ -63070,19 +62391,32 @@ /obj/decal/stripe_delivery, /turf/simulated/floor, /area/research_outpost) -"jGF" = ( -/obj/mapping_helper/firedoor_spawn, +"jGE" = ( +/obj/cable{ + icon_state = "1-4" + }, +/obj/disposalpipe/segment/vertical, +/turf/simulated/floor/sanitary/blue, +/area/station/medical/morgue) +"jGO" = ( +/obj/machinery/atmospherics/pipe/simple{ + level = 2 + }, +/obj/disposalpipe/segment/mail/vertical, /obj/machinery/door/airlock/pyro/external{ - dir = 4 + req_access_txt = "40" }, /obj/forcefield/energyshield/perma/doorlink{ desc = "A door-linked force field that prevents gasses from passing through it."; - dir = 4; name = "Door-linked Atmospheric Forcefield"; powerlevel = 1 }, -/turf/simulated/floor/plating, -/area/station/maintenance/central) +/obj/mapping_helper/airlock/cycler{ + name = "West Substation"; + cycle_id = "westsubstation" + }, +/turf/simulated/floor/caution/northsouth, +/area/station/engine/substation/west) "jHr" = ( /obj/machinery/atmospherics/pipe/simple/heat_exchanging{ dir = 5 @@ -63104,20 +62438,6 @@ /obj/decal/stripe_delivery, /turf/simulated/floor, /area/station/medical/robotics) -"jHW" = ( -/obj/cable{ - icon_state = "1-2" - }, -/obj/machinery/door/airlock/pyro/external, -/obj/mapping_helper/access/mining, -/obj/decal/stripe_delivery, -/obj/forcefield/energyshield/perma/doorlink{ - desc = "A door-linked force field that prevents gasses from passing through it."; - name = "Door-linked Atmospheric Forcefield"; - powerlevel = 1 - }, -/turf/simulated/floor, -/area/station/mining/staff_room) "jIa" = ( /obj/grille/catwalk{ dir = 4 @@ -63197,6 +62517,9 @@ }, /turf/simulated/floor/orangeblack, /area/station/maintenance/central) +"jMb" = ( +/turf/simulated/floor/black, +/area/station/medical/medbay/reception) "jMm" = ( /obj/machinery/conveyor/WE{ name = "cargo belt - east"; @@ -63205,6 +62528,12 @@ /obj/disposalpipe/segment, /turf/simulated/floor/plating, /area/station/routing/depot) +"jMq" = ( +/obj/disposalpipe/segment/transport, +/turf/simulated/floor/greenwhite, +/area/station/medical/research{ + name = "Genetic Research" + }) "jNc" = ( /obj/decal/poster/wallsign/hazard_caution, /turf/simulated/wall/auto/supernorn, @@ -63228,18 +62557,6 @@ /obj/item/paper/book/from_file/monster_manual_revised, /turf/space, /area/space) -"jNE" = ( -/obj/machinery/door/airlock/pyro/external{ - dir = 4 - }, -/obj/forcefield/energyshield/perma/doorlink{ - desc = "A door-linked force field that prevents gasses from passing through it."; - dir = 4; - name = "Door-linked Atmospheric Forcefield"; - powerlevel = 1 - }, -/turf/simulated/floor/caution/westeast, -/area/station/maintenance/central) "jOa" = ( /obj/securearea{ desc = ""; @@ -63306,21 +62623,6 @@ /obj/decal/cleanable/oil, /turf/simulated/floor/shuttlebay, /area/station/crew_quarters/captain) -"jQa" = ( -/obj/table/reinforced/auto, -/obj/machinery/cashreg{ - pixel_y = 2 - }, -/obj/mapping_helper/firedoor_spawn, -/obj/cable{ - icon_state = "1-2" - }, -/obj/item/kitchen/food_box/lollipop{ - pixel_x = 9 - }, -/obj/machinery/door/window/northright, -/turf/simulated/floor/caution/northsouth, -/area/station/medical/medbay/pharmacy) "jQo" = ( /obj/machinery/door/airlock/pyro/maintenance{ dir = 4 @@ -63370,6 +62672,13 @@ /obj/disposalpipe/segment/mail/vertical, /turf/simulated/floor/plating, /area/station/maintenance/central) +"jRM" = ( +/obj/machinery/sleeper/port_a_medbay{ + dir = 4 + }, +/obj/machinery/light/incandescent, +/turf/simulated/floor/bluewhite, +/area/station/medical/medbay) "jSm" = ( /obj/grille/catwalk{ dir = 10 @@ -63434,19 +62743,22 @@ dir = 4 }, /area/space) -"jUl" = ( -/obj/storage/secure/closet/animal, -/obj/disposalpipe/segment/transport, -/obj/machinery/camera{ - c_tag = "autotag"; - dir = 4; - name = "autoname - SS13"; - pixel_x = -10; - tag = "" +"jTZ" = ( +/obj/health_scanner/floor{ + find_in_range = 0; + id = "lobby_south"; + dir = 8; + pixel_y = 8; + pixel_x = 8 }, -/turf/simulated/floor/greenwhite{ - dir = 8 +/turf/simulated/floor/bluewhite/corner{ + dir = 1 }, +/area/station/medical/medbay/lobby) +"jUl" = ( +/obj/mapping_helper/wingrille_spawn/auto/reinforced, +/obj/disposalpipe/segment/vertical, +/turf/simulated/floor/plating, /area/station/medical/research{ name = "Genetic Research" }) @@ -63473,28 +62785,15 @@ /obj/mapping_helper/firedoor_spawn, /turf/simulated/floor/black, /area/station/security/checkpoint/sec_foyer) -"jVp" = ( -/obj/machinery/computer/genetics{ - dir = 8 - }, -/turf/simulated/floor/greenwhite{ - dir = 4 - }, -/area/station/medical/research{ - name = "Genetic Research" - }) "jVt" = ( -/obj/machinery/door/airlock/pyro/maintenance{ - dir = 4 - }, -/obj/mapping_helper/firedoor_spawn, /obj/cable{ icon_state = "4-8" }, -/obj/mapping_helper/access/medical, -/obj/decal/stripe_delivery, -/turf/simulated/floor, -/area/station/medical/medbay) +/obj/cable{ + icon_state = "1-8" + }, +/turf/simulated/floor/plating, +/area/station/maintenance/solar/south) "jVv" = ( /obj/machinery/firealarm/north, /obj/stool/chair/couch{ @@ -63545,6 +62844,20 @@ /obj/mapping_helper/wingrille_spawn/auto/reinforced/crystal, /turf/simulated/floor/plating, /area/station/maintenance/southeast) +"jYG" = ( +/obj/machinery/atmospherics/unary/portables_connector, +/obj/machinery/portable_atmospherics/canister/oxygen, +/obj/machinery/camera{ + c_tag = "autotag"; + dir = 6; + name = "autoname - SS13"; + pixel_y = 20; + tag = "" + }, +/turf/simulated/floor/blue/side{ + dir = 1 + }, +/area/station/medical/medbay/surgery/storage) "jZM" = ( /obj/disposalpipe/segment/mail/vertical, /obj/grille/catwalk, @@ -63591,6 +62904,14 @@ }, /turf/simulated/floor/plating, /area/station/routing/security) +"kbB" = ( +/obj/machinery/atmospherics/pipe/simple{ + dir = 9; + level = 2 + }, +/obj/disposalpipe/segment/horizontal, +/turf/simulated/floor, +/area/station/medical/medbay/surgery/storage) "kbW" = ( /obj/cable{ icon_state = "4-8" @@ -63641,27 +62962,53 @@ icon_state = "red2" }, /area/station/quartermaster/office) -"khR" = ( -/obj/machinery/disposal, -/obj/machinery/light{ - dir = 8; - layer = 9.1; - pixel_x = -10 +"kff" = ( +/obj/cable{ + icon_state = "1-2" }, -/obj/disposalpipe/trunk{ - dir = 8 +/obj/disposalpipe/segment/morgue, +/obj/cable{ + icon_state = "1-8" }, -/turf/simulated/floor/greenwhite{ +/turf/simulated/floor/plating, +/area/station/maintenance/south) +"kfq" = ( +/obj/machinery/door/airlock/pyro/external, +/obj/machinery/secscanner{ + pixel_y = 10 + }, +/obj/mapping_helper/access/mining, +/obj/forcefield/energyshield/perma/doorlink{ + desc = "A door-linked force field that prevents gasses from passing through it."; + name = "Door-linked Atmospheric Forcefield"; + powerlevel = 1 + }, +/obj/mapping_helper/airlock/cycler{ + name = "Mining"; + cycle_id = "mining"; + enter_id = "outer" + }, +/turf/simulated/floor/caution/northsouth, +/area/station/mining/magnet) +"kfF" = ( +/obj/machinery/vending/medical_public, +/turf/simulated/floor/specialroom/medbay, +/area/station/medical/medbay/lobby) +"khR" = ( +/obj/machinery/vending/jobclothing/medical, +/turf/simulated/floor/blue/side{ dir = 10 }, -/area/station/medical/cdc) +/area/station/medical/medbay/surgery/storage) "kid" = ( /obj/machinery/atmospherics/pipe/simple/color_pipe/cyan_pipe{ dir = 10 }, -/turf/simulated/floor/stairs{ - dir = 4; - icon_state = "Stairs_wide" +/obj/disposalpipe/segment/morgue{ + dir = 4 + }, +/turf/simulated/floor/stairs/wide{ + dir = 4 }, /area/station/medical/medbay/lobby) "kix" = ( @@ -63720,6 +63067,19 @@ icon_state = "catwalk_cross" }, /area/station/solar/north) +"kjV" = ( +/obj/machinery/door/airlock/pyro/external, +/obj/forcefield/energyshield/perma/doorlink{ + desc = "A door-linked force field that prevents gasses from passing through it."; + name = "Door-linked Atmospheric Forcefield"; + powerlevel = 1 + }, +/obj/mapping_helper/airlock/cycler{ + name = "South Solar Maintenance"; + cycle_id = "southsolar" + }, +/turf/simulated/floor/caution/northsouth, +/area/station/maintenance/solar/south) "kjZ" = ( /obj/grille/catwalk, /turf/simulated/floor/airless/plating/catwalk{ @@ -63732,12 +63092,12 @@ name = "very reinforced wall" }, /area/station/maintenance/southeast) -"klL" = ( -/obj/machinery/vending/pathology, -/turf/simulated/floor/greenwhite{ +"klH" = ( +/obj/machinery/atmospherics/pipe/simple/color_pipe/cyan_pipe{ dir = 1 }, -/area/station/medical/cdc) +/turf/simulated/floor/white, +/area/station/medical/medbay/surgery) "klY" = ( /obj/machinery/atmospherics/binary/valve/notify_admins{ dir = 4; @@ -63786,6 +63146,26 @@ }, /turf/simulated/wall/auto/reinforced/supernorn, /area/station/security/checkpoint/podbay) +"kpd" = ( +/obj/machinery/light, +/obj/disposalpipe/segment/mail/bent/north, +/turf/simulated/floor/purplewhite, +/area/station/science/chemistry) +"kpY" = ( +/obj/machinery/door/airlock/pyro/external, +/obj/mapping_helper/firedoor_spawn, +/obj/forcefield/energyshield/perma/doorlink{ + desc = "A door-linked force field that prevents gasses from passing through it."; + name = "Door-linked Atmospheric Forcefield"; + powerlevel = 1 + }, +/obj/mapping_helper/airlock/cycler{ + name = "Central Maintenance"; + cycle_id = "c_maint3"; + enter_id = "outer" + }, +/turf/simulated/floor/caution/northsouth, +/area/station/maintenance/central) "kqp" = ( /mob/living/carbon/human/npc/monkey, /turf/simulated/floor/pool/no_animate, @@ -63834,6 +63214,10 @@ }, /turf/simulated/floor/grass/leafy, /area/station/garden/owlery) +"ktx" = ( +/obj/machinery/light/incandescent, +/turf/simulated/floor/carpet/blue/fancy/narrow/T_south, +/area/station/medical/medbay/psychiatrist) "ktE" = ( /obj/cable/yellow{ icon_state = "1-2" @@ -63848,28 +63232,6 @@ }, /turf/simulated/wall/auto/reinforced/supernorn, /area/station/engine/substation/east) -"kuZ" = ( -/obj/machinery/door/airlock/pyro/medical{ - dir = 4; - name = "Pathology Research" - }, -/obj/machinery/door/poddoor/pyro/shutters{ - density = 0; - dir = 4; - icon_state = "pdoor0"; - id = "pathology_lockdown"; - name = "Pathology Quarantine Shutters"; - opacity = 0 - }, -/obj/mapping_helper/firedoor_spawn, -/obj/disposalpipe/segment/mail/horizontal, -/obj/cable{ - icon_state = "4-8" - }, -/obj/mapping_helper/access/pathology, -/obj/decal/stripe_delivery, -/turf/simulated/floor, -/area/station/medical/cdc) "kwv" = ( /obj/mapping_helper/firedoor_spawn, /obj/machinery/door/airlock/pyro/maintenance, @@ -63958,19 +63320,6 @@ dir = 8 }, /area/listeningpost) -"kAe" = ( -/obj/machinery/door/airlock/pyro/external, -/obj/cable{ - icon_state = "1-2" - }, -/obj/mapping_helper/firedoor_spawn, -/obj/forcefield/energyshield/perma/doorlink{ - desc = "A door-linked force field that prevents gasses from passing through it."; - name = "Door-linked Atmospheric Forcefield"; - powerlevel = 1 - }, -/turf/simulated/floor/grime, -/area/station/storage/auxillary) "kAx" = ( /obj/machinery/door/airlock/pyro/glass{ dir = 4; @@ -63994,6 +63343,17 @@ /obj/machinery/light_switch/north, /turf/simulated/floor/plating, /area/research_outpost) +"kAS" = ( +/obj/disposaloutlet{ + dir = 4 + }, +/obj/disposalpipe/trunk/transport{ + dir = 1 + }, +/turf/simulated/floor/grass{ + name = "astroturf" + }, +/area/station/medical/dome) "kAW" = ( /obj/machinery/atmospherics/trinary/mixer{ dir = 4; @@ -64088,6 +63448,12 @@ dir = 9 }, /area/space) +"kIL" = ( +/obj/disposalpipe/segment/mail/vertical, +/turf/simulated/floor/bluewhite{ + dir = 9 + }, +/area/station/medical/medbay/pharmacy) "kIP" = ( /obj/cable/orange{ icon_state = "4-8" @@ -64106,20 +63472,6 @@ dir = 6 }, /area/station/catwalk/south) -"kKe" = ( -/obj/machinery/door/airlock/pyro/external, -/obj/disposalpipe/segment/mail/bent/north, -/obj/machinery/atmospherics/pipe/simple/color_pipe/green_pipe{ - dir = 1 - }, -/obj/mapping_helper/firedoor_spawn, -/obj/forcefield/energyshield/perma/doorlink{ - desc = "A door-linked force field that prevents gasses from passing through it."; - name = "Door-linked Atmospheric Forcefield"; - powerlevel = 1 - }, -/turf/simulated/floor/plating, -/area/station/maintenance/north) "kKC" = ( /obj/table/reinforced/auto, /obj/disposalpipe/segment/mineral, @@ -64201,15 +63553,16 @@ icon_state = "engine_caution_south" }, /area/station/mining/staff_room) -"kNp" = ( -/obj/machinery/clonegrinder, +"kNe" = ( +/obj/machinery/atmospherics/pipe/simple{ + dir = 4; + level = 2 + }, /obj/cable{ - icon_state = "0-8" + icon_state = "1-2" }, -/obj/machinery/firealarm/east, -/obj/decal/stripe_caution, -/turf/simulated/floor, -/area/station/medical/medbay/cloner) +/turf/simulated/floor/white, +/area/station/medical/medbay) "kNC" = ( /obj/machinery/door/airlock/pyro/engineering{ dir = 4 @@ -64222,6 +63575,15 @@ }, /turf/simulated/floor, /area/station/engine/coldloop) +"kOi" = ( +/obj/machinery/traymachine/morgue{ + dir = 2 + }, +/obj/decal/tile_edge/stripe/extra_big{ + dir = 4 + }, +/turf/simulated/floor/sanitary, +/area/station/medical/morgue) "kOo" = ( /obj/machinery/shuttle/engine/heater/seaheater_left{ pixel_y = -14; @@ -64249,6 +63611,9 @@ dir = 6 }, /area/space) +"kPs" = ( +/turf/simulated/wall/auto/reinforced/supernorn, +/area/station/medical/maintenance) "kPA" = ( /obj/machinery/atmospherics/pipe/simple/color_pipe/cyan_pipe{ dir = 10 @@ -64365,6 +63730,14 @@ }, /turf/simulated/floor/plating/airless, /area/space) +"kUz" = ( +/obj/machinery/door/airlock/pyro/maintenance{ + dir = 4 + }, +/obj/mapping_helper/access/medical, +/obj/mapping_helper/firedoor_spawn, +/turf/simulated/floor/plating, +/area/station/maintenance/south) "kUW" = ( /obj/grille/catwalk{ dir = 4 @@ -64380,6 +63753,10 @@ dir = 4 }, /area/space) +"kVf" = ( +/obj/disposalpipe/segment/bent/south, +/turf/simulated/floor/sanitary/blue, +/area/station/medical/morgue) "kVj" = ( /obj/machinery/conveyor/SN{ name = "cargo belt - north"; @@ -64444,13 +63821,24 @@ /obj/decal/stripe_delivery, /turf/simulated/floor, /area/station/quartermaster/refinery) +"kXl" = ( +/obj/disposalpipe/junction{ + dir = 4 + }, +/obj/cable{ + icon_state = "2-8" + }, +/turf/simulated/floor/specialroom/medbay, +/area/station/medical/medbay/lobby) "kXx" = ( -/obj/machinery/synthomatic, -/obj/machinery/light_switch/north, -/turf/simulated/floor/greenwhite{ - dir = 1 +/obj/machinery/disposal{ + name = "monkeydome chute" }, -/area/station/medical/cdc) +/obj/disposalpipe/trunk/transport, +/turf/simulated/floor/greenwhite, +/area/station/medical/research{ + name = "Genetic Research" + }) "kYb" = ( /obj/machinery/light/lamp/black, /obj/table/reinforced/chemistry/auto/basicsup, @@ -64552,6 +63940,18 @@ /obj/mapping_helper/access/security, /turf/simulated/floor/red, /area/station/security/checkpoint/escape) +"ldY" = ( +/obj/cable{ + icon_state = "4-8" + }, +/obj/cable{ + icon_state = "1-8" + }, +/obj/machinery/atmospherics/pipe/simple/color_pipe/cyan_pipe{ + dir = 5 + }, +/turf/simulated/floor/white, +/area/station/medical/medbay) "leg" = ( /obj/machinery/computer/solar_control/east{ dir = 8 @@ -64578,11 +63978,12 @@ /turf/simulated/floor, /area/station/engine/coldloop) "leN" = ( -/obj/disposalpipe/segment/mail/vertical, -/obj/table/auto, -/obj/machinery/defib_mount, -/turf/simulated/floor/white, -/area/station/medical/medbay/surgery) +/obj/machinery/vending/medical, +/obj/machinery/light/incandescent, +/turf/simulated/floor/bluewhite{ + dir = 1 + }, +/area/station/medical/medbay) "lfh" = ( /obj/grille/catwalk, /turf/simulated/floor/airless/plating/catwalk{ @@ -64615,15 +64016,21 @@ name = "Engineering Control Room" }) "lhG" = ( -/obj/machinery/firealarm/east, -/obj/table/reinforced/chemistry/auto, -/obj/machinery/glass_recycler, -/obj/item/storage/box/beakerbox{ - pixel_y = 4 +/obj/table/reinforced/auto, +/obj/machinery/cashreg{ + pixel_y = 2 + }, +/obj/mapping_helper/firedoor_spawn, +/obj/machinery/door/airlock/pyro/glass/windoor{ + dir = 1; + autoclose = 0 + }, +/obj/mapping_helper/access/medical, +/obj/item/kitchen/food_box/lollipop{ + pixel_x = 9 }, -/obj/item/reagent_containers/glass/beaker/large, /turf/simulated/floor/black, -/area/station/medical/medbay/pharmacy) +/area/station/medical/medbay/reception) "lhJ" = ( /obj/mapping_helper/wingrille_spawn/auto/reinforced, /obj/disposalpipe/segment{ @@ -64631,6 +64038,15 @@ }, /turf/simulated/floor/blueblack, /area/station/hangar/main) +"lhP" = ( +/obj/cable{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/color_pipe/cyan_pipe{ + dir = 4 + }, +/turf/simulated/floor/white, +/area/station/medical/medbay) "lit" = ( /obj/machinery/door/airlock/pyro/glass{ dir = 1 @@ -64656,18 +64072,9 @@ /turf/simulated/floor/plating/airless, /area/station/engine/core) "liV" = ( -/obj/machinery/camera{ - c_tag = "autotag"; - dir = 4; - name = "autoname - SS13"; - pixel_x = -10; - tag = "" - }, -/obj/machinery/computer/chem_requester/medical{ - dir = 4 - }, -/turf/simulated/floor/blue, -/area/station/medical/medbay) +/obj/storage/secure/closet/medical/chemical, +/turf/simulated/floor/carpet/blue/fancy/edge/sw, +/area/station/medical/head) "lje" = ( /obj/grille/catwalk{ dir = 4 @@ -64720,18 +64127,21 @@ /turf/simulated/floor/plating/airless, /area/station/engine/inner) "lmh" = ( -/obj/machinery/door/airlock/pyro/glass{ - name = "Pharmacy" +/obj/table/reinforced/auto, +/obj/health_scanner/wall{ + find_in_range = 0; + id = "lobby_south"; + dir = 4; + pixel_x = 5 }, -/obj/cable{ - icon_state = "1-2" +/obj/machinery/door/airlock/pyro/glass/windoor{ + dir = 8; + autoclose = 0 }, -/obj/disposalpipe/segment/mail/vertical, -/obj/mapping_helper/firedoor_spawn, /obj/mapping_helper/access/medical, -/obj/decal/stripe_delivery, -/turf/simulated/floor, -/area/station/medical/medbay/pharmacy) +/obj/mapping_helper/firedoor_spawn, +/turf/simulated/floor/black, +/area/station/medical/medbay/reception) "lmD" = ( /obj/cable/yellow{ icon_state = "2-4" @@ -64741,6 +64151,14 @@ dir = 9 }, /area/space) +"lmZ" = ( +/obj/machinery/door/airlock/pyro/glass/med{ + dir = 4 + }, +/obj/mapping_helper/access/medlocker, +/obj/mapping_helper/firedoor_spawn, +/turf/simulated/floor/blue, +/area/station/medical/medbay/pharmacy) "lnj" = ( /turf/unsimulated/floor/shuttle/green{ dir = 4 @@ -64752,6 +64170,10 @@ /obj/mapping_helper/firedoor_spawn, /turf/simulated/floor/black, /area/station/hangar/main) +"los" = ( +/obj/machinery/atmospherics/unary/vent_pump, +/turf/simulated/floor/white, +/area/station/medical/medbay/cloner) "lpR" = ( /obj/machinery/door/airlock/pyro/glass{ dir = 4 @@ -64788,16 +64210,21 @@ }, /area/station/quartermaster/office) "lrL" = ( -/obj/machinery/autoclave, -/obj/machinery/light{ - dir = 4; - layer = 9.1; - pixel_x = 10 +/obj/cable{ + icon_state = "1-2" }, -/turf/simulated/floor/greenwhite{ - dir = 5 +/obj/disposalpipe/segment/mail/vertical, +/turf/simulated/floor/greenwhite, +/area/station/medical/research{ + name = "Genetic Research" + }) +"lst" = ( +/obj/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/simple/color_pipe/cyan_pipe{ + dir = 6 }, -/area/station/medical/cdc) +/turf/simulated/floor/specialroom/medbay, +/area/station/medical/medbay/lobby) "ltv" = ( /obj/disposalpipe/segment/mineral{ dir = 4 @@ -64885,20 +64312,6 @@ /mob/living/critter/small_animal/walrus, /turf/simulated/floor/pool/no_animate, /area/station/crew_quarters/pool) -"lwF" = ( -/obj/disposalpipe/segment, -/obj/machinery/door/airlock/pyro/glass{ - id = "medbay_entrance"; - name = "Medbay Entrance" - }, -/obj/mapping_helper/firedoor_spawn, -/obj/machinery/secscanner{ - pixel_y = 10 - }, -/obj/mapping_helper/access/medical, -/obj/decal/stripe_delivery, -/turf/simulated/floor, -/area/station/medical/medbay) "lwP" = ( /obj/cable{ icon_state = "4-8" @@ -64994,24 +64407,26 @@ /turf/simulated/floor, /area/station/engine/hotloop) "lDc" = ( -/obj/machinery/power/data_terminal, -/obj/table/auto, -/obj/cable, -/obj/machinery/networked/printer{ - name = "Printer - Genetics"; - pixel_y = 5; - print_id = "Genetics" +/obj/stool/chair/comfy{ + dir = 4 }, -/turf/simulated/floor/greenwhite{ - dir = 1 +/obj/landmark/start/job/medical_doctor, +/obj/cable{ + icon_state = "4-8" }, -/area/station/medical/research{ - name = "Genetic Research" - }) +/obj/disposalpipe/segment/vertical, +/turf/simulated/floor/carpet/arcade, +/area/station/medical/staff) "lDu" = ( /obj/effects/background_objects/mundus, /turf/space, /area/space) +"lEO" = ( +/obj/cable{ + icon_state = "1-8" + }, +/turf/simulated/floor/plating, +/area/station/maintenance/solar/south) "lFg" = ( /obj/grille/catwalk{ dir = 4 @@ -65039,6 +64454,28 @@ dir = 10 }, /area/station/medical/medbooth) +"lFI" = ( +/obj/table/reinforced/chemistry/auto, +/obj/item/storage/box/patchbox{ + pixel_x = 8 + }, +/obj/item/storage/box/patchbox{ + pixel_x = 8; + pixel_y = -4 + }, +/obj/item/storage/box/patchbox{ + pixel_x = 8; + pixel_y = -10 + }, +/obj/item/paper/book/from_file/pharmacopia{ + pixel_x = -8 + }, +/obj/machinery/power/apc/autoname_west, +/obj/cable{ + icon_state = "0-4" + }, +/turf/simulated/floor/black, +/area/station/medical/medbay/reception) "lGp" = ( /obj/mapping_helper/firedoor_spawn, /obj/machinery/door/airlock/pyro/glass{ @@ -65059,6 +64496,13 @@ /obj/mapping_helper/firedoor_spawn, /turf/simulated/floor/black, /area/station/medical/robotics) +"lGZ" = ( +/obj/disposalpipe/switch_junction/right/east{ + mail_tag = "medical director"; + name = "mail junction (medical director)" + }, +/turf/simulated/floor/white, +/area/station/medical/medbay) "lHq" = ( /obj/table/reinforced/bar/auto, /obj/item/reagent_containers/food/drinks/bowl, @@ -65087,16 +64531,6 @@ icon_state = "fpurple3" }, /area/station/crew_quarters/cafeteria) -"lIa" = ( -/obj/cable/orange{ - icon_state = "4-8" - }, -/obj/machinery/door/airlock/pyro/external{ - dir = 4 - }, -/obj/mapping_helper/firedoor_spawn, -/turf/simulated/floor/caution/westeast, -/area/station/maintenance/central) "lKv" = ( /obj/machinery/door/airlock/pyro/maintenance{ dir = 4; @@ -65163,12 +64597,28 @@ /obj/mapping_helper/wingrille_spawn/auto/reinforced/crystal, /turf/simulated/floor/plating, /area/station/turret_protected/ai) -"lNu" = ( -/obj/machinery/centrifuge, -/turf/simulated/floor/greenwhite{ +"lME" = ( +/obj/machinery/door/airlock/pyro/medical{ dir = 4 }, -/area/station/medical/cdc) +/obj/cable{ + icon_state = "4-8" + }, +/obj/mapping_helper/access/medical, +/turf/simulated/floor/plating, +/area/station/medical/maintenance) +"lNu" = ( +/obj/cable{ + icon_state = "1-8" + }, +/obj/cable{ + icon_state = "4-8" + }, +/obj/disposalpipe/segment/mail/vertical, +/turf/simulated/floor/blue/side{ + dir = 1 + }, +/area/station/medical/medbay/surgery/storage) "lNJ" = ( /obj/machinery/conveyor/EW{ move_lag = 30; @@ -65249,6 +64699,19 @@ /obj/decal/stripe_delivery, /turf/simulated/floor, /area/station/hallway/secondary/entry) +"lQf" = ( +/obj/machinery/door/airlock/pyro/external, +/obj/forcefield/energyshield/perma/doorlink{ + desc = "A door-linked force field that prevents gasses from passing through it."; + name = "Door-linked Atmospheric Forcefield"; + powerlevel = 1 + }, +/obj/mapping_helper/airlock/cycler{ + name = "North East Maintenance"; + cycle_id = "ne_maint" + }, +/turf/simulated/floor/caution/northsouth, +/area/station/maintenance/northeast) "lQM" = ( /obj/decal/tile_edge/line/blue{ dir = 1; @@ -65261,6 +64724,29 @@ /obj/table/reinforced/auto, /turf/simulated/floor/engine, /area/station/hallway/primary/west) +"lRi" = ( +/obj/cable{ + icon_state = "1-2" + }, +/obj/disposalpipe/segment/vertical, +/turf/simulated/floor/bluewhite{ + dir = 6 + }, +/area/station/medical/medbay/lobby) +"lSO" = ( +/obj/machinery/door/airlock/pyro/external, +/obj/mapping_helper/firedoor_spawn, +/obj/forcefield/energyshield/perma/doorlink{ + desc = "A door-linked force field that prevents gasses from passing through it."; + name = "Door-linked Atmospheric Forcefield"; + powerlevel = 1 + }, +/obj/mapping_helper/airlock/cycler{ + name = "North East Maintenance"; + cycle_id = "ne_maint2" + }, +/turf/simulated/floor/plating, +/area/station/maintenance/northeast) "lTm" = ( /obj/machinery/door/poddoor/pyro/shutters{ density = 0; @@ -65293,6 +64779,12 @@ /mob/living/critter/small_animal/mouse/remy, /turf/simulated/floor/white, /area/station/crew_quarters/kitchen) +"lUL" = ( +/obj/disposalpipe/segment/morgue{ + dir = 4 + }, +/turf/simulated/floor/specialroom/medbay, +/area/station/medical/medbay/lobby) "lUQ" = ( /obj/grille/catwalk{ dir = 9 @@ -65320,6 +64812,31 @@ name = "very reinforced wall" }, /area/station/mining/staff_room) +"lWs" = ( +/obj/machinery/door/airlock/pyro/external, +/obj/forcefield/energyshield/perma/doorlink{ + desc = "A door-linked force field that prevents gasses from passing through it."; + name = "Door-linked Atmospheric Forcefield"; + powerlevel = 1 + }, +/obj/mapping_helper/airlock/cycler{ + name = "South East Maintenance"; + cycle_id = "se_maint2" + }, +/turf/simulated/floor/caution/northsouth, +/area/station/maintenance/southeast) +"lXu" = ( +/obj/machinery/power/apc{ + areastring = "Medbay Staff Area"; + dir = 8; + name = "Medbay Staff Room APC"; + pixel_x = -24 + }, +/obj/cable{ + icon_state = "0-4" + }, +/turf/simulated/floor/plating, +/area/station/maintenance/south) "lYA" = ( /obj/mapping_helper/firedoor_spawn, /obj/machinery/door/airlock/pyro/glass{ @@ -65349,16 +64866,6 @@ dir = 1 }, /area/station/engine/inner) -"lZd" = ( -/obj/mapping_helper/firedoor_spawn, -/obj/machinery/door/airlock/pyro/external, -/obj/forcefield/energyshield/perma/doorlink{ - desc = "A door-linked force field that prevents gasses from passing through it."; - name = "Door-linked Atmospheric Forcefield"; - powerlevel = 1 - }, -/turf/simulated/floor, -/area/station/maintenance/northeast) "lZC" = ( /obj/disposalpipe/segment/mail/vertical, /obj/grille/catwalk, @@ -65403,6 +64910,9 @@ /obj/machinery/light/small, /turf/simulated/floor/grey/blackgrime, /area/station/hangar/science) +"mbH" = ( +/turf/simulated/floor/white, +/area/station/medical/medbay/cloner) "mbI" = ( /obj/machinery/door/airlock/pyro/glass, /obj/machinery/atmospherics/pipe/simple/color_pipe/cyan_pipe{ @@ -65423,6 +64933,22 @@ }, /turf/simulated/floor/grey/blackgrime, /area/station/hangar/science) +"mcQ" = ( +/obj/machinery/door/airlock/pyro/external, +/obj/cable{ + icon_state = "1-2" + }, +/obj/forcefield/energyshield/perma/doorlink{ + desc = "A door-linked force field that prevents gasses from passing through it."; + name = "Door-linked Atmospheric Forcefield"; + powerlevel = 1 + }, +/obj/mapping_helper/airlock/cycler{ + name = "Auxillary Storage"; + cycle_id = "auxstorage" + }, +/turf/simulated/floor/caution/northsouth, +/area/station/storage/auxillary) "mdu" = ( /obj/machinery/door/airlock/pyro/external{ dir = 4; @@ -65453,17 +64979,15 @@ icon_state = "catwalk_cross" }, /area/station/solar/small_backup2) -"mdD" = ( -/obj/machinery/door/airlock/pyro/external, -/obj/mapping_helper/firedoor_spawn, -/obj/decal/stripe_delivery, -/obj/forcefield/energyshield/perma/doorlink{ - desc = "A door-linked force field that prevents gasses from passing through it."; - name = "Door-linked Atmospheric Forcefield"; - powerlevel = 1 +"mdC" = ( +/obj/disposalpipe/segment/transport, +/turf/simulated/floor/carpet{ + dir = 6; + icon_state = "blue2" }, -/turf/simulated/floor, -/area/station/maintenance/solar/north) +/area/station/medical/research{ + name = "Genetic Research" + }) "mdZ" = ( /obj/machinery/atmospherics/binary/valve{ dir = 4 @@ -65483,6 +65007,23 @@ /obj/machinery/firealarm/north, /turf/simulated/floor/grass/leafy, /area/station/garden/owlery) +"mgK" = ( +/obj/machinery/door/airlock/pyro/external, +/obj/cable{ + icon_state = "1-2" + }, +/obj/mapping_helper/firedoor_spawn, +/obj/forcefield/energyshield/perma/doorlink{ + desc = "A door-linked force field that prevents gasses from passing through it."; + name = "Door-linked Atmospheric Forcefield"; + powerlevel = 1 + }, +/obj/mapping_helper/airlock/cycler{ + name = "Auxillary Storage"; + cycle_id = "auxstorage" + }, +/turf/simulated/floor/grime, +/area/station/storage/auxillary) "mgV" = ( /obj/submachine/seed_manipulator{ dir = 4 @@ -65518,25 +65059,24 @@ /obj/machinery/light, /turf/simulated/floor/grass/leafy, /area/station/ranch) +"mhP" = ( +/obj/cable{ + icon_state = "4-8" + }, +/obj/disposalpipe/segment/mail/bent/south, +/turf/simulated/floor/white, +/area/station/medical/medbay) "mil" = ( /obj/machinery/door/airlock/pyro/glass{ dir = 4 }, /obj/mapping_helper/firedoor_spawn, /obj/decal/stripe_delivery, -/turf/simulated/floor, -/area/station/medical/medbay/lobby) -"mji" = ( -/obj/machinery/door/airlock/pyro/medical{ - name = "Genetic Research" +/obj/disposalpipe/segment/morgue{ + dir = 4 }, -/obj/mapping_helper/firedoor_spawn, -/obj/mapping_helper/access/medlab, -/obj/decal/stripe_delivery, /turf/simulated/floor, -/area/station/medical/research{ - name = "Genetic Research" - }) +/area/station/medical/medbay/lobby) "mjk" = ( /obj/disposalpipe/segment/mail/vertical, /obj/machinery/atmospherics/pipe/simple/color_pipe/cyan_pipe{ @@ -65544,6 +65084,13 @@ }, /turf/simulated/wall/auto/reinforced/supernorn, /area/station/security/checkpoint/podbay) +"mlC" = ( +/turf/simulated/floor/greenwhite{ + dir = 8 + }, +/area/station/medical/research{ + name = "Genetic Research" + }) "mmn" = ( /obj/mapping_helper/wingrille_spawn/auto/reinforced, /turf/simulated/floor, @@ -65627,6 +65174,20 @@ icon_state = "fgreen2" }, /area/station/hydroponics/bay) +"mqH" = ( +/obj/machinery/door/airlock/pyro/external, +/obj/mapping_helper/firedoor_spawn, +/obj/forcefield/energyshield/perma/doorlink{ + desc = "A door-linked force field that prevents gasses from passing through it."; + name = "Door-linked Atmospheric Forcefield"; + powerlevel = 1 + }, +/obj/mapping_helper/airlock/cycler{ + name = "South East Maintenance"; + cycle_id = "se_maint2" + }, +/turf/simulated/floor/plating, +/area/station/maintenance/southeast) "mrr" = ( /obj/cable/orange{ icon_state = "1-8" @@ -65747,6 +65308,21 @@ }, /turf/simulated/wall/auto/supernorn, /area/station/science/bot_storage) +"mzr" = ( +/obj/machinery/door/airlock/pyro/external, +/obj/mapping_helper/firedoor_spawn, +/obj/decal/stripe_delivery, +/obj/forcefield/energyshield/perma/doorlink{ + desc = "A door-linked force field that prevents gasses from passing through it."; + name = "Door-linked Atmospheric Forcefield"; + powerlevel = 1 + }, +/obj/mapping_helper/airlock/cycler{ + name = "South Solar Maintenance"; + cycle_id = "southsolar" + }, +/turf/simulated/floor, +/area/station/maintenance/solar/south) "mzz" = ( /obj/securearea{ desc = "This hazard stripe marks a high-intensity beamline."; @@ -65830,13 +65406,13 @@ }, /area/station/security/main) "mCf" = ( -/obj/table/auto, -/obj/machinery/coffeemaker/medbay, -/obj/drink_rack/mug{ - pixel_x = -26 +/obj/submachine/chef_sink/chem_sink{ + dir = 4; + pixel_x = -8 }, +/obj/storage/secure/closet/medical/medkit, /turf/simulated/floor/blue, -/area/station/medical/medbay) +/area/station/medical/medbay/pharmacy) "mDn" = ( /obj/cable{ icon_state = "4-8" @@ -65862,6 +65438,13 @@ }, /turf/simulated/floor/blue, /area/station/science/lab) +"mDB" = ( +/obj/stool/chair/couch/blue{ + dir = 4 + }, +/obj/landmark/start/job/medical_doctor, +/turf/simulated/floor/carpet/blue/fancy/narrow/T_north, +/area/station/medical/medbay/psychiatrist) "mFx" = ( /obj/mapping_helper/firedoor_spawn, /obj/machinery/door/airlock/pyro/glass{ @@ -65919,6 +65502,13 @@ /obj/decal/stripe_delivery, /turf/simulated/floor, /area/station/crew_quarters/cafeteria) +"mHt" = ( +/obj/disposalpipe/segment/morgue{ + dir = 4; + icon_state = "pipe-c" + }, +/turf/simulated/floor/plating, +/area/station/maintenance/south) "mHY" = ( /obj/disposalpipe/segment/mail/bent/south, /obj/machinery/atmospherics/pipe/simple/overfloor{ @@ -66032,6 +65622,14 @@ /obj/decal/stripe_delivery, /turf/simulated/floor, /area/station/maintenance/northeast) +"mMO" = ( +/obj/storage/closet/emergency, +/obj/item/crowbar/red, +/obj/item/crowbar/red, +/turf/unsimulated/floor/shuttle/green{ + dir = 4 + }, +/area/shuttle/arrival/station) "mNd" = ( /obj/machinery/firealarm/west, /obj/submachine/ATM{ @@ -66041,6 +65639,11 @@ dir = 9 }, /area/station/crew_quarters/market) +"mNS" = ( +/obj/disposalpipe/segment/transport, +/obj/disposalpipe/segment/horizontal, +/turf/simulated/floor, +/area/station/medical/medbay/surgery/storage) "mNY" = ( /obj/decal/stripe_delivery, /obj/machinery/door/airlock/pyro/reinforced/syndicate{ @@ -66156,16 +65759,6 @@ }, /turf/simulated/floor, /area/station/science/lab) -"mSY" = ( -/obj/machinery/door/airlock/pyro/maintenance, -/obj/cable{ - icon_state = "1-2" - }, -/obj/mapping_helper/firedoor_spawn, -/obj/mapping_helper/access/medical, -/obj/decal/stripe_delivery, -/turf/simulated/floor, -/area/station/medical/medbay) "mTJ" = ( /obj/stool/chair{ dir = 8 @@ -66175,6 +65768,12 @@ icon_state = "carpetSE" }, /area/station/crew_quarters/cafeteria) +"mUH" = ( +/obj/machinery/atmospherics/pipe/simple/color_pipe/cyan_pipe{ + dir = 4 + }, +/turf/simulated/floor/white, +/area/station/medical/medbay) "mVc" = ( /obj/machinery/navbeacon/tour/cog2/tour2, /turf/simulated/floor, @@ -66233,14 +65832,6 @@ }, /turf/simulated/floor/shuttlebay, /area/station/maintenance/east) -"mZL" = ( -/obj/machinery/door/airlock/pyro/external, -/obj/mapping_helper/firedoor_spawn, -/obj/machinery/atmospherics/pipe/simple/color_pipe/cyan_pipe/overfloor{ - dir = 1 - }, -/turf/simulated/floor/caution/northsouth, -/area/station/maintenance/central) "nau" = ( /obj/disposalpipe/segment{ dir = 4 @@ -66255,17 +65846,12 @@ /turf/simulated/floor/plating, /area/station/ranch) "nct" = ( -/obj/table/auto, -/obj/item/clipboard, -/obj/item/storage/pill_bottle/mutadone, -/obj/machinery/firealarm/west, -/obj/disposalpipe/segment/transport, -/turf/simulated/floor/greenwhite{ - dir = 8 +/obj/machinery/firealarm/north, +/obj/storage/secure/closet/animal, +/turf/simulated/floor/grass{ + name = "astroturf" }, -/area/station/medical/research{ - name = "Genetic Research" - }) +/area/station/medical/dome) "ndb" = ( /obj/disposalpipe/segment/mail/horizontal, /turf/simulated/floor/arrival/corner{ @@ -66305,16 +65891,17 @@ /turf/simulated/floor/engine, /area/station/ai_monitored/armory) "nkn" = ( -/obj/machinery/firealarm/east, -/obj/storage/secure/closet/fridge/pathology{ - req_access_txt = "5" - }, -/obj/item/reagent_containers/food/snacks/agar_block, -/obj/item/reagent_containers/food/snacks/yuck, -/turf/simulated/floor/greenwhite{ +/obj/table/auto, +/obj/item/device/analyzer/healthanalyzer, +/obj/item/device/analyzer/healthanalyzer, +/obj/item/gun/implanter, +/obj/item/reagent_containers/dropper/mechanical, +/obj/item/reagent_containers/dropper/mechanical, +/obj/disposalpipe/segment/mail/bent/west, +/turf/simulated/floor/blue/side{ dir = 4 }, -/area/station/medical/cdc) +/area/station/medical/medbay/surgery/storage) "nkH" = ( /obj/machinery/conveyor/SN{ id = "chapel" @@ -66326,9 +65913,17 @@ /turf/simulated/floor, /area/station/chapel/sanctuary) "nlY" = ( -/obj/disposalpipe/segment/mail/horizontal, -/turf/simulated/wall/auto/supernorn, -/area/station/medical/medbay/pharmacy) +/obj/machinery/door/airlock/pyro/glass{ + id = "medbay_entrance"; + name = "Medbay Entrance" + }, +/obj/mapping_helper/firedoor_spawn, +/obj/cable{ + icon_state = "1-2" + }, +/obj/disposalpipe/segment/vertical, +/turf/simulated/floor/white, +/area/station/medical/medbay/lobby) "nmD" = ( /obj/cable{ icon_state = "4-8" @@ -66339,6 +65934,13 @@ }, /turf/simulated/floor/grey/blackgrime, /area/station/hangar/catering) +"nmJ" = ( +/obj/disposalpipe/segment/morgue{ + dir = 4; + icon_state = "pipe-c" + }, +/turf/simulated/floor/specialroom/medbay, +/area/station/medical/medbay/lobby) "nmZ" = ( /obj/grille/catwalk{ dir = 5 @@ -66394,6 +65996,11 @@ dir = 5 }, /area/research_outpost/hangar) +"nom" = ( +/turf/simulated/floor/redwhite/corner{ + dir = 4 + }, +/area/station/medical/medbay/surgery) "noQ" = ( /obj/cable/orange{ icon_state = "1-8" @@ -66430,20 +66037,10 @@ name = "Engineering Control Room" }) "nqc" = ( -/obj/item/device/radio/intercom/medical, -/obj/storage/secure/closet/medical{ - name = "locker" - }, -/obj/disposalpipe/switch_junction/left/north{ - mail_tag = "genetics"; - name = "mail junction (genetics)" - }, -/turf/simulated/floor/greenwhite{ - dir = 1 - }, -/area/station/medical/research{ - name = "Genetic Research" - }) +/obj/reagent_dispensers/watertank/fountain, +/obj/machinery/light, +/turf/simulated/floor/carpet/arcade, +/area/station/medical/staff) "nqk" = ( /obj/machinery/photocopier, /turf/simulated/floor/wood{ @@ -66595,6 +66192,17 @@ /obj/decal/stripe_delivery, /turf/simulated/floor, /area/station/science/lab) +"nBB" = ( +/obj/machinery/computer3/generic/med_data{ + dir = 4 + }, +/obj/blind_switch/area/west, +/obj/cable{ + icon_state = "0-4" + }, +/obj/machinery/power/data_terminal, +/turf/simulated/floor/carpet/blue/fancy/narrow/T_west, +/area/station/medical/medbay/psychiatrist) "nCl" = ( /obj/cable/yellow{ icon_state = "1-2" @@ -66637,19 +66245,6 @@ /obj/machinery/firealarm/west, /turf/simulated/floor/plating, /area/station/engine/substation/west) -"nFC" = ( -/obj/machinery/door/airlock/pyro/external{ - req_access_txt = "40" - }, -/obj/mapping_helper/firedoor_spawn, -/obj/decal/stripe_delivery, -/obj/forcefield/energyshield/perma/doorlink{ - desc = "A door-linked force field that prevents gasses from passing through it."; - name = "Door-linked Atmospheric Forcefield"; - powerlevel = 1 - }, -/turf/simulated/floor, -/area/station/engine/substation/east) "nFV" = ( /obj/grille/catwalk, /obj/cable{ @@ -66665,30 +66260,25 @@ /obj/decal/cleanable/oil, /turf/simulated/floor/shuttlebay, /area/station/security/checkpoint/podbay) -"nHY" = ( -/obj/table/reinforced/auto, -/obj/machinery/door/poddoor/pyro/shutters{ - density = 0; - dir = 4; - icon_state = "pdoor0"; - id = "chemistry"; - name = "Chemistry Privacy Shutters"; - opacity = 0 - }, -/obj/mapping_helper/firedoor_spawn, -/obj/item/storage/box/beakerbox{ - pixel_y = 4 - }, -/obj/decal/stripe_caution, -/obj/disposalpipe/segment/mail/horizontal, -/turf/simulated/floor, -/area/station/science/chemistry) "nIx" = ( /obj/table/auto, /obj/random_item_spawner/medicine, /obj/machinery/firealarm/west, /turf/simulated/floor/grime, /area/station/crew_quarters/quarters_east) +"nIZ" = ( +/obj/disposalpipe/segment/mail/horizontal, +/turf/simulated/floor/carpet{ + icon_state = "blue2" + }, +/area/station/medical/research{ + name = "Genetic Research" + }) +"nJi" = ( +/turf/simulated/floor/redwhite/corner{ + dir = 8 + }, +/area/station/medical/medbay/surgery) "nJk" = ( /obj/grille/catwalk{ dir = 6 @@ -66712,9 +66302,14 @@ /turf/simulated/floor/grime, /area/station/science/lab) "nKf" = ( -/obj/machinery/incubator, -/turf/simulated/floor/white, -/area/station/medical/cdc) +/obj/stool/chair/comfy/wheelchair, +/obj/cable{ + icon_state = "2-4" + }, +/turf/simulated/floor/blue/side{ + dir = 1 + }, +/area/station/medical/medbay/surgery/storage) "nLi" = ( /obj/landmark/magnet_shield, /obj/securearea{ @@ -66747,6 +66342,22 @@ /obj/machinery/firealarm/west, /turf/simulated/floor/plating, /area/station/engine/inner) +"nMM" = ( +/obj/machinery/door/airlock/pyro/external, +/obj/machinery/atmospherics/pipe/simple/color_pipe/green_pipe{ + dir = 1 + }, +/obj/forcefield/energyshield/perma/doorlink{ + desc = "A door-linked force field that prevents gasses from passing through it."; + name = "Door-linked Atmospheric Forcefield"; + powerlevel = 1 + }, +/obj/mapping_helper/airlock/cycler{ + name = "North Maintenance"; + cycle_id = "n_maint" + }, +/turf/simulated/floor/caution/northsouth, +/area/station/maintenance/north) "nNE" = ( /obj/grille/catwalk{ dir = 9 @@ -66824,6 +66435,22 @@ icon_state = "engine_caution_misc" }, /area/research_outpost/chamber) +"nQK" = ( +/obj/machinery/door/airlock/pyro/external{ + dir = 4 + }, +/obj/forcefield/energyshield/perma/doorlink{ + desc = "A door-linked force field that prevents gasses from passing through it."; + dir = 4; + name = "Door-linked Atmospheric Forcefield"; + powerlevel = 1 + }, +/obj/mapping_helper/airlock/cycler{ + name = "Central Maintenance"; + cycle_id = "c_maint2" + }, +/turf/simulated/floor/caution/westeast, +/area/station/maintenance/central) "nRm" = ( /obj/stool/chair{ dir = 4 @@ -66919,6 +66546,19 @@ }, /turf/simulated/floor/plating, /area/station/maintenance/central) +"nYf" = ( +/obj/machinery/door/airlock/pyro/external, +/obj/mapping_helper/firedoor_spawn, +/obj/machinery/atmospherics/pipe/simple/color_pipe/cyan_pipe/overfloor{ + dir = 1 + }, +/obj/mapping_helper/airlock/cycler{ + name = "Central Maintenance"; + cycle_id = "c_maint4"; + enter_id = "inner" + }, +/turf/simulated/floor/caution/northsouth, +/area/station/maintenance/central) "nYN" = ( /obj/machinery/vehicle/miniputt/armed{ dir = 8 @@ -67080,6 +66720,16 @@ /area/station/crew_quarters/info{ name = "Net Cafe" }) +"ofi" = ( +/obj/cable{ + icon_state = "1-2" + }, +/obj/disposalpipe/segment/morgue, +/obj/cable{ + icon_state = "1-4" + }, +/turf/simulated/floor/plating, +/area/station/maintenance/south) "ofP" = ( /obj/machinery/door/airlock/pyro/maintenance{ dir = 4 @@ -67120,6 +66770,15 @@ /obj/machinery/computer/chem_request_receiver, /turf/simulated/floor/purple, /area/station/science/chemistry) +"oiN" = ( +/obj/machinery/light/incandescent, +/obj/machinery/computer/operating{ + dir = 8 + }, +/turf/simulated/floor/redwhite{ + dir = 6 + }, +/area/station/medical/medbay/surgery) "oje" = ( /obj/landmark/random_room/size3x3, /turf/simulated/floor/plating, @@ -67262,6 +66921,15 @@ dir = 5 }, /area/mining/magnet) +"opr" = ( +/obj/submachine/chef_sink/chem_sink{ + dir = 8; + pixel_x = 4 + }, +/turf/simulated/floor/redwhite{ + dir = 4 + }, +/area/station/medical/medbay/surgery) "opE" = ( /obj/cable{ icon_state = "4-8" @@ -67308,6 +66976,13 @@ /obj/machinery/drainage, /turf/simulated/floor/plating, /area/station/crew_quarters/catering) +"osd" = ( +/obj/storage/secure/closet/medical/cloning, +/obj/machinery/light/incandescent, +/turf/simulated/floor/bluewhite{ + dir = 8 + }, +/area/station/medical/medbay/cloner) "osq" = ( /obj/structure/girder, /obj/item/storage/pill_bottle/cyberpunk{ @@ -67329,6 +67004,19 @@ /obj/decal/stripe_delivery, /turf/simulated/floor, /area/station/maintenance/central) +"otO" = ( +/obj/bookshelf, +/obj/item/paper/book/from_file/cookbook{ + pixel_x = -4 + }, +/obj/item/paper/book/from_file/pharmacopia{ + pixel_x = 4 + }, +/obj/item/paper/book/from_file/medical_surgery_guide{ + pixel_y = -4 + }, +/turf/simulated/floor/carpet/blue/fancy/narrow/T_north, +/area/station/medical/medbay/psychiatrist) "otU" = ( /obj/machinery/atmospherics/pipe/simple/color_pipe/cyan_pipe{ dir = 10 @@ -67356,6 +67044,9 @@ /obj/decal/stripe_delivery, /turf/simulated/floor, /area/station/ai_monitored/armory) +"owx" = ( +/turf/simulated/floor/carpet/blue/fancy/innercorner/east, +/area/station/medical/medbay/psychiatrist) "owB" = ( /obj/machinery/door/airlock/pyro/medical{ dir = 4; @@ -67377,11 +67068,25 @@ }, /turf/simulated/floor/grass/leafy, /area/station/ranch) +"oyo" = ( +/obj/stool/chair/blue{ + dir = 8 + }, +/obj/item/device/radio/intercom/medical{ + broadcasting = 1; + dir = 8 + }, +/turf/simulated/floor/white, +/area/station/medical/medbay/lobby) "oyM" = ( /obj/table/reinforced/auto, /obj/decal/stripe_delivery, /turf/simulated/floor, /area/station/hallway/primary/east) +"ozR" = ( +/obj/mapping_helper/wingrille_spawn/auto/reinforced, +/turf/simulated/floor/plating, +/area/station/medical/medbay/reception) "oAf" = ( /obj/grille/catwalk{ dir = 4 @@ -67391,18 +67096,21 @@ }, /area/station/catwalk/north) "oAv" = ( -/obj/machinery/door/airlock/pyro/glass{ - name = "Staff Room" - }, -/obj/mapping_helper/firedoor_spawn, -/obj/mapping_helper/access/medical, -/obj/decal/stripe_delivery, -/turf/simulated/floor, -/area/station/medical/medbay) +/turf/simulated/floor/carpet/blue/fancy/innercorner/ne_triple, +/area/station/medical/medbay/psychiatrist) +"oAF" = ( +/obj/machinery/light/incandescent, +/obj/disposalpipe/segment/mail/vertical, +/turf/simulated/floor/blue/side, +/area/station/medical/medbay/lobby) "oCV" = ( /obj/machinery/status_display, /turf/simulated/wall/auto/supernorn, /area/station/science/chemistry) +"oDb" = ( +/obj/machinery/door/airlock/pyro/maintenance, +/turf/simulated/floor/plating, +/area/station/maintenance/south) "oDg" = ( /obj/lattice, /obj/cable/orange{ @@ -67410,6 +67118,10 @@ }, /turf/space, /area/space) +"oDm" = ( +/obj/machinery/firealarm/east, +/turf/simulated/floor/plating, +/area/station/maintenance/solar/south) "oEg" = ( /obj/disposalpipe/segment/mail/horizontal, /obj/machinery/firealarm/west, @@ -67463,10 +67175,6 @@ }, /turf/simulated/floor/plating, /area/station/security/main) -"oHZ" = ( -/obj/landmark/gps_waypoint, -/turf/simulated/floor/sanitary/white, -/area/station/medical/morgue) "oIB" = ( /obj/machinery/door/airlock/pyro/maintenance{ dir = 4 @@ -67492,6 +67200,12 @@ /obj/disposalpipe/segment, /turf/simulated/floor/plating, /area/station/storage/warehouse) +"oJc" = ( +/obj/cable{ + icon_state = "1-8" + }, +/turf/simulated/floor/carpet/blue/fancy/innercorner/south, +/area/station/medical/medbay/psychiatrist) "oJx" = ( /obj/machinery/door/airlock/pyro/glass{ dir = 4 @@ -67500,17 +67214,15 @@ /obj/decal/stripe_delivery, /turf/simulated/floor, /area/station/hallway/secondary/exit) +"oKd" = ( +/obj/disposalpipe/segment/vertical, +/turf/simulated/floor/sanitary/blue, +/area/station/medical/morgue) "oKm" = ( -/obj/table/auto, -/obj/machinery/light{ - dir = 8; - layer = 9.1; - pixel_x = -10 - }, -/obj/machinery/cashreg, -/obj/disposalpipe/segment/transport, +/obj/machinery/disposal, +/obj/disposalpipe/trunk/south, /turf/simulated/floor/greenwhite{ - dir = 9 + dir = 6 }, /area/station/medical/research{ name = "Genetic Research" @@ -67686,27 +67398,45 @@ }, /turf/simulated/floor/plating/random, /area/ghostdrone_factory) +"oSG" = ( +/obj/machinery/door/airlock/pyro/glass/med{ + id = "medbay_entrance" + }, +/obj/mapping_helper/access/medical, +/obj/mapping_helper/firedoor_spawn, +/obj/machinery/atmospherics/pipe/simple/color_pipe/cyan_pipe{ + dir = 1 + }, +/turf/simulated/floor/blue, +/area/station/medical/medbay) "oTP" = ( /obj/disposalpipe/segment/mail/horizontal, /obj/machinery/firealarm/north, /turf/simulated/floor/plating, /area/station/maintenance/east) "oUh" = ( -/obj/disposalpipe/segment/morgue{ - dir = 4 +/obj/item/device/radio/intercom/medical{ + dir = 1 }, -/obj/machinery/door/airlock/pyro/medical{ - dir = 4; - name = "Morgue" +/turf/simulated/floor/bluewhite, +/area/station/medical/medbay/cloner) +"oUl" = ( +/obj/table/wood/auto, +/obj/machinery/light/lamp/green{ + pixel_y = 12 }, /obj/cable{ - icon_state = "4-8" + icon_state = "1-2" }, -/obj/mapping_helper/firedoor_spawn, -/obj/mapping_helper/access/morgue, -/obj/decal/stripe_delivery, -/turf/simulated/floor, -/area/station/medical/morgue) +/obj/cable{ + icon_state = "2-4" + }, +/obj/disposalpipe/segment/mail/vertical, +/obj/cable{ + icon_state = "2-8" + }, +/turf/simulated/floor/carpet/blue, +/area/station/medical/head) "oUv" = ( /obj/cable/yellow{ icon_state = "2-4" @@ -67762,17 +67492,12 @@ /turf/simulated/floor/caution/corner/sw, /area/station/engine/hotloop) "oXu" = ( -/obj/machinery/door/airlock/pyro/command{ - name = "Medical Director's Office" - }, -/obj/cable{ - icon_state = "1-2" +/obj/shrub/random, +/obj/machinery/firealarm/west, +/turf/simulated/floor/bluewhite{ + dir = 9 }, -/obj/mapping_helper/firedoor_spawn, -/obj/mapping_helper/access/medical_director, -/obj/decal/stripe_delivery, -/turf/simulated/floor, -/area/station/medical/head) +/area/station/medical/medbay) "oYW" = ( /obj/stool/chair/dining/wood{ dir = 1 @@ -67838,14 +67563,27 @@ /turf/simulated/floor/orangeblack, /area/station/maintenance/central) "pcF" = ( -/obj/submachine/chef_sink/chem_sink{ - dir = 8; - pixel_x = 8 +/obj/machinery/door/airlock/pyro/glass/botany, +/obj/mapping_helper/firedoor_spawn, +/obj/mapping_helper/access/medlab, +/obj/decal/stripe_delivery, +/obj/cable{ + icon_state = "1-2" }, -/turf/simulated/floor/greenwhite{ - dir = 4 +/obj/disposalpipe/segment/mail/vertical, +/turf/simulated/floor/green, +/area/station/medical/research{ + name = "Genetic Research" + }) +"pcG" = ( +/obj/machinery/atmospherics/pipe/simple{ + dir = 5; + level = 2 }, -/area/station/medical/cdc) +/turf/simulated/floor/bluewhite{ + dir = 8 + }, +/area/station/medical/medbay) "pdD" = ( /obj/grille/catwalk, /obj/cable{ @@ -67861,10 +67599,9 @@ /turf/simulated/floor, /area/station/hydroponics/bay) "pdJ" = ( -/obj/disposalpipe/segment/mail/vertical, -/obj/machinery/drainage, -/turf/simulated/floor/greenwhite, -/area/station/medical/cdc) +/obj/machinery/light/incandescent, +/turf/simulated/floor/blue/side, +/area/station/medical/medbay/surgery/storage) "peq" = ( /obj/landmark/magnet_shield, /obj/securearea{ @@ -67913,15 +67650,16 @@ /obj/decal/stripe_delivery, /turf/simulated/floor, /area/station/hallway/primary/east) -"pgI" = ( -/obj/machinery/firealarm/west, -/obj/machinery/atmospherics/unary/vent_pump{ - dir = 1 +"pgN" = ( +/obj/cable{ + icon_state = "1-2" }, -/turf/simulated/floor/bluewhite{ - dir = 8 +/obj/disposalpipe/segment/mail/vertical, +/obj/cable{ + icon_state = "2-4" }, -/area/station/medical/medbay) +/turf/simulated/floor/carpet/blue, +/area/station/medical/head) "phh" = ( /obj/machinery/conveyor/EW{ name = "cargo belt - west"; @@ -67933,6 +67671,9 @@ /obj/disposalpipe/segment/mail/vertical, /turf/simulated/floor/plating, /area/station/routing/depot) +"pim" = ( +/turf/simulated/floor/carpet/blue/fancy/innercorner/nw_triple, +/area/station/medical/medbay/psychiatrist) "piU" = ( /obj/machinery/door/airlock/pyro{ dir = 4; @@ -67974,6 +67715,21 @@ dir = 8 }, /area/station/hallway/primary/east) +"pmo" = ( +/obj/machinery/power/apc{ + areastring = "Medbay Operating Theater"; + dir = 1; + name = "Surgery APC"; + pixel_y = 24 + }, +/obj/cable{ + icon_state = "0-2" + }, +/turf/simulated/floor/plating, +/area/station/maintenance/south) +"pmW" = ( +/turf/simulated/floor/carpet/blue/fancy/innercorner/se_triple, +/area/station/medical/medbay/psychiatrist) "pnO" = ( /obj/shrub{ dir = 1; @@ -68068,6 +67824,17 @@ }, /turf/simulated/floor/airless/engine/caution/misc, /area/station/hangar/science) +"psd" = ( +/obj/machinery/door/airlock/pyro/glass{ + dir = 4 + }, +/obj/mapping_helper/firedoor_spawn, +/obj/decal/stripe_delivery, +/obj/disposalpipe/segment/morgue{ + dir = 4 + }, +/turf/simulated/floor, +/area/station/crew_quarters/market) "psJ" = ( /obj/machinery/door/poddoor/pyro/shutters{ density = 0; @@ -68089,6 +67856,11 @@ }, /obj/mapping_helper/access/security, /obj/decal/stripe_delivery, +/obj/mapping_helper/airlock/cycler{ + cycle_id = "securityrelease"; + name = "Security Release Room"; + enter_id = "inner" + }, /turf/simulated/floor, /area/station/security/main) "psM" = ( @@ -68123,13 +67895,6 @@ /obj/decal/stripe_delivery, /turf/simulated/floor, /area/station/crew_quarters/catering) -"put" = ( -/mob/living/carbon/human/npc/monkey, -/obj/disposalpipe/segment/mail/horizontal, -/turf/simulated/floor/grass{ - name = "astroturf" - }, -/area/station/medical/dome) "puN" = ( /obj/machinery/light/small{ dir = 4; @@ -68226,10 +67991,6 @@ }, /turf/simulated/floor/plating/random, /area/ghostdrone_factory) -"pzu" = ( -/obj/machinery/firealarm/west, -/turf/simulated/floor/plating, -/area/station/medical/medbay) "pAo" = ( /obj/machinery/light, /turf/simulated/floor/shuttlebay, @@ -68269,19 +68030,6 @@ /obj/mapping_helper/firedoor_spawn, /turf/simulated/floor/sanitary, /area/station/hallway/primary/east) -"pCJ" = ( -/obj/machinery/door/airlock/pyro/glass{ - dir = 4; - name = "Operating Theater"; - req_access_txt = "5" - }, -/obj/mapping_helper/firedoor_spawn, -/obj/machinery/atmospherics/pipe/simple/color_pipe/cyan_pipe{ - dir = 4 - }, -/obj/decal/stripe_delivery, -/turf/simulated/floor, -/area/station/medical/medbay/surgery) "pCN" = ( /obj/stool/chair{ dir = 8 @@ -68339,14 +68087,6 @@ /obj/mapping_helper/wingrille_spawn/auto, /turf/simulated/floor/plating, /area/station/crew_quarters/arcade/dungeon) -"pHS" = ( -/obj/disposalpipe/segment/transport{ - icon_state = "pipe-c" - }, -/turf/simulated/floor/greenwhite, -/area/station/medical/research{ - name = "Genetic Research" - }) "pHX" = ( /obj/machinery/door/poddoor/pyro/shutters{ dir = 4; @@ -68402,6 +68142,12 @@ /obj/disposalpipe/segment/mail/vertical, /turf/simulated/floor/airless/plating/catwalk, /area/station/catwalk/north) +"pJX" = ( +/obj/disposalpipe/segment/vertical, +/turf/simulated/floor/blue/side{ + dir = 1 + }, +/area/station/medical/medbay/surgery/storage) "pJZ" = ( /obj/machinery/camera/television{ c_tag = "game room"; @@ -68614,11 +68360,9 @@ /turf/simulated/floor, /area/station/security/checkpoint/podbay) "pXX" = ( -/obj/cable{ - icon_state = "1-2" - }, -/turf/simulated/floor/greenwhite, -/area/station/medical/cdc) +/obj/machinery/firealarm/south, +/turf/simulated/floor/blue/side, +/area/station/medical/medbay/surgery/storage) "pYd" = ( /obj/machinery/atmospherics/unary/vent{ dir = 4 @@ -68655,6 +68399,14 @@ /obj/mapping_helper/firedoor_spawn, /turf/simulated/floor/sanitary, /area/station/crew_quarters/showers) +"pYP" = ( +/obj/machinery/door/airlock/pyro/glass/med{ + id = "cloning" + }, +/obj/mapping_helper/access/medical, +/obj/mapping_helper/firedoor_spawn, +/turf/simulated/floor/white, +/area/station/medical/medbay/cloner) "qak" = ( /obj/table/wood/auto, /obj/machinery/firealarm/east, @@ -68754,9 +68506,14 @@ /turf/simulated/floor/plating, /area/station/hangar/qm) "qiA" = ( -/obj/machinery/status_display, -/turf/simulated/wall/auto/supernorn, -/area/station/medical/medbay) +/obj/cable{ + icon_state = "1-2" + }, +/obj/disposalpipe/segment/mail/vertical, +/turf/simulated/floor/bluewhite{ + dir = 5 + }, +/area/station/medical/medbay/pharmacy) "qiD" = ( /obj/grille/catwalk{ dir = 4 @@ -68773,6 +68530,9 @@ pixel_y = 21 }, /obj/machinery/light_switch/north, +/obj/disposalpipe/segment/morgue{ + dir = 4 + }, /turf/simulated/floor/blue/side{ dir = 1 }, @@ -68840,18 +68600,24 @@ /turf/space, /area/space) "qlS" = ( -/obj/machinery/disposal, -/obj/disposalpipe/trunk, -/obj/item/storage/wall/medical{ - dir = 1; - pixel_y = 32 +/obj/table/wood/auto, +/obj/machinery/power/data_terminal, +/obj/machinery/computer3/generic/personal{ + pixel_y = 5 }, -/turf/simulated/floor/greenwhite{ - dir = 5 +/obj/machinery/camera{ + c_tag = "autotag"; + dir = 8; + name = "autoname - SS13"; + pixel_x = 10; + tag = "" }, -/area/station/medical/research{ - name = "Genetic Research" - }) +/obj/machinery/firealarm/east, +/obj/cable{ + icon_state = "0-8" + }, +/turf/simulated/floor/carpet/arcade, +/area/station/medical/staff) "qmg" = ( /obj/stool/chair/dining/wood{ dir = 1 @@ -68865,6 +68631,14 @@ "qmv" = ( /turf/simulated/wall/auto/reinforced/supernorn, /area/station/crew_quarters/arcade/dungeon) +"qmO" = ( +/obj/machinery/computer/announcement{ + name = "Medical Announcement Computer"; + req_access_txt = "19" + }, +/obj/machinery/light/incandescent, +/turf/simulated/floor/carpet/blue/fancy/edge/ne, +/area/station/medical/head) "qnl" = ( /obj/disposalpipe/segment/produce, /turf/simulated/floor, @@ -68878,6 +68652,21 @@ icon_state = "catwalk_cross" }, /area/space) +"qoF" = ( +/obj/machinery/chem_heater/chemistry, +/obj/machinery/firealarm/east, +/obj/machinery/camera{ + c_tag = "autotag"; + dir = 9; + name = "autoname - SS13"; + pixel_x = 10; + tag = "" + }, +/obj/machinery/light_switch/east{ + pixel_y = 12 + }, +/turf/simulated/floor/black, +/area/station/medical/medbay/reception) "qpr" = ( /obj/machinery/portable_atmospherics/canister/toxins, /obj/machinery/firealarm/west, @@ -68939,6 +68728,21 @@ /obj/mapping_helper/access/bar, /turf/simulated/floor/plating/damaged3, /area/station/hallway/secondary/construction) +"qrL" = ( +/obj/machinery/door/airlock/pyro/external, +/obj/forcefield/energyshield/perma/doorlink{ + desc = "A door-linked force field that prevents gasses from passing through it."; + name = "Door-linked Atmospheric Forcefield"; + powerlevel = 1 + }, +/obj/mapping_helper/airlock/cycler{ + name = "North Solar Maintenance"; + cycle_id = "northsolar" + }, +/turf/simulated/floor/caution/northsouth{ + dir = 1 + }, +/area/station/maintenance/solar/north) "quF" = ( /obj/machinery/atmospherics/unary/tank/air_repressurization{ dir = 8 @@ -68961,6 +68765,11 @@ }, /obj/mapping_helper/access/security, /obj/decal/stripe_delivery, +/obj/mapping_helper/airlock/cycler{ + cycle_id = "securityrelease"; + name = "Security Release Room"; + enter_id = "outer" + }, /turf/simulated/floor, /area/station/security/main) "qwc" = ( @@ -69044,6 +68853,23 @@ /obj/mapping_helper/wingrille_spawn/auto/reinforced/crystal, /turf/simulated/floor/plating, /area/station/security/brig) +"qzh" = ( +/obj/machinery/door/airlock/pyro/external, +/obj/cable/yellow{ + icon_state = "1-2" + }, +/obj/mapping_helper/firedoor_spawn, +/obj/forcefield/energyshield/perma/doorlink{ + desc = "A door-linked force field that prevents gasses from passing through it."; + name = "Door-linked Atmospheric Forcefield"; + powerlevel = 1 + }, +/obj/mapping_helper/airlock/cycler{ + name = "Research Outpost"; + cycle_id = "sci_outpost" + }, +/turf/simulated/floor/plating, +/area/research_outpost) "qzn" = ( /obj/cable{ icon_state = "4-8" @@ -69256,6 +69082,15 @@ dir = 4 }, /area/station/catwalk/north) +"qIv" = ( +/obj/mapping_helper/access/medical, +/obj/machinery/door/airlock/pyro/medical, +/obj/mapping_helper/firedoor_spawn, +/obj/cable{ + icon_state = "1-2" + }, +/turf/simulated/floor/blue, +/area/station/medical/medbay/psychiatrist) "qJH" = ( /obj/decal/poster/wallsign/stencil/right/s{ pixel_x = 21 @@ -69313,11 +69148,6 @@ /obj/decal/stripe_caution, /turf/simulated/floor, /area/station/engine/inner) -"qNC" = ( -/obj/mapping_helper/wingrille_spawn/auto, -/obj/storage/cart, -/turf/simulated/floor, -/area/station/hydroponics/bay) "qNE" = ( /obj/table/reinforced/auto, /obj/decal/stripe_delivery, @@ -69331,18 +69161,14 @@ /turf/simulated/floor, /area/station/security/checkpoint/podbay) "qOh" = ( -/obj/cable{ - icon_state = "4-8" - }, -/obj/machinery/door/airlock/pyro/medical{ +/obj/disposalpipe/segment/transport, +/turf/simulated/floor/carpet{ dir = 4; - name = "Morgue" + icon_state = "blue2" }, -/obj/mapping_helper/firedoor_spawn, -/obj/mapping_helper/access/morgue, -/obj/decal/stripe_delivery, -/turf/simulated/floor, -/area/station/medical/morgue) +/area/station/medical/research{ + name = "Genetic Research" + }) "qOn" = ( /obj/machinery/shuttle/engine/heater/seaheater_right{ pixel_y = -14; @@ -69419,18 +69245,6 @@ }, /turf/simulated/floor/airless/plating/catwalk, /area/mining/magnet) -"qSU" = ( -/obj/machinery/door/airlock/pyro/glass{ - name = "Medbay" - }, -/obj/machinery/atmospherics/pipe/simple/color_pipe/cyan_pipe{ - dir = 1 - }, -/obj/mapping_helper/firedoor_spawn, -/obj/mapping_helper/access/medical, -/obj/decal/stripe_delivery, -/turf/simulated/floor, -/area/station/medical/medbay) "qTr" = ( /obj/cable{ icon_state = "1-4" @@ -69447,6 +69261,12 @@ }, /turf/simulated/floor/caution/northsouth, /area/station/medical/medbay/lobby) +"qUF" = ( +/obj/machinery/optable{ + name = "Autopsy Table" + }, +/turf/simulated/floor/sanitary/blue, +/area/station/medical/morgue) "qVa" = ( /obj/mapping_helper/wingrille_spawn/auto/reinforced, /turf/simulated/floor/plating, @@ -69509,19 +69329,6 @@ }, /turf/simulated/floor/airless/plating/catwalk, /area/mining/magnet) -"qWG" = ( -/obj/machinery/door/airlock/pyro/external, -/obj/cable/yellow{ - icon_state = "1-2" - }, -/obj/mapping_helper/firedoor_spawn, -/obj/forcefield/energyshield/perma/doorlink{ - desc = "A door-linked force field that prevents gasses from passing through it."; - name = "Door-linked Atmospheric Forcefield"; - powerlevel = 1 - }, -/turf/simulated/floor/plating, -/area/research_outpost) "qXg" = ( /obj/machinery/door/airlock/pyro/glass{ dir = 1 @@ -69545,6 +69352,22 @@ icon_state = "blue1" }, /area/station/crew_quarters/arcade/dungeon) +"qXR" = ( +/obj/machinery/door/airlock/pyro/external, +/obj/cable/yellow{ + icon_state = "1-2" + }, +/obj/forcefield/energyshield/perma/doorlink{ + desc = "A door-linked force field that prevents gasses from passing through it."; + name = "Door-linked Atmospheric Forcefield"; + powerlevel = 1 + }, +/obj/mapping_helper/airlock/cycler{ + name = "Research Outpost"; + cycle_id = "sci_outpost" + }, +/turf/simulated/floor/plating, +/area/research_outpost) "qYq" = ( /obj/mapping_helper/firedoor_spawn, /obj/machinery/door/airlock/pyro/command{ @@ -69606,6 +69429,18 @@ /obj/decal/stripe_delivery, /turf/simulated/floor, /area/station/crew_quarters/catering) +"rab" = ( +/obj/cable{ + icon_state = "1-2" + }, +/obj/cable{ + icon_state = "2-8" + }, +/obj/disposalpipe/segment/mail/vertical, +/turf/simulated/floor/bluewhite{ + dir = 4 + }, +/area/station/medical/medbay/pharmacy) "ram" = ( /obj/machinery/door/airlock/pyro/maintenance{ dir = 4; @@ -69658,26 +69493,23 @@ }, /turf/simulated/floor/shuttlebay, /area/station/security/checkpoint/podbay) -"rby" = ( -/obj/machinery/light{ - dir = 8; - layer = 9.1; - pixel_x = -10 +"rbC" = ( +/obj/table/auto, +/obj/item/storage/box/syringes{ + pixel_x = -6; + pixel_y = 3 }, -/obj/machinery/firealarm/north, -/obj/storage/secure/closet/medical/chemical, -/turf/simulated/floor/carpet{ - dir = 9; - icon_state = "fblue2" +/obj/item/storage/box/iv_box{ + pixel_x = 6; + pixel_y = 4 }, -/area/station/medical/head) -"rbC" = ( -/obj/table/reinforced/chemistry/auto, -/obj/machinery/microscope, -/turf/simulated/floor/greenwhite{ +/obj/item/storage/box/gl_kit, +/obj/machinery/light/incandescent, +/obj/disposalpipe/segment/mail/vertical, +/turf/simulated/floor/blue/side{ dir = 4 }, -/area/station/medical/cdc) +/area/station/medical/medbay/surgery/storage) "rcy" = ( /obj/machinery/power/terminal{ dir = 1 @@ -69748,15 +69580,12 @@ /obj/landmark/gps_waypoint, /turf/simulated/floor/carpet/arcade, /area/station/crew_quarters/arcade) -"rfG" = ( -/obj/table/reinforced/chemistry/auto, -/obj/machinery/door_control{ - id = "chemistry"; - name = "Privacy Shutters"; - pixel_x = 28 - }, -/turf/simulated/floor/purple, -/area/station/science/chemistry) +"rfK" = ( +/obj/machinery/door/airlock/pyro/maintenance, +/obj/mapping_helper/firedoor_spawn, +/obj/mapping_helper/access/medical, +/turf/simulated/floor/plating, +/area/station/maintenance/south) "rfM" = ( /obj/machinery/disposal, /obj/disposalpipe/trunk, @@ -69837,6 +69666,25 @@ /obj/mapping_helper/access/chapel_office, /turf/simulated/floor/carpet/grime, /area/station/chapel/office) +"rhQ" = ( +/obj/decal/tile_edge/stripe{ + dir = 6; + icon_state = "bot2" + }, +/obj/disposalpipe/segment/morgue{ + dir = 4 + }, +/turf/simulated/floor/blue/side{ + dir = 1 + }, +/area/station/medical/medbay/lobby) +"rhR" = ( +/obj/disposalpipe/segment/transport{ + dir = 1; + icon_state = "pipe-c" + }, +/turf/simulated/floor/blue/side, +/area/station/medical/medbay/surgery/storage) "rhS" = ( /obj/machinery/firealarm/east, /obj/decal/stripe_delivery, @@ -69857,6 +69705,23 @@ }, /turf/simulated/floor/plating, /area/station/maintenance/southeast) +"riZ" = ( +/obj/mapping_helper/firedoor_spawn, +/obj/machinery/door/airlock/pyro/external{ + dir = 4 + }, +/obj/forcefield/energyshield/perma/doorlink{ + desc = "A door-linked force field that prevents gasses from passing through it."; + dir = 4; + name = "Door-linked Atmospheric Forcefield"; + powerlevel = 1 + }, +/obj/mapping_helper/airlock/cycler{ + name = "Central Maintenance"; + cycle_id = "c_maint2" + }, +/turf/simulated/floor/plating, +/area/station/maintenance/central) "rjO" = ( /obj/machinery/door/airlock/pyro/maintenance{ dir = 4 @@ -69882,6 +69747,16 @@ }, /turf/simulated/floor/caution/northsouth, /area/station/hallway/secondary/exit) +"rln" = ( +/obj/item_dispenser/latex_gloves{ + pixel_y = 0; + pixel_x = 24 + }, +/obj/storage/secure/closet/medical/anesthetic, +/turf/simulated/floor/redwhite{ + dir = 4 + }, +/area/station/medical/medbay/surgery) "rlM" = ( /obj/machinery/door/poddoor/pyro/shutters{ density = 0; @@ -69900,6 +69775,15 @@ /obj/mapping_helper/access/heads, /turf/simulated/floor/circuit, /area/station/bridge) +"rml" = ( +/obj/machinery/door/airlock/pyro/glass/med, +/obj/mapping_helper/access/medical, +/obj/mapping_helper/firedoor_spawn, +/obj/cable{ + icon_state = "1-2" + }, +/turf/simulated/floor/black, +/area/station/medical/medbay/reception) "rnf" = ( /obj/grille/catwalk{ dir = 4 @@ -69958,6 +69842,11 @@ }, /obj/mapping_helper/firedoor_spawn, /obj/mapping_helper/access/research_foyer, +/obj/mapping_helper/airlock/cycler{ + cycle_id = "research"; + name = "Research"; + enter_id = "inner" + }, /turf/simulated/floor/purple, /area/station/science/lobby) "rpd" = ( @@ -70000,6 +69889,7 @@ "rrx" = ( /obj/machinery/firealarm/west, /obj/table/reinforced/chemistry/auto, +/obj/machinery/chem_shaker/large/chemistry, /turf/simulated/floor/purplewhite{ dir = 10 }, @@ -70044,6 +69934,13 @@ }, /turf/space, /area/space) +"rsw" = ( +/obj/stool/chair/comfy{ + dir = 1 + }, +/obj/landmark/start/job/medical_doctor, +/turf/simulated/floor/carpet/arcade, +/area/station/medical/staff) "rsO" = ( /obj/table/auto, /obj/item/kitchen/rollingpin, @@ -70051,13 +69948,6 @@ /obj/item/reagent_containers/food/drinks/drinkingglass/icing, /turf/simulated/floor/white, /area/station/crew_quarters/kitchen) -"rtg" = ( -/obj/machinery/firealarm/north, -/obj/disposalpipe/segment/mail/horizontal, -/turf/simulated/floor/grass{ - name = "astroturf" - }, -/area/station/medical/dome) "rvg" = ( /obj/table/reinforced/auto, /obj/mapping_helper/firedoor_spawn, @@ -70131,6 +70021,16 @@ }, /turf/simulated/wall/auto/reinforced/supernorn, /area/station/maintenance/inner/central) +"ryB" = ( +/obj/machinery/door/unpowered/wood{ + dir = 8; + icon = 'icons/obj/doors/door_office.dmi'; + lock_dir = 4 + }, +/turf/simulated/floor/stairs{ + dir = 8 + }, +/area/station/maintenance/solar/south) "ryU" = ( /obj/machinery/power/tracker/east, /obj/cable/yellow, @@ -70280,8 +70180,21 @@ dir = 8 }, /area/station/hallway/secondary/exit) +"rJo" = ( +/obj/machinery/door/airlock/pyro/external, +/obj/mapping_helper/firedoor_spawn, +/obj/machinery/atmospherics/pipe/simple/color_pipe/cyan_pipe/overfloor{ + dir = 1 + }, +/obj/mapping_helper/airlock/cycler{ + name = "Central Maintenance"; + cycle_id = "c_maint3"; + enter_id = "inner" + }, +/turf/simulated/floor/caution/northsouth, +/area/station/maintenance/central) "rJs" = ( -/obj/stool/bench/green/auto, +/obj/stool/bench/purple/auto, /turf/simulated/floor/purple/side{ dir = 9 }, @@ -70335,15 +70248,6 @@ /obj/decal/stripe_caution, /turf/simulated/floor, /area/station/ai_monitored/storage/eva) -"rNV" = ( -/mob/living/carbon/human/npc/monkey, -/obj/disposalpipe/segment/transport{ - dir = 4 - }, -/turf/simulated/floor/grass{ - name = "astroturf" - }, -/area/station/medical/dome) "rOk" = ( /obj/cable{ icon_state = "4-8" @@ -70387,15 +70291,14 @@ /obj/cable, /turf/simulated/floor/plating, /area/station/security/checkpoint/podbay) -"rQI" = ( -/obj/table/reinforced/auto, -/obj/health_scanner/wall{ - find_in_range = 0; - id = "lobby_right" +"rQO" = ( +/obj/cable{ + icon_state = "1-4" + }, +/obj/disposalpipe/segment/mail/bent/north, +/turf/simulated/floor/bluewhite{ + dir = 4 }, -/obj/mapping_helper/firedoor_spawn, -/obj/machinery/door/window/northright, -/turf/simulated/floor/caution/northsouth, /area/station/medical/medbay/pharmacy) "rRi" = ( /obj/machinery/door/airlock/pyro/glass/security/alt{ @@ -70416,8 +70319,28 @@ }, /obj/mapping_helper/access/security, /obj/decal/stripe_delivery, +/obj/mapping_helper/airlock/cycler{ + cycle_id = "security"; + name = "Security"; + enter_id = "outer" + }, /turf/simulated/floor, /area/station/security/checkpoint/sec_foyer) +"rRw" = ( +/obj/machinery/door/airlock/pyro/external, +/obj/mapping_helper/firedoor_spawn, +/obj/decal/stripe_delivery, +/obj/forcefield/energyshield/perma/doorlink{ + desc = "A door-linked force field that prevents gasses from passing through it."; + name = "Door-linked Atmospheric Forcefield"; + powerlevel = 1 + }, +/obj/mapping_helper/airlock/cycler{ + name = "North Solar Maintenance"; + cycle_id = "northsolar" + }, +/turf/simulated/floor, +/area/station/maintenance/solar/north) "rSI" = ( /obj/machinery/atmospherics/pipe/simple/overfloor{ dir = 10 @@ -70440,14 +70363,12 @@ /obj/decal/stripe_delivery, /turf/simulated/floor, /area/station/quartermaster/office) -"rUk" = ( -/obj/disposalpipe/segment/transport{ +"rUu" = ( +/obj/disposalpipe/segment/morgue{ dir = 4 }, -/turf/simulated/floor/greenwhite, -/area/station/medical/research{ - name = "Genetic Research" - }) +/turf/simulated/floor/sanitary/blue, +/area/station/medical/morgue) "rUK" = ( /obj/machinery/firealarm/east, /obj/machinery/bot/firebot, @@ -70524,6 +70445,10 @@ }, /turf/simulated/floor, /area/station/security/checkpoint/customs) +"rXL" = ( +/obj/storage/secure/closet/medical/medkit, +/turf/simulated/floor/blue, +/area/station/medical/medbay/pharmacy) "rXW" = ( /obj/strip_door, /obj/disposalpipe/segment{ @@ -70610,6 +70535,30 @@ /obj/mapping_helper/wingrille_spawn/auto/reinforced/crystal, /turf/simulated/floor/engine, /area/station/ai_monitored/armory) +"rZK" = ( +/obj/machinery/door/airlock/pyro/glass/botany{ + dir = 8 + }, +/obj/mapping_helper/access/medlab, +/obj/mapping_helper/firedoor_spawn, +/turf/simulated/floor/blue, +/area/station/medical/medbay/cloner) +"rZM" = ( +/obj/random_item_spawner/junk/one_or_zero, +/obj/cable{ + icon_state = "2-8" + }, +/turf/simulated/floor/plating, +/area/station/medical/maintenance) +"sau" = ( +/obj/machinery/atmospherics/pipe/simple/color_pipe/cyan_pipe{ + dir = 4 + }, +/obj/disposalpipe/segment/morgue{ + dir = 4 + }, +/turf/simulated/floor/specialroom/medbay, +/area/station/medical/medbay/lobby) "saH" = ( /obj/machinery/door/poddoor/pyro/shutters{ dir = 4; @@ -70619,31 +70568,19 @@ /obj/mapping_helper/wingrille_spawn/auto/reinforced, /turf/simulated/floor/circuit/off, /area/station/hangar/main) +"sbA" = ( +/obj/machinery/atmospherics/pipe/simple{ + dir = 4; + level = 2 + }, +/turf/simulated/floor/white, +/area/station/medical/medbay) "scB" = ( /obj/machinery/atmospherics/pipe/simple/overfloor{ dir = 10 }, /turf/simulated/floor/plating, /area/station/maintenance/inner/central) -"scU" = ( -/obj/table/wood/auto, -/obj/machinery/power/data_terminal, -/obj/machinery/computer3/generic/personal{ - pixel_y = 5 - }, -/obj/cable{ - icon_state = "0-8" - }, -/obj/machinery/camera{ - c_tag = "autotag"; - dir = 8; - name = "autoname - SS13"; - pixel_x = 10; - tag = "" - }, -/obj/machinery/firealarm/east, -/turf/simulated/floor/carpet/arcade, -/area/station/medical/medbay) "seo" = ( /obj/cable/orange{ icon_state = "4-8" @@ -70656,6 +70593,13 @@ /obj/decal/stripe_delivery, /turf/simulated/floor, /area/station/medical/medbay/lobby) +"sft" = ( +/obj/machinery/traymachine/locking/crematorium/medical, +/obj/machinery/crema_switch/medical{ + pixel_y = 24 + }, +/turf/simulated/floor/plating, +/area/station/medical/maintenance) "sfG" = ( /obj/storage/cart/mechcart{ desc = "A big rolling supply cart equipped for handling hull breaches."; @@ -70714,10 +70658,29 @@ icon_state = "catwalk_cross" }, /area/station/solar/small_backup1) -"siL" = ( -/obj/landmark/pest, -/turf/simulated/floor/plating, -/area/station/maintenance/south) +"siW" = ( +/obj/lattice{ + icon_state = "lattice-dir" + }, +/obj/cable{ + icon_state = "2-8" + }, +/turf/space, +/area/space) +"siZ" = ( +/obj/machinery/disposal, +/obj/machinery/camera{ + c_tag = "autotag"; + dir = 4; + name = "autoname - SS13"; + pixel_x = -10; + tag = "" + }, +/obj/disposalpipe/trunk/north, +/turf/simulated/floor/bluewhite{ + dir = 10 + }, +/area/station/medical/medbay) "sju" = ( /obj/mapping_helper/wingrille_spawn/auto/reinforced, /obj/machinery/door/poddoor/pyro/shutters{ @@ -70781,14 +70744,11 @@ /turf/simulated/floor/airless/plating/catwalk, /area/station/catwalk/north) "smk" = ( -/obj/disposalpipe/trunk/mail/west, -/obj/machinery/disposal/mail/autoname/medbay/genetics, -/turf/simulated/floor/greenwhite{ - dir = 1 +/obj/cable{ + icon_state = "2-4" }, -/area/station/medical/research{ - name = "Genetic Research" - }) +/turf/simulated/floor/carpet/arcade, +/area/station/medical/staff) "smN" = ( /obj/grille/catwalk, /turf/simulated/floor/airless/plating/catwalk{ @@ -70843,13 +70803,22 @@ }, /area/station/catwalk/north) "spv" = ( -/obj/machinery/door/airlock/pyro/medical{ - name = "Morgue" - }, +/turf/simulated/floor/blue/side, +/area/station/medical/medbay/lobby) +"spM" = ( /obj/mapping_helper/firedoor_spawn, -/obj/mapping_helper/access/morgue, -/turf/simulated/floor/sanitary/white, -/area/station/medical/morgue) +/obj/machinery/door/airlock/pyro/external, +/obj/forcefield/energyshield/perma/doorlink{ + desc = "A door-linked force field that prevents gasses from passing through it."; + name = "Door-linked Atmospheric Forcefield"; + powerlevel = 1 + }, +/obj/mapping_helper/airlock/cycler{ + name = "North East Maintenance"; + cycle_id = "ne_maint" + }, +/turf/simulated/floor, +/area/station/maintenance/northeast) "spT" = ( /obj/decal/poster/wallsign/hazard_coldloop, /obj/cable/orange{ @@ -70978,6 +70947,12 @@ /obj/mapping_helper/access/research, /turf/unsimulated/floor/shuttle, /area/shuttle/research/outpost) +"sBM" = ( +/obj/disposalpipe/segment/morgue{ + icon_state = "pipe-c" + }, +/turf/simulated/floor/sanitary/blue, +/area/station/medical/morgue) "sCs" = ( /obj/cable/orange{ icon_state = "1-8" @@ -71017,23 +70992,10 @@ /obj/mapping_helper/wingrille_spawn/auto/reinforced/crystal, /turf/simulated/floor/engine/vacuum, /area/station/science/lab) -"sDJ" = ( -/obj/machinery/door/airlock/pyro/glass{ - id = "medbay_entrance"; - name = "Medbay Entrance" - }, -/obj/machinery/atmospherics/pipe/simple/color_pipe/cyan_pipe{ - dir = 1 - }, -/obj/mapping_helper/firedoor_spawn, -/obj/machinery/secscanner{ - pixel_y = 10 - }, -/obj/mapping_helper/access/medical, -/obj/decal/stripe_delivery, -/obj/disposalpipe/segment/mail/bent/east, -/turf/simulated/floor, -/area/station/medical/medbay) +"sEq" = ( +/obj/machinery/firealarm/east, +/turf/simulated/floor/blue, +/area/station/medical/medbay/pharmacy) "sEs" = ( /obj/machinery/door/airlock/pyro/engineering{ dir = 4; @@ -71085,20 +71047,6 @@ icon_state = "fred1" }, /area/station/quartermaster/office) -"sEP" = ( -/obj/machinery/door/airlock/pyro/external, -/obj/cable{ - icon_state = "1-2" - }, -/obj/mapping_helper/firedoor_spawn, -/obj/decal/stripe_delivery, -/obj/forcefield/energyshield/perma/doorlink{ - desc = "A door-linked force field that prevents gasses from passing through it."; - name = "Door-linked Atmospheric Forcefield"; - powerlevel = 1 - }, -/turf/simulated/floor, -/area/station/hangar/arrivals) "sEZ" = ( /obj/machinery/door_control{ id = "combustion"; @@ -71110,6 +71058,13 @@ }, /turf/simulated/floor/red, /area/station/engine/hotloop) +"sFr" = ( +/obj/landmark/start/job/medical_doctor, +/obj/stool/chair/office{ + dir = 4 + }, +/turf/simulated/floor/white, +/area/station/medical/medbay/cloner) "sFs" = ( /obj/grille/catwalk, /obj/disposalpipe/segment/mail/bent/east, @@ -71181,30 +71136,18 @@ /turf/simulated/wall/auto/reinforced/supernorn, /area/research_outpost) "sIT" = ( -/obj/item/reagent_containers/food/snacks/ingredient/meat/mysterymeat, -/obj/item/reagent_containers/food/snacks/ingredient/meat/mysterymeat/grody, -/obj/item/reagent_containers/food/snacks/ingredient/meat/mysterymeat/grody, -/obj/item/reagent_containers/food/snacks/ingredient/meat/mysterymeat/grody, -/obj/item/reagent_containers/food/snacks/ingredient/meatpaste{ - desc = "Gross."; - name = "old kidney" - }, -/obj/item/organ/heart{ - desc = "A human heart, grody. How long has it been in that freezer?"; - name = "funky ol' heart" - }, -/obj/storage/crate/freezer{ - name = "Freezer - Spare Parts" - }, -/obj/item/reagent_containers/food/snacks/ingredient/meat/monkeymeat, -/obj/item/reagent_containers/food/snacks/ingredient/meat/monkeymeat, -/obj/item/reagent_containers/food/snacks/ingredient/meat/monkeymeat, -/obj/item/reagent_containers/food/snacks/ingredient/meat/mysterymeat, -/obj/disposalpipe/segment/morgue{ - dir = 4 +/obj/item/storage/firstaid/toxin, +/obj/item/storage/toolbox/emergency, +/obj/item/hand_labeler, +/obj/table/glass/reinforced/auto, +/obj/machinery/light/lamp/black, +/obj/item/clothing/glasses/spectro, +/turf/simulated/floor/carpet{ + icon_state = "blue1" }, -/turf/simulated/floor/sanitary/white, -/area/station/medical/morgue) +/area/station/medical/research{ + name = "Genetic Research" + }) "sJz" = ( /obj/cable{ icon_state = "0-8" @@ -71244,20 +71187,12 @@ /turf/simulated/floor/grass/leafy, /area/station/garden/owlery) "sLI" = ( -/obj/machinery/computer/pathology{ - dir = 1 - }, -/obj/machinery/camera{ - c_tag = "autotag"; - dir = 6; - name = "autoname - SS13"; - pixel_y = 20; - tag = "" - }, -/turf/simulated/floor/greenwhite{ - dir = 1 - }, -/area/station/medical/cdc) +/obj/machinery/disposal/mail/autoname/medbay/genetics, +/obj/disposalpipe/trunk/mail/north, +/turf/simulated/floor/greenwhite, +/area/station/medical/research{ + name = "Genetic Research" + }) "sLX" = ( /obj/stool/chair{ dir = 1 @@ -71484,12 +71419,21 @@ /turf/simulated/floor/shuttlebay, /area/station/security/checkpoint/podbay) "sVP" = ( -/obj/machinery/atmospherics/unary/portables_connector{ - dir = 4 +/obj/table/auto, +/obj/item/storage/firstaid/brute{ + pixel_y = -4 }, -/obj/machinery/portable_atmospherics/canister/oxygen, +/obj/item/storage/firstaid/brute{ + pixel_y = -4 + }, +/obj/item/storage/firstaid/brute{ + pixel_y = -4 + }, +/obj/item/reagent_containers/glass/bottle/epinephrine, +/obj/item/reagent_containers/glass/beaker/large/brute, +/obj/item/reagent_containers/dropper, /turf/simulated/floor/blue, -/area/station/medical/medbay) +/area/station/medical/medbay/pharmacy) "sVT" = ( /obj/cable/orange{ icon_state = "4-8" @@ -71540,6 +71484,12 @@ /obj/mapping_helper/wingrille_spawn/auto, /turf/simulated/floor/plating, /area/station/crew_quarters/garden) +"sZT" = ( +/obj/cable{ + icon_state = "4-8" + }, +/turf/simulated/floor/sanitary/blue, +/area/station/medical/morgue) "taF" = ( /obj/machinery/vending/air_vendor/plasma, /turf/simulated/floor/shuttlebay, @@ -71561,6 +71511,9 @@ }, /turf/simulated/floor/orangeblack, /area/station/maintenance/central) +"tcw" = ( +/turf/simulated/wall/auto/supernorn, +/area/station/medical/staff) "tcI" = ( /obj/disposalpipe/segment/mail/horizontal, /obj/table/reinforced/auto, @@ -71610,6 +71563,24 @@ }, /turf/simulated/floor/orangeblack, /area/station/maintenance/central) +"tfU" = ( +/obj/machinery/atmospherics/pipe/simple{ + level = 2 + }, +/obj/machinery/door/airlock/pyro/external{ + req_access_txt = "40" + }, +/obj/forcefield/energyshield/perma/doorlink{ + desc = "A door-linked force field that prevents gasses from passing through it."; + name = "Door-linked Atmospheric Forcefield"; + powerlevel = 1 + }, +/obj/mapping_helper/airlock/cycler{ + name = "East Substation"; + cycle_id = "eastsubstation" + }, +/turf/simulated/floor/caution/northsouth, +/area/station/engine/substation/east) "tgp" = ( /obj/machinery/atmospherics/pipe/simple/insulated/cold{ can_rupture = 0; @@ -71674,16 +71645,6 @@ /obj/landmark/pest, /turf/simulated/floor/grime, /area/station/maintenance/southeast) -"tjw" = ( -/obj/disposalpipe/segment/transport{ - dir = 4 - }, -/obj/machinery/light, -/obj/disposalpipe/segment/mail/vertical, -/turf/simulated/floor/greenwhite, -/area/station/medical/research{ - name = "Genetic Research" - }) "tkA" = ( /obj/storage/secure/closet/civilian/hydro, /turf/simulated/floor/grass{ @@ -71753,6 +71714,12 @@ /obj/decal/stripe_delivery, /turf/simulated/floor, /area/station/hallway/secondary/exit) +"tnJ" = ( +/obj/mapping_helper/wingrille_spawn/auto, +/obj/window_blinds/cog2/left, +/obj/disposalpipe/segment/vertical, +/turf/simulated/floor/plating, +/area/station/medical/staff) "tnY" = ( /obj/machinery/door/poddoor/pyro/shutters{ density = 0; @@ -72060,6 +72027,18 @@ }, /turf/simulated/floor/engine, /area/station/engine/core) +"tFj" = ( +/obj/cable{ + icon_state = "1-2" + }, +/obj/cable{ + icon_state = "2-8" + }, +/obj/cable{ + icon_state = "2-4" + }, +/turf/simulated/floor/white, +/area/station/science/artifact) "tFo" = ( /obj/machinery/door/airlock/pyro/glass{ name = "Research Outpost"; @@ -72067,16 +72046,6 @@ }, /turf/simulated/floor/grey/blackgrime, /area/station/hangar/science) -"tFC" = ( -/obj/table/reinforced/auto, -/obj/health_scanner/wall{ - find_in_range = 0; - id = "lobby_left" - }, -/obj/mapping_helper/firedoor_spawn, -/obj/machinery/door/window/northleft, -/turf/simulated/floor/caution/northsouth, -/area/station/medical/medbay/pharmacy) "tFI" = ( /obj/mapping_helper/wingrille_spawn/auto/reinforced, /obj/machinery/door/poddoor/pyro/shutters{ @@ -72095,6 +72064,12 @@ }, /turf/simulated/floor/plating/airless, /area/station/engine/core) +"tFV" = ( +/obj/cable{ + icon_state = "1-2" + }, +/turf/simulated/floor/carpet/blue/fancy/narrow/T_north, +/area/station/medical/medbay/psychiatrist) "tGo" = ( /obj/landmark/gps_waypoint, /turf/simulated/floor/purple, @@ -72202,6 +72177,23 @@ /obj/decal/stripe_delivery, /turf/simulated/floor, /area/research_outpost/hangar) +"tOV" = ( +/obj/machinery/light/incandescent, +/turf/simulated/floor/carpet/blue/fancy/innercorner/south, +/area/station/medical/head) +"tPJ" = ( +/obj/machinery/door/airlock/pyro/external, +/obj/forcefield/energyshield/perma/doorlink{ + desc = "A door-linked force field that prevents gasses from passing through it."; + name = "Door-linked Atmospheric Forcefield"; + powerlevel = 1 + }, +/obj/mapping_helper/airlock/cycler{ + name = "South East Maintenance"; + cycle_id = "se_maint" + }, +/turf/simulated/floor/caution/northsouth, +/area/station/maintenance/southeast) "tQb" = ( /obj/machinery/conveyor/EW{ name = "cargo belt - west"; @@ -72224,6 +72216,19 @@ }, /turf/simulated/floor/shuttlebay, /area/station/crew_quarters/captain) +"tQH" = ( +/obj/table/auto, +/obj/machinery/door_control{ + id = "cloning"; + name = "Cloning Door Control"; + pixel_x = 24 + }, +/obj/item/storage/firstaid/brain, +/obj/item/hand_labeler, +/turf/simulated/floor/bluewhite{ + dir = 5 + }, +/area/station/medical/medbay/cloner) "tRs" = ( /obj/mapping_helper/firedoor_spawn, /obj/machinery/door/airlock/pyro{ @@ -72264,15 +72269,26 @@ }, /obj/mapping_helper/firedoor_spawn, /obj/mapping_helper/access/research_foyer, +/obj/mapping_helper/airlock/cycler{ + cycle_id = "research"; + name = "Research"; + enter_id = "outer" + }, /turf/simulated/floor/purple, /area/station/science/lobby) "tSS" = ( -/obj/vehicle/segway, -/obj/machinery/firealarm/east, -/turf/simulated/floor/bluewhite{ - dir = 5 +/obj/machinery/atmospherics/pipe/simple/color_pipe/cyan_pipe{ + dir = 1 }, -/area/station/medical/medbay) +/turf/simulated/floor/white, +/area/station/medical/medbay/cloner) +"tSW" = ( +/obj/cable{ + icon_state = "1-2" + }, +/obj/disposalpipe/segment/vertical, +/turf/simulated/floor/specialroom/medbay, +/area/station/medical/medbay/lobby) "tTd" = ( /turf/simulated/floor/dirt, /area/station/ranch) @@ -72444,19 +72460,6 @@ /obj/mapping_helper/wingrille_spawn/auto, /turf/simulated/floor, /area/station/hangar/arrivals) -"ucg" = ( -/obj/machinery/door/airlock/pyro/glass{ - name = "Genetic Research"; - req_access_txt = "9" - }, -/obj/disposalpipe/segment, -/obj/mapping_helper/firedoor_spawn, -/obj/mapping_helper/access/medlab, -/obj/decal/stripe_delivery, -/turf/simulated/floor, -/area/station/medical/research{ - name = "Genetic Research" - }) "ucI" = ( /obj/table/wood/auto, /obj/item/paper/book/from_file/monster_manual_revised{ @@ -72472,20 +72475,6 @@ icon_state = "blue1" }, /area/station/crew_quarters/arcade/dungeon) -"ucP" = ( -/obj/machinery/door/airlock/pyro/external{ - req_access_txt = "40" - }, -/obj/disposalpipe/segment/mail/bent/south, -/obj/mapping_helper/firedoor_spawn, -/obj/decal/stripe_delivery, -/obj/forcefield/energyshield/perma/doorlink{ - desc = "A door-linked force field that prevents gasses from passing through it."; - name = "Door-linked Atmospheric Forcefield"; - powerlevel = 1 - }, -/turf/simulated/floor, -/area/station/engine/substation/west) "ucX" = ( /obj/machinery/light/emergency, /obj/cable{ @@ -72524,8 +72513,30 @@ }, /obj/mapping_helper/access/heads, /obj/decal/stripe_delivery, +/obj/mapping_helper/airlock/cycler{ + cycle_id = "bridge"; + name = "Bridge"; + enter_id = "inner" + }, /turf/simulated/floor, /area/station/security/checkpoint/customs) +"uih" = ( +/obj/mapping_helper/firedoor_spawn, +/obj/machinery/door/airlock/pyro/external{ + dir = 4 + }, +/obj/forcefield/energyshield/perma/doorlink{ + desc = "A door-linked force field that prevents gasses from passing through it."; + dir = 4; + name = "Door-linked Atmospheric Forcefield"; + powerlevel = 1 + }, +/obj/mapping_helper/airlock/cycler{ + name = "Central Maintenance"; + cycle_id = "c_maint" + }, +/turf/simulated/floor/plating, +/area/station/maintenance/central) "uiJ" = ( /obj/grille/catwalk{ dir = 9 @@ -72557,19 +72568,6 @@ /area/station/engine/power{ name = "Engineering Control Room" }) -"umQ" = ( -/obj/machinery/door/airlock/pyro/external, -/obj/machinery/secscanner{ - pixel_y = 10 - }, -/obj/mapping_helper/access/mining, -/obj/forcefield/energyshield/perma/doorlink{ - desc = "A door-linked force field that prevents gasses from passing through it."; - name = "Door-linked Atmospheric Forcefield"; - powerlevel = 1 - }, -/turf/simulated/floor/caution/northsouth, -/area/station/mining/magnet) "unT" = ( /obj/decal/poster/wallsign/stencil/right/p{ pixel_x = 16 @@ -72582,6 +72580,13 @@ }, /turf/simulated/wall/auto/reinforced/supernorn, /area/station/maintenance/northeast) +"uoU" = ( +/obj/storage/crate/freezer{ + name = "Freezer - Spare Parts" + }, +/obj/random_item_spawner/organs/one_to_three, +/turf/simulated/floor/plating, +/area/station/medical/maintenance) "upY" = ( /obj/disposalpipe/segment{ dir = 4 @@ -72655,6 +72660,11 @@ name = "Door-linked Atmospheric Forcefield"; powerlevel = 1 }, +/obj/mapping_helper/airlock/cycler{ + cycle_id = "aiairbridge"; + name = "AI Airbridge"; + enter_id = "inner" + }, /turf/simulated/floor, /area/station/turret_protected/ai_upload_foyer) "uuL" = ( @@ -72736,15 +72746,14 @@ /turf/simulated/floor/grime, /area/station/storage/warehouse) "uzG" = ( -/obj/machinery/firealarm/north, -/obj/disposalpipe/segment{ - dir = 2; - icon_state = "pipe-c" +/obj/cable{ + icon_state = "1-2" }, -/turf/simulated/floor/bluewhite{ - dir = 1 +/obj/disposalpipe/segment/vertical, +/turf/simulated/floor/bluewhite/corner{ + dir = 8 }, -/area/station/medical/medbay) +/area/station/medical/medbay/lobby) "uAn" = ( /obj/machinery/atmospherics/unary/tank/air_repressurization{ dir = 1 @@ -72772,6 +72781,9 @@ }, /turf/simulated/floor/plating/airless, /area/station/engine/inner) +"uBy" = ( +/turf/simulated/wall/auto/supernorn, +/area/station/medical/medbay/surgery) "uBS" = ( /obj/cable/orange{ icon_state = "4-8" @@ -72798,6 +72810,16 @@ }, /turf/simulated/floor/circuit, /area/station/turret_protected/ai_upload) +"uCK" = ( +/obj/cable{ + icon_state = "4-8" + }, +/obj/disposalpipe/segment/morgue{ + dir = 8; + icon_state = "pipe-c" + }, +/turf/simulated/floor/plating, +/area/station/maintenance/south) "uDi" = ( /obj/machinery/light{ dir = 1; @@ -72821,6 +72843,35 @@ /obj/lattice, /turf/space, /area/space) +"uEZ" = ( +/obj/machinery/atmospherics/unary/cryo_cell, +/turf/simulated/floor/bluewhite{ + dir = 5 + }, +/area/station/medical/medbay) +"uFy" = ( +/obj/table/wood/auto, +/obj/item/clipboard{ + pixel_x = 3; + pixel_y = 1 + }, +/obj/item/kitchen/food_box/lollipop{ + pixel_x = -8; + pixel_y = 11 + }, +/obj/item/pen{ + rand_pos = 0 + }, +/obj/machinery/light/incandescent, +/turf/simulated/floor/carpet/blue/fancy/narrow/T_west, +/area/station/medical/medbay/psychiatrist) +"uFR" = ( +/obj/machinery/light/small, +/obj/storage/crate, +/obj/random_item_spawner/junk/some, +/obj/random_item_spawner/tools/some, +/turf/simulated/floor/grime, +/area/station/storage/auxillary) "uGM" = ( /obj/cable/yellow{ icon_state = "2-4" @@ -72831,17 +72882,6 @@ icon_state = "catwalk_cross" }, /area/listeningpost/solars) -"uGN" = ( -/obj/machinery/door/airlock/pyro/external{ - dir = 4 - }, -/obj/disposalpipe/segment/mail/horizontal, -/obj/mapping_helper/firedoor_spawn, -/obj/cable/orange{ - icon_state = "4-8" - }, -/turf/simulated/floor/caution/westeast, -/area/station/maintenance/central) "uGQ" = ( /obj/mapping_helper/firedoor_spawn, /obj/machinery/door/airlock/pyro/external{ @@ -72932,6 +72972,28 @@ dir = 10 }, /area/station/catwalk/north) +"uLA" = ( +/obj/cable{ + icon_state = "2-8" + }, +/obj/cable{ + icon_state = "1-2" + }, +/turf/simulated/floor/black, +/area/station/medical/medbay/reception) +"uMd" = ( +/obj/landmark/gps_waypoint, +/obj/cable{ + icon_state = "1-2" + }, +/obj/cable{ + icon_state = "2-8" + }, +/obj/disposalpipe/segment/vertical, +/turf/simulated/floor/bluewhite{ + dir = 5 + }, +/area/station/medical/medbay/lobby) "uMg" = ( /obj/grille/catwalk{ dir = 4 @@ -73087,18 +73149,8 @@ /turf/simulated/floor, /area/station/crew_quarters/garden) "uTS" = ( -/obj/machinery/door/airlock/pyro/glass{ - name = "Operating Theater" - }, -/obj/cable{ - icon_state = "1-2" - }, -/obj/disposalpipe/segment/mail/vertical, -/obj/mapping_helper/firedoor_spawn, -/obj/mapping_helper/access/medical, -/obj/decal/stripe_delivery, -/turf/simulated/floor, -/area/station/medical/medbay/surgery) +/turf/simulated/wall/auto/supernorn, +/area/station/medical/medbay/reception) "uUh" = ( /obj/railing/orange/reinforced{ dir = 8 @@ -73383,6 +73435,13 @@ /obj/mapping_helper/access/tox_storage, /turf/simulated/floor/plating, /area/station/science/storage) +"vtW" = ( +/obj/mapping_helper/wingrille_spawn/auto/reinforced, +/obj/disposalpipe/segment/transport, +/turf/simulated/floor/plating, +/area/station/medical/research{ + name = "Genetic Research" + }) "vun" = ( /obj/grille/catwalk{ dir = 6 @@ -73417,9 +73476,16 @@ /turf/simulated/floor, /area/station/routing/security) "vxs" = ( -/obj/machinery/vending/jobclothing/medical, +/obj/machinery/computer3/generic/med_data{ + dir = 4 + }, +/obj/cable{ + icon_state = "0-4" + }, +/obj/machinery/light_switch/west, +/obj/machinery/power/data_terminal, /turf/simulated/floor/blue, -/area/station/medical/medbay) +/area/station/medical/medbay/pharmacy) "vyj" = ( /obj/table/auto, /obj/item/plate, @@ -73598,6 +73664,15 @@ /obj/machinery/portable_atmospherics/canister/air/large, /turf/simulated/floor/plating, /area/station/maintenance/central) +"vHo" = ( +/obj/machinery/atmospherics/pipe/simple{ + dir = 9; + level = 2 + }, +/turf/simulated/floor/bluewhite{ + dir = 4 + }, +/area/station/medical/medbay) "vHu" = ( /obj/grille/catwalk{ dir = 9 @@ -73638,6 +73713,10 @@ /obj/machinery/firealarm/east, /turf/simulated/floor/caution/corner/ne, /area/station/engine/hotloop) +"vIi" = ( +/obj/machinery/light_switch/west, +/turf/simulated/floor/carpet/blue/fancy/narrow/sw, +/area/station/medical/medbay/psychiatrist) "vIv" = ( /obj/cable/yellow, /obj/cable/yellow{ @@ -73678,6 +73757,14 @@ }, /turf/simulated/floor, /area/station/maintenance/central) +"vNL" = ( +/obj/machinery/atmospherics/pipe/simple/color_pipe/cyan_pipe{ + dir = 1 + }, +/turf/simulated/floor/bluewhite/corner{ + dir = 1 + }, +/area/station/medical/medbay/lobby) "vNO" = ( /obj/chicken_nesting_box, /obj/machinery/light{ @@ -73772,7 +73859,7 @@ /turf/space, /area/space) "vWT" = ( -/obj/stool/bench/green/auto, +/obj/stool/bench/purple/auto, /turf/simulated/floor/grey/blackgrime, /area/station/hangar/science) "vXc" = ( @@ -73803,6 +73890,18 @@ dir = 9 }, /area/station/medical/medbay/lobby) +"wab" = ( +/obj/cable{ + icon_state = "0-4" + }, +/obj/machinery/power/apc{ + areastring = "Medical Storage"; + dir = 8; + name = "Medical Storage APC"; + pixel_x = -24 + }, +/turf/simulated/floor/plating, +/area/station/maintenance/south) "wat" = ( /obj/machinery/door/airlock/pyro/engineering{ dir = 4 @@ -73894,8 +73993,16 @@ }, /obj/mapping_helper/access/hydro, /obj/decal/stripe_caution, +/obj/mapping_helper/airlock/cycler{ + cycle_id = "hydro"; + name = "Hydroponics"; + enter_id = "side" + }, /turf/simulated/floor, /area/station/crew_quarters/catering) +"wge" = ( +/turf/simulated/floor/redwhite/corner, +/area/station/medical/medbay/surgery) "wgf" = ( /obj/cable{ icon_state = "4-8" @@ -73910,17 +74017,17 @@ /turf/simulated/floor, /area/research_outpost) "wgO" = ( -/obj/stool/chair{ +/obj/disposalpipe/segment/transport{ dir = 4 }, -/obj/disposalpipe/segment/transport, -/obj/landmark/start/job/geneticist, -/turf/simulated/floor/greenwhite{ - dir = 8 +/obj/cable{ + icon_state = "4-8" }, -/area/station/medical/research{ - name = "Genetic Research" - }) +/obj/disposalpipe/segment/vertical, +/turf/simulated/floor/blue/side{ + dir = 1 + }, +/area/station/medical/medbay/surgery/storage) "wiF" = ( /obj/machinery/door/airlock/pyro/glass{ dir = 4 @@ -73962,22 +74069,13 @@ /turf/simulated/floor/black, /area/station/science/lab) "wmJ" = ( -/obj/shrub, -/obj/machinery/light{ - dir = 8; - layer = 9.1; - pixel_x = -10 - }, /obj/disposalpipe/segment/transport{ - dir = 1; icon_state = "pipe-c" }, -/turf/simulated/floor/greenwhite{ - dir = 10 +/turf/simulated/floor/grass{ + name = "astroturf" }, -/area/station/medical/research{ - name = "Genetic Research" - }) +/area/station/medical/dome) "wmO" = ( /obj/cable{ icon_state = "0-4" @@ -73990,15 +74088,22 @@ }, /turf/simulated/floor/plating, /area/station/maintenance/northwest) -"wnU" = ( -/obj/submachine/chef_sink/chem_sink{ - dir = 4; - pixel_x = -8 +"wnQ" = ( +/obj/machinery/door/airlock/pyro/external, +/obj/cable{ + icon_state = "1-2" }, -/turf/simulated/floor/greenwhite{ - dir = 8 +/obj/forcefield/energyshield/perma/doorlink{ + desc = "A door-linked force field that prevents gasses from passing through it."; + name = "Door-linked Atmospheric Forcefield"; + powerlevel = 1 + }, +/obj/mapping_helper/airlock/cycler{ + name = "North East Maintenance"; + cycle_id = "ne_maint2" }, -/area/station/medical/cdc) +/turf/simulated/floor/caution/northsouth, +/area/station/maintenance/northeast) "wor" = ( /obj/disposalpipe/segment/mail/vertical, /obj/machinery/atmospherics/binary/valve/purge{ @@ -74075,7 +74180,12 @@ /area/station/engine/hotloop) "wsk" = ( /obj/table/reinforced/chemistry/auto/auxsup, -/obj/item/paper/labdrawertips, +/obj/item/paper/book/from_file/pharmacopia{ + pixel_y = 6 + }, +/obj/item/paper/labdrawertips{ + pixel_x = 8 + }, /turf/simulated/floor/purplewhite/corner{ dir = 4 }, @@ -74148,17 +74258,6 @@ dir = 1 }, /area/station/hallway/secondary/exit) -"wyz" = ( -/obj/machinery/door/airlock/pyro/external, -/obj/mapping_helper/firedoor_spawn, -/obj/decal/stripe_delivery, -/obj/forcefield/energyshield/perma/doorlink{ - desc = "A door-linked force field that prevents gasses from passing through it."; - name = "Door-linked Atmospheric Forcefield"; - powerlevel = 1 - }, -/turf/simulated/floor, -/area/station/maintenance/solar/south) "wBK" = ( /obj/disposalpipe/segment/mineral{ dir = 4 @@ -74171,6 +74270,13 @@ icon_state = "engine_caution_north" }, /area/station/mining/staff_room) +"wBV" = ( +/obj/random_item_spawner/junk/one_or_zero, +/obj/cable{ + icon_state = "4-8" + }, +/turf/simulated/floor/plating, +/area/station/medical/maintenance) "wBY" = ( /obj/overlay{ icon = 'icons/misc/beach2.dmi'; @@ -74198,6 +74304,28 @@ /obj/mapping_helper/wingrille_spawn/auto/reinforced, /turf/simulated/floor/plating, /area/station/mining/magnet) +"wEd" = ( +/obj/random_item_spawner/junk/one_or_zero, +/obj/machinery/power/apc/autoname_east, +/obj/cable{ + icon_state = "0-8" + }, +/turf/simulated/floor/plating, +/area/station/medical/maintenance) +"wEk" = ( +/obj/stool/chair/blue{ + dir = 8 + }, +/turf/simulated/floor/bluewhite{ + dir = 4 + }, +/area/station/medical/medbay) +"wFc" = ( +/obj/cable{ + icon_state = "1-2" + }, +/turf/simulated/floor/carpet/blue, +/area/station/medical/medbay/psychiatrist) "wGP" = ( /obj/mapping_helper/wingrille_spawn/auto/reinforced, /turf/simulated/floor/black, @@ -74223,17 +74351,6 @@ /obj/item/wrench, /turf/simulated/floor/plating, /area/station/engine/substation/east) -"wHJ" = ( -/obj/machinery/door/airlock/pyro/external, -/obj/mapping_helper/access/mining, -/obj/decal/stripe_delivery, -/obj/forcefield/energyshield/perma/doorlink{ - desc = "A door-linked force field that prevents gasses from passing through it."; - name = "Door-linked Atmospheric Forcefield"; - powerlevel = 1 - }, -/turf/simulated/floor, -/area/station/mining/staff_room) "wIl" = ( /obj/machinery/firealarm/north, /obj/disposalpipe/segment/mail/horizontal, @@ -74302,6 +74419,15 @@ }, /turf/simulated/floor/airless/plating/catwalk, /area/station/com_dish/auxdish) +"wOq" = ( +/obj/stool/chair{ + dir = 8 + }, +/obj/cable{ + icon_state = "1-4" + }, +/turf/simulated/floor/plating, +/area/station/medical/maintenance) "wPk" = ( /obj/cable{ icon_state = "1-2" @@ -74442,15 +74568,20 @@ /turf/space, /area/space) "wXE" = ( -/obj/rack, -/obj/item/clothing/suit/hazard/paramedic, -/obj/item/clothing/glasses/healthgoggles, -/obj/item/storage/belt/medical, -/obj/disposalpipe/segment/morgue, -/turf/simulated/floor/bluewhite{ - dir = 5 +/obj/table/auto, +/obj/item/clipboard, +/obj/item/reagent_containers/dropper/mechanical{ + pixel_x = 11 }, -/area/station/medical/medbay) +/obj/item/storage/box/stma_kit{ + pixel_x = -8 + }, +/obj/item/storage/wall/medical{ + dir = 1; + pixel_y = 32 + }, +/turf/simulated/floor/black, +/area/station/medical/medbay/reception) "wXK" = ( /obj/machinery/conveyor/SN{ name = "cargo belt - north"; @@ -74588,12 +74719,29 @@ /obj/mapping_helper/access/engineering_storage, /turf/simulated/floor/plating, /area/station/engine/inner) +"xgh" = ( +/obj/submachine/chef_sink/chem_sink{ + dir = 8; + pixel_x = 4 + }, +/obj/stool/bed/moveable, +/obj/item/clothing/suit/bedsheet, +/turf/simulated/floor/sanitary/blue, +/area/station/medical/morgue) "xha" = ( /obj/machinery/atmospherics/binary/valve{ dir = 1 }, /turf/simulated/floor/grey/blackgrime, /area/station/hangar/catering) +"xia" = ( +/obj/machinery/light/incandescent, +/obj/disposalpipe/segment/morgue{ + dir = 8; + icon_state = "pipe-c" + }, +/turf/simulated/floor/specialroom/medbay, +/area/station/medical/medbay/lobby) "xij" = ( /obj/machinery/door/airlock/pyro/classic{ name = "Bathroom" @@ -74687,6 +74835,9 @@ dir = 1 }, /area/station/hangar/qm) +"xoD" = ( +/turf/simulated/floor/bluewhite/corner, +/area/station/medical/medbay/lobby) "xoE" = ( /obj/machinery/door/airlock/pyro/classic{ dir = 4; @@ -74739,6 +74890,16 @@ /area/station/engine/power{ name = "Engineering Control Room" }) +"xte" = ( +/obj/cable{ + icon_state = "4-8" + }, +/obj/disposalpipe/segment/morgue{ + dir = 1; + icon_state = "pipe-c" + }, +/turf/simulated/floor/plating, +/area/station/maintenance/south) "xuf" = ( /obj/cable{ icon_state = "1-8" @@ -74753,6 +74914,15 @@ /obj/item/swingsignfolded, /turf/simulated/floor/black, /area/station/crew_quarters/catering) +"xuy" = ( +/obj/machinery/computer/genetics, +/obj/disposalpipe/segment/transport, +/turf/simulated/floor/greenwhite{ + dir = 1 + }, +/area/station/medical/research{ + name = "Genetic Research" + }) "xvB" = ( /obj/table/reinforced/auto, /obj/machinery/light/lamp/black, @@ -74794,6 +74964,9 @@ /obj/machinery/firealarm/north, /turf/simulated/floor/plating, /area/station/maintenance/southeast) +"xwY" = ( +/turf/simulated/floor/carpet/blue/fancy/innercorner/south, +/area/station/medical/head) "xxx" = ( /obj/machinery/conveyor/WE{ name = "cargo belt - east"; @@ -74814,6 +74987,10 @@ }, /turf/simulated/floor/orangeblack, /area/station/maintenance/central) +"xyo" = ( +/obj/machinery/vending/cards, +/turf/simulated/floor/carpet/arcade, +/area/station/medical/staff) "xyL" = ( /obj/machinery/atmospherics/pipe/simple/color_pipe/cyan_pipe{ dir = 4 @@ -74872,6 +75049,18 @@ }, /turf/simulated/floor/caution/westeast, /area/station/routing/depot) +"xDG" = ( +/obj/storage/crate, +/obj/random_item_spawner/med_tool/some, +/obj/random_item_spawner/medicine, +/obj/random_item_spawner/med_kit/two, +/obj/random_item_spawner/desk_stuff/some, +/obj/machinery/light/small{ + dir = 1; + pixel_y = 21 + }, +/turf/simulated/floor/plating, +/area/station/medical/maintenance) "xDX" = ( /obj/machinery/door/airlock/pyro/glass{ dir = 4; @@ -74923,6 +75112,12 @@ }, /turf/simulated/floor/grime, /area/station/science/lab) +"xFT" = ( +/obj/machinery/firealarm/south, +/turf/simulated/floor/blue/side{ + dir = 6 + }, +/area/station/medical/medbay/surgery/storage) "xGk" = ( /obj/table/wood/auto, /obj/decal/cleanable/desk_clutter, @@ -75014,6 +75209,21 @@ }, /turf/simulated/floor/sanitary, /area/station/crew_quarters/showers) +"xJS" = ( +/obj/machinery/door/airlock/pyro/external, +/obj/mapping_helper/firedoor_spawn, +/obj/forcefield/energyshield/perma/doorlink{ + desc = "A door-linked force field that prevents gasses from passing through it."; + name = "Door-linked Atmospheric Forcefield"; + powerlevel = 1 + }, +/obj/mapping_helper/airlock/cycler{ + name = "Central Maintenance"; + cycle_id = "c_maint4"; + enter_id = "outer" + }, +/turf/simulated/floor/caution/northsouth, +/area/station/maintenance/central) "xJW" = ( /obj/machinery/portable_atmospherics/scrubber, /turf/simulated/floor/plating, @@ -75055,6 +75265,22 @@ /obj/decal/stripe_caution, /turf/simulated/floor, /area/station/crew_quarters/cafeteria) +"xPe" = ( +/obj/machinery/door/airlock/pyro/external{ + dir = 4 + }, +/obj/disposalpipe/segment/mail/horizontal, +/obj/mapping_helper/firedoor_spawn, +/obj/cable/orange{ + icon_state = "4-8" + }, +/obj/mapping_helper/airlock/cycler{ + name = "Central Maintenance"; + cycle_id = "c_maint4"; + enter_id = "inner" + }, +/turf/simulated/floor/caution/westeast, +/area/station/maintenance/central) "xPA" = ( /obj/machinery/door/airlock/pyro/maintenance{ dir = 4 @@ -75075,6 +75301,14 @@ /obj/decal/stripe_delivery, /turf/simulated/floor, /area/station/engine/coldloop) +"xRn" = ( +/obj/table/auto, +/obj/item/cigpacket, +/obj/item/matchbook{ + pixel_x = 4 + }, +/turf/simulated/floor/plating, +/area/station/medical/maintenance) "xRs" = ( /obj/disposalpipe/segment, /obj/grille/catwalk, @@ -75125,6 +75359,33 @@ /obj/machinery/firealarm/west, /turf/simulated/floor/grime, /area/station/crew_quarters/quarters_west) +"xVw" = ( +/obj/stool/chair/comfy/wheelchair, +/obj/disposalpipe/segment/transport, +/obj/cable{ + icon_state = "4-8" + }, +/turf/simulated/floor/blue/side{ + dir = 1 + }, +/area/station/medical/medbay/surgery/storage) +"xVH" = ( +/obj/machinery/door/airlock/pyro/external, +/obj/disposalpipe/segment/mail/vertical, +/obj/disposalpipe/segment/mail/horizontal, +/obj/mapping_helper/firedoor_spawn, +/obj/forcefield/energyshield/perma/doorlink{ + desc = "A door-linked force field that prevents gasses from passing through it."; + name = "Door-linked Atmospheric Forcefield"; + powerlevel = 1 + }, +/obj/mapping_helper/airlock/cycler{ + name = "Central Maintenance"; + cycle_id = "c_maint3"; + enter_id = "outer" + }, +/turf/simulated/floor/caution/northsouth, +/area/station/maintenance/central) "xWy" = ( /obj/machinery/computer/operating{ id = "robotics" @@ -75171,18 +75432,6 @@ /obj/machinery/firealarm/north, /turf/simulated/floor/plating, /area/station/maintenance/north) -"xYY" = ( -/obj/machinery/door/airlock/pyro/external, -/obj/disposalpipe/segment/mail/vertical, -/obj/disposalpipe/segment/mail/horizontal, -/obj/mapping_helper/firedoor_spawn, -/obj/forcefield/energyshield/perma/doorlink{ - desc = "A door-linked force field that prevents gasses from passing through it."; - name = "Door-linked Atmospheric Forcefield"; - powerlevel = 1 - }, -/turf/simulated/floor/caution/northsouth, -/area/station/maintenance/central) "xZN" = ( /obj/disposalpipe/segment{ dir = 4 @@ -75222,6 +75471,24 @@ }, /turf/simulated/floor/plating, /area/station/ranch) +"yby" = ( +/turf/simulated/wall/auto/supernorn, +/area/station/medical/medbay/psychiatrist) +"ybT" = ( +/obj/machinery/power/apc{ + areastring = "Psychiatrist's Office"; + dir = 1; + name = "Psychiatrist's APC"; + pixel_y = 24 + }, +/obj/cable{ + icon_state = "0-4" + }, +/obj/cable{ + icon_state = "0-8" + }, +/turf/simulated/floor/plating, +/area/station/maintenance/south) "ycs" = ( /obj/machinery/atmospherics/binary/valve/notify_admins{ dir = 1; @@ -75238,6 +75505,23 @@ /obj/mapping_helper/wingrille_spawn/auto/reinforced/crystal, /turf/simulated/floor/engine/vacuum, /area/station/science/lab) +"ydA" = ( +/obj/machinery/door/airlock/pyro/external{ + req_access_txt = "40" + }, +/obj/mapping_helper/firedoor_spawn, +/obj/decal/stripe_delivery, +/obj/forcefield/energyshield/perma/doorlink{ + desc = "A door-linked force field that prevents gasses from passing through it."; + name = "Door-linked Atmospheric Forcefield"; + powerlevel = 1 + }, +/obj/mapping_helper/airlock/cycler{ + name = "East Substation"; + cycle_id = "eastsubstation" + }, +/turf/simulated/floor, +/area/station/engine/substation/east) "ydC" = ( /obj/machinery/door/airlock/pyro/external{ dir = 4; @@ -75247,6 +75531,13 @@ /obj/mapping_helper/access/security, /turf/simulated/floor, /area/station/hallway/primary/east) +"ydT" = ( +/obj/mapping_helper/wingrille_spawn/auto/reinforced, +/obj/machinery/atmospherics/pipe/simple/color_pipe/cyan_pipe{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/station/medical/medbay/pharmacy) "ydX" = ( /obj/grille/catwalk{ dir = 4 @@ -75312,15 +75603,17 @@ /turf/simulated/floor, /area/station/quartermaster/office) "yfA" = ( -/obj/machinery/disposal/mail/small{ - mail_tag = "medbay"; - mailgroup = "medbay"; - mailgroup2 = "medresearch"; - name = "Medbay" +/obj/stool/chair/office{ + dir = 8 + }, +/obj/landmark/start/job/medical_doctor, +/obj/machinery/door_control{ + id = "medbay_entrance"; + name = "Medbay Door Control"; + pixel_x = -24 }, -/obj/disposalpipe/trunk/mail/west, /turf/simulated/floor/black, -/area/station/medical/medbay/pharmacy) +/area/station/medical/medbay/reception) "yfB" = ( /obj/disposalpipe/segment/produce, /turf/simulated/floor/grass{ @@ -75358,6 +75651,15 @@ dir = 8 }, /area/listeningpost) +"yhb" = ( +/obj/cable{ + icon_state = "1-2" + }, +/obj/disposalpipe/segment/mail/vertical, +/turf/simulated/floor/bluewhite{ + dir = 4 + }, +/area/station/medical/medbay/pharmacy) "yhA" = ( /obj/machinery/door/airlock/pyro/external{ name = "Outpost Shuttle Dock" @@ -75375,6 +75677,11 @@ /obj/mapping_helper/wingrille_spawn/auto, /turf/simulated/floor, /area/station/medical/medbay/lobby) +"yiu" = ( +/turf/simulated/floor/redwhite/corner{ + dir = 1 + }, +/area/station/medical/medbay/surgery) "yiC" = ( /obj/machinery/conveyor/SN{ name = "cargo belt - north"; @@ -89298,9 +89605,9 @@ eiS eiS eiS eiS -qWG +qzh jKt -fLu +qXR euV aaF ani @@ -101229,7 +101536,7 @@ azn aCd aDl qlm -qNC +awf awf awf qlm @@ -104337,7 +104644,7 @@ cJa cKL cMk cNE -drV +cSk cQu cQu cQu @@ -105245,10 +105552,10 @@ uWH qVW cPc cPb -cSk +kpd cTD cVg -cWj +tFj cXD cYO cZE @@ -105848,8 +106155,8 @@ nvi cMp fhv cPe +eOR cQy -rfG cTF cVi cWl @@ -106040,9 +106347,9 @@ iKL acD wrf ezz -agK +qrL ahl -mdD +rRw aeT ajR alc @@ -106144,14 +106451,14 @@ cuH cDt clg cGA -cHW -cHW -cHW -cMq -cMq -cHW -nHY -cHW +cSy +cSy +cSy +cSy +cSy +cSy +cSy +hLF cTD cTD cTD @@ -106162,9 +106469,9 @@ cTD cTD cZt dcg -wyz +mzr ddt -deb +kjV rhv yeg dgV @@ -106446,7 +106753,7 @@ cBZ cDu clg cGB -cHZ +cSy cJg cKP cMr @@ -106454,14 +106761,14 @@ cNJ liV cQA cSn -cTG +rXL mCf vxs cXG cYQ cZH sVP -cHZ +cGJ dac dch ddh @@ -106690,7 +106997,7 @@ eNc aaF aaB bgA -jNE +nQK bgA bgA jOP @@ -106722,7 +107029,7 @@ byI cbC bgA bgA -jNE +iaT bgA aaB aaF @@ -106748,27 +107055,27 @@ cuH cDv cFj cGC -cHZ +cSy cJh cKQ cMs -cMC -cMC +efL +tOV cQB cSo -cTG +kIL +cVk +efm +hdq cVk -cMC -cMC -cMC cZI daH -cHZ +cGJ dad dcA dcg dcg -deg +dcg det dfq dfT @@ -107050,26 +107357,26 @@ cuH cDw cFk cGD -cHZ +cSy cJi cKR -cMt -cNK -cPg +oUl +pgN +hKe jrl cSp qiA -cVl -cPg +yhb +rab cXH -cMt +rQO cZJ daI -cHZ +cGJ daq dcB -ddp -gKz +deh +deh deh deL deh @@ -107294,7 +107601,7 @@ eNc aaI aaa sOs -jGF +riZ bgA bjx lkY @@ -107326,7 +107633,7 @@ toG kSc xJW bgA -jGF +uih sOs aaa aam @@ -107352,26 +107659,26 @@ cYH cDx cFl cGE -cHZ +cSy cJj -cKS -cMu +efL cNL -cPg +cNL +xwY cQD cSq -cTG +gkd dcf -cPg -cQC -cYQ cZK +gXa +eMz +sEq daJ -cHZ +cGJ iOp jVt -cHZ ddv +ryB ddv deM dcg @@ -107654,27 +107961,27 @@ cCb cDy cFm cAL -cHZ -cHZ -cHZ -cHZ +cSy +qmO +ica +gsJ cNM -cPg -cQE -cSr -qSU -cSr -cSr -cXI -cYR -cYR +gqN +cSy +cGJ +cGJ +cGI +lmZ +ydT cYR -pgI +cGI +cGI +cGJ dcG ddO -deu +ddv deX -dds +ddv deT dcg dcA @@ -107954,31 +108261,31 @@ czf cAA cCc cAL -cFn -cGG -cIa -lwF +cFm +cId +cSy +cSy cKT cMv cNN -cPh -cQF -cWX +cSy +cSy +cTG cTI cVn -cWm +cMC cXJ cYS cZL daK cMt dcH -ddP -cPg +lEO +ddv deY -dds +ddv deU -dcg +oDm dcA dgq dds @@ -108255,31 +108562,31 @@ cxJ ddJ cAB cCd -cDz -cFo -cGH -cGH -sDJ +cAL +cFm +cAL +kfF +cxN cKU -cMw +xoD cMw cPi cQG -cSt -cSv -cSv -cSv -pCJ -cSv -cSv -cSv -cSt -dcI -ddQ -dev -deZ -ddv -ddv +cTG +cNS +cPg +cPg +mUH +mhP +lGZ +jRM +uBy +uBy +uBy +uBy +uBy +uBy +uBy ddv vCd ddh @@ -108557,19 +108864,19 @@ cxJ czh cAC cCe -cDA -cFm -cGI -cGI +cAL +kXl +tSW +tSW nlY -cGI -cGI -cGJ +dGI +lRi +uMd uzG cQH cSu cTJ -cVo +cWn cWn cXL cYT @@ -108581,11 +108888,11 @@ ddR dev dfa dfC -cHZ +uBy dfZ cLH -cqE -aaI +dgs +aFb aaa aam uUX @@ -108859,35 +109166,35 @@ cxK czi cAD cCf -cDB +lst cFp -cGJ -cIb +cGH +cGH cJm cKV cMx cNO -cNS +vNL cQI -cSt +oSG dhs -cVp -cVp +cSr +cSr cXM -cVp -cZN +ddP +cZM daM cSt dfu -cPg -cPg -cPg +wge +cVp +nJi dfD -cHZ +uBy dgr cLH -cqE -aaI +dgs +aFb aaa aam oMX @@ -109162,34 +109469,34 @@ kYs cAE cCg cDA -cFq -tFC -cIc -cJn +cAL +cAL +cAL +cxN cKW cMy -cGJ +jTZ aIm -cQI -cSv +oyo +cTG cTL -cVp -cWo -cXN -dhA -cVp -daN +wEk +cNK +jpw +ddP +cZM +cQC cSv -dcL -cPg +dfu +cVp dew -cPg +cVp dfE -cHZ -dgs +rfK +cuW cLH -cqE -aaI +cuW +aFb aaa dgD kiZ @@ -109461,37 +109768,37 @@ coz cwl cxM yhO -cAF +ePl cCh cDC cFr -jQa -cId -cJo +cAL +dyy +uTS cKX cMz lmh cPk -cQJ uTS -cTM -dfr +uTS +cTG +cTG leN -cXO +cXN cVq dfr daO hBJ dcM -cPg +klH dex -cPg +cVp dfF -cHZ -dgs -cLH -cqE -aaI +uBy +pmo +dgv +cuW +aFb aaa dgD kiZ @@ -109766,33 +110073,33 @@ sfr cAG cCi cDA -cFs -rQI -cIe +cAL +cAL +cAL cJp cKY yfA -cGJ -cPl -cQI -cSv +jMb +jMb +lFI +ozR cTN -cVp +pcG dfM -aTi -cVp -cVp +jpw +ddP +cZM daP -cSv +cSt dcK -cPg -dey -cPg -dfE -cHZ -siL +nom +cVp +yiu +iHY +uBy +deo cLH -cqE +cuW cqE aaa dgD @@ -110068,31 +110375,31 @@ czi cAD cAG cDB -cFt -cGJ -cIf +cCi +cAL +cAL lhG cKZ -cMA -cNO -cPm +jMb +jMb +jMb cQK -cSx +ozR cTO -cVr -cWp -dfY -dhB +sbA +cPg +cXN +dhA cVr daQ -cSv +uBy dcN -cPg -cPg -cPg -cQC -cHZ -dar +rln +opr +hIe +oiN +uBy +dgt cLH cuW cqE @@ -110370,31 +110677,31 @@ czl cAH cCj cDA -cFu -cGN -cGN +cAF +cAL +cAL cJr cGN cMB -cGJ -cPn -cQI -cSv -cTP -cVp -cVp -cVp -cVp -cVp +cMB +cMB +uLA +rml +jnX +kNe +daT +hAO +ldY +cVr daR -cSv -dcO -cXH -dez -dfb -dfG -cHZ -dgt +uBy +uBy +uBy +uBy +uBy +uBy +uBy +cMW cLH cuW dgL @@ -110672,16 +110979,16 @@ czm cAI cCd cDA -cFv +cAG cGG cIg -cHZ +ozR brz -cPw -cPw -cPo -cQI -cSv +jMb +jMb +jMb +jMb +ozR cTQ cVs cWq @@ -110689,14 +110996,14 @@ cXR dgO hYe daS -cSv +siZ dcP ddK -cTG -cTG -cTG -cHZ -cHZ +fcs +uFy +nBB +vIi +yby cLH cuW dgL @@ -110974,31 +111281,31 @@ czn ddL cCk cDD -cFw cGO +nmJ cIh -cJs +uTS wXE -cMD +jMb cNQ cPp -cQI -cSy -cSy -cSy -cWr +qoF +ozR +uEZ +vHo +cNK cXS -cYU -cSy -cSy +lhP +cZM +cPg dbI -dcK -ddK -cTG +dcP +mDB +pim dfc dfe dga -cHZ +yby cLH cuW cqE @@ -111275,32 +111582,32 @@ coE czo cAC cCe -cDA +ivi cFx -cGP -cHZ -cHZ -cHZ +xia +cMP +cMP +cLj +eQT +cLj +cMP +cMP cHZ -cNR -cPq -cQI -cSy -rby -cVt +cTG +cTG cWs cXT enQ cZP daT dbJ -dcK -cQC -cTG -dfe -dfe -dgb -cHZ +qIv +tFV +dNz +wFc +oJc +dga +rfK cLH cuW cqE @@ -111577,33 +111884,33 @@ coE oRM olE cAL -cDA -cFy -cGQ -cHZ +sau +cGP +cAL +cLj cJt -pzu iuF -cNS +iuF +osd cPr -cQL +cLj oXu -cTS -cVu -cWt +cMC +cMC +dfM cXU -cYW -cZQ -daU +lhP +cZM +cPg dbK -dcK -cQC +dcP +otO oAv -dfe -dfe -dgc -mSY -dgv +owx +pmW +ktx +yby +ybT cuW cqE aaa @@ -111882,29 +112189,29 @@ wGP kid cFz cGR -cHZ +cLj cJu -cLd -cHZ +mbH +los tSS cPs cQM -cSy +cTP cTT -cVv +cWu cWu cXV cYX cZR daV dbL -dcQ +dcP ddS -cTG +fPk dff -dfe +iJN dgd -cHZ +yby cLH cuW cqE @@ -112184,29 +112491,29 @@ lGA cDJ cFA dcE -cIi +pYP cJv -cJv -cIi -cNU +mbH +sFr +mbH oUh -cQN -cSA -cTU -cTU -cWv +cLj +cNS +cQC +cTG +cTG cXW cYY cTU -daW -cUb -kuZ -ddT -cUb -dfg -dfe -scU -cHZ +cTG +cIi +cIi +cIi +cIi +cIi +cIi +cIi +cIi cLH cuW cqE @@ -112483,32 +112790,32 @@ cxP csd cAN haq -cDJ +rhQ cFB -ddq -cIi -cJw -cJy +spv +cLj +tQH +ggg cMF cNV cOh -cQO +cLj cNU iwc -wnU +cHZ jhE gLL hZV ffP khR +cIi cUb -dcS ddU cUb -cqE -cqE -cqE -cqE +hfb +hnv +cIi +cIi cLH cuW cqE @@ -112788,29 +113095,29 @@ wGP cDG cFB ddb -cIi -cJx -cJy -cJw -cJy -cOh -cQP -cNU -klL -cVx -cVx -cVx +cLj +cMP +cMP +cLj +cLj +rZK +cLj +cHZ +cHZ +cHZ +jYG +kbB cZa cZT pXX -dbM +cIi dcT -ddV +ddU cUb -cuW -cuW -dgf -cqE +dKy +rUu +gqf +cIi dgB cuW cqE @@ -113090,29 +113397,29 @@ coE cDH cFB cGW -cIj -cJw -cJy +gkT +cSG +hOD cJw -cJy -cOh +cQQ +mlC cQQ cSB evi -cVy +cSE cVy cXY cZb cZU pdJ -dbN +cIi dcU ddW -cUb -cuW -cuW -cuW -cqE +kOi +ecI +rUu +qUF +cIi cLH cuW dgL @@ -113391,31 +113698,31 @@ cAN jHR cDG cFB -cGW +fUs spv +gcw +iMH cJy -cJy -cJy -oHZ -cOh -cQR -cNU +cWB +cYc +cYc +jvY sLI -cVz +cSG nKf cXZ cZc cZV eIU dbO -dcV -ddW -cUb -cuW -cuW -cuW +jGE +oKd +oKd +isw +sBM +ePC fiJ -cLH +xte cuW dgL aaa @@ -113693,31 +114000,31 @@ cAN coE qja cFB -cGW -cIj -cJz -cLe -cMG +fUs +spv +cSG +dOA +cJy cNW cPu sIT -cNU +nIZ kXx -cVx -cVx -cVx +vtW +xVw +mNS cVz cVx -eIU -dbP -dcW -ddW -cUb -cuW -cuW -cuW -cqE -cLH +rhR +cIi +sZT +gOd +gOd +kVf +isw +fvr +cIi +cyy cuW dgL aah @@ -113993,17 +114300,17 @@ cxR czu cAS dZO -cDJ +rhQ cFB cGX -cIi -cIi +oAF +eGJ itH cMH cNX cPv cQT -cNU +flC lrL pcF lNu @@ -114011,15 +114318,15 @@ byE rbC nkn jhT -dbQ +cIi dcX ddX -cUb -cuW -cuW -cuW -cqE -cLH +xgh +hQN +ejF +gFI +cIi +cyy cuW cqE aaa @@ -114296,32 +114603,32 @@ czv dce wGP cDK -cFB +eXp cGY cIl -cIi -cIi -cIi +vtW +xuy +ddI cNY qOh cIj -cNU -cUb -cUb -cWy -cWy +mdC +jMq +vtW +hTn cWy -cUb -cUb -cUb -fDU -cUb -cUb -cqE -cqE -cqE -cqE -cLH +ddg +dgy +jkg +cIi +cIi +cIi +cIi +cIi +cIi +cIi +cIi +cyy cuW cqE aaa @@ -114599,31 +114906,31 @@ cAU cCo cDL cFC -cGZ +cxM cIm -cJA +cSG cLg cMI cNZ -cPy +amR cQU -cSC +tZU oKm jUl wgO hZW -acs +ddg nct wmJ -cSE -rtg +kAS ddY -deD -dfk -ddd pVq ddg -cLH +cuW +cuW +dgf +cMW +cyy cuW cqE aaa @@ -114903,29 +115210,29 @@ cDM cFD cHa cIn -iFE -cLh cMJ -cOa -cPz -cQV -ucg -itE -cVC -cWA -cWA -cZf -cWA -rUk -cSG -put +cMJ +cMJ +cSE +cSE +cSE +cSE +cSE +cSE +cgL +cWy +dgy +uKJ ddd -deE ddd ddd dgi -dgy -cLH +ddg +cuW +cuW +cuW +cMW +cyy dgF dgL aaa @@ -115205,29 +115512,29 @@ cDN cFE cHb ebY -cJC -cLi +chj +aaa cMK cOb cPA cQW -cSE -dOA +rsw +gLn cVD -cWB -cYc -cYc +hXl +cWy +dgy cZY -rUk -cSG -dfX -ddd -rNV +uKJ dfl uKJ dgj -dgy -cLH +ddg +cuW +cuW +cuW +oDb +cyy cuW dgL aaa @@ -115506,30 +115813,30 @@ cxW mil jCv chj -aFb -cJD -cJD +chj +aaa +aaa cML -cOc -cPB +cSF +cSF cQX cSF nqc cVE -cWC -cYd -cZg +hXl +cWy +ddg cZZ -tjw -cSF -ddc ddZ -deE dfm ddd dgk ddg -cLH +cuW +cuW +cuW +cMW +cyy cuW cqE aaa @@ -115810,28 +116117,28 @@ cFG chj aaI aaa -cJD +aaa cMM -cOc -cPC -cQY -cSG +cSF +cSF +cSF +cSF smk -cVD +dpX cWD -cYe +dqo cYe daa -rUk -mji -ddd -ddd -rNV +uKJ ddd ddd dgl -dgy -cLH +ddg +cuW +cuW +cuW +cMW +cyy cuW dgL aaa @@ -116043,9 +116350,9 @@ aRB aVk icp aZF -kKe +gPP baS -bbj +nMM tLF rwr hsX @@ -116091,9 +116398,9 @@ aaa hBR tlx uSY -cdY +lWs cew -kBM +mqH cew cji clj @@ -116107,33 +116414,33 @@ coC aaa aam cxN -cAL +lUL cDA cxN aaI aaa -cLj +aaa cMN cOd -cPD -cQZ +cSH +cSH cSH lDc -cVD -cWA -cWA -cZh +tnJ +pJX +gLK +ddg cWA -pHS -cSC -dde -ddd -rNV +uKJ ddd dfK dfo -dfo -cLH +ddg +cMW +cMW +cMW +cMW +cyy cuW dgL aaa @@ -116409,33 +116716,33 @@ coD aaa aFc cxN -cAL +lUL cDA cxN aMr aaa -cLj -kNp +aaa +cMK cOe cPE -cRa -cSE +cSF +xyo qlS -gdw +cVE fHk -amR -jVp -tZU +xFT +ddg +fcY gkr -cSC -ddf -dea -deG wBY dfo dfo cuW -cLH +cuW +cuW +mHt +hyB +uCK cuW dgL aaa @@ -116711,31 +117018,31 @@ cea aaa aFc cxN -cAL +lUL cDA cxN aMr aaa -cJD -cMP -cOf -ebd -cMP -cSE -cSE -cSE -cSE -cSE -cSE -cSE -cSE -cSE +aFb +cMK +tcw +tcw +kUz +tcw +tcw +tcw +hBU +kUz ddg ddg ddg dfo dfo cuW +cuW +cuW +cuW +cxY dfz dfA der @@ -117020,24 +117327,24 @@ aMr aaa cqE cul -cxY -cLH cuW +lXu cuW -cRx cuW +cRx cuW +wab cuW cuW +dcC cuW cuW cuW -dcC ddw cuW cuW cuW -dfz +hRz dfA der der @@ -117315,31 +117622,31 @@ aaI aaa aFc dgY -cDR +eDJ cFH dgY aMr aaa cqE -cuU +dfz cxZ cMV cOi cPX cMV cOi -cOi +kff cOi cWY csf cOi cOi -cMV cOi +ofi cOi cOi cOi -dfA +dyE der der aaa @@ -117617,7 +117924,7 @@ aaI aaa aFc dgY -cDR +eDJ cFH dgY aMr @@ -117635,11 +117942,11 @@ cMW eDZ cMW cMW -cqE -cqE -cqE -cqE -der +gpc +gpc +lME +gpc +kPs der der der @@ -117919,7 +118226,7 @@ aaI aaa aam dgY -cDR +eDJ cFH dgY aaI @@ -117937,11 +118244,11 @@ cuW cLH cuW deo -cqE -aaI -aaa -aaa -aaa +gpc +uoU +wBV +xRn +kPs aaa aaa aaa @@ -118239,11 +118546,11 @@ cWG cXh cZk dcc -cqE -aaF -afk -aaa -aaa +gpc +xDG +rZM +wOq +kPs aaa aaa aaa @@ -118523,7 +118830,7 @@ cjM cjM cjM cwV -kQX +psd jDP cwV cwV @@ -118531,21 +118838,21 @@ cwV cwV cuX cID -cqE -cqE -cqE -cqE -cVG -cVG -cVG -cVG -cVG -cVG -cVG -cVG -aaI -aaa -aaa +cMW +cMW +cMW +cMW +cVH +cVH +cVH +cVH +cVH +cVH +cVH +sft +jci +wEd +kPs aaa aaa aaa @@ -118841,18 +119148,18 @@ cVH xKR cYh cZm -dae -dae -dbS +gOz +uFR +cVH +cVH +cVH +cVG cVG -dec deH hKn aaa aaa aaa -aaa -aaa aao aaa aao @@ -119145,16 +119452,16 @@ cYi cYi daf dbj +dbj +dbj dbT -kAe +mgK ded -deI +mcQ gSo aaa aaa aaa -aaa -aaa aao aaa aao @@ -119447,6 +119754,8 @@ cYj cYj dag dae +dae +dYY dbU cVG dec @@ -119455,8 +119764,6 @@ sWb aaa aaa aaa -aaa -aaa aao aaa aao @@ -119751,11 +120058,11 @@ cVJ gpz cVJ cVJ +cVG +cVG aaB -ahd -dft -dhu -dlA +dhv +siW dhG dlA dhP @@ -120888,7 +121195,7 @@ jnB aaa bjP bgA -lIa +inJ box box box @@ -120912,7 +121219,7 @@ bVz bPm bPm bPm -uGN +xPe bgA bjP aaa @@ -121796,7 +122103,7 @@ bgF sGP ghP boB -fsq +kpY lfh dWf nFV @@ -121816,7 +122123,7 @@ dWf qZf dWf lfh -fsq +xJS bZE kIP sGP @@ -122993,15 +123300,15 @@ msr bdx ePA beM -ucP +ilP bfX -bgv +jGO rJQ bhv lje pJE dEL -xYY +xVH xGl nau jSv @@ -123027,15 +123334,15 @@ bvK oEr nBc jOn -fsq +xJS uSY tlx hDu ceG uKi -cfd +tfU cfr -nFC +ydA cgk xIm chH @@ -123910,7 +124217,7 @@ bjV blC eFF boH -mZL +rJo bsg btT bvD @@ -123930,7 +124237,7 @@ jXS bTV gfu bXc -mZL +nYf boH caN cbY @@ -129002,9 +129309,9 @@ aaa aaa aaa aaa -cgZ +lQf cVQ -lZd +spM ckp chV avS @@ -129935,9 +130242,9 @@ aSZ cnG cma ckp -hzT +lSO bbi -bbs +wnQ iNZ pdD gvO @@ -129983,9 +130290,9 @@ aaa hBR tlx uSY -cdY +tPJ cew -kBM +jjb chu cjJ clp @@ -135748,9 +136055,9 @@ cOG cQd cRP cTk -jHW +gDO cVV -eLb +jtg cYz cYz dav @@ -135947,9 +136254,9 @@ ooQ ooQ hQD hQD -aqE +hyM arI -sEP +flz aus aus axj @@ -136050,9 +136357,9 @@ cOH cQe cRQ iMs -wHJ +cCn cVW -umQ +kfq cYA cYA cYA @@ -139582,7 +139889,7 @@ arJ aaa aaa aKm -lnj +mMO lnj aFx aIP @@ -139884,7 +140191,7 @@ aAD aaS arR aEA -lnj +mMO lnj aFx aFx @@ -139921,7 +140228,7 @@ bip bjr bjI bjr -iBh +ewx bBF bDB bFz diff --git a/maps/density2.dmm b/maps/density2.dmm index 1bf99d6370b9a..0a6e3455276ac 100644 --- a/maps/density2.dmm +++ b/maps/density2.dmm @@ -5348,6 +5348,9 @@ }, /obj/item/disk/data/cartridge/captain, /obj/item/peripheral/network/radio/locked, +/obj/item/pinpointer/disk{ + pixel_y = 9 + }, /turf/simulated/floor/black, /area/listeningpost) "IV" = ( @@ -6587,7 +6590,7 @@ /turf/simulated/floor/marble, /area/station/ranch) "Rj" = ( -/obj/submachine/mixer, +/obj/machinery/mixer, /obj/table/auto, /turf/simulated/floor/specialroom/bar, /area/station/crew_quarters/cafeteria) diff --git a/maps/donut2.dmm b/maps/donut2.dmm index 01274faf893f8..923f825e7e2cb 100644 --- a/maps/donut2.dmm +++ b/maps/donut2.dmm @@ -463,7 +463,7 @@ /area/listeningpost) "abV" = ( /obj/item/reagent_containers/food/drinks/drinkingglass, -/obj/item/pinpointer, +/obj/item/pinpointer/disk, /obj/table/wood/auto{ dir = 5 }, @@ -1940,12 +1940,12 @@ /turf/simulated/floor, /area/station/security/main) "akY" = ( -/obj/stool/chair, +/obj/stool/chair/purple, /turf/simulated/floor/white, /area/station/crew_quarters/observatory) "akZ" = ( -/obj/stool/chair, /obj/landmark/start/job/scientist, +/obj/stool/chair/purple, /turf/simulated/floor/white, /area/station/crew_quarters/observatory) "alb" = ( @@ -2120,16 +2120,16 @@ location = "bar"; name = "buddytime beacon" }, -/obj/stool/chair{ +/obj/stool/chair/purple{ dir = 1 }, /turf/simulated/floor/white, /area/station/crew_quarters/observatory) "alK" = ( -/obj/stool/chair{ +/obj/landmark/start/job/scientist, +/obj/stool/chair/purple{ dir = 1 }, -/obj/landmark/start/job/scientist, /turf/simulated/floor/white, /area/station/crew_quarters/observatory) "alL" = ( @@ -2942,17 +2942,17 @@ /turf/simulated/floor, /area/station/hallway/secondary/researchshuttle) "aqZ" = ( -/obj/stool/bench/yellow, /obj/machinery/camera{ c_tag = "Escape Hallway"; dir = 10 }, +/obj/stool/bench/red, /turf/simulated/floor/escape, /area/station/hallway/secondary/exit) "ara" = ( /obj/machinery/light/emergency, -/obj/stool/bench/green, /obj/machinery/light/incandescent, +/obj/stool/bench/green, /turf/simulated/floor/escape, /area/station/hallway/secondary/exit) "arc" = ( @@ -5909,6 +5909,10 @@ name = "Door-linked Atmospheric Forcefield"; powerlevel = 1 }, +/obj/mapping_helper/airlock/cycler{ + cycle_id = "westmaint"; + name = "West Maintenance" + }, /turf/simulated/floor/plating, /area/station/maintenance/west) "aEF" = ( @@ -6045,7 +6049,7 @@ /area/station/engine/elect) "aFe" = ( /obj/table/glass/auto, -/obj/item/reagent_containers/food/snacks/candy/taffy/watermelon, +/obj/item/reagent_containers/food/snacks/candy/wrapped_candy/taffy/watermelon, /obj/item/reagent_containers/food/drinks/water, /obj/machinery/light_switch/east, /turf/simulated/floor/blue/checker, @@ -6789,13 +6793,7 @@ /turf/simulated/floor/plating, /area/station/storage/tech) "aJc" = ( -/obj/rack, -/obj/item/circuitboard/robot_module_rewriter, -/obj/item/circuitboard/cloning, -/obj/item/circuitboard/card, -/obj/item/circuitboard/operating, -/obj/item/circuitboard/powermonitor, -/obj/item/circuitboard/genetics, +/obj/rack/organized/techstorage_med, /turf/simulated/floor/plating, /area/station/storage/tech) "aJd" = ( @@ -6962,7 +6960,7 @@ /obj/rack, /obj/item/clothing/under/color/grey, /obj/item/clothing/shoes/black, -/obj/item/clothing/suit/fire, +/obj/item/clothing/suit/hazard/fire, /obj/item/clothing/mask/gas/emergency, /turf/simulated/floor/plating, /area/station/maintenance/northeast) @@ -7846,6 +7844,10 @@ name = "Door-linked Atmospheric Forcefield"; powerlevel = 1 }, +/obj/mapping_helper/airlock/cycler{ + cycle_id = "innermaint"; + name = "Central Inner Maintenance" + }, /turf/simulated/floor/plating, /area/station/maintenance/inner/central) "aOO" = ( @@ -8740,6 +8742,10 @@ name = "Door-linked Atmospheric Forcefield"; powerlevel = 1 }, +/obj/mapping_helper/airlock/cycler{ + cycle_id = "innermaint4"; + name = "Central Inner Maintenance" + }, /turf/simulated/floor/plating, /area/station/maintenance/inner/central) "aTL" = ( @@ -10942,6 +10948,10 @@ name = "Door-linked Atmospheric Forcefield"; powerlevel = 1 }, +/obj/mapping_helper/airlock/cycler{ + cycle_id = "eastmaint"; + name = "East Maintenance" + }, /turf/simulated/floor/plating, /area/station/maintenance/east) "bfr" = ( @@ -11396,7 +11406,7 @@ /area/space) "bhY" = ( /turf/simulated/wall/auto/supernorn, -/area/station/turret_protected/ai_upload) +/area/station/hallway/secondary/construction) "bhZ" = ( /obj/machinery/navbeacon{ codes_txt = "patrol;next_patrol=Engineering Hallway"; @@ -11682,6 +11692,17 @@ dir = 8 }, /area/station/medical/research) +"bka" = ( +/obj/machinery/door/airlock/pyro/engineering/alt, +/obj/mapping_helper/firedoor_spawn, +/obj/mapping_helper/access/engineering_atmos, +/obj/mapping_helper/airlock/cycler{ + cycle_id = "atmos"; + name = "Atmos"; + enter_id = "outer" + }, +/turf/simulated/floor/grime, +/area/station/atmos/highcap_storage) "bkf" = ( /turf/simulated/wall/auto/reinforced/supernorn, /area/station/crew_quarters/market) @@ -12866,6 +12887,11 @@ /obj/disposalpipe/segment/mail{ dir = 4 }, +/obj/mapping_helper/airlock/cycler{ + cycle_id = "bridge"; + name = "Bridge"; + enter_id = "inner" + }, /turf/simulated/floor/black/side{ dir = 8 }, @@ -13236,13 +13262,13 @@ /area/station/engine/storage) "bsJ" = ( /obj/rack, -/obj/item/clothing/suit/fire, +/obj/item/clothing/suit/hazard/fire, /obj/item/clothing/mask/gas/emergency, /obj/item/clothing/head/helmet/hardhat, /obj/item/tank/air, /obj/item/chem_grenade/firefighting, /obj/item/chem_grenade/firefighting, -/obj/item/clothing/suit/fire, +/obj/item/clothing/suit/hazard/fire, /obj/item/clothing/mask/gas/emergency, /obj/item/tank/air, /obj/item/clothing/head/helmet/hardhat, @@ -13877,13 +13903,11 @@ }, /area/station/engine/engineering) "bxe" = ( -/obj/machinery/vending/snack, /turf/simulated/floor/yellow/side{ dir = 9 }, /area/station/hallway/primary/south) "bxf" = ( -/obj/disposalpipe/segment, /turf/simulated/floor/yellow/side{ dir = 1 }, @@ -14955,7 +14979,7 @@ "bDF" = ( /obj/decal/cleanable/cobweb2, /obj/rack, -/obj/item/clothing/suit/fire, +/obj/item/clothing/suit/hazard/fire, /obj/item/clothing/mask/gas/emergency, /obj/random_item_spawner/mask/one, /turf/simulated/floor/plating, @@ -15422,9 +15446,7 @@ /turf/simulated/floor/plating, /area/station/atmos/highcap_storage) "bFV" = ( -/obj/table/auto, -/obj/item/storage/toolbox/mechanical, -/obj/item/crowbar, +/obj/machinery/abcu, /turf/simulated/floor, /area/station/storage/tools) "bFW" = ( @@ -15659,11 +15681,6 @@ /obj/machinery/secscanner{ pixel_y = 10 }, -/obj/forcefield/energyshield/perma/doorlink{ - desc = "A door-linked force field that prevents gasses from passing through it."; - name = "Door-linked Atmospheric Forcefield"; - powerlevel = 1 - }, /turf/simulated/floor/plating, /area/station/maintenance/south) "bGU" = ( @@ -16492,6 +16509,11 @@ /obj/machinery/door/airlock/pyro/command/alt, /obj/mapping_helper/access/ai_upload, /obj/mapping_helper/firedoor_spawn, +/obj/mapping_helper/airlock/cycler{ + cycle_id = "aicore"; + name = "AI Core"; + enter_id = "outer" + }, /turf/simulated/floor/engine, /area/station/turret_protected/AIsat) "bQH" = ( @@ -16660,9 +16682,6 @@ /obj/landmark/start/job/rancher, /turf/simulated/floor/dirt, /area/station/ranch) -"bYD" = ( -/turf/simulated/wall/auto/supernorn, -/area/station/storage/auxillary) "bYJ" = ( /obj/cable{ icon_state = "0-8" @@ -17269,6 +17288,10 @@ /obj/cable{ icon_state = "1-2" }, +/obj/mapping_helper/airlock/cycler{ + cycle_id = "ranchship"; + name = "Ranch Ship" + }, /turf/simulated/floor/green, /area/station/wreckage) "cuI" = ( @@ -17689,7 +17712,7 @@ "cHd" = ( /obj/table/auto, /obj/item/card/id/captains_spare, -/obj/item/pinpointer, +/obj/item/pinpointer/disk, /obj/item/device/radio/intercom/bridge, /turf/simulated/floor/carpet/arcade, /area/station/crew_quarters/captain) @@ -17721,6 +17744,10 @@ name = "Door-linked Atmospheric Forcefield"; powerlevel = 1 }, +/obj/mapping_helper/airlock/cycler{ + cycle_id = "westmaint2"; + name = "West Maintenance" + }, /turf/simulated/floor, /area/station/maintenance/west) "cIU" = ( @@ -17860,10 +17887,12 @@ /turf/simulated/floor, /area/station/quartermaster/refinery) "cNm" = ( -/obj/machinery/disposal, -/obj/disposalpipe/trunk/east, -/turf/simulated/floor, -/area/station/storage/auxillary) +/obj/machinery/power/apc/autoname_west, +/obj/cable{ + icon_state = "0-4" + }, +/turf/simulated/floor/plating, +/area/station/hallway/secondary/construction) "cNv" = ( /obj/item/clothing/under/suit/pinstripe, /obj/item/clothing/mask/smile, @@ -18500,6 +18529,11 @@ }, /obj/decal/stripe_delivery, /obj/forcefield/energyshield/perma/doorlink, +/obj/mapping_helper/airlock/cycler{ + cycle_id = "innereng"; + name = "Inner Engineering"; + enter_id = "outer" + }, /turf/simulated/floor, /area/station/engine/inner) "djq" = ( @@ -18776,13 +18810,6 @@ /obj/decal/cleanable/blood/splatter, /turf/simulated/floor/plating/airless/asteroid/lighted, /area/space) -"dsg" = ( -/obj/machinery/vending/book, -/turf/simulated/floor, -/area/station/storage/auxillary) -"dsh" = ( -/turf/simulated/wall/auto/reinforced/supernorn, -/area/station/storage/auxillary) "dsL" = ( /obj/submachine/seed_manipulator{ dir = 4 @@ -20947,6 +20974,10 @@ /obj/machinery/door/airlock/pyro/external{ dir = 4 }, +/obj/mapping_helper/airlock/cycler{ + cycle_id = "eastmaint"; + name = "East Maintenance" + }, /turf/simulated/floor/plating, /area/station/maintenance/east) "eKR" = ( @@ -21837,9 +21868,8 @@ /obj/machinery/light/small{ dir = 8 }, -/obj/storage/crate/abcumarker, -/turf/simulated/floor, -/area/station/storage/auxillary) +/turf/simulated/floor/plating, +/area/station/hallway/secondary/construction) "fna" = ( /obj/machinery/turret{ dir = 4 @@ -21986,8 +22016,8 @@ /turf/simulated/floor/wood/six, /area/station/maintenance/west) "fsH" = ( -/obj/stool/chair, /obj/disposalpipe/segment/vertical, +/obj/stool/chair/purple, /turf/simulated/floor/white, /area/station/crew_quarters/observatory) "ftz" = ( @@ -22540,9 +22570,9 @@ /turf/simulated/floor/orangeblack, /area/station/science/artifact) "fRa" = ( -/obj/storage/closet/emergency, -/turf/simulated/floor, -/area/station/storage/auxillary) +/obj/item/clothing/head/constructioncone, +/turf/simulated/floor/plating, +/area/station/hallway/secondary/construction) "fRe" = ( /obj/grille/catwalk, /obj/cable{ @@ -23030,6 +23060,10 @@ }, /obj/mapping_helper/firedoor_spawn, /obj/mapping_helper/access/tox, +/obj/mapping_helper/airlock/cycler{ + cycle_id = "toxins"; + name = "Toxins" + }, /turf/simulated/floor/black, /area/station/science/lab) "gkl" = ( @@ -23356,6 +23390,8 @@ layer = 9.1; pixel_x = -10 }, +/obj/item/crowbar, +/obj/item/storage/toolbox/mechanical, /turf/simulated/floor, /area/station/storage/tools) "gvO" = ( @@ -23414,15 +23450,9 @@ /turf/simulated/floor/grime, /area/station/security/brig) "gxy" = ( -/obj/cable{ - icon_state = "0-8" - }, -/obj/machinery/power/apc/autoname_east, -/obj/table/auto, -/obj/item/storage/belt/utility, -/obj/item/storage/belt/utility, +/obj/machinery/vending/book, /turf/simulated/floor, -/area/station/storage/auxillary) +/area/station/hallway/primary/north) "gxD" = ( /obj/machinery/atmospherics/binary/valve{ dir = 4 @@ -23543,6 +23573,11 @@ icon_state = "2-8" }, /obj/mapping_helper/firedoor_spawn, +/obj/mapping_helper/airlock/cycler{ + cycle_id = "sec"; + name = "Security"; + enter_id = "outer" + }, /turf/simulated/floor/red, /area/station/security/main) "gBm" = ( @@ -23763,15 +23798,10 @@ /turf/simulated/floor/plating, /area/station/medical/dome) "gJU" = ( -/obj/cable{ - icon_state = "0-8" - }, -/obj/cable{ - icon_state = "0-4" - }, -/obj/mapping_helper/wingrille_spawn/auto, -/turf/simulated/floor/plating, -/area/station/storage/auxillary) +/obj/machinery/light/incandescent, +/obj/machinery/vending/floppy, +/turf/simulated/floor, +/area/station/hallway/primary/east) "gKu" = ( /obj/grille/steel, /obj/cable/orange{ @@ -23912,7 +23942,7 @@ /turf/simulated/floor/orangeblack/side/white, /area/station/science/teleporter) "gOE" = ( -/obj/stool/bench/red, +/obj/stool/bench/purple, /turf/simulated/floor/escape, /area/station/hallway/secondary/exit) "gOO" = ( @@ -24121,6 +24151,10 @@ name = "Door-linked Atmospheric Forcefield"; powerlevel = 1 }, +/obj/mapping_helper/airlock/cycler{ + cycle_id = "innermaint3"; + name = "Central Inner Maintenance" + }, /turf/simulated/floor/plating, /area/station/maintenance/inner/central) "gUq" = ( @@ -24179,6 +24213,11 @@ /obj/mapping_helper/access/engineering_power, /obj/decal/stripe_delivery, /obj/forcefield/energyshield/perma/doorlink, +/obj/mapping_helper/airlock/cycler{ + cycle_id = "innereng"; + name = "Inner Engineering"; + enter_id = "outer" + }, /turf/simulated/floor, /area/station/engine/inner) "gVX" = ( @@ -24364,13 +24403,6 @@ }, /turf/simulated/floor/red/corner, /area/station/hallway/primary/east) -"hel" = ( -/obj/item/extinguisher{ - pixel_y = 8 - }, -/obj/storage/closet/fire, -/turf/simulated/floor, -/area/station/storage/auxillary) "hem" = ( /obj/machinery/atmospherics/unary/tank/nitrogen, /obj/machinery/light/small{ @@ -26377,6 +26409,10 @@ name = "Door-linked Atmospheric Forcefield"; powerlevel = 1 }, +/obj/mapping_helper/airlock/cycler{ + cycle_id = "innereng2"; + name = "Inner Engineering" + }, /turf/simulated/floor, /area/station/engine/inner) "ixk" = ( @@ -26457,6 +26493,11 @@ name = "Door-linked Atmospheric Forcefield"; powerlevel = 1 }, +/obj/mapping_helper/airlock/cycler{ + cycle_id = "mining"; + name = "Mining"; + enter_id = "outer" + }, /turf/simulated/floor, /area/station/quartermaster/refinery) "iAn" = ( @@ -26604,12 +26645,6 @@ dir = 4 }, /area/station/crew_quarters/stockex) -"iEN" = ( -/obj/cable{ - icon_state = "4-8" - }, -/turf/simulated/floor, -/area/station/storage/auxillary) "iEY" = ( /obj/table/glass/auto, /obj/item/paper_bin, @@ -26629,6 +26664,10 @@ name = "Door-linked Atmospheric Forcefield"; powerlevel = 1 }, +/obj/mapping_helper/airlock/cycler{ + cycle_id = "southsolars"; + name = "South Solar Maintenance" + }, /turf/simulated/floor/plating, /area/station/maintenance/solar/south) "iFJ" = ( @@ -26746,6 +26785,11 @@ /obj/machinery/door/airlock/pyro/external{ dir = 4 }, +/obj/mapping_helper/airlock/cycler{ + cycle_id = "mining"; + name = "Mining"; + enter_id = "inner" + }, /turf/simulated/floor, /area/station/quartermaster/refinery) "iHo" = ( @@ -27035,6 +27079,10 @@ name = "Door-linked Atmospheric Forcefield"; powerlevel = 1 }, +/obj/mapping_helper/airlock/cycler{ + cycle_id = "westsolars"; + name = "West Solar Maintenance" + }, /turf/simulated/floor/plating, /area/station/maintenance/solar/west) "iSb" = ( @@ -27514,6 +27562,11 @@ }, /obj/mapping_helper/access/teleporter, /obj/mapping_helper/firedoor_spawn, +/obj/mapping_helper/airlock/cycler{ + cycle_id = "teleporter"; + name = "Teleporter"; + enter_id = "outer" + }, /turf/simulated/floor/black, /area/station/teleporter) "jkz" = ( @@ -27877,6 +27930,11 @@ }, /obj/mapping_helper/access/heads, /obj/mapping_helper/firedoor_spawn, +/obj/mapping_helper/airlock/cycler{ + cycle_id = "bridge"; + name = "Bridge"; + enter_id = "outer" + }, /turf/simulated/floor, /area/station/bridge) "jwV" = ( @@ -28198,6 +28256,10 @@ /area/station/solar/south) "jEr" = ( /obj/machinery/door/airlock/pyro/external, +/obj/mapping_helper/airlock/cycler{ + cycle_id = "toxins"; + name = "Toxins" + }, /turf/simulated/floor/black, /area/station/science/lab) "jEE" = ( @@ -28444,8 +28506,8 @@ /turf/simulated/floor/plating, /area/station/maintenance/southwest) "jLT" = ( -/obj/stool/bench/green, /obj/machinery/light/incandescent, +/obj/stool/bench/yellow, /turf/simulated/floor/escape, /area/station/hallway/secondary/exit) "jMr" = ( @@ -29199,6 +29261,10 @@ dir = 4 }, /obj/mapping_helper/firedoor_spawn, +/obj/mapping_helper/airlock/cycler{ + cycle_id = "westmaint2"; + name = "West Maintenance" + }, /turf/simulated/floor, /area/station/maintenance/west) "kpi" = ( @@ -29291,6 +29357,11 @@ /obj/machinery/door/airlock/pyro/glass/command, /obj/mapping_helper/access/ai_upload, /obj/mapping_helper/firedoor_spawn, +/obj/mapping_helper/airlock/cycler{ + cycle_id = "aiupload"; + name = "AI Upload"; + enter_id = "inner" + }, /turf/simulated/floor/black, /area/station/turret_protected/ai_upload) "ktd" = ( @@ -30101,6 +30172,11 @@ /obj/cable{ icon_state = "2-8" }, +/obj/mapping_helper/airlock/cycler{ + cycle_id = "sec"; + name = "Security"; + enter_id = "brig" + }, /turf/simulated/floor/red/side{ dir = 8 }, @@ -30373,6 +30449,10 @@ }, /obj/machinery/door/airlock/pyro/engineering/alt, /obj/mapping_helper/access/engineering_power, +/obj/mapping_helper/airlock/cycler{ + cycle_id = "westsolars"; + name = "West Solar Maintenance" + }, /turf/simulated/floor/plating, /area/station/maintenance/solar/west) "laR" = ( @@ -30994,13 +31074,12 @@ /turf/simulated/floor, /area/station/hallway/primary/east) "lwu" = ( -/obj/machinery/bot/firebot, -/obj/disposalpipe/segment{ - dir = 2; - icon_state = "pipe-c" +/obj/cable{ + icon_state = "4-8" }, -/turf/simulated/floor, -/area/station/storage/auxillary) +/obj/item/clothing/head/constructioncone, +/turf/simulated/floor/plating, +/area/station/hallway/secondary/construction) "lwy" = ( /obj/cable/yellow{ icon_state = "2-8" @@ -31600,7 +31679,7 @@ /turf/simulated/floor/white, /area/station/crew_quarters/observatory) "lMB" = ( -/obj/stool/chair{ +/obj/stool/chair/purple{ dir = 1 }, /turf/simulated/floor/carpet/red/fancy/edge/sw, @@ -31645,13 +31724,9 @@ }, /area/station/medical/research) "lNA" = ( -/obj/cable{ - icon_state = "0-4" - }, /obj/mapping_helper/wingrille_spawn/auto, -/obj/disposalpipe/segment, /turf/simulated/floor/plating, -/area/station/storage/auxillary) +/area/station/hallway/secondary/construction) "lNK" = ( /obj/disposalpipe/segment{ dir = 4 @@ -31992,7 +32067,7 @@ pixel_x = 10; pixel_y = 6 }, -/obj/item/clothing/suit/fire{ +/obj/item/clothing/suit/hazard/fire{ pixel_x = -3; pixel_y = 2 }, @@ -32161,8 +32236,8 @@ /area/station/hallway/primary/north) "mgJ" = ( /obj/machinery/light/emergency, -/obj/stool/bench/blue, /obj/machinery/firealarm/south, +/obj/stool/bench/purple, /turf/simulated/floor/escape, /area/station/hallway/secondary/exit) "mgZ" = ( @@ -32578,6 +32653,11 @@ name = "Door-linked Atmospheric Forcefield"; powerlevel = 1 }, +/obj/mapping_helper/airlock/cycler{ + cycle_id = "aisat"; + name = "AI Satellite"; + enter_id = "outer" + }, /turf/simulated/floor/engine, /area/station/turret_protected/AIsat) "mrv" = ( @@ -32604,11 +32684,11 @@ /turf/simulated/floor, /area/station/hydroponics/bay) "msE" = ( -/obj/stool/chair{ - dir = 1 - }, /obj/landmark/start/job/medical_doctor, /obj/machinery/light/incandescent/cool/very, +/obj/stool/chair/black{ + dir = 1 + }, /turf/simulated/floor/sanitary/white, /area/station/medical/morgue) "msI" = ( @@ -32683,13 +32763,6 @@ }, /turf/simulated/floor/grime, /area/station/storage/tools) -"mvx" = ( -/obj/cable{ - icon_state = "0-8" - }, -/obj/mapping_helper/wingrille_spawn/auto, -/turf/simulated/floor/plating, -/area/station/storage/auxillary) "mvM" = ( /obj/machinery/door/airlock/pyro/maintenance/alt{ req_access = null @@ -32998,6 +33071,11 @@ /obj/machinery/door/airlock/pyro/command/alt, /obj/mapping_helper/access/ai_upload, /obj/mapping_helper/firedoor_spawn, +/obj/mapping_helper/airlock/cycler{ + cycle_id = "aisat"; + name = "AI Satellite"; + enter_id = "inner" + }, /turf/simulated/floor/engine, /area/station/turret_protected/AIsat) "mIq" = ( @@ -33525,7 +33603,7 @@ }, /area/station/ai_monitored/armory) "mVH" = ( -/obj/stool/chair, +/obj/stool/chair/purple, /turf/simulated/floor/carpet/red/fancy/edge/nw, /area/station/science/lobby) "mWp" = ( @@ -33763,9 +33841,6 @@ }, /turf/unsimulated/floor/plating, /area/shuttle/arrival/station) -"ncx" = ( -/turf/simulated/floor, -/area/station/storage/auxillary) "ncO" = ( /obj/disposalpipe/segment/mail{ dir = 4 @@ -34791,10 +34866,6 @@ dir = 1 }, /area/station/engine/inner) -"nMh" = ( -/obj/machinery/abcu, -/turf/simulated/floor, -/area/station/storage/auxillary) "nMB" = ( /obj/table/wood/auto, /obj/machinery/firealarm/west, @@ -35243,6 +35314,11 @@ dir = 4 }, /obj/mapping_helper/access/mining, +/obj/mapping_helper/airlock/cycler{ + cycle_id = "mining"; + name = "Mining"; + enter_id = "inner" + }, /turf/simulated/floor, /area/station/mining/staff_room) "nZZ" = ( @@ -35361,6 +35437,10 @@ name = "Door-linked Atmospheric Forcefield"; powerlevel = 1 }, +/obj/mapping_helper/airlock/cycler{ + cycle_id = "eastsolars"; + name = "East Solar Maintenance" + }, /turf/simulated/floor/plating, /area/station/maintenance/solar/east) "odr" = ( @@ -35927,7 +36007,7 @@ desc = "A black countertop table for storing kitchen-y objects."; name = "kitchen counter" }, -/obj/submachine/mixer, +/obj/machinery/mixer, /turf/simulated/floor/specialroom/cafeteria, /area/station/crew_quarters/kitchen) "ouw" = ( @@ -36527,6 +36607,11 @@ /obj/mapping_helper/access/engineering_power, /obj/mapping_helper/firedoor_spawn, /obj/decal/stripe_delivery, +/obj/mapping_helper/airlock/cycler{ + cycle_id = "innereng"; + name = "Inner Engineering"; + enter_id = "inner" + }, /turf/simulated/floor/yellow, /area/station/engine/inner) "oIK" = ( @@ -36897,6 +36982,10 @@ name = "Door-linked Atmospheric Forcefield"; powerlevel = 1 }, +/obj/mapping_helper/airlock/cycler{ + cycle_id = "podbay"; + name = "Pod Bay" + }, /turf/simulated/floor/plating, /area/station/hangar/main) "oSW" = ( @@ -37158,7 +37247,7 @@ "pct" = ( /obj/table/auto, /obj/item/paper_bin{ - amount = 100; + amount_left = 100; desc = "not at all a paper bin. no sir."; name = "do-it-yourself joint construction kit" }, @@ -37184,6 +37273,11 @@ name = "Door-linked Atmospheric Forcefield"; powerlevel = 1 }, +/obj/mapping_helper/airlock/cycler{ + cycle_id = "mining"; + name = "Mining"; + enter_id = "outer" + }, /turf/simulated/floor, /area/station/quartermaster/refinery) "pdp" = ( @@ -38106,13 +38200,21 @@ /obj/machinery/light/incandescent, /turf/simulated/floor, /area/station/science/artifact) -"pEG" = ( -/obj/cable{ - icon_state = "0-2" +"pEE" = ( +/obj/machinery/door/airlock/pyro/security/alt, +/obj/mapping_helper/access/security, +/obj/mapping_helper/firedoor_spawn, +/obj/mapping_helper/airlock/cycler{ + cycle_id = "aisat"; + name = "AI Satellite"; + enter_id = "inner" }, -/obj/machinery/vending/pda, +/turf/simulated/floor/engine, +/area/station/turret_protected/AIsat) +"pEG" = ( +/obj/machinery/bot/firebot, /turf/simulated/floor, -/area/station/storage/auxillary) +/area/station/storage/tools) "pEI" = ( /obj/decal/tile_edge/stripe/extra_big{ dir = 1 @@ -38366,6 +38468,23 @@ /obj/random_item_spawner/snacks/two, /turf/simulated/floor, /area/station/mining/staff_room) +"pMQ" = ( +/obj/machinery/door/airlock/pyro/external{ + dir = 4 + }, +/obj/mapping_helper/access/engineering_power, +/obj/decal/stripe_delivery, +/obj/forcefield/energyshield/perma/doorlink{ + desc = "A door-linked force field that prevents gasses from passing through it."; + name = "Door-linked Atmospheric Forcefield"; + powerlevel = 1 + }, +/obj/mapping_helper/airlock/cycler{ + cycle_id = "innereng3"; + name = "Inner Engineering" + }, +/turf/simulated/floor, +/area/station/engine/inner) "pMZ" = ( /obj/machinery/light/incandescent, /obj/cable{ @@ -38715,11 +38834,14 @@ }, /area/station/crew_quarters/quarters) "qbJ" = ( -/obj/table/auto, -/obj/item/storage/toolbox/mechanical, -/obj/item/hand_labeler, -/turf/simulated/floor, -/area/station/storage/auxillary) +/obj/machinery/camera{ + c_tag = "autotag"; + dir = 9; + name = "autoname - SS13"; + tag = "" + }, +/turf/simulated/floor/plating, +/area/station/hallway/secondary/construction) "qcy" = ( /obj/machinery/networked/test_apparatus/impact_pad, /obj/machinery/power/data_terminal, @@ -39674,6 +39796,10 @@ }, /obj/machinery/door/airlock/pyro/engineering/alt, /obj/mapping_helper/access/engineering_power, +/obj/mapping_helper/airlock/cycler{ + cycle_id = "southsolars"; + name = "South Solar Maintenance" + }, /turf/simulated/floor/plating, /area/station/maintenance/solar/south) "qEf" = ( @@ -39892,6 +40018,11 @@ /obj/disposalpipe/segment/mail{ dir = 4 }, +/obj/mapping_helper/airlock/cycler{ + cycle_id = "bridge"; + name = "Bridge"; + enter_id = "outer" + }, /turf/simulated/floor, /area/station/bridge) "qLS" = ( @@ -40496,6 +40627,19 @@ }, /turf/simulated/floor, /area/station/science/testchamber) +"rhN" = ( +/obj/machinery/door/airlock/pyro/external, +/obj/forcefield/energyshield/perma/doorlink{ + desc = "A door-linked force field that prevents gasses from passing through it."; + name = "Door-linked Atmospheric Forcefield"; + powerlevel = 1 + }, +/obj/mapping_helper/airlock/cycler{ + cycle_id = "innermaint2"; + name = "Central Inner Maintenance" + }, +/turf/simulated/floor/plating, +/area/station/maintenance/inner/central) "rie" = ( /obj/cable{ icon_state = "4-8" @@ -40765,6 +40909,10 @@ name = "Door-linked Atmospheric Forcefield"; powerlevel = 1 }, +/obj/mapping_helper/airlock/cycler{ + cycle_id = "westmaint"; + name = "West Maintenance" + }, /turf/simulated/floor/plating/airless, /area/station/maintenance/west) "rsD" = ( @@ -41386,6 +41534,10 @@ }, /obj/machinery/door/airlock/pyro/engineering/alt, /obj/mapping_helper/access/engineering_power, +/obj/mapping_helper/airlock/cycler{ + cycle_id = "eastsolars"; + name = "East Solar Maintenance" + }, /turf/simulated/floor/plating, /area/station/maintenance/solar/east) "rQz" = ( @@ -41507,19 +41659,13 @@ /turf/simulated/floor, /area/station/storage/tools) "rUr" = ( -/obj/cable{ - icon_state = "2-4" - }, -/obj/cable{ - icon_state = "2-8" - }, /obj/cable{ icon_state = "1-2" }, /obj/machinery/door/airlock/pyro/glass, /obj/mapping_helper/firedoor_spawn, -/turf/simulated/floor, -/area/station/storage/auxillary) +/turf/simulated/floor/plating, +/area/station/hallway/secondary/construction) "rUv" = ( /obj/strip_door, /obj/disposalpipe/segment/mail, @@ -41718,14 +41864,8 @@ }, /area/station/hallway/secondary/exit) "rZc" = ( -/obj/cable{ - icon_state = "1-2" - }, -/obj/cable{ - icon_state = "2-4" - }, -/turf/simulated/floor, -/area/station/storage/auxillary) +/turf/simulated/floor/plating, +/area/station/hallway/secondary/construction) "rZI" = ( /obj/machinery/door/airlock/pyro/engineering/alt, /obj/mapping_helper/firedoor_spawn, @@ -41733,6 +41873,11 @@ icon_state = "1-2" }, /obj/mapping_helper/access/engineering_power, +/obj/mapping_helper/airlock/cycler{ + cycle_id = "aisat"; + name = "AI Satellite"; + enter_id = "inner" + }, /turf/simulated/floor/engine, /area/station/turret_protected/AIsat) "rZP" = ( @@ -42388,7 +42533,7 @@ "svk" = ( /obj/storage/closet/fire, /obj/item/clothing/head/helmet/firefighter, -/obj/item/clothing/suit/fire, +/obj/item/clothing/suit/hazard/fire, /obj/decal/cleanable/dirt/dirt5, /obj/decal/cleanable/cobweb, /turf/simulated/floor/wood/six, @@ -42975,6 +43120,7 @@ name = "kitchen counter" }, /obj/machinery/light/incandescent, +/obj/item/storage/box/popsicle_sticks, /turf/simulated/floor/specialroom/cafeteria, /area/station/crew_quarters/kitchen) "sNC" = ( @@ -43621,6 +43767,7 @@ "tgY" = ( /obj/machinery/light, /obj/disposalpipe/junction/left/east, +/obj/machinery/vending/snack, /turf/simulated/floor/grime, /area/station/hallway/primary/south) "thn" = ( @@ -43729,15 +43876,10 @@ /turf/simulated/floor/wood/seven, /area/station/chapel/sanctuary) "tlf" = ( -/obj/rack, -/obj/item/circuitboard/teleporter, -/obj/item/circuitboard/arcade, -/obj/item/circuitboard/barcode, -/obj/item/circuitboard/barcode_qm, -/obj/item/circuitboard/powermonitor_smes, /obj/machinery/light/small{ dir = 1 }, +/obj/rack/organized/techstorage_eng, /turf/simulated/floor/plating, /area/station/storage/tech) "tlV" = ( @@ -44075,6 +44217,10 @@ name = "Door-linked Atmospheric Forcefield"; powerlevel = 1 }, +/obj/mapping_helper/airlock/cycler{ + cycle_id = "westmaint2"; + name = "West Maintenance" + }, /turf/simulated/floor, /area/station/maintenance/west) "tzm" = ( @@ -44109,6 +44255,10 @@ name = "Door-linked Atmospheric Forcefield"; powerlevel = 1 }, +/obj/mapping_helper/airlock/cycler{ + cycle_id = "outpost"; + name = "Research Outpost Lobby" + }, /turf/simulated/floor, /area/station/science/lobby) "tzU" = ( @@ -44150,6 +44300,20 @@ }, /turf/simulated/floor/white/checker, /area/station/medical/medbay/pharmacy) +"tAl" = ( +/obj/cable{ + icon_state = "1-2" + }, +/obj/machinery/door/airlock/pyro/engineering/alt, +/obj/mapping_helper/firedoor_spawn, +/obj/mapping_helper/access/engineering_atmos, +/obj/mapping_helper/airlock/cycler{ + cycle_id = "atmos"; + name = "Atmos"; + enter_id = "outer" + }, +/turf/simulated/floor/grime, +/area/station/atmos/highcap_storage) "tAo" = ( /obj/decal/tile_edge/stripe/extra_big, /obj/decal/tile_edge/stripe/corner/extra_big2{ @@ -44326,7 +44490,7 @@ "tFn" = ( /obj/decal/cleanable/dirt/dirt5, /obj/rack, -/obj/item/clothing/suit/fire, +/obj/item/clothing/suit/hazard/fire, /obj/item/clothing/mask/gas, /obj/item/extinguisher, /obj/item/clothing/shoes/black, @@ -44815,6 +44979,11 @@ /obj/disposalpipe/segment/brig{ dir = 4 }, +/obj/mapping_helper/airlock/cycler{ + cycle_id = "sec"; + name = "Security"; + enter_id = "sec" + }, /turf/simulated/floor/red, /area/station/security/main) "tXH" = ( @@ -45849,6 +46018,11 @@ }, /obj/mapping_helper/access/heads, /obj/mapping_helper/firedoor_spawn, +/obj/mapping_helper/airlock/cycler{ + cycle_id = "bridge"; + name = "Bridge"; + enter_id = "inner" + }, /turf/simulated/floor/black/side{ dir = 8 }, @@ -45876,6 +46050,10 @@ name = "Door-linked Atmospheric Forcefield"; powerlevel = 1 }, +/obj/mapping_helper/airlock/cycler{ + cycle_id = "outpostsolars"; + name = "Research Outpost Solars" + }, /turf/simulated/floor/plating, /area/station/science/gen_storage) "uNs" = ( @@ -46086,6 +46264,11 @@ /obj/cable/orange{ icon_state = "1-2" }, +/obj/mapping_helper/airlock/cycler{ + cycle_id = "innereng"; + name = "Inner Engineering"; + enter_id = "inner" + }, /turf/simulated/floor/yellow, /area/station/engine/inner) "uTl" = ( @@ -46191,6 +46374,10 @@ name = "Permanent Atmospheric Forcefield"; powerlevel = 1 }, +/obj/mapping_helper/airlock/cycler{ + cycle_id = "ranchship"; + name = "Ranch Ship" + }, /turf/simulated/floor/plating, /area/station/wreckage) "uWC" = ( @@ -47193,6 +47380,11 @@ icon_state = "4-8" }, /obj/mapping_helper/access/mining, +/obj/mapping_helper/airlock/cycler{ + cycle_id = "mining"; + name = "Mining"; + enter_id = "inner" + }, /turf/simulated/floor, /area/station/mining/staff_room) "vBa" = ( @@ -47758,10 +47950,10 @@ /area/station/science/lobby) "vTe" = ( /obj/cable{ - icon_state = "1-2" + icon_state = "2-8" }, -/turf/simulated/floor, -/area/station/storage/auxillary) +/turf/simulated/floor/plating, +/area/station/hallway/secondary/construction) "vTq" = ( /obj/mapping_helper/wingrille_spawn/auto/reinforced, /obj/window_blinds/cog2/middle, @@ -47954,6 +48146,11 @@ /obj/machinery/door/airlock/pyro/engineering/alt, /obj/mapping_helper/firedoor_spawn, /obj/mapping_helper/access/engineering_atmos, +/obj/mapping_helper/airlock/cycler{ + cycle_id = "atmos"; + name = "Atmos"; + enter_id = "inner" + }, /turf/simulated/floor/grime, /area/station/atmos/highcap_storage) "waD" = ( @@ -48268,6 +48465,21 @@ /obj/window_blinds/cog2/left, /turf/simulated/floor/plating, /area/station/security/detectives_office) +"wlC" = ( +/obj/machinery/door/airlock/pyro/external{ + dir = 4 + }, +/obj/forcefield/energyshield/perma/doorlink{ + desc = "A door-linked force field that prevents gasses from passing through it."; + name = "Door-linked Atmospheric Forcefield"; + powerlevel = 1 + }, +/obj/mapping_helper/airlock/cycler{ + cycle_id = "innermaint3"; + name = "Central Inner Maintenance" + }, +/turf/simulated/floor/plating, +/area/station/maintenance/inner/central) "wlI" = ( /obj/cable/blue{ icon_state = "1-2" @@ -48275,6 +48487,11 @@ /obj/machinery/door/airlock/pyro/command/alt, /obj/mapping_helper/access/ai_upload, /obj/mapping_helper/firedoor_spawn, +/obj/mapping_helper/airlock/cycler{ + cycle_id = "aicore"; + name = "AI Core"; + enter_id = "inner" + }, /turf/simulated/floor, /area/station/turret_protected/ai) "wlU" = ( @@ -48552,6 +48769,11 @@ /obj/cable{ icon_state = "4-8" }, +/obj/mapping_helper/airlock/cycler{ + cycle_id = "teleporter"; + name = "Teleporter"; + enter_id = "inner" + }, /turf/simulated/floor/black, /area/station/teleporter) "wsO" = ( @@ -49608,6 +49830,11 @@ /obj/machinery/door/airlock/pyro/command/alt, /obj/mapping_helper/access/ai_upload, /obj/mapping_helper/firedoor_spawn, +/obj/mapping_helper/airlock/cycler{ + cycle_id = "aiupload"; + name = "AI Upload"; + enter_id = "outer" + }, /turf/simulated/floor/black, /area/station/turret_protected/ai_upload) "xgM" = ( @@ -49939,6 +50166,11 @@ /obj/machinery/door/airlock/pyro/engineering/alt, /obj/mapping_helper/firedoor_spawn, /obj/mapping_helper/access/engineering_atmos, +/obj/mapping_helper/airlock/cycler{ + cycle_id = "atmos"; + name = "Atmos"; + enter_id = "inner" + }, /turf/simulated/floor/grime, /area/station/atmos/highcap_storage) "xse" = ( @@ -51184,9 +51416,8 @@ /area/station/wreckage) "yhW" = ( /obj/machinery/camera, -/obj/machinery/vending/floppy, -/turf/simulated/floor, -/area/station/storage/auxillary) +/turf/simulated/floor/plating, +/area/station/hallway/secondary/construction) "yif" = ( /obj/cable{ icon_state = "1-8" @@ -73765,7 +73996,7 @@ dRI kYR hMd tbx -uiX +cJF cyq arN ayH @@ -74671,7 +74902,7 @@ dRI wIP hMd fqV -cJF +uiX cyq arN yjM @@ -74698,7 +74929,7 @@ aDU aIL tJE awm -awm +gxy ayR kog aNn @@ -76846,7 +77077,7 @@ aaa aaa aaa aCy -aTJ +wlC aCy aaa aaa @@ -80497,7 +80728,7 @@ bzi sTg bhm wpm -wal +bka bDf bDf wal @@ -80799,7 +81030,7 @@ bzi kBH buN knh -xra +tAl bDI gPo xra @@ -81678,7 +81909,7 @@ nLA bdf beI bck -iwR +pMQ bck bck bck @@ -82282,7 +82513,7 @@ nLA bdf dEo bck -iwR +pMQ bck bCq aaa @@ -82596,14 +82827,14 @@ aaa aaa adQ aaa -adQ -aaa -aaa -bYD -nMh +bhY +rZc +rZc +rZc +rZc fmu cNm -dsh +lNA bxe bxO eWy @@ -82898,19 +83129,19 @@ aaa aaa acK ajz -acK -aaa -aaa -bYD -dsg -ncx +bhY +yhW +rZc +rZc +rZc +rZc lwu lNA bxf -bxJ -bxJ -bxJ -bzW +bhm +bhm +bhm +mGp bxH nwC bCr @@ -83200,11 +83431,11 @@ aaa aaa adQ aaa -adQ -aaa -aaa -bYD -pEG +bhY +rZc +rZc +rZc +rZc rZc vTe rUr @@ -83502,14 +83733,14 @@ xOf fpB adQ aaa -adQ -aaa -aaa -bYD -yhW -iEN +bhY +rZc +rZc +rZc +rZc +rZc fRa -gJU +lNA mPe bhm bhm @@ -83804,14 +84035,14 @@ ohG ohG ohG aaa -adQ -aaa -aaa -bYD +bhY +rZc +rZc +rZc qbJ -gxy -hel -mvx +rZc +rZc +lNA noB bhn bhn @@ -84109,11 +84340,11 @@ ohG ohG ohG bhY -bYD -bYD -bYD -bYD -bYD +bhY +bhY +bhY +bhY +bhY sSh bhm bhm @@ -84730,7 +84961,7 @@ bCv bDS eKV bEZ -bCv +pEG bFW bAW bAP @@ -88916,9 +89147,9 @@ vzk aaa aaa acK -aOL +rhN azU -aOL +rhN mmb aEQ elW @@ -91308,7 +91539,7 @@ aHG avU aJK aGO -bhx +gJU jKv lwp bST @@ -125207,7 +125438,7 @@ ecY flg kyI oQj -aMS +pEE nEX nEX ecY diff --git a/maps/donut3.dmm b/maps/donut3.dmm index 6ad75be8f37f1..31252c89bf0fa 100644 --- a/maps/donut3.dmm +++ b/maps/donut3.dmm @@ -973,6 +973,11 @@ /obj/mapping_helper/access/heads, /obj/mapping_helper/firedoor_spawn, /obj/decal/stripe_delivery, +/obj/mapping_helper/airlock/cycler{ + cycle_id = "bridge"; + name = "Bridge"; + enter_id = "inner" + }, /turf/simulated/floor/black, /area/station/bridge) "akT" = ( @@ -1061,6 +1066,12 @@ }, /turf/simulated/floor/purple/side, /area/station/hallway/primary/south) +"amz" = ( +/obj/cable{ + icon_state = "4-8" + }, +/turf/simulated/floor/black/grime, +/area/station/engine/engineering/ce) "amF" = ( /obj/disposalpipe/segment{ dir = 4; @@ -1414,7 +1425,7 @@ /area/station/medical/robotics) "arP" = ( /obj/rack, -/obj/item/clothing/suit/fire{ +/obj/item/clothing/suit/hazard/fire{ pixel_x = -2; pixel_y = -3 }, @@ -1740,6 +1751,10 @@ /obj/disposalpipe/segment{ dir = 4 }, +/obj/mapping_helper/airlock/cycler{ + name = "North Maintenance"; + cycle_id = "northmaint" + }, /turf/simulated/floor/plating/jen, /area/station/maintenance/outer/ne) "axg" = ( @@ -2384,6 +2399,11 @@ dir = 4 }, /obj/decal/stripe_delivery, +/obj/mapping_helper/airlock/cycler{ + cycle_id = "security"; + name = "Security"; + enter_id = "outer" + }, /turf/simulated/floor/black, /area/station/security/main) "aFN" = ( @@ -3833,7 +3853,7 @@ /obj/machinery/light/incandescent{ dir = 8 }, -/obj/submachine/mixer, +/obj/machinery/mixer, /turf/simulated/floor/white/checker2{ dir = 1 }, @@ -4887,6 +4907,11 @@ /obj/cable{ icon_state = "1-2" }, +/obj/mapping_helper/airlock/cycler{ + cycle_id = "aiupload"; + name = "AI Upload"; + enter_id = "inner" + }, /turf/simulated/floor/circuit/off, /area/station/turret_protected/ai_upload) "bsi" = ( @@ -5718,7 +5743,8 @@ /area/station/bridge) "bCQ" = ( /obj/disposalpipe/segment/transport, -/obj/machinery/vending/jobclothing/catering, +/obj/table/auto, +/obj/item/storage/box/popsicle_sticks, /turf/simulated/floor/black, /area/station/crew_quarters/catering) "bCX" = ( @@ -6537,16 +6563,12 @@ /turf/simulated/floor/specialroom/cafeteria, /area/station/crew_quarters/kitchen) "bPE" = ( -/obj/machinery/door/airlock/pyro/glass/command{ - dir = 8; - req_access = null - }, -/obj/decal/stripe_delivery, -/obj/mapping_helper/firedoor_spawn, /obj/cable{ icon_state = "4-8" }, -/obj/mapping_helper/access/engineering_chief, +/obj/machinery/light/incandescent/blueish{ + dir = 1 + }, /turf/simulated/floor/black/grime, /area/station/engine/engineering/ce) "bPW" = ( @@ -7020,9 +7042,6 @@ /turf/simulated/floor/dojo/sand/circle, /area/station/crew_quarters/captain) "bYs" = ( -/obj/stool/chair/office{ - dir = 4 - }, /obj/cable{ icon_state = "0-4" }, @@ -7031,6 +7050,9 @@ }, /obj/cable, /obj/landmark/start/job/scientist, +/obj/stool/chair/office/purple{ + dir = 4 + }, /turf/simulated/floor/specialroom/arcade, /area/station/science/artifact) "bYw" = ( @@ -7542,6 +7564,11 @@ /obj/cable{ icon_state = "1-2" }, +/obj/mapping_helper/airlock/cycler{ + cycle_id = "aicore"; + name = "AI Core"; + enter_id = "inner" + }, /turf/simulated/floor/black, /area/station/turret_protected/AIsat) "cfX" = ( @@ -7692,9 +7719,6 @@ /turf/simulated/floor/specialroom/chapel, /area/station/chapel/sanctuary) "chx" = ( -/obj/stool/chair/office{ - dir = 8 - }, /obj/decal/tile_edge/line/purple{ dir = 6; icon_state = "tile1" @@ -7711,6 +7735,9 @@ }, /obj/cable, /obj/landmark/start/job/scientist, +/obj/stool/chair/office/purple{ + dir = 8 + }, /turf/simulated/floor/white, /area/station/science/teleporter) "chz" = ( @@ -8237,6 +8264,10 @@ /obj/cable{ icon_state = "4-8" }, +/obj/mapping_helper/airlock/cycler{ + name = "Toxin Storage"; + cycle_id = "toxins" + }, /turf/simulated/floor/black, /area/station/science/storage) "coS" = ( @@ -8244,7 +8275,6 @@ /obj/machinery/door/airlock/pyro/external{ dir = 4 }, -/obj/mapping_helper/access, /obj/mapping_helper/firedoor_spawn, /obj/decal/tile_edge/line/white{ dir = 8; @@ -9357,9 +9387,6 @@ /turf/simulated/floor/wood/seven, /area/station/security/detectives_office) "cEz" = ( -/obj/stool/chair/office{ - dir = 4 - }, /obj/cable, /obj/cable{ icon_state = "0-2" @@ -9367,6 +9394,9 @@ /obj/cable{ icon_state = "0-8" }, +/obj/stool/chair/office/purple{ + dir = 4 + }, /turf/simulated/floor/white, /area/station/science/lab) "cEG" = ( @@ -9721,7 +9751,6 @@ /obj/decal/stripe_delivery, /obj/machinery/door/airlock/pyro/glass, /obj/mapping_helper/firedoor_spawn, -/obj/mapping_helper/access, /turf/simulated/floor, /area/station/hallway/secondary/exit) "cMR" = ( @@ -10168,6 +10197,10 @@ name = "Door-linked Atmospheric Forcefield"; powerlevel = 1 }, +/obj/mapping_helper/airlock/cycler{ + name = "North Maintenance"; + cycle_id = "northmaint" + }, /turf/simulated/floor/plating/jen, /area/station/maintenance/outer/ne) "cUi" = ( @@ -11199,7 +11232,7 @@ /turf/simulated/floor/sanitary/white, /area/station/maintenance/inner/sw) "dli" = ( -/obj/stool/chair/couch/green{ +/obj/stool/chair/couch/purple{ dir = 8 }, /turf/simulated/floor/wood, @@ -11264,6 +11297,11 @@ /obj/machinery/door/airlock/pyro/engineering{ dir = 4 }, +/obj/mapping_helper/airlock/cycler{ + cycle_id = "qmrefinery"; + name = "QM/Refinery"; + enter_id = "inner" + }, /turf/simulated/floor, /area/station/quartermaster/office) "dlX" = ( @@ -14300,6 +14338,10 @@ /obj/cable{ icon_state = "4-8" }, +/obj/mapping_helper/airlock/cycler{ + name = "East Solar Maintenance"; + cycle_id = "eastsolar" + }, /turf/simulated/floor/plating, /area/station/maintenance/solar/east) "ejc" = ( @@ -14372,6 +14414,11 @@ /obj/machinery/door/airlock/pyro/glass, /obj/mapping_helper/firedoor_spawn, /obj/mapping_helper/access/research_foyer, +/obj/mapping_helper/airlock/cycler{ + cycle_id = "research"; + name = "Research"; + enter_id = "outer" + }, /turf/simulated/floor/specialroom/arcade, /area/station/science/lobby) "ekB" = ( @@ -14887,6 +14934,11 @@ /obj/mapping_helper/firedoor_spawn, /obj/mapping_helper/access/medical, /obj/mapping_helper/access/maint, +/obj/mapping_helper/airlock/cycler{ + name = "Med Bay"; + cycle_id = "medbay"; + enter_id = "inner" + }, /turf/simulated/floor/white, /area/station/medical/medbay) "esP" = ( @@ -16824,7 +16876,7 @@ pixel_x = 2; pixel_y = -2 }, -/obj/item/clothing/suit/fire{ +/obj/item/clothing/suit/hazard/fire{ pixel_x = -4; pixel_y = -4 }, @@ -24922,6 +24974,10 @@ /area/station/ai_monitored/armory) "hvZ" = ( /obj/machinery/door/airlock/pyro/external, +/obj/mapping_helper/airlock/cycler{ + name = "North Inner Maintenance"; + cycle_id = "n_innermaint" + }, /turf/simulated/floor/black/grime, /area/station/maintenance/inner/north) "hwl" = ( @@ -25918,6 +25974,11 @@ name = "Door-linked Atmospheric Forcefield"; powerlevel = 1 }, +/obj/mapping_helper/airlock/cycler{ + name = "Med Bay"; + cycle_id = "medbay"; + enter_id = "outer" + }, /turf/simulated/floor/white, /area/station/medical/medbay) "hNd" = ( @@ -26104,33 +26165,8 @@ /turf/simulated/floor/plating/jen, /area/station/maintenance/inner/se) "hPQ" = ( -/obj/rack, -/obj/item/circuitboard/teleporter{ - pixel_x = -5; - pixel_y = 6 - }, -/obj/item/circuitboard/card{ - pixel_x = -3; - pixel_y = 3 - }, -/obj/item/circuitboard/robot_module_rewriter{ - pixel_x = -1 - }, -/obj/item/circuitboard/cloning{ - pixel_x = 1; - pixel_y = -3 - }, -/obj/item/circuitboard/barcode_qm{ - pixel_x = 3; - pixel_y = -6 - }, -/obj/item/circuitboard/barcode{ - pixel_x = 7; - pixel_y = -6 - }, -/obj/item/circuitboard/qmsupply{ - pixel_x = 5; - pixel_y = -9 +/obj/rack/organized/techstorage_eng{ + order_override = "diagonal" }, /turf/simulated/floor/plating/jen, /area/station/storage/tech) @@ -26163,6 +26199,11 @@ }, /obj/mapping_helper/access/cargo, /obj/machinery/door/airlock/pyro/engineering, +/obj/mapping_helper/airlock/cycler{ + cycle_id = "qmrefinery"; + name = "QM/Refinery"; + enter_id = "refinery" + }, /turf/simulated/floor, /area/station/quartermaster/refinery) "hRi" = ( @@ -28504,6 +28545,11 @@ /obj/cable{ icon_state = "1-2" }, +/obj/mapping_helper/airlock/cycler{ + cycle_id = "engineering"; + name = "Engineering"; + enter_id = "outer" + }, /turf/simulated/floor, /area/station/engine/engineering) "iFO" = ( @@ -29480,6 +29526,11 @@ /obj/decal/stripe_delivery, /obj/mapping_helper/firedoor_spawn, /obj/mapping_helper/access/mining, +/obj/mapping_helper/airlock/cycler{ + name = "Mining"; + cycle_id = "mining"; + enter_id = "inner" + }, /turf/simulated/floor/black/grime, /area/station/mining/staff_room) "iWm" = ( @@ -29888,6 +29939,11 @@ /obj/decal/stripe_delivery, /obj/mapping_helper/access/research_foyer, /obj/disposalpipe/segment, +/obj/mapping_helper/airlock/cycler{ + cycle_id = "research"; + name = "Research"; + enter_id = "inner" + }, /turf/simulated/floor/specialroom/arcade, /area/station/science/lobby) "jbQ" = ( @@ -30082,10 +30138,10 @@ /turf/simulated/floor/black, /area/station/security/visitation) "jfd" = ( -/obj/stool/chair/office/blue{ +/obj/machinery/light/incandescent/netural, +/obj/stool/chair/office/purple{ dir = 1 }, -/obj/machinery/light/incandescent/netural, /turf/simulated/floor/carpet/purple/fancy/narrow, /area/station/crew_quarters/hor) "jft" = ( @@ -30433,6 +30489,10 @@ /obj/cable{ icon_state = "4-8" }, +/obj/mapping_helper/airlock/cycler{ + name = "Bomb Testing Chamber"; + cycle_id = "bombtest" + }, /turf/simulated/floor/plating, /area/station/science/testchamber/bombchamber) "jkD" = ( @@ -31372,6 +31432,11 @@ dir = 4 }, /obj/decal/stripe_delivery, +/obj/mapping_helper/airlock/cycler{ + cycle_id = "security"; + name = "Security"; + enter_id = "inner" + }, /turf/simulated/floor/black, /area/station/security/main) "jyl" = ( @@ -31793,7 +31858,7 @@ pixel_x = 2; pixel_y = -2 }, -/obj/item/clothing/suit/fire{ +/obj/item/clothing/suit/hazard/fire{ pixel_x = -4; pixel_y = -4 }, @@ -32076,7 +32141,7 @@ /area/listeningpost) "jJQ" = ( /obj/rack, -/obj/item/clothing/suit/fire{ +/obj/item/clothing/suit/hazard/fire{ pixel_x = -8; pixel_y = -1 }, @@ -32084,7 +32149,7 @@ pixel_x = -4; pixel_y = 12 }, -/obj/item/clothing/suit/fire{ +/obj/item/clothing/suit/hazard/fire{ pixel_x = -3; pixel_y = -3 }, @@ -32363,6 +32428,11 @@ /obj/mapping_helper/firedoor_spawn, /obj/decal/stripe_delivery, /obj/disposalpipe/segment/mail, +/obj/mapping_helper/airlock/cycler{ + cycle_id = "engineering"; + name = "Engineering"; + enter_id = "outer" + }, /turf/simulated/floor, /area/station/engine/engineering) "jNn" = ( @@ -33507,6 +33577,10 @@ /obj/cable{ icon_state = "1-2" }, +/obj/mapping_helper/airlock/cycler{ + name = "Bomb Testing Chamber"; + cycle_id = "bombtest" + }, /turf/simulated/floor/plating, /area/station/science/testchamber/bombchamber) "khw" = ( @@ -34956,7 +35030,6 @@ /obj/decal/stripe_delivery, /obj/machinery/door/airlock/pyro/glass, /obj/mapping_helper/firedoor_spawn, -/obj/mapping_helper/access, /obj/disposalpipe/segment, /turf/simulated/floor, /area/station/hangar/main) @@ -35368,11 +35441,6 @@ }, /turf/simulated/floor, /area/station/hallway/primary/south) -"kMX" = ( -/obj/machinery/light/incandescent/harsh, -/obj/stool/bench/blue/auto, -/turf/simulated/floor/specialroom/arcade, -/area/station/hallway/primary/south) "kNO" = ( /turf/simulated/floor/stairs/wide/middle, /area/listeningpost) @@ -35725,6 +35793,10 @@ /obj/cable{ icon_state = "1-2" }, +/obj/mapping_helper/airlock/cycler{ + name = "Toxin Storage"; + cycle_id = "toxins" + }, /turf/simulated/floor/black, /area/station/science/storage) "kSQ" = ( @@ -35773,6 +35845,11 @@ /obj/disposalpipe/segment/mail{ dir = 4 }, +/obj/mapping_helper/airlock/cycler{ + cycle_id = "bridge"; + name = "Bridge"; + enter_id = "inner" + }, /turf/simulated/floor/black, /area/station/bridge) "kTv" = ( @@ -36950,12 +37027,21 @@ /turf/simulated/floor/black/grime, /area/station/hangar/qm) "lng" = ( -/obj/machinery/light/incandescent/blueish{ - dir = 1 - }, /obj/cable{ icon_state = "4-8" }, +/obj/decal/stripe_delivery, +/obj/machinery/door/airlock/pyro/glass/command{ + dir = 8; + req_access = null + }, +/obj/mapping_helper/access/engineering_chief, +/obj/mapping_helper/firedoor_spawn, +/obj/mapping_helper/airlock/cycler{ + cycle_id = "ce"; + name = "Chief Engineer"; + enter_id = "inner" + }, /turf/simulated/floor/black, /area/station/engine/engineering/ce) "lnm" = ( @@ -38251,6 +38337,11 @@ /obj/disposalpipe/segment/mail{ dir = 4 }, +/obj/mapping_helper/airlock/cycler{ + cycle_id = "bridge"; + name = "Bridge"; + enter_id = "outer" + }, /turf/simulated/floor/black, /area/station/bridge) "lFn" = ( @@ -38661,11 +38752,11 @@ /turf/simulated/floor/black, /area/station/security/main) "lKC" = ( -/obj/stool/bench/blue/auto, /obj/disposalpipe/segment/mail{ dir = 4; icon_state = "pipe-c" }, +/obj/stool/bench/purple/auto, /turf/simulated/floor/specialroom/arcade, /area/station/hallway/primary/south) "lKD" = ( @@ -38950,6 +39041,11 @@ icon_state = "1-2" }, /obj/machinery/door/airlock/pyro/engineering, +/obj/mapping_helper/airlock/cycler{ + cycle_id = "qmrefinery"; + name = "QM/Refinery"; + enter_id = "inner" + }, /turf/simulated/floor, /area/station/quartermaster/office) "lPo" = ( @@ -39966,7 +40062,7 @@ desc = "A black countertop table for storing kitchen-y objects."; name = "kitchen counter" }, -/obj/submachine/mixer, +/obj/machinery/mixer, /turf/simulated/floor/white/checker2{ dir = 1 }, @@ -40841,38 +40937,12 @@ /turf/simulated/floor/plating/jen, /area/station/maintenance/outer/se) "msQ" = ( -/obj/rack, -/obj/item/circuitboard/arcade{ - pixel_x = -8; - pixel_y = 6 - }, -/obj/item/circuitboard/powermonitor{ - pixel_x = -6; - pixel_y = 5 - }, -/obj/item/circuitboard/powermonitor_smes{ - pixel_x = -4; - pixel_y = 2 - }, -/obj/item/circuitboard/operating{ - pixel_x = -2; - pixel_y = -1 - }, -/obj/item/circuitboard/genetics{ - pixel_x = 2; - pixel_y = -4 - }, -/obj/item/circuitboard/qmorder{ - pixel_x = 6; - pixel_y = -8 - }, -/obj/item/circuitboard/telescope{ - pixel_x = 6; - pixel_y = -6 - }, /obj/machinery/light/incandescent/netural{ dir = 1 }, +/obj/rack/organized/techstorage_med{ + order_override = "diagonal" + }, /turf/simulated/floor/plating/jen, /area/station/storage/tech) "msR" = ( @@ -41302,6 +41372,11 @@ name = "Door-linked Atmospheric Forcefield"; powerlevel = 1 }, +/obj/mapping_helper/airlock/cycler{ + name = "Mining"; + cycle_id = "mining"; + enter_id = "outer" + }, /turf/simulated/floor/black/grime, /area/station/mining/staff_room) "mzM" = ( @@ -42016,6 +42091,11 @@ icon_state = "4-8" }, /obj/mapping_helper/access/engineering_chief, +/obj/mapping_helper/airlock/cycler{ + cycle_id = "ce"; + name = "Chief Engineer"; + enter_id = "outer" + }, /turf/simulated/floor/black/grime, /area/station/engine/engineering/ce) "mKe" = ( @@ -46273,6 +46353,7 @@ /obj/disposalpipe/segment/morgue{ name = "kitchen freezer pipe" }, +/obj/machinery/vending/jobclothing/catering, /turf/simulated/floor/black, /area/station/crew_quarters/catering) "obE" = ( @@ -46802,9 +46883,6 @@ }, /area/station/crew_quarters/hor) "olH" = ( -/obj/stool/chair/office{ - dir = 1 - }, /obj/decal/tile_edge/line/purple{ dir = 1; icon_state = "line1" @@ -46815,6 +46893,9 @@ /obj/cable{ icon_state = "4-8" }, +/obj/stool/chair/office/purple{ + dir = 1 + }, /turf/simulated/floor/black, /area/station/science/lobby) "olM" = ( @@ -47884,6 +47965,10 @@ /obj/mapping_helper/access/research, /obj/mapping_helper/firedoor_spawn, /obj/decal/stripe_delivery, +/obj/mapping_helper/airlock/cycler{ + name = "Science Lobby"; + cycle_id = "scilobby" + }, /turf/simulated/floor/plating/jen, /area/station/science/lobby) "oAy" = ( @@ -47923,6 +48008,10 @@ "oBp" = ( /obj/decal/cleanable/dirt/jen, /obj/machinery/door/airlock/pyro/external, +/obj/mapping_helper/airlock/cycler{ + name = "North Inner Maintenance"; + cycle_id = "n_innermaint" + }, /turf/simulated/floor/plating/jen, /area/station/maintenance/inner/north) "oBq" = ( @@ -48004,6 +48093,11 @@ /obj/disposalpipe/segment/transport{ dir = 4 }, +/obj/mapping_helper/airlock/cycler{ + cycle_id = "aiupload"; + name = "AI Upload"; + enter_id = "outer" + }, /turf/simulated/floor/circuit/off, /area/station/turret_protected/ai_upload) "oCX" = ( @@ -48367,7 +48461,7 @@ pixel_x = 2; pixel_y = -2 }, -/obj/item/clothing/suit/fire{ +/obj/item/clothing/suit/hazard/fire{ pixel_x = -4; pixel_y = -4 }, @@ -48840,6 +48934,10 @@ /obj/machinery/door/airlock/pyro/external, /obj/mapping_helper/access/research, /obj/decal/stripe_delivery, +/obj/mapping_helper/airlock/cycler{ + name = "Science Lobby"; + cycle_id = "scilobby" + }, /turf/simulated/floor/plating, /area/station/science/lobby) "oQI" = ( @@ -49155,6 +49253,11 @@ name = "Door-linked Atmospheric Forcefield"; powerlevel = 1 }, +/obj/mapping_helper/airlock/cycler{ + cycle_id = "aicore"; + name = "AI Core"; + enter_id = "outer" + }, /turf/simulated/floor/black, /area/station/turret_protected/AIsat) "oUB" = ( @@ -49310,7 +49413,7 @@ }, /area/station/hallway/primary/west) "oXq" = ( -/obj/stool/chair{ +/obj/stool/chair/purple{ dir = 1 }, /turf/simulated/floor/specialroom/arcade, @@ -50805,6 +50908,10 @@ name = "Door-linked Atmospheric Forcefield"; powerlevel = 1 }, +/obj/mapping_helper/airlock/cycler{ + name = "West Solar Maintenance"; + cycle_id = "westsolar" + }, /turf/simulated/floor/plating/jen, /area/station/maintenance/solar/west) "pwa" = ( @@ -54325,6 +54432,10 @@ name = "Door-linked Atmospheric Forcefield"; powerlevel = 1 }, +/obj/mapping_helper/airlock/cycler{ + name = "Northeast Maintenance"; + cycle_id = "northeastmaint" + }, /turf/simulated/floor/plating/jen, /area/station/maintenance/outer/ne) "qwZ" = ( @@ -55424,6 +55535,10 @@ name = "Door-linked Atmospheric Forcefield"; powerlevel = 1 }, +/obj/mapping_helper/airlock/cycler{ + name = "Southwest Inner Maintenance"; + cycle_id = "sw_innermaint" + }, /turf/simulated/floor/grime{ dir = 8 }, @@ -59508,10 +59623,10 @@ }, /area/listeningpost) "sda" = ( -/obj/stool/chair{ +/obj/landmark/start/job/scientist, +/obj/stool/chair/purple{ dir = 1 }, -/obj/landmark/start/job/scientist, /turf/simulated/floor/carpet/purple/standard, /area/station/science/lobby) "sdo" = ( @@ -60004,7 +60119,7 @@ dir = 4; icon_state = "line1" }, -/obj/stool/chair/couch/green{ +/obj/stool/chair/couch/purple{ dir = 4 }, /turf/simulated/floor/wood, @@ -61587,6 +61702,10 @@ /obj/machinery/door/airlock/pyro/external, /obj/mapping_helper/access/maint, /obj/decal/stripe_delivery, +/obj/mapping_helper/airlock/cycler{ + name = "Southwest Inner Maintenance"; + cycle_id = "sw_innermaint" + }, /turf/simulated/floor/plating/jen, /area/station/maintenance/inner/sw) "sMH" = ( @@ -62004,10 +62123,10 @@ /turf/simulated/floor/wood, /area/station/crew_quarters/cafeteria) "sTY" = ( -/obj/stool/chair{ +/obj/machinery/firealarm/north, +/obj/stool/chair/purple{ dir = 4 }, -/obj/machinery/firealarm/north, /turf/simulated/floor/plating/jen, /area/station/science/gen_storage) "sTZ" = ( @@ -62481,7 +62600,6 @@ /obj/decal/stripe_delivery, /obj/machinery/door/airlock/pyro/glass, /obj/mapping_helper/firedoor_spawn, -/obj/mapping_helper/access, /turf/simulated/floor, /area/station/hangar/main) "tbs" = ( @@ -65957,11 +66075,11 @@ }, /area/station/medical/medbay) "ubC" = ( -/obj/stool/bench/blue/auto, /obj/disposalpipe/segment/mail{ dir = 8; icon_state = "pipe-c" }, +/obj/stool/bench/purple/auto, /turf/simulated/floor/specialroom/arcade, /area/station/hallway/primary/south) "ubD" = ( @@ -66020,6 +66138,23 @@ /obj/disposalpipe/segment, /turf/simulated/floor/white, /area/station/crewquarters/fuq3) +"udd" = ( +/obj/decal/stripe_delivery, +/obj/mapping_helper/firedoor_spawn, +/obj/mapping_helper/access/cargo, +/obj/cable{ + icon_state = "4-8" + }, +/obj/machinery/door/airlock/pyro/engineering{ + dir = 4 + }, +/obj/mapping_helper/airlock/cycler{ + cycle_id = "qmrefinery"; + name = "QM/Refinery"; + enter_id = "outer" + }, +/turf/simulated/floor, +/area/station/quartermaster/office) "udu" = ( /obj/shrub{ dir = 6 @@ -67911,7 +68046,7 @@ /turf/simulated/floor/plating, /area/station/crew_quarters/hor) "uHV" = ( -/obj/stool/chair/couch/green, +/obj/stool/chair/couch/purple, /turf/simulated/floor/wood, /area/station/science/lobby) "uHW" = ( @@ -69253,9 +69388,6 @@ /turf/simulated/floor/black/grime, /area/station/hangar/qm) "veI" = ( -/obj/stool/chair/yellow{ - dir = 8 - }, /obj/decal/tile_edge/stripe/extra_big{ dir = 4 }, @@ -69268,6 +69400,9 @@ /obj/cable{ icon_state = "0-2" }, +/obj/stool/chair/purple{ + dir = 8 + }, /turf/simulated/floor/grime{ dir = 8 }, @@ -69414,7 +69549,7 @@ /area/station/chapel/sanctuary) "vgl" = ( /obj/table/auto, -/obj/item/pinpointer{ +/obj/item/pinpointer/disk{ pixel_x = -4; pixel_y = -9 }, @@ -69578,6 +69713,11 @@ name = "Bridge Lockdown Doors"; opacity = 0 }, +/obj/mapping_helper/airlock/cycler{ + cycle_id = "bridge"; + name = "Bridge"; + enter_id = "outer" + }, /turf/simulated/floor/black, /area/station/bridge) "viW" = ( @@ -69798,6 +69938,10 @@ }, /obj/mapping_helper/access/maint, /obj/decal/stripe_delivery, +/obj/mapping_helper/airlock/cycler{ + name = "Northeast Maintenance"; + cycle_id = "northeastmaint" + }, /turf/simulated/floor/plating/jen, /area/station/maintenance/outer/ne) "vmB" = ( @@ -70675,6 +70819,11 @@ icon_state = "1-2" }, /obj/disposalpipe/segment, +/obj/mapping_helper/airlock/cycler{ + cycle_id = "engineering"; + name = "Engineering"; + enter_id = "inner" + }, /turf/simulated/floor, /area/station/engine/engineering) "vAl" = ( @@ -72143,6 +72292,10 @@ icon_state = "4-8" }, /obj/mapping_helper/access/engineering, +/obj/mapping_helper/airlock/cycler{ + name = "West Solar Maintenance"; + cycle_id = "westsolar" + }, /turf/simulated/floor/plating, /area/station/maintenance/solar/west) "vVY" = ( @@ -73165,6 +73318,11 @@ /obj/mapping_helper/firedoor_spawn, /obj/mapping_helper/access/security, /obj/decal/stripe_delivery, +/obj/mapping_helper/airlock/cycler{ + cycle_id = "security"; + name = "Security"; + enter_id = "inner" + }, /turf/simulated/floor/black, /area/station/security/main) "wma" = ( @@ -75044,6 +75202,10 @@ name = "Door-linked Atmospheric Forcefield"; powerlevel = 1 }, +/obj/mapping_helper/airlock/cycler{ + name = "East Solar Maintenance"; + cycle_id = "eastsolar" + }, /turf/simulated/floor/plating/jen, /area/station/maintenance/solar/east) "wNd" = ( @@ -75267,6 +75429,11 @@ /obj/disposalpipe/segment/mail{ dir = 4 }, +/obj/mapping_helper/airlock/cycler{ + cycle_id = "engineering"; + name = "Engineering"; + enter_id = "sing" + }, /turf/simulated/floor, /area/station/engine/engineering) "wPX" = ( @@ -76884,6 +77051,10 @@ powerlevel = 1 }, /obj/decal/stripe_delivery, +/obj/mapping_helper/airlock/cycler{ + name = "Pool and Owlrey"; + cycle_id = "pool" + }, /turf/simulated/floor, /area/spacehabitat/pool) "xms" = ( @@ -77424,6 +77595,10 @@ name = "Pool Access" }, /obj/decal/stripe_delivery, +/obj/mapping_helper/airlock/cycler{ + name = "Pool and Owlrey"; + cycle_id = "pool" + }, /turf/simulated/floor/grey, /area/spacehabitat/pool) "xuj" = ( @@ -79090,6 +79265,18 @@ /obj/machinery/light/incandescent/netural, /turf/simulated/floor/plating/jen, /area/station/hallway/secondary/exit) +"xTv" = ( +/obj/decal/stripe_delivery, +/obj/machinery/door/airlock/pyro/external{ + dir = 4 + }, +/obj/mapping_helper/firedoor_spawn, +/obj/decal/tile_edge/line/white{ + dir = 8; + icon_state = "line1" + }, +/turf/simulated/floor/plating/jen, +/area/station/hallway/secondary/exit) "xTw" = ( /obj/disposalpipe/segment/mail{ dir = 4 @@ -79562,10 +79749,10 @@ /turf/simulated/floor/white, /area/spacehabitat/pool) "yaE" = ( -/obj/stool/chair/office{ +/obj/decal/tile_edge/stripe/extra_big{ dir = 8 }, -/obj/decal/tile_edge/stripe/extra_big{ +/obj/stool/chair/office/purple{ dir = 8 }, /turf/simulated/floor/grey, @@ -123742,7 +123929,7 @@ sUp mZl jFY jFY -kMX +fWD oPf mvu vnU @@ -135168,7 +135355,7 @@ xUo xUo xUo nGn -dlQ +udd pSY duN tCV @@ -143580,7 +143767,7 @@ etV etV sdZ sdZ -fdX +xTv sdZ sdZ etV @@ -143590,7 +143777,7 @@ sdZ etV sdZ sdZ -fdX +xTv sdZ sdZ etV @@ -149366,7 +149553,7 @@ mfw kTR kTR kTR -bPE +amz kTR kTR kTR diff --git a/maps/kondaru.dmm b/maps/kondaru.dmm index 210fb5ef12fe0..00dd332faaecc 100644 --- a/maps/kondaru.dmm +++ b/maps/kondaru.dmm @@ -172,7 +172,7 @@ /area/space) "aaB" = ( /obj/rack, -/obj/item/clothing/suit/fire, +/obj/item/clothing/suit/hazard/fire, /obj/item/clothing/mask/gas/emergency, /obj/decal/stripe_caution, /turf/simulated/floor/airless, @@ -365,6 +365,10 @@ dir = 4; name = "Owl Zone Access" }, +/obj/mapping_helper/airlock/cycler{ + cycle_id = "owlrey"; + name = "Owlrey" + }, /turf/simulated/floor/grey, /area/station/garden/owlery) "abt" = ( @@ -387,6 +391,10 @@ /obj/machinery/door/airlock/pyro/external{ name = "Owl Zone Access" }, +/obj/mapping_helper/airlock/cycler{ + cycle_id = "owlrey"; + name = "Owlrey" + }, /turf/simulated/floor/caution/north, /area/station/garden/owlery) "abx" = ( @@ -1002,6 +1010,10 @@ /obj/cable{ icon_state = "1-2" }, +/obj/mapping_helper/airlock/cycler{ + cycle_id = "routing2"; + name = "Routing Cabinet" + }, /turf/simulated/floor/plating, /area/station/routing/eva{ name = "Router Cabinet" @@ -1087,6 +1099,10 @@ /obj/disposalpipe/segment/transport{ dir = 4 }, +/obj/mapping_helper/airlock/cycler{ + cycle_id = "routing2"; + name = "Routing Cabinet" + }, /turf/simulated/floor/plating, /area/station/routing/eva{ name = "Router Cabinet" @@ -1131,6 +1147,11 @@ /obj/machinery/door/airlock/pyro/external{ dir = 4 }, +/obj/mapping_helper/airlock/cycler{ + cycle_id = "podbay"; + name = "Pod Bay"; + enter_id = "inner" + }, /turf/simulated/floor/plating, /area/station/hangar/main) "aec" = ( @@ -1308,6 +1329,11 @@ /area/station/maintenance/northwest) "aeN" = ( /obj/machinery/door/airlock/pyro/external, +/obj/mapping_helper/airlock/cycler{ + cycle_id = "podbay"; + name = "Pod Bay"; + enter_id = "inner" + }, /turf/simulated/floor/plating, /area/station/maintenance/northwest) "aeO" = ( @@ -1355,6 +1381,10 @@ /obj/cable{ icon_state = "4-8" }, +/obj/mapping_helper/airlock/cycler{ + cycle_id = "northmaint2"; + name = "North Maintenance" + }, /turf/simulated/floor/plating, /area/station/maintenance/north) "aeV" = ( @@ -1810,6 +1840,10 @@ /obj/cable{ icon_state = "4-8" }, +/obj/mapping_helper/airlock/cycler{ + cycle_id = "northmaint2"; + name = "North Maintenance" + }, /turf/simulated/floor/grey, /area/station/maintenance/north) "agN" = ( @@ -5609,6 +5643,11 @@ /obj/machinery/door/airlock/pyro/external{ dir = 4 }, +/obj/mapping_helper/airlock/cycler{ + cycle_id = "miningshuttle"; + name = "Mining Shuttle"; + enter_id = "inner" + }, /turf/simulated/floor/grey/side{ dir = 1 }, @@ -5809,6 +5848,11 @@ /obj/machinery/door/airlock/pyro/external{ dir = 4 }, +/obj/mapping_helper/airlock/cycler{ + cycle_id = "miningshuttle"; + name = "Mining Shuttle"; + enter_id = "inner" + }, /turf/simulated/floor/grey/side, /area/station/maintenance/northwest) "avw" = ( @@ -6768,7 +6812,7 @@ /area/station/maintenance/disposal) "azG" = ( /obj/rack, -/obj/item/clothing/suit/fire, +/obj/item/clothing/suit/hazard/fire, /obj/item/clothing/mask/gas/emergency, /obj/item/clothing/glasses/macho, /obj/item/device/light/glowstick, @@ -8328,6 +8372,10 @@ /area/station/maintenance/east) "aFO" = ( /obj/machinery/door/airlock/pyro/external, +/obj/mapping_helper/airlock/cycler{ + cycle_id = "eastmaint"; + name = "East Maintenance" + }, /turf/simulated/floor/grey, /area/station/maintenance/east) "aFQ" = ( @@ -12666,12 +12714,8 @@ /area/station/crewquarters/cryotron) "aYd" = ( /obj/table/auto, -/obj/item/clothing/gloves/yellow, -/obj/item/clothing/gloves/yellow, /obj/item/device/t_scanner, /obj/item/device/t_scanner, -/obj/item/device/multitool, -/obj/item/device/multitool, /obj/item/device/radio/intercom/engineering{ dir = 4 }, @@ -13476,6 +13520,11 @@ name = "Door-linked Atmospheric Forcefield"; powerlevel = 1 }, +/obj/mapping_helper/airlock/cycler{ + cycle_id = "routing"; + name = "Routing Depot"; + enter_id = "inner" + }, /turf/simulated/floor/plating, /area/station/maintenance/inner/east) "bcf" = ( @@ -13978,6 +14027,11 @@ name = "Door-linked Atmospheric Forcefield"; powerlevel = 1 }, +/obj/mapping_helper/airlock/cycler{ + cycle_id = "routing"; + name = "Routing Depot"; + enter_id = "inner" + }, /turf/simulated/floor, /area/station/routing/depot) "ben" = ( @@ -14820,7 +14874,7 @@ }, /area/station/hallway/secondary/exit) "bil" = ( -/obj/item/reagent_containers/food/snacks/candy/wrapped_pbcup, +/obj/item/reagent_containers/food/snacks/candy/wrapped_candy/pb_cup, /obj/disposalpipe/segment/vertical, /turf/simulated/floor/plating, /area/station/maintenance/west) @@ -15015,7 +15069,7 @@ /area/station/mining/refinery) "biN" = ( /obj/table/reinforced/auto, -/obj/submachine/mixer, +/obj/machinery/mixer, /obj/item/reagent_containers/food/drinks/drinkingglass/icing{ pixel_x = -14 }, @@ -15148,6 +15202,10 @@ /obj/machinery/door/airlock/pyro/external{ dir = 4 }, +/obj/mapping_helper/airlock/cycler{ + cycle_id = "eastmaint"; + name = "East Maintenance" + }, /turf/simulated/floor/plating, /area/station/maintenance/east) "bjC" = ( @@ -17714,6 +17772,10 @@ /obj/disposalpipe/segment/transport{ dir = 4 }, +/obj/mapping_helper/airlock/cycler{ + cycle_id = "westmaint"; + name = "West Maintenance" + }, /turf/simulated/floor/plating, /area/station/maintenance/west) "bus" = ( @@ -21661,6 +21723,11 @@ icon_state = "1-2" }, /obj/machinery/atmospherics/pipe/simple, +/obj/mapping_helper/airlock/cycler{ + cycle_id = "escapebay"; + name = "Escape Pod Bay"; + enter_id = "inner" + }, /turf/simulated/floor, /area/station/hangar/escape) "bJH" = ( @@ -21921,7 +21988,7 @@ }, /area/station/science/lobby) "bKw" = ( -/obj/stool/bench/auto, +/obj/stool/bench/purple/auto, /turf/simulated/floor/purple/side, /area/station/hallway/secondary/south) "bKx" = ( @@ -25232,6 +25299,10 @@ /obj/machinery/door/airlock/pyro/external{ dir = 4 }, +/obj/mapping_helper/airlock/cycler{ + cycle_id = "westinnermaint"; + name = "West Inner Maintenance" + }, /turf/simulated/floor/plating, /area/station/maintenance/inner/west) "bXG" = ( @@ -26628,6 +26699,11 @@ /obj/cable{ icon_state = "1-2" }, +/obj/mapping_helper/airlock/cycler{ + cycle_id = "escapebay"; + name = "Escape Pod Bay"; + enter_id = "inner" + }, /turf/simulated/floor, /area/station/hangar/escape) "cdD" = ( @@ -27206,6 +27282,10 @@ /area/station/crew_quarters/market) "cfS" = ( /obj/machinery/door/airlock/pyro/external, +/obj/mapping_helper/airlock/cycler{ + cycle_id = "merchanta"; + name = "Merchant Shuttle Dock" + }, /turf/simulated/floor/neutral, /area/station/crew_quarters/market) "cfT" = ( @@ -28910,10 +28990,10 @@ /turf/simulated/floor/carpet/purple/standard/edge/south, /area/research_outpost/indigo_rye) "clD" = ( -/obj/stool/chair, /obj/cable{ icon_state = "1-4" }, +/obj/stool/chair/purple, /turf/simulated/floor/carpet/purple/standard/edge/south, /area/research_outpost/indigo_rye) "clE" = ( @@ -29211,7 +29291,7 @@ "cmC" = ( /obj/table/wood/auto, /obj/machinery/light/small, -/obj/item/pinpointer, +/obj/item/pinpointer/disk, /obj/item/disk/data/cartridge/captain, /obj/item/disk/data/cartridge/captain, /turf/simulated/floor/black, @@ -30694,6 +30774,11 @@ name = "Door-linked Atmospheric Forcefield"; powerlevel = 1 }, +/obj/mapping_helper/airlock/cycler{ + cycle_id = "engineairbridge2"; + name = "Engineering Airbridge 2"; + enter_id = "inner" + }, /turf/simulated/floor/redblack, /area/station/engine/hotloop) "cFJ" = ( @@ -30851,6 +30936,11 @@ /obj/disposalpipe/segment/vertical, /obj/machinery/atmospherics/pipe/simple, /obj/mapping_helper/access/security, +/obj/mapping_helper/airlock/cycler{ + cycle_id = "sec"; + name = "Security"; + enter_id = "inner" + }, /turf/simulated/floor/red/side, /area/station/security/main) "cKV" = ( @@ -30886,6 +30976,11 @@ /obj/cable{ icon_state = "1-2" }, +/obj/mapping_helper/airlock/cycler{ + cycle_id = "southwestinnermaint"; + name = "Southwest Inner Maintenance"; + enter_id = "inner" + }, /turf/simulated/floor/orangeblack, /area/station/mining/refinery) "cLB" = ( @@ -30932,6 +31027,20 @@ dir = 1 }, /area/station/hallway/primary/west) +"cNE" = ( +/obj/machinery/door/airlock/pyro/external{ + dir = 4 + }, +/obj/disposalpipe/segment/horizontal, +/obj/cable{ + icon_state = "4-8" + }, +/obj/mapping_helper/airlock/cycler{ + cycle_id = "northmaint"; + name = "North Maintenance" + }, +/turf/simulated/floor/plating, +/area/station/maintenance/north) "cNM" = ( /obj/stool/chair, /turf/simulated/floor/neutral/side{ @@ -31007,6 +31116,11 @@ icon_state = "4-8" }, /obj/mapping_helper/firedoor_spawn, +/obj/mapping_helper/airlock/cycler{ + cycle_id = "hopdesk"; + name = "HOP Desk"; + enter_id = "hop" + }, /turf/simulated/floor/black, /area/station/bridge/hos) "cPy" = ( @@ -31217,7 +31331,7 @@ /area/station/crew_quarters/kitchen) "cXC" = ( /obj/rack, -/obj/item/clothing/suit/fire, +/obj/item/clothing/suit/hazard/fire, /obj/item/clothing/mask/gas/emergency, /obj/item/clothing/head/helmet/firefighter, /obj/item/tank/air, @@ -32459,6 +32573,11 @@ name = "AI Upload" }, /obj/mapping_helper/access/ai_upload, +/obj/mapping_helper/airlock/cycler{ + cycle_id = "aiupload"; + name = "AI Upload"; + enter_id = "outer" + }, /turf/simulated/floor/black, /area/station/turret_protected/ai_upload) "dPf" = ( @@ -32848,6 +32967,11 @@ /obj/cable{ icon_state = "1-8" }, +/obj/mapping_helper/airlock/cycler{ + cycle_id = "aiupload"; + name = "AI Upload"; + enter_id = "inner" + }, /turf/simulated/floor/black, /area/station/turret_protected/ai_upload) "dZr" = ( @@ -33162,6 +33286,11 @@ name = "Door-linked Atmospheric Forcefield"; powerlevel = 1 }, +/obj/mapping_helper/airlock/cycler{ + cycle_id = "engineering"; + name = "Engineering Bay"; + enter_id = "inner" + }, /turf/simulated/floor/grey, /area/station/hangar/engine) "emI" = ( @@ -33362,8 +33491,8 @@ /area/station/crew_quarters/quarters_east) "eul" = ( /obj/rack, -/obj/item/clothing/suit/fire, -/obj/item/clothing/suit/fire, +/obj/item/clothing/suit/hazard/fire, +/obj/item/clothing/suit/hazard/fire, /obj/item/clothing/mask/gas/emergency, /obj/item/clothing/mask/gas/emergency, /obj/item/clothing/head/helmet/firefighter, @@ -33727,6 +33856,11 @@ dir = 4 }, /obj/mapping_helper/access/engineering_storage, +/obj/mapping_helper/airlock/cycler{ + cycle_id = "engineering"; + name = "Engineering Bay"; + enter_id = "outer" + }, /turf/simulated/floor/grey, /area/station/hangar/engine) "eEn" = ( @@ -33846,6 +33980,11 @@ name = "Door-linked Atmospheric Forcefield"; powerlevel = 1 }, +/obj/mapping_helper/airlock/cycler{ + cycle_id = "engineering"; + name = "Engineering Bay"; + enter_id = "inner" + }, /turf/simulated/floor/grey, /area/station/engine/storage) "eGX" = ( @@ -34068,6 +34207,10 @@ icon_state = "4-8" }, /obj/mapping_helper/access/engineering_power, +/obj/mapping_helper/airlock/cycler{ + cycle_id = "westsolars"; + name = "West Solars" + }, /turf/simulated/floor/plating, /area/station/maintenance/solar/west) "ePl" = ( @@ -34303,7 +34446,7 @@ /area/station/maintenance/inner/east) "eYE" = ( /obj/rack, -/obj/item/clothing/suit/fire{ +/obj/item/clothing/suit/hazard/fire{ pixel_x = -3 }, /obj/item/clothing/mask/gas/emergency, @@ -34972,6 +35115,11 @@ dir = 4 }, /obj/disposalpipe/segment/horizontal, +/obj/mapping_helper/airlock/cycler{ + cycle_id = "routing"; + name = "Routing Depot"; + enter_id = "outer" + }, /turf/simulated/floor/plating, /area/station/routing/depot) "fzb" = ( @@ -35723,6 +35871,11 @@ name = "Door-linked Atmospheric Forcefield"; powerlevel = 1 }, +/obj/mapping_helper/airlock/cycler{ + cycle_id = "miningshuttle"; + name = "Mining Shuttle"; + enter_id = "outer" + }, /turf/simulated/floor/grey/side{ dir = 1 }, @@ -35792,6 +35945,14 @@ }, /turf/simulated/floor/grey, /area/station/bridge) +"gfC" = ( +/obj/machinery/door/airlock/pyro/external, +/obj/mapping_helper/airlock/cycler{ + cycle_id = "merchantb"; + name = "Merchant Shuttle Dock" + }, +/turf/simulated/floor/neutral, +/area/station/crew_quarters/market) "gfE" = ( /obj/machinery/atmospherics/pipe/simple/insulated{ dir = 4 @@ -36757,7 +36918,7 @@ /area/station/security/secwing) "gOK" = ( /obj/rack, -/obj/item/clothing/suit/fire, +/obj/item/clothing/suit/hazard/fire, /obj/item/clothing/mask/gas/emergency, /obj/item/clothing/head/helmet/firefighter, /obj/item/tank/air, @@ -37313,6 +37474,10 @@ "hed" = ( /obj/machinery/door/airlock/pyro/external, /obj/mapping_helper/access/cargo, +/obj/mapping_helper/airlock/cycler{ + cycle_id = "cargobay"; + name = "Cargo Bay" + }, /turf/simulated/floor/caution/northsouth, /area/station/quartermaster/cargobay) "heQ" = ( @@ -37855,14 +38020,14 @@ /area/station/security/main) "hBS" = ( /obj/table/reinforced/auto, -/obj/item/clothing/suit/fire/heavy, +/obj/item/clothing/suit/hazard/fire/heavy, /obj/item/clothing/head/helmet/welding, /obj/machinery/light{ dir = 1; layer = 9.1; pixel_y = 21 }, -/obj/item/clothing/suit/fire/heavy, +/obj/item/clothing/suit/hazard/fire/heavy, /obj/item/clothing/head/helmet/welding, /turf/simulated/floor/yellow/side{ dir = 5 @@ -38948,10 +39113,18 @@ icon_state = "4-8" }, /obj/mapping_helper/access/engineering_power, +/obj/mapping_helper/airlock/cycler{ + cycle_id = "eastsolars"; + name = "East Solars" + }, /turf/simulated/floor/plating, /area/station/maintenance/solar/east) "iEB" = ( /obj/machinery/door/airlock/pyro/external, +/obj/mapping_helper/airlock/cycler{ + cycle_id = "southmaint"; + name = "South Maintenance" + }, /turf/simulated/floor/plating, /area/station/maintenance/southeast) "iEQ" = ( @@ -39937,6 +40110,11 @@ name = "Door-linked Atmospheric Forcefield"; powerlevel = 1 }, +/obj/mapping_helper/airlock/cycler{ + cycle_id = "miningshuttle"; + name = "Mining Shuttle"; + enter_id = "outer" + }, /turf/simulated/floor/grey/side, /area/station/maintenance/northwest) "jmu" = ( @@ -39950,7 +40128,7 @@ /area/station/crew_quarters/kitchen) "jmE" = ( /obj/storage/secure/closet/engineering/electrical, -/obj/item/clothing/suit/rad, +/obj/item/clothing/suit/hazard/rad, /obj/item/clothing/head/rad_hood, /turf/simulated/floor/yellow/side, /area/station/engine/monitoring) @@ -40130,6 +40308,11 @@ name = "Courtroom" }, /obj/mapping_helper/access/brig, +/obj/mapping_helper/airlock/cycler{ + cycle_id = "hopdesk"; + name = "HOP Desk"; + enter_id = "sec" + }, /turf/simulated/floor, /area/station/security/secwing) "jrg" = ( @@ -41296,6 +41479,10 @@ name = "Door-linked Atmospheric Forcefield"; powerlevel = 1 }, +/obj/mapping_helper/airlock/cycler{ + cycle_id = "westinnermaint"; + name = "West Inner Maintenance" + }, /turf/simulated/floor/plating, /area/station/maintenance/inner/west) "koE" = ( @@ -41784,6 +41971,10 @@ /obj/cable/yellow{ icon_state = "1-2" }, +/obj/mapping_helper/airlock/cycler{ + cycle_id = "westsolars"; + name = "West Solars" + }, /turf/simulated/floor/plating, /area/station/maintenance/solar/west) "kHZ" = ( @@ -42182,6 +42373,11 @@ name = "Door-linked Atmospheric Forcefield"; powerlevel = 1 }, +/obj/mapping_helper/airlock/cycler{ + cycle_id = "engineairbridge1"; + name = "Engineering Airbridge 1"; + enter_id = "outer" + }, /turf/simulated/floor/caution/westeast, /area/station/engine/gas) "kUu" = ( @@ -42427,6 +42623,10 @@ name = "Door-linked Atmospheric Forcefield"; powerlevel = 1 }, +/obj/mapping_helper/airlock/cycler{ + cycle_id = "merchanta"; + name = "Merchant Shuttle Dock" + }, /turf/simulated/floor/neutral, /area/station/crew_quarters/market) "lhD" = ( @@ -42634,6 +42834,11 @@ name = "Door-linked Atmospheric Forcefield"; powerlevel = 1 }, +/obj/mapping_helper/airlock/cycler{ + cycle_id = "engineairbridge1"; + name = "Engineering Airbridge 1"; + enter_id = "inner" + }, /turf/simulated/floor/caution/westeast, /area/station/engine/hotloop) "lpY" = ( @@ -43523,6 +43728,19 @@ }, /turf/simulated/floor, /area/station/security/secwing) +"lPV" = ( +/obj/machinery/door/airlock/pyro/external, +/obj/forcefield/energyshield/perma/doorlink{ + desc = "A door-linked force field that prevents gasses from passing through it."; + name = "Door-linked Atmospheric Forcefield"; + powerlevel = 1 + }, +/obj/mapping_helper/airlock/cycler{ + cycle_id = "merchantb"; + name = "Merchant Shuttle Dock" + }, +/turf/simulated/floor/neutral, +/area/station/crew_quarters/market) "lQz" = ( /obj/machinery/light{ dir = 1; @@ -43775,6 +43993,11 @@ dir = 1 }, /obj/mapping_helper/access/brig, +/obj/mapping_helper/airlock/cycler{ + cycle_id = "hopdesk"; + name = "HOP Desk"; + enter_id = "outer" + }, /turf/simulated/floor, /area/station/crew_quarters/courtroom) "mep" = ( @@ -44160,7 +44383,7 @@ /area/space) "mwo" = ( /obj/rack, -/obj/item/clothing/suit/fire{ +/obj/item/clothing/suit/hazard/fire{ pixel_x = -3 }, /obj/item/clothing/mask/gas/emergency, @@ -44228,18 +44451,11 @@ /turf/simulated/floor/grey, /area/station/mining/magnet) "myd" = ( -/obj/rack, -/obj/item/circuitboard/teleporter, -/obj/item/circuitboard/card, -/obj/item/circuitboard/robot_module_rewriter, -/obj/item/circuitboard/cloning, -/obj/item/circuitboard/barcode_qm, -/obj/item/circuitboard/barcode, -/obj/item/circuitboard/qmsupply, /obj/machinery/light/small{ dir = 4; pixel_x = 12 }, +/obj/rack/organized/techstorage_eng, /turf/simulated/floor/grey/blackgrime/other, /area/station/storage/tech) "mzu" = ( @@ -44268,6 +44484,10 @@ /obj/machinery/door/airlock/pyro/external{ dir = 4 }, +/obj/mapping_helper/airlock/cycler{ + cycle_id = "eastinnermaint"; + name = "East Inner Maintenance" + }, /turf/simulated/floor/plating, /area/station/maintenance/inner/east) "mAy" = ( @@ -45195,6 +45415,10 @@ name = "Door-linked Atmospheric Forcefield"; powerlevel = 1 }, +/obj/mapping_helper/airlock/cycler{ + cycle_id = "mining"; + name = "Mining" + }, /turf/simulated/floor/grey, /area/station/mining/magnet) "nkD" = ( @@ -46308,6 +46532,11 @@ /obj/machinery/door/airlock/pyro/external{ name = "Auxiliary Docking Point" }, +/obj/mapping_helper/airlock/cycler{ + cycle_id = "escape"; + name = "Escape"; + enter_id = "inner" + }, /turf/simulated/floor/caution/northsouth, /area/station/hallway/secondary/exit) "oeU" = ( @@ -46691,9 +46920,6 @@ }, /area/station/solar/west) "osJ" = ( -/obj/rack, -/obj/item/circuitboard/powermonitor, -/obj/item/circuitboard/powermonitor_smes, /obj/machinery/camera{ c_tag = "autotag"; dir = 8; @@ -46702,11 +46928,7 @@ tag = "" }, /obj/machinery/light_switch/east, -/obj/item/circuitboard/genetics, -/obj/item/circuitboard/bank_data, -/obj/item/circuitboard/arcade, -/obj/item/circuitboard/qmorder, -/obj/item/circuitboard/telescope, +/obj/rack/organized/techstorage_med, /turf/simulated/floor/grey/blackgrime/other, /area/station/storage/tech) "osY" = ( @@ -47454,6 +47676,11 @@ name = "Door-linked Atmospheric Forcefield"; powerlevel = 1 }, +/obj/mapping_helper/airlock/cycler{ + cycle_id = "eva"; + name = "EVA Storage"; + enter_id = "inner" + }, /turf/simulated/floor, /area/station/storage/eva) "oYA" = ( @@ -48008,6 +48235,11 @@ /obj/cable{ icon_state = "4-8" }, +/obj/mapping_helper/airlock/cycler{ + cycle_id = "southwestinnermaint"; + name = "Southwest Inner Maintenance"; + enter_id = "outer" + }, /turf/simulated/floor/plating, /area/station/maintenance/inner/sw) "pst" = ( @@ -48091,6 +48323,10 @@ /obj/disposalpipe/segment/transport{ dir = 4 }, +/obj/mapping_helper/airlock/cycler{ + cycle_id = "westmaint"; + name = "West Maintenance" + }, /turf/simulated/floor/plating, /area/station/maintenance/west) "pvc" = ( @@ -48922,6 +49158,10 @@ }, /obj/mapping_helper/firedoor_spawn, /obj/mapping_helper/access/mining, +/obj/mapping_helper/airlock/cycler{ + cycle_id = "mining"; + name = "Mining" + }, /turf/simulated/floor/orangeblack, /area/station/mining/magnet) "qcA" = ( @@ -49023,6 +49263,11 @@ icon_state = "4-8" }, /obj/mapping_helper/firedoor_spawn, +/obj/mapping_helper/airlock/cycler{ + cycle_id = "research"; + name = "Research"; + enter_id = "inner" + }, /turf/simulated/floor/purple, /area/station/science/lobby) "qfh" = ( @@ -49243,7 +49488,7 @@ /area/station/maintenance/southeast) "qpa" = ( /obj/rack, -/obj/item/clothing/suit/fire, +/obj/item/clothing/suit/hazard/fire, /obj/item/clothing/mask/gas/emergency, /obj/item/clothing/head/helmet/firefighter, /obj/item/tank/air, @@ -49378,7 +49623,7 @@ /area/station/science/artifact) "qsS" = ( /obj/rack, -/obj/item/clothing/suit/fire, +/obj/item/clothing/suit/hazard/fire, /obj/item/clothing/mask/gas/emergency, /obj/item/clothing/head/helmet/firefighter, /obj/item/tank/air, @@ -49422,6 +49667,11 @@ dir = 4 }, /area/station/hallway/secondary/exit) +"qtY" = ( +/obj/surgery_tray, +/obj/item/storage/box/popsicle_sticks, +/turf/simulated/floor/black, +/area/station/crew_quarters/catering) "qub" = ( /obj/table/reinforced/auto, /obj/item/sheet/glass/reinforced{ @@ -49572,6 +49822,11 @@ name = "Door-linked Atmospheric Forcefield"; powerlevel = 1 }, +/obj/mapping_helper/airlock/cycler{ + cycle_id = "escape"; + name = "Escape"; + enter_id = "outer" + }, /turf/simulated/floor/caution/northsouth, /area/station/hallway/secondary/exit) "qym" = ( @@ -49938,6 +50193,10 @@ /obj/cable/yellow{ icon_state = "1-2" }, +/obj/mapping_helper/airlock/cycler{ + cycle_id = "eastsolars"; + name = "East Solars" + }, /turf/simulated/floor/plating, /area/station/maintenance/solar/east) "qRw" = ( @@ -50402,6 +50661,11 @@ name = "Door-linked Atmospheric Forcefield"; powerlevel = 1 }, +/obj/mapping_helper/airlock/cycler{ + cycle_id = "engineairbridge2"; + name = "Engineering Airbridge 2"; + enter_id = "outer" + }, /turf/simulated/floor/yellow/side{ dir = 1 }, @@ -51513,6 +51777,11 @@ name = "Door-linked Atmospheric Forcefield"; powerlevel = 1 }, +/obj/mapping_helper/airlock/cycler{ + cycle_id = "eva"; + name = "EVA Storage"; + enter_id = "inner" + }, /turf/simulated/floor/plating, /area/station/maintenance/inner/west) "sbP" = ( @@ -52224,6 +52493,10 @@ name = "Door-linked Atmospheric Forcefield"; powerlevel = 1 }, +/obj/mapping_helper/airlock/cycler{ + cycle_id = "eastinnermaint"; + name = "East Inner Maintenance" + }, /turf/simulated/floor/plating, /area/station/maintenance/inner/east) "sFU" = ( @@ -52235,6 +52508,10 @@ name = "Door-linked Atmospheric Forcefield"; powerlevel = 1 }, +/obj/mapping_helper/airlock/cycler{ + cycle_id = "engine"; + name = "Inner Engineering" + }, /turf/simulated/floor/engine/caution/north, /area/station/engine/core) "sFY" = ( @@ -54861,6 +55138,10 @@ /obj/machinery/door/airlock/pyro/external{ dir = 4 }, +/obj/mapping_helper/airlock/cycler{ + cycle_id = "southmaint"; + name = "South Maintenance" + }, /turf/simulated/floor/plating, /area/station/maintenance/southeast) "uDK" = ( @@ -54939,6 +55220,10 @@ /obj/machinery/door/airlock/pyro/external, /obj/mapping_helper/access/engineering_engine, /obj/machinery/atmospherics/pipe/simple/insulated, +/obj/mapping_helper/airlock/cycler{ + cycle_id = "engine"; + name = "Inner Engineering" + }, /turf/simulated/floor/engine, /area/station/engine/core) "uGb" = ( @@ -56673,6 +56958,11 @@ req_access = null }, /obj/mapping_helper/access/research_foyer, +/obj/mapping_helper/airlock/cycler{ + cycle_id = "research"; + name = "Research"; + enter_id = "outer" + }, /turf/simulated/floor/purple, /area/station/science/lobby) "vZg" = ( @@ -56928,6 +57218,11 @@ name = "Door-linked Atmospheric Forcefield"; powerlevel = 1 }, +/obj/mapping_helper/airlock/cycler{ + cycle_id = "podbay"; + name = "Pod Bay"; + enter_id = "outer" + }, /turf/simulated/floor/plating, /area/station/hangar/main) "wmg" = ( @@ -56981,6 +57276,11 @@ /obj/cable{ icon_state = "1-2" }, +/obj/mapping_helper/airlock/cycler{ + cycle_id = "eva"; + name = "EVA Storage"; + enter_id = "outer" + }, /turf/simulated/floor/plating, /area/station/maintenance/inner/west) "woi" = ( @@ -57284,6 +57584,11 @@ name = "Door-linked Atmospheric Forcefield"; powerlevel = 1 }, +/obj/mapping_helper/airlock/cycler{ + cycle_id = "escapebay"; + name = "Escape Pod Bay"; + enter_id = "outer" + }, /turf/simulated/floor/caution/westeast, /area/station/hangar/escape) "wzw" = ( @@ -58409,8 +58714,8 @@ /area/station/engine/gas) "xop" = ( /obj/rack, -/obj/item/clothing/suit/fire, -/obj/item/clothing/suit/fire, +/obj/item/clothing/suit/hazard/fire, +/obj/item/clothing/suit/hazard/fire, /obj/item/clothing/mask/gas/emergency, /obj/item/clothing/mask/gas/emergency, /obj/machinery/light_switch/east, @@ -58522,6 +58827,11 @@ name = "Door-linked Atmospheric Forcefield"; powerlevel = 1 }, +/obj/mapping_helper/airlock/cycler{ + cycle_id = "southwestinnermaint"; + name = "Southwest Inner Maintenance"; + enter_id = "inner" + }, /turf/simulated/floor/plating, /area/station/maintenance/inner/sw) "xrD" = ( @@ -58870,6 +59180,11 @@ /obj/cable{ icon_state = "4-8" }, +/obj/mapping_helper/airlock/cycler{ + cycle_id = "sec"; + name = "Security"; + enter_id = "outer" + }, /turf/simulated/floor/red, /area/station/security/main) "xEf" = ( @@ -101456,9 +101771,9 @@ ccw cdo ceh cfc -cfS +gfC cgF -lgW +lPV cqM cqM cqM @@ -107095,7 +107410,7 @@ acX fKp aca ael -aeU +cNE ael agG tOx @@ -107699,7 +108014,7 @@ aaa aaO adp adp -aeU +cNE adp agG ahI @@ -114398,7 +114713,7 @@ nbR sxr mLt pfT -rck +qtY rck ezJ wCK diff --git a/maps/nadir.dmm b/maps/nadir.dmm index 0161f732e6979..80625a1e765a1 100644 --- a/maps/nadir.dmm +++ b/maps/nadir.dmm @@ -4,6 +4,18 @@ /obj/item/storage/box/nerd_kit, /turf/simulated/floor/carpet/grime, /area/station/crew_quarters/arcade/dungeon) +"aat" = ( +/obj/machinery/power/terminal{ + dir = 4 + }, +/obj/cable/orange, +/obj/cable/orange{ + icon_state = "1-10" + }, +/turf/simulated/floor/yellowblack{ + dir = 4 + }, +/area/station/engine/ptl) "aaC" = ( /obj/cable{ icon_state = "1-2" @@ -65,6 +77,19 @@ /area/station/security/checkpoint/sec_foyer{ name = "Secure Release Foyer" }) +"aby" = ( +/obj/machinery/light{ + dir = 8; + layer = 9.1; + pixel_x = -10 + }, +/obj/stool/chair/office/purple{ + dir = 1 + }, +/turf/simulated/floor/purpleblack{ + dir = 8 + }, +/area/station/science/chemistry) "abz" = ( /turf/simulated/wall/auto/supernorn, /area/station/maintenance/south) @@ -160,10 +185,13 @@ /obj/stool/chair/office/yellow{ dir = 8 }, +/mob/living/carbon/human/npc/monkey/mr_rathen, /obj/cable{ - icon_state = "4-8" + icon_state = "1-2" + }, +/obj/cable{ + icon_state = "1-8" }, -/mob/living/carbon/human/npc/monkey/mr_rathen, /turf/simulated/floor/black, /area/station/engine/engineering) "adR" = ( @@ -340,6 +368,18 @@ dir = 6 }, /area/station/hallway/secondary/exit) +"ahJ" = ( +/obj/machinery/door/airlock/pyro/external{ + dir = 4 + }, +/obj/mapping_helper/airlock/cycler{ + cycle_id = "se_breach"; + name = "South East Breach Hull" + }, +/turf/simulated/floor/industrial, +/area/station/maintenance/outer/se{ + name = "Southeast Breach Hull" + }) "ahN" = ( /obj/machinery/door/poddoor/blast/pyro{ icon_state = "bdoormid1"; @@ -530,6 +570,18 @@ }, /turf/simulated/floor/black, /area/station/hallway/primary/southeast) +"all" = ( +/obj/cable{ + icon_state = "1-8" + }, +/obj/cable{ + icon_state = "1-2" + }, +/obj/stool/chair/office/purple{ + dir = 8 + }, +/turf/simulated/floor/black, +/area/station/science/artifact) "alm" = ( /obj/table/reinforced/bar/auto{ name = "wooden table" @@ -541,7 +593,11 @@ /obj/item/item_box/gold_star{ item_amount = 20; pixel_x = -6; - pixel_y = 3 + pixel_y = 8 + }, +/obj/item/pinpointer/disk{ + pixel_y = -3; + pixel_x = -6 }, /turf/simulated/floor/carpet/blue/fancy/innercorner/nw_se, /area/station/bridge/captain) @@ -804,13 +860,13 @@ name = "Book Nook" }) "arG" = ( -/obj/cable{ - icon_state = "4-9" - }, /obj/disposalpipe/segment/transport{ dir = 4; icon_state = "pipe-c" }, +/obj/cable/yellow{ + icon_state = "4-8" + }, /turf/simulated/floor/caution/east, /area/station/engine/substation/pylon{ name = "South Catalytic Substation" @@ -1010,6 +1066,13 @@ }, /turf/simulated/floor/industrial, /area/station/mining/staff_room) +"axj" = ( +/obj/disposalpipe/segment/mail/horizontal, +/obj/cable/orange{ + icon_state = "1-2" + }, +/turf/simulated/floor/black, +/area/station/hallway/primary/southeast) "axs" = ( /obj/submachine/weapon_vendor/security, /turf/simulated/floor/redblack/corner{ @@ -1021,9 +1084,6 @@ dir = 1; pixel_y = 21 }, -/obj/cable{ - icon_state = "4-8" - }, /obj/disposalpipe/segment/horizontal, /turf/simulated/floor/plating, /area/station/maintenance/southeast) @@ -1066,13 +1126,13 @@ name = "The Warrens" }) "ayN" = ( +/obj/item/device/radio/beacon, /obj/cable{ - icon_state = "2-8" + icon_state = "4-8" }, -/obj/cable{ - icon_state = "2-4" +/obj/cable/orange{ + icon_state = "1-2" }, -/obj/item/device/radio/beacon, /turf/simulated/floor/black, /area/station/engine/engineering) "azi" = ( @@ -1338,6 +1398,9 @@ "aEI" = ( /obj/disposalpipe/segment/mail/vertical, /obj/landmark/gps_waypoint, +/obj/cable/orange{ + icon_state = "1-6" + }, /turf/simulated/floor/black, /area/station/engine/engineering) "aEN" = ( @@ -1366,24 +1429,6 @@ }, /turf/simulated/floor/black/side, /area/station/hallway/primary/northeast) -"aES" = ( -/obj/table/reinforced/auto, -/obj/machinery/glass_recycler/bar, -/obj/mapping_helper/access/kitchen, -/obj/mapping_helper/access/bar, -/obj/forcefield/energyshield/perma/doorlink, -/obj/mapping_helper/firedoor_spawn, -/obj/machinery/door/airlock/pyro/glass/windoor, -/obj/machinery/door/poddoor/pyro{ - density = 0; - icon_state = "pdoor0"; - id = "kitchen"; - layer = 4; - name = "Kitchen Shutter"; - opacity = 0 - }, -/turf/simulated/floor/black, -/area/station/crew_quarters/kitchen) "aEY" = ( /obj/machinery/manufacturer/general{ free_resource_amt = 1 @@ -1716,6 +1761,17 @@ /area/station/engine/inner{ name = "Transception Array Control" }) +"aPP" = ( +/obj/machinery/light/small{ + dir = 8; + pixel_x = -12 + }, +/obj/disposaloutlet/east, +/obj/disposalpipe/trunk/produce{ + dir = 4 + }, +/turf/simulated/floor/specialroom/freezer, +/area/station/crew_quarters/catering) "aPY" = ( /obj/mapping_helper/wingrille_spawn/auto/crystal, /obj/cable, @@ -1723,6 +1779,22 @@ /area/station/maintenance/outer/sw{ name = "Southwest Breach Hull" }) +"aQh" = ( +/obj/machinery/door/airlock/pyro/external{ + dir = 4 + }, +/obj/forcefield/energyshield/perma/doorlink{ + dir = 8 + }, +/obj/mapping_helper/airlock/cycler{ + cycle_id = "disposals"; + name = "Disposals"; + enter_id = "inner" + }, +/turf/simulated/floor/black, +/area/station/maintenance/outer/ne{ + name = "Northeast Breach Hull" + }) "aQs" = ( /obj/machinery/door_control{ id = "cargogaming"; @@ -1756,6 +1828,12 @@ /obj/machinery/chem_dispenser/chemical, /turf/simulated/floor/engine/caution/east, /area/station/medical/medbay/pharmacy) +"aRr" = ( +/obj/stool/chair/office/yellow, +/turf/simulated/floor/yellowblack{ + dir = 6 + }, +/area/station/engine/ptl) "aRF" = ( /obj/disposalpipe/segment/bent/west, /turf/simulated/floor/black, @@ -1793,6 +1871,12 @@ /area/station/maintenance/outer/nw{ name = "Northwest Breach Hull" }) +"aTf" = ( +/obj/cable{ + icon_state = "1-2" + }, +/turf/simulated/wall/auto/reinforced/supernorn, +/area/station/engine/ptl) "aTq" = ( /obj/machinery/conveyor/EW{ id = "ghostdrone" @@ -2081,12 +2165,44 @@ /obj/machinery/drone_recharger, /turf/simulated/floor/plating, /area/station/maintenance/north) +"aYG" = ( +/obj/mapping_helper/wingrille_spawn/auto/reinforced, +/obj/cable/orange{ + icon_state = "0-9" + }, +/obj/cable/orange{ + icon_state = "0-2" + }, +/turf/simulated/floor/plating, +/area/station/hallway/secondary/construction{ + name = "The Warrens" + }) "aYP" = ( /obj/decal/tile_edge/floorguide/botany{ dir = 1 }, /turf/simulated/floor/grey, /area/station/hallway/primary/southwest) +"aYR" = ( +/obj/machinery/door_control{ + id = "scienceteleporter2"; + name = "Pad Access Door"; + pixel_x = -8; + pixel_y = 26 + }, +/obj/machinery/door_control{ + id = "scienceteleporter"; + name = "Pad Shutters"; + pixel_x = 6; + pixel_y = 26 + }, +/obj/stool/chair/office/purple{ + dir = 4 + }, +/turf/simulated/floor/purpleblack{ + dir = 1 + }, +/area/station/science/teleporter) "aZc" = ( /obj/cable{ icon_state = "4-8" @@ -2290,10 +2406,10 @@ /turf/simulated/floor/grey/blackgrime/other, /area/station/storage/tech) "bdB" = ( -/obj/cable{ +/obj/disposalpipe/segment/transport, +/obj/cable/orange{ icon_state = "1-2" }, -/obj/disposalpipe/segment/transport, /turf/simulated/floor/yellowblack, /area/station/engine/engineering) "bdO" = ( @@ -2378,10 +2494,13 @@ /area/station/science/bot_storage) "bfl" = ( /obj/cable{ - icon_state = "4-8" + icon_state = "1-2" }, /obj/cable{ - icon_state = "2-4" + icon_state = "1-4" + }, +/obj/cable{ + icon_state = "1-8" }, /turf/simulated/floor/black, /area/station/engine/engineering) @@ -2422,6 +2541,18 @@ dir = 8 }, /area/station/hallway/primary/northeast) +"bgU" = ( +/obj/table/auto, +/obj/item/storage/box/glassbox{ + pixel_y = 10; + pixel_x = 6 + }, +/obj/item/gun/russianrevolver, +/obj/machinery/phone/wall{ + pixel_y = 32 + }, +/turf/simulated/floor/carpet/grime, +/area/station/crew_quarters/baroffice) "bgX" = ( /obj/item/storage/toilet, /obj/landmark/pest, @@ -2618,6 +2749,28 @@ /obj/shrub, /turf/simulated/floor/grass/leafy, /area/station/garden/owlery) +"bkC" = ( +/obj/table/auto, +/obj/item/shaker/mustard{ + pixel_x = -6 + }, +/obj/item/shaker/salt, +/obj/item/shaker/pepper{ + pixel_x = 3 + }, +/obj/item/shaker/ketchup{ + pixel_x = 6 + }, +/obj/item/paper_bin{ + pixel_y = 15; + pixel_x = 7 + }, +/obj/item/pen{ + pixel_y = 13; + pixel_x = 3 + }, +/turf/simulated/floor/grey/blackgrime, +/area/station/crew_quarters/catering) "bkJ" = ( /obj/cable{ icon_state = "4-8" @@ -2937,6 +3090,18 @@ /obj/disposalpipe/junction/middle/east, /turf/simulated/floor/black/grime, /area/station/security/brig/genpop) +"bru" = ( +/obj/grille/catwalk, +/obj/cable{ + icon_state = "1-8" + }, +/obj/cable{ + icon_state = "2-8" + }, +/turf/simulated/floor/black/grime, +/area/station/hallway/secondary/construction{ + name = "The Warrens" + }) "brA" = ( /obj/cable{ icon_state = "4-8" @@ -3231,6 +3396,18 @@ }, /turf/simulated/floor/carpet/red/fancy/narrow/T_east, /area/station/crew_quarters/arcade/dungeon) +"bva" = ( +/obj/machinery/door/airlock/pyro/external, +/obj/cable{ + icon_state = "1-2" + }, +/obj/mapping_helper/airlock/cycler{ + cycle_id = "escape"; + name = "Escape"; + enter_id = "inner" + }, +/turf/simulated/floor/engine/caution/northsouth, +/area/station/hallway/secondary/exit) "bvo" = ( /obj/cable{ icon_state = "1-2" @@ -3537,9 +3714,6 @@ /obj/machinery/door/airlock/pyro/engineering/alt{ dir = 4 }, -/obj/cable{ - icon_state = "4-8" - }, /obj/mapping_helper/access/engineering_engine, /obj/disposalpipe/segment/transport{ dir = 4 @@ -3547,6 +3721,9 @@ /obj/forcefield/energyshield/perma/doorlink{ dir = 8 }, +/obj/cable/yellow{ + icon_state = "4-8" + }, /turf/simulated/floor/industrial, /area/station/engine/substation/pylon{ name = "South Catalytic Substation" @@ -3636,6 +3813,15 @@ dir = 10 }, /area/station/hallway/secondary/west) +"bFd" = ( +/obj/grille/catwalk, +/obj/cable/orange{ + icon_state = "4-8" + }, +/turf/simulated/floor/black/grime, +/area/station/hallway/secondary/construction{ + name = "The Warrens" + }) "bFf" = ( /obj/machinery/door/unpowered/wood/pyro{ dir = 4 @@ -3804,15 +3990,6 @@ dir = 1 }, /area/station/hallway/primary/northwest) -"bJp" = ( -/obj/machinery/door/airlock/pyro/engineering/alt, -/obj/mapping_helper/access/engineering_engine, -/obj/forcefield/energyshield/perma/doorlink, -/obj/mapping_helper/firedoor_spawn, -/turf/simulated/floor/engine, -/area/station/engine/monitoring{ - name = "Nuclear Control Room" - }) "bJE" = ( /obj/machinery/chem_dispenser/chemical, /turf/simulated/floor/engine/caution/north, @@ -3856,6 +4033,14 @@ /obj/machinery/drone_recharger, /turf/simulated/floor/plating, /area/station/maintenance/northeast) +"bKJ" = ( +/obj/cable/yellow{ + icon_state = "4-10" + }, +/turf/simulated/floor/industrial, +/area/station/maintenance/outer/se{ + name = "Southeast Breach Hull" + }) "bKL" = ( /obj/landmark/halloween, /obj/machinery/drainage, @@ -3912,16 +4097,6 @@ }, /turf/simulated/floor/sanitary, /area/station/crew_quarters/quarters_east) -"bMa" = ( -/obj/table/auto, -/obj/item/storage/box/glassbox, -/obj/item/storage/box/glassbox, -/obj/item/reagent_containers/food/drinks/drinkingglass/wine, -/obj/item/reagent_containers/food/drinks/drinkingglass/wine, -/obj/item/reagent_containers/food/drinks/drinkingglass/wine, -/obj/machinery/light_switch/west, -/turf/simulated/floor/grey/blackgrime, -/area/station/crew_quarters/catering) "bMf" = ( /turf/simulated/floor/purpleblack/corner, /area/station/teleporter) @@ -4019,19 +4194,6 @@ /obj/disposalpipe/segment/vertical, /turf/simulated/floor/carpet/grime, /area/station/crew_quarters/arcade/dungeon) -"bOo" = ( -/obj/machinery/door/airlock/pyro/command/alt{ - dir = 4 - }, -/obj/cable{ - icon_state = "4-8" - }, -/obj/mapping_helper/access/ai_upload, -/obj/forcefield/energyshield/perma/doorlink{ - dir = 8 - }, -/turf/simulated/floor/darkblue, -/area/station/turret_protected/ai) "bOK" = ( /obj/machinery/conveyor{ dir = 8; @@ -4433,12 +4595,6 @@ }, /turf/simulated/floor/black, /area/station/storage/emergencyinternals) -"bYc" = ( -/obj/table/reinforced/auto, -/obj/item/reagent_containers/food/drinks/bowl, -/obj/item/kitchen/utensil/spoon, -/turf/simulated/floor/wood, -/area/station/crew_quarters/cafeteria) "bZd" = ( /obj/mapping_helper/wingrille_spawn/auto/reinforced, /turf/simulated/floor/plating, @@ -4491,6 +4647,9 @@ /area/pasiphae/sys) "caB" = ( /obj/landmark/gps_waypoint, +/obj/cable/yellow{ + icon_state = "4-8" + }, /turf/simulated/floor/plating, /area/station/engine/substation/pylon{ name = "South Catalytic Substation" @@ -4611,13 +4770,10 @@ }, /area/station/medical/medbay/cloner) "cec" = ( -/obj/cable{ +/obj/disposalpipe/segment/transport, +/obj/cable/orange{ icon_state = "1-2" }, -/obj/cable{ - icon_state = "2-8" - }, -/obj/disposalpipe/segment/transport, /turf/simulated/floor/black, /area/station/engine/engineering) "ceL" = ( @@ -4671,13 +4827,6 @@ /obj/machinery/power/data_terminal, /turf/simulated/floor/engine, /area/station/communications/centre) -"cfT" = ( -/obj/stool/chair, -/obj/decal/tile_edge/line/black{ - icon_state = "line1" - }, -/turf/simulated/floor/black, -/area/station/crew_quarters/cafeteria) "cfX" = ( /obj/cable{ icon_state = "2-8" @@ -4770,10 +4919,6 @@ /obj/window_blinds/cog2/left, /turf/simulated/floor/plating, /area/station/medical/medbay/treatment2) -"chV" = ( -/obj/stool/chair, -/turf/simulated/floor/wood, -/area/station/crew_quarters/cafeteria) "cib" = ( /obj/disposalpipe/segment/mail/vertical, /obj/machinery/camera{ @@ -4952,6 +5097,25 @@ dir = 4 }, /area/listeningpost) +"cla" = ( +/obj/machinery/light{ + dir = 8; + layer = 9.1; + pixel_x = -10 + }, +/obj/table/reinforced/chemistry/auto{ + name = "prep counter" + }, +/obj/machinery/espresso_machine{ + pixel_y = 5 + }, +/obj/noticeboard/persistent{ + name = "Bar persistent notice board"; + persistent_id = "bar" + }, +/obj/item/reagent_containers/food/drinks/espressocup, +/turf/simulated/floor/engine, +/area/station/crew_quarters/cafeteria) "clb" = ( /obj/storage/secure/closet/brig, /turf/simulated/floor/redblack, @@ -5243,21 +5407,6 @@ /obj/stool/bench/red/auto, /turf/simulated/floor/wood, /area/station/crew_quarters/sauna) -"crU" = ( -/obj/machinery/door/airlock/pyro/security/alt, -/obj/mapping_helper/access/brig, -/obj/disposalpipe/segment/brig{ - dir = 1 - }, -/obj/cable{ - icon_state = "1-2" - }, -/obj/mapping_helper/firedoor_spawn, -/obj/forcefield/energyshield/perma/doorlink, -/turf/simulated/floor/redblack{ - dir = 1 - }, -/area/station/security/interrogation) "crV" = ( /obj/machinery/portable_atmospherics/scrubber, /turf/simulated/floor/plating, @@ -5669,16 +5818,6 @@ /area/station/maintenance/outer/nw{ name = "Northwest Breach Hull" }) -"cDt" = ( -/obj/machinery/light{ - dir = 8; - layer = 9.1; - pixel_x = -10 - }, -/obj/machinery/chem_dispenser/soda, -/obj/machinery/light/emergency, -/turf/simulated/floor/engine/caution/east, -/area/station/crew_quarters/cafeteria) "cEo" = ( /obj/storage/closet/wardrobe/grey, /obj/disposalpipe/segment/mail/vertical, @@ -6062,14 +6201,6 @@ /obj/disposalpipe/trunk/east, /turf/simulated/floor/black/grime, /area/station/maintenance/southwest) -"cNv" = ( -/obj/machinery/door/airlock/pyro/command/alt, -/obj/cable{ - icon_state = "1-2" - }, -/obj/mapping_helper/access/ai_upload, -/turf/simulated/floor/engine, -/area/station/turret_protected/ai_upload) "cNE" = ( /obj/cable{ icon_state = "4-8" @@ -6339,25 +6470,32 @@ /area/station/maintenance/outer/se{ name = "Southeast Breach Hull" }) -"cSI" = ( -/obj/table/reinforced/bar/auto, -/obj/item/shaker/mustard{ - pixel_x = -1; - pixel_y = 8 +"cTx" = ( +/obj/machinery/door/poddoor/blast/pyro{ + density = 0; + dir = 4; + icon_state = "bdoormid0"; + id = "nadir_nukecore"; + name = "Reactor Core Shielding"; + opacity = 0 }, -/obj/item/shaker/ketchup{ - pixel_x = 8; - pixel_y = 3 +/obj/machinery/door/airlock/pyro/glass/engineering{ + dir = 4; + name = "Secondary Core Access" }, -/obj/item/shaker/pepper{ - pixel_x = -5; - pixel_y = 3 +/obj/mapping_helper/access/engineering_engine, +/obj/forcefield/energyshield/perma/doorlink, +/obj/mapping_helper/firedoor_spawn, +/obj/cable{ + icon_state = "4-8" }, -/obj/item/shaker/salt{ - pixel_x = 3 +/obj/mapping_helper/airlock/cycler{ + cycle_id = "reactorside"; + name = "Reactor Side"; + enter_id = "inner" }, -/turf/simulated/floor/carpet/green/standard/narrow/northsouth, -/area/station/crew_quarters/cafeteria) +/turf/simulated/floor/engine, +/area/station/engine/core/nuclear) "cTz" = ( /obj/cable{ icon_state = "1-2" @@ -6415,6 +6553,15 @@ dir = 8 }, /area/station/hallway/primary/northwest) +"cUo" = ( +/obj/random_item_spawner/junk/one_or_zero, +/obj/cable/orange{ + icon_state = "4-8" + }, +/turf/simulated/floor/industrial, +/area/station/hallway/secondary/construction{ + name = "The Warrens" + }) "cUu" = ( /obj/machinery/power/data_terminal, /obj/landmark/start/job/AI, @@ -6763,6 +6910,15 @@ /area/station/hallway/secondary/construction{ name = "The Warrens" }) +"dbo" = ( +/obj/disposalpipe/segment/transport, +/obj/cable/yellow{ + icon_state = "4-10" + }, +/turf/simulated/floor/industrial, +/area/station/maintenance/outer/se{ + name = "Southeast Breach Hull" + }) "dbE" = ( /obj/table/reinforced/auto, /obj/item/kitchen/food_box/donut_box{ @@ -6841,6 +6997,25 @@ /obj/forcefield/energyshield/perma/doorlink, /turf/simulated/floor/black/side, /area/station/crew_quarters/arcade) +"ddF" = ( +/obj/machinery/door/airlock/pyro/security/alt{ + dir = 4 + }, +/obj/cable{ + icon_state = "4-8" + }, +/obj/mapping_helper/access/security, +/obj/mapping_helper/firedoor_spawn, +/obj/forcefield/energyshield/perma/doorlink{ + dir = 8 + }, +/obj/mapping_helper/airlock/cycler{ + cycle_id = "sec"; + name = "Security"; + enter_id = "brig" + }, +/turf/simulated/floor/black, +/area/station/security/brig) "ddM" = ( /obj/grille/catwalk, /obj/random_item_spawner/junk/one_or_zero, @@ -6944,26 +7119,6 @@ /area/station/maintenance/outer/sw{ name = "Southwest Breach Hull" }) -"dhp" = ( -/obj/stool/chair/office{ - dir = 4 - }, -/obj/machinery/door_control{ - id = "scienceteleporter2"; - name = "Pad Access Door"; - pixel_x = -8; - pixel_y = 26 - }, -/obj/machinery/door_control{ - id = "scienceteleporter"; - name = "Pad Shutters"; - pixel_x = 6; - pixel_y = 26 - }, -/turf/simulated/floor/purpleblack{ - dir = 1 - }, -/area/station/science/teleporter) "dhu" = ( /obj/reagent_dispensers/foamtank, /obj/machinery/light{ @@ -6971,6 +7126,9 @@ layer = 9.1; pixel_y = 21 }, +/obj/cable{ + icon_state = "2-6" + }, /turf/simulated/floor/engine/caution/corner{ dir = 4 }, @@ -7251,14 +7409,6 @@ /area/station/maintenance/outer/se{ name = "Southeast Breach Hull" }) -"dqo" = ( -/obj/machinery/light/small{ - dir = 8; - pixel_x = -12 - }, -/obj/reagent_dispensers/beerkeg, -/turf/simulated/floor/grey/blackgrime, -/area/station/crew_quarters/catering) "dqs" = ( /obj/cable{ icon_state = "1-4" @@ -7469,6 +7619,17 @@ }, /turf/simulated/floor/black/grime, /area/station/security/brig/genpop) +"dvF" = ( +/obj/machinery/door/airlock/pyro/external{ + dir = 4 + }, +/obj/cable{ + icon_state = "4-8" + }, +/turf/simulated/floor/industrial, +/area/station/maintenance/outer/se{ + name = "Southeast Breach Hull" + }) "dvO" = ( /obj/table/reinforced/auto, /obj/item/reagent_containers/food/snacks/cereal_box{ @@ -7685,6 +7846,9 @@ "dyF" = ( /obj/machinery/portable_reclaimer, /obj/decal/cleanable/dirt, +/obj/cable/orange{ + icon_state = "4-8" + }, /turf/simulated/floor/plating, /area/station/hallway/secondary/construction{ name = "The Warrens" @@ -7825,6 +7989,24 @@ /obj/disposalpipe/segment/produce, /turf/simulated/floor/greenblack, /area/station/ranch) +"dBq" = ( +/obj/machinery/door/airlock/pyro/security/alt, +/obj/disposalpipe/segment/ejection{ + dir = 2 + }, +/obj/mapping_helper/access/security, +/obj/cable{ + icon_state = "1-2" + }, +/obj/mapping_helper/firedoor_spawn, +/obj/forcefield/energyshield/perma/doorlink, +/obj/mapping_helper/airlock/cycler{ + cycle_id = "secinterro1"; + name = "Security Interrogation 1"; + enter_id = "inner" + }, +/turf/simulated/floor/redblack, +/area/station/security/interrogation) "dBr" = ( /obj/landmark/gps_waypoint, /obj/disposalpipe/segment/vertical, @@ -7916,6 +8098,9 @@ /obj/cable/yellow{ icon_state = "1-10" }, +/obj/cable/yellow{ + icon_state = "4-10" + }, /turf/simulated/floor/plating, /area/station/engine/substation/pylon{ name = "South Catalytic Substation" @@ -8082,6 +8267,11 @@ "dFR" = ( /turf/simulated/floor/plating, /area/station/maintenance/south) +"dFX" = ( +/obj/machinery/light_switch/west, +/obj/reagent_dispensers/beerkeg, +/turf/simulated/floor/grey/blackgrime, +/area/station/crew_quarters/catering) "dGx" = ( /obj/cable{ icon_state = "1-2" @@ -8303,7 +8493,7 @@ }) "dMn" = ( /obj/rack, -/obj/item/clothing/suit/fire, +/obj/item/clothing/suit/hazard/fire, /obj/item/clothing/mask/gas/emergency, /obj/item/clothing/head/helmet/firefighter, /obj/item/tank/air, @@ -8366,6 +8556,9 @@ }) "dOr" = ( /obj/disposalpipe/segment/mail/vertical, +/obj/cable/orange{ + icon_state = "1-2" + }, /turf/simulated/floor/yellowblack, /area/station/hallway/primary/southeast) "dOz" = ( @@ -8419,6 +8612,14 @@ /area/station/engine/substation/pylon{ name = "South Catalytic Substation" }) +"dQV" = ( +/obj/cable/yellow{ + icon_state = "5-10" + }, +/turf/simulated/floor/industrial, +/area/station/maintenance/outer/se{ + name = "Southeast Breach Hull" + }) "dRl" = ( /obj/fitness/speedbag/wizard, /obj/machinery/light{ @@ -8943,6 +9144,16 @@ /obj/machinery/vending/cigarette, /turf/simulated/floor/black, /area/station/hallway/primary/southwest) +"ecJ" = ( +/obj/machinery/door/airlock/pyro/external, +/obj/forcefield/energyshield/perma/doorlink, +/obj/mapping_helper/airlock/cycler{ + cycle_id = "escape"; + name = "Escape"; + enter_id = "outer" + }, +/turf/simulated/floor/engine/caution/northsouth, +/area/station/hallway/secondary/exit) "ecQ" = ( /obj/reagent_dispensers/watertank/fountain, /turf/simulated/floor/wood/two, @@ -9110,6 +9321,18 @@ dir = 6 }, /area/station/hallway/secondary/exit) +"ehU" = ( +/obj/machinery/light{ + dir = 8; + layer = 9.1; + pixel_x = -10 + }, +/obj/machinery/light/emergency, +/obj/machinery/chem_master{ + dir = 4 + }, +/turf/simulated/floor/engine/caution/east, +/area/station/crew_quarters/cafeteria) "eio" = ( /obj/decal/cleanable/dirt, /turf/space/fluid/acid/clear, @@ -9272,6 +9495,37 @@ /obj/machinery/light/runway_light/delay3, /turf/space/fluid/acid/clear, /area/space) +"emf" = ( +/obj/table/reinforced/auto, +/obj/item/kitchen/utensil/fork{ + dir = 4; + pixel_y = 10; + pixel_x = -2 + }, +/obj/item/kitchen/utensil/spoon{ + dir = 4; + pixel_y = -6; + pixel_x = -2 + }, +/obj/item/plate{ + pixel_y = 5; + pixel_x = -2; + grabs_food_on_spawn = 0 + }, +/obj/item/reagent_containers/food/drinks/drinkingglass/icewater{ + pixel_x = 11; + pixel_y = 4 + }, +/obj/item/shaker/ketchup{ + pixel_y = -7; + pixel_x = 3 + }, +/obj/item/shaker/mustard{ + pixel_y = -7; + pixel_x = -2 + }, +/turf/simulated/floor/wood, +/area/station/crew_quarters/cafeteria) "eml" = ( /obj/machinery/power/catalytic_generator, /obj/cable/yellow{ @@ -9498,7 +9752,7 @@ }) "ers" = ( /obj/table/reinforced/auto, -/obj/submachine/mixer{ +/obj/machinery/mixer{ pixel_y = 4 }, /turf/simulated/floor/black, @@ -9551,6 +9805,16 @@ /obj/disposalpipe/segment/horizontal, /turf/simulated/floor/white, /area/station/medical/medbay) +"esW" = ( +/obj/machinery/shower{ + dir = 1; + pixel_y = 20 + }, +/obj/stool/bench/purple/auto, +/turf/simulated/floor/sanitary/white, +/area/station/science/lobby{ + name = "Science Lounge" + }) "etS" = ( /obj/cable{ icon_state = "0-4" @@ -9630,6 +9894,14 @@ }, /turf/simulated/floor/sanitary, /area/station/crew_quarters/showers) +"euK" = ( +/obj/cable/orange{ + icon_state = "1-10" + }, +/turf/simulated/floor/industrial, +/area/station/maintenance/outer/se{ + name = "Southeast Breach Hull" + }) "euV" = ( /obj/cable{ icon_state = "0-4" @@ -9650,16 +9922,6 @@ /obj/submachine/slot_machine, /turf/simulated/floor/black/grime, /area/station/security/brig/genpop) -"evN" = ( -/obj/table/reinforced/auto, -/obj/item/shaker/ketchup{ - pixel_x = 6 - }, -/obj/item/shaker/mustard{ - pixel_x = -6 - }, -/turf/simulated/floor/wood, -/area/station/crew_quarters/cafeteria) "evR" = ( /obj/cable{ icon_state = "1-2" @@ -9789,6 +10051,18 @@ /obj/blind_switch/area/west, /turf/simulated/floor/black, /area/station/security/hos) +"eze" = ( +/obj/machinery/light/small{ + dir = 4; + pixel_x = 12 + }, +/obj/table/auto, +/obj/item/storage/box/glassbox{ + pixel_y = 9; + pixel_x = 2 + }, +/turf/simulated/floor/grey/blackgrime, +/area/station/crew_quarters/catering) "ezi" = ( /obj/disposalpipe/segment/mail/vertical, /turf/simulated/floor/black, @@ -10013,6 +10287,9 @@ /obj/cable{ icon_state = "5-10" }, +/obj/cable{ + icon_state = "9-10" + }, /turf/simulated/floor/engine/caution/corner2{ dir = 9 }, @@ -10028,6 +10305,18 @@ /obj/landmark/gps_waypoint, /turf/simulated/floor/carpet/purple/fancy/innercorner/omni, /area/station/science/research_director) +"eFo" = ( +/obj/machinery/door/airlock/pyro/external{ + dir = 4 + }, +/obj/mapping_helper/airlock/cycler{ + cycle_id = "sw_breach"; + name = "South West Breach Hull" + }, +/turf/simulated/floor/industrial, +/area/station/maintenance/outer/sw{ + name = "Southwest Breach Hull" + }) "eFA" = ( /obj/cable{ icon_state = "1-4" @@ -10625,11 +10914,17 @@ /turf/simulated/floor/grey, /area/station/hallway/primary/northeast) "eRb" = ( -/obj/landmark/random_room/size5x3, -/turf/simulated/floor/plating, -/area/station/maintenance/outer/se{ - name = "Southeast Breach Hull" - }) +/obj/machinery/computer/power_monitor/smes{ + dir = 4; + name = "Engine Output Monitoring" + }, +/obj/cable/orange{ + icon_state = "0-5" + }, +/turf/simulated/floor/yellowblack{ + dir = 10 + }, +/area/station/engine/ptl) "eRl" = ( /obj/disposalpipe/segment/mail/vertical, /obj/machinery/light/incandescent/netural{ @@ -10790,6 +11085,20 @@ /area/station/hallway/secondary/entry{ name = "Arrival Shuttle Hallway" }) +"eTX" = ( +/obj/machinery/door/poddoor/blast/pyro{ + density = 0; + dir = 4; + icon_state = "bdoormid0"; + id = "nadir_nukecore"; + name = "Reactor Core Shielding"; + opacity = 0 + }, +/obj/cable{ + icon_state = "4-8" + }, +/turf/simulated/floor/engine, +/area/station/engine/core/nuclear) "eUd" = ( /obj/table/reinforced/auto, /obj/item/device/analyzer/healthanalyzer{ @@ -10864,6 +11173,22 @@ "eVi" = ( /turf/simulated/floor/black, /area/station/crew_quarters/quarters_east) +"eVm" = ( +/obj/machinery/secscanner{ + pixel_y = 10 + }, +/obj/disposalpipe/segment/mail/vertical, +/obj/machinery/door/airlock/pyro/security/alt, +/obj/mapping_helper/access/security, +/obj/mapping_helper/firedoor_spawn, +/obj/forcefield/energyshield/perma/doorlink, +/obj/mapping_helper/airlock/cycler{ + cycle_id = "sec"; + name = "Security"; + enter_id = "outer" + }, +/turf/simulated/floor/black, +/area/station/security/main) "eVr" = ( /obj/cable{ icon_state = "1-2" @@ -11076,6 +11401,16 @@ }, /turf/simulated/floor/purpleblack, /area/pasiphae/survey) +"fac" = ( +/obj/disposalpipe/segment/transport, +/obj/cable{ + icon_state = "2-4" + }, +/obj/cable{ + icon_state = "1-4" + }, +/turf/simulated/floor/black, +/area/station/hallway/secondary/east) "fag" = ( /obj/machinery/navbeacon/mule/toolstorage_north, /obj/decal/stripe_caution, @@ -11127,6 +11462,9 @@ dir = 8 }, /area/station/medical/medbay/lobby) +"fbQ" = ( +/turf/simulated/floor/engine, +/area/station/engine/ptl) "fbR" = ( /obj/cable{ icon_state = "1-2" @@ -11249,6 +11587,18 @@ /obj/landmark/halloween, /turf/simulated/floor/black, /area/station/hallway/primary/northeast) +"fgI" = ( +/obj/machinery/door/airlock/pyro/engineering/alt, +/obj/mapping_helper/access/engineering_mechanic, +/obj/mapping_helper/access/engineering, +/obj/disposalpipe/segment/mail/vertical, +/obj/forcefield/energyshield/perma/doorlink, +/obj/mapping_helper/firedoor_spawn, +/obj/cable/orange{ + icon_state = "1-2" + }, +/turf/simulated/floor/yellow, +/area/station/engine/ptl) "fhi" = ( /obj/grille/catwalk, /obj/cable{ @@ -11267,14 +11617,6 @@ }, /area/listeningpost) "fhp" = ( -/obj/rack, -/obj/item/circuitboard/teleporter, -/obj/item/circuitboard/card, -/obj/item/circuitboard/robot_module_rewriter, -/obj/item/circuitboard/cloning, -/obj/item/circuitboard/barcode_qm, -/obj/item/circuitboard/barcode, -/obj/item/circuitboard/qmsupply, /obj/machinery/light/small{ dir = 4; pixel_x = 12 @@ -11283,30 +11625,27 @@ icon_state = "0-8" }, /obj/machinery/power/apc/autoname_north, -/obj/item/circuitboard/transception, +/obj/rack/organized/techstorage_eng/transception, /turf/simulated/floor/grey/blackgrime/other, /area/station/storage/tech) +"fhD" = ( +/obj/machinery/power/apc/autoname_west, +/obj/cable, +/obj/machinery/light{ + dir = 1; + layer = 9.1; + pixel_y = 21 + }, +/turf/simulated/floor/yellowblack{ + dir = 9 + }, +/area/station/engine/ptl) "fip" = ( /obj/machinery/light/small/floor/netural, /turf/simulated/floor/black, /area/station/science/lobby{ name = "Science Lounge" }) -"fir" = ( -/obj/table/auto, -/obj/item/paper_bin{ - pixel_y = 7 - }, -/obj/item/pen, -/obj/item/storage/box/fruit_wedges, -/obj/item/storage/box/cocktail_umbrellas, -/obj/item/storage/box/cocktail_doodads, -/obj/machinery/power/apc/autoname_east, -/obj/cable{ - icon_state = "0-8" - }, -/turf/simulated/floor/carpet/grime, -/area/station/crew_quarters/baroffice) "fix" = ( /obj/stool/chair/office/green{ dir = 8 @@ -11396,6 +11735,17 @@ /obj/mapping_helper/firedoor_spawn, /turf/simulated/floor/black, /area/station/medical/medbay/surgery) +"fkY" = ( +/obj/cable/orange{ + icon_state = "1-2" + }, +/obj/cable/yellow{ + icon_state = "2-9" + }, +/turf/simulated/floor/industrial, +/area/station/maintenance/outer/se{ + name = "Southeast Breach Hull" + }) "fkZ" = ( /obj/disposalpipe/segment/vertical, /obj/cable{ @@ -11567,6 +11917,23 @@ /area/station/bridge/customs{ name = "Bridge Reception" }) +"fpe" = ( +/obj/machinery/light/small{ + dir = 8; + pixel_x = -12 + }, +/obj/rack, +/obj/item/reagent_containers/food/drinks/juicer{ + pixel_y = 5 + }, +/obj/item/storage/box/fruit_wedges{ + pixel_x = 6 + }, +/obj/item/storage/box/beer{ + pixel_x = -6 + }, +/turf/simulated/floor/grey/blackgrime, +/area/station/crew_quarters/catering) "fpk" = ( /obj/mapping_helper/wingrille_spawn/auto/reinforced, /obj/cable{ @@ -11802,6 +12169,14 @@ dir = 6 }, /area/station/hallway/secondary/exit) +"ftE" = ( +/obj/cable{ + icon_state = "1-4" + }, +/turf/simulated/floor/industrial, +/area/station/maintenance/outer/se{ + name = "Southeast Breach Hull" + }) "ftF" = ( /obj/machinery/camera{ c_tag = "autotag"; @@ -12498,6 +12873,19 @@ }, /turf/simulated/floor/redblack, /area/station/security/main) +"fFH" = ( +/obj/machinery/door/airlock/pyro/command/alt, +/obj/cable{ + icon_state = "1-2" + }, +/obj/mapping_helper/access/ai_upload, +/obj/mapping_helper/airlock/cycler{ + cycle_id = "aiupload"; + name = "AI Upload"; + enter_id = "inner" + }, +/turf/simulated/floor/engine, +/area/station/turret_protected/ai_upload) "fFJ" = ( /obj/cable{ icon_state = "1-8" @@ -12741,6 +13129,20 @@ /obj/mapping_helper/firedoor_spawn, /turf/simulated/floor/black, /area/station/crew_quarters/baroffice) +"fMr" = ( +/obj/machinery/camera{ + c_tag = "autotag"; + dir = 5; + name = "autoname - SS13"; + pixel_x = -10; + tag = "" + }, +/obj/machinery/light_switch/west, +/obj/table/reinforced/chemistry/auto{ + name = "prep counter" + }, +/turf/simulated/floor/engine, +/area/station/crew_quarters/cafeteria) "fMs" = ( /obj/table/reinforced/auto, /obj/item/storage/firstaid/brain, @@ -12788,18 +13190,6 @@ "fNc" = ( /turf/simulated/wall/auto/reinforced/supernorn, /area/shuttle/sea_elevator_room) -"fNd" = ( -/obj/stool/chair{ - dir = 4 - }, -/obj/landmark/start/job/scientist, -/obj/cable{ - icon_state = "4-8" - }, -/turf/simulated/floor/yellowblack{ - dir = 1 - }, -/area/station/science/hall) "fNn" = ( /obj/cable{ icon_state = "1-2" @@ -12886,11 +13276,13 @@ /turf/simulated/floor/black, /area/station/hallway/primary/southwest) "fNZ" = ( -/obj/cable{ - icon_state = "2-8" +/obj/cable/yellow{ + icon_state = "5-8" }, -/turf/simulated/floor/black, -/area/station/engine/elect) +/turf/simulated/floor/industrial, +/area/station/maintenance/outer/se{ + name = "Southeast Breach Hull" + }) "fPl" = ( /obj/machinery/light/small{ dir = 1; @@ -13021,18 +13413,6 @@ }, /turf/unsimulated/floor/sanitary, /area/station/crewquarters/cryotron) -"fRH" = ( -/obj/stool/chair/office{ - dir = 8 - }, -/obj/cable{ - icon_state = "1-8" - }, -/obj/cable{ - icon_state = "1-2" - }, -/turf/simulated/floor/black, -/area/station/science/artifact) "fRN" = ( /obj/machinery/camera{ c_tag = "autotag"; @@ -13091,6 +13471,29 @@ /obj/pool_springboard, /turf/simulated/floor/white/checker, /area/station/crew_quarters/pool) +"fSV" = ( +/obj/machinery/door/airlock/pyro/external{ + dir = 4 + }, +/obj/cable/yellow{ + icon_state = "4-8" + }, +/obj/cable/yellow{ + icon_state = "4-8" + }, +/turf/simulated/floor/industrial, +/area/station/maintenance/outer/se{ + name = "Southeast Breach Hull" + }) +"fTc" = ( +/obj/random_item_spawner/junk/one_or_zero, +/obj/cable/orange{ + icon_state = "6-8" + }, +/turf/simulated/floor/plating, +/area/station/hallway/secondary/construction{ + name = "The Warrens" + }) "fTk" = ( /obj/cable{ icon_state = "2-5" @@ -13155,16 +13558,10 @@ name = "Science Lounge" }) "fTY" = ( -/obj/disposalpipe/segment/transport{ +/turf/simulated/floor/engine/caution/corner{ dir = 4 }, -/obj/cable{ - icon_state = "4-8" - }, -/turf/simulated/floor/industrial, -/area/station/maintenance/outer/se{ - name = "Southeast Breach Hull" - }) +/area/station/engine/ptl) "fTZ" = ( /obj/disposalpipe/segment/bent/north, /obj/table/auto, @@ -13252,6 +13649,9 @@ /area/station/engine/substation/north{ name = "North Catalytic Substation" }) +"fXq" = ( +/turf/simulated/floor/engine/caution/west, +/area/station/engine/ptl) "fXu" = ( /obj/machinery/guardbot_dock, /obj/machinery/power/data_terminal, @@ -13353,27 +13753,6 @@ dir = 1 }, /area/station/security/equipment) -"fZM" = ( -/obj/table/auto, -/obj/item/storage/box/glassbox, -/obj/item/reagent_containers/food/drinks/drinkingglass/shot, -/obj/item/reagent_containers/food/drinks/drinkingglass/shot, -/obj/item/reagent_containers/food/drinks/drinkingglass/shot, -/obj/item/reagent_containers/food/drinks/drinkingglass/shot, -/obj/item/reagent_containers/food/drinks/drinkingglass/wine, -/obj/item/reagent_containers/food/drinks/drinkingglass/wine, -/obj/item/reagent_containers/food/drinks/drinkingglass/wine, -/obj/item/reagent_containers/food/drinks/drinkingglass/wine, -/obj/item/reagent_containers/food/drinks/drinkingglass/cocktail, -/obj/item/reagent_containers/food/drinks/drinkingglass/cocktail, -/obj/item/reagent_containers/food/drinks/drinkingglass/cocktail, -/obj/item/reagent_containers/food/drinks/drinkingglass/cocktail, -/obj/item/gun/russianrevolver, -/obj/machinery/phone/wall{ - pixel_y = 32 - }, -/turf/simulated/floor/carpet/grime, -/area/station/crew_quarters/baroffice) "fZP" = ( /obj/reagent_dispensers/still, /turf/simulated/floor/black/grime, @@ -13772,6 +14151,9 @@ /obj/cable/yellow{ icon_state = "1-6" }, +/obj/cable/yellow{ + icon_state = "4-8" + }, /turf/simulated/floor/plating, /area/station/engine/substation/pylon{ name = "South Catalytic Substation" @@ -14191,6 +14573,13 @@ dir = 4 }, /area/station/security/equipment) +"grf" = ( +/obj/landmark/start/job/scientist, +/obj/stool/chair/purple{ + dir = 4 + }, +/turf/simulated/floor/black, +/area/station/science/hall) "grh" = ( /obj/table/reinforced/bar/auto{ name = "wooden table" @@ -15176,6 +15565,24 @@ /obj/stool/bench/blue/auto, /turf/simulated/floor/sanitary, /area/station/crew_quarters/showers) +"gKi" = ( +/obj/decal/tile_edge/line/black{ + dir = 1; + icon_state = "line1" + }, +/obj/storage/crate{ + name = "chair crate" + }, +/obj/item/chair/folded, +/obj/item/chair/folded, +/obj/item/chair/folded, +/obj/item/chair/folded, +/obj/item/chair/folded, +/obj/item/chair/folded, +/obj/item/chair/folded, +/obj/item/chair/folded, +/turf/simulated/floor/black, +/area/station/crew_quarters/cafeteria) "gKn" = ( /obj/stool/chair/couch{ dir = 8 @@ -15968,6 +16375,9 @@ /area/station/hallway/secondary/entry{ name = "Arrival Shuttle Hallway" }) +"ham" = ( +/turf/simulated/floor/engine/caution/east, +/area/station/engine/ptl) "has" = ( /obj/cable{ icon_state = "2-8" @@ -16031,6 +16441,15 @@ }, /turf/simulated/floor/engine, /area/station/communications/centre) +"hbd" = ( +/obj/disposalpipe/segment/vertical, +/obj/cable{ + icon_state = "4-8" + }, +/turf/simulated/floor/yellowblack{ + dir = 4 + }, +/area/station/hallway/secondary/east) "hbK" = ( /obj/machinery/light, /obj/cable{ @@ -16327,6 +16746,9 @@ /obj/cable/orange{ icon_state = "1-4" }, +/obj/cable/orange{ + icon_state = "4-10" + }, /turf/simulated/floor/black, /area/station/engine/monitoring{ name = "Nuclear Control Room" @@ -16345,13 +16767,15 @@ "hix" = ( /obj/machinery/door/airlock/pyro/engineering/alt, /obj/mapping_helper/access/engineering_mechanic, -/obj/mapping_helper/access/engineering, /obj/cable{ icon_state = "1-2" }, /obj/forcefield/energyshield/perma/doorlink, /obj/disposalpipe/segment/transport, /obj/mapping_helper/firedoor_spawn, +/obj/cable/orange{ + icon_state = "1-2" + }, /turf/simulated/floor/yellowblack{ dir = 1 }, @@ -17700,10 +18124,16 @@ }, /obj/table/auto, /obj/item/storage/toolbox/mechanical{ - pixel_y = 7 + pixel_y = 7; + pixel_x = 6 }, /obj/item/aiModule/hologram_expansion/syndicate{ - pixel_y = -4 + pixel_y = -4; + pixel_x = 5 + }, +/obj/item/pinpointer/disk{ + pixel_y = 2; + pixel_x = -6 }, /turf/simulated/floor/engine/caution/north, /area/listeningpost/power) @@ -17791,16 +18221,6 @@ dir = 1 }, /area/station/engine/elect) -"hJQ" = ( -/obj/stool/bench/blue/auto, -/obj/machinery/shower{ - dir = 1; - pixel_y = 20 - }, -/turf/simulated/floor/sanitary/white, -/area/station/science/lobby{ - name = "Science Lounge" - }) "hJR" = ( /obj/cable{ icon_state = "4-8" @@ -17842,6 +18262,20 @@ /area/iss{ name = "Drop Capsule" }) +"hLA" = ( +/obj/storage/crate{ + name = "Cone Crate" + }, +/obj/item/reagent_containers/food/snacks/ice_cream_cone, +/obj/item/reagent_containers/food/snacks/ice_cream_cone, +/obj/item/reagent_containers/food/snacks/ice_cream_cone, +/obj/item/reagent_containers/food/snacks/ice_cream_cone, +/obj/item/reagent_containers/food/snacks/ice_cream_cone, +/obj/item/reagent_containers/food/snacks/ice_cream_cone, +/obj/item/reagent_containers/food/snacks/ice_cream_cone, +/obj/item/reagent_containers/food/snacks/condiment/chocchips, +/turf/simulated/floor/grey/blackgrime, +/area/station/crew_quarters/catering) "hLN" = ( /turf/unsimulated/wall/setpieces/leadwall/white_2{ dir = 10 @@ -17913,6 +18347,15 @@ /obj/machinery/firealarm/east, /turf/simulated/floor/black/grime, /area/station/security/brig/genpop) +"hMY" = ( +/obj/disposalpipe/segment/transport{ + dir = 4 + }, +/obj/cable{ + icon_state = "1-2" + }, +/turf/simulated/floor/plating, +/area/station/maintenance/southeast) "hNh" = ( /obj/mapping_helper/wingrille_spawn/auto/reinforced, /turf/simulated/floor/plating, @@ -18144,17 +18587,6 @@ }, /turf/simulated/floor/black, /area/station/medical/robotics) -"hRU" = ( -/obj/stool/chair/office{ - dir = 4 - }, -/obj/cable{ - icon_state = "4-8" - }, -/turf/simulated/floor/purpleblack{ - dir = 4 - }, -/area/station/science/chemistry) "hRZ" = ( /obj/cable{ icon_state = "1-2" @@ -18223,15 +18655,6 @@ dir = 6 }, /area/station/engine/core/nuclear) -"hTd" = ( -/obj/machinery/door/airlock/pyro/command/alt, -/obj/cable{ - icon_state = "1-2" - }, -/obj/mapping_helper/access/ai_upload, -/obj/forcefield/energyshield/perma/doorlink, -/turf/simulated/floor/engine/caution/south, -/area/station/turret_protected/ai_upload) "hTu" = ( /obj/machinery/disposal/brig, /obj/disposalpipe/trunk/brig{ @@ -18824,18 +19247,6 @@ /area/station/science/construction{ name = "Extraction Nexus" }) -"ieu" = ( -/obj/machinery/door/airlock/pyro/engineering/alt, -/obj/mapping_helper/access/engineering_engine, -/obj/forcefield/energyshield/perma/doorlink, -/obj/cable{ - icon_state = "1-2" - }, -/obj/mapping_helper/firedoor_spawn, -/turf/simulated/floor/engine, -/area/station/engine/monitoring{ - name = "Nuclear Control Room" - }) "ieD" = ( /obj/storage/closet/medicalclothes, /obj/machinery/firealarm{ @@ -19120,6 +19531,23 @@ }, /turf/simulated/floor/purpleblack, /area/station/teleporter) +"ikw" = ( +/obj/machinery/door/airlock/pyro/engineering/alt, +/obj/mapping_helper/access/engineering_engine, +/obj/forcefield/energyshield/perma/doorlink, +/obj/mapping_helper/firedoor_spawn, +/obj/cable/orange{ + icon_state = "1-2" + }, +/obj/mapping_helper/airlock/cycler{ + cycle_id = "reactormain"; + name = "Reactor Main"; + enter_id = "outer" + }, +/turf/simulated/floor/yellow, +/area/station/engine/monitoring{ + name = "Nuclear Control Room" + }) "iky" = ( /obj/machinery/recharge_station, /turf/simulated/floor/plating, @@ -19131,6 +19559,26 @@ /obj/machinery/meter, /turf/simulated/floor/engine/caution/east, /area/station/engine/core/nuclear) +"ikQ" = ( +/obj/machinery/door/airlock/pyro/security/alt, +/obj/mapping_helper/access/brig, +/obj/disposalpipe/segment/brig{ + dir = 1 + }, +/obj/cable{ + icon_state = "1-2" + }, +/obj/mapping_helper/firedoor_spawn, +/obj/forcefield/energyshield/perma/doorlink, +/obj/mapping_helper/airlock/cycler{ + cycle_id = "secinterro2"; + name = "Security Interrogation 2"; + enter_id = "outer" + }, +/turf/simulated/floor/redblack{ + dir = 1 + }, +/area/station/security/interrogation) "ili" = ( /obj/machinery/disposal, /obj/disposalpipe/trunk/south, @@ -19523,6 +19971,32 @@ /area/station/maintenance/outer/sw{ name = "Southwest Breach Hull" }) +"itD" = ( +/obj/item/storage/firstaid/toxin, +/obj/item/device/reagentscanner{ + pixel_y = -2; + pixel_x = 8 + }, +/obj/item/reagent_containers/dropper/mechanical{ + pixel_y = 7; + pixel_x = -10 + }, +/obj/item/clothing/glasses/spectro{ + pixel_y = 11; + pixel_x = 1 + }, +/obj/machinery/door_control{ + id = "nadir_barchem"; + name = "Bar Chem-Safety Shutters"; + pixel_x = -24 + }, +/obj/table/reinforced/chemistry/auto{ + name = "prep counter" + }, +/turf/simulated/floor/engine/caution/corner{ + dir = 1 + }, +/area/station/crew_quarters/baroffice) "itK" = ( /turf/simulated/floor/grey/side{ dir = 8 @@ -20016,6 +20490,14 @@ /area/station/maintenance/outer/nw{ name = "Northwest Breach Hull" }) +"iDK" = ( +/obj/cable/orange{ + icon_state = "6-9" + }, +/turf/simulated/floor/industrial, +/area/station/hallway/secondary/construction{ + name = "The Warrens" + }) "iDO" = ( /obj/disposalpipe/segment/brig{ dir = 8 @@ -20185,6 +20667,10 @@ dir = 8 }, /obj/mapping_helper/access/maint, +/obj/mapping_helper/airlock/cycler{ + cycle_id = "ne_breach"; + name = "North East Breach Hull" + }, /turf/simulated/floor/industrial, /area/station/maintenance/outer/ne{ name = "Northeast Breach Hull" @@ -20595,22 +21081,6 @@ }, /turf/simulated/floor/black, /area/station/security/brig) -"iUn" = ( -/obj/machinery/chem_master{ - dir = 4 - }, -/obj/machinery/light_switch/west, -/obj/machinery/camera{ - c_tag = "autotag"; - dir = 5; - name = "autoname - SS13"; - pixel_x = -10; - tag = "" - }, -/turf/simulated/floor/engine/caution/corner{ - dir = 4 - }, -/area/station/crew_quarters/cafeteria) "iUo" = ( /obj/machinery/camera{ c_tag = "autotag"; @@ -20689,6 +21159,23 @@ dir = 4 }, /area/station/hallway/secondary/east) +"iVM" = ( +/obj/machinery/shower{ + dir = 4; + pixel_x = 8; + pixel_y = 8 + }, +/obj/machinery/drainage, +/obj/machinery/firealarm{ + dir = 4; + pixel_x = 24; + pixel_y = -3 + }, +/obj/stool/bench/purple/auto, +/turf/simulated/floor/purpleblack{ + dir = 4 + }, +/area/station/science/chemistry) "iWu" = ( /obj/stool/chair/yellow{ dir = 4 @@ -20781,15 +21268,8 @@ /turf/simulated/wall/auto/supernorn, /area/station/crew_quarters/sauna) "iXQ" = ( -/obj/machinery/door/airlock/pyro/maintenance/alt{ - name = "Auxiliary Compartment" - }, -/obj/mapping_helper/access/maint, -/obj/forcefield/energyshield/perma/doorlink, -/turf/simulated/floor/industrial, -/area/station/maintenance/outer/se{ - name = "Southeast Breach Hull" - }) +/turf/simulated/wall/auto/reinforced/supernorn, +/area/station/engine/ptl) "iXS" = ( /obj/disposalpipe/junction/left/north{ name = "factory pipe" @@ -20804,7 +21284,7 @@ /area/station/crew_quarters/quarters_east) "iYa" = ( /obj/storage/closet/fire, -/obj/item/clothing/suit/fire, +/obj/item/clothing/suit/hazard/fire, /turf/simulated/floor/industrial, /area/iss{ name = "Drop Capsule" @@ -21232,14 +21712,7 @@ }, /area/station/security/main) "jfZ" = ( -/obj/rack, -/obj/item/circuitboard/powermonitor, -/obj/item/circuitboard/powermonitor_smes, -/obj/item/circuitboard/genetics, -/obj/item/circuitboard/bank_data, -/obj/item/circuitboard/arcade, -/obj/item/circuitboard/qmorder, -/obj/item/circuitboard/telescope, +/obj/rack/organized/techstorage_med, /turf/simulated/floor/grey/blackgrime/other, /area/station/storage/tech) "jge" = ( @@ -21546,6 +22019,16 @@ dir = 4 }, /area/station/hallway/secondary/west) +"jpM" = ( +/obj/machinery/light/small, +/obj/stool/bed, +/obj/item/clothing/suit/bedsheet{ + bcolor = "black"; + icon_state = "bedsheet-black" + }, +/obj/landmark/start/job/bartender, +/turf/simulated/floor/carpet/grime, +/area/station/crew_quarters/baroffice) "jpQ" = ( /obj/table/reinforced/auto, /obj/machinery/computer/security/wooden_tv/small, @@ -21575,6 +22058,14 @@ /obj/forcefield/energyshield/perma/doorlink, /turf/simulated/floor/grey, /area/station/crewquarters/cryotron) +"jqr" = ( +/obj/cable/orange{ + icon_state = "4-9" + }, +/turf/simulated/floor/plating, +/area/station/hallway/secondary/construction{ + name = "The Warrens" + }) "jqC" = ( /obj/machinery/power/smes, /obj/cable{ @@ -21921,12 +22412,6 @@ /area/station/security/checkpoint/sec_foyer{ name = "Secure Release Foyer" }) -"jwF" = ( -/obj/stool/chair{ - dir = 1 - }, -/turf/simulated/floor/wood, -/area/station/crew_quarters/cafeteria) "jwP" = ( /obj/machinery/light/small{ dir = 1; @@ -22015,18 +22500,6 @@ }, /turf/simulated/floor/black, /area/station/hallway/primary/southwest) -"jyj" = ( -/obj/machinery/door/airlock/pyro/engineering/alt, -/obj/mapping_helper/access/engineering_engine, -/obj/forcefield/energyshield/perma/doorlink, -/obj/cable{ - icon_state = "1-2" - }, -/obj/mapping_helper/firedoor_spawn, -/turf/simulated/floor/yellow, -/area/station/engine/monitoring{ - name = "Nuclear Control Room" - }) "jyz" = ( /turf/simulated/floor/stairs/dark{ dir = 8 @@ -22445,6 +22918,15 @@ dir = 8 }, /area/station/storage/emergency2) +"jIK" = ( +/obj/mapping_helper/wingrille_spawn/auto/reinforced, +/obj/cable{ + icon_state = "1-2" + }, +/turf/simulated/floor/plating, +/area/station/hallway/secondary/construction{ + name = "The Warrens" + }) "jJa" = ( /obj/mapping_helper/wingrille_spawn/auto/reinforced, /obj/window_blinds/cog2/middle, @@ -22549,6 +23031,14 @@ /obj/window_blinds/cog2/left, /turf/simulated/floor/plating, /area/station/medical/medbay/surgery) +"jMd" = ( +/obj/machinery/firealarm/west, +/obj/machinery/chem_dispenser/alcohol/bar, +/obj/item/reagent_containers/food/drinks/drinkingglass/pitcher, +/turf/simulated/floor/engine/caution/corner{ + dir = 4 + }, +/area/station/crew_quarters/cafeteria) "jMi" = ( /obj/cable{ icon_state = "2-8" @@ -22686,16 +23176,6 @@ dir = 1 }, /area/station/hallway/primary/northwest) -"jOS" = ( -/obj/rack, -/obj/item/reagent_containers/food/drinks/juicer, -/obj/machinery/light/small{ - dir = 4; - pixel_x = 12 - }, -/obj/item/swingsignfolded, -/turf/simulated/floor/grey/blackgrime, -/area/station/crew_quarters/catering) "jOT" = ( /obj/machinery/light_switch/west, /obj/decal/tile_edge/line/red{ @@ -23172,6 +23652,12 @@ }, /turf/simulated/floor/plating, /area/station/maintenance/west) +"jWX" = ( +/obj/cable{ + icon_state = "1-2" + }, +/turf/simulated/floor/black, +/area/station/engine/engineering) "jXe" = ( /obj/machinery/portable_reclaimer, /obj/machinery/power/apc/autoname_north, @@ -23530,6 +24016,17 @@ /obj/random_item_spawner/tools/one_or_zero, /turf/simulated/floor/plating, /area/station/maintenance/disposal) +"keJ" = ( +/obj/machinery/camera{ + c_tag = "autotag"; + dir = 4; + name = "autoname - SS13"; + pixel_x = -10; + tag = "" + }, +/obj/machinery/drainage, +/turf/simulated/floor/specialroom/freezer, +/area/station/crew_quarters/catering) "keZ" = ( /obj/cable{ icon_state = "1-2" @@ -23624,20 +24121,17 @@ }, /turf/simulated/floor/black, /area/station/engine/engineering/ce) -"kgy" = ( -/obj/storage/crate, -/obj/item/reagent_containers/food/snacks/ingredient/oatmeal, -/obj/item/reagent_containers/food/snacks/ingredient/pancake_batter, -/obj/item/reagent_containers/food/snacks/ingredient/sugar, -/obj/item/reagent_containers/food/snacks/ingredient/flour, -/obj/item/reagent_containers/food/snacks/ingredient/flour, -/turf/simulated/floor/grey/blackgrime, -/area/station/crew_quarters/catering) "kgH" = ( /obj/machinery/light/small/floor/netural, /obj/disposalpipe/segment/horizontal, /turf/simulated/floor/sanitary/white, /area/station/medical/morgue) +"kgO" = ( +/obj/submachine/chem_extractor{ + dir = 4 + }, +/turf/simulated/floor/grey/blackgrime, +/area/station/crew_quarters/catering) "khh" = ( /obj/machinery/atmospherics/pipe/manifold{ dir = 4; @@ -23917,11 +24411,11 @@ /turf/simulated/floor/grass/leafy, /area/station/garden/owlery) "kmb" = ( -/obj/cable{ - icon_state = "1-8" - }, /obj/disposalpipe/segment/transport, /obj/disposalpipe/segment/horizontal, +/obj/cable/orange{ + icon_state = "1-6" + }, /turf/simulated/floor/plating, /area/station/maintenance/southeast) "kmj" = ( @@ -24079,11 +24573,18 @@ dir = 8 }, /obj/mapping_helper/access/maint, +/obj/mapping_helper/airlock/cycler{ + cycle_id = "sw_breach"; + name = "South West Breach Hull" + }, /turf/simulated/floor/industrial, /area/station/maintenance/outer/sw{ name = "Southwest Breach Hull" }) "kpw" = ( +/obj/cable/orange{ + icon_state = "2-9" + }, /turf/simulated/floor/black, /area/station/engine/engineering) "kpS" = ( @@ -24315,11 +24816,6 @@ /obj/disposalpipe/segment/bent/north, /turf/simulated/floor/sanitary, /area/station/medical/crematorium) -"ksj" = ( -/obj/storage/closet/wardrobe/black/formalwear, -/obj/machinery/light/small, -/turf/simulated/floor/carpet/grime, -/area/station/crew_quarters/baroffice) "ksw" = ( /obj/table/reinforced/auto, /obj/drink_rack/mug{ @@ -24396,6 +24892,9 @@ /area/station/hallway/primary/southwest) "ktz" = ( /obj/disposalpipe/segment/mail/horizontal, +/obj/cable{ + icon_state = "2-4" + }, /turf/simulated/floor/black, /area/station/engine/elect) "ktB" = ( @@ -24451,6 +24950,20 @@ /area/station/hallway/secondary/construction{ name = "The Warrens" }) +"ktR" = ( +/obj/machinery/door/airlock/pyro/engineering/alt, +/obj/mapping_helper/access/engineering_engine, +/obj/forcefield/energyshield/perma/doorlink, +/obj/mapping_helper/firedoor_spawn, +/obj/mapping_helper/airlock/cycler{ + cycle_id = "reactormain"; + name = "Reactor Main"; + enter_id = "inner2" + }, +/turf/simulated/floor/engine, +/area/station/engine/monitoring{ + name = "Nuclear Control Room" + }) "ktZ" = ( /turf/simulated/wall/auto/supernorn, /area/station/chapel/sanctuary) @@ -24719,24 +25232,6 @@ dir = 8 }, /area/station/hydroponics/bay) -"kAM" = ( -/obj/machinery/door/poddoor/blast/pyro{ - density = 0; - dir = 4; - icon_state = "bdoormid0"; - id = "nadir_nukecore"; - name = "Reactor Core Shielding"; - opacity = 0 - }, -/obj/machinery/door/airlock/pyro/glass/engineering{ - dir = 4; - name = "Secondary Core Access" - }, -/obj/mapping_helper/access/engineering_engine, -/obj/forcefield/energyshield/perma/doorlink, -/obj/mapping_helper/firedoor_spawn, -/turf/simulated/floor/engine, -/area/station/engine/core/nuclear) "kAS" = ( /obj/cable{ icon_state = "4-8" @@ -25041,6 +25536,20 @@ }, /turf/simulated/floor/redblack, /area/station/security/brig) +"kGx" = ( +/obj/machinery/door/airlock/pyro/command/alt, +/obj/cable{ + icon_state = "1-2" + }, +/obj/mapping_helper/access/ai_upload, +/obj/forcefield/energyshield/perma/doorlink, +/obj/mapping_helper/airlock/cycler{ + cycle_id = "aiupload"; + name = "AI Upload"; + enter_id = "outer" + }, +/turf/simulated/floor/engine/caution/south, +/area/station/turret_protected/ai_upload) "kGA" = ( /obj/stool/chair{ dir = 8 @@ -25395,6 +25904,17 @@ icon_state = "crewquarters"; name = "Warrens Hall" }) +"kPo" = ( +/obj/cable{ + icon_state = "2-8" + }, +/obj/cable/yellow{ + icon_state = "6-10" + }, +/turf/simulated/floor/industrial, +/area/station/maintenance/outer/se{ + name = "Southeast Breach Hull" + }) "kPR" = ( /obj/table/wood/round/auto, /obj/item/device/light/candle{ @@ -25524,6 +26044,14 @@ }, /turf/simulated/floor/yellowblack, /area/station/engine/engineering) +"kRD" = ( +/obj/cable{ + icon_state = "1-2" + }, +/turf/simulated/floor/industrial, +/area/station/maintenance/outer/se{ + name = "Southeast Breach Hull" + }) "kRG" = ( /obj/mapping_helper/wingrille_spawn/auto/reinforced, /obj/cable{ @@ -25551,6 +26079,37 @@ /area/station/crew_quarters/clown{ name = "Honkington's Abode" }) +"kSy" = ( +/obj/table/reinforced/auto, +/obj/item/kitchen/utensil/spoon{ + dir = 8; + pixel_y = 11; + pixel_x = 2 + }, +/obj/item/plate{ + pixel_y = 5; + pixel_x = 3; + grabs_food_on_spawn = 0 + }, +/obj/item/kitchen/utensil/fork{ + dir = 8; + pixel_y = -4; + pixel_x = 2 + }, +/obj/item/reagent_containers/food/drinks/drinkingglass/icewater{ + pixel_x = -11; + pixel_y = 11 + }, +/obj/item/shaker/salt{ + pixel_x = -3; + pixel_y = -10 + }, +/obj/item/shaker/pepper{ + pixel_x = 2; + pixel_y = -10 + }, +/turf/simulated/floor/wood, +/area/station/crew_quarters/cafeteria) "kSK" = ( /obj/item/storage/toilet{ dir = 8 @@ -25649,16 +26208,6 @@ /obj/mapping_helper/wingrille_spawn/auto, /turf/simulated/floor/plating, /area/station/medical/medbay/lobby) -"kVe" = ( -/obj/table/reinforced/bar/auto, -/obj/item_dispenser/icedispenser{ - pixel_y = 11 - }, -/obj/drink_rack/cup{ - pixel_y = 32 - }, -/turf/simulated/floor/carpet/green/standard/narrow/northsouth, -/area/station/crew_quarters/cafeteria) "kVj" = ( /obj/cable{ icon_state = "1-4" @@ -26112,12 +26661,12 @@ /turf/unsimulated/wall/auto/reinforced/supernorn, /area/station/crewquarters/cryotron) "ldK" = ( -/obj/cable{ - icon_state = "1-2" - }, /obj/decal/tile_edge/stripe/extra_big{ dir = 1 }, +/obj/cable/orange{ + icon_state = "1-2" + }, /turf/simulated/floor/black, /area/station/hallway/primary/southeast) "lej" = ( @@ -26450,26 +26999,20 @@ icon_state = "2-8" }, /turf/simulated/floor/black/grime, +/area/station/hallway/secondary/construction{ + name = "The Warrens" + }) +"llJ" = ( +/obj/cable/orange{ + icon_state = "4-8" + }, +/turf/simulated/floor/plating, /area/station/hallway/secondary/construction{ name = "The Warrens" }) "llS" = ( /turf/simulated/floor/engine/glow, /area/station/ai_monitored/armory) -"llT" = ( -/obj/table/auto, -/obj/item/shaker/salt, -/obj/item/shaker/pepper{ - pixel_x = 3 - }, -/obj/item/shaker/mustard{ - pixel_x = -6 - }, -/obj/item/shaker/ketchup{ - pixel_x = 6 - }, -/turf/simulated/floor/grey/blackgrime, -/area/station/crew_quarters/catering) "llV" = ( /obj/table/reinforced/auto, /obj/item/storage/firstaid/toxin{ @@ -26783,6 +27326,10 @@ /obj/forcefield/energyshield/perma/doorlink, /obj/mapping_helper/access/research, /obj/mapping_helper/access/maint, +/obj/mapping_helper/airlock/cycler{ + cycle_id = "sw_breach2"; + name = "South West Breach Hull" + }, /turf/simulated/floor/industrial, /area/station/maintenance/outer/sw{ name = "Southwest Breach Hull" @@ -27100,6 +27647,16 @@ /obj/disposalpipe/segment/bent/east, /turf/simulated/floor/sanitary, /area/station/medical/crematorium) +"lAj" = ( +/obj/cable{ + icon_state = "1-8" + }, +/obj/disposalpipe/segment/horizontal, +/obj/cable{ + icon_state = "4-8" + }, +/turf/simulated/floor/plating, +/area/station/maintenance/southeast) "lAp" = ( /obj/cable{ icon_state = "1-2" @@ -27120,6 +27677,12 @@ }, /turf/simulated/floor/black, /area/station/security/brig/solitary) +"lAF" = ( +/obj/cable{ + icon_state = "1-8" + }, +/turf/simulated/floor/engine/caution/east, +/area/station/engine/core/nuclear) "lAH" = ( /obj/lattice{ dir = 8; @@ -27226,6 +27789,17 @@ "lDT" = ( /turf/simulated/floor/white, /area/station/medical/medbay/treatment) +"lDW" = ( +/obj/machinery/door/airlock/pyro/external{ + dir = 4 + }, +/obj/cable/yellow{ + icon_state = "5-10" + }, +/turf/simulated/floor/industrial, +/area/station/maintenance/outer/se{ + name = "Southeast Breach Hull" + }) "lDX" = ( /obj/shrub{ dir = 1 @@ -27541,10 +28115,10 @@ /area/station/bridge) "lIu" = ( /obj/machinery/door/airlock/pyro/classic, +/obj/forcefield/energyshield/perma/doorlink, /obj/cable{ icon_state = "1-2" }, -/obj/forcefield/energyshield/perma/doorlink, /turf/simulated/floor/black/grime, /area/station/hallway/secondary/construction{ name = "The Warrens" @@ -27716,13 +28290,6 @@ /area/station/quartermaster/cargobay{ name = "Cargo Primary Endpoint" }) -"lLZ" = ( -/obj/stool/chair{ - dir = 4 - }, -/obj/landmark/start/job/scientist, -/turf/simulated/floor/black, -/area/station/science/hall) "lMn" = ( /obj/decal/tile_edge/floorguide/engineering{ dir = 1 @@ -28016,6 +28583,17 @@ }, /turf/simulated/floor/black/grime, /area/station/maintenance/disposal) +"lRy" = ( +/obj/cable{ + icon_state = "4-8" + }, +/obj/stool/chair/office/purple{ + dir = 4 + }, +/turf/simulated/floor/purpleblack{ + dir = 4 + }, +/area/station/science/chemistry) "lRz" = ( /obj/disposalpipe/segment/bent/south, /turf/simulated/floor/redblack, @@ -28379,6 +28957,24 @@ }, /turf/simulated/floor/black, /area/station/security/brig) +"lZt" = ( +/obj/machinery/door/airlock/pyro/command/alt{ + dir = 4 + }, +/obj/cable{ + icon_state = "4-8" + }, +/obj/mapping_helper/access/ai_upload, +/obj/forcefield/energyshield/perma/doorlink{ + dir = 8 + }, +/obj/mapping_helper/airlock/cycler{ + cycle_id = "aicore"; + name = "AI Core"; + enter_id = "outer" + }, +/turf/simulated/floor/darkblue, +/area/station/turret_protected/ai) "lZv" = ( /obj/cable{ icon_state = "1-4" @@ -28884,6 +29480,9 @@ }) "mhP" = ( /obj/disposalpipe/segment/mail/vertical, +/obj/cable/orange{ + icon_state = "1-2" + }, /turf/simulated/floor/yellowblack{ dir = 1 }, @@ -29062,6 +29661,10 @@ /obj/submachine/tape_deck, /turf/simulated/floor/darkblue/checker/other, /area/station/crew_quarters/radio/lab) +"mmf" = ( +/obj/disposalpipe/segment/horizontal, +/turf/simulated/floor/plating, +/area/station/maintenance/southeast) "mmv" = ( /obj/disposalpipe/segment/mail/bent/east, /turf/simulated/floor/blue, @@ -29319,6 +29922,20 @@ /area/station/bridge/hos{ name = "Head of Personnel's Quarters" }) +"mrH" = ( +/obj/machinery/light_switch/west, +/obj/disposalpipe/segment/food{ + dir = 4 + }, +/obj/storage/crate, +/obj/item/reagent_containers/food/snacks/ingredient/flour, +/obj/item/reagent_containers/food/snacks/ingredient/flour, +/obj/item/reagent_containers/food/snacks/ingredient/sugar, +/obj/item/reagent_containers/food/snacks/ingredient/pancake_batter, +/obj/item/reagent_containers/food/snacks/ingredient/oatmeal, +/obj/item/storage/box/popsicle_sticks, +/turf/simulated/floor/grey/blackgrime, +/area/station/crew_quarters/catering) "mrO" = ( /obj/cable{ icon_state = "1-2" @@ -29665,6 +30282,12 @@ }, /turf/simulated/floor/grass/leafy, /area/station/ranch) +"mzV" = ( +/obj/machinery/chem_dispenser/chemical, +/obj/machinery/firealarm/west, +/obj/item/reagent_containers/glass/beaker/large, +/turf/simulated/floor/engine/caution/west, +/area/station/crew_quarters/baroffice) "mAa" = ( /obj/stool/chair/pew/fancy/right{ dir = 1 @@ -29691,6 +30314,26 @@ /area/station/engine/inner{ name = "Transception Array Control" }) +"mAw" = ( +/obj/table/reinforced/auto, +/obj/machinery/glass_recycler/bar{ + glass_amt = 40 + }, +/obj/mapping_helper/access/kitchen, +/obj/mapping_helper/access/bar, +/obj/forcefield/energyshield/perma/doorlink, +/obj/mapping_helper/firedoor_spawn, +/obj/machinery/door/airlock/pyro/glass/windoor, +/obj/machinery/door/poddoor/pyro{ + density = 0; + icon_state = "pdoor0"; + id = "kitchen"; + layer = 4; + name = "Kitchen Shutter"; + opacity = 0 + }, +/turf/simulated/floor/black, +/area/station/crew_quarters/kitchen) "mAy" = ( /obj/table/reinforced/bar/auto{ name = "wooden table" @@ -30821,23 +31464,6 @@ /area/station/hallway/secondary/entry{ name = "Arrival Shuttle Hallway" }) -"ncI" = ( -/obj/storage/crate{ - name = "Cone Crate" - }, -/obj/item/reagent_containers/food/snacks/ice_cream_cone, -/obj/item/reagent_containers/food/snacks/ice_cream_cone, -/obj/item/reagent_containers/food/snacks/ice_cream_cone, -/obj/item/reagent_containers/food/snacks/ice_cream_cone, -/obj/item/reagent_containers/food/snacks/ice_cream_cone, -/obj/item/reagent_containers/food/snacks/ice_cream_cone, -/obj/item/reagent_containers/food/snacks/condiment/chocchips, -/obj/machinery/light_switch/west, -/obj/disposalpipe/segment/food{ - dir = 4 - }, -/turf/simulated/floor/grey/blackgrime, -/area/station/crew_quarters/catering) "ndi" = ( /obj/rack, /obj/item/clothing/suit/wizrobe/purple, @@ -30907,11 +31533,16 @@ }, /turf/simulated/floor/black/grime, /area/station/security/brig/genpop) -"nea" = ( -/obj/table/reinforced/auto, -/obj/random_item_spawner/tableware, -/turf/simulated/floor/wood, -/area/station/crew_quarters/cafeteria) +"ndW" = ( +/obj/item/device/radio/intercom/catering{ + dir = 4 + }, +/obj/item/swingsignfolded{ + pixel_x = -4; + pixel_y = 15 + }, +/turf/simulated/floor/grey/blackgrime, +/area/station/crew_quarters/catering) "neh" = ( /turf/simulated/wall/auto/reinforced/supernorn, /area/pasiphae/crew) @@ -31096,6 +31727,9 @@ /area/station/maintenance/northwest) "njf" = ( /obj/disposalpipe/segment/mail/bent/west, +/obj/cable{ + icon_state = "2-8" + }, /turf/simulated/floor/black, /area/station/engine/engineering) "njE" = ( @@ -31190,9 +31824,6 @@ /obj/cable{ icon_state = "0-8" }, -/obj/cable{ - icon_state = "0-4" - }, /obj/cable{ icon_state = "0-2" }, @@ -31267,6 +31898,32 @@ dir = 1 }, /area/station/engine/elect) +"nmn" = ( +/obj/machinery/door/poddoor/blast/pyro{ + density = 0; + dir = 4; + icon_state = "bdoormid0"; + id = "nadir_nukecore"; + name = "Reactor Core Shielding"; + opacity = 0 + }, +/obj/machinery/door/airlock/pyro/glass/engineering{ + dir = 4; + name = "Secondary Core Access" + }, +/obj/mapping_helper/access/engineering_engine, +/obj/forcefield/energyshield/perma/doorlink, +/obj/mapping_helper/firedoor_spawn, +/obj/cable{ + icon_state = "4-8" + }, +/obj/mapping_helper/airlock/cycler{ + cycle_id = "reactorside"; + name = "Reactor Side"; + enter_id = "outer" + }, +/turf/simulated/floor/engine, +/area/station/engine/core/nuclear) "nmv" = ( /obj/cable{ icon_state = "4-8" @@ -31307,27 +31964,34 @@ /turf/simulated/floor/grass, /area/station/hydroponics/bay) "nna" = ( -/obj/cable{ - icon_state = "5-8" - }, /obj/disposalpipe/segment/transport{ dir = 4 }, +/obj/cable/yellow{ + icon_state = "4-8" + }, /turf/simulated/floor/industrial, /area/station/maintenance/outer/se{ name = "Southeast Breach Hull" }) +"nny" = ( +/obj/machinery/light/small{ + dir = 4; + pixel_x = 12 + }, +/obj/table/auto, +/obj/item/reagent_containers/food/drinks/eggnog{ + pixel_x = 5; + pixel_y = 13 + }, +/turf/simulated/floor/grey/blackgrime, +/area/station/crew_quarters/catering) "nnN" = ( /obj/cable{ icon_state = "4-6" }, /turf/space/fluid/acid/clear, /area/space) -"nnS" = ( -/obj/machinery/chem_dispenser/chemical, -/obj/machinery/firealarm/west, -/turf/simulated/floor/engine/caution/west, -/area/station/crew_quarters/baroffice) "nnZ" = ( /obj/cable{ icon_state = "4-8" @@ -31557,6 +32221,18 @@ /obj/fitness/speedbag/clown, /turf/simulated/floor/grey, /area/station/crew_quarters/fitness) +"nun" = ( +/obj/machinery/door/airlock/pyro/external{ + dir = 4 + }, +/obj/mapping_helper/airlock/cycler{ + cycle_id = "nw_breach"; + name = "North West Breach Hull" + }, +/turf/simulated/floor/industrial, +/area/station/maintenance/outer/nw{ + name = "Northwest Breach Hull" + }) "nuo" = ( /obj/storage/closet/emergency, /obj/machinery/light/small{ @@ -32123,10 +32799,10 @@ /turf/simulated/floor/plating, /area/station/crew_quarters/arcade) "nFG" = ( +/obj/disposalpipe/segment/transport, /obj/cable{ - icon_state = "1-2" + icon_state = "1-4" }, -/obj/disposalpipe/segment/transport, /turf/simulated/floor/industrial, /area/station/maintenance/outer/se{ name = "Southeast Breach Hull" @@ -32165,7 +32841,7 @@ }) "nGd" = ( /obj/cable{ - icon_state = "4-10" + icon_state = "4-8" }, /turf/simulated/floor/industrial, /area/station/maintenance/outer/se{ @@ -32268,6 +32944,20 @@ /obj/disposalpipe/segment/bent/east, /turf/simulated/floor/plating, /area/station/maintenance/west) +"nHW" = ( +/obj/item/reagent_containers/glass/bottle/ammonia/large, +/obj/item/reagent_containers/glass/bottle/ammonia/large, +/obj/decal/cleanable/dirt, +/obj/machinery/light/small{ + dir = 8; + pixel_x = -12 + }, +/obj/storage/crate/bloody, +/turf/simulated/floor/plating, +/area/station/hydroponics{ + do_not_irradiate = 1; + name = "Hydroponics Storage" + }) "nIb" = ( /obj/machinery/atmospherics/binary/valve{ name = "purge valve" @@ -32277,17 +32967,29 @@ }, /area/station/engine/core/nuclear) "nIj" = ( -/obj/cable{ - icon_state = "1-10" +/obj/mapping_helper/wingrille_spawn/auto/reinforced/crystal, +/turf/simulated/floor/plating, +/area/station/engine/ptl) +"nIk" = ( +/obj/machinery/door/airlock/pyro/security/alt, +/obj/disposalpipe/segment/ejection{ + dir = 2 }, -/obj/cable{ - icon_state = "5-10" +/obj/mapping_helper/access/security, +/obj/machinery/secscanner{ + pixel_y = 10 }, -/obj/disposalpipe/segment/transport, -/turf/simulated/floor/industrial, -/area/station/maintenance/outer/se{ - name = "Southeast Breach Hull" - }) +/obj/mapping_helper/firedoor_spawn, +/obj/forcefield/energyshield/perma/doorlink, +/obj/mapping_helper/airlock/cycler{ + cycle_id = "secinterro1"; + name = "Security Interrogation 1"; + enter_id = "outer" + }, +/turf/simulated/floor/redblack{ + dir = 1 + }, +/area/station/security/interrogation) "nIm" = ( /obj/mapping_helper/wingrille_spawn/auto/reinforced, /obj/machinery/door/poddoor/pyro{ @@ -32562,13 +33264,8 @@ /turf/simulated/floor/sanitary, /area/station/crew_quarters/showers) "nPr" = ( -/obj/cable{ - icon_state = "5-10" - }, -/turf/simulated/floor/industrial, -/area/station/maintenance/outer/se{ - name = "Southeast Breach Hull" - }) +/turf/simulated/floor/engine/caution/south, +/area/station/engine/ptl) "nPt" = ( /obj/landmark/gps_waypoint, /turf/simulated/floor/carpet/arcade, @@ -33613,15 +34310,15 @@ /turf/simulated/floor/plating, /area/station/hallway/secondary/west) "orx" = ( -/obj/cable{ - icon_state = "1-2" - }, /obj/disposalpipe/segment/transport{ dir = 4; icon_state = "pipe-c" }, /obj/machinery/navbeacon/mule/engineering_north/east, /obj/decal/stripe_caution, +/obj/cable/orange{ + icon_state = "1-2" + }, /turf/simulated/floor/black, /area/station/engine/engineering) "orC" = ( @@ -33643,16 +34340,6 @@ }, /turf/simulated/floor/engine/caution/east, /area/station/ai_monitored/armory) -"orS" = ( -/obj/table/reinforced/auto, -/obj/item/shaker/salt{ - pixel_x = -3 - }, -/obj/item/shaker/pepper{ - pixel_x = 3 - }, -/turf/simulated/floor/wood, -/area/station/crew_quarters/cafeteria) "osg" = ( /obj/storage/cart, /obj/item/device/multitool{ @@ -34009,18 +34696,6 @@ /obj/forcefield/energyshield/perma/doorlink, /turf/simulated/floor/black, /area/station/hallway/secondary/west) -"ozy" = ( -/obj/machinery/camera{ - c_tag = "autotag"; - dir = 4; - name = "autoname - SS13"; - pixel_x = -10; - tag = "" - }, -/obj/disposaloutlet/east, -/obj/disposalpipe/trunk/produce, -/turf/simulated/floor/specialroom/freezer, -/area/station/crew_quarters/catering) "ozD" = ( /obj/stool/chair/office/blue{ dir = 4 @@ -34233,32 +34908,6 @@ /area/station/maintenance/outer/sw{ name = "Southwest Breach Hull" }) -"oDZ" = ( -/obj/storage/crate{ - desc = "Various supplies for the bar."; - name = "bartending crate" - }, -/obj/item/reagent_containers/food/drinks/bottle/soda, -/obj/item/reagent_containers/food/drinks/bottle/soda, -/obj/item/reagent_containers/food/drinks/bottle/soda, -/obj/item/reagent_containers/food/drinks/bottle/soda, -/obj/item/reagent_containers/food/drinks/bottle/soda, -/obj/item/storage/firstaid/toxin, -/obj/item/reagent_containers/glass/beaker/large, -/obj/item/reagent_containers/glass/beaker/large, -/obj/item/device/reagentscanner, -/obj/item/reagent_containers/food/drinks/drinkingglass/pitcher, -/obj/item/reagent_containers/dropper/mechanical, -/obj/item/clothing/glasses/spectro, -/obj/machinery/door_control{ - id = "nadir_barchem"; - name = "Bar Chem-Safety Shutters"; - pixel_x = -24 - }, -/turf/simulated/floor/engine/caution/corner{ - dir = 1 - }, -/area/station/crew_quarters/baroffice) "oEe" = ( /obj/disposalpipe/segment/ejection, /turf/simulated/wall/auto/supernorn, @@ -34341,6 +34990,9 @@ dir = 8 }, /obj/mapping_helper/firedoor_spawn, +/obj/cable{ + icon_state = "4-8" + }, /turf/simulated/floor/yellow, /area/station/engine/elect) "oGv" = ( @@ -34871,6 +35523,31 @@ /area/station/quartermaster/storage{ name = "Cargo Auxiliary Endpoint" }) +"oSR" = ( +/obj/table/reinforced/bar/auto, +/obj/item_dispenser/icedispenser{ + pixel_y = 11 + }, +/obj/drink_rack/cup{ + pixel_y = 32 + }, +/obj/item/kitchen/utensil/knife{ + pixel_x = 9; + pixel_y = 4; + dir = 2 + }, +/obj/item/kitchen/utensil/knife{ + pixel_x = 9; + pixel_y = 4; + dir = 2 + }, +/obj/item/kitchen/utensil/knife{ + pixel_x = 9; + pixel_y = 4; + dir = 2 + }, +/turf/simulated/floor/carpet/green/standard/narrow/northsouth, +/area/station/crew_quarters/cafeteria) "oSS" = ( /obj/disposalpipe/segment{ dir = 4; @@ -35262,12 +35939,6 @@ }, /turf/simulated/floor/plating, /area/station/maintenance/west) -"paQ" = ( -/obj/table/reinforced/auto, -/obj/item/plate, -/obj/item/kitchen/utensil/fork, -/turf/simulated/floor/wood, -/area/station/crew_quarters/cafeteria) "pbh" = ( /turf/simulated/floor/blueblack{ dir = 9 @@ -35284,6 +35955,14 @@ /obj/decal/cleanable/dirt/jen, /turf/simulated/floor/blue, /area/pasiphae/bridge) +"pbM" = ( +/obj/cable/orange{ + icon_state = "2-5" + }, +/turf/simulated/floor/industrial, +/area/station/maintenance/outer/se{ + name = "Southeast Breach Hull" + }) "pci" = ( /turf/simulated/floor/wood, /area/station/crew_quarters/sauna) @@ -35361,6 +36040,10 @@ dir = 8 }, /obj/mapping_helper/access/maint, +/obj/mapping_helper/airlock/cycler{ + cycle_id = "se_breach"; + name = "South East Breach Hull" + }, /turf/simulated/floor/industrial, /area/station/maintenance/outer/se{ name = "Southeast Breach Hull" @@ -35443,6 +36126,9 @@ name = "ratty blue couch" }, /obj/landmark/start/job/assistant, +/obj/cable/orange{ + icon_state = "6-8" + }, /turf/simulated/floor/industrial, /area/station/hallway/secondary/construction{ name = "The Warrens" @@ -35748,6 +36434,15 @@ /obj/disposalpipe/segment/horizontal, /turf/simulated/floor/plating, /area/station/maintenance/disposal) +"pol" = ( +/obj/machinery/light_switch/west{ + pixel_y = 24; + pixel_x = -8 + }, +/turf/simulated/floor/engine/caution/corner{ + dir = 8 + }, +/area/station/engine/ptl) "pon" = ( /obj/machinery/camera{ c_tag = "autotag"; @@ -35807,6 +36502,23 @@ }, /turf/simulated/floor/redblack/corner, /area/station/security/equipment) +"ppa" = ( +/obj/machinery/door/airlock/pyro/engineering/alt, +/obj/mapping_helper/access/engineering_engine, +/obj/forcefield/energyshield/perma/doorlink, +/obj/cable{ + icon_state = "1-2" + }, +/obj/mapping_helper/firedoor_spawn, +/obj/mapping_helper/airlock/cycler{ + cycle_id = "reactormain"; + name = "Reactor Main"; + enter_id = "inner1" + }, +/turf/simulated/floor/engine, +/area/station/engine/monitoring{ + name = "Nuclear Control Room" + }) "ppf" = ( /obj/submachine/syndicate_teleporter, /turf/simulated/floor/engine, @@ -35865,6 +36577,18 @@ }, /obj/decal/cleanable/dirt, /turf/simulated/floor/grime, +/area/station/hallway/secondary/construction{ + name = "The Warrens" + }) +"ppR" = ( +/obj/grille/catwalk, +/obj/cable{ + icon_state = "1-2" + }, +/obj/cable/orange{ + icon_state = "4-8" + }, +/turf/simulated/floor/black/grime, /area/station/hallway/secondary/construction{ name = "The Warrens" }) @@ -36850,15 +37574,6 @@ /obj/decal/cleanable/dirt/jen, /turf/simulated/floor/grey, /area/pasiphae/sys) -"pMV" = ( -/obj/machinery/light/small{ - dir = 8; - pixel_x = -12 - }, -/obj/disposalpipe/chicken_disposal_pipe/vertical, -/obj/machinery/drainage, -/turf/simulated/floor/specialroom/freezer, -/area/station/crew_quarters/catering) "pNa" = ( /obj/cable{ icon_state = "4-8" @@ -36871,6 +37586,15 @@ /obj/disposalpipe/segment/mail/vertical, /turf/simulated/wall/auto/reinforced/supernorn, /area/station/science/chemistry) +"pNF" = ( +/obj/machinery/door/airlock/pyro/external, +/obj/mapping_helper/airlock/cycler{ + cycle_id = "escape"; + name = "Escape"; + enter_id = "inner" + }, +/turf/simulated/floor/engine/caution/northsouth, +/area/station/hallway/secondary/exit) "pNP" = ( /obj/machinery/door/airlock/pyro/medical/morgue{ dir = 4 @@ -36987,6 +37711,13 @@ /obj/disposalpipe/segment/vertical, /turf/simulated/floor/specialroom/gym, /area/station/crew_quarters/fitness) +"pRB" = ( +/obj/disposalpipe/segment/produce{ + dir = 2; + icon_state = "pipe-c" + }, +/turf/simulated/floor/specialroom/freezer, +/area/station/crew_quarters/catering) "pRG" = ( /obj/machinery/disposal, /obj/disposalpipe/trunk/south, @@ -37056,6 +37787,14 @@ /obj/machinery/light/incandescent/netural, /turf/simulated/floor/yellowblack, /area/station/hallway/primary/southeast) +"pSG" = ( +/obj/cable/orange{ + icon_state = "1-2" + }, +/turf/simulated/floor/yellowblack{ + dir = 5 + }, +/area/station/engine/ptl) "pSL" = ( /obj/cable{ icon_state = "1-2" @@ -37624,6 +38363,9 @@ /obj/disposalpipe/segment/mail/vertical, /obj/forcefield/energyshield/perma/doorlink, /obj/mapping_helper/firedoor_spawn, +/obj/cable/orange{ + icon_state = "1-2" + }, /turf/simulated/floor/yellow, /area/station/engine/engineering) "qfE" = ( @@ -37730,7 +38472,7 @@ name = "Southwest Breach Hull" }) "qif" = ( -/obj/cable{ +/obj/cable/orange{ icon_state = "1-2" }, /turf/simulated/floor/yellowblack, @@ -37787,6 +38529,9 @@ /obj/cable/yellow{ icon_state = "2-9" }, +/obj/cable/yellow{ + icon_state = "2-5" + }, /turf/simulated/floor/plating, /area/station/engine/substation/pylon{ name = "South Catalytic Substation" @@ -38128,16 +38873,6 @@ /obj/random_item_spawner/junk/one_or_zero, /turf/simulated/floor/plating, /area/station/maintenance/north) -"qrD" = ( -/obj/submachine/chem_extractor{ - dir = 8 - }, -/obj/machinery/light/small{ - dir = 4; - pixel_x = 12 - }, -/turf/simulated/floor/grey/blackgrime, -/area/station/crew_quarters/catering) "qrL" = ( /obj/machinery/floorflusher/solitary, /obj/disposalpipe/trunk/brig{ @@ -38840,10 +39575,10 @@ /turf/simulated/floor/sanitary, /area/station/medical/head) "qIU" = ( +/obj/machinery/light_switch/east, /obj/cable{ icon_state = "1-2" }, -/obj/machinery/light_switch/east, /turf/simulated/floor/stairs/dark/wide{ dir = 6 }, @@ -38948,14 +39683,6 @@ "qLh" = ( /turf/simulated/wall/auto/reinforced/supernorn, /area/station/ai_monitored/armory) -"qLk" = ( -/obj/table/auto, -/obj/item/reagent_containers/food/drinks/eggnog{ - pixel_x = 5; - pixel_y = 10 - }, -/turf/simulated/floor/grey/blackgrime, -/area/station/crew_quarters/catering) "qLL" = ( /obj/machinery/light/incandescent/netural{ dir = 4 @@ -39136,6 +39863,15 @@ }, /turf/simulated/floor/white/checker, /area/station/crew_quarters/pool) +"qRe" = ( +/obj/random_item_spawner/junk/some, +/obj/cable/orange{ + icon_state = "4-8" + }, +/turf/simulated/floor/industrial, +/area/station/hallway/secondary/construction{ + name = "The Warrens" + }) "qRg" = ( /obj/machinery/camera{ c_tag = "autotag"; @@ -39277,6 +40013,9 @@ /area/space) "qUb" = ( /obj/disposalpipe/segment/mail/horizontal, +/obj/cable{ + icon_state = "4-8" + }, /turf/simulated/floor/yellowblack{ dir = 8 }, @@ -39327,23 +40066,6 @@ /obj/disposalpipe/segment/horizontal, /turf/simulated/floor/white, /area/station/medical/medbay) -"qVs" = ( -/obj/stool/bench/blue/auto, -/obj/machinery/shower{ - dir = 4; - pixel_x = 8; - pixel_y = 8 - }, -/obj/machinery/drainage, -/obj/machinery/firealarm{ - dir = 4; - pixel_x = 24; - pixel_y = -3 - }, -/turf/simulated/floor/purpleblack{ - dir = 4 - }, -/area/station/science/chemistry) "qVJ" = ( /turf/simulated/floor/engine/caution/east, /area/station/medical/head) @@ -39449,16 +40171,6 @@ /obj/storage/crate/robotparts, /turf/simulated/floor/industrial, /area/station/storage/warehouse) -"qZy" = ( -/obj/stool/bed, -/obj/item/clothing/suit/bedsheet{ - bcolor = "black"; - icon_state = "bedsheet-black" - }, -/obj/landmark/start/job/bartender, -/obj/disposalpipe/segment/food, -/turf/simulated/floor/carpet/grime, -/area/station/crew_quarters/baroffice) "qZF" = ( /obj/mapping_helper/wingrille_spawn/auto/reinforced, /obj/window_blinds/cog2/right{ @@ -39839,6 +40551,9 @@ /area/listeningpost) "rjb" = ( /obj/disposalpipe/segment/mail/horizontal, +/obj/cable{ + icon_state = "4-8" + }, /turf/simulated/floor/yellowblack{ dir = 4 }, @@ -40095,15 +40810,6 @@ /obj/mapping_helper/firedoor_spawn, /turf/simulated/floor/black, /area/station/crew_quarters/courtroom) -"rpK" = ( -/obj/stool/chair{ - dir = 8 - }, -/obj/landmark/start/job/scientist, -/turf/simulated/floor/purpleblack{ - dir = 1 - }, -/area/station/science/hall) "rqi" = ( /obj/item/storage/toilet{ desc = "You think you see something in there... you should take another look."; @@ -40162,21 +40868,6 @@ /area/station/hallway/secondary/construction{ name = "The Warrens" }) -"rrs" = ( -/obj/machinery/door/airlock/pyro/security/alt, -/obj/disposalpipe/segment/ejection{ - dir = 2 - }, -/obj/mapping_helper/access/security, -/obj/machinery/secscanner{ - pixel_y = 10 - }, -/obj/mapping_helper/firedoor_spawn, -/obj/forcefield/energyshield/perma/doorlink, -/turf/simulated/floor/redblack{ - dir = 1 - }, -/area/station/security/interrogation) "rrM" = ( /obj/storage/secure/crate/weapon/armory/tranquilizer, /obj/machinery/ai_status_display{ @@ -40260,6 +40951,11 @@ /obj/cable, /turf/simulated/floor/black, /area/station/hallway/secondary/west) +"rtA" = ( +/obj/disposalpipe/segment/food, +/obj/storage/closet/wardrobe/black/formalwear, +/turf/simulated/floor/carpet/grime, +/area/station/crew_quarters/baroffice) "ruj" = ( /obj/shrub{ dir = 8 @@ -40388,6 +41084,10 @@ /obj/decal/fakeobjects/flock/antenna, /turf/space/fluid/acid/clear, /area/space) +"rzm" = ( +/obj/table/reinforced/bar/auto, +/turf/simulated/floor/carpet/green/standard/narrow/northsouth, +/area/station/crew_quarters/cafeteria) "rzn" = ( /obj/disposalpipe/segment{ name = "factory pipe" @@ -40665,6 +41365,12 @@ /obj/landmark/random_room/nadir_rocks_7x5, /turf/space/fluid/acid, /area/space) +"rFq" = ( +/obj/disposalpipe/chicken_disposal_pipe/vertical{ + dir = 8 + }, +/turf/simulated/floor/specialroom/freezer, +/area/station/crew_quarters/catering) "rFT" = ( /obj/machinery/computer/security, /obj/cable{ @@ -40727,6 +41433,14 @@ dir = 8 }, /area/station/security/main) +"rGv" = ( +/obj/cable/orange{ + icon_state = "4-8" + }, +/turf/simulated/wall/false_wall, +/area/station/hallway/secondary/construction{ + name = "The Warrens" + }) "rGH" = ( /turf/simulated/floor/yellowblack{ dir = 1 @@ -40848,6 +41562,15 @@ }, /turf/simulated/floor/carpet/purple/fancy/edge/south, /area/station/science/research_director) +"rKG" = ( +/obj/cable{ + icon_state = "1-2" + }, +/obj/cable{ + icon_state = "1-8" + }, +/turf/simulated/floor/black, +/area/station/engine/engineering) "rKH" = ( /turf/simulated/floor/sanitary/white, /area/station/medical/robotics) @@ -41118,16 +41841,13 @@ /turf/simulated/floor/red, /area/station/security/checkpoint/escape) "rRQ" = ( +/obj/disposalpipe/segment/transport, /obj/cable{ - icon_state = "1-2" - }, -/obj/cable{ - icon_state = "2-8" + icon_state = "4-8" }, -/obj/cable{ - icon_state = "2-4" +/obj/cable/orange{ + icon_state = "1-2" }, -/obj/disposalpipe/segment/transport, /turf/simulated/floor/black, /area/station/engine/engineering) "rRY" = ( @@ -41563,9 +42283,6 @@ /turf/simulated/floor/plating, /area/station/crew_quarters/cafeteria) "saX" = ( -/obj/cable{ - icon_state = "6-9" - }, /turf/simulated/floor, /area/station/engine/substation/pylon{ name = "South Catalytic Substation" @@ -41687,6 +42404,9 @@ /obj/machinery/light/incandescent/netural{ dir = 1 }, +/obj/cable/orange{ + icon_state = "1-2" + }, /turf/simulated/floor/black, /area/station/hallway/primary/southeast) "sdM" = ( @@ -42137,6 +42857,14 @@ }, /turf/space/fluid/acid/clear, /area/space) +"soo" = ( +/obj/table/auto, +/obj/item/storage/box/donkpocket_kit{ + pixel_x = 2; + pixel_y = 9 + }, +/turf/simulated/floor/grey/blackgrime, +/area/station/crew_quarters/catering) "soE" = ( /obj/table/flock/auto, /obj/machinery/light/flock, @@ -42353,24 +43081,6 @@ }, /turf/space/fluid/acid/clear, /area/space) -"sso" = ( -/obj/machinery/light{ - dir = 8; - layer = 9.1; - pixel_x = -10 - }, -/obj/table/reinforced/chemistry/auto{ - name = "prep counter" - }, -/obj/machinery/espresso_machine{ - pixel_y = 5 - }, -/obj/noticeboard/persistent{ - name = "Bar persistent notice board"; - persistent_id = "bar" - }, -/turf/simulated/floor/engine, -/area/station/crew_quarters/cafeteria) "ssp" = ( /obj/machinery/floorflusher/solitary2, /obj/disposalpipe/trunk/brig{ @@ -42632,6 +43342,32 @@ }, /turf/simulated/floor/black, /area/station/science/research_director) +"sAj" = ( +/obj/machinery/door_control{ + id = "PTLDOOR"; + name = "Transmission Laser Confinement"; + pixel_x = -24; + pixel_y = -8 + }, +/obj/machinery/firealarm{ + dir = 8; + pixel_x = -24; + pixel_y = 8 + }, +/obj/table/auto, +/obj/item/device/radio{ + pixel_x = -5; + pixel_y = 5; + rand_pos = 0 + }, +/obj/item/dice{ + pixel_x = 8; + pixel_y = 8 + }, +/turf/simulated/floor/yellowblack{ + dir = 8 + }, +/area/station/engine/ptl) "sBk" = ( /obj/machinery/computer/operating{ dir = 8; @@ -42647,19 +43383,6 @@ /area/station/maintenance/outer/sw{ name = "Southwest Breach Hull" }) -"sBs" = ( -/obj/stool/chair/office{ - dir = 1 - }, -/obj/machinery/light{ - dir = 8; - layer = 9.1; - pixel_x = -10 - }, -/turf/simulated/floor/purpleblack{ - dir = 8 - }, -/area/station/science/chemistry) "sBv" = ( /obj/cable{ icon_state = "1-2" @@ -42900,6 +43623,18 @@ /obj/item/paper/book/from_file/monster_manual, /turf/simulated/floor/carpet/red/fancy/edge/ne, /area/station/crew_quarters/arcade/dungeon) +"sFj" = ( +/obj/machinery/light/small{ + dir = 4; + pixel_x = 12 + }, +/obj/cable/yellow{ + icon_state = "5-8" + }, +/turf/simulated/floor/industrial, +/area/station/maintenance/outer/se{ + name = "Southeast Breach Hull" + }) "sFr" = ( /obj/decal/cleanable/dirt, /obj/table/reinforced/auto, @@ -43496,6 +44231,10 @@ }, /turf/simulated/floor/black, /area/station/hallway/primary/southeast) +"sRe" = ( +/obj/machinery/power/pt_laser, +/turf/simulated/floor/engine/caution/corner, +/area/station/engine/ptl) "sRh" = ( /obj/cable{ icon_state = "4-8" @@ -43541,8 +44280,8 @@ /obj/disposalpipe/segment/transport{ dir = 4 }, -/obj/cable{ - icon_state = "1-4" +/obj/cable/orange{ + icon_state = "1-2" }, /turf/simulated/floor/black, /area/station/hallway/primary/southeast) @@ -43612,19 +44351,6 @@ /area/station/hallway/secondary/construction{ name = "The Warrens" }) -"sUg" = ( -/obj/machinery/door/airlock/pyro/security/alt, -/obj/disposalpipe/segment/ejection{ - dir = 2 - }, -/obj/mapping_helper/access/security, -/obj/cable{ - icon_state = "1-2" - }, -/obj/mapping_helper/firedoor_spawn, -/obj/forcefield/energyshield/perma/doorlink, -/turf/simulated/floor/redblack, -/area/station/security/interrogation) "sUo" = ( /obj/machinery/door/airlock/pyro/glass, /obj/disposalpipe/segment/mail/vertical, @@ -44439,6 +45165,15 @@ }, /turf/simulated/floor/industrial, /area/station/storage/warehouse) +"tlH" = ( +/obj/decal/cleanable/dirt, +/obj/cable/orange{ + icon_state = "4-8" + }, +/turf/simulated/floor/plating, +/area/station/hallway/secondary/construction{ + name = "The Warrens" + }) "tlQ" = ( /obj/stool/chair/office/blue{ dir = 4 @@ -44681,24 +45416,6 @@ dir = 1 }, /area/station/medical/morgue) -"trK" = ( -/obj/storage/crate{ - desc = "A small, cuboid object with a hinged top and empty interior. It smells kinda bad and seems to have an odd stain on it."; - icon = 'icons/misc/halloween.dmi'; - name = "dented crate" - }, -/obj/item/reagent_containers/glass/bottle/ammonia/large, -/obj/item/reagent_containers/glass/bottle/ammonia/large, -/obj/decal/cleanable/dirt, -/obj/machinery/light/small{ - dir = 8; - pixel_x = -12 - }, -/turf/simulated/floor/plating, -/area/station/hydroponics{ - do_not_irradiate = 1; - name = "Hydroponics Storage" - }) "trM" = ( /obj/table/reinforced/auto, /obj/disposaloutlet/south, @@ -44757,12 +45474,6 @@ }, /turf/simulated/floor/industrial, /area/station/storage/warehouse) -"ttA" = ( -/obj/machinery/chem_dispenser/alcohol, -/obj/item/reagent_containers/food/drinks/drinkingglass/pitcher, -/obj/machinery/firealarm/west, -/turf/simulated/floor/engine/caution/east, -/area/station/crew_quarters/cafeteria) "ttD" = ( /obj/decal/tile_edge/line/orange, /obj/decal/tile_edge{ @@ -45392,20 +46103,6 @@ /area/station/engine/monitoring{ name = "Nuclear Control Room" }) -"tGK" = ( -/obj/machinery/door/airlock/pyro/security/alt{ - dir = 4 - }, -/obj/cable{ - icon_state = "4-8" - }, -/obj/mapping_helper/access/security, -/obj/mapping_helper/firedoor_spawn, -/obj/forcefield/energyshield/perma/doorlink{ - dir = 8 - }, -/turf/simulated/floor/black, -/area/station/security/brig) "tGN" = ( /obj/cable{ icon_state = "4-8" @@ -45557,6 +46254,9 @@ }) "tJc" = ( /obj/storage/closet/wardrobe/yellow, +/obj/cable/orange{ + icon_state = "4-9" + }, /turf/simulated/floor/plating, /area/station/maintenance/southeast) "tJk" = ( @@ -45880,6 +46580,18 @@ /obj/disposalpipe/segment/vertical, /turf/simulated/floor/black, /area/station/hallway/secondary/exit) +"tQV" = ( +/obj/machinery/door/airlock/pyro/external{ + dir = 4 + }, +/obj/mapping_helper/airlock/cycler{ + cycle_id = "ne_breach"; + name = "North East Breach Hull" + }, +/turf/simulated/floor/industrial, +/area/station/maintenance/outer/ne{ + name = "Northeast Breach Hull" + }) "tQW" = ( /obj/grille/catwalk, /obj/random_item_spawner/junk/one_or_zero, @@ -46371,9 +47083,6 @@ /obj/machinery/light/incandescent/cool{ dir = 1 }, -/obj/cable{ - icon_state = "6-8" - }, /turf/simulated/floor/caution/corner/misc{ dir = 10 }, @@ -46407,6 +47116,15 @@ /area/station/maintenance/outer/sw{ name = "Southwest Breach Hull" }) +"ubT" = ( +/obj/landmark/start/job/scientist, +/obj/stool/chair/purple{ + dir = 8 + }, +/turf/simulated/floor/purpleblack{ + dir = 1 + }, +/area/station/science/hall) "ucO" = ( /obj/cable{ icon_state = "2-8" @@ -46683,10 +47401,10 @@ /obj/cable{ icon_state = "4-8" }, -/obj/cable{ - icon_state = "2-4" - }, /obj/landmark/gps_waypoint, +/obj/cable/orange{ + icon_state = "2-5" + }, /turf/simulated/floor/black, /area/station/engine/monitoring{ name = "Nuclear Control Room" @@ -47391,19 +48109,6 @@ dir = 4 }, /area/station/security/interrogation) -"uvU" = ( -/obj/machinery/door/airlock/pyro/security/alt, -/obj/mapping_helper/access/brig, -/obj/disposalpipe/segment/brig{ - dir = 1 - }, -/obj/cable{ - icon_state = "1-2" - }, -/obj/mapping_helper/firedoor_spawn, -/obj/forcefield/energyshield/perma/doorlink, -/turf/simulated/floor/redblack, -/area/station/security/interrogation) "uwl" = ( /obj/table/flock/auto, /obj/machinery/light/flock, @@ -47491,6 +48196,9 @@ /turf/simulated/floor/plating, /area/station/maintenance/west) "uya" = ( +/obj/cable/yellow{ + icon_state = "4-8" + }, /turf/simulated/floor/caution/corner/misc{ dir = 10 }, @@ -47690,22 +48398,6 @@ /obj/landmark/gps_waypoint, /turf/simulated/floor/white, /area/station/medical/medbay/treatment) -"uEk" = ( -/obj/machinery/door/airlock/pyro/glass/security{ - dir = 4; - req_access = null - }, -/obj/mapping_helper/access/security, -/obj/cable{ - icon_state = "4-8" - }, -/obj/mapping_helper/firedoor_spawn, -/obj/forcefield/energyshield/perma/doorlink{ - dir = 8 - }, -/obj/disposalpipe/segment/horizontal, -/turf/simulated/floor/black, -/area/station/security/equipment) "uEt" = ( /obj/mapping_helper/wingrille_spawn/auto/reinforced, /obj/cable{ @@ -47721,6 +48413,9 @@ /area/station/hallway/secondary/exit) "uEI" = ( /obj/disposalpipe/segment/mail/bent/south, +/obj/cable/orange{ + icon_state = "1-2" + }, /turf/simulated/floor/black, /area/station/hallway/primary/southeast) "uFd" = ( @@ -47835,6 +48530,29 @@ /obj/disposalpipe/segment/mail/bent/west, /turf/simulated/floor/blueblack, /area/station/bridge) +"uIZ" = ( +/obj/item/kitchen/utensil/fork{ + dir = 4; + pixel_y = 12; + pixel_x = -2 + }, +/obj/table/reinforced/auto, +/obj/item/kitchen/utensil/spoon{ + dir = 4; + pixel_y = -4; + pixel_x = -2 + }, +/obj/item/plate{ + pixel_y = 7; + pixel_x = -2; + grabs_food_on_spawn = 0 + }, +/obj/item/reagent_containers/food/drinks/drinkingglass/icewater{ + pixel_x = 10; + pixel_y = 6 + }, +/turf/simulated/floor/wood, +/area/station/crew_quarters/cafeteria) "uJB" = ( /obj/machinery/door/unpowered/wood/pyro{ dir = 4 @@ -47844,6 +48562,15 @@ icon_state = "crewquarters"; name = "Warrens Hall" }) +"uJE" = ( +/obj/random_item_spawner/junk/one_or_zero, +/obj/cable/orange{ + icon_state = "4-8" + }, +/turf/simulated/floor/plating, +/area/station/hallway/secondary/construction{ + name = "The Warrens" + }) "uJG" = ( /obj/machinery/light/incandescent/cool, /obj/table/reinforced/auto, @@ -48274,6 +49001,14 @@ dir = 4 }, /area/station/engine/engineering) +"uTK" = ( +/obj/cable/yellow{ + icon_state = "4-8" + }, +/turf/simulated/floor/industrial, +/area/station/maintenance/outer/se{ + name = "Southeast Breach Hull" + }) "uTO" = ( /obj/cable{ icon_state = "1-2" @@ -48389,6 +49124,15 @@ /obj/disposalpipe/segment/horizontal, /turf/simulated/wall/auto/reinforced/supernorn, /area/station/turret_protected/ai) +"uXC" = ( +/obj/mapping_helper/wingrille_spawn/auto/reinforced/crystal, +/obj/machinery/door/poddoor/pyro/shutters{ + dir = 4; + id = "PTLDOOR"; + name = "Laser Confinement Door" + }, +/turf/simulated/floor/plating, +/area/station/engine/ptl) "uXL" = ( /obj/cable{ icon_state = "1-2" @@ -48737,6 +49481,17 @@ /obj/machinery/firealarm/north, /turf/simulated/floor/grey, /area/station/crew_quarters/fitness) +"vil" = ( +/obj/machinery/door/airlock/pyro/external{ + dir = 4 + }, +/obj/cable/yellow{ + icon_state = "4-8" + }, +/turf/simulated/floor/industrial, +/area/station/maintenance/outer/se{ + name = "Southeast Breach Hull" + }) "viB" = ( /obj/machinery/light/small/warm/very{ dir = 4; @@ -48915,6 +49670,26 @@ dir = 8 }, /area/station/hydroponics/bay) +"vos" = ( +/obj/table/auto, +/obj/item/storage/box/cocktail_doodads{ + pixel_y = 17; + pixel_x = 6 + }, +/obj/item/storage/box/fruit_wedges{ + pixel_x = -4; + pixel_y = 10 + }, +/obj/item/storage/box/cocktail_umbrellas{ + pixel_x = 6; + pixel_y = 3 + }, +/obj/machinery/power/apc/autoname_east, +/obj/cable{ + icon_state = "0-8" + }, +/turf/simulated/floor/carpet/grime, +/area/station/crew_quarters/baroffice) "vpe" = ( /obj/surgery_tray, /obj/item/circular_saw{ @@ -50012,22 +50787,24 @@ /area/station/science/lobby{ name = "Science Lounge" }) -"vMJ" = ( -/obj/machinery/door/airlock/pyro/glass/engineering{ - dir = 4 - }, -/obj/mapping_helper/access/engineering_engine, -/obj/forcefield/energyshield/perma/doorlink{ - dir = 8 +"vLX" = ( +/obj/machinery/door/airlock/pyro/security/alt, +/obj/mapping_helper/access/brig, +/obj/disposalpipe/segment/brig{ + dir = 1 }, /obj/cable{ - icon_state = "4-8" + icon_state = "1-2" }, /obj/mapping_helper/firedoor_spawn, -/turf/simulated/floor/black, -/area/station/engine/monitoring{ - name = "Nuclear Control Room" - }) +/obj/forcefield/energyshield/perma/doorlink, +/obj/mapping_helper/airlock/cycler{ + cycle_id = "secinterro2"; + name = "Security Interrogation 2"; + enter_id = "inner" + }, +/turf/simulated/floor/redblack, +/area/station/security/interrogation) "vML" = ( /obj/stool/chair{ dir = 4 @@ -50177,11 +50954,16 @@ /obj/disposalpipe/trunk/east, /turf/simulated/floor/engine, /area/station/crew_quarters/cafeteria) -"vPL" = ( -/obj/machinery/drone_recharger, -/obj/cable{ +"vPx" = ( +/obj/cable/orange{ icon_state = "4-8" }, +/turf/simulated/floor/black/grime, +/area/station/hallway/secondary/construction{ + name = "The Warrens" + }) +"vPL" = ( +/obj/machinery/drone_recharger, /obj/disposalpipe/segment/horizontal, /turf/simulated/floor/plating, /area/station/maintenance/southeast) @@ -50300,6 +51082,9 @@ /obj/disposalpipe/segment/transport{ dir = 4 }, +/obj/cable/yellow{ + icon_state = "5-8" + }, /turf/simulated/floor/industrial, /area/station/maintenance/outer/se{ name = "Southeast Breach Hull" @@ -50437,6 +51222,27 @@ dir = 4 }, /area/pasiphae/bridge) +"vVw" = ( +/obj/machinery/door/airlock/pyro/glass/security{ + dir = 4; + req_access = null + }, +/obj/mapping_helper/access/security, +/obj/cable{ + icon_state = "4-8" + }, +/obj/mapping_helper/firedoor_spawn, +/obj/forcefield/energyshield/perma/doorlink{ + dir = 8 + }, +/obj/disposalpipe/segment/horizontal, +/obj/mapping_helper/airlock/cycler{ + cycle_id = "sec"; + name = "Security"; + enter_id = "inner" + }, +/turf/simulated/floor/black, +/area/station/security/equipment) "vVy" = ( /turf/simulated/floor/circuit/red, /area/listeningpost) @@ -51195,6 +52001,10 @@ dir = 8 }, /obj/mapping_helper/access/maint, +/obj/mapping_helper/airlock/cycler{ + cycle_id = "nw_breach"; + name = "North West Breach Hull" + }, /turf/simulated/floor/industrial, /area/station/maintenance/outer/nw{ name = "Northwest Breach Hull" @@ -51287,6 +52097,27 @@ dir = 1 }, /area/station/medical/medbay/lobby) +"woe" = ( +/obj/machinery/door/airlock/pyro/glass/engineering{ + dir = 4 + }, +/obj/mapping_helper/access/engineering_engine, +/obj/forcefield/energyshield/perma/doorlink{ + dir = 8 + }, +/obj/cable{ + icon_state = "4-8" + }, +/obj/mapping_helper/firedoor_spawn, +/obj/mapping_helper/airlock/cycler{ + cycle_id = "reactormain"; + name = "Reactor Main"; + enter_id = "centrifuge" + }, +/turf/simulated/floor/black, +/area/station/engine/monitoring{ + name = "Nuclear Control Room" + }) "woE" = ( /obj/reagent_dispensers/watertank/big, /turf/simulated/floor/greenblack{ @@ -51587,16 +52418,6 @@ }, /turf/simulated/floor/plating, /area/station/hallway/secondary/exit) -"wwp" = ( -/obj/rack, -/obj/item/storage/box/fruit_wedges{ - pixel_x = 6 - }, -/obj/item/storage/box/beer{ - pixel_x = -6 - }, -/turf/simulated/floor/grey/blackgrime, -/area/station/crew_quarters/catering) "wwq" = ( /obj/stool/chair/comfy{ dir = 8 @@ -51713,17 +52534,6 @@ /obj/machinery/vending/cards, /turf/simulated/floor/black, /area/station/hallway/secondary/exit) -"wyz" = ( -/obj/machinery/secscanner{ - pixel_y = 10 - }, -/obj/disposalpipe/segment/mail/vertical, -/obj/machinery/door/airlock/pyro/security/alt, -/obj/mapping_helper/access/security, -/obj/mapping_helper/firedoor_spawn, -/obj/forcefield/energyshield/perma/doorlink, -/turf/simulated/floor/black, -/area/station/security/main) "wzv" = ( /obj/cable{ icon_state = "4-8" @@ -51845,6 +52655,16 @@ /obj/decal/poster/wallsign/engineering, /turf/simulated/wall/auto/supernorn, /area/station/science/hall) +"wDb" = ( +/obj/machinery/door/airlock/pyro/external, +/obj/mapping_helper/airlock/cycler{ + cycle_id = "sw_breach2"; + name = "South West Breach Hull" + }, +/turf/simulated/floor/industrial, +/area/station/maintenance/outer/sw{ + name = "Southwest Breach Hull" + }) "wDw" = ( /obj/machinery/drainage, /obj/machinery/light/small, @@ -51896,6 +52716,9 @@ }, /turf/space/fluid/acid/clear, /area/space) +"wEA" = ( +/turf/simulated/floor/engine/caution/north, +/area/station/engine/ptl) "wEH" = ( /obj/cable{ icon_state = "4-8" @@ -52601,6 +53424,29 @@ }, /turf/simulated/floor/plating, /area/station/engine/storage) +"wVh" = ( +/obj/table/reinforced/auto, +/obj/item/kitchen/utensil/fork{ + dir = 8; + pixel_y = -3; + pixel_x = 2 + }, +/obj/item/kitchen/utensil/spoon{ + dir = 8; + pixel_y = 13; + pixel_x = 2 + }, +/obj/item/plate{ + pixel_y = 7; + pixel_x = 3; + grabs_food_on_spawn = 0 + }, +/obj/item/reagent_containers/food/drinks/drinkingglass/icewater{ + pixel_x = -11; + pixel_y = 13 + }, +/turf/simulated/floor/wood, +/area/station/crew_quarters/cafeteria) "wVB" = ( /obj/cable{ icon_state = "4-8" @@ -52704,6 +53550,24 @@ }, /turf/simulated/floor/darkblue/checker, /area/station/turret_protected/ai) +"wXQ" = ( +/obj/machinery/door/airlock/pyro/command/alt{ + dir = 4 + }, +/obj/cable{ + icon_state = "4-8" + }, +/obj/mapping_helper/access/ai_upload, +/obj/forcefield/energyshield/perma/doorlink{ + dir = 8 + }, +/obj/mapping_helper/airlock/cycler{ + cycle_id = "aicore"; + name = "AI Core"; + enter_id = "inner" + }, +/turf/simulated/floor/darkblue, +/area/station/turret_protected/ai) "wYn" = ( /obj/machinery/clothingbooth, /turf/simulated/floor/black/side{ @@ -53226,6 +54090,14 @@ /obj/disposalpipe/trunk/west, /turf/simulated/floor/redblack, /area/station/hallway/primary/northeast) +"xkP" = ( +/obj/cable/orange{ + icon_state = "1-2" + }, +/turf/simulated/floor/industrial, +/area/station/maintenance/outer/se{ + name = "Southeast Breach Hull" + }) "xkU" = ( /obj/stool/chair{ dir = 8 @@ -53432,6 +54304,18 @@ }, /turf/simulated/floor/black, /area/station/security/hos) +"xpC" = ( +/obj/landmark/start/job/scientist, +/obj/cable{ + icon_state = "4-8" + }, +/obj/stool/chair/purple{ + dir = 4 + }, +/turf/simulated/floor/yellowblack{ + dir = 1 + }, +/area/station/science/hall) "xpP" = ( /obj/disposalpipe/segment/mail/vertical, /turf/simulated/floor/yellowblack{ @@ -53452,16 +54336,6 @@ /area/station/science/lobby{ name = "Science Lounge" }) -"xqt" = ( -/obj/item/storage/box/donkpocket_kit{ - pixel_x = -9; - pixel_y = -7 - }, -/obj/item/device/radio/intercom/catering{ - dir = 4 - }, -/turf/simulated/floor/grey/blackgrime, -/area/station/crew_quarters/catering) "xqM" = ( /obj/machinery/door/airlock/pyro/maintenance/alt{ dir = 4 @@ -54307,6 +55181,11 @@ }, /obj/forcefield/energyshield/perma/doorlink, /obj/mapping_helper/access/maint, +/obj/mapping_helper/airlock/cycler{ + cycle_id = "disposals"; + name = "Disposals"; + enter_id = "outer" + }, /turf/simulated/floor/black, /area/station/maintenance/outer/ne{ name = "Northeast Breach Hull" @@ -54366,6 +55245,14 @@ "xKn" = ( /turf/simulated/wall/auto/reinforced/supernorn, /area/station/hallway/secondary/east) +"xKL" = ( +/obj/cable/yellow{ + icon_state = "4-8" + }, +/turf/simulated/floor/plating, +/area/station/engine/substation/pylon{ + name = "South Catalytic Substation" + }) "xLu" = ( /turf/simulated/floor/carpet/red/fancy/junction/sw_e, /area/pasiphae/crew) @@ -54535,7 +55422,7 @@ /area/station/crew_quarters/kitchen) "xPA" = ( /obj/rack, -/obj/item/clothing/suit/fire, +/obj/item/clothing/suit/hazard/fire, /obj/item/clothing/mask/gas/emergency, /obj/item/clothing/head/helmet/firefighter, /obj/item/tank/air, @@ -54762,6 +55649,11 @@ /mob/living/critter/small_animal/cat/jones, /turf/simulated/floor/carpet/blue/fancy/edge/nw, /area/station/bridge/captain) +"xUg" = ( +/turf/simulated/floor/engine/caution/corner{ + dir = 1 + }, +/area/station/engine/ptl) "xUk" = ( /obj/machinery/disposal_pipedispenser/mobile{ dir = 8 @@ -55127,6 +56019,12 @@ /turf/simulated/floor/black, /area/station/security/beepsky) "yel" = ( +/obj/cable/yellow{ + icon_state = "4-8" + }, +/obj/cable/yellow{ + icon_state = "4-10" + }, /turf/simulated/floor/caution/corner/sw, /area/station/engine/substation/pylon{ name = "South Catalytic Substation" @@ -55345,6 +56243,13 @@ /obj/item/furniture_parts/bed/roller, /turf/simulated/floor/plating, /area/station/maintenance/north) +"ykC" = ( +/obj/disposalpipe/segment/horizontal, +/obj/cable{ + icon_state = "2-8" + }, +/turf/simulated/floor/plating, +/area/station/maintenance/southeast) "ykY" = ( /obj/cable/yellow{ icon_state = "2-9" @@ -85148,7 +86053,7 @@ xQv xQv iXj xQv -kAj +nun xQv kAj yls @@ -85220,7 +86125,7 @@ vaV vaV eqq jjE -eqq +eFo jjE iXj jjE @@ -87303,9 +88208,9 @@ sRi rvl gvL xsX -ozy -pMV -lfG +keJ +aPP +rFq rvl dqY dqY @@ -87591,7 +88496,7 @@ mbt jNo uHm lLM -trK +nHW mbt oEZ iMW @@ -87606,8 +88511,8 @@ rvl dYJ obA obA -obA -obA +pRB +lfG bMl gVW gVW @@ -87907,12 +88812,12 @@ ssd rvl oaQ obA -obA onm +obA kWT hHa gVW -nnS +mzV ulO gVW gVW @@ -88209,14 +89114,14 @@ cIp rvl rvl rvl -dwe rvl +dwe rvl rvl gVW gqO dGR -oDZ +itD bwA stc nha @@ -88507,18 +89412,18 @@ oVg rvl agr iaW -ncI -llT +mrH +kgO rsN rNq +ndW hEa -xqt -dqo -bMa +fpe +dFX gVW nis pXu -ksj +jpM gVW idy rVs @@ -88820,7 +89725,7 @@ skp fMh pSS tUe -qZy +rtA hVt qCW ktw @@ -89112,16 +90017,16 @@ ycC iwQ aVQ xHl -kgy -qrD bGA +nny +bkC +soo hEa -qLk -jOS -wwp +eze +hLA gVW -fZM -fir +bgU +vos tNr gVW stY @@ -89417,8 +90322,8 @@ lnA iHN iHN rsJ -ghe rsJ +ghe rsJ rsJ gVW @@ -89718,11 +90623,11 @@ kyY bIm jVz iHN -sso +cla +fMr ptO -iUn -ttA -cDt +jMd +ehU rsJ pjE pJh @@ -89744,7 +90649,7 @@ dWV lZN mKo laM -uEk +vVw laM mKo laM @@ -90019,7 +90924,7 @@ oJc kyY iPX mJW -aES +mAw ptO ptO ptO @@ -90342,7 +91247,7 @@ xVw xVw xVw xVw -wyz +eVm xVw iqd kBW @@ -90624,8 +91529,8 @@ rCD maE hkx iHN -kVe -cSI +oSR +rzm kuP jGI scm @@ -91573,7 +92478,7 @@ rvx dwC cHt uqC -fbn +wDb uax ltE gsX @@ -91832,14 +92737,14 @@ umB abu diQ uel -cfT -paQ -nea -jwF -chV -nea -evN -jwF +vNp +emf +uIZ +qli +qli +emf +uIZ +qli jBz rmU wio @@ -92134,14 +93039,14 @@ vnp vvS pYx uel -cfT -nea -orS -jwF -chV -bYc -nea -jwF +vNp +kSy +wVh +qli +qli +kSy +wVh +qli jBz rsJ xFO @@ -92160,7 +93065,7 @@ bUk bUk bUk mXi -tGK +ddF mXi qLh qLh @@ -92444,7 +93349,7 @@ qli qtl qtl qli -jBz +gKi saL hlm hcm @@ -94570,11 +95475,11 @@ jwf hdz uiQ dwt -crU +ikQ imD eGM iub -uvU +vLX xSS uCa qmZ @@ -96080,11 +96985,11 @@ hYj vAj irE mHk -rrs +nIk raO mEo uus -sUg +dBq pSd akA lRz @@ -96961,7 +97866,7 @@ mjv xjY baP tLt -fRH +all qNE fFJ cNY @@ -97856,7 +98761,7 @@ oWG oWG oWG oWG -dhp +aYR fyB oRv hhc @@ -99077,8 +99982,8 @@ fCJ jxB fCJ agE -fNd -lLZ +xpC +grf czo cfj iYL @@ -99984,7 +100889,7 @@ czb gXP agE gXP -rpK +ubT czo mXd iYL @@ -101851,7 +102756,7 @@ nsy dQM nlc psV -vtr +xKL qjE sQr laQ @@ -102105,7 +103010,7 @@ iYL lZB xSt jrr -hJQ +esW jrr jrr iaS @@ -103361,7 +104266,7 @@ mgm abz mif neB -fTY +nna elm dAB bzS @@ -103590,7 +104495,7 @@ eMB ccp wRi jAB -sBs +aby sMn lPE wRi @@ -103964,7 +104869,7 @@ iJJ abz abz neB -nPr +neB vTb neB dAB @@ -104202,7 +105107,7 @@ gpP uRX uXm nzD -qVs +iVM ioB viK eLX @@ -104265,8 +105170,8 @@ eRD ihh cXD nFG -nIj cSH +dbo bWz rEP rEP @@ -104568,7 +105473,7 @@ nve eRD nGd neB -neB +fNZ dAB dAB bzS @@ -104869,7 +105774,7 @@ ouB tKo eRD nGi -neB +bKJ neB dAB hIJ @@ -105171,7 +106076,7 @@ eRD eRD eRD nGm -neB +fNZ neB dAB bzS @@ -105403,7 +106308,7 @@ oOu wRi edb swt -hRU +lRy vmT wRi wRi @@ -105472,7 +106377,7 @@ lli glH gxN nCM -neB +bKJ hOA rEP rEP @@ -105774,7 +106679,7 @@ uJB eRD eRD fxH -fxH +fSV dAB dAB bzS @@ -106076,7 +106981,7 @@ pCj eRD lCi neB -neB +fNZ dAB hIJ bzS @@ -106377,7 +107282,7 @@ eRD eRD eRD neB -neB +dQV neB dAB bzS @@ -106628,7 +107533,7 @@ wTZ aXE ahx ahx -ahx +fac ahx fYG fYG @@ -106678,7 +107583,7 @@ gTI wYR eRD neB -neB +bKJ hOA rEP rEP @@ -106890,7 +107795,7 @@ mIG mIG mIG mIG -bOo +lZt mIG mIG mIG @@ -106930,7 +107835,7 @@ kse hsY unW unW -unW +hbd unW cxr unW @@ -106980,7 +107885,7 @@ bFf eRD eRD neB -neB +fNZ dAB dAB bzS @@ -107232,7 +108137,7 @@ njX nDS ibV uNd -kAM +nmn uNd ibV uNd @@ -107281,7 +108186,7 @@ eRD usT eRD lCi -neB +bKJ neB dAB hIJ @@ -107534,7 +108439,7 @@ rkh lWL ibV aZV -aZV +eTX aZV uNd aZV @@ -107583,7 +108488,7 @@ eRD eRD eRD neB -neB +fNZ neB dAB bzS @@ -107836,7 +108741,7 @@ uiV sce ibV fLQ -kAM +cTx fLQ ibV fLQ @@ -107884,7 +108789,7 @@ eIV jDV lka neB -neB +bKJ hOA rEP rEP @@ -108097,7 +109002,7 @@ mIG mIG mIG mIG -bOo +wXQ mIG mIG mIG @@ -108138,7 +109043,7 @@ rkh ibV ibV dhu -hkU +lAF gcG oDS hkU @@ -108186,7 +109091,7 @@ kcY kRh kRh fxH -fxH +vil dAB dAB bzS @@ -108446,7 +109351,7 @@ sKX tSU jOW jOW -ieu +ppa eSP vJR xos @@ -108461,14 +109366,14 @@ hWH gzZ dun ktz -fNZ +dhK hQq sRr dhK leP hJI cwN -xFU +lAj hZq rrm tYX @@ -108488,7 +109393,7 @@ iLs kRh lCi neB -neB +fNZ dAB hIJ bzS @@ -108770,8 +109675,8 @@ dKT moJ hWH ghK -ggN -jlq +ykC +hMY lIu qIU kXF @@ -108789,7 +109694,7 @@ uod kRh kRh neB -neB +dQV neB dAB bzS @@ -109053,7 +109958,7 @@ kQl ocD ocD bub -vMJ +woe ocD ocD cZK @@ -109090,7 +109995,7 @@ goK tnw lka neB -neB +bKJ hOA rEP rEP @@ -109374,7 +110279,7 @@ pUW ijx qhg qbA -wYt +mmf hZq kRh god @@ -109392,7 +110297,7 @@ uWj kRh kRh neB -neB +fNZ dAB dAB bzS @@ -109659,9 +110564,9 @@ vMP uNg uiD qif -jyj +ikw ldK -iZl +axj sRM uEI dOr @@ -109669,9 +110574,9 @@ qfz mhP aEI njf -xSn -kpw -xSn +bfl +jWX +rKG adD bfl dwx @@ -109693,7 +110598,7 @@ tQW ejL kRh lCi -neB +bKJ neB dAB hIJ @@ -109995,7 +110900,7 @@ kRh kRh kRh neB -neB +fNZ neB dAB bzS @@ -110296,7 +111201,7 @@ lqD mip kRh neB -neB +bKJ hOA rEP rEP @@ -110583,7 +111488,7 @@ hwv eok kdG kdG -ayE +rGv kRh kRh kRh @@ -110598,7 +111503,7 @@ xPH kRh kRh fxH -fxH +vil dAB dAB bzS @@ -110885,7 +111790,7 @@ fZQ vNv boA kdG -ntb +tlH sZX ntb xhh @@ -110900,7 +111805,7 @@ aXj kRh lCi neB -neB +fNZ dAB hIJ bzS @@ -111187,7 +112092,7 @@ aKN mxV eUm kdG -xhh +llJ kRh kRh kRh @@ -111201,7 +112106,7 @@ kRh kRh kRh neB -neB +dQV neB dAB bzS @@ -111489,7 +112394,7 @@ vwb mxV xOk kdG -ntb +tlH kRh ycs lna @@ -111502,7 +112407,7 @@ cnT jvJ lka neB -neB +bKJ hOA rEP rEP @@ -111791,7 +112696,7 @@ aKN jyA hFV kdG -sZX +uJE kRh cHV vKH @@ -111804,7 +112709,7 @@ kCh kRh kRh neB -neB +fNZ dAB dAB bzS @@ -112070,7 +112975,7 @@ ygt ygt ygt ijc -bJp +ktR oPG rqB sSm @@ -112093,7 +112998,7 @@ fAy kgc uNT kdG -xhh +llJ kRh qvZ vCk @@ -112105,7 +113010,7 @@ kXC aQD kRh lCi -neB +bKJ neB dAB hIJ @@ -112395,7 +113300,7 @@ seK kdG kdG kdG -ntb +tlH kRh dsv qmH @@ -112407,7 +113312,7 @@ ntr kRh kRh neB -neB +fNZ neB dAB bzS @@ -112697,7 +113602,7 @@ sIb fse kdG cQh -sZX +fTc kRh kRh kRh @@ -112708,7 +113613,7 @@ oZL cKo lka neB -neB +bKJ hOA rEP rEP @@ -113000,7 +113905,7 @@ ddR kdG ntb ntb -xhh +jqr kRh ddM nQG @@ -113010,7 +113915,7 @@ oZL kRh kRh fxH -fxH +vil dAB dAB bzS @@ -113302,7 +114207,7 @@ kdG kdG kRh kRh -ayE +rGv kRh nJe dZR @@ -113312,7 +114217,7 @@ uWj kRh lCi neB -neB +fNZ dAB hIJ bzS @@ -113531,7 +114436,7 @@ rJg vNl rne rne -eVf +aQh kti kti kti @@ -113613,7 +114518,7 @@ itp kRh kRh neB -neB +dQV neB dAB bzS @@ -113906,7 +114811,7 @@ xhh xhh xhh lru -ntr +cUo ntr nQG oZL @@ -113914,7 +114819,7 @@ xhh fpW lka neB -neB +bKJ hOA rEP rEP @@ -114136,7 +115041,7 @@ rJg rJg rne cXH -eVf +aQh tVq pYH pYH @@ -114151,9 +115056,9 @@ vvE lHJ ylk mQy -cNv +fFH dHy -hTd +kGx vKz jaN jjs @@ -114208,7 +115113,7 @@ xhh xhh xhh kRh -itp +qRe mTx nQG oZL @@ -114216,7 +115121,7 @@ sju kRh kRh neB -neB +fNZ dAB dAB bzS @@ -114510,14 +115415,14 @@ faZ kRh kRh kRh -ntr +cUo kRh nJe oZL gvr kRh lCi -neB +bKJ neB dAB pFh @@ -114812,14 +115717,14 @@ faZ nJe nQG nQG -nQG +bFd nQG nQG nLI kRh kRh neB -neB +uTK neB dAB vnv @@ -115114,14 +116019,14 @@ faZ nQG dZR apM +ppR apM apM -apM -uWj -lka +bru +jIK +ftE neB -neB -hOA +sFj neB rEP hnw @@ -115416,18 +116321,18 @@ faZ nQG oZL txY -bBV +vPx bBV txY kRh kRh -fxH -fxH -dAB -dAB -dAB -dAB -dAB +dvF +lDW +iXQ +iXQ +iXQ +nIj +nIj bzS bzS bzS @@ -115723,13 +116628,13 @@ mTx gYB kRh lCi -neB -neB -dAB -dqn -dqn +kPo +kRD +aTf +fhD +sAj eRb -dAB +nIj bzS bzS bzS @@ -116021,17 +116926,17 @@ nHj dbf kRh jxs -mTx +iDK kRh kRh neB -neB -neB -dAB -dqn -dqn -dqn -dAB +pbM +fkY +fgI +pSG +aat +aRr +nIj bzS bzS bzS @@ -116324,16 +117229,16 @@ tVF kRh sFr wqN -lka -neB -neB +aYG +xkP +euK neB neB iXQ -dqn -dqn -dqn -rEP +pol +fXq +sRe +nIj bzS bzS bzS @@ -116631,11 +117536,11 @@ neB neB neB qVa -dAB -dqn -dqn -dqn -dAB +iXQ +wEA +fbQ +nPr +iXQ bzS bzS bzS @@ -116933,11 +117838,11 @@ neB neB dAB rEP -dAB -dqn -dqn -dqn -dAB +iXQ +fTY +ham +xUg +iXQ bzS bzS bzS @@ -117160,7 +118065,7 @@ rne rne iXj rne -wjl +tQV rne wjl tVq @@ -117232,14 +118137,14 @@ pzI pzI fxH dAB -fxH +ahJ dAB iXj -dAB -dAB -rEP -dAB -dAB +iXQ +iXQ +uXC +iXQ +iXQ bzS bzS bzS @@ -117539,7 +118444,7 @@ dAB bzS bzS bzS -bzS +rJg bzS iUo bzS @@ -117841,7 +118746,7 @@ dAB bzS bzS bzS -bzS +rJg bzS bzS bzS @@ -118143,7 +119048,7 @@ bzS bzS bzS bzS -bzS +rJg bzS bzS bzS @@ -118445,7 +119350,7 @@ bzS bzS bzS bzS -bzS +rJg bzS bzS bzS @@ -118747,7 +119652,7 @@ bzS bzS bzS bzS -bzS +rJg bzS bzS bzS @@ -119049,7 +119954,7 @@ bzS bzS bzS bzS -bzS +rJg bzS bzS bzS @@ -119351,7 +120256,7 @@ bzS bzS bzS bzS -bzS +rJg bzS bzS bzS @@ -119653,7 +120558,7 @@ bzS bzS bzS bzS -bzS +rJg bzS bzS bzS @@ -119894,9 +120799,9 @@ rJg rJg rJg rJg -fUM +ecJ gYJ -uWc +bva ahz pnk gza @@ -119955,7 +120860,7 @@ bzS bzS bzS bzS -bzS +rJg bzS bzS bzS @@ -120257,7 +121162,7 @@ bzS bzS bzS bzS -bzS +rJg bzS bzS bzS @@ -120498,9 +121403,9 @@ rJg rJg rJg rJg -fUM +ecJ fbB -aSj +pNF kDr pnk ruH @@ -120559,7 +121464,7 @@ bzS bzS bzS bzS -bzS +rJg bzS bzS bzS @@ -120861,7 +121766,7 @@ bzS bzS bzS bzS -bzS +rJg bzS bzS bzS @@ -121163,7 +122068,7 @@ bzS bzS bzS bzS -bzS +rJg bzS bzS bzS @@ -121465,7 +122370,7 @@ bzS bzS bzS bzS -bzS +rJg bzS bzS bzS @@ -121767,7 +122672,7 @@ bzS bzS bzS bzS -bzS +rJg bzS bzS bzS @@ -122069,7 +122974,7 @@ bzS bzS bzS bzS -bzS +rJg bzS bzS bzS @@ -122371,7 +123276,7 @@ bzS bzS bzS bzS -bzS +rJg bzS bzS bzS @@ -122673,7 +123578,7 @@ bzS bzS bzS bzS -bzS +rJg bzS bzS bzS @@ -122975,7 +123880,7 @@ bzS bzS bzS bzS -bzS +rJg bzS bzS bzS @@ -123277,7 +124182,7 @@ bzS bzS bzS bzS -bzS +rJg bzS bzS bzS @@ -123579,7 +124484,7 @@ bzS bzS bzS bzS -bzS +rJg bzS bzS bzS @@ -123881,7 +124786,7 @@ bzS bzS bzS bzS -bzS +rJg bzS bzS bzS @@ -124183,7 +125088,7 @@ bzS bzS bzS bzS -bzS +rJg bzS bzS bzS @@ -124485,7 +125390,7 @@ bzS bzS bzS bzS -bzS +rJg bzS bzS bzS @@ -124787,7 +125692,7 @@ bzS bzS bzS bzS -bzS +rJg bzS bzS bzS @@ -125089,7 +125994,7 @@ bzS bzS bzS bzS -bzS +rJg bzS bzS bzS @@ -125391,7 +126296,7 @@ bzS bzS bzS bzS -bzS +rJg bzS bzS bzS @@ -125693,7 +126598,7 @@ bzS bzS bzS bzS -bzS +rJg bzS bzS bzS @@ -125995,7 +126900,7 @@ bzS bzS bzS bzS -bzS +rJg bzS bzS bzS @@ -126297,7 +127202,7 @@ bzS bzS bzS bzS -bzS +rJg bzS bzS bzS @@ -126599,7 +127504,7 @@ bzS bzS bzS bzS -bzS +rJg bzS bzS bzS @@ -126901,7 +127806,7 @@ bzS bzS bzS bzS -bzS +rJg bzS bzS bzS @@ -127203,7 +128108,7 @@ bzS bzS bzS bzS -bzS +rJg bzS bzS bzS @@ -127505,7 +128410,7 @@ bzS bzS bzS bzS -bzS +rJg bzS bzS bzS @@ -127807,7 +128712,7 @@ bzS bzS bzS bzS -bzS +rJg bzS bzS bzS @@ -128109,7 +129014,7 @@ bzS bzS bzS bzS -bzS +rJg bzS bzS bzS @@ -128411,7 +129316,7 @@ bzS bzS bzS bzS -bzS +rJg bzS bzS bzS @@ -128713,7 +129618,7 @@ bzS bzS bzS bzS -bzS +rJg bzS bzS bzS @@ -129015,7 +129920,7 @@ bzS bzS bzS bzS -bzS +rJg bzS bzS bzS @@ -129317,7 +130222,7 @@ bzS bzS bzS bzS -bzS +rJg bzS bzS bzS @@ -129619,7 +130524,7 @@ bzS bzS bzS bzS -bzS +rJg bzS bzS bzS @@ -129921,7 +130826,7 @@ bzS bzS bzS bzS -bzS +rJg bzS bzS bzS @@ -130223,7 +131128,7 @@ bzS bzS bzS bzS -bzS +rJg bzS bzS bzS @@ -130525,7 +131430,7 @@ bzS bzS bzS bzS -bzS +rJg bzS bzS bzS @@ -130827,7 +131732,7 @@ bzS bzS bzS bzS -bzS +rJg bzS bzS bzS @@ -131129,7 +132034,7 @@ bzS bzS bzS bzS -bzS +rJg bzS bzS bzS @@ -131431,7 +132336,7 @@ bzS bzS bzS bzS -bzS +rJg bzS bzS bzS @@ -131733,7 +132638,7 @@ bzS bzS bzS bzS -bzS +rJg bzS bzS bzS @@ -132035,7 +132940,7 @@ bzS bzS bzS bzS -bzS +rJg bzS bzS bzS diff --git a/maps/oshan.dmm b/maps/oshan.dmm index 639466ea748f3..5306862f97cc9 100644 --- a/maps/oshan.dmm +++ b/maps/oshan.dmm @@ -279,6 +279,11 @@ dir = 5 }, /obj/machinery/light/small/floor/cool, +/obj/mapping_helper/airlock/cycler{ + cycle_id = "engine"; + name = "Engineering"; + enter_id = "outer" + }, /turf/simulated/floor/shuttlebay, /area/station/hangar/engine) "aba" = ( @@ -326,6 +331,11 @@ dir = 6 }, /obj/machinery/light/small/floor/cool, +/obj/mapping_helper/airlock/cycler{ + cycle_id = "engine"; + name = "Engineering"; + enter_id = "outer" + }, /turf/simulated/floor/shuttlebay, /area/station/hangar/engine) "abh" = ( @@ -2324,6 +2334,10 @@ "ahO" = ( /obj/machinery/door/airlock/pyro/external, /obj/machinery/light/small/floor/cool, +/obj/mapping_helper/airlock/cycler{ + cycle_id = "northmaint"; + name = "North Maintenance" + }, /turf/simulated/floor/plating/random, /area/station/maintenance/northeast) "ahQ" = ( @@ -2399,6 +2413,10 @@ "aie" = ( /obj/machinery/door/airlock/pyro/external, /obj/machinery/light/small/floor/cool, +/obj/mapping_helper/airlock/cycler{ + cycle_id = "northmaint2"; + name = "North Maintenance" + }, /turf/simulated/floor/plating/random, /area/station/maintenance/northwest) "aif" = ( @@ -10695,12 +10713,12 @@ /area/station/science/lobby) "aJg" = ( /obj/machinery/light/incandescent/warm, -/obj/stool/chair{ - dir = 8 - }, /obj/cable{ icon_state = "4-8" }, +/obj/stool/chair/purple{ + dir = 8 + }, /turf/simulated/floor/wood, /area/station/science/lobby) "aJi" = ( @@ -11007,14 +11025,7 @@ /turf/simulated/floor/plating/random, /area/station/storage/tech) "aJX" = ( -/obj/rack, -/obj/item/circuitboard/teleporter, -/obj/item/circuitboard/card, -/obj/item/circuitboard/robot_module_rewriter, -/obj/item/circuitboard/cloning, -/obj/item/circuitboard/barcode_qm, -/obj/item/circuitboard/barcode, -/obj/item/circuitboard/qmsupply, +/obj/rack/organized/techstorage_eng, /turf/simulated/floor/plating/random, /area/station/storage/tech) "aJY" = ( @@ -11073,14 +11084,7 @@ /turf/simulated/floor/plating/random, /area/station/storage/tech) "aKp" = ( -/obj/rack, -/obj/item/circuitboard/arcade, -/obj/item/circuitboard/powermonitor, -/obj/item/circuitboard/powermonitor_smes, -/obj/item/circuitboard/operating, -/obj/item/circuitboard/genetics, -/obj/item/circuitboard/qmorder, -/obj/item/circuitboard/telescope, +/obj/rack/organized/techstorage_med, /turf/simulated/floor/plating/random, /area/station/storage/tech) "aKr" = ( @@ -11768,6 +11772,10 @@ dir = 4 }, /obj/machinery/light/small/floor/cool, +/obj/mapping_helper/airlock/cycler{ + cycle_id = "innermaint2"; + name = "Central Inner Maintenance" + }, /turf/simulated/floor/engine/glow/blue{ dir = 10 }, @@ -12053,11 +12061,15 @@ dir = 4 }, /obj/machinery/light/small/floor/cool, +/obj/mapping_helper/airlock/cycler{ + cycle_id = "innermaint2"; + name = "Central Inner Maintenance" + }, /turf/simulated/floor/plating/random, /area/station/maintenance/inner/central) "aOs" = ( /obj/storage/closet/coffin, -/obj/item/reagent_containers/food/snacks/candy/wrapped_pbcup, +/obj/item/reagent_containers/food/snacks/candy/wrapped_candy/pb_cup, /turf/simulated/floor/plating/random, /area/station/maintenance/northwest) "aOt" = ( @@ -12322,7 +12334,7 @@ /obj/item/storage/toolbox/mechanical{ pixel_y = -4 }, -/obj/item/pinpointer{ +/obj/item/pinpointer/disk{ pixel_x = 3; pixel_y = 7 }, @@ -13955,7 +13967,7 @@ /area/space) "aVp" = ( /obj/storage/crate, -/obj/item/clothing/suit/rad, +/obj/item/clothing/suit/hazard/rad, /obj/item/clothing/head/rad_hood, /obj/item/clothing/mask/gas/emergency, /turf/simulated/floor/grime, @@ -14104,7 +14116,7 @@ /area/iss) "aVR" = ( /obj/storage/closet/fire, -/obj/item/clothing/suit/fire, +/obj/item/clothing/suit/hazard/fire, /turf/simulated/floor/grime, /area/iss) "aVS" = ( @@ -14965,6 +14977,11 @@ icon_state = "1-2-thick" }, /obj/mapping_helper/access/engineering_engine, +/obj/mapping_helper/airlock/cycler{ + cycle_id = "engine"; + name = "Engineering"; + enter_id = "inner" + }, /turf/simulated/floor/shuttlebay, /area/station/hangar/engine) "bbe" = ( @@ -16639,7 +16656,7 @@ /area/station/maintenance/inner/central) "biE" = ( /obj/rack, -/obj/item/clothing/suit/fire, +/obj/item/clothing/suit/hazard/fire, /obj/item/clothing/mask/gas/emergency, /obj/item/clothing/head/helmet/firefighter, /obj/item/tank/air, @@ -16712,6 +16729,7 @@ /area/station/crew_quarters/catering) "biQ" = ( /obj/machinery/light/incandescent/cool/very, +/obj/item/storage/box/popsicle_sticks, /turf/simulated/floor/specialroom/freezer, /area/station/crew_quarters/catering) "biR" = ( @@ -17208,7 +17226,7 @@ icon_state = "4-8" }, /obj/table/auto, -/obj/submachine/mixer{ +/obj/machinery/mixer{ pixel_y = 10 }, /turf/simulated/floor/white, @@ -17593,7 +17611,7 @@ /area/evilreaver/security) "bmb" = ( /obj/rack, -/obj/item/clothing/suit/fire, +/obj/item/clothing/suit/hazard/fire, /obj/item/clothing/mask/gas/emergency, /obj/item/clothing/head/helmet/firefighter, /obj/item/tank/air, @@ -20301,6 +20319,11 @@ /area/station/security/checkpoint/escape) "bvq" = ( /obj/machinery/door/airlock/pyro/external, +/obj/mapping_helper/airlock/cycler{ + cycle_id = "engine"; + name = "Engineering"; + enter_id = "inner" + }, /turf/simulated/floor/plating/random, /area/station/hangar/engine) "bvs" = ( @@ -29084,10 +29107,10 @@ dir = 8; icon_state = "line1" }, -/obj/stool/chair, /obj/disposalpipe/segment/mail{ dir = 4 }, +/obj/stool/chair/purple, /turf/simulated/floor/purpleblack{ dir = 8 }, @@ -29748,7 +29771,7 @@ /area/diner/kitchen) "ccn" = ( /obj/table/reinforced/auto, -/obj/submachine/mixer, +/obj/machinery/mixer, /turf/simulated/floor/grime, /area/diner/kitchen) "cco" = ( @@ -29857,6 +29880,11 @@ /area/diner/kitchen) "ccH" = ( /obj/machinery/door/airlock/pyro/external, +/obj/mapping_helper/airlock/cycler{ + cycle_id = "diner"; + name = "Space Diner"; + enter_id = "inner" + }, /turf/simulated/floor/plating, /area/diner/hallway) "ccI" = ( @@ -30930,6 +30958,11 @@ /area/shuttle/sea_elevator/upper) "cgj" = ( /obj/machinery/door/airlock/pyro/external, +/obj/mapping_helper/airlock/cycler{ + cycle_id = "sealift"; + name = "Sea Elevator Room"; + enter_id = "elevator" + }, /turf/simulated/floor, /area/shuttle/sea_elevator_room) "cgk" = ( @@ -31143,6 +31176,11 @@ /obj/machinery/door/airlock/pyro/external{ dir = 4 }, +/obj/mapping_helper/airlock/cycler{ + cycle_id = "sealift"; + name = "Sea Elevator Room"; + enter_id = "seaside" + }, /turf/simulated/floor/shuttlebay, /area/shuttle/sea_elevator_room) "cha" = ( @@ -31185,6 +31223,11 @@ /obj/machinery/door/airlock/pyro/external{ dir = 8 }, +/obj/mapping_helper/airlock/cycler{ + cycle_id = "diner"; + name = "Space Diner"; + enter_id = "outer" + }, /turf/simulated/floor/plating, /area/diner/hallway) "chi" = ( @@ -31610,6 +31653,11 @@ dir = 4 }, /obj/machinery/light/small/floor/cool, +/obj/mapping_helper/airlock/cycler{ + cycle_id = "innermaint"; + name = "Central Inner Maintenance"; + enter_id = "outer" + }, /turf/simulated/floor/shuttlebay, /area/station/maintenance/inner/central) "cjV" = ( @@ -32403,6 +32451,11 @@ }, /obj/mapping_helper/access/engineering, /obj/mapping_helper/firedoor_spawn, +/obj/mapping_helper/airlock/cycler{ + cycle_id = "engine"; + name = "Engineering"; + enter_id = "outer" + }, /turf/simulated/floor, /area/station/engine/engineering) "cAR" = ( @@ -32816,6 +32869,11 @@ }, /obj/mapping_helper/access/heads, /obj/mapping_helper/firedoor_spawn, +/obj/mapping_helper/airlock/cycler{ + cycle_id = "bridge"; + name = "Bridge"; + enter_id = "inner" + }, /turf/simulated/floor/black, /area/station/bridge) "dcJ" = ( @@ -33240,6 +33298,11 @@ icon_state = "0-2-thick" }, /obj/cable, +/obj/mapping_helper/airlock/cycler{ + cycle_id = "sealift"; + name = "Sea Elevator Room"; + enter_id = "elevator" + }, /turf/simulated/floor, /area/shuttle/sea_elevator_room) "dHj" = ( @@ -33627,6 +33690,11 @@ icon_state = "1-2-thick" }, /obj/mapping_helper/access/engineering_engine, +/obj/mapping_helper/airlock/cycler{ + cycle_id = "engine"; + name = "Engineering"; + enter_id = "inner" + }, /turf/simulated/floor/shuttlebay, /area/station/hangar/engine) "egx" = ( @@ -35495,7 +35563,7 @@ /area/station/turret_protected/ai_upload) "gEE" = ( /obj/rack, -/obj/item/clothing/suit/fire, +/obj/item/clothing/suit/hazard/fire, /obj/item/clothing/mask/gas/emergency, /obj/item/extinguisher, /obj/item/screwdriver, @@ -36631,6 +36699,11 @@ "iEz" = ( /obj/machinery/door/airlock/pyro/external, /obj/mapping_helper/firedoor_spawn, +/obj/mapping_helper/airlock/cycler{ + cycle_id = "outpost"; + name = "Research Outpost"; + enter_id = "outer" + }, /turf/simulated/floor/black, /area/research_outpost) "iEE" = ( @@ -37180,6 +37253,11 @@ icon_state = "4-8" }, /obj/mapping_helper/firedoor_spawn, +/obj/mapping_helper/airlock/cycler{ + cycle_id = "engine"; + name = "Engineering"; + enter_id = "outer" + }, /turf/simulated/floor, /area/station/engine/engineering) "juK" = ( @@ -37605,6 +37683,11 @@ /obj/cable{ icon_state = "4-8" }, +/obj/mapping_helper/airlock/cycler{ + cycle_id = "sec"; + name = "Security"; + enter_id = "sec" + }, /turf/simulated/floor/red, /area/station/security/main) "keq" = ( @@ -38383,6 +38466,11 @@ icon_state = "4-8" }, /obj/mapping_helper/firedoor_spawn, +/obj/mapping_helper/airlock/cycler{ + cycle_id = "sec"; + name = "Security"; + enter_id = "brig" + }, /turf/simulated/floor/red, /area/station/security/processing) "ltZ" = ( @@ -39924,6 +40012,17 @@ }, /turf/simulated/floor/green, /area/station/hydroponics/bay) +"nnK" = ( +/obj/machinery/door/airlock/pyro/external{ + dir = 4 + }, +/obj/mapping_helper/airlock/cycler{ + cycle_id = "sealift"; + name = "Sea Elevator Room"; + enter_id = "stationside" + }, +/turf/simulated/floor/shuttlebay, +/area/shuttle/sea_elevator_room) "nnT" = ( /obj/stool/chair/green{ dir = 8 @@ -40255,6 +40354,11 @@ icon_state = "4-8" }, /obj/mapping_helper/firedoor_spawn, +/obj/mapping_helper/airlock/cycler{ + cycle_id = "engine"; + name = "Engineering"; + enter_id = "inner" + }, /turf/simulated/floor, /area/station/engine/engineering) "nLp" = ( @@ -40387,12 +40491,12 @@ dir = 8; icon_state = "line1" }, -/obj/stool/chair{ - dir = 1 - }, /obj/disposalpipe/segment/mail{ dir = 4 }, +/obj/stool/chair/purple{ + dir = 1 + }, /turf/simulated/floor/purpleblack{ dir = 8 }, @@ -40640,6 +40744,11 @@ /obj/machinery/secscanner{ pixel_y = 10 }, +/obj/mapping_helper/airlock/cycler{ + cycle_id = "bridge"; + name = "Bridge"; + enter_id = "outer" + }, /turf/simulated/floor/black, /area/station/bridge) "oAu" = ( @@ -41919,6 +42028,11 @@ /obj/cable{ icon_state = "1-2" }, +/obj/mapping_helper/airlock/cycler{ + cycle_id = "bridge"; + name = "Bridge"; + enter_id = "inner" + }, /turf/simulated/floor/black, /area/station/bridge) "quk" = ( @@ -42181,6 +42295,18 @@ "qPg" = ( /turf/simulated/floor, /area/station/hangar/sec) +"qPk" = ( +/obj/machinery/door/airlock/pyro/external{ + dir = 4 + }, +/obj/machinery/light/small/floor/cool, +/obj/mapping_helper/airlock/cycler{ + cycle_id = "innermaint"; + name = "Central Inner Maintenance"; + enter_id = "inner" + }, +/turf/simulated/floor/shuttlebay, +/area/station/maintenance/inner/central) "qRg" = ( /obj/table/wood/auto, /obj/item/camera{ @@ -42579,7 +42705,7 @@ /area/research_outpost) "rxi" = ( /obj/rack, -/obj/item/clothing/suit/fire, +/obj/item/clothing/suit/hazard/fire, /obj/item/clothing/mask/gas/emergency, /obj/item/clothing/head/helmet/firefighter, /obj/item/tank/air, @@ -42635,6 +42761,11 @@ /obj/machinery/door/airlock/pyro/external{ dir = 4 }, +/obj/mapping_helper/airlock/cycler{ + cycle_id = "sealift"; + name = "Sea Elevator Room"; + enter_id = "stationside" + }, /turf/simulated/floor/shuttlebay, /area/shuttle/sea_elevator_room) "rBX" = ( @@ -43099,6 +43230,11 @@ /obj/machinery/secscanner{ pixel_y = 10 }, +/obj/mapping_helper/airlock/cycler{ + cycle_id = "bridge"; + name = "Bridge"; + enter_id = "outer" + }, /turf/simulated/floor/black, /area/station/bridge) "sxC" = ( @@ -43270,6 +43406,11 @@ /obj/cable{ icon_state = "4-8" }, +/obj/mapping_helper/airlock/cycler{ + cycle_id = "outpost"; + name = "Research Outpost"; + enter_id = "inner" + }, /turf/simulated/floor/plating/random, /area/research_outpost/maint) "sJy" = ( @@ -44138,10 +44279,10 @@ /turf/simulated/floor/plating/damaged3, /area/martian_trader) "uij" = ( -/obj/stool/chair{ +/obj/landmark/start/job/scientist, +/obj/stool/chair/purple{ dir = 4 }, -/obj/landmark/start/job/scientist, /turf/simulated/floor/wood, /area/station/science/lobby) "ujL" = ( @@ -44666,6 +44807,11 @@ /obj/cable{ icon_state = "1-2" }, +/obj/mapping_helper/airlock/cycler{ + cycle_id = "sec"; + name = "Security"; + enter_id = "outer" + }, /turf/simulated/floor/red, /area/station/security/main) "vnf" = ( @@ -45136,6 +45282,11 @@ icon_state = "4-8" }, /obj/mapping_helper/firedoor_spawn, +/obj/mapping_helper/airlock/cycler{ + cycle_id = "outpost"; + name = "Research Outpost"; + enter_id = "inner" + }, /turf/simulated/floor/plating/random, /area/research_outpost/hangar) "wbu" = ( @@ -85888,8 +86039,8 @@ aqn cjw cjD aCD -cjS -cjS +qPk +qPk aCD aqn aqn @@ -87086,7 +87237,7 @@ aqn aqn aLV rBz -cgY +nnK aLV aqn aqn @@ -87690,7 +87841,7 @@ aLV aLV aLV rBz -cgY +nnK aLV aqn aqn diff --git a/maps/pamgoc.dmm b/maps/pamgoc.dmm index 2dca26076021a..fdb29f1cb41fe 100644 --- a/maps/pamgoc.dmm +++ b/maps/pamgoc.dmm @@ -6255,7 +6255,7 @@ /area/station/crew_quarters/catering) "anI" = ( /obj/rack, -/obj/item/clothing/suit/fire, +/obj/item/clothing/suit/hazard/fire, /obj/item/tank/air, /obj/item/extinguisher{ pixel_x = -9 @@ -26833,7 +26833,7 @@ /area/station/medical/morgue) "bmS" = ( /obj/rack, -/obj/item/clothing/suit/fire, +/obj/item/clothing/suit/hazard/fire, /obj/item/tank/air, /obj/item/extinguisher{ pixel_x = -9 @@ -34041,7 +34041,7 @@ /area/station/hallway/secondary/exit) "bHD" = ( /obj/rack, -/obj/item/clothing/suit/fire, +/obj/item/clothing/suit/hazard/fire, /obj/item/tank/air, /obj/item/extinguisher{ pixel_x = -9 @@ -35318,8 +35318,8 @@ /area/station/medical/medbay/lobby) "bKi" = ( /obj/rack, -/obj/item/clothing/suit/fire, -/obj/item/clothing/suit/fire{ +/obj/item/clothing/suit/hazard/fire, +/obj/item/clothing/suit/hazard/fire{ pixel_x = -4; pixel_y = -2 }, @@ -40260,66 +40260,14 @@ /turf/simulated/floor/grime, /area/station/storage/warehouse) "bVf" = ( -/obj/rack, -/obj/item/circuitboard/qmsupply{ - pixel_x = 5; - pixel_y = 5 - }, -/obj/item/circuitboard/telescope{ - pixel_x = 5; - pixel_y = 1 - }, -/obj/item/circuitboard/powermonitor{ - pixel_x = 5; - pixel_y = -3 - }, -/obj/item/circuitboard/genetics{ - pixel_x = -5; - pixel_y = 7 - }, -/obj/item/circuitboard/powermonitor_smes{ - pixel_x = -5; - pixel_y = 3 - }, -/obj/item/circuitboard/arcade{ - pixel_x = -5; - pixel_y = -5 - }, -/obj/item/circuitboard/operating{ - pixel_x = -5; - pixel_y = -1 +/obj/rack/organized/techstorage_med{ + order_override = "zigzag" }, /turf/simulated/floor/plating, /area/station/storage/tech) "bVg" = ( -/obj/rack, -/obj/item/circuitboard/qmorder{ - pixel_x = 5; - pixel_y = 5 - }, -/obj/item/circuitboard/robot_module_rewriter{ - pixel_x = 5; - pixel_y = -3 - }, -/obj/item/circuitboard/barcode_qm{ - pixel_x = 5; - pixel_y = 1 - }, -/obj/item/circuitboard/barcode{ - pixel_x = -5; - pixel_y = 7 - }, -/obj/item/circuitboard/card{ - pixel_x = -5; - pixel_y = 3 - }, -/obj/item/circuitboard/cloning{ - pixel_x = -5; - pixel_y = -1 - }, -/obj/item/circuitboard/teleporter{ - pixel_x = -5; - pixel_y = -5 +/obj/rack/organized/techstorage_eng{ + order_override = "zigzag" }, /turf/simulated/floor/plating, /area/station/storage/tech) @@ -40456,7 +40404,7 @@ /area/station/maintenance/east) "bVo" = ( /obj/rack, -/obj/item/clothing/suit/fire{ +/obj/item/clothing/suit/hazard/fire{ pixel_x = 7 }, /obj/item/clothing/mask/gas/emergency{ @@ -40492,7 +40440,7 @@ pixel_x = 8; pixel_y = 5 }, -/obj/item/clothing/suit/fire, +/obj/item/clothing/suit/hazard/fire, /obj/item/tank/air, /obj/item/extinguisher{ pixel_x = -9 @@ -40513,7 +40461,7 @@ /area/station/maintenance/northeast) "bVr" = ( /obj/rack, -/obj/item/clothing/suit/fire, +/obj/item/clothing/suit/hazard/fire, /obj/item/tank/air, /obj/item/extinguisher{ pixel_x = -9 @@ -40534,7 +40482,7 @@ /area/station/maintenance/southeast) "bVs" = ( /obj/rack, -/obj/item/clothing/suit/fire, +/obj/item/clothing/suit/hazard/fire, /obj/item/tank/air, /obj/item/extinguisher{ pixel_x = -9 @@ -40555,7 +40503,7 @@ /area/station/maintenance/east) "bVt" = ( /obj/rack, -/obj/item/clothing/suit/fire, +/obj/item/clothing/suit/hazard/fire, /obj/item/tank/air, /obj/item/extinguisher{ pixel_x = -9 @@ -40572,7 +40520,7 @@ /area/station/maintenance/northwest) "bVu" = ( /obj/rack, -/obj/item/clothing/suit/fire{ +/obj/item/clothing/suit/hazard/fire{ pixel_x = 7 }, /obj/item/clothing/mask/gas/emergency{ @@ -41268,7 +41216,7 @@ pixel_x = -5; pixel_y = 7 }, -/obj/item/clothing/suit/fire{ +/obj/item/clothing/suit/hazard/fire{ pixel_x = 7 }, /obj/item/storage/toolbox/emergency{ @@ -43441,9 +43389,6 @@ /turf/simulated/floor, /area/station/security/main) "cbG" = ( -/obj/stool/chair{ - dir = 4 - }, /obj/cable{ icon_state = "1-2" }, @@ -43451,15 +43396,15 @@ pixel_x = -6; pixel_y = -11 }, +/obj/stool/chair/purple{ + dir = 4 + }, /turf/simulated/floor/carpet{ dir = 5; icon_state = "fred5" }, /area/station/crew_quarters/hor) "cbH" = ( -/obj/stool/chair{ - dir = 4 - }, /obj/cable{ icon_state = "4-8" }, @@ -43469,15 +43414,18 @@ name = "autoname - SS13" }, /obj/blind_switch/area/north, +/obj/stool/chair/purple{ + dir = 4 + }, /turf/simulated/floor/black, /area/station/crew_quarters/hor) "cbI" = ( -/obj/stool/chair{ - dir = 4 - }, /obj/cable{ icon_state = "4-8" }, +/obj/stool/chair/purple{ + dir = 4 + }, /turf/simulated/floor/grime, /area/station/science/lab) "cbJ" = ( @@ -43534,10 +43482,10 @@ /turf/simulated/floor/purple/side, /area/station/janitor/office) "cbO" = ( -/obj/stool/chair{ +/obj/landmark/start/job/scientist, +/obj/stool/chair/purple{ dir = 4 }, -/obj/landmark/start/job/scientist, /turf/simulated/floor/purple/side, /area/station/science/lobby) "cbP" = ( @@ -43754,12 +43702,12 @@ }, /area/station/crew_quarters/captain) "cco" = ( -/obj/stool/chair{ - dir = 8 - }, /obj/cable{ icon_state = "4-8" }, +/obj/stool/chair/purple{ + dir = 8 + }, /turf/simulated/floor/carpet{ dir = 8; icon_state = "fred2" @@ -43807,10 +43755,10 @@ }, /area/station/chapel/sanctuary) "ccs" = ( -/obj/stool/chair{ +/obj/landmark/start/job/scientist, +/obj/stool/chair/purple{ dir = 8 }, -/obj/landmark/start/job/scientist, /turf/simulated/floor/purple/side, /area/station/science/lobby) "cct" = ( @@ -44659,7 +44607,7 @@ /area/station/crew_quarters/quartersB) "cew" = ( /obj/storage/crate, -/obj/item/clothing/suit/rad, +/obj/item/clothing/suit/hazard/rad, /obj/item/clothing/head/rad_hood, /turf/simulated/floor/airless/scorched, /area/abandonedship) @@ -48563,7 +48511,7 @@ pixel_x = -10; pixel_y = 6 }, -/obj/item/clothing/suit/fire{ +/obj/item/clothing/suit/hazard/fire{ pixel_x = 3; pixel_y = 2 }, @@ -49066,7 +49014,7 @@ /area/station/mining/staff_room) "ckQ" = ( /obj/table/auto, -/obj/submachine/mixer{ +/obj/machinery/mixer{ pixel_x = -6 }, /turf/simulated/floor/specialroom/cafeteria, @@ -50720,7 +50668,7 @@ "cnM" = ( /obj/table/wood/auto, /obj/item/reagent_containers/food/drinks/drinkingglass, -/obj/item/pinpointer, +/obj/item/pinpointer/disk, /turf/simulated/floor/carpet{ dir = 10; icon_state = "fred2" @@ -55025,7 +54973,7 @@ pixel_x = 6; pixel_y = 7 }, -/obj/item/clothing/suit/fire/heavy, +/obj/item/clothing/suit/hazard/fire/heavy, /turf/simulated/floor/black, /area/station/engine/hotloop) "dgR" = ( @@ -58317,7 +58265,7 @@ }, /obj/item/decoration/ashtray, /obj/machinery/light, -/obj/item/reagent_containers/food/snacks/candy/butterscotch{ +/obj/item/reagent_containers/food/snacks/candy/wrapped_candy/butterscotch{ pixel_x = -4; pixel_y = 8 }, diff --git a/maps/pod_wars.dmm b/maps/pod_wars.dmm index 353283526d65d..e951106dce417 100644 --- a/maps/pod_wars.dmm +++ b/maps/pod_wars.dmm @@ -4611,7 +4611,7 @@ /area/pod_wars/team2/power) "rR" = ( /obj/table/reinforced/bar/auto, -/obj/submachine/mixer, +/obj/machinery/mixer, /turf/unsimulated/floor/specialroom/bar, /area/pod_wars/team1/bar) "rS" = ( @@ -6118,7 +6118,7 @@ /turf/unsimulated/floor/white, /area/pod_wars/team1/medbay) "xy" = ( -/obj/submachine/mixer, +/obj/machinery/mixer, /obj/table/auto, /turf/simulated/floor/green/side{ dir = 10 @@ -9870,7 +9870,7 @@ /area/pod_wars/spacejunk/miningoutpost) "MT" = ( /obj/table/reinforced/bar/auto, -/obj/submachine/mixer, +/obj/machinery/mixer, /turf/unsimulated/floor/specialroom/bar, /area/pod_wars/team2/bar) "MU" = ( @@ -10398,7 +10398,7 @@ "Pk" = ( /obj/machinery/light/incandescent/netural, /obj/table/auto, -/obj/submachine/mixer, +/obj/machinery/mixer, /turf/simulated/floor/yellow, /area/pod_wars/spacejunk/restaurant) "Pm" = ( diff --git a/maps/setpieces/xg6_fermidzone.dmm b/maps/setpieces/xg6_fermidzone.dmm index 5daa99c4633b3..96fcb9d794a8c 100644 --- a/maps/setpieces/xg6_fermidzone.dmm +++ b/maps/setpieces/xg6_fermidzone.dmm @@ -6486,8 +6486,8 @@ anchored = 1; pixel_y = 16 }, -/obj/item/clothing/suit/rad/iomoon, -/obj/item/clothing/suit/rad/iomoon, +/obj/item/clothing/suit/hazard/rad/iomoon, +/obj/item/clothing/suit/hazard/rad/iomoon, /turf/unsimulated/floor/yellow/checker, /area/solarium{ name = "XG6 Shen Kuo Observatory" @@ -8195,8 +8195,8 @@ anchored = 1; pixel_y = 16 }, -/obj/item/clothing/suit/rad/iomoon, -/obj/item/clothing/suit/rad/iomoon, +/obj/item/clothing/suit/hazard/rad/iomoon, +/obj/item/clothing/suit/hazard/rad/iomoon, /turf/unsimulated/floor/yellow/checker, /area/solarium{ name = "XG6 Shen Kuo Observatory" diff --git a/maps/unused/concept_fixed.dmm b/maps/unused/concept_fixed.dmm index fc6c36c1156d1..f427e1767b733 100644 --- a/maps/unused/concept_fixed.dmm +++ b/maps/unused/concept_fixed.dmm @@ -7268,7 +7268,7 @@ /obj/rack, /obj/item/clothing/under/color, /obj/item/clothing/shoes/black, -/obj/item/clothing/suit/fire, +/obj/item/clothing/suit/hazard/fire, /obj/item/clothing/mask/gas, /turf/simulated/floor/plating, /area/station/maintenance/northwest) @@ -10277,7 +10277,7 @@ "avn" = ( /obj/rack, /obj/item/clothing/shoes/black, -/obj/item/clothing/suit/fire, +/obj/item/clothing/suit/hazard/fire, /obj/item/clothing/mask/gas/emergency, /obj/item/clothing/glasses/sunglasses, /obj/machinery/light/small, @@ -26853,7 +26853,7 @@ /area/station/crew_quarters/kitchen) "bbQ" = ( /obj/table, -/obj/submachine/mixer{ +/obj/machinery/mixer{ pixel_y = 6 }, /turf/simulated/floor/specialroom/cafeteria{ @@ -26863,7 +26863,7 @@ "bbR" = ( /obj/machinery/light, /obj/table, -/obj/submachine/mixer{ +/obj/machinery/mixer{ pixel_y = 6 }, /obj/machinery/camera{ diff --git a/maps/unused/construction_shuttle.dmm b/maps/unused/construction_shuttle.dmm index 06bd2012d07d4..ab105be7a360b 100644 --- a/maps/unused/construction_shuttle.dmm +++ b/maps/unused/construction_shuttle.dmm @@ -76,7 +76,7 @@ /area/shuttle/arrival/station) "am" = ( /obj/rack, -/obj/item/clothing/suit/rad, +/obj/item/clothing/suit/hazard/rad, /obj/item/clothing/head/rad_hood, /turf/simulated/floor/shuttlebay, /area/shuttle/arrival/station) diff --git a/maps/unused/crash_gimmick.dmm b/maps/unused/crash_gimmick.dmm index 2d37dfac628c7..4ce2a187c2bbc 100644 --- a/maps/unused/crash_gimmick.dmm +++ b/maps/unused/crash_gimmick.dmm @@ -35572,7 +35572,7 @@ icon_state = "bedsheet-hop" }, /obj/decal/cleanable/dirt, -/obj/item/reagent_containers/food/snacks/candy/wrapped_pbcup, +/obj/item/reagent_containers/food/snacks/candy/wrapped_candy/pb_cup, /turf/space, /area/space) "dEP" = ( @@ -41918,8 +41918,8 @@ /area/russian/radiation) "gQS" = ( /obj/storage/closet/radiation, -/obj/item/clothing/suit/rad, -/obj/item/clothing/suit/rad, +/obj/item/clothing/suit/hazard/rad, +/obj/item/clothing/suit/hazard/rad, /obj/item/clothing/head/rad_hood, /obj/item/clothing/head/rad_hood, /turf/simulated/floor/plating/random{ @@ -44286,7 +44286,7 @@ /area/russian/radiation) "idR" = ( /obj/table/reinforced/auto, -/obj/submachine/mixer, +/obj/machinery/mixer, /obj/disposalpipe/segment/brig{ dir = 8 }, @@ -55070,7 +55070,7 @@ /area/russian/radiation) "ngI" = ( /obj/table/auto, -/obj/submachine/mixer, +/obj/machinery/mixer, /obj/disposalpipe/segment/morgue, /turf/space, /area/russian/radiation) @@ -59794,7 +59794,7 @@ name = "dried vomit" }, /obj/table/wood/auto, -/obj/submachine/mixer, +/obj/machinery/mixer, /obj/decal/cleanable/blood/splatter{ icon_state = "floor3" }, diff --git a/maps/unused/crash_gimmick_2.dmm b/maps/unused/crash_gimmick_2.dmm index 2f89471947402..1ca39937193c8 100644 --- a/maps/unused/crash_gimmick_2.dmm +++ b/maps/unused/crash_gimmick_2.dmm @@ -579,7 +579,7 @@ /obj/item/fuel_pellet/cerenkite, /obj/item/fuel_pellet/cerenkite, /obj/item/clothing/head/rad_hood, -/obj/item/clothing/suit/rad, +/obj/item/clothing/suit/hazard/rad, /obj/machinery/light/small/floor/harsh/very, /turf/simulated/floor/shuttlebay, /area/shuttle/arrival/station) diff --git a/maps/unused/density.dmm b/maps/unused/density.dmm index cf6b0c07ac320..9839c67c7f847 100644 --- a/maps/unused/density.dmm +++ b/maps/unused/density.dmm @@ -1441,7 +1441,7 @@ /area/station/crew_quarters/kitchen) "dI" = ( /obj/table/wood/auto, -/obj/submachine/mixer, +/obj/machinery/mixer, /turf/simulated/floor/specialroom/bar, /area/station/crew_quarters/kitchen) "dJ" = ( @@ -3216,7 +3216,7 @@ /turf/simulated/wall/auto/reinforced/supernorn, /area/station/science/lab) "hR" = ( -/obj/machinery/ignition_switch{ +/obj/machinery/activation_button/ignition_switch{ id = "tox_ignition1"; pixel_x = -24; pixel_y = -8 diff --git a/maps/unused/destiny.dmm b/maps/unused/destiny.dmm index fecb918ecdfc7..77f5a46a22feb 100644 --- a/maps/unused/destiny.dmm +++ b/maps/unused/destiny.dmm @@ -2804,7 +2804,7 @@ /area/station/maintenance/solar/west) "alX" = ( /obj/rack, -/obj/item/clothing/suit/fire, +/obj/item/clothing/suit/hazard/fire, /obj/item/clothing/mask/gas/emergency, /obj/item/clothing/head/helmet/firefighter, /obj/item/tank/air, @@ -4487,7 +4487,7 @@ icon_state = "2-8" }, /obj/rack, -/obj/item/clothing/suit/fire, +/obj/item/clothing/suit/hazard/fire, /obj/item/clothing/mask/gas/emergency, /obj/item/clothing/head/helmet/firefighter, /obj/item/tank/air, @@ -10384,7 +10384,7 @@ /area/space) "aXr" = ( /obj/rack, -/obj/item/clothing/suit/fire, +/obj/item/clothing/suit/hazard/fire, /obj/item/clothing/mask/gas/emergency, /obj/item/clothing/head/helmet/firefighter, /obj/item/tank/air, @@ -12380,7 +12380,7 @@ /area/station/crew_quarters/pool) "bng" = ( /obj/table/reinforced/auto, -/obj/submachine/mixer, +/obj/machinery/mixer, /obj/cable{ icon_state = "1-2" }, @@ -14199,8 +14199,8 @@ /obj/item/extinguisher, /obj/item/clothing/head/helmet/firefighter, /obj/item/clothing/head/helmet/welding, -/obj/item/clothing/suit/fire, -/obj/item/clothing/suit/fire, +/obj/item/clothing/suit/hazard/fire, +/obj/item/clothing/suit/hazard/fire, /obj/item/clothing/mask/gas/emergency, /obj/item/clothing/mask/gas/emergency, /obj/item/tank/air, @@ -15525,7 +15525,7 @@ /area/station/crew_quarters/catering) "bTv" = ( /obj/rack, -/obj/item/clothing/suit/fire, +/obj/item/clothing/suit/hazard/fire, /obj/item/clothing/mask/gas/emergency, /obj/item/clothing/head/helmet/firefighter, /obj/item/tank/air, @@ -15953,7 +15953,7 @@ pixel_y = 32 }, /obj/storage/closet/fire, -/obj/item/clothing/suit/fire/heavy, +/obj/item/clothing/suit/hazard/fire/heavy, /obj/item/tank/air, /obj/item/clothing/mask/gas/emergency, /obj/item/clothing/head/helmet/welding, @@ -17460,7 +17460,7 @@ /area/station/crew_quarters/fitness) "cKx" = ( /obj/rack, -/obj/item/clothing/suit/fire, +/obj/item/clothing/suit/hazard/fire, /obj/item/clothing/mask/gas/emergency, /obj/item/clothing/head/helmet/firefighter, /obj/item/tank/air, @@ -21456,7 +21456,7 @@ /area/station/ranch) "exV" = ( /obj/rack, -/obj/item/clothing/suit/fire, +/obj/item/clothing/suit/hazard/fire, /obj/item/clothing/mask/gas/emergency, /obj/item/clothing/head/helmet/firefighter, /obj/item/tank/air, @@ -28003,7 +28003,7 @@ /area/station/science/lab) "hvs" = ( /obj/rack, -/obj/item/clothing/suit/fire, +/obj/item/clothing/suit/hazard/fire, /obj/item/clothing/mask/gas/emergency, /obj/item/clothing/head/helmet/firefighter, /obj/item/tank/air, @@ -36804,7 +36804,7 @@ /area/station/crew_quarters/pool) "mdr" = ( /obj/rack, -/obj/item/clothing/suit/fire, +/obj/item/clothing/suit/hazard/fire, /obj/item/clothing/mask/gas/emergency, /obj/item/clothing/head/helmet/firefighter, /obj/item/tank/air, @@ -49276,7 +49276,7 @@ /area/station/science/artifact) "sGr" = ( /obj/rack, -/obj/item/clothing/suit/fire, +/obj/item/clothing/suit/hazard/fire, /obj/item/clothing/mask/gas/emergency, /obj/item/clothing/head/helmet/firefighter, /obj/item/tank/air, @@ -56487,7 +56487,7 @@ icon_state = "0-2" }, /obj/rack, -/obj/item/clothing/suit/fire, +/obj/item/clothing/suit/hazard/fire, /obj/item/clothing/mask/gas/emergency, /obj/item/clothing/head/helmet/firefighter, /obj/item/extinguisher, @@ -59739,8 +59739,8 @@ /area/station/quartermaster/cargobay) "xKr" = ( /obj/storage/secure/closet/engineering/electrical, -/obj/item/clothing/suit/rad, -/obj/item/clothing/suit/rad, +/obj/item/clothing/suit/hazard/rad, +/obj/item/clothing/suit/hazard/rad, /obj/item/clothing/head/rad_hood, /obj/item/clothing/head/rad_hood, /obj/item/clothing/glasses/toggleable/meson, diff --git a/maps/unused/fleet.dmm b/maps/unused/fleet.dmm index 3ad9ecc87037b..75b7e5ae8ddf2 100644 --- a/maps/unused/fleet.dmm +++ b/maps/unused/fleet.dmm @@ -179,7 +179,7 @@ /area/space) "aB" = ( /obj/rack, -/obj/item/clothing/suit/fire, +/obj/item/clothing/suit/hazard/fire, /obj/item/clothing/mask/gas/emergency, /obj/decal/stripe_caution, /turf/simulated/floor/airless, @@ -17837,8 +17837,8 @@ }) "ND" = ( /obj/table/reinforced/auto, -/obj/item/clothing/suit/fire/heavy, -/obj/item/clothing/suit/fire/heavy, +/obj/item/clothing/suit/hazard/fire/heavy, +/obj/item/clothing/suit/hazard/fire/heavy, /obj/item/clothing/head/helmet/welding, /obj/item/clothing/head/helmet/welding, /obj/machinery/power/apc/autoname_north, @@ -18220,7 +18220,7 @@ }) "Ol" = ( /obj/table/reinforced/auto, -/obj/submachine/mixer, +/obj/machinery/mixer, /obj/machinery/phone/wall{ pixel_y = 32 }, @@ -23073,8 +23073,8 @@ }) "YZ" = ( /obj/rack, -/obj/item/clothing/suit/fire, -/obj/item/clothing/suit/fire, +/obj/item/clothing/suit/hazard/fire, +/obj/item/clothing/suit/hazard/fire, /obj/item/clothing/mask/gas/emergency, /obj/item/clothing/mask/gas/emergency, /obj/cable{ diff --git a/maps/unused/horizon.dmm b/maps/unused/horizon.dmm index f31bf4de6d4dd..7f831349619db 100644 --- a/maps/unused/horizon.dmm +++ b/maps/unused/horizon.dmm @@ -476,7 +476,7 @@ icon_state = "bedsheet-hop" }, /obj/decal/cleanable/dirt, -/obj/item/reagent_containers/food/snacks/candy/wrapped_pbcup, +/obj/item/reagent_containers/food/snacks/candy/wrapped_candy/pb_cup, /turf/simulated/floor/carpet/green/fancy/edge/east, /area/station/crew_quarters/quarters_east) "abs" = ( @@ -4634,7 +4634,7 @@ name = "dried vomit" }, /obj/table/wood/auto, -/obj/submachine/mixer, +/obj/machinery/mixer, /obj/decal/cleanable/blood/splatter{ icon_state = "floor3" }, @@ -28707,7 +28707,7 @@ /area/station/crew_quarters/kitchen) "bEu" = ( /obj/table/reinforced/auto, -/obj/submachine/mixer, +/obj/machinery/mixer, /obj/disposalpipe/segment/brig{ dir = 8 }, @@ -35271,7 +35271,7 @@ /area/station/crew_quarters/kitchen) "bXN" = ( /obj/table/auto, -/obj/submachine/mixer, +/obj/machinery/mixer, /obj/machinery/light, /obj/disposalpipe/segment/morgue, /turf/simulated/floor/white/checker{ diff --git a/maps/unused/manta.dmm b/maps/unused/manta.dmm index 5b7479ce836de..5ded001dcf164 100644 --- a/maps/unused/manta.dmm +++ b/maps/unused/manta.dmm @@ -1333,7 +1333,7 @@ /area/abandonedmedicalship/robot_trader) "aeB" = ( /obj/table/reinforced/auto, -/obj/submachine/mixer, +/obj/machinery/mixer, /obj/decal/cleanable/cobweb, /turf/simulated/floor/grime, /area/diner/kitchen) @@ -7595,7 +7595,7 @@ /area/station/engine/storage) "awJ" = ( /obj/rack, -/obj/item/clothing/suit/fire, +/obj/item/clothing/suit/hazard/fire, /obj/item/clothing/mask/gas/emergency, /obj/item/tank/air, /obj/item/chem_grenade/firefighting, @@ -7606,7 +7606,7 @@ /area/station/engine/storage) "awK" = ( /obj/rack, -/obj/item/clothing/suit/fire, +/obj/item/clothing/suit/hazard/fire, /obj/item/clothing/mask/gas/emergency, /obj/item/tank/air, /obj/item/chem_grenade/firefighting, @@ -7719,7 +7719,7 @@ /obj/item/clothing/head/helmet/firefighter, /obj/item/clothing/mask/gas/emergency, /obj/item/tank/air, -/obj/item/clothing/suit/fire/heavy, +/obj/item/clothing/suit/hazard/fire/heavy, /turf/simulated/floor, /area/station/engine/storage) "awW" = ( @@ -11020,7 +11020,7 @@ /area/station/crew_quarters/cafeteria/the_rising_tide_bar) "aFY" = ( /obj/rack, -/obj/item/clothing/suit/fire, +/obj/item/clothing/suit/hazard/fire, /obj/item/clothing/mask/gas/emergency, /obj/item/clothing/head/helmet/firefighter, /obj/item/tank/air, @@ -16249,7 +16249,7 @@ /area/station/security/beepsky) "aVe" = ( /obj/rack, -/obj/item/clothing/suit/fire, +/obj/item/clothing/suit/hazard/fire, /obj/item/clothing/mask/gas/emergency, /obj/item/clothing/head/helmet/firefighter, /obj/item/tank/air, @@ -18940,7 +18940,7 @@ /area/station/crew_quarters/kitchen/therustykrab) "bcK" = ( /obj/table/auto, -/obj/submachine/mixer, +/obj/machinery/mixer, /turf/simulated/floor/specialroom/cafeteria, /area/station/crew_quarters/kitchen/therustykrab) "bcL" = ( @@ -29607,7 +29607,7 @@ /area/station/maintenance/upperport) "bFK" = ( /obj/rack, -/obj/item/clothing/suit/fire, +/obj/item/clothing/suit/hazard/fire, /obj/item/clothing/mask/gas/emergency, /obj/item/clothing/head/helmet/firefighter, /obj/item/tank/air, @@ -29677,7 +29677,7 @@ /area/station/maintenance/lowerport) "bFU" = ( /obj/rack, -/obj/item/clothing/suit/fire, +/obj/item/clothing/suit/hazard/fire, /obj/item/clothing/mask/gas/emergency, /obj/item/clothing/head/helmet/firefighter, /obj/item/tank/air, @@ -31699,7 +31699,7 @@ icon_state = "pipe-c" }, /obj/item/clothing/head/rad_hood, -/obj/item/clothing/suit/rad, +/obj/item/clothing/suit/hazard/rad, /obj/machinery/firealarm{ dir = 8; pixel_x = -24 @@ -37904,7 +37904,7 @@ /area/station/chapel/office) "nRd" = ( /obj/storage/closet/fire, -/obj/item/clothing/suit/fire/heavy, +/obj/item/clothing/suit/hazard/fire/heavy, /obj/item/tank/air, /obj/item/tank/air, /obj/item/clothing/mask/gas/emergency, @@ -37913,7 +37913,7 @@ /obj/item/clothing/head/helmet/firefighter, /obj/item/extinguisher, /obj/item/extinguisher, -/obj/item/clothing/suit/fire/heavy, +/obj/item/clothing/suit/hazard/fire/heavy, /obj/machinery/light/incandescent/netural{ dir = 8; pixel_x = -10 diff --git a/maps/unused/mushroom_new_walls.dmm b/maps/unused/mushroom_new_walls.dmm index 98674daba0a74..5b4f276d7ada7 100644 --- a/maps/unused/mushroom_new_walls.dmm +++ b/maps/unused/mushroom_new_walls.dmm @@ -2174,7 +2174,7 @@ /area/station/engine/storage) "amm" = ( /obj/rack, -/obj/item/clothing/suit/fire{ +/obj/item/clothing/suit/hazard/fire{ pixel_x = -7 }, /obj/item/clothing/mask/gas/emergency{ @@ -2430,7 +2430,7 @@ /area/station/engine/storage) "ang" = ( /obj/rack, -/obj/item/clothing/suit/fire{ +/obj/item/clothing/suit/hazard/fire{ pixel_x = -7 }, /obj/item/clothing/mask/gas/emergency{ @@ -8114,7 +8114,7 @@ /obj/rack, /obj/item/clothing/under/color, /obj/item/clothing/shoes/black, -/obj/item/clothing/suit/fire, +/obj/item/clothing/suit/hazard/fire, /obj/item/clothing/mask/gas, /turf/simulated/floor/plating, /area/station/maintenance/northwest) @@ -10250,7 +10250,7 @@ "bbS" = ( /obj/rack, /obj/item/clothing/shoes/black, -/obj/item/clothing/suit/fire, +/obj/item/clothing/suit/hazard/fire, /obj/item/clothing/mask/gas/emergency, /obj/item/clothing/glasses/sunglasses, /turf/simulated/floor, @@ -12760,7 +12760,7 @@ /area/station/engine/storage) "bod" = ( /obj/rack, -/obj/item/clothing/suit/fire{ +/obj/item/clothing/suit/hazard/fire{ pixel_x = -7 }, /obj/item/clothing/mask/gas/emergency{ @@ -30598,7 +30598,7 @@ desc = "A black countertop table for storing kitchen-y objects."; name = "kitchen counter" }, -/obj/submachine/mixer{ +/obj/machinery/mixer{ pixel_x = 8; pixel_y = 4 }, diff --git a/maps/unused/oldmap.dmm b/maps/unused/oldmap.dmm index d525fa2f1d312..2818b9092c3a9 100644 --- a/maps/unused/oldmap.dmm +++ b/maps/unused/oldmap.dmm @@ -1708,7 +1708,7 @@ "eh" = ( /obj/rack, /obj/item/clothing/shoes/black, -/obj/item/clothing/suit/fire, +/obj/item/clothing/suit/hazard/fire, /obj/item/clothing/mask/gas/emergency, /turf/simulated/floor, /area/engine/engineering) @@ -1892,7 +1892,7 @@ "eE" = ( /obj/rack, /obj/item/clothing/shoes/black, -/obj/item/clothing/suit/fire, +/obj/item/clothing/suit/hazard/fire, /obj/item/clothing/mask/gas/emergency, /obj/machinery/light/small{ tag = "icon-bulb1 (WEST)"; @@ -2030,7 +2030,7 @@ "eV" = ( /obj/rack, /obj/item/clothing/shoes/black, -/obj/item/clothing/suit/fire, +/obj/item/clothing/suit/hazard/fire, /turf/simulated/floor, /area/engine/engineering) "eW" = ( diff --git a/maps/unused/ozymandias.dmm b/maps/unused/ozymandias.dmm index f19b33a6b7e82..f7f50d4be0c24 100644 --- a/maps/unused/ozymandias.dmm +++ b/maps/unused/ozymandias.dmm @@ -9795,7 +9795,7 @@ /area/station/crew_quarters/quartersA) "cIL" = ( /obj/rack, -/obj/item/clothing/suit/fire, +/obj/item/clothing/suit/hazard/fire, /obj/item/clothing/mask/gas/emergency, /obj/item/clothing/head/helmet/firefighter, /obj/item/tank/air, @@ -16981,7 +16981,7 @@ /area/station/engine/hotloop) "ezC" = ( /obj/rack, -/obj/item/clothing/suit/fire, +/obj/item/clothing/suit/hazard/fire, /obj/item/clothing/mask/gas/emergency, /obj/item/clothing/head/helmet/firefighter, /obj/item/tank/air, @@ -21326,7 +21326,7 @@ /area/shuttle/arrival/station) "fGK" = ( /obj/table/reinforced/auto, -/obj/submachine/mixer, +/obj/machinery/mixer, /obj/machinery/firealarm{ pixel_y = 24 }, @@ -26757,7 +26757,7 @@ /area/station/hallway/secondary/north) "han" = ( /obj/table/reinforced/auto, -/obj/submachine/mixer, +/obj/machinery/mixer, /turf/simulated/floor/specialroom/cafeteria, /area/station/crew_quarters/kitchen) "haw" = ( @@ -34038,8 +34038,8 @@ /area/station/crewquarters/garbagegarbs) "iXy" = ( /obj/rack, -/obj/item/clothing/suit/fire, -/obj/item/clothing/suit/fire, +/obj/item/clothing/suit/hazard/fire, +/obj/item/clothing/suit/hazard/fire, /obj/item/clothing/mask/gas/emergency, /obj/item/clothing/mask/gas/emergency, /obj/item/clothing/head/helmet/firefighter, @@ -36351,7 +36351,7 @@ /area/station/medical/medbay) "jCz" = ( /obj/rack, -/obj/item/clothing/suit/fire, +/obj/item/clothing/suit/hazard/fire, /obj/item/clothing/mask/gas/emergency, /obj/item/clothing/head/helmet/firefighter, /obj/item/tank/air, @@ -50985,7 +50985,7 @@ /area/station/hangar/main) "nvI" = ( /obj/rack, -/obj/item/clothing/suit/fire, +/obj/item/clothing/suit/hazard/fire, /obj/item/clothing/mask/gas/emergency, /obj/item/extinguisher, /obj/item/chem_grenade/firefighting, @@ -51727,7 +51727,7 @@ /area/station/medical/medbay/lobby) "nFB" = ( /obj/rack, -/obj/item/clothing/suit/fire, +/obj/item/clothing/suit/hazard/fire, /obj/item/clothing/mask/gas/emergency, /obj/item/clothing/head/helmet/firefighter, /obj/item/tank/air, @@ -52062,7 +52062,7 @@ /area/station/crew_quarters/courtroom) "nIH" = ( /obj/rack, -/obj/item/clothing/suit/fire, +/obj/item/clothing/suit/hazard/fire, /obj/item/clothing/mask/gas/emergency, /obj/decal/stripe_caution, /turf/simulated/floor/airless, @@ -58276,8 +58276,8 @@ /area/station/engine/elect) "pnj" = ( /obj/rack, -/obj/item/clothing/suit/fire, -/obj/item/clothing/suit/fire, +/obj/item/clothing/suit/hazard/fire, +/obj/item/clothing/suit/hazard/fire, /obj/item/clothing/mask/gas/emergency, /obj/item/clothing/mask/gas/emergency, /obj/machinery/light{ @@ -66975,7 +66975,7 @@ /area/station/crew_quarters/market) "rAe" = ( /obj/rack, -/obj/item/clothing/suit/fire/heavy, +/obj/item/clothing/suit/hazard/fire/heavy, /obj/item/clothing/head/helmet/welding, /turf/simulated/floor/yellow/side, /area/station/engine/power) @@ -71491,8 +71491,8 @@ /area/station/maintenance/solar/west) "sDX" = ( /obj/rack, -/obj/item/clothing/suit/fire, -/obj/item/clothing/suit/fire, +/obj/item/clothing/suit/hazard/fire, +/obj/item/clothing/suit/hazard/fire, /obj/item/clothing/mask/gas/emergency, /obj/item/clothing/mask/gas/emergency, /obj/item/clothing/head/helmet/firefighter, @@ -76185,7 +76185,7 @@ /area/station/engine/power) "tKE" = ( /obj/rack, -/obj/item/clothing/suit/fire, +/obj/item/clothing/suit/hazard/fire, /obj/item/storage/box/lightbox/tubes, /obj/item/storage/toolbox/emergency, /obj/item/clothing/mask/gas/emergency, @@ -76193,7 +76193,7 @@ /area/station/science/gen_storage) "tKG" = ( /obj/storage/secure/closet/engineering/electrical, -/obj/item/clothing/suit/rad, +/obj/item/clothing/suit/hazard/rad, /obj/item/clothing/head/rad_hood, /obj/cable{ icon_state = "4-8" @@ -78916,7 +78916,7 @@ /area/station/communications/centre) "uuC" = ( /obj/rack, -/obj/item/clothing/suit/fire, +/obj/item/clothing/suit/hazard/fire, /obj/item/clothing/mask/gas/emergency, /obj/item/clothing/head/helmet/firefighter, /obj/item/tank/air, @@ -84666,7 +84666,7 @@ "vJl" = ( /obj/machinery/manufacturer/general/grody{ free_resource_amt = 2; - + }, /turf/simulated/floor/industrial, /area/station/hallway/secondary/construction{ @@ -87467,7 +87467,7 @@ /area/station/crew_quarters/fitness) "wtw" = ( /obj/rack, -/obj/item/clothing/suit/fire, +/obj/item/clothing/suit/hazard/fire, /obj/item/clothing/mask/gas/emergency, /obj/item/clothing/head/helmet/firefighter, /obj/item/tank/air, @@ -91014,7 +91014,7 @@ /area/station/engine/engineering/ce) "xkx" = ( /obj/table/reinforced/auto, -/obj/submachine/mixer, +/obj/machinery/mixer, /obj/item/device/radio/intercom/catering, /turf/simulated/floor/specialroom/cafeteria, /area/station/crew_quarters/quarters{ diff --git a/maps/unused/setpieces/AIBM_lunar.dmm b/maps/unused/setpieces/AIBM_lunar.dmm index 03ed234ffe462..1ff58551aae58 100644 --- a/maps/unused/setpieces/AIBM_lunar.dmm +++ b/maps/unused/setpieces/AIBM_lunar.dmm @@ -7453,7 +7453,7 @@ tag = "" }, /obj/table/auto, -/obj/submachine/mixer, +/obj/machinery/mixer, /turf/simulated/floor/specialroom/cafeteria, /area/sim/area1) "rl" = ( diff --git a/maps/unused/setpieces/SHARED_biodomeExpanded.dmm b/maps/unused/setpieces/SHARED_biodomeExpanded.dmm index bfd0f0fcb20e0..cb21c704faf55 100644 --- a/maps/unused/setpieces/SHARED_biodomeExpanded.dmm +++ b/maps/unused/setpieces/SHARED_biodomeExpanded.dmm @@ -2118,7 +2118,7 @@ /turf/unsimulated/floor/carpet/grime, /area/swampzone/interiors/outbuildings) "cBV" = ( -/obj/submachine/mixer, +/obj/machinery/mixer, /obj/table/auto, /turf/unsimulated/floor/green/side{ dir = 1 diff --git a/maps/unused/trunkmap.dmm b/maps/unused/trunkmap.dmm index a67ebe730bb1d..fd46ecbb37e28 100644 --- a/maps/unused/trunkmap.dmm +++ b/maps/unused/trunkmap.dmm @@ -12599,7 +12599,7 @@ /obj/rack{ dir = 1 }, -/obj/item/clothing/suit/fire, +/obj/item/clothing/suit/hazard/fire, /obj/item/tank/emergency_oxygen, /obj/item/clothing/mask/gas, /obj/item/clothing/glasses/sunglasses, @@ -22504,7 +22504,7 @@ icon_state = "0-8" }, /obj/table/auto, -/obj/submachine/mixer, +/obj/machinery/mixer, /turf/simulated/floor/specialroom/cafeteria, /area/station/crew_quarters/kitchen) "bxd" = ( @@ -30315,7 +30315,7 @@ /obj/rack{ dir = 1 }, -/obj/item/clothing/suit/fire, +/obj/item/clothing/suit/hazard/fire, /obj/item/tank/emergency_oxygen, /obj/item/clothing/mask/gas, /obj/item/clothing/glasses/toggleable/meson, diff --git a/maps/utilities/devtest.dmm b/maps/utilities/devtest.dmm index ff2803b6ddd01..059c01638194b 100644 --- a/maps/utilities/devtest.dmm +++ b/maps/utilities/devtest.dmm @@ -3816,6 +3816,7 @@ /obj/railing/red{ dir = 8 }, +/obj/item/storage/box/popsicle_sticks, /turf/simulated/floor/orangeblack, /area/station/devzone) "Xk" = ( @@ -3978,7 +3979,7 @@ /area/station/devzone) "Yr" = ( /obj/table/auto, -/obj/submachine/mixer, +/obj/machinery/mixer, /turf/simulated/floor/white, /area/station/devzone) "Yt" = ( diff --git a/maps/wrestlemap.dmm b/maps/wrestlemap.dmm index fbb136e230330..b7256c4f1112f 100644 --- a/maps/wrestlemap.dmm +++ b/maps/wrestlemap.dmm @@ -2284,7 +2284,7 @@ /area/shuttle/arrival/station) "aYH" = ( /obj/rack, -/obj/item/clothing/suit/fire, +/obj/item/clothing/suit/hazard/fire, /obj/item/clothing/mask/gas/emergency, /obj/item/clothing/head/helmet/hardhat, /obj/item/tank/air, @@ -2621,7 +2621,7 @@ /area/station/science/teleporter) "biY" = ( /obj/rack, -/obj/item/clothing/suit/fire, +/obj/item/clothing/suit/hazard/fire, /obj/item/clothing/mask/gas/emergency, /obj/item/clothing/head/helmet/hardhat, /obj/item/tank/air, @@ -3305,7 +3305,7 @@ /obj/item/clothing/head/helmet/welding, /obj/item/clothing/shoes/magnetic, /obj/item/clothing/head/rad_hood, -/obj/item/clothing/suit/rad, +/obj/item/clothing/suit/hazard/rad, /obj/machinery/light/small{ dir = 4 }, @@ -7231,7 +7231,7 @@ /area/station/hallway/primary/west) "dmw" = ( /obj/rack, -/obj/item/clothing/suit/fire, +/obj/item/clothing/suit/hazard/fire, /obj/item/clothing/mask/gas/emergency, /obj/item/clothing/head/helmet/hardhat, /obj/item/tank/air, @@ -8019,7 +8019,7 @@ /area/station/medical/robotics) "dBX" = ( /obj/rack, -/obj/item/clothing/suit/fire, +/obj/item/clothing/suit/hazard/fire, /obj/item/clothing/mask/gas/emergency, /obj/item/clothing/head/helmet/hardhat, /obj/item/tank/air, @@ -13330,7 +13330,7 @@ /area/station/hallway/secondary/entry) "fQB" = ( /obj/table/wood/auto, -/obj/item/pinpointer{ +/obj/item/pinpointer/disk{ pixel_y = 4 }, /obj/item/paper/telecrystal_update, @@ -14400,7 +14400,7 @@ /area/station/janitor/supply) "gnw" = ( /obj/rack, -/obj/item/clothing/suit/fire, +/obj/item/clothing/suit/hazard/fire, /obj/item/clothing/mask/gas/emergency, /obj/item/clothing/head/helmet/hardhat, /obj/item/tank/air, @@ -14468,7 +14468,7 @@ /area/station/maintenance/solar/north) "goF" = ( /obj/rack, -/obj/item/clothing/suit/fire, +/obj/item/clothing/suit/hazard/fire, /obj/item/clothing/mask/gas/emergency, /obj/item/clothing/head/helmet/hardhat, /obj/item/tank/air, @@ -15173,7 +15173,7 @@ /obj/item/clothing/head/helmet/welding, /obj/item/clothing/shoes/magnetic, /obj/item/clothing/head/rad_hood, -/obj/item/clothing/suit/rad, +/obj/item/clothing/suit/hazard/rad, /obj/machinery/camera{ c_tag = "autotag"; name = "autoname - SS13"; @@ -16245,7 +16245,7 @@ }) "hhh" = ( /obj/rack, -/obj/item/clothing/suit/fire, +/obj/item/clothing/suit/hazard/fire, /obj/item/clothing/mask/gas/emergency, /obj/item/clothing/head/helmet/hardhat, /obj/item/tank/air, @@ -21865,7 +21865,7 @@ pixel_x = 6; pixel_y = 10 }, -/obj/submachine/mixer, +/obj/machinery/mixer, /turf/simulated/floor/white/checker2, /area/station/crew_quarters/kitchen) "jAR" = ( @@ -23897,7 +23897,7 @@ /area/research_outpost/protest) "kwW" = ( /obj/rack, -/obj/item/clothing/suit/fire, +/obj/item/clothing/suit/hazard/fire, /obj/item/clothing/mask/gas/emergency, /obj/item/clothing/head/helmet/hardhat, /obj/item/tank/air, @@ -26280,7 +26280,7 @@ /obj/item/clothing/head/helmet/welding, /obj/item/clothing/shoes/magnetic, /obj/item/clothing/head/rad_hood, -/obj/item/clothing/suit/rad, +/obj/item/clothing/suit/hazard/rad, /obj/machinery/light/small{ dir = 8 }, @@ -54580,7 +54580,7 @@ /area/station/engine/monitoring) "xUM" = ( /obj/table/auto, -/obj/item/blueprint, +/obj/item/paper/blueprint, /obj/item/pen/pencil, /turf/simulated/floor/plating, /area/station/maintenance/west) diff --git a/maps/z2.dmm b/maps/z2.dmm index 475424848557c..a6ec846c31780 100644 --- a/maps/z2.dmm +++ b/maps/z2.dmm @@ -4553,7 +4553,7 @@ brightness = 2; dir = 4 }, -/obj/submachine/mixer, +/obj/machinery/mixer, /turf/unsimulated/floor/specialroom/freezer, /area/hospital) "ata" = ( @@ -24627,7 +24627,7 @@ "bQg" = ( /obj/table/auto, /obj/item/paper_bin{ - amount = 100; + amount_left = 100; desc = "not at all a paper bin. no sir."; name = "do-it-yourself joint construction kit" }, @@ -26505,7 +26505,7 @@ layer = 9.1; pixel_y = 21 }, -/obj/machinery/phone, +/obj/machinery/phone/unlisted, /turf/unsimulated/floor/carpet/red/fancy/edge/north, /area/syndicate_station/battlecruiser) "bXv" = ( @@ -28661,7 +28661,7 @@ /area/crunch) "cgf" = ( /obj/rack, -/obj/item/clothing/suit/rad, +/obj/item/clothing/suit/hazard/rad, /obj/item/clothing/head/rad_hood, /turf/unsimulated/floor/caution/north{ dir = 8 @@ -28696,7 +28696,8 @@ dir = 4; icon_state = "datasec"; name = "Commander's Announcement Computer"; - req_access_txt = "76" + req_access_txt = "76"; + theme = "syndicate" }, /turf/unsimulated/floor/carpet/red/fancy/edge/sw, /area/syndicate_station/battlecruiser) @@ -34797,7 +34798,7 @@ /obj/table/reinforced/auto{ layer = 2 }, -/obj/submachine/mixer, +/obj/machinery/mixer, /turf/unsimulated/floor/sanitary/white, /area/owlery/staffhall) "czR" = ( @@ -36596,7 +36597,7 @@ /area/owlery/Owlmait) "cEX" = ( /obj/item/gun/flamethrower/assembled/loaded, -/obj/item/clothing/suit/fire/armored, +/obj/item/clothing/suit/hazard/fire/armored, /obj/item/clothing/head/helmet/welding, /obj/storage/secure/crate/weapon/confiscated_items{ req_access_txt = "71" @@ -43253,15 +43254,15 @@ name = "antique plate"; pixel_y = 10 }, -/obj/item/reagent_containers/food/snacks/candy/butterscotch{ +/obj/item/reagent_containers/food/snacks/candy/wrapped_candy/butterscotch{ pixel_x = 2; pixel_y = 6 }, -/obj/item/reagent_containers/food/snacks/candy/butterscotch{ +/obj/item/reagent_containers/food/snacks/candy/wrapped_candy/butterscotch{ pixel_x = -2; pixel_y = 5 }, -/obj/item/reagent_containers/food/snacks/candy/butterscotch{ +/obj/item/reagent_containers/food/snacks/candy/wrapped_candy/butterscotch{ pixel_y = 9 }, /turf/unsimulated/floor/wood/two, @@ -44867,7 +44868,7 @@ /area/afterlife/bar/sanctuary) "daO" = ( /obj/table/auto, -/obj/submachine/mixer, +/obj/machinery/mixer, /obj/decal/cleanable/dirt, /turf/unsimulated/floor/grey, /area/afterlife/bar) @@ -49453,18 +49454,18 @@ /turf/unsimulated/floor/wood/two, /area/afterlife/bar) "dvZ" = ( -/obj/item/reagent_containers/food/snacks/candy/taffy/cherry{ +/obj/item/reagent_containers/food/snacks/candy/wrapped_candy/taffy/cherry{ pixel_x = 3 }, -/obj/item/reagent_containers/food/snacks/candy/taffy/blueraspberry{ +/obj/item/reagent_containers/food/snacks/candy/wrapped_candy/taffy/blueraspberry{ pixel_x = -12; pixel_y = 10 }, -/obj/item/reagent_containers/food/snacks/candy/taffy/cherry{ +/obj/item/reagent_containers/food/snacks/candy/wrapped_candy/taffy/cherry{ pixel_x = 7; pixel_y = -10 }, -/obj/item/reagent_containers/food/snacks/candy/taffy/blueraspberry{ +/obj/item/reagent_containers/food/snacks/candy/wrapped_candy/taffy/blueraspberry{ pixel_x = -7 }, /obj/storage/crate/wooden, @@ -52381,7 +52382,7 @@ /area/centcom/lounge) "dHk" = ( /obj/table/reinforced/auto, -/obj/submachine/mixer, +/obj/machinery/mixer, /turf/unsimulated/floor/specialroom/medbay, /area/centcom/lounge) "dHl" = ( diff --git a/maps/z3.dmm b/maps/z3.dmm index 154b9f03f8302..c6a2dc3b01d8b 100644 --- a/maps/z3.dmm +++ b/maps/z3.dmm @@ -10438,7 +10438,7 @@ /area/space) "aVj" = ( /obj/storage/crate, -/obj/item/clothing/suit/rad, +/obj/item/clothing/suit/hazard/rad, /obj/item/clothing/head/rad_hood, /obj/item/clothing/mask/gas/emergency, /turf/simulated/floor/grime, @@ -18485,7 +18485,7 @@ /area/timewarp/ship) "kKo" = ( /obj/table/reinforced/auto, -/obj/submachine/mixer, +/obj/machinery/mixer, /obj/decal/cleanable/cobweb2, /obj/decal/cleanable/dirt, /turf/simulated/floor/grime, diff --git a/rust_g.dll b/rust_g.dll index 15af63738300e..015e3dc8ff92d 100644 Binary files a/rust_g.dll and b/rust_g.dll differ diff --git a/sound/effects/faithbiblewhack.ogg b/sound/effects/faithbiblewhack.ogg new file mode 100644 index 0000000000000..cecd763e73de8 Binary files /dev/null and b/sound/effects/faithbiblewhack.ogg differ diff --git a/strings/admin_changelog.txt b/strings/admin_changelog.txt index d56f703537e5a..81290df4e7630 100644 --- a/strings/admin_changelog.txt +++ b/strings/admin_changelog.txt @@ -1,3 +1,9 @@ +(t)tue feb 20 24 +(u)Azrun +(*)IO/Lava Moon added to Find Planets and Terrainify +(t)wed jan 24 24 +(u)LeahTheTech +(*)The law rack corruption random event can now be configured with custom laws. (t)mon jan 08 24 (u)LeahTheTech (*)Added a pixel offsets editor to the admin interact menu to make pixel shifting easier. diff --git a/strings/changelog.txt b/strings/changelog.txt index dc126962fda43..60ead7296c012 100644 --- a/strings/changelog.txt +++ b/strings/changelog.txt @@ -1,4 +1,296 @@ +(t)sun feb 25 24 +(u)tanker4390 +(*)Resprited THE MONSTER and MacGuffin burgers. +(u)LeahTheTech +(+)The appendicitis random event now only affects crew that have medical records. No more NT records indicating salvager organ health. +(p)18022 +(e)⚖🧛|C-Balance, A-Gamemodes +(*)Vampiric thralls no longer have zombie arms. +(*)Vampiric thralls now rapidly lose blood and die if they stray too far from their vampire master. +(+)Vampiric thrall passive blood drain halved. +(u)GuvGuvington +(p)17932 +(e)🎨📦|C-Sprites, A-Game-Objects +(+)Updated the rubber hammer sprite. +(u)Lord_Earthfire +(p)17928 +(e)🆕📦|C-Feature, A-Game-Objects +(+)Fishes within aquatic research pools have begun to fear explosions and actively jump out of their pool when exposed to them. +(u)MeggalBozale +(p)17922 +(e)💅📄🔬|C-QoL, A-UI, A-Science +(*)Pump Control Computers now use TGUI, and can set the specific pressure of pumps they control. Give it a try! +(t)sat feb 24 24 +(u)LeahTheTech +(+)Space HVACs have had some internal mathy parts hit with a wrench and should have a bit more oomph now. +(u)Cherman0 +(p)17872 +(e)🆕⚖🌠|C-Feature, C-Balance, A-Events +(+)Using the singularity buster to destroy a singularity now causes a white hole to spawn. +(t)fri feb 23 24 +(u)IPingu +(p)17963 +(e)🔄📄🧛|C-Rework, A-UI, A-Gamemodes +(+)Converts wizard spellbook interface to TGUI +(t)thu feb 22 24 +(u)Tyrant +(p)17977 +(e)🔎📦⚙💡|C-Code-Quality, A-Game-Objects, A-Internal, A-Station-Systems +(+)Massive backend reshuffling of the airlock code has taken place. report any bugs with door bolting/opening/closing. +(t)mon feb 19 24 +(u)LeahTheTech +(+)Shrapnel created by reactor meltdowns is now a bit more destructive. +(t)fri feb 16 24 +(u)LeahTheTech +(+)Arcfiends can now *monsterscream too. +(u)Cherman0 +(p)17853 +(e)🗺💅📦🎩|A-Mapping, C-QoL, A-Game-Objects, A-Clothing +(+)The CE now spawns wearing their Aurora Belt MkII +(u)Mr. Moriarty +(p)17949 +(e)🎨📦⚗|C-Sprites, A-Game-Objects, A-Chemistry +(+)Resprited phials, beakers, round flasks, conical flasks, large beakers, large flasks, the four types of bottles, bongs, and all of their respective fluid overlays. +(t)thu feb 15 24 +(u)Sord +(+)Most in rotation maps now have airlock cyclers on some interior airlocks (Security, engineering, research, etc) where applicable. +(t)wed feb 14 24 +(u)Ikea +(p)17577 +(e)⚖🤖|C-Balance, A-Silicons +(*)Borg speed values have been changed all across the board. Treadless light borgs are the same speed. Light and heavy borgs with treads are now slower compared to before. Every other borg body type is faster, see pr for specific values. +(u)Cheekybrdy +(p)17902 +(e)🗺🎨|A-Mapping, C-Sprites +(+)Benches in science now appear in a purple variant. +(t)tue feb 13 24 +(u)Keiiro +(p)17924 +(e)🆕📦|C-Feature, A-Game-Objects +(+)Nanotrasen and Syndicate card colors are now available for selection with an Agent Card. +(u)Wire +(p)17816 +(e)🆕🚨|C-Feature, A-Admin +(*)New backend system for external API communications. This impacts systems such as bans and cloud saves, as well as many other non-gameplay related things. This is a fairly significant change so please report any weird bugs you think may be related to the GitHub issue tracker. +(t)mon feb 12 24 +(u)TDHooligan +(p)17761 +(e)⚖💅🌱|C-Balance, C-QoL, A-Hydroponics +(+)The RNG gods see botanys' plight. The top 3 genomes have, on average, dropped in value. +(t)sun feb 11 24 +(u)LeahTheTech +(+)The actionbar for opening and closing airlock wiring panels is now private (cannot be seen by other players). +(u)Sord +(+)You can now order a communications dish manudrive (and commaster disk) from cargo. +(t)fri feb 09 24 +(u)LeahTheTech +(+)The chemical request console now shows the request in the PDA notification. +(p)17915 +(e)🆕⚖|C-Feature, C-Balance +(*)Tiny items can now be hidden under floor tiles, mousetraps hidden like this will trigger when the tile is pried up again. +(u)IPingu +(p)17826 +(e)📄|A-UI +(+)Converts HVAC interface to TGUI +(u)MeggalBozale +(p)17897 +(e)💅📄|C-QoL, A-UI +(*)Tank Transfer Valves now use TGUI menus. +(t)thu feb 08 24 +(u)Tyrant +(p)17894 +(e)🗺⚖|A-Mapping, C-Balance +(*)Oshan now needs at least 14 players online to be voted for +(t)wed feb 07 24 +(u)SirNooben +(p)17845 +(e)| +(+)Makes it possible for the arithmetic comp's mode to be changed using an input coming from another comp. +(u)Sord +(+)Opening/closing the panel on an airlock now has a short action bar +(u)LeahTheTech +(+)Random characters will no longer receive broken looking partial hairstyles. +(u)Saccha +(p)17895 +(e)⚖📦|C-Balance, A-Game-Objects +(+)The floor and wall designer has a range of three tiles. +(t)tue feb 06 24 +(u)glowbold +(p)17440 +(e)🆕⚖💡|C-Feature, C-Balance, A-Station-Systems +(*)NanoTrasen has secured further discounts on station electrical equipment - details in minor notes. +(+)Lights may burn out when turned on. Burned out lights may burst if left unfixed. +(+)Over-use of light switches may cause a shock to users and/or their property. Re-secure the electrical contacts on light switches with a screwdriver. +(t)mon feb 05 24 +(u)tarmunora +(+)Increase blood absorption rate during IV-drip transfusions and dialysis +(u)GuvGuvington +(p)17867 +(e)🆕🎨📦🍝|C-Feature, C-Sprites, A-Game-Objects, A-Catering +(+)New sprites and description for white wine bottles, aswell as a change to white wine reagent colours and a reagent description. +(u)GuvGuvington +(p)17865 +(e)🆕🎨📦|C-Feature, C-Sprites, A-Game-Objects +(+)The Antique laser gun received some proper inhand sprites, both the model and functioning weapon. +(u)Tyrant +(p)17745 +(e)💅📦|C-QoL, A-Game-Objects +(+)The Paint Cans crate is now called the Artistic Supplies crate, and comes with an artist's toolbox. +(t)sun feb 04 24 +(u)LeahTheTech +(+)Transparium now hides sechud and pro-doc icons. +(+)Tumbling creepers can now be occasionally obtained from requisitions and botany white holes. +(+)The floor and wall designer no longer has infinite range. +(t)sat feb 03 24 +(u)mloccy +(p)17765 +(e)📄🍝|A-UI, A-Catering +(+)Kitchen Mixer now uses a TGUI interface +(t)fri feb 02 24 +(u)LeahTheTech +(p)17354 +(e)⚖|C-Balance +(*)Captains can no longer spawn as antagonist roles. +(u)LeahTheTech +(p)17839 +(e)🆕🧛|C-Feature, A-Gamemodes +(+)Members of the winning gang will now be displayed at round end. +(u)Sord +(p)17830 +(e)🗺|A-Mapping +(*)Cogmap2's Medbay has been completely revamped +(u)Sord +(+)The Crematorium now takes longer operate and can be escaped up to a certain point. +(u)Tyrant +(p)17841 +(e)🪲🗺|C-Bug, A-Mapping +(+)Clarion's central maintenance APC has been moved to actually be in central maintenance (and is no longer confusingly called armoury APC) +(u)Tyrant +(p)17828 +(e)🆕🗺💅|C-Feature, A-Mapping, C-QoL +(+)Some airlocks are now linked in a way that opening one door tries to close the other doors. "Keep the Air Inside!" ~John Nanotrasen probably. +(u)Chatauscours +(p)17682 +(e)🗺💅|A-Mapping, C-QoL +(+)The Donut 2 Auxilary storage has been repurposed for a construction area. +(t)wed jan 31 24 +(u)NibChocolateeny +(p)17817 +(e)🆕🌱|C-Feature, A-Hydroponics +(*)Glowing Slurry has been added as a seed infusion. Greatly randomizes stats, has a high chance of mutating a plant, and a moderate chance of adding the Unstable gene. +(u)MeggalBozale +(p)17809 +(e)💅🔄💨🔬|C-QoL, C-Rework, A-Atmospherics, A-Science +(*)Tanks will now explode in a more predictable manner. For an in-depth explanation, see the PR. +(u)NibChocolateeny +(p)17812 +(e)💅💊|C-QoL, A-Medical +(+)You no longer have to do surgery to determine - by visual observation - if someone lacks a butt. +(u)MeggalBozale +(p)17821 +(e)🪲🗺📦🍝|C-Bug, A-Mapping, A-Game-Objects, A-Catering +(+)An absurd amount of pickle jars no longer spawn on Cog1, +(u)LeahTheTech +(+)Breaching charges now break firedoors. +(+)Water coolers can now be broken by shooting them with bullets. +(t)tue jan 30 24 +(u)MarkNstein +(p)16899 +(e)🆕🗺|C-Feature, A-Mapping +(*)Nadir: Added a PTL located at the South East hull connected to the turbine and southern catalytic engines. +(u)Valtsu0 +(p)17764 +(e)🗺📄|A-Mapping, A-UI +(+)Announcement computers now use tgui +(t)mon jan 29 24 +(u)Flappybat +(p)17563 +(e)🎨⚖🔄⏰|C-Sprites, C-Balance, C-Rework, A-Status-Effects +(*)Wizard polymorph now changes you into an animal for eight minutes. When the spell expires your original human form and status will be restored. Status icon by CalliopeSoups. +(u)CalliopeSoups +(p)17658 +(e)🗺💅|A-Mapping, C-QoL +(+)Cogmap1 catering has been neatened up and widened a little. +(u)Lyy, Beshemoth +(p)17553 +(e)🆕🗺🎨🔎🍝|C-Feature, A-Mapping, C-Sprites, C-Code-Quality, A-Catering +(*)Added melted sugar cooking recipes, including rock candy, hard candy, craftable lollipops, swirly lollipops, and dragon's beard candy! +(u)LeahTheTech +(*)Popsicle sticks can now be made by whittling a wooden plank with a knife. +(t)sun jan 28 24 +(u)Tyrant +(p)17800 +(e)💅📦🌱|C-QoL, A-Game-Objects, A-Hydroponics +(+)Knitting supply boxes can now be found within ranching secure lockers and inside a wool production kit, in case you lose yours. +(t)sat jan 27 24 +(u)NibChocolateeny +(p)17772 +(e)⚖💅🌱|C-Balance, C-QoL, A-Hydroponics +(+)The radiation immunity plant gene now reduces seed damage taken from certain radioactive infusions. +(u)LeahTheTech +(*)Heads of staff can no longer be gang members (again) +(t)wed jan 24 24 +(u)Valtsu0 +(p)17338 +(e)🆕🧱|C-Feature, A-Materials +(+)Robot parts can now be reclaimed. +(t)mon jan 22 24 +(u)LeahTheTech +(p)17746 +(e)🆕🎨🤖|C-Feature, C-Sprites, A-Silicons +(*)Cyborg screen heads can now be smashed by explosions and blunt instruments, repaired with glass sheets. +(u)cringe +(p)17475 +(e)🆕🎨💨|C-Feature, C-Sprites, A-Atmospherics +(*)Vents, pumps, and injectors can now be controlled through packets! Send them a command with the help value with a packet sniffer to see what they can do. Have fun! +(u)Chasu +(p)17747 +(e)🆕💅🍝|C-Feature, C-QoL, A-Catering +(+)Pizzas can now be cut with snipping tools. Knifeless rejoice! +(t)sun jan 21 24 +(u)aloe +(*)Being thrown as a human no longer stuns you for 1 second. Subject to reversion if it messes anything up too bad. +(+)Throwing someone at a table while adjacent to the table tableslams them (like if you'd clicked the table, basically). +(u)tarmunora +(+)EMPs now wipe floppydisks +(t)sat jan 20 24 +(u)Löpz +(p)17697 +(e)🎨|C-Sprites +(+)Gave the ThinkTape and master ThinkTape new looks +(t)fri jan 19 24 +(u)Ikea +(p)17618 +(e)🎨⚖🔄🤖|C-Sprites, C-Balance, C-Rework, A-Silicons +(*)The previous behavior for oil in regards to borgs has been split into two status effects, freshly oiled and oiled. These apply speed increase and power consumption decrease in varying amounts, alongside stun resistance. +(t)thu jan 18 24 +(u)NibChocolateeny +(p)17694 +(e)⚖💅⚗🌱|C-Balance, C-QoL, A-Chemistry, A-Hydroponics +(+)LSD is now synthesized at 70 °C (343.15 K). Botanists rejoice! +(t)wed jan 17 24 +(u)LeahTheTech +(p)17691 +(e)🆕⚖🤖|C-Feature, C-Balance, A-Silicons +(+)Robotic arms can now be emagged. +(u)Lyy +(p)17686 +(e)🆕📦|C-Feature, A-Game-Objects +(+)Pizza boxes can now be rigged with mousetraps or landmines. +(u)Valtsu0 +(p)17597 +(e)🆕🔊📦|C-Feature, C-Sound, A-Game-Objects +(*)Chaplains will now gather faith from people in the chapel. Atheist chaplains may have a harder time with this... Faith will increase the healing done by the bible +(u)LeahTheTech +(p)17692 +(e)⚖💨|C-Balance, A-Atmospherics +(*)Tank explosions now scale with the volume of the tank, smaller tank = less boom :( +(t)tue jan 16 24 +(u)Cheekybrdy +(p)17674 +(e)🗺|A-Mapping +(+)Moved the QM locker to a new room inside cargo from refinery on Cogmap1. (t)mon jan 15 24 (u)Mordent (p)17606 diff --git a/strings/chemistry_tools.txt b/strings/chemistry_tools.txt index d7f698374f2db..cb66a51a9ca9f 100644 --- a/strings/chemistry_tools.txt +++ b/strings/chemistry_tools.txt @@ -11,5 +11,5 @@ BOOZE_flavors@=aranesp@,vanilla@,rum@,vodka@,anti_fart@,atropine@,ephedrine@,sug COLA_prefixes@=Dr@,Mountain@,Pete's Potable@,Mister@,Bebop@,Mingus@,Syndie@,Wizard@,Changeling@,Vampire@,NanoTrasen@,Iron@,Red@,Orange@,Yellow@,Green@,Blue@,Purple@,Pink@,Special@,Sour@,Toxic@,Fizzy@,Smooth@,Robust@,Diet@,Pubbie@,Clown@,Strange@,Hyper@,Cream@,Ginger@,Dandelion@,Orange@,Grape@,Citrus@,Fruit Punch@,Berry@,Mango@,Melon@,Hemlock@,Licorice@,Strawberry@,Raspberry@,Blueberry@,Pumkpin Spice@,Marshmallow@,Mint@,Taurine@,Ginsing@,Lemon-Lime@,Green Apple@,Blue Raspberry@,Carrot@,Royal Jelly@,Passion Fruit@,Prickly Pear@,Durian@,Star Fruit@,Kiwi@,Beetroot@,Egg@,Eggplant@,Green Tea@,Birthday Cake@,Brine@,Root@,Protein@,Gamma@,Mystery@,Gamer@,Gaming@,Party@,Werewolf@,Hot@, COLA_suffixes@=Poo@,Water@,Sweat@,Ale@,Iced Tea@,Potion@,Poison@,Brew@,Soda@,Cola@,Pop@,Drink@,Tears@,Neo@,Zero@,and Burdock@,Punch@,Bomb@,Beverage@,Refreshment@,Tears@,Blast@,Essence@,Shake@,Twist@,Tonic@,Slush@,Explosion@,Singularity@,Quasar@,Supernova@,Draft@,Juice@,Smoothie@,Lemon@,Gold@,Cream@,Xtra@,Energy@,Good@,Shandy@,Milk@,Werewolf COLA_flavors@=sweet_tea@,tonic@,pubbie tears@,bee@,bacon_grease@,chocolate_milk@,strawberry_milk@,espresso@,energydrink@,tea@,honey_tea@,mint_tea@,ginger_ale@,chocolate@,honey@,vanilla@,cornsyrup@,mugwort@,mint@,juice_lime@,juice_cran@,juice_orange@,juice_lemon@,juice_tomato@,juice_strawberry@,juice_cherry@,juice_pineapple@,juice_apple@,juice_peach@,juice_pickle@,cocktail_citrus@,limeade@,lemonade@,coconut_milk@,cold_medicine@,menthol -WEED_prefixes@=gorilla@,phat@,panda@,island@,afghani@,nepalese@,jamaican@,ambrosia@,amnesia@,apple@,lifted@,ice cream@,chocolate@,cake@,gelato@,banana@,cookie@,biscotti@,pancake@,magic@,truffle@,black@,white@,blue@,purple@,yellow@,orange@,green@,dream@,guava@,mango@,spice@,waffle@,blueberry@,strawberry@,donut@,piss@,fuego@,clout@,spankin@,dank@,dank@,divine@,spiritual@,metamorphic@,symbiotic@,biological@,metaphysical@,legendary@,sour@,sweet@,micro@,mini@,mega@,maximum@,mind-altering@,lung-slaughtering@,jealous@,golden@,silver@,grape@,greasy@,slimy@,icky@,sticky@,goopy@,skittles@,honey@,savage@,demonic@,angelic@,heavenly@,hellish@,evil@,good-good@,unstoppable@,illegal@,insane@,deranged@,mentally ill@,finest@,ass@,wine@,booze@,liquor@,champagne@,moonshine@,federal@,under active investigation by the galactic commission@,legacy@,organic@,popcorn@,brain damage@,organ failure@,blunt force trauma@,trainwreck@,car crash@,automobile accident@,criminal activity@,luxury@,miracle@,indecisive@,hungry@,stoner@,oreo@,papaya@,plaid@,permanent@,untouchable@,inescapable@,platinum@,dirt@,spiked@,star@,moon@,sun@,solar@,celestial@,royal@,ultrafast@,ultralight@,disco@,pure@,bomb@,explosive@,glue@,throat-gripping@,cranking@,venom@,poisonous@,deadly@,wet@,bubbly@,XXX@,banger@,baller@,top-notch@,freaky@,wack@,wacky@,clown-ass@,clown@,captain's private reserve@,sexy@,top-notch@,vibrant@,highly-saturated@,greyscale@,hallucinogenic@,grampa's@,compressed@,pixellated@,flaming@,+2@,illuminating@,visionary@,wholesome@,huggable@,violent@,ultraviolent@,butt@,adorable@,meta@,imbalanced@,atomized@,nefarious@,questionable@,aesthetic@,bisexual@,dragon +WEED_prefixes@=gorilla@,phat@,panda@,island@,afghani@,nepalese@,jamaican@,ambrosia@,amnesia@,apple@,lifted@,ice cream@,chocolate@,cake@,gelato@,banana@,cookie@,biscotti@,pancake@,magic@,truffle@,black@,white@,blue@,purple@,yellow@,orange@,green@,dream@,guava@,mango@,spice@,waffle@,blueberry@,strawberry@,donut@,piss@,fuego@,clout@,spankin@,dank@,dank@,divine@,spiritual@,metamorphic@,symbiotic@,biological@,metaphysical@,legendary@,sour@,sweet@,micro@,mini@,mega@,maximum@,mind-altering@,lung-slaughtering@,jealous@,golden@,silver@,grape@,greasy@,slimy@,icky@,sticky@,goopy@,skittles@,honey@,savage@,demonic@,angelic@,heavenly@,hellish@,evil@,good-good@,unstoppable@,illegal@,insane@,deranged@,mentally ill@,finest@,ass@,wine@,booze@,liquor@,champagne@,moonshine@,federal@,under active investigation by the galactic commission@,legacy@,organic@,popcorn@,brain damage@,organ failure@,blunt force trauma@,trainwreck@,car crash@,automobile accident@,criminal activity@,luxury@,miracle@,indecisive@,hungry@,stoner@,oreo@,papaya@,plaid@,permanent@,untouchable@,inescapable@,platinum@,dirt@,spiked@,star@,moon@,sun@,solar@,celestial@,royal@,ultrafast@,ultralight@,disco@,pure@,bomb@,explosive@,glue@,throat-gripping@,cranking@,venom@,poisonous@,deadly@,wet@,bubbly@,XXX@,banger@,baller@,top-notch@,freaky@,wack@,wacky@,clown-ass@,clown@,captain's private reserve@,top-notch@,vibrant@,highly-saturated@,greyscale@,hallucinogenic@,grampa's@,compressed@,pixellated@,flaming@,+2@,illuminating@,visionary@,wholesome@,huggable@,violent@,ultraviolent@,butt@,adorable@,meta@,imbalanced@,atomized@,nefarious@,questionable@,aesthetic@,bisexual@,dragon WEED_suffixes@=loud@,mid@,kush@,pack@,dank@,weed@,marijuana@,mary jane@,green@,pot@,bud@,ganja@,herb@,chronic@,hash@,reefer@,grass@,dope \ No newline at end of file diff --git a/strings/roundstart_hints.txt b/strings/roundstart_hints.txt index ce44b189c8754..08f36bd0849b1 100644 --- a/strings/roundstart_hints.txt +++ b/strings/roundstart_hints.txt @@ -159,4 +159,5 @@ The Head of Security's boots have a distinctive footstep noise. Keep your ears s Most weapons will cause blood spatter on the victim and the assailant. A blood-covered person sprinting down the hall will attract interest. Showering will remove all the blood from you and your clothes. Click yourself with help intent if you're cold; you'll shake yourself to warm up and partially undo the slowdowns from it. Clothing and some chemicals can also help keep you warm. Different items do different types of damage in different amounts, both to your health and your stamina. A weapon that does low physical damage may do high stamina damage, which can keep a person locked in "stam crit", preventing them from fighting back. -The cloning console displays a red flashing icon when someone can be cloned. \ No newline at end of file +The cloning console displays a red flashing icon when someone can be cloned. +Shuttle votes aren't in the rules, if you have access and the station's in bad shape you can call the shuttle! \ No newline at end of file diff --git a/tgui/packages/tgui/components/goonstation/ListGrid/Cell.tsx b/tgui/packages/tgui/components/goonstation/ListGrid/Cell.tsx new file mode 100644 index 0000000000000..3057e3ba059f5 --- /dev/null +++ b/tgui/packages/tgui/components/goonstation/ListGrid/Cell.tsx @@ -0,0 +1,31 @@ +/** + * @file + * @copyright 2023 + * @author Mordent (https://github.com/mordent-goonstation) + * @author ZeWaka (https://github.com/ZeWaka) + * @license ISC + */ + +import { Box, Stack, Tooltip } from '../../'; +import { ColumnConfig, isValuedColumnConfig, RowId } from './type'; + +interface CellProps<T extends object, V> { + columnConfig: ColumnConfig<T, V>; + data: T; + rowId: RowId; +} + +export const Cell = <T extends object, V>(props: CellProps<T, V>) => { + const { columnConfig: config, data, rowId } = props; + const { basis, getValueTooltip, grow, renderContents } = config; + const hasValue = isValuedColumnConfig(config); + const value = hasValue ? config.getValue(data) : undefined; + const tooltipText = getValueTooltip?.(data); + const contents = renderContents ? renderContents({ data, rowId, value }) : <Box>{value}</Box>; + const cellContents = tooltipText ? <Tooltip content={tooltipText}>{contents}</Tooltip> : contents; + return ( + <Stack.Item basis={basis} grow={grow}> + {cellContents} + </Stack.Item> + ); +}; diff --git a/tgui/packages/tgui/components/goonstation/ListGrid/HeaderCell.tsx b/tgui/packages/tgui/components/goonstation/ListGrid/HeaderCell.tsx new file mode 100644 index 0000000000000..f20544038ae56 --- /dev/null +++ b/tgui/packages/tgui/components/goonstation/ListGrid/HeaderCell.tsx @@ -0,0 +1,16 @@ +import { Stack } from '../../Stack'; +import type { ColumnConfig } from './type'; + +export interface HeaderCellProps<T extends object, V> { + config: ColumnConfig<T, V>; +} + +export const HeaderCell = <T extends object, V>(props: HeaderCellProps<T, V>) => { + const { config } = props; + const { basis, grow, header } = config; + return ( + <Stack.Item basis={basis} grow={grow} bold> + {header} + </Stack.Item> + ); +}; diff --git a/tgui/packages/tgui/components/goonstation/ListGrid/index.ts b/tgui/packages/tgui/components/goonstation/ListGrid/index.ts new file mode 100644 index 0000000000000..2c67cf4c1bf9f --- /dev/null +++ b/tgui/packages/tgui/components/goonstation/ListGrid/index.ts @@ -0,0 +1,3 @@ +export { Cell } from './Cell'; +export { HeaderCell } from './HeaderCell'; +export type { ColumnConfig } from './type'; diff --git a/tgui/packages/tgui/components/goonstation/ListGrid/type.ts b/tgui/packages/tgui/components/goonstation/ListGrid/type.ts new file mode 100644 index 0000000000000..a772a3ab71af1 --- /dev/null +++ b/tgui/packages/tgui/components/goonstation/ListGrid/type.ts @@ -0,0 +1,31 @@ +import type { InfernoNode } from 'inferno'; + +export type RowId = string; + +interface ValuedColumnConfig<T extends object, V> { + getValue: (data: T) => V; + renderContents?: (options: { data: T; rowId: RowId; value: V }) => InfernoNode; +} +type ValuelessColumnConfig<T extends object> = { + renderContents: (options: { data: T; rowId: RowId }) => InfernoNode; +}; +type ValueColumnConfig<T extends object, V> = ValuedColumnConfig<T, V> | ValuelessColumnConfig<T>; + +export const isValuedColumnConfig = <T extends object, V>( + config: ValueColumnConfig<T, V> +): config is ValuedColumnConfig<T, V> => 'getValue' in config; + +interface CoreColumnConfig<T extends object> { + id: string; + getValueTooltip?: (data: T) => InfernoNode; + header: string; +} + +interface LayoutColumnConfig { + basis?: number; + grow?: number | boolean; +} + +export type ColumnConfig<T extends object, V = unknown> = CoreColumnConfig<T> & + ValueColumnConfig<T, V> & + LayoutColumnConfig; diff --git a/tgui/packages/tgui/interfaces/AnnouncementComputer/automatic.tsx b/tgui/packages/tgui/interfaces/AnnouncementComputer/automatic.tsx new file mode 100644 index 0000000000000..68b6e6743df04 --- /dev/null +++ b/tgui/packages/tgui/interfaces/AnnouncementComputer/automatic.tsx @@ -0,0 +1,37 @@ +/** + * @file + * @copyright 2024 + * @author Valtsu0 (https://github.com/Valtsu0) + * @license ISC + */ + +import { useBackend } from '../../backend'; +import { Input, Section, Stack } from '../../components'; +import { AnnouncementCompData } from './type'; + +export interface AutomaticAnnouncementData { + arrivalalert: string; +} + +export const AutomaticAnnouncement = (_props, context) => { + const { act, data } = useBackend<AnnouncementCompData>(context); + const { arrivalalert } = data; + + return ( + <Section title="Arrival Announcement Message"> + <Stack vertical> + <Stack.Item> + Valid tokens: $NAME, $JOB, $STATION, $THEY, $THEM, $THEIR. Leave the field empty for no message. + </Stack.Item> + <Stack.Item> + <Input + fluid + onChange={(e, value) => act('arrival_message', { value })} + placeholder="Type something..." + value={arrivalalert} + /> + </Stack.Item> + </Stack> + </Section> + ); +}; diff --git a/tgui/packages/tgui/interfaces/AnnouncementComputer/index.tsx b/tgui/packages/tgui/interfaces/AnnouncementComputer/index.tsx new file mode 100644 index 0000000000000..3df0c60a8b5b6 --- /dev/null +++ b/tgui/packages/tgui/interfaces/AnnouncementComputer/index.tsx @@ -0,0 +1,28 @@ +/** + * @file + * @copyright 2024 + * @author Valtsu0 (https://github.com/Valtsu0) + * @license ISC + */ + +import { useBackend } from '../../backend'; +import { Window } from '../../layouts'; +import { AutomaticAnnouncement } from './automatic'; +import { ManualAnnouncement } from './manual'; +import { AnnouncementCompData } from './type'; + +export const AnnouncementComputer = (_props, context) => { + const { act, data } = useBackend<AnnouncementCompData>(context); + const { announces_arrivals, theme } = data; + + return ( + <Window theme={theme} width={400} height={announces_arrivals ? 326 : 215}> + <Window.Content textAlign="center"> + <ManualAnnouncement /> + {!!announces_arrivals && ( + <AutomaticAnnouncement /> + )} + </Window.Content> + </Window> + ); +}; diff --git a/tgui/packages/tgui/interfaces/AnnouncementComputer/manual.tsx b/tgui/packages/tgui/interfaces/AnnouncementComputer/manual.tsx new file mode 100644 index 0000000000000..072a3ba61c3d7 --- /dev/null +++ b/tgui/packages/tgui/interfaces/AnnouncementComputer/manual.tsx @@ -0,0 +1,102 @@ +/** + * @file + * @copyright 2024 + * @author Valtsu0 (https://github.com/Valtsu0) + * @license ISC + */ + +import { useBackend, useSharedState } from '../../backend'; +import { AnimatedNumber, Button, Input, Section, Stack } from '../../components'; +import { formatTime } from '../../format'; +import { AnnouncementCompData } from './type'; + +type Status = { + canTransmit: boolean; + text: string; + color: string; +}; + +export const ManualAnnouncement = (_props, context) => { + const { act, data } = useBackend<AnnouncementCompData>(context); + const { card_name, status_message, time, max_length } = data; + + const [input, setInput] = useSharedState(context, "input", ""); + const [oldInput, setOldInput] = useSharedState(context, "oldInput", ""); + + let status : Status = getStatus(input, max_length, status_message, time); + + const onChange = () => { + if (input === oldInput) { + return; + } + act('log', { value: input, old: oldInput }); + setOldInput(input); + }; + + const onTransmit = () => { + act('transmit', { value: input }); + setInput(""); + setOldInput(""); + }; + + const onType = (event) => { + event.preventDefault(); + const target = event.target; + setInput(target.value); + status = getStatus(input, max_length, status_message, time); + }; + + return ( + <Section title="Make an Announcement"> + <Stack vertical> + <Stack.Item color={status["color"]}> + Status: {status["text"]} + </Stack.Item> + <Stack.Item> + <Button + onClick={() => act("id")} + icon="eject" + preserveWhitespace> + {card_name || "Insert card"} + </Button> + </Stack.Item> + <Stack.Item> + <AnimatedNumber value={time} format={formatTime} /> + </Stack.Item> + <Stack.Item> + <Input + autoFocus + fluid + onInput={(e) => onType(e)} + onChange={() => onChange()} + placeholder="Type something..." + value={input} + /> + </Stack.Item> + <Stack.Item label="Button" fontSize="16px"> + <Button + icon="bullhorn" + content="Transmit" + fluid + disabled={!status["canTransmit"]} + onClick={() => onTransmit()} /> + </Stack.Item> + </Stack> + </Section> + ); +}; + +const getStatus = (input, max_length, status, time) => { + if (time > 0) { + return { canTransmit: false, text: "Broadcast delay in effect.", color: "bad" }; + } else if (status === "Insert Card") { + return { canTransmit: false, text: "Insert Card", color: "average" }; + } else if (status) { + return { canTransmit: false, text: status, color: "bad" }; + } else if (!!max_length && input.length > max_length) { + return { canTransmit: false, text: `Message too long, maximium is ${max_length} characters.`, color: "average" }; + } else if (!input) { + return { canTransmit: false, text: "Input message.", color: "average" }; + } + return { canTransmit: true, text: "Ready to transmit!", color: "good" }; +}; diff --git a/tgui/packages/tgui/interfaces/AnnouncementComputer/type.tsx b/tgui/packages/tgui/interfaces/AnnouncementComputer/type.tsx new file mode 100644 index 0000000000000..a64f5b208a0b9 --- /dev/null +++ b/tgui/packages/tgui/interfaces/AnnouncementComputer/type.tsx @@ -0,0 +1,16 @@ +/** + * @file + * @copyright 2024 + * @author Valtsu0 (https://github.com/Valtsu0) + * @license ISC + */ + +export interface AnnouncementCompData { + announces_arrivals: boolean; + arrivalalert: string; + theme: string; + card_name: string; + status_message: string; + time: number; + max_length: number; +} diff --git a/tgui/packages/tgui/interfaces/BanPanel/BanList/BanList.tsx b/tgui/packages/tgui/interfaces/BanPanel/BanList/BanList.tsx new file mode 100644 index 0000000000000..58c83817a6458 --- /dev/null +++ b/tgui/packages/tgui/interfaces/BanPanel/BanList/BanList.tsx @@ -0,0 +1,104 @@ +/** + * @file + * @copyright 2023 + * @author Mordent (https://github.com/mordent-goonstation) + * @author ZeWaka (https://github.com/ZeWaka) + * @license ISC + */ + +import { useLocalState } from '../../../backend'; +import { Button, Dropdown, Flex, Input, NumberInput, Section, Stack } from '../../../components'; +import { HeaderCell } from '../../../components/goonstation/ListGrid'; +import { useBanPanelBackend } from '../useBanPanelBackend'; +import type { BanListTabData } from '../type'; +import { BanPanelSearchFilter } from '../type'; +import { BanListItem } from './BanListItem'; +import { buildColumnConfigs } from './columnConfig'; +import type { BanResource } from '../apiType'; + +interface BanListProps { + data: BanListTabData; +} + +const DEFAULT_PAGE_SIZE = 30; +const filterOptions = Object.keys(BanPanelSearchFilter); +const getRowId = (data: BanResource) => `${data.id}`; + +export const BanList = (props: BanListProps, context) => { + const { data } = props; + const { ban_list, per_page } = data; + const { action } = useBanPanelBackend(context); + const { search_response } = ban_list ?? {}; + const { data: banResources } = search_response ?? {}; + const [searchText, setSearchText] = useLocalState(context, 'searchText', ''); + const [searchFilter, setSearchFilter] = useLocalState(context, 'searchFilter', BanPanelSearchFilter.ckey); + const handleSearch = () => action.searchBans(searchText, BanPanelSearchFilter[searchFilter]); + const handleSearchTextChange = (_e, value: string) => setSearchText(value); + const handlePreviousPage = action.navigatePreviousPage; + const handleNextPage = action.navigateNextPage; + const handlePerPageChange = (_e, value: number) => action.setPerPage(value); + const handleEditBan = (id: number) => action.editBan(id); + const handleDeleteBan = (id: number) => action.deleteBan(id); + const columnConfigs = buildColumnConfigs({ + editBan: handleEditBan, + deleteBan: handleDeleteBan, + }); + return ( + <> + <Stack.Item> + <Flex pt={1}> + <Flex.Item direction="column" mx={1} wrap="wrap"> + <Input value={searchText} onInput={handleSearchTextChange} mr={1} /> + <Button icon="magnifying-glass" onClick={handleSearch}> + Search + </Button> + </Flex.Item> + <Flex.Item grow> + <Dropdown + width={11} + icon="filter" + nochevron + selected={searchFilter} + options={filterOptions} + onSelected={(value: BanPanelSearchFilter) => { + setSearchFilter(value); + }} + /> + </Flex.Item> + </Flex> + </Stack.Item> + <Stack.Item> + <Section> + <Stack> + {columnConfigs.map((columnConfig) => ( + <HeaderCell key={columnConfig.id} config={columnConfig} /> + ))} + </Stack> + </Section> + </Stack.Item> + <Stack.Item grow> + <Section fill scrollable> + <Stack vertical zebra mb={1}> + {(banResources ?? []).map((banData) => ( + <BanListItem key={banData.id} columnConfigs={columnConfigs} data={banData} rowId={getRowId(banData)} /> + ))} + </Stack> + </Section> + </Stack.Item> + <Stack.Item> + <Section> + <Button onClick={handlePreviousPage}>Prev</Button> + <Button onClick={handleNextPage}>Next</Button> + {/* TODO: Page selector should float right */} + <NumberInput + minValue={5} + maxValue={100} + value={per_page ?? DEFAULT_PAGE_SIZE} + placeholder={DEFAULT_PAGE_SIZE} + onChange={handlePerPageChange} + /> + </Section> + </Stack.Item> + </> + ); +}; diff --git a/tgui/packages/tgui/interfaces/BanPanel/BanList/BanListItem.tsx b/tgui/packages/tgui/interfaces/BanPanel/BanList/BanListItem.tsx new file mode 100644 index 0000000000000..bb567cc1faf94 --- /dev/null +++ b/tgui/packages/tgui/interfaces/BanPanel/BanList/BanListItem.tsx @@ -0,0 +1,29 @@ +/** + * @file + * @copyright 2023 + * @author Mordent (https://github.com/mordent-goonstation) + * @license ISC + */ + +import { Stack } from '../../../components'; +import { BanResource } from '../apiType'; +import { Cell, ColumnConfig } from '../../../components/goonstation/ListGrid'; + +interface BanListItemProps { + columnConfigs: ColumnConfig<BanResource>[]; + data: BanResource; + rowId: string; +} + +export const BanListItem = (props: BanListItemProps) => { + const { columnConfigs, data, rowId } = props; + return ( + <Stack.Item> + <Stack> + {columnConfigs.map((columnConfig) => ( + <Cell key={columnConfig.id} columnConfig={columnConfig} data={data} rowId={rowId} /> + ))} + </Stack> + </Stack.Item> + ); +}; diff --git a/tgui/packages/tgui/interfaces/BanPanel/BanList/columnConfig.tsx b/tgui/packages/tgui/interfaces/BanPanel/BanList/columnConfig.tsx new file mode 100644 index 0000000000000..fafa05673f672 --- /dev/null +++ b/tgui/packages/tgui/interfaces/BanPanel/BanList/columnConfig.tsx @@ -0,0 +1,136 @@ +/** + * @file + * @copyright 2023 + * @author Mordent (https://github.com/mordent-goonstation) + * @author ZeWaka (https://github.com/ZeWaka) + * @license ISC + */ + +import { Button } from '../../../components'; +import type { ColumnConfig } from '../../../components/goonstation/ListGrid'; +import type { BanResource } from '../apiType'; +import dayjs from 'dayjs'; +import duration from 'dayjs/plugin/duration'; +import relativeTime from 'dayjs/plugin/relativeTime'; + +dayjs.extend(duration); +dayjs.extend(relativeTime); + +interface ColumnConfigsCallbacks { + deleteBan: (id: number) => void; + editBan: (id: number) => void; +} + +export const buildColumnConfigs = (callbacks: ColumnConfigsCallbacks): ColumnConfig<BanResource>[] => [ + { + header: '', + id: 'actions', + renderContents: ({ rowId }) => ( + <> + <Button key="edit" icon="pencil" onClick={() => callbacks.editBan(rowId)} /> + <Button key="delete" icon="trash" onClick={() => callbacks.deleteBan(rowId)} color="red" /> + </> + ), + basis: 4.5, + }, + { + header: 'ID', + id: 'id', + getValue: (data) => data.id, + renderContents: ({ value }) => <a href={`https://staging.goonhub.com/admin/bans/${value}`}>{value}</a>, + basis: 4, + }, + { + header: 'ckey', + id: 'ckey', + getValue: (data) => data.original_ban_detail.ckey ?? 'N/A', + renderContents: ({ value }) => <a href={`https://staging.goonhub.com/admin/players/${value}`}>{value}</a>, + basis: 10, // I think 32 chars is the max, this is slightly below but whatever + grow: 1, + }, + { + header: 'Duration', + id: 'duration', + getValue: (data) => { + if (data.expires_at === null) { + if (data.requires_appeal) { + return 'Until Appeal'; + } + return 'Permanent'; + } + const created_at = dayjs(data.created_at); + const expires_at = dayjs(data.expires_at); + const duration = dayjs.duration(created_at.diff(expires_at)); + return duration.humanize(); + }, + getValueTooltip: (data) => { + // Banned Date + const createdAtDate = dayjs(data.created_at); + let tooltipText = [<>{createdAtDate.format('[Banned ] YYYY-MM-DD HH:mm [UTC]\n')}</>]; + + // Expiration Date + if (data.expires_at === null) { + // Permanent + tooltipText.push(<strong>Permanent</strong>); + } else { + const expiresAtDate = dayjs(data.expires_at); + tooltipText.push(<>{expiresAtDate.format('[Expires] YYYY-MM-DD HH:mm [UTC]')}</>); + } + + // Deletion Date + if (data.deleted_at !== null) { + tooltipText.push(<>{dayjs(data.deleted_at).format('\n[Deleted] YYYY-MM-DD HH:mm [UTC]')}</>); + } + return <pre>{tooltipText}</pre>; + }, + renderContents: (options: { data: BanResource; value: unknown }) => { + if (options.data.deleted_at !== null) { + return <div className="ExpiredBan BanText">{options.value}</div>; + } + return <div className="CurrentBan BanText">{options.value}</div>; + }, + basis: 7.5, + }, + { + header: 'Server', + id: 'server', + getValue: (data) => data.server_id ?? 'All', + basis: 4, + }, + { + header: 'Admin', + id: 'admin', + getValue: (data) => data.game_admin ?? 'N/A', + renderContents: ({ value }) => ( + <a href={`https://staging.goonhub.com/admin/game-admins/${value.id}`} class="NoColor"> + {value.name} + </a> + ), + getValueTooltip: (data) => { + if (data.game_admin === null) { + return 'N/A'; + } + return `${data.game_admin.ckey} (${data.game_admin_id})`; + }, + basis: 6.5, + }, + { + header: 'Reason', + id: 'reason', + getValue: (data) => data.reason, + basis: 10, + grow: 10, + }, + { + header: 'CID', + id: 'cid', + getValue: (data) => data.original_ban_detail.comp_id ?? 'N/A', + basis: 7, + }, + { + header: 'IP', + id: 'ip', + getValue: (data) => data.original_ban_detail.ip ?? 'N/A', + basis: 9, + }, +]; diff --git a/tgui/packages/tgui/interfaces/BanPanel/JobBanList.tsx b/tgui/packages/tgui/interfaces/BanPanel/JobBanList.tsx new file mode 100644 index 0000000000000..1183ad573b4b5 --- /dev/null +++ b/tgui/packages/tgui/interfaces/BanPanel/JobBanList.tsx @@ -0,0 +1,12 @@ +/** + * @file + * @copyright 2023 + * @author Mordent (https://github.com/mordent-goonstation) + * @license ISC + */ + +import { Section } from '../../components'; + +export const JobBanList = (_props, _context) => { + return <Section>Not yet implemented</Section>; +}; diff --git a/tgui/packages/tgui/interfaces/BanPanel/apiType.ts b/tgui/packages/tgui/interfaces/BanPanel/apiType.ts new file mode 100644 index 0000000000000..1a566a1bbf695 --- /dev/null +++ b/tgui/packages/tgui/interfaces/BanPanel/apiType.ts @@ -0,0 +1,87 @@ +/** + * @file + * @copyright 2023 + * @author Mordent (https://github.com/mordent-goonstation) + * @license ISC + */ + +import { BooleanLike } from 'common/react'; + +export interface BanResource { + id: number; + round_id: number | null; + game_admin_id: number | null; + server_id: string | null; + reason: string; + duration: string; + expires_at: string | null; + created_at: string; + updated_at: string | null; + deleted_at: string | null; + game_admin?: GameAdmin; + game_round?: GameRoundResource; + original_ban_detail?: { + id: number; + ban_id: number; + ckey: string; + comp_id: string; + ip: string; + }; + details: BanDetailResource[]; + requires_appeal: BooleanLike; +} + +interface BanDetailResource { + id: number; + ban_id: number; + ckey: string | null; + comp_id: string | null; + ip: string | null; + created_at: string | null; + updated_at: string | null; + deleted_at: string | null; +} + +interface GameRoundResource { + id: number; + server_id: string | null; + map: string | null; + game_type: string | null; + rp_mode: boolean; + crashed: boolean; + ended_at: string | null; + created_at: string | null; + updated_at: string | null; +} + +export interface JobBanResource { + id: number; + round_id: number | null; + game_admin_id: number | null; + server_id: string | null; + ckey: string; + banned_from_job: string; + reason: string; + expires_at: string | null; + created_at: string; + updated_at: string | null; + deleted_at: string | null; + game_admin?: GameAdmin; +} + +export interface GameAdmin { + id: number; + ckey: string; + name: string; +} + +export interface PaginationMetaData { + current_page: number; + from: number; + last_page: number; + links: unknown; + path: string; + per_page: number; + to: number; + total: number; +} diff --git a/tgui/packages/tgui/interfaces/BanPanel/index.tsx b/tgui/packages/tgui/interfaces/BanPanel/index.tsx new file mode 100644 index 0000000000000..f9fdd7bd096be --- /dev/null +++ b/tgui/packages/tgui/interfaces/BanPanel/index.tsx @@ -0,0 +1,43 @@ +/** + * @file + * @copyright 2023 + * @author Mordent (https://github.com/mordent-goonstation) + * @author ZeWaka (https://github.com/ZeWaka) + * @license ISC + */ + +import { Stack, Tabs } from '../../components'; +import { Window } from '../../layouts'; +import { BanList } from './BanList/BanList'; +import { JobBanList } from './JobBanList'; +import { BanPanelTab } from './type'; +import { useBanPanelBackend } from './useBanPanelBackend'; + +export const BanPanel = (_props, context) => { + const { action, data } = useBanPanelBackend(context); + const { current_tab } = data; + return ( + <Window width={1100} height={640} title="Ban Panel" className="BanPanel"> + <Window.Content> + <Stack fill vertical> + <Stack.Item> + <Tabs> + <Tabs.Tab + onClick={() => action.setTab(BanPanelTab.BanList)} + selected={current_tab === BanPanelTab.BanList}> + Ban List + </Tabs.Tab> + <Tabs.Tab + onClick={() => action.setTab(BanPanelTab.JobBanList)} + selected={current_tab === BanPanelTab.JobBanList}> + Job Ban List + </Tabs.Tab> + </Tabs> + </Stack.Item> + {current_tab === BanPanelTab.BanList && <BanList data={data} />} + {current_tab === BanPanelTab.JobBanList && <JobBanList />} + </Stack> + </Window.Content> + </Window> + ); +}; diff --git a/tgui/packages/tgui/interfaces/BanPanel/type.ts b/tgui/packages/tgui/interfaces/BanPanel/type.ts new file mode 100644 index 0000000000000..83998c5b41a03 --- /dev/null +++ b/tgui/packages/tgui/interfaces/BanPanel/type.ts @@ -0,0 +1,64 @@ +/** + * @file + * @copyright 2023 + * @author Mordent (https://github.com/mordent-goonstation) + * @author ZeWaka (https://github.com/ZeWaka) + * @license ISC + */ + +import type { BanResource, PaginationMetaData } from './apiType'; + +interface BanPanelBaseData { + current_tab: BanPanelTab; +} + +interface PaginatedSearchResponse<T> { + data: T[]; + links: unknown; + meta: PaginationMetaData; +} + +interface BanListData { + search_response: PaginatedSearchResponse<BanResource> | null; +} + +export interface BanListTabData extends BanPanelBaseData { + current_tab: BanPanelTab.BanList; + ban_list: BanListData; + per_page: number; +} + +interface JobBanListTabData extends BanPanelBaseData { + current_tab: BanPanelTab.JobBanList; +} + +export type BanPanelData = BanListTabData | JobBanListTabData; + +// sync with code/modules/admin/ban_panel.dm BAN_PANEL_TAB defines +export enum BanPanelTab { + BanList = 'ban_list', + JobBanList = 'job_ban_list', +} + +// sync with code/modules/admin/ban_panel.dm BAN_PANEL_ACTION defines +export enum BanPanelAction { + SearchBans = 'ban_search', + NavigatePreviousPage = 'page_prev', + NavigateNextPage = 'page_next', + SetPerPage = 'set_perpage', + SetTab = 'set_tab', + EditBan = 'edit_ban', + DeleteBan = 'delete_ban', +} + +// Options to filter by +export enum BanPanelSearchFilter { + ID = 'id', + ckey = 'ckey', + og_ckey = 'original_ban_ckey', + Server = 'server', + Admin = 'admin_ckey', + Reason = 'reason', + CID = 'comp_id', + IP_Address = 'ip' +} diff --git a/tgui/packages/tgui/interfaces/BanPanel/useBanPanelBackend.ts b/tgui/packages/tgui/interfaces/BanPanel/useBanPanelBackend.ts new file mode 100644 index 0000000000000..4d4a71c2ea252 --- /dev/null +++ b/tgui/packages/tgui/interfaces/BanPanel/useBanPanelBackend.ts @@ -0,0 +1,30 @@ +/** + * @file + * @copyright 2023 + * @author Mordent (https://github.com/mordent-goonstation) + * @author ZeWaka (https://github.com/ZeWaka) + * @license ISC + */ + +import { useBackend } from '../../backend'; +import { BanPanelAction, BanPanelSearchFilter, BanPanelTab } from './type'; +import type { BanPanelData } from './type'; + +export const useBanPanelBackend = (context) => { + const { act, data } = useBackend<BanPanelData>(context); + const action = { + searchBans: ( + searchText: string, searchFilter: BanPanelSearchFilter + ) => act(BanPanelAction.SearchBans, { searchText, searchFilter }), + navigatePreviousPage: () => act(BanPanelAction.NavigatePreviousPage), + navigateNextPage: () => act(BanPanelAction.NavigateNextPage), + setPerPage: (amount: number) => act(BanPanelAction.SetPerPage, { amount }), + setTab: (value: BanPanelTab) => act(BanPanelAction.SetTab, { value }), + editBan: (id: number) => act(BanPanelAction.EditBan, { id }), + deleteBan: (id: number) => act(BanPanelAction.DeleteBan, { id }), + }; + return { + action, + data, + }; +}; diff --git a/tgui/packages/tgui/interfaces/Bombsim/index.tsx b/tgui/packages/tgui/interfaces/Bombsim/index.tsx new file mode 100644 index 0000000000000..50d398538709b --- /dev/null +++ b/tgui/packages/tgui/interfaces/Bombsim/index.tsx @@ -0,0 +1,95 @@ +/** + * @file + * @copyright 2024 + * @author Romayne (https://github.com/MeggalBozale) + * @license ISC + */ + +import { useBackend, useLocalState } from '../../backend'; +import { Button, LabeledList, Section, Stack } from '../../components'; +import { Window } from '../../layouts'; +import { TankInfo } from "../TTV"; + +// Returns whether the nth bit starting with 0 for the rightmost is set +const is_set = (bits, bit) => { return bits & (1 << bit); }; + +const MaintenencePanel = (props, context) => { + const { act, data } = useBackend<SimulatorData>(context); + let resetButton = <Button icon="wifi" onClick={() => reset()}>Reset Connection</Button>; + const reset = () => { + act("reset"); + setConnection("NO CONNECTION"); + }; + const [bits, setBits] = useLocalState(context, "bits", data.net_number); + const [connection, setConnection] = useLocalState(context, "connection", "OK CONNECTION"); + if (connection === "NO CONNECTION" && data.host_id !== null) { + setConnection("OK CONNECTION"); + } + let configSwitches = []; + for (let i = 0; i < 4; i++) { + configSwitches.push(<Stack.Item><ConfigSwitch local_bits={bits} setter={setBits} bit_pos={i} /></Stack.Item>); + } + return ( + <Section title="Maintenence Panel" buttons={resetButton}> + <LabeledList.Item label="Host Connection"> + {connection} + </LabeledList.Item> + <LabeledList.Item label="Configuration Switches" verticalAlign="middle"> + <Stack> + {configSwitches} + </Stack> + </LabeledList.Item> + </Section> + ); + +}; + +const ConfigSwitch = (props, context) => { + const { act, data } = useBackend<SimulatorData>(context); + const { local_bits, setter, bit_pos } = props; + let bit_is_set = is_set(local_bits, bit_pos); + const handle_click = () => { + act("config_switch", { "switch_flicked": bit_pos }); + setter(local_bits ^ (1 << bit_pos)); + }; + return ( + <Button width={2} height={2} color={(bit_is_set) ? "green" : "red"} onClick={handle_click} /> + ); +}; + +export const Bombsim = (_props, context) => { + const { act, data } = useBackend<SimulatorData>(context); + let simulationButton = <Button icon="burst" disabled={!data.is_ready} onClick={() => act("simulate")}>Begin Simulation</Button>; + return ( + <Window width={400} height={(data.panel_open) ? 400 : 300}> + <Window.Content> + <Stack> + <Stack.Item> + <TankInfo tank={data.tank_one} tankNum={1} /> + </Stack.Item> + <Stack.Item> + <TankInfo tank={data.tank_two} tankNum={2} /> + </Stack.Item> + </Stack> + <Section + mt={1} + title="Simulator" + buttons={simulationButton} + > + <LabeledList> + <LabeledList.Item label="Simulation"> + {(data.vr_bomb !== null) ? "ACTIVE" : "INACTIVE"} + </LabeledList.Item> + <LabeledList.Item label="Status"> + {data.readiness_dialogue} + </LabeledList.Item> + <LabeledList.Item label="Cooldown"> + {(data.is_ready) ? "None" : data.cooldown} + </LabeledList.Item> + </LabeledList> + </Section> + {(data.panel_open) ? <MaintenencePanel /> : ""} + </Window.Content> + </Window> + ); +}; diff --git a/tgui/packages/tgui/interfaces/Bombsim/type.ts b/tgui/packages/tgui/interfaces/Bombsim/type.ts new file mode 100644 index 0000000000000..8a09576231122 --- /dev/null +++ b/tgui/packages/tgui/interfaces/Bombsim/type.ts @@ -0,0 +1,24 @@ +/** + * @file + * @copyright 2024 + * @author Romayne (https://github.com/MeggalBozale) + * @license ISC + */ + +interface SimulatorData { + tank_one:TankData; + tank_two:TankData; + host_id:string; + vr_bomb:string; + is_ready:boolean; + readiness_dialogue:string; + cooldown:number; + panel_open:boolean; + net_number:number; +} + +interface TankData { + name:string; + pressure:number; + maxPressure:number; +} diff --git a/tgui/packages/tgui/interfaces/CyborgDockingStation/CellChargeBar.tsx b/tgui/packages/tgui/interfaces/CyborgDockingStation/CellChargeBar.tsx new file mode 100644 index 0000000000000..87ab071e2e962 --- /dev/null +++ b/tgui/packages/tgui/interfaces/CyborgDockingStation/CellChargeBar.tsx @@ -0,0 +1,29 @@ +/** + * @file + * @copyright 2022 + * @author glowbold (https://github.com/pgmzeta) + * @author Mordent (https://github.com/mordent-goonstation) + * @license ISC + */ + +import { ProgressBar, Tooltip } from '../../components'; +import type { PowerCellData } from './type'; + +interface CellChargeBarProps { + cell: PowerCellData; +} + +export const CellChargeBar = (props: CellChargeBarProps) => { + const { cell } = props; + const charge = cell.current / cell.max; + return ( + <Tooltip position="bottom" content={Math.floor(cell.current) + '/' + cell.max}> + <ProgressBar + position="relative" + value={charge} + ranges={{ good: [0.5, Infinity], average: [0.25, 0.5], bad: [-Infinity, 0.25] }}> + {Math.floor(charge * 100)}% + </ProgressBar> + </Tooltip> + ); +}; diff --git a/tgui/packages/tgui/interfaces/CyborgDockingStation/DockingAllowedButton.tsx b/tgui/packages/tgui/interfaces/CyborgDockingStation/DockingAllowedButton.tsx new file mode 100644 index 0000000000000..65e52debdac7d --- /dev/null +++ b/tgui/packages/tgui/interfaces/CyborgDockingStation/DockingAllowedButton.tsx @@ -0,0 +1,24 @@ +/** + * @file + * @copyright 2022 + * @author glowbold (https://github.com/pgmzeta) + * @author Mordent (https://github.com/mordent-goonstation) + * @license ISC + */ + +import { useBackend } from '../../backend'; +import { Button } from '../../components'; +import type { CyborgDockingStationData } from './type'; + +// type to handle pass-through of non-TS Button props +type MockButtonProps = Record<string, any> & { + disabled?: boolean; +}; + +interface DockingAllowedButtonProps extends MockButtonProps {} + +export const DockingAllowedButton = (props: DockingAllowedButtonProps, context) => { + const { disabled, ...rest } = props; + const { data } = useBackend<CyborgDockingStationData>(context); + return <Button disabled={disabled || data.disabled} {...rest} />; +}; diff --git a/tgui/packages/tgui/interfaces/CyborgDockingStation/OccupantSection/EyebotStatusView.tsx b/tgui/packages/tgui/interfaces/CyborgDockingStation/OccupantSection/EyebotStatusView.tsx new file mode 100644 index 0000000000000..68d8428972517 --- /dev/null +++ b/tgui/packages/tgui/interfaces/CyborgDockingStation/OccupantSection/EyebotStatusView.tsx @@ -0,0 +1,26 @@ +/** + * @file + * @copyright 2022 + * @author glowbold (https://github.com/pgmzeta) + * @author Mordent (https://github.com/mordent-goonstation) + * @license ISC + */ + +import { LabeledList } from '../../../components'; +import { CellChargeBar } from '../CellChargeBar'; +import { OccupantDataEyebot } from '../type'; + +interface EyebotStatusViewProps { + occupant: OccupantDataEyebot; +} + +export const EyebotStatusView = (props: EyebotStatusViewProps) => { + const { occupant } = props; + return ( + <LabeledList> + <LabeledList.Item label={occupant.cell.name}> + <CellChargeBar cell={occupant.cell} /> + </LabeledList.Item> + </LabeledList> + ); +}; diff --git a/tgui/packages/tgui/interfaces/CyborgDockingStation/OccupantSection/HumanStatusView.tsx b/tgui/packages/tgui/interfaces/CyborgDockingStation/OccupantSection/HumanStatusView.tsx new file mode 100644 index 0000000000000..56ef362d33549 --- /dev/null +++ b/tgui/packages/tgui/interfaces/CyborgDockingStation/OccupantSection/HumanStatusView.tsx @@ -0,0 +1,34 @@ +/** + * @file + * @copyright 2022 + * @author glowbold (https://github.com/pgmzeta) + * @author Mordent (https://github.com/mordent-goonstation) + * @license ISC + */ + +import { LabeledList, ProgressBar } from '../../../components'; +import { OccupantDataHuman } from '../type'; + +interface HumanStatusViewProps { + occupant: OccupantDataHuman; +} + +export const HumanStatusView = (props: HumanStatusViewProps) => { + const { occupant } = props; + const { health, max_health } = occupant; + return ( + <LabeledList> + <LabeledList.Item label="Converting"> + <ProgressBar + value={(max_health - health) / max_health} + ranges={{ + good: [0.5, Infinity], + average: [0.25, 0.5], + bad: [-Infinity, 0.25], + }}> + {Math.floor(((max_health - health) / max_health) * 100)}% + </ProgressBar> + </LabeledList.Item> + </LabeledList> + ); +}; diff --git a/tgui/packages/tgui/interfaces/CyborgDockingStation/OccupantSection/OccupantCellDisplay.tsx b/tgui/packages/tgui/interfaces/CyborgDockingStation/OccupantSection/OccupantCellDisplay.tsx new file mode 100644 index 0000000000000..4fb29b3e8e5e4 --- /dev/null +++ b/tgui/packages/tgui/interfaces/CyborgDockingStation/OccupantSection/OccupantCellDisplay.tsx @@ -0,0 +1,36 @@ +/** + * @file + * @copyright 2022 + * @author glowbold (https://github.com/pgmzeta) + * @author Mordent (https://github.com/mordent-goonstation) + * @license ISC + */ + +import { Box, LabeledList } from '../../../components'; +import { CellChargeBar } from '../CellChargeBar'; +import { DockingAllowedButton } from '../DockingAllowedButton'; +import type { PowerCellData } from '../type'; + +interface OccupantCellDisplayProps { + cell: PowerCellData | undefined; + onRemoveCell: () => void; +} + +export const OccupantCellDisplay = (props: OccupantCellDisplayProps) => { + const { cell, onRemoveCell } = props; + return ( + <LabeledList.Item + label="Power Cell" + color={cell ? 'white' : 'red'} + buttons={ + <DockingAllowedButton + onClick={onRemoveCell} + icon="minus" + tooltip="Remove the occupant's power cell" + disabled={!cell} + /> + }> + {cell ? <CellChargeBar cell={cell} /> : <Box bold>No Power Cell Installed</Box>} + </LabeledList.Item> + ); +}; diff --git a/tgui/packages/tgui/interfaces/CyborgDockingStation/OccupantSection/RobotStatusView/ClothingReportSection.tsx b/tgui/packages/tgui/interfaces/CyborgDockingStation/OccupantSection/RobotStatusView/ClothingReportSection.tsx new file mode 100644 index 0000000000000..69db077db3b09 --- /dev/null +++ b/tgui/packages/tgui/interfaces/CyborgDockingStation/OccupantSection/RobotStatusView/ClothingReportSection.tsx @@ -0,0 +1,41 @@ +/** + * @file + * @copyright 2022 + * @author glowbold (https://github.com/pgmzeta) + * @author Mordent (https://github.com/mordent-goonstation) + * @license ISC + */ + +import { Box, Section } from '../../../../components'; +import { DockingAllowedButton } from '../../DockingAllowedButton'; +import type { ClothingData } from '../../type'; + +interface ClothingReportSectionProps { + onRemoveClothing: (ref: string) => void; + clothes: ClothingData[]; +} + +export const ClothingReportSection = (props: ClothingReportSectionProps) => { + const { clothes, onRemoveClothing } = props; + return ( + <Section title="Clothing"> + {clothes.length > 0 ? ( + clothes.map((cloth) => { + return ( + <Box key={cloth.ref}> + {cloth.name} + <DockingAllowedButton + onClick={() => onRemoveClothing(cloth.ref)} + icon="minus-circle" + color="transparent" + tooltip="Remove from occupant" + /> + </Box> + ); + }) + ) : ( + <Box>No Clothing</Box> + )} + </Section> + ); +}; diff --git a/tgui/packages/tgui/interfaces/CyborgDockingStation/OccupantSection/RobotStatusView/DamageReportSection.tsx b/tgui/packages/tgui/interfaces/CyborgDockingStation/OccupantSection/RobotStatusView/DamageReportSection.tsx new file mode 100644 index 0000000000000..a0e6d76cd98d0 --- /dev/null +++ b/tgui/packages/tgui/interfaces/CyborgDockingStation/OccupantSection/RobotStatusView/DamageReportSection.tsx @@ -0,0 +1,101 @@ +/** + * @file + * @copyright 2022 + * @author glowbold (https://github.com/pgmzeta) + * @author Mordent (https://github.com/mordent-goonstation) + * @license ISC + */ + +import { Box, Flex, LabeledList, Section } from '../../../../components'; +import { COLORS } from '../../../../constants'; +import { DockingAllowedButton } from '../../DockingAllowedButton'; +import { isPresentPartsData, PartData, PartListData } from '../../type'; + +interface DamageReportSectionProps { + cabling: number; + fuel: number; + onRepairStructure: () => void; + onRepairWiring: () => void; + parts: PartListData; +} + +export const DamageReportSection = (props: DamageReportSectionProps) => { + const { cabling, fuel, parts, onRepairStructure, onRepairWiring } = props; + return ( + <Section + title="Damage Report" + buttons={ + <> + <DockingAllowedButton + disabled={fuel < 1} + icon="wrench" + backgroundColor={COLORS.damageType.brute} + tooltip="Fix structural damage" + onClick={onRepairStructure} + /> + <DockingAllowedButton + disabled={cabling < 1} + icon="fire" + backgroundColor={COLORS.damageType.burn} + tooltip="Fix wiring damage" + onClick={onRepairWiring} + /> + </> + }> + <LabeledList> + <PartDisplay label="Head" partData={parts.head} /> + <PartDisplay label="Chest" partData={parts.chest} /> + <PartDisplay label="Left Arm" partData={parts.arm_l} /> + <PartDisplay label="Right Arm" partData={parts.arm_r} /> + <PartDisplay label="Left Leg" partData={parts.leg_l} /> + <PartDisplay label="Right Leg" partData={parts.leg_r} /> + </LabeledList> + </Section> + ); +}; + +interface PartDisplayProps { + label: string; + partData: PartData; +} + +const PartDisplay = (props: PartDisplayProps) => { + const { label, partData } = props; + if (!isPresentPartsData(partData)) { + return ( + <LabeledList.Item color="red" label={label}> + <Box bold>MISSING!</Box> + </LabeledList.Item> + ); + } else { + const partBluntPercent = Math.floor((partData.dmg_blunt / partData.max_health) * 100); + const partBurnsPercent = Math.floor((partData.dmg_burns / partData.max_health) * 100); + if (partBluntPercent || partBurnsPercent) { + return ( + <LabeledList.Item label={label}> + <Flex> + <Flex.Item grow={1}> + <Flex> + <Flex.Item backgroundColor={COLORS.damageType.brute} width={partBluntPercent + '%'} /> + <Flex.Item backgroundColor={COLORS.damageType.burn} width={partBurnsPercent + '%'} /> + <Flex.Item grow={1} backgroundColor="#000000" stretch> + + </Flex.Item> + </Flex> + </Flex.Item> + <Flex.Item shrink> + <Flex> + <Flex.Item shrink width="25px" backgroundColor="#330000" color={COLORS.damageType.brute} bold> + <Box textAlign="center">{partBluntPercent > 0 ? partBluntPercent : '--'}</Box> + </Flex.Item> + <Flex.Item shrink width="25px" backgroundColor={'#331100'} color={COLORS.damageType.burn} bold> + <Box textAlign="center">{partBurnsPercent > 0 ? partBurnsPercent : '--'}</Box> + </Flex.Item> + </Flex> + </Flex.Item> + </Flex> + </LabeledList.Item> + ); + } + } +}; diff --git a/tgui/packages/tgui/interfaces/CyborgDockingStation/OccupantSection/RobotStatusView/DecorationReportSection.tsx b/tgui/packages/tgui/interfaces/CyborgDockingStation/OccupantSection/RobotStatusView/DecorationReportSection.tsx new file mode 100644 index 0000000000000..58a81bb694f8e --- /dev/null +++ b/tgui/packages/tgui/interfaces/CyborgDockingStation/OccupantSection/RobotStatusView/DecorationReportSection.tsx @@ -0,0 +1,71 @@ +/** + * @file + * @copyright 2022 + * @author glowbold (https://github.com/pgmzeta) + * @author Mordent (https://github.com/mordent-goonstation) + * @license ISC + */ + +import { ColorBox, LabeledList, Section } from '../../../../components'; +import { DockingAllowedButton } from '../../DockingAllowedButton'; +import type { RobotCosmeticsData } from '../../type'; + +interface DecorationReportSectionProps { + cosmetics: RobotCosmeticsData; + onChangeCosmetic: Record<'head' | 'chest' | 'arms' | 'legs' | 'eyeGlow', () => void>; + onChangePaintCosmetic: Record<'add' | 'change' | 'remove', () => void>; +} + +export const DecorationReportSection = (props: DecorationReportSectionProps) => { + const { cosmetics, onChangeCosmetic, onChangePaintCosmetic } = props; + const { + head: onChangeHead, + chest: onChangeChest, + arms: onChangeArms, + legs: onChangeLegs, + eyeGlow: onChangeEyeGlow, + } = onChangeCosmetic; + const { add: onAddPaint, change: onChangePaint, remove: onRemovePaint } = onChangePaintCosmetic; + return ( + <Section title="Decoration"> + <LabeledList> + <LabeledList.Item + label="Head" + buttons={<DockingAllowedButton icon="sync-alt" tooltip="Change head decoration" onClick={onChangeHead} />}> + {cosmetics.head || 'None'} + </LabeledList.Item> + <LabeledList.Item + label="Chest" + buttons={<DockingAllowedButton icon="sync-alt" tooltip="Change chest decoration" onClick={onChangeChest} />}> + {cosmetics.chest || 'None'} + </LabeledList.Item> + <LabeledList.Item + label="Arms" + buttons={<DockingAllowedButton icon="sync-alt" tooltip="Change arms decoration" onClick={onChangeArms} />}> + {cosmetics.arms || 'None'} + </LabeledList.Item> + <LabeledList.Item + label="Legs" + buttons={<DockingAllowedButton icon="sync-alt" tooltip="Change legs decoration" onClick={onChangeLegs} />}> + {cosmetics.legs || 'None'} + </LabeledList.Item> + <LabeledList.Item + label="Paint" + buttons={ + <> + {!cosmetics.paint && <DockingAllowedButton icon="plus" tooltip="Add paint" onClick={onAddPaint} />} + {cosmetics.paint && <DockingAllowedButton icon="tint" tooltip="Change colour" onClick={onChangePaint} />} + {cosmetics.paint && <DockingAllowedButton icon="minus" tooltip="Remove paint" onClick={onRemovePaint} />} + </> + }> + {cosmetics.paint ? <ColorBox color={cosmetics.paint} /> : 'No paint applied'} + </LabeledList.Item> + <LabeledList.Item + label="Eyes" + buttons={<DockingAllowedButton icon="tint" tooltip="Change eye glow" onClick={onChangeEyeGlow} />}> + <ColorBox color={'rgb(' + cosmetics.fx[0] + ',' + cosmetics.fx[1] + ',' + cosmetics.fx[2] + ')'} /> + </LabeledList.Item> + </LabeledList> + </Section> + ); +}; diff --git a/tgui/packages/tgui/interfaces/CyborgDockingStation/OccupantSection/RobotStatusView/UpgradeReportSection.tsx b/tgui/packages/tgui/interfaces/CyborgDockingStation/OccupantSection/RobotStatusView/UpgradeReportSection.tsx new file mode 100644 index 0000000000000..b798e45d93155 --- /dev/null +++ b/tgui/packages/tgui/interfaces/CyborgDockingStation/OccupantSection/RobotStatusView/UpgradeReportSection.tsx @@ -0,0 +1,44 @@ +/** + * @file + * @copyright 2022 + * @author glowbold (https://github.com/pgmzeta) + * @author Mordent (https://github.com/mordent-goonstation) + * @license ISC + */ + +import { Section, Stack } from '../../../../components'; +import { DockingAllowedButton } from '../../DockingAllowedButton'; +import type { UpgradeData } from '../../type'; + +interface UpgradeReportSectionProps { + onRemoveUpgrade: (upgradeRef: string) => void; + upgrades: UpgradeData[]; + upgrades_max: number; +} + +export const UpgradeReportSection = (props: UpgradeReportSectionProps) => { + const { onRemoveUpgrade, upgrades, upgrades_max } = props; + const upgradeCount = 'Upgrades (' + upgrades.length + ' / ' + upgrades_max + ' installed)'; + return ( + <Section title={upgradeCount}> + <div> + {upgrades.map((upgrade) => { + return ( + <Stack key={upgrade.ref}> + <Stack.Item>{upgrade.name}</Stack.Item> + <Stack.Item> + <DockingAllowedButton + compact + icon="minus-circle" + color="transparent" + tooltip={`Remove ${upgrade.name}`} + onClick={() => onRemoveUpgrade(upgrade.ref)} + /> + </Stack.Item> + </Stack> + ); + })} + </div> + </Section> + ); +}; diff --git a/tgui/packages/tgui/interfaces/CyborgDockingStation/OccupantSection/RobotStatusView/index.tsx b/tgui/packages/tgui/interfaces/CyborgDockingStation/OccupantSection/RobotStatusView/index.tsx new file mode 100644 index 0000000000000..166c710c92875 --- /dev/null +++ b/tgui/packages/tgui/interfaces/CyborgDockingStation/OccupantSection/RobotStatusView/index.tsx @@ -0,0 +1,84 @@ +/** + * @file + * @copyright 2022 + * @author glowbold (https://github.com/pgmzeta) + * @author Mordent (https://github.com/mordent-goonstation) + * @license ISC + */ + +import { Box, LabeledList } from '../../../../components'; +import { DockingAllowedButton } from '../../DockingAllowedButton'; +import { OccupantCellDisplay } from '../OccupantCellDisplay'; +import { DamageReportSection } from './DamageReportSection'; +import { UpgradeReportSection } from './UpgradeReportSection'; +import { DecorationReportSection } from './DecorationReportSection'; +import { ClothingReportSection } from './ClothingReportSection'; +import type { OccupantDataRobot } from '../../type'; + +interface RobotStatusViewProps { + act: (action: string, payload?: object) => void; + cabling: number; + fuel: number; + occupant: OccupantDataRobot; +} + +export const RobotStatusView = (props: RobotStatusViewProps) => { + const { cabling, fuel, occupant, act } = props; + const { cell, moduleName, upgrades, upgrades_max, parts } = occupant; + const handleRemoveCell = () => act('cell-remove'); + const handleRemoveModule = () => act('module-remove'); + const handleRemoveUpgrade = (upgradeRef: string) => act('upgrade-remove', { upgradeRef }); + const handleRepairStructure = () => act('repair-fuel'); + const handleRepairWiring = () => act('repair-wiring'); + const handleRemoveClothing = (clothingRef: string) => act('clothing-remove', { clothingRef }); + const handleChangeCosmetic = { + 'head': () => act('cosmetic-change-head'), + 'chest': () => act('cosmetic-change-chest'), + 'arms': () => act('cosmetic-change-arms'), + 'legs': () => act('cosmetic-change-legs'), + 'eyeGlow': () => act('occupant-fx'), + }; + const handleChangePaintCosmetic = { + 'add': () => act('occupant-paint-add'), + 'change': () => act('occupant-paint-change'), + 'remove': () => act('occupant-paint-remove'), + }; + const hasModule = !!moduleName; + return ( + <> + <LabeledList> + <OccupantCellDisplay cell={cell} onRemoveCell={handleRemoveCell} /> + <LabeledList.Item + label="Module" + buttons={ + <DockingAllowedButton + onClick={handleRemoveModule} + icon="minus" + tooltip="Remove the occupant's module" + disabled={!hasModule} + /> + }> + {moduleName || ( + <Box as="span" color="red"> + No Module Installed + </Box> + )} + </LabeledList.Item> + </LabeledList> + <DamageReportSection + parts={parts} + fuel={fuel} + cabling={cabling} + onRepairStructure={handleRepairStructure} + onRepairWiring={handleRepairWiring} + /> + <UpgradeReportSection onRemoveUpgrade={handleRemoveUpgrade} upgrades={upgrades} upgrades_max={upgrades_max} /> + <DecorationReportSection + cosmetics={occupant.cosmetics} + onChangeCosmetic={handleChangeCosmetic} + onChangePaintCosmetic={handleChangePaintCosmetic} + /> + <ClothingReportSection clothes={occupant.clothing} onRemoveClothing={handleRemoveClothing} /> + </> + ); +}; diff --git a/tgui/packages/tgui/interfaces/CyborgDockingStation/OccupantSection/index.tsx b/tgui/packages/tgui/interfaces/CyborgDockingStation/OccupantSection/index.tsx new file mode 100644 index 0000000000000..7ce2ea3faa6df --- /dev/null +++ b/tgui/packages/tgui/interfaces/CyborgDockingStation/OccupantSection/index.tsx @@ -0,0 +1,104 @@ +/** + * @file + * @copyright 2022 + * @author glowbold (https://github.com/pgmzeta) + * @author Mordent (https://github.com/mordent-goonstation) + * @license ISC + */ + +import { useBackend } from '../../../backend'; +import { LabeledList, Section, Stack } from '../../../components'; +import { DockingAllowedButton } from '../DockingAllowedButton'; +import type { CyborgDockingStationData, OccupantData } from '../type'; +import { EyebotStatusView } from './EyebotStatusView'; +import { HumanStatusView } from './HumanStatusView'; +import { RobotStatusView } from './RobotStatusView'; + +export const OccupantSection = (_props: unknown, context) => { + const { act, data } = useBackend<CyborgDockingStationData>(context); + const { cabling, fuel, occupant } = data; + const hasOccupant = !!occupant?.name; + const handleEjectOccupant = () => act('occupant-eject'); + const handleRenameOccupant = () => act('occupant-rename'); + return ( + <Section title="Occupant"> + <Stack> + <Stack.Item grow={1}> + {hasOccupant ? ( + <OccupantSectionContents + act={act} + cabling={cabling} + fuel={fuel} + occupant={occupant} + onEjectOccupant={handleEjectOccupant} + onRenameOccupant={handleRenameOccupant} + /> + ) : ( + <div>No occupant</div> + )} + </Stack.Item> + </Stack> + </Section> + ); +}; + +interface OccupantSectionContentsProps { + act: (action: string, payload?: object) => void; + cabling: number; + fuel: number; + occupant: OccupantData; + onEjectOccupant: () => void; + onRenameOccupant: () => void; +} + +const OccupantSectionContents = (props: OccupantSectionContentsProps) => { + const { act, cabling, fuel, occupant, onEjectOccupant, onRenameOccupant } = props; + const occupantTypeDescription = occupantTypeDescriptionLens(occupant); + return ( + <> + <LabeledList> + <LabeledList.Item + label="Name" + buttons={ + <> + {occupant.kind === 'robot' && ( + <DockingAllowedButton + onClick={onRenameOccupant} + icon="edit" + tooltip="Change the occupant's designation" + /> + )} + {<DockingAllowedButton onClick={onEjectOccupant} icon="eject" tooltip="Eject the occupant" />} + </> + }> + {occupant.name} + </LabeledList.Item> + <LabeledList.Item label="Type">{occupantTypeDescription}</LabeledList.Item> + </LabeledList> + <Section title="Status"> + {occupant.kind === 'robot' && <RobotStatusView occupant={occupant} fuel={fuel} cabling={cabling} act={act} />} + {occupant.kind === 'human' && <HumanStatusView occupant={occupant} />} + {occupant.kind === 'eyebot' && <EyebotStatusView occupant={occupant} />} + </Section> + </> + ); +}; + +const occupantTypeDescriptionLens = (occupant: OccupantData) => { + switch (occupant.kind) { + case 'robot': + if (occupant.user === 'brain') { + return 'Mk.2-Type Cyborg'; + } + if (occupant.user === 'ai') { + return 'Mk.2-Type AI Shell'; + } + break; + case 'human': + return 'Mk.2-Type Carbon'; + case 'eyebot': + return 'Mk.1-Type Eyebot'; + default: + return 'Unknown'; + } +}; diff --git a/tgui/packages/tgui/interfaces/CyborgDockingStation/SuppliesSection/AvailableCellsSection.tsx b/tgui/packages/tgui/interfaces/CyborgDockingStation/SuppliesSection/AvailableCellsSection.tsx new file mode 100644 index 0000000000000..eabe111646e10 --- /dev/null +++ b/tgui/packages/tgui/interfaces/CyborgDockingStation/SuppliesSection/AvailableCellsSection.tsx @@ -0,0 +1,52 @@ +/** + * @file + * @copyright 2022 + * @author glowbold (https://github.com/pgmzeta) + * @author Mordent (https://github.com/mordent-goonstation) + * @license ISC + */ + +import { Box, LabeledList, Section } from '../../../components'; +import { CellChargeBar } from '../CellChargeBar'; +import { DockingAllowedButton } from '../DockingAllowedButton'; +import type { PowerCellData } from '../type'; + +interface AvailableCellsSectionProps { + items: PowerCellData[]; + onEject: (ref: string) => void; + onInstall: (ref: string) => void; +} + +export const AvailableCellsSection = (props: AvailableCellsSectionProps) => { + const { items, onEject, onInstall } = props; + return ( + <Section title="Power Cells"> + {items.length > 0 ? ( + <LabeledList> + {items.map((item) => { + return ( + <div key={item.ref}> + <LabeledList.Item + label={item.name} + buttons={ + <> + <DockingAllowedButton onClick={() => onInstall(item.ref)} icon="plus" tooltip="Add to occupant" /> + <DockingAllowedButton + onClick={() => onEject(item.ref)} + icon="eject" + tooltip="Eject from station" + /> + </> + }> + <CellChargeBar cell={item} /> + </LabeledList.Item> + </div> + ); + })} + </LabeledList> + ) : ( + <Box as="div">None Stored</Box> + )} + </Section> + ); +}; diff --git a/tgui/packages/tgui/interfaces/CyborgDockingStation/SuppliesSection/StandardAvailableSection.tsx b/tgui/packages/tgui/interfaces/CyborgDockingStation/SuppliesSection/StandardAvailableSection.tsx new file mode 100644 index 0000000000000..db2cbbd3e74f5 --- /dev/null +++ b/tgui/packages/tgui/interfaces/CyborgDockingStation/SuppliesSection/StandardAvailableSection.tsx @@ -0,0 +1,47 @@ +/** + * @file + * @copyright 2022 + * @author glowbold (https://github.com/pgmzeta) + * @author Mordent (https://github.com/mordent-goonstation) + * @license ISC + */ + +import { Box, Section } from '../../../components'; +import { DockingAllowedButton } from '../DockingAllowedButton'; +import type { ItemData } from '../type'; + +interface StandardAvailableSectionProps<T extends ItemData> { + items: T[]; + onEject: (ref: string) => void; + onInstall: (ref: string) => void; + title: string; +} + +export const StandardAvailableSection = <T extends ItemData>(props: StandardAvailableSectionProps<T>) => { + const { items, onEject, onInstall, title } = props; + return ( + <Section title={title}> + {items.length > 0 ? ( + items.map((item) => ( + <div key={item.ref}> + {item.name} + <DockingAllowedButton + onClick={() => onInstall(item.ref)} + icon="plus-circle" + color="transparent" + tooltip="Add to occupant" + /> + <DockingAllowedButton + onClick={() => onEject(item.ref)} + icon="eject" + color="transparent" + tooltip="Eject from station" + /> + </div> + )) + ) : ( + <Box as="div">None Stored</Box> + )} + </Section> + ); +}; diff --git a/tgui/packages/tgui/interfaces/CyborgDockingStation/SuppliesSection/index.tsx b/tgui/packages/tgui/interfaces/CyborgDockingStation/SuppliesSection/index.tsx new file mode 100644 index 0000000000000..389b638146856 --- /dev/null +++ b/tgui/packages/tgui/interfaces/CyborgDockingStation/SuppliesSection/index.tsx @@ -0,0 +1,63 @@ +/** + * @file + * @copyright 2022 + * @author glowbold (https://github.com/pgmzeta) + * @author Mordent (https://github.com/mordent-goonstation) + * @license ISC + */ + +import { useBackend } from '../../../backend'; +import { Button, LabeledList, Section } from '../../../components'; +import { AvailableCellsSection } from './AvailableCellsSection'; +import type { CyborgDockingStationData } from '../type'; +import { StandardAvailableSection } from './StandardAvailableSection'; + +export const SuppliesSection = (_props: unknown, context) => { + const { act, data } = useBackend<CyborgDockingStationData>(context); + const { allow_self_service, cabling, cells, clothes, fuel, modules, upgrades, viewer_is_robot } = data; + const handleToggleSelfService = () => act('self-service'); + const handleInstallModule = (moduleRef: string) => act('module-install', { moduleRef }); + const handleEjectModule = (moduleRef: string) => act('module-eject', { moduleRef }); + const handleInstallClothing = (clothingRef: string) => act('clothing-install', { clothingRef }); + const handleEjectClothing = (clothingRef: string) => act('clothing-eject', { clothingRef }); + const handleInstallUpgrade = (upgradeRef: string) => act('upgrade-install', { upgradeRef }); + const handleEjectUpgrade = (upgradeRef: string) => act('upgrade-eject', { upgradeRef }); + const handleInstallCell = (cellRef: string) => act('cell-install', { cellRef }); + const handleEjectCell = (cellRef: string) => act('cell-eject', { cellRef }); + return ( + <Section title="Supplies"> + <LabeledList> + <LabeledList.Item label="Welding Fuel">{fuel}</LabeledList.Item> + <LabeledList.Item label="Wire Cabling">{cabling}</LabeledList.Item> + <LabeledList.Item label="Self Service"> + <Button.Checkbox + tooltip="Toggle self-service." + checked={allow_self_service} + disabled={viewer_is_robot} + onClick={handleToggleSelfService}> + {allow_self_service ? 'Enabled' : 'Disabled'} + </Button.Checkbox> + </LabeledList.Item> + </LabeledList> + <StandardAvailableSection + items={modules} + onInstall={handleInstallModule} + onEject={handleEjectModule} + title="Modules" + /> + <StandardAvailableSection + items={upgrades} + onInstall={handleInstallUpgrade} + onEject={handleEjectUpgrade} + title="Upgrades" + /> + <AvailableCellsSection items={cells} onInstall={handleInstallCell} onEject={handleEjectCell} /> + <StandardAvailableSection + items={clothes} + onInstall={handleInstallClothing} + onEject={handleEjectClothing} + title="Upgrades" + /> + </Section> + ); +}; diff --git a/tgui/packages/tgui/interfaces/CyborgDockingStation/index.tsx b/tgui/packages/tgui/interfaces/CyborgDockingStation/index.tsx index 3ffda8a436e3d..cfb23a6407643 100644 --- a/tgui/packages/tgui/interfaces/CyborgDockingStation/index.tsx +++ b/tgui/packages/tgui/interfaces/CyborgDockingStation/index.tsx @@ -2,483 +2,72 @@ * @file * @copyright 2022 * @author glowbold (https://github.com/pgmzeta) + * @author Mordent (https://github.com/mordent-goonstation) * @license ISC */ import { useBackend, useLocalState } from '../../backend'; -import { COLORS } from '../../constants'; -import { Box, Button, ColorBox, Divider, Flex, LabeledList, ProgressBar, Section, Stack, Tabs, Tooltip } from '../../components'; +import { Box, Divider, Stack, Tabs } from '../../components'; import { Window } from '../../layouts'; -import { CyborgDockingStationData } from './type'; +import { OccupantSection } from './OccupantSection'; +import { SuppliesSection } from './SuppliesSection'; +import type { CyborgDockingStationData } from './type'; -export const CyborgDockingStation = (props, context) => { - const { act, data } = useBackend<CyborgDockingStationData>(context); +export const CyborgDockingStation = (_props: unknown, context) => { + const { data } = useBackend<CyborgDockingStationData>(context); + const { allow_self_service, conversion_chamber, disabled, occupant, viewer_is_occupant, viewer_is_robot } = data; const [tabIndex, setTabIndex] = useLocalState(context, 'tabIndex', 1); - return ( <Window width={500} height={640} title="Cyborg Docking Station" - theme={(data.conversion_chamber && data.occupant.kind === "human") ?"syndicate" : "neutral"}> + theme={conversion_chamber && occupant?.kind === 'human' ? 'syndicate' : 'neutral'}> <Window.Content scrollable> - <DisabledDisplayReason /> + {!!disabled && ( + <DisabledDisplayReason + allowSelfService={!!allow_self_service} + viewerIsOccupant={!!viewer_is_occupant} + viewerIsRobot={!!viewer_is_robot} + /> + )} <Stack> <Stack.Item> <Tabs vertical width="100px"> - <Tabs.Tab - selected={tabIndex===1} - onClick={() => setTabIndex(1)}> + <Tabs.Tab selected={tabIndex === 1} onClick={() => setTabIndex(1)}> Occupant </Tabs.Tab> - <Tabs.Tab - selected={tabIndex===2} - onClick={() => setTabIndex(2)}> + <Tabs.Tab selected={tabIndex === 2} onClick={() => setTabIndex(2)}> Supplies </Tabs.Tab> </Tabs> </Stack.Item> <Stack.Item grow={1} basis={0}> - <DockingTabView data={data} act={act} tabIndex={tabIndex} /> + {tabIndex === 1 && <OccupantSection />} + {tabIndex === 2 && <SuppliesSection />} </Stack.Item> </Stack> </Window.Content> </Window> ); }; -const DisabledDisplayReason = (props, context) => { - const { act, data } = useBackend<CyborgDockingStationData>(context); - if (data.disabled) { - return ( - <> - <Box backgroundColor="#773333" p="5px" mb="5px" bold textAlign="center"> - {(data.viewer_is_robot && !data.viewer_is_occupant) && "You must be inside the docking station to use the functions." || ""} - {(data.viewer_is_occupant && !data.viewer_is_robot) && "Non-cyborgs cannot use the docking station functions." || ""} - {(data.viewer_is_occupant && !data.allow_self_service) && "Self-service has been disabled at this station." || ""} - </Box> - <Divider /> - </> - ); - } -}; -const DockingAllowedButton = (props, context) => { - const { - disabled, - ...rest - } = props; - const { act, data } = useBackend<CyborgDockingStationData>(context); - return <Button disabled={disabled || data.disabled} {...rest} />; -}; -const OccupantTab = (props) => { - const { occupant, fuel, cabling, act } = props; - return ( - <Section title="Occupant"> - <Stack> - <Stack.Item grow={1}> - <OccupantTabContents occupant={occupant} act={act} fuel={fuel} cabling={cabling} /> - </Stack.Item> - </Stack> - </Section> - ); -}; -const OccupantTabContents = (props) => { - const { occupant, fuel, cabling, act } = props; - if (occupant.name) { - return ( - <> - <LabeledList> - <LabeledList.Item label="Name" buttons={( - <> - {occupant.kind ==="robot" && <DockingAllowedButton onClick={() => act("occupant-rename")} icon="edit" tooltip="Change the occupant's designation" />} - {<DockingAllowedButton onClick={() => act("occupant-eject")} icon="eject" tooltip="Eject the occupant" /> } - </> - )}> - {occupant.name} - </LabeledList.Item> - <LabeledList.Item label="Type"><OccupantType kind={occupant.kind} user={occupant.user} /></LabeledList.Item> - </LabeledList> - <Section title="Status"> - {occupant.kind === "robot" && <OccupantStatusRobot occupant={occupant} fuel={fuel} cabling={cabling} act={act} />} - {occupant.kind === "human" && <OccupantStatusHuman occupant={occupant} />} - {occupant.kind === "eyebot" && <OccupantStatusEyebot occupant={occupant} />} - </Section> - </> - ); - } else { - return (<div>No occupant</div>); - } -}; -const OccupantStatusRobot = (props) => { - const { occupant, fuel, cabling, act } = props; - return ( - <> - <LabeledList> - <OccupantCellDisplay cellData={occupant.cell} act={act} /> - <LabeledList.Item label="Module" buttons={ - <DockingAllowedButton - onClick={() => act("module-remove")} - icon="minus" - tooltip="Remove the occupant's module" - disabled={!occupant.module} /> - }> - {occupant.module || <Box as="span" color="red">No Module Installed</Box>} - </LabeledList.Item> - </LabeledList> - <DamageReport parts={occupant.parts} fuel={fuel} cabling={cabling} act={act} /> - <OccupantUpgradeDisplay - upgrades={occupant.upgrades} - upgrades_max={occupant.upgrades_max} - act={act} /> - <DecorationReport cosmetics={occupant.cosmetics} act={act} /> - <ClothingReport clothes={occupant.clothing} act={act} /> - </>); -}; -const OccupantStatusHuman = (props) => { - const { occupant } = props; - return ( - <LabeledList> - <LabeledList.Item label="Converting"> - <ProgressBar - value={(occupant.max_health - occupant.health) / occupant.max_health} - ranges={{ - good: [0.5, Infinity], - average: [0.25, 0.5], - bad: [-Infinity, 0.25], - }} - > - {Math.floor((occupant.max_health - occupant.health) / occupant.max_health*100)}% - </ProgressBar> - </LabeledList.Item> - </LabeledList> - ); -}; -const OccupantStatusEyebot = (props) => { - const { occupant } = props; - return ( - <LabeledList> - <LabeledList.Item label={occupant.cell.name}><CellChargeBar cellData={occupant.cell} /></LabeledList.Item> - </LabeledList> - ); -}; -const OccupantType = (props) => { - const { kind, user } = props; - switch (kind) { - case "robot": - if (user === "brain") return <>Mk.2-Type Cyborg</>; - if (user === "ai") return <>Mk.2-Type AI Shell</>; - break; - case "human": - return <>Mk.2-Type Carbon</>; - case "eyebot": - return <>Mk.1-Type Eyebot</>; - default: - return <>Unknown type</>; - } -}; -const ClothingReport = (props) => { - const { clothes, act } = props; - return ( - <Section title="Clothing"> - { - clothes.length > 0 - ?( - clothes.map(cloth => { - return ( - <Box key={cloth.ref}> - {cloth.name} <DockingAllowedButton onClick={() => act("clothing-remove", { clothingRef: cloth.ref })} icon="minus-circle" color="transparent" tooltip="Remove from occupant" /> - </Box> - ); - }) - ) - :( - <Box>No Clothing</Box> - ) - } - </Section> - ); -}; -const DecorationReport = (props) => { - const { cosmetics, act } = props; - return ( - <Section title="Decoration"> - <LabeledList> - <LabeledList.Item label="Head" buttons={ - <DockingAllowedButton icon="sync-alt" tooltip="Change head decoration" onClick={() => act("cosmetic-change-head")} /> - }> - {cosmetics.head || "None"} - </LabeledList.Item> - <LabeledList.Item label="Chest" buttons={ - <DockingAllowedButton icon="sync-alt" tooltip="Change chest decoration" onClick={() => act("cosmetic-change-chest")} /> - }> - {cosmetics.chest || "None"} - </LabeledList.Item> - <LabeledList.Item label="Arms" buttons={ - <DockingAllowedButton icon="sync-alt" tooltip="Change arms decoration" onClick={() => act("cosmetic-change-arms")} /> - }>{cosmetics.arms || "None"} - </LabeledList.Item> - <LabeledList.Item label="Legs" buttons={ - <DockingAllowedButton icon="sync-alt" tooltip="Change legs decoration" onClick={() => act("cosmetic-change-legs")} /> - }>{cosmetics.legs || "None"} - </LabeledList.Item> - <LabeledList.Item label="Paint" buttons={ - <> - {!cosmetics.paint && <DockingAllowedButton icon="plus" tooltip="Add paint" onClick={() => act("occupant-paint-add")} />} - {cosmetics.paint && <DockingAllowedButton icon="tint" tooltip="Change colour" onClick={() => act("occupant-paint-change")} />} - {cosmetics.paint && <DockingAllowedButton icon="minus" tooltip="Remove paint" onClick={() => act("occupant-paint-remove")} />} - </> - }> - {cosmetics.paint ? <ColorBox color={cosmetics.paint} /> : "No paint applied"} - </LabeledList.Item> - <LabeledList.Item label="Eyes" buttons={ - <DockingAllowedButton icon="tint" tooltip="Change eye glow" onClick={() => act("occupant-fx")} /> - }> - <ColorBox color={"rgb(" + cosmetics.fx[0] + "," + cosmetics.fx[1] + "," + cosmetics.fx[2] + ")"} /> - </LabeledList.Item> - </LabeledList> - </Section> - ); -}; -const DamageReport = (props) => { - const { parts, fuel, cabling, act } = props; - return ( - <Section title="Damage Report" buttons={ - <> - <DockingAllowedButton disabled={fuel < 1} icon="wrench" backgroundColor={COLORS.damageType.brute} tooltip="Fix structural damage" onClick={() => act("repair-fuel")} /> - <DockingAllowedButton disabled={cabling < 1} icon="fire" backgroundColor={COLORS.damageType.burn} tooltip="Fix wiring damage" onClick={() => act("repair-wiring")} /> - </> - }> - <LabeledList> - <PartDisplay label="Head" partData={parts.head} /> - <PartDisplay label="Chest" partData={parts.chest} /> - <PartDisplay label="Left Arm" partData={parts.arm_l} /> - <PartDisplay label="Right Arm" partData={parts.arm_r} /> - <PartDisplay label="Left Leg" partData={parts.leg_l} /> - <PartDisplay label="Right Leg" partData={parts.leg_r} /> - </LabeledList> - </Section> - ); -}; -const PartDisplay = (props) => { - const { - label, partData, - } = props; - if (partData.exists === 0) { - return <LabeledList.Item color="red" label={label}><Box bold>MISSING!</Box></LabeledList.Item>; - } else { - const partBluntPercent = Math.floor(partData.dmg_blunt/partData.max_health*100); - const partBurnsPercent = Math.floor(partData.dmg_burns/partData.max_health*100); - if (partBluntPercent || partBurnsPercent) { - return ( - <LabeledList.Item label={label}> - <Flex> - <Flex.Item grow={1}> - <Flex> - <Flex.Item backgroundColor={COLORS.damageType.brute} width={partBluntPercent + "%"} /> - <Flex.Item backgroundColor={COLORS.damageType.burn} width={partBurnsPercent + "%"} /> - <Flex.Item grow={1} backgroundColor={"#000000"} stretch > </Flex.Item> - </Flex> - </Flex.Item> - <Flex.Item shrink> - <Flex> - <Flex.Item shrink width="25px" backgroundColor={"#330000"} color={COLORS.damageType.brute} bold><Box textAlign={"center"}>{partBluntPercent > 0 ? partBluntPercent : "--"}</Box></Flex.Item> - <Flex.Item shrink width="25px" backgroundColor={"#331100"} color={COLORS.damageType.burn} bold><Box textAlign={"center"}>{partBurnsPercent > 0 ? partBurnsPercent : "--" }</Box></Flex.Item> - </Flex> - </Flex.Item> - </Flex> - </LabeledList.Item> - ); - } - } -}; -const AvailableCellsDisplay = (props) => { - const { cells, act } = props; - return ( - <Section title="Power Cells"> - { - cells.length > 0 - ?( - <LabeledList> { - cells.map(cell => { - return ( - <div key={cell.ref}> - <LabeledList.Item label={cell.name} - buttons={ - <> - <DockingAllowedButton onClick={() => act("cell-install", { cellRef: cell.ref })} icon="plus" tooltip="Add to occupant" /> - <DockingAllowedButton onClick={() => act("cell-eject", { cellRef: cell.ref })} icon="eject" tooltip="Eject from station" /> - </> - } - > - <CellChargeBar cellData={cell} /> - </LabeledList.Item> - </div>); - }) - } - </LabeledList> - ) - :( - <Box as="div">None Stored</Box> - ) +interface DisabledDisplayReasonProps { + allowSelfService: boolean; + viewerIsOccupant: boolean; + viewerIsRobot: boolean; +} - } - </Section>); -}; -const AvailableModulesDisplay = (props) => { - const { modules, act } = props; - return ( - <Section title="Modules"> { - modules.length > 0 - ?( - modules.map(modu => { - return ( - <div key={modu.ref}>{modu.name} - <DockingAllowedButton onClick={() => act("module-install", { moduleRef: modu.ref })} icon="plus-circle" color="transparent" tooltip="Add to occupant" /> - <DockingAllowedButton onClick={() => act("module-eject", { moduleRef: modu.ref })} icon="eject" color="transparent" tooltip="Eject from station" /> - </div> - ); - }) - ) - :( - <Box as="div">None Stored</Box> - ) - } - </Section> - ); -}; -const AvailableUpgradesDisplay = (props) => { - const { upgrades, act } = props; - return ( - <Section title="Upgrades"> { - upgrades.length > 0 - ?( - upgrades.map(upgrade => { - return ( - <div key={upgrade.ref}>{upgrade.name} - <DockingAllowedButton onClick={() => act("upgrade-install", { upgradeRef: upgrade.ref })} icon="plus-circle" color="transparent" tooltip="Add to occupant" /> - <DockingAllowedButton onClick={() => act("upgrade-eject", { upgradeRef: upgrade.ref })} icon="eject" color="transparent" tooltip="Eject from station" /> - </div> - ); - }) - ) :( - <Box as="div">None Stored</Box> - ) - } - </Section> - ); -}; -const AvailableClothingDisplay = (props) => { - const { clothes, act } = props; - return ( - <Section title="Clothing"> { - clothes.length > 0 - ?( - clothes.map(cloth => { - return ( - <Box key={cloth.ref}>{cloth.name} - <DockingAllowedButton onClick={() => act("clothing-install", { clothingRef: cloth.ref })} icon="plus-circle" color="transparent" tooltip="Add to occupant" /> - <DockingAllowedButton onClick={() => act("clothing-eject", { clothingRef: cloth.ref })} icon="eject" color="transparent" tooltip="Eject from station" /> - </Box> - ); - }) - ) - :( - <Box as="div">None Stored</Box> - ) - } - </Section> - ); -}; -const OccupantCellDisplay = (props) => { - const { cellData, act } = props; +const DisabledDisplayReason = (props: DisabledDisplayReasonProps) => { + const { allowSelfService, viewerIsOccupant, viewerIsRobot } = props; return ( - <LabeledList.Item - label="Power Cell" - color={cellData ? "white" : "red"} - buttons={ - <DockingAllowedButton - onClick={() => act("cell-remove")} - icon="minus" - tooltip="Remove the occupant's power cell" - disabled={cellData ? false : true} /> - }> - { cellData && <CellChargeBar cellData={cellData} />} - { !cellData && <Box bold>No Power Cell Installed</Box>} - </LabeledList.Item> - ); -}; -const CellChargeBar = (props) => { - const { cellData } = props; - const charge = cellData.current / cellData.max; - return ( - <Tooltip - position="bottom" - content={Math.floor(cellData.current) + "/" + cellData.max} - > - <ProgressBar - position="relative" - value={charge} - ranges={{ good: [0.5, Infinity], average: [0.25, 0.5], - bad: [-Infinity, 0.25] }}> - { - Math.floor(charge*100) - }% - </ProgressBar> - </Tooltip> + <> + <Box backgroundColor="#773333" p="5px" mb="5px" bold textAlign="center"> + {(viewerIsRobot && !viewerIsOccupant && 'You must be inside the docking station to use the functions.') || ''} + {(viewerIsOccupant && !viewerIsRobot && 'Non-cyborgs cannot use the docking station functions.') || ''} + {(viewerIsOccupant && !allowSelfService && 'Self-service has been disabled at this station.') || ''} + </Box> + <Divider /> + </> ); }; -const OccupantUpgradeDisplay = (props) => { - const { upgrades, upgrades_max, act } = props; - const upgrade_count = "Upgrades (" + upgrades.length + " / " + upgrades_max + " installed)"; - return ( - <Section title={upgrade_count}> - <div> - { - upgrades.map(upgrade => { - return ( - <Stack key={upgrade.ref}> - <Stack.Item>{upgrade.name}</Stack.Item> - <Stack.Item> - <DockingAllowedButton - compact - icon="minus-circle" - color="transparent" - tooltip={`Remove ${upgrade.name}`} - onClick={() => act("upgrade-remove", { upgradeRef: upgrade.ref })} - /> - </Stack.Item> - </Stack> - ); - }) - } - </div> - </Section>); -}; -const DockingTabView = (props) => { - const { tabIndex, data, act } = props; - switch (tabIndex) { - case 1: - return ( - <OccupantTab occupant={data.occupant} cabling={data.cabling} fuel={data.fuel} act={act} /> - ); - case 2: - return ( - <Section title="Supplies"> - <LabeledList> - <LabeledList.Item label="Welding Fuel"> - {data.fuel} - </LabeledList.Item> - <LabeledList.Item label="Wire Cabling"> - {data.cabling} - </LabeledList.Item> - <LabeledList.Item label="Self Service"> - <Button.Checkbox tooltip="Toggle self-service." checked={data.allow_self_service} disabled={data.viewer_is_robot} onClick={() => act("self-service")} /> { data.allow_self_service ? "Enabled" : "Disabled"} - </LabeledList.Item> - </LabeledList> - <AvailableModulesDisplay modules={data.modules} act={act} /> - <AvailableUpgradesDisplay upgrades={data.upgrades} act={act} /> - <AvailableCellsDisplay cells={data.cells} act={act} /> - <AvailableClothingDisplay clothes={data.clothes} act={act} /> - </Section>); - } -}; diff --git a/tgui/packages/tgui/interfaces/CyborgDockingStation/type.ts b/tgui/packages/tgui/interfaces/CyborgDockingStation/type.ts index eb39570e63ad6..068e0ff325655 100644 --- a/tgui/packages/tgui/interfaces/CyborgDockingStation/type.ts +++ b/tgui/packages/tgui/interfaces/CyborgDockingStation/type.ts @@ -2,96 +2,110 @@ * @file * @copyright 2022 * @author glowbold (https://github.com/pgmzeta) + * @author Mordent (https://github.com/mordent-goonstation) * @license ISC */ +import { BooleanLike } from 'common/react'; + +type FalsyBooleanLike = false | 0 | null | undefined; +type TruthyBooleanLike = true | 1; + export interface CyborgDockingStationData { - occupant?: OccupantData, + occupant?: OccupantData; - disabled: boolean; - viewer_is_occupant: boolean; - viewer_is_robot: boolean; - allow_self_service: boolean, - conversion_chamber: boolean, + disabled: BooleanLike; + viewer_is_occupant: BooleanLike; + viewer_is_robot: BooleanLike; + allow_self_service: BooleanLike; + conversion_chamber: BooleanLike; - cabling: number, - fuel: number, + cabling: number; + fuel: number; - cells?: Array<PowerCellData>, - modules?: Array<ModuleData>, - upgrades?: Array<UpgradeData>, - clothes?: Array<ClothingData>, + cells: PowerCellData[]; + modules: ModuleData[]; + upgrades: UpgradeData[]; + clothes: ClothingData[]; } -interface OccupantData { - name: string, - kind: string, +interface OccupantDataBase { + name: string; + kind: 'eyebot' | 'human' | 'robot'; } -interface OccupantDataRobot extends OccupantData { - parts?: PartListData, - cell?: PowerCellData, - module?: string, - upgrades?: Array<string>, - upgrades_max?: number, - clothing?: Array<string>, - cosmetics?: CyborgCosmeticsData, +export interface OccupantDataRobot extends OccupantDataBase { + kind: 'robot'; + parts: PartListData; + cell?: PowerCellData; + moduleName?: string; + upgrades: UpgradeData[]; + upgrades_max: number; + clothing: ClothingData[]; + cosmetics: RobotCosmeticsData; + user: 'brain' | 'ai' | 'unknown'; } -interface OccupantDataHuman extends OccupantData { - health: number, - max_health: number, +export interface OccupantDataHuman extends OccupantDataBase { + kind: 'human'; + health: number; + max_health: number; } -interface OccupantDataEyebot extends OccupantData { - health: number, - max_health: number, - cell?: PowerCellData, +export interface OccupantDataEyebot extends OccupantDataBase { + kind: 'eyebot'; + cell: PowerCellData; } -interface PartListData { - head: PartData, - chest: PartData, - arm_l: PartData, - arm_r: PartData, - leg_l: PartData, - leg_r: PartData, +export type OccupantData = OccupantDataEyebot | OccupantDataHuman | OccupantDataRobot; + +export interface PartListData { + head: PartData; + chest: PartData; + arm_l: PartData; + arm_r: PartData; + leg_l: PartData; + leg_r: PartData; } -interface PartData { - exists: boolean, - max_health: number - dmg_blunt: number, - dmg_burn: number, +interface BasePartData { + exists: BooleanLike; } -interface PowerCellData { - name: string, - ref: string, - current: number, - max: number, +interface MissingPartData extends BasePartData { + exists: FalsyBooleanLike; } -interface ModuleData { - name: string, - ref: string, +interface PresentPartData extends BasePartData { + exists: TruthyBooleanLike; + max_health: number; + dmg_blunt: number; + dmg_burns: number; } -interface UpgradeData { - name: string, - ref: string, +export type PartData = MissingPartData | PresentPartData; + +export const isPresentPartsData = (partData: PartData): partData is PresentPartData => !!partData.exists; + +export interface ItemData { + name: string; + ref: string; } -interface ClothingData { - name: string, - ref: string, +export interface PowerCellData extends ItemData { + current: number; + max: number; } -interface CyborgCosmeticsData { - chest: string, - head: string, - arms: string, - legs: string, - paint: string, // hex colour rep - fx: Array<number>, // R,G,B rep +export interface ModuleData extends ItemData {} +export interface UpgradeData extends ItemData {} +export interface ClothingData extends ItemData {} + +export interface RobotCosmeticsData { + chest?: string; + head?: string; + arms?: string; + legs?: string; + paint?: string; // hex colour rep + fx: [number, number, number]; // R,G,B rep } diff --git a/tgui/packages/tgui/interfaces/CyborgModuleRewriter/ModuleView/ModuleDetail.tsx b/tgui/packages/tgui/interfaces/CyborgModuleRewriter/ModuleView/ModuleDetail.tsx index 36c26608d928d..0c06c8720259d 100644 --- a/tgui/packages/tgui/interfaces/CyborgModuleRewriter/ModuleView/ModuleDetail.tsx +++ b/tgui/packages/tgui/interfaces/CyborgModuleRewriter/ModuleView/ModuleDetail.tsx @@ -14,47 +14,50 @@ const resetOptions = [ { id: 'brobocop', name: 'Brobocop', - }, { + }, + { id: 'science', name: 'Science', - }, { + }, + { id: 'civilian', name: 'Civilian', - }, { + }, + { id: 'engineering', name: 'Engineering', - }, { + }, + { id: 'medical', name: 'Medical', - }, { + }, + { id: 'mining', name: 'Mining', }, ]; interface ModuleProps { - onMoveToolDown: (toolRef: string) => void, - onMoveToolUp: (toolRef: string) => void, - onRemoveTool: (toolRef: string) => void, - onResetModule: (moduleId: string) => void, - tools: ToolData[], + onMoveToolDown: (itemRef: string) => void; + onMoveToolUp: (itemRef: string) => void; + onRemoveTool: (itemRef: string) => void; + onResetModule: (moduleId: string) => void; + tools: ToolData[]; } export const ModuleDetail = (props: ModuleProps, context) => { - const { - onMoveToolDown, - onMoveToolUp, - onRemoveTool, - onResetModule, - tools, - } = props; - const [selectedToolRef, setSelectedToolRef] = useLocalState<string | undefined>(context, 'selectedToolRef', undefined); - const handleRemoveTool = (toolRef: string) => { - const toolIndex = tools.findIndex(tool => tool.ref === toolRef); - setSelectedToolRef(tools[toolIndex + 1]?.ref); - onRemoveTool(toolRef); + const { onMoveToolDown, onMoveToolUp, onRemoveTool, onResetModule, tools } = props; + const [selectedToolRef, setSelectedToolRef] = useLocalState<string | undefined>( + context, + 'selectedToolRef', + undefined + ); + const handleRemoveTool = (itemRef: string) => { + const toolIndex = tools.findIndex((tool) => tool.item_ref === itemRef); + setSelectedToolRef(tools[toolIndex + 1]?.item_ref); + onRemoveTool(itemRef); }; - const resolvedSelectedToolRef = selectedToolRef && tools.find(tool => tool.ref === selectedToolRef)?.ref; + const resolvedSelectedToolRef = selectedToolRef && tools.find((tool) => tool.item_ref === selectedToolRef)?.item_ref; if (selectedToolRef && !resolvedSelectedToolRef) { setSelectedToolRef(undefined); } @@ -70,23 +73,14 @@ export const ModuleDetail = (props: ModuleProps, context) => { <Stack vertical fill> <Stack.Item> <Section title="Reset"> - { - resetOptions.map(resetOption => { - const { - id, - name, - } = resetOption; - return ( - <Button - key={id} - onClick={() => onResetModule(id)} - title={name} - > - {name} - </Button> - ); - }) - } + {resetOptions.map((resetOption) => { + const { id, name } = resetOption; + return ( + <Button key={id} onClick={() => onResetModule(id)} title={name}> + {name} + </Button> + ); + })} </Section> </Stack.Item> <Stack.Item grow> diff --git a/tgui/packages/tgui/interfaces/CyborgModuleRewriter/ModuleView/Tools.tsx b/tgui/packages/tgui/interfaces/CyborgModuleRewriter/ModuleView/Tools.tsx index ab9d82ecaa776..cdb001fcbd0bf 100644 --- a/tgui/packages/tgui/interfaces/CyborgModuleRewriter/ModuleView/Tools.tsx +++ b/tgui/packages/tgui/interfaces/CyborgModuleRewriter/ModuleView/Tools.tsx @@ -16,46 +16,31 @@ interface ToolProps { } const Tool: SFC<ToolProps> = (props) => { - const { - children, - onClick, - selected, - } = props; + const { children, onClick, selected } = props; return ( - <Tabs.Tab onClick={onClick} selected={selected} > + <Tabs.Tab onClick={onClick} selected={selected}> {children} </Tabs.Tab> ); }; interface ToolsProps { - onSelectTool: (toolRef: string) => void; + onSelectTool: (itemRef: string) => void; selectedToolRef: string | undefined; tools: ToolData[] | undefined; } export const Tools = (props: ToolsProps) => { - const { - onSelectTool, - selectedToolRef, - tools = [], - } = props; + const { onSelectTool, selectedToolRef, tools = [] } = props; if (tools.length === 0) { return <EmptyPlaceholder>Module has no tools</EmptyPlaceholder>; } return ( <Tabs vertical> - {tools.map(tool => { - const { - name, - ref: toolRef, - } = tool; + {tools.map((tool) => { + const { name, item_ref: itemRef } = tool; return ( - <Tool - key={toolRef} - onClick={() => onSelectTool(toolRef)} - selected={toolRef === selectedToolRef} - > + <Tool key={itemRef} onClick={() => onSelectTool(itemRef)} selected={itemRef === selectedToolRef}> {name} </Tool> ); diff --git a/tgui/packages/tgui/interfaces/CyborgModuleRewriter/ModuleView/index.tsx b/tgui/packages/tgui/interfaces/CyborgModuleRewriter/ModuleView/index.tsx index bbed0268999ba..dce9a7d03e1bd 100644 --- a/tgui/packages/tgui/interfaces/CyborgModuleRewriter/ModuleView/index.tsx +++ b/tgui/packages/tgui/interfaces/CyborgModuleRewriter/ModuleView/index.tsx @@ -15,21 +15,18 @@ import { ModulesData } from '../type'; const ModuleListWidth = 20; interface ModuleViewProps { - modules: ModulesData, - onEjectModule: (moduleRef: string) => void, - onMoveToolDown: (moduleRef: string, toolRef: string) => void, - onMoveToolUp: (moduleRef: string, toolRef: string) => void, - onRemoveTool: (moduleRef: string, toolRef: string) => void, - onResetModule: (moduleRef: string, moduleId: string) => void, - onSelectModule: (moduleRef: string) => void, + modules: ModulesData; + onEjectModule: (itemRef: string) => void; + onMoveToolDown: (itemRef: string) => void; + onMoveToolUp: (itemRef: string) => void; + onRemoveTool: (itemRef: string) => void; + onResetModule: (moduleId: string) => void; + onSelectModule: (itemRef: string) => void; } export const ModuleView = (props: ModuleViewProps) => { const { - modules: { - available = [], - selected, - } = {}, + modules: { available = [], selected } = {}, onEjectModule, onMoveToolDown, onMoveToolUp, @@ -37,15 +34,7 @@ export const ModuleView = (props: ModuleViewProps) => { onResetModule, onSelectModule, } = props; - const { - ref: selectedModuleRef, - tools = [], - } = selected || {}; - - const handleMoveToolDown = (toolRef: string) => onMoveToolDown(selectedModuleRef, toolRef); - const handleMoveToolUp = (toolRef: string) => onMoveToolUp(selectedModuleRef, toolRef); - const handleRemoveTool = (toolRef: string) => onRemoveTool(selectedModuleRef, toolRef); - const handleResetModule = (moduleId: string) => onResetModule(selectedModuleRef, moduleId); + const { item_ref: selectedModuleRef, tools = [] } = selected || {}; if (available.length === 0) { return ( @@ -59,53 +48,43 @@ export const ModuleView = (props: ModuleViewProps) => { <Stack.Item width={ModuleListWidth}> <Section title="Modules" scrollable fill> <Tabs vertical> - { - available.map(module => { - const { - ref: moduleRef, - name, - } = module; - const ejectButton = ( - <Button - icon="eject" - color="transparent" - onClick={() => onEjectModule(moduleRef)} - title={`Eject ${name}`} - /> - ); - return ( - <Tabs.Tab - key={moduleRef} - onClick={() => onSelectModule(moduleRef)} - rightSlot={ejectButton} - selected={moduleRef === selectedModuleRef} - > - {name} - </Tabs.Tab> - ); - }) - } + {available.map((module) => { + const { item_ref: itemRef, name } = module; + const ejectButton = ( + <Button + icon="eject" + color="transparent" + onClick={() => onEjectModule(itemRef)} + title={`Eject ${name}`} + /> + ); + return ( + <Tabs.Tab + key={itemRef} + onClick={() => onSelectModule(itemRef)} + rightSlot={ejectButton} + selected={itemRef === selectedModuleRef}> + {name} + </Tabs.Tab> + ); + })} </Tabs> </Section> </Stack.Item> <Stack.Item grow> - { - selectedModuleRef - ? ( - <ModuleDetail - onMoveToolDown={handleMoveToolDown} - onMoveToolUp={handleMoveToolUp} - onRemoveTool={handleRemoveTool} - onResetModule={handleResetModule} - tools={tools} - /> - ) - : ( - <Section fill> - <EmptyPlaceholder>No module selected</EmptyPlaceholder> - </Section> - ) - } + {selectedModuleRef ? ( + <ModuleDetail + onMoveToolDown={onMoveToolDown} + onMoveToolUp={onMoveToolUp} + onRemoveTool={onRemoveTool} + onResetModule={onResetModule} + tools={tools} + /> + ) : ( + <Section fill> + <EmptyPlaceholder>No module selected</EmptyPlaceholder> + </Section> + )} </Stack.Item> </Stack> ); diff --git a/tgui/packages/tgui/interfaces/CyborgModuleRewriter/action.ts b/tgui/packages/tgui/interfaces/CyborgModuleRewriter/action.ts index 5af25f064676a..9006662394087 100644 --- a/tgui/packages/tgui/interfaces/CyborgModuleRewriter/action.ts +++ b/tgui/packages/tgui/interfaces/CyborgModuleRewriter/action.ts @@ -5,9 +5,9 @@ * @license ISC */ -import { +import { Action } from './type'; +import type { Act, - Action, ModuleActionPayload, MoveToolActionPayload, ResetModuleActionPayload, diff --git a/tgui/packages/tgui/interfaces/CyborgModuleRewriter/index.tsx b/tgui/packages/tgui/interfaces/CyborgModuleRewriter/index.tsx index 6d18294822f80..c179cee3626b0 100644 --- a/tgui/packages/tgui/interfaces/CyborgModuleRewriter/index.tsx +++ b/tgui/packages/tgui/interfaces/CyborgModuleRewriter/index.tsx @@ -10,38 +10,30 @@ import { Window } from '../../layouts'; import { ModuleView } from './ModuleView'; import { ejectModule, moveTool, removeTool, resetModule, selectModule } from './action'; import * as styles from './style'; -import { CyborgModuleRewriterData, Direction } from './type'; +import { Direction } from './type'; +import type { CyborgModuleRewriterData } from './type'; -export const CyborgModuleRewriter = (_props, context) => { +export const CyborgModuleRewriter = (_props: unknown, context) => { const { act, data } = useBackend<CyborgModuleRewriterData>(context); const { modules } = data; - const handleEjectModule = (moduleRef: string) => ejectModule(act, { moduleRef }); - const handleMoveToolDown = (moduleRef: string, toolRef: string) => moveTool(act, { - dir: Direction.Down, - moduleRef, - toolRef, - }); - const handleMoveToolUp = (moduleRef: string, toolRef: string) => moveTool(act, { - dir: Direction.Up, - moduleRef, - toolRef, - }); - const handleRemoveTool = (moduleRef: string, toolRef: string) => removeTool(act, { - moduleRef, - toolRef, - }); - const handleResetModule = (moduleRef: string, moduleId: string) => resetModule(act, { - moduleId, - moduleRef, - }); - const handleSelectModule = (moduleRef: string) => selectModule(act, { moduleRef }); + const handleEjectModule = (itemRef: string) => ejectModule(act, { itemRef }); + const handleMoveToolDown = (itemRef: string) => + moveTool(act, { + dir: Direction.Down, + itemRef, + }); + const handleMoveToolUp = (itemRef: string) => + moveTool(act, { + dir: Direction.Up, + itemRef, + }); + const handleRemoveTool = (itemRef: string) => removeTool(act, { itemRef }); + const handleResetModule = (moduleId: string) => resetModule(act, { moduleId }); + const handleSelectModule = (itemRef: string) => selectModule(act, { itemRef }); return ( - <Window - width={670} - height={640} - > + <Window width={670} height={640}> <Window.Content className={styles.Block}> <ModuleView modules={modules} diff --git a/tgui/packages/tgui/interfaces/CyborgModuleRewriter/type.ts b/tgui/packages/tgui/interfaces/CyborgModuleRewriter/type.ts index 5b7fded2f6994..b35aa157d2155 100644 --- a/tgui/packages/tgui/interfaces/CyborgModuleRewriter/type.ts +++ b/tgui/packages/tgui/interfaces/CyborgModuleRewriter/type.ts @@ -6,27 +6,27 @@ */ export interface CyborgModuleRewriterData { - modules: ModulesData, + modules: ModulesData; } interface AvailableModule { - name: string, - ref: string, + name: string; + item_ref: string; } interface SelectedModule { - ref: string, - tools: Array<ToolData>, + item_ref: string; + tools: Array<ToolData>; } export interface ModulesData { - available: Array<AvailableModule>, - selected: SelectedModule, + available: Array<AvailableModule>; + selected: SelectedModule; } export interface ToolData { - name: string, - ref: string, + name: string; + item_ref: string; } export enum Action { @@ -42,20 +42,20 @@ export enum Direction { Down = 'down', } -export type Act = (action: string, payload?: object) => void +export type Act = (action: string, payload?: object) => void; -export interface ModuleActionPayload { - moduleRef: string, +interface ItemActionPayload { + itemRef: string; } -export interface ToolActionPayload extends ModuleActionPayload { - toolRef: string, -} +export interface ModuleActionPayload extends ItemActionPayload {} + +export interface ToolActionPayload extends ItemActionPayload {} export interface MoveToolActionPayload extends ToolActionPayload { - dir: Direction, + dir: Direction; } -export interface ResetModuleActionPayload extends ModuleActionPayload { - moduleId: string, +export interface ResetModuleActionPayload { + moduleId: string; } diff --git a/tgui/packages/tgui/interfaces/MixerMachine.js b/tgui/packages/tgui/interfaces/MixerMachine.js new file mode 100644 index 0000000000000..595816b9c2b56 --- /dev/null +++ b/tgui/packages/tgui/interfaces/MixerMachine.js @@ -0,0 +1,92 @@ +/** + * @file + * @copyright 2024 + * @author mloccy (https://github.com/mloccy) + * @license ISC + */ + +import { useBackend } from '../backend'; +import { Box, Button, Flex, Image, Section, Stack } from '../components'; +import { Window } from '../layouts'; + +export const MixerItem = (props, context) => { + const { act } = useBackend(context); + + const { mixerItem, working } = props; + + return ( + <Flex> + <Image + verticalAlign="middle" + height="24px" + width="24px" + src={`data:image/png;base64,${mixerItem.iconData}`} /> + <Button + nowrap + icon="eject" + color="blue" + title={"Eject " + mixerItem.name} + textAlign="center" + disabled={working} + onClick={() => act("eject", { index: mixerItem.index })} /> + + <Box nowrap + as="span" + key={mixerItem.index} + m="0.25rem" + textAlign="center"> + {mixerItem.name} + </Box> + </Flex> + ); +}; + +export const MixerMachine = (props, context) => { + const { data, act } = useBackend(context); + const items = data.mixerContents; + return ( + <Window + title="Kitchen Helper" + width={500} + height={220}> + <Window.Content > + <Stack m="0.25rem" vertical fill> + + <Stack.Item grow={1}> + { + <Section fill title={"Contents: (" + items.length + "/" + data.maxItems + ")"}> + { + (items.length > 0) + ? items.map(item => (<MixerItem key={item.index} mixerItem={item} working={data.working} />)) + :"No contents in mixer" + } + </Section> + } + </Stack.Item> + + <Stack.Item m=".25rem"> + <Button + mt="0.5rem" + backgroundColor="green" + icon="check" + title={"Start Mixing"} + textAlign="center" + disabled={data.working || items.length === 0} + onClick={() => act("mix", {})}>Mix + </Button> + + <Button + backgroundColor="blue" + icon="eject" + title={"Eject All"} + textAlign="center" + disabled={data.working || items.length === 0} + onClick={() => act("ejectAll", {})}>Eject All + </Button> + </Stack.Item> + </Stack> + + </Window.Content> + </Window> + ); +}; diff --git a/tgui/packages/tgui/interfaces/PollBallot.js b/tgui/packages/tgui/interfaces/PollBallot.js new file mode 100644 index 0000000000000..9212454a1617e --- /dev/null +++ b/tgui/packages/tgui/interfaces/PollBallot.js @@ -0,0 +1,183 @@ +import { useBackend } from '../backend'; +import { Button, ProgressBar, Section, Stack } from '../components'; +import { Window } from '../layouts'; + +const getServerButtonType = (servers) => { + if (servers.includes("global")) { + return { tooltip: "Global Poll", icon: "globe" }; + } else if (servers.includes("rp_only")) { + return { tooltip: "RP Only Poll", icon: "masks-theater" }; + } + return { tooltip: "Local Poll", icon: "location-dot" }; +}; + +const PollControls = ({ isAdmin, act, pollId, isExpired, multipleChoice, expiryDate, servers }) => { + const serverButtonProps = getServerButtonType(servers); + return ( + <Stack> + <Stack.Item> + {multipleChoice ? ( + <Button + tooltip="Multiple Choice" + tooltipPosition="top" + icon="list-check" + /> + ) : null} + <Button + tooltip={serverButtonProps.tooltip} + tooltipPosition="top" + icon={serverButtonProps.icon} + onClick={() => act('editServers', { pollId })} + /> + <Button + tooltip={expiryDate ? expiryDate : "No Expiration Date"} + tooltipPosition="top" + color={isExpired ? 'bad' : 'good'} + icon={isExpired ? 'lock' : 'lock-open'} + onClick={() => act('editExpiration', { pollId })} + /> + {isAdmin ? ( + <> + <Button tooltip="Add Option" tooltipPosition="top" icon="plus" onClick={() => act('addOption', { pollId })} /> + <Button + tooltip="Edit Poll" + tooltipPosition="top" + icon="pen" + onClick={() => act('editPoll', { pollId })} + /> + <Button.Confirm tooltip="Delete Poll" tooltipPosition="top" icon="trash" color="bad" onClick={() => act('deletePoll', { pollId })} /> + </> + ) : null} + </Stack.Item> + </Stack> + ); +}; + +const OptionControls = ({ isAdmin, act, pollId, optionId }) => { + if (!isAdmin) return null; + return ( + <Stack> + <Stack.Item> + <Button icon="pen" onClick={() => act('editOption', { pollId, optionId })} /> + <Button.Confirm icon="trash" color="bad" onClick={() => act('deleteOption', { pollId, optionId })} /> + </Stack.Item> + </Stack> + ); +}; + +const Poll = ({ options, total_answers, act, pollId, isAdmin, isExpired, playerId, showVotes }) => { + if (!options || options.length === 0) return null; + return ( + <Stack vertical> + {options.map((option, index) => ( + <Stack.Item key={index}> + <Stack vertical> + <Stack> + <Stack.Item grow> + <Stack> + <Stack.Item grow> + <Button.Checkbox + disabled={isExpired} + checked={option.answers_player_ids.includes(playerId)} + onClick={() => act('vote', { pollId, optionId: option.id })} + > + {option.option} + </Button.Checkbox> + </Stack.Item> + {showVotes ? ( + <Stack.Item align="right"> + {`(${option.answers_count} votes)`} + </Stack.Item> + ) : null} + </Stack> + </Stack.Item> + <Stack.Item> + <OptionControls + isAdmin={isAdmin} + act={act} + pollId={pollId} + optionId={option.id} + /> + </Stack.Item> + </Stack> + <Stack.Item> + <ProgressBar value={total_answers ? option.answers_count / total_answers : 0} /> + </Stack.Item> + </Stack> + </Stack.Item> + ))} + </Stack> + ); +}; + +export const PollBallot = (props, context) => { + const { act, data } = useBackend(context); + const { isAdmin, filterInactive, polls, playerId, showVotes } = data; + + return ( + <Window title="Poll Ballot" width="750" height="800"> + <Window.Content> + <Stack vertical> + <Stack.Item> + <Stack> + <Stack.Item> + <Button.Checkbox + checked={filterInactive} + onClick={() => act('toggle-filterInactive')}>Filter Closed Polls + </Button.Checkbox> + </Stack.Item> + <Stack.Item> + <Button.Checkbox + checked={showVotes} + onClick={() => act('toggle-showVotes')}>Show Votes + </Button.Checkbox> + </Stack.Item> + {isAdmin ? ( + <Stack.Item> + <Button onClick={() => act('addPoll')}>Add Poll</Button> + </Stack.Item> + ) : null} + </Stack> + </Stack.Item> + { + polls && polls.filter(poll => { + // Check if the poll is expired by comparing the current date to expires_at. + const isExpired = poll.expires_at ? new Date() >= new Date(poll.expires_at) : false; + // If filterInactive is true, exclude expired polls. Otherwise, include all. + return !filterInactive || !isExpired; + }).map((poll, index) => ( + <Stack.Item key={index}> + <Section + title={poll.question} + buttons={ + <PollControls + isAdmin={isAdmin} + act={act} + pollId={poll.id} + isExpired={poll.expires_at && (new Date() > new Date(poll.expires_at))} + multipleChoice={poll.multiple_choice} + expiryDate={poll.expires_at} + servers={poll.servers} + /> + }> + <Stack vertical> + <Poll + options={poll.options} + total_answers={poll.total_answers} + act={act} + pollId={poll.id} + isAdmin={isAdmin} + isExpired={poll.expires_at && (new Date() > new Date(poll.expires_at))} + playerId={playerId} + showVotes={showVotes} + /> + </Stack> + </Section> + </Stack.Item> + )) + } + </Stack> + </Window.Content> + </Window> + ); +}; diff --git a/tgui/packages/tgui/interfaces/PumpControl/index.tsx b/tgui/packages/tgui/interfaces/PumpControl/index.tsx new file mode 100644 index 0000000000000..e4569fb90641c --- /dev/null +++ b/tgui/packages/tgui/interfaces/PumpControl/index.tsx @@ -0,0 +1,128 @@ +/** + * @file + * @copyright 2024 + * @author Romayne (https://github.com/MeggalBozale) + * @license ISC (https://choosealicense.com/licenses/isc/) + */ + +import { useBackend, useLocalState } from '../../backend'; +import { Box, Button, Section, Slider, Stack } from '../../components'; +import { Window } from '../../layouts'; + +// Responsible for providing information and settings for a pump. +const PumpSettings = (props:any, context:any) => { + const { act } = useBackend<PumpData>(context); + const { pump } = props; + // Local states allow to keep the appearance of seamless response, but do not cope well with button spamming + const [target_output, setOutput] = useLocalState(context, pump.netid+"pressure", pump.target_output); + const [power, setPower] = useLocalState(context, pump.netid+"power", "on"); + + const setPressure = (newPressure: number) => { + setOutput(newPressure); + act('setPressure', { netid: pump.netid, pressure: newPressure }); + }; + const togglePump = () => { + setPower((power === "on") ? "off" : "on"); + act('togglePump', { netid: pump.netid }); + }; + + return ( + <Box> + <Stack py={1}> + <Stack.Item> + {pump.tag} + </Stack.Item> + { + <Stack.Item textAlign={"right"} grow={1}> + {pump.alive === -1 ? "Establishing Connection..." : "Connected"} + </Stack.Item> + } + </Stack> + <Stack> + <Stack.Item> + <Button + width={4} + icon="power-off" + color={(power === 'on') ? "green" : "red"} + onClick={() => togglePump()}> + {(power === 'on') ? 'On' : 'Off'} + </Button> + </Stack.Item> + <Stack.Item grow> + <Slider + disabled={pump.alive !== 1} + value={target_output} + minValue={pump.min_output} + maxValue={pump.max_output} + unit={"kPa"} + stepPixelSize={0.05} + onChange={(_e: any, value: number) => setPressure(value)} + /> + </Stack.Item> + </Stack> + </Box> + ); +}; + +// Responsible for creating a section for the pumps in an area. +const PumpArea = (props:any, context:any) => { + const { data } = useBackend<AreaList>(context); + const { area } = props; + + // Need the keys as a list >:( + let pump_controls = []; + for (let pump_key in data.area_list[area]) { + if (data.area_list[area][pump_key].alive === 0) continue; + pump_controls.push(<PumpSettings pump={data.area_list[area][pump_key]} />); + } + // All pumps were dead + if (pump_controls.length === 0) { + pump_controls.push( + <p>No pumps found for {area}, please refresh and check connection.</p> + ); + } + + return ( + <Section + title={area} + textAlign="left" + mb={1} + style={{ + "padding": "5px", + "padding-top": "1px", + }} + > + {pump_controls} + </Section> + ); +}; + +// Main element, responsible for building the window. +export const PumpControl = (props, context) => { + const { act, data } = useBackend<AreaList>(context); + const refresh = () => act('refresh'); + + // Need this as list >:( + let areas = []; + for (let area in data.area_list) areas.push(area); + + return ( + <Window + title="Pump Control Computer" + width={400} + height={500}> + <Window.Content scrollable> + <Button + style={{ + "margin-bottom": "10px", + }} + icon="wifi" + onClick={() => refresh()} + > + Requery Pumps + </Button> + {areas.map((area) => (<PumpArea area={area} key={area} />))} + </Window.Content> + </Window> + ); +}; diff --git a/tgui/packages/tgui/interfaces/PumpControl/type.ts b/tgui/packages/tgui/interfaces/PumpControl/type.ts new file mode 100644 index 0000000000000..58f3153f3568d --- /dev/null +++ b/tgui/packages/tgui/interfaces/PumpControl/type.ts @@ -0,0 +1,25 @@ +/** + * @file + * @copyright 2024 + * @author Romayne (https://github.com/MeggalBozale) + * @license ISC (https://choosealicense.com/licenses/isc/) + */ + +// List of information about a pump +type PumpData = { + tag: string; // Pump name + netid: string; // Pump id + power: string; // On or off + target_output: number; // Current output target of the pump + min_output: number; + max_output: number; + area_name: string; // Name of the area this pump is in + processing: boolean; // Whether we are waiting for packet response or not + alive: number; // A value of -1, 0, or 1 where -1 is checking if the pump is alive, 0 is dead, and 1 is alive +} + +// List of areas which have pumps +type AreaList = { + area_list: { [key: string] : { [key: string] : PumpData } }; + frequency: number; +}; diff --git a/tgui/packages/tgui/interfaces/Radio/index.tsx b/tgui/packages/tgui/interfaces/Radio/index.tsx index fb8652e75e584..0e8c48fa9f4b2 100644 --- a/tgui/packages/tgui/interfaces/Radio/index.tsx +++ b/tgui/packages/tgui/interfaces/Radio/index.tsx @@ -96,7 +96,7 @@ export const Radio = (_props, context) => { )} {!!data.sendButton && ( <LabeledList.Item> - <Button align="center" onClick={() => { act("send"); }}>Send signal</Button> + <Button align="center" onClick={() => { act("send"); }} icon="wifi">Send signal</Button> </LabeledList.Item> )} </LabeledList> diff --git a/tgui/packages/tgui/interfaces/SpawnEvent.js b/tgui/packages/tgui/interfaces/SpawnEvent.js index 843e5b66f680e..7ff8e391ae7d3 100644 --- a/tgui/packages/tgui/interfaces/SpawnEvent.js +++ b/tgui/packages/tgui/interfaces/SpawnEvent.js @@ -52,6 +52,13 @@ export const SpawnEvent = (props, context) => { > {(spawn_type === "job") ? thing_name : "Job"} </Button> + <Button + selected={spawn_type === "random_human"} + onClick={() => act("set_random_human")} + tooltip={"Just a basic random human."} + > + Random Human + </Button> </LabeledList.Item> <LabeledList.Item label="Accept delay"> {!!ask_permission && ( diff --git a/tgui/packages/tgui/interfaces/TTV/index.tsx b/tgui/packages/tgui/interfaces/TTV/index.tsx new file mode 100644 index 0000000000000..76f9e4b379092 --- /dev/null +++ b/tgui/packages/tgui/interfaces/TTV/index.tsx @@ -0,0 +1,94 @@ +/** + * @file + * @copyright 2024 + * @author Romayne (https://github.com/MeggalBozale) + * @license ISC + */ + +import { useBackend } from '../../backend'; +import { Button, LabeledList, RoundGauge, Section, Stack } from '../../components'; +import { Window } from '../../layouts'; +import { toTitleCase } from 'common/string'; +import { formatPressure } from '../../format'; + +export const TankInfo = (_props, context) => { + const { act } = useBackend(context); + const { tank, tankNum } = _props; + let button_eject = <Button width={5} textAlign={"center"} disabled={tank.name===null} icon="eject" onClick={() => act(tankNum === 1 ? "remove_tank_one" : "remove_tank_two")}>Eject</Button>; + let button_add = <Button width={5} textAlign={"center"} icon="add" onClick={() => act("add_item", { "tank": tankNum })}>Add</Button>; + let maxPressure = (tank.maxPressure !== null) ? tank.maxPressure : 999; + return ( + <Section + title={tankNum === 1 ? "Tank One" : "Tank Two"} + buttons={tank.name !== null ? button_eject : button_add} + style={{ + "height": "100%", + }} + > + <LabeledList> + <LabeledList.Item label={"Holding"}> + {tank.name !== null ? toTitleCase(tank.name) : "None"} + </LabeledList.Item> + <LabeledList.Item + label="Pressure"> + <RoundGauge + size={1.75} + value={tank.pressure !== null ? tank.pressure : 0} + minValue={0} + maxValue={maxPressure} + alertAfter={maxPressure * 0.70} + ranges={{ + "good": [0, maxPressure * 0.70], + "average": [maxPressure * 0.70, maxPressure * 0.85], + "bad": [maxPressure * 0.85, maxPressure], + }} + format={formatPressure} + /> + </LabeledList.Item> + </LabeledList> + </Section> + ); +}; + +export const TTV = (_props, context) => { + const { act, data } = useBackend<TransferValveParams>(context); + const { + opened, + tank_one, + tank_two, + } = data; + return ( + <Window width={650} height={170}> + <Window.Content> + <Stack> + <Stack.Item> + <TankInfo tank={tank_one} tankNum={1} /> + </Stack.Item> + + <Stack.Item> + <Section title="Valve" px={1}> + <Stack vertical textAlign="center"> + <Stack.Item color={opened ? "red" : "green"}> + Valve is {opened ? "open" : "closed"} + </Stack.Item> + <Stack.Item> + <Button icon="repeat" onClick={() => act("toggle_valve")}> + Toggle Valve + </Button> + </Stack.Item> + <Stack.Item> + {(data.device === '') ? "No Device " : ''} + {(data.device === '') ? <Button icon="add" onClick={() => act("add_item")}>Add</Button> + : <><Button onClick={() => act("interact_device")}>{data.device}</Button><Button icon="eject" onClick={() => act("remove_device")}>Eject</Button></>} + </Stack.Item> + </Stack> + </Section> + </Stack.Item> + <Stack.Item> + <TankInfo tank={tank_two} tankNum={2} /> + </Stack.Item> + </Stack> + </Window.Content> + </Window> + ); +}; diff --git a/tgui/packages/tgui/interfaces/TTV/type.ts b/tgui/packages/tgui/interfaces/TTV/type.ts new file mode 100644 index 0000000000000..acf24712795e8 --- /dev/null +++ b/tgui/packages/tgui/interfaces/TTV/type.ts @@ -0,0 +1,20 @@ +/** + * @file + * @copyright 2024 + * @author Romayne (https://github.com/MeggalBozale) + * @license ISC + */ + +interface TransferValveParams { + opened: boolean; + tank_one: TankData; + tank_two: TankData; + device: string; +} + +interface TankData { + name: string; + num: number; + pressure: number; + maxPressure: number; +} diff --git a/tgui/packages/tgui/interfaces/Wizard_Spellbook.js b/tgui/packages/tgui/interfaces/Wizard_Spellbook.js new file mode 100644 index 0000000000000..7ed300eafd0fd --- /dev/null +++ b/tgui/packages/tgui/interfaces/Wizard_Spellbook.js @@ -0,0 +1,153 @@ +/** + * @file + * @copyright 2024 + * @author IPingu (https://github.com/IPling) + * @license ISC + */ + +import { useBackend, useLocalState, useSharedState } from '../backend'; +import { Box, Button, Collapsible, Dimmer, Divider, Flex, Input, LabeledList, Section, Stack } from '../components'; +import { Window } from '../layouts'; + +export const Wizard_Spellbook = (props, context) => { + const { data } = useBackend(context); + const [searchQuery, setSearchQuery] = useLocalState(context, 'searchQuery', ''); + const { + spellbook_contents, + spell_slots, + owner_name, + } = data; + + let spell_categories = []; + for (let spell_category in spellbook_contents) { + spell_categories.push(spell_category); + } + + return ( + <Window + title={"Wizard Spellbook"} + fontSize={2} + height={600} + width={500} + > + <Window.Content> + <Section title={owner_name+"'s Spellbook "}> + <Flex justify={"space-between"}> + <Flex.Item> + {"Spell slots remaining: "+spell_slots} + </Flex.Item> + <Flex.Item> + <Input + value={searchQuery} + placeholder={"Search by spell name"} + width={15} + autoSelect + onInput={(_, value) => setSearchQuery(value)} + /> + </Flex.Item> + </Flex> + </Section> + </Window.Content> + <Window.Content mt={12} scrollable> + <Section> + {spell_categories.map((category) => ( + <SpellCategory category={category} searchQuery={searchQuery} key={category} /> + ))} + </Section> + </Window.Content> + </Window> + ); +}; + +const SpellCategory = (props, context) => { + const { data } = useBackend(context); + const { spellbook_contents } = data; + const { category, searchQuery } = props; + + let spells = []; + for (let spell_name in spellbook_contents[category]) { + spells.push(spell_name); + } + + return ( + <Collapsible + title={category} + > + <Stack vertical> + <Divider /> + {spells.filter((spell) => spell.toLowerCase().includes(searchQuery.toLowerCase())).map((spell) => ( + <Spell spell={spell} category={category} key={spell} /> + ))} + </Stack> + </Collapsible> + ); +}; + +const If_Purchased_Text = (purchased, cost, spell_slots) => { + if (purchased) { + return "Spell purchased"; + } else if (cost > spell_slots) { + return "Not enough spell slots"; + } else if (cost === 1) { + return "Purchase for "+cost+" spell slot"; + } else { + return "Purchase for "+cost+" spell slots"; + } +}; + +const Spell = (props, context) => { + const { data, act } = useBackend(context); + const { + spellbook_contents, + spell_slots, + vr, + } = data; + const { spell, category } = props; + + const [purchased, setPurchased] = useSharedState(context, spell+"p", false); + let spell_contents = []; // Non-associated list of: desc, cost, cooldown, vr_allowed + for (let spell_data in spellbook_contents[category][spell]) { + spell_contents.push(spellbook_contents[category][spell][spell_data]); + } + + return ( + <Stack.Item> + <Section> + {(vr === 1) && (spell_contents[3] === 0) && ( + <Dimmer> + <Box fontSize={1.5} backgroundColor={"#384e68"} p={2}> + Spell unavailable in VR + </Box> + </Dimmer> + )} + <Section + title={spell} + buttons={ + <Flex> + <Button + backgroundColor={"green"} + disabled={spell_slots < spell_contents[1] || purchased} + onClick={() => { setPurchased(true); act("buyspell", { spell: spell }); }} + > + {If_Purchased_Text(purchased, spell_contents[1], spell_slots)} + </Button> + </Flex> + } + > + <LabeledList> + {spell_contents[2] !== null && ( + <LabeledList.Item label={"Cooldown"}> + {spell_contents[2]/10+" seconds"} + </LabeledList.Item> + )} + <LabeledList.Item label={"Description"}> + {spell_contents[0]} + </LabeledList.Item> + </LabeledList> + </Section> + <Divider /> + </Section> + </Stack.Item> + ); +}; + diff --git a/tgui/packages/tgui/interfaces/space_heater.js b/tgui/packages/tgui/interfaces/space_heater.js new file mode 100644 index 0000000000000..859db7f4a2ea8 --- /dev/null +++ b/tgui/packages/tgui/interfaces/space_heater.js @@ -0,0 +1,172 @@ +/** + * @file + * @copyright 2024 + * @author IPingu (https://github.com/IPling) + * @license ISC + */ + +import { useBackend } from '../backend'; +import { Button, Divider, LabeledList, ProgressBar, Section, Slider, Stack } from '../components'; +import { Window } from '../layouts'; +import { neutralTemperature } from './common/temperatureUtils'; +import { glitch } from './common/stringUtils'; + +const Glitch_Text = (emagged, string, number) => { + if (emagged) { + return glitch(string, number); + } else { + return string; + } +}; + +const Set_Color = (temperature, generic_color="") => { + if (temperature > 400) { + return "red"; + } else if (temperature < 180) { + return "blue"; + } else { + return generic_color; + } +}; + +const Set_Icon = (emagged, temperature, on) => { + if (!emagged) { return "eject"; } + else if (temperature < 180 && on) { return "snowflake"; } // Under 100 kelvin is supercooling + else if (temperature > 400 && on) { return "fire"; } // Over 400 kelvin is overheating + else { return "eject"; } +}; + +export const space_heater = (props, context) => { + const { data } = useBackend(context); + const { + emagged, + on, + set_temperature, + } = data; + return ( + <Window + title={Glitch_Text(emagged, "Space HVAC", 1)} + width={350} + height={250}> + <Window.Content> + <BatteryStatus /> + <TemperatureRegulator /> + </Window.Content> + </Window> + ); +}; + +const BatteryStatus = (props, context) => { + const { data, act } = useBackend(context); + const { + emagged, + on, + cell, + cell_name, + cell_charge, + set_temperature, + } = data; + return ( + <Section title={Glitch_Text(emagged, "Battery status", 2)} grow={0}> + <LabeledList> + <LabeledList.Item + label={Glitch_Text(emagged, "Cell", 1)} + verticalAlign={"middle"} + > + <Button + icon={Set_Icon(emagged, set_temperature, on)} + color={cell !== null ? Set_Color(set_temperature, "green") : "blue"} + onClick={() => cell !== null ? act('cellremove'): act('cellinstall')} + bold + > + {cell !== null ? Glitch_Text(emagged, cell_name, 2): Glitch_Text(emagged, "Insert power cell", 3)} + </Button> + </LabeledList.Item> + <LabeledList.Item + label={Glitch_Text(emagged, "Cell Power", 1)} + verticalAlign={"middle"}> + <ProgressBar + grow + color={cell !== null ? Set_Color(set_temperature, "green"): "red"} + ranges={{ + "green": [0.5, Infinity], + "yellow": [0.1, 0.5], + "red": [-Infinity, 0.1], + }} + value={Math.max(0, [cell !== null ? cell_charge/100 : 0])} + /> + </LabeledList.Item> + </LabeledList> + </Section> + ); +}; + +const TemperatureRegulator = (props, context) => { + const { data, act } = useBackend(context); + const { + emagged, + on, + min, + max, + set_temperature, + } = data; + return ( + <Section title={Glitch_Text(emagged, "Temperature regulator", 3)}> + <Stack justify="center" align="center"> + <Stack.Item> + <Button + icon={"fast-backward"} + color={Set_Color(set_temperature)} + tooltip={"Set minimum"} + disabled={set_temperature === min} + onClick={() => act("set_temp", { inputted_temperature: min })} /> + </Stack.Item> + <Stack.Item> + <Button + icon={"backward"} + color={Set_Color(set_temperature)} + tooltip={emagged ? "Decrease by 50": "Decrease by 5"} + disabled={set_temperature === min} + onClick={() => act("set_temp", { temperature_adjust: emagged ? -50: -5 })} /> + </Stack.Item> + <Stack.Item> + <Button + icon={"equals"} + color={Set_Color(set_temperature)} + tooltip={"Room temperature"} + onClick={() => act("set_temp", { inputted_temperature: neutralTemperature })} /> + </Stack.Item> + <Stack.Item> + <Button + icon={"forward"} + color={Set_Color(set_temperature)} + tooltip={emagged ? "Increase by 50": "Increase by 5"} + disabled={set_temperature === max} + onClick={() => act("set_temp", { temperature_adjust: emagged ? 50: 5 })} /> + </Stack.Item> + <Stack.Item> + <Button + icon={"fast-forward"} + color={Set_Color(set_temperature)} + tooltip={"Set maximum"} + disabled={set_temperature === max} + onClick={() => act("set_temp", { inputted_temperature: max })} /> + </Stack.Item> + </Stack> + <Divider /> + <Slider + value={set_temperature} + format={value => value+" K"} + minValue={min} + maxValue={max} + step={emagged ? 5: 1} + stepPixelSize={emagged ? 3: 1.8} + ranges={{ + "blue": [-Infinity, neutralTemperature-1], // Specifically want neutralTemperature (293.15) to be considered 'warm' + "red": [neutralTemperature, Infinity], + }} + onDrag={(e, value) => act("set_temp", { inputted_temperature: value })} + /> + </Section> + ); +}; diff --git a/tgui/packages/tgui/package.json b/tgui/packages/tgui/package.json index dce92d12485e4..39080b0dbc6ed 100644 --- a/tgui/packages/tgui/package.json +++ b/tgui/packages/tgui/package.json @@ -6,6 +6,7 @@ "@popperjs/core": "^2.9.3", "common": "workspace:*", "dateformat": "^4.5.1", + "dayjs": "^1.11.10", "dompurify": "^2.3.1", "inferno": "^7.4.8", "inferno-vnode-flags": "^7.4.8", diff --git a/tgui/packages/tgui/styles/interfaces/BanPanel.scss b/tgui/packages/tgui/styles/interfaces/BanPanel.scss new file mode 100644 index 0000000000000..3035270613c23 --- /dev/null +++ b/tgui/packages/tgui/styles/interfaces/BanPanel.scss @@ -0,0 +1,34 @@ +/** + * @file + * @copyright 2023 + * @author ZeWaka (https://github.com/ZeWaka) + * @license ISC + */ + +@use 'sass:color'; + +@use '~tgui/styles/base.scss'; + +.Layout__content { + background-image: none !important; // TODO: Make an 'admin' theme with goon logo bg +} + + +.CurrentBan { + background-color: rgba(0, 255, 0, 0.2); + font-weight: bold; +} + +.ExpiredBan { + background-color: rgba(255, 0, 0, 0.2); + font-style: italic; +} + +.BanText { + padding: 0.25rem; +} + +// For an <a> tag with the 'noColor' class, remove the color +a.NoColor { + color: inherit; +} \ No newline at end of file diff --git a/tgui/packages/tgui/styles/main.scss b/tgui/packages/tgui/styles/main.scss index 230be5fbc0167..faa2749a536fd 100644 --- a/tgui/packages/tgui/styles/main.scss +++ b/tgui/packages/tgui/styles/main.scss @@ -51,6 +51,7 @@ @include meta.load-css('./interfaces/common/ListSearch.scss'); @include meta.load-css('./interfaces/Airlock.scss'); @include meta.load-css('./interfaces/AlertModal.scss'); +@include meta.load-css('./interfaces/BanPanel.scss'); @include meta.load-css('./interfaces/Cashreg.scss'); @include meta.load-css('./interfaces/ColorPicker.scss'); @include meta.load-css('./interfaces/ComUplink.scss'); @@ -84,4 +85,4 @@ background-size: 70%; background-position: center; background-repeat: no-repeat; -} +} \ No newline at end of file diff --git a/tgui/yarn.lock b/tgui/yarn.lock index e6d3a27b2d2cd..1b77ec3d26dd2 100644 --- a/tgui/yarn.lock +++ b/tgui/yarn.lock @@ -3145,6 +3145,13 @@ __metadata: languageName: node linkType: hard +"dayjs@npm:^1.11.10": + version: 1.11.10 + resolution: "dayjs@npm:1.11.10" + checksum: a6b5a3813b8884f5cd557e2e6b7fa569f4c5d0c97aca9558e38534af4f2d60daafd3ff8c2000fed3435cfcec9e805bcebd99f90130c6d1c5ef524084ced588c4 + languageName: node + linkType: hard + "debug@npm:4, debug@npm:^4.0.1, debug@npm:^4.1.0, debug@npm:^4.1.1, debug@npm:^4.3.4": version: 4.3.4 resolution: "debug@npm:4.3.4" @@ -7137,6 +7144,7 @@ resolve@^2.0.0-next.3: "@popperjs/core": ^2.9.3 common: "workspace:*" dateformat: ^4.5.1 + dayjs: ^1.11.10 dompurify: ^2.3.1 inferno: ^7.4.8 inferno-vnode-flags: ^7.4.8 diff --git a/tools/UpdatePaths/Scripts/directcommit_hazard_suit_repath.txt b/tools/UpdatePaths/Scripts/directcommit_hazard_suit_repath.txt new file mode 100644 index 0000000000000..aae6a93ab6843 --- /dev/null +++ b/tools/UpdatePaths/Scripts/directcommit_hazard_suit_repath.txt @@ -0,0 +1,2 @@ +/obj/item/clothing/suit/rad : /obj/item/clothing/suit/hazard/rad +/obj/item/clothing/suit/fire : /obj/item/clothing/suit/hazard/fire diff --git a/tools/ci/check_grep.sh b/tools/ci/check_grep.sh index 811b6454bd730..c7e7c7f1738ee 100755 --- a/tools/ci/check_grep.sh +++ b/tools/ci/check_grep.sh @@ -48,4 +48,9 @@ if grep -P 'rand\([^)]*[0-9]\.' */**/*.dm; then st=1 fi; +if grep -P '^ABSTRACT_TYPE\([^/]' */**/*.dm; then + echo "ERROR: You need to include the slash before the area type name in ABSTRACT_TYPE." + st=1 +fi; + exit $st diff --git a/tools/ci/check_grep_secret.sh b/tools/ci/check_grep_secret.sh index 2ec5235554bf8..a005296cffaf0 100755 --- a/tools/ci/check_grep_secret.sh +++ b/tools/ci/check_grep_secret.sh @@ -38,4 +38,20 @@ if grep -P 'playsound\(([^,]*), "(sound\/[^\[]+)"' code/**/*.dm; then st=1 fi; +if grep -P 'plane\s*=\s*[0-9]+|plane\s*=\s*[A-Z_]+\s*[+\-*]\s*' */**/*.dm; then + echo "ERROR: don't directly set plane to a number, please use a define." + st=1 +fi; + +if grep -P 'rand\([^)]*[0-9]\.' */**/*.dm; then + echo "ERROR: rand() does not support floating point numbers, use randfloat() instead." + st=1 +fi; + + +if grep -P '^ABSTRACT_TYPE\([^/]' */**/*.dm; then + echo "ERROR: You need to include the slash before the area type name in ABSTRACT_TYPE." + st=1 +fi; + exit $st diff --git a/tools/ci/validate_dme.py b/tools/ci/validate_dme.py index 60e07e3495292..48560e766dfda 100644 --- a/tools/ci/validate_dme.py +++ b/tools/ci/validate_dme.py @@ -35,7 +35,7 @@ # The one file in maps we always include r'maps/config/map.dm', # OD lint stuff that we want to live in `goonstation.dme` - r'_std\__odlint.dm' + r'_std\__odlint.dme' ] lines = []