Skip to content

Commit

Permalink
Apply remaining patches, fix API
Browse files Browse the repository at this point in the history
  • Loading branch information
kennytv committed Dec 3, 2024
1 parent dc74c6f commit d7d2f88
Show file tree
Hide file tree
Showing 36 changed files with 105 additions and 101 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -71,15 +71,15 @@ index 21f9998b472dc18eb308554f5cdf467f6675f2f0..521f035409ee61a9ad73d39bec938f29
return Lists.newArrayList(Registry.ATTRIBUTE).toArray(new Attribute[0]);
}
diff --git a/src/main/java/org/bukkit/block/Biome.java b/src/main/java/org/bukkit/block/Biome.java
index 739fef949defca7b6bf4e6b3e079446c24d9b34c..1b9f7a7759e59e0294f379dc6388f400010faa2f 100644
index 739fef949defca7b6bf4e6b3e079446c24d9b34c..20fc2b30fdcdedb012dfe129e746d0b9e162fc36 100644
--- a/src/main/java/org/bukkit/block/Biome.java
+++ b/src/main/java/org/bukkit/block/Biome.java
@@ -93,7 +93,7 @@ public interface Biome extends OldEnum<Biome>, Keyed, net.kyori.adventure.transl
*
* @deprecated Biome is no longer an enum, custom biomes will have their own biome instance.
*/
- @Deprecated(since = "1.21.3")
+ @Deprecated(since = "1.21.3", forRemoval = true) @ApiStatus.ScheduledForRemoval(inVersion = "1.22") // Paper - will be removed via asm-utils
+ @Deprecated(since = "1.21.3", forRemoval = true) @org.jetbrains.annotations.ApiStatus.ScheduledForRemoval(inVersion = "1.22") // Paper - will be removed via asm-utils
Biome CUSTOM = Bukkit.getUnsafe().getCustomBiome();

