From 7d49bff172799e6dc182156d86e160cbb14098ef Mon Sep 17 00:00:00 2001 From: hypereddie Date: Thu, 21 Dec 2017 19:54:01 -0500 Subject: [PATCH 1/4] Reworked Ability API and added second ability Cooldowns are now handled by the Ability API, as such setCanFire(boolean) will throw an exception and canFire() is marked as deprecated. If you want to know if a PlayableEntity can use their primary ability or their secondary ability, then get their Ability and invoke canUsePrimary() and canUseSecondary() --- .circleci/config.yml | 31 ---- .../client/core/game/sprites/InputEntity.kt | 5 +- .../ghost/common/game/Player.java | 14 ++ .../gamemodes/tutorial/TutorialMatch.java | 2 +- .../ghost/game/match/abilities/Ability.java | 15 +- .../ghost/game/match/abilities/Boomerang.java | 31 ++-- .../match/abilities/CancelableAbility.java | 54 ------- .../ghost/game/match/abilities/Circle.java | 79 +++++----- .../ghost/game/match/abilities/ConelAOE.java | 19 ++- .../ghost/game/match/abilities/Dash.java | 87 +++++------ .../ghost/game/match/abilities/Gun.java | 24 ++-- .../ghost/game/match/abilities/JammedGun.java | 23 ++- .../ghost/game/match/abilities/Laser.java | 17 ++- .../game/match/abilities/PlayerAbility.java | 135 ++++++++++++++++++ .../game/match/entities/PlayableEntity.java | 12 +- .../entities/playable/BasePlayableEntity.java | 33 ++--- .../ghost/game/match/item/SpeedItem.java | 6 +- .../utils/MethodDeprecatedException.java | 15 ++ 18 files changed, 328 insertions(+), 274 deletions(-) delete mode 100644 .circleci/config.yml delete mode 100644 server/api/src/main/java/com/boxtrotstudio/ghost/game/match/abilities/CancelableAbility.java create mode 100644 server/api/src/main/java/com/boxtrotstudio/ghost/game/match/abilities/PlayerAbility.java create mode 100644 server/api/src/main/java/com/boxtrotstudio/ghost/utils/MethodDeprecatedException.java diff --git a/.circleci/config.yml b/.circleci/config.yml deleted file mode 100644 index 29bd102d..00000000 --- a/.circleci/config.yml +++ /dev/null @@ -1,31 +0,0 @@ -# Java Gradle CircleCI 2.0 configuration file -# -# Check https://circleci.com/docs/2.0/language-java/ for more details -# -version: 2 jobs: - build: - docker: - - image: circleci/openjdk:8-jdk - - # Specify service dependencies here if necessary CircleCI maintains a library of pre-built images documented at - # https://circleci.com/docs/2.0/circleci-images/ - image: circleci/postgres:9.4 - working_directory: ~/repo - environment: - # Customize the JVM maximum heap limit - JVM_OPTS: -Xmx3200m - TERM: dumb - - steps: - - checkout - # Download and cache dependencies - - restore_cache: - keys: - - v1-dependencies-{{ checksum "build.gradle" }} - # fallback to using the latest cache if no exact match is found - - v1-dependencies- - - run: gradle dependencies - - save_cache: - paths: - - ~/.gradle - key: v1-dependencies-{{ checksum "build.gradle" }} - - run: gradle test diff --git a/client/core/src/com/boxtrotstudio/ghost/client/core/game/sprites/InputEntity.kt b/client/core/src/com/boxtrotstudio/ghost/client/core/game/sprites/InputEntity.kt index ecd7a544..256523b4 100755 --- a/client/core/src/com/boxtrotstudio/ghost/client/core/game/sprites/InputEntity.kt +++ b/client/core/src/com/boxtrotstudio/ghost/client/core/game/sprites/InputEntity.kt @@ -113,13 +113,12 @@ class InputEntity(id: Short, texture: String) : NetworkPlayer(id, texture) { var mousePos = Vector3(Gdx.input.x.toFloat(), Gdx.input.y.toFloat(), 0f) Ghost.getInstance().camera.unproject(mousePos) - moveTowards(Vector2f(mousePos.x, mousePos.y)) + //moveTowards(Vector2f(mousePos.x, mousePos.y)) if (Ghost.matchStarted) { Thread(Runnable { //Maybe buffer this? //Ghost.startPingTimer(target); - val movementByte = if (GlobalOptions.getOptions().isPathfinding) 0x3.toByte() else 0x0.toByte() val packet = ActionRequestPacket() - packet.writePacket(Ghost.client, movementByte, mousePos.x, mousePos.y) + packet.writePacket(Ghost.client, 0x0.toByte(), mousePos.x, mousePos.y) }).start() } diff --git a/server/api/src/main/java/com/boxtrotstudio/ghost/common/game/Player.java b/server/api/src/main/java/com/boxtrotstudio/ghost/common/game/Player.java index b3704eb5..1ef8bfc9 100755 --- a/server/api/src/main/java/com/boxtrotstudio/ghost/common/game/Player.java +++ b/server/api/src/main/java/com/boxtrotstudio/ghost/common/game/Player.java @@ -5,6 +5,8 @@ import com.boxtrotstudio.ghost.common.network.world.NetworkWorld; import com.boxtrotstudio.ghost.game.match.LiveMatch; import com.boxtrotstudio.ghost.game.match.Match; +import com.boxtrotstudio.ghost.game.match.abilities.Ability; +import com.boxtrotstudio.ghost.game.match.abilities.PlayerAbility; import com.boxtrotstudio.ghost.game.match.entities.PlayableEntity; import com.boxtrotstudio.ghost.game.match.entities.playable.impl.BaseNetworkPlayer; import com.boxtrotstudio.ghost.game.match.item.Item; @@ -16,6 +18,7 @@ import com.boxtrotstudio.ghost.common.network.BaseServer; import java.io.IOException; +import java.lang.reflect.InvocationTargetException; import java.util.ArrayList; import java.util.List; @@ -158,6 +161,17 @@ public void sendMatchMessage(String message) { } } + public void _packet_setCurrentAbility(Class> class_) { + if (!canChangeAbility) + return; + + try { + this.ability = class_.getConstructor(PlayableEntity.class).newInstance(this); + } catch (InstantiationException | IllegalAccessException | InvocationTargetException | NoSuchMethodException e) { + throw new IllegalArgumentException("This ability is not compatible!"); + } + } + public void stopSpectating() { ((NetworkWorld)this.getMatch().getWorld()).removeSpectator(this); this.setMatch(null); diff --git a/server/api/src/main/java/com/boxtrotstudio/ghost/common/game/gamemodes/tutorial/TutorialMatch.java b/server/api/src/main/java/com/boxtrotstudio/ghost/common/game/gamemodes/tutorial/TutorialMatch.java index 888980ca..7313c5ad 100755 --- a/server/api/src/main/java/com/boxtrotstudio/ghost/common/game/gamemodes/tutorial/TutorialMatch.java +++ b/server/api/src/main/java/com/boxtrotstudio/ghost/common/game/gamemodes/tutorial/TutorialMatch.java @@ -21,7 +21,7 @@ public TutorialMatch(Team team1, Team team2, Server server) { super(team1, team2, server); bot = (TutorialBot) team2.getTeamMembers()[0]; - bot._packet_setCurrentAbility(Gun.class); + bot.setCurrentAbility(new Gun(bot)); } @Override diff --git a/server/api/src/main/java/com/boxtrotstudio/ghost/game/match/abilities/Ability.java b/server/api/src/main/java/com/boxtrotstudio/ghost/game/match/abilities/Ability.java index 1e9de072..a8150a76 100755 --- a/server/api/src/main/java/com/boxtrotstudio/ghost/game/match/abilities/Ability.java +++ b/server/api/src/main/java/com/boxtrotstudio/ghost/game/match/abilities/Ability.java @@ -17,11 +17,22 @@ public interface Ability { T owner(); /** - * The entity has executed this ability with the mouse position at targetX and targetY + * The entity has executed this ability primary ability with the mouse position at targetX and targetY * @param targetX The X position this ability was used * @param targetY The Y position this ability was used */ - void use(float targetX, float targetY); + void usePrimary(float targetX, float targetY); + + /** + * The entity has executed this ability secondary ability with the mouse position at targetX and targetY + * @param targetX The X position this ability was used + * @param targetY The Y position this ability was used + */ + void useSecondary(float targetX, float targetY); byte id(); + + boolean canFirePrimary(); + + boolean canFireSecondary(); } diff --git a/server/api/src/main/java/com/boxtrotstudio/ghost/game/match/abilities/Boomerang.java b/server/api/src/main/java/com/boxtrotstudio/ghost/game/match/abilities/Boomerang.java index 2d66c047..206da5bf 100755 --- a/server/api/src/main/java/com/boxtrotstudio/ghost/game/match/abilities/Boomerang.java +++ b/server/api/src/main/java/com/boxtrotstudio/ghost/game/match/abilities/Boomerang.java @@ -17,6 +17,7 @@ public class Boomerang implements Ability { private boolean active = false; private boolean returning = false; + private boolean canFire = false; public ConditionalRunnable checker; @@ -44,7 +45,7 @@ public PlayableEntity owner() { } @Override - public void use(float targetX, float targetY) { + public void usePrimary(float targetX, float targetY) { if (!active) { handleLaunch(targetX, targetY); } else { @@ -52,6 +53,11 @@ public void use(float targetX, float targetY) { } } + @Override + public void useSecondary(float targetX, float targetY) { + + } + @Override public byte id() { return 4; @@ -61,8 +67,11 @@ public byte id() { * Boomerang starts moving away. */ public void handleLaunch(float targetX, float targetY) { + if (!canFire) + return; + owner.setVisible(true); - owner.setCanFire(false); + canFire = false; float x = owner.getX(); float y = owner.getY(); @@ -84,12 +93,7 @@ public void handleLaunch(float targetX, float targetY) { active = true; owner.onFire(); //Indicate the player has fired, also triggers the fade out - TimeUtils.executeInSync(200, new Runnable() { - @Override - public void run() { - owner.setCanFire(true); - } - }, owner.getWorld()); + TimeUtils.executeInSync(200, () -> canFire = true, owner.getWorld()); TimeUtils.executeInSync(DEFAULT_RETURN_TIME, (checker = new ConditionalRunnable() { @Override @@ -102,7 +106,7 @@ public void run() { y = owner.getTarget().y; } - owner.setCanFire(false); //The player can't fire while the boomerang is returning + canFire = false; //The player can't fire while the boomerang is returning boomerang.startReturn(x, y); returning = true; @@ -116,7 +120,7 @@ public void run() { */ public void handleReturn(float x, float y) { owner.setVisible(true); - owner.setCanFire(false); //The player can't fire while the boomerang is returning + canFire = false; //The player can't fire while the boomerang is returning boomerang.startReturn(x, y); returning = true; @@ -131,11 +135,6 @@ public void onReturnFinished() { checker.execute = false; long wait = owner.calculateFireRate(BASE_COOLDOWN); //Base value is 315ms - TimeUtils.executeInSync(wait, new Runnable() { - @Override - public void run() { - owner.setCanFire(true); - } - }, owner.getWorld()); + TimeUtils.executeInSync(wait, () -> canFire = true, owner.getWorld()); } } diff --git a/server/api/src/main/java/com/boxtrotstudio/ghost/game/match/abilities/CancelableAbility.java b/server/api/src/main/java/com/boxtrotstudio/ghost/game/match/abilities/CancelableAbility.java deleted file mode 100644 index 36fdd195..00000000 --- a/server/api/src/main/java/com/boxtrotstudio/ghost/game/match/abilities/CancelableAbility.java +++ /dev/null @@ -1,54 +0,0 @@ -package com.boxtrotstudio.ghost.game.match.abilities; - -import com.boxtrotstudio.ghost.game.match.entities.PlayableEntity; -import com.boxtrotstudio.ghost.utils.TimeUtils; -import com.boxtrotstudio.ghost.utils.tick.Tickable; - -public abstract class CancelableAbility implements Ability { - private boolean running; - protected boolean canCancel = true; - - @Override - public final void use(float targetX, float targetY) { - running = true; - onUse(targetX, targetY); - } - - public boolean isRunning() { - return running; - } - - public final void cancel() { - if (!running || !canCancel) - return; - - running = false; - onCancel(); - } - - protected final void end(long basecooldown) { - if (!running) - return; - - PlayableEntity p = owner(); - - running = false; - - long wait = p.calculateFireRate(basecooldown); - TimeUtils.executeInSync(wait, () -> p.setCanFire(true), p.getWorld()); - } - - protected void executeInSync(long duration, Runnable runnable) { - TimeUtils.executeInSync(duration, () -> { - if (running) { - runnable.run(); - } - }, owner().getWorld()); - } - - protected abstract void onUse(float targetX, float targetY); - - protected void onCancel() { - - } -} diff --git a/server/api/src/main/java/com/boxtrotstudio/ghost/game/match/abilities/Circle.java b/server/api/src/main/java/com/boxtrotstudio/ghost/game/match/abilities/Circle.java index 93a41395..9ab0463f 100755 --- a/server/api/src/main/java/com/boxtrotstudio/ghost/game/match/abilities/Circle.java +++ b/server/api/src/main/java/com/boxtrotstudio/ghost/game/match/abilities/Circle.java @@ -7,18 +7,17 @@ import java.util.ArrayList; -public class Circle implements Ability { +public class Circle extends PlayerAbility { private PlayableEntity p; private static final long STAGE1_DURATION = 700; private static final long STAGE2_DURATION = 600; private static final long BASE_COOLDOWN = 1000; public Circle(PlayableEntity owner) { - this.p = owner; + super(owner); + baseCooldown = BASE_COOLDOWN; } - public Circle() { } - @Override public String name() { return "Circle"; @@ -30,9 +29,8 @@ public PlayableEntity owner() { } @Override - public void use(float targetX, float targetY) { + public void onUsePrimary(float targetX, float targetY) { wasInside.clear(); - p.setCanFire(false); p.setVisible(true); double temp = NetworkUtils.storeFloats(targetX, targetY); @@ -43,34 +41,26 @@ public void use(float targetX, float targetY) { //p.getWorld().spawnParticle(ParticleEffect.CIRCLE, (int) (STAGE1_DURATION + STAGE2_DURATION), 64, targetX, targetY, STAGE1_DURATION); - TimeUtils.executeInSync(STAGE1_DURATION, new Runnable() { - @Override - public void run() { - token.useDefaultBehavior(); - for (PlayableEntity p : wasInside) { - p.setVisible(false); - p.getSpeedStat().removeBuff("circle_debuff"); - } - wasInside.clear(); - - TimeUtils.executeInSync(STAGE2_DURATION, new Runnable() { - @Override - public void run() { - token.stopChecking(); - p.onFire(); - - long wait = p.calculateFireRate(BASE_COOLDOWN); //Base value is 315ms - TimeUtils.executeInSync(wait, new Runnable() { - @Override - public void run() { - p.setCanFire(true); - } - }, p.getWorld()); - } - }, p.getWorld()); + executeInSync(STAGE1_DURATION, () -> { + token.useDefaultBehavior(); + for (PlayableEntity p1 : wasInside) { + p1.setVisible(false); + p1.getSpeedStat().removeBuff("circle_debuff"); } - }, p.getWorld()); - //TimeUtils.executeInSync() + wasInside.clear(); + + executeInSync(STAGE2_DURATION, () -> { + token.stopChecking(); + p.onFire(); + + endPrimary(); + }); + }); + } + + @Override + protected void onUseSecondary(float targetX, float targetY) { + endSecondary(); } @Override @@ -79,20 +69,17 @@ public byte id() { } private ArrayList wasInside = new ArrayList<>(); - private final P2Runnable STAGE1 = new P2Runnable() { - @Override - public void run(PlayableEntity p, Boolean didHit) { - if (didHit) { - p.setVisible(true); - if (!p.getSpeedStat().hasBuff("circle_debuff")) { - p.getSpeedStat().addBuff("circle_debuff", BuffType.PercentSubtraction, 30.0, false); - } - wasInside.add(p); - } else if (wasInside.contains(p)) { - p.setVisible(false); - p.getSpeedStat().removeBuff("circle_debuff"); - wasInside.remove(p); + private final P2Runnable STAGE1 = (p1, didHit) -> { + if (didHit) { + p1.setVisible(true); + if (!p1.getSpeedStat().hasBuff("circle_debuff")) { + p1.getSpeedStat().addBuff("circle_debuff", BuffType.PercentSubtraction, 30.0, false); } + wasInside.add(p1); + } else if (wasInside.contains(p1)) { + p1.setVisible(false); + p1.getSpeedStat().removeBuff("circle_debuff"); + wasInside.remove(p1); } }; } diff --git a/server/api/src/main/java/com/boxtrotstudio/ghost/game/match/abilities/ConelAOE.java b/server/api/src/main/java/com/boxtrotstudio/ghost/game/match/abilities/ConelAOE.java index 0d8912fb..96e365c6 100755 --- a/server/api/src/main/java/com/boxtrotstudio/ghost/game/match/abilities/ConelAOE.java +++ b/server/api/src/main/java/com/boxtrotstudio/ghost/game/match/abilities/ConelAOE.java @@ -3,27 +3,20 @@ import com.boxtrotstudio.ghost.game.match.entities.PlayableEntity; import com.boxtrotstudio.ghost.game.match.entities.ability.ConelEntity; -public class ConelAOE implements Ability { +public class ConelAOE extends PlayerAbility { private PlayableEntity p; public ConelAOE(PlayableEntity playableEntity) { - this.p = playableEntity; + super(playableEntity); } - public ConelAOE() { } - @Override public String name() { return "ConelAOE"; //TODO Pick a better name } @Override - public PlayableEntity owner() { - return p; - } - - @Override - public void use(float targetX, float targetY) { + public void onUsePrimary(float targetX, float targetY) { final float x = p.getX(); final float y = p.getY(); @@ -34,6 +27,12 @@ public void use(float targetX, float targetY) { ConelEntity entity = new ConelEntity(p, direction); entity.setPosition(p.getPosition()); p.getWorld().spawnEntity(entity); + endPrimary(); + } + + @Override + protected void onUseSecondary(float targetX, float targetY) { + endSecondary(); } @Override diff --git a/server/api/src/main/java/com/boxtrotstudio/ghost/game/match/abilities/Dash.java b/server/api/src/main/java/com/boxtrotstudio/ghost/game/match/abilities/Dash.java index a1b8659e..123505b0 100755 --- a/server/api/src/main/java/com/boxtrotstudio/ghost/game/match/abilities/Dash.java +++ b/server/api/src/main/java/com/boxtrotstudio/ghost/game/match/abilities/Dash.java @@ -10,7 +10,7 @@ import java.util.List; -public class Dash implements Ability { +public class Dash extends PlayerAbility { private static final long BASE_COOLDOWN = 1100; private PlayableEntity p; @@ -18,11 +18,10 @@ public class Dash implements Ability { private static final int STALL = 800; public Dash(PlayableEntity p) { - this.p = p; + super(p); + baseCooldown = BASE_COOLDOWN; } - public Dash() { } - @Override public String name() { return "Dash"; @@ -34,8 +33,7 @@ public PlayableEntity owner() { } @Override - public void use(final float targetX, final float targetY) { - p.setCanFire(false); + public void onUsePrimary(final float targetX, final float targetY) { p.setVisible(true); p.freeze(); @@ -68,48 +66,41 @@ public void use(final float targetX, final float targetY) { p.triggerEvent(Event.DashCharge, angle); - TimeUtils.executeInSync(STALL, new Runnable() { - @Override - public void run() { - p.freeze(); - p.setVelocity(0f, 0f); - p.getSpeedStat().removeBuff(buffDecrease); - p.triggerEvent(Event.FireDash, angle); - - //Create a HitboxHelper to check the dash hitbox every server tick - final HitboxHelper.HitboxToken hitboxToken = HitboxHelper.checkHitboxEveryTick( - hitbox, //The hitbox to check - p //The damager - ); - - p.easeTo(target, 400); - - - TimeUtils.executeWhen(new Runnable() { - @Override - public void run() { - //Stop checking this hitbox - hitboxToken.stopChecking(); - - p.setTarget(null); - p.unfreeze(); - p.onFire(); - long wait = p.calculateFireRate(BASE_COOLDOWN); - TimeUtils.executeInSync(wait, new Runnable() { - @Override - public void run() { - p.setCanFire(true); - } - }, p.getWorld()); - } - }, new PFunction() { - @Override - public Boolean run(Void val) { - return (p.getX() == target.x && p.getY() == target.y) || !p.isEasing(); - } - }, p.getWorld()); - } - }, p.getWorld()); + executeInSync(STALL, () -> { + p.freeze(); + p.setVelocity(0f, 0f); + p.getSpeedStat().removeBuff(buffDecrease); + p.triggerEvent(Event.FireDash, angle); + + //Create a HitboxHelper to check the dash hitbox every server tick + final HitboxHelper.HitboxToken hitboxToken = HitboxHelper.checkHitboxEveryTick( + hitbox, //The hitbox to check + p //The damager + ); + + p.easeTo(target, 400); + + canCancel = false; + + TimeUtils.executeWhen(new Runnable() { + @Override + public void run() { + //Stop checking this hitbox + hitboxToken.stopChecking(); + + p.setTarget(null); + p.unfreeze(); + p.onFire(); + endPrimary(); + canCancel = true; + } + }, val -> (p.getX() == target.x && p.getY() == target.y) || !p.isEasing(), p.getWorld()); + }); + } + + @Override + protected void onUseSecondary(float targetX, float targetY) { + endSecondary(); } @Override diff --git a/server/api/src/main/java/com/boxtrotstudio/ghost/game/match/abilities/Gun.java b/server/api/src/main/java/com/boxtrotstudio/ghost/game/match/abilities/Gun.java index 57903abd..16761d93 100755 --- a/server/api/src/main/java/com/boxtrotstudio/ghost/game/match/abilities/Gun.java +++ b/server/api/src/main/java/com/boxtrotstudio/ghost/game/match/abilities/Gun.java @@ -6,32 +6,25 @@ import com.boxtrotstudio.ghost.game.match.entities.PlayableEntity; import com.boxtrotstudio.ghost.utils.TimeUtils; -public class Gun extends CancelableAbility { +public class Gun extends PlayerAbility { private static final float BULLET_SPEED = 15f; private static final long BASE_COOLDOWN = 555; private static final long ANIMATION_DELAY = 250; private PlayableEntity p; public Gun(PlayableEntity p) { - this.p = p; + super(p); + baseCooldown = BASE_COOLDOWN; } - public Gun() { } - @Override public String name() { return "gun"; } @Override - public PlayableEntity owner() { - return p; - } - - @Override - public void onUse(float targetX, float targetY) { + public void onUsePrimary(float targetX, float targetY) { final PlayableEntity p = owner(); - p.setCanFire(false); p.freeze(); float x = p.getX(); @@ -60,15 +53,20 @@ public void onUse(float targetX, float targetY) { p.unfreeze(); - end(BASE_COOLDOWN); + endPrimary(); }); } + @Override + protected void onUseSecondary(float targetX, float targetY) { + endSecondary(); + } + @Override protected void onCancel() { owner().unfreeze(); owner().onFire(); - end(BASE_COOLDOWN); + end(); } @Override diff --git a/server/api/src/main/java/com/boxtrotstudio/ghost/game/match/abilities/JammedGun.java b/server/api/src/main/java/com/boxtrotstudio/ghost/game/match/abilities/JammedGun.java index 33c3d869..73db1f20 100755 --- a/server/api/src/main/java/com/boxtrotstudio/ghost/game/match/abilities/JammedGun.java +++ b/server/api/src/main/java/com/boxtrotstudio/ghost/game/match/abilities/JammedGun.java @@ -3,12 +3,13 @@ import com.boxtrotstudio.ghost.game.match.entities.PlayableEntity; import com.boxtrotstudio.ghost.utils.TimeUtils; -public class JammedGun implements Ability { +public class JammedGun extends PlayerAbility { private static final long BASE_COOLDOWN = 555; private PlayableEntity p; public JammedGun(PlayableEntity p) { - this.p = p; + super(p); + baseCooldown = BASE_COOLDOWN; } @Override @@ -17,23 +18,19 @@ public String name() { } @Override - public PlayableEntity owner() { - return p; + protected void onUsePrimary(float targetX, float targetY) { + final PlayableEntity p = owner(); + p.onFire(); //Indicate this player is done firing + + endPrimary(); } @Override - public void use(float targetX, float targetY) { + protected void onUseSecondary(float targetX, float targetY) { final PlayableEntity p = owner(); - p.setCanFire(false); p.onFire(); //Indicate this player is done firing - long wait = p.calculateFireRate(BASE_COOLDOWN); //Base value is 315ms - TimeUtils.executeInSync(wait, new Runnable() { - @Override - public void run() { - p.setCanFire(true); - } - }, p.getWorld()); + endPrimary(); } @Override diff --git a/server/api/src/main/java/com/boxtrotstudio/ghost/game/match/abilities/Laser.java b/server/api/src/main/java/com/boxtrotstudio/ghost/game/match/abilities/Laser.java index 0436424d..7bf60fac 100755 --- a/server/api/src/main/java/com/boxtrotstudio/ghost/game/match/abilities/Laser.java +++ b/server/api/src/main/java/com/boxtrotstudio/ghost/game/match/abilities/Laser.java @@ -10,7 +10,7 @@ import java.util.ArrayList; import java.util.List; -public class Laser extends CancelableAbility { +public class Laser extends PlayerAbility { private static final long STALL_TIME = 600L; private static final long FIRE_WAIT = 200L; private static final long ANIMATION_TIME = 350L; @@ -20,11 +20,10 @@ public class Laser extends CancelableAbility { private PlayableEntity p; public Laser(PlayableEntity p) { - this.p = p; + super(p); + baseCooldown = BASE_COOLDOWN; } - public Laser() { } - @Override public String name() { return "laser"; @@ -36,11 +35,10 @@ public PlayableEntity owner() { } @Override - public void onUse(float targetX, float targetY) { + public void onUsePrimary(float targetX, float targetY) { p.freeze(); //Freeze the player p.setVelocity(0f, 0f); p.setVisible(true); - p.setCanFire(false); /*final LaserEntity laserEntity = new LaserEntity(p); @@ -120,7 +118,7 @@ public void run() { h.stopChecking(); } - end(BASE_COOLDOWN); + endPrimary(); } }, p.getWorld()); } @@ -129,6 +127,11 @@ public void run() { }); } + @Override + protected void onUseSecondary(float targetX, float targetY) { + endSecondary(); + } + @Override protected void onCancel() { owner().unfreeze(); diff --git a/server/api/src/main/java/com/boxtrotstudio/ghost/game/match/abilities/PlayerAbility.java b/server/api/src/main/java/com/boxtrotstudio/ghost/game/match/abilities/PlayerAbility.java new file mode 100644 index 00000000..1aace8a9 --- /dev/null +++ b/server/api/src/main/java/com/boxtrotstudio/ghost/game/match/abilities/PlayerAbility.java @@ -0,0 +1,135 @@ +package com.boxtrotstudio.ghost.game.match.abilities; + +import com.boxtrotstudio.ghost.game.match.entities.PlayableEntity; +import com.boxtrotstudio.ghost.utils.TimeUtils; + +public abstract class PlayerAbility implements Ability { + private final PlayableEntity p; + protected boolean runningPrimary, runningSecondary; + protected boolean canUsePrimary = true, canUseSecondary = true; + protected boolean canCancel = true; + protected long baseCooldown = 555; + + public PlayerAbility(PlayableEntity owner) { + this.p = owner; + } + + @Override + public PlayableEntity owner() { + return p; + } + + public void cancel() { + if (!canCancel) + return; + + runningPrimary = false; + runningSecondary = false; + onCancel(); + } + + @Override + public final void usePrimary(float targetX, float targetY) { + if (runningPrimary || !canUsePrimary) + return; + + runningPrimary = true; + onUsePrimary(targetX, targetY); + } + + protected abstract void onUsePrimary(float targetX, float targetY); + + @Override + public final void useSecondary(float targetX, float targetY) { + if (runningSecondary || !canUseSecondary) + return; + + runningSecondary = true; + onUseSecondary(targetX, targetY); + } + + protected abstract void onUseSecondary(float targetX, float targetY); + + protected final void end() { + end(baseCooldown); + } + + protected final void end(long basecooldown) { + if (!runningSecondary && !runningPrimary) { + return; + } + + PlayableEntity p = owner(); + + runningPrimary = false; + runningSecondary = false; + + long wait = p.calculateFireRate(basecooldown); + TimeUtils.executeInSync(wait, () -> { + canUsePrimary = true; + canUseSecondary = true; + }, p.getWorld()); + } + + protected final void endSecondary() { + endSecondary(baseCooldown); + } + + protected final void endSecondary(long basecooldown) { + if (!runningSecondary) { + return; + } + + PlayableEntity p = owner(); + + runningSecondary = false; + + long wait = p.calculateFireRate(basecooldown); + TimeUtils.executeInSync(wait, () -> canUseSecondary = true, p.getWorld()); + } + + protected final void endPrimary() { + endPrimary(baseCooldown); + } + + protected final void endPrimary(long basecooldown) { + if (!runningPrimary) { + return; + } + + PlayableEntity p = owner(); + + runningPrimary = false; + + long wait = p.calculateFireRate(basecooldown); + TimeUtils.executeInSync(wait, () -> canUsePrimary = true, p.getWorld()); + } + + /** + * Ensure when the later task is executed, it's executed during a tick where + * the ability is still running. + * @param duration + * @param runnable + */ + protected void executeInSync(long duration, Runnable runnable) { + TimeUtils.executeInSync(duration, () -> { + if (runningPrimary || runningSecondary) { + runnable.run(); + } + }, owner().getWorld()); + } + + @Override + public boolean canFirePrimary() { + return !runningPrimary && canUsePrimary; + } + + @Override + public boolean canFireSecondary() { + return !runningSecondary && canUseSecondary; + } + + protected void onCancel() { + end(baseCooldown); + } +} diff --git a/server/api/src/main/java/com/boxtrotstudio/ghost/game/match/entities/PlayableEntity.java b/server/api/src/main/java/com/boxtrotstudio/ghost/game/match/entities/PlayableEntity.java index a3591ef6..cd39bea7 100755 --- a/server/api/src/main/java/com/boxtrotstudio/ghost/game/match/entities/PlayableEntity.java +++ b/server/api/src/main/java/com/boxtrotstudio/ghost/game/match/entities/PlayableEntity.java @@ -1,6 +1,7 @@ package com.boxtrotstudio.ghost.game.match.entities; import com.boxtrotstudio.ghost.game.match.Match; +import com.boxtrotstudio.ghost.game.match.abilities.PlayerAbility; import com.boxtrotstudio.ghost.game.match.entities.playable.impl.BaseNetworkPlayer; import com.boxtrotstudio.ghost.game.match.stats.Stat; import com.boxtrotstudio.ghost.game.match.stats.TemporaryStats; @@ -233,12 +234,6 @@ public interface PlayableEntity extends PhysicsEntity { */ Ability currentAbility(); - /** - * Set this Playable's current ability - * @param class_ The ability class to set - */ - void _packet_setCurrentAbility(Class> class_); - /** * Set this Playable's current ability * @param ability The ability class to set @@ -255,13 +250,18 @@ public interface PlayableEntity extends PhysicsEntity { /** * Whether this playable sprite should be able to use abilities * @return True if this sprite can use abilities, otherwise false + * @deprecated Invokes {@link PlayerAbility#canFirePrimary()} */ + @Deprecated boolean canFire(); /** * Set whether this playable sprite should be able to use abilities * @param value True if this sprite can use abilities, otherwise false + * @deprecated This value is no longer checked. {@link com.boxtrotstudio.ghost.game.match.abilities.PlayerAbility} control cooldown, + * you can control cooldown rate (firerate) with {@link PlayableEntity#getFireRateStat()} object. */ + @Deprecated void setCanFire(boolean value); /** diff --git a/server/api/src/main/java/com/boxtrotstudio/ghost/game/match/entities/playable/BasePlayableEntity.java b/server/api/src/main/java/com/boxtrotstudio/ghost/game/match/entities/playable/BasePlayableEntity.java index 65e67f8e..c3e13a49 100755 --- a/server/api/src/main/java/com/boxtrotstudio/ghost/game/match/entities/playable/BasePlayableEntity.java +++ b/server/api/src/main/java/com/boxtrotstudio/ghost/game/match/entities/playable/BasePlayableEntity.java @@ -2,6 +2,7 @@ import com.boxtrotstudio.ghost.game.match.Event; import com.boxtrotstudio.ghost.game.match.Match; +import com.boxtrotstudio.ghost.game.match.abilities.PlayerAbility; import com.boxtrotstudio.ghost.game.match.entities.map.FlagEntity; import com.boxtrotstudio.ghost.game.match.stats.BuffType; import com.boxtrotstudio.ghost.game.match.stats.TemporaryStats; @@ -9,7 +10,7 @@ import com.boxtrotstudio.ghost.game.match.world.physics.CollisionResult; import com.boxtrotstudio.ghost.game.match.world.physics.Hitbox; import com.boxtrotstudio.ghost.game.match.world.physics.PolygonHitbox; -import com.boxtrotstudio.ghost.utils.Constants; +import com.boxtrotstudio.ghost.utils.MethodDeprecatedException; import com.boxtrotstudio.ghost.utils.Vector2f; import com.boxtrotstudio.ghost.game.match.abilities.Ability; import com.boxtrotstudio.ghost.game.match.abilities.Gun; @@ -51,14 +52,13 @@ public abstract class BasePlayableEntity extends BasePhysicsEntity implements Pl protected int preferredItem = -1; - protected boolean canFire = true; protected VisibleFunction function = VisibleFunction.ORGINAL; //Always default to original style protected Stat visibleLength = new Stat("vlen", 800.0); //In ms protected Stat visibleStrength = new Stat("vstr", 255.0); protected int invinciblityStack; - private Ability ability = new Gun(this); + protected Ability ability = new Gun(this); private TemporaryStats stats; private boolean tempWasHit; @@ -643,18 +643,6 @@ public Ability currentAbility() { return ability; } - @Override - public void _packet_setCurrentAbility(Class> class_) { - if (!canChangeAbility) - return; - - try { - this.ability = class_.getConstructor(PlayableEntity.class).newInstance(this); - } catch (InstantiationException | IllegalAccessException | InvocationTargetException | NoSuchMethodException e) { - throw new IllegalArgumentException("This ability is not compatible!"); - } - } - @Override public void setCurrentAbility(Ability ability) { this.ability = ability; @@ -671,15 +659,18 @@ public void setCanChangeAbility(boolean value) { } private boolean isFiring; - public void useAbility(float targetX, float targetY, int action) { - if (!canFire || isDead) + public void useAbility(float targetX, float targetY, boolean secondary) { + if (isDead) return; //This playable can't use abilities if (ability != null) { hasStartedFade = false; isFiring = true; - ability.use(targetX, targetY); + if (!secondary) + ability.usePrimary(targetX, targetY); + else + ability.useSecondary(targetX, targetY); } } @@ -693,14 +684,14 @@ public void setCarryingFlag(boolean value) { this.carryingFlag = value; } - @Override public boolean canFire() { - return canFire; + return ability.canFirePrimary(); } @Override public void setCanFire(boolean val) { - this.canFire = val; + throw new MethodDeprecatedException("This value is no longer checked. PlayerAbility control cooldown,\n" + + "you can control cooldown rate (firerate) with the PlayableEntity.getFireRateStat() object."); } /** diff --git a/server/api/src/main/java/com/boxtrotstudio/ghost/game/match/item/SpeedItem.java b/server/api/src/main/java/com/boxtrotstudio/ghost/game/match/item/SpeedItem.java index b46daa91..6863f416 100755 --- a/server/api/src/main/java/com/boxtrotstudio/ghost/game/match/item/SpeedItem.java +++ b/server/api/src/main/java/com/boxtrotstudio/ghost/game/match/item/SpeedItem.java @@ -1,7 +1,7 @@ package com.boxtrotstudio.ghost.game.match.item; import com.boxtrotstudio.ghost.game.match.LiveMatch; -import com.boxtrotstudio.ghost.game.match.abilities.CancelableAbility; +import com.boxtrotstudio.ghost.game.match.abilities.PlayerAbility; import com.boxtrotstudio.ghost.game.match.entities.items.ItemEntity; import com.boxtrotstudio.ghost.game.match.entities.items.SpeedItemEntity; import com.boxtrotstudio.ghost.game.match.stats.BuffType; @@ -33,8 +33,8 @@ protected void onActivated() { activator.getSpeedStat().addBuff("speed_item_buff", BuffType.PercentAddition, 50, false); activator.onStatUpdate(activator.getSpeedStat()); - if (activator.currentAbility() instanceof CancelableAbility) { - ((CancelableAbility)activator.currentAbility()).cancel(); + if (activator.currentAbility() instanceof PlayerAbility) { + ((PlayerAbility)activator.currentAbility()).cancel(); } } diff --git a/server/api/src/main/java/com/boxtrotstudio/ghost/utils/MethodDeprecatedException.java b/server/api/src/main/java/com/boxtrotstudio/ghost/utils/MethodDeprecatedException.java new file mode 100644 index 00000000..e429f7dc --- /dev/null +++ b/server/api/src/main/java/com/boxtrotstudio/ghost/utils/MethodDeprecatedException.java @@ -0,0 +1,15 @@ +package com.boxtrotstudio.ghost.utils; + +public class MethodDeprecatedException extends RuntimeException { + + public MethodDeprecatedException() { + } + + public MethodDeprecatedException(String message) { + super(message); + } + + public MethodDeprecatedException(String message, Throwable cause) { + super(message, cause); + } +} From aab225b016dabd6f64ae8b1d12b856149780723f Mon Sep 17 00:00:00 2001 From: hypereddie Date: Thu, 21 Dec 2017 20:26:48 -0500 Subject: [PATCH 2/4] Fixed compiler errors, fixed bugs and made fully functional --- .../client/core/game/events/StandardEvent.java | 7 +++++++ .../ghost/common/game/bots/TestPlayableEntity.java | 4 ++-- .../common/game/gamemodes/tutorial/TutorialBot.java | 2 +- .../game/gamemodes/tutorial/TutorialMatch.java | 1 - .../common/network/packet/ActionRequestPacket.java | 4 ++-- .../com/boxtrotstudio/ghost/game/match/Event.java | 3 ++- .../ghost/game/match/abilities/Boomerang.java | 10 ++++++++++ .../ghost/game/match/abilities/PlayerAbility.java | 4 ++++ .../entities/playable/impl/BaseNetworkPlayer.java | 11 ++++++++--- .../java/com/boxtrotstudio/ghost/test/Main.java | 13 ++++++++++++- .../ghost/test/game/queue/impl/BoomQueue.java | 2 +- .../ghost/test/game/queue/impl/DashQueue.java | 2 +- .../ghost/test/game/queue/impl/LaserQueue.java | 2 +- .../ghost/test/game/queue/impl/TutorialQueue.java | 2 +- 14 files changed, 52 insertions(+), 15 deletions(-) diff --git a/client/core/src/com/boxtrotstudio/ghost/client/core/game/events/StandardEvent.java b/client/core/src/com/boxtrotstudio/ghost/client/core/game/events/StandardEvent.java index 04c08fa1..8c899e69 100755 --- a/client/core/src/com/boxtrotstudio/ghost/client/core/game/events/StandardEvent.java +++ b/client/core/src/com/boxtrotstudio/ghost/client/core/game/events/StandardEvent.java @@ -317,6 +317,13 @@ public void trigger(@NotNull Entity cause, double direction, @NotNull SpriteScen System.err.println("" + game.getDidWin1() + " : " + game.getDidWin2() + " : " + game.getDidWin3()); } } + }, + + CancelAbility(22) { + @Override + public void trigger(@NotNull Entity cause, double direction, @NotNull SpriteScene world) { + System.out.println("Ability canceled"); + } }; diff --git a/server/api/src/main/java/com/boxtrotstudio/ghost/common/game/bots/TestPlayableEntity.java b/server/api/src/main/java/com/boxtrotstudio/ghost/common/game/bots/TestPlayableEntity.java index 0feacaa7..d734beb1 100755 --- a/server/api/src/main/java/com/boxtrotstudio/ghost/common/game/bots/TestPlayableEntity.java +++ b/server/api/src/main/java/com/boxtrotstudio/ghost/common/game/bots/TestPlayableEntity.java @@ -46,10 +46,10 @@ public void tick() { setTarget(new Vector2f(x, y)); } - if (Global.RANDOM.nextDouble() < 0.2 && canFire) { + if (Global.RANDOM.nextDouble() < 0.2 && currentAbility().canFirePrimary()) { float x = Global.random(100, 1000); float y = Global.random(100, 700); - useAbility(x, y, 1); + useAbility(x, y, false); } super.tick(); diff --git a/server/api/src/main/java/com/boxtrotstudio/ghost/common/game/gamemodes/tutorial/TutorialBot.java b/server/api/src/main/java/com/boxtrotstudio/ghost/common/game/gamemodes/tutorial/TutorialBot.java index 2eec5f60..9c642544 100755 --- a/server/api/src/main/java/com/boxtrotstudio/ghost/common/game/gamemodes/tutorial/TutorialBot.java +++ b/server/api/src/main/java/com/boxtrotstudio/ghost/common/game/gamemodes/tutorial/TutorialBot.java @@ -25,7 +25,7 @@ public void run() { } public void fire(float targetX, float targetY){ - useAbility(targetX, targetY, 0); + useAbility(targetX, targetY, false); firstFire = true; } diff --git a/server/api/src/main/java/com/boxtrotstudio/ghost/common/game/gamemodes/tutorial/TutorialMatch.java b/server/api/src/main/java/com/boxtrotstudio/ghost/common/game/gamemodes/tutorial/TutorialMatch.java index 7313c5ad..3fd2ffd4 100755 --- a/server/api/src/main/java/com/boxtrotstudio/ghost/common/game/gamemodes/tutorial/TutorialMatch.java +++ b/server/api/src/main/java/com/boxtrotstudio/ghost/common/game/gamemodes/tutorial/TutorialMatch.java @@ -59,7 +59,6 @@ protected void stage() { player.getY() < startPosY - 300 || player.getY() > startPosY + 300)); p.triggerEvent(Event.DidMove, 0); - p.setCanFire(true); waitFor(player -> player.didFire()); if(bot.getLives() < 3){ diff --git a/server/api/src/main/java/com/boxtrotstudio/ghost/common/network/packet/ActionRequestPacket.java b/server/api/src/main/java/com/boxtrotstudio/ghost/common/network/packet/ActionRequestPacket.java index 3a000c7d..0ff5b35b 100755 --- a/server/api/src/main/java/com/boxtrotstudio/ghost/common/network/packet/ActionRequestPacket.java +++ b/server/api/src/main/java/com/boxtrotstudio/ghost/common/network/packet/ActionRequestPacket.java @@ -31,9 +31,9 @@ public void onHandlePacket(BasePlayerClient client) throws IOException { //long time = consume(4).asLong(); if (actionType == 0) - client.getPlayer().moveTowards(mouseX, mouseY); + client.getPlayer().fireTowards(mouseX, mouseY, false); else if (actionType == 1) - client.getPlayer().fireTowards(mouseX, mouseY, actionType); + client.getPlayer().fireTowards(mouseX, mouseY, true); else if (actionType == 2) { Vector2f direction = new Vector2f(mouseX, mouseY); diff --git a/server/api/src/main/java/com/boxtrotstudio/ghost/game/match/Event.java b/server/api/src/main/java/com/boxtrotstudio/ghost/game/match/Event.java index dd41d47a..65bb42d1 100755 --- a/server/api/src/main/java/com/boxtrotstudio/ghost/game/match/Event.java +++ b/server/api/src/main/java/com/boxtrotstudio/ghost/game/match/Event.java @@ -24,7 +24,8 @@ public enum Event { TeamWin(20), TeamLose(21), MatchWin(22), - MatchLose(23); + MatchLose(23), + CancelAbility(24); private short id; Event(int id) { diff --git a/server/api/src/main/java/com/boxtrotstudio/ghost/game/match/abilities/Boomerang.java b/server/api/src/main/java/com/boxtrotstudio/ghost/game/match/abilities/Boomerang.java index 206da5bf..c1cbf553 100755 --- a/server/api/src/main/java/com/boxtrotstudio/ghost/game/match/abilities/Boomerang.java +++ b/server/api/src/main/java/com/boxtrotstudio/ghost/game/match/abilities/Boomerang.java @@ -63,6 +63,16 @@ public byte id() { return 4; } + @Override + public boolean canFirePrimary() { + return canFire; + } + + @Override + public boolean canFireSecondary() { + return false; + } + /** * Boomerang starts moving away. */ diff --git a/server/api/src/main/java/com/boxtrotstudio/ghost/game/match/abilities/PlayerAbility.java b/server/api/src/main/java/com/boxtrotstudio/ghost/game/match/abilities/PlayerAbility.java index 1aace8a9..108d84c5 100644 --- a/server/api/src/main/java/com/boxtrotstudio/ghost/game/match/abilities/PlayerAbility.java +++ b/server/api/src/main/java/com/boxtrotstudio/ghost/game/match/abilities/PlayerAbility.java @@ -1,5 +1,6 @@ package com.boxtrotstudio.ghost.game.match.abilities; +import com.boxtrotstudio.ghost.game.match.Event; import com.boxtrotstudio.ghost.game.match.entities.PlayableEntity; import com.boxtrotstudio.ghost.utils.TimeUtils; @@ -34,6 +35,7 @@ public final void usePrimary(float targetX, float targetY) { return; runningPrimary = true; + canUsePrimary = false; onUsePrimary(targetX, targetY); } @@ -45,6 +47,7 @@ public final void useSecondary(float targetX, float targetY) { return; runningSecondary = true; + canUseSecondary = false; onUseSecondary(targetX, targetY); } @@ -131,5 +134,6 @@ public boolean canFireSecondary() { protected void onCancel() { end(baseCooldown); + p.triggerEvent(Event.CancelAbility, 0); } } diff --git a/server/api/src/main/java/com/boxtrotstudio/ghost/game/match/entities/playable/impl/BaseNetworkPlayer.java b/server/api/src/main/java/com/boxtrotstudio/ghost/game/match/entities/playable/impl/BaseNetworkPlayer.java index 2bc4bd15..9cd0f0cc 100755 --- a/server/api/src/main/java/com/boxtrotstudio/ghost/game/match/entities/playable/impl/BaseNetworkPlayer.java +++ b/server/api/src/main/java/com/boxtrotstudio/ghost/game/match/entities/playable/impl/BaseNetworkPlayer.java @@ -15,6 +15,7 @@ import com.boxtrotstudio.ghost.network.sql.PlayerData; import com.boxtrotstudio.ghost.network.sql.PlayerUpdate; import com.boxtrotstudio.ghost.utils.Global; +import com.boxtrotstudio.ghost.utils.MethodDeprecatedException; import com.boxtrotstudio.ghost.utils.PRunnable; import com.boxtrotstudio.ghost.utils.Vector2f; @@ -238,7 +239,9 @@ public void setName(String name) { * Have this playable move towards an {x, y} point and update all players in the match * @param targetX The x point to move towards * @param targetY The y point to move towards + * @deprecated The client no longer sends this kind of action. */ + @Deprecated public void moveTowards(float targetX, float targetY) { if (!isUDPConnected()) return; @@ -265,6 +268,8 @@ public void moveTowards(float targetX, float targetY) { if (world != null) { world.requestEntityUpdate(); } + + throw new MethodDeprecatedException("The client shouldn't be sending this kind of action!"); } /** @@ -294,15 +299,15 @@ public void moveWithDirection(Vector2f direction) { * Have this playable fire towards an {x, y} point and update all players in the match * @param targetX The x point to fire towards * @param targetY The y point to fire towards - * @param action The action that was requested + * @param secondary The action that was requested */ - public void fireTowards(float targetX, float targetY, int action) { + public void fireTowards(float targetX, float targetY, boolean secondary) { if (!isUDPConnected()) return; lastActive = System.currentTimeMillis(); - useAbility(targetX, targetY, action); + useAbility(targetX, targetY, secondary); } @Override diff --git a/server/testing/src/main/java/com/boxtrotstudio/ghost/test/Main.java b/server/testing/src/main/java/com/boxtrotstudio/ghost/test/Main.java index 78136d85..2343611e 100755 --- a/server/testing/src/main/java/com/boxtrotstudio/ghost/test/Main.java +++ b/server/testing/src/main/java/com/boxtrotstudio/ghost/test/Main.java @@ -131,7 +131,18 @@ public static void main(String[] args) { @Override public void run(PlayableEntity p) { p.setLives((byte) 3); - p._packet_setCurrentAbility(class_[Global.random(0, class_.length)]); + int t = Global.random(0, 3); + switch (t) { + case 0: + p.setCurrentAbility(new Gun(p)); + break; + case 1: + p.setCurrentAbility(new Laser(p)); + break; + case 2: + p.setCurrentAbility(new Dash(p)); + break; + } p.setVisibleFunction(VisibleFunction.ORGINAL); } }); diff --git a/server/testing/src/main/java/com/boxtrotstudio/ghost/test/game/queue/impl/BoomQueue.java b/server/testing/src/main/java/com/boxtrotstudio/ghost/test/game/queue/impl/BoomQueue.java index 259b2286..0fce1e88 100755 --- a/server/testing/src/main/java/com/boxtrotstudio/ghost/test/game/queue/impl/BoomQueue.java +++ b/server/testing/src/main/java/com/boxtrotstudio/ghost/test/game/queue/impl/BoomQueue.java @@ -28,7 +28,7 @@ public String description() { @Override public void setupPlayer(PlayableEntity p) { - p._packet_setCurrentAbility(Boomerang.class); + p.setCurrentAbility(new Boomerang(p)); p.setVisibleFunction(VisibleFunction.ORGINAL); p.setLives((byte) 3); } diff --git a/server/testing/src/main/java/com/boxtrotstudio/ghost/test/game/queue/impl/DashQueue.java b/server/testing/src/main/java/com/boxtrotstudio/ghost/test/game/queue/impl/DashQueue.java index d6b2ccfa..386ed5cf 100755 --- a/server/testing/src/main/java/com/boxtrotstudio/ghost/test/game/queue/impl/DashQueue.java +++ b/server/testing/src/main/java/com/boxtrotstudio/ghost/test/game/queue/impl/DashQueue.java @@ -28,7 +28,7 @@ public String description() { @Override public void setupPlayer(PlayableEntity p) { - p._packet_setCurrentAbility(Dash.class); + p.setCurrentAbility(new Dash(p)); p.setVisibleFunction(VisibleFunction.ORGINAL); p.setLives((byte) 3); } diff --git a/server/testing/src/main/java/com/boxtrotstudio/ghost/test/game/queue/impl/LaserQueue.java b/server/testing/src/main/java/com/boxtrotstudio/ghost/test/game/queue/impl/LaserQueue.java index bb5c9a59..95446175 100755 --- a/server/testing/src/main/java/com/boxtrotstudio/ghost/test/game/queue/impl/LaserQueue.java +++ b/server/testing/src/main/java/com/boxtrotstudio/ghost/test/game/queue/impl/LaserQueue.java @@ -10,7 +10,7 @@ public class LaserQueue extends DemoQueue { public void setupPlayer(PlayableEntity p) { p.setLives((byte) 3); p.setVisibleFunction(VisibleFunction.ORGINAL); - p._packet_setCurrentAbility(Laser.class); + p.setCurrentAbility(new Laser(p)); } @Override diff --git a/server/testing/src/main/java/com/boxtrotstudio/ghost/test/game/queue/impl/TutorialQueue.java b/server/testing/src/main/java/com/boxtrotstudio/ghost/test/game/queue/impl/TutorialQueue.java index 55c753b6..50dc2e80 100755 --- a/server/testing/src/main/java/com/boxtrotstudio/ghost/test/game/queue/impl/TutorialQueue.java +++ b/server/testing/src/main/java/com/boxtrotstudio/ghost/test/game/queue/impl/TutorialQueue.java @@ -78,7 +78,7 @@ public void onTeamEnterMatch(Team team1, Team team2) { @Override public void run(PlayableEntity p) { p.setLives((byte) 3); - p._packet_setCurrentAbility(Gun.class); + p.setCurrentAbility(new Gun(p)); } } ); From 0b80e9d2e004df186609c5f1ad2101ba2f992436 Mon Sep 17 00:00:00 2001 From: hypereddie Date: Thu, 21 Dec 2017 20:53:07 -0500 Subject: [PATCH 3/4] Fixed API updates for setCurrentAbility(Class) -> setCurrentAbility(Ability) --- .../ghost/game/match/abilities/Circle.java | 36 +------------------ .../ghost/gameserver/api/GameServer.java | 5 +-- .../network/packets/CreateMatchPacket.java | 5 +-- 3 files changed, 7 insertions(+), 39 deletions(-) diff --git a/server/api/src/main/java/com/boxtrotstudio/ghost/game/match/abilities/Circle.java b/server/api/src/main/java/com/boxtrotstudio/ghost/game/match/abilities/Circle.java index 04187078..feb50841 100755 --- a/server/api/src/main/java/com/boxtrotstudio/ghost/game/match/abilities/Circle.java +++ b/server/api/src/main/java/com/boxtrotstudio/ghost/game/match/abilities/Circle.java @@ -41,7 +41,6 @@ public void onUsePrimary(float targetX, float targetY) { //p.getWorld().spawnParticle(ParticleEffect.CIRCLE, (int) (STAGE1_DURATION + STAGE2_DURATION), 64, targetX, targetY, STAGE1_DURATION); -<<<<<<< HEAD executeInSync(STAGE1_DURATION, () -> { token.useDefaultBehavior(); for (PlayableEntity p1 : wasInside) { @@ -62,25 +61,6 @@ public void onUsePrimary(float targetX, float targetY) { @Override protected void onUseSecondary(float targetX, float targetY) { endSecondary(); -======= - TimeUtils.executeInSync(STAGE1_DURATION, () -> { - token.useDefaultBehavior(); - for (PlayableEntity p : wasInside) { - p.setVisible(false); - p.getSpeedStat().removeBuff("circle_debuff"); - } - wasInside.clear(); - - TimeUtils.executeInSync(STAGE2_DURATION, () -> { - token.stopChecking(); - p.onFire(); - - long wait = p.calculateFireRate(BASE_COOLDOWN); //Base value is 315ms - TimeUtils.executeInSync(wait, () -> p.setCanFire(true), p.getWorld()); - }, p.getWorld()); - }, p.getWorld()); - //TimeUtils.executeInSync() ->>>>>>> master } @Override @@ -89,19 +69,6 @@ public byte id() { } private ArrayList wasInside = new ArrayList<>(); -<<<<<<< HEAD - private final P2Runnable STAGE1 = (p1, didHit) -> { - if (didHit) { - p1.setVisible(true); - if (!p1.getSpeedStat().hasBuff("circle_debuff")) { - p1.getSpeedStat().addBuff("circle_debuff", BuffType.PercentSubtraction, 30.0, false); - } - wasInside.add(p1); - } else if (wasInside.contains(p1)) { - p1.setVisible(false); - p1.getSpeedStat().removeBuff("circle_debuff"); - wasInside.remove(p1); -======= private final P2Runnable STAGE1 = (p, didHit) -> { if (didHit) { p.setVisible(true); @@ -113,7 +80,6 @@ public byte id() { p.setVisible(false); p.getSpeedStat().removeBuff("circle_debuff"); wasInside.remove(p); ->>>>>>> master } }; -} +} \ No newline at end of file diff --git a/server/gameserver/src/main/java/com/boxtrotstudio/ghost/gameserver/api/GameServer.java b/server/gameserver/src/main/java/com/boxtrotstudio/ghost/gameserver/api/GameServer.java index e99cff0c..9da9649e 100755 --- a/server/gameserver/src/main/java/com/boxtrotstudio/ghost/gameserver/api/GameServer.java +++ b/server/gameserver/src/main/java/com/boxtrotstudio/ghost/gameserver/api/GameServer.java @@ -6,6 +6,7 @@ import com.boxtrotstudio.aws.model.GameSession; import com.boxtrotstudio.ghost.common.game.MatchFactory; import com.boxtrotstudio.ghost.common.game.NetworkMatch; +import com.boxtrotstudio.ghost.common.game.Player; import com.boxtrotstudio.ghost.common.game.PlayerFactory; import com.boxtrotstudio.ghost.common.game.gamemodes.tutorial.TutorialBot; import com.boxtrotstudio.ghost.common.game.gamemodes.tutorial.TutorialMatch; @@ -152,8 +153,8 @@ private static void gameServerStarted(GameSession session) { PlayerPacketObject[] team1 = Global.GSON.fromJson(team1Json, PlayerPacketObject[].class); PlayerPacketObject[] team2 = Global.GSON.fromJson(team2Json, PlayerPacketObject[].class); - PlayableEntity[] pTeam1 = new PlayableEntity[team1Size]; - PlayableEntity[] pTeam2 = new PlayableEntity[team2Size]; + Player[] pTeam1 = new Player[team1Size]; + Player[] pTeam2 = new Player[team2Size]; for (int i = 0; i < team1.length; i++) { PlayerPacketObject p = team1[i]; diff --git a/server/gameserver/src/main/java/com/boxtrotstudio/ghost/gameserver/api/network/packets/CreateMatchPacket.java b/server/gameserver/src/main/java/com/boxtrotstudio/ghost/gameserver/api/network/packets/CreateMatchPacket.java index a7b045a1..9a895bf5 100755 --- a/server/gameserver/src/main/java/com/boxtrotstudio/ghost/gameserver/api/network/packets/CreateMatchPacket.java +++ b/server/gameserver/src/main/java/com/boxtrotstudio/ghost/gameserver/api/network/packets/CreateMatchPacket.java @@ -1,6 +1,7 @@ package com.boxtrotstudio.ghost.gameserver.api.network.packets; import com.boxtrotstudio.ghost.common.game.MatchFactory; +import com.boxtrotstudio.ghost.common.game.Player; import com.boxtrotstudio.ghost.common.game.gamemodes.tutorial.TutorialBot; import com.boxtrotstudio.ghost.common.game.gamemodes.tutorial.TutorialMatch; import com.boxtrotstudio.ghost.common.network.BaseServer; @@ -37,8 +38,8 @@ public void onHandlePacket(MatchmakingClient client) throws IOException { team2[i] = consume(chunkSize).as(PlayerPacketObject.class); } - PlayableEntity[] pTeam1 = new PlayableEntity[team1Count]; - PlayableEntity[] pTeam2 = new PlayableEntity[team2Count]; + Player[] pTeam1 = new Player[team1Count]; + Player[] pTeam2 = new Player[team2Count]; for (int i = 0; i < team1.length; i++) { PlayerPacketObject p = team1[i]; From 55df05c11d605e6bcd4e6e08057ae04d28795cb4 Mon Sep 17 00:00:00 2001 From: hypereddie Date: Sat, 27 Jan 2018 15:16:12 -0500 Subject: [PATCH 4/4] Deleted old projects in repo --- .teamcity/ghost/buildTypes/ghost_Build.xml | 36 - .../ghost/pluginData/plugin-settings.xml | 5 - .teamcity/ghost/project-config.xml | 7 - ...eGhostShadowWarriorPhantomAssaultDxGit.xml | 16 - .travis.yml | 7 - admin-panel/README.md | 88 - admin-panel/app/index.html | 117 - admin-panel/app/package.json | 20 - admin-panel/app/stylesheets/main.less | 155 - admin-panel/app/stylesheets/menu.less | 151 - admin-panel/app/vendor/jasmine/boot.js | 121 - .../app/vendor/jasmine/jasmine-html.js | 416 --- admin-panel/app/vendor/jasmine/jasmine.css | 62 - admin-panel/app/vendor/jasmine/jasmine.js | 3048 ----------------- admin-panel/app/vendor/nwbp/contextmenu.js | 47 - admin-panel/app/vendor/nwbp/dev-helpers.js | 28 - admin-panel/app/vendor/nwbp/external-links.js | 42 - admin-panel/app/vendor/nwbp/window-state.js | 123 - admin-panel/app/vendor/require.js | 2076 ----------- admin-panel/app/views/menuView.js | 190 - admin-panel/bower.json | 29 - admin-panel/gulpfile.js | 5 - admin-panel/os/icon.png | Bin 60886 -> 0 bytes admin-panel/os/linux/DEBIAN/control | 7 - admin-panel/os/linux/app.desktop | 10 - admin-panel/os/osx/Info.plist | 34 - admin-panel/os/osx/appdmg.json | 10 - admin-panel/os/osx/dmg-background.png | Bin 26130 -> 0 bytes admin-panel/os/osx/dmg-background@2x.png | Bin 65399 -> 0 bytes admin-panel/os/osx/dmg-icon.icns | Bin 76075 -> 0 bytes admin-panel/os/osx/icon.icns | Bin 244756 -> 0 bytes admin-panel/os/windows/icon.ico | Bin 370070 -> 0 bytes admin-panel/os/windows/installer.nsi | 160 - admin-panel/os/windows/setup-banner.bmp | Bin 107574 -> 0 bytes admin-panel/os/windows/setup-icon.ico | Bin 370070 -> 0 bytes admin-panel/package.json | 41 - admin-panel/tasks/build.js | 154 - admin-panel/tasks/download-nw.js | 84 - admin-panel/tasks/release.js | 158 - admin-panel/tasks/start.js | 30 - admin-panel/tasks/utils.js | 28 - program.json | 1 - .../ghost/game/match/abilities/Boomerang.java | 83 +- servers/1.gserver | 6 - updatecreator/build.gradle | 17 - .../src/main/java/META-INF/MANIFEST.MF | 3 - .../java/com/boxtrotstudio/updates/Main.java | 175 - .../com/boxtrotstudio/updates/api/Update.java | 177 - .../updates/api/UpdateBuilder.java | 155 - .../boxtrotstudio/updates/api/UpdateType.java | 26 - .../boxtrotstudio/updates/api/Version.java | 119 - updatecreator/update.json | 15 - updater/build.gradle | 22 - updater/src/main/java/META-INF/MANIFEST.MF | 3 - .../java/com/boxtrotstudio/updater/Main.java | 61 - .../boxtrotstudio/updater/ProgramConfig.java | 23 - .../com/boxtrotstudio/updater/api/Update.java | 177 - .../boxtrotstudio/updater/api/UpdateType.java | 26 - .../boxtrotstudio/updater/api/Version.java | 119 - .../com/boxtrotstudio/updater/gui/Launch.form | 132 - .../com/boxtrotstudio/updater/gui/Launch.java | 507 --- updater/src/main/resources/boxtrotlogo.png | Bin 2158 -> 0 bytes .../cert/lets-encrypt-x1-cross-signed.der | Bin 1196 -> 0 bytes .../cert/lets-encrypt-x2-cross-signed.der | Bin 1196 -> 0 bytes .../cert/lets-encrypt-x3-cross-signed.der | Bin 1174 -> 0 bytes .../cert/lets-encrypt-x4-cross-signed.der | Bin 1174 -> 0 bytes updater/src/main/resources/program.json | 1 - windows_build.xml | 42 - 68 files changed, 31 insertions(+), 9364 deletions(-) delete mode 100644 .teamcity/ghost/buildTypes/ghost_Build.xml delete mode 100644 .teamcity/ghost/pluginData/plugin-settings.xml delete mode 100644 .teamcity/ghost/project-config.xml delete mode 100644 .teamcity/ghost/vcsRoots/ghost_GitGithubComHypereddieGhostShadowWarriorPhantomAssaultDxGit.xml delete mode 100644 .travis.yml delete mode 100755 admin-panel/README.md delete mode 100755 admin-panel/app/index.html delete mode 100755 admin-panel/app/package.json delete mode 100755 admin-panel/app/stylesheets/main.less delete mode 100755 admin-panel/app/stylesheets/menu.less delete mode 100755 admin-panel/app/vendor/jasmine/boot.js delete mode 100755 admin-panel/app/vendor/jasmine/jasmine-html.js delete mode 100755 admin-panel/app/vendor/jasmine/jasmine.css delete mode 100755 admin-panel/app/vendor/jasmine/jasmine.js delete mode 100755 admin-panel/app/vendor/nwbp/contextmenu.js delete mode 100755 admin-panel/app/vendor/nwbp/dev-helpers.js delete mode 100755 admin-panel/app/vendor/nwbp/external-links.js delete mode 100755 admin-panel/app/vendor/nwbp/window-state.js delete mode 100755 admin-panel/app/vendor/require.js delete mode 100755 admin-panel/app/views/menuView.js delete mode 100755 admin-panel/bower.json delete mode 100755 admin-panel/gulpfile.js delete mode 100755 admin-panel/os/icon.png delete mode 100755 admin-panel/os/linux/DEBIAN/control delete mode 100755 admin-panel/os/linux/app.desktop delete mode 100755 admin-panel/os/osx/Info.plist delete mode 100755 admin-panel/os/osx/appdmg.json delete mode 100755 admin-panel/os/osx/dmg-background.png delete mode 100755 admin-panel/os/osx/dmg-background@2x.png delete mode 100755 admin-panel/os/osx/dmg-icon.icns delete mode 100755 admin-panel/os/osx/icon.icns delete mode 100755 admin-panel/os/windows/icon.ico delete mode 100755 admin-panel/os/windows/installer.nsi delete mode 100755 admin-panel/os/windows/setup-banner.bmp delete mode 100755 admin-panel/os/windows/setup-icon.ico delete mode 100755 admin-panel/package.json delete mode 100755 admin-panel/tasks/build.js delete mode 100755 admin-panel/tasks/download-nw.js delete mode 100755 admin-panel/tasks/release.js delete mode 100755 admin-panel/tasks/start.js delete mode 100755 admin-panel/tasks/utils.js delete mode 100755 program.json delete mode 100755 servers/1.gserver delete mode 100755 updatecreator/build.gradle delete mode 100755 updatecreator/src/main/java/META-INF/MANIFEST.MF delete mode 100755 updatecreator/src/main/java/com/boxtrotstudio/updates/Main.java delete mode 100755 updatecreator/src/main/java/com/boxtrotstudio/updates/api/Update.java delete mode 100755 updatecreator/src/main/java/com/boxtrotstudio/updates/api/UpdateBuilder.java delete mode 100755 updatecreator/src/main/java/com/boxtrotstudio/updates/api/UpdateType.java delete mode 100755 updatecreator/src/main/java/com/boxtrotstudio/updates/api/Version.java delete mode 100755 updatecreator/update.json delete mode 100755 updater/build.gradle delete mode 100755 updater/src/main/java/META-INF/MANIFEST.MF delete mode 100755 updater/src/main/java/com/boxtrotstudio/updater/Main.java delete mode 100755 updater/src/main/java/com/boxtrotstudio/updater/ProgramConfig.java delete mode 100755 updater/src/main/java/com/boxtrotstudio/updater/api/Update.java delete mode 100755 updater/src/main/java/com/boxtrotstudio/updater/api/UpdateType.java delete mode 100755 updater/src/main/java/com/boxtrotstudio/updater/api/Version.java delete mode 100755 updater/src/main/java/com/boxtrotstudio/updater/gui/Launch.form delete mode 100755 updater/src/main/java/com/boxtrotstudio/updater/gui/Launch.java delete mode 100755 updater/src/main/resources/boxtrotlogo.png delete mode 100755 updater/src/main/resources/cert/lets-encrypt-x1-cross-signed.der delete mode 100755 updater/src/main/resources/cert/lets-encrypt-x2-cross-signed.der delete mode 100755 updater/src/main/resources/cert/lets-encrypt-x3-cross-signed.der delete mode 100755 updater/src/main/resources/cert/lets-encrypt-x4-cross-signed.der delete mode 100755 updater/src/main/resources/program.json delete mode 100755 windows_build.xml diff --git a/.teamcity/ghost/buildTypes/ghost_Build.xml b/.teamcity/ghost/buildTypes/ghost_Build.xml deleted file mode 100644 index 393154fc..00000000 --- a/.teamcity/ghost/buildTypes/ghost_Build.xml +++ /dev/null @@ -1,36 +0,0 @@ - - - Build - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/.teamcity/ghost/pluginData/plugin-settings.xml b/.teamcity/ghost/pluginData/plugin-settings.xml deleted file mode 100644 index d878f5e3..00000000 --- a/.teamcity/ghost/pluginData/plugin-settings.xml +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/.teamcity/ghost/project-config.xml b/.teamcity/ghost/project-config.xml deleted file mode 100644 index 6a5150ce..00000000 --- a/.teamcity/ghost/project-config.xml +++ /dev/null @@ -1,7 +0,0 @@ - - - Project Ghost - - - - diff --git a/.teamcity/ghost/vcsRoots/ghost_GitGithubComHypereddieGhostShadowWarriorPhantomAssaultDxGit.xml b/.teamcity/ghost/vcsRoots/ghost_GitGithubComHypereddieGhostShadowWarriorPhantomAssaultDxGit.xml deleted file mode 100644 index 2e8f2497..00000000 --- a/.teamcity/ghost/vcsRoots/ghost_GitGithubComHypereddieGhostShadowWarriorPhantomAssaultDxGit.xml +++ /dev/null @@ -1,16 +0,0 @@ - - - git@github.com:hypereddie/Ghost-Shadow-Warrior-Phantom-Assault-DX.git - - - - - - - - - - - - - diff --git a/.travis.yml b/.travis.yml deleted file mode 100644 index 2e165782..00000000 --- a/.travis.yml +++ /dev/null @@ -1,7 +0,0 @@ -language: java -notifications: - slack: - rooms: - - boxtrot:R4WyxWpMcn0II3WAdWNxnYVw#ghost - on_success: change - on_failure: always diff --git a/admin-panel/README.md b/admin-panel/README.md deleted file mode 100755 index 935f7bdc..00000000 --- a/admin-panel/README.md +++ /dev/null @@ -1,88 +0,0 @@ -# Project Ghost Admin Panel -An admin panel to manage the matchmaking server live - -# Quick start - -The only development dependency of this project is Node.js. So just make sure you have it installed. - -1. Clone/download this repository. -2. Install dependencies with `npm install` (it will also download NW.js runtime). -3. Run `npm start` to launch the application. - -# Structure of the project - -### Project's folders - -- `app` - code of your admin panel. -- `build` - compiled, runnable application. -- `nw` - downloaded NW.js binaries. -- `os` - files specific for particular operating system. -- `releases` - ready to distribute installers will land here. -- `tasks` - build and development environment scripts. - - -# Development - -#### Installation - -``` -npm install -``` -It will also download NW runtime, and install dependencies for `package.json` inside `app` folder. - -#### Starting the app - -``` -npm start -``` - -#### Module loader - -How about splitting your JavaScript code into modules? This project uses [es6-module-transpiler](https://github.com/esnext/es6-module-transpiler) for that. It translates new ES6 syntax (which is very cool) into AMD (RequireJS) modules. The main advantage of this setup is that we can use ES6/RequireJS for modules authored by us, and at the same time have normal access to node's `require()` to obtain stuff from npm. -```javascript -// Browser modules are required through new ES6 syntax. -// It will be translated into AMD definition. -import foo1 from './foo'; -// Node.js (npm) modules are required the same way as always. -var foo2 = require('foo'); -``` - -#### Helper scripts - -There are helper scripts in `app/vendor/nwbp` folder. Those are scripts with convenient hooks wou will need anyway (like window size and position preservation). Just browse this folder to see what you get. - -#### Unit tests - -Comes with a preconfigured unit test runner ([jasmine](http://jasmine.github.io/2.0/introduction.html)). To run it go with standard: -``` -npm test -``` -You don't have to declare paths to spec files in any particular place. The runner will search through the project for all `*.spec.js` files and include them automatically. - - -# Making a release - -There are various icon and bitmap files in `os` directory. They are used in installers. Replace them with your own of the same size and file type (if bmp is used, it has to be bmp format). - -To make a release use command: -``` -npm run release -``` -It will start the packaging process for operating system you are running this command on. Ready for distribution file will be outputted to `releases` directory. - -You can create Windows installer only when running on Windows, the same is true for Linux and OSX. So to generate all three installers you need all three operating systems. - - -# Precautions for particular operating system - -## Windows -As installer [NSIS](http://nsis.sourceforge.net/Main_Page) is used. You have to install it (version 3.0), and add NSIS folder to PATH in Environment Variables (so it is reachable to scripts in this project). You know, path should look something like `C:/Program Files (x86)/NSIS`. - -## Linux -This project requires for node.js to be reachable under `node` name in command line. For example by default in Ubuntu it is `nodejs`, so you should manually add alias to `node`. - -For now only deb packaging is supported. It should work on any Linux distribution from debian family (but was tested only on Ubuntu). - -## OSX -This project uses [appdmg](https://github.com/LinusU/node-appdmg) for creating pretty dmg images. While installing this library it could ask you for some additional development libraries on what you have to agree. -**BTW** installation of this library fails on other operating systems (Windows and Linux) when you type `npm install`. No worries, it's needed only on OSX. \ No newline at end of file diff --git a/admin-panel/app/index.html b/admin-panel/app/index.html deleted file mode 100755 index 6c37a658..00000000 --- a/admin-panel/app/index.html +++ /dev/null @@ -1,117 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- Project Ghost Thing -
-
-
-
-
- -
- -
-
-
-

Players Online

- -
-
-
-

Matches: 0

-
-
-

Servers: 0

-
-
-
-
-
    - -
- -
-
-

git gud

-
-
-

Coming soon

-
-
-

As they say in Latin: 'Carpe yolo'

-
-
- -
-
- - - \ No newline at end of file diff --git a/admin-panel/app/package.json b/admin-panel/app/package.json deleted file mode 100755 index 459ba0c0..00000000 --- a/admin-panel/app/package.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "name": "Launcher", - "prettyName": "Launcher for Game", - "description": "Is a launcher for the game", - "main": "index.html", - "window": { - "icon": "icon.png", - "show": true, - "toolbar": true, - "frame": true, - "width": 800, - "height": 500, - "position": "center", - "resizable": false - }, - "single-instance": false, - "version": "0.0.1a", - "dependencies": { - } -} diff --git a/admin-panel/app/stylesheets/main.less b/admin-panel/app/stylesheets/main.less deleted file mode 100755 index da9d2246..00000000 --- a/admin-panel/app/stylesheets/main.less +++ /dev/null @@ -1,155 +0,0 @@ -html, body { - width: 100%; - height: 100%; - margin: 0; - padding: 0; - - -webkit-user-select: none; -} - -ul { - list-style: none; -} - -h6 { - background: #232323; - color: white; -} - -body { - background: #232323; - color: white; - display: flex; -} - -a { - text-decoration: none; -} - -.ghostBtn { - border-radius: 8px; - height: 38px; - font-size: 15px; - line-height: 5px; -} - -.loginBtn { - background-color: #579457; - border-color: #366d36; - color: #fff; -} - -.loginBtn:hover, .loginBtn:focus { - background-color: #459D45; -} - -.spacer-95 { - height: 95%; -} - -.signupBtn { - background-color: #3277A8; - border-color: #225274; - color: #fff; -} - -.signupBtn:hover, .signupBtn:focus { - background-color: #3783B8; -} - -.ghostDialog { - background-color: #232323; - color: #fff; - width: 100%; - height: 25%; - margin-top: 10%; - max-width: initial; - - h1, h2, h3, h4, h5 { - color: #fff; - } - - p { - color: #909090; - } -} - -.frame { - .frame-heading { - background: #576573; - } - - .frame-footer { - background: transparent; - } -} - -.reveal-modal-bg { - background: rgba(255, 255, 255, 0.45); -} - -input[type=text], input[type=password], -input[type=text]:focus, input[type=password]:focus, -input[type=email], input[type=email]:focus, -textarea, textarea:focus { - background-color: #232323; - color: #fff; -} - -.frame { - width: 100%; - height: 100%; - overflow: hidden; - position: relative; - - .frame-heading { - position:absolute; - top: 0; - left: 0; - right: 0; - height: 40px; - - -webkit-app-region: drag; - - .title { - padding: 8px; - display: inline-block; - } - - .window-actions { - display: inline-block; - margin: 0 5px; - height: 100%; - padding: 8px; - } - } - - .frame-body { - position: absolute; - top: 40px; - left: 0; - right: 0; - bottom: 30px; - - padding: 8px; - } - - .frame-footer { - padding: 3px 8px; - height: 30px; - - z-index: 3; - position:absolute; - bottom: 0; - left: 0; - right: 0; - } -} - -/* We making our own font icon (sort of) */ -.fa-minimize { - vertical-align: bottom; - &::before { - content: "\f068"; // fa-minus alias - } -} \ No newline at end of file diff --git a/admin-panel/app/stylesheets/menu.less b/admin-panel/app/stylesheets/menu.less deleted file mode 100755 index 7dd1f0ef..00000000 --- a/admin-panel/app/stylesheets/menu.less +++ /dev/null @@ -1,151 +0,0 @@ -.tabs.vertical { - top: 40px; - width: 22%; - right: 0; - bottom: 0; - position: fixed; - max-width: 22%; - - .tab-title { - position: relative; - - a, a:hover, a:focus { - background-color: #1f1f1f; - color: #fff; - border: 1px solid #393939; - height: 80px; - line-height: 48px; - font-size: 24px; - font-family: Segoe UI Semibold; - -webkit-transition: margin-left 0.2s, height 0.2s, font-size 0.2s, line-height 0.2s, -webkit-transform 0.2s; - transition: margin-left 0.2s, height 0.2s, font-size 0.2s, line-height 0.2s, transform 0.2s - } - } - - .tab-title.active { - a, a:hover, a:focus { - margin-left: -55px; - background-color: #1f1f1f; - color: #fff; - height: 100px; - line-height: 60px; - font-size: 28px; - } - } -} - -h1 { - color: white; - font-size: 26px; -} - -.tabs-content { - width: 79%; -} - -.playBtn { - background-color: #579457; - border-color: #366d36; - color: #fff; - margin-top: 30%; -} - -.playBtn:hover, .playBtn:focus { - background-color: #459D45; -} - -.loginLoading { - background-color: #232323; - color: #fff; - width: 100%; - height: 50%; - - h2 { - color: #fff; - } - - .loginLoader { - position: absolute; - left: 45%; - - .spinner1 { - width: 80px; - height: 80px; - border: 2px solid #4876A5; - border-bottom-color: transparent; - border-top-color: transparent; - } - - .spinner2 { - width: 34px; - height: 34px; - left: 22px; - top: 22px; - border: 2px solid #4876A5; - border-bottom-color: transparent; - border-top-color: transparent; - } - } -} - -#server-list { - width: 615px; - height: 399px; - overflow: auto; -} - -.server { - padding-right: 150px; - padding-top: 6px; - background-color: rgba(27, 27, 27, 1);; - box-shadow: 0 2px 5px 0 #121212; - margin-bottom: 30px; - - .power { - font-size: 48px; - text-align: center; - display: inline-block; - width: 100%; - padding-top: 31px; - - &.offline { - color: #A3A3A3; - } - - &.test { - color: #673AB7; - } - - &.alpha { - color: #2196F3; - } - - &.beta { - color: #009688; - } - - &.buffered { - color: #FFEB3B; - } - - &.live { - color: #4CAF50; - } - } - - .more { - font-size: 20px; - padding-top: 0; - margin-left: 60px; - text-align: center; - display: inline; - width: 100%; - } - - p { - margin-bottom: 4px; - width: 180px; - } -} - - diff --git a/admin-panel/app/vendor/jasmine/boot.js b/admin-panel/app/vendor/jasmine/boot.js deleted file mode 100755 index e8ddd551..00000000 --- a/admin-panel/app/vendor/jasmine/boot.js +++ /dev/null @@ -1,121 +0,0 @@ -/** - Starting with version 2.0, this file "boots" Jasmine, performing all of the necessary initialization before executing the loaded environment and all of a project's specs. This file should be loaded after `jasmine.js` and `jasmine_html.js`, but before any project source files or spec files are loaded. Thus this file can also be used to customize Jasmine for a project. - - If a project is using Jasmine via the standalone distribution, this file can be customized directly. If a project is using Jasmine via the [Ruby gem][jasmine-gem], this file can be copied into the support directory via `jasmine copy_boot_js`. Other environments (e.g., Python) will have different mechanisms. - - The location of `boot.js` can be specified and/or overridden in `jasmine.yml`. - - [jasmine-gem]: http://github.com/pivotal/jasmine-gem - */ - -(function() { - - /** - * ## Require & Instantiate - * - * Require Jasmine's core files. Specifically, this requires and attaches all of Jasmine's code to the `jasmine` reference. - */ - window.jasmine = jasmineRequire.core(jasmineRequire); - - /** - * Since this is being run in a browser and the results should populate to an HTML page, require the HTML-specific Jasmine code, injecting the same reference. - */ - jasmineRequire.html(jasmine); - - /** - * Create the Jasmine environment. This is used to run all specs in a project. - */ - var env = jasmine.getEnv(); - - /** - * ## The Global Interface - * - * Build up the functions that will be exposed as the Jasmine public interface. A project can customize, rename or alias any of these functions as desired, provided the implementation remains unchanged. - */ - var jasmineInterface = jasmineRequire.interface(jasmine, env); - - /** - * Add all of the Jasmine global/public interface to the proper global, so a project can use the public interface directly. For example, calling `describe` in specs instead of `jasmine.getEnv().describe`. - */ - if (typeof window == "undefined" && typeof exports == "object") { - extend(exports, jasmineInterface); - } else { - extend(window, jasmineInterface); - } - - /** - * ## Runner Parameters - * - * More browser specific code - wrap the query string in an object and to allow for getting/setting parameters from the runner user interface. - */ - - var queryString = new jasmine.QueryString({ - getWindowLocation: function() { return window.location; } - }); - - var catchingExceptions = queryString.getParam("catch"); - env.catchExceptions(typeof catchingExceptions === "undefined" ? true : catchingExceptions); - - /** - * ## Reporters - * The `HtmlReporter` builds all of the HTML UI for the runner page. This reporter paints the dots, stars, and x's for specs, as well as all spec names and all failures (if any). - */ - var htmlReporter = new jasmine.HtmlReporter({ - env: env, - onRaiseExceptionsClick: function() { queryString.navigateWithNewParam("catch", !env.catchingExceptions()); }, - addToExistingQueryString: function(key, value) { return queryString.fullStringWithNewParam(key, value); }, - getContainer: function() { return document.body; }, - createElement: function() { return document.createElement.apply(document, arguments); }, - createTextNode: function() { return document.createTextNode.apply(document, arguments); }, - timer: new jasmine.Timer() - }); - - /** - * The `jsApiReporter` also receives spec results, and is used by any environment that needs to extract the results from JavaScript. - */ - env.addReporter(jasmineInterface.jsApiReporter); - env.addReporter(htmlReporter); - - /** - * Filter which specs will be run by matching the start of the full name against the `spec` query param. - */ - var specFilter = new jasmine.HtmlSpecFilter({ - filterString: function() { return queryString.getParam("spec"); } - }); - - env.specFilter = function(spec) { - return specFilter.matches(spec.getFullName()); - }; - - /** - * Setting up timing functions to be able to be overridden. Certain browsers (Safari, IE 8, phantomjs) require this hack. - */ - window.setTimeout = window.setTimeout; - window.setInterval = window.setInterval; - window.clearTimeout = window.clearTimeout; - window.clearInterval = window.clearInterval; - - /** - * ## Execution - * - * Replace the browser window's `onload`, ensure it's called, and then run all of the loaded specs. This includes initializing the `HtmlReporter` instance and then executing the loaded Jasmine environment. All of this will happen after all of the specs are loaded. - */ - var currentWindowOnload = window.onload; - - window.onload = function() { - if (currentWindowOnload) { - currentWindowOnload(); - } - htmlReporter.initialize(); - env.execute(); - }; - - /** - * Helper function for readability above. - */ - function extend(destination, source) { - for (var property in source) destination[property] = source[property]; - return destination; - } - -}()); diff --git a/admin-panel/app/vendor/jasmine/jasmine-html.js b/admin-panel/app/vendor/jasmine/jasmine-html.js deleted file mode 100755 index bee5a04f..00000000 --- a/admin-panel/app/vendor/jasmine/jasmine-html.js +++ /dev/null @@ -1,416 +0,0 @@ -/* -Copyright (c) 2008-2015 Pivotal Labs - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -"Software"), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -*/ -jasmineRequire.html = function(j$) { - j$.ResultsNode = jasmineRequire.ResultsNode(); - j$.HtmlReporter = jasmineRequire.HtmlReporter(j$); - j$.QueryString = jasmineRequire.QueryString(); - j$.HtmlSpecFilter = jasmineRequire.HtmlSpecFilter(); -}; - -jasmineRequire.HtmlReporter = function(j$) { - - var noopTimer = { - start: function() {}, - elapsed: function() { return 0; } - }; - - function HtmlReporter(options) { - var env = options.env || {}, - getContainer = options.getContainer, - createElement = options.createElement, - createTextNode = options.createTextNode, - onRaiseExceptionsClick = options.onRaiseExceptionsClick || function() {}, - addToExistingQueryString = options.addToExistingQueryString || defaultQueryString, - timer = options.timer || noopTimer, - results = [], - specsExecuted = 0, - failureCount = 0, - pendingSpecCount = 0, - htmlReporterMain, - symbols, - failedSuites = []; - - this.initialize = function() { - clearPrior(); - htmlReporterMain = createDom('div', {className: 'jasmine_html-reporter'}, - createDom('div', {className: 'banner'}, - createDom('a', {className: 'title', href: 'http://jasmine.github.io/', target: '_blank'}), - createDom('span', {className: 'version'}, j$.version) - ), - createDom('ul', {className: 'symbol-summary'}), - createDom('div', {className: 'alert'}), - createDom('div', {className: 'results'}, - createDom('div', {className: 'failures'}) - ) - ); - getContainer().appendChild(htmlReporterMain); - - symbols = find('.symbol-summary'); - }; - - var totalSpecsDefined; - this.jasmineStarted = function(options) { - totalSpecsDefined = options.totalSpecsDefined || 0; - timer.start(); - }; - - var summary = createDom('div', {className: 'summary'}); - - var topResults = new j$.ResultsNode({}, '', null), - currentParent = topResults; - - this.suiteStarted = function(result) { - currentParent.addChild(result, 'suite'); - currentParent = currentParent.last(); - }; - - this.suiteDone = function(result) { - if (result.status == 'failed') { - failedSuites.push(result); - } - - if (currentParent == topResults) { - return; - } - - currentParent = currentParent.parent; - }; - - this.specStarted = function(result) { - currentParent.addChild(result, 'spec'); - }; - - var failures = []; - this.specDone = function(result) { - if(noExpectations(result) && typeof console !== 'undefined' && typeof console.error !== 'undefined') { - console.error('Spec \'' + result.fullName + '\' has no expectations.'); - } - - if (result.status != 'disabled') { - specsExecuted++; - } - - symbols.appendChild(createDom('li', { - className: noExpectations(result) ? 'empty' : result.status, - id: 'spec_' + result.id, - title: result.fullName - } - )); - - if (result.status == 'failed') { - failureCount++; - - var failure = - createDom('div', {className: 'spec-detail failed'}, - createDom('div', {className: 'description'}, - createDom('a', {title: result.fullName, href: specHref(result)}, result.fullName) - ), - createDom('div', {className: 'messages'}) - ); - var messages = failure.childNodes[1]; - - for (var i = 0; i < result.failedExpectations.length; i++) { - var expectation = result.failedExpectations[i]; - messages.appendChild(createDom('div', {className: 'result-message'}, expectation.message)); - messages.appendChild(createDom('div', {className: 'stack-trace'}, expectation.stack)); - } - - failures.push(failure); - } - - if (result.status == 'pending') { - pendingSpecCount++; - } - }; - - this.jasmineDone = function() { - var banner = find('.banner'); - banner.appendChild(createDom('span', {className: 'duration'}, 'finished in ' + timer.elapsed() / 1000 + 's')); - - var alert = find('.alert'); - - alert.appendChild(createDom('span', { className: 'exceptions' }, - createDom('label', { className: 'label', 'for': 'raise-exceptions' }, 'raise exceptions'), - createDom('input', { - className: 'raise', - id: 'raise-exceptions', - type: 'checkbox' - }) - )); - var checkbox = find('#raise-exceptions'); - - checkbox.checked = !env.catchingExceptions(); - checkbox.onclick = onRaiseExceptionsClick; - - if (specsExecuted < totalSpecsDefined) { - var skippedMessage = 'Ran ' + specsExecuted + ' of ' + totalSpecsDefined + ' specs - run all'; - alert.appendChild( - createDom('span', {className: 'bar skipped'}, - createDom('a', {href: '?', title: 'Run all specs'}, skippedMessage) - ) - ); - } - var statusBarMessage = ''; - var statusBarClassName = 'bar '; - - if (totalSpecsDefined > 0) { - statusBarMessage += pluralize('spec', specsExecuted) + ', ' + pluralize('failure', failureCount); - if (pendingSpecCount) { statusBarMessage += ', ' + pluralize('pending spec', pendingSpecCount); } - statusBarClassName += (failureCount > 0) ? 'failed' : 'passed'; - } else { - statusBarClassName += 'skipped'; - statusBarMessage += 'No specs found'; - } - - alert.appendChild(createDom('span', {className: statusBarClassName}, statusBarMessage)); - - for(i = 0; i < failedSuites.length; i++) { - var failedSuite = failedSuites[i]; - for(var j = 0; j < failedSuite.failedExpectations.length; j++) { - var errorBarMessage = 'AfterAll ' + failedSuite.failedExpectations[j].message; - var errorBarClassName = 'bar errored'; - alert.appendChild(createDom('span', {className: errorBarClassName}, errorBarMessage)); - } - } - - var results = find('.results'); - results.appendChild(summary); - - summaryList(topResults, summary); - - function summaryList(resultsTree, domParent) { - var specListNode; - for (var i = 0; i < resultsTree.children.length; i++) { - var resultNode = resultsTree.children[i]; - if (resultNode.type == 'suite') { - var suiteListNode = createDom('ul', {className: 'suite', id: 'suite-' + resultNode.result.id}, - createDom('li', {className: 'suite-detail'}, - createDom('a', {href: specHref(resultNode.result)}, resultNode.result.description) - ) - ); - - summaryList(resultNode, suiteListNode); - domParent.appendChild(suiteListNode); - } - if (resultNode.type == 'spec') { - if (domParent.getAttribute('class') != 'specs') { - specListNode = createDom('ul', {className: 'specs'}); - domParent.appendChild(specListNode); - } - var specDescription = resultNode.result.description; - if(noExpectations(resultNode.result)) { - specDescription = 'SPEC HAS NO EXPECTATIONS ' + specDescription; - } - if(resultNode.result.status === 'pending' && resultNode.result.pendingReason !== '') { - specDescription = specDescription + ' PENDING WITH MESSAGE: ' + resultNode.result.pendingReason; - } - specListNode.appendChild( - createDom('li', { - className: resultNode.result.status, - id: 'spec-' + resultNode.result.id - }, - createDom('a', {href: specHref(resultNode.result)}, specDescription) - ) - ); - } - } - } - - if (failures.length) { - alert.appendChild( - createDom('span', {className: 'menu bar spec-list'}, - createDom('span', {}, 'Spec List | '), - createDom('a', {className: 'failures-menu', href: '#'}, 'Failures'))); - alert.appendChild( - createDom('span', {className: 'menu bar failure-list'}, - createDom('a', {className: 'spec-list-menu', href: '#'}, 'Spec List'), - createDom('span', {}, ' | Failures '))); - - find('.failures-menu').onclick = function() { - setMenuModeTo('failure-list'); - }; - find('.spec-list-menu').onclick = function() { - setMenuModeTo('spec-list'); - }; - - setMenuModeTo('failure-list'); - - var failureNode = find('.failures'); - for (var i = 0; i < failures.length; i++) { - failureNode.appendChild(failures[i]); - } - } - }; - - return this; - - function find(selector) { - return getContainer().querySelector('.jasmine_html-reporter ' + selector); - } - - function clearPrior() { - // return the reporter - var oldReporter = find(''); - - if(oldReporter) { - getContainer().removeChild(oldReporter); - } - } - - function createDom(type, attrs, childrenVarArgs) { - var el = createElement(type); - - for (var i = 2; i < arguments.length; i++) { - var child = arguments[i]; - - if (typeof child === 'string') { - el.appendChild(createTextNode(child)); - } else { - if (child) { - el.appendChild(child); - } - } - } - - for (var attr in attrs) { - if (attr == 'className') { - el[attr] = attrs[attr]; - } else { - el.setAttribute(attr, attrs[attr]); - } - } - - return el; - } - - function pluralize(singular, count) { - var word = (count == 1 ? singular : singular + 's'); - - return '' + count + ' ' + word; - } - - function specHref(result) { - return addToExistingQueryString('spec', result.fullName); - } - - function defaultQueryString(key, value) { - return '?' + key + '=' + value; - } - - function setMenuModeTo(mode) { - htmlReporterMain.setAttribute('class', 'jasmine_html-reporter ' + mode); - } - - function noExpectations(result) { - return (result.failedExpectations.length + result.passedExpectations.length) === 0 && - result.status === 'passed'; - } - } - - return HtmlReporter; -}; - -jasmineRequire.HtmlSpecFilter = function() { - function HtmlSpecFilter(options) { - var filterString = options && options.filterString() && options.filterString().replace(/[-[\]{}()*+?.,\\^$|#\s]/g, '\\$&'); - var filterPattern = new RegExp(filterString); - - this.matches = function(specName) { - return filterPattern.test(specName); - }; - } - - return HtmlSpecFilter; -}; - -jasmineRequire.ResultsNode = function() { - function ResultsNode(result, type, parent) { - this.result = result; - this.type = type; - this.parent = parent; - - this.children = []; - - this.addChild = function(result, type) { - this.children.push(new ResultsNode(result, type, this)); - }; - - this.last = function() { - return this.children[this.children.length - 1]; - }; - } - - return ResultsNode; -}; - -jasmineRequire.QueryString = function() { - function QueryString(options) { - - this.navigateWithNewParam = function(key, value) { - options.getWindowLocation().search = this.fullStringWithNewParam(key, value); - }; - - this.fullStringWithNewParam = function(key, value) { - var paramMap = queryStringToParamMap(); - paramMap[key] = value; - return toQueryString(paramMap); - }; - - this.getParam = function(key) { - return queryStringToParamMap()[key]; - }; - - return this; - - function toQueryString(paramMap) { - var qStrPairs = []; - for (var prop in paramMap) { - qStrPairs.push(encodeURIComponent(prop) + '=' + encodeURIComponent(paramMap[prop])); - } - return '?' + qStrPairs.join('&'); - } - - function queryStringToParamMap() { - var paramStr = options.getWindowLocation().search.substring(1), - params = [], - paramMap = {}; - - if (paramStr.length > 0) { - params = paramStr.split('&'); - for (var i = 0; i < params.length; i++) { - var p = params[i].split('='); - var value = decodeURIComponent(p[1]); - if (value === 'true' || value === 'false') { - value = JSON.parse(value); - } - paramMap[decodeURIComponent(p[0])] = value; - } - } - - return paramMap; - } - - } - - return QueryString; -}; diff --git a/admin-panel/app/vendor/jasmine/jasmine.css b/admin-panel/app/vendor/jasmine/jasmine.css deleted file mode 100755 index ecc5f5e7..00000000 --- a/admin-panel/app/vendor/jasmine/jasmine.css +++ /dev/null @@ -1,62 +0,0 @@ -body { overflow-y: scroll; } - -.jasmine_html-reporter { background-color: #eee; padding: 5px; margin: -8px; font-size: 11px; font-family: Monaco, "Lucida Console", monospace; line-height: 14px; color: #333; } -.jasmine_html-reporter a { text-decoration: none; } -.jasmine_html-reporter a:hover { text-decoration: underline; } -.jasmine_html-reporter p, .jasmine_html-reporter h1, .jasmine_html-reporter h2, .jasmine_html-reporter h3, .jasmine_html-reporter h4, .jasmine_html-reporter h5, .jasmine_html-reporter h6 { margin: 0; line-height: 14px; } -.jasmine_html-reporter .banner, .jasmine_html-reporter .symbol-summary, .jasmine_html-reporter .summary, .jasmine_html-reporter .result-message, .jasmine_html-reporter .spec .description, .jasmine_html-reporter .spec-detail .description, .jasmine_html-reporter .alert .bar, .jasmine_html-reporter .stack-trace { padding-left: 9px; padding-right: 9px; } -.jasmine_html-reporter .banner { position: relative; } -.jasmine_html-reporter .banner .title { background: url('data:image/png;base64,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') no-repeat; background: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjwhLS0gQ3JlYXRlZCB3aXRoIElua3NjYXBlIChodHRwOi8vd3d3Lmlua3NjYXBlLm9yZy8pIC0tPgoKPHN2ZwogICB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iCiAgIHhtbG5zOmNjPSJodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy9ucyMiCiAgIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyIKICAgeG1sbnM6c3ZnPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIKICAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogICB4bWxuczppbmtzY2FwZT0iaHR0cDovL3d3dy5pbmtzY2FwZS5vcmcvbmFtZXNwYWNlcy9pbmtzY2FwZSIKICAgdmVyc2lvbj0iMS4xIgogICB3aWR0aD0iNjgxLjk2MjUyIgogICBoZWlnaHQ9IjE4Ny41IgogICBpZD0ic3ZnMiIKICAgeG1sOnNwYWNlPSJwcmVzZXJ2ZSI+PG1ldGFkYXRhCiAgICAgaWQ9Im1ldGFkYXRhOCI+PHJkZjpSREY+PGNjOldvcmsKICAgICAgICAgcmRmOmFib3V0PSIiPjxkYzpmb3JtYXQ+aW1hZ2Uvc3ZnK3htbDwvZGM6Zm9ybWF0PjxkYzp0eXBlCiAgICAgICAgICAgcmRmOnJlc291cmNlPSJodHRwOi8vcHVybC5vcmcvZGMvZGNtaXR5cGUvU3RpbGxJbWFnZSIgLz48L2NjOldvcms+PC9yZGY6UkRGPjwvbWV0YWRhdGE+PGRlZnMKICAgICBpZD0iZGVmczYiPjxjbGlwUGF0aAogICAgICAgaWQ9ImNsaXBQYXRoMTgiPjxwYXRoCiAgICAgICAgIGQ9Ik0gMCwxNTAwIDAsMCBsIDU0NTUuNzQsMCAwLDE1MDAgTCAwLDE1MDAgeiIKICAgICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIKICAgICAgICAgaWQ9InBhdGgyMCIgLz48L2NsaXBQYXRoPjwvZGVmcz48ZwogICAgIHRyYW5zZm9ybT0ibWF0cml4KDEuMjUsMCwwLC0xLjI1LDAsMTg3LjUpIgogICAgIGlkPSJnMTAiPjxnCiAgICAgICB0cmFuc2Zvcm09InNjYWxlKDAuMSwwLjEpIgogICAgICAgaWQ9ImcxMiI+PGcKICAgICAgICAgaWQ9ImcxNCI+PGcKICAgICAgICAgICBjbGlwLXBhdGg9InVybCgjY2xpcFBhdGgxOCkiCiAgICAgICAgICAgaWQ9ImcxNiI+PHBhdGgKICAgICAgICAgICAgIGQ9Im0gMTU0NCw1OTkuNDM0IGMgMC45MiwtNDAuMzUyIDI1LjY4LC04MS42MDIgNzEuNTMsLTgxLjYwMiAyNy41MSwwIDQ3LjY4LDEyLjgzMiA2MS40NCwzNS43NTQgMTIuODMsMjIuOTMgMTIuODMsNTYuODUyIDEyLjgzLDgyLjUyNyBsIDAsMzI5LjE4NCAtNzEuNTIsMCAwLDEwNC41NDMgMjY2LjgzLDAgMCwtMTA0LjU0MyAtNzAuNiwwIDAsLTM0NC43NyBjIDAsLTU4LjY5MSAtMy42OCwtMTA0LjUzMSAtNDQuOTMsLTE1Mi4yMTggLTM2LjY4LC00Mi4xOCAtOTYuMjgsLTY2LjAyIC0xNTMuMTQsLTY2LjAyIC0xMTcuMzcsMCAtMjA3LjI0LDc3Ljk0MSAtMjAyLjY0LDE5Ny4xNDUgbCAxMzAuMiwwIgogICAgICAgICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIKICAgICAgICAgICAgIGlkPSJwYXRoMjIiCiAgICAgICAgICAgICBzdHlsZT0iZmlsbDojOGE0MTgyO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpub256ZXJvO3N0cm9rZTpub25lIiAvPjxwYXRoCiAgICAgICAgICAgICBkPSJtIDIzMDEuNCw2NjIuNjk1IGMgMCw4MC43MDMgLTY2Ljk0LDE0NS44MTMgLTE0Ny42MywxNDUuODEzIC04My40NCwwIC0xNDcuNjMsLTY4Ljc4MSAtMTQ3LjYzLC0xNTEuMzAxIDAsLTc5Ljc4NSA2Ni45NCwtMTQ1LjgwMSAxNDUuOCwtMTQ1LjgwMSA4NC4zNSwwIDE0OS40Niw2Ny44NTIgMTQ5LjQ2LDE1MS4yODkgeiBtIC0xLjgzLC0xODEuNTQ3IGMgLTM1Ljc3LC01NC4wOTcgLTkzLjUzLC03OC44NTkgLTE1Ny43MiwtNzguODU5IC0xNDAuMywwIC0yNTEuMjQsMTE2LjQ0OSAtMjUxLjI0LDI1NC45MTggMCwxNDIuMTI5IDExMy43LDI2MC40MSAyNTYuNzQsMjYwLjQxIDYzLjI3LDAgMTE4LjI5LC0yOS4zMzYgMTUyLjIyLC04Mi41MjMgbCAwLDY5LjY4NyAxNzUuMTQsMCAwLC0xMDQuNTI3IC02MS40NCwwIDAsLTI4MC41OTggNjEuNDQsMCAwLC0xMDQuNTI3IC0xNzUuMTQsMCAwLDY2LjAxOSIKICAgICAgICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiCiAgICAgICAgICAgICBpZD0icGF0aDI0IgogICAgICAgICAgICAgc3R5bGU9ImZpbGw6IzhhNDE4MjtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6bm9uemVybztzdHJva2U6bm9uZSIgLz48cGF0aAogICAgICAgICAgICAgZD0ibSAyNjIyLjMzLDU1Ny4yNTggYyAzLjY3LC00NC4wMTYgMzMuMDEsLTczLjM0OCA3OC44NiwtNzMuMzQ4IDMzLjkzLDAgNjYuOTMsMjMuODI0IDY2LjkzLDYwLjUwNCAwLDQ4LjYwNiAtNDUuODQsNTYuODU2IC04My40NCw2Ni45NDEgLTg1LjI4LDIyLjAwNCAtMTc4LjgxLDQ4LjYwNiAtMTc4LjgxLDE1NS44NzkgMCw5My41MzYgNzguODYsMTQ3LjYzMyAxNjUuOTgsMTQ3LjYzMyA0NCwwIDgzLjQzLC05LjE3NiAxMTAuOTQsLTQ0LjAwOCBsIDAsMzMuOTIyIDgyLjUzLDAgMCwtMTMyLjk2NSAtMTA4LjIxLDAgYyAtMS44MywzNC44NTYgLTI4LjQyLDU3Ljc3NCAtNjMuMjYsNTcuNzc0IC0zMC4yNiwwIC02Mi4zNSwtMTcuNDIyIC02Mi4zNSwtNTEuMzQ4IDAsLTQ1Ljg0NyA0NC45MywtNTUuOTMgODAuNjksLTY0LjE4IDg4LjAyLC0yMC4xNzUgMTgyLjQ3LC00Ny42OTUgMTgyLjQ3LC0xNTcuNzM0IDAsLTk5LjAyNyAtODMuNDQsLTE1NC4wMzkgLTE3NS4xMywtMTU0LjAzOSAtNDkuNTMsMCAtOTQuNDYsMTUuNTgyIC0xMjYuNTUsNTMuMTggbCAwLC00MC4zNCAtODUuMjcsMCAwLDE0Mi4xMjkgMTE0LjYyLDAiCiAgICAgICAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIgogICAgICAgICAgICAgaWQ9InBhdGgyNiIKICAgICAgICAgICAgIHN0eWxlPSJmaWxsOiM4YTQxODI7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOm5vbnplcm87c3Ryb2tlOm5vbmUiIC8+PHBhdGgKICAgICAgICAgICAgIGQ9Im0gMjk4OC4xOCw4MDAuMjU0IC02My4yNiwwIDAsMTA0LjUyNyAxNjUuMDUsMCAwLC03My4zNTUgYyAzMS4xOCw1MS4zNDcgNzguODYsODUuMjc3IDE0MS4yMSw4NS4yNzcgNjcuODUsMCAxMjQuNzEsLTQxLjI1OCAxNTIuMjEsLTEwMi42OTkgMjYuNiw2Mi4zNTEgOTIuNjIsMTAyLjY5OSAxNjAuNDcsMTAyLjY5OSA1My4xOSwwIDEwNS40NiwtMjIgMTQxLjIxLC02Mi4zNTEgMzguNTIsLTQ0LjkzOCAzOC41MiwtOTMuNTMyIDM4LjUyLC0xNDkuNDU3IGwgMCwtMTg1LjIzOSA2My4yNywwIDAsLTEwNC41MjcgLTIzOC40MiwwIDAsMTA0LjUyNyA2My4yOCwwIDAsMTU3LjcxNSBjIDAsMzIuMTAyIDAsNjAuNTI3IC0xNC42Nyw4OC45NTcgLTE4LjM0LDI2LjU4MiAtNDguNjEsNDAuMzQ0IC03OS43Nyw0MC4zNDQgLTMwLjI2LDAgLTYzLjI4LC0xMi44NDQgLTgyLjUzLC0zNi42NzIgLTIyLjkzLC0yOS4zNTUgLTIyLjkzLC01Ni44NjMgLTIyLjkzLC05Mi42MjkgbCAwLC0xNTcuNzE1IDYzLjI3LDAgMCwtMTA0LjUyNyAtMjM4LjQxLDAgMCwxMDQuNTI3IDYzLjI4LDAgMCwxNTAuMzgzIGMgMCwyOS4zNDggMCw2Ni4wMjMgLTE0LjY3LDkxLjY5OSAtMTUuNTksMjkuMzM2IC00Ny42OSw0NC45MzQgLTgwLjcsNDQuOTM0IC0zMS4xOCwwIC01Ny43NywtMTEuMDA4IC03Ny45NCwtMzUuNzc0IC0yNC43NywtMzAuMjUzIC0yNi42LC02Mi4zNDMgLTI2LjYsLTk5Ljk0MSBsIDAsLTE1MS4zMDEgNjMuMjcsMCAwLC0xMDQuNTI3IC0yMzguNCwwIDAsMTA0LjUyNyA2My4yNiwwIDAsMjgwLjU5OCIKICAgICAgICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiCiAgICAgICAgICAgICBpZD0icGF0aDI4IgogICAgICAgICAgICAgc3R5bGU9ImZpbGw6IzhhNDE4MjtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6bm9uemVybztzdHJva2U6bm9uZSIgLz48cGF0aAogICAgICAgICAgICAgZD0ibSAzOTk4LjY2LDk1MS41NDcgLTExMS44NywwIDAsMTE4LjI5MyAxMTEuODcsMCAwLC0xMTguMjkzIHogbSAwLC00MzEuODkxIDYzLjI3LDAgMCwtMTA0LjUyNyAtMjM5LjMzLDAgMCwxMDQuNTI3IDY0LjE5LDAgMCwyODAuNTk4IC02My4yNywwIDAsMTA0LjUyNyAxNzUuMTQsMCAwLC0zODUuMTI1IgogICAgICAgICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIKICAgICAgICAgICAgIGlkPSJwYXRoMzAiCiAgICAgICAgICAgICBzdHlsZT0iZmlsbDojOGE0MTgyO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpub256ZXJvO3N0cm9rZTpub25lIiAvPjxwYXRoCiAgICAgICAgICAgICBkPSJtIDQxNTkuMTIsODAwLjI1NCAtNjMuMjcsMCAwLDEwNC41MjcgMTc1LjE0LDAgMCwtNjkuNjg3IGMgMjkuMzUsNTQuMTAxIDg0LjM2LDgwLjY5OSAxNDQuODcsODAuNjk5IDUzLjE5LDAgMTA1LjQ1LC0yMi4wMTYgMTQxLjIyLC02MC41MjcgNDAuMzQsLTQ0LjkzNCA0MS4yNiwtODguMDMyIDQxLjI2LC0xNDMuOTU3IGwgMCwtMTkxLjY1MyA2My4yNywwIDAsLTEwNC41MjcgLTIzOC40LDAgMCwxMDQuNTI3IDYzLjI2LDAgMCwxNTguNjM3IGMgMCwzMC4yNjIgMCw2MS40MzQgLTE5LjI2LDg4LjAzNSAtMjAuMTcsMjYuNTgyIC01My4xOCwzOS40MTQgLTg2LjE5LDM5LjQxNCAtMzMuOTMsMCAtNjguNzcsLTEzLjc1IC04OC45NCwtNDEuMjUgLTIxLjA5LC0yNy41IC0yMS4wOSwtNjkuNjg3IC0yMS4wOSwtMTAyLjcwNyBsIDAsLTE0Mi4xMjkgNjMuMjYsMCAwLC0xMDQuNTI3IC0yMzguNCwwIDAsMTA0LjUyNyA2My4yNywwIDAsMjgwLjU5OCIKICAgICAgICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiCiAgICAgICAgICAgICBpZD0icGF0aDMyIgogICAgICAgICAgICAgc3R5bGU9ImZpbGw6IzhhNDE4MjtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6bm9uemVybztzdHJva2U6bm9uZSIgLz48cGF0aAogICAgICAgICAgICAgZD0ibSA1MDgyLjQ4LDcwMy45NjUgYyAtMTkuMjQsNzAuNjA1IC04MS42LDExNS41NDcgLTE1NC4wNCwxMTUuNTQ3IC02Ni4wNCwwIC0xMjkuMywtNTEuMzQ4IC0xNDMuMDUsLTExNS41NDcgbCAyOTcuMDksMCB6IG0gODUuMjcsLTE0NC44ODMgYyAtMzguNTEsLTkzLjUyMyAtMTI5LjI3LC0xNTYuNzkzIC0yMzEuMDUsLTE1Ni43OTMgLTE0My4wNywwIC0yNTcuNjgsMTExLjg3MSAtMjU3LjY4LDI1NS44MzYgMCwxNDQuODgzIDEwOS4xMiwyNjEuMzI4IDI1NC45MSwyNjEuMzI4IDY3Ljg3LDAgMTM1LjcyLC0zMC4yNTggMTgzLjM5LC03OC44NjMgNDguNjIsLTUxLjM0NCA2OC43OSwtMTEzLjY5NSA2OC43OSwtMTgzLjM4MyBsIC0zLjY3LC0zOS40MzQgLTM5Ni4xMywwIGMgMTQuNjcsLTY3Ljg2MyA3Ny4wMywtMTE3LjM2MyAxNDYuNzIsLTExNy4zNjMgNDguNTksMCA5MC43NiwxOC4zMjggMTE4LjI4LDU4LjY3MiBsIDExNi40NCwwIgogICAgICAgICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIKICAgICAgICAgICAgIGlkPSJwYXRoMzQiCiAgICAgICAgICAgICBzdHlsZT0iZmlsbDojOGE0MTgyO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpub256ZXJvO3N0cm9rZTpub25lIiAvPjxwYXRoCiAgICAgICAgICAgICBkPSJtIDY5MC44OTUsODUwLjcwMyA5MC43NSwwIDIyLjU0MywzMS4wMzUgMCwyNDMuMTIyIC0xMzUuODI5LDAgMCwtMjQzLjE0MSAyMi41MzYsLTMxLjAxNiIKICAgICAgICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiCiAgICAgICAgICAgICBpZD0icGF0aDM2IgogICAgICAgICAgICAgc3R5bGU9ImZpbGw6IzhhNDE4MjtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6bm9uemVybztzdHJva2U6bm9uZSIgLz48cGF0aAogICAgICAgICAgICAgZD0ibSA2MzIuMzk1LDc0Mi4yNTggMjguMDM5LDg2LjMwNCAtMjIuNTUxLDMxLjA0IC0yMzEuMjIzLDc1LjEyOCAtNDEuOTc2LC0xMjkuMTgzIDIzMS4yNTcsLTc1LjEzNyAzNi40NTQsMTEuODQ4IgogICAgICAgICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIKICAgICAgICAgICAgIGlkPSJwYXRoMzgiCiAgICAgICAgICAgICBzdHlsZT0iZmlsbDojOGE0MTgyO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpub256ZXJvO3N0cm9rZTpub25lIiAvPjxwYXRoCiAgICAgICAgICAgICBkPSJtIDcxNy40NDksNjUzLjEwNSAtNzMuNDEsNTMuMzYgLTM2LjQ4OCwtMTEuODc1IC0xNDIuOTAzLC0xOTYuNjkyIDEwOS44ODMsLTc5LjgyOCAxNDIuOTE4LDE5Ni43MDMgMCwzOC4zMzIiCiAgICAgICAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIgogICAgICAgICAgICAgaWQ9InBhdGg0MCIKICAgICAgICAgICAgIHN0eWxlPSJmaWxsOiM4YTQxODI7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOm5vbnplcm87c3Ryb2tlOm5vbmUiIC8+PHBhdGgKICAgICAgICAgICAgIGQ9Im0gODI4LjUyLDcwNi40NjUgLTczLjQyNiwtNTMuMzQgMC4wMTEsLTM4LjM1OSBMIDg5OC4wMDQsNDE4LjA3IDEwMDcuOSw0OTcuODk4IDg2NC45NzMsNjk0LjYwOSA4MjguNTIsNzA2LjQ2NSIKICAgICAgICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiCiAgICAgICAgICAgICBpZD0icGF0aDQyIgogICAgICAgICAgICAgc3R5bGU9ImZpbGw6IzhhNDE4MjtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6bm9uemVybztzdHJva2U6bm9uZSIgLz48cGF0aAogICAgICAgICAgICAgZD0ibSA4MTIuMDg2LDgyOC41ODYgMjguMDU1LC04Ni4zMiAzNi40ODQsLTExLjgzNiAyMzEuMjI1LDc1LjExNyAtNDEuOTcsMTI5LjE4MyAtMjMxLjIzOSwtNzUuMTQgLTIyLjU1NSwtMzEuMDA0IgogICAgICAgICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIKICAgICAgICAgICAgIGlkPSJwYXRoNDQiCiAgICAgICAgICAgICBzdHlsZT0iZmlsbDojOGE0MTgyO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpub256ZXJvO3N0cm9rZTpub25lIiAvPjxwYXRoCiAgICAgICAgICAgICBkPSJtIDczNi4zMDEsMTMzNS44OCBjIC0zMjMuMDQ3LDAgLTU4NS44NzUsLTI2Mi43OCAtNTg1Ljg3NSwtNTg1Ljc4MiAwLC0zMjMuMTE4IDI2Mi44MjgsLTU4NS45NzcgNTg1Ljg3NSwtNTg1Ljk3NyAzMjMuMDE5LDAgNTg1LjgwOSwyNjIuODU5IDU4NS44MDksNTg1Ljk3NyAwLDMyMy4wMDIgLTI2Mi43OSw1ODUuNzgyIC01ODUuODA5LDU4NS43ODIgbCAwLDAgeiBtIDAsLTExOC42MSBjIDI1Ny45NzIsMCA0NjcuMTg5LC0yMDkuMTMgNDY3LjE4OSwtNDY3LjE3MiAwLC0yNTguMTI5IC0yMDkuMjE3LC00NjcuMzQ4IC00NjcuMTg5LC00NjcuMzQ4IC0yNTguMDc0LDAgLTQ2Ny4yNTQsMjA5LjIxOSAtNDY3LjI1NCw0NjcuMzQ4IDAsMjU4LjA0MiAyMDkuMTgsNDY3LjE3MiA0NjcuMjU0LDQ2Ny4xNzIiCiAgICAgICAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIgogICAgICAgICAgICAgaWQ9InBhdGg0NiIKICAgICAgICAgICAgIHN0eWxlPSJmaWxsOiM4YTQxODI7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOm5vbnplcm87c3Ryb2tlOm5vbmUiIC8+PHBhdGgKICAgICAgICAgICAgIGQ9Im0gMTA5MS4xMyw2MTkuODgzIC0xNzUuNzcxLDU3LjEyMSAxMS42MjksMzUuODA4IDE3NS43NjIsLTU3LjEyMSAtMTEuNjIsLTM1LjgwOCIKICAgICAgICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiCiAgICAgICAgICAgICBpZD0icGF0aDQ4IgogICAgICAgICAgICAgc3R5bGU9ImZpbGw6IzhhNDE4MjtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6bm9uemVybztzdHJva2U6bm9uZSIgLz48cGF0aAogICAgICAgICAgICAgZD0iTSA4NjYuOTU3LDkwMi4wNzQgODM2LjUsOTI0LjE5OSA5NDUuMTIxLDEwNzMuNzMgOTc1LjU4NiwxMDUxLjYxIDg2Ni45NTcsOTAyLjA3NCIKICAgICAgICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiCiAgICAgICAgICAgICBpZD0icGF0aDUwIgogICAgICAgICAgICAgc3R5bGU9ImZpbGw6IzhhNDE4MjtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6bm9uemVybztzdHJva2U6bm9uZSIgLz48cGF0aAogICAgICAgICAgICAgZD0iTSA2MDcuNDY1LDkwMy40NDUgNDk4Ljg1NSwxMDUyLjk3IDUyOS4zMiwxMDc1LjEgNjM3LjkzLDkyNS41NjYgNjA3LjQ2NSw5MDMuNDQ1IgogICAgICAgICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIKICAgICAgICAgICAgIGlkPSJwYXRoNTIiCiAgICAgICAgICAgICBzdHlsZT0iZmlsbDojOGE0MTgyO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpub256ZXJvO3N0cm9rZTpub25lIiAvPjxwYXRoCiAgICAgICAgICAgICBkPSJtIDM4MC42ODgsNjIyLjEyOSAtMTEuNjI2LDM1LjgwMSAxNzUuNzU4LDU3LjA5IDExLjYyMSwtMzUuODAxIC0xNzUuNzUzLC01Ny4wOSIKICAgICAgICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiCiAgICAgICAgICAgICBpZD0icGF0aDU0IgogICAgICAgICAgICAgc3R5bGU9ImZpbGw6IzhhNDE4MjtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6bm9uemVybztzdHJva2U6bm9uZSIgLz48cGF0aAogICAgICAgICAgICAgZD0ibSA3MTYuMjg5LDM3Ni41OSAzNy42NDA2LDAgMCwxODQuODE2IC0zNy42NDA2LDAgMCwtMTg0LjgxNiB6IgogICAgICAgICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIKICAgICAgICAgICAgIGlkPSJwYXRoNTYiCiAgICAgICAgICAgICBzdHlsZT0iZmlsbDojOGE0MTgyO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpub256ZXJvO3N0cm9rZTpub25lIiAvPjwvZz48L2c+PC9nPjwvZz48L3N2Zz4=') no-repeat, none; -moz-background-size: 100%; -o-background-size: 100%; -webkit-background-size: 100%; background-size: 100%; display: block; float: left; width: 90px; height: 25px; } -.jasmine_html-reporter .banner .version { margin-left: 14px; position: relative; top: 6px; } -.jasmine_html-reporter .banner .duration { position: absolute; right: 14px; top: 6px; } -.jasmine_html-reporter #jasmine_content { position: fixed; right: 100%; } -.jasmine_html-reporter .version { color: #aaa; } -.jasmine_html-reporter .banner { margin-top: 14px; } -.jasmine_html-reporter .duration { color: #aaa; float: right; } -.jasmine_html-reporter .symbol-summary { overflow: hidden; *zoom: 1; margin: 14px 0; } -.jasmine_html-reporter .symbol-summary li { display: inline-block; height: 8px; width: 14px; font-size: 16px; } -.jasmine_html-reporter .symbol-summary li.passed { font-size: 14px; } -.jasmine_html-reporter .symbol-summary li.passed:before { color: #007069; content: "\02022"; } -.jasmine_html-reporter .symbol-summary li.failed { line-height: 9px; } -.jasmine_html-reporter .symbol-summary li.failed:before { color: #ca3a11; content: "\d7"; font-weight: bold; margin-left: -1px; } -.jasmine_html-reporter .symbol-summary li.disabled { font-size: 14px; } -.jasmine_html-reporter .symbol-summary li.disabled:before { color: #bababa; content: "\02022"; } -.jasmine_html-reporter .symbol-summary li.pending { line-height: 17px; } -.jasmine_html-reporter .symbol-summary li.pending:before { color: #ba9d37; content: "*"; } -.jasmine_html-reporter .symbol-summary li.empty { font-size: 14px; } -.jasmine_html-reporter .symbol-summary li.empty:before { color: #ba9d37; content: "\02022"; } -.jasmine_html-reporter .exceptions { color: #fff; float: right; margin-top: 5px; margin-right: 5px; } -.jasmine_html-reporter .bar { line-height: 28px; font-size: 14px; display: block; color: #eee; } -.jasmine_html-reporter .bar.failed { background-color: #ca3a11; } -.jasmine_html-reporter .bar.passed { background-color: #007069; } -.jasmine_html-reporter .bar.skipped { background-color: #bababa; } -.jasmine_html-reporter .bar.errored { background-color: #ca3a11; } -.jasmine_html-reporter .bar.menu { background-color: #fff; color: #aaa; } -.jasmine_html-reporter .bar.menu a { color: #333; } -.jasmine_html-reporter .bar a { color: white; } -.jasmine_html-reporter.spec-list .bar.menu.failure-list, .jasmine_html-reporter.spec-list .results .failures { display: none; } -.jasmine_html-reporter.failure-list .bar.menu.spec-list, .jasmine_html-reporter.failure-list .summary { display: none; } -.jasmine_html-reporter .running-alert { background-color: #666; } -.jasmine_html-reporter .results { margin-top: 14px; } -.jasmine_html-reporter.showDetails .summaryMenuItem { font-weight: normal; text-decoration: inherit; } -.jasmine_html-reporter.showDetails .summaryMenuItem:hover { text-decoration: underline; } -.jasmine_html-reporter.showDetails .detailsMenuItem { font-weight: bold; text-decoration: underline; } -.jasmine_html-reporter.showDetails .summary { display: none; } -.jasmine_html-reporter.showDetails #details { display: block; } -.jasmine_html-reporter .summaryMenuItem { font-weight: bold; text-decoration: underline; } -.jasmine_html-reporter .summary { margin-top: 14px; } -.jasmine_html-reporter .summary ul { list-style-type: none; margin-left: 14px; padding-top: 0; padding-left: 0; } -.jasmine_html-reporter .summary ul.suite { margin-top: 7px; margin-bottom: 7px; } -.jasmine_html-reporter .summary li.passed a { color: #007069; } -.jasmine_html-reporter .summary li.failed a { color: #ca3a11; } -.jasmine_html-reporter .summary li.empty a { color: #ba9d37; } -.jasmine_html-reporter .summary li.pending a { color: #ba9d37; } -.jasmine_html-reporter .description + .suite { margin-top: 0; } -.jasmine_html-reporter .suite { margin-top: 14px; } -.jasmine_html-reporter .suite a { color: #333; } -.jasmine_html-reporter .failures .spec-detail { margin-bottom: 28px; } -.jasmine_html-reporter .failures .spec-detail .description { background-color: #ca3a11; } -.jasmine_html-reporter .failures .spec-detail .description a { color: white; } -.jasmine_html-reporter .result-message { padding-top: 14px; color: #333; white-space: pre; } -.jasmine_html-reporter .result-message span.result { display: block; } -.jasmine_html-reporter .stack-trace { margin: 5px 0 0 0; max-height: 224px; overflow: auto; line-height: 18px; color: #666; border: 1px solid #ddd; background: white; white-space: pre; } diff --git a/admin-panel/app/vendor/jasmine/jasmine.js b/admin-panel/app/vendor/jasmine/jasmine.js deleted file mode 100755 index c7709969..00000000 --- a/admin-panel/app/vendor/jasmine/jasmine.js +++ /dev/null @@ -1,3048 +0,0 @@ -/* -Copyright (c) 2008-2015 Pivotal Labs - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -"Software"), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -*/ -var getJasmineRequireObj = (function (jasmineGlobal) { - var jasmineRequire; - - if (typeof module !== 'undefined' && module.exports) { - jasmineGlobal = global; - jasmineRequire = exports; - } else { - if (typeof window !== 'undefined' && typeof window.toString === 'function' && window.toString() === '[object GjsGlobal]') { - jasmineGlobal = window; - } - jasmineRequire = jasmineGlobal.jasmineRequire = jasmineGlobal.jasmineRequire || {}; - } - - function getJasmineRequire() { - return jasmineRequire; - } - - getJasmineRequire().core = function(jRequire) { - var j$ = {}; - - jRequire.base(j$, jasmineGlobal); - j$.util = jRequire.util(); - j$.Any = jRequire.Any(); - j$.Anything = jRequire.Anything(j$); - j$.CallTracker = jRequire.CallTracker(); - j$.MockDate = jRequire.MockDate(); - j$.Clock = jRequire.Clock(); - j$.DelayedFunctionScheduler = jRequire.DelayedFunctionScheduler(); - j$.Env = jRequire.Env(j$); - j$.ExceptionFormatter = jRequire.ExceptionFormatter(); - j$.Expectation = jRequire.Expectation(); - j$.buildExpectationResult = jRequire.buildExpectationResult(); - j$.JsApiReporter = jRequire.JsApiReporter(); - j$.matchersUtil = jRequire.matchersUtil(j$); - j$.ObjectContaining = jRequire.ObjectContaining(j$); - j$.ArrayContaining = jRequire.ArrayContaining(j$); - j$.pp = jRequire.pp(j$); - j$.QueueRunner = jRequire.QueueRunner(j$); - j$.ReportDispatcher = jRequire.ReportDispatcher(); - j$.Spec = jRequire.Spec(j$); - j$.SpyRegistry = jRequire.SpyRegistry(j$); - j$.SpyStrategy = jRequire.SpyStrategy(); - j$.StringMatching = jRequire.StringMatching(j$); - j$.Suite = jRequire.Suite(); - j$.Timer = jRequire.Timer(); - j$.version = jRequire.version(); - - j$.matchers = jRequire.requireMatchers(jRequire, j$); - - return j$; - }; - - return getJasmineRequire; -})(this); - -getJasmineRequireObj().requireMatchers = function(jRequire, j$) { - var availableMatchers = [ - 'toBe', - 'toBeCloseTo', - 'toBeDefined', - 'toBeFalsy', - 'toBeGreaterThan', - 'toBeLessThan', - 'toBeNaN', - 'toBeNull', - 'toBeTruthy', - 'toBeUndefined', - 'toContain', - 'toEqual', - 'toHaveBeenCalled', - 'toHaveBeenCalledWith', - 'toMatch', - 'toThrow', - 'toThrowError' - ], - matchers = {}; - - for (var i = 0; i < availableMatchers.length; i++) { - var name = availableMatchers[i]; - matchers[name] = jRequire[name](j$); - } - - return matchers; -}; - -getJasmineRequireObj().base = function(j$, jasmineGlobal) { - j$.unimplementedMethod_ = function() { - throw new Error('unimplemented method'); - }; - - j$.MAX_PRETTY_PRINT_DEPTH = 40; - j$.MAX_PRETTY_PRINT_ARRAY_LENGTH = 100; - j$.DEFAULT_TIMEOUT_INTERVAL = 5000; - - j$.getGlobal = function() { - return jasmineGlobal; - }; - - j$.getEnv = function(options) { - var env = j$.currentEnv_ = j$.currentEnv_ || new j$.Env(options); - //jasmine. singletons in here (setTimeout blah blah). - return env; - }; - - j$.isArray_ = function(value) { - return j$.isA_('Array', value); - }; - - j$.isString_ = function(value) { - return j$.isA_('String', value); - }; - - j$.isNumber_ = function(value) { - return j$.isA_('Number', value); - }; - - j$.isA_ = function(typeName, value) { - return Object.prototype.toString.apply(value) === '[object ' + typeName + ']'; - }; - - j$.isDomNode = function(obj) { - return obj.nodeType > 0; - }; - - j$.fnNameFor = function(func) { - return func.name || func.toString().match(/^\s*function\s*(\w*)\s*\(/)[1]; - }; - - j$.any = function(clazz) { - return new j$.Any(clazz); - }; - - j$.anything = function() { - return new j$.Anything(); - }; - - j$.objectContaining = function(sample) { - return new j$.ObjectContaining(sample); - }; - - j$.stringMatching = function(expected) { - return new j$.StringMatching(expected); - }; - - j$.arrayContaining = function(sample) { - return new j$.ArrayContaining(sample); - }; - - j$.createSpy = function(name, originalFn) { - - var spyStrategy = new j$.SpyStrategy({ - name: name, - fn: originalFn, - getSpy: function() { return spy; } - }), - callTracker = new j$.CallTracker(), - spy = function() { - var callData = { - object: this, - args: Array.prototype.slice.apply(arguments) - }; - - callTracker.track(callData); - var returnValue = spyStrategy.exec.apply(this, arguments); - callData.returnValue = returnValue; - - return returnValue; - }; - - for (var prop in originalFn) { - if (prop === 'and' || prop === 'calls') { - throw new Error('Jasmine spies would overwrite the \'and\' and \'calls\' properties on the object being spied upon'); - } - - spy[prop] = originalFn[prop]; - } - - spy.and = spyStrategy; - spy.calls = callTracker; - - return spy; - }; - - j$.isSpy = function(putativeSpy) { - if (!putativeSpy) { - return false; - } - return putativeSpy.and instanceof j$.SpyStrategy && - putativeSpy.calls instanceof j$.CallTracker; - }; - - j$.createSpyObj = function(baseName, methodNames) { - if (j$.isArray_(baseName) && j$.util.isUndefined(methodNames)) { - methodNames = baseName; - baseName = 'unknown'; - } - - if (!j$.isArray_(methodNames) || methodNames.length === 0) { - throw 'createSpyObj requires a non-empty array of method names to create spies for'; - } - var obj = {}; - for (var i = 0; i < methodNames.length; i++) { - obj[methodNames[i]] = j$.createSpy(baseName + '.' + methodNames[i]); - } - return obj; - }; -}; - -getJasmineRequireObj().util = function() { - - var util = {}; - - util.inherit = function(childClass, parentClass) { - var Subclass = function() { - }; - Subclass.prototype = parentClass.prototype; - childClass.prototype = new Subclass(); - }; - - util.htmlEscape = function(str) { - if (!str) { - return str; - } - return str.replace(/&/g, '&') - .replace(//g, '>'); - }; - - util.argsToArray = function(args) { - var arrayOfArgs = []; - for (var i = 0; i < args.length; i++) { - arrayOfArgs.push(args[i]); - } - return arrayOfArgs; - }; - - util.isUndefined = function(obj) { - return obj === void 0; - }; - - util.arrayContains = function(array, search) { - var i = array.length; - while (i--) { - if (array[i] === search) { - return true; - } - } - return false; - }; - - util.clone = function(obj) { - if (Object.prototype.toString.apply(obj) === '[object Array]') { - return obj.slice(); - } - - var cloned = {}; - for (var prop in obj) { - if (obj.hasOwnProperty(prop)) { - cloned[prop] = obj[prop]; - } - } - - return cloned; - }; - - return util; -}; - -getJasmineRequireObj().Spec = function(j$) { - function Spec(attrs) { - this.expectationFactory = attrs.expectationFactory; - this.resultCallback = attrs.resultCallback || function() {}; - this.id = attrs.id; - this.description = attrs.description || ''; - this.queueableFn = attrs.queueableFn; - this.beforeAndAfterFns = attrs.beforeAndAfterFns || function() { return {befores: [], afters: []}; }; - this.userContext = attrs.userContext || function() { return {}; }; - this.onStart = attrs.onStart || function() {}; - this.getSpecName = attrs.getSpecName || function() { return ''; }; - this.expectationResultFactory = attrs.expectationResultFactory || function() { }; - this.queueRunnerFactory = attrs.queueRunnerFactory || function() {}; - this.catchingExceptions = attrs.catchingExceptions || function() { return true; }; - - if (!this.queueableFn.fn) { - this.pend(); - } - - this.result = { - id: this.id, - description: this.description, - fullName: this.getFullName(), - failedExpectations: [], - passedExpectations: [], - pendingReason: '' - }; - } - - Spec.prototype.addExpectationResult = function(passed, data) { - var expectationResult = this.expectationResultFactory(data); - if (passed) { - this.result.passedExpectations.push(expectationResult); - } else { - this.result.failedExpectations.push(expectationResult); - } - }; - - Spec.prototype.expect = function(actual) { - return this.expectationFactory(actual, this); - }; - - Spec.prototype.execute = function(onComplete) { - var self = this; - - this.onStart(this); - - if (this.markedPending || this.disabled) { - complete(); - return; - } - - var fns = this.beforeAndAfterFns(); - var allFns = fns.befores.concat(this.queueableFn).concat(fns.afters); - - this.queueRunnerFactory({ - queueableFns: allFns, - onException: function() { self.onException.apply(self, arguments); }, - onComplete: complete, - userContext: this.userContext() - }); - - function complete() { - self.result.status = self.status(); - self.resultCallback(self.result); - - if (onComplete) { - onComplete(); - } - } - }; - - Spec.prototype.onException = function onException(e) { - if (Spec.isPendingSpecException(e)) { - this.pend(extractCustomPendingMessage(e)); - return; - } - - this.addExpectationResult(false, { - matcherName: '', - passed: false, - expected: '', - actual: '', - error: e - }); - }; - - Spec.prototype.disable = function() { - this.disabled = true; - }; - - Spec.prototype.pend = function(message) { - this.markedPending = true; - if (message) { - this.result.pendingReason = message; - } - }; - - Spec.prototype.status = function() { - if (this.disabled) { - return 'disabled'; - } - - if (this.markedPending) { - return 'pending'; - } - - if (this.result.failedExpectations.length > 0) { - return 'failed'; - } else { - return 'passed'; - } - }; - - Spec.prototype.isExecutable = function() { - return !this.disabled && !this.markedPending; - }; - - Spec.prototype.getFullName = function() { - return this.getSpecName(this); - }; - - var extractCustomPendingMessage = function(e) { - var fullMessage = e.toString(), - boilerplateStart = fullMessage.indexOf(Spec.pendingSpecExceptionMessage), - boilerplateEnd = boilerplateStart + Spec.pendingSpecExceptionMessage.length; - - return fullMessage.substr(boilerplateEnd); - }; - - Spec.pendingSpecExceptionMessage = '=> marked Pending'; - - Spec.isPendingSpecException = function(e) { - return !!(e && e.toString && e.toString().indexOf(Spec.pendingSpecExceptionMessage) !== -1); - }; - - return Spec; -}; - -if (typeof window == void 0 && typeof exports == 'object') { - exports.Spec = jasmineRequire.Spec; -} - -getJasmineRequireObj().Env = function(j$) { - function Env(options) { - options = options || {}; - - var self = this; - var global = options.global || j$.getGlobal(); - - var totalSpecsDefined = 0; - - var catchExceptions = true; - - var realSetTimeout = j$.getGlobal().setTimeout; - var realClearTimeout = j$.getGlobal().clearTimeout; - this.clock = new j$.Clock(global, new j$.DelayedFunctionScheduler(), new j$.MockDate(global)); - - var runnableLookupTable = {}; - var runnableResources = {}; - - var currentSpec = null; - var currentlyExecutingSuites = []; - var currentDeclarationSuite = null; - - var currentSuite = function() { - return currentlyExecutingSuites[currentlyExecutingSuites.length - 1]; - }; - - var currentRunnable = function() { - return currentSpec || currentSuite(); - }; - - var reporter = new j$.ReportDispatcher([ - 'jasmineStarted', - 'jasmineDone', - 'suiteStarted', - 'suiteDone', - 'specStarted', - 'specDone' - ]); - - this.specFilter = function() { - return true; - }; - - this.addCustomEqualityTester = function(tester) { - if(!currentRunnable()) { - throw new Error('Custom Equalities must be added in a before function or a spec'); - } - runnableResources[currentRunnable().id].customEqualityTesters.push(tester); - }; - - this.addMatchers = function(matchersToAdd) { - if(!currentRunnable()) { - throw new Error('Matchers must be added in a before function or a spec'); - } - var customMatchers = runnableResources[currentRunnable().id].customMatchers; - for (var matcherName in matchersToAdd) { - customMatchers[matcherName] = matchersToAdd[matcherName]; - } - }; - - j$.Expectation.addCoreMatchers(j$.matchers); - - var nextSpecId = 0; - var getNextSpecId = function() { - return 'spec' + nextSpecId++; - }; - - var nextSuiteId = 0; - var getNextSuiteId = function() { - return 'suite' + nextSuiteId++; - }; - - var expectationFactory = function(actual, spec) { - return j$.Expectation.Factory({ - util: j$.matchersUtil, - customEqualityTesters: runnableResources[spec.id].customEqualityTesters, - customMatchers: runnableResources[spec.id].customMatchers, - actual: actual, - addExpectationResult: addExpectationResult - }); - - function addExpectationResult(passed, result) { - return spec.addExpectationResult(passed, result); - } - }; - - var defaultResourcesForRunnable = function(id, parentRunnableId) { - var resources = {spies: [], customEqualityTesters: [], customMatchers: {}}; - - if(runnableResources[parentRunnableId]){ - resources.customEqualityTesters = j$.util.clone(runnableResources[parentRunnableId].customEqualityTesters); - resources.customMatchers = j$.util.clone(runnableResources[parentRunnableId].customMatchers); - } - - runnableResources[id] = resources; - }; - - var clearResourcesForRunnable = function(id) { - spyRegistry.clearSpies(); - delete runnableResources[id]; - }; - - var beforeAndAfterFns = function(suite, runnablesExplictlySet) { - return function() { - var befores = [], - afters = [], - beforeAlls = [], - afterAlls = []; - - while(suite) { - befores = befores.concat(suite.beforeFns); - afters = afters.concat(suite.afterFns); - - if (runnablesExplictlySet()) { - beforeAlls = beforeAlls.concat(suite.beforeAllFns); - afterAlls = afterAlls.concat(suite.afterAllFns); - } - - suite = suite.parentSuite; - } - return { - befores: beforeAlls.reverse().concat(befores.reverse()), - afters: afters.concat(afterAlls) - }; - }; - }; - - var getSpecName = function(spec, suite) { - return suite.getFullName() + ' ' + spec.description; - }; - - // TODO: we may just be able to pass in the fn instead of wrapping here - var buildExpectationResult = j$.buildExpectationResult, - exceptionFormatter = new j$.ExceptionFormatter(), - expectationResultFactory = function(attrs) { - attrs.messageFormatter = exceptionFormatter.message; - attrs.stackFormatter = exceptionFormatter.stack; - - return buildExpectationResult(attrs); - }; - - // TODO: fix this naming, and here's where the value comes in - this.catchExceptions = function(value) { - catchExceptions = !!value; - return catchExceptions; - }; - - this.catchingExceptions = function() { - return catchExceptions; - }; - - var maximumSpecCallbackDepth = 20; - var currentSpecCallbackDepth = 0; - - function clearStack(fn) { - currentSpecCallbackDepth++; - if (currentSpecCallbackDepth >= maximumSpecCallbackDepth) { - currentSpecCallbackDepth = 0; - realSetTimeout(fn, 0); - } else { - fn(); - } - } - - var catchException = function(e) { - return j$.Spec.isPendingSpecException(e) || catchExceptions; - }; - - var queueRunnerFactory = function(options) { - options.catchException = catchException; - options.clearStack = options.clearStack || clearStack; - options.timer = {setTimeout: realSetTimeout, clearTimeout: realClearTimeout}; - options.fail = self.fail; - - new j$.QueueRunner(options).execute(); - }; - - var topSuite = new j$.Suite({ - env: this, - id: getNextSuiteId(), - description: 'Jasmine__TopLevel__Suite', - queueRunner: queueRunnerFactory - }); - runnableLookupTable[topSuite.id] = topSuite; - defaultResourcesForRunnable(topSuite.id); - currentDeclarationSuite = topSuite; - - this.topSuite = function() { - return topSuite; - }; - - this.execute = function(runnablesToRun) { - if(runnablesToRun) { - runnablesExplictlySet = true; - } else if (focusedRunnables.length) { - runnablesExplictlySet = true; - runnablesToRun = focusedRunnables; - } else { - runnablesToRun = [topSuite.id]; - } - - var allFns = []; - for(var i = 0; i < runnablesToRun.length; i++) { - var runnable = runnableLookupTable[runnablesToRun[i]]; - allFns.push((function(runnable) { return { fn: function(done) { runnable.execute(done); } }; })(runnable)); - } - - reporter.jasmineStarted({ - totalSpecsDefined: totalSpecsDefined - }); - - queueRunnerFactory({queueableFns: allFns, onComplete: reporter.jasmineDone}); - }; - - this.addReporter = function(reporterToAdd) { - reporter.addReporter(reporterToAdd); - }; - - var spyRegistry = new j$.SpyRegistry({currentSpies: function() { - if(!currentRunnable()) { - throw new Error('Spies must be created in a before function or a spec'); - } - return runnableResources[currentRunnable().id].spies; - }}); - - this.spyOn = function() { - return spyRegistry.spyOn.apply(spyRegistry, arguments); - }; - - var suiteFactory = function(description) { - var suite = new j$.Suite({ - env: self, - id: getNextSuiteId(), - description: description, - parentSuite: currentDeclarationSuite, - queueRunner: queueRunnerFactory, - onStart: suiteStarted, - expectationFactory: expectationFactory, - expectationResultFactory: expectationResultFactory, - runnablesExplictlySetGetter: runnablesExplictlySetGetter, - resultCallback: function(attrs) { - if (!suite.disabled) { - clearResourcesForRunnable(suite.id); - } - currentlyExecutingSuites.pop(); - reporter.suiteDone(attrs); - } - }); - - runnableLookupTable[suite.id] = suite; - return suite; - - function suiteStarted(suite) { - currentlyExecutingSuites.push(suite); - defaultResourcesForRunnable(suite.id, suite.parentSuite.id); - reporter.suiteStarted(suite.result); - } - }; - - this.describe = function(description, specDefinitions) { - var suite = suiteFactory(description); - addSpecsToSuite(suite, specDefinitions); - return suite; - }; - - this.xdescribe = function(description, specDefinitions) { - var suite = this.describe(description, specDefinitions); - suite.disable(); - return suite; - }; - - var focusedRunnables = []; - - this.fdescribe = function(description, specDefinitions) { - var suite = suiteFactory(description); - suite.isFocused = true; - - focusedRunnables.push(suite.id); - unfocusAncestor(); - addSpecsToSuite(suite, specDefinitions); - - return suite; - }; - - function addSpecsToSuite(suite, specDefinitions) { - var parentSuite = currentDeclarationSuite; - parentSuite.addChild(suite); - currentDeclarationSuite = suite; - - var declarationError = null; - try { - specDefinitions.call(suite); - } catch (e) { - declarationError = e; - } - - if (declarationError) { - self.it('encountered a declaration exception', function() { - throw declarationError; - }); - } - - currentDeclarationSuite = parentSuite; - } - - function findFocusedAncestor(suite) { - while (suite) { - if (suite.isFocused) { - return suite.id; - } - suite = suite.parentSuite; - } - - return null; - } - - function unfocusAncestor() { - var focusedAncestor = findFocusedAncestor(currentDeclarationSuite); - if (focusedAncestor) { - for (var i = 0; i < focusedRunnables.length; i++) { - if (focusedRunnables[i] === focusedAncestor) { - focusedRunnables.splice(i, 1); - break; - } - } - } - } - - var runnablesExplictlySet = false; - - var runnablesExplictlySetGetter = function(){ - return runnablesExplictlySet; - }; - - var specFactory = function(description, fn, suite, timeout) { - totalSpecsDefined++; - var spec = new j$.Spec({ - id: getNextSpecId(), - beforeAndAfterFns: beforeAndAfterFns(suite, runnablesExplictlySetGetter), - expectationFactory: expectationFactory, - resultCallback: specResultCallback, - getSpecName: function(spec) { - return getSpecName(spec, suite); - }, - onStart: specStarted, - description: description, - expectationResultFactory: expectationResultFactory, - queueRunnerFactory: queueRunnerFactory, - userContext: function() { return suite.clonedSharedUserContext(); }, - queueableFn: { - fn: fn, - timeout: function() { return timeout || j$.DEFAULT_TIMEOUT_INTERVAL; } - } - }); - - runnableLookupTable[spec.id] = spec; - - if (!self.specFilter(spec)) { - spec.disable(); - } - - return spec; - - function specResultCallback(result) { - clearResourcesForRunnable(spec.id); - currentSpec = null; - reporter.specDone(result); - } - - function specStarted(spec) { - currentSpec = spec; - defaultResourcesForRunnable(spec.id, suite.id); - reporter.specStarted(spec.result); - } - }; - - this.it = function(description, fn, timeout) { - var spec = specFactory(description, fn, currentDeclarationSuite, timeout); - currentDeclarationSuite.addChild(spec); - return spec; - }; - - this.xit = function() { - var spec = this.it.apply(this, arguments); - spec.pend(); - return spec; - }; - - this.fit = function(){ - var spec = this.it.apply(this, arguments); - - focusedRunnables.push(spec.id); - unfocusAncestor(); - return spec; - }; - - this.expect = function(actual) { - if (!currentRunnable()) { - throw new Error('\'expect\' was used when there was no current spec, this could be because an asynchronous test timed out'); - } - - return currentRunnable().expect(actual); - }; - - this.beforeEach = function(beforeEachFunction, timeout) { - currentDeclarationSuite.beforeEach({ - fn: beforeEachFunction, - timeout: function() { return timeout || j$.DEFAULT_TIMEOUT_INTERVAL; } - }); - }; - - this.beforeAll = function(beforeAllFunction, timeout) { - currentDeclarationSuite.beforeAll({ - fn: beforeAllFunction, - timeout: function() { return timeout || j$.DEFAULT_TIMEOUT_INTERVAL; } - }); - }; - - this.afterEach = function(afterEachFunction, timeout) { - currentDeclarationSuite.afterEach({ - fn: afterEachFunction, - timeout: function() { return timeout || j$.DEFAULT_TIMEOUT_INTERVAL; } - }); - }; - - this.afterAll = function(afterAllFunction, timeout) { - currentDeclarationSuite.afterAll({ - fn: afterAllFunction, - timeout: function() { return timeout || j$.DEFAULT_TIMEOUT_INTERVAL; } - }); - }; - - this.pending = function(message) { - var fullMessage = j$.Spec.pendingSpecExceptionMessage; - if(message) { - fullMessage += message; - } - throw fullMessage; - }; - - this.fail = function(error) { - var message = 'Failed'; - if (error) { - message += ': '; - message += error.message || error; - } - - currentRunnable().addExpectationResult(false, { - matcherName: '', - passed: false, - expected: '', - actual: '', - message: message, - error: error && error.message ? error : null - }); - }; - } - - return Env; -}; - -getJasmineRequireObj().JsApiReporter = function() { - - var noopTimer = { - start: function(){}, - elapsed: function(){ return 0; } - }; - - function JsApiReporter(options) { - var timer = options.timer || noopTimer, - status = 'loaded'; - - this.started = false; - this.finished = false; - - this.jasmineStarted = function() { - this.started = true; - status = 'started'; - timer.start(); - }; - - var executionTime; - - this.jasmineDone = function() { - this.finished = true; - executionTime = timer.elapsed(); - status = 'done'; - }; - - this.status = function() { - return status; - }; - - var suites = [], - suites_hash = {}; - - this.suiteStarted = function(result) { - suites_hash[result.id] = result; - }; - - this.suiteDone = function(result) { - storeSuite(result); - }; - - this.suiteResults = function(index, length) { - return suites.slice(index, index + length); - }; - - function storeSuite(result) { - suites.push(result); - suites_hash[result.id] = result; - } - - this.suites = function() { - return suites_hash; - }; - - var specs = []; - - this.specDone = function(result) { - specs.push(result); - }; - - this.specResults = function(index, length) { - return specs.slice(index, index + length); - }; - - this.specs = function() { - return specs; - }; - - this.executionTime = function() { - return executionTime; - }; - - } - - return JsApiReporter; -}; - -getJasmineRequireObj().CallTracker = function() { - - function CallTracker() { - var calls = []; - - this.track = function(context) { - calls.push(context); - }; - - this.any = function() { - return !!calls.length; - }; - - this.count = function() { - return calls.length; - }; - - this.argsFor = function(index) { - var call = calls[index]; - return call ? call.args : []; - }; - - this.all = function() { - return calls; - }; - - this.allArgs = function() { - var callArgs = []; - for(var i = 0; i < calls.length; i++){ - callArgs.push(calls[i].args); - } - - return callArgs; - }; - - this.first = function() { - return calls[0]; - }; - - this.mostRecent = function() { - return calls[calls.length - 1]; - }; - - this.reset = function() { - calls = []; - }; - } - - return CallTracker; -}; - -getJasmineRequireObj().Clock = function() { - function Clock(global, delayedFunctionScheduler, mockDate) { - var self = this, - realTimingFunctions = { - setTimeout: global.setTimeout, - clearTimeout: global.clearTimeout, - setInterval: global.setInterval, - clearInterval: global.clearInterval - }, - fakeTimingFunctions = { - setTimeout: setTimeout, - clearTimeout: clearTimeout, - setInterval: setInterval, - clearInterval: clearInterval - }, - installed = false, - timer; - - - self.install = function() { - replace(global, fakeTimingFunctions); - timer = fakeTimingFunctions; - installed = true; - - return self; - }; - - self.uninstall = function() { - delayedFunctionScheduler.reset(); - mockDate.uninstall(); - replace(global, realTimingFunctions); - - timer = realTimingFunctions; - installed = false; - }; - - self.mockDate = function(initialDate) { - mockDate.install(initialDate); - }; - - self.setTimeout = function(fn, delay, params) { - if (legacyIE()) { - if (arguments.length > 2) { - throw new Error('IE < 9 cannot support extra params to setTimeout without a polyfill'); - } - return timer.setTimeout(fn, delay); - } - return Function.prototype.apply.apply(timer.setTimeout, [global, arguments]); - }; - - self.setInterval = function(fn, delay, params) { - if (legacyIE()) { - if (arguments.length > 2) { - throw new Error('IE < 9 cannot support extra params to setInterval without a polyfill'); - } - return timer.setInterval(fn, delay); - } - return Function.prototype.apply.apply(timer.setInterval, [global, arguments]); - }; - - self.clearTimeout = function(id) { - return Function.prototype.call.apply(timer.clearTimeout, [global, id]); - }; - - self.clearInterval = function(id) { - return Function.prototype.call.apply(timer.clearInterval, [global, id]); - }; - - self.tick = function(millis) { - if (installed) { - mockDate.tick(millis); - delayedFunctionScheduler.tick(millis); - } else { - throw new Error('Mock clock is not installed, use jasmine.clock().install()'); - } - }; - - return self; - - function legacyIE() { - //if these methods are polyfilled, apply will be present - return !(realTimingFunctions.setTimeout || realTimingFunctions.setInterval).apply; - } - - function replace(dest, source) { - for (var prop in source) { - dest[prop] = source[prop]; - } - } - - function setTimeout(fn, delay) { - return delayedFunctionScheduler.scheduleFunction(fn, delay, argSlice(arguments, 2)); - } - - function clearTimeout(id) { - return delayedFunctionScheduler.removeFunctionWithId(id); - } - - function setInterval(fn, interval) { - return delayedFunctionScheduler.scheduleFunction(fn, interval, argSlice(arguments, 2), true); - } - - function clearInterval(id) { - return delayedFunctionScheduler.removeFunctionWithId(id); - } - - function argSlice(argsObj, n) { - return Array.prototype.slice.call(argsObj, n); - } - } - - return Clock; -}; - -getJasmineRequireObj().DelayedFunctionScheduler = function() { - function DelayedFunctionScheduler() { - var self = this; - var scheduledLookup = []; - var scheduledFunctions = {}; - var currentTime = 0; - var delayedFnCount = 0; - - self.tick = function(millis) { - millis = millis || 0; - var endTime = currentTime + millis; - - runScheduledFunctions(endTime); - currentTime = endTime; - }; - - self.scheduleFunction = function(funcToCall, millis, params, recurring, timeoutKey, runAtMillis) { - var f; - if (typeof(funcToCall) === 'string') { - /* jshint evil: true */ - f = function() { return eval(funcToCall); }; - /* jshint evil: false */ - } else { - f = funcToCall; - } - - millis = millis || 0; - timeoutKey = timeoutKey || ++delayedFnCount; - runAtMillis = runAtMillis || (currentTime + millis); - - var funcToSchedule = { - runAtMillis: runAtMillis, - funcToCall: f, - recurring: recurring, - params: params, - timeoutKey: timeoutKey, - millis: millis - }; - - if (runAtMillis in scheduledFunctions) { - scheduledFunctions[runAtMillis].push(funcToSchedule); - } else { - scheduledFunctions[runAtMillis] = [funcToSchedule]; - scheduledLookup.push(runAtMillis); - scheduledLookup.sort(function (a, b) { - return a - b; - }); - } - - return timeoutKey; - }; - - self.removeFunctionWithId = function(timeoutKey) { - for (var runAtMillis in scheduledFunctions) { - var funcs = scheduledFunctions[runAtMillis]; - var i = indexOfFirstToPass(funcs, function (func) { - return func.timeoutKey === timeoutKey; - }); - - if (i > -1) { - if (funcs.length === 1) { - delete scheduledFunctions[runAtMillis]; - deleteFromLookup(runAtMillis); - } else { - funcs.splice(i, 1); - } - - // intervals get rescheduled when executed, so there's never more - // than a single scheduled function with a given timeoutKey - break; - } - } - }; - - self.reset = function() { - currentTime = 0; - scheduledLookup = []; - scheduledFunctions = {}; - delayedFnCount = 0; - }; - - return self; - - function indexOfFirstToPass(array, testFn) { - var index = -1; - - for (var i = 0; i < array.length; ++i) { - if (testFn(array[i])) { - index = i; - break; - } - } - - return index; - } - - function deleteFromLookup(key) { - var value = Number(key); - var i = indexOfFirstToPass(scheduledLookup, function (millis) { - return millis === value; - }); - - if (i > -1) { - scheduledLookup.splice(i, 1); - } - } - - function reschedule(scheduledFn) { - self.scheduleFunction(scheduledFn.funcToCall, - scheduledFn.millis, - scheduledFn.params, - true, - scheduledFn.timeoutKey, - scheduledFn.runAtMillis + scheduledFn.millis); - } - - function forEachFunction(funcsToRun, callback) { - for (var i = 0; i < funcsToRun.length; ++i) { - callback(funcsToRun[i]); - } - } - - function runScheduledFunctions(endTime) { - if (scheduledLookup.length === 0 || scheduledLookup[0] > endTime) { - return; - } - - do { - currentTime = scheduledLookup.shift(); - - var funcsToRun = scheduledFunctions[currentTime]; - delete scheduledFunctions[currentTime]; - - forEachFunction(funcsToRun, function(funcToRun) { - if (funcToRun.recurring) { - reschedule(funcToRun); - } - }); - - forEachFunction(funcsToRun, function(funcToRun) { - funcToRun.funcToCall.apply(null, funcToRun.params || []); - }); - } while (scheduledLookup.length > 0 && - // checking first if we're out of time prevents setTimeout(0) - // scheduled in a funcToRun from forcing an extra iteration - currentTime !== endTime && - scheduledLookup[0] <= endTime); - } - } - - return DelayedFunctionScheduler; -}; - -getJasmineRequireObj().ExceptionFormatter = function() { - function ExceptionFormatter() { - this.message = function(error) { - var message = ''; - - if (error.name && error.message) { - message += error.name + ': ' + error.message; - } else { - message += error.toString() + ' thrown'; - } - - if (error.fileName || error.sourceURL) { - message += ' in ' + (error.fileName || error.sourceURL); - } - - if (error.line || error.lineNumber) { - message += ' (line ' + (error.line || error.lineNumber) + ')'; - } - - return message; - }; - - this.stack = function(error) { - return error ? error.stack : null; - }; - } - - return ExceptionFormatter; -}; - -getJasmineRequireObj().Expectation = function() { - - function Expectation(options) { - this.util = options.util || { buildFailureMessage: function() {} }; - this.customEqualityTesters = options.customEqualityTesters || []; - this.actual = options.actual; - this.addExpectationResult = options.addExpectationResult || function(){}; - this.isNot = options.isNot; - - var customMatchers = options.customMatchers || {}; - for (var matcherName in customMatchers) { - this[matcherName] = Expectation.prototype.wrapCompare(matcherName, customMatchers[matcherName]); - } - } - - Expectation.prototype.wrapCompare = function(name, matcherFactory) { - return function() { - var args = Array.prototype.slice.call(arguments, 0), - expected = args.slice(0), - message = ''; - - args.unshift(this.actual); - - var matcher = matcherFactory(this.util, this.customEqualityTesters), - matcherCompare = matcher.compare; - - function defaultNegativeCompare() { - var result = matcher.compare.apply(null, args); - result.pass = !result.pass; - return result; - } - - if (this.isNot) { - matcherCompare = matcher.negativeCompare || defaultNegativeCompare; - } - - var result = matcherCompare.apply(null, args); - - if (!result.pass) { - if (!result.message) { - args.unshift(this.isNot); - args.unshift(name); - message = this.util.buildFailureMessage.apply(null, args); - } else { - if (Object.prototype.toString.apply(result.message) === '[object Function]') { - message = result.message(); - } else { - message = result.message; - } - } - } - - if (expected.length == 1) { - expected = expected[0]; - } - - // TODO: how many of these params are needed? - this.addExpectationResult( - result.pass, - { - matcherName: name, - passed: result.pass, - message: message, - actual: this.actual, - expected: expected // TODO: this may need to be arrayified/sliced - } - ); - }; - }; - - Expectation.addCoreMatchers = function(matchers) { - var prototype = Expectation.prototype; - for (var matcherName in matchers) { - var matcher = matchers[matcherName]; - prototype[matcherName] = prototype.wrapCompare(matcherName, matcher); - } - }; - - Expectation.Factory = function(options) { - options = options || {}; - - var expect = new Expectation(options); - - // TODO: this would be nice as its own Object - NegativeExpectation - // TODO: copy instead of mutate options - options.isNot = true; - expect.not = new Expectation(options); - - return expect; - }; - - return Expectation; -}; - -//TODO: expectation result may make more sense as a presentation of an expectation. -getJasmineRequireObj().buildExpectationResult = function() { - function buildExpectationResult(options) { - var messageFormatter = options.messageFormatter || function() {}, - stackFormatter = options.stackFormatter || function() {}; - - var result = { - matcherName: options.matcherName, - message: message(), - stack: stack(), - passed: options.passed - }; - - if(!result.passed) { - result.expected = options.expected; - result.actual = options.actual; - } - - return result; - - function message() { - if (options.passed) { - return 'Passed.'; - } else if (options.message) { - return options.message; - } else if (options.error) { - return messageFormatter(options.error); - } - return ''; - } - - function stack() { - if (options.passed) { - return ''; - } - - var error = options.error; - if (!error) { - try { - throw new Error(message()); - } catch (e) { - error = e; - } - } - return stackFormatter(error); - } - } - - return buildExpectationResult; -}; - -getJasmineRequireObj().MockDate = function() { - function MockDate(global) { - var self = this; - var currentTime = 0; - - if (!global || !global.Date) { - self.install = function() {}; - self.tick = function() {}; - self.uninstall = function() {}; - return self; - } - - var GlobalDate = global.Date; - - self.install = function(mockDate) { - if (mockDate instanceof GlobalDate) { - currentTime = mockDate.getTime(); - } else { - currentTime = new GlobalDate().getTime(); - } - - global.Date = FakeDate; - }; - - self.tick = function(millis) { - millis = millis || 0; - currentTime = currentTime + millis; - }; - - self.uninstall = function() { - currentTime = 0; - global.Date = GlobalDate; - }; - - createDateProperties(); - - return self; - - function FakeDate() { - switch(arguments.length) { - case 0: - return new GlobalDate(currentTime); - case 1: - return new GlobalDate(arguments[0]); - case 2: - return new GlobalDate(arguments[0], arguments[1]); - case 3: - return new GlobalDate(arguments[0], arguments[1], arguments[2]); - case 4: - return new GlobalDate(arguments[0], arguments[1], arguments[2], arguments[3]); - case 5: - return new GlobalDate(arguments[0], arguments[1], arguments[2], arguments[3], - arguments[4]); - case 6: - return new GlobalDate(arguments[0], arguments[1], arguments[2], arguments[3], - arguments[4], arguments[5]); - default: - return new GlobalDate(arguments[0], arguments[1], arguments[2], arguments[3], - arguments[4], arguments[5], arguments[6]); - } - } - - function createDateProperties() { - FakeDate.prototype = GlobalDate.prototype; - - FakeDate.now = function() { - if (GlobalDate.now) { - return currentTime; - } else { - throw new Error('Browser does not support Date.now()'); - } - }; - - FakeDate.toSource = GlobalDate.toSource; - FakeDate.toString = GlobalDate.toString; - FakeDate.parse = GlobalDate.parse; - FakeDate.UTC = GlobalDate.UTC; - } - } - - return MockDate; -}; - -getJasmineRequireObj().pp = function(j$) { - - function PrettyPrinter() { - this.ppNestLevel_ = 0; - this.seen = []; - } - - PrettyPrinter.prototype.format = function(value) { - this.ppNestLevel_++; - try { - if (j$.util.isUndefined(value)) { - this.emitScalar('undefined'); - } else if (value === null) { - this.emitScalar('null'); - } else if (value === 0 && 1/value === -Infinity) { - this.emitScalar('-0'); - } else if (value === j$.getGlobal()) { - this.emitScalar(''); - } else if (value.jasmineToString) { - this.emitScalar(value.jasmineToString()); - } else if (typeof value === 'string') { - this.emitString(value); - } else if (j$.isSpy(value)) { - this.emitScalar('spy on ' + value.and.identity()); - } else if (value instanceof RegExp) { - this.emitScalar(value.toString()); - } else if (typeof value === 'function') { - this.emitScalar('Function'); - } else if (typeof value.nodeType === 'number') { - this.emitScalar('HTMLNode'); - } else if (value instanceof Date) { - this.emitScalar('Date(' + value + ')'); - } else if (j$.util.arrayContains(this.seen, value)) { - this.emitScalar(''); - } else if (j$.isArray_(value) || j$.isA_('Object', value)) { - this.seen.push(value); - if (j$.isArray_(value)) { - this.emitArray(value); - } else { - this.emitObject(value); - } - this.seen.pop(); - } else { - this.emitScalar(value.toString()); - } - } finally { - this.ppNestLevel_--; - } - }; - - PrettyPrinter.prototype.iterateObject = function(obj, fn) { - for (var property in obj) { - if (!Object.prototype.hasOwnProperty.call(obj, property)) { continue; } - fn(property, obj.__lookupGetter__ ? (!j$.util.isUndefined(obj.__lookupGetter__(property)) && - obj.__lookupGetter__(property) !== null) : false); - } - }; - - PrettyPrinter.prototype.emitArray = j$.unimplementedMethod_; - PrettyPrinter.prototype.emitObject = j$.unimplementedMethod_; - PrettyPrinter.prototype.emitScalar = j$.unimplementedMethod_; - PrettyPrinter.prototype.emitString = j$.unimplementedMethod_; - - function StringPrettyPrinter() { - PrettyPrinter.call(this); - - this.string = ''; - } - - j$.util.inherit(StringPrettyPrinter, PrettyPrinter); - - StringPrettyPrinter.prototype.emitScalar = function(value) { - this.append(value); - }; - - StringPrettyPrinter.prototype.emitString = function(value) { - this.append('\'' + value + '\''); - }; - - StringPrettyPrinter.prototype.emitArray = function(array) { - if (this.ppNestLevel_ > j$.MAX_PRETTY_PRINT_DEPTH) { - this.append('Array'); - return; - } - var length = Math.min(array.length, j$.MAX_PRETTY_PRINT_ARRAY_LENGTH); - this.append('[ '); - for (var i = 0; i < length; i++) { - if (i > 0) { - this.append(', '); - } - this.format(array[i]); - } - if(array.length > length){ - this.append(', ...'); - } - this.append(' ]'); - }; - - StringPrettyPrinter.prototype.emitObject = function(obj) { - var constructorName = obj.constructor ? j$.fnNameFor(obj.constructor) : 'null'; - this.append(constructorName); - - if (this.ppNestLevel_ > j$.MAX_PRETTY_PRINT_DEPTH) { - return; - } - - var self = this; - this.append('({ '); - var first = true; - - this.iterateObject(obj, function(property, isGetter) { - if (first) { - first = false; - } else { - self.append(', '); - } - - self.append(property); - self.append(': '); - if (isGetter) { - self.append(''); - } else { - self.format(obj[property]); - } - }); - - this.append(' })'); - }; - - StringPrettyPrinter.prototype.append = function(value) { - this.string += value; - }; - - return function(value) { - var stringPrettyPrinter = new StringPrettyPrinter(); - stringPrettyPrinter.format(value); - return stringPrettyPrinter.string; - }; -}; - -getJasmineRequireObj().QueueRunner = function(j$) { - - function once(fn) { - var called = false; - return function() { - if (!called) { - called = true; - fn(); - } - }; - } - - function QueueRunner(attrs) { - this.queueableFns = attrs.queueableFns || []; - this.onComplete = attrs.onComplete || function() {}; - this.clearStack = attrs.clearStack || function(fn) {fn();}; - this.onException = attrs.onException || function() {}; - this.catchException = attrs.catchException || function() { return true; }; - this.userContext = attrs.userContext || {}; - this.timer = attrs.timeout || {setTimeout: setTimeout, clearTimeout: clearTimeout}; - this.fail = attrs.fail || function() {}; - } - - QueueRunner.prototype.execute = function() { - this.run(this.queueableFns, 0); - }; - - QueueRunner.prototype.run = function(queueableFns, recursiveIndex) { - var length = queueableFns.length, - self = this, - iterativeIndex; - - - for(iterativeIndex = recursiveIndex; iterativeIndex < length; iterativeIndex++) { - var queueableFn = queueableFns[iterativeIndex]; - if (queueableFn.fn.length > 0) { - attemptAsync(queueableFn); - return; - } else { - attemptSync(queueableFn); - } - } - - var runnerDone = iterativeIndex >= length; - - if (runnerDone) { - this.clearStack(this.onComplete); - } - - function attemptSync(queueableFn) { - try { - queueableFn.fn.call(self.userContext); - } catch (e) { - handleException(e, queueableFn); - } - } - - function attemptAsync(queueableFn) { - var clearTimeout = function () { - Function.prototype.apply.apply(self.timer.clearTimeout, [j$.getGlobal(), [timeoutId]]); - }, - next = once(function () { - clearTimeout(timeoutId); - self.run(queueableFns, iterativeIndex + 1); - }), - timeoutId; - - next.fail = function() { - self.fail.apply(null, arguments); - next(); - }; - - if (queueableFn.timeout) { - timeoutId = Function.prototype.apply.apply(self.timer.setTimeout, [j$.getGlobal(), [function() { - var error = new Error('Timeout - Async callback was not invoked within timeout specified by jasmine.DEFAULT_TIMEOUT_INTERVAL.'); - onException(error, queueableFn); - next(); - }, queueableFn.timeout()]]); - } - - try { - queueableFn.fn.call(self.userContext, next); - } catch (e) { - handleException(e, queueableFn); - next(); - } - } - - function onException(e, queueableFn) { - self.onException(e); - } - - function handleException(e, queueableFn) { - onException(e, queueableFn); - if (!self.catchException(e)) { - //TODO: set a var when we catch an exception and - //use a finally block to close the loop in a nice way.. - throw e; - } - } - }; - - return QueueRunner; -}; - -getJasmineRequireObj().ReportDispatcher = function() { - function ReportDispatcher(methods) { - - var dispatchedMethods = methods || []; - - for (var i = 0; i < dispatchedMethods.length; i++) { - var method = dispatchedMethods[i]; - this[method] = (function(m) { - return function() { - dispatch(m, arguments); - }; - }(method)); - } - - var reporters = []; - - this.addReporter = function(reporter) { - reporters.push(reporter); - }; - - return this; - - function dispatch(method, args) { - for (var i = 0; i < reporters.length; i++) { - var reporter = reporters[i]; - if (reporter[method]) { - reporter[method].apply(reporter, args); - } - } - } - } - - return ReportDispatcher; -}; - - -getJasmineRequireObj().SpyRegistry = function(j$) { - - function SpyRegistry(options) { - options = options || {}; - var currentSpies = options.currentSpies || function() { return []; }; - - this.spyOn = function(obj, methodName) { - if (j$.util.isUndefined(obj)) { - throw new Error('spyOn could not find an object to spy upon for ' + methodName + '()'); - } - - if (j$.util.isUndefined(methodName)) { - throw new Error('No method name supplied'); - } - - if (j$.util.isUndefined(obj[methodName])) { - throw new Error(methodName + '() method does not exist'); - } - - if (obj[methodName] && j$.isSpy(obj[methodName])) { - //TODO?: should this return the current spy? Downside: may cause user confusion about spy state - throw new Error(methodName + ' has already been spied upon'); - } - - var spy = j$.createSpy(methodName, obj[methodName]); - - currentSpies().push({ - spy: spy, - baseObj: obj, - methodName: methodName, - originalValue: obj[methodName] - }); - - obj[methodName] = spy; - - return spy; - }; - - this.clearSpies = function() { - var spies = currentSpies(); - for (var i = 0; i < spies.length; i++) { - var spyEntry = spies[i]; - spyEntry.baseObj[spyEntry.methodName] = spyEntry.originalValue; - } - }; - } - - return SpyRegistry; -}; - -getJasmineRequireObj().SpyStrategy = function() { - - function SpyStrategy(options) { - options = options || {}; - - var identity = options.name || 'unknown', - originalFn = options.fn || function() {}, - getSpy = options.getSpy || function() {}, - plan = function() {}; - - this.identity = function() { - return identity; - }; - - this.exec = function() { - return plan.apply(this, arguments); - }; - - this.callThrough = function() { - plan = originalFn; - return getSpy(); - }; - - this.returnValue = function(value) { - plan = function() { - return value; - }; - return getSpy(); - }; - - this.returnValues = function() { - var values = Array.prototype.slice.call(arguments); - plan = function () { - return values.shift(); - }; - return getSpy(); - }; - - this.throwError = function(something) { - var error = (something instanceof Error) ? something : new Error(something); - plan = function() { - throw error; - }; - return getSpy(); - }; - - this.callFake = function(fn) { - plan = fn; - return getSpy(); - }; - - this.stub = function(fn) { - plan = function() {}; - return getSpy(); - }; - } - - return SpyStrategy; -}; - -getJasmineRequireObj().Suite = function() { - function Suite(attrs) { - this.env = attrs.env; - this.id = attrs.id; - this.parentSuite = attrs.parentSuite; - this.description = attrs.description; - this.onStart = attrs.onStart || function() {}; - this.resultCallback = attrs.resultCallback || function() {}; - this.clearStack = attrs.clearStack || function(fn) {fn();}; - this.expectationFactory = attrs.expectationFactory; - this.expectationResultFactory = attrs.expectationResultFactory; - this.runnablesExplictlySetGetter = attrs.runnablesExplictlySetGetter || function() {}; - - this.beforeFns = []; - this.afterFns = []; - this.beforeAllFns = []; - this.afterAllFns = []; - this.queueRunner = attrs.queueRunner || function() {}; - this.disabled = false; - - this.children = []; - - this.result = { - id: this.id, - description: this.description, - fullName: this.getFullName(), - failedExpectations: [] - }; - } - - Suite.prototype.expect = function(actual) { - return this.expectationFactory(actual, this); - }; - - Suite.prototype.getFullName = function() { - var fullName = this.description; - for (var parentSuite = this.parentSuite; parentSuite; parentSuite = parentSuite.parentSuite) { - if (parentSuite.parentSuite) { - fullName = parentSuite.description + ' ' + fullName; - } - } - return fullName; - }; - - Suite.prototype.disable = function() { - this.disabled = true; - }; - - Suite.prototype.beforeEach = function(fn) { - this.beforeFns.unshift(fn); - }; - - Suite.prototype.beforeAll = function(fn) { - this.beforeAllFns.push(fn); - }; - - Suite.prototype.afterEach = function(fn) { - this.afterFns.unshift(fn); - }; - - Suite.prototype.afterAll = function(fn) { - this.afterAllFns.push(fn); - }; - - Suite.prototype.addChild = function(child) { - this.children.push(child); - }; - - Suite.prototype.status = function() { - if (this.disabled) { - return 'disabled'; - } - - if (this.result.failedExpectations.length > 0) { - return 'failed'; - } else { - return 'finished'; - } - }; - - Suite.prototype.execute = function(onComplete) { - var self = this; - - this.onStart(this); - - if (this.disabled) { - complete(); - return; - } - - var allFns = []; - - for (var i = 0; i < this.children.length; i++) { - allFns.push(wrapChildAsAsync(this.children[i])); - } - - if (this.isExecutable()) { - allFns = this.beforeAllFns.concat(allFns); - allFns = allFns.concat(this.afterAllFns); - } - - this.queueRunner({ - queueableFns: allFns, - onComplete: complete, - userContext: this.sharedUserContext(), - onException: function() { self.onException.apply(self, arguments); } - }); - - function complete() { - self.result.status = self.status(); - self.resultCallback(self.result); - - if (onComplete) { - onComplete(); - } - } - - function wrapChildAsAsync(child) { - return { fn: function(done) { child.execute(done); } }; - } - }; - - Suite.prototype.isExecutable = function() { - var runnablesExplicitlySet = this.runnablesExplictlySetGetter(); - return !runnablesExplicitlySet && hasExecutableChild(this.children); - }; - - Suite.prototype.sharedUserContext = function() { - if (!this.sharedContext) { - this.sharedContext = this.parentSuite ? clone(this.parentSuite.sharedUserContext()) : {}; - } - - return this.sharedContext; - }; - - Suite.prototype.clonedSharedUserContext = function() { - return clone(this.sharedUserContext()); - }; - - Suite.prototype.onException = function() { - if(isAfterAll(this.children)) { - var data = { - matcherName: '', - passed: false, - expected: '', - actual: '', - error: arguments[0] - }; - this.result.failedExpectations.push(this.expectationResultFactory(data)); - } else { - for (var i = 0; i < this.children.length; i++) { - var child = this.children[i]; - child.onException.apply(child, arguments); - } - } - }; - - Suite.prototype.addExpectationResult = function () { - if(isAfterAll(this.children) && isFailure(arguments)){ - var data = arguments[1]; - this.result.failedExpectations.push(this.expectationResultFactory(data)); - } else { - for (var i = 0; i < this.children.length; i++) { - var child = this.children[i]; - child.addExpectationResult.apply(child, arguments); - } - } - }; - - function isAfterAll(children) { - return children && children[0].result.status; - } - - function isFailure(args) { - return !args[0]; - } - - function hasExecutableChild(children) { - var foundActive = false; - for (var i = 0; i < children.length; i++) { - if (children[i].isExecutable()) { - foundActive = true; - break; - } - } - return foundActive; - } - - function clone(obj) { - var clonedObj = {}; - for (var prop in obj) { - if (obj.hasOwnProperty(prop)) { - clonedObj[prop] = obj[prop]; - } - } - - return clonedObj; - } - - return Suite; -}; - -if (typeof window == void 0 && typeof exports == 'object') { - exports.Suite = jasmineRequire.Suite; -} - -getJasmineRequireObj().Timer = function() { - var defaultNow = (function(Date) { - return function() { return new Date().getTime(); }; - })(Date); - - function Timer(options) { - options = options || {}; - - var now = options.now || defaultNow, - startTime; - - this.start = function() { - startTime = now(); - }; - - this.elapsed = function() { - return now() - startTime; - }; - } - - return Timer; -}; - -getJasmineRequireObj().Any = function() { - - function Any(expectedObject) { - this.expectedObject = expectedObject; - } - - Any.prototype.asymmetricMatch = function(other) { - if (this.expectedObject == String) { - return typeof other == 'string' || other instanceof String; - } - - if (this.expectedObject == Number) { - return typeof other == 'number' || other instanceof Number; - } - - if (this.expectedObject == Function) { - return typeof other == 'function' || other instanceof Function; - } - - if (this.expectedObject == Object) { - return typeof other == 'object'; - } - - if (this.expectedObject == Boolean) { - return typeof other == 'boolean'; - } - - return other instanceof this.expectedObject; - }; - - Any.prototype.jasmineToString = function() { - return ''; - }; - - return Any; -}; - -getJasmineRequireObj().Anything = function(j$) { - - function Anything() {} - - Anything.prototype.asymmetricMatch = function(other) { - return !j$.util.isUndefined(other) && other !== null; - }; - - Anything.prototype.jasmineToString = function() { - return ''; - }; - - return Anything; -}; - -getJasmineRequireObj().ArrayContaining = function(j$) { - function ArrayContaining(sample) { - this.sample = sample; - } - - ArrayContaining.prototype.asymmetricMatch = function(other) { - var className = Object.prototype.toString.call(this.sample); - if (className !== '[object Array]') { throw new Error('You must provide an array to arrayContaining, not \'' + this.sample + '\'.'); } - - for (var i = 0; i < this.sample.length; i++) { - var item = this.sample[i]; - if (!j$.matchersUtil.contains(other, item)) { - return false; - } - } - - return true; - }; - - ArrayContaining.prototype.jasmineToString = function () { - return ''; - }; - - return ArrayContaining; -}; - -getJasmineRequireObj().ObjectContaining = function(j$) { - - function ObjectContaining(sample) { - this.sample = sample; - } - - ObjectContaining.prototype.asymmetricMatch = function(other) { - if (typeof(this.sample) !== 'object') { throw new Error('You must provide an object to objectContaining, not \''+this.sample+'\'.'); } - - for (var property in this.sample) { - if (!Object.prototype.hasOwnProperty.call(other, property) || - !j$.matchersUtil.equals(this.sample[property], other[property])) { - return false; - } - } - - return true; - }; - - ObjectContaining.prototype.jasmineToString = function() { - return ''; - }; - - return ObjectContaining; -}; - -getJasmineRequireObj().StringMatching = function(j$) { - - function StringMatching(expected) { - if (!j$.isString_(expected) && !j$.isA_('RegExp', expected)) { - throw new Error('Expected is not a String or a RegExp'); - } - - this.regexp = new RegExp(expected); - } - - StringMatching.prototype.asymmetricMatch = function(other) { - return this.regexp.test(other); - }; - - StringMatching.prototype.jasmineToString = function() { - return ''; - }; - - return StringMatching; -}; - -getJasmineRequireObj().matchersUtil = function(j$) { - // TODO: what to do about jasmine.pp not being inject? move to JSON.stringify? gut PrettyPrinter? - - return { - equals: function(a, b, customTesters) { - customTesters = customTesters || []; - - return eq(a, b, [], [], customTesters); - }, - - contains: function(haystack, needle, customTesters) { - customTesters = customTesters || []; - - if ((Object.prototype.toString.apply(haystack) === '[object Array]') || - (!!haystack && !haystack.indexOf)) - { - for (var i = 0; i < haystack.length; i++) { - if (eq(haystack[i], needle, [], [], customTesters)) { - return true; - } - } - return false; - } - - return !!haystack && haystack.indexOf(needle) >= 0; - }, - - buildFailureMessage: function() { - var args = Array.prototype.slice.call(arguments, 0), - matcherName = args[0], - isNot = args[1], - actual = args[2], - expected = args.slice(3), - englishyPredicate = matcherName.replace(/[A-Z]/g, function(s) { return ' ' + s.toLowerCase(); }); - - var message = 'Expected ' + - j$.pp(actual) + - (isNot ? ' not ' : ' ') + - englishyPredicate; - - if (expected.length > 0) { - for (var i = 0; i < expected.length; i++) { - if (i > 0) { - message += ','; - } - message += ' ' + j$.pp(expected[i]); - } - } - - return message + '.'; - } - }; - - function isAsymmetric(obj) { - return obj && j$.isA_('Function', obj.asymmetricMatch); - } - - function asymmetricMatch(a, b) { - var asymmetricA = isAsymmetric(a), - asymmetricB = isAsymmetric(b); - - if (asymmetricA && asymmetricB) { - return undefined; - } - - if (asymmetricA) { - return a.asymmetricMatch(b); - } - - if (asymmetricB) { - return b.asymmetricMatch(a); - } - } - - // Equality function lovingly adapted from isEqual in - // [Underscore](http://underscorejs.org) - function eq(a, b, aStack, bStack, customTesters) { - var result = true; - - var asymmetricResult = asymmetricMatch(a, b); - if (!j$.util.isUndefined(asymmetricResult)) { - return asymmetricResult; - } - - for (var i = 0; i < customTesters.length; i++) { - var customTesterResult = customTesters[i](a, b); - if (!j$.util.isUndefined(customTesterResult)) { - return customTesterResult; - } - } - - if (a instanceof Error && b instanceof Error) { - return a.message == b.message; - } - - // Identical objects are equal. `0 === -0`, but they aren't identical. - // See the [Harmony `egal` proposal](http://wiki.ecmascript.org/doku.php?id=harmony:egal). - if (a === b) { return a !== 0 || 1 / a == 1 / b; } - // A strict comparison is necessary because `null == undefined`. - if (a === null || b === null) { return a === b; } - var className = Object.prototype.toString.call(a); - if (className != Object.prototype.toString.call(b)) { return false; } - switch (className) { - // Strings, numbers, dates, and booleans are compared by value. - case '[object String]': - // Primitives and their corresponding object wrappers are equivalent; thus, `"5"` is - // equivalent to `new String("5")`. - return a == String(b); - case '[object Number]': - // `NaN`s are equivalent, but non-reflexive. An `egal` comparison is performed for - // other numeric values. - return a != +a ? b != +b : (a === 0 ? 1 / a == 1 / b : a == +b); - case '[object Date]': - case '[object Boolean]': - // Coerce dates and booleans to numeric primitive values. Dates are compared by their - // millisecond representations. Note that invalid dates with millisecond representations - // of `NaN` are not equivalent. - return +a == +b; - // RegExps are compared by their source patterns and flags. - case '[object RegExp]': - return a.source == b.source && - a.global == b.global && - a.multiline == b.multiline && - a.ignoreCase == b.ignoreCase; - } - if (typeof a != 'object' || typeof b != 'object') { return false; } - - var aIsDomNode = j$.isDomNode(a); - var bIsDomNode = j$.isDomNode(b); - if (aIsDomNode && bIsDomNode) { - // At first try to use DOM3 method isEqualNode - if (a.isEqualNode) { - return a.isEqualNode(b); - } - // IE8 doesn't support isEqualNode, try to use outerHTML && innerText - var aIsElement = a instanceof Element; - var bIsElement = b instanceof Element; - if (aIsElement && bIsElement) { - return a.outerHTML == b.outerHTML; - } - if (aIsElement || bIsElement) { - return false; - } - return a.innerText == b.innerText && a.textContent == b.textContent; - } - if (aIsDomNode || bIsDomNode) { - return false; - } - - // Assume equality for cyclic structures. The algorithm for detecting cyclic - // structures is adapted from ES 5.1 section 15.12.3, abstract operation `JO`. - var length = aStack.length; - while (length--) { - // Linear search. Performance is inversely proportional to the number of - // unique nested structures. - if (aStack[length] == a) { return bStack[length] == b; } - } - // Add the first object to the stack of traversed objects. - aStack.push(a); - bStack.push(b); - var size = 0; - // Recursively compare objects and arrays. - // Compare array lengths to determine if a deep comparison is necessary. - if (className == '[object Array]' && a.length !== b.length) { - result = false; - } - - if (result) { - // Objects with different constructors are not equivalent, but `Object`s - // from different frames are. - var aCtor = a.constructor, bCtor = b.constructor; - if (aCtor !== bCtor && !(isFunction(aCtor) && (aCtor instanceof aCtor) && - isFunction(bCtor) && (bCtor instanceof bCtor))) { - return false; - } - // Deep compare objects. - for (var key in a) { - if (has(a, key)) { - // Count the expected number of properties. - size++; - // Deep compare each member. - if (!(result = has(b, key) && eq(a[key], b[key], aStack, bStack, customTesters))) { break; } - } - } - // Ensure that both objects contain the same number of properties. - if (result) { - for (key in b) { - if (has(b, key) && !(size--)) { break; } - } - result = !size; - } - } - // Remove the first object from the stack of traversed objects. - aStack.pop(); - bStack.pop(); - - return result; - - function has(obj, key) { - return Object.prototype.hasOwnProperty.call(obj, key); - } - - function isFunction(obj) { - return typeof obj === 'function'; - } - } -}; - -getJasmineRequireObj().toBe = function() { - function toBe() { - return { - compare: function(actual, expected) { - return { - pass: actual === expected - }; - } - }; - } - - return toBe; -}; - -getJasmineRequireObj().toBeCloseTo = function() { - - function toBeCloseTo() { - return { - compare: function(actual, expected, precision) { - if (precision !== 0) { - precision = precision || 2; - } - - return { - pass: Math.abs(expected - actual) < (Math.pow(10, -precision) / 2) - }; - } - }; - } - - return toBeCloseTo; -}; - -getJasmineRequireObj().toBeDefined = function() { - function toBeDefined() { - return { - compare: function(actual) { - return { - pass: (void 0 !== actual) - }; - } - }; - } - - return toBeDefined; -}; - -getJasmineRequireObj().toBeFalsy = function() { - function toBeFalsy() { - return { - compare: function(actual) { - return { - pass: !!!actual - }; - } - }; - } - - return toBeFalsy; -}; - -getJasmineRequireObj().toBeGreaterThan = function() { - - function toBeGreaterThan() { - return { - compare: function(actual, expected) { - return { - pass: actual > expected - }; - } - }; - } - - return toBeGreaterThan; -}; - - -getJasmineRequireObj().toBeLessThan = function() { - function toBeLessThan() { - return { - - compare: function(actual, expected) { - return { - pass: actual < expected - }; - } - }; - } - - return toBeLessThan; -}; -getJasmineRequireObj().toBeNaN = function(j$) { - - function toBeNaN() { - return { - compare: function(actual) { - var result = { - pass: (actual !== actual) - }; - - if (result.pass) { - result.message = 'Expected actual not to be NaN.'; - } else { - result.message = function() { return 'Expected ' + j$.pp(actual) + ' to be NaN.'; }; - } - - return result; - } - }; - } - - return toBeNaN; -}; - -getJasmineRequireObj().toBeNull = function() { - - function toBeNull() { - return { - compare: function(actual) { - return { - pass: actual === null - }; - } - }; - } - - return toBeNull; -}; - -getJasmineRequireObj().toBeTruthy = function() { - - function toBeTruthy() { - return { - compare: function(actual) { - return { - pass: !!actual - }; - } - }; - } - - return toBeTruthy; -}; - -getJasmineRequireObj().toBeUndefined = function() { - - function toBeUndefined() { - return { - compare: function(actual) { - return { - pass: void 0 === actual - }; - } - }; - } - - return toBeUndefined; -}; - -getJasmineRequireObj().toContain = function() { - function toContain(util, customEqualityTesters) { - customEqualityTesters = customEqualityTesters || []; - - return { - compare: function(actual, expected) { - - return { - pass: util.contains(actual, expected, customEqualityTesters) - }; - } - }; - } - - return toContain; -}; - -getJasmineRequireObj().toEqual = function() { - - function toEqual(util, customEqualityTesters) { - customEqualityTesters = customEqualityTesters || []; - - return { - compare: function(actual, expected) { - var result = { - pass: false - }; - - result.pass = util.equals(actual, expected, customEqualityTesters); - - return result; - } - }; - } - - return toEqual; -}; - -getJasmineRequireObj().toHaveBeenCalled = function(j$) { - - function toHaveBeenCalled() { - return { - compare: function(actual) { - var result = {}; - - if (!j$.isSpy(actual)) { - throw new Error('Expected a spy, but got ' + j$.pp(actual) + '.'); - } - - if (arguments.length > 1) { - throw new Error('toHaveBeenCalled does not take arguments, use toHaveBeenCalledWith'); - } - - result.pass = actual.calls.any(); - - result.message = result.pass ? - 'Expected spy ' + actual.and.identity() + ' not to have been called.' : - 'Expected spy ' + actual.and.identity() + ' to have been called.'; - - return result; - } - }; - } - - return toHaveBeenCalled; -}; - -getJasmineRequireObj().toHaveBeenCalledWith = function(j$) { - - function toHaveBeenCalledWith(util, customEqualityTesters) { - return { - compare: function() { - var args = Array.prototype.slice.call(arguments, 0), - actual = args[0], - expectedArgs = args.slice(1), - result = { pass: false }; - - if (!j$.isSpy(actual)) { - throw new Error('Expected a spy, but got ' + j$.pp(actual) + '.'); - } - - if (!actual.calls.any()) { - result.message = function() { return 'Expected spy ' + actual.and.identity() + ' to have been called with ' + j$.pp(expectedArgs) + ' but it was never called.'; }; - return result; - } - - if (util.contains(actual.calls.allArgs(), expectedArgs, customEqualityTesters)) { - result.pass = true; - result.message = function() { return 'Expected spy ' + actual.and.identity() + ' not to have been called with ' + j$.pp(expectedArgs) + ' but it was.'; }; - } else { - result.message = function() { return 'Expected spy ' + actual.and.identity() + ' to have been called with ' + j$.pp(expectedArgs) + ' but actual calls were ' + j$.pp(actual.calls.allArgs()).replace(/^\[ | ]$/g, '') + '.'; }; - } - - return result; - } - }; - } - - return toHaveBeenCalledWith; -}; - -getJasmineRequireObj().toMatch = function(j$) { - - function toMatch() { - return { - compare: function(actual, expected) { - if (!j$.isString_(expected) && !j$.isA_('RegExp', expected)) { - throw new Error('Expected is not a String or a RegExp'); - } - - var regexp = new RegExp(expected); - - return { - pass: regexp.test(actual) - }; - } - }; - } - - return toMatch; -}; - -getJasmineRequireObj().toThrow = function(j$) { - - function toThrow(util) { - return { - compare: function(actual, expected) { - var result = { pass: false }, - threw = false, - thrown; - - if (typeof actual != 'function') { - throw new Error('Actual is not a Function'); - } - - try { - actual(); - } catch (e) { - threw = true; - thrown = e; - } - - if (!threw) { - result.message = 'Expected function to throw an exception.'; - return result; - } - - if (arguments.length == 1) { - result.pass = true; - result.message = function() { return 'Expected function not to throw, but it threw ' + j$.pp(thrown) + '.'; }; - - return result; - } - - if (util.equals(thrown, expected)) { - result.pass = true; - result.message = function() { return 'Expected function not to throw ' + j$.pp(expected) + '.'; }; - } else { - result.message = function() { return 'Expected function to throw ' + j$.pp(expected) + ', but it threw ' + j$.pp(thrown) + '.'; }; - } - - return result; - } - }; - } - - return toThrow; -}; - -getJasmineRequireObj().toThrowError = function(j$) { - function toThrowError (util) { - return { - compare: function(actual) { - var threw = false, - pass = {pass: true}, - fail = {pass: false}, - thrown; - - if (typeof actual != 'function') { - throw new Error('Actual is not a Function'); - } - - var errorMatcher = getMatcher.apply(null, arguments); - - try { - actual(); - } catch (e) { - threw = true; - thrown = e; - } - - if (!threw) { - fail.message = 'Expected function to throw an Error.'; - return fail; - } - - if (!(thrown instanceof Error)) { - fail.message = function() { return 'Expected function to throw an Error, but it threw ' + j$.pp(thrown) + '.'; }; - return fail; - } - - if (errorMatcher.hasNoSpecifics()) { - pass.message = 'Expected function not to throw an Error, but it threw ' + j$.fnNameFor(thrown) + '.'; - return pass; - } - - if (errorMatcher.matches(thrown)) { - pass.message = function() { - return 'Expected function not to throw ' + errorMatcher.errorTypeDescription + errorMatcher.messageDescription() + '.'; - }; - return pass; - } else { - fail.message = function() { - return 'Expected function to throw ' + errorMatcher.errorTypeDescription + errorMatcher.messageDescription() + - ', but it threw ' + errorMatcher.thrownDescription(thrown) + '.'; - }; - return fail; - } - } - }; - - function getMatcher() { - var expected = null, - errorType = null; - - if (arguments.length == 2) { - expected = arguments[1]; - if (isAnErrorType(expected)) { - errorType = expected; - expected = null; - } - } else if (arguments.length > 2) { - errorType = arguments[1]; - expected = arguments[2]; - if (!isAnErrorType(errorType)) { - throw new Error('Expected error type is not an Error.'); - } - } - - if (expected && !isStringOrRegExp(expected)) { - if (errorType) { - throw new Error('Expected error message is not a string or RegExp.'); - } else { - throw new Error('Expected is not an Error, string, or RegExp.'); - } - } - - function messageMatch(message) { - if (typeof expected == 'string') { - return expected == message; - } else { - return expected.test(message); - } - } - - return { - errorTypeDescription: errorType ? j$.fnNameFor(errorType) : 'an exception', - thrownDescription: function(thrown) { - var thrownName = errorType ? j$.fnNameFor(thrown.constructor) : 'an exception', - thrownMessage = ''; - - if (expected) { - thrownMessage = ' with message ' + j$.pp(thrown.message); - } - - return thrownName + thrownMessage; - }, - messageDescription: function() { - if (expected === null) { - return ''; - } else if (expected instanceof RegExp) { - return ' with a message matching ' + j$.pp(expected); - } else { - return ' with message ' + j$.pp(expected); - } - }, - hasNoSpecifics: function() { - return expected === null && errorType === null; - }, - matches: function(error) { - return (errorType === null || error.constructor === errorType) && - (expected === null || messageMatch(error.message)); - } - }; - } - - function isStringOrRegExp(potential) { - return potential instanceof RegExp || (typeof potential == 'string'); - } - - function isAnErrorType(type) { - if (typeof type !== 'function') { - return false; - } - - var Surrogate = function() {}; - Surrogate.prototype = type.prototype; - return (new Surrogate()) instanceof Error; - } - } - - return toThrowError; -}; - -getJasmineRequireObj().interface = function(jasmine, env) { - var jasmineInterface = { - describe: function(description, specDefinitions) { - return env.describe(description, specDefinitions); - }, - - xdescribe: function(description, specDefinitions) { - return env.xdescribe(description, specDefinitions); - }, - - fdescribe: function(description, specDefinitions) { - return env.fdescribe(description, specDefinitions); - }, - - it: function() { - return env.it.apply(env, arguments); - }, - - xit: function() { - return env.xit.apply(env, arguments); - }, - - fit: function() { - return env.fit.apply(env, arguments); - }, - - beforeEach: function() { - return env.beforeEach.apply(env, arguments); - }, - - afterEach: function() { - return env.afterEach.apply(env, arguments); - }, - - beforeAll: function() { - return env.beforeAll.apply(env, arguments); - }, - - afterAll: function() { - return env.afterAll.apply(env, arguments); - }, - - expect: function(actual) { - return env.expect(actual); - }, - - pending: function() { - return env.pending.apply(env, arguments); - }, - - fail: function() { - return env.fail.apply(env, arguments); - }, - - spyOn: function(obj, methodName) { - return env.spyOn(obj, methodName); - }, - - jsApiReporter: new jasmine.JsApiReporter({ - timer: new jasmine.Timer() - }), - - jasmine: jasmine - }; - - jasmine.addCustomEqualityTester = function(tester) { - env.addCustomEqualityTester(tester); - }; - - jasmine.addMatchers = function(matchers) { - return env.addMatchers(matchers); - }; - - jasmine.clock = function() { - return env.clock; - }; - - return jasmineInterface; -}; - -getJasmineRequireObj().version = function() { - return '2.2.0'; -}; diff --git a/admin-panel/app/vendor/nwbp/contextmenu.js b/admin-panel/app/vendor/nwbp/contextmenu.js deleted file mode 100755 index 25fc0850..00000000 --- a/admin-panel/app/vendor/nwbp/contextmenu.js +++ /dev/null @@ -1,47 +0,0 @@ -// This gives you default context menu (cut, copy, paste) -// in all input fields and textareas across your app. - -(function () { - 'use strict'; - - var gui = require('nw.gui'); - - var cut = new gui.MenuItem({ - label: "Cut", - click: function () { - document.execCommand("cut"); - } - }); - - var copy = new gui.MenuItem({ - label: "Copy", - click: function () { - document.execCommand("copy"); - } - }); - - var paste = new gui.MenuItem({ - label: "Paste", - click: function () { - document.execCommand("paste"); - } - }); - - var textMenu = new gui.Menu(); - textMenu.append(cut); - textMenu.append(copy); - textMenu.append(paste); - - document.addEventListener('contextmenu', function(e) { - - switch (e.target.nodeName) { - case 'TEXTAREA': - case 'INPUT': - e.preventDefault(); - textMenu.popup(e.x, e.y); - break; - } - - }, false); - -}()); diff --git a/admin-panel/app/vendor/nwbp/dev-helpers.js b/admin-panel/app/vendor/nwbp/dev-helpers.js deleted file mode 100755 index a0656dda..00000000 --- a/admin-panel/app/vendor/nwbp/dev-helpers.js +++ /dev/null @@ -1,28 +0,0 @@ -// When application runs in development mode this -// module activates convenient shortcuts for you. - -(function () { - 'use strict'; - - var gui = require('nw.gui'); - - var registerShortcuts = function () { - var keyDown = function (e) { - if ((e.ctrlKey || e.metaKey) && e.keyCode == 82) { - // CTRL (CMD) + R reloads the page - gui.Window.get().reload(); - } - if ((e.ctrlKey || e.metaKey) && e.shiftKey && e.keyCode == 73) { - // CTRL (CMD) + SHIFT + I shows devtools window - gui.Window.get().showDevTools(); - } - }; - - document.addEventListener('keydown', keyDown, false); - }; - - if (gui.App.manifest.developmentMode) { - registerShortcuts(); - } - -}()); diff --git a/admin-panel/app/vendor/nwbp/external-links.js b/admin-panel/app/vendor/nwbp/external-links.js deleted file mode 100755 index 87558d3d..00000000 --- a/admin-panel/app/vendor/nwbp/external-links.js +++ /dev/null @@ -1,42 +0,0 @@ -// Convenient way for opening links in external browser, not in the app. -// Useful especially if you have a lot of links to deal with. -// -// Usage: -// -// Every link with class ".js-external-link" will be opened in external browser. -// google -// -// The same behaviour for many links can be achieved by adding -// this class to any parent tag of an anchor tag. -// - -(function () { - var gui = require('nw.gui'); - - var supportExternalLinks = function (e) { - var href; - var isExternal = false; - - var checkDomElement = function (element) { - if (element.nodeName === 'A') { - href = element.getAttribute('href'); - } - if (element.classList.contains('js-external-link')) { - isExternal = true; - } - if (href && isExternal) { - gui.Shell.openExternal(href); - e.preventDefault(); - } else if (element.parentElement) { - checkDomElement(element.parentElement); - } - }; - - checkDomElement(e.target); - }; - - document.addEventListener('click', supportExternalLinks, false); -}()); \ No newline at end of file diff --git a/admin-panel/app/vendor/nwbp/window-state.js b/admin-panel/app/vendor/nwbp/window-state.js deleted file mode 100755 index ec7c7142..00000000 --- a/admin-panel/app/vendor/nwbp/window-state.js +++ /dev/null @@ -1,123 +0,0 @@ -// Window state (size and position) preservation between app launches. -(function () { - 'use strict'; - - var gui = require('nw.gui'); - var win = gui.Window.get(); - var state; - var currMode = 'normal'; - var maximized = null; - var saveTimeout; - - var init = function () { - try { - state = JSON.parse(localStorage.windowState); - - // Make sure the window is in-bounds of the screen. - // If not, it is safer to ignore it. - if (state.x < -10 || - state.y < -10 || - state.x + state.width > screen.width + 10 || - state.y + state.height > screen.height + 10) { - throw "Window out of bounds."; - } - - // Restore saved window state. - currMode = state.mode; - win.resizeTo(state.width, state.height); - win.moveTo(state.x, state.y); - if (currMode === 'maximized') { - // Have to delay maximization a little to let NW set - // the normal x,y,width,height of the window, - // so we can unmaximize to that state later on. - // It also prevents bug https://github.com/nwjs/nw.js/issues/1105 - setTimeout(function () { - win.maximize(); - maximized = snapshotWindowSize(); - }, 100); - } - } catch (err) { - // There was no data, or data has been corrupted. - // Start from scratch with safe defaults. - state = { - mode: currMode, - x: win.x, - y: win.y, - width: win.width, - height: win.height - }; - } - - win.show(); - }; - - // We are delaying save for one second to be sure window state - // has "stabilized" (order of events is sometimes unreliable, - // and we can save some junk by not waiting). - var scheduleSave = function () { - clearTimeout(saveTimeout); - saveTimeout = setTimeout(save, 1000); - }; - - var snapshotWindowSize = function (obj) { - obj = obj || {}; - obj.x = win.x; - obj.y = win.y; - obj.width = win.width; - obj.height = win.height; - return obj; - }; - - var save = function () { - if (currMode === 'minimized') { - // Don't save minimized state. - return; - } - if (currMode === 'normal') { - // Update window dimensions only if in normal mode. - snapshotWindowSize(state); - } - if (currMode === 'maximized') { - // Save maximized dimensions into separate object. - maximized = snapshotWindowSize(); - } - state.mode = currMode; - localStorage.windowState = JSON.stringify(state); - }; - - init(); - - win.on('maximize', function () { - currMode = 'maximized'; - scheduleSave(); - }); - - win.on('unmaximize', function () { - currMode = 'normal'; - scheduleSave(); - }); - - win.on('minimize', function () { - currMode = 'minimized'; - // Don't save minimized state. - }); - - win.on('restore', function () { - currMode = 'normal'; - scheduleSave(); - }); - - win.on('resize', function () { - if (maximized && (win.width !== maximized.width || win.height !== maximized.height)) { - // On OSX you can resize maximized window, so it is no longer maximized. - maximized = null; - currMode = 'normal'; - } - scheduleSave(); - }); - - win.on('move', function () { - scheduleSave(); - }); - -}()); diff --git a/admin-panel/app/vendor/require.js b/admin-panel/app/vendor/require.js deleted file mode 100755 index abebd2ab..00000000 --- a/admin-panel/app/vendor/require.js +++ /dev/null @@ -1,2076 +0,0 @@ -/** vim: et:ts=4:sw=4:sts=4 - * @license RequireJS 2.1.14 Copyright (c) 2010-2014, The Dojo Foundation All Rights Reserved. - * Available via the MIT or new BSD license. - * see: http://github.com/jrburke/requirejs for details - */ -//Not using strict: uneven strict support in browsers, #392, and causes -//problems with requirejs.exec()/transpiler plugins that may not be strict. -/*jslint regexp: true, nomen: true, sloppy: true */ -/*global window, navigator, document, importScripts, setTimeout, opera */ - -var requirejs, require, define; -(function (global) { - var req, s, head, baseElement, dataMain, src, - interactiveScript, currentlyAddingScript, mainScript, subPath, - version = '2.1.14', - commentRegExp = /(\/\*([\s\S]*?)\*\/|([^:]|^)\/\/(.*)$)/mg, - cjsRequireRegExp = /[^.]\s*require\s*\(\s*["']([^'"\s]+)["']\s*\)/g, - jsSuffixRegExp = /\.js$/, - currDirRegExp = /^\.\//, - op = Object.prototype, - ostring = op.toString, - hasOwn = op.hasOwnProperty, - ap = Array.prototype, - apsp = ap.splice, - isBrowser = !!(typeof window !== 'undefined' && typeof navigator !== 'undefined' && window.document), - isWebWorker = !isBrowser && typeof importScripts !== 'undefined', - //PS3 indicates loaded and complete, but need to wait for complete - //specifically. Sequence is 'loading', 'loaded', execution, - // then 'complete'. The UA check is unfortunate, but not sure how - //to feature test w/o causing perf issues. - readyRegExp = isBrowser && navigator.platform === 'PLAYSTATION 3' ? - /^complete$/ : /^(complete|loaded)$/, - defContextName = '_', - //Oh the tragedy, detecting opera. See the usage of isOpera for reason. - isOpera = typeof opera !== 'undefined' && opera.toString() === '[object Opera]', - contexts = {}, - cfg = {}, - globalDefQueue = [], - useInteractive = false; - - function isFunction(it) { - return ostring.call(it) === '[object Function]'; - } - - function isArray(it) { - return ostring.call(it) === '[object Array]'; - } - - /** - * Helper function for iterating over an array. If the func returns - * a true value, it will break out of the loop. - */ - function each(ary, func) { - if (ary) { - var i; - for (i = 0; i < ary.length; i += 1) { - if (ary[i] && func(ary[i], i, ary)) { - break; - } - } - } - } - - /** - * Helper function for iterating over an array backwards. If the func - * returns a true value, it will break out of the loop. - */ - function eachReverse(ary, func) { - if (ary) { - var i; - for (i = ary.length - 1; i > -1; i -= 1) { - if (ary[i] && func(ary[i], i, ary)) { - break; - } - } - } - } - - function hasProp(obj, prop) { - return hasOwn.call(obj, prop); - } - - function getOwn(obj, prop) { - return hasProp(obj, prop) && obj[prop]; - } - - /** - * Cycles over properties in an object and calls a function for each - * property value. If the function returns a truthy value, then the - * iteration is stopped. - */ - function eachProp(obj, func) { - var prop; - for (prop in obj) { - if (hasProp(obj, prop)) { - if (func(obj[prop], prop)) { - break; - } - } - } - } - - /** - * Simple function to mix in properties from source into target, - * but only if target does not already have a property of the same name. - */ - function mixin(target, source, force, deepStringMixin) { - if (source) { - eachProp(source, function (value, prop) { - if (force || !hasProp(target, prop)) { - if (deepStringMixin && typeof value === 'object' && value && - !isArray(value) && !isFunction(value) && - !(value instanceof RegExp)) { - - if (!target[prop]) { - target[prop] = {}; - } - mixin(target[prop], value, force, deepStringMixin); - } else { - target[prop] = value; - } - } - }); - } - return target; - } - - //Similar to Function.prototype.bind, but the 'this' object is specified - //first, since it is easier to read/figure out what 'this' will be. - function bind(obj, fn) { - return function () { - return fn.apply(obj, arguments); - }; - } - - function scripts() { - return document.getElementsByTagName('script'); - } - - function defaultOnError(err) { - throw err; - } - - //Allow getting a global that is expressed in - //dot notation, like 'a.b.c'. - function getGlobal(value) { - if (!value) { - return value; - } - var g = global; - each(value.split('.'), function (part) { - g = g[part]; - }); - return g; - } - - /** - * Constructs an error with a pointer to an URL with more information. - * @param {String} id the error ID that maps to an ID on a web page. - * @param {String} message human readable error. - * @param {Error} [err] the original error, if there is one. - * - * @returns {Error} - */ - function makeError(id, msg, err, requireModules) { - var e = new Error(msg + '\nhttp://requirejs.org/docs/errors.html#' + id); - e.requireType = id; - e.requireModules = requireModules; - if (err) { - e.originalError = err; - } - return e; - } - - if (typeof define !== 'undefined') { - //If a define is already in play via another AMD loader, - //do not overwrite. - return; - } - - if (typeof requirejs !== 'undefined') { - if (isFunction(requirejs)) { - //Do not overwrite an existing requirejs instance. - return; - } - cfg = requirejs; - requirejs = undefined; - } - - //Allow for a require config object - if (typeof require !== 'undefined' && !isFunction(require)) { - //assume it is a config object. - cfg = require; - require = undefined; - } - - function newContext(contextName) { - var inCheckLoaded, Module, context, handlers, - checkLoadedTimeoutId, - config = { - //Defaults. Do not set a default for map - //config to speed up normalize(), which - //will run faster if there is no default. - waitSeconds: 7, - baseUrl: './', - paths: {}, - bundles: {}, - pkgs: {}, - shim: {}, - config: {} - }, - registry = {}, - //registry of just enabled modules, to speed - //cycle breaking code when lots of modules - //are registered, but not activated. - enabledRegistry = {}, - undefEvents = {}, - defQueue = [], - defined = {}, - urlFetched = {}, - bundlesMap = {}, - requireCounter = 1, - unnormalizedCounter = 1; - - /** - * Trims the . and .. from an array of path segments. - * It will keep a leading path segment if a .. will become - * the first path segment, to help with module name lookups, - * which act like paths, but can be remapped. But the end result, - * all paths that use this function should look normalized. - * NOTE: this method MODIFIES the input array. - * @param {Array} ary the array of path segments. - */ - function trimDots(ary) { - var i, part; - for (i = 0; i < ary.length; i++) { - part = ary[i]; - if (part === '.') { - ary.splice(i, 1); - i -= 1; - } else if (part === '..') { - // If at the start, or previous value is still .., - // keep them so that when converted to a path it may - // still work when converted to a path, even though - // as an ID it is less than ideal. In larger point - // releases, may be better to just kick out an error. - if (i === 0 || (i == 1 && ary[2] === '..') || ary[i - 1] === '..') { - continue; - } else if (i > 0) { - ary.splice(i - 1, 2); - i -= 2; - } - } - } - } - - /** - * Given a relative module name, like ./something, normalize it to - * a real name that can be mapped to a path. - * @param {String} name the relative name - * @param {String} baseName a real name that the name arg is relative - * to. - * @param {Boolean} applyMap apply the map config to the value. Should - * only be done if this normalization is for a dependency ID. - * @returns {String} normalized name - */ - function normalize(name, baseName, applyMap) { - var pkgMain, mapValue, nameParts, i, j, nameSegment, lastIndex, - foundMap, foundI, foundStarMap, starI, normalizedBaseParts, - baseParts = (baseName && baseName.split('/')), - map = config.map, - starMap = map && map['*']; - - //Adjust any relative paths. - if (name) { - name = name.split('/'); - lastIndex = name.length - 1; - - // If wanting node ID compatibility, strip .js from end - // of IDs. Have to do this here, and not in nameToUrl - // because node allows either .js or non .js to map - // to same file. - if (config.nodeIdCompat && jsSuffixRegExp.test(name[lastIndex])) { - name[lastIndex] = name[lastIndex].replace(jsSuffixRegExp, ''); - } - - // Starts with a '.' so need the baseName - if (name[0].charAt(0) === '.' && baseParts) { - //Convert baseName to array, and lop off the last part, - //so that . matches that 'directory' and not name of the baseName's - //module. For instance, baseName of 'one/two/three', maps to - //'one/two/three.js', but we want the directory, 'one/two' for - //this normalization. - normalizedBaseParts = baseParts.slice(0, baseParts.length - 1); - name = normalizedBaseParts.concat(name); - } - - trimDots(name); - name = name.join('/'); - } - - //Apply map config if available. - if (applyMap && map && (baseParts || starMap)) { - nameParts = name.split('/'); - - outerLoop: for (i = nameParts.length; i > 0; i -= 1) { - nameSegment = nameParts.slice(0, i).join('/'); - - if (baseParts) { - //Find the longest baseName segment match in the config. - //So, do joins on the biggest to smallest lengths of baseParts. - for (j = baseParts.length; j > 0; j -= 1) { - mapValue = getOwn(map, baseParts.slice(0, j).join('/')); - - //baseName segment has config, find if it has one for - //this name. - if (mapValue) { - mapValue = getOwn(mapValue, nameSegment); - if (mapValue) { - //Match, update name to the new value. - foundMap = mapValue; - foundI = i; - break outerLoop; - } - } - } - } - - //Check for a star map match, but just hold on to it, - //if there is a shorter segment match later in a matching - //config, then favor over this star map. - if (!foundStarMap && starMap && getOwn(starMap, nameSegment)) { - foundStarMap = getOwn(starMap, nameSegment); - starI = i; - } - } - - if (!foundMap && foundStarMap) { - foundMap = foundStarMap; - foundI = starI; - } - - if (foundMap) { - nameParts.splice(0, foundI, foundMap); - name = nameParts.join('/'); - } - } - - // If the name points to a package's name, use - // the package main instead. - pkgMain = getOwn(config.pkgs, name); - - return pkgMain ? pkgMain : name; - } - - function removeScript(name) { - if (isBrowser) { - each(scripts(), function (scriptNode) { - if (scriptNode.getAttribute('data-requiremodule') === name && - scriptNode.getAttribute('data-requirecontext') === context.contextName) { - scriptNode.parentNode.removeChild(scriptNode); - return true; - } - }); - } - } - - function hasPathFallback(id) { - var pathConfig = getOwn(config.paths, id); - if (pathConfig && isArray(pathConfig) && pathConfig.length > 1) { - //Pop off the first array value, since it failed, and - //retry - pathConfig.shift(); - context.require.undef(id); - - //Custom require that does not do map translation, since - //ID is "absolute", already mapped/resolved. - context.makeRequire(null, { - skipMap: true - })([id]); - - return true; - } - } - - //Turns a plugin!resource to [plugin, resource] - //with the plugin being undefined if the name - //did not have a plugin prefix. - function splitPrefix(name) { - var prefix, - index = name ? name.indexOf('!') : -1; - if (index > -1) { - prefix = name.substring(0, index); - name = name.substring(index + 1, name.length); - } - return [prefix, name]; - } - - /** - * Creates a module mapping that includes plugin prefix, module - * name, and path. If parentModuleMap is provided it will - * also normalize the name via require.normalize() - * - * @param {String} name the module name - * @param {String} [parentModuleMap] parent module map - * for the module name, used to resolve relative names. - * @param {Boolean} isNormalized: is the ID already normalized. - * This is true if this call is done for a define() module ID. - * @param {Boolean} applyMap: apply the map config to the ID. - * Should only be true if this map is for a dependency. - * - * @returns {Object} - */ - function makeModuleMap(name, parentModuleMap, isNormalized, applyMap) { - var url, pluginModule, suffix, nameParts, - prefix = null, - parentName = parentModuleMap ? parentModuleMap.name : null, - originalName = name, - isDefine = true, - normalizedName = ''; - - //If no name, then it means it is a require call, generate an - //internal name. - if (!name) { - isDefine = false; - name = '_@r' + (requireCounter += 1); - } - - nameParts = splitPrefix(name); - prefix = nameParts[0]; - name = nameParts[1]; - - if (prefix) { - prefix = normalize(prefix, parentName, applyMap); - pluginModule = getOwn(defined, prefix); - } - - //Account for relative paths if there is a base name. - if (name) { - if (prefix) { - if (pluginModule && pluginModule.normalize) { - //Plugin is loaded, use its normalize method. - normalizedName = pluginModule.normalize(name, function (name) { - return normalize(name, parentName, applyMap); - }); - } else { - // If nested plugin references, then do not try to - // normalize, as it will not normalize correctly. This - // places a restriction on resourceIds, and the longer - // term solution is not to normalize until plugins are - // loaded and all normalizations to allow for async - // loading of a loader plugin. But for now, fixes the - // common uses. Details in #1131 - normalizedName = name.indexOf('!') === -1 ? - normalize(name, parentName, applyMap) : - name; - } - } else { - //A regular module. - normalizedName = normalize(name, parentName, applyMap); - - //Normalized name may be a plugin ID due to map config - //application in normalize. The map config values must - //already be normalized, so do not need to redo that part. - nameParts = splitPrefix(normalizedName); - prefix = nameParts[0]; - normalizedName = nameParts[1]; - isNormalized = true; - - url = context.nameToUrl(normalizedName); - } - } - - //If the id is a plugin id that cannot be determined if it needs - //normalization, stamp it with a unique ID so two matching relative - //ids that may conflict can be separate. - suffix = prefix && !pluginModule && !isNormalized ? - '_unnormalized' + (unnormalizedCounter += 1) : - ''; - - return { - prefix: prefix, - name: normalizedName, - parentMap: parentModuleMap, - unnormalized: !!suffix, - url: url, - originalName: originalName, - isDefine: isDefine, - id: (prefix ? - prefix + '!' + normalizedName : - normalizedName) + suffix - }; - } - - function getModule(depMap) { - var id = depMap.id, - mod = getOwn(registry, id); - - if (!mod) { - mod = registry[id] = new context.Module(depMap); - } - - return mod; - } - - function on(depMap, name, fn) { - var id = depMap.id, - mod = getOwn(registry, id); - - if (hasProp(defined, id) && - (!mod || mod.defineEmitComplete)) { - if (name === 'defined') { - fn(defined[id]); - } - } else { - mod = getModule(depMap); - if (mod.error && name === 'error') { - fn(mod.error); - } else { - mod.on(name, fn); - } - } - } - - function onError(err, errback) { - var ids = err.requireModules, - notified = false; - - if (errback) { - errback(err); - } else { - each(ids, function (id) { - var mod = getOwn(registry, id); - if (mod) { - //Set error on module, so it skips timeout checks. - mod.error = err; - if (mod.events.error) { - notified = true; - mod.emit('error', err); - } - } - }); - - if (!notified) { - req.onError(err); - } - } - } - - /** - * Internal method to transfer globalQueue items to this context's - * defQueue. - */ - function takeGlobalQueue() { - //Push all the globalDefQueue items into the context's defQueue - if (globalDefQueue.length) { - //Array splice in the values since the context code has a - //local var ref to defQueue, so cannot just reassign the one - //on context. - apsp.apply(defQueue, - [defQueue.length, 0].concat(globalDefQueue)); - globalDefQueue = []; - } - } - - handlers = { - 'require': function (mod) { - if (mod.require) { - return mod.require; - } else { - return (mod.require = context.makeRequire(mod.map)); - } - }, - 'exports': function (mod) { - mod.usingExports = true; - if (mod.map.isDefine) { - if (mod.exports) { - return (defined[mod.map.id] = mod.exports); - } else { - return (mod.exports = defined[mod.map.id] = {}); - } - } - }, - 'module': function (mod) { - if (mod.module) { - return mod.module; - } else { - return (mod.module = { - id: mod.map.id, - uri: mod.map.url, - config: function () { - return getOwn(config.config, mod.map.id) || {}; - }, - exports: mod.exports || (mod.exports = {}) - }); - } - } - }; - - function cleanRegistry(id) { - //Clean up machinery used for waiting modules. - delete registry[id]; - delete enabledRegistry[id]; - } - - function breakCycle(mod, traced, processed) { - var id = mod.map.id; - - if (mod.error) { - mod.emit('error', mod.error); - } else { - traced[id] = true; - each(mod.depMaps, function (depMap, i) { - var depId = depMap.id, - dep = getOwn(registry, depId); - - //Only force things that have not completed - //being defined, so still in the registry, - //and only if it has not been matched up - //in the module already. - if (dep && !mod.depMatched[i] && !processed[depId]) { - if (getOwn(traced, depId)) { - mod.defineDep(i, defined[depId]); - mod.check(); //pass false? - } else { - breakCycle(dep, traced, processed); - } - } - }); - processed[id] = true; - } - } - - function checkLoaded() { - var err, usingPathFallback, - waitInterval = config.waitSeconds * 1000, - //It is possible to disable the wait interval by using waitSeconds of 0. - expired = waitInterval && (context.startTime + waitInterval) < new Date().getTime(), - noLoads = [], - reqCalls = [], - stillLoading = false, - needCycleCheck = true; - - //Do not bother if this call was a result of a cycle break. - if (inCheckLoaded) { - return; - } - - inCheckLoaded = true; - - //Figure out the state of all the modules. - eachProp(enabledRegistry, function (mod) { - var map = mod.map, - modId = map.id; - - //Skip things that are not enabled or in error state. - if (!mod.enabled) { - return; - } - - if (!map.isDefine) { - reqCalls.push(mod); - } - - if (!mod.error) { - //If the module should be executed, and it has not - //been inited and time is up, remember it. - if (!mod.inited && expired) { - if (hasPathFallback(modId)) { - usingPathFallback = true; - stillLoading = true; - } else { - noLoads.push(modId); - removeScript(modId); - } - } else if (!mod.inited && mod.fetched && map.isDefine) { - stillLoading = true; - if (!map.prefix) { - //No reason to keep looking for unfinished - //loading. If the only stillLoading is a - //plugin resource though, keep going, - //because it may be that a plugin resource - //is waiting on a non-plugin cycle. - return (needCycleCheck = false); - } - } - } - }); - - if (expired && noLoads.length) { - //If wait time expired, throw error of unloaded modules. - err = makeError('timeout', 'Load timeout for modules: ' + noLoads, null, noLoads); - err.contextName = context.contextName; - return onError(err); - } - - //Not expired, check for a cycle. - if (needCycleCheck) { - each(reqCalls, function (mod) { - breakCycle(mod, {}, {}); - }); - } - - //If still waiting on loads, and the waiting load is something - //other than a plugin resource, or there are still outstanding - //scripts, then just try back later. - if ((!expired || usingPathFallback) && stillLoading) { - //Something is still waiting to load. Wait for it, but only - //if a timeout is not already in effect. - if ((isBrowser || isWebWorker) && !checkLoadedTimeoutId) { - checkLoadedTimeoutId = setTimeout(function () { - checkLoadedTimeoutId = 0; - checkLoaded(); - }, 50); - } - } - - inCheckLoaded = false; - } - - Module = function (map) { - this.events = getOwn(undefEvents, map.id) || {}; - this.map = map; - this.shim = getOwn(config.shim, map.id); - this.depExports = []; - this.depMaps = []; - this.depMatched = []; - this.pluginMaps = {}; - this.depCount = 0; - - /* this.exports this.factory - this.depMaps = [], - this.enabled, this.fetched - */ - }; - - Module.prototype = { - init: function (depMaps, factory, errback, options) { - options = options || {}; - - //Do not do more inits if already done. Can happen if there - //are multiple define calls for the same module. That is not - //a normal, common case, but it is also not unexpected. - if (this.inited) { - return; - } - - this.factory = factory; - - if (errback) { - //Register for errors on this module. - this.on('error', errback); - } else if (this.events.error) { - //If no errback already, but there are error listeners - //on this module, set up an errback to pass to the deps. - errback = bind(this, function (err) { - this.emit('error', err); - }); - } - - //Do a copy of the dependency array, so that - //source inputs are not modified. For example - //"shim" deps are passed in here directly, and - //doing a direct modification of the depMaps array - //would affect that config. - this.depMaps = depMaps && depMaps.slice(0); - - this.errback = errback; - - //Indicate this module has be initialized - this.inited = true; - - this.ignore = options.ignore; - - //Could have option to init this module in enabled mode, - //or could have been previously marked as enabled. However, - //the dependencies are not known until init is called. So - //if enabled previously, now trigger dependencies as enabled. - if (options.enabled || this.enabled) { - //Enable this module and dependencies. - //Will call this.check() - this.enable(); - } else { - this.check(); - } - }, - - defineDep: function (i, depExports) { - //Because of cycles, defined callback for a given - //export can be called more than once. - if (!this.depMatched[i]) { - this.depMatched[i] = true; - this.depCount -= 1; - this.depExports[i] = depExports; - } - }, - - fetch: function () { - if (this.fetched) { - return; - } - this.fetched = true; - - context.startTime = (new Date()).getTime(); - - var map = this.map; - - //If the manager is for a plugin managed resource, - //ask the plugin to load it now. - if (this.shim) { - context.makeRequire(this.map, { - enableBuildCallback: true - })(this.shim.deps || [], bind(this, function () { - return map.prefix ? this.callPlugin() : this.load(); - })); - } else { - //Regular dependency. - return map.prefix ? this.callPlugin() : this.load(); - } - }, - - load: function () { - var url = this.map.url; - - //Regular dependency. - if (!urlFetched[url]) { - urlFetched[url] = true; - context.load(this.map.id, url); - } - }, - - /** - * Checks if the module is ready to define itself, and if so, - * define it. - */ - check: function () { - if (!this.enabled || this.enabling) { - return; - } - - var err, cjsModule, - id = this.map.id, - depExports = this.depExports, - exports = this.exports, - factory = this.factory; - - if (!this.inited) { - this.fetch(); - } else if (this.error) { - this.emit('error', this.error); - } else if (!this.defining) { - //The factory could trigger another require call - //that would result in checking this module to - //define itself again. If already in the process - //of doing that, skip this work. - this.defining = true; - - if (this.depCount < 1 && !this.defined) { - if (isFunction(factory)) { - //If there is an error listener, favor passing - //to that instead of throwing an error. However, - //only do it for define()'d modules. require - //errbacks should not be called for failures in - //their callbacks (#699). However if a global - //onError is set, use that. - if ((this.events.error && this.map.isDefine) || - req.onError !== defaultOnError) { - try { - exports = context.execCb(id, factory, depExports, exports); - } catch (e) { - err = e; - } - } else { - exports = context.execCb(id, factory, depExports, exports); - } - - // Favor return value over exports. If node/cjs in play, - // then will not have a return value anyway. Favor - // module.exports assignment over exports object. - if (this.map.isDefine && exports === undefined) { - cjsModule = this.module; - if (cjsModule) { - exports = cjsModule.exports; - } else if (this.usingExports) { - //exports already set the defined value. - exports = this.exports; - } - } - - if (err) { - err.requireMap = this.map; - err.requireModules = this.map.isDefine ? [this.map.id] : null; - err.requireType = this.map.isDefine ? 'define' : 'require'; - return onError((this.error = err)); - } - - } else { - //Just a literal value - exports = factory; - } - - this.exports = exports; - - if (this.map.isDefine && !this.ignore) { - defined[id] = exports; - - if (req.onResourceLoad) { - req.onResourceLoad(context, this.map, this.depMaps); - } - } - - //Clean up - cleanRegistry(id); - - this.defined = true; - } - - //Finished the define stage. Allow calling check again - //to allow define notifications below in the case of a - //cycle. - this.defining = false; - - if (this.defined && !this.defineEmitted) { - this.defineEmitted = true; - this.emit('defined', this.exports); - this.defineEmitComplete = true; - } - - } - }, - - callPlugin: function () { - var map = this.map, - id = map.id, - //Map already normalized the prefix. - pluginMap = makeModuleMap(map.prefix); - - //Mark this as a dependency for this plugin, so it - //can be traced for cycles. - this.depMaps.push(pluginMap); - - on(pluginMap, 'defined', bind(this, function (plugin) { - var load, normalizedMap, normalizedMod, - bundleId = getOwn(bundlesMap, this.map.id), - name = this.map.name, - parentName = this.map.parentMap ? this.map.parentMap.name : null, - localRequire = context.makeRequire(map.parentMap, { - enableBuildCallback: true - }); - - //If current map is not normalized, wait for that - //normalized name to load instead of continuing. - if (this.map.unnormalized) { - //Normalize the ID if the plugin allows it. - if (plugin.normalize) { - name = plugin.normalize(name, function (name) { - return normalize(name, parentName, true); - }) || ''; - } - - //prefix and name should already be normalized, no need - //for applying map config again either. - normalizedMap = makeModuleMap(map.prefix + '!' + name, - this.map.parentMap); - on(normalizedMap, - 'defined', bind(this, function (value) { - this.init([], function () { return value; }, null, { - enabled: true, - ignore: true - }); - })); - - normalizedMod = getOwn(registry, normalizedMap.id); - if (normalizedMod) { - //Mark this as a dependency for this plugin, so it - //can be traced for cycles. - this.depMaps.push(normalizedMap); - - if (this.events.error) { - normalizedMod.on('error', bind(this, function (err) { - this.emit('error', err); - })); - } - normalizedMod.enable(); - } - - return; - } - - //If a paths config, then just load that file instead to - //resolve the plugin, as it is built into that paths layer. - if (bundleId) { - this.map.url = context.nameToUrl(bundleId); - this.load(); - return; - } - - load = bind(this, function (value) { - this.init([], function () { return value; }, null, { - enabled: true - }); - }); - - load.error = bind(this, function (err) { - this.inited = true; - this.error = err; - err.requireModules = [id]; - - //Remove temp unnormalized modules for this module, - //since they will never be resolved otherwise now. - eachProp(registry, function (mod) { - if (mod.map.id.indexOf(id + '_unnormalized') === 0) { - cleanRegistry(mod.map.id); - } - }); - - onError(err); - }); - - //Allow plugins to load other code without having to know the - //context or how to 'complete' the load. - load.fromText = bind(this, function (text, textAlt) { - /*jslint evil: true */ - var moduleName = map.name, - moduleMap = makeModuleMap(moduleName), - hasInteractive = useInteractive; - - //As of 2.1.0, support just passing the text, to reinforce - //fromText only being called once per resource. Still - //support old style of passing moduleName but discard - //that moduleName in favor of the internal ref. - if (textAlt) { - text = textAlt; - } - - //Turn off interactive script matching for IE for any define - //calls in the text, then turn it back on at the end. - if (hasInteractive) { - useInteractive = false; - } - - //Prime the system by creating a module instance for - //it. - getModule(moduleMap); - - //Transfer any config to this other module. - if (hasProp(config.config, id)) { - config.config[moduleName] = config.config[id]; - } - - try { - req.exec(text); - } catch (e) { - return onError(makeError('fromtexteval', - 'fromText eval for ' + id + - ' failed: ' + e, - e, - [id])); - } - - if (hasInteractive) { - useInteractive = true; - } - - //Mark this as a dependency for the plugin - //resource - this.depMaps.push(moduleMap); - - //Support anonymous modules. - context.completeLoad(moduleName); - - //Bind the value of that module to the value for this - //resource ID. - localRequire([moduleName], load); - }); - - //Use parentName here since the plugin's name is not reliable, - //could be some weird string with no path that actually wants to - //reference the parentName's path. - plugin.load(map.name, localRequire, load, config); - })); - - context.enable(pluginMap, this); - this.pluginMaps[pluginMap.id] = pluginMap; - }, - - enable: function () { - enabledRegistry[this.map.id] = this; - this.enabled = true; - - //Set flag mentioning that the module is enabling, - //so that immediate calls to the defined callbacks - //for dependencies do not trigger inadvertent load - //with the depCount still being zero. - this.enabling = true; - - //Enable each dependency - each(this.depMaps, bind(this, function (depMap, i) { - var id, mod, handler; - - if (typeof depMap === 'string') { - //Dependency needs to be converted to a depMap - //and wired up to this module. - depMap = makeModuleMap(depMap, - (this.map.isDefine ? this.map : this.map.parentMap), - false, - !this.skipMap); - this.depMaps[i] = depMap; - - handler = getOwn(handlers, depMap.id); - - if (handler) { - this.depExports[i] = handler(this); - return; - } - - this.depCount += 1; - - on(depMap, 'defined', bind(this, function (depExports) { - this.defineDep(i, depExports); - this.check(); - })); - - if (this.errback) { - on(depMap, 'error', bind(this, this.errback)); - } - } - - id = depMap.id; - mod = registry[id]; - - //Skip special modules like 'require', 'exports', 'module' - //Also, don't call enable if it is already enabled, - //important in circular dependency cases. - if (!hasProp(handlers, id) && mod && !mod.enabled) { - context.enable(depMap, this); - } - })); - - //Enable each plugin that is used in - //a dependency - eachProp(this.pluginMaps, bind(this, function (pluginMap) { - var mod = getOwn(registry, pluginMap.id); - if (mod && !mod.enabled) { - context.enable(pluginMap, this); - } - })); - - this.enabling = false; - - this.check(); - }, - - on: function (name, cb) { - var cbs = this.events[name]; - if (!cbs) { - cbs = this.events[name] = []; - } - cbs.push(cb); - }, - - emit: function (name, evt) { - each(this.events[name], function (cb) { - cb(evt); - }); - if (name === 'error') { - //Now that the error handler was triggered, remove - //the listeners, since this broken Module instance - //can stay around for a while in the registry. - delete this.events[name]; - } - } - }; - - function callGetModule(args) { - //Skip modules already defined. - if (!hasProp(defined, args[0])) { - getModule(makeModuleMap(args[0], null, true)).init(args[1], args[2]); - } - } - - function removeListener(node, func, name, ieName) { - //Favor detachEvent because of IE9 - //issue, see attachEvent/addEventListener comment elsewhere - //in this file. - if (node.detachEvent && !isOpera) { - //Probably IE. If not it will throw an error, which will be - //useful to know. - if (ieName) { - node.detachEvent(ieName, func); - } - } else { - node.removeEventListener(name, func, false); - } - } - - /** - * Given an event from a script node, get the requirejs info from it, - * and then removes the event listeners on the node. - * @param {Event} evt - * @returns {Object} - */ - function getScriptData(evt) { - //Using currentTarget instead of target for Firefox 2.0's sake. Not - //all old browsers will be supported, but this one was easy enough - //to support and still makes sense. - var node = evt.currentTarget || evt.srcElement; - - //Remove the listeners once here. - removeListener(node, context.onScriptLoad, 'load', 'onreadystatechange'); - removeListener(node, context.onScriptError, 'error'); - - return { - node: node, - id: node && node.getAttribute('data-requiremodule') - }; - } - - function intakeDefines() { - var args; - - //Any defined modules in the global queue, intake them now. - takeGlobalQueue(); - - //Make sure any remaining defQueue items get properly processed. - while (defQueue.length) { - args = defQueue.shift(); - if (args[0] === null) { - return onError(makeError('mismatch', 'Mismatched anonymous define() module: ' + args[args.length - 1])); - } else { - //args are id, deps, factory. Should be normalized by the - //define() function. - callGetModule(args); - } - } - } - - context = { - config: config, - contextName: contextName, - registry: registry, - defined: defined, - urlFetched: urlFetched, - defQueue: defQueue, - Module: Module, - makeModuleMap: makeModuleMap, - nextTick: req.nextTick, - onError: onError, - - /** - * Set a configuration for the context. - * @param {Object} cfg config object to integrate. - */ - configure: function (cfg) { - //Make sure the baseUrl ends in a slash. - if (cfg.baseUrl) { - if (cfg.baseUrl.charAt(cfg.baseUrl.length - 1) !== '/') { - cfg.baseUrl += '/'; - } - } - - //Save off the paths since they require special processing, - //they are additive. - var shim = config.shim, - objs = { - paths: true, - bundles: true, - config: true, - map: true - }; - - eachProp(cfg, function (value, prop) { - if (objs[prop]) { - if (!config[prop]) { - config[prop] = {}; - } - mixin(config[prop], value, true, true); - } else { - config[prop] = value; - } - }); - - //Reverse map the bundles - if (cfg.bundles) { - eachProp(cfg.bundles, function (value, prop) { - each(value, function (v) { - if (v !== prop) { - bundlesMap[v] = prop; - } - }); - }); - } - - //Merge shim - if (cfg.shim) { - eachProp(cfg.shim, function (value, id) { - //Normalize the structure - if (isArray(value)) { - value = { - deps: value - }; - } - if ((value.exports || value.init) && !value.exportsFn) { - value.exportsFn = context.makeShimExports(value); - } - shim[id] = value; - }); - config.shim = shim; - } - - //Adjust packages if necessary. - if (cfg.packages) { - each(cfg.packages, function (pkgObj) { - var location, name; - - pkgObj = typeof pkgObj === 'string' ? { name: pkgObj } : pkgObj; - - name = pkgObj.name; - location = pkgObj.location; - if (location) { - config.paths[name] = pkgObj.location; - } - - //Save pointer to main module ID for pkg name. - //Remove leading dot in main, so main paths are normalized, - //and remove any trailing .js, since different package - //envs have different conventions: some use a module name, - //some use a file name. - config.pkgs[name] = pkgObj.name + '/' + (pkgObj.main || 'main') - .replace(currDirRegExp, '') - .replace(jsSuffixRegExp, ''); - }); - } - - //If there are any "waiting to execute" modules in the registry, - //update the maps for them, since their info, like URLs to load, - //may have changed. - eachProp(registry, function (mod, id) { - //If module already has init called, since it is too - //late to modify them, and ignore unnormalized ones - //since they are transient. - if (!mod.inited && !mod.map.unnormalized) { - mod.map = makeModuleMap(id); - } - }); - - //If a deps array or a config callback is specified, then call - //require with those args. This is useful when require is defined as a - //config object before require.js is loaded. - if (cfg.deps || cfg.callback) { - context.require(cfg.deps || [], cfg.callback); - } - }, - - makeShimExports: function (value) { - function fn() { - var ret; - if (value.init) { - ret = value.init.apply(global, arguments); - } - return ret || (value.exports && getGlobal(value.exports)); - } - return fn; - }, - - makeRequire: function (relMap, options) { - options = options || {}; - - function localRequire(deps, callback, errback) { - var id, map, requireMod; - - if (options.enableBuildCallback && callback && isFunction(callback)) { - callback.__requireJsBuild = true; - } - - if (typeof deps === 'string') { - if (isFunction(callback)) { - //Invalid call - return onError(makeError('requireargs', 'Invalid require call'), errback); - } - - //If require|exports|module are requested, get the - //value for them from the special handlers. Caveat: - //this only works while module is being defined. - if (relMap && hasProp(handlers, deps)) { - return handlers[deps](registry[relMap.id]); - } - - //Synchronous access to one module. If require.get is - //available (as in the Node adapter), prefer that. - if (req.get) { - return req.get(context, deps, relMap, localRequire); - } - - //Normalize module name, if it contains . or .. - map = makeModuleMap(deps, relMap, false, true); - id = map.id; - - if (!hasProp(defined, id)) { - return onError(makeError('notloaded', 'Module name "' + - id + - '" has not been loaded yet for context: ' + - contextName + - (relMap ? '' : '. Use require([])'))); - } - return defined[id]; - } - - //Grab defines waiting in the global queue. - intakeDefines(); - - //Mark all the dependencies as needing to be loaded. - context.nextTick(function () { - //Some defines could have been added since the - //require call, collect them. - intakeDefines(); - - requireMod = getModule(makeModuleMap(null, relMap)); - - //Store if map config should be applied to this require - //call for dependencies. - requireMod.skipMap = options.skipMap; - - requireMod.init(deps, callback, errback, { - enabled: true - }); - - checkLoaded(); - }); - - return localRequire; - } - - mixin(localRequire, { - isBrowser: isBrowser, - - /** - * Converts a module name + .extension into an URL path. - * *Requires* the use of a module name. It does not support using - * plain URLs like nameToUrl. - */ - toUrl: function (moduleNamePlusExt) { - var ext, - index = moduleNamePlusExt.lastIndexOf('.'), - segment = moduleNamePlusExt.split('/')[0], - isRelative = segment === '.' || segment === '..'; - - //Have a file extension alias, and it is not the - //dots from a relative path. - if (index !== -1 && (!isRelative || index > 1)) { - ext = moduleNamePlusExt.substring(index, moduleNamePlusExt.length); - moduleNamePlusExt = moduleNamePlusExt.substring(0, index); - } - - return context.nameToUrl(normalize(moduleNamePlusExt, - relMap && relMap.id, true), ext, true); - }, - - defined: function (id) { - return hasProp(defined, makeModuleMap(id, relMap, false, true).id); - }, - - specified: function (id) { - id = makeModuleMap(id, relMap, false, true).id; - return hasProp(defined, id) || hasProp(registry, id); - } - }); - - //Only allow undef on top level require calls - if (!relMap) { - localRequire.undef = function (id) { - //Bind any waiting define() calls to this context, - //fix for #408 - takeGlobalQueue(); - - var map = makeModuleMap(id, relMap, true), - mod = getOwn(registry, id); - - removeScript(id); - - delete defined[id]; - delete urlFetched[map.url]; - delete undefEvents[id]; - - //Clean queued defines too. Go backwards - //in array so that the splices do not - //mess up the iteration. - eachReverse(defQueue, function(args, i) { - if(args[0] === id) { - defQueue.splice(i, 1); - } - }); - - if (mod) { - //Hold on to listeners in case the - //module will be attempted to be reloaded - //using a different config. - if (mod.events.defined) { - undefEvents[id] = mod.events; - } - - cleanRegistry(id); - } - }; - } - - return localRequire; - }, - - /** - * Called to enable a module if it is still in the registry - * awaiting enablement. A second arg, parent, the parent module, - * is passed in for context, when this method is overridden by - * the optimizer. Not shown here to keep code compact. - */ - enable: function (depMap) { - var mod = getOwn(registry, depMap.id); - if (mod) { - getModule(depMap).enable(); - } - }, - - /** - * Internal method used by environment adapters to complete a load event. - * A load event could be a script load or just a load pass from a synchronous - * load call. - * @param {String} moduleName the name of the module to potentially complete. - */ - completeLoad: function (moduleName) { - var found, args, mod, - shim = getOwn(config.shim, moduleName) || {}, - shExports = shim.exports; - - takeGlobalQueue(); - - while (defQueue.length) { - args = defQueue.shift(); - if (args[0] === null) { - args[0] = moduleName; - //If already found an anonymous module and bound it - //to this name, then this is some other anon module - //waiting for its completeLoad to fire. - if (found) { - break; - } - found = true; - } else if (args[0] === moduleName) { - //Found matching define call for this script! - found = true; - } - - callGetModule(args); - } - - //Do this after the cycle of callGetModule in case the result - //of those calls/init calls changes the registry. - mod = getOwn(registry, moduleName); - - if (!found && !hasProp(defined, moduleName) && mod && !mod.inited) { - if (config.enforceDefine && (!shExports || !getGlobal(shExports))) { - if (hasPathFallback(moduleName)) { - return; - } else { - return onError(makeError('nodefine', - 'No define call for ' + moduleName, - null, - [moduleName])); - } - } else { - //A script that does not call define(), so just simulate - //the call for it. - callGetModule([moduleName, (shim.deps || []), shim.exportsFn]); - } - } - - checkLoaded(); - }, - - /** - * Converts a module name to a file path. Supports cases where - * moduleName may actually be just an URL. - * Note that it **does not** call normalize on the moduleName, - * it is assumed to have already been normalized. This is an - * internal API, not a public one. Use toUrl for the public API. - */ - nameToUrl: function (moduleName, ext, skipExt) { - var paths, syms, i, parentModule, url, - parentPath, bundleId, - pkgMain = getOwn(config.pkgs, moduleName); - - if (pkgMain) { - moduleName = pkgMain; - } - - bundleId = getOwn(bundlesMap, moduleName); - - if (bundleId) { - return context.nameToUrl(bundleId, ext, skipExt); - } - - //If a colon is in the URL, it indicates a protocol is used and it is just - //an URL to a file, or if it starts with a slash, contains a query arg (i.e. ?) - //or ends with .js, then assume the user meant to use an url and not a module id. - //The slash is important for protocol-less URLs as well as full paths. - if (req.jsExtRegExp.test(moduleName)) { - //Just a plain path, not module name lookup, so just return it. - //Add extension if it is included. This is a bit wonky, only non-.js things pass - //an extension, this method probably needs to be reworked. - url = moduleName + (ext || ''); - } else { - //A module that needs to be converted to a path. - paths = config.paths; - - syms = moduleName.split('/'); - //For each module name segment, see if there is a path - //registered for it. Start with most specific name - //and work up from it. - for (i = syms.length; i > 0; i -= 1) { - parentModule = syms.slice(0, i).join('/'); - - parentPath = getOwn(paths, parentModule); - if (parentPath) { - //If an array, it means there are a few choices, - //Choose the one that is desired - if (isArray(parentPath)) { - parentPath = parentPath[0]; - } - syms.splice(0, i, parentPath); - break; - } - } - - //Join the path parts together, then figure out if baseUrl is needed. - url = syms.join('/'); - url += (ext || (/^data:|\?/.test(url) || skipExt ? '' : '.js')); - url = (url.charAt(0) === '/' || url.match(/^[\w+.\-]+:/) ? '' : config.baseUrl) + url; - } - - return config.urlArgs ? url + - ((url.indexOf('?') === -1 ? '?' : '&') + - config.urlArgs) : url; - }, - - //Delegates to req.load. Broken out as a separate function to - //allow overriding in the optimizer. - load: function (id, url) { - req.load(context, id, url); - }, - - /** - * Executes a module callback function. Broken out as a separate function - * solely to allow the build system to sequence the files in the built - * layer in the right sequence. - * - * @private - */ - execCb: function (name, callback, args, exports) { - return callback.apply(exports, args); - }, - - /** - * callback for script loads, used to check status of loading. - * - * @param {Event} evt the event from the browser for the script - * that was loaded. - */ - onScriptLoad: function (evt) { - //Using currentTarget instead of target for Firefox 2.0's sake. Not - //all old browsers will be supported, but this one was easy enough - //to support and still makes sense. - if (evt.type === 'load' || - (readyRegExp.test((evt.currentTarget || evt.srcElement).readyState))) { - //Reset interactive script so a script node is not held onto for - //to long. - interactiveScript = null; - - //Pull out the name of the module and the context. - var data = getScriptData(evt); - context.completeLoad(data.id); - } - }, - - /** - * Callback for script errors. - */ - onScriptError: function (evt) { - var data = getScriptData(evt); - if (!hasPathFallback(data.id)) { - return onError(makeError('scripterror', 'Script error for: ' + data.id, evt, [data.id])); - } - } - }; - - context.require = context.makeRequire(); - return context; - } - - /** - * Main entry point. - * - * If the only argument to require is a string, then the module that - * is represented by that string is fetched for the appropriate context. - * - * If the first argument is an array, then it will be treated as an array - * of dependency string names to fetch. An optional function callback can - * be specified to execute when all of those dependencies are available. - * - * Make a local req variable to help Caja compliance (it assumes things - * on a require that are not standardized), and to give a short - * name for minification/local scope use. - */ - req = requirejs = function (deps, callback, errback, optional) { - - //Find the right context, use default - var context, config, - contextName = defContextName; - - // Determine if have config object in the call. - if (!isArray(deps) && typeof deps !== 'string') { - // deps is a config object - config = deps; - if (isArray(callback)) { - // Adjust args if there are dependencies - deps = callback; - callback = errback; - errback = optional; - } else { - deps = []; - } - } - - if (config && config.context) { - contextName = config.context; - } - - context = getOwn(contexts, contextName); - if (!context) { - context = contexts[contextName] = req.s.newContext(contextName); - } - - if (config) { - context.configure(config); - } - - return context.require(deps, callback, errback); - }; - - /** - * Support require.config() to make it easier to cooperate with other - * AMD loaders on globally agreed names. - */ - req.config = function (config) { - return req(config); - }; - - /** - * Execute something after the current tick - * of the event loop. Override for other envs - * that have a better solution than setTimeout. - * @param {Function} fn function to execute later. - */ - req.nextTick = typeof setTimeout !== 'undefined' ? function (fn) { - setTimeout(fn, 4); - } : function (fn) { fn(); }; - - /** - * Export require as a global, but only if it does not already exist. - */ - if (!require) { - require = req; - } - - req.version = version; - - //Used to filter out dependencies that are already paths. - req.jsExtRegExp = /^\/|:|\?|\.js$/; - req.isBrowser = isBrowser; - s = req.s = { - contexts: contexts, - newContext: newContext - }; - - //Create default context. - req({}); - - //Exports some context-sensitive methods on global require. - each([ - 'toUrl', - 'undef', - 'defined', - 'specified' - ], function (prop) { - //Reference from contexts instead of early binding to default context, - //so that during builds, the latest instance of the default context - //with its config gets used. - req[prop] = function () { - var ctx = contexts[defContextName]; - return ctx.require[prop].apply(ctx, arguments); - }; - }); - - if (isBrowser) { - head = s.head = document.getElementsByTagName('head')[0]; - //If BASE tag is in play, using appendChild is a problem for IE6. - //When that browser dies, this can be removed. Details in this jQuery bug: - //http://dev.jquery.com/ticket/2709 - baseElement = document.getElementsByTagName('base')[0]; - if (baseElement) { - head = s.head = baseElement.parentNode; - } - } - - /** - * Any errors that require explicitly generates will be passed to this - * function. Intercept/override it if you want custom error handling. - * @param {Error} err the error object. - */ - req.onError = defaultOnError; - - /** - * Creates the node for the load command. Only used in browser envs. - */ - req.createNode = function (config, moduleName, url) { - var node = config.xhtml ? - document.createElementNS('http://www.w3.org/1999/xhtml', 'html:script') : - document.createElement('script'); - node.type = config.scriptType || 'text/javascript'; - node.charset = 'utf-8'; - node.async = true; - return node; - }; - - /** - * Does the request to load a module for the browser case. - * Make this a separate function to allow other environments - * to override it. - * - * @param {Object} context the require context to find state. - * @param {String} moduleName the name of the module. - * @param {Object} url the URL to the module. - */ - req.load = function (context, moduleName, url) { - var config = (context && context.config) || {}, - node; - if (isBrowser) { - //In the browser so use a script tag - node = req.createNode(config, moduleName, url); - - node.setAttribute('data-requirecontext', context.contextName); - node.setAttribute('data-requiremodule', moduleName); - - //Set up load listener. Test attachEvent first because IE9 has - //a subtle issue in its addEventListener and script onload firings - //that do not match the behavior of all other browsers with - //addEventListener support, which fire the onload event for a - //script right after the script execution. See: - //https://connect.microsoft.com/IE/feedback/details/648057/script-onload-event-is-not-fired-immediately-after-script-execution - //UNFORTUNATELY Opera implements attachEvent but does not follow the script - //script execution mode. - if (node.attachEvent && - //Check if node.attachEvent is artificially added by custom script or - //natively supported by browser - //read https://github.com/jrburke/requirejs/issues/187 - //if we can NOT find [native code] then it must NOT natively supported. - //in IE8, node.attachEvent does not have toString() - //Note the test for "[native code" with no closing brace, see: - //https://github.com/jrburke/requirejs/issues/273 - !(node.attachEvent.toString && node.attachEvent.toString().indexOf('[native code') < 0) && - !isOpera) { - //Probably IE. IE (at least 6-8) do not fire - //script onload right after executing the script, so - //we cannot tie the anonymous define call to a name. - //However, IE reports the script as being in 'interactive' - //readyState at the time of the define call. - useInteractive = true; - - node.attachEvent('onreadystatechange', context.onScriptLoad); - //It would be great to add an error handler here to catch - //404s in IE9+. However, onreadystatechange will fire before - //the error handler, so that does not help. If addEventListener - //is used, then IE will fire error before load, but we cannot - //use that pathway given the connect.microsoft.com issue - //mentioned above about not doing the 'script execute, - //then fire the script load event listener before execute - //next script' that other browsers do. - //Best hope: IE10 fixes the issues, - //and then destroys all installs of IE 6-9. - //node.attachEvent('onerror', context.onScriptError); - } else { - node.addEventListener('load', context.onScriptLoad, false); - node.addEventListener('error', context.onScriptError, false); - } - node.src = url; - - //For some cache cases in IE 6-8, the script executes before the end - //of the appendChild execution, so to tie an anonymous define - //call to the module name (which is stored on the node), hold on - //to a reference to this node, but clear after the DOM insertion. - currentlyAddingScript = node; - if (baseElement) { - head.insertBefore(node, baseElement); - } else { - head.appendChild(node); - } - currentlyAddingScript = null; - - return node; - } else if (isWebWorker) { - try { - //In a web worker, use importScripts. This is not a very - //efficient use of importScripts, importScripts will block until - //its script is downloaded and evaluated. However, if web workers - //are in play, the expectation that a build has been done so that - //only one script needs to be loaded anyway. This may need to be - //reevaluated if other use cases become common. - importScripts(url); - - //Account for anonymous modules - context.completeLoad(moduleName); - } catch (e) { - context.onError(makeError('importscripts', - 'importScripts failed for ' + - moduleName + ' at ' + url, - e, - [moduleName])); - } - } - }; - - function getInteractiveScript() { - if (interactiveScript && interactiveScript.readyState === 'interactive') { - return interactiveScript; - } - - eachReverse(scripts(), function (script) { - if (script.readyState === 'interactive') { - return (interactiveScript = script); - } - }); - return interactiveScript; - } - - //Look for a data-main script attribute, which could also adjust the baseUrl. - if (isBrowser && !cfg.skipDataMain) { - //Figure out baseUrl. Get it from the script tag with require.js in it. - eachReverse(scripts(), function (script) { - //Set the 'head' where we can append children by - //using the script's parent. - if (!head) { - head = script.parentNode; - } - - //Look for a data-main attribute to set main script for the page - //to load. If it is there, the path to data main becomes the - //baseUrl, if it is not already set. - dataMain = script.getAttribute('data-main'); - if (dataMain) { - //Preserve dataMain in case it is a path (i.e. contains '?') - mainScript = dataMain; - - //Set final baseUrl if there is not already an explicit one. - if (!cfg.baseUrl) { - //Pull off the directory of data-main for use as the - //baseUrl. - src = mainScript.split('/'); - mainScript = src.pop(); - subPath = src.length ? src.join('/') + '/' : './'; - - cfg.baseUrl = subPath; - } - - //Strip off any trailing .js since mainScript is now - //like a module name. - mainScript = mainScript.replace(jsSuffixRegExp, ''); - - //If mainScript is still a path, fall back to dataMain - if (req.jsExtRegExp.test(mainScript)) { - mainScript = dataMain; - } - - //Put the data-main script in the files to load. - cfg.deps = cfg.deps ? cfg.deps.concat(mainScript) : [mainScript]; - - return true; - } - }); - } - - /** - * The function that handles definitions of modules. Differs from - * require() in that a string for the module should be the first argument, - * and the function to execute after dependencies are loaded should - * return a value to define the module corresponding to the first argument's - * name. - */ - define = function (name, deps, callback) { - var node, context; - - //Allow for anonymous modules - if (typeof name !== 'string') { - //Adjust args appropriately - callback = deps; - deps = name; - name = null; - } - - //This module may not have dependencies - if (!isArray(deps)) { - callback = deps; - deps = null; - } - - //If no name, and callback is a function, then figure out if it a - //CommonJS thing with dependencies. - if (!deps && isFunction(callback)) { - deps = []; - //Remove comments from the callback string, - //look for require calls, and pull them into the dependencies, - //but only if there are function args. - if (callback.length) { - callback - .toString() - .replace(commentRegExp, '') - .replace(cjsRequireRegExp, function (match, dep) { - deps.push(dep); - }); - - //May be a CommonJS thing even without require calls, but still - //could use exports, and module. Avoid doing exports and module - //work though if it just needs require. - //REQUIRES the function to expect the CommonJS variables in the - //order listed below. - deps = (callback.length === 1 ? ['require'] : ['require', 'exports', 'module']).concat(deps); - } - } - - //If in IE 6-8 and hit an anonymous define() call, do the interactive - //work. - if (useInteractive) { - node = currentlyAddingScript || getInteractiveScript(); - if (node) { - if (!name) { - name = node.getAttribute('data-requiremodule'); - } - context = contexts[node.getAttribute('data-requirecontext')]; - } - } - - //Always save off evaluating the def call until the script onload handler. - //This allows multiple modules to be in a file without prematurely - //tracing dependencies, and allows for anonymous module support, - //where the module name is not known until the script onload event - //occurs. If no context, use the global queue, and get it processed - //in the onscript load callback. - (context ? context.defQueue : globalDefQueue).push([name, deps, callback]); - }; - - define.amd = { - jQuery: true - }; - - - /** - * Executes the text. Normally just uses eval, but can be modified - * to use a better, environment-specific call. Only used for transpiling - * loader plugins, not for plain JS modules. - * @param {String} text the text to execute/evaluate. - */ - req.exec = function (text) { - /*jslint evil: true */ - return eval(text); - }; - - //Set up with config info. - req(cfg); -}(this)); diff --git a/admin-panel/app/views/menuView.js b/admin-panel/app/views/menuView.js deleted file mode 100755 index 5f84afb1..00000000 --- a/admin-panel/app/views/menuView.js +++ /dev/null @@ -1,190 +0,0 @@ -var http = require('http'); -var domain = "127.0.0.1"; -var playerChart; -var AUTH_CODE = "rCh9yvT7WL4Q1TG6ySxlOB8At19jvDdb"; - -var fetchInfo = function(callback) { - var options = { - host: domain, - path: '/admin/info', - port: '8080', - headers: { 'X-AdminKey': AUTH_CODE} - }; - - var req = http.request(options, function(res) { - if (res.statusCode == 401) { - alert("Auth failed with server!"); - process.exit(); - return; - } - - var data = ''; - res.on('data', function(chunk) { - data += chunk; - }); - - res.on('end', function() { - var info = JSON.parse(data); - callback(info); - }); - }); - req.on('error', function(e) { - alert("Could not connect to server!\n" + e); - process.exit(); - }); - req.end(); -}; - -var fetchServers = function(callback) { - var options = { - host: domain, - path: '/admin/servers', - port: '8080', - headers: { 'X-AdminKey': AUTH_CODE} - }; - - var req = http.request(options, function(res) { - if (res.statusCode == 401) { - alert("Auth failed with server!"); - process.exit(); - return; - } - - var data = ''; - res.on('data', function(chunk) { - data += chunk; - }); - - res.on('end', function() { - var info = JSON.parse(data); - callback(info); - }); - }); - req.on('error', function(e) { - alert("Could not connect to server!\n" + e); - process.exit(); - }); - req.end(); -}; - - - -var updateChart = function() { - fetchInfo(function(info) { - var date = new Date(); - var time = date.getHours() + ":" + date.getMinutes(); - - playerChart.addData([info.playersInQueue], time); - }); -}; - -var toStream = function(level) { - switch (level) { - case 0: - return 'Test'; - case 1: - return 'Alpha'; - case 2: - return 'Beta'; - case 3: - return 'Buffered'; - case 4: - return 'Live'; - default: - return 'UNKNOWN'; - } -}; - -var toQueue = function(queue) { - switch (queue) { - case 1: - return 'Original'; - case 2: - return 'Laser'; - case 3: - return 'Weapon Select'; - case 4: - return '2v2 Weapon Select'; - case 5: - return 'Dash'; - case 6: - return 'Tutorial'; - case 7: - return 'Boomerrang'; - case 8: - return 'Ranked'; - case 254: - return 'Test'; - default: - return 'UNKNOWN'; - } -}; - -var updateServers = function() { - var list = $('#server-list'); - fetchServers(function(servers) { - list.empty(); - servers.forEach(function(server) { - var html = '
  • ' + - '
    ' + - '

    Name: ' + server.config.internal_name + '

    ' + - '

    ID: ' + server.config.id + '

    ' + - '

    Stream: ' + toStream(server.config.streamLevel) + '

    ' + - '

    Queue: ' + toQueue(server.config.queueServing) + '

    ' + - '
    ' + - '
    ' + - '

    IP: ' + server.config.ip + '

    ' + - '

    Port: ' + server.config.port + '

    ' + - '

    Match Count: ' + (server.config.server ? server.config.server.matchCount : 'offline') + '

    ' + - '

    Player Count: ' + (server.config.server ? server.config.server.playerCount : 'offline') + '

    ' + - '
    ' + - '
    ' + - '
    ' + - '
    ' + - '
    ' + - '
  • '; - - var element = $.parseHTML(html); - list.append(element); - }); - }); -}; - -$(document).ready(function() { - $('#loginLoading').foundation('reveal', 'open'); - - fetchInfo(function(info) { - var ctx = $('#playersOnline').get(0).getContext("2d"); - - var date = new Date(); - var time = date.getHours() + ":" + date.getMinutes(); - - var data = { - labels: [ time ], - datasets: [ - { - label: time, - fillColor: "rgba(220,220,220,0.2)", - strokeColor: "rgba(220,220,220,1)", - pointColor: "rgba(220,220,220,1)", - pointStrokeColor: "#fff", - pointHighlightFill: "#fff", - pointHighlightStroke: "rgba(220,220,220,1)", - data: [info.playersInQueue] - } - ] - }; - - playerChart = new Chart(ctx).Line(data, { - bezierCurve: false - }); - - $('#matches').text('Matches: ' + info.matchCount); - $('#serverCount').text('Servers: ' + info.connectedServers); - - setInterval(updateChart, 60000); - setInterval(updateServers, 10000); - - $('#loginLoading').foundation('reveal', 'close'); - }) -}); \ No newline at end of file diff --git a/admin-panel/bower.json b/admin-panel/bower.json deleted file mode 100755 index 50cd3b49..00000000 --- a/admin-panel/bower.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "name": "Project Ghost Launcher", - "version": "0.0.1a", - "homepage": "https://github.com/hypereddie/Ghost-Shadow-Warrior-Phantom-Assault-DX", - "authors": [ - "Cat In Cup" - ], - "description": "Launches the main game", - "main": "index.html", - "moduleType": [ - "es6", - "globals", - "node" - ], - "license": "MIT", - "ignore": [ - "**/.*", - "node_modules", - "bower_components", - "test", - "tests" - ], - "dependencies": { - "foundation": "~5.5.1", - "fontawesome": "~4.3.0", - "loaders.css": "0.0.2", - "Chart.js": "~1.0.2" - } -} diff --git a/admin-panel/gulpfile.js b/admin-panel/gulpfile.js deleted file mode 100755 index 0f721834..00000000 --- a/admin-panel/gulpfile.js +++ /dev/null @@ -1,5 +0,0 @@ -'use strict'; - -require('./tasks/build'); -require('./tasks/start'); -require('./tasks/release'); \ No newline at end of file diff --git a/admin-panel/os/icon.png b/admin-panel/os/icon.png deleted file mode 100755 index 455648f813acf28d93802eee10ee860ca23296ec..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 60886 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�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 diff --git a/admin-panel/os/linux/DEBIAN/control b/admin-panel/os/linux/DEBIAN/control deleted file mode 100755 index d989bfb6..00000000 --- a/admin-panel/os/linux/DEBIAN/control +++ /dev/null @@ -1,7 +0,0 @@ -Package: {{name}} -Version: {{version}} -Maintainer: {{author}} -Priority: optional -Architecture: amd64 -Installed-Size: {{size}} -Description: {{description}} diff --git a/admin-panel/os/linux/app.desktop b/admin-panel/os/linux/app.desktop deleted file mode 100755 index 0e9c926c..00000000 --- a/admin-panel/os/linux/app.desktop +++ /dev/null @@ -1,10 +0,0 @@ -[Desktop Entry] -Version=1.0 -Type=Application -Encoding=UTF-8 -Name={{prettyName}} -Comment={{description}} -Exec=/opt/{{name}}/nw -Icon=/opt/{{name}}/icon.png -Terminal=false -Categories=Application; \ No newline at end of file diff --git a/admin-panel/os/osx/Info.plist b/admin-panel/os/osx/Info.plist deleted file mode 100755 index 28460d05..00000000 --- a/admin-panel/os/osx/Info.plist +++ /dev/null @@ -1,34 +0,0 @@ - - - - - CFBundleDevelopmentRegion - en - CFBundleDisplayName - {{prettyName}} - CFBundleExecutable - nwjs - CFBundleIconFile - icon.icns - CFBundleIdentifier - com.intel.nw - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - {{prettyName}} - CFBundlePackageType - APPL - CFBundleShortVersionString - {{version}} - CFBundleVersion - {{version}} - LSFileQuarantineEnabled - - LSMinimumSystemVersion - 10.6.0 - NSPrincipalClass - NSApplication - NSSupportsAutomaticGraphicsSwitching - - - diff --git a/admin-panel/os/osx/appdmg.json b/admin-panel/os/osx/appdmg.json deleted file mode 100755 index 3b6d9806..00000000 --- a/admin-panel/os/osx/appdmg.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "title": "{{prettyName}}", - "icon": "{{dmgIcon}}", - "background": "{{dmgBackground}}", - "icon-size": 128, - "contents": [ - { "x": 410, "y": 220, "type": "link", "path": "/Applications" }, - { "x": 130, "y": 220, "type": "file", "path": "{{appPath}}" } - ] -} diff --git a/admin-panel/os/osx/dmg-background.png b/admin-panel/os/osx/dmg-background.png deleted file mode 100755 index 90deafab1b399f2e89e06732171be0549966c935..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 26130 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

    {M%nNkbLpsyQ9sJ+;!;DW#h^ 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ΠKWe`+)pk7biY$k%!5@0)|#asHv%>Jp5v)p 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 TQzk?OAbzTfnhN!DmJ$CC)r8~Z diff --git a/admin-panel/os/osx/dmg-icon.icns b/admin-panel/os/osx/dmg-icon.icns deleted file mode 100755 index ef0c701dedc4db96947dbf310d399f7e1a714746..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 76075 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 diff --git a/admin-panel/os/osx/icon.icns b/admin-panel/os/osx/icon.icns deleted file mode 100755 index dca12edf496ebff7617d30a07132b4a150360370..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 244756 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⩔KCH^06x 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%0AZiz0RJ0)dO{+-;5@AD8;VsxtXw zTE8TJW-*wqt;V1iL%Fc1CiEe~c~$|`>-XvpoLJg5TtP`f<&fA*{FV+jL=nVLmSpJj zdR9_%7B%#hYbZqzI5#88f!zW2+hxfg6M3N4`hbV%{?Wr>;*|U}v|os+TYWLK3}_0z zfAkI$TsGKKnC$H;HKcUs>!{@8x300pk}n1#-wb~R=1z1+XFu@3{J?h4q>A?Mh4xT- z9CNKRvj9;cyQuWqfaQ7)qg>CU=?bG?{p$wKy1nh}NTXle7Dj+l26Bu(`6I3+*vzwYRPfHb zD=v6Be~(g#)epM#do_4Gd_al`X2@#M?9oS+>VHiKp%@UXxOTs=n%lO=#7G%nW^Fu# zBd#bDJ%eavSnl{0EYjr>@*5x0rYyX!ch7I;fP?#0A3UWa!_}4YF}=@f`L;+8VOG4_ zhSz!v;%yo$R{g|pNm7M+yxhDV{+x2!A0t zS&iZ7Lr`TA4o_3I*t09@c)r1#!~3@kD@ZGW+i)M-^0%wCGnv~^4X8fGjkFf#OMuaa z-(G(7TmhH(dqE{aw+i?v~3;9B>#S?2#0Xz1LN(|` zNNtJQCsFl+e38V^YSI=L38s7*Zmh%f;3>~!WS(Q87E988@+%Gc`Xb#mF+cwT?=~vR zJL#nyW^J{U_FCIG!rkJRyV|0r=i7!5J?%ajs_agRof5;;KU<5|m1yN!q<~u6(60~U zj3~d!%I2aUlyW-|N}kpl^@)SrYu&QnP)MS$TX^ClLykT7h!7CQYm2dT(8VueAnVpz z&~sZi$Qo-IP&eLHMSfhWr{1!`WpI4OQ9L(4X_yW+XW&dUdd@!Y4!UsulO$BE;ugn4 zY>?c(60gjeVh#bs2AQq+Y>^%-zdacw)4jwMM)a>H7q@<_p>o}DHs%yxD?W)_g=Ez( z9;Kc^GUM9{c#SoqD9%!^^H}(a*|(7LS!wr{_S~_+c7>RrzSERP;;JTQq%^!M`%QvaCEF5v~qj{Is`!BOfHxLL0ey`_tcd<#3uxU zY$Prp+7T?Lr5of+mE|E;={UjVR=nwf{+>{AIvjO+C>1R~9hiV>$F5xtpO`f<|ArP7Pp| z*oafrCGOEYM3uIQ+PhZt^4abBO$mUNX^KXd`Z$jd6)+Wat;)=}^UwRR?M8$1llqlV zir*I{lLPsnHE7=7Q(u$Z1<2GDaBmWEhj*4LlW`>$R?*!qu1G(xx;VuoDd-+FhQhp5 z?wVFa)S?%OxYtapvom%x$X^6tlOwtkPxl=$L%vpY4=y{zc^(L6*GCVrVo(4}kcwrH zavaQ=kR9aCL6?KtzF;R5qUDjeO8QoNVwo`IV)G>z|o(*WVGUt{x?!^G6y z!QxE1LcqJV|9_3g`iEU&gQq8e(xs&mm z+A`59#qla)h>4l9INyAYKGtz`qoyu_zB{=<`fcjg+5@qzcMop#_vn%w`!-24y;?iV z4FK1gWL&O~FVfOpP{y(~VMvwK1#kh8&U6ksum(RZ>V>=;KzpD4-L}ch8#b^!Dq$hqn7!$Y(<>}WZZK)zKry0ucYscf5oOE z)VBydaDdr8OYf$Q9mo7R8=HHtK<9bfnS5u8!AqRHD-Ih%4O3-_BzpzSHHjS(hsE$%diNXD_BEI2{`uE3!Dp&E%|6=KA7?kas5cw_RojHhtFCIN+35k` zfV(S=`qL&~6`qzQG`hE49WsK>;gE4D55$Ea!P1Zw~8RFcj+(1u5=}bz2D(vNT{gj1? zVjP!+dv?@|y>oh5tVXmNshP+D+7i?+tZ2sdCz;hEOOC#nV~o&xGFVu5I9!!AfZs22T6Q{NyBX?_OGYl80{QAqC97()c{mBb>N!TGm2$UI7QJ((^Gzg zXVLMt+H*JopV}iRycnj=IcTtHl_nDNfF{AhM@3%$clxNO-8ChU6vf?Oip@_2Zj4Eh z9-_>;Ipx3A*{=@Y_|iC4k1{FC_`{Kz0Oj)XPVv@-@suBF@(}9o)B?l1vGW3GflfqEr7&CCaDHf?JKQ*2 zHr&6dkD6{EJ+6j7FlJJ#AL*Kq;A3~eJVwsk>mXXoC%FKlSsz93or%n0{mw)*S}OK! z-5|>r|G*n0pLBR!IhO$J|IC!@v|KS+Af5eYZKipO?7e5&M1Af zB;+Lao3OF(_VPwb|LUOT!`~ey_|}!Do`Nq72rywhc_AwFB+(F0ZPycu+}aqZ@An=f zp5`!gh|c}Fjx(k!hIr2XK`z?w)@!IbJr)_R%p{Pl&O0JQmktI%i>b3@8A^B!ArbKf z`(i)clM&)utDd4Bmau?vM;(jYS&h7y5Gc)<1N8{ps;2>_39t^Vsk*D7_uv4l0J+vXi4 zaNW#aA6zXInaSq2q&ZZ+sn z$O1yXEU?~GYMbEm`nk)7S`Gct%C272I}zysQt2?RJ-$8Qj6fGNSgORbS(}b73WQV_ z+Ai#H{S3XRc0baG{x%2W>PV!U9vkA?BHty#&Uz;*wai2fdr^qM##SY=AD%jvo>dUU z9k{--y$U6OKLwLZaKS#sym4uj0n62Q1+JOYA5#~dFKSNUR%yD_I20u|3mY`!st)eNV&!~GwOpe=h_rG?Kx<%QYY9Jr}L6b52RTi@!6>L z4N#go`$wP8eH#~L(XTkW@l7XeAmKlP-=y=%_NUa2uLL3HPMuQ+R`tm_9YEQfMuYEQ zMJQnNk#`Ox_iBzw%eJy*h6qHXbWj3d0t{NOSdJWyqc*L_W141PzKJq;zbR&&fhh+e z6?CIBzDLifOuyw&YBnAcA!TeOPMz$^-rC{8GNl^?(Z~CwD~1zgEpPa6pABd-88Cm6 z7oXRo@ijSZ1+BBzFCtOW9UI+THCnDyGYu`@Sm|eKvwya z=yHu%P6}x)qx1y@Y$E!)?xQo5i%?`>Slu$mKk+lZbr0_u0b;GE$Og`sXO?Hrd3z-> zTyIb~)IL&&??0pZ+HhvvJ_SC_#dx725szsD5_HY?sGhxh?3-mZkMw&@nf`z}MKP#2=)}jemX5Pn%dIs>p*Ir|yI)`*{><(vHYM zBIpY`Ah?BVp;KC!!l33{)Xz4H)A?i15V9d@#meFyaPab@#Ih6VG7G>ry6DAX@p)rK9kPN7#3tPR`Oykyw~RzY zISzKTs}&V4@vn?@t;aQSW)};{R(RjU*D>jD|6wh>HSzECpY?Ug=gwZDE@awxDJrn? zqW6xE8YE@@K+?MkK*y;v0_5fP^~Kd0x-5=p5c{VAH~sm|<=q%-Uxdniw}=u9><-_1 zsv~qW8HifaM0z)L1unEo+6^X2*CcjJK!Cn?w5Xh;=kT+&#qA;JiXcCVY;F|_=2+OI%uNL3k+re@A@Lc04El!x#HErF<}_+ln-22;u?PA&~cV346HbHT-*$tr$hsCwHKGhpbb(Wt%8*&TU?s?}cbSZDHwP>`omF?D!2IU)5-bECS5b>XEcygk!{ZzTeKYe%@S6EZ1# z9hN-wt*yZ$Lz!MQppywB*^9>e5%xkyMJB@zTj1pt>8o4e`WGuzEk5^Fo6L0$(N;){ zbOs{GfA;%X^r0uQMF~+ZPD_uKkaox)&DP*89;ZxFAWxfg8;Y-J1ky3Q%bt3+Wi+~X z@MNnHLI5UG@Nq7+MOG4kIR@uZVwT(1GF~8e=w!G1G0{!}v0OQz91EelBo7Tki4cdw z^`1{ckTEUEifn^9RB5KCln@X^3>NQtn&z<>8_fXm;>CP~5)is>?%g{&j~%OW9eyg zQ0Rv6vvaYMRt?VIf$LNq5#@FSRX2-d9m|A)7-sSOiFKNH66zdbVWkXJK}RB<@1XEA zf}#gMHYKdHLCYMeaPfpnDjP`~0r!pk<9Jdx5Z}yeW>mQC*`|4Kjqs_Vd=M>^uRtj2 z4oLynv28{*b;3ye4*oliSdPZ;s3K>Ub1vZ{Tmj(wdb#baAQj1EB4hrZDx<9|CR|Ra z$RkaNAnlKT*36<~6+5OpD?Mln(65@-9>sa9u}xy^ieqyk;j8qiZm*$$z%8j=&O7&@ zr5d)gdMeg6i$<$|0EdN4JLtOi@;-!d+=^+ z!&H=DDd8vp1a`e`r1O8sr;>tB&c#-bDH|!=e6yKhy1VfrPN^#N& zw5@oJ9wRUD+$zCIva7g9CiCHLttCxaU*KM@n#ld32OA&grpjs7h zWEGeot&-b=7zhpuks@1OKfV8GTV+M-bEhC%WdYpf@<95KkcMlbkT|;|rK19&CEv{+ zA#lz|#o2WFs<#uevLrYwGAMhG0cpTmls6_K$Rrg00TKfx(z;xinCyMvu<~@!Z{m70 zlbw{W5j`w@d}CYL1a(!ljfVvIC?j<5v2G`|Z*`2wXtN)PFw^c%X#*NG<^;+#3%4m2 z?stA_QMD-0ZHl@pw1=l}7_+$Pzo(~5wJ%9o_=XOmN?j_-*5k@KuG9+Q#i6L%S0eZ8 z#>q&_{8xMAWu#|GpDDcsI)m+8^Be3#>Y>~eZXa^LoxYF_r^*^LQ9`GW8$&d0y|70$ z(dV7D>s_#sG0sh9Uf!k(7+0BI2q2`Q@5sQDNR2PGoLCnQ*UG%`A+UgfQw?*5mB0FS zgHw%rYJNU;i6k45exT`Q>EoYy9dxHBwb@76ncKU6bAaRo@~9 z$9}_ArBqq_=XH-IGH&TgwjWVSyBO6P3?JP-+;M!p`H1(X_Gp#xJ9mIM-JJa0TDD`L zgsZ)!{sQ#fk#&}P>&ne-E=cNe$f#|BfYM^6BQ*#I1)Bfoj3U@}UP%sv!2z6TS#0Uh zxR4YuN3OE!2TX+=g#|2#BY9+_hK0N~4(Y2Z(VyBS5>!?Ck00ZAJU~wqdA=63elFBu zndHu4!mknERNUND;Kup2K0bC8eOCJR>KKD|f1 z+eSE%-a>oOfIz~P_P(07ICmu4VhtVTrP8X@+kx|qW4I=S-#bO6iQ2{mc&PG`mkMUcTj5JE-8( zJH}z5@#nOoodu}0zwlFU^7_Jf|F)!0gJ;?srbSGAT9^E%%8e>^qr{VicCSbo24}0D zQCB0%Tz>Hlk@t#DpJ;a4OE!8QRIZcRHigA&Hy{zWCNbWBDgPrzK0kQrqkX0_*# zzt4$uPv5BMKL%_aDtF)*b!*AKCQmt8(?JE%)~3+)S%J2^U{n$GQk-<%TbiDn0T&x) z{-0t?52tPD{g+#yl}?}~sj&_T8gtrNsVZpl@jVABF0=-^?Cn49#vpc#1sP(m0|C1H zjZzBAwB;m$q6q9TC=WhwybrvZ;<5&JVLOEW{{}07H$u&kHZGhd440ChWS~msX0a19 zm3O^VFhbb$u&nSDx|-+TTd}#vrAn-&ME~eozB4*Cf_+Vh%P7SQQ=ZOSkQ^|YZW)Z6 zxenq5i94AS$;ZK(urc`+!O^0L3Z|XE5=xcTQwVezmbK(2VpA?>4ZW<#&%7;=0w1<} ztG$hx2AT&;eK6=oi|zML*1zx5^i$6=6xKJxQkN~c#rRFvkwutosi|he!#NO@3#8?F99;^;Tu9*t?_lX#v8|fKD}6q$?8=+4*gz4oHpnp z5_atvQDj$%A4rZbVjeO*m|Yjrc${)x)1!SAnsNBVtGY?A(c;Z537BDx8nW18d)=r! z_<;~e`CTD^TJM%1PAym0oWbOv-N!6ejHC3|G@L3-0knO|d^=J~{AB{|_B>U{1|`c`eK9!Q-n`yi9AzR$dhHis#B99-D$X7L}&xYe`t8 zWr~Tu)cScb*Tac1JL{xW2wB{=imKS7u6QGs7qIU8HRIzi?x>B#3*K^lPJ@3{!k2+_8;nb)EfrSC{9ff4rNF7F`i*hm5WA#uqaDq zgYQHKlXN@VYoyJ8$$~V>C^ro!G9J1*!BrEcyx6fv+rT3{{pyqnqck%qGRL7qy@m6i zts|i$=yAm{?It1n;^A zpP~qJwFAHt+lm6K-iQh_Gjr%FF|2=a|!U zU}y31iKMb@7o~qVN2}&gdf3Fp0W4-@K==}-VDB31u*kXk*zRp*nsgqn`5iX%_iI^ zITait5MI!1YvtOp6MQtirDFr^t)OF=swV8JGzkOI9rc0QQ{HZYpzr#j65LELy{0ai zSgAYaw9P|Jd*y2*wF^~ZxpDr8uI-BViyee;=3<^QPBxq0Ci}Ujy))8d#G0m@3UHLWJZ#gT0 z@Lw-n16Vu{POi}_2f%sJSg^9IT zQ^(*=t{3Xb6A@kdg!2MWUU4kt_H&&|yxlDNQ2HyZ6_ogmka;*nHiQnjbTX{cWW03l zN>pwiFirWWn|A?a%2|Gu2r7kCxbomtF$kZ|31z6%OTx`@vg=Ssq5{TUKXa*f*A%#~ z2(;EJbHWq9w+A2m)Nuhp%9`&shgJbhKJqSi6u1WhVE!DggEU;umaUlPAg5fTTDXdh z0cT|4KEuyjV{B7?9A_?JV};{tr-raeAonbX+EvBtcq(d?9U@_Rqj zSWD@#v@{QB2GMq00LEuv<)oTh&4V(%nKyz}B`g!fZVO!j_2jn*xUbFWUlB_Um{LcP2 z1POcqiWS-a!zQ^Rv0t9%VA`SL^aK@^e6?2<`KfeXIpxS#!K7;(dg6RW&PBhj)P- z|NFmVQPfGO0P00^T73HMUYj@XVZtIaiv`VcWZ37Yf5$#4;bjjAqd79j2b30!ICfN!)KmTSTHDrn zjBf0;ihLfwf6I)- zVCtIcu;X={hMN8VL-q{U`=ydt9S?CP{?LC#-oyeGP;y>{>)P&ovMS0)RF%r<-NJ^! z0C;?DH*3o;IoT(=WcPlvfGeQQli-*iGrpdF0R(RRT(5M3$SjA3`nW35!Cn8luFOeD z)f0Clk!ZK}NsQl>ta8&=H;zs)nsF_}juD^#b_*_im53*@U!%?}Q__>+uBcxx?Q^q- zHkiwWUHe zDkwk!qCeMm(0of_{Y}H~A#6LeMgJhrk@Kmaq=$dOPajf!r|o~?Hy!9Dn}sASBh0dt zKDbImhZ`{|Rg5v*ybk!YFp{xi9pqIq@ysu_#V$wFOaHZbhnqjopASXb8ZRF5vj1O? z)H|*B>tJO+SfOOr(Cpgr9+TX@%QZO-X>IITsPIO<(2hT#=QsQchA))AcVY%s3^RFS z6`<8%A*1u0O?YmV$u$!rGg)_@)6|1&85xd|LwY#;B&xBF26-|K?$PI>R2JO!J@xwS z4oH3WI4)rIf-t7``dqSjApf+-8pd;kbT{=eioL82 z+0|Oj=5XXwovkaF-x;wMyM%!;Nyf=eXMk-y=gaw6;ccbx$<$a9uA)Ob2*T?#t@3l8 z(x;?Q)uoOk2s=JwrDpb;uw4s`prRd1{{1#ac`V(#BgHC}mGt6FC$oYV{zK1k-lOvX z82Wpq@Wm@2^w?6SERW&5K0X*2`2)0xC#`R4ozhQ@M9g?UFq4$RMTqtWqj)wU+E`7~EcN^rz#|X^c$C%1B$_36*Fu_@6 z@{Lp1p4V%1PoTphfB7Rzb9&pkX|~^6_d4X2^zh$*Qlo-DEJV)Nksyj_d`}qmO^H$P z9kjL=Q@ETm!?Hfk=S}A}S;gg`RPs&$ml%fKgq-*tcR~TDGNDRp>FYfO5oxK?1nipJ z<)VlL;8Q~@@oMheEFAQ?vPmn|OtW9-RN*#(kQHR*ub3WOdh$hMSWH)=VKYRFz5^PI7F9Wqiv2d4GDPcJ)S)q}dkLFS2*F_|v7A7D0@I3!S11gKdjfddG1pj!AetkoZLCa$ zX-c`6==Wdgz62C}B&lk^e~8i^y`2eE(=~hJIUo>v0&y}QkZw!l3VRo=LrWo(+p{rzpD{fkzFgYEaWnFRod{TNzu8sV^XOs= zxr0{YC-9ajG(xex%uoE|{EUO_<+bsY8Mp%=a9mw6mGLgXjwHz`EV8xAgiW6$> zCyQB>P{(wmQs{6|*Uu9O7VGa3rb@W}^L#X-AchAjg+CkV5l-iF*-TSbA(OD5x)HqY zNr!|(t)?SIE|SIlx$lce;sgYLq~7W5oTPWFIepU`66e0n0NcJVpzXAvX_5> zAv&nmbTwvDJx+|OWg!&X(Lh0HMFDU&>$v$0Zc_twsIvRczH3CyR7V3>+k}yKK%?O* z<^1s1p#d-cSsw26_NhQl4oD<9F5 z@G7#tw(j^s@cxTatX@$67>dS@ak4-aLwkF7HMc{p8UrF1*aKOBEgaz^DCGg2h_+i! zViFs7sEPk-_;=jX;(hK%|8+~q;(X9S-CYy2*+kB^sRV(F;P3297{i0_YI4v50w@UU zjB1H%>R90%a7)w5pZ|XV+L%`cRqOo9pY~4hp~gD?f66=Q(6ZE(1pBgRf>MaGVG}_h zzOvbV(2GGIt%|Nh(g8T8?39SVIB#!|1^_lryVSEH#}zAU5!1AMAjPWIA1t=(Tq0)K zXJyY|8UN%4d3++#&x1(%hM^$&Vy#q4u~6ZKuJ+9MUejHY3ipibwp6n8P(qf!?H#c* zs`$Gq$cwM%lqDf{Oru0!rcpCJ8R1nvM>=4JT2vJ1$VM8lh-0D1HYbe&Ww*$L+qtr?ZSeWF^>Nyl+c z`dOW_;-tO&kb!F_o59`@&(DAY0Inh+1`=bqoptZXuB{=2B9b{G{uNl$nmZ>|>q-Bj zpb$KMilq&DAe0U7ZnNg zYc8VuZ^}zoRd^vaTfRGg3{Ws*Av3PGtFbyiNrn^{{IHBb$$nvDz@!YSgLlvbV^Mul zovCM=5q2WzS9TOa`G`C#gZ%rSz}zQ#2uI(?koe>z)FR5Sa}bL{Rma88l4{Q&n%};6 zYc{A65`|?Eb?F#mHJp3sBc`tFvbGdgCQB(6E*TyIVTdZVmt_X?B1u}7Cc4w5jW%)now*16P{qU|$Dqu>OK>Vfr3h|>Lr1lU3_E|A% z$)`@D-*_c(@m~U_Ht*zv)UYJ?f@yndcVlBw0-^{E z54!dfw}>!g(7OLYf16`IN6TB}_`QC1T{lMx5P5*E`rUIRqGS-v2uW|01o=CNpUS7p z!j?fQq;3EuygP#LxEIDQ91Zr)_loG|#0|V|S>a7H68y86GdrZb=v~)hid?*513xG! z?3^A3>52>gXZAo4l-;MBtwMB1DDMq95hv-Mslj3lZ4mbNGzAsZB6O z^*)KA(}2tSzgcl}!*eeThq`egQgZ9s4QTf2!NJh>nJkb018ExhgE$ zno=_14;*H-OJqfe_T6lJ0Z{=p);Dy5lbL%_;>hmRSh`GsLI?L~6-vg(d)X*K6%EB8TUm zFVZf+oWC-N0yFHnvR9|8qTf_3E;b3Lt>i)+3TIJKA zWNr(yCCS09Qvh4IZ99~78xh$f3@=jvZWkVu*R2%);vo{Gb4&|Sc1v!V~ONFTkQqwstOByjPrKWHJ znw4p}dZIA|9iKk$l?0l^IO=mmd`et`3quX>X2?Hhk}bJ{Ik0xzscMErgj(9Po~L1^k3h|8mPYe(n>NPGy?ek)&l$&f zq7y;*W$Y5|ZEz~C8}JGEWI1Y`fu8<)ekwkr?2y+`e26T^B7{q1s;A2vDW1HzQ=Bw|3AUSEusX$Hub8=JX|u7_ z^{lTYF90IT`)$iXHyMsRrgriq5e7uKxOfPRMegH3U$!(U!UY z(s%?gvLnLRIdZxRHo%wxd{hWZW$5=tUYA`{* zWN3k}AJcc}y6)r9Z~(g)Ac?6dSB}<@SJuV+=KjiJ8a0rMq|u*D86gM;HWEM@Ks5@N zWW>7BBSigXBVri-BLCIT^8XJB`Cpd~SDl_zwS;1(x0!9QaSVy~UC^Wq+?1UUP=euv z5Y8#gm$2xNbxq_H7cM+HhT-rP$8MeRz^%@3Bd(nv{C}>O1e`b{<^h&EqzxvB2VB4M zl}XvYMS_S1Yrl%8G;6OmVq1O?M?+`anx^ydsppx*?jam9wy~a0RbzDsppzINvZm&~u?Z5Z05$!< zdtyT|M>$6#;ox&f?h&BtkxJP3UIwpP51KJ%o4f_9T^*nAOpQ#uesQpP;Og73R+t5+ zy(eT$gJiG5Q&9o00HXQMIy(ZBQp8?WVRgNl{me{Yb<(%k_C(GJfTzFUSTE{x4r^ni z{*$YoH*kqFokdL?u{G*7)Jb0-BTerySf(LF{t?+X#~DclROvlBcXwPyF?y^B+uC6$ zzx;oZGOh)a?yJo?zu#j3?b@$L335VZ)lj*gv)YVa-=Taj^uiqFq{DWq)QtJ!e3`eh zdQm+TklP2r40%?!!yqxa?x zoXj6;cVXptz5YzK53cl^-ZhZmw_XS(>T_5%t9$FzQn}BqD=jn*w+=&zZzV&ZcX$_T zXow87H^1% ziM^Pk1lNeWaF2A6@pqCabN)2*t0{Z8kZL*hN|*~Isclmr^yw3`L77TDGl?!@zC59EUFm{*6uBh;z_3=)2^s9{ z6XakK55&jARz9zDTgB*}hKH8hzA(I>OQMfX^=1j`pX~1U0{SggpM?kW@WIW2!q-^X zW6G+QN+UYCFyAeCWQ^B153GMtpJJ?-<%jDf;!~Fp;!D|qA`3NGChcbXuOUpIZ0oeAff2HdRJ!?j^X^S1LQlmhc& zdH_d2^y=?lFqO$NU}L%Dx(KH0o)brj^gE0hWX+#)qA}8Y%x+)ru{~5VM*;@EXBpJ- z!WvAVDTWeg|Bq*%cBd^P+}Yz30Kvm^(V?e(Hf({kUY5&T+UHxEs5BAN)~D^uq>8uq zaRa!3ULg{M;yH7Q>x4i?1t4I7ONl!uW{{5jLV(U*Vt<7|!zF>ve-&+6&7EO|1SU~p)h}F1_u?p7oa%a+R}zOiw8ynl3UOYSoaK%aA&t@ z>Yz7?8<&1u63BMLcI z;(26hH<8SRnAbM7P`?7O{Lujef3$o3$1iZ!e#uk|x9-?PQc>o6M%dxdJJw@>a!&yj z5~YyN{w~5CDrP8`s`$f@(iKZezG zppfD;2jc#wXG{r2ej3BA{Kp|PX{OiUq$vV8nM+Np@MoMAZL7%mmaZjSN~MvL4mY_J@FGq5CrgXhr-pxs_!hJ2UXjQ&gu-=!Bd`TauBl+bC*aA) z6{iJiFv^@Q=nho`(yiM3Wx>-vUlOle8UR72UAmSFQU=umgxo2m!~;dpYE^s6#<@EWb~QFb(0F+ifw6b7Tn zC{O5j*R6B06-Q-wquD2I@t7Px;*$piURQ{{)c%wA694m9h2GA4lIJk+n3*&m*s)N8 zk|}RwRb{5P(9DUiaV^u;dKB$7OsMolIVSfbUMr)T?-BXEVo=~q`jSWmFdHEg9PU=l zIgn5o7>h*5bpMYet>eKruU8&eWs6?SN!yGJ=ku#ZRQV=YnZQ?{aRusB`e31m_Kq+2 z;CJ|KeuLpEH6V4jQ{kss;qtS2ltDi-gXB6fy!3a8WNW{x|phz z{NbkaCVkTAa(bk(#IkUaI+e$sHS7;zQ4`fxPvi47b$Hrid=G2OOfu@u9=`yx=ggcCMRh8R&k!CS~p#&t#UipU459etd!usYj=qm{uo|>*m zHJhdjcRXk~<;rbXmT1NQ>DpSAFvYH!PHlQFnjuCdeclPadDUkr~k};v&e10&_ z{MZZ(v^OXsb3-9f*jXJj^kYKnSOU)nMC1{RL|$C`q!Yz`=a=mEe!V&^3ri(UoRTYJ zF$)uxw#e~`dvCD5-;Yz*tLM)VgsnyPT>*+x94Bg+c!S6_CUhbk^ie@{0el%{ga)yr z9b+@1=jgRN0j}bqe_`y71R|5)e72ivrp_8wUh}jNMD{!*g|pvp+^r7Wb(DoM)QW$d zy#?#BH{2}u*_y~!08M>eWAx0L=`%70cOGdIL!a*tfZyz$a8mRyUnS)5XF1e&3~DS# zNa4b0i?Ivo+I`|JqJ8d{Nc39p?$Q?}nb0+HxdQqwQUmXi&az33qzFVdz9-SC{%$Se zUy~P~qW$f$vpu!n4;O0pkSr=Jl<;-FrLEbkUCuBNY6bZ3Pe|5Q!gv;+m*w;U?EQiR z3O?JlD=$p6l9@m=Bn0tnDL4$dbdh>ty|4X*o`l=fx*>IZoz@vHfbCbt&Fq-Kz4NRl z{cK`m$l|0xqL+@-{zU$xL+MPdKDE@yGX5*~gq&Tgby4I`c6d4D!l_?QP7c3j+XNFm zBjs8x<|@~Kak4Y7-jOWeKqe@rSoDI|;R7r(J;nyIHRvpN{O6#F!(V}8R=X^FF&hl}U7W^QUWPQs?vX&}CT-R9gksbX$^smwKe5)_WI{5e& za%keukf6jES%&O~9dH!M+h>Mcr zDOV8SQ2;JzntYz8znd+%g&EMj&SF=Ai~lsqtpZYFp!+YW(hiSaWYtYi9K=pmz{roG6O@Q}7~AG)OMEvJga`|FC3O{@abQoZy-pCfEb7<~j%+R`_Q z9n6mzhTG7?5dk05IOpiaBuCL|Ylrd0IiR5>=4SW4jJHrLcgfey5=EwVvf%~6)yJ26uqEYAjLr^B&+s=Is0{E;sYR7t9}Y#jLRd;g@Q z2RE`4|Auk)q{GN&@%l>ZtNysxTcP#-s%{W!Z!wieiqB(NDUh(#qyc}r!yJuAqVl+6 zTz#{Nwp2siEnC#(i|M%VYdtym^t`zGW4atEw4RHBw~4Pq!G@M0xg}@fwa=L`m8+(2 zX|IF3O0TvnYG-9q8Dl1n!A7_9N6AZzIO63xP%unk%`NN?uP@4mobFz~*Thxf zMn^hm9yPsGSH$uKEEcNwQl<@19n(|#XthN8n9m1KX;@vTS!kSssLh1Nt%QO`zYK+n z9KW%5pi!MmEfyLZgR850`^H0ba=@s5O5DUL@U3ToL4Z8wEOf=_dj5$oyB7HV zM~23XZBh+SQb7lAfV)T+C6VN~>X#*tr06n??G45J9neRL)*iSZ6U3&pK`y$~Xd=F#`bz(QF#h6i90dzeAZ021090|2J`Mb5G z5k*9cPKBar#Q}2NU`eHy+smns7{jwb{LFY!4e6&u^`?H!??<~0eA0u*d7}6?m^czo zMGQ&3M=+96-LBcwR*}(e1> zKPgsG7Y14_eBM{{Ia4AWHvymUjc`hI;)rY(79xj`lnfPf z%`X%q?%q&lZ$J|X;8K``wdZ?f*QyJe!U|rA5oB6)%LDY>!$Sn*2pk`i>r9*D7~#dP>hsk%}s^KBfoxVaHo`Q;2(VI=V%+HQ0|DQb%iA+&OWO+*SS zUd1&pR&`qpB~$e<^!w|r3ekU73W|4x8}UmRUP`%(J997)5^lE~mA3Az3?hWQBBLfo ztmj!lm3LJ*TE)!yeN9upv91rlEkXEeEld1nz^WoHnLLOZRk?V6ib9sde&EIKHCHj3 zH-Z$p{O8V2SAqXUSiH7syojiTBDao9Xt~!auD7)TJLx0JLo2A@L?Do4eB=Dxn@i_C zQXuvBI9@F=nv8ZlFNxFP~qlDoAY6=z*}fVPl@mK5QZp{4CV$0 zoz+Ynd|GV1(YD37t3qT!68acFyM-$k$nv1RM+gpi;l2D7ju?-cab8b6_sn5Dmm85L zAYM#w)1#MsX|y5^+08I={~<=9+$aUi&s&2PkJ${!*|tO$;SmZ_dNgz0`a?VPVA|ph z_PO@#b1G013p!@|C0edgzwBlLr|OSl=NvpvRFug$J0KPuFQ+0XqA0%EGBTc5%j=Vz zt`QdymZ1~i?4It9$JddII#_X8CDq1Xi|MC#Xqv}toSUoSwvpw^%qc7XW6$562olXt(R3m^XRYCe?kB32}uV67$p z98glTjB+vGe%;k`0bbx)dS@vZdy`FNcElm%P#edSzI7B8M3g*jVR|gT=PA0dqt5OZ zC+n%)dh{hp>sQ1ieDe0Ryw&ye9-vhO;wz!$tWHj%Wa~?bKxgmqXL~<)K+B|a47(DT z;1ZKh2Ab+LJJMuwIHSB8p4S7X$eO*)FmyWAzKDoOI;t4&{QU`9E+W_>z`n+ z0q(U6S7{lp9+v&%j*)g+m`9RO<6ibFm<{TmX>!N-i-9K6$WnwOEbPaPw^mZgN?ss| z3rV%e(4)tcwG$N7D$(>*@#|~4RIjYIv17crCLv`4lai2boB4;=y}tsv8f0vxF-~by zf=*k~05~KDh+%$0Xeyh&d5rX*El2!o5{Ziw!!2DWnW2KsElA($6wKjPSl{u40;v=T zx4xYQ&w7&Nndu6gf&VtUti#7rxT~2KUjdP8V<#g7KOu8 z{%m|q=*>-vaqQC=0RMYwAkn1NwoVS!=yst%|9g7-jw+_Tn?syXJ<9JX9|58&zor8;r6QkufzBJ$Hyw_EkB6i$R+B`pp6v*tXF#w!3N9av8Twkt z{lFRp+dUE zg@8gUlbPd{!Pl{hW7f{?zgf z88?^ntN?7(kp1aYu&b9)fZllml0YyC*Ag&0MqQQJKFJQSze5fV{);u$05~UU^FqG_ zQc~%4r$I9o7|A5jPW0pWG8r9lQoDgxs!;S&&_P3C*E5wN?IK0$m)I^y*jTvka*_4I zVt7|MeOX)7^CQEwU`LXCruzxEt>DkdDH$*Wvm48szPVy&i7P|dtz@beW%{scNVL{v zOx%h&^3eX*%wL7*b`PdDS(fkPhGK;iX`T0d6=ryuw#G8|;#QSscHB6?bHL6LWyZbu z(S^5UzC0X8`bvo7Ej19kSZvXXsgJ`v`@1=``8vi^h>eqSly3QC#1?wf*AmZG=5Gjv ztK^cuod>;=VK#)N6^fWv(s)?BjlMljQOWM1sFu%ZL->wo4gs~d;4$cl&jU;mV6^5= z$#p{xu5Gi$>j4<0x2#hCa&uBPG0o6CS|~v+7E(~Mv|3CQL-1RHwZ?z_Bnx2Oh^zn? zGXg*LUwZE*T!*ItQ%xb&yp*$xl&oDS*t#e>Kvpxc@4!xvXwuo%{RT)ADbj07VS6V@V zm)OttDF?miWub%d<_yMIh+XS$Q!*}3)ovsBtQ7ea&%*Trg>abAM;r0BXpdZR9}W0A zL-Aqmn=1L-E6eJrN?p9BVdcQ>S--SvJRFrLu>4M=z6#yso-eE=R%Y&awdJinGBF9l zc;bG`IcG4sg1N8}?V6zTQ2S~qh|o=Ty9ge=z@B1n)0{6@Zf73y)`?q@gzb-Pvd!AU z8DYZU36!5~`72?vqj3JL(eZ+4Vn8PVdO@}r(My(mipqp{=e?<0;5KvADfT%j9h8GU zC&DV7+KQi{U53TPMbXG2m!7p_SE$Nx2SN&82E?5^ zKgs$sp=c1$;|T&dP~k0eXw+^egrUNv6I8Bi&q6>FCr0MLgbbBUW~AP+k?qY%V`ypO z6@KPmUve9`PREI6kwzk6SfQtWxnY6j7N**TF1Lsqs^CfNjK=Z9S9}s76S>+gVU){Q z-pUZq7c-UEUylR^W3u2~4b>;M?Q-puC*_UusnzUZXUDlE3s@}jG$+q{soD5E3ZG6| z2TS)PehgO)7+TgjvFS)ThXXtw{BsW)Ab~YiMR)8!2#-KJB1hJG%#J2DBWU8 zrcCfXsIT9z_0L}{SfBR3K5eRR7UXv;S=Z-8U)*p%J}~zCrD>b3-Jh=X?>B9Ci_q6+ zFFu{4zF0}Cck}%FHCb=g;&%(!*LA1M^$hRai$0x2v#l$6cF&L3E9);8J#Tt>v*mrK z4etBp-hLsQU-WTr7W{W}e*2occ7wB3`Lp}g_;;oBZCc#d9lyd-{2`BD?5}T@@OO)M z|9zX^UEK^7IwK|r)t@-5j>YT=Q`8>9EQ?1ex}0XYPW@`!DDS*y&inL8Exz=`7H+yV zkRoQ7HkGljt2?EyRVt4pevydx>WTHTB8S?~CWTLuuv8R71f)X_p*~&aucz?|PXYZP z*Ud^3s14PM(|X2#EV85su0lk>I8xNPEHA^QqNCKyV%)mBA4+-cazN&xQTN(IT8b`p ztc7Q0sqCRIL^eK%C4D_v4*5FZIZjyp00ph{pIi-PiEV>YhN);cO8B4a_b#ZHE450P z--5&=*NDFU-oo2yhO9t#Ydv#qr_bog(<14a$&>=rdmSM4 z>{h!fFIL8=Ya#%Czg}vu;Tbb9JlY&GC7J*)Fwaw3?sbt3&k^L{z~B)I#-&aSo2q|% z8>oXJR7Zxobu^@ZVUg%)pCdSJR>n_mwU|ib#EZjl$R}0dpG;Lz_9qFdqx5UCu-}YU za-##|Fd~6K=RS{Er7)}-ZOa69vJH`X5dD=i2I5Vkl8(!?pG-x>NubPCC_^j$;vW^N zN)T{M$j%KrS^51>3HcKI)NQ=OSdEXU#F$+%bM-mJt8gRsUkAsrw`Aj`yKq7*@;QM$ zJVNs(5SklvVQ+SOpMlD^Ey;%_$}qEH6g_JU0jjeHj$a@;sNv@qcfi#NICx=Lpc)vU zly^hB7N7`!%=P&mFiAw`nM^Rj**#FwxY0_jXQ8WD5aKYNKG#3GVT zv4DL6ctV4Uu*72O2n{W)*1^t(FOXzO1B9{_aGFodTO*`n2!^KZtUG9O#W}A=yVra0 zJmkl2&#p3c38HXJojm(qhf#h1ug*FPKvAO4$|JAz3VueYE#QSxATXz%dU`Pg5dp%lRxfCfQYyf?L%r}C?2BibgDP6PR0 z4>nyiMuEM~wgA?NKSrID8as5$C%QntzOqb2Qy40{B$8xX$YCxF2v^mD&G_R4ty>kN zek-(};LaME5xZ!FF)kQlu5^D0l>ntR-%Iua$L3dmNm98#6YUE&1jwo2J^hXDwgmxz z<}d5_i{_JzG?hFx;>Z=J`yDd=RpVsQuq95cugF-XL&yV4Zv!ycNK=St0hnW=LA@h| z%n_+!T*P}#sz?fr6IH0Unf-rN`wIyB3xU0pY81clgu1(1>bY1%n7Eh+ubQ9OL=GLX z1AH9FX;)s0_W!QSX{ZT=jGh70Jj@sKvy_&T1DW5^0~CeLTjqa<>fLDBKAl*iUa22$ z;WFN;-k7`S>AWGk{$kZbxa`7gIMAFpx~TR+A&+!T53-YW>OlvHuxvWePRNL>4Tt&w z{NLs`fduKAOQow+x9D=$M4>vPxK{0sqwiM{H1DpZ7(*{fz>yyc-hij|?i%>|T5H}B zOvwDe=5{lKsa((#``TVNyG?^?ChVuU%%I)>2ESS4!RMT-Y%bM ztUdkvUnNn%ei%4(>4KvHM>t@j@-FErZZ?@1z*3V ziTOe3u|gblS0)$Ks#+qZel^mDI` z929AxN8ZXho|r4z6C6NU)gaD+aV{{!f1B-KE?y<-i~6(#m%e2~Y4JW28$x86N0IZ4Q&Q^z z7+9&TIm&1TfJX*yJhZ#V<5$pcL3pA_4d;wG9BJ!iZf(Nh)mXY_6`)} zaMorLN6;JG@I(H`%ZE>nL>w%G}r;=%-d-2N3+G=H*znx z1^FPN-|DB7Z4%ti+H()K*ZDS@43eanw4B1{mq@jbucT<;{q{DTfIdt+VhQn;m5V_C zUoNL3m33$|8C495IGZF^Q~q}>#?+LxshJ8@^!JPKJ?q9ClzLwB%`cUxp4Taa*idDE zROy>(xf0gBccZF6BT{uI2O-`ynts!wZD0X6tMZ?~4h$1mbI1g=4JDj!3>5`Q21i|n z4t-WJ3r}&v+MYElx-wKuYt<(9=g=v9FI?jZXZrbg)Os13l!X>W?_MI%KvEB$uh%jv zHM)0p{JmPX5~+OY&5wB+hARQi)M<-^3=R+_+=wQ^)x@+c1b!e!^3@QPtjPymJYc|9u+?; z=e4gbrV*@I8wz$8SxMMCG|x#_PE}H72_+@@q&-( z$3pIe*mluQB8%PPaVfI#^;*@q{52TC46$`@eMO4VCpOJ!mD~}gArN*;0ycdH^`iaK z@&0P+vR9x@)sMiXdH9P!JCVf{fw41K#8J?NfbXD5me$f&TuObxK+#3&rKoQD@debA zTzvImU`jY}`7|9?eB&yn!$c84f0*(EO)GOSPAEwHlmr;lydhVtU+cZ9zy67#NkMiD_zgQj+O>XXosk%-4d$wLtx4(?fTwGh zEjp+?MlN4o@1%1&4p#z-?IQnj21YFwt89`rEPL@G2@vu2&=H2F07`_zvgU)70v*Kx zsugS+Q0zod0`m~(B}D(QCO*TzHu;9X-MZ=M+q=@b0qyn3ZjFP`)e#2C9b}N!ErieB z%%g`frFG!kfEsV_Ussu!dQuUxz9jDpqSx$F#AC0dpZ8y}$P3zHDNHAj$(Mz+PI@*~ zzc79b45j(q3BE(p*(qv)a2_jdV{;_^7&>^;N+!{g;=LA=`f?2^l`BI78`l3d51IlP zvP)$4*Y9OE&HYz;R_^9$^vGCg2+t?wX2!!H55?>CjGpdBM8!c7{Drb)i0=7wREB8Sd<*5VH>EGA4&m4wHg&2!quk%ct6}NEPBU>bfMXAe^!$3*WpPUAQaFD$1bfd0hSx{ zIzq=NaM6hqPi&!sdUZEvW=OMAy^$4T(Xgd#oFr%fXVm_9E0(-A2lP(YRan!Qq_{tR zOQ`NeP{;Gynn8Y{`uQ7xi@cnS{pmcD#K}rmT=E$j3-U#0rY3&v+5}DeU)V*8Cq_Mh zxK7EO$26#wrn~Fk z-8`mROhO^;y(OS`BTLHOqwu|W{gzuzn$XYX1d*SAYG3j*pXPoA>h!(_uhXjZO}6UW z5*bebzsE-OC;xWA_AGmFbztCG+R7??ene(t8PmG&0Fz4)d3@Xd@C&Mk+jUk2t6&*@ zR9v{o?S=kgv@vq{;tT`-<-`^~n9XI5Cmo&~CZ|~3r^7FO&`n#OXW|CXXuXSJ$$V0P zv^FsHotM9lM`W!?!hme)O^xpmjZXBeymFgz^QSNETqhV+M4$4uq!}2|b@9nRN_7`4 zl}_!!vsVxI)U(!U*Zuu7&5<_!(*p?6m_E?dK-r3`H{+~i(HY%fJ4L=eJ-~B#Mo%a@ zFGV*FA@SUNpVRdn4JCxuJI30|a>67^&jJr&2crGh$?s*MMxK)O`7y4%jwQ|^0&9GQ z)*Vyn)t^ylrPtEjXS^39iR>Cj(R%@*ro>X+hrPzo^J=ekzpC;}8ULXr`wWPf$ajv? zwwb`i*bRxH1)&tMOeTs2PwIMn?CeDhe44bnB>m{(6LBbs1}<$>SFe zcO{r%n_a6$RBV_h(nXkBCKZY*DY(!ek`qIODiK^C+*1V8(K~EuE#vz^ikFv~|KC7| zRdu(cnp|-jDsOhvg9)~0=|LqjY&;beSb5P0!=5^TNylC9fN3vMbCYSqyHp}nl$R%8 zh>x-H`}O!h85(?yz7{=3%i35eRs{myZ%aR6v&=?Caz!NB_a!gVB$&ETcrrPeP>G(S zWhBv+6qkcsD-h6+f0WQMGPJ9Yj-eIGqDA<7MCEN_-Gl(pu+W?+XaR6;P?z)}U#aw43b=rTumWHIHKZ7Je z)P>aaTT;Npev~7_18d(1Iaitt#tgQR82xw8HlzDVW@Ns+Ld+6!4p5o9p9kL=CzU`d zz@-Gn3!}V7Pl*WI*~6r0R=Z)k_0*|J$qQLt@FY`jg7U!ZQddXVWsuw~HP-XvfDA$K%VBmlkF z(Icb;Ep3sRyk%mlFgPL~fVZ|tlx+zfk2nnnx*t%X(y}*V0uJIae2_FzOys1nGZQ$~RimvNd2s?aGJAOl^;tEVnsG`sGJ+0*i5$ z2Lr0bUZFp(ozj&(8R6H1M6F6rX$?an1qq!74e( zah?41+;WIq|AW_MkTfOz3brPKS+Ism4r}*?1t}3hdKAd;=)V5b|F8-~-%acmrE54r z?=OzV_cZhLnE#V|O+MBbA^XCi9gka<9EEhZ|NVf-)R^-72hTOdwWl6ntazJ_Evcez%g!i)Xp3D)K_CzcftEUZs7UPy2~>CgY@K=ydwJ&Z z2XJ_Hhw^V^XnP2UcQa8nT=8V#-;0zV3-yM)fO)#D69cRqQ~(U{*b!%v0E@G(m^Mn= zn?PFuCmN=jg)CtI1RzilFo~rnXfb?Rio8H!kZ$adjr*-+c77$`RDjqkoFL?ua#0;LoP zy5)yfT52!yjubq?G&^dBze3MH$5JLaaui(tx4^5lJC;Qpl4F?KUdsqak>e6lS-1{{ z3Jx1y7<$p&!QUl)d#nLHhh`J+X2`l|S`)}q!kNjf^qeqOv{Jn24OmfTri$0kf^Urw zkhuOy#I=RDE`h6jnc>rVW95Iq>7CSdJV1-ntWQV9ZF|lru!%CM^kYf@UdMWwS)FSk ziE$LU$L*jV)(zl5IUL$VL=~Z8$|cWOn3HR&`^DeVy~tKf9G9?>i|Pc_>_^->{qheT1uCIQRbBZ|iO&Zn zr5+qg=1fm~q=JGLr~kV9J3?_%H;SMJ|FU}QG{0n1`FDUdEKboHFifN53}p$0JDc}Uj46-w`;Xz1wuz5^a|$kk%2egqcepF&1IeSz?Wf6 zM~PK0N@38;qfz}?!^QC-<YA$*+=*je>{`lOB`|Q~jS?J%3CE;~%kPu8$HVMZpqvVYA zLqSy~Fo=Kpf(ghAk$eh?&4QakXunTPZew+rdK;NCuYUT}=IGCDtWsI+0#@sK@m0LQ z3))_gei)N_ivSe0u75tW+RI3K#H*r zCTQf24fTN(U{v1*1l?W!@|ygDt@L zHlo7{$p>#l=bhg=K(^jYLdlpOXOP=<|MGOf0N+*d|F=n5auj2R6rh%O-;!LbQRF$T zg*~|Fn3RrtGI3max)ntv-CPb`W4|-$wd}MGF{Hr90y;>JK9060HTBhu=-vUvO)!Et z9=9}rA|2W_6r^*os0%70IX+=*nMSNi*c+(alc+@8uN zk1@$g9a^MpGIf1!{E2meB|EF(w3Uefzg2>}YsS?n*~EV>mf3b$=aFF6L1Lm2(?eHh z?)I?~)7l+~P*G=uXciKDx4m@x1>wV=VKMA?THcuXR-ny%xy?26{+B?jhXM{POO1Z4 z)7;ydN>p1-!9;S!shj|Co)#YHHA=v4ggI60i(kvxk3x{7dQD6ES#>Yui%?Hx6!94< zas6!yK>4#yXPlxZC6j(w)u5UVTPiC3hw7-Fos5u&!3f zkm{!5zoRRVAuxco80qZ6EYJEp__rQCVmM$FIu)5r*8xL9-7vnQG*PLAQc~J8gJs|L zvPK})Xx|u;XY4F~(i3yQH($3W?c-Fw`o@N<$Tkp`XIWCTo*3HV(Cxb_;*PZ8=gwBn z98Qpo?ie064y=oTWSEg%l?F9LvD2Am970$%Q9Sngq{z_OO z3cR6Pp#$0as_@2eJ9F;zEcsp5x{F3i!c-=P0eQEyAJXs&AfXe4gAU1LMyU# zT+|noC%6A=1(UkD@>pABTc#ZyFLIrsE>fzjY5rSx>0vR7<+4HiRGA19+6g$iPwnSz z@#UzPzt?ARr=^vArH%Eoo`LJmcXg!FLS^go{cbMZ4#ej;OFUI|r>0U{Lqs{3kb&Q4 z#|uny>Ds?}>Ct`?D}*pVk;}&MvL*9dGp89gv}zxRrcx(4U`ZKS>RPnkWO?;s>N?+s zS>G8_VR;gMPzKZyAQl(FkME8HjvhhEgG;!yf?%YRwc5WpmQsQ@RiU9LiIh6S!@Bw@ zo%%+BWX+Qdm3hOSzC5&nroj(Nrk;T+wjoUV)P|S~nANfIWko$o=eVOCBzw-qHe2KDLgK*ffcI!Y8k;UPt3YY$|Hd3GoM#|oY&BaK+1Zk4<@MBd}7i?AZ>R#N36 z8{rqh%xpiajw6Sq#xjF~{~~Ma+=ouaDJ(w?)k>IzJE!SvBciPNba){@xOz_+-1js4 z?$S9{m>#5&0R1>QbcN`Ng*(OY^3V;GFLU6(_8jL3{p90;`GdxbPIhGsO!BY;@~=^z zEtTSkJeg)C<&#Y!OxPY?Zu!ARcPQkTm9inx^GWH8r=31U*-a$vwur85-_~M1 z?mIL`*|oic^x2m`rVm9@bKSDgZra44*r8NSE}mv|ZoyCfX{sk@2^w^%C<_wA^6?I} zqJ182-#TsCy~2L};^no}L$Y|R9oxepj4E&>ltaOEOxO|$M!WMxm#q!&p18_jmZm?z z17XzWH3zPWI>=4sEF+fpym=Gc!+COw?E~+?X>oGs4QTxxxFQ}*zW_60e;d#M`og{L zl?usx_n*tjoXQhA9Wi(2^Bx+Gib{Y=(s_^(W(PC<>e??vbrpc&L1I_d(p*iT6|}R)|Q`fJ;-pNQ!?w z6Pd;qEs%d9YwUuR_c~T4>T(~O%ou#rvc`|O_Ek;EUhx<9PI;{~XT5&5FWe#o*~!{H zOyAsGBG_Fx@f{awnmj&8>seeRabuYxp+BuajjViH9Lyn^w1P|Ue)xfXV_MTLk?r%L z6gd8n1{t8bHip2){Ai>v?pY#RH7G4t;nw@KL1~s$7wZ?Jn+W}M3vn6w^dMro?$)kX z-uT+9yhw9%(eC{5dK*)4|97RBh3XTbTve+6$V5>RO;o{#uN3HOgFcpHNuM&CGy;W$%8`r~`2EGPBI8O8Y-gu01o_j^EKSY2NQe9JkTC|?l zyChZ%7ags};4+~LQx+Xe;cRwFHK37jjZLDP{06NL=6y~QKCT|ECFUl-fb z!kn+LzGk4t+(}fA?nGuuIwkM_oOK9l^)k-tuvRdRSxLOG*kkX6ZRT`rq#bdLvRQI} zPVJ^%=f$?#u*I0!%gb@hMb@S`=|&`Z^0v545Df_?#kA{H@ z3hdQnj}4{*d%L}i3MYB~c+*|eTHwjI95-=CS9^8a{bn=O>+Xn@(;N9@0oylR5Swov zmng#NkMZUh2}K0Mq;pb3yfeKwEU&f2In{8H-pMn94u>WoqG&jl{z5+dSdoY~JvVX_ z<84CKH|nsZYF!@4RkGG)Encdy6KD9Vpym#&Qe{^RFcoqci}|Wzc2CCLE@^n8eR4P^ zATlk74qJV=e-q?6ckPvhOrwZpq?vyqVaYp4e=;a!+q!l1SW>ryhpy2d}v(^Ev33$0Lsz5kMu{lB)&A50bGMe z?9sdSj5diIjfkxtJi`VP#NN|@QRPyKWsT8Y*i~vu1${D+s2Idzvs-C@X^m!ZEO>i^ zi}@W1aEM(nza9yfIYJ^XOAbNfBAjtCA@;nH-q|rOd`&Vwxp7~Jk%7-X6%vy|YJU_O zC**24g>#)|2N>E{_dB4&*<5Ugnzm;3^b2pcZXhOSm&txe#OqNFQBy}=024LCR+c8xZq;|vg}z#eIUBrtbxkuxoSib=ae003!5zQg?PmUZI1 zKxfk9JQe1i?8itX^1`*TwSM$~gAb4>BjjH=ryQmgi%(<+g?~f}8_5mjutY5*cU5Vl zg|lomkn(ERp?e}tDE=$}0Nb9)K?vAuciDkhVW(HeLk|GEsNc%DL`ia#BO@}iZ%5oxOA0(jH*QTn3W3kLzb^&r0nYBn>4lL-&aDR~}JOI7(NIc2#gD*w5Mir-Vt8O45Jy7{y zo-R$Rj-66>^71H)te`)e1(`3>oR)UH-G*6two$9oV&YH7@#O%ZO&FL_P1$~#6-1SI zX_9)EVQR+cx5W4nKUGanZ{9&c?{nzJPT@8zi@zEHl&N>_F6L_?iu#59dp;(GBvd}bBV#w@rq zxxKE=xjaRYzwo4ZR6u0$d3z`TAaphjFWSn~Cf2SELA_+68nY_C3a*vu|F~2I2yWm! zmQ{5#R%(ty2_^p0SkYQ-4Mc{$vUQ&E^d$jQG5~>Gt{?b1o&40^|j4MFpFIHC6U;%lwY&!`L z@tHAU@9wt>7^vceP+wxPD!)ok@{wq{*Q+#BdT97`6VP`>L|Ykz4?Uxi<+-;;yaR1U z0W3u${?q7cXF)4LQn?Md60$y<1k~Ecv`?|Lb(PUX(#I;!bdwT00LtERLhs!`A*(gS zwbY~fG#wv7tQlFug!Xh@G1LjU`C$M%a@)Zgtq*P!TWL-Sh^ns8=M$!WmA?ZDBUPQptr!#&rdoV#?`>^R$bZ|%j7CF2?NSsh`3Jj zT;t6ih_#$@>~W5nsluSxq#y$Rmwe_;eINhqc3o3n8c<6Ccf6+~6xK&A8dK}A>Ol6=A zVxWcI5yBtdW*VMpyPkxi_;!9VjXJvx>q#6vF+bieH4C%<{{`GGUD-8_$(|pY1f;6? zdzIvq_@V{aFYy5)pveNK%gi4BqxH)hkNqI_eu!FmWj$;we-jP&Ux%14xa5~ERIzWp z+Sb39jTHI^lSV@+79JPc2}pB9$Vz3lBRBdr?Mk|RD^+p#YM`=oz+_SczlBRkF6gXQ z-KPIbz~D)L{vCuo*-l3Je-l>w?0vIhE~5jROcs4LZK&VwHgwb=8KO?`{`scXyQL&| zRGMJbvZYo35z~{q_qqFWxWOf8NjM9sM~@Z7rdsmr+M-9!6co@jGd9-+3p1VA0;2m& zan*(>dL*^GW`)<5Ls#^Q&C8r*Wf?67XW`^BfHhqkvmN55Mfc!je|cUCMFG+#Ad#IK-#~f{4lh?Oi!@Vn%Og(Sk%((`K49m{}wN7@qOjw8cVQO%2g+|1=@-C6{DFm~u zMLNKDir{587^_V)PMhI-5^2WXBW(K(#IrSx>~>7|nIFW7Z76;MDaeBSxPFzNf!kaT zM3=darR8HcxdSJu>!Rb`#zzbR{{b>kBrAE}1xlZQ#K+uW~YLqm7mV$@&y}%~fO?ZL zeLdKL(hd~&(Pl~cdPwPR#n%0d!1HFyYBeq27)ZL#d~o=h?+8C>q%)~Dib^B2ZuypN z10uV`MJZg`w(+twm<;ujosl05gp~=N9&4%<@FLI?!2r(;jozmgZJKI5FMqaQ$!^-z z`|grS^_c?s>rm{w8DK{Vk5}FCF7fQGn}q~pdfCw`%Udt+XrbF?N23XsOze>&t{Ns zXOp)Mg^Me4XmKpO?7pSP$ZIVNPYUV(g>rxa*XShY!NBux`z(_i)SOeDBP6%9hpr?4 zf61M(;_%S*^>YC>-N^s>vKY7ctk_@D6NV^rH=thZsUh6aSfd~JC&9JZnLAq_RH*_j z{OnH@Sow?h6V+f<*f-`v=$elz+s?>m)fwUvI>g;6X6Sw3B9KvO_}DP(U5VNQOYoCq z+A@T((~h5vrY0#H(s;hSc21=}-B@K{=iOFOsE~DSvzANvEMj^Sq=XnMK;W1QP<(l} z5Gb}pHq`)M5hMO$vigKabMItofY_JPCfM>xo7C1ut>>;>PYXDM`ZlE|(7CzP-R|J@ zn*C2gi{)*MA%(Ir=jqRGyA>5Nsn#Fg>28?6rGWaef~Ju;!Y@2IZ`nqr{NTXsC;tm5vLt zo?aY7ol&7{gTQ8uq>Z`e29Chb-wE^J^Hm>E_lgxQ^_kA!xaaw8PrhUsA0GWB0-Rp^ zCibzR;bO!Jd6zS{j=0x@>&2IZg3yf2N;oY-R#D2#^z`sU3UBp(lSd2Tn7!gSH`h05 zH6Hko!p{wwa}pRsSAjku;{MOY7AGtVP|61Fp0%#$zg*_O#j$*lmR7hgHwTSEFY=7B?yx4e*<3vtL@o9w~MJzkis zDAcB698W_4kuc`V%zz}DuI(Mg`oQR}>w85(O#prW=f$oM7979!1IN9(AdA+36VqG;+j$=EnFr#ABAm(zrdTjn zaJ!;z^m6~o*}gJ#4<&{fvL6P>p0o+b%hsVF%E{%wYB4xu!pDLd2YjD`@Sn{~!-HzC zHj{lhP|J72T7ym7T5-*`6k3fbvm3N)5P!Vo_uV{9I%0SmP;_Kc{0pAb(l>gFK@;O` za&FV;m;Q!m@(`r(xgrQ$oHvBuTF_ri7|#VdrPgkD(! zGUZwPN_?rnOReH8u*IzkjNC^)GN)Zrvl-ykX-#@4H7udW@HN|m`R+CRn3+FeqEtEwZ!yF*3X=7R?fNE}jCUW+R?o1t z1n7aF6Q_f&q@*09v+`sL5i>l{w# zrNH&)a@Qc#^a`>zFwkG&*_0w>7r=?EWIvr862L^3I5SoieksrHb(aIb|FvlpvBrGt z=#tU*-JF-oWvgzp}np%$pncC;K9H-1gGeneG>z`jie(^?g3= z4F@14kBdsB&fp#zt( z0wY#WD+;aYGZJTyb>UG>)`$Oq2T}I0!br-Pb4~AL`hlF3GK-OM?owq+7IK`K!+K?y z!{%EUU;ZL5{94`edDr!TOL7P29GU+L+_u5j-0LWK4cDK*hH2(LpXLq^KM2 zQ2^hDoBR|K7U2l@+FaXTgDN<-ME=@;r5WH_@D+C^DrGaikHwAdaVf}*fdh?rkdxMq zWY*hdcxY{ihNcaI=W+_pBp!FPeV4ScIR{G*1V9v!om_)yOFdqkt&UP z|J)%4N*9Hr&fF(yb_zZB8CUg&j9mozQ@FaC5}cc_naUsrDL0w6`74i0H|}MH`mLSa>4!f7NzR-*GU|+Q4HsPGcvHZQHgcw#{ZTL1RvAHntlzPGh@a zV;d8mcYXKY#kn~D!@hXd+I#;V|HUu#efcYbStHNzN9=>DNlF&c+qPc3nRc@0zzSGX znj^Ii)j81@<4gzPAa`PT0W0ll6oVZij(d54yiFj6`pu#p(Zcol8j^0HKeTUdhKOQX zLzpSAo1a2p3yH?B4Wp#%69YR__Y63)QXobsGAbUw@-vi&r`9TeOV0F8Xx^Ujg561v z2*V0ILRnL#kYK!9^vBo?AZn_xcIAPzvXZ+BtIWDMgxnqfCA8G+E8OU8!mX))07$0? z+HR_HY%F%PW^1yU61z9-N1g&=pS-vlmGvph9n}=V<WSQ;0P=TFkdQUwrai=YktVlv$5DtHt<5DHVt*h3^tvYsCK z^}ni3Da1!#AB0i!8;_fV%1_Y$4&EW|lNdp?2f|`T&&{nIzAwUI*$XkT zF{K*US69C<*n%H?%-%d2HXJS2V!dVH!{echDCJ^nDr?XU>5X6F^!MQzmazEarr{;< zV(3kna%y`5s4U@Fp=+g|Hnj1R#uGItdzlMVHFJuIc-mN~DO+XH(p=v>BAg5&k|&;= z2QdKy4%;H_g6=1z2H^5A>y0By=VKDx>qQU+a?s)wpYN4#FGuLlM5PLZYc9bmzy}T*@Yf6hz%^$F4U<6c5D)f~`(Nc% z+6z0ETp%;^5yp%>THIP1=fTaZ1T z<9Hz7HSI662bh%%| z`o0o-MP^`B`^Am+`FG#UMZifK8m!au=}{jD19xC@dWiaN^~d!b*o&%f9edVIAUnC> zBh&q^J?E7L;{ODJ;L5e8O>6I#G|a^K`>z>Adv#sr_P~4n?fUrL<4}lwq_QdaoFQqJ zb!F9D`aK|6I5$TQhBpDjmpM*_-n8^7c4zE#sW&Cl@>ptul-Au|`$K(D&C}~bw3?@d zYDUDhOYwVDOsLt%OzzCBHI{A4%)=ysLBYg96eg;_{$uV=c+aeY?MFCfs@L-|`xvcl z;ytlwX}yetj73uR;Zj*@;d>QI)f;;Ex{0*-{%Oai%4xalMGzbU`d}P>z1f>-xXS}l z5_?UDqJm$L>Y7+*{?RAsmYQisAO0ThXM+urV_q^j63-)ca!@))3Kx~>+K`0n^ynt=i4>mck-J;5=Xm1 zr{Sp^*#`j?TCyaTv~vpZH-FHITBnu41gq5c%hTQbCsrk!Uj(d2lO*U4zU519v}VAe zEV^1jMH6K>yp1S7{>h-@Yq-sX{Tpz4!_Hbo^(`RpY{O6Aidy?;!V0P{eeB?Y<7#cXZ1PR69adWCYh2@V~Wx2S!{z7YmPSR`#l0Z5KQqAae4W$6`)e z?f<;uuOwhnDD3Uj9g9D>Q85#eWsc1LXWoL^EHAPg1hTV_{xMXXPt(kRjR{^*SP61hW(c)X3XxP z?dBN|?}lDdxB9fIQATQK4Hiku0k`A-8BEezaAny(0^q6&?Oa+lF(30DtEXokpX||D zW*Z-R&HTn{6PbJ#OEQTHOFp=iMca_$CdMl@=F7=oCg_G&(t=ANCfU(Mrqor$1G+$< z@h})#O#Zna42`2&%p1dbDq4z}k}ZxBS5fJN&6~FRh1#~&ar#P6P4N!0?=TUb~wL*65ejh9RUM)-%N{h)B?aOr_ z&cFzAoIoZoxTunCH9|TcEm80MUT(N+#fLOfV+*|y#kHxXKF)nIHkC4gDOXVT*dZ{MUu#Ti9^ltJn zLdPXz@@-hb_Y?rLwcqwS>>E}GzH3ks`!^0N1Pd&jcs0qG&5liU?y9!5;-qVzxU4URx|juHe$ zkLaexSy69%e!{oM<5n@Jbmyd_XJE9%xEJ8P?N`-)oI$z5L_iH`LMi+ItU6}f9=G?Qt#ShT` z-uI|GRDxNx!+obCpQ^2`_$RKFtr$L65><=6leUBe6IjfcrBV-KLLuIr`cv7N^8Fli z^=lOu455KB&OP%{&X1ilNHhKM?Wj)UiRqtA_#6Gbz%-5o{49%1K9YKg(+Avve&eMBn_D;#d!x*Oj4j8hU zRrOqfy&oFd@P|h79Y=BwCU?Q~#~E$e9F$A{Mkx2?{5FbvU_O-#hBqc6Oh5TsCcs+ir_~Z_R~V z>_h%@R33*D^Jjpq8P}y^;k3Zkc8rV4UdQ@Zz$b6zdu{oJ`zKE$$Psi=`N=c$*!i&@ zb&pKl<|uQ1dT!8PF``#y&8ZiNgY*;iJBajL3#TtY)Fp%WB7BPcOk~<=LnrUc!~N?fVX%bDP!hYqQCxp(nj0$>o+>g$&@#33!BF&voN+v zV2d4IL1Js=>pV&9H_qgHgg2?`vB}ul_-T4H$A#_T^{MDC<>0m#0y7D|54EWYCA;e3 zRR%rbkdQk1Jmy{6?rsk3(Lb;_MfVm(mr13ZVIj)dJny<}G)OxNRGKCCwaq;K9rYNM2& z6(b@icc)30(d>HUG3F?GHh`)X8875XB2{h^ZDw6m{pC9d{xSCf!9)y%M^g&J^yP^xYRoAm+S`?RtOm!V}Z0)m`P( zFCpD|)YPEGS`@G{iRk;hc*V^ksdMcN=HC?bzII}~1#+$qAtdYSi$KYlf zFlbIs0L~TN2$aonl$xDn2;+Nl8OI6pTN_EatU4Lp7E(Mcew+ylMWR5Spk;m6TR70R z8co?y?bn?looF`MCJ|%% za@KAu92B!dc9Nn0+$OK9n7my;^Oz7gPP2+x-tW|VJ)!9-)Ga}`XNU^F$0TuoMX=Hr zA|=|gsvagF=%`FTs$A3DyKZ`Pvzkdfw=s?7%nBJp{bDZGXB8NiapJ~?_5 zvj9iY8jKJIJ8jRyJ+LiYd@0vgZ4a)~#G#$3 zcHq<|{k~!->rVVeLradYGep5ZCIcq{+870?RIqpjt@I6KzPWhqVjBSSI6kGl{uTk1 zTa~@a?F+n__5&-MVO`+H>aF>m3-$JCc`iM*w4QrU1q%n1bSWiYw~)%scZF^y4KWm| zB(q{XtEq8AJ8x7xS9Mx@SlMG-WZxOsA3mB$;3RI>IP3RNdB*+?9dV()(!rA{ffwiH zS{hhIQgQBsgQE7E(>ez-RdFU+QR0>ksIr!EQt68byotXzee3|@56+4-oZs;ruq0RPfC3Z&UV zrOa;nlAFFVyF_h|$F#ngeIVQ)9m3ajkAdkp$EBZ#u^DF996T3+TT@f>VwTKyl8a?q zzpE9kD2?;iRE1oap)e<a4w(-^nd(Y0UmaDP zZeF_-f#S7E6Ejz&qTQcm#5OG8M!HQ^?CPvYQ<`6#SF&gs(fnV`_1b)5 ztri%?`wg@c-4|2x&BC!c4;OtAe##HAgV6a;9+J8?-n_@9)pm{~f~b-TDan1`LR=AE ziANxeR7H|GU4Ah>)IrFrF&BP1VDfLZBnNt`G!bji1}7*s&^yQ>iFing<=BrIi{XrR ze$6N$su-*X<%c#I&LajK^MM+50K2T;^tnBk)E9rFqn&aFhn-XAlTv!u`V07?*Z{dI zPoLhGw)9=RN}(P4s;mRdmeJ|VW4OCS#yfdPFKg(?;4X4lT^lv5QH8J60pHrC7Yqc)5&mduhE#7|)edqV?!4CpD8Iu8Fc60hEa{vfnvBvmE5heA^n z03=z$d3V>)2r)w}6JIY+t(`8m69=34Ub0Lr!>i2WYjk31C+}rR4L&!pe?*nYr^IP5 z3$c8IjrYJ${scD@@qN7t7-qE3-SQjND8Mq7EAid6^kY4;RVtRBvM&lynljFl=Eu3s zoX`05CO9Xjz=;er@IsiBR=Zx-N4==xEBZH|_&3)1W?|Ht>J{P7E)6GhUjfehegy}?l#GL}ArKd3B$4rRnuv4O>hVy_ z?|ycLlQbE{pc%ZL@N-FA@+r|3n*-$zEuz=%EYO{KRg(~3EM-AuLPO@ttHKhVgWB)f0F!Sy1ihJQ%xocn8){}D>YR1~bk*}A ze>ezW_;=O`>WGQo5fI6`FL#+jkF;@*cRv^L*Zo+Kj3aVTKgqJ2zyJNyv$^q;hCL5+DTg zkvg5BEOdmW+XX8%wAmsBgsco8MLcAkww5c;y_rvQY>tSYar{zH@mT=F-QjF}_tgMB zN55o=(WK8(B&e=`dXuM~V;3NLF_O&3xji}_;HBXUAiMfcZ=MAcBRyIu1%?JgB0BzG zf+_ljz@@s{VTi@Bh5Lc4dVS@ggN97+u){8l67Q}c&K8k!Mf(QfTq+3`y*Tv z2#|a$Q>3yf+X=23>V>x))nPu0TgM6b^9W>zr_uabAduc_=J7Q=`S{tuA+9grqPQ^N~(@n5GxkCZhpu;?DsRF--RCksE{Xo{(Hjz zL&##bjrYdmYnC(O-+_XM9O1?G3Oh(Jf2B0}SlF}JOxh3R(fAeqNjriUCCJ4_sBnMk zc6JHo*WEnJLI6T`)&c_bv7mA=Y0Fdv=Mmynow102fdg=6lqYDRJG{ua?6H0ey77~g z*6YeuuEcbkdMj0WSEN;i#-kyf40*mCoHq%Cfu1%AXK;)oUk`DuJdcw>lQK;^<=m(PKBNf<&5CgX4)m&P|z+E>q>a8F0J8g^sZ~ zb>${~`_t5RxMd;*=L?3Ww@_MF3DEh?D|tsbXV_d(#V+XCBesfu9yOOMg)l^*ogZ6$ z7q_vHfaV0YLm8r2Jm3{HycMy|DFFx-eNVpaF+(&&moN)6+PQL4H(OefOKihF!|W(` z(YTsXz>oZp72XbAd2u++E&U)pHvDTiql=o;^h zxgAg$Lxwa1fZci_#ixW%y(UJ`fI($^nT|C-Xq`-~E^U-4{Q4!WVjquC&Z)7VzOjUK z$se+@Zq4}?&}7fKsnPpNEdbihw`14q%(L_>$*rM=(dRY9avz`xrTyE^&-coA#ncw)}xFBWAv&wjNddF zZHn%T2EKmND4!w$D(r9|L8oBH7Q)vmWqkk~1hZUtb|+g5_XPnMGs3zIuo*VXx`Aba zUU*T39O56XDgWe=$0wIl!7q-}lS?fsY;ub*w0E?xnU~5pQpNkp!Y!=!8us_^ym4N9 zfXmiwMc``gn7CXg&6C$K>?&b2#JtDH{3Nh*0BW#FkbU4TSmXRdkT(_X8{_q!GVIDL zrvkGFZB&4mw9Jqeq7(X|{33_qcTXb^y6lnb0E@+p^E&5$$D4&A5aJuHQEnue!+EPK za*_#$|Nc;0Rc|a{_HCD?4Wq3QnxI4`45-AkyEDE5%(jTKPpjIf6K2qehpEzpQ;|U; zle2DS?Z;Q#{`|$XLZ|GZVTj5IGSNZUDl=*d1V22HQ@GR;x`P#*#=;A&iZLnl6@gqx z$lZ|ptSvhPPot($OVGouwphM&T<7)B8hJTZBFy2(q*0QYOa|~~q+j5qW0R^=-ZSHb zl}UgBmteX`X!MM+h}_@dO|O($N6J=32V?3F zGeJ1Q<$*E%!%vG@Usx2e`vuWH%TJDafxk3W&eZQ$)G^m=YL1j(x}RK2sK}JOrr^l~ zzHb%Iv{p99Cf*{jj=^>l{PdiW#bd9ws`lH?Jotl4$5@-i}KyC1r0^9{eEf|0#Pn^bC zpDAf}g6Ki3((xxeCbw8sH+3CKWqtu6YNs!8&-=SK>)?Sl(amyrT>8i)K1KCIXGOU9 z$5cYa^qS#QZHHzWoDGMwbzg>%qtBLuIM=Ra-mi%d?5>tP5MMXt_TCgju(@u+QW?bc z?{cH%+};~imRIezcG!=dY0D7XPzg)9=p?|LHo1v74~d0tjm>29iMy3&L`eXgDS zoU$WY8F|7fqi&nUl`)@)E2*!VII#iyku>6oCl0@_${Ma7$L?yMxT=l1hDTHWwhHGN*jv8dg3o@ScQB2OQ`mOEiSmh V><#a!m^g|#enEOd~z<@~?z-h1BOc{{T^yUgx_?E7)%&6{0j-`u(1=_L}0MhYT4qLDt4E&C)Q zN8|aJG48r38kvUI{`_Zmy-OtW*p|u2cH7zOnVUr-pBw* z9&$pPHir#p-~Nd0d-OQI%l6w3$34_^_@9NJt@&tPf#wycT7eWebP9~wPzHP$e$W;_ z{}pH$Xe{U^&@-Sppv9ooAjwG4Arh%ZL-ATBs`}k{Vwe;b9wf0CelIczG!V2OXfH?m z;&1lH-`*ehFbMZD_@+c+*w|LB4jl&G@T)$3PHH=7&?VVEkA7Z!_U5B`1vaJ?2;@6t ze5NDS5jg%U=q%6;pqD`lL6sn2&ryJB;FB07MTbzHmjjEA2H|`FUK@!2OB&#)Ki-E# zJd@0|`B^-^KhAqr?!Nm4mGkB;s(9m#&&r>9=AH6;?s=vB+H0RJpET*gic?OxMf&%j zDm&~jT)K8W#_)+~l=sE=A%EBx?=cYfe89_i{RZ%nv!FBlwOhAi@!2vRMn|B|lYw7k z`u*nDnpa>$T7f{ur^&m5f+J$l=+M5==#W8?$dD=6|IdRc&w(K&CzB1nhZ5gqz&B`r zhwJ@-wY@?6;{Q-aQ&!{u#1E86@(_u(JX)e1PL*iqGbP&f9Ep~UkZ8~ICE9zeMEhN6 ziO=~OewHXXPa;Jp%6O-N|H>B^o`Cgk> zAlS!gGA$Mx)&_fjH(+!Uu<$AfdNeUR*dv2|VEh1w^Zvm1J`UsfJzzUp3|x0P8~B|d zv2CuD*zfL;_^yvge6QyuzW+-SANH0cj`&CtM}IDfW4@5YabJPHmc;S%Byqwwk~nd` zBu@Iy5})%m{H*YVuO)KWT-ooc?+xV3%PWLbRz@n9wQI}GIXhc0|E&`Lr}CR`7F9g^ z?7L-`UG_xTK?hwan{R%az(&C5+#hrRKQBHz*C2(pNMTJ~zkg{0pzzX~xa1LER4xAJn zE|In;NTkjf1j zpL9F;+Tj(2g@*|~FZlq-@I3k-u|~#^2~W3wWL{hUH=3U}uRznRfZDHBe;vAS-*{~3 z$=Kh|0_$rm=2Mc0A0#bX99!AG-I-xO6BT zFKvH$qqN%NSt&Z`eMz43y~NL2Cb6@Y1LF%Uo=>1GSAuLm5ziIZ#Jx`^gBRpLg{OWi zk)!7W|BGwIzxjnM56T;??obZ?VD$+8`mC96Nr!f0q-T!{E4z0YQ{JlO31#4gmBvpQ z*gYw%Sqf{HIvLcrYGwJX`g*7Ty!onm1sZwCh&n{!7wCgzO zf$MIYTp}HReTTH(^I0i8>_f=+ZzX;vy!XU-QefA$Z(=`^G~vLK8P>whtP5yEnhTTLFXnz<1xd^U(>!y#5-G54{!p z7cum`B_1DK*}nbJQquj5@_v2BmT$JnwD3xAYvzF8_?e6dJA`FMf6 z@%q>D)RS}MF5uvb%U_a_!=I3$L++HFetU)V>oZBZbQ&uy!51hayLJKY!2^2toG3kd zOfb3t?S<0Lqb)D!3HiC>T~d6|+u#B40i3(cV*59dARd;#`}fVB#9&1&C|Ls23Psp#Fll z@jBzAy{f+KbpBlRdh@g96{zb97@t!dKI_1r*ShtgJK*|e$odtGX(f|GW%u1DR?eFB zQu*@btBkj-zA|&onsS*pZ>c=<^v5z~%4``j_zv0XXH%tP`!Uk0c%*dgWO)H?g&wdI zXctg7=-F|U(GNQR@@8py@H>(mu|kr=ms{+ECls8sq>9d6Dg`xAi}RL9ieT zQae+#m zFwZEpih1g|B>Kepnk7EBL_ayHyqsj?YN{6-z=a-`EM6s#KJuZQa`J<+-8R#uecRDS zFQ5*P#s}b2DD5;F{(`a63G%eX313Qb^lFQBV7g#9a6f#R6rAS~uS2i37`aR$ki`RT z`>|2*UkZDs6Z{(VW7t>)cmQIM#*fK324fqB7eFug<+T!RbsR810K{CQ!4;l;Kwg0F zCWY@PwFk)AXw7_}rk&pWv+xR}0(sx6)xm}E;~xZn-s?6`Zh&mN?YWgV-0)l=>j@HK zyS%*IU_AuiI$bKS@Og;;21}Q&mIv;CSN0!x8{!1xq;<=Y67T`=1EUX+4?rI%={ZT- z?e~HdoWByZN(zDV!Vy1)Xa%lGRj(J1`cWchE|Y<`uQGp{_mr7z zzl2YM{!92Zc}~EeX?Os60do`J%QW##_&egeJ}S{(V{Fc&u@4S_PGD>UUnjtKmO2Pj zXuo0Q1L5zx`MP-pxB|reP@^lhZhcS^xE~garQV^ekHrR6?z-!R6^}gfW;t_U^x%GG zT&tlD%MZlp3Dg<%AisGXK7)WISe0l}r%cO85 zunvAuMc@nM4c=?TV^&J!oRu>0&Nb%GH7Ne!(=hn|?On!qkvtv#N%}60ACtTQbTac8 zJYK-(ryyhJlEMz}@Fvx$jwgKY^$_wxvnz{+pQ-?8cj_Lb(x zjd=x9G3fP1S8UVf&;;UlgK+&{i~9pA_uFr3#VfCT5`a8kvR<)Vmou?Qo?~qZ`#;}& zbDpH&C+N^_v~)rIz}N(a2U!0Ac|do>4qG1ksT5pTDTR>lg`(@3_A{|Zx z4{){tYaya0Ut0M9zS9))tQjxlk?zm6uQfkzJS&hw?mhRw5F_&;?{|yGhrC8P5{>SU z`j<%+FTM0pHQd*-#T)I%R`;mV2_Ajq1Nr5)mq?qIqrd}T10cp|bOFQ+N|8rEe_`uG z-jRX{-~p8PW55G4P%&O>bo}oK{GSJZC4H47#3u|dP=4U^0%If4J^(LZt`qG8)d`OM zQsTQkhB}7fRu`a;pgJGGcg$R49%>Ub=NH@c*ccwueS5{lhx`ow{0FSu7$CdsazVxH z+3yFqx4ydIveEFJ>mO2IB7gt8@0QCEhuXB|4y?c3B9D?T*fKjr_^|b;RTDT>jktCs_6vI zXGq%sxz6#wKP}PjsAV!WQP2sh_yArraRYqksh`;$AMk1U}IEi1(#n zVg+mf*a9IPplR@bxA9S$*o4L-7^75P5ajFPL7LbY}58v4M-MZ}?Ei63v&{%BnSHwMH zdli>n`gr-ORaV|@NVxZT0H6E!{`li_f?T3BJpg%xCA}s~@u^?KA5aebLl1z>uT(r9 z@_)D||HFS|9j>#=|K9=sW7b&zBz=@4U<)vR!NezBzJlQe&OShnQs67dWE;>P(6|9> zq7Xlb@BX+%I-LQ`(@%){E5-{Vre6a20QN%aP>_@V#y8Nc3;ZM)K`O5Pz2f47w}7ty z1Y^eq1w$%NI_c)}Z@*n)G+ZA$>#)U}{J&Bc&^-G$-j3(iwsKs$kc0-N7h#S2{Q z!1xF}eSmdQr=eyFHPG>$XGx^^C}1ABL{Y>D3?B$$1=t&@Ej(So$c&!^3^uwCQ6=+> ziw{gf*FOt!yyg7ffA_o5?0!=51(5$EApd7JlKmgXzaN)iY?AQ`@&e>3Se?M>1;#!g9{?FY0b&P% zztF`ItMLK&3z<)J*c^$XXF?>7o=L_>Xlw%J4pA4t9x*w^8ZQJ7P`zNI1JMThfvfC% zPQd;r z?2ADEz~EQW_Xv4Jh6kukV0xmG4`9!ver*BJ94p*V7=haPiNwHoGI`MOSnL4Qk?$va z?m4;qItVCuy$n0&#i`~c_x$i3^b!>y9MU@i1-)Zd%hZ`k=m;&JxN-ADfPr?G*|x4M21-fL*ctyk|){PUPI=X=?t-{hdj0CR#$ zfxpf>-YLn6x|4oU1jYas__n#~F{WEQYtbBm}0onyFw@`Bm{g~nL%prna0DU07 z$CDCibG+3BVrjYndoT~Nd*9R;H}@J?4;TUTeUr}#%(qG=54?f=JCPVvId<&*X?8y4 zUtJHIXKUl?nsdwd$(is6`Dg3#r|WvFwf;Wq4S8HJ{#jE?9OwYukrM!aV2jh|86MDr z{=de?{~zH0SNX5__s>55{pUUp;PXs;Ajl)I@q#3JA($NFaPENG1dJCR`Kd&=oCY4i zd;#`pWUMfV5nzv{S~))8^&eRez_3x>LY2OcxipOHy+N73`R1pV{p(+IjG$lNWIn|( zTVNrDztMRD`44&uiraUfj^=0_qz;jX{_Xn0#WV3;gvVi4-0RKEOO;Q%iupr6xvzy_Oay zY|a&ERNh1E4>dj+`1tmP>|a3a4;V15Y|)|>W}_4Py64Ttuj2!IaeVdFl7POPw@l_P zu9Ue*7s!RaMf;p(D4|DzabY|{He>9ft%(r)YuX$${YTj8tI=0yl_l)C zWQY>DPGE16;`rStdhk%6HiW!d=GH{i$|EQ-Tm>D02jS_|bo)XBJgQD~ z=pnPDO)J(4+FoLe1GGN$zfv?+Apci33H}*>C>U?!kd_Bz;022N@Y%<|K2PHVVIQH! z3%&dyUl(A!kTnHfj3BO& zt6%okTXPNe*_T82_PW3(!2dh*kv9j~h&tMy-O!hJ%PXYCs1;HK*;ItRmqysPMTYP* z{@lnf>|N|-QV|J$^$PHE&uKg$>?1_H zQ2m3n38)LGO`tV~T4${Gz_9)G=J`SC~XQ)AdbExW(=AN%-c&U^{;=%Fv!3Ts8r`Vs^qdaua+NdzFcG={Y=V=Yunqy|uFHI*>+q`P0-SU9V`lbUYTKxMwGK_z{t_vSf9YD{SbOHEwf?mibM!)GK~|$Cx94%jSsNLz(O-~ zHIiT*QIIo;=PB;hgY0hCJzUqlzcK&5>Br)1sMIkA_Yu@(m>BE;iM2dJB76T!dXHTq zE7w@NIbZs6jrbpp+LQ69Q+IpM^~3TK8*)Z4`BQa@Bh5>2Q)-nKx+c7 zy7DE1f6f|WUyzbsQ=}!;d=%PpXO$#{2&ZHO1JICSS+2pKG&BI zgmr-+kJz^dpbPl5#Tp}|JwTrTY6&@SoqN;z1h`j&IzsGW9?f+Fb{%SZOvC;NhkeX_ z;(G3jIWT9UcKahUzcO;nSJG$H_l=5w_RA_D{=<8Z*O~UJzn8<$J=m`oVO9elVwaxS$fCr?<44j`( zeS-d3Z2_LscmS?V-jHVxFh-!g2&o5zeFEwi#NOl{HL(G+XU#kk+5_0jJeqlcU59Ls z>Mu!+Pscub@}id`^RhV~Dv2D;$O+#{pV2=w9{v&kD;xv-Ul787roEYI59@0+;JyI3 zClybI4uCy5<^?-zz>Uq#D$ncs1ND{8ox9ld2s1NBn;QRvNBYuo9tOqbxh_wTz?<5zW_DdkrRRcu?w3H|C#opVmy4#0rQG|o{bFvS@vho2FRCvLtdfy z|Ka-;vMK5Tnd4MS{6qh5dHzDk|1ueHUn9$Z#lOE+;dRvOOl!X`e8A@czCNJ+hpNR0 zU4L@p7u39A<_f_UpiO|i$~~Jw55V5$p?lq4H9xA4G+tu`AUuG%0yclx z^dB?1!@~<*V(eM&T`x~aN}QSm^(#kqPWk-G||`?%VLWCfoz_1&)aSIQT%Di`U59rOv;Z zM+Trd0L-1*daG&Dg}njM7r6Uomq?3=nE!`jJ)Cz~l?L9)xNO&?lgNLCqJ`{z9xDK(DbV_OQnTGQMyM;a~Tjf7X5KpL4{#VxMQ?KM86vWsSUPTb7yH z04ufE{ZaM*#h5L;`KD8h{@=3;^M9^G{vUh~@NqOL{&mg#b@ZS6Yp&13Jb>3>eIVBu zK~^3BJwSVosUDD(2S5+t-lZO3YytQK?96h;2DsNXKfuMhHa0$>HjtUs%zO#|h48^d&R8scCoBX0^Q#}LZ~PtP|EJ~u(*H;K552saU&`N` z`ds&L+PO-``*;tYPsYz3C2@{}2RzpRc>s!k);IS6*xrw16n zAajOYZ;>EJAY=<*FLO`Z8e)?lKpwz7zlTM=Vqs(90s47U+hGk@M@`-c>?6L<7~hef z0sG9eN|*b@K5H}z(fd7e<`U^UX?f$~e_ROvigo{-hIi}FH+#0Gz3pM1xF-)tfC?f1 zU;D-?{`t%WR37)?2j8Q{X@Yb|4}hNSM@sv@KOu!zp#BHg>HmPuLCmAsVP=<-TL<&M zIscP&2Y;Al^!~!}$gjG9ITj@5T7_sFu1R>k0DVeKyZ~#ToU|7G3o9gn+C@@w3W)hc zYOAI31*aEe(ghUzdajKJ&@Y%155Qi=p0=^UpqB`B0PcNYfQMqjUj1|*wMIHsiqHHJ z$mH}gcPiT9WQiaC5qzjvFVtQ7I=^C{ytWW?;v#1+mA;dIY&!h=nAhjkuwR2b3t^tP zS0esnpw`pY$d?UZ|119Ac;jo+1E_@fM-PxT2fx<1_&4(jZQP;zW|zYMkc}=ez6ts# zx^I3NYOyYtZa=@u)GKt^;b!Ul`&n5`TtKn`4Ren zjYI4Yvx30`TAcm06kbvR`ycv$1Iquq?)smpJL=PGqUk@-3w)qA;*Zs+1h0Ym^tiwf zpObpwcYC2GyI0pS(i3${v|V~)&N*wCOFN8`9-McKn&y(e7fY94-7Fpc_NcTO_PVq< z;~Qfau-9>N66_7;a-io}0dXGY1B!h;uL}>*JVDeBa*uPb+j;@+ePF<1LHh^%gnNl8 ze@o4D*hk$YYNt>?5#R4$b|yn6?4xI+v9UNG7QB`@8PW4rNWY6$H7@?4ml|EZuDExy zo^oAfd~kM{SM2j#bkQ2;gL67~K9z9j-aRe1fQ=V z@UMUOmRnwzXyhC-r?@rdl^a4YlGYiB_g7Rn!ccLGk>-Bcx1@c$G19T)SQESG-re>w z?A2?MkeJiRIVYuvX_R&zEv2w+*yD^mq3c%Hn7KzSkNFTY2Y-|VZ3V484){O@9e_W} zg$Hnt8lPZD4^SS!Tw&~WTQg+p2DNq=nBbupu~$ExN40NKqb<)v&2*H!Z-0sH`iPy& zbUgh1l>6+%#(r$H_Yq(5u}^)g2=UnHh?UY0J#-q?|L5aBP3C9O^BwL3to!)SfP3Wu zMTq;+2Y>xr4U_+;`u~Y1{6kt}R(PMz=Szn@9+kx9B1IRk2L9pyZvgqPen<8pzvk+f z<;ELclN)Bdnw4f;|B767<;yaC+P`G-q}eil+%t0CxsS`SN8fK|8SL_Z*UGkAPdB~H zINz)lcty(=Bcww+%s1=;>{G9Rj!_CfLyr>FII))l^ab`iErpKIZObd+^LSc{PlLXR zdC19071kawe1JMZ20lgP%I zx7ateeE8h`CAQP;rjF9oQ7HDAS4m%L2JF-KT7)@K(UGf~4*x#(Gx_zh;l2jU8|*{w z7hHs%VR+AyE7r<<+sZVrJ;5~gPg(qzU9Odm9mb-+(Ku;&(j1F_@YD!woc`!Tz$4G9 zhk4I@J@7NEgaG*Bi^cNHGat*f*ZfD$J?AmmXYZS3vrVR;wrQ;42OYr=*vEx+j-~8( z20eiGP7lO9$qRVh>31`w<#8Vi`w#~6(3B7G>{C`A0Ka6&Cm75mbh*No2e4*nq1pSk zUWoO>LA?+#!b34*uQuFA)n`&a$7lN9;NSTA_m$X|Q%xTQlQ)Tci9qf%uaekD?WOUn z(7%FpHS=KMcPYa9HwpgXn>O(&;=cymSJU%r!#!f|$;s#?h;z|pmB3$_T>XZ{U%u;q zRR+(Wzf3j-M!I)6U%DagpM=hloVphJKXi`<#y|BBVzpUF;|#9M1TR8AEdcK#0ap$L$PD8HoV8c-`5(SCe4ReS!jVf2AILhFK=pudo*?rBs0Vm?g51+~9;vMtFg-+=AH-f_re=_{ zM$DWM>H@?HFvCMJWUn@?N7Z3cGc5LL=Nur>7Kg$Q`akRIH*r4L`_zvZGeK^j@%0n? z%&{5{xsRMHGuy?jv%x=l)c0#F{L@yXe+<3xlIV|_oaPa(6JfdpulaN-u1S}P#DViT zu*Pd*zX18REzg@L?GAcH5?kFQLx#m%Qi)`z``IMmD1Zs7CMY4?Yv`ycL< zk}WQSFMG6fDn3unJmEfB?Hrnl)0*~pU4N#2zmGopL3;O|Bqi{Pw>sf{EBmKH7x@X{ zKfE^l>|x#DP2@iub>zK9AE3{Wx`3I9%0ee4jMrmz4AgCLJ z9sv1etW7Xa+=P%PQ2_5V@rmel6B_wNk;P44r4 z68rTHRsKHINu|a3Y4anu&*)8z^Ffa?y%>D`3jCJ6x1(6&eweM%kp6$u{~NL9p0F1g zBd2{>7h+8feQTuNh*$Rk^@gv#wA~2l((+tsoj6-MqX+kZ{ce$$UY={VEcai!o^{g{>N3DSkxk& ziC!rDzTq1r51^0G=>na0zSrsisEx{r2XN179})Vmj4gn@jXiFB+b%!I)C#hH2>pS; zhRYGw8UbPl7~-LrvRCW(quMN~rycfT^CP#n#|Y&0p>G0J$jFsgPfy*Fb#sIVqba6+^?3()|*U_4qHR-hy9eignIwRg@5G*6%`d`&3V0gb(vgt z>Ay`cB=$rzegX0T!v`=Q0ro)W9d3gT3SIO<@PJIS3NzUP)LrQdz@F9|K|6yKd!BJY z=DM0$Llzgrh>HmTGe#ExhIlBZ?A7}FsP;-~xWztmoCaB&f7shzZm+{W{i5pcGx5wTk99+wPj&vl&LaNdk8NoAAI$&iGZ8bhCz(1K*2?5UoUy&d=2K+5ZKlgkJ6<7w z`|I^`#9{Zyg%><4x83@ty!Pr>!uf)F5SwA$RDYJQv%ddn$KE3?dQ8RafyENP41Pyo zKLNR~RJaky|L~epFH+m+<(KBl4!^prYBrMc0Qd*!6X?ACEs+1%o5;_o#sd`pJO^?M zdzgC}d)n9mE7rzFUi0DuX`gr|I?oZTHABR z)|M{Cy}>x4T+zLy@2zL4q$SIfpy;>;O|xC z0j5?!V**YOF#bRn6Cf7o3t&u;z5vc024*aF%$z}D37F!c7_(RF*CTZl-k;|7GoFDs z|Ien`I6v(i>iwLpM*GL)_c^`a_xEwVbnX20bn9&JkDvEzK>XKr|J3&T++P~+wt9YT z|06#?SKc%K>qWBt5znEw&oW6~1?;1@kdJ$PzOmw8SDQ8gkF{&dk!N_H$teum0^|Yh z_jm$vfy(MS0QacBXLTQkV*(j+gpD0Qj4&?%m~nXlY6q}hhS*w9>jRW8rOv`VR@L>i zJ6_`K+sU3tn44m1`l$0z?>D}Fm*Yd5Ka0Q5tf$9gtMI=j@BTmC2RswA^(T!@+q3_^ zjrCk}hnDXg_~%*ufxa(*dO(mHWHCal5HnF=CsZc{Z1GU6*{i01 zRNrK3E8N>shkxk(0}$o%ZsCqHP$zx}4k_f>Z~8ZkoV4zgE* z#swG$>b}V|DLN1RC@v_odO$c&Q1`FDr**yn_1!dI05D;4gq{Zh~s!o!6%wpf^{qTWNmod5hn%{dmWWVd;PblhholNHQl4? zBB?_y_J<&k899C}kCgbKA9#8{Y<^eQQ@~iC#`&rDoBTdc_Sb-Y`dm0qn=^C!UfPU* z-L3Q^Ryy02ug!S3LfT#lT^>38g_i^S#D5ON-zC53|H#Ix|LdCaT;YtUPd{BKTmNF3 zbnT3KDa{X{Ul6h3mdAgJJkE-mb$~P;fW2<=1A+e_FTm9cYn>2hjM5GOhKMDX8>lq` zz#0$5p1o@PN994O&bXJ)s_>7xzFq!d>Ky6Q40?G4dOz{c+}@hw{9(Bt^k^XdF(YeZ z#y`|k6EmbwkIieez5Y%!{&gj*&Kje+_ujXS4iMlUHN~tO zV$Bfi1~cja)C*LesSdz%T3!IKfSJQVjR5`QK|BDp!oZTv37~9+Z_Q#2nB$=sv{#M$ zsQf22*Q#nNW5bvW`qONz`1kEn z-JwVsl-bXIB>l(#7rH3=_oK!jc{OU;FGYM0I#Po2KSv_Jpw7_X@}E3Q$$RRtGW~e# z#aV5E!w$K-nm@1<`Cctg_{{VW2zWp?TOi;8*z@oOq}2)07s&iz%1N~Y42HfnmI<^h-*1%8%rS(0S^}R`r@bFVjwJfcU57XyeSXyYFUL6t zD#Y(crj|84{`G@oIUCl12l6)hG8vkuD$Z;CYjl5);{TJ67swWyp=Ub#i!eXf=>VPn ze7~y|!an;q8u>rg>Hm4| z|D9z!Hu=lC|5&?o_+fX;w#Y4H&l~o_GBxeki@ji%nx0qachv*4yxQ&mtdalmYta9a z@xBcR|FtbRZ65Lj@`A=X)D9Ro=9%=|AkI$jeUTKM3m+b4r`4(hC=W=h6LP*lV8rwc zQ5`^Qgn%hxE946V_IM~3?N!4+s?L$x(_)`Fe$MB2*oRj4SH0iF`dwWgeSVtflVhw; zZGO|M71-Zc@lU;<$0wgGl+#arNOt|pb+SpHNe26@F<_2LV3)!-O}|uWyOGj$yX&zZ zoi1=0Yys*6HBjM|kpI&l{~yi2|4(y}pMLry*<-gEGH}3cGGNac^7oUTmp|TDDSx_q zEvQU(xu;C_LH~iFxQC;jDwk8AFP90gRLBD#SIC@2m9omkd=&T82|U-QzMS{7eg~g_ zwg_`mFgG#K0oXTSl(ZT03VOJp&oFBQRR^fm4uHNuJ3#9Mi4l_%06jo+gBcH?FA&)B ze1WP50E0XfllH3N9(`Vuda+9OqqcA7S%J@w{f^E3SCjqK>-hu!2>GJQek1o)m$JCm zc`k()!v5dL8s>%+pTX%LE=30?;Ix`iq4f5JI<8ICFpyEK1s|yGK3st)*-SNK?MCs zNKwQkilN8!y&nDv@P`}UsgUn~tkM7sAE>$vFIir$m4~s<82gr*^;R1IJ;Y4^Fi&T- zwyU?VeLYuw0e)^EePg~303Klb;WIZFzCd8i)d*@{ATX$hk4=3o-)F5wP7QLhA3jO; z^EpEj$8lbltLGx-mdD#(BI0%-{UpX$%- z|IK=P_8?&Yq0YP9i=1Ti_)vF7RnG#&sf@=$ErtNcGIf1$r2^@@-G`0kH`KP@zMOhKNXpWn}1C-(AT zj&G*?{#>w6{a^8qwe3s%ZzT4Arv1#lXyX3PHdwJ@jhqJCfIfi|&h*kaHT3}Wy=A^y z;RN)bzLtK$%se2#e}m}%7Nh?BpPuN~-|^4)pdJZ63O_e7RF`Dx6HupEK*G;jfY_@j zMqU8jpa?OG(_tqpcJq=o_c_zLt;=g}sm;3Yw(IqVj|J-t9?d z>;Phdc|o)TTwWmaWK6GsATJQ{G}Z?JYa#p-i@+og#i+f?@1ydU)KH6k&g_EhFFDux zDK*~5_$BpzljG~+eWq_eeSS{vQ}@Y5_B)&3=>EWdGybdZUhYZi)+(EBhD|`Z#C`?A z-Xsq|ug@;OzA2;JS6!e<@c)0nKjeQJ{vq#;&oayhfO+jz!gB%i0rCR&E{aT8EB&rp zE3eMC3P3~g0M%pIm%KIdf{hJ;_2mq;cKgk?vxYcVguZH@2lz71-}`C@5F6A1*e}G` z0a@aKhzSsLmIs)5f_P3$@=%Q0tNcAGUr8nLH{P`PXFdXQ{P%p)<@mdqU0U0B7Ic65 z{Eg4g<@c+<-^ahdE;Z==I(NGeJvbxH^1m7*u(pAfu@67|K4$x%e--){1-1Zr0QP9x z)NF~}z&?b?5rY2gQ^D2H|Irhq|6>i||H~r(75~gtP~7|HFb^Q!eLeu}D<7cGpeuBn z*BW4MvM#vt*|*SBlygR?Ygu0ld@$$}6wDK$?DFwns}2B}XncXLR{*gC3kKwk5Z&>!Tk00Y1_~wFrr}tOG zKjvetZ}vYWkJ_M=KXiGK{MfbbqlP%EF2MKZYz^kD2l&TcWn6&1fWq)M5|&)M67{9h08p9`j0 zpF^HtcV{mDqwc?>Ix1)8u=f~enHyh~u>(e-zx4xF2Usugf3L)^W{v{nzv5rdihVtY zcmVqrrSSpq0NMkz1^#xo)nV$sdbR%#jRhWg#Jx5jkhOvI0V38?I12f^`1=9=v4`tq z2L$mz+5yx7oF9O`K=uoxtmParV9(VDEB=Yi2Ji!DY%#T$#r{yl9+Br;Is*5C*rdvS z`uu}Q%V6!C&2MBsupi(bYudK~@UP$N=btZ<1BcxuL(nIB*x=hG zb<{($=e=uX&j%`G&-=?QJ%DqF_D0|A!SJ0OhPd_d&y~yB|EiEH->Q(uKd+Dv8M_W` zN$LeEPio(Fx&MZ~C-Vf^e~kY2p6U;T4$wn&0K^32S3w7W-cKsH2KxV{WwPJnjj8_= z|1LJExcASBeLd&E1GJCn%n!h5apc<ePdMTqhmC z`2i3w3;Y1=8yeODfIVW+=>VD!0F3fb%-XAUdsKTO^{|uuh&`gG*KUth+5H;t4{Ces zC;QW4eHmnbL*w7K?K-v}ZE|Ycw;Um@dryZHAm6MKc6f1^;{DVfDTXyy?}kpwz;WH*1E;br@p0Y`{a{zjGra2vA_dbagNwz z)L;1c=U(=CfG_(p`2us&0pJG!23;&b^8tWS9*S9eRsY98pV$%ai5~t#@b?B*MmwD< ziDSR4iubF}pZ)w$%Vg>rHQry}cwYwDZ}5+qJCO#G|BC;2-<>agd&8#-y}5VyanfU} zD-mOYy#m=7#HX|C> z0(@Se_}8<~2ST<0eS(Y+&i>LOKc6~)t}FY*(*I8%Ab9|DEm|G%4)Oqz&p`Zh4-@-g z{MYIW^mPDN9~jmFm=6F95{ty7#ip4Z0Ic#*?AojPJ?eX;Zn3g|Xc_a5Vt-_=pNsc1 z&)?+w(C!ER8N0}o=j-!1pZ__Ze=f2=4gc_8=iC3M-|IW?%r`bO=SG@Yu|K;4^Lkc6 z4k2$w_nhuQJ^TBV&rQu8ejj_8_&0>yyCV493&0a%crVu4Y&Wx9K3Zb;Xuf%XexCQ< z!#;(MYJAnI2Vl<@4gcKw0j`D((A4<%)~l*kq5eET{Q#r>Z506eT=I3Oow#VxO4(fN zftYuNnJR4#dP9;IArE*QVt_vW!#u#pfR7FJlLa~e@NaU0G!{TV0BeJ6J^-=kasq+P z6rK~SJQTb3s_u{a|5JVNUMnnr*}pQ{>KI8J@kv#le<1tAK7aW9>LUACq*~=MnZVSK%id?*{^u{vz--3qW0qP4FGWZVX3xur-JC*V3 zHV6G%qPM~ZF!(Qr{4a<6FNgfMU}*@Qxmx~@%75Zt*C`Krfazrp8{qeMmIc1ne0?5W zQ}&78`S(|u8A6;b%zSH82XL{6{}2zzxi)~<8Nu2B^#iarC=?4|Urk_J5u_NZ|L*V8jb*^e5(?XS18pFN5w`+ z<-VQ0>F|#=?Yq9+h*I9Y5o>ed78MXlP1f$3c z><0hl@;v8>D*m~?{r9~^+P8&&wI}+6qYkL;;Fl#a75E?T&HBQ`uxw+8lMa?zYN$XKMZW7T4aA9|Czal6KzO|s z`+D|x0ONu&_yF31uY9wDNNt!{3-v1IS@`%*hVdWb0lDh{E*}7xGS~|00$e@-Flc6o z0+X&kfW`ueS%-bavSK@zv&IinyBX}8`F)7_^%)DjpD{@I9@Oq<|Kh;!r}2K~`R5kz z&uaH)kp1fw{=<8*p4cb;6SM=c*ZbXCo_C*y-S<|bIO6boY`hw}s)<+ko`SrYr4qlP z68MK-qABG+@vl76$A4XTfRBGXXT1<>hu-?$e*S#=SCp@^Cy>dpF!CSz|Ik{2{V2`U=BVvqXQ6&z$CF5iUk6@JQU0JDz`_q8&bDg{Bw>M zVt#+a%*az08Q()%Zy(BjA`s!T(SBk9gWjR|}pmeOdiw z8U26LVE?Q9Uq|fwId|r{i@!y|3!a~6KTSS$0F75qz4!%bSv11-vSz#*KI@{f^K2ZD z_`e?d|CP}HpKL_^|1a?WXR1kBM;?$QFMtj}9`Mhv^S`FLSB^jSewPCT{U37y+8pv` zX8ebEK&?6eu|o`*x&Y1*c76aqA1KHP#!M$*GZYI1c6lh4?N#lMsxPEU@qd>De!teo zOX8@{z-!o#K>E0IxSdJ%Hl>l#?E`y#NqjG4a16-v#~=|GNP3Ki$W=w|yUXZTSF-pEMl+_O;0g zMl9eoU=O}`#Urs91x7tT;1b{$80MjvwpTSj26n@7_`{lJkzE9xy3;O!e z?svMsnceB|uh{2V@$YeBM)Ap+7N97f%C)|6KN1`e8Abi#IBD8b7)bHnFe$@TznD3J&`+dKk@=Tr)?+XaJ zzr{cL#9Y_}_^1Bw;A}5V4V+TKlK&zEuW9&N%kB3PhJo3&sde>KfE_p zZn?AW>EP_+p3fP3Q~V?L{^tj+{5N}y4|zBg|Evf2)6Um;@#@ji>i9P$dV2`}Pc^Rn zA7dRts1_-A9)Rz{*U20YU@sx|GXL4lWepNn)vqN*|3Bh?y-HA9$sRysAfwTn$jB{U zmMQ*u_UwR+egGdk#FFs?I30j9L(~Q!1{n*aO-^hAqr@uw0GbQHKEc2;55=~<%KWH$ zLh5AvewFV3n_FDIALn^M_7nd>u0M7ErKWd*!N2M(`WY1aJlCfC`|FiK_7_aV-1Vly z|8!6O=L7o=_ZI&y_Xe@|y&53*M)6Od_22ir(bfYoUj_2N)k%>5#6Nmx6x;y)|7z&} zO@V*N>3~N%KgqiAfFkf{)&Ly#q)n>GukYWYpX<8!-*1u*?7fJYfL*tp0o+6GQ&-jf z>+fmh0oCx&8bRR0$BN=d@nmL(xZVIJAJEkW5{srTkUaun0|2Wb8vt15q1d)pH9w}F zG5C)RE;lj%!RYCKGWZPi3={Kb4g&Gdd>@_VV|shxGwA*5{rjKE`8?8ee_a!v{k78d zb9%p7(@7rwv0qj;w*Q~9Ua`-!FZ=5v_e0o^UxWEE^u1kHE=SC^vNxamRb>^=sX;DY zP5dKYz4(mxB?|pN2K*--{`YMv{8Jxt*w=H7Jiz}hsFQhmfX*_!=54#4`ShnMKV=Vq z9e#DGbnZM}dLj3x<1P=t_Xpdby1(vUe^2{+U3oyA{ebiVI30jCfYt@l1^`Cmz^cmy zP#XYP&gD@3Ahj8=zdF$UyQ9C?@py0Z{?6}jbbrSD==Z1Y@A~_Mu}>bL_|JpvFHrnX zSR;KJ8~>F5kk0}B^N4-s-YNb^y=JY{eC}7`UgOm!2f*|Mur;eiBQa~5_@99qg&VD^Mx(W1u%73+u>dONh{*ySz;QwohoPs%v8_xIl%{R+rlfILr8~ZIX_ixaPh&dwm ze<5=J6#qPD;sJ_(oO7}Ph%L-R4l0oy;vT>m=Bey*L$e_(&T!GFH6 z58M;`q=Y;F+x4%@xBOR`b?70UzY01)!DQr)ApX~+_@4p$gEa_>|4e#7NWV(cy?i|Y z*k|n}Yq8mffk(dAQe%JY1I)U=66R8%R;=YIpIhHQZGbx9pO^@EfXYjrRfkr&YH9-f zTmaMrPzOk}0njHLm<{y_2c~%_#_d)5qwdb}d-i2N zKa1-A9^VUmqP6P&7W++x|DU7&?-I<@Q~9s>5AVs4+)CTeX*xgjT*W^2eG;*^$hDQS z{k;`IuZn#7stpL-!=M9hxBe>h2JF7cRA6qU#BQ!c9YDDxZ)zg>ulVO0W#Iui*#YPY zoy6S3IQ*zB@EyI~Ks~@TpW>do-+#M@QeE%B)O0Ad?N?>j0VX zPb`rK5dTI8$Yuk$d|<@tA~DwL!+wvLcmOcXLosfzsvb2ykZOzH`PSi;vofBOGHCTHE9>A&`g`mB8Yi{g)_6!4=?*cj$W}Ow>h_$?6nT((P zqgl&*%YMG8;(zq{Pf2m{DCyJXeChbte;}6{y1)AWd>>%WHb4%3K!bnQ1HkSE27`QH zjRVjIU|#@W*Xs-LEpQEN^H8kYEBmN9!l~WybNUa^PiP;BZFRZnHO5+FJI9-Te}AS2 z{r-&mfiJ0!qVnJ8V-Ejy(*2c(^4#S3$6Q0`nCw%*UUi1B*En0x5M+1kIuOq!;F^2d z5M)~ndy+&w+t}JS(cfNy`4&G)>vKPr$RF;L;ger%u>Gp|XT9q0ce+wK(O-r7-*)?< zf6Se@H`xB<0~Y@kz&{uT4*O`HuJeOprds{)U+q+A4x~}Y5id!aVRj(?vA)Zzok z*#^*j;Ncek!K@Ht1Gv5boEHe}62lhDMh5`4c_`NHm3>sZAT`P0KRN`pz5^w;+v7Iw z2cA+@>!)@8`1{EDGqPW8f5pBp`)kwv{dMv6r2zj`x_<#;e+4T4AtxHe|Btv%_bo1y zqA}k>zgvLbxj*3S(S@je4$}nw{Cm@9w{XlnX)*kBX?ezn=neIzv_0?z>AcS)(tRiF zo$iyQL(7qJ!Fdl$`C3<}o=?y@)T-}q{(ShW`eAk*{Z-8UIpr;h%p`_@f5`si&5-}# zOO1tp*2{O=`A+o9fiGzy))DKLk=*(gUhp0K$@8UXUZmDcBnes4xr1$!5=%iq)f zUROK7vxjT+0T5HZ4Pfd4fI;R0&0x=E<>=MJ!<+U#eu+2lUZm)11wa;i9q+X3g zXg3V1h!h+qi9a_W3x& z@AKhm{Z#goH!1!bNcT^w{BH#O_wLF4$r(EA?FQm3jata`*GF!B31-8Rx&rSV;U8js zXiM~o?Swv@TR>(ELeAI&54pa%1XDh5_E6m<00bkyGpIha| zo8J)j;%bbwRNwzGM{&`j&P>cM}*#-#W0K`B1 zaHb{@_@@tmy}{@M;EVuZm{_)$2DUTy1yXw;H5fmqy?`D9u>F6FoWIjG?x#KeeA}P+ zXPtj-w!e*S_&JY(-``&kT_c`@wM*Ci8w>w$zdau{GUHGyhaMT&bDX8az8N)9SL{#I z2NH6Pz4rR{o+w*yHBEN=+YCAU(7T0m;~#zW1Nr`Y*NnpK)~X(z?y^Bnx@S*3@gLF( z^8tIqrfG3D=1JcL{G<0+8vd_`{{O6HM)_n(>R!De z^I5m_Gw{wm_qb8cIQ?O{`l^@Z%{S)-c@2$$ebxQ>9sd01)1-SF=yC&ROB}L4IT0~G z%BMj7LCK<3{Gk?b$rn zJ|R;K{v#>a3xg!S_jA_wr?&s;&iBWhKjZhO?O#iuk38%C4UK=b7ndzvEl)r7kv#Qe z?)2QVpU6uuej#tX@wKoo>=$1wlI6=+OGO4}KKGI8kqrWP?@jeHvG(WJzrI|$wizj1 ze|p5c2EgVe#fe-w`m^|!+BtFnLg>`$dj7uYi$M@#Y9A4qf- zb$`fy==@5_TcQ6q5dOpWwJz8EOk7X>Z0qt~x&B}M-d3$DlRy0aYU$J(b0Ln0e~hw! z(yFTcS(^?}i~P^c25>$A zJ#t-F>Q3v+daCTd@pV^SoU&(7XjzMIuCE?JGo%o+MU37*8G3&<{I8P@03F}=qpJ;|_z!#l$OR()O&pMYfq+%@ z0U&RmSav=D%6}5DZtxH62Q!1wFBm`5xc{!`^QZGYbgo~3fAAaj`lyfX@AEt5fjq1H z4`e@HQ~Z0_=Q>AV^9 zz~BeFq!M_C%@0{*a9<<-Gxz~(!GCT(0Qvyg69hg$ViIvclMC$k1!O(2=?y*%JOJ2^ z82JyZtNb@-`T<_Hw*LVYk>aC6eLk7@1KXcHeyRU6?`U0ZfB*9T@b9JIa`^ic`^3M`1KeIsivw~G>%R8)x{raZIzTNp0DJ(%qT=7=0r)+E*cS+W zL5b-|1lTt7JAw7U?`QDOnxBP%@2|&5uioFy_hH^o*!P$3xWBFu&zbP=c&yR?oAK|V zz53HKtG>(Vi~cQS87|LR!xUm@%f7Bk09FaCi3SKmntI)5PdA>X5h zDsc`|1?mv3{NLE|k1&qO#b&?6p*Mbudcu{c)q;QIV%Yn{zET$an>aQ0ZXn0}y{-G* z$ADs^nhyZ-pIA~qp!xuVJOCF5OsfTe58zbw0iqt5wE)00v2FePW=1eDuSe=Y;2*v} z=KZ1H$IdgW^8V=iqd$>3|7W?pAA^77{iq+(zbCy}LJ(VqUCdsgNC^&g=B z4fiLT>m%(6u zs)zk-IzT2HfU#`l0XgD7cOL+I0=hgPVAT2mfLY@Mba{ZlwCe|=d4RyY9;tB#|0YLh zFmi^TM=#+8CWn}Pg^WLuv473`8{vHa4Tb+qxpm?!0m zeg59YjDN#Fo$mDYa*;pIL{AoApL4{M=p$^Yp7^iL2cYtwXVn36?Fqy@Kwz>e4-o!I z#sJt8jCBCOGBFMRA1KHJ1m^Wf-DL3(|6t-ki68V1eE;~rLCv3+_h)?nko`L2Ba`f> z4xqh$GUfgFdXMr#o|Qjl!oT`gaV`MgjWpZ;h8Ga`F2pC_qsRUJFIem+GGQOGJz5JT z?%ep~Klvutkof2E=;xKv1AU0tJGhA0#|!~Oh6e!uz7C-JzwZNVEFXZ{0A@A_bpV?O z6!ZktJV0QXm?pNp7yvM@N9t+k`!6@X|D*jGU(EUU^8U_sd4G-J`^#Ya8~uMH$3M3z z^?cp0yuRgVDJy!VV{2z2~|3Uz4~cAa@~B~FGI_Kv;Ku% zjKFyeRKyt~m>(42pL{@hfZG4Q4dBVB%(;M0#`!YOmxZbWsQkyd#(n^*f2$AB^#iKP z1Jqhz!~lS47X!d7ACm|Cv_*fa2(o{UeQjWcne%bnS2lN$zCX+uP5QonGvlY0UZ0tK zfBa1P`TWnUYoW5AXO;iW_zwW5dsSsUuX()my~r+4!)J%u-RP|r`+>e+N9>aqYz+9P ziqCb_HRSVK->;N@sDq54e+TD=6@WN9biKiUCLdrJ|Jo1862i*0@IewERF7eeoM^~1jJ-}n8E@Opjn9@GX1`Toee0$WD0&vT9V_k5Ma^+&{Nc_IM6>MIKKCeS6}-Zd`5sOt^<$AI*UhcR`1^ z<)?}HxeDue_eYiTySssV)bGV0-wP@8eeBmo{`)q7+q-FTz z14zR^@_>9FAZq~;0|XOlbky_dv&$;;bHKdM z7k&!(=bEZ759OBCj<4X`yX3zW^7Gr^--A9+;;b-Ig4kD5`S0@p)&Fbr0c65I_q6J{ zs`v7&@=#@@r~l^^1JL=v#J`^h9IgWZw!Ii2X95uW13<3s2Qz+ue%ss3Iriz@UsTHJmuMQz3gj zR4#4l+nWjkt_#pNxRAYr-ONC9&IkVM;{#k5`~#D=7YOr!*$>dK17HkrvB9>R3kE)5 z@_>o`6U_7I5X1!sN_^LcZSGId^8v;Bgpz_5`@;?*)!C!w0`TyLqE5O4( zTq5!ye0Uclc6Zc^m9pJKmD0lH;zUr7OL@;6y(C_Xn;gD6%KS`t&+uAeCUgt<5%zt- zA}I@`GQn)Uc#T+Ju~y`RMU`^}Apn4e}Th8fF+nAg-tqvGtDDW%59|9GFdoQ$U_DCme#hYdHp~cx z|DU!9KU==mslM-{>$@2K`ET)kbB*6$jJ5ryQttb#Qm%QgLdLybA%{L&Av-@%E+yz` zQb@dC3Zk6HIf~xx#C##~~&&R%p=>Xq~_gc;o{NJKkmD2qIM~EwS_vt=d zXClll>h7rIo(c)*ZagQ=@(4VSe9zEbINybJywjsQ@Ep{GXRa^mmfE6EX&X>$tZ@sh zX_RYuB?$67g8V!~z;@&c;2l^`VvbM|$Y37V!Mv~l|9Fiyzmn;BmHqt;m;PX7CT4CQM+uTvhFEB=9b zQ)|UD;;sqi0l+qh;F|v12>LMu~-zKns3y5%XvKm@!cjlgdrO3)D^B-jc8QHN2&=b@j%5Pg--UupCj>N(_jO0;iC zYs^y&QD8%3a$mluLI$ngxpU6^PCmN`N0X|UJ2i0H6EbY=Q$tv=iXF% zHIole_qy(Vo_$OxPCV@7r2n%H5ZKf@z$E*DvJTMC0Rpy(apVB0{3rGwvG_;7|KuT( zIN~E4|1)*}F89a7f30&q*D3Z7-Cpf~w{|9vLf12dfAW9==l})NNbu#*pQA+HO~Q8? z5WZv1g*61*FG<3l2nhQmNy5HSGJA>piTg?k`z&Dyc*g!rBkbRV5^+!b1N#Ai2L$uB zfC>8?uYoVvKHNC7FPG`fg){4QNw+#Ow!gCjU>De09-QxRL_Xll{xGif8uC3FCjFT^ z$8e6}y_Dkk8v)TKQNlgZCt(Qp8F!SxeH+4ONqD6EF79+5a|Ta{V{Hs!y~r;O&m`Z} z_2gOC8@Shbsd0QShVVU^*?|uG2LC!MjAz>WN{ahSAxD%h!E@4dkFd9rhOk$t`}_KT zePRIhjsa$=14@elR^i|F0|)-8|FZ^|F@0d07>5m@_CK-zlGOa26;lCyWi)W z?>ymOc^c0?uTvhVJTXhZzkr`+z<+v825YlGQ!OQMPE7M?I-Zj_$5V;>K=nbD4=OKk z)*1A{OiJBrPW}WlJh3n1B<#_Eoa_&@tQ^Y20L%ez;-fAe|tb79V5 z&~KP)palGzwc#2mIsO@}C)ZZj8Tb#@p5KLjFFp@|eipwTv%#)&q;tb~<{USY&T`}V zDo0o1OhT=1{Bp!ZSoa6HvSH&NJOJ1x#=SlOF9HAWx!k|XXopiUH*l`?7X$d0rR%1N(_fS4oSJUsllwJXacy=cMyIIv3BC&cSoi*>f>#46?8x z@$cIJij`{mKW*v^b--cyAIx%pEIp71%HXskU6LvXzhZK$ZR5;tHUiZe&!&zVW|C~3TxMCUnn&832yYc`d|3f-J zeer+g8oak)*5X@I+IdX<*OuQ2?|IYd;BU*ptKn}j`9IJFD0k|k|JN1+YzX|b7btUp zf$b| z+8q46L>>nI;Y&})e+{_Lzz3)Y#6b!8Jiycd`ZWOX|08d&ss;cu9oUWn;~xIM1O8p@Pk)J)o{zj=*a@^1 za;g1k0{pZ0UkrS;3;el*A1ag7LpVPva_E$|<=8{-l4Fj!UpSXB6CHQ#{c^}bvmm!7 z7#_gywf#Pi=MVoO-=FdQJNuu$Y{s^FLM{*am&jokz9PpSGPB0}&GZ@cwWE)^PmVk8 zei=ICPU#8#+F+|D{QDSJ+=tKp?|^Uo@!3il`ijV)XIIP7Cp;*}9CdHTb=7;ybUyZ& z`()d#r(

    cmS}(dA(iy*<-oLf7${5+N!>#_~+U2<=r2~`aUNzShY%{~9-7OVdU{{N8t_jQ2Al>b@r?{a|s8X#bs7{@$N_WHsZ*sq%RE79I# zfq(Fc^%(z!SZB`u`rRFCgIca!a#VE=#&_Q>mreUkmTuiJi@P!K@BCSe{WE?&6FGo9 z%CjY_o1fPHpnYjS`FMf!f&I`OJfK$_+W$`fck^d0_YD6`Nv|pJzd@$b2f(=>Vf%lBz(3{z1LGe4IS&~1z~lw{nfkyQYk!UX z-?X(qivJyNUmMhOnpzrsZFb%kXKq!eiV9Y;h|HU}R5s~L{9oAM_}AQ@B(V=2b&n_Q zJ@9@jGTdXP`_A^7Vr$Na-vj>>s^g#bztR1n!~1ewvCcE&d7+pddxb_2d)(>Ssu~-z zD(2N^yO(UQmzCMs<_|vjo^)(K2J+wf0ZZX~X?ZeoQRo9e?xpboWWj$fF@OT-1JwHm zK4I6F^+5KXtM7ws_o}b!J>Na+EzBq%joI(GXYf|~Em|G>E@DHz4d85lV!z4p4;ujU zxJ(TYZFTkm%w7Ym@}GGC8zlaB0{&HmVr$lV@cZTQ%{R+r6C?i{2mjRjqo5-A{oYt$ z??Lao)|;;37gYX#H0OuR^1q(=PZ0lz(Vz2{{o~qCw1!*B`XgQQZ@*n8n{PVB>eKX7 zzz5JCzB$vIl=@K+{|ov5`Li74e{@n0YPAJ{kgKjiX5 z^Xy&b>wX9Jzs1T^V2QG{>o!**zmGkNkqb}*{%h0!sr$#ETQN8Db@WHzu`c}8i3u}v zbdTL{kPhvj1Gszc^2-_7^Z%M0|L6k_-+YZdKw#Tv(Em3m|DWpr8v_0lkYBX?(WOJwg%Vu|$$!cqE)YwMxF{uk=|-^B61^&0>5ORJw6dzNv2)(GAHu|<8pWGQ!VR{5U| z|C#cB6#I@h#CeT8-Q8U8|C&*f+fQ|N-t*6YDqT9+IG~NGjgrFE@Hedua1nFNJ^R0@;{Q4O z|Fg#bHmLlcCc%F_@_!15edwjTK4$l&>Xo|3*7aN~{_BzdqqhI}_w3!Ri|wzUPe1q4 zC97nct)@v=#sR5Mw;v@P|8`$)@;?*)fqlmRjqeZj8#6wz>+IAG{qyxYs}F#&qAfP7 z@>`U`2hd@+hfpu#e1Oyel$r|v>z@C!LFNB8IR5<{zndadAva!Fq0kt`LDV^ee$!vw|_BT`ikP|&_iaK+@W5G1C}DEuGi6N;|L!> zUFAQpPuo8V9@_%?z(?qx#3LW_-@cQ5+<(Ar!W=8(1L!hFy8YrR)ImV@GY>$q&vPdH zXR7~Q|MGt~sQRA`0srj%!M+ryykuokzHsF4%evy<!;s?q`01^<3ce1`o0p#MiM^?#fJbhgX?H~GI>{}1~=bN%lI)&HZ( z@$c6F5cf(B{{@u&@JHW(K7Ty&xhMTCt(eN_|EK0y}ya2rj zE}3KhND+Ow^#P#%qSGJmg#NEF08jQ)56Dse-}7ny*IMtn zn%|i@M~;UBiAkN*P7Bj}^M zJnVda3V;SU*NT6}|A_yZc!1*x?DG==vEJ{^MfPU%ZAa_fU5s1_Ib{r|C^j&tbaS`4D;79PdVGyqkfA+4xS}#QS%h|EjGUtHGM16eE>P* z9~fu9oBH5iYwUQ|+8g!%)xZDO2G#%5;D5pz$$R{tJ)m;w|KrPl5C7~-MH?Un`q%vY z%cJlfRXk;s{||cdUwJ?ce1N!*pl{fw=taERvaY<@{(9f)1Gw$hH>7QAU&8+zsOo*;UuSxbA1Y=c}#=`7MyYP<;Al@Bu&vpfAw( z|AlIQs@4B$udBS{-}V3XXMpC`|C2p{Sqqe<|F_rwmwCnLG2E2>zZ*>c*M|REVt_{W zV?Q4ELc{s|{2g5@{?Rkn%=Pi{AAauSf0FVaKKR4`WB)>3WdG{bWr2O~-(UE--tWgB zEim~sL0&C-mb4r6w8=Y&p*M4`_*dJ1%xiYNbBX)$9#+8y$@S2Ce*Ja&E#Uj3&k}x% zQrH0P2ETy*VDJG)?02>QjfQ{p&wQ1;uC-$M8hPgFkE?E~mS=j;t5%lDZ+5sG z`Ag1kf%>IRzrPDT!B`6j`CkM6>(u+BHv7LO{Xf(E56WHAn8|n_ia(|6vn`Dr#|d>i-!r{E4(&;1cv=NlryQ zFns`w17yNKc&x@)jO`EXcSoP$B{|gl>bfpkv{KGE{SjHa)+Gx2A1KRnUFQ>ye?VGm z?2`4s{ieZJw+uc2^oq_G{?+%#v-bak3=RDM+3?T#fAydLwL#7Q%sc+~cKtunM~|QF9;-C7hWR&g;irn_v(I`|rcAa8 z!)h=4_vt^^|MS2D?^^k&~c$K0j~WWIyfb`QKvTCyre9Wv%$9{3rgELbzAHkR<+5gLm@l z=1=DwuT)G8*zXoOlA4VwE?OYL9w`QJtG{mpSbfGeV1&qfbWuLtmHoB@!B9>CORRKLmO15o>) zXY~PO=mFel_|L%yz?n1bJ8{H1)Sf72W?cV@Tz$DszR{Yws$E$9neNLp`Op5p2f_YF z{hpZ@qSz0gJziksKjQu~zp#I!78Tz7lJY0&`#b#VQaNBC8u{dK=>Oxd?zhj)p?ct} z5$B`-4}ILT#QdoLn|fd9Ts-Gm@9WF(qJs0}sV8lcgRXr|x32e0o8eD8Uv2AwSieBO z#jnv54D$s8{a>-qb0+z(d))VX`B+eVsP2z*p!?^N`xEZ{4eVC+{zUIzU>m)E(eK0b z{+XbVFZ{FP2+5qA7GKgyO{ zPL&()xBIdz2N33j|L}ak5Fd!)nmK>15dZtS4l#7S?;n0xVSM?&{q^OtW{tI}Yg+@w z+@y)mr}+SSKrRHfffRlRR{&h@_fH^-o!HxfBruDRLY2zmibCd7is7v$JL9p7Wk| z&pnquKx^XP$Clzv@h7!EvGxzg=UDp}Shcl3{oKEQ8Dbl2f7Chr-(#^a_`e)70N1cC zV8v*Y9rFU@2I7WX0|e`b$vR?+e~vG53=r!L3jXz8xcBc-@!!H@0M)I5|BDUAazpXI zIQ%;wfOV!>bLO1qn?ByB7@l;}pG|7x1?I+gE%((m4rxcRqr9izjnx0QIQ>ujhnpt@ zDqsh2+;5w^8~-MW@2~&;kAJ)^HGS4wXO?;YeH%Pf+0gil`A3SS`|f+g#?v*g7Gr81 zfAhHH0c5d$Yk+@XUgLiB{dL^0Df4~DjK1EaQzx4f5d-9=&yjzJg=Z>1B5Q&j2COg! zKp!B4|5lIv6LXXSQEPvO*Zu>hiEY8SU_A%S>z12p@t>>3b(7uwZ>Hjy|2B>RVhsSw zld6-c|AGH;umLdMP@w;P8Q|6dY_U4vw5QO&f`8`!w50wQ{9_%F@H${IGN6*!hu#0< zo9oJonfaWhy!X_T@4zRWX;M?(HGh1cpJ+(rgX{MT@IM;%Kk<)Rm<8Am$%0Di|4SRp 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 d&2d6j` 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 C{Rnpe diff --git a/admin-panel/os/windows/setup-icon.ico b/admin-panel/os/windows/setup-icon.ico deleted file mode 100755 index 7b92627a122a59726421ccca1423d8bb727f924c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 370070 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⪙_FKkI<50ccx5Va!uu8&k)RL_V*=p1s!8l zd)e0&S&&c4WY1$=inSl$-#=_w=E`5M0iW0cwh*{XrR)Vy5c|RR25rl79xR{b~EJ<$v^PWGz7rfY1S8G*x;4 zo6Ej8FzF5Oq}S)JlW(rAt=*S_gCvsPim$ z!xSJ4;~emU66?0%Bc9{?FaCyOMtf z#{Y>m0Jpy*<(?rb=(aT&U~qHysLR%;(e&xWblTUDJ<5jFfU4#{P}ZXdtE1>cdDbyHEEQ;sx26F zI&|Sc@V1XxHqn&IpU1ikYyT&mE%Bcz`@R!p&yV#!@T;B>_R50YN{Rd#Yix5D{!-+u zI}tqT)=$Yl9rj<$FI-1ldAP&T`+tEe-{G-Ftwq4-638j(#C`>9{|kR6*U=5LLjL~I z*dGUfWi5jIlg0xCtFOfiov;K*kYzS3(ZtAH0-vGmt;lfKny@RmlC^iuF*(paYF8q2c+8F2J=0=yZH1Q{s0wzL-uz{zx+$GV@uL27NG;KMTHe(K!-`KL4Y6O+H1XW(2|7xscq!@01_kONqN zaW8~^rjqa-p~XbC=6pwu2d|(r2hO822Q9#LJ~hGPCIjb68i4D7IfBlDPd=+Z(}R-w zJwRtEYTEC9YTB3SK1qFMQ&U0r;(9MNW9oem=x#~9aP4)MqFK}&kI(KljgGnf4-{m( z4{WA-{MKURe&+sM#QAsRe)=f&QYaD|HXW0))!HSkIzHy z-M*&e?{5AO*Ma@bKN9)w)yM&*P5$fy!Rw?Ge{MN+knFV%sQW4J{baqzzJCRBKR5gt zvLE;h&iXq=$v-{0ALRm^L4CGV*EfB=PzSaKIe>Y{0hPx;^IrA&GY|5ItqqJ5bw6LY z>P<~k-H#G{>=MfXJ?_15jgf!4bQ>6BTkGrp1pEH~Ym&CQpP1m)13d@qywubDK?<)z z4qz_)|9sd&L#gAzTp|A=??vk%|1M8UVWgw(r%d_Z;yU?Oj{gg-dGN_b_NnCoFveJO zH+ul`@4QsWKaF#Ltp^(aUGtrXVK3lZ>;+ta7}&@^wLD;qEydjbq?;N4H`Sp0)qE3c z&s+y|C+dI}AqO-U_csqdz)%W!!1fjM(T6biuRDqT|3D@GG|v5F_?Pny_uvM+{~&n% zpDDZ;Ief6}$?E59xNTh9UePjUE%q3-2{qR<^* zL_;$SrGy95KacwQJRWg)3LyUh6Qvxq4B}F$kw?z{cVHjV_YM#CB6^XRG?aWExViUX z&;L4H1Fn@azC_hw)riCszO=W91uzdd0_y>-k&|u*f^RaEJRbCF=WzCGtI1`eNJ?sL3d?EO?cpOGLy{``dJ zFejCNzCZqXfO|0m0(hnSr!ns4LeLD5(@`J4@pGa0eTZLqF6U8`Jg)jvJg$?jwFjMy zah!0q2Wwe}SWg#uE}Q3J%34!ASB<-M6Nh`iov1;-$Ke}l7rNWw9df_JaY^sem0$DZ z@MGMqX8k+31r^3K*ur{5A6yp0AV~7@pe@{P$_WXyOhfi3|<9D~c zJ6>Do9<0XS=5qg3^u2fsdmf%cz0331llD@Cj(L;l)VGNmWD(VWi|DWyv47h<5DH zeA@i{pK1S_pVFFtM#%A85!Koc9zcIXThVLcs7Y(Z_|Lts^zq*W`SbXn{h9TE{4-ty zW(H!-cO=dN7@qOu@{Yj$7Etp>*U`>@6_Vq5)RwRgRC@gA&B)`w<8^#qJ~@J8$l)KA z@#G4Q#{CYZ7H8f_yQ({W;NE}Nn_|q)Bd#Q_hs|_y9gcG}t?^X1$u#Qt#;@exAE9t% zQMbvyf^D~8Ze?_4^UuP8s_I^WdU_ZPcHLH63TY&!~CrbQxC=LH@y83V3 z&w5{EJ%b)E&w&T<0fGJ@9ax` zV|G!k4=ECU6M6%GCkS?cZ9&$NzW+C)RO@{z46eZ5I`7aGZ2w)SO^w@shu&v#X)D(W z*OGVe=BRhrRy|B(|==a`w90JEwc8&cO;v3!4~hq`96?+ zXwz4$XJkDBKJ4VzQ}BKKnY#`|!_T14cE3&NDd#vv$UkQD6aL7T{V7UQ7`hWKT z%bR~BSL54X;lb98km7+Dx*UISgc|?lV*@w8#rIHXZD+Z${#1c>fOp$4hk6n?U-K_= zpM7~;=1T7PV)b57ygf zgNpaW(B-dK4y0WV{}nIr_=~J<82=9bj7rir$PPNsatz$`FgfcSogi~5YkaAEE%C~H zQ9Xd&ExS=@>0gyD;6ApqK2-8P`0ux4{Er~^oAW6-t&#J1u&&c?Rk-!9pUHbU=3+cP?jK!J=85A@d@OVU*uZPfU@h{EoD2EEKk#R6 z#b@()D#HiJ5V}+tnE4()v)_$8R%hMu2aiAI51glZ`)n>0`nUB!)Y{HGtN^jDY=w=3 zz6T$Cms}?|lVjI7PaI=K9y7nxd0?*7+f(p?cg1H5ea81x=$`n#Aw#xh{_8l8bBV}( zBDY=I__aSc+;hpYufh+5-&-*LZTO5s(Pqd6wk8Z2`9{LVdHwORS7fYZ{SE7lJ`=^` zC2!x`a4*P9u`X-|54N(6ImG>K5#x{e$8t}}=9jSiamL@l_>aec9#5MGKDM^QPj4-X zfcRPl;rlW6@T0JCtN%mpmObRSh3p`|vc^@}*AqU^b;21Gm=62&7-J0gCHPR*{qg%4 zKmOJ?i1$_<*;I@_rt9*V{(W352AuJ_wE;c9wnd7{9Q!8LLBw(R?7-AVV7HHz;}!Z| zj*YAA*!ABh>H=Q#bQ*^<8vnn#>wu4<+WI@Yv$In+jRYZ~cLG5I21r5`D=1O~5kUzh zh=NEBf|SrjLJKvGBuFz9Q2_--DNml*#fk+*-_xh~uwVg_?EU`d&dg@B>}EHCCw%++ zoy^W;=bm!gx#ym9?peJp5G|-@pR{g)?uWK)?~#8Fd`27mn{C}>onNKY{kjfVXVP+6GbHG;A@m9#u6SlyniZ~rd(ARt1xZ}$dg=_yZH*r0KB`)g?tGQ;j~89 zVe+J1IxRaeMuM(#bP~;5u#VXQ-LK=yZ}Corado!1d3;NntWL|@SlIgiFx6WI zI7eB{Mvn1%X)h4-@?-D#82faw2+A;HUg$YmPJ5d>fJ@O?|p44`oMzJKwrE%;nSB(Ff zwXSE$$idqVc_2F=f1?f~`8BcQaGo+q~v=C{0EYM{%LPNLnp3%Xz0JD}x` zhdKZ1aR2f<(%GRG@wM`u`HvPDk3mvc!I$#0H3Kocev>P#rV!2WOMjPhe1GRVW z{~P1KHKuv+_&w>&husVPQ|z*i>|S9ykM26wZ@vCX!wem;7IeT>&;jWT2+uMDecymJ zAlj;}^&JNPm$42o_!ppOX*s{6F3`^l(AERdQ1*YcUD&&i4V|}Q{%x^y`S>V= zj>=M=fDVXr*tHG7nNRI02-raS0{Cy*`3mrF=y%R)*uVG*eH?wDGPD%BO4RkgGi#$6 zN2r=ZU%%AuEjv%!O;1^nY2(PCxpDV(n|bSd#?t(#WC+;2$0JwL(@ zI0EZz=+9aXaOR=@13@nJ6W9XQ{sNnyu^u+-url>t?zeg$P-Y#6UI+ezr3Jsk8OFu( zloP0jJ`;&MAtW_0|85l)C`L%o2>mqueS`NZjCtkSewqH@7`B1>Gx&lI7##mDjNQ;>mw|0tMqUXAl?Wtoln;f(;knZFY$3w z&_=9Q(xG>3fDTX@{)c37{&jmO*)A^w3|priXHk%BgX16b5b8{Q^1sYlbHX#kn$&k^ zK;6d_0nVN@=7|B*xtv`x%^ zPMk*(E{CvCoNE~tS-;81Tw+>X}dg-p6`k9|}{znk!AUTb5Y{H-X zo+V(+N=m#R=hzIx*;XmRLlS-q=#V^|B`4g=nxqsmnRur*7z7Rc9H9c_62JFF@Zai2 zUaLXrK1ThQ%@Z;98}om6QoGB94iw~B2Xs~no!t?+;54f}=_sp}_D@!8@-e_`fPdf_ z!BHJ19$~d79_CPI!Xc)^tE|p=f>&7GM_*>4I3rM{vr&RQhXb@CmpYSr7J>iJSe>h2 zbe~K3SHyNJztwQYh?WUESY>j-XQD5FW;!$MazQ1zR|fY=@Q?Ol@62_d>IVO&US~2H z)D`EDzs=8oSdD$8%FsZ+g$$f@uEAvjl~YOFIJedX8&t*@VAAOK!RbDxP#l8}=sHmJ zq-WIy@P}Is9guP~|9^m0r6uZ;a|~zr9U^{0UkPmYG5I#H*80=A+;ASqDs}cZbT+|X zIG+f55a~kKFn~tnQU6O_0AKg8(S^j1t+j`*yUAdnt8~AiFWq{N{kCmPoqMKKnf@(P z9{<<14WLn-bEedO3+dpu>g#?tFM*i$^M7lvVS<*LCpbr~1FXNsVV$6k%(VzT^?Bb9 zOTj;`+_({ZxqrtmuMF)N18lZN>7uR4Jiy#*8=8W~hOv z0E=rlo+Y%M!P>T-epMhIcspJ{mE|5o+|4npwT)Z_$k{TD+K;W>0=tL&lS%&C>u5h{ zJNBVlF;w1${U*fdTkgI}(4R?`K5XubpRO${i_cOwH@TF(B1(3yMBPrry>8ug?7vZM*nToPDRZ^vnrD+BP++m4j-9Ji_2TF=i`H~z}w@+uYI zNU?y=q23TLEDf4h=37g9#O_$B4v4>chf%yQr=Q~H%s9wkt~+4o-c5c3`EL{D-8}Y9 z#pLCjervrcbJVOK5T6J;AjKC3icK_QArTL#W}RZT7G1c^c}$$?A5FdjrmryeJnj9a zp$`7k>w@A5gTX^|>_nTu@5L^edx?JM5xvdOcWWa(?hi4(qbVMc;sOK4(^0G$;$RU& z#^W*tEnKIaX!YgaK>QdyS!*?8a{58NpOEaStU$4Q@YhxgeuM3LKF?Dj4co(IPV@^= z4;yn>-#*IxPblsRyh8pyE)cU{99#^6*;~ZyE_-I>f3| zzaSncF47lHq6IM{>N?E5b*H2g&0^xRGWy+X0O+6;WBWXG2#QRN^Y|wx-8|i0%6# zF7{i!E=W!kpJn2wShr_ci9Cn)eedc;^dsMy(Prq*J%>d}!}k4x_zw80f_^i$YYX)I=JdPdDQ^IGoA#W3d8jY? zC27F+uQd4CYnw3MQfwB*Jw44>Xlf2~V82`vY|If-oyl4?KqOO~QA{w$8gIHPyoc{4 z%2QF6LJ%I!6g7g$DBqdThlQ?zy&ZTt{!N&>AXCTaSCD7H+JNZCIqv0R%@fTz`1bs_ zxKIBkjJFiCgSZKbtEoS#kR>JD$2!p7xe@DrX&%yPlE>KsVA=-+042oy`2gRhA_Y^Ave|+T$ zivOzY{E3*)*C)~@|jaFZ=dNy-B4R7KYb-09L zP2ivJ@*5KXoFsq8upEQ_O8BH1^xJQnz{}8bK)=7(1H=e`{!)1o#oBf0%4Mw$zoh+p z%)ycHO+HILy6|a79iaXBf^5(a9;Ja9I{gMsye0Op8Q>nzG7=}Gsa2O zGx^8+!;=je!gpG_t0qffw{7C(G>vM4Iylizj*1@@$1N`|{ zlTS6|Vr%V@Tf(2by`LNNuQfV0u+MZhWC;INF=6>`qE*d2=cDiHT!?Km^f|cJUz|HFaPHp%w0>7 z^Rij`8ln<@|Ch{NI`vRV>*{M7K^s0wnfaCO-%LKUKK*L(96oH;I&Jj!QJ+syrKb`2b#VztnzYuP&X?pb{A6NJ$q3$4OUp~2brUIM| zlbBNtXIexZriI4@3ALCOT7x;^hpR3APN#njX!XW}XYe^HR;D5D#eV+-M87q9qF?$g z4s%V@I)VEaZ@@a(pMNQQJ{8C6yRWbKptvl`jyT12A76djfvPX|Bk3lKeFht04`1 z;WyA}+B}W*OL@w@@9ej1`amNbE3pnHKgo&!ewg@O1%UT``8Pto0m>~UA6cpA)8ua% zRIEuD%sRx2n7DeswiauOb?p3A^ea5?L?5$v$~sCkMf+HH(R0s_c*9D44yZY4kv!%E zV!r-UtUM0?z!~rl{5yeg0=GQoedKqWw3uiV6W975drT&*os9O?G(^ybjuIlrO%bY% zod}rpH^W5WP7~DoM_MeA8Yj=%HmJ6*v*PZ{CTCaiS`}LQ3D%mEMH~68HJ)>I0JyC+ zC!x*Uy^AMB~{;^oTCMi4q{ww!G1Kx61SgQDa6|UTG4Da!4z01FH|FNzXOI5F? ze7&!X8{I|EDGi=Bw z1HJ;#iQpR}4u@SO<%)nHjzF0M*o|p>*mWNw#(dMinJxD5^7so+F%5np+N&2?2z-)4 z;3st@ArxiGhoRfQ2l+pHhFQz;pV(L$v)3hO{JA?y zu}6+~O`x2@*q^4{xJu^77&j7h++a=PrlJD=LQn1MrX9 z|0?0G0ln4n=n;&&F4Lg^h zh9YnCYUF~0ENQ=x^4pf}ITzD+Y0%ECgdgRK$Q{e^!&l%DHTM_r4ciFqt74Cm@M;A= zF)?v~!E@POIbPSFd0xr>WcW4Mns;LA(hu}~PvVF6EQ`P!@^sqoEXW}I@?&p`V#gI6 zzpdHK0qSblW_G|fVC*m2Cv0byi0CrhW_}eHzE~YiBIr({}(7x9;JK*8E>q6 zF$d23+y(i=_ISZXdz3L5Ct2*6BGz>54i-Cc9}8*N!NBihPr_(}N{uEg_K{tz`NP{- z^M|&vW{*D0LJR)H-WA3P@TM&J7P$o<>`M4;vFSD;WTdG>){v*4_>JeJEJPkE>`BSU z)8-&sJY?rUTe7ygS?Al7uczz{{6d{LCeu5xft#Sxo>>9P#B*itXRudyXIIdd!L3Q%>x=II$N+@AEw*!Vj9{ z$KEH^lgC)%ObL$rZgUJA_3Ar3XUztT6F&AmD6bdZ#kk{3{(74bu;;93h-mk zSzV4iSY*HU%mbB&u?No_BMu%1eoLH(y;sdN#=zc18}!^c7z54y0W(KV=1+*tuV(On zY5Rwk>#iGR;Ypo;%Kc-OlM9~m;A1iHx!r_6>|K4_r|*u`!}=K5J$Jsg24i3z#tGBz zPB!>_*l3oVF3UylqyM289Y3zhEchFf{5|dWx!?)5b$idvYYC?^>kE#PzT10j(#ODr zWnE1FwAu(YYAA_t7AMeZU)1LV|)}jo;Kkax0vNw1)@js0HU*ezM<+f+EA+pyZH;656 z!BE04cFl70Z)-GD9|P54$&`Zu_Hmcn?o0U_U=LSu7KsW!FWE^x8j-#MwpRr*QB${} z4+FoM`$4xCm#TB&<6dLjErj3JaskIl-;u}G7z5ikR?<#lZwK$LMt}9PeYP01mL(y7 zXoqg_wIII;Pe4x7#7-kv+aA+d=(1nY2hnH9_Df|@96HM6_FhZRR)iC_7Xv5oE5pn& zC_*0l?oZtAP4V+&zvO^Cx`PS8IDddm3b6tde4S8G)SgT)=Q=x=I z4z4~x&BE`D-ax3$i+JFK-IyYq?wm4z|| zwO1{|FNAo<8PQYoQx%(#`EH==rDZdG4xu|#2ENAc0gga`iH_p+d;;O64^713fcgNp zox(jb;Gz4|)$SOxXNb7wld+bZFGma6Up(X&vhcs$Qx92Jd^85@x?$F)X_}+%gt}Pw zo@=<`U3NqIE3Ve_jd! zP^{dyr9>IDS%-mzCCb2!?t2yglltYC#LPTY8nORev8DS;thEN#l%F_pR@wdwQ;L3e z0pP!N7P)B=ORxv)(q}IqFYX!op9wB`+gavV^5J>0#Vit&qOSk$E3Q*-#~P^!zTf1R zjCFxLbr*vgorHw4zePKClvTA^dA%n(FV;dcf4l z@JyU_fGPNm246j8$(OI0RjAB(w}A42M@)aII69&(3v+~&y+?By$_T}?XlD&pJvFxk zcwnpkV5j-MJo$}9>LwQpU-Nx&-4)-kYWFSE@e^(Xe?-4ItRDUsmGN1z3Vla;>>ZxZ zhstm~d}JK?#HfYE#WG}LPgzq&zu_k#4qV7&OT79)=*;-khL<1sn(zI6Y-0opp` z_sYFc5&}I@>O0qX-wwY`0Oo$F$7DwTgYN|9`@i5va)9se@%QiC(nVeQ8|ek5cB*4!W_tZ8kJUmEXdF+bkXazVT!4uGrFIwPL`N58SPoZrBFj{;iLF+x`a MhcKi20($rV0CS|n_W%F@ diff --git a/admin-panel/package.json b/admin-panel/package.json deleted file mode 100755 index 8b107383..00000000 --- a/admin-panel/package.json +++ /dev/null @@ -1,41 +0,0 @@ -{ - "nwBoilerplateVersion": "1.0", - "devDependencies": { - "download": "^4.0.1", - "esperanto": "^0.6.17", - "fs-jetpack": "^0.6.2", - "gulp": "^3.8.9", - "gulp-bower": "^0.0.10", - "gulp-less": "^1.3.6", - "gulp-util": "^3.0.1", - "loaders.css": "^0.1.0", - "q": "^1.0.1", - "vinyl-map": "^1.0.1", - "yargs": "^1.3.1" - }, - "optionalDependencies": { - "appdmg": "^0.3.0" - }, - "config": { - "nw": { - "version": "0.12.0", - "downloadUrls": { - "osx": "http://dl.nwjs.io/v{{version}}/nwjs-v{{version}}-osx-x64.zip", - "linux": "https://dl.nwjs.io/v{{version}}/nwjs-v{{version}}-linux-x64.tar.gz", - "windows": "http://dl.nwjs.io/v{{version}}/nwjs-v{{version}}-win-ia32.zip" - } - } - }, - "scripts": { - "postinstall": "node ./tasks/download-nw && cd ./app && npm install", - "build": "./node_modules/.bin/gulp build", - "start": "./node_modules/.bin/gulp start", - "test": "./node_modules/.bin/gulp start --target=test", - "release": "./node_modules/.bin/gulp release --target=release" - }, - "dependencies": { - "gulp-bower": "0.0.10", - "pkginfo": "^0.3.0" - }, - "version": "0.0.1" -} diff --git a/admin-panel/tasks/build.js b/admin-panel/tasks/build.js deleted file mode 100755 index 2d9f67e3..00000000 --- a/admin-panel/tasks/build.js +++ /dev/null @@ -1,154 +0,0 @@ -'use strict'; - -var gulp = require('gulp'); -var less = require('gulp-less'); -var esperanto = require('esperanto'); -var map = require('vinyl-map'); -var projectDir = require('fs-jetpack'); -var bower = require("gulp-bower"); - -var utils = require('./utils'); - -// ------------------------------------- -// Setup -// ------------------------------------- - -var srcDir = projectDir.cwd('./app/'); -var destDir = projectDir.cwd('./build/'); - -// On Windows and Linux our code is going into main directory... -var destForCodeDir = destDir; -if (utils.os() === 'osx') { - // ...but on OSX deep into folder in bundle structure. - destForCodeDir = destDir.cwd('./nwjs.app/Contents/Resources/app.nw'); -} - -var paths = { - jsCode: [ - 'app/**/*.js', - '!app/node_modules/**', - '!app/bower_components/**', - '!app/vendor/**' - ] -}; - -// ------------------------------------- -// Tasks -// ------------------------------------- - -gulp.task('clean', function(callback) { - return destDir.dirAsync('.', { empty: true }); -}); - - -gulp.task('prepare-runtime', ['clean'] , function () { - var runtimeForThisOs = './nw/' + utils.os(); - return projectDir.copyAsync(runtimeForThisOs, destDir.path(), { - overwrite: true - }); -}); - -gulp.task('bower', function() { - return bower() - .pipe(gulp.dest(destForCodeDir.path('lib'))) -}); - - -var copyTask = function () { - return projectDir.copyAsync('app', destForCodeDir.path(), { - overwrite: true, - matching: [ - './node_modules/**', - './vendor/**', - '*.html', - './img/**', - './fonts/**' - ] - }); -}; -gulp.task('copy', ['prepare-runtime'], copyTask); -gulp.task('copy-watch', copyTask); - - -var transpileTask = function () { - return gulp.src(paths.jsCode) - .pipe(map(function(code, filename) { - var transpiled = esperanto.toAmd(code.toString(), { strict: true }); - return transpiled.code; - })) - .pipe(gulp.dest(destForCodeDir.path())); -}; -gulp.task('transpile', ['prepare-runtime'], transpileTask); -gulp.task('transpile-watch', transpileTask); - - -var lessTask = function () { - return gulp.src('app/stylesheets/**.less') - .pipe(less()) - .pipe(gulp.dest(destForCodeDir.path('stylesheets'))); -}; -gulp.task('less', ['prepare-runtime'], lessTask); -gulp.task('less-watch', lessTask); - - -// Add and customize OS-specyfic and target-specyfic stuff. -gulp.task('finalize', ['prepare-runtime'], function () { - var manifest = srcDir.read('package.json', 'json'); - switch (utils.getBuildTarget()) { - case 'release': - // Hide dev toolbar if doing a release. - manifest.window.toolbar = false; - break; - case 'test': - // Add "-test" suffix to name, so NW.js will write all - // data like cookies and locaStorage into separate place. - manifest.name += '-test'; - // Change the main entry to spec runner. - manifest.main = 'spec.html'; - // Set extra flag so we know this is development mode, and we can - // alter some behaviours of running app. - manifest.developmentMode = true; - break; - case 'development': - // Add "-dev" suffix to name, so NW.js will write all - // data like cookies and locaStorage into separate place. - manifest.name += '-dev'; - // Set extra flag so we know this is development mode, and we can - // alter some behaviours of running app. - manifest.developmentMode = true; - break; - } - destForCodeDir.write('package.json', manifest, { jsonIndent: 4 }); - - projectDir.copy('os/icon.png', destForCodeDir.path('icon.png')); - - // Stuff specyfic for certains OS - switch (utils.os()) { - case 'windows': - // icon - projectDir.copy('os/windows/icon.ico', destDir.path('icon.ico')); - break; - case 'osx': - // Info.plist - var manifest = projectDir.read('app/package.json', 'json'); - var info = projectDir.read('os/osx/Info.plist'); - info = utils.replace(info, { - prettyName: manifest.prettyName, - version: manifest.version - }); - destDir.write('nwjs.app/Contents/Info.plist', info); - // icon - projectDir.copy('os/osx/icon.icns', destDir.path('nwjs.app/Contents/Resources/icon.icns')); - break; - } -}); - - -gulp.task('watch', function () { - gulp.watch(paths.jsCode, ['transpile-watch']); - gulp.watch('*.less', ['less-watch']); - gulp.watch('*.html', ['copy-watch']); -}); - - -gulp.task('build', ['transpile', 'less', 'bower', 'copy', 'finalize']); diff --git a/admin-panel/tasks/download-nw.js b/admin-panel/tasks/download-nw.js deleted file mode 100755 index e096d52d..00000000 --- a/admin-panel/tasks/download-nw.js +++ /dev/null @@ -1,84 +0,0 @@ -// Downloads NW.js runtime and unpacks it into proper place. - -'use strict'; - -var Q = require('q'); -var childProcess = require('child_process'); -var projectDir = require('fs-jetpack'); -var utils = require('./utils'); - -// -------------------------------------------------------- -// Preparations -// -------------------------------------------------------- - -var devManifest = projectDir.read('package.json', 'json'); -var appManifest = projectDir.read('app/package.json', 'json'); - -// Version of NW.js we need -var runtimeVersion = devManifest.config.nw.version; -// The directory where runtime should be placed -var destDir = projectDir.dir('nw/' + utils.os()); - -// First check if we already haven't downloaded this version of runtime. -if (destDir.read('version') === runtimeVersion) { - // No need for continuing - process.exit(); -} - -// Figure out the URL we have to download. -var url = devManifest.config.nw.downloadUrls[utils.os()]; -// URL has places where we have to inject version we are interested with. -url = utils.replace(url, { version: runtimeVersion }); - -var finalize = function () { - var deferred = Q.defer(); - - // Place file with version next to downloaded runtime, - // so we know in the future what we have there. - destDir.file('version', { content: runtimeVersion }); - - // Special preparations necessary for linux runtime - if (utils.os() === 'linux') { - // The hack for problems with libudev.so.0 on Linux platform. - // Read more: https://github.com/nwjs/nw.js/wiki/The-solution-of-lacking-libudev.so.0 - childProcess.exec("sed -i 's/udev\.so\.0/udev.so.1/g' nw", { cwd: destDir.path() }, - function (error, stdout, stderr) { - if (error || stderr) { - console.log('ERROR while patching libudev:'); - console.log(error); - console.log(stderr); - } else { - deferred.resolve(); - } - }); - } else { - deferred.resolve(); - } - - return deferred.promise; -}; - -// -------------------------------------------------------- -// Let's get started -// -------------------------------------------------------- - -destDir.dir('.', { empty: true }); - -var Download = require('download'); - -var download = new Download({ extract: true, strip: 1, mode: '755' }) -.get(url) -.dest(destDir.path()); - -console.log('Downloading NW.js...'); - -download.run(function (err, files) { - if (err) { - console.error(err); - } else { - finalize() - .then(function () { - console.log('NW.js v' + runtimeVersion + ' downloaded successfully!'); - }); - } -}); diff --git a/admin-panel/tasks/release.js b/admin-panel/tasks/release.js deleted file mode 100755 index 1a6b6f52..00000000 --- a/admin-panel/tasks/release.js +++ /dev/null @@ -1,158 +0,0 @@ -'use strict'; - -var gulp = require('gulp'); -var gulpUtil = require('gulp-util'); -var childProcess = require('child_process'); -var projectDir = require('fs-jetpack'); -var utils = require('./utils'); - -var releaseForOs = {}; - -var tmpDir = projectDir.dir('./tmp', { empty: true }); -var cleanTmp = function () { - tmpDir.remove('.'); -}; - -// ------------------------------------- -// OSX -// ------------------------------------- - -releaseForOs.osx = function (callback) { - var appdmg = require('appdmg'); - - var releasesDir = projectDir.dir('./releases'); - var manifest = projectDir.read('app/package.json', 'json'); - var dmgName = manifest.name + '_' + manifest.version + '.dmg'; - - // Change app bundle name to desired - projectDir.rename("build/nwjs.app", manifest.prettyName + ".app"); - - // Prepare appdmg config - var dmgManifest = projectDir.read('os/osx/appdmg.json'); - dmgManifest = utils.replace(dmgManifest, { - prettyName: manifest.prettyName, - appPath: projectDir.path("build/" + manifest.prettyName + ".app"), - dmgIcon: projectDir.path("os/osx/dmg-icon.icns"), - dmgBackground: projectDir.path("os/osx/dmg-background.png") - }); - tmpDir.write('appdmg.json', dmgManifest); - - // Delete DMG file with this name if already exists - releasesDir.remove(dmgName); - - gulpUtil.log('Packaging to DMG image...'); - - var readyDmg = releasesDir.path(dmgName); - appdmg({ - source: tmpDir.path('appdmg.json'), - target: readyDmg - }) - .on('error', function (err) { - console.error(err); - }) - .on('finish', function () { - gulpUtil.log('DMG image ready!', readyDmg); - cleanTmp(); - callback(); - }); -}; - -// ------------------------------------- -// Linux -// ------------------------------------- - -releaseForOs.linux = function (callback) { - var releasesDir = projectDir.dir('./releases'); - var manifest = projectDir.read('app/package.json', 'json'); - var packName = manifest.name + '_' + manifest.version; - var pack = tmpDir.dir(packName); - var debFileName = packName + '_amd64.deb'; - - gulpUtil.log('Creating DEB package...'); - - // The whole app will be installed into /opt directory - projectDir.copy('build', pack.path('opt', manifest.name)); - - // Create .desktop file from the template - var desktop = projectDir.read('os/linux/app.desktop'); - desktop = utils.replace(desktop, { - name: manifest.name, - prettyName: manifest.prettyName, - description: manifest.description, - version: manifest.version, - author: manifest.author - }); - pack.write('usr/share/applications/' + manifest.name + '.desktop', desktop); - - // Counting size of the app in KB - var appSize = Math.round(projectDir.inspectTree('build').size / 1024); - - // Preparing debian control file - var control = projectDir.read('os/linux/DEBIAN/control'); - control = utils.replace(control, { - name: manifest.name, - description: manifest.description, - version: manifest.version, - author: manifest.author, - size: appSize - }); - pack.write('DEBIAN/control', control); - - // Build the package... - childProcess.exec('fakeroot dpkg-deb -Zxz --build ' + pack.path() + ' ' + releasesDir.path(debFileName), - function (error, stdout, stderr) { - if (error || stderr) { - console.log("ERROR while building DEB package:"); - console.log(error); - console.log(stderr); - } else { - gulpUtil.log('Package', debFileName, 'ready!'); - } - cleanTmp(); - callback(); - }); -}; - -// ------------------------------------- -// Windows -// ------------------------------------- - -releaseForOs.windows = function (callback) { - projectDir.dir('./releases'); - var manifest = projectDir.read('app/package.json', 'json'); - var filename = manifest.name + '_' + manifest.version + '.exe'; - var installScript = projectDir.read('./os/windows/installer.nsi'); - installScript = utils.replace(installScript, { - "name": manifest.name, - "prettyName": manifest.prettyName, - "version": manifest.version, - // The paths expect the .nsi file is in "nw-boilerplate/tmp" folder. - "src": "..\\build", - "dest": "..\\releases\\" + filename, - "icon": "..\\os\\windows\\icon.ico", - "setupIcon": "..\\os\\windows\\setup-icon.ico", - "banner": "..\\os\\windows\\setup-banner.bmp" - }); - projectDir.write('./tmp/installer.nsi', installScript); - - gulpUtil.log('Building installer with NSIS...'); - - // Note: NSIS have to be added to PATH! - var nsis = childProcess.spawn('makensis', ['.\\tmp\\installer.nsi']); - nsis.stdout.pipe(process.stdout); - nsis.stderr.pipe(process.stderr); - nsis.on('close', function () { - gulpUtil.log('Installer', filename, 'ready!'); - cleanTmp(); - callback(); - }); -}; - -// ------------------------------------- -// The task -// ------------------------------------- - -// Wire release name to specyfic release process for this operating system. -gulp.task('release', ['build'], function (callback) { - return releaseForOs[utils.os()](callback); -}); diff --git a/admin-panel/tasks/start.js b/admin-panel/tasks/start.js deleted file mode 100755 index b4bde1b0..00000000 --- a/admin-panel/tasks/start.js +++ /dev/null @@ -1,30 +0,0 @@ -'use strict'; - -var gulp = require('gulp'); -var childProcess = require('child_process'); -var utils = require('./utils'); - -// Starts the app in /build folder and runs gulp watch for the time, when app is running. -gulp.task('start', ['watch', 'build'], function () { - var app; - - switch (utils.os()) { - case 'osx': - app = childProcess.spawn('./build/nwjs.app/Contents/MacOS/nwjs'); - break; - case 'linux': - app = childProcess.spawn('./build/nw'); - break; - case 'windows': - app = childProcess.spawn('build/nw.exe'); - break; - } - - app.stdout.pipe(process.stdout); - app.stderr.pipe(process.stderr); - - app.on('close', function (code) { - // Kill this gulp (watch) process when application closes. - process.exit(); - }); -}); diff --git a/admin-panel/tasks/utils.js b/admin-panel/tasks/utils.js deleted file mode 100755 index b5e47a5d..00000000 --- a/admin-panel/tasks/utils.js +++ /dev/null @@ -1,28 +0,0 @@ -'use strict'; - -var argv = require('yargs').argv; -var os = require('os'); - -module.exports.os = function () { - switch (os.platform()) { - case 'darwin': - return 'osx'; - case 'linux': - return 'linux'; - case 'win32': - return 'windows'; - } - return 'unsupported'; -}; - -module.exports.replace = function (str, patterns) { - Object.keys(patterns).forEach(function (pattern) { - var matcher = new RegExp('{{' + pattern + '}}', 'g'); - str = str.replace(matcher, patterns[pattern]); - }); - return str; -}; - -module.exports.getBuildTarget = function () { - return argv.target || 'development'; -}; \ No newline at end of file diff --git a/program.json b/program.json deleted file mode 100755 index 64d2dced..00000000 --- a/program.json +++ /dev/null @@ -1 +0,0 @@ -{"execute":"java -jar game.jar","name":"Project Ghost","updateURL":"http://localhost/updates/update.json","version":"1.0.0"} diff --git a/server/api/src/main/java/com/boxtrotstudio/ghost/game/match/abilities/Boomerang.java b/server/api/src/main/java/com/boxtrotstudio/ghost/game/match/abilities/Boomerang.java index c1cbf553..44fe984b 100755 --- a/server/api/src/main/java/com/boxtrotstudio/ghost/game/match/abilities/Boomerang.java +++ b/server/api/src/main/java/com/boxtrotstudio/ghost/game/match/abilities/Boomerang.java @@ -6,18 +6,16 @@ import com.boxtrotstudio.ghost.utils.TimeUtils; import com.boxtrotstudio.ghost.utils.Vector2f; -public class Boomerang implements Ability { +public class Boomerang extends PlayerAbility { private static final long BASE_COOLDOWN = 315; private static final float BOOMERANG_SPEED = 10f; private static final long DEFAULT_RETURN_TIME = 1000; - private PlayableEntity owner; private BoomerangEntity boomerang; private boolean active = false; private boolean returning = false; - private boolean canFire = false; public ConditionalRunnable checker; @@ -29,59 +27,24 @@ private abstract class ConditionalRunnable implements Runnable { } public Boomerang(PlayableEntity owner) { - this.owner = owner; + super(owner); + baseCooldown = BASE_COOLDOWN; + canCancel = false; } - public Boomerang() { } - @Override public String name() { return "Boomerang"; } @Override - public PlayableEntity owner() { - return owner; - } - - @Override - public void usePrimary(float targetX, float targetY) { - if (!active) { - handleLaunch(targetX, targetY); - } else { - handleReturn(targetX, targetY); - } - } - - @Override - public void useSecondary(float targetX, float targetY) { - - } - - @Override - public byte id() { - return 4; - } - - @Override - public boolean canFirePrimary() { - return canFire; - } - - @Override - public boolean canFireSecondary() { - return false; - } - - /** - * Boomerang starts moving away. - */ - public void handleLaunch(float targetX, float targetY) { - if (!canFire) + protected void onUsePrimary(float targetX, float targetY) { + if (active) return; + PlayableEntity owner = owner(); + owner.setVisible(true); - canFire = false; float x = owner.getX(); float y = owner.getY(); @@ -103,9 +66,10 @@ public void handleLaunch(float targetX, float targetY) { active = true; owner.onFire(); //Indicate the player has fired, also triggers the fade out - TimeUtils.executeInSync(200, () -> canFire = true, owner.getWorld()); + //Setup ability to use secondary weapon + TimeUtils.executeInSync(200, () -> canUseSecondary = true, owner.getWorld()); - TimeUtils.executeInSync(DEFAULT_RETURN_TIME, (checker = new ConditionalRunnable() { + executeInSync(DEFAULT_RETURN_TIME, (checker = new ConditionalRunnable() { @Override public void run() { if (!returning && execute) { @@ -116,21 +80,37 @@ public void run() { y = owner.getTarget().y; } - canFire = false; //The player can't fire while the boomerang is returning + canUseSecondary = false; + canUsePrimary = false; //The player can't fire while the boomerang is returning boomerang.startReturn(x, y); returning = true; } } - }), owner.getWorld()); + })); + } + + @Override + protected void onUseSecondary(float targetX, float targetY) { + if (active) { + handleReturn(targetX, targetY); + } + } + + @Override + public byte id() { + return 4; } /** * Boomerang starts coming back. */ public void handleReturn(float x, float y) { + PlayableEntity owner = owner(); owner.setVisible(true); - canFire = false; //The player can't fire while the boomerang is returning + + canUseSecondary = false; + canUsePrimary = false; //The player can't fire while the boomerang is returning boomerang.startReturn(x, y); returning = true; @@ -144,7 +124,6 @@ public void onReturnFinished() { returning = false; checker.execute = false; - long wait = owner.calculateFireRate(BASE_COOLDOWN); //Base value is 315ms - TimeUtils.executeInSync(wait, () -> canFire = true, owner.getWorld()); + endPrimary(); } } diff --git a/servers/1.gserver b/servers/1.gserver deleted file mode 100755 index 6317d0d1..00000000 --- a/servers/1.gserver +++ /dev/null @@ -1,6 +0,0 @@ -{ - "internal_group": "Beta1", - "streamLevel": 2, - "ip": "107.170.23.29", - "port": 6421 -} \ No newline at end of file diff --git a/updatecreator/build.gradle b/updatecreator/build.gradle deleted file mode 100755 index 37a35d31..00000000 --- a/updatecreator/build.gradle +++ /dev/null @@ -1,17 +0,0 @@ -apply plugin: 'java' -apply plugin: 'maven' - -group = 'com.boxtrotstudio' -version = '1.0-SNAPSHOT' - -description = """Create update files to host on a remote server""" - -sourceCompatibility = 1.8 -targetCompatibility = 1.8 - -[compileJava, compileTestJava]*.options*.encoding = 'UTF-8' -sourceSets.main.java.srcDirs = [ "src/main/java" ] - -eclipse.project { - name = appName + "-updatecreator" -} diff --git a/updatecreator/src/main/java/META-INF/MANIFEST.MF b/updatecreator/src/main/java/META-INF/MANIFEST.MF deleted file mode 100755 index 8bd6dbcf..00000000 --- a/updatecreator/src/main/java/META-INF/MANIFEST.MF +++ /dev/null @@ -1,3 +0,0 @@ -Manifest-Version: 1.0 -Main-Class: com.boxtrotstudio.updates.Main - diff --git a/updatecreator/src/main/java/com/boxtrotstudio/updates/Main.java b/updatecreator/src/main/java/com/boxtrotstudio/updates/Main.java deleted file mode 100755 index 3ed3793b..00000000 --- a/updatecreator/src/main/java/com/boxtrotstudio/updates/Main.java +++ /dev/null @@ -1,175 +0,0 @@ -package com.boxtrotstudio.updates; - -import com.boxtrotstudio.updates.api.Update; -import com.boxtrotstudio.updates.api.UpdateBuilder; -import com.boxtrotstudio.updates.api.UpdateType; -import com.boxtrotstudio.updates.api.Version; -import com.google.gson.Gson; -import com.google.gson.GsonBuilder; -import com.google.gson.reflect.TypeToken; -import org.apache.commons.cli.*; -import org.apache.commons.io.IOUtils; - -import java.io.File; -import java.io.IOException; -import java.lang.reflect.Type; -import java.net.URL; -import java.nio.charset.Charset; -import java.util.ArrayList; -import java.util.List; - -public class Main { - private static final Gson GSON = new GsonBuilder().setPrettyPrinting().create(); - - public static void main(String[] args) throws IOException, ParseException { - if (args.length == 0) { - String header = "Create and update an update file!\nAt least one command is required.\n"; - String footer = "\nYou must specify the location of the current update file, or you can use -s to start a new one"; - - HelpFormatter formatter = new HelpFormatter(); - formatter.printHelp("updatecreator", header, getOptions(), footer, true); - System.exit(-1); - return; - } - - Options options = parseArgs(args); - List updates; - - if (options.hasOption("s")) { - updates = new ArrayList<>(); - } else if (!options.hasOption("u")) { - System.err.println("You must specify the location of the current update file!"); - System.exit(1); - return; - } else if (options.hasOption("u")) { - URL url; - String location = options.getOption("u").getValue(); - File test = new File(location); - if (test.exists()) - url = test.toURI().toURL(); - else - url = new URL(location); - - String json = IOUtils.toString(url.openStream(), Charset.defaultCharset()); - - Type t = new TypeToken>() { }.getType(); - updates = GSON.fromJson(json, t); - } else { - System.err.println("You must specify the location of the current update file!"); - System.exit(1); - return; - } - - if (options.hasOption("l")) { - if (updates.size() == 0) { - System.err.println("You cannot list a new update file!"); - System.exit(3); - return; - } - - for (Update u : updates) { - System.out.println(u); - System.out.println(); - } - } else if (options.hasOption("c")) { - UpdateBuilder builder; - if (updates.size() == 0) { - builder = UpdateBuilder.fromVersion(new Version(1, 0, 0)); - builder.withType(UpdateType.NEW); - } - else - builder = UpdateBuilder.fromPreviousUpdate(updates.get(updates.size() - 1)); - - if (options.hasOption("d")) - builder.withDescription(options.getOption("d").getValue()); - if (options.hasOption("a")) { - File location = new File(options.getOption("a").getValue()); - if (!location.exists()) { - System.err.println("File does not exist! \"" + location.getAbsolutePath() + '"'); - System.exit(2); - return; - } - builder.withArchive(location); - } - if (options.hasOption("b")) { - String type = options.getOption("b").getValue().toLowerCase(); - - switch (type) { - case "bugfix": - case "bf": - builder.bumpBugfix(); - break; - case "minor": - builder.bumpMinor(); - break; - case "major": - builder.bumpMajor(); - break; - default: - System.err.println("Invalid bump value! (Given: " + type + ", Expected: bugfix, minor, or major)"); - System.exit(4); - break; - } - } - - Update update = builder.build(); - updates.add(update); - - String prettyJson = GSON.toJson(updates); - System.out.println(prettyJson); - } else if (options.hasOption("r")) { - if (updates.size() == 0) { - System.err.println("No updates to rollback!"); - System.exit(5); - return; - } - - Update update = UpdateBuilder.rollback(updates.get(updates.size() - 1)); - updates.add(update); - - String prettyJson = GSON.toJson(updates); - System.out.println(prettyJson); - } - } - - private static Options parseArgs(String[] args) throws ParseException { - CommandLineParser parser = new BasicParser(); - CommandLine cmd = parser.parse(getOptions(), args); - - Options output = new Options(); - for (Option o : cmd.getOptions()) { - output.addOption(o); - } - - return output; - } - - private static Options getOptions() { - Options options = new Options(); - - Option startFile = new Option("s", false, "[command] Start a new update file, this should be followed by the -c command"); - Option currentFile = new Option("u", true, "[command] The current location of update file"); - Option list = new Option("l", false, "[command] List all updates from current file"); - Option build = new Option("c", false, "[command] Create a new update to add to the current file. This should be followed by options"); - Option rollback = new Option("r", false, "[command] Create an update that rolls back the latest update"); - - //Build Options - Option description = new Option("d", true, "[option] A description for the update"); - Option archiveLocation = new Option("a", true, "[option] The location of the archive to use"); - Option downloadLocation = new Option("d", true, "[option] The download location clients should download the archive from"); - Option bump = new Option("b", true, "[option] Bump one of the 3 version attributes instead of specifying a version (ex; -b major)"); - - options.addOption(startFile); - options.addOption(downloadLocation); - options.addOption(currentFile); - options.addOption(list); - options.addOption(build); - options.addOption(rollback); - - options.addOption(description); - options.addOption(archiveLocation); - options.addOption(bump); - - return options; - } -} diff --git a/updatecreator/src/main/java/com/boxtrotstudio/updates/api/Update.java b/updatecreator/src/main/java/com/boxtrotstudio/updates/api/Update.java deleted file mode 100755 index e8cc2470..00000000 --- a/updatecreator/src/main/java/com/boxtrotstudio/updates/api/Update.java +++ /dev/null @@ -1,177 +0,0 @@ -package com.boxtrotstudio.updates.api; - -import java.net.MalformedURLException; -import java.net.URL; -import java.util.Arrays; -import java.util.HashMap; - -/** - * This object represents a single update. - */ -public class Update { - private int id; - private Version version; - private UpdateType type; - private String[] filesModified; - private HashMap md5; - private String archiveLocation; - private long releaseDate; - private String description; - - /** - * Get the semantic {@link Version} of this {@link Update} - * @return The {@link Version} of this update - */ - public Version getVersion() { - return version; - } - - /** - * Get the {@link UpdateType} of this {@link Update} - * @return The {@link UpdateType} - */ - public UpdateType getType() { - return type; - } - - /** - * Get an array of all the files modified. This usually reflects the - * files contained in the archive - * @return All the files that were modified in this update - */ - public String[] getFilesModified() { - return filesModified; - } - - /** - * Get a {@link HashMap} of all the MD5 hash for the files modified. The key of the {@link HashMap} is - * the file path and the value is the file's MD5 - * @return A {@link HashMap} - */ - public HashMap getMd5() { - return md5; - } - - /** - * Get the location of this update - * @return The location of this update represented as a {@link String} - */ - public String getArchiveLocation() { - return archiveLocation; - } - - /** - * Get the location of this update - * @return The location of this update represented as a {@link URL} - */ - public URL getArchiveURL() { - try { - return new URL(archiveLocation); - } catch (MalformedURLException e) { - e.printStackTrace(); - return null; - } - } - - /** - * Get when this update was released as a Unix timestamp - * @return The time this update was released - */ - public long getReleaseDate() { - return releaseDate; - } - - /** - * Get a text description of this update - * @return The text description of this update - */ - public String getDescription() { - return description; - } - - /** - * Get the unique ID for this update - * @return The unique ID for this update - */ - public int getId() { - return id; - } - - void setVersion(Version version) { - this.version = version; - } - - void setType(UpdateType type) { - this.type = type; - } - - void setFilesModified(String[] filesModified) { - this.filesModified = filesModified; - } - - void setMd5(HashMap md5) { - this.md5 = md5; - } - - void setArchiveLocation(String archiveLocation) { - this.archiveLocation = archiveLocation; - } - - void setReleaseDate(long releaseDate) { - this.releaseDate = releaseDate; - } - - void setDescription(String description) { - this.description = description; - } - - void setId(int id) { - this.id = id; - } - - @Override - public boolean equals(Object o) { - if (this == o) return true; - if (o == null || getClass() != o.getClass()) return false; - - Update update = (Update) o; - - if (id != update.id) return false; - if (releaseDate != update.releaseDate) return false; - if (version != null ? !version.equals(update.version) : update.version != null) return false; - if (type != update.type) return false; - // Probably incorrect - comparing Object[] arrays with Arrays.equals - if (!Arrays.equals(filesModified, update.filesModified)) return false; - if (md5 != null ? !md5.equals(update.md5) : update.md5 != null) return false; - if (!archiveLocation.equals(update.archiveLocation)) return false; - return description.equals(update.description); - - } - - @Override - public int hashCode() { - int result = id; - result = 31 * result + (version != null ? version.hashCode() : 0); - result = 31 * result + type.hashCode(); - result = 31 * result + Arrays.hashCode(filesModified); - result = 31 * result + (md5 != null ? md5.hashCode() : 0); - result = 31 * result + archiveLocation.hashCode(); - result = 31 * result + (int) (releaseDate ^ (releaseDate >>> 32)); - result = 31 * result + description.hashCode(); - return result; - } - - @Override - public String toString() { - return "Update{" + - "id=" + id + - ", version=" + version + - ", type=" + type + - ", filesModified=" + Arrays.toString(filesModified) + - ", md5=" + md5 + - ", archiveLocation='" + archiveLocation + '\'' + - ", releaseDate=" + releaseDate + - ", description='" + description + '\'' + - '}'; - } -} diff --git a/updatecreator/src/main/java/com/boxtrotstudio/updates/api/UpdateBuilder.java b/updatecreator/src/main/java/com/boxtrotstudio/updates/api/UpdateBuilder.java deleted file mode 100755 index b1e6622b..00000000 --- a/updatecreator/src/main/java/com/boxtrotstudio/updates/api/UpdateBuilder.java +++ /dev/null @@ -1,155 +0,0 @@ -package com.boxtrotstudio.updates.api; - -import org.apache.commons.codec.digest.DigestUtils; - -import java.io.File; -import java.io.IOException; -import java.util.*; -import java.util.zip.ZipEntry; -import java.util.zip.ZipFile; - -public class UpdateBuilder { - private Update previousUpdate; - private String description; - private List filesModified; - private HashMap md5; - private Version version; - private UpdateType type; - private String download; - - public static UpdateBuilder fromPreviousUpdate(Update update) { - UpdateBuilder builder = new UpdateBuilder(); - builder.previousUpdate = update; - - if (update != null) { - builder.version = new Version(update.getVersion()); - } else { - builder.version = new Version(1, 0, 0); - } - - return builder; - } - - public static UpdateBuilder fromVersion(Version version) { - UpdateBuilder builder = new UpdateBuilder(); - builder.previousUpdate = null; - builder.version = version; - - return builder; - } - - public static Update rollback(Update update) { - UpdateBuilder builder = fromPreviousUpdate(update); - builder.bumpBugfix(); - builder.withType(UpdateType.ROLLBACK); - builder.filesModified = Arrays.asList(update.getFilesModified()); - builder.md5 = update.getMd5(); - - return builder.build(); - } - - private UpdateBuilder() { } - - public UpdateBuilder bumpBugfix() { - version.setBugfix(version.getBugfix() + 1); - type = UpdateType.BUGFIX; - return this; - } - - public UpdateBuilder bumpMinor() { - version.setBugfix(0); - version.setMinor(version.getMinor() + 1); - type = UpdateType.MINOR; - return this; - } - - public UpdateBuilder bumpMajor() { - version.setBugfix(0); - version.setMinor(0); - version.setMajor(version.getMajor() + 1); - type = UpdateType.MAJOR; - return this; - } - - public UpdateBuilder withVersion(Version version) { - this.version = version; - return this; - } - - public UpdateBuilder withDescription(String description) { - this.description = description; - return this; - } - - public UpdateBuilder withArchive(File archive) throws IOException { - ZipFile zip = new ZipFile(archive); - - filesModified = new ArrayList<>(); - md5 = new HashMap<>(); - - Enumeration wat = zip.entries(); - while (wat.hasMoreElements()) { - ZipEntry entry = wat.nextElement(); - - if (entry.getName().contains("program.json")) - continue; //Ignore all program.json files - - String md5 = DigestUtils.md5Hex(zip.getInputStream(entry)); - - filesModified.add(entry.getName()); - this.md5.put(entry.getName(), md5); - } - - zip.close(); - - return this; - } - - public UpdateBuilder withType(UpdateType type) { - this.type = type; - return this; - } - - public UpdateBuilder withDownloadLocation(String location) { - this.download = location; - return this; - } - - public Update build() { - Update update = new Update(); - update.setVersion(version); - - if (this.previousUpdate != null) - update.setId(previousUpdate.getId() + 1); - else - update.setId(1); - - if (type == null) - update.setType(UpdateType.UNKNOWN); - else - update.setType(type); - - if (description != null) - update.setDescription(description); - else - update.setDescription("No description specified"); - - if (filesModified != null) - update.setFilesModified(filesModified.toArray(new String[filesModified.size()])); - else - update.setFilesModified(new String[0]); - - if (md5 != null) - update.setMd5(md5); - else - update.setMd5(new HashMap<>()); - - if (download != null) - update.setArchiveLocation(download); - else - update.setArchiveLocation(""); - - update.setReleaseDate(System.currentTimeMillis()); - return update; - } -} diff --git a/updatecreator/src/main/java/com/boxtrotstudio/updates/api/UpdateType.java b/updatecreator/src/main/java/com/boxtrotstudio/updates/api/UpdateType.java deleted file mode 100755 index b941953b..00000000 --- a/updatecreator/src/main/java/com/boxtrotstudio/updates/api/UpdateType.java +++ /dev/null @@ -1,26 +0,0 @@ -package com.boxtrotstudio.updates.api; - -public enum UpdateType { - MAJOR(2), - MINOR(1), - BUGFIX(0), - ROLLBACK(-1), - UNKNOWN(-2), - NEW(-3); - - int type; - UpdateType(int type) { this.type = type; } - - public int getType() { - return type; - } - - public static UpdateType fromInt(int i) { - for (UpdateType t : values()) { - if (t.getType() == i) - return t; - } - - return UNKNOWN; - } -} diff --git a/updatecreator/src/main/java/com/boxtrotstudio/updates/api/Version.java b/updatecreator/src/main/java/com/boxtrotstudio/updates/api/Version.java deleted file mode 100755 index e700afaa..00000000 --- a/updatecreator/src/main/java/com/boxtrotstudio/updates/api/Version.java +++ /dev/null @@ -1,119 +0,0 @@ -package com.boxtrotstudio.updates.api; - -public class Version { - private int major; - private int minor; - private int bugfix; - - public static Version getHigher(Version version1, Version version2) { - if (version1.major > version2.major) - return version1; - else if (version1.major < version2.major) - return version2; - else { - if (version1.minor > version2.minor) - return version1; - else if (version1.minor < version2.minor) - return version2; - else { - if (version1.bugfix > version2.bugfix) - return version1; - else if (version1.bugfix < version2.bugfix) - return version2; - else - return null; - } - } - } - - public static Version parseVersion(String string) { - String[] dots = string.split("\\."); - int major; - int minor = 0; - int bugfix = 0; - switch (dots.length) { - case 0: - throw new NumberFormatException("Could not find major!"); - case 1: - major = Integer.parseInt(dots[0]); - break; - case 2: - major = Integer.parseInt(dots[0]); - minor = Integer.parseInt(dots[1]); - break; - case 3: - major = Integer.parseInt(dots[0]); - minor = Integer.parseInt(dots[1]); - bugfix = Integer.parseInt(dots[2]); - break; - default: - throw new UnsupportedOperationException("Version can only have 1, 2, or 3 attributes!"); - } - - return new Version(major, minor, bugfix); - } - - public Version(int major, int minor, int bugfix) { - this.major = major; - this.minor = minor; - this.bugfix = bugfix; - } - - public Version(Version clone) { - this.major = clone.major; - this.minor = clone.minor; - this.bugfix = clone.bugfix; - } - - public int getMajor() { - return major; - } - - public int getMinor() { - return minor; - } - - public int getBugfix() { - return bugfix; - } - - public void setMajor(int major) { - this.major = major; - } - - public void setMinor(int minor) { - this.minor = minor; - } - - public void setBugfix(int bugfix) { - this.bugfix = bugfix; - } - - public boolean isHigherThan(Version version) { - Version higher = getHigher(this, version); - return higher != null && higher.equals(this); - } - - @Override - public boolean equals(Object o) { - if (this == o) return true; - if (o == null || getClass() != o.getClass()) return false; - - Version version = (Version) o; - - return major == version.major && minor == version.minor && bugfix == version.bugfix; - } - - @Override - public int hashCode() { - int result = major; - result = 31 * result + minor; - result = 31 * result + bugfix; - return result; - } - - @Override - public String toString() { - return major + "." + minor + '.' + bugfix; - } -} diff --git a/updatecreator/update.json b/updatecreator/update.json deleted file mode 100755 index b8b322bd..00000000 --- a/updatecreator/update.json +++ /dev/null @@ -1,15 +0,0 @@ -[ - { - "id": 1, - "version": { - "major": 1, - "minor": 0, - "bugfix": 0 - }, - "type": "NEW", - "filesModified": [], - "md5": {}, - "releaseDate": 1459707054693, - "description": "This is a test" - } -] diff --git a/updater/build.gradle b/updater/build.gradle deleted file mode 100755 index 9ba774e8..00000000 --- a/updater/build.gradle +++ /dev/null @@ -1,22 +0,0 @@ -apply plugin: 'java' - -group = 'com.boxtrotstudio.updater' -version = '1.0-SNAPSHOT' - -description = """Generic updater and launcher for boxtrotstudio programs""" - -sourceCompatibility = 1.8 -targetCompatibility = 1.8 - -[compileJava, compileTestJava]*.options*.encoding = 'UTF-8' -sourceSets.main.java.srcDirs = [ "src/main/java" ] - -eclipse.project { - name = appName + "-updater" -} - -repositories { - flatDir { - dirs '../server/libs' - } -} \ No newline at end of file diff --git a/updater/src/main/java/META-INF/MANIFEST.MF b/updater/src/main/java/META-INF/MANIFEST.MF deleted file mode 100755 index 95130958..00000000 --- a/updater/src/main/java/META-INF/MANIFEST.MF +++ /dev/null @@ -1,3 +0,0 @@ -Manifest-Version: 1.0 -Main-Class: com.boxtrotstudio.updater.Main - diff --git a/updater/src/main/java/com/boxtrotstudio/updater/Main.java b/updater/src/main/java/com/boxtrotstudio/updater/Main.java deleted file mode 100755 index 73f5f504..00000000 --- a/updater/src/main/java/com/boxtrotstudio/updater/Main.java +++ /dev/null @@ -1,61 +0,0 @@ -package com.boxtrotstudio.updater; - -import com.boxtrotstudio.updater.gui.Launch; - -import javax.net.ssl.HttpsURLConnection; -import javax.net.ssl.SSLContext; -import javax.net.ssl.TrustManagerFactory; -import java.io.InputStream; -import java.nio.file.Files; -import java.nio.file.Path; -import java.nio.file.Paths; -import java.security.KeyStore; -import java.security.cert.Certificate; -import java.security.cert.CertificateFactory; - -public class Main { - - - public static void main(String[] args) throws Exception { - trustLetsEncrypt(); - new Launch().show(); - } - - private static boolean leTrusted; - public static void trustLetsEncrypt() throws Exception { - if (leTrusted) - return; - - System.setProperty("http.agent", "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2228.0 Safari/537.36"); - - InputStream x1fis = Main.class.getResourceAsStream("/cert/lets-encrypt-x1-cross-signed.der"); - InputStream x2fis = Main.class.getResourceAsStream("/cert/lets-encrypt-x2-cross-signed.der"); - InputStream x3fis = Main.class.getResourceAsStream("/cert/lets-encrypt-x3-cross-signed.der"); - InputStream x4fis = Main.class.getResourceAsStream("/cert/lets-encrypt-x4-cross-signed.der"); - - Certificate x1CA = CertificateFactory.getInstance("X.509").generateCertificate(x1fis); - Certificate x2CA = CertificateFactory.getInstance("X.509").generateCertificate(x2fis); - Certificate x3CA = CertificateFactory.getInstance("X.509").generateCertificate(x3fis); - Certificate x4CA = CertificateFactory.getInstance("X.509").generateCertificate(x4fis); - - KeyStore ks = KeyStore.getInstance(KeyStore.getDefaultType()); - Path ksPath = Paths.get(System.getProperty("java.home"), - "lib", "security", "cacerts"); - ks.load(Files.newInputStream(ksPath), - "changeit".toCharArray()); - ks.setCertificateEntry(Integer.toString(1), x1CA); - ks.setCertificateEntry(Integer.toString(2), x2CA); - ks.setCertificateEntry(Integer.toString(3), x3CA); - ks.setCertificateEntry(Integer.toString(4), x4CA); - - - TrustManagerFactory tmf = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm()); - tmf.init(ks); - - SSLContext ctx = SSLContext.getInstance("TLS"); - ctx.init(null, tmf.getTrustManagers(), null); - - SSLContext.setDefault(ctx); - HttpsURLConnection.setDefaultSSLSocketFactory(ctx.getSocketFactory()); - } -} diff --git a/updater/src/main/java/com/boxtrotstudio/updater/ProgramConfig.java b/updater/src/main/java/com/boxtrotstudio/updater/ProgramConfig.java deleted file mode 100755 index bf58f273..00000000 --- a/updater/src/main/java/com/boxtrotstudio/updater/ProgramConfig.java +++ /dev/null @@ -1,23 +0,0 @@ -package com.boxtrotstudio.updater; - -import me.eddiep.jconfig.system.Config; -import me.eddiep.jconfig.system.annotations.Getter; -import me.eddiep.jconfig.system.annotations.Setter; - -public interface ProgramConfig extends Config { - - @Getter(property = "name") - String getName(); - - @Getter(property = "execute") - String execute(); - - @Getter(property = "updateURL") - String updateLocation(); - - @Getter(property = "version") - String currentVersion(); - - @Setter(property = "version") - void setCurrentVersion(String version); -} diff --git a/updater/src/main/java/com/boxtrotstudio/updater/api/Update.java b/updater/src/main/java/com/boxtrotstudio/updater/api/Update.java deleted file mode 100755 index 1f1c0ef9..00000000 --- a/updater/src/main/java/com/boxtrotstudio/updater/api/Update.java +++ /dev/null @@ -1,177 +0,0 @@ -package com.boxtrotstudio.updater.api; - -import java.net.MalformedURLException; -import java.net.URL; -import java.util.Arrays; -import java.util.HashMap; - -/** - * This object represents a single update. - */ -public class Update { - private int id; - private Version version; - private UpdateType type; - private String[] filesModified; - private HashMap md5; - private String archiveLocation; - private long releaseDate; - private String description; - - /** - * Get the semantic {@link Version} of this {@link Update} - * @return The {@link Version} of this update - */ - public Version getVersion() { - return version; - } - - /** - * Get the {@link UpdateType} of this {@link Update} - * @return The {@link UpdateType} - */ - public UpdateType getType() { - return type; - } - - /** - * Get an array of all the files modified. This usually reflects the - * files contained in the archive - * @return All the files that were modified in this update - */ - public String[] getFilesModified() { - return filesModified; - } - - /** - * Get a {@link HashMap} of all the MD5 hash for the files modified. The key of the {@link HashMap} is - * the file path and the value is the file's MD5 - * @return A {@link HashMap} - */ - public HashMap getMd5() { - return md5; - } - - /** - * Get the location of this update - * @return The location of this update represented as a {@link String} - */ - public String getArchiveLocation() { - return archiveLocation; - } - - /** - * Get the location of this update - * @return The location of this update represented as a {@link URL} - */ - public URL getArchiveURL() { - try { - return new URL(archiveLocation); - } catch (MalformedURLException e) { - e.printStackTrace(); - return null; - } - } - - /** - * Get when this update was released as a Unix timestamp - * @return The time this update was released - */ - public long getReleaseDate() { - return releaseDate; - } - - /** - * Get a text description of this update - * @return The text description of this update - */ - public String getDescription() { - return description; - } - - /** - * Get the unique ID for this update - * @return The unique ID for this update - */ - public int getId() { - return id; - } - - void setVersion(Version version) { - this.version = version; - } - - void setType(UpdateType type) { - this.type = type; - } - - void setFilesModified(String[] filesModified) { - this.filesModified = filesModified; - } - - void setMd5(HashMap md5) { - this.md5 = md5; - } - - void setArchiveLocation(String archiveLocation) { - this.archiveLocation = archiveLocation; - } - - void setReleaseDate(long releaseDate) { - this.releaseDate = releaseDate; - } - - void setDescription(String description) { - this.description = description; - } - - void setId(int id) { - this.id = id; - } - - @Override - public boolean equals(Object o) { - if (this == o) return true; - if (o == null || getClass() != o.getClass()) return false; - - Update update = (Update) o; - - if (id != update.id) return false; - if (releaseDate != update.releaseDate) return false; - if (version != null ? !version.equals(update.version) : update.version != null) return false; - if (type != update.type) return false; - // Probably incorrect - comparing Object[] arrays with Arrays.equals - if (!Arrays.equals(filesModified, update.filesModified)) return false; - if (md5 != null ? !md5.equals(update.md5) : update.md5 != null) return false; - if (!archiveLocation.equals(update.archiveLocation)) return false; - return description.equals(update.description); - - } - - @Override - public int hashCode() { - int result = id; - result = 31 * result + (version != null ? version.hashCode() : 0); - result = 31 * result + type.hashCode(); - result = 31 * result + Arrays.hashCode(filesModified); - result = 31 * result + (md5 != null ? md5.hashCode() : 0); - result = 31 * result + archiveLocation.hashCode(); - result = 31 * result + (int) (releaseDate ^ (releaseDate >>> 32)); - result = 31 * result + description.hashCode(); - return result; - } - - @Override - public String toString() { - return "Update{" + - "id=" + id + - ", version=" + version + - ", type=" + type + - ", filesModified=" + Arrays.toString(filesModified) + - ", md5=" + md5 + - ", archiveLocation='" + archiveLocation + '\'' + - ", releaseDate=" + releaseDate + - ", description='" + description + '\'' + - '}'; - } -} diff --git a/updater/src/main/java/com/boxtrotstudio/updater/api/UpdateType.java b/updater/src/main/java/com/boxtrotstudio/updater/api/UpdateType.java deleted file mode 100755 index 240554f1..00000000 --- a/updater/src/main/java/com/boxtrotstudio/updater/api/UpdateType.java +++ /dev/null @@ -1,26 +0,0 @@ -package com.boxtrotstudio.updater.api; - -public enum UpdateType { - MAJOR(2), - MINOR(1), - BUGFIX(0), - ROLLBACK(-1), - UNKNOWN(-2), - NEW(-3); - - int type; - UpdateType(int type) { this.type = type; } - - public int getType() { - return type; - } - - public static UpdateType fromInt(int i) { - for (UpdateType t : values()) { - if (t.getType() == i) - return t; - } - - return UNKNOWN; - } -} diff --git a/updater/src/main/java/com/boxtrotstudio/updater/api/Version.java b/updater/src/main/java/com/boxtrotstudio/updater/api/Version.java deleted file mode 100755 index 8a15b88c..00000000 --- a/updater/src/main/java/com/boxtrotstudio/updater/api/Version.java +++ /dev/null @@ -1,119 +0,0 @@ -package com.boxtrotstudio.updater.api; - -public class Version { - private int major; - private int minor; - private int bugfix; - - public static Version getHigher(Version version1, Version version2) { - if (version1.major > version2.major) - return version1; - else if (version1.major < version2.major) - return version2; - else { - if (version1.minor > version2.minor) - return version1; - else if (version1.minor < version2.minor) - return version2; - else { - if (version1.bugfix > version2.bugfix) - return version1; - else if (version1.bugfix < version2.bugfix) - return version2; - else - return null; - } - } - } - - public static Version parseVersion(String string) { - String[] dots = string.split("\\."); - int major; - int minor = 0; - int bugfix = 0; - switch (dots.length) { - case 0: - throw new NumberFormatException("Could not find major!"); - case 1: - major = Integer.parseInt(dots[0]); - break; - case 2: - major = Integer.parseInt(dots[0]); - minor = Integer.parseInt(dots[1]); - break; - case 3: - major = Integer.parseInt(dots[0]); - minor = Integer.parseInt(dots[1]); - bugfix = Integer.parseInt(dots[2]); - break; - default: - throw new UnsupportedOperationException("Version can only have 1, 2, or 3 attributes!"); - } - - return new Version(major, minor, bugfix); - } - - public Version(int major, int minor, int bugfix) { - this.major = major; - this.minor = minor; - this.bugfix = bugfix; - } - - public Version(Version clone) { - this.major = clone.major; - this.minor = clone.minor; - this.bugfix = clone.bugfix; - } - - public int getMajor() { - return major; - } - - public int getMinor() { - return minor; - } - - public int getBugfix() { - return bugfix; - } - - public void setMajor(int major) { - this.major = major; - } - - public void setMinor(int minor) { - this.minor = minor; - } - - public void setBugfix(int bugfix) { - this.bugfix = bugfix; - } - - public boolean isHigherThan(Version version) { - Version higher = getHigher(this, version); - return higher != null && higher.equals(this); - } - - @Override - public boolean equals(Object o) { - if (this == o) return true; - if (o == null || getClass() != o.getClass()) return false; - - Version version = (Version) o; - - return major == version.major && minor == version.minor && bugfix == version.bugfix; - } - - @Override - public int hashCode() { - int result = major; - result = 31 * result + minor; - result = 31 * result + bugfix; - return result; - } - - @Override - public String toString() { - return major + "." + minor + '.' + bugfix; - } -} diff --git a/updater/src/main/java/com/boxtrotstudio/updater/gui/Launch.form b/updater/src/main/java/com/boxtrotstudio/updater/gui/Launch.form deleted file mode 100755 index ddce90f9..00000000 --- a/updater/src/main/java/com/boxtrotstudio/updater/gui/Launch.form +++ /dev/null @@ -1,132 +0,0 @@ - -

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/updater/src/main/java/com/boxtrotstudio/updater/gui/Launch.java b/updater/src/main/java/com/boxtrotstudio/updater/gui/Launch.java deleted file mode 100755 index 753a3cf0..00000000 --- a/updater/src/main/java/com/boxtrotstudio/updater/gui/Launch.java +++ /dev/null @@ -1,507 +0,0 @@ -package com.boxtrotstudio.updater.gui; - -import com.boxtrotstudio.updater.ProgramConfig; -import com.boxtrotstudio.updater.api.Update; -import com.boxtrotstudio.updater.api.UpdateType; -import com.boxtrotstudio.updater.api.Version; -import com.google.gson.Gson; -import com.intellij.uiDesigner.core.GridConstraints; -import com.intellij.uiDesigner.core.GridLayoutManager; -import com.intellij.uiDesigner.core.Spacer; -import me.eddiep.jconfig.JConfig; -import org.apache.commons.codec.digest.DigestUtils; -import org.apache.commons.io.FileUtils; -import org.apache.commons.io.IOUtils; -import org.oxbow.swingbits.dialog.task.TaskDialogs; - -import javax.swing.*; -import javax.swing.border.EmptyBorder; -import java.awt.*; -import java.awt.event.MouseAdapter; -import java.awt.event.MouseEvent; -import java.io.*; -import java.net.URI; -import java.net.URISyntaxException; -import java.net.URL; -import java.nio.charset.Charset; -import java.nio.file.Files; -import java.nio.file.Path; -import java.util.*; -import java.util.List; -import java.util.zip.ZipEntry; -import java.util.zip.ZipFile; -import java.util.zip.ZipInputStream; - -public class Launch { - private static Gson GSON = new Gson(); - private Path tempDirectory; - private File gamePath; - private ProgramConfig config; - - private JPanel panel1; - private JButton button1; - private JPanel panel2; - private JPanel panel3; - private JLabel label; - private JLabel label2; - private JProgressBar progressBar1; - private JPanel panel4; - private JLabel label44; - - - private boolean didError; - - private void getGamePath() { - final String OS = System.getProperty("os.name").toLowerCase(Locale.ENGLISH); - - if (OS.contains("win")) { - gamePath = new File(System.getenv("AppData"), "ghost"); - } else if (OS.contains("mac")) { - gamePath = new File("~/Library/Application Support", "Ghost"); - } else { - gamePath = new File("~/.ghost"); - } - } - - public void show() { - getGamePath(); - - config = JConfig.newConfigObject(ProgramConfig.class); - File configFile = new File(gamePath, "program.json"); - if (configFile.exists()) - config.load(configFile); - else { - try { - if (!gamePath.mkdirs()) { - System.out.println("Failed to make game directory!"); - } - PrintWriter writer = new PrintWriter(configFile); - Scanner scanner = new Scanner(getClass().getResourceAsStream("/program.json")); - while (scanner.hasNextLine()) { - writer.println(scanner.nextLine()); - } - - writer.close(); - scanner.close(); - - config.load(configFile); - } catch (FileNotFoundException e) { - e.printStackTrace(); - } - } - - - final JFrame frame = new JFrame("Launcher"); - frame.setContentPane(panel1); - frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); - frame.pack(); - frame.setVisible(true); - - frame.setSize(500, 400); - - label44.setForeground(new Color(39, 39, 39, 1)); - label44.setBackground(new Color(39, 39, 39, 1)); - - label44.addMouseListener(new MouseAdapter() { - @Override - public void mouseClicked(MouseEvent e) { - try { - Desktop.getDesktop().browse(new URI("http://boxtrotstudio.com")); - } catch (IOException | URISyntaxException e1) { - e1.printStackTrace(); - } - } - - @Override - public void mouseEntered(MouseEvent e) { - label44.setCursor(new Cursor(Cursor.HAND_CURSOR)); - } - - @Override - public void mouseExited(MouseEvent e) { - label44.setCursor(new Cursor(Cursor.DEFAULT_CURSOR)); - } - }); - - button1.setBackground(new Color(93, 148, 86)); - button1.setForeground(new Color(255, 255, 255, 180)); - - button1.setEnabled(false); - button1.setVisible(false); - - panel1.setBackground(new Color(39, 39, 39)); - panel2.setBackground(new Color(39, 39, 39)); - panel3.setBackground(new Color(39, 39, 39)); - label.setForeground(Color.WHITE); - label2.setForeground(Color.WHITE); - - progressBar1.setIndeterminate(true); - - panel1.setBorder(new EmptyBorder(15, 15, 15, 15)); - - runUpdateCheck(frame); - - button1.addActionListener(e -> { - if (didError) { - runUpdateCheck(frame); - } else { - try { - launch(config); - } catch (final Throwable e1) { - //Spawn both at the same time - new Thread(() -> TaskDialogs.showException(e1)).start(); - - try { - Thread.sleep(800); - } catch (InterruptedException ignored) { - } - - JOptionPane.showMessageDialog(frame, - "There was an error launching the game.\nPlease report this at http://boxtrotstudio.com/bugs", - "Error checking for updates", - JOptionPane.ERROR_MESSAGE); - } - } - }); - } - - private void runUpdateCheck(final JFrame frame) { - new Thread(() -> { - button1.setVisible(false); - button1.setEnabled(false); - progressBar1.setVisible(true); - label2.setVisible(true); - try { - checkForUpdates(); - } catch (final IOException e) { - progressBar1.setVisible(false); - label2.setVisible(false); - button1.setEnabled(true); - button1.setVisible(true); - button1.setText("Try Again"); - didError = true; - - //Spawn both at the same time - new Thread(() -> TaskDialogs.showException(e)).start(); - - try { - Thread.sleep(800); - } catch (InterruptedException ignored) { - } - - JOptionPane.showMessageDialog(frame, - "There was an error checking for updates.\nPlease report this at http://boxtrotstudio.com/bugs", - "Error checking for updates", - JOptionPane.ERROR_MESSAGE); - } - }).start(); - } - - private void checkForUpdates() throws IOException { - URL url = new URL(config.updateLocation()); - Version currentVersion = Version.parseVersion(config.currentVersion()); - - System.out.println("Downloading remote update list"); - - String json = IOUtils.toString(url, Charset.defaultCharset()); - - List updates = Arrays.asList(GSON.fromJson(json, Update[].class)); - - System.out.println("Checking latest update"); - - if (!currentVersion.equals(updates.get(updates.size() - 1).getVersion())) { - System.out.println("Potential update found.."); - - ArrayList updatesMissed = new ArrayList<>(); - Update latest = updates.get(updates.size() - 1); - - updatesMissed.add(latest); - for (int i = updates.size() - 2; i >= 0; i--) { - Update temp = updates.get(i); - - if (temp.getVersion().isHigherThan(currentVersion)) { - updatesMissed.add(temp); - } else { - break; - } - } - - System.out.println(updatesMissed.size() + " update" + (updatesMissed.size() == 1 ? "" : "s") + " found!"); - System.out.println(currentVersion + " -> " + latest.getVersion()); - - tempDirectory = Files.createTempDirectory(config.getName()); - - int taskCount = calculateTaskCount(updatesMissed); - progressBar1.setIndeterminate(false); - progressBar1.setMaximum(taskCount); - - for (int i = updatesMissed.size() - 1; i >= 0; i--) { - Update toApply = updatesMissed.get(i); - label2.setText("Installing " + toApply.getVersion()); - applyUpdate(toApply, updates, updates.indexOf(toApply)); - stepProgressbar(); - try { - Thread.sleep(300); - } catch (InterruptedException e) { - e.printStackTrace(); - } - } - - System.out.println(); - System.out.println("All updates applied, launching"); - - progressBar1.setVisible(false); - label2.setVisible(false); - button1.setEnabled(true); - button1.setVisible(true); - } else { - System.out.println("No updates found, launching"); - - progressBar1.setVisible(false); - label2.setVisible(false); - button1.setEnabled(true); - button1.setVisible(true); - } - } - - private void stepProgressbar() { - progressBar1.setValue(progressBar1.getValue() + 1); - } - - private void applyUpdate(Update update, List updateList, int currentIndex) throws IOException { - System.out.println(); - System.out.println("Applying update " + update.getVersion()); - - if (update.getType() != UpdateType.ROLLBACK) { - File tempFile = new File(tempDirectory.toFile(), update.getVersion() + ".zip"); - - URL downloadURL = new URL(update.getArchiveLocation()); - - FileUtils.copyURLToFile(downloadURL, tempFile); - - ZipInputStream zis = new ZipInputStream(new FileInputStream(tempFile)); - - ZipEntry file = zis.getNextEntry(); - byte[] buffer = new byte[1024]; - while (file != null) { - System.out.println("Extracting " + file.getName() + "..."); - try { - Thread.sleep(10); - } catch (InterruptedException e) { - e.printStackTrace(); - } - - if (file.isDirectory()) { - file = zis.getNextEntry(); - stepProgressbar(); - continue; - } - - File newFile = new File(gamePath, file.getName()).getAbsoluteFile(); - - new File(newFile.getParent()).mkdirs(); - - FileOutputStream fos = new FileOutputStream(newFile); - - - int len; - while ((len = zis.read(buffer)) > 0) { - fos.write(buffer, 0, len); - } - fos.close(); - - file = zis.getNextEntry(); - stepProgressbar(); - } - - zis.closeEntry(); - zis.close(); - } else { - System.out.println("Rollback update detected!"); - - for (String file : update.getFilesModified()) { - try { - Thread.sleep(100); - } catch (InterruptedException e) { - e.printStackTrace(); - } - System.out.println("Searching for " + file + "..."); - String md5 = update.getMd5().get(file); - - for (int i = currentIndex - 1; i >= 0; i--) { - Update temp = updateList.get(i); - - if (temp.equals(update)) - continue; - - if (arrayContains(temp.getFilesModified(), file)) { - System.out.println("Found in " + temp.getVersion()); - - File tempFile = new File(tempDirectory.toFile(), temp.getVersion() + ".zip"); - - if (!tempFile.exists()) { - System.out.println("Downloading update " + temp.getVersion() + "..."); - - URL downloadURL = new URL(temp.getArchiveLocation()); - - FileUtils.copyURLToFile(downloadURL, tempFile); - } - - ZipFile zzzz = new ZipFile(tempFile); - - ZipInputStream zis = new ZipInputStream(new FileInputStream(tempFile)); - - ZipEntry zipFile = zis.getNextEntry(); - byte[] buffer = new byte[1024]; - - boolean badUpdate = false; - - while (zipFile != null) { - if (!zipFile.getName().equals(file)) { - zipFile = zis.getNextEntry(); - continue; - } - - String their_md5 = DigestUtils.md5Hex(zzzz.getInputStream(zipFile)); - if (their_md5.equals(md5)) { - badUpdate = true; - break; - } - - System.out.println("Extracting " + zipFile.getName() + "..."); - - File newFile = new File(gamePath, zipFile.getName()).getAbsoluteFile(); - - new File(newFile.getParent()).mkdirs(); - - FileOutputStream fos = new FileOutputStream(newFile); - - - int len; - while ((len = zis.read(buffer)) > 0) { - fos.write(buffer, 0, len); - } - fos.close(); - stepProgressbar(); - break; - } - zis.closeEntry(); - zis.close(); - - if (badUpdate) - continue; - - break; - } - } - } - - System.out.println("Updating program.json.."); - config.setCurrentVersion(update.getVersion().toString()); - config.save(new File("program.json")); - - System.out.println("Rollback complete!"); - } - - System.out.println("Update applied successfully!"); - } - - private void launch(ProgramConfig config) throws IOException { - Runtime.getRuntime().exec(config.execute(), null, gamePath); - System.exit(0); - } - - private static boolean arrayContains(String[] array, String contains) { - for (String s : array) { - if (s.equals(contains)) - return true; - } - return false; - } - - private static int calculateTaskCount(List updateList) { - int taskCount = updateList.size(); - - for (Update u : updateList) { - taskCount += u.getFilesModified().length; - } - - return taskCount; - } - - { -// GUI initializer generated by IntelliJ IDEA GUI Designer -// >>> IMPORTANT!! <<< -// DO NOT EDIT OR ADD ANY CODE HERE! - $$$setupUI$$$(); - } - - /** - * Method generated by IntelliJ IDEA GUI Designer - * >>> IMPORTANT!! <<< - * DO NOT edit this method OR call it in your code! - * - * @noinspection ALL - */ - private void $$$setupUI$$$() { - panel1 = new JPanel(); - panel1.setLayout(new GridLayoutManager(5, 4, new Insets(0, 0, 0, 0), -1, -1)); - panel3 = new JPanel(); - panel3.setLayout(new GridLayoutManager(1, 3, new Insets(0, 0, 0, 0), -1, -1)); - panel1.add(panel3, new GridConstraints(0, 0, 1, 3, GridConstraints.ANCHOR_CENTER, GridConstraints.FILL_BOTH, GridConstraints.SIZEPOLICY_CAN_SHRINK | GridConstraints.SIZEPOLICY_CAN_GROW, GridConstraints.SIZEPOLICY_CAN_SHRINK | GridConstraints.SIZEPOLICY_CAN_GROW, null, null, null, 0, false)); - label = new JLabel(); - label.setFont(new Font(label.getFont().getName(), label.getFont().getStyle(), 36)); - label.setHorizontalAlignment(0); - label.setHorizontalTextPosition(0); - label.setText("Project Ghost"); - panel3.add(label, new GridConstraints(0, 1, 1, 1, GridConstraints.ANCHOR_WEST, GridConstraints.FILL_NONE, GridConstraints.SIZEPOLICY_FIXED, GridConstraints.SIZEPOLICY_FIXED, null, null, null, 0, false)); - final Spacer spacer1 = new Spacer(); - panel3.add(spacer1, new GridConstraints(0, 2, 1, 1, GridConstraints.ANCHOR_CENTER, GridConstraints.FILL_HORIZONTAL, GridConstraints.SIZEPOLICY_WANT_GROW, 1, null, null, null, 0, false)); - final Spacer spacer2 = new Spacer(); - panel3.add(spacer2, new GridConstraints(0, 0, 1, 1, GridConstraints.ANCHOR_CENTER, GridConstraints.FILL_HORIZONTAL, GridConstraints.SIZEPOLICY_WANT_GROW, 1, null, null, null, 0, false)); - final Spacer spacer3 = new Spacer(); - panel1.add(spacer3, new GridConstraints(4, 2, 1, 1, GridConstraints.ANCHOR_CENTER, GridConstraints.FILL_VERTICAL, 1, GridConstraints.SIZEPOLICY_WANT_GROW, null, null, null, 0, false)); - final Spacer spacer4 = new Spacer(); - panel1.add(spacer4, new GridConstraints(1, 0, 1, 3, GridConstraints.ANCHOR_CENTER, GridConstraints.FILL_VERTICAL, 1, GridConstraints.SIZEPOLICY_WANT_GROW, null, null, null, 0, false)); - label2 = new JLabel(); - label2.setFont(new Font(label2.getFont().getName(), label2.getFont().getStyle(), 16)); - label2.setText("Checking for updates..."); - panel1.add(label2, new GridConstraints(2, 0, 1, 3, GridConstraints.ANCHOR_CENTER, GridConstraints.FILL_NONE, GridConstraints.SIZEPOLICY_FIXED, GridConstraints.SIZEPOLICY_FIXED, null, null, null, 0, false)); - progressBar1 = new JProgressBar(); - panel1.add(progressBar1, new GridConstraints(3, 0, 1, 3, GridConstraints.ANCHOR_CENTER, GridConstraints.FILL_HORIZONTAL, GridConstraints.SIZEPOLICY_WANT_GROW, GridConstraints.SIZEPOLICY_FIXED, null, null, null, 0, false)); - panel2 = new JPanel(); - panel2.setLayout(new GridLayoutManager(3, 3, new Insets(0, 0, 0, 0), -1, -1)); - panel1.add(panel2, new GridConstraints(4, 0, 1, 2, GridConstraints.ANCHOR_CENTER, GridConstraints.FILL_BOTH, GridConstraints.SIZEPOLICY_CAN_SHRINK | GridConstraints.SIZEPOLICY_CAN_GROW, GridConstraints.SIZEPOLICY_CAN_SHRINK | GridConstraints.SIZEPOLICY_CAN_GROW, null, null, null, 0, false)); - button1 = new JButton(); - button1.setFont(new Font(button1.getFont().getName(), button1.getFont().getStyle(), 18)); - button1.setText("Launch Game"); - panel2.add(button1, new GridConstraints(0, 1, 1, 1, GridConstraints.ANCHOR_CENTER, GridConstraints.FILL_HORIZONTAL, GridConstraints.SIZEPOLICY_CAN_SHRINK | GridConstraints.SIZEPOLICY_CAN_GROW, GridConstraints.SIZEPOLICY_FIXED, null, null, null, 0, false)); - final Spacer spacer5 = new Spacer(); - panel2.add(spacer5, new GridConstraints(1, 1, 1, 1, GridConstraints.ANCHOR_CENTER, GridConstraints.FILL_VERTICAL, 1, GridConstraints.SIZEPOLICY_WANT_GROW, null, null, null, 0, false)); - final Spacer spacer6 = new Spacer(); - panel2.add(spacer6, new GridConstraints(0, 0, 1, 1, GridConstraints.ANCHOR_CENTER, GridConstraints.FILL_HORIZONTAL, GridConstraints.SIZEPOLICY_WANT_GROW, 1, null, null, null, 0, false)); - final Spacer spacer7 = new Spacer(); - panel2.add(spacer7, new GridConstraints(0, 2, 1, 1, GridConstraints.ANCHOR_CENTER, GridConstraints.FILL_HORIZONTAL, GridConstraints.SIZEPOLICY_WANT_GROW, 1, null, null, null, 0, false)); - panel4 = new JPanel(); - panel4.setLayout(new GridLayoutManager(1, 1, new Insets(0, 0, 0, 0), -1, -1)); - panel2.add(panel4, new GridConstraints(2, 1, 1, 1, GridConstraints.ANCHOR_CENTER, GridConstraints.FILL_BOTH, GridConstraints.SIZEPOLICY_CAN_SHRINK | GridConstraints.SIZEPOLICY_CAN_GROW, GridConstraints.SIZEPOLICY_CAN_SHRINK | GridConstraints.SIZEPOLICY_CAN_GROW, null, null, null, 0, false)); - label44 = new JLabel(); - label44.setBackground(new Color(-15853247)); - label44.setEnabled(true); - label44.setForeground(new Color(-15353025)); - label44.setHorizontalAlignment(0); - label44.setHorizontalTextPosition(0); - label44.setIcon(new ImageIcon(getClass().getResource("/boxtrotlogo.png"))); - label44.setText(""); - label44.setVerticalAlignment(1); - label44.setVerticalTextPosition(0); - panel4.add(label44, new GridConstraints(0, 0, 1, 1, GridConstraints.ANCHOR_CENTER, GridConstraints.FILL_NONE, GridConstraints.SIZEPOLICY_FIXED, GridConstraints.SIZEPOLICY_FIXED, null, new Dimension(217, 37), new Dimension(217, 37), 0, false)); - } - - /** - * @noinspection ALL - */ - public JComponent $$$getRootComponent$$$() { - return panel1; - } -} diff --git a/updater/src/main/resources/boxtrotlogo.png b/updater/src/main/resources/boxtrotlogo.png deleted file mode 100755 index 1dd6fc3e7e2b8ac596dd9ae8091824c4b3259361..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2158 zcmeHH|2NYMAOEb`Y!hZ?X2h`1XPB=;G2fCeZQ334C0rF1mG3jdkxL$KDB>Ee&6mhL z<(8{s-7ZfhijvzV8cM#DxQlC*PEnrjQ_s5p!}HtoKJVB2bo_j#Sy`+d&)R2XNs zE{22w06>?;3=G%sv<4swuBo4#Z$TO&A7+Ms2LQ)G04Od6fX%NOUIBm{X8`y!0RR|c z05HxJ#@`DD05}lFjttVwz+kW~TeiUAa4ju30)fy*B9KTV3Z=ajqm4qL&}cLUgV~Bk z>Fc8PwqkJl7(;y>13f()R@V@#N5Jaf4Rnoh`X)GCEEbEy;qZnAcs$<7$cR875b-!O z0+vK1kch@aBGJUeghV2lnwpxKlFZD^EQtnWvW0_{G0l?X4w;e3WJ^m+D=SS}SzB9! zR%8l=0)ij}K~yT023pxrAv+sQQtfRaCp*a54sxMU-R&U{2Z-Sa`8ZhmIa>NTfj&-< zk2C1&40+LMJDs5bIvC_a3Di_N#B>FjZXnAIV!K0}?cjIYAr8YXdjTn{M9 z1B~*3Vi;g71B&y8_IW`EyukzBP>i2rf;V)~7mD8L#0~O^4|L&i89c5RKiunw*qs%J zf-4T~u09$f;e|Ex!_Q|&{(L;;6c~G0I5T%ZtOP`QrPBv#fZOWQC z&!26{o^27#wr0<@3Z7rcdC`_Lc(Hc*e&?Hq-D?WjyU}Z!)BHdF*Be;uv~AO9pn1&L zYyi-~eFNwm^%M3ELfYYCgDrt28*%X;5oX&SCKdfQmy;RQ zAFWe2l}*_kW!;$XTTfA4ywo!yj`fPqy6Lhklot)&DQn#$OZE~k@Ze*hB!5)z{43sn zl(v%mw#*h4Z%*kT$yf1DGz_kDh7(oub33wronNU>JEAO@(mS8De&X7RB^gtdSefE&8-kg*kt?2WoeVsboct>wW~D}x$jORx%Bn^NSiNvWbzE@IA4Tp z?HHl#`Fbqk)vCu6-SU1*aiNe=n|^8N={qMOm{}|<5tRz>Q&XX}8jGvmo6VK)#|w=e z;}Ta_YpkOW94jAgR>vHs=ZVb+d%w>LegXeoQNBhgpEPLDt#_lxic7YriM`J5&$HvM zoq>{P<}p&S!F_aWpwi||Ku#HG$4cx-Tv-j(cch8$s4`#wu0eBniHdX+9`hS*>kD2hjHn->I~x z4Wv@8025^DXZF6NGu%g{}0N`A{WY)pd1F6|pqF?`P+ePr!6i3UBR{T(RTe#s`bh}6GbIK~a!+fWrOYMu=dnC3kz z62TtWQ=A2|W#6F_eUEqTH_XqH<^O4N@pzxS|Iw$D%2fNsb)Wp}$TE&-RH}!0TkA-3 zyCds!jB6R(F$DCz~%Q}4|Q4TJiJ27(b@*|LH-fnB>2O8yH5d+Toi diff --git a/updater/src/main/resources/cert/lets-encrypt-x1-cross-signed.der b/updater/src/main/resources/cert/lets-encrypt-x1-cross-signed.der deleted file mode 100755 index 97b406af68d7e7333dca59c664b68b5f9491523a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1196 zcmXqLVp(C(#5`dEGZP~dlOV$k;V-4aPfNL-pF7Jy$BiZ29byGD-)rWicnSLyoq`!TKwX#!7MN&1QUrL%SfC5i~! zr@m}zKYjZbU)Z;{&d;s()7#c>xFhvGn|G>M?Gfz-shei9n3XnUukrdUJ;Ad=f6+95 zEd^CgmSZIcE*PHeH?){4wrhp)4(E>>E)G8 z5i?%(t3`9$748E!Y7b9lVrFDuT-?Ms2^b=M21399l@(@W{LjK+zy_q47#R%sKw|tL zF&1C~X)~y2;M=!Z3$3PgQTaJatfNLQzXq#B{ax-%bWI=*_ zEMhDoE4;FjS!(a@dUnxr`!d(m_n%k1S%{o&f%y)YZW$Rao>1~$^Zqes=d^&0y%hyo zjM5RY`<==ze=LgX%Uo9eSbx9JEkB(bNf*_3G=H6NN@(ZZy_;PnPmBG&$))|}d2(*z z@`k&L)_=UOML6%0TD00)p2NkkKc{me^TVYdF5k&kopR{A(bgU9*IwO=mF0M6nf*_u zN-V8<>j(U~-*~lUL;oyW_0_Qzk)p8he+ZL`^);)jkc?Qm{@tMl? xF*dw6pJZ1MU&;E=2~2Fb9o~ybH1LTxPd506|*p(OK^xn zP<}p8*ij+E*g#I4*U;3^z|hjj$k^1tFiM=)$N-6J;AO~dzzNdICd?EXY$#?R0A{_&RuLbAU*-s($! zmK%NGg~Q4o$3GXDJO3voawc43XRVkuVXst*o&TNl<@%l3r_W?T6kIO8*}bO=#^DFbDxDP+;*j@HXIJV@q%3VPs-7uxH~2I-7;D z=|0eZj0Oeib#Mv>z*g42YFS#hkKp3Q3j)lj7YauXbn^^R6Gjj}NL4tfN zVk{y@H?H>c*?2a^U~=8TmYJ-ppD{mDMNYTCdGFn8ZkCqLow(_%eQzRv>E6`N^-;wpj*%Bn9=I*I!S_+!*|}F-)IZ#v8}hS( w`);e+y6+h-k`5kEo|(*??$w{Q=NNx>!I4D?{0l-@(^d6s;oISRp<>3NAIrA4Uh&j1wXVrpV! zWSDcA=R?#}J@@TJvF6R2Gm;HnT{l&eRDHO2pXtYfN&4G&cssJLUOCT{BjU|Qts@!j z+>0NVK6&l0_q|9qh$z3@aP-_(ic|2>=eGQq~-^kmKfP`JhC5R4vw5eA)gIAakh*Cmi&<$y_8PCx(i1!@^cPL@*HTc` zWI0xH;DX`VenX3?V!Kut?{NOOQU0(&{h~@kVOw3ZACLchGS1p*X?S$~kzQWe6fxsf zzgjf6UEw}(qxSG*CT2zk#>GvHwZIUmG!Oy?sH`v}<9`+o12!PV#K>U42NL54iLn6F zN1H)C8;3R2P#h-gA@BM&1Jqk%meH_+KEj7|4} z{$n&SFwld!fr(K}3F?Mqpc6oL=~fu(<)oGrr$UmNUVc%!fepx1c@|RxV*|ql`U`a1 zv|*Zxa?sojOz%Pd{vpne5ys9zK6=STIR>&I-Fz%!EFvqsvXWV9@9uhb(Q^AT*VOl) zSG-w>oJ4_H446b28SWZi7yO(YVR2VN^fzbdzOt~L1s+Q?-PNlPsc=mC7$xr|q-m~F z5-5|DvE%I2g7l}~m+bM=2s}Ic#k%&nuWsy$TF5x-&WF2MvROCm!j@;Oxdt4HR-{@kf)2a)+!u%`E2){6W_KTHd;L6O!Z+>x=&G>hD&N+uyM)Tw+#W)@;$%&5TiZ?#vJAaME2mNZDq`5a2Ps~@9)}OFZ z(#`f;o%FJ*_MMBXawUGLE}hse`rwn8e#8bgeVq)oW8O2)-kQ(zvwp%`XD=Zazx?7V bjaN%nhllF4Ox`})Hs(OaAVarCE7 diff --git a/updater/src/main/resources/cert/lets-encrypt-x4-cross-signed.der b/updater/src/main/resources/cert/lets-encrypt-x4-cross-signed.der deleted file mode 100755 index 53d1ca93ce3d8ffadd2a8cd72c1c804b989c9be2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1174 zcmXqLVwq&n#9Xz2nTe5!Nq~#d(TRb9F}SsO*=fPY^4$i!Y@Awc9&O)w85y}*84T(+b;o5L?_SrP)6LV@?+x&ezbp`v{oV0aU-Glu z=mRetR`xjlxyao4KPizj;Tk(@#jFW?rBdwt@0>5!@60}(zTVOIXfMNo?0>y2ceZ|- zYPjOXw+RcJy(X8$Y_@aG^zKx0FA21pnR5873ggcfeT{N)rR8@I=WzI>>6@1v&7a)2 z!OdJO@nXP?6C3#bBZ6zze7mJPEiquN^Bt~b{`0m5?VQv1-tWHKX2UxQe=-j(Rw%W5 zVOD-$y#1LNW*##&&AR2m2Y15{R+k?}tZhXEUqVq#=4-~);AgTz>X z>7&h{o{dABjggg=osp5H*r3qB2*x*HY*Wi9DJihh*Uv02O4lm^rG(5Bz5L|j0=>+X z)I6|&UUGh}fi+wYQ=2|iPhvqqF{(2CB4C;+)=w!e0Wp#jD~$CD%##h|K@L)8kuVTz z5IM4Zsls7#Qfm+`z;rrUZ3EGSCSiyL2lI^>R{6ic=v;O)tMF-M|K9syvISfw6(%0{sQL zZQ3wRMLB5h2B!BQfBz6?#|UHRARoQtq8tNRkZwK}F&2@d8&~`JY&@G{FuCqv%S_hQ z&zK*nA}3K`76T?xMh3I6d7ig*Yq+yS?mjLR^AxkGjek7*&L`%nFZmOB{hUJ$9#Q+Umr2?KWIz(EF)|ae>n2)9EPhO=h^U;GyL;d zV84ZFSJ;P6(~a5_*vx7cGTk?SxW}r^+TcpYa-~m>485n@rq%dwOsW!HxUTNh{#kaa zU*5K8Cx7S4W>A02P+_lF`TrA_2W!r|1U>fk206!F?gY)ZC_j0-b;tQ{CseI2Cm*x) b+Q$$iU0i=klyBqB#FT9Nju(oD*Zl - - false - gui - C:\Users\Eddie\.babun\cygwin\home\Eddie\Projects\Ghost-Shadow-Warrior-Phantom-Assault-DX\build\classes\artifacts\updater_jar\Project Ghost.jar - C:\Users\Eddie\.babun\cygwin\home\Eddie\Projects\Ghost-Shadow-Warrior-Phantom-Assault-DX\build\classes\artifacts\updater_jar\launcher.exe - No Java Runtime - - . - normal - http://java.com/download - - false - false - - C:\Users\Eddie\.babun\cygwin\home\Eddie\Projects\Ghost-Shadow-Warrior-Phantom-Assault-DX\build\classes\artifacts\updater_jar\ball.ico - - project_ghost - Project Ghost - - - - false - false - 1.7.0 - - preferJre - 64/32 - - - 0.0.0.1 - Version 0.0.1 - Alpha version for Project Ghost - BoxtrotStudio 2016 - 0.0.0.1 - Version 0.0.1 - Project Ghost - BoxtrotStudio - ghost - ghost.exe - - \ No newline at end of file