Your session log tells me that you took the non-elemental-trap route through the Hedge Maze that took you through the topiary gopher and topiary duck.
You end up in room 9 - Mazel Tov! - having collected a topiary nugget from the room before.
In that (final) room, you need to take the single offered choice to exit the Hedge Maze.
Looking in the DEBUG log, I see this:
Code:
at net.sourceforge.kolmafia.session.SorceressLairManager.hedgeMazeScript(SorceressLairManager.java:1165)
at net.sourceforge.kolmafia.session.SorceressLairManager.hedgeMazeGopherDuckScript(SorceressLairManager.java:847)
which is:
Code:
while ( status.equals( "step4" ) )
{
GenericRequest request = new PlaceRequest( "nstower", "ns_03_hedgemaze" );
RequestThread.postRequest( request );
In other words, you stil have not cleared the maze; you need to take the final choice:
Code:
case 1013: // Mazel Tov!
// Then you both giggle and head through the exit at the same time.
QuestDatabase.setQuestProgress( Quest.FINAL, "step5" );
break;
The rest of the stack trace confuses me.
You submit the PlaceRequest.
KoL redirects (expected, since you have one more choice to take)
GenericRequest call ChoiceManager.handleRedirectedChoiceAdventure
That method submits the request to choice.php
... and KoL redirects to fight.php. Presumably, this is the topary duck.
We automate the fight
When we are done, it wants to "recalculate adjustments" which, since you are out of Ronin, and since you want to retrieve from your Clan Stash, refreshes the stash.
That redirects, since you are stil in a choice.
It automates the choice chain all the way to Mazel Tov!
... which calls api.php, ultimately doing this:
Code:
java.util.ConcurrentModificationException
at java.base/java.util.ArrayList.sort(ArrayList.java:1723)
at java.base/java.util.Collections.sort(Collections.java:179)
at net.java.dev.spellcast.utilities.LockableListModel.sort(LockableListModel.java:163)
at net.java.dev.spellcast.utilities.LockableListModel.sort(LockableListModel.java:155)
at net.sourceforge.kolmafia.persistence.ConcoctionDatabase.resetConcoctionStatGains(ConcoctionDatabase.java:1576)
at net.sourceforge.kolmafia.KoLCharacter.setClassName(KoLCharacter.java:1643)
at net.sourceforge.kolmafia.KoLCharacter.setClassType(KoLCharacter.java:1627)
at net.sourceforge.kolmafia.request.CharPaneRequest.parseStatus(CharPaneRequest.java:1762)
at net.sourceforge.kolmafia.request.ApiRequest.parseStatus(ApiRequest.java:420)
The exception happens while sorting the "usables" list.
I don't understand what else is actively iterating over the usables list while we try to sort it.
But I especially don't understand why it tried to retrieve the stash after the topiary duck, since you were still in a choice/fight/choice chain.
I would have hoped the the fight would return right to SorceressLairManager.hedgeMazeScript(), which would submit place.php, redirect to a choice, and automate the next sequence of choices. All the way to the end, in particular.
This confuses me because I could swear I fixed Stash Retrieval as a result of another bug report (from you?) to not even try to retrieve the stash if you are in a fight/choice chain.
Code:
public static final LockableListModel<AdventureResult> getStash()
{
if ( !ClanManager.isStashRetrieved() && !GenericRequest.abortIfInFightOrChoice( true ) )
{
RequestThread.postRequest( new ClanStashRequest() );
}
return ClanManager.stashContents;
}
Yup.
Pondering.