@NotNull
Expand All @@ -88,7 +88,7 @@ index 739fef949defca7b6bf4e6b3e079446c24d9b34c..1b9f7a7759e59e0294f379dc6388f400
*/
@NotNull
- @Deprecated(since = "1.21.3")
+ @Deprecated(since = "1.21.3", forRemoval = true) @ApiStatus.ScheduledForRemoval(inVersion = "1.22") // Paper - will be removed via asm-utils
+ @Deprecated(since = "1.21.3", forRemoval = true) @org.jetbrains.annotations.ApiStatus.ScheduledForRemoval(inVersion = "1.22") // Paper - will be removed via asm-utils
static Biome valueOf(@NotNull String name) {
if ("CUSTOM".equals(name)) {
return Biome.CUSTOM;
Expand Down
8 changes: 3 additions & 5 deletions patches/api/0489-Improve-entity-effect-API.patch
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ Subject: [PATCH] Improve entity effect API


diff --git a/src/main/java/org/bukkit/EntityEffect.java b/src/main/java/org/bukkit/EntityEffect.java
index d7ccccdf3f5e2c572efd528a92e240ec6ea60028..51d51638b7220f886c8415581869df8708e72fef 100644
index d7ccccdf3f5e2c572efd528a92e240ec6ea60028..37c321067ee25f8a38130eb65ed06e1c986c65b6 100644
--- a/src/main/java/org/bukkit/EntityEffect.java
+++ b/src/main/java/org/bukkit/EntityEffect.java
@@ -112,11 +112,25 @@ public enum EntityEffect {
Expand Down Expand Up @@ -76,7 +76,7 @@ index d7ccccdf3f5e2c572efd528a92e240ec6ea60028..51d51638b7220f886c8415581869df87
HURT_BERRY_BUSH(44, LivingEntity.class),
/**
* Fox chews the food in its mouth
@@ -331,7 +355,25 @@ public enum EntityEffect {
@@ -331,7 +355,23 @@ public enum EntityEffect {
* Sniffer must have a target and be in {@link Sniffer.State#SEARCHING} or
* {@link Sniffer.State#DIGGING}
*/
Expand All @@ -96,9 +96,7 @@ index d7ccccdf3f5e2c572efd528a92e240ec6ea60028..51d51638b7220f886c8415581869df87
+ * Does not apply to plain creaking entities as they are not invulnerable like the transient ones spawned by the
+ * creaking heart.
+ */
+ @MinecraftExperimental(MinecraftExperimental.Requires.WINTER_DROP)
+ @org.jetbrains.annotations.ApiStatus.Experimental
+ SHAKE(66, org.bukkit.entity.CreakingTransient.class);
+ SHAKE(66, org.bukkit.entity.Creaking.class);
+ // Paper end - add missing EntityEffect

private final byte data;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,10 +5,10 @@ Subject: [PATCH] API for checking sent chunks


diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
index 71ed0230baf3115a53a8ce8f0a5c72f01954fffc..d4e497961578bb693275cdf95915b60b2cc76eb7 100644
index 79d72a2f6cd85f18c644bd48801fdda86f9d235a..84c494ca81b8f58604b372ac7236147776817a4f 100644
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
@@ -3500,6 +3500,35 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
@@ -3485,6 +3485,35 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
}
// Paper end

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ Subject: [PATCH] Fix CraftWorld#isChunkGenerated
The upstream implementation is returning true for non-full chunks.

diff --git a/src/main/java/org/bukkit/craftbukkit/CraftWorld.java b/src/main/java/org/bukkit/craftbukkit/CraftWorld.java
index ddf6403682025e544ab4060c32ff089ed11ffe0a..57da11c0da7322e74810e7108e9c8000b0c36520 100644
index 7c936f59ad8fc1fa244adcc19c413d6e0e4f7323..a9f7ac8d1f5e184687d53ab3e8b348bb7f4f2ba0 100644
--- a/src/main/java/org/bukkit/craftbukkit/CraftWorld.java
+++ b/src/main/java/org/bukkit/craftbukkit/CraftWorld.java
@@ -398,11 +398,28 @@ public class CraftWorld extends CraftRegionAccessor implements World {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,10 +6,10 @@ Subject: [PATCH] Add startup flag to disable gamerule limits
-DPaper.DisableGameRuleLimits=true will disable gamerule limits

diff --git a/src/main/java/net/minecraft/server/level/ServerLevel.java b/src/main/java/net/minecraft/server/level/ServerLevel.java
index 9928e14a5a42a2f0deba86e9dcb1f6f9f59412ef..c5eed86a8982466fd8302c678f0f041db1b24029 100644
index 5889a47a25abf3494fba74ebb3c5e07a2408f161..e4a50b2f6cdc9daf6a018aaf44bb029c5003fa65 100644
--- a/src/main/java/net/minecraft/server/level/ServerLevel.java
+++ b/src/main/java/net/minecraft/server/level/ServerLevel.java
@@ -2071,13 +2071,21 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe
@@ -2077,13 +2077,21 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe
}

if (this.lastSpawnChunkRadius > 1) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -105,19 +105,19 @@ index 589a8bf75be6ccc59f1e5dd5d8d9afed41c4772d..b24265573fdef5d9a964bcd76146f345
cause = cause.getCause();
}
diff --git a/src/main/java/net/minecraft/server/Main.java b/src/main/java/net/minecraft/server/Main.java
index e114e687f2f4503546687fd6792226a643af8793..90ca25c4aaf92a5639839a7cdaee2ffcdb75efa7 100644
index 42d46c7a7437bea5335a23cbee5708ac57131474..300a044bb0f0e377133f24469cea1a9669de6e58 100644
--- a/src/main/java/net/minecraft/server/Main.java
+++ b/src/main/java/net/minecraft/server/Main.java
@@ -77,6 +77,7 @@ public class Main {

@@ -79,6 +79,7 @@ public class Main {
@SuppressForbidden(reason = "System.out needed before bootstrap") // CraftBukkit - decompile error
@DontObfuscate
public static void main(final OptionSet optionset) { // CraftBukkit - replaces main(String[] astring)
+ io.papermc.paper.util.LogManagerShutdownThread.hook(); // Paper
SharedConstants.tryDetectVersion();
/* CraftBukkit start - Replace everything
OptionParser optionparser = new OptionParser();
diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java
index 9cb435573d0b1bdf5488bd5b9cef5d2aba6a1c2d..4ac8bc8dc326ef12c4ffdfdf8325f3111ca5b665 100644
index 6de6f76e8385c50bd18ef9caaca68a79e1e797ca..8549292b4e96c7b09e2a9707f2d8a75b870ee35b 100644
--- a/src/main/java/net/minecraft/server/MinecraftServer.java
+++ b/src/main/java/net/minecraft/server/MinecraftServer.java
@@ -317,7 +317,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
Expand Down Expand Up @@ -329,10 +329,10 @@ index d6e942aca1bcc769c390504a4119d6619872c4d4..9b706276dc5b5f55b966c5472c6c4e86
}
}
diff --git a/src/main/java/net/minecraft/world/level/Level.java b/src/main/java/net/minecraft/world/level/Level.java
index 061d3e77fe8d9322eb660ac1995e025aba51ae1a..3f69dfe877a6c3a362a28c29f556b7b9b2ad19b0 100644
index f477c5817f022ce7c4ad25e9b827401434bcfff1..d518493ecf3853b9f2aefceb72e1a4d2e9bf1184 100644
--- a/src/main/java/net/minecraft/world/level/Level.java
+++ b/src/main/java/net/minecraft/world/level/Level.java
@@ -1488,6 +1488,7 @@ public abstract class Level implements LevelAccessor, AutoCloseable, ca.spottedl
@@ -1489,6 +1489,7 @@ public abstract class Level implements LevelAccessor, AutoCloseable, ca.spottedl
try {
tickConsumer.accept(entity);
} catch (Throwable throwable) {
Expand All @@ -341,10 +341,10 @@ index 061d3e77fe8d9322eb660ac1995e025aba51ae1a..3f69dfe877a6c3a362a28c29f556b7b9
final String msg = String.format("Entity threw exception at %s:%s,%s,%s", entity.level().getWorld().getName(), entity.getX(), entity.getY(), entity.getZ());
MinecraftServer.LOGGER.error(msg, throwable);
diff --git a/src/main/java/net/minecraft/world/level/chunk/LevelChunk.java b/src/main/java/net/minecraft/world/level/chunk/LevelChunk.java
index 01cfb478764b8deb38be5692390dd9f014b8999f..4640baec5bed6c2d53cc0f8ca1d273cc115abe9b 100644
index 134d63076f231791988e67a5bdf191005112080b..97937e3bd211997f0a0a3e9e671a1c59712d0003 100644
--- a/src/main/java/net/minecraft/world/level/chunk/LevelChunk.java
+++ b/src/main/java/net/minecraft/world/level/chunk/LevelChunk.java
@@ -1078,6 +1078,7 @@ public class LevelChunk extends ChunkAccess implements ca.spottedleaf.moonrise.p
@@ -1083,6 +1083,7 @@ public class LevelChunk extends ChunkAccess implements ca.spottedleaf.moonrise.p

gameprofilerfiller.pop();
} catch (Throwable throwable) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ Subject: [PATCH] Detail more information in watchdog dumps
Feature patch

diff --git a/src/main/java/net/minecraft/network/Connection.java b/src/main/java/net/minecraft/network/Connection.java
index d18af548fa6e979267347443b61efc58b271dfcf..e693a003ea8f022eef8b49e4332025b769333b30 100644
index e300293ba64a8ac54cc9c5348ecc9f3ed2d27e19..3c866432c8a938c677a315612f3e159bda67a2a2 100644
--- a/src/main/java/net/minecraft/network/Connection.java
+++ b/src/main/java/net/minecraft/network/Connection.java
@@ -632,7 +632,13 @@ public class Connection extends SimpleChannelInboundHandler<Packet<?>> {
Expand Down Expand Up @@ -78,10 +78,10 @@ index f7197f1347251a37dd0f6d9ffa2f09bc3a4e1233..1f7f68aad97ee73763c042837f239bdc
});
throw RunningOnDifferentThreadException.RUNNING_ON_DIFFERENT_THREAD;
diff --git a/src/main/java/net/minecraft/server/level/ServerLevel.java b/src/main/java/net/minecraft/server/level/ServerLevel.java
index c5eed86a8982466fd8302c678f0f041db1b24029..2e0dcac7642d899efd60cf70fb0ad0336e1923da 100644
index e4a50b2f6cdc9daf6a018aaf44bb029c5003fa65..abed6e7b92d1472bbbc5bfd60abf4f9052c749c5 100644
--- a/src/main/java/net/minecraft/server/level/ServerLevel.java
+++ b/src/main/java/net/minecraft/server/level/ServerLevel.java
@@ -1253,7 +1253,26 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe
@@ -1254,7 +1254,26 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe

}

Expand All @@ -108,7 +108,7 @@ index c5eed86a8982466fd8302c678f0f041db1b24029..2e0dcac7642d899efd60cf70fb0ad033
// Spigot start
/*if (!org.spigotmc.ActivationRange.checkIfActive(entity)) { // Paper - comment out EAR 2
entity.tickCount++;
@@ -1283,6 +1302,13 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe
@@ -1284,6 +1303,13 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe
this.tickPassenger(entity, entity1, isActive); // Paper - EAR 2
}

Expand All @@ -123,10 +123,10 @@ index c5eed86a8982466fd8302c678f0f041db1b24029..2e0dcac7642d899efd60cf70fb0ad033

private void tickPassenger(Entity vehicle, Entity passenger, boolean isActive) { // Paper - EAR 2
diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java
index b810f887e536af938f978ca2af068e6ae89b5e60..8c62d1aa5c8a062685474dca7e91bf9f8b004ca5 100644
index 717500b8b88f123d6b2d3545d33d5c78a1ef7cc1..d7f2950223533c3cc2d182612d4c485edf3fba2b 100644
--- a/src/main/java/net/minecraft/world/entity/Entity.java
+++ b/src/main/java/net/minecraft/world/entity/Entity.java
@@ -1128,8 +1128,43 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess
@@ -1136,8 +1136,43 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess
return this.onGround;
}

Expand Down Expand Up @@ -170,7 +170,7 @@ index b810f887e536af938f978ca2af068e6ae89b5e60..8c62d1aa5c8a062685474dca7e91bf9f
if (this.noPhysics) {
this.setPos(this.getX() + movement.x, this.getY() + movement.y, this.getZ() + movement.z);
} else {
@@ -1250,6 +1285,13 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess
@@ -1261,6 +1296,13 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess
gameprofilerfiller.pop();
}
}
Expand All @@ -184,7 +184,7 @@ index b810f887e536af938f978ca2af068e6ae89b5e60..8c62d1aa5c8a062685474dca7e91bf9f
}

private void applyMovementEmissionAndPlaySound(Entity.MovementEmission moveEffect, Vec3 movement, BlockPos landingPos, BlockState landingState) {
@@ -4872,7 +4914,9 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess
@@ -4902,7 +4944,9 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess
}

public void setDeltaMovement(Vec3 velocity) {
Expand All @@ -194,7 +194,7 @@ index b810f887e536af938f978ca2af068e6ae89b5e60..8c62d1aa5c8a062685474dca7e91bf9f
}

public void addDeltaMovement(Vec3 velocity) {
@@ -4978,7 +5022,9 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess
@@ -5008,7 +5052,9 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess
}
// Paper end - Fix MC-4
if (this.position.x != x || this.position.y != y || this.position.z != z) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ defaults are only included for certain entites, this allows setting
limits for any entity type.

diff --git a/src/main/java/ca/spottedleaf/moonrise/patches/chunk_system/level/entity/ChunkEntitySlices.java b/src/main/java/ca/spottedleaf/moonrise/patches/chunk_system/level/entity/ChunkEntitySlices.java
index 5ed6599d1f9a2edf8c904f3602b06d26d857600c..b3c993a790fc3fab6a408c731deb297f74c959ce 100644
index 7aea4e343581b977d11af90f9f65eac3532eade1..d21ce54ebb5724c04eadf56a2cde701d5eeb5db2 100644
--- a/src/main/java/ca/spottedleaf/moonrise/patches/chunk_system/level/entity/ChunkEntitySlices.java
+++ b/src/main/java/ca/spottedleaf/moonrise/patches/chunk_system/level/entity/ChunkEntitySlices.java
@@ -104,7 +104,18 @@ public final class ChunkEntitySlices {
Expand All @@ -32,10 +32,10 @@ index 5ed6599d1f9a2edf8c904f3602b06d26d857600c..b3c993a790fc3fab6a408c731deb297f
if (entity.save(compoundTag)) {
entitiesTag.add(compoundTag);
diff --git a/src/main/java/net/minecraft/world/entity/EntityType.java b/src/main/java/net/minecraft/world/entity/EntityType.java
index 629c1316920ad4c111fff489f8c3ea0ed39d0099..c8c2394558952d7ca57d29874485251b8f2b3400 100644
index 0ec3e1837e36d17e9ff33e7d50c66353aa7539db..d23914a3ab3723d532ae867db6b954c843030f75 100644
--- a/src/main/java/net/minecraft/world/entity/EntityType.java
+++ b/src/main/java/net/minecraft/world/entity/EntityType.java
@@ -706,9 +706,20 @@ public class EntityType<T extends Entity> implements FeatureElement, EntityTypeT
@@ -716,9 +716,20 @@ public class EntityType<T extends Entity> implements FeatureElement, EntityTypeT
final Spliterator<? extends Tag> spliterator = entityNbtList.spliterator();

return StreamSupport.stream(new Spliterator<Entity>() {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ Subject: [PATCH] Bundle spark


diff --git a/build.gradle.kts b/build.gradle.kts
index 9e6c2a4630ce75e4115f76b5e7a1e0b50e8b3197..faf3e3fd72e8c915e7a4803dacbe1bb576c6663e 100644
index 2ceee9c2f7a237dac1c2e5c3fcc50a869d93d1ac..092a9ee1e862bde04c2025de6f7e25b6ec13760a 100644
--- a/build.gradle.kts
+++ b/build.gradle.kts
@@ -76,6 +76,10 @@ dependencies {
Expand Down Expand Up @@ -279,7 +279,7 @@ index 6b8ed8a0baaf4a57d20e57cec3400af5561ddd79..48604e7f96adc9e226e034054c5e2bad
}

diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java
index 4ac8bc8dc326ef12c4ffdfdf8325f3111ca5b665..ca70815b73199835b88c9d68c8a01699536d320f 100644
index 8549292b4e96c7b09e2a9707f2d8a75b870ee35b..aa0a693af442a791ad8e5ec5a9e11594e6b42419 100644
--- a/src/main/java/net/minecraft/server/MinecraftServer.java
+++ b/src/main/java/net/minecraft/server/MinecraftServer.java
@@ -764,6 +764,8 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ Subject: [PATCH] Incremental chunk and player saving
Feature patch

diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java
index ca70815b73199835b88c9d68c8a01699536d320f..be6e64d5c858961b19eb7b1b028530c1eb4c68d7 100644
index aa0a693af442a791ad8e5ec5a9e11594e6b42419..0af2e1f951683023124f1733a6079e4eaa5deb48 100644
--- a/src/main/java/net/minecraft/server/MinecraftServer.java
+++ b/src/main/java/net/minecraft/server/MinecraftServer.java
@@ -1007,7 +1007,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
Expand Down Expand Up @@ -51,10 +51,10 @@ index ca70815b73199835b88c9d68c8a01699536d320f..be6e64d5c858961b19eb7b1b028530c1
ProfilerFiller gameprofilerfiller = Profiler.get();

diff --git a/src/main/java/net/minecraft/server/level/ServerLevel.java b/src/main/java/net/minecraft/server/level/ServerLevel.java
index 2e0dcac7642d899efd60cf70fb0ad0336e1923da..b5f0ce0869c0ea6ad478bddddfc463ec42a5bef7 100644
index abed6e7b92d1472bbbc5bfd60abf4f9052c749c5..03ff07e4047fcf5e2cad7be998b76b4fcef6b49a 100644
--- a/src/main/java/net/minecraft/server/level/ServerLevel.java
+++ b/src/main/java/net/minecraft/server/level/ServerLevel.java
@@ -1353,6 +1353,30 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe
@@ -1354,6 +1354,30 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe
return !this.server.isUnderSpawnProtection(this, pos, player) && this.getWorldBorder().isWithinBounds(pos);
}

Expand Down Expand Up @@ -86,10 +86,10 @@ index 2e0dcac7642d899efd60cf70fb0ad0336e1923da..b5f0ce0869c0ea6ad478bddddfc463ec
// Paper start - add close param
this.save(progressListener, flush, savingDisabled, false);
diff --git a/src/main/java/net/minecraft/server/level/ServerPlayer.java b/src/main/java/net/minecraft/server/level/ServerPlayer.java
index 2b6c5b2387b67f25d8877849ccbfaaa77eab51d3..05981a075898794b899f1327bff1e7ca8ef8fc13 100644
index 9b61fb06875c8070dba30ee541f85b4eed589681..c7c637fcaf02bf5a0861c9ffaca2b473fdeceddb 100644
--- a/src/main/java/net/minecraft/server/level/ServerPlayer.java
+++ b/src/main/java/net/minecraft/server/level/ServerPlayer.java
@@ -221,6 +221,7 @@ import org.bukkit.inventory.MainHand;
@@ -220,6 +220,7 @@ import org.bukkit.inventory.MainHand;
public class ServerPlayer extends net.minecraft.world.entity.player.Player implements ca.spottedleaf.moonrise.patches.chunk_system.player.ChunkSystemServerPlayer { // Paper - rewrite chunk system

private static final Logger LOGGER = LogUtils.getLogger();
Expand Down
Loading

0 comments on commit d7d2f88

Please sign in to comment.