From 15e249e41e9845240e47b47492bb5c2922d4075e Mon Sep 17 00:00:00 2001 From: LeRatierBretonnien Date: Fri, 7 Jun 2024 11:26:46 +0200 Subject: [PATCH] v12 support --- module/actor-sheet.js | 4 +- module/actor.js | 66 +++--- module/item-sheet.js | 2 +- module/sos-card-deck.js | 24 +- module/sos-combat.js | 4 +- module/sos-dialog-combat-actions.js | 6 +- module/sos-flip-dialog.js | 14 +- module/sos-gm-deck.js | 6 +- module/sos-main.js | 1 + module/sos-utility.js | 338 +++++++++++++-------------- packs/combat-actions/000009.log | 0 packs/combat-actions/000011.ldb | Bin 0 -> 15155 bytes packs/combat-actions/CURRENT | 1 + packs/combat-actions/LOCK | 0 packs/combat-actions/LOG | 13 ++ packs/combat-actions/LOG.old | 5 + packs/combat-actions/MANIFEST-000007 | Bin 0 -> 256 bytes packs/consequences/000009.log | 0 packs/consequences/000011.ldb | Bin 0 -> 7666 bytes packs/consequences/CURRENT | 1 + packs/consequences/LOCK | 0 packs/consequences/LOG | 13 ++ packs/consequences/LOG.old | 5 + packs/consequences/MANIFEST-000007 | Bin 0 -> 255 bytes packs/gears/000009.log | 0 packs/gears/000011.ldb | Bin 0 -> 58930 bytes packs/gears/CURRENT | 1 + packs/gears/LOCK | 0 packs/gears/LOG | 13 ++ packs/gears/LOG.old | 5 + packs/gears/MANIFEST-000007 | Bin 0 -> 260 bytes packs/genelines/000009.log | 0 packs/genelines/000011.ldb | Bin 0 -> 7865 bytes packs/genelines/CURRENT | 1 + packs/genelines/LOCK | 0 packs/genelines/LOG | 13 ++ packs/genelines/LOG.old | 5 + packs/genelines/MANIFEST-000007 | Bin 0 -> 255 bytes packs/injuries/000009.log | 0 packs/injuries/000011.ldb | Bin 0 -> 14817 bytes packs/injuries/CURRENT | 1 + packs/injuries/LOCK | 0 packs/injuries/LOG | 13 ++ packs/injuries/LOG.old | 5 + packs/injuries/MANIFEST-000007 | Bin 0 -> 256 bytes packs/languages/000009.log | 0 packs/languages/000011.ldb | Bin 0 -> 1725 bytes packs/languages/CURRENT | 1 + packs/languages/LOCK | 0 packs/languages/LOG | 13 ++ packs/languages/LOG.old | 5 + packs/languages/MANIFEST-000007 | Bin 0 -> 255 bytes packs/skills/000009.log | 0 packs/skills/000011.ldb | Bin 0 -> 11402 bytes packs/skills/CURRENT | 1 + packs/skills/LOCK | 0 packs/skills/LOG | 13 ++ packs/skills/LOG.old | 5 + packs/skills/MANIFEST-000007 | Bin 0 -> 255 bytes packs/subcultures/000009.log | 0 packs/subcultures/000011.ldb | Bin 0 -> 4158 bytes packs/subcultures/CURRENT | 1 + packs/subcultures/LOCK | 0 packs/subcultures/LOG | 13 ++ packs/subcultures/LOG.old | 5 + packs/subcultures/MANIFEST-000007 | Bin 0 -> 255 bytes packs/weaknesses/000009.log | 0 packs/weaknesses/000011.ldb | Bin 0 -> 837 bytes packs/weaknesses/CURRENT | 1 + packs/weaknesses/LOCK | 0 packs/weaknesses/LOG | 13 ++ packs/weaknesses/LOG.old | 5 + packs/weaknesses/MANIFEST-000007 | Bin 0 -> 255 bytes system.json | 15 +- 74 files changed, 410 insertions(+), 241 deletions(-) create mode 100644 packs/combat-actions/000009.log create mode 100644 packs/combat-actions/000011.ldb create mode 100644 packs/combat-actions/CURRENT create mode 100644 packs/combat-actions/LOCK create mode 100644 packs/combat-actions/LOG create mode 100644 packs/combat-actions/LOG.old create mode 100644 packs/combat-actions/MANIFEST-000007 create mode 100644 packs/consequences/000009.log create mode 100644 packs/consequences/000011.ldb create mode 100644 packs/consequences/CURRENT create mode 100644 packs/consequences/LOCK create mode 100644 packs/consequences/LOG create mode 100644 packs/consequences/LOG.old create mode 100644 packs/consequences/MANIFEST-000007 create mode 100644 packs/gears/000009.log create mode 100644 packs/gears/000011.ldb create mode 100644 packs/gears/CURRENT create mode 100644 packs/gears/LOCK create mode 100644 packs/gears/LOG create mode 100644 packs/gears/LOG.old create mode 100644 packs/gears/MANIFEST-000007 create mode 100644 packs/genelines/000009.log create mode 100644 packs/genelines/000011.ldb create mode 100644 packs/genelines/CURRENT create mode 100644 packs/genelines/LOCK create mode 100644 packs/genelines/LOG create mode 100644 packs/genelines/LOG.old create mode 100644 packs/genelines/MANIFEST-000007 create mode 100644 packs/injuries/000009.log create mode 100644 packs/injuries/000011.ldb create mode 100644 packs/injuries/CURRENT create mode 100644 packs/injuries/LOCK create mode 100644 packs/injuries/LOG create mode 100644 packs/injuries/LOG.old create mode 100644 packs/injuries/MANIFEST-000007 create mode 100644 packs/languages/000009.log create mode 100644 packs/languages/000011.ldb create mode 100644 packs/languages/CURRENT create mode 100644 packs/languages/LOCK create mode 100644 packs/languages/LOG create mode 100644 packs/languages/LOG.old create mode 100644 packs/languages/MANIFEST-000007 create mode 100644 packs/skills/000009.log create mode 100644 packs/skills/000011.ldb create mode 100644 packs/skills/CURRENT create mode 100644 packs/skills/LOCK create mode 100644 packs/skills/LOG create mode 100644 packs/skills/LOG.old create mode 100644 packs/skills/MANIFEST-000007 create mode 100644 packs/subcultures/000009.log create mode 100644 packs/subcultures/000011.ldb create mode 100644 packs/subcultures/CURRENT create mode 100644 packs/subcultures/LOCK create mode 100644 packs/subcultures/LOG create mode 100644 packs/subcultures/LOG.old create mode 100644 packs/subcultures/MANIFEST-000007 create mode 100644 packs/weaknesses/000009.log create mode 100644 packs/weaknesses/000011.ldb create mode 100644 packs/weaknesses/CURRENT create mode 100644 packs/weaknesses/LOCK create mode 100644 packs/weaknesses/LOG create mode 100644 packs/weaknesses/LOG.old create mode 100644 packs/weaknesses/MANIFEST-000007 diff --git a/module/actor-sheet.js b/module/actor-sheet.js index 92958ef..a5162e2 100644 --- a/module/actor-sheet.js +++ b/module/actor-sheet.js @@ -10,7 +10,7 @@ export class SoSActorSheet extends ActorSheet { /** @override */ static get defaultOptions() { - return mergeObject(super.defaultOptions, { + return foundry.utils.mergeObject(super.defaultOptions, { classes: ["sos", "sheet", "actor"], template: "systems/foundryvtt-shadows-over-sol/templates/actor-sheet.html", width: 640, @@ -81,7 +81,7 @@ export class SoSActorSheet extends ActorSheet { formData.weapons = this.actor.items.filter( item => item.type == 'weapon'); formData.armors = this.actor.items.filter( item => item.type == 'armor'); formData.totalEncumbrance = SoSUtility.computeEncumbrance(this.actor.items); - formData.wounds = duplicate(this.actor.system.wounds); + formData.wounds = foundry.utils.duplicate(this.actor.system.wounds); formData.isGM = game.user.isGM; formData.currentWounds = this.actor.computeCurrentWounds(); formData.totalWounds = this.actor.system.scores.wound.value; diff --git a/module/actor.js b/module/actor.js index 770da99..4b379aa 100644 --- a/module/actor.js +++ b/module/actor.js @@ -61,24 +61,24 @@ export class SoSActor extends Actor { /* -------------------------------------------- */ checkDeck() { - if ( !this.cardDeck && this.hasPlayerOwner ) { - this.cardDeck = new SoSCardDeck(); - this.cardDeck.initCardDeck( this, this.system.internals.deck ); + if ( !this.system.cardDeck && this.hasPlayerOwner ) { + this.system.cardDeck = new SoSCardDeck(); + this.system.cardDeck.initCardDeck( this, this.system.internals.deck ); } if ( !this.hasPlayerOwner ) { - this.cardDeck = game.system.sos.gmDeck.GMdeck; - console.log("DECK : ", this.cardDeck); + this.system.cardDeck = game.system.sos.gmDeck.GMdeck; + console.log("DECK : ", this.system.cardDeck); } } /* -------------------------------------------- */ getDeckSize() { - return this.cardDeck.getDeckSize(); + return this.system.cardDeck.getDeckSize(); } /* -------------------------------------------- */ getEdgesCard( ) { - let edgesCard = duplicate(this.cardDeck.data.cardEdge); + let edgesCard = foundry.utils.duplicate(this.system.cardDeck.data.cardEdge); for (let edge of edgesCard) { edge.path = `systems/foundryvtt-shadows-over-sol/img/cards/${edge.cardName}.webp` } @@ -86,36 +86,36 @@ export class SoSActor extends Actor { } /* -------------------------------------------- */ resetDeckFull( ) { - this.cardDeck.shuffleDeck(); - this.cardDeck.drawEdge( this.system.scores.edge.value ); + this.system.cardDeck.shuffleDeck(); + this.system.cardDeck.drawEdge( this.system.scores.edge.value ); this.saveDeck(); } /* -------------------------------------------- */ drawNewEdge( ) { - this.cardDeck.drawEdge( 1 ); + this.system.cardDeck.drawEdge( 1 ); this.saveDeck(); } /* -------------------------------------------- */ discardEdge( cardName ) { - this.cardDeck.discardEdge( cardName ); + this.system.cardDeck.discardEdge( cardName ); this.saveDeck(); } /* -------------------------------------------- */ resetDeck( ) { - this.cardDeck.resetDeck(); + this.system.cardDeck.resetDeck(); this.saveDeck(); } /* -------------------------------------------- */ saveDeck( ) { - let deck = { deck: duplicate(this.cardDeck.data.deck), - discard: duplicate(this.cardDeck.data.discard), - cardEdge: duplicate(this.cardDeck.data.cardEdge) + let deck = { deck: foundry.utils.duplicate(this.system.cardDeck.data.deck), + discard: foundry.utils.duplicate(this.system.cardDeck.data.discard), + cardEdge: foundry.utils.duplicate(this.system.cardDeck.data.cardEdge) } if ( this.hasPlayerOwner ) { - this.update( { 'data.internals.deck': deck }); + this.update( { 'system.internals.deck': deck }); } else { game.settings.set("foundryvtt-shadows-over-sol", "gmDeck", deck ); } @@ -213,7 +213,7 @@ export class SoSActor extends Actor { /* -------------------------------------------- */ async updateWound(woundName, value) { - let wounds = duplicate(this.system.wounds) + let wounds = foundry.utils.duplicate(this.system.wounds) wounds[woundName] = value; await this.update( { 'system.wounds': wounds } ); } @@ -246,13 +246,13 @@ export class SoSActor extends Actor { let flipData = { mode: 'stat', - stat: duplicate(this.system.stats[statKey]), + stat: foundry.utils.duplicate(this.system.stats[statKey]), actor: this, modifierList: SoSUtility.fillRange(-10, +10), tnList: SoSUtility.fillRange(6, 20), - consequencesList: duplicate( this.getApplicableConsequences() ), + consequencesList: foundry.utils.duplicate( this.getApplicableConsequences() ), weaknessList: this.items.filter( item => item.type == 'weakness' ), - wounds: duplicate( this.system.wounds), + wounds: foundry.utils.duplicate( this.system.wounds), malusConsequence: 0, bonusConsequence: 0, woundMalus: 0 @@ -265,12 +265,12 @@ export class SoSActor extends Actor { async rollSkill( skill ) { let flipData = { mode: 'skill', - statList: duplicate(this.system.stats), + statList: foundry.utils.duplicate(this.system.stats), selectedStat: 'strength', - consequencesList: duplicate( this.getApplicableConsequences() ), - wounds: duplicate( this.system.wounds), + consequencesList: foundry.utils.duplicate( this.getApplicableConsequences() ), + wounds: foundry.utils.duplicate( this.system.wounds), skillExperienceList: this.getSkillExperience( skill.name), - skill: duplicate(skill), + skill: foundry.utils.duplicate(skill), actor: this, modifierList: SoSUtility.fillRange(-10, +10), tnList: SoSUtility.fillRange(6, 20), @@ -301,14 +301,14 @@ export class SoSActor extends Actor { let flipData = { mode: 'weapon', - weapon: duplicate(weapon), - statList: duplicate(this.system.stats), + weapon: foundry.utils.duplicate(weapon), + statList: foundry.utils.duplicate(this.system.stats), target: target, selectedStat: selectedStatName, - consequencesList: duplicate( this.getApplicableConsequences() ), + consequencesList: foundry.utils.duplicate( this.getApplicableConsequences() ), skillExperienceList: this.getSkillExperience( skill.name), - wounds: duplicate( this.system.wounds), - skill: duplicate(skill), + wounds: foundry.utils.duplicate( this.system.wounds), + skill: foundry.utils.duplicate(skill), actor: this, modifierList: SoSUtility.fillRange(-10, +10), tnList: SoSUtility.fillRange(6, 20), @@ -349,14 +349,14 @@ export class SoSActor extends Actor { async applyConsequenceWound( severity, consequenceName) { if ( severity == 'none') return; // Nothing ! - let wounds = duplicate(this.system.wounds); + let wounds = foundry.utils.duplicate(this.system.wounds); if (severity == 'light' ) wounds.light += 1; if (severity == 'moderate' ) wounds.moderate += 1; if (severity == 'severe' ) wounds.severe += 1; if (severity == 'critical' ) wounds.critical += 1; let sumWound = wounds.light + (wounds.moderate*2) + (wounds.severe*3) + (wounds.critical*4); - let currentWounds = duplicate(this.system.scores.currentwounds); + let currentWounds = foundry.utils.duplicate(this.system.scores.currentwounds); currentWounds.value = sumWound; await this.update( { 'data.scores.currentwounds': currentWounds, 'data.wounds': wounds } ); @@ -403,7 +403,7 @@ export class SoSActor extends Actor { return; } - let wounds = duplicate(this.system.wounds); + let wounds = foundry.utils.duplicate(this.system.wounds); for (let wound of flipData.woundsList ) { if (wound == 'L' ) wounds.light += 1; if (wound == 'M' ) wounds.moderate += 1; @@ -412,7 +412,7 @@ export class SoSActor extends Actor { } // Compute total let sumWound = wounds.light + (wounds.moderate*2) + (wounds.severe*3) + (wounds.critical*4); - let currentWounds = duplicate(this.system.scores.currentwounds); + let currentWounds = foundry.utils.duplicate(this.system.scores.currentwounds); currentWounds.value = sumWound; if ( sumWound >= this.system.scores.wound.value) { let bleeding = this.items.find( item => item.type == 'consequence' && item.name == 'Bleeding'); diff --git a/module/item-sheet.js b/module/item-sheet.js index 841563e..c70f5ac 100644 --- a/module/item-sheet.js +++ b/module/item-sheet.js @@ -8,7 +8,7 @@ export class SoSItemSheet extends ItemSheet { /** @override */ static get defaultOptions() { - return mergeObject(super.defaultOptions, { + return foundry.utils.mergeObject(super.defaultOptions, { classes: ["foundryvtt-shadows-over-sol", "sheet", "item"], template: "systems/foundryvtt-shadows-over-sol/templates/item-sheet.html", width: 550, diff --git a/module/sos-card-deck.js b/module/sos-card-deck.js index 1bd8fea..833d378 100644 --- a/module/sos-card-deck.js +++ b/module/sos-card-deck.js @@ -8,7 +8,7 @@ const IDX2CARDFAMILY = ['c', 'd', 'h', 's']; export class SoSCardDeck { /* -------------------------------------------- */ - initCardDeck(actor, savedDeck = undefined ) { + async initCardDeck(actor, savedDeck = undefined ) { this.data = {}; @@ -18,27 +18,28 @@ export class SoSCardDeck { this.data.cardEdge = []; if ( savedDeck.deck && savedDeck.deck.length > 0 ) { - this.data.deck = duplicate(savedDeck.deck); + this.data.deck = foundry.utils.duplicate(savedDeck.deck); } if ( savedDeck.discard && savedDeck.discard.length > 0 ) { - this.data.discard = duplicate(savedDeck.discard); + this.data.discard = foundry.utils.duplicate(savedDeck.discard); } if ( savedDeck.cardEdge && savedDeck.cardEdge.length > 0 ) { - this.data.cardEdge = duplicate(savedDeck.cardEdge); + this.data.cardEdge = foundry.utils.duplicate(savedDeck.cardEdge); } this.data.actor = actor; if ( this.data.deck.length == 0 && this.data.discard.length == 0) { - this.shuffleDeck(); + await this.shuffleDeck(); } } /* -------------------------------------------- */ - shuffleDeck() { + async shuffleDeck() { this.cleanCardList(); // Randomize deck while (this.data.deck.length != NB_POKER_CARD) { - let idx = new Roll("1d54").roll( {async:false} ).total; + let roll = await new Roll("1d54").roll(); + let idx = roll.total; if (!this.data.cardState[idx - 1]) { if (idx == 53) { // Red Joker this.data.deck.push( { cardName: 'jr' } ); @@ -57,8 +58,8 @@ export class SoSCardDeck { } /* -------------------------------------------- */ - resetDeck() { - let newdeck = duplicate(this.data.deck).concat( duplicate (this.data.discard) ) + async resetDeck() { + let newdeck = foundry.utils.duplicate(this.data.deck).concat( foundry.utils.duplicate (this.data.discard) ) this.data.discard = [] // Reinit discard pile this.data.deck = [] let decklen = newdeck.length @@ -68,7 +69,8 @@ export class SoSCardDeck { } // Randomize deck while (this.data.deck.length != decklen) { - let idx = new Roll("1d"+decklen).roll({async : false}).total + let roll = await new Roll("1d"+decklen).roll() + let idx = roll.total //console.log("Deck stuff", this.data.deck.length, decklen, idx) if (!cardState[idx-1]) { this.data.deck.push( newdeck[idx-1] ) @@ -104,7 +106,7 @@ export class SoSCardDeck { /* -------------------------------------------- */ getDeckSize() { - return this.data.deck.length; + return this.data.deck.length; } /* -------------------------------------------- */ diff --git a/module/sos-combat.js b/module/sos-combat.js index 47ae6e6..f657486 100644 --- a/module/sos-combat.js +++ b/module/sos-combat.js @@ -14,7 +14,7 @@ export class SoSCombat extends Combat { this.phaseSetup = {}; // Reset each new round/update for (let combatant of this.combatants) { this.setInitiative(combatant.id, -1); // Reset init - let uniq = randomID(16) + let uniq = foundry.utils.randomID(16) const name = combatant.actor ? combatant.actor.name : combatant.name; if (combatant.players && combatant.players[0] ) { // A player controls this combatant -> message ! @@ -80,7 +80,7 @@ export class SoSCombat extends Combat { // Now push specific messages for (let action of actionList) { - let uniq = randomID(16); + let uniq = foundry.utils.randomID(16); action.uniqId = uniq; // Easy tracking with chat messages const name = action.combatant.actor ? action.combatant.actor.name : action.combatant.name; if (action.combatant.players[0]) { diff --git a/module/sos-dialog-combat-actions.js b/module/sos-dialog-combat-actions.js index 823e539..e39e49e 100644 --- a/module/sos-dialog-combat-actions.js +++ b/module/sos-dialog-combat-actions.js @@ -53,11 +53,11 @@ export class SoSDialogCombatActions extends Dialog { super.close(); let action3Index = $('#action3').val(); - let action3 = duplicate(this.combatActions.actionsList[action3Index]); + let action3 = foundry.utils.duplicate(this.combatActions.actionsList[action3Index]); let action2Index = $('#action2').val(); - let action2 = duplicate(this.combatActions.actionsList[action2Index]); + let action2 = foundry.utils.duplicate(this.combatActions.actionsList[action2Index]); let action1Index = $('#action1').val(); - let action1 = duplicate(this.combatActions.actionsList[action1Index]); + let action1 = foundry.utils.duplicate(this.combatActions.actionsList[action1Index]); let combatant3Id = $('#combatant3').val(); let combatant2Id = $('#combatant2').val(); diff --git a/module/sos-flip-dialog.js b/module/sos-flip-dialog.js index ef6515b..19d2951 100644 --- a/module/sos-flip-dialog.js +++ b/module/sos-flip-dialog.js @@ -29,7 +29,7 @@ export class SoSFlipDialog extends Dialog { let scoreBase = 0; if ( this.flipData.mode == 'skill' || this.flipData.mode == 'weapon' ) { let statKey = $('#statSelect').val(); - this.flipData.stat = duplicate( this.flipData.statList[ statKey ] ); + this.flipData.stat = foundry.utils.duplicate( this.flipData.statList[ statKey ] ); scoreBase = Math.floor(this.flipData.statList[ statKey ].value / 2) + this.flipData.skill.system.value } else { //Stat mode let statKey = $('#statSelect').val(); @@ -52,10 +52,10 @@ export class SoSFlipDialog extends Dialog { async updateFlip( flipData ) { //console.log("UPDATE !!!", flipData); $('.view-deck').remove(); - $("#view-deck").append(await flipData.actor.cardDeck.getDeckHTML()); + $("#view-deck").append(await flipData.actor.system.cardDeck.getDeckHTML()); $('.view-edge').remove(); - $("#view-edge").append(await flipData.actor.cardDeck.getEdgeHTMLForFlip()); + $("#view-edge").append(await flipData.actor.system.cardDeck.getEdgeHTMLForFlip()); this.updateScoreBase(); @@ -67,10 +67,10 @@ export class SoSFlipDialog extends Dialog { flipData.edgeLuck = $('#edge-luck').is(":checked"); flipData.cardOrigin = "Edge"; if ( flipData.mode == 'skill' || flipData.mode == 'weapon') { - flipData.stat = duplicate( flipData.statList[ $('#statSelect').val() ] ); + flipData.stat = foundry.utils.duplicate( flipData.statList[ $('#statSelect').val() ] ); } console.log("CLICK:", flipData); - this.flipData.actor.cardDeck.doFlipFromDeckOrEdge(flipData); + this.flipData.actor.system.cardDeck.doFlipFromDeckOrEdge(flipData); this.onFlipClose(); }); @@ -161,11 +161,11 @@ export class SoSFlipDialog extends Dialog { flipData.modifier = html.find('#modifier').val(); if ( flipData.mode == 'skill' || flipData.mode == 'weapon') { let statKey = $('#statSelect').val(); - flipData.stat = duplicate( flipData.statList[ statKey ] ); + flipData.stat = foundry.utils.duplicate( flipData.statList[ statKey ] ); } flipData.cardOrigin = "Deck"; flipData.tn = (flipData.target) ? flipData.target.actor.system.scores.defense.value : $('#tn').val(); - dialog.flipData.actor.cardDeck.doFlipFromDeckOrEdge(flipData); + dialog.flipData.actor.system.cardDeck.doFlipFromDeckOrEdge(flipData); dialog.onFlipClose(); }); diff --git a/module/sos-gm-deck.js b/module/sos-gm-deck.js index 915a210..3f472fd 100644 --- a/module/sos-gm-deck.js +++ b/module/sos-gm-deck.js @@ -35,9 +35,9 @@ export class SoSGMDeck extends Dialog { /* -------------------------------------------- */ saveDeck( ) { let deck = { - deck: duplicate(this.GMdeck.data.deck), - discard: duplicate(this.GMdeck.data.discard), - cardEdge: duplicate(this.GMdeck.data.cardEdge) + deck: foundry.utils.duplicate(this.GMdeck.data.deck), + discard: foundry.utils.duplicate(this.GMdeck.data.discard), + cardEdge: foundry.utils.duplicate(this.GMdeck.data.cardEdge) } game.settings.set("foundryvtt-shadows-over-sol", "gmDeck", deck ); } diff --git a/module/sos-main.js b/module/sos-main.js index 309efab..8b46c48 100644 --- a/module/sos-main.js +++ b/module/sos-main.js @@ -104,6 +104,7 @@ Hooks.once("ready", function () { }); } ClassCounter.registerUsageCount() + SoSUtility.ready() welcomeMessage(); diff --git a/module/sos-utility.js b/module/sos-utility.js index 243c8bb..22d2a98 100644 --- a/module/sos-utility.js +++ b/module/sos-utility.js @@ -1,18 +1,18 @@ -/* -------------------------------------------- */ +/* -------------------------------------------- */ import { SoSCombat } from "./sos-combat.js"; import { SoSDialogCombatActions } from "./sos-dialog-combat-actions.js"; -/* -------------------------------------------- */ -const severity2malus = { "none": 0, "light": -1, "moderate": -2, "severe": -3, "critical": -4}; -/* -------------------------------------------- */ -const severity2bonus = { "none": 0, "light": 1, "moderate": 2, "severe": 3, "critical": 4}; +/* -------------------------------------------- */ +const severity2malus = { "none": 0, "light": -1, "moderate": -2, "severe": -3, "critical": -4 }; +/* -------------------------------------------- */ +const severity2bonus = { "none": 0, "light": 1, "moderate": 2, "severe": 3, "critical": 4 }; -/* -------------------------------------------- */ -export class SoSUtility { - - /* -------------------------------------------- */ +/* -------------------------------------------- */ +export class SoSUtility { + + /* -------------------------------------------- */ static async preloadHandlebarsTemplates() { - + const templatePaths = [ 'systems/foundryvtt-shadows-over-sol/templates/actor-sheet.html', 'systems/foundryvtt-shadows-over-sol/templates/editor-notes-gm.html', @@ -27,31 +27,41 @@ export class SoSUtility { 'systems/foundryvtt-shadows-over-sol/templates/dialog-flip.html' ] - return loadTemplates(templatePaths); + return loadTemplates(templatePaths); } /* -------------------------------------------- */ - static fillRange (start, end) { + static ready() { + Handlebars.registerHelper('select', function (selected, options) { + const escapedValue = RegExp.escape(Handlebars.escapeExpression(selected)); + const rgx = new RegExp(' value=[\"\']' + escapedValue + '[\"\']'); + const html = options.fn(this); + return html.replace(rgx, "$& selected"); + }); + } + + /* -------------------------------------------- */ + static fillRange(start, end) { return Array(end - start + 1).fill().map((item, index) => start + index); } - - /* -------------------------------------------- */ - static onSocketMesssage( msg ) { - if( !game.user.isGM ) return; // Only GM - if (msg.name == 'msg_declare_actions' ) { - let combat = game.combats.get( msg.data.combatId); // Get the associated combat - combat.setupActorActions( msg.data ); + /* -------------------------------------------- */ + static onSocketMesssage(msg) { + if (!game.user.isGM) return; // Only GM + + if (msg.name == 'msg_declare_actions') { + let combat = game.combats.get(msg.data.combatId); // Get the associated combat + combat.setupActorActions(msg.data); } else if (msg.name == 'msg_close_action') { - game.combat.closeAction( msg.data.uniqId ); + game.combat.closeAction(msg.data.uniqId); } else if (msg.name == 'msg_request_defense') { - SoSUtility.applyDamage( msg.data ); + SoSUtility.applyDamage(msg.data); } else if (msg.name == 'msg_reaction_cover') { - SoSUtility.reactionCover( msg.data.uniqId ); + SoSUtility.reactionCover(msg.data.uniqId); } else if (msg.name == 'msg_reaction_melee') { - SoSUtility.reactionMelee( msg.data.uniqId ); + SoSUtility.reactionMelee(msg.data.uniqId); } else if (msg.name == 'msg_reaction_hit') { - SoSUtility.reactionHit( msg.data.uniqId ); + SoSUtility.reactionHit(msg.data.uniqId); } } @@ -60,13 +70,13 @@ export class SoSUtility { const pack = game.packs.get(compendium); return await pack?.getDocuments() ?? []; } - + /* -------------------------------------------- */ static async loadCompendium(compendium, filter = item => true) { let compendiumData = await SoSUtility.loadCompendiumData(compendium); return compendiumData.filter(filter); } - + /* -------------------------------------------- */ static async loadCompendiumNames(compendium) { const pack = game.packs.get(compendium); @@ -74,38 +84,21 @@ export class SoSUtility { await pack.getIndex().then(index => competences = index); return competences; } - - /* -------------------------------------------- */ - /*static async loadCompendium(compendium, filter = item => true) { - let compendiumItems = await SoSUtility.loadCompendiumNames(compendium); - const pack = game.packs.get(compendium); - let list = []; - for (let compendiumItem of compendiumItems) { - await pack.getEntity(compendiumItem.id).then(it => { - const item = it.data; - if (filter(item)) { - list.push(item); - } - }); - }; - return list; - }*/ - /* -------------------------------------------- */ static updateCombat(combat, round, diff, id) { combat.requestActions(); } /* -------------------------------------------- */ - static async openDeclareActions( event) { + static async openDeclareActions(event) { event.preventDefault(); let round = event.currentTarget.attributes['data-round'].value; let combatantId = event.currentTarget.attributes['data-combatant-id'].value; let combatId = event.currentTarget.attributes['data-combat-id'].value; let uniqId = event.currentTarget.attributes['data-uniq-id'].value; - let d = await SoSDialogCombatActions.create( combatId, combatantId, round, uniqId ); - d.render(true); + let d = await SoSDialogCombatActions.create(combatId, combatantId, round, uniqId); + d.render(true); } /* -------------------------------------------- */ @@ -116,13 +109,13 @@ export class SoSUtility { static getConsequenceBonus(severity) { return severity2bonus[severity] ?? 0; } - + /* -------------------------------------------- */ - static computeEncumbrance( items) { - let trappings = items.filter( item => item.type == 'gear' || item.type == 'armor' || item.type == 'weapon' ); + static computeEncumbrance(items) { + let trappings = items.filter(item => item.type == 'gear' || item.type == 'armor' || item.type == 'weapon'); let sumEnc = 0; for (let object of trappings) { - if ( (!object.system.worn) && (!object.system.neg) && (!object.system.software) && (!object.system.implant) && (!object.system.containerid || object.system.containerid == "") ) { + if ((!object.system.worn) && (!object.system.neg) && (!object.system.software) && (!object.system.implant) && (!object.system.containerid || object.system.containerid == "")) { sumEnc += (object.big > 0) ? object.big : 1; } } @@ -133,48 +126,49 @@ export class SoSUtility { static closeAction(event) { let uniqId = event.currentTarget.attributes['data-uniq-id'].value; - if ( game.user.isGM ) { - game.combat.closeAction( uniqId ); + if (game.user.isGM) { + game.combat.closeAction(uniqId); } else { game.socket.emit("system.foundryvtt-shadows-over-sol", { - name: "msg_close_action", data: { uniqId: uniqId} } ); + name: "msg_close_action", data: { uniqId: uniqId } + }); } } /* -------------------------------------------- */ static async registerChatCallbacks(html) { html.on("click", '#button-declare-actions', event => { - SoSUtility.openDeclareActions( event ); + SoSUtility.openDeclareActions(event); }); html.on("click", '#button-end-action', event => { - SoSUtility.closeAction( event ); - }); + SoSUtility.closeAction(event); + }); html.on("click", '#button-reaction-cover', event => { let uniqId = event.currentTarget.attributes['data-uniq-id'].value; - if ( game.user.isGM ) { - SoSUtility.reactionCover( uniqId ); + if (game.user.isGM) { + SoSUtility.reactionCover(uniqId); } else { - game.socket.emit("system.foundryvtt-shadows-over-sol", { name: "msg_reaction_cover", data: { uniqId: uniqId} } ); + game.socket.emit("system.foundryvtt-shadows-over-sol", { name: "msg_reaction_cover", data: { uniqId: uniqId } }); } - }); + }); html.on("click", '#button-reaction-melee', event => { let uniqId = event.currentTarget.attributes['data-uniq-id'].value; - if ( game.user.isGM ) { - SoSUtility.reactionMelee( uniqId ); + if (game.user.isGM) { + SoSUtility.reactionMelee(uniqId); } else { - game.socket.emit("system.foundryvtt-shadows-over-sol", { name: "msg_reaction_melee", data: { uniqId: uniqId} } ); + game.socket.emit("system.foundryvtt-shadows-over-sol", { name: "msg_reaction_melee", data: { uniqId: uniqId } }); } - }); + }); html.on("click", '#button-reaction-hit', event => { let uniqId = event.currentTarget.attributes['data-uniq-id'].value; - if ( game.user.isGM ) { - SoSUtility.reactionHit( uniqId ); + if (game.user.isGM) { + SoSUtility.reactionHit(uniqId); } else { - game.socket.emit("system.foundryvtt-shadows-over-sol", { name: "msg_reaction_hit", data: { uniqId: uniqId} } ); + game.socket.emit("system.foundryvtt-shadows-over-sol", { name: "msg_reaction_hit", data: { uniqId: uniqId } }); } - }); + }); } /* -------------------------------------------- */ @@ -188,46 +182,46 @@ export class SoSUtility { } /* -------------------------------------------- */ - static increaseConsequenceSeverity( severity ) { - if ( severity == 'none') return 'light'; - if ( severity == 'light') return 'moderate'; - if ( severity == 'moderate') return 'severe'; - if ( severity == 'severe') return 'critical'; + static increaseConsequenceSeverity(severity) { + if (severity == 'none') return 'light'; + if (severity == 'light') return 'moderate'; + if (severity == 'moderate') return 'severe'; + if (severity == 'severe') return 'critical'; return 'critical'; } /* -------------------------------------------- */ - static getConsequenceSeverityLevel( severity) { - if ( severity == 'none') return 0; - if ( severity == 'light') return 1; - if ( severity == 'moderate') return 2; - if ( severity == 'severe') return 3; - if ( severity == 'critical') return 4; + static getConsequenceSeverityLevel(severity) { + if (severity == 'none') return 0; + if (severity == 'light') return 1; + if (severity == 'moderate') return 2; + if (severity == 'severe') return 3; + if (severity == 'critical') return 4; return 0; } - + /* -------------------------------------------- */ - static increaseSeverity( severity ) { - if ( severity == 'L') return 'M'; - if ( severity == 'M') return 'S'; - if ( severity == 'S') return 'C'; - if ( severity == 'C') return 'F'; + static increaseSeverity(severity) { + if (severity == 'L') return 'M'; + if (severity == 'M') return 'S'; + if (severity == 'S') return 'C'; + if (severity == 'C') return 'F'; } /* -------------------------------------------- */ - static decreaseSeverity( severity ) { - if ( severity == 'C') return 'S'; - if ( severity == 'S') return 'M'; - if ( severity == 'M') return 'L'; - if ( severity == 'L') return 'N'; + static decreaseSeverity(severity) { + if (severity == 'C') return 'S'; + if (severity == 'S') return 'M'; + if (severity == 'M') return 'L'; + if (severity == 'L') return 'N'; } /* -------------------------------------------- */ - static getSeverityLevel( severity) { - if ( severity == 'C') return 4; - if ( severity == 'S') return 3; - if ( severity == 'M') return 2; - if ( severity == 'L') return 1; + static getSeverityLevel(severity) { + if (severity == 'C') return 4; + if (severity == 'S') return 3; + if (severity == 'M') return 2; + if (severity == 'L') return 1; return 0; } @@ -238,53 +232,53 @@ export class SoSUtility { let msgTxt = "

Are you sure to delete this item ?"; let buttons = { delete: { - icon: '', - label: "Yes, delete it", - callback: () => { - console.log("Delete : ", itemId); - actorSheet.actor.deleteEmbeddedDocuments("Item", [itemId]); - li.slideUp(200, () => actorSheet.render(false)); - } - }, - cancel: { - icon: '', - label: "Cancel" + icon: '', + label: "Yes, delete it", + callback: () => { + console.log("Delete : ", itemId); + actorSheet.actor.deleteEmbeddedDocuments("Item", [itemId]); + li.slideUp(200, () => actorSheet.render(false)); } + }, + cancel: { + icon: '', + label: "Cancel" } - msgTxt += "

"; - let d = new Dialog({ - title: "Confirm deletion", - content: msgTxt, - buttons: buttons, - default: "cancel" - }); - d.render(true); } - + msgTxt += "

"; + let d = new Dialog({ + title: "Confirm deletion", + content: msgTxt, + buttons: buttons, + default: "cancel" + }); + d.render(true); + } + /* -------------------------------------------- */ - static async applyDamage( flipData ) { + static async applyDamage(flipData) { if (!this.registry) this.registry = {}; - if ( flipData.isReaction) { // Check again resut in case of reaction ! + if (flipData.isReaction) { // Check again resut in case of reaction ! flipData.magnitude = flipData.finalScore - flipData.tn; // Update magnitude - if ( flipData.magnitude < 0 ) { - let html = await renderTemplate('systems/foundryvtt-shadows-over-sol/templates/chat-reaction-result.html', flipData ); - ChatMessage.create( { content: html }); + if (flipData.magnitude < 0) { + let html = await renderTemplate('systems/foundryvtt-shadows-over-sol/templates/chat-reaction-result.html', flipData); + ChatMessage.create({ content: html }); return; } } - + // DR management - let armor = flipData.target.actor.system.items.find( item => item.type == 'armor' && item.system.worn); + let armor = flipData.target.actor.system.items.find(item => item.type == 'armor' && item.system.worn); flipData.armorDR = armor ? armor.system.dr : 0; - flipData.armorGel = armor ?armor.system.gel : 0; + flipData.armorGel = armor ? armor.system.gel : 0; flipData.armorReflect = armor ? armor.system.reflect : 0; let dr = flipData.target.actor.system.scores.dr.value + flipData.armorDR; if (flipData.weapon.system.category == 'ballistic') { - dr += flipData.armorGel; + dr += flipData.armorGel; } if (flipData.weapon.system.category == 'laser') { - dr += flipData.armorReflect; + dr += flipData.armorReflect; } let shock = flipData.target.actor.system.scores.shock.value || 1; @@ -292,106 +286,106 @@ export class SoSUtility { flipData.damageStatus = 'apply_damage'; flipData.targetShock = shock; - flipData.targetDR = dr; + flipData.targetDR = dr; flipData.targetCritical = defenseCritical; // DR management - if ( flipData.damageValue < dr) { + if (flipData.damageValue < dr) { if (flipData.damageValue < dr / 2) { flipData.damageStatus = "no_damage"; flipData.damageReason = "Damage are lesser than DR/2"; } else { - flipData.damageSeverity = this.decreaseSeverity(flipData.damageSeverity ); - if ( flipData.damageSeverity == 'N') { + flipData.damageSeverity = this.decreaseSeverity(flipData.damageSeverity); + if (flipData.damageSeverity == 'N') { flipData.damageStatus = "no_damage"; flipData.damageReason = "Severity decreased to nothing"; - } + } } } - + // Shock management flipData.woundsList = []; flipData.nbStun = 0; - if ( flipData.weapon.stun ) { // Stun weapon case - if ( flipData.damageValue >= shock ) { + if (flipData.weapon.stun) { // Stun weapon case + if (flipData.damageValue >= shock) { flipData.nbStun = Math.floor(flipData.damageValue / shock); } } else { - if ( flipData.damageValue >= shock ) { + if (flipData.damageValue >= shock) { let incSeverity = Math.floor(flipData.damageValue / shock); - for (let i=0; i= defenseCritical); + flipData.isCritical = (flipData.cardTotal >= defenseCritical); - let html = await renderTemplate('systems/foundryvtt-shadows-over-sol/templates/chat-damage-target.html', flipData ); - ChatMessage.create( { content: html }); + let html = await renderTemplate('systems/foundryvtt-shadows-over-sol/templates/chat-damage-target.html', flipData); + ChatMessage.create({ content: html }); // Is target able to dodge ?? - let defender = game.actors.get( flipData.target.actor._id); - flipData.coverConsequence = defender.items.find( item => item.type == 'consequence' && item.name == 'Cover'); - flipData.APavailable = game.combat.getAPFromActor( defender._id ); + let defender = game.actors.get(flipData.target.actor._id); + flipData.coverConsequence = defender.items.find(item => item.type == 'consequence' && item.name == 'Cover'); + flipData.APavailable = game.combat.getAPFromActor(defender._id); console.log("FLIPDATE : ", flipData); - if ( !flipData.isReaction && flipData.APavailable > 0) { - if ( (flipData.weapon.system.category == 'melee' ) || ( (flipData.weapon.system.category == 'laser' || flipData.weapon.system.category == 'ballistic') && - flipData.coverConsequence.system.severity != 'none') ) { - flipData.coverSeverityLevel = this.getConsequenceSeverityLevel( flipData.coverConsequence.system.severity ) * 2; - flipData.coverSeverityFlag = (flipData.coverSeverityLevel > 0); - flipData.isMelee = (flipData.weapon.system.category == 'melee' ); - let melee = defender.items.find( item => item.type == 'skill' && item.name == 'Melee'); + if (!flipData.isReaction && flipData.APavailable > 0) { + if ((flipData.weapon.system.category == 'melee') || ((flipData.weapon.system.category == 'laser' || flipData.weapon.system.category == 'ballistic') && + flipData.coverConsequence.system.severity != 'none')) { + flipData.coverSeverityLevel = this.getConsequenceSeverityLevel(flipData.coverConsequence.system.severity) * 2; + flipData.coverSeverityFlag = (flipData.coverSeverityLevel > 0); + flipData.isMelee = (flipData.weapon.system.category == 'melee'); + let melee = defender.items.find(item => item.type == 'skill' && item.name == 'Melee'); flipData.defenderMelee = melee.system.value; - flipData.uniqId = randomID(16); + flipData.uniqId = foundry.utils.randomID(16); this.registry[flipData.uniqId] = flipData; - let html = await renderTemplate('systems/foundryvtt-shadows-over-sol/templates/chat-damage-request-dodge.html', flipData ); - ChatMessage.create( { content: html, whisper: ChatMessage.getWhisperRecipients(flipData.target.actor.name).concat(ChatMessage.getWhisperRecipients("GM")) } ); + let html = await renderTemplate('systems/foundryvtt-shadows-over-sol/templates/chat-damage-request-dodge.html', flipData); + ChatMessage.create({ content: html, whisper: ChatMessage.getWhisperRecipients(flipData.target.actor.name).concat(ChatMessage.getWhisperRecipients("GM")) }); return; // Wait message response } } flipData.isReaction = false; - this.takeWounds( flipData); + this.takeWounds(flipData); } - /* -------------------------------------------- */ - static reactionCover( uniqId) { + /* -------------------------------------------- */ + static reactionCover(uniqId) { let flipData = this.registry[uniqId]; flipData.tn += flipData.coverSeverityLevel; flipData.isReaction = true; - game.combat.decreaseAPFromActor( flipData.target.actor._id ); - SoSUtility.applyDamage( flipData); - } + game.combat.decreaseAPFromActor(flipData.target.actor._id); + SoSUtility.applyDamage(flipData); + } /* -------------------------------------------- */ - static reactionMelee( uniqId) { + static reactionMelee(uniqId) { let flipData = this.registry[uniqId]; flipData.tn += flipData.defenderMelee; flipData.isReaction = true; - game.combat.decreaseAPFromActor( flipData.target.actor._id ); - SoSUtility.applyDamage( flipData); + game.combat.decreaseAPFromActor(flipData.target.actor._id); + SoSUtility.applyDamage(flipData); } /* -------------------------------------------- */ - static reactionHit( uniqId) { + static reactionHit(uniqId) { let flipData = this.registry[uniqId]; flipData.isReaction = true; - SoSUtility.takeWounds( flipData); + SoSUtility.takeWounds(flipData); } - - /* -------------------------------------------- */ - static takeWounds( flipData ) { - let defender = game.actors.get( flipData.target.actor._id); - defender.applyWounds( flipData ); + + /* -------------------------------------------- */ + static takeWounds(flipData) { + let defender = game.actors.get(flipData.target.actor._id); + defender.applyWounds(flipData); } /* -------------------------------------------- */ @@ -402,7 +396,7 @@ export class SoSUtility { let objectId = item.id console.log("ID", dragData, dropId, objectId) if (dragData.type == 'Item' && dropId) { - actorSheet.actor.addObjectToContainer(objectId, dropId ); + actorSheet.actor.addObjectToContainer(objectId, dropId); } return true } diff --git a/packs/combat-actions/000009.log b/packs/combat-actions/000009.log new file mode 100644 index 0000000..e69de29 diff --git a/packs/combat-actions/000011.ldb b/packs/combat-actions/000011.ldb new file mode 100644 index 0000000000000000000000000000000000000000..922ad1687e75b33e5f67cdbc28df9d619342487d GIT binary patch literal 15155 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 literal 0 HcmV?d00001 diff --git a/packs/combat-actions/CURRENT b/packs/combat-actions/CURRENT new file mode 100644 index 0000000..875cf23 --- /dev/null +++ b/packs/combat-actions/CURRENT @@ -0,0 +1 @@ +MANIFEST-000007 diff --git a/packs/combat-actions/LOCK b/packs/combat-actions/LOCK new file mode 100644 index 0000000..e69de29 diff --git a/packs/combat-actions/LOG b/packs/combat-actions/LOG new file mode 100644 index 0000000..57ff2ac --- /dev/null +++ b/packs/combat-actions/LOG @@ -0,0 +1,13 @@ +2024/05/31-12:37:50.244518 7f20a6a006c0 Recovering log #6 +2024/05/31-12:37:50.292179 7f20a6a006c0 Delete type=0 #6 +2024/05/31-12:37:50.292229 7f20a6a006c0 Delete type=3 #4 +2024/05/31-12:57:42.325821 7f20a5a006c0 Level-0 table #10: started +2024/05/31-12:57:42.325873 7f20a5a006c0 Level-0 table #10: 0 bytes OK +2024/05/31-12:57:42.332227 7f20a5a006c0 Delete type=0 #8 +2024/05/31-12:57:42.355930 7f20a5a006c0 Manual compaction at level-0 from '!items!06L0cwm4CIuCFetU' @ 72057594037927935 : 1 .. '!items!uSQw858IiBrWkeSj' @ 0 : 0; will stop at '!items!uSQw858IiBrWkeSj' @ 20 : 1 +2024/05/31-12:57:42.355939 7f20a5a006c0 Compacting 1@0 + 0@1 files +2024/05/31-12:57:42.359540 7f20a5a006c0 Generated table #11@0: 20 keys, 15155 bytes +2024/05/31-12:57:42.359578 7f20a5a006c0 Compacted 1@0 + 0@1 files => 15155 bytes +2024/05/31-12:57:42.365779 7f20a5a006c0 compacted to: files[ 0 1 0 0 0 0 0 ] +2024/05/31-12:57:42.365873 7f20a5a006c0 Delete type=2 #5 +2024/05/31-12:57:42.386374 7f20a5a006c0 Manual compaction at level-0 from '!items!uSQw858IiBrWkeSj' @ 20 : 1 .. '!items!uSQw858IiBrWkeSj' @ 0 : 0; will stop at (end) diff --git a/packs/combat-actions/LOG.old b/packs/combat-actions/LOG.old new file mode 100644 index 0000000..b6e583a --- /dev/null +++ b/packs/combat-actions/LOG.old @@ -0,0 +1,5 @@ +2024/05/31-12:37:00.345049 7f04c4c006c0 Recovering log #3 +2024/05/31-12:37:00.345498 7f04c4c006c0 Level-0 table #5: started +2024/05/31-12:37:00.358604 7f04c4c006c0 Level-0 table #5: 22912 bytes OK +2024/05/31-12:37:00.406080 7f04c4c006c0 Delete type=0 #3 +2024/05/31-12:37:00.406202 7f04c4c006c0 Delete type=3 #2 diff --git a/packs/combat-actions/MANIFEST-000007 b/packs/combat-actions/MANIFEST-000007 new file mode 100644 index 0000000000000000000000000000000000000000..a86c839bc1f6a7cdc71dbb3a83dd5db392ca41b3 GIT binary patch literal 256 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 7666 bytes +2024/05/31-12:57:42.288596 7f20a5a006c0 compacted to: files[ 0 1 0 0 0 0 0 ] +2024/05/31-12:57:42.288688 7f20a5a006c0 Delete type=2 #5 +2024/05/31-12:57:42.318921 7f20a5a006c0 Manual compaction at level-0 from '!items!vHcRT3kQVWPHSz38' @ 13 : 1 .. '!items!vHcRT3kQVWPHSz38' @ 0 : 0; will stop at (end) diff --git a/packs/consequences/LOG.old b/packs/consequences/LOG.old new file mode 100644 index 0000000..1d5a478 --- /dev/null +++ b/packs/consequences/LOG.old @@ -0,0 +1,5 @@ +2024/05/31-12:36:59.630199 7f04bf4006c0 Recovering log #3 +2024/05/31-12:36:59.631365 7f04bf4006c0 Level-0 table #5: started +2024/05/31-12:36:59.641960 7f04bf4006c0 Level-0 table #5: 10948 bytes OK +2024/05/31-12:36:59.690838 7f04bf4006c0 Delete type=0 #3 +2024/05/31-12:36:59.690928 7f04bf4006c0 Delete type=3 #2 diff --git a/packs/consequences/MANIFEST-000007 b/packs/consequences/MANIFEST-000007 new file mode 100644 index 0000000000000000000000000000000000000000..728c476547037604780e52e0583e57afaa9711a5 GIT binary patch literal 255 zcmY$Dd9gH+fss)vC$%g!CnZVGsj?)sJhM2}IX|}`u_&=5zlfcI^+>3^VrEHdZn2`V zyOV*RV`@pHW0;3$RcSu2_$?aKtL2HyR*BK?CvZx zvk4okvTCfTsA#F8R!!SjsioFdsoGk_YOQUx*3Y9o)y9^#(n{6V2+wlwWWHegnESe`2$pJ%EEH&7zd8Y}dx?_4!3u%pR#u-&i ztJC3Om!}FhF2>tVsPUkdjCJWrBcK*~eHCV@iz5AoT?eo5_s2TK{cc# zqgGjSjjt@Rx}&W(*|a6Pd~+()v#P$VdBMd##}VS=d$llENp^}!OEnx0XFQ-P(LzzQ z6fN#3aci+eREZ1c?TV|ofFUJns=l(A7AzVehDr=^!$oMtQQjC-wQU-Jbx4T+ip~tj%SRT}@h-}fHR!vI|;ku+` zC28p~#nJ+DKuIXQ^mkLT9+H)KN>12!T-M|EFU1t2U$uNP@t0#&=t(Q6t0s54m*-VW zBVXQLjTI8;ms7ZCrkqUR6@qd|Rij*GORo}*;ylPTv+x%U+1!~_f{iaRJ}+)CKE{t(sfyM00o}9= zyo)%l-Xfp(*G@HVY6J7aY(TFXWiwq)rjZnr_hc-}THJ9>ZT)H` zZoQ$z!`K$Jq`;|0btTAoc{8Gupr^J0_s>dh^*F7Fp%2cS;lz0aBAXgK*c8zyzT)H) zhDz3VrWDZ=){PWSrQxP>oUytysU_5)qtSy!7t*6a|C8Dt-qa2Mlie5dr~QtPM(fq~ zq_WzdSh33J>>%p!cMg1adsosJ&<2#Kyat!8vMZUuzS50(W&0m-hVkagjz7c>KSWj@ zI7}qA+U$LRZGM0me}J7hjy=G3uDatvcJW#j+f@#$78XY`9I=%DPOoIbBk$~K=XJwW ze|#ZU0hWjAmAfNYdxqYd#KP*wUyU8AG37z*7(-4Z4J|bCQWV=$wv^teYMDMPQxmU> zbr#gjgl>}4+_Hs5X%2T*hIBnBn@UKvQsiv+fMRH>HT;f8*Wy-8jgu8z1!IwBBGuqE zVz_{Ee_RWxq`?!_aEhuy3Mx%49LL*7U^3E&JA$%~MQ_MSQ^lH>^;*%|1j|z7%rdl`h6;_K^%&s5QqCuaWF!TW}s0O)HJ$N}o zR-(#J#1xh?QI^Syh83DjB%-Nm*&j7^?^&#=jrd0^Vnd>g)jIlfABV|&@denH$4QR7N)4I*H#f}O5eb4}Uh6f8@Z4K=35dR3!Y z4(jo_mW7_;Os0-Ov}9##hT*isOO@Ya)W1l1$IOQ;@5|h7wfe zsG_{o`gz93onIQjuJ2dXg!cKROs6ZDwUH zeSX<y&Wpk5N zyOD&OzsI^aA|ROBS-*Ekzu?Dfg~PSNk}oskUuGwcN50JNxrK>Izji!QBQP!dFLvU6 zYl`dFytG76zA=0+&N0p55_P-$0;^f+O5XsM9HQ5Nih%5T+tImv85U*;yQN=^BUmFQ zsaK*I-of|^tDJHeKP=;wJhvzLd zz}+i-VMg&wJl`ZoBwiZvyK!R@x+VRI=VNMc_QQe`!8sb`zQCBnkBP|g(b>9$7Y?R; zazr1L&dsl>mNy~W%SsTLL@R#LG2$XOA&>>MgsVdk!$@PrH%Ok9co*TM>M9Uw5W7@l zIRtnm&`%yNt*yaLG*#0$&PxC7V3F9Xq~2TkQU?Dc^#A7$jQ;8uYa7#clIw*5PCV%Gl5Y$wE&Gc6ea+Y5Ld(wZXb_FNY^c&5{{6S

)Xi4chg z3?ZSmk3k_zMyG&~?Vkif9M^p!1R=lwe;I;gV26!BvS{R^5Ts-Z1i31cC}NsP0Z2p( z2C;6DJK|O|jk-1{X`jt|Wq*-~Jxr?KU5RLy8?fB`F_(2SF? z5D-i(L!cHV8Ps$eQqb_L13@H`fClZPG8&hGODR}LAZjCa0szH6R+j#^`nx7BQy3 z*Ml>oo044Btp@_YBpOa2q8k=o*FXmIkwQz6DYCTyPjGI?_A!7P8Se=hE1?EjFIXm9 zT1>5;ieauk0mIb${N-*N!>Eo~RY%oROUtqd!29R+hbaQ^{+S|xe@;hi*b=T?Z!PNF z))3j&NHq1O)XSgQ)YVc|SKlwcwflCz8rICWc7H+MsN$LjEV(NQ%=C^^F=D!L{CJ*r zoLiOpBR7Mo4!xV#{5UiIZr;T4$hqeJiI?I~`2H_z9iBX}d}nYcltr!#T?u?P)A zcHjqSisCjQJtD!!aMM!$51F{~dU-_0<-|3zbaIvjc!$p-OOZ9OK%%=0mQ6ryi(KQlkw@%HbHGh1fa;YFndrC=E0mpXBN+gWPZx{$YifGu;wm*5 zR%PH=ART~bA6df4t?$dYe<4Fb{UGe{$u>N|e^h0F{4~9GJ?adDqJnq?mqG;+r5Gmd zDaYyBKv~tuPd&J0AwxI0p(fyV{kQt8vnyCQm^pMvH712f&3V(54YyQf5G^O*CIm-TqxsciGZ%=oG7)MMkR?A}F< zZdP0Y%s;k*ms>;90fBFpwppt7)r^>Rbj6G#Wx;ITxHf}0oz9srt^v3UX( zsyG?Q<$TeH-LE~wYUc2HeNRqPo?%tF^G)&qugI1(jpqY;f~;uWQ~V{KjVRKOc-+=r zKn&N9crlFHMvC!nih0!dzEj;=+)PFlX&*nlkk!<&o6|*1j4NDzFXOa<)bNwolCp^# z7l@?4&BUd-JgCRPHk(O{`Kk&nE-@dwwEp=k;hxiU<@8QYbpl zMWI#rnT+ZE0;5YW@{6uAo?tKe5|1@NYYW$- ze73kK*_q#cVrkK38D}r(DDxGbX4ejm6QV3b)Uc7-9OMN&tLjG5UYLpn<&r=!j& zsi8&EM5W>SLP2S+)ZlJ#BUI5sL$(VIov9gF!zSais|zxP#+=g%GL^=m3uP?C6KajM zv1QWV3%aw#MhtgNol{#+uX8d#9)Z^~Yajki*S6)4xkxmo*o=Q^&k^^qk2dkvO3^tr9`5o`< zMQk*c<9txHq~isW;nWpH3$Y2DTc76W1931 zFQJY>8Qqo+dXn+}IG|$TQXWOStJ0B9@NvaZ)&V8D9&pe|q8Y-~!#{9S%nk^Za=1~} zqADQ;B4~-EG%S%o;ax;^+|J7SktHrMpWMu)M*f4*q$~1kP$;7CMr9p9m~kC*@Zq?| zb&}&^Afm>edS1F&DxBE@#1)C_Q9TUciVJ{}NP1gf5@frpNOE+@K?PM1;;3(=lABrR z@|F~CV@;WqGr=SC4*tG;5T_MY<6$dO%T!(G8ptP4&-rqGldSY2>i1U5U3P7AN=yK5*bOcV!D}#sNNCAIPy~wSI#7VXr9Y>WCWvRGG@HY zu?@c0cS)1@>#YlGjBinr=+PWW)UYAko*L4Xb(?AztO~9UlPK`lRTKCNtOCN3ya~{e zk_KyN8J5LjvlE%Xg-<_@9U{u7MPovnjG(6vYHC$KL6H7LR%posp9+s%|H*jlum5l2 zv8InuLPcWf1Qc7EVS}bXv2~ty8psuS-q+b`*)aoPUXMB)ZVIBja%Vl0?5yub!90Lf zOgE7tBhZ;Z?NQaSQltQjTV4-{gt`{s9Rv>OnANgP)l^w}72#<}$FCtrs?jLn>&>JM z_H1gytlnlZ?kqeyhp6l20HBtkCsbNEV=sf(k+CI8RV-N$2r}9AP|~6tfu)0itClk` zl4fWXbw^CK6Y&&|L6ymEl~EPwDrSQU^43*0Jzz6d0cEw6=3Zsjr+8w9^Bg z97R+&K@t5tZM0PA5M zcuAzy)A1MBJui@z<&$hIkpK*T#x@^fn6mMou@lGPpRw)RpL?G50Lo!O1h*D20e=A_ zr@tCOG_dfxfR{FukIOODQleG3Ws!6Tt0cJ77;Cs!xv|CO9Wx-@rf%Z$k>8fvTq6Q| zubH0lydAHz_yjX<%W>6yq*vW91f=q>0p|l2GF5Jupl#x6Sem#b@RTO4I zLUTukPyqm>!Ig5Qh@b~ovwD1#jGl=EG5iFN@?pfyn8r;kvtZ~Zw(ruswxfKczP&SM z)vs!;?b*`S5hC&COY@wq@qm$fY6~lOxz6G%<;qP_KziWMdE?jQ4P2A=vp@7*pV#~- zGk$&E#PP`Wd50d`d_x|)$QQqmU%Up)hs~B^Z-A|{l*MdFEp%Ypp5N%h*~QfW3K0;w zu3BECbnFqLXrieGlFCDFTC^wu=}~?$g;*$^dJRB<0Cv&X{d_DL2lSIcxcR_G1tQXB z9`907SUIkYDBr6zXdaa*E1`1>oXD-6y0FxBG2kF6EL~x(n|{q!omBAt_^wvGpFxIf0t1JD-$1S|I!< zqcy+GcYw1G;nnd+!Kh)WA<6oL^Mn$zZJWw8$(5!GmJFn>+|$!D&$yIjYir)v%>vGR zLug!-TC+3RxNu=IW(HO^_=(<}W}`W&qhrB@)B(OM!+jq}7az+%F7d?@FSN~Z@`5vT zIlJUBX8dw?;y89WTRfZJxx}@+pzkeFda+>bsne8!v8#KcSPoc@IX*tee{E=X)0!eC zcWy6nJJzFe8c0t4ONIrsR^N040FG!x47?MM_v5F5}Il>3Yh+24(3F z1*}h&<~l^wuCnyD#Hi_Clk0fJu*i;jC@xyOpHiB@=|=GaUZg}E`6^?O`*~Rl%^Bsn z4ektOKN`hfNhY`*d`#(=UIw2p_mV|o5af=uat0|E=OP@t@*PZ!9Cuqfm`AViocO{| zMQJBr_fwHsAYCpxPGusqeOKA!B@&23okVV|k)4xT|NYqAu!543GrXs#Z?m z5PK^oEXpr;*~*h#xtuQGc^NQ5wW^abL&1AKB{M`{gq(6$h8xP|;7>**3!5LA0!c3X zB#Nj^IEhTf{JUV1T1&R;U0aH0E(GFx8R;GQm)QI=X|7FChZJCUC6~n&CfCn|>?~@VFjfjVwCEN|^#}0TtgJ$x{h}Zs{ z<3GzOkOyFg0wO3U4}6i21iq>Gr*oSRNiwUBfmu2{!7OzSs-qLklK)C=jrSk8V>Q4H z_w&7hRJ$4tw6+Xw+^~7uF0ym@q643CcI!q$1))$j9%YRvYwJnXp$OZ2H!~h#CyqxV ztVof}1!0z{F~TgnTvd;Xz2Hxjx~2ruG_FfdM&O*R+}l{rI3XZ_Wp322D795WXf<4I zqzYwCR5hRi((JFrX*H-qh(Rei@;vmJ4=X`xQ^^spm{jMMTU3am?3$0;2c!jlT2r>Q zQK=GH2)rLCb%-cXhm?rZ4#V8p%$6g6ZLt}<3C`Ld3~K3TZ=u)(DHMvS4J~jp&aTVw z?UZVynvzY{q<_%{Yy)|Ya!3^04nlnl4qqrzB9jX*4g#S-DKf#IQD|#&OXYYn*6X7z zzH*GL7Ztgx&N0fQNDx03m0Q$ZmYV))rOkJCB~;+>gV#`EVgh!vmOlE3bG-_A`l;!T zIi*Oz(G+07$c-fE1iNFZ-mh0$I&y!Of1feQzjv@~o$sv8_@ont;+iaz98;g%K$0OTV;|cz<^VqRhc-+3XU&o21S2Kgs z8NB)q6Wmbch8PHSFwKBu5y26u??d8l%hX9C%w-J>cNnuCjoE zHadC9ES6dHn^|nz8`F38TI=IA@l{)q#iLz)#B83$ivEpqdx^JTypKQL$2Wh48F#W1 z$E{A_7vI${hy(bbTT{9}1J;A`jVT$w76u&)MP(_-IRGxKX`qL6jT1368CLFQ)u78M z^1x(!z0y7TKD9~@RpH82QG~FvWWYh0_|~yzH&6mN1^<7$dsS;tRf~TpVn>;@j8s#5 z%Utzh`V{F-e(VA_{-mXZ_bg>~YfOUz3ID|wMprKp2Q*yM+eL0W5XCx3l+yPl>0BNh zSqX$5jcafY=-~CGI!7s@9b~{*O!}_qPSF}+pm>K^JjU~Q?ZSseTG+W1anIjJ%jku4 zIV-XDCph^%9@PN#qRQznJAsFSRixAdaW@o_&EbDIQ4;6|IgdAzQRy17Iv^UwJk#*T zU-Blg#Xt5P|H|<)V2l6CQ5=gRp|17o1F8OPN;K82Zz2}O78g%o3reIfXj(vt^eq5| zlt=HNOY#4z8;0zcj+||1JpQq^!p>e^wa>1&t*J299`|CJZn> zyQUmkI_(>@>O;{HgzST044&N%v6MwckfNzU(PC7np(Yl&a9a;mc64ehLA3;X2Za-Z zkS>G@kzyFKSww~olG)|RPc-s}lW|h)%eWF?paSY3<}&JC0U2juQ`v=)NjmSrUpJ## z!q!EQRS-xJvE_ECUN*B~Ba#HlhqzT$@oTcD-sZ*a+JF+{+z)7ds0=7tlveQMdUAQ9 zS22(SWNa>EEEJ+pt$N|C>G$Ex1Ejqi2mn?Ry!jxxx(E4{#yaTi{ZoNL#Q}H5NaLL@ zmNhr{{PkI$cxaRrY#FKmn;}WNncC{Jm>fTHHB(Q{ zK9SmP{RN9CP0dL%8!IHtoDR`=JH8$gh}|970po2Tb!jva^*!J z-Q=_#G=+0>?1*xz_8*iTQBLi-c)I8I>3*wjVB6+~j^x@@yxNa>K?4_K(b;~%gS$0HwP;La<5X4&<|Xr8Y(L!H?g=c|&Cl!WvRNR7|?q_ME>MY=ABL=OE77DrRI!X$HZ-_OfO8TA*q$ z1}0gS-nbn#H4p^uA@Tv>Ei?id;6;gobfd7OH6Bc2#Zvj*#!U*>?6iT5u)iKUNit6L z$$$n{n0tW?ZjS?S$XOhPZvvQNc@66Q+#gUc9xKHPg&q}49_dIQbW%>M7hw@~Y_LL!53(LyB z#Vf(_hw=_Tlt-`ZLwOU&Zyw6izJJHPJhMfTdH>JXBe^8xK^r=PQ^M-Dz$ykphqS2l10L|AeeX6I>Jsjy6-|NY*SXJldZB&>O$(ZzZ{~X)6qe$W z_foEtI{2u7O}@aIYWiYVtH8#6+)?kU;WBU;j!MQX{(~^{W$zNQO0KHUfLY7+OF_Cw z@OJXJuVfpo-Bs__a#~Iy^}Ct6bOASY{!FqOMCaC zO&c0g;mtMmEgda8$zXE}Tl~{}C~1;|T@#n4J0z!r=_W6y|144k`M?DtRgjPGVE69e zR?YG792DfqWMBuxm_BkjoD54SvPeb&?{i;WP=7? zjSZ{C%V(gLq4K@t6`hnXHe9P5R97ys#NG|;B*J+wcK)?@oDGEYM2prbybAo~9WawpN3VQipIcR?S{|oH$?uxCp zbB8)MIB$ zqd=)PTMHr7u!(*%70(tSQx$bxMj#Db%89 zjBB|t!@EqX1hjI8-3;yw=VDb})d{Z%5E863K>A!eSkAd7af)#2nlo2{?gn*?jkJ=h zc2iecQ1hy=RwB*WB$8LF1f2?s-e!==;ldH+av5(m)P5#SKY3a);fJf6G;tkKX86aH>A6d)ZqQ>`~7V5eav`2 zJN3A`pDp!=sF0R4{Req~*Vb2@sJuVnNfe&tj?&HubFZ_umN6aIBE?c`Jy$$( zVK=S-+~P1U*?MRa78+Ct=Gvu9(F1kc7%V1g_$}H#^S2&k3wR~Xkx}kX=bq6nc~2iP zgk#Xj-u{rsHZOd-;s?ey4x-WP+o&t!UVhc8c(=ASsc(x}p)Iw6BpGTxk1Iz3y(+^8 zjCXOzySOD_61upl$Hp$sCguDc)sG77YJK=%rAlc8Lmhzg!T$wZuOiQSPylfYF(9HD z2oCr-X{4%2H4|=c+@7&)DfkbJ925s-ZFGflDb~!cfSRz<3hWuUmXxQXJVd&=hXyL> zL)0Ts>EAdH`w~2FOd*$xxLTp&4FW7kndEI#4yvhqx0Kd5)Elq-XW<#r=LKYJB}i`f zfqtMgSb!>H2nLjbQ17B*NmMDi%8jdqJv#E$a=e~yL_ww*(yd}CCF&^OIQmNQvjPh{ z>yQ8$+em*{L+yn*b|ETVC%CbNKrjgND>`atyGrs|MV@_g0sq$S&sE88#5W+pk+~lH z5D=O&k|3|4UW!AfBe#u=S64H((N~A`=EPexlp}YGmF*kn&8jt40SkNo_R5IR@qx5@ zK@-4PU3k-qj-j1vd&xye$7SOVruE2`Jj{8nHyx#NWs4e3?o!7`g`rVl_FW>7m0My~ zHGi8K-^@-usyDOzLSI=QzPm=smjGnHBuMxqUi>u&+6sW>1&;{ZWxV+NJZs6trB43` zwXYX%;$4e*HmFM13d#?8sC}+8CE|BRsf$j1tzm*t@D|J`l3Y*e#hqD#QFV(=6BxjJXRo~43+9h1iOVZU2*8-mLr3LAB z2agJ*qSUpY2bVR+l`k0F{8HdMRPxXee+mjUrjJ|#Ar?u@hWg6LO?xdSo<8J+NoAfa z-5`)3x*7#`XOi4aPUS9axKA2`DyBvgUTfs+LY?U>>Bwi4^f7KGbyf7c4!~3tTHVID z{xQRGXH6JYRzijmnC3*sEmed(PKL=XjPL#npoyUtk^M87pzv8y#b$nHi}c3=X-j_X zmZlT+$ZG$k4rP5zK@Anhdg_I}ozeqT4y;HtzQ?e@#LEht)Ep}B{jZ|)kvhEB&}$X) z|5dnLgx1+iZW9rLD}{SNF3$7$FDP<4>*k?28LcZim93xGs(H|iM5XAN9=35F8F0N- z;A{qVRh}v@27*_(?#8b%{x`k1^ARmJ&nKPdT88ZjPM+e@Hfo~mSKnUw>}&2I<)P=7 z<%`7+JDmUuVO84ftm^k6-7oUlWO_=KekE4G-xrsL3zzvSikI;|+Rv5ygKi3$AdiQ2E)))21=Lin)x*ZCh?K>|9g0&xu`E zTi1G!3M5rGm#6S4f&x@b=`zuExX`<t)MSyG;Kq68diui4v`R>>+Sh#WaI z_5;E6qHd}+ZkWzAy>Y|zNvM3r41xTU`kfxnLFHAd4r+4O*3}E5o4eM<+sJ3IHz)m0 z-4qj{YC)KhyRr>gIlt3Mq4SRa33T>k^+iYMWZ3z^PlcU7Sy?21`**?4Cn}4cjIx;U zGY>&poY0UmrV&tdNvix)E=&U$0@FdG0UArNovNFs6<+umnwqGC+@=AewortvXw%{$ zY)I?;SY?IM3dx2viPoCA09$0 za4BdVoEkDQ-cnp0ln3;H0u6v}BC@(%gNq}Evs|m!SqzPxph*1x6cSMDpQp49uvA1b zy&X<4g)wvHxe>epo8SR;0e}LBKrieV)M_uA-mg_sj2l7^2T~*XPq zmB0={N4#}XM?6p6GYM|{wD~r;?V}XijeJ{EtTWNpQlkY2S9Z0U8_31O=N;Hyx*X&r z48{Ei)-!>^9pjtWC7alE0GVzBOWmX!*omWW1Isjw{OarYPtCp!83?nkdOhp23v%3g z+!Ir&UuKiGy?99!O!%r|5f>{5hX+Jj(vxzhU9T%KCZ^oM)wS5h+HCP;=dyTuZ|4Py z#Nv%3N#)?Ne;heJO1s^Dn6;K65XIs(6IwNz0F)!`@D+DQ(!XiHPejk7qHJoRDm0XC z>e@i74J8b?wRIuJW0S*Z0hMX2Zlt9M4s;d~J>ItV?-jA#sdf$`@bC@2@Ty<(FK_E9dUb zr{I}Zuxi(5sQB7Py8|bi>@wBqfCko9PaZv$O(c)JT)9+UXZL|3pKsV$3fMvICi13$ z6M)cA_pN4v$`;hZ*xM;2lCc||Xopjx=`F%W?z4k3@E`8{8(kD+2hEr0?Xbf`sMV$rO7l}N$maIq83y#aN2 zzO;;oLEH5p%;A~hH)l;iJq6k;n4WJV4{4x4q)=Ac#*Ylw0BqTCGm1UlIkJ58LDE}% z3oluMPeV^e5WPWKI^>CB>7b`sI$iYG+B)8KqnjGiOdoei`bM~>)L=5Iz0XIKUe_{5 zIog^L#0_Z2!$-2EAc=-@vR=me!|4%#q$>ATUe@R-EI$VWEts5?gvqkY2Rb!W;**Qg}Y z%4)Qjv81c=oru{2-;M=1+1E$i?Lbvj=OlaXqJ2TYHPkReyR%nPl!N&PGRy*agEkC8rlyFhYUVm^ z3n(z#M@nvNf{k=42CBI21fH+S=Wm=Rp-1mSwPF$hoznhe8v&g{>AeSqb;*T`8ag^R zv^F)Uo6VIZtsYPPaW}OV)KZR=HtEHbA>F34GVX$ncDFW@YyX85@YG=0Qx*+NH2WV!?>BDU3Wsyl~m zLC;3P=oL$GjXW4-^}owwKoYnckR;Qad7Nnbdprut^b)9*a-ZIdTOSAZ=|XX3f`H+M z76ZxSMJ+63d>Qm6>gqQ0K(x;k{{N5p8%bI6I&W89R1 z4rBLB9q2IDNnNUy*+wgL@Fj*H<_0Rx?La#pHSOC?R`#q1m;vZKhm2wWwRtBB(l4)^ z6r@qJVxGgZ*Nn~n7fE{TZ|>YshrZ|8w!^~CMUi-0*9tAZR%sowR+Gz`pJ$tLp5&e; z+mq}U$Dd|#?0dTTJ51)o%)iH;W}SA&z!!f4iFEI`peo~{;XdqwTpN=l9vy|v07DqM z;Y+_L$Z7t9)@h(kR-knU`=^Oiij=UF&f!%*is#?1OtZ{j`e1bxBbD<^mGX8CDr_*B z)JBYo0J3K#HdVI0DRpq;tgGmT&lL62YdjMl{<63pRg$oSlF*JT*pTMBlb0C54Hp7- z;=wI$TQ4(5&m-6D&Jq>i9C9N|K-Hji0Q(f=9hhR{c{c4rb66;}kKgz+c=GpuZ|~2T z`t%KZe|_L*!*@H1_x;Rn=Eo<$Wg<_|pU5;QRR4@^yF(aCEw5=0)i*Z8H}%(TG0El4 zKV!!>``X(h&;_G|O254P{)JAvA@;00gp8hfr=#Rf2e*nx*AW+Ic5qVPtpfG&zsOD; z$6jRL@vgqhvFDw}J00TU#F8%QkB;Iu#C@M-qOQXQ(n^OXE4cuoy{$^Gi>#%(e#-AT z&%dRzwl*Tqi3WEj^>bP;5RLvh1}AL|x#z@t&BQtW{z?=XdIH-M!AY7g6xTXf&5-UE z>d_Jkb0lrGf?^&P7T{y5qs}o*asgwKOGPvhsKe2=EHP5d}wYQYv>0zw80EPpx(7qfEf{M{$%g>ig-+@!6RhsYOXOiAJ9dT-T1C|^(c>*Mgr zS1+EQSh78iYc5>0Lpz71L@-`i;OCt{M4M zFumkzVG`(^a`VvkSEwKC^EnD=O=DvDs%;y!LRlEo$# z>-J8|b*|s!xV0%WwS&SMTLCJR$>3cy?!u>YgK3?1yRPIj>G`bY=+5+4$Z*8;$Qj%r(BZFQNObQ_NYf{EIbWqoTzW75(S*l`ESeEsSs9Tt2KS$LFwn=lpA9T1B=ot%4n&a;&Xj z_pWK2!+I#p19_(C=-$uv5>Pq<^8rp(Z>*%AX}h$Sdp9j$jMfFz3B26R^w69(2_#V` z0!#x17jB2KgBrFnV=B^nJs2egjAe~l>Yc0>Br{kmrM#=$cmE=?#skTT5`)Vvkl^V? zCa&Dk4SNsXL%mluY~P1@ZQsrBYYVN=Rx54F z`oXqct!?DW<`46lCbZ>Dr_A_&<-Px3dCgyA@WIsM?*Gc;AuMCofjQ=`q^3yPPm0W} zeNa#B36t9LQTO7HYRj=Z9gXWLYcpw8L_tB7<&pPfT+@uQJWMJv6Cb;wS6Om~BOM<|G+s z^sV_5LURRX0Oh+gN^{9q1->_#lFp?Qkxn8rOW(=Q>C8Ml4-Tp{7k{N-LTcVZ8^fhX z3K+HbvqJ9{TXLS>v9hCk(Yk>ybL-Cf?hRIwe73oVbGKkRN>t-+bgw|d4y)taxZ~Tn zC0}Ro!PMh!sMnj!eTUf?dMdDXdvzd@^sB5A@XvPL%0oUXC;;~^0Dl5cmiFK^BMX^$-7qWeg3C;LMU*xM~!S3{I43> zkS`F^ppbuJYkddC!_jb`8Mye#POX!uO`qIbPag82NdLbxY|%Tvj+@nr4wwg1{)|L&%>AhMBD5R3XS*bZAa0=5FRG|jk(Pt-t#*iNGy567RwCxXWJ8N_W#%lA>M5L`RInIRxOf>NHPQ=4kA>q%M98TA-Mj2| z8wIv1P}Rs?_-cmULDi`BYC3U}OTjmiaCE{fMSDnT%dR~ZFBjHqf&eB6-6*^r!x*Pc z@z2aUTdb_An1z<~_&1_)f> zDMzsg_ofN*1GIwoGCKCdRJlWdD!D!|Xl+S@lz6ga6*rGhC@Hd#T;+ynjM}ScJ!2_% zRrGdzM8CHYlJ{OD`quBCKm;}Tlnb(kuU|3&;W-El!<`e1kW#JviDDn6nrdQi@}0{U z#jHU0IxX4Ky|!~`4cRj~`{6S(P37ttXeuB6z$sU*H}vr{xuG+;o%gZT<^^YROCDnI zh0JmMOm6f{jI2A8d-zO5?D(0SJJV^Y-0#aYluvE6tUaNly#0?n?5+Mwl=<~pSOlO) z8_Gv^$JUkRTFKK_inP1($o9!ja^-J~ez28Cji~(6ms2ljBRLH2F{(n+PV%Rg!QDh* z=;)K^>>C?9p|A3dkMvd6pV&!0@*#spa^KWO^7J2OwoL6Kf9f8HZ7tf!DiQp_L{nv& ztzHbQbYfE_V~h+yh{3EN+CUAG!szgHq?Is_&_h2Wc3XLp3a!$69{OcF7Oye6D zvFrKMuH*Z|yLwc0LtN|D*9F#VMqF>>AXz! zeo|2*>$_5DC&H!yu96JQ`b$C|k~Z*6w-gsP_6gkAxx2xQVt5(6IYIJ;Aw{VED_^V# z*x57sdIczq{o1V;2`%Wc9de9+$IjM$e3^{kP zJrr&VW>799*Rp}AG|12XyQF;Rw7Kx2vnsRI03|bEjk4)9CG9wd6O&sJ+zo5?*9)YO zIP*<62n-GF2kQjZTh`YlGIej zc^A>PvPW8fH<2d2&$M4h)1>zqN)dd2`jCJ9PNil;Tho@U4V~+n$X@lq)Zw<4$=NmC zKrysWdHlh=_aDq_{sw~&CXPoQ%+szPdLXa$J%4xggL&)QU<086AXjbzlLR&YZB2Gf zY5NpV_N%7V0;xi|9QFMjWo4c(zFD;Gh4+0w0s z`~zL&y5=|YYC4rZoN~4}8GkMB_-lF8r}J9g#PP^$d9eqcdp(cu)Z$0(ZO`-ACP7#n zg(FWK?Lt%dX9S)$D_0esg-Ii+v8UX&A!JZ_cPzg=qy6FH1(j~b+q{5bw6O$}c&f7$ zFq&dwly+`9QdEwOb$T$omdc0H=>nPAMzJM;DXr##B5fDdQLjh^OR}68KI~Il*F^uO zLF&;Kl*R2CWHP2O z?7MB)A(~-##?o2dYH+E%I$gkHj#u+WhID!&z{c zmlovaC>|4qJx+T(yX2F2Th61G#h_0FC~M3%mrCzT%%WNDY;&pfd5Kv-icjn=b#amh z(>SS2S^Ud_6DM#fbTk(_Oygx&JG{>_69d|dW=#ru=-^6;MKcx$01~Fm-%_O|GqN3~ zXZEh2GQ?)q!`7dkqRIT0T%-Ahf#us`(M2oj*X>#{(6w$OxdF)>Lt(PdTj)R-F{msT z%cgMmNmKZyPpc!4snd*4CL?@hN(%qv68|LLiFf`DbNIj3_bn~Rtw^4BzC{g#`iH#k zqX^4p)ZtTV^^()kDbZdLeUYIbVp`6DSOx>Z74?$;X)5l($k)` zN|Qh0JZQish36clZ<%7B`b?0iX;hB+-V~#V=47U9LQ{xQpAU3Sf6S(3A|W z9{FLW$)!tkIj$&OzE%O+Mp`eQR!T?v}eN0CA2df0YHn&|y1j@{sRI29XK_kFuu7FzQ zD+Tnmt$Fh-&hUzE+P)@-$kN5A!6&Cx;*E0mV}d27eE|8u>WA=M7qmHVbacH6Fxk@lG9Zr5BkCU~5QqPH zZNDu_Jii@<`76^mnoYWi!mcy2eyg^tFGTiXo9=(0w0)zz0=;YfLCZZaVKyRrb7uWgsi$Y#HWOu#>dId0r)M0!(r?YohGtVe(A3 zQVYgJ>%US1XDO_!HoBmrud9?GGH&`98j!zQufPF7b0|EfxK-&rjGBJB9M4{$%odtg z(&rR?zZ4J@7d>e1h0}24A|VMa0#8EO6QcP*8RB+0Gml(&#b*~ogLG(2OyBbehPQo( zd~u{6{W(UzkSfQUq(&cbR-8Ns_5cyt*0cBXn1$YZUU@%n{hy`HEe&NHH(HoOhEdH4{@Xx&W{K%&d@=Fdg<9Y1VqdJde7x>~2 z^5PoQk$X<@*kfT$`N%hii#fY7hQoAY_2-P*zPR|&d}V3v>#S_03+aFo+aEsm3V3xo zr}gNUa-A{U_L>afrEW?(&mf;$z3 z`KqyBZqM10DY;065>PI!+1{DreD8GlzgwtR!=9f-6$9E!=S%;=Lt9Ag2AVRzP_fQw zOCKk;&|KxDEi|$8n><=*ihqPgcxo^ny`C&6MI5wyXbOLr8GfE?p<%4r`=p=enrKE3 zJ9Mxj5bvdX^YLVolrR%$)95$T_huStLVd~X;Rq~X=YADwb_WZOyGXlxl6*Qcjg<+Ucez$C~lx8?R+Rdv$64o9afO zD7F@LbDp1c^O}lEi+p}FY%v|X&BGk3$CpOkxgXa;!237I# ztu@lke6F{~ZTHq_(mxC49i``Ox7V=szSl1+m^4=$c(dX5|EvH8`en{svAJdaqD9-b zMh1I!b+*-EeC$ow-#?tdK(-+c_86#e%c=9h=%@Xi%aME_h=RVRV+XS6sQTnKi^Qje zN8G9@qfWUQCj&@Neky=;!za!c_U8W^0;EsySukCsV>h~G06*+UNrB?9GXcyLP{*_F z=DnNFb|ae7Sv-re4C}8uZyFS|33n3~J?Y(zmp}~zZou|8O&XlC_9iGEk-Mm~$p#!J zc$?n3;)~SWG{uhQBkLHs^R-p6$-;HU!@mJJtibQ>zm>cFV-DABr7;8gq_F{Ai}c z&rI#{_CAhlh7z6*=)s1y?M?_9S+|o7A#J}C*87AbXn^#cx>%&%DvL zcH7EDH47FEkk3&7bdj@@K5S*vD;Pcjf-xPmJsAOZZvc;x>a}MCD|Tl{ZuAERfIOnG zd(IiUkllM_qr!UpumJ#6YsZx(v~r|l-IZG~D>{niqt+vUnRH@jcBqYw`f@PW|7JJP zGdwM(Z3D(i)AhtswDWR3_4afGyOWaUK*y?fLx^vm92k}Z)tTo_knZX`rYZYii$!P9 zW@?KiA?_O;SOU2&AlQ^Mk0fy@=#pvR(aSYD2T$v%yM$qskvYH%kCtOaQ@=4Vv-(#& zwIIF7X^+XBbvqLvXR>mV%qhI_(w{0o*^7R?QVN=|0q1L(i!hd;} zrt2z$NjR4AXcPED$OA|rn#B#Vaec%of~!uE^Mz*g6+^4#X0V_T^B1Ghh_-D39b|mf z-qqzmavG+-1MgSd*{~`73$&Yz&8VC#U*f_R3|yh$#rQUzEH^eU^li5H5;`9DM+IBL zotE0x-Zt2^wmqnB-9+{eUvl8mHuQ4p>Mkfd08)75o!rx1w*QJ8!SOa<{5D48vgUlE zh#)~Cp)1%W;5M#cCyqz1z=)XP;XOC3{x$EYXuN{0q)(`@g-|@AVknTaU~U3K^4&YtNl*K=emR!#Oiyek!!J_=-3PV-q_n{@ks}r^l1ZCza49D0cRSImv*mDOfE7FHT zJs#2l%!Z&qpLS=u{*q6YN=<^$C{j*X`Ug*3>FMb(?hZLPoWglqWRTU9((ZgV=u40D zv=?Xvsg=>F2)P(wd-P6VNIhCz^Z}$b3+FofGCa!zqxl$lc+5j5WWZEG)=3BQi~aeS zO%~IBG` zCP%MfLrGF6Ey}N?9YopE)%Xc}<>k~Yiw9m@hDLGwX?i7h6nyN!^sb44>5||OO4x-B zGqX>;SSRpZmNBa)$J%Um%v|Grm^I5r;&foT>qjC+No5(EDtJk!K2tBAV{A&eeAZVc zomTMitc`8MUKhJgI@{qpfwf_!oC&+G_ct6gz89tsZR=an9a0)L!M-Z=Su^HHvp zn$a+m*>WA0#+CfHlze6j9nkm-ZsIuh3$C;AjyE{h?E=%gi95Kk#cuF}$psfEnyS*` z1Bx`$!N}5a3A&Q>IvRg0*9(}(9o&05-W7fFk>nFRbh-tC95>T#QwF{?<|&W-79_89 zgJX2Q2iqJpep1>sgOSxQq7e{0lsqyj%%MF>icu{cb5L_F3(#l^VCIiyzA8QEx~) z^GkE?0VySwVguMBAt^1?O6h<|G-w%;f?)$k#L{dFwn=v3i2xwHY2yWb{G@42=V+th zi&I>;ukZ5w=2_~xy)mbB^=w%*geUr#3m0w(hLqGgax;=nbOIQHPoAWnvk36Clk#Id zpB4aqYJTjip9=n+gdcnN-w^(N3_sQdGYFClWGQ=wIph>_K??;-s5U_x1ZYMA3(4Q>0ioNY&vlI!dPiLRRVxw$@bD* zawgAoe4H9UmI&YCF#!%E3{Pl?uGpS~WY>#yV50ZK49_$#MU}0GT7NUaGkKqGzt&c^ zo~8znp9ov)*00%QtO;(?)op$CTQ`zh)I+JS-#|;Cruv!=S_8G|M$&$8R~wxWFM}b@ z%%m?%K9$S9Pv>b*3vH=qXkSq8kMov1&5ZvzZ|ZUPkMqQCp!Dm?r}5wqwcjXLp@mzH zw60*H8&>%LrYypRp^tT)K(fI-Ual&dnMZHy15|#r$FE`kXE@N)7gvFU$E?bXY5-fF zdIkXg=GKSHY0tYoGSlST=@03HVbO&NXHGO}&N`c&D<9!OGl^vXGEn#kk)Wz@1E_1s z9Ih>&Z21}9$YYWeS7k$Ev|!4i;d@04uQItW!7GagPsRsHtk7wj(SbLD=6(7>vz?rG;_JW za`TpMa$xmuG2*4JCjFc8EgB|E)A1a}f!{Oh$A8D-*!R2UA2OK_C;mPBJJxBp)<{Eq zCDwfvExLe&_B4)6+q9I4U$AW2D9fU6^fDeYE)_+wx6=Jg+~w!f&t<4@N?u|_B1o!! zX)FFkBETJsE0|H~2Lgv>-EQj3$W?p3QiI8bm>MKU@ULndoLOqyis0f&U(E*8Js*f& z;1!EE;Q1iZxdr6Wkz2My4egh!F-r_3fJO&dQYb~|r``{e8*Php6qWP@fB#p&t*P-t zU-Nh~jp5uQ*sPhZ@c4Z^(>VSLi{t%Q*z_O9UuALZf3@xKbR*u;W40wXM`KoP3c~TN z&9Ab|^82gZU~#pCIUaW$k2{#H)bRWrcH%hp9d`E91)q;Od|OZ>*v@5~(VS~}Cg68s zT8tCZLD0WFT|k%mdOW}e`8}wXTr5Z{_)0w1Cae1!d-jqd>3zUNvO%V^6e8GN{-TxX zdJLO%;EA7chl<&dmh@H8HCq_ov^X>ViH;S?SjOqVQ#mqHNb749#~3ql@HC!UW*?h1 zO16l&z%lN-_VmF04~#4=2l|6wo<9Fhc#^4>eo4Vbuao?qT#5&JgLSx#H&>ULUEUGiXtWLdi3}El5C@>T@?tX$ju-i)pXCL~X2J z$&oqRx{~!*_Y#VG)0S2f2-0E>AouoZM4B#h7vu-|G9Hn6&?I_*Ol5NH|R++)nSj+%v*C zKlM)juWYNiSt%7C);E{YRtRvcbmXf{-d&uuoh6xO2tfP6t>un0I0@{*3LID34-=+(wAZ~1FJN1}XspDj#E>NviFi(D$Z;*W;EP+%p>BfAI}Mk}+NI?|Kr{i_HJ zq!Aa7&J|(Ki6G&RS&-m;1|Xr)=f8U1>5f^QYt+;PI`D7P&ahReZ4@2s7L-n642QI_vbLg0bbJ*+7 zVQX5b-PM*dQS|$t?V<7^_C6XPbLOC>@+!E6{>lVLYsH}4zEN?rF>j$j9|&VA-xF%m zb)_KZY+X~G1Dg+g)Gym(*OV_&I$z@!Ttyo*Yz_t?lhQERr=e1_{7vMC%~6L0zO-_bJiL~g{JBbc%I2_dGcqCmz%$#f7@ec6q3_RGN~ z*AYB?fL1)|ix|t>D*^`lM)TUwX4ROjs*Y45*RZmQ~EQlWVUe2xBc)z!h@RCa@~kxIhC;#|EZ zY(mg1f#PE&p&sk~Q;3DsUQ3Mp#b=aL^aXN?*6bC^p5aFK3KNgJ_X-lYX^xS3sG_p5 zw?X?|h8-9_wwCWoSImhD{s1EvK)TwsnmYps1_j)zZT*9LOQ_EWumX$@O(1@{q$JXJ z;}IRa-*K&gigGL0UB5MWC1ZLsiJS5#Ng`SKW^8tD-W7&r)*eA3wU5u_TIC07x|!Sw zr3nPc8I&YQl2*+59*ZlnR`g>h0Vf3ztjFqH!11sZE5|s^7qZK5a5nb}i7Or08>#v% zKFKE8qPTSJSOx1iB1Io*z|)PoBRS$KQTG)l>z?Gw^#&n7FKv1j81m@yonVv{^NArD z*U0sr1h^aEneoyEo>`V>}ld}F8ifWSf#afd9qQskm0v)_$Nw|JbIUL&Rs^n z$$gJdbQd>zk1+Ard5^$VD^rZ{?t?oB3rxToVEMjbWH6P*&HxWp1dJWw%1|^jYRYX! z6AXy^w8SAvYV~-ODui=N?-uPOzAx248rAP`fZFXYTYObk<7DF-A#AEZlAKE;%r zz%ietKoNhz`;{U&DI6&b3&)D^Ko@T$f>Bs*RJb;{W#gH=MJ!AHb1L2@o1)vMaQ)Nb zy@wDRF)&SRJ!68e^4IPKea}!T)lVaYp4Nh@26uzI+S^&$6KHg}_*+o_j9a3hUBh-d zAFDui1NArIBIy4tQTzxPg2zH_U3F`qq@{a)bAS8tszOXDF0vc<@pcI{keJ1_!3pge0lgsR&yd6iE`W>JK|>q4jNAQJ)s4E8Kq zNP!?w$&-*Z59AlhO+%TFx&-}AtD}MIbu_$-p$#qKfG4nL(Vl?m1t1X=?3iVd=dhFN zEE?>fEFTN7og#XIV0e(z7mYEFY z1Skvm)m92lT%*jH0xF!>3$e4KD@WT75{lm=PF;@P zGJxfUARpMNpa|5B&TM5?Z2cf6VE;=VG%;6b{vA%sb~KRfJGOMZC;$!s1%3iJYzw(I z@#R9S^mXJZ3(w_VpFO#H&huQ_Wt>yI3@)s;U#H?)6N1!jyP}$QAjs^Gqx@W4I8m-# zU{{kJcCN4HMw*SiIVg>nT8CYCvr_9YQH)1pY6{nuE?7USV*b(<_5QXB{?@^lhF{KD zK%)#c(j0wGIQE=CsPA*a*zw_W!lpNFeqNATI$f2U8KM&0+eD2SB)xFcX0@+A(Q03o zi9tUC7eWY!#-87AS9{|7@#(s!@~Go9-n8k;B-}*cX$1IsJ~smwkwSgYhy}k+WtKV^ z#|8h$*@r+)Vvd5es`nu|syoe}3LOM9UDnDWVugZHO(9VPIlrWN?Id{UAYcxEPuy-| zB%Dxv<-0^OQG1fNmEaD--Bgf^<+nQkuc_NP_l~D9ys*x~pJ2uh?S;)f9L?puJxtW# zLzCKCO9qM?7y6btw3cOEo%MXEY-9+`%%J?D1okNlrZtw870(k6q(eM zvND$IRLWv8-W5;7yh=UI@<^PV4yfUvAs!DcimJqQiskola7B;IRsDk%oVT*sKzY;3 zV}#747z`9r;kr}_8YGm2jxSlI&*veN+Uuk`3yAqYSzpPYP25mDd#{&+mjuUA$z%XXEQta*VtO^mX&)i60xRKsj`cE*zD0 zMOLr~Z>-;A+ocrO*nlro5)=B6SAmMO>qZ~8p6^mDCF@$dBe4(GD zVnGE14t{@2qzpY^8?Wf|)=<@6Goe2Ci@DD-L}ZuCA~IiRRezJ#*V9r}-BO>|1xeBE zs1G)e;UmYXd>eH?K5sa&lD8hMftKu4E+V+qeE*inO57>`3S8oZ!}Pe4=hQUdZ$V7H z`Y%OHBGtnGdZq7!L_ouRRzZ<~)CC)`Xxj<#GwI z6av}nh+hzoX%uK4@^~P-a=jEzWKRk=_i`?uWTFv+?_dcv_XmF*31lBikB|$j5*fTj z0@*)5Ju=bZy!(FiN#Ti2{YU+ZK{}pRa8TNJHg*Z~2_KoznKyn^BD_x*nKNAjE>$$ZnAVMd@D7Dgk-_FdJnAB}{3?`1_8}Osw3)kH;iz>StV!>s@d^QaIO=xtNr({LM~Hd00{$u}NW- zSujM@4_NtWPV9$U+K`lvHV49@0vWP5Fw;UY@p@1r?<@rT0=WR7J+v!M&*49S|MHGx z*%gc0JXAt^tQRE&((YiaVc&7a;QHWp7;m|HgYe~JfLeC1H=(1NWkHfY z9Crq)ifY`k%8XbEz^fP_yKM($cUcf9)tvtk$G;0J)yHEEY>v<%qrg$_k|e96A#^rE zVyMAF|ABW#ULpJkp_yPzSRU2KR*yN=UVrtTs9=d$!gu>O4 z2?m1Vulbv^RDi`KH$*2SK5nA?TbsMqz!eYNAAQ~Pl8|3t`wIkCr6o)`AhB$}v!0SD z)i3ny>U|QKLf7sGj54}kYThp`i`w~&G)@fuLGg=^|C#t7zmLq4w1xslLt$6*l7J^r zxPHEmzZ136(f+Ywi9U`}V4#RGz-6d{!~|x{I-)}9-g?iD-+zYY#Kf=CUT*LL+P*7<`Rx{k7>*uccjfRLrrqAsN62Gb>= ztGJV}&$MctxbJhUwRl`%9oTWb-7#KTta$$Y|W9kRdd!_=TL$aqm%@aY1khWCqwYF-;g>!Hq`=y9=Hvv0!S+y?*HL1N%UoBvqXJ(HfJmibUAoSI%RcV}^U*@un{?dSaR9J$QCgw^ zrIK4JOV7`lF&2es%m&QFGNFiE1{g^V-l;xq z!jR6o?!c?5BvvETCb%megA0Hy@+{6b_+XZY*I!xHNdW3BBN8F4sD z=H>_G3$blkdjZu^JwV)I$baFX$Q0>pc6YX1 ztfI=Ww4h=zo{pLia0DQ%UfcznZc7RSkwvRG^UQ1O?38v+gl1gAfbxMnxC9A7Bexsy zQF|B^dnC5L|tLnOQB1Br&&vBwGyaWKJF(HtQnIpRM%C!JjHKV*whI^O6#j zF>O$;mWcj^GJ`y(ac}miBroU>-IRp9PHOHgd@L{=<)G|-nQZi47S{Aj)z3kyT)Mog zwZXTzt)-@XiHHAD*@MxRU&p2bJ+m&r-7xx@;mBu(l+O@8S#}>cx<7jC_;7!;QYnF` zdh_25T+@_xgTu(V4v*>_9mlT?xNF)S)+tXJQbE#R4;!X#WJZqMfTtQkm_+Rwc`5NO z$#R*2B1sqs>T`T9;l5PPHDKUaW=;8%LBi5!5sWCr8vF*JPtA3!{vmQ?e?grlStwfQ=e}*XX54o4@_=hl$Z=rVn@syay zY{FbH4fxOTH~Uv+BlMYW8$EET@;X1DnRLec|jPF+3K=nY;2UM z&xynfyr0l&YFT{NX`dc_C>wzh2%QA%%ruB3V`jD&$Tr5P9x+b@8+Vb>F#3oILBm)a zS;z&VNQgL0hGXPyVx5skyd zMWR1qVq%+Hh_~s4tih+xEo|}FN;7|SLZ#uT2v-_Er@@7&6^suq;%k1(HtBfUq`#iD zvb=rG!WA7Q1C5Ky7w38TA8UW@|D>+M7l(3pe^Zv8NG)pCs!2bTrxc#t|x@Ye;&NkfI3R!Pjmb!cmq@w#I6ZIfE)>e z)<2XUAhm5>>R(IHkpZ>Gl10}0fCDbrh%40ThwmIdCG06-`#J2p#FHT6IsSZ;ngw_s za4-`t^Y!Y(q7fane2D?<@Er5ag_x4z#=_u>&3?6A5+=XKEoQpPgg)`-bVqFFXpaHr zi{#!21ZC}ecAYgWn6|d1ook#fuP{&wqxk3G6a)Bgz3SWQhh}%Yjg78~^7vdm#2r5> z-H3U)h+MMz~!r7*sS?iy60Dv)bV@DQn2OrV@&VP+?cdfgKh^o z%tP@QZ1uFJkETmU(xozZxY>lUW4n!-{KRzWLz`ePR|(uvDP+!B`R=|Qj<+C)g-Hym zyx?@DLw00wb9*jbQJG3y09+{FU@K-AS+Thq^6ObmO$dRw6sCq0cEjLrn*Ss4FR7d4 zE*`gNtH9Pk6*fX4Fph)qMNjWw6m^T@cVL>*)~QU9!Tc1>b$A$vxrhfq>%v!}&3Czj z#g;>o1P7vEG5SjW$yEFqGt84waxq?u`X!O9n47xKxHi56e-VPQccC!|$s-?eJ-Zd4 zKZO~rCW1WKZ4a4wKfL4+bwpV#@W~1Oc^*~~-C)S=*6j=U-E;Ezc-G;%l~O7DEG0_j zx@{>*K(tZv5lPiJkG~~*3UpKOGQU>BJfjiP9lx?oLWnvv5^(*U(?+?QG>lUw#mb9= zkCJaucj!~-vAx^Ty}rGHN~sqntqC-&38-DUEv}lHg6735_`A!3pj3q3vNnb5ob*wj z;Pnano>h9|0NSk{HjwS8|?Kx^bW7DzI{`u{nPz22%BlDE5%D$?V1?%hk^OyT!P2uG4K@D;JSPkJoIy+{se?7%B#h*J&t#5x=^U^dAr2Ozq{_asJxE+jDyCt(32 zot{{J^xQ6&6WO}x2Aalr3}`YD*F;SrwZ&wZ1pyud9d#rV{{s%E7{)T`AtP~OiwK)@ zsgzGmTQ-={{6)W@rwwfgI#*ELv8{*4%Cv0Kw$6NCF|-G<4c`%53=kH?>y39EUBIm7 z3G;}Mjc7mphLXl^4c9Yx8Y)5FKs^K@@>q2vy5rpeqI>af4uN|_lLI)>%`dUlLBS7F z3Bs_G=Mt!g`pXEqJbA2AY7T#2+NHV26*~MD6RUH?jhrfeuL3^;uox`sgt9VochQrx zi%(^H1-`#AA2tJycH6J)q(fzs1yDMBwh0K8dRRggRKt;DH32PZC8Dp!%O6`O;Xk_e z#x}`7)lc?RxXUrHQoIy&_zo`Hd@l5~P+Je1nDRheV(@h$zx5{)9##H(Ce)4C$}p-h zPRFw2W_C9kf3*a*u&qnNZ~3cI^9#W!0dA8JFabR1R5PE-1?6U(iXwja-90N_KaPT{ z&A?jd^LsNFfPsr4&VhKHXKYOCxoq&ku@XzYc4#G)Sn5%t;ocy1R}OT+sMr3-OOVXl3mjs)Wn6-^}sv2DZ zc&r__9UXixz_iTO4yF~`7xsh`lTD>Sk;Yo{NY%m%U71* zsel5DbXsKHs_vUDW<@6TBO^hx;B@gRJ5<5tlW)Ms7;wpZ1aBbpWhyo?T>;n@+>pUg z9K0DYJe{Fdq?D+C#e9Dl-6P*jNb;lAKye5Rfo52*_(;`Slz|5n>4fBZCvP#3w>A$d zDJC-@3-cYa-wur}ZosA3)ZJadS4=QCg(TtYXi)OLj&2AG+?lI0N!%fA@6Zn41C)&P z?LmWqoV*VIniTGbZ)z2;aQfYq@noAW0=Cu@g}JTD_RTCCbRTPTCTYPO&sFU$sxGkT7&>71c6x6c;f zmI!o{G6^d`g)NA(LBcq!M_psmG03@Kf2^4M(S{69HWmcdY!5CRQ^}|oOEekS90#>hl%*vz%74@#(9mB$gwljxD*2uFT#iML1z=jmEe`8`ARvI_g!4>-FL9V@xkXDgY~ zJo0~|(i!N89Yt8Xe=ygCm9^8)Uk_#{*hw%oAhMeBJHR=KMY4ol*SHsAFcAM~m=hc} z;EP;*7ToQt;{>&PaQ~1ezf?@pV>ENz?UImJcylMRdWJfM{M%RUMKP^m6Ii`L~?Uz zF&@I_q(x^6oOA8DLw3$~_&MN4E^TNb-1 zTp59Ex_j#uFIr!iSJC4vUbk?-%Rhi}t9Pv2D(^%M*{$JbnBdBi^sPnKivRE;>#lz< zaP#qhPvGX;Jn84wp)~o1=$j2IJON7N01Qn_0zI(UqV)*~V-dD3I}3bZgb|bZtb1ww)w^!G-w0YE+yl=UoHuFl@u9CL9vPkq)ta!J%aI#NB%V{qWuP}C z)*bk7ynHX76ZBMm%#z6q1{?I4d&9W57}aRZ1dac#mHDC&7Rk>oq`GOWY4`Jasnnbk z)MH+rsuKe-SbM66QQk}mh& z%D2b1eA^Q>m(rGRd!peYIq^-YVa1~L{mlhys`K;RtzG4qvK{onUx! zU;hi-RQ1jhuSfNhYq%a64c|790mUrTSe}66PbE~of{YBy848{U#gWs3HVk-C4lYLd zX>Q8^z((yEYywoj;I^ypqm_hD(`$fPyz;T3dL*+O?*n^ruzdrAi2`my3On4c0U|@= zWpLww2CRAT8JY9okBC)~&ra1rAV~QVeB#Vf%gXv$D}Sy4q2pl` ziSoOk>;Ym5E-YHi@lTT*ud6kf$a#KJdEX@S(7jL=p{1>H`)6YL1fJLf2(Tj?01a^u za;(;@8r_Q&kl(cQHGTo@y`S3qpxjeY6lj~jzSucXS*w+HuHk=D)+bmiRH$6bQLMns z{YXHVvy;Ow#*Rk=!r`L>3DQ!(kcmWSs%gp&W=R-fx!#(MZdlJY#-I~hNZY|5Ag?wV za{)X+VS=~Mm6$2ZHSr9SagQv^#dC!F)9r(p-s*I8#P@dgVQaipmR99fg z;;UhaPJI=rYKP9|9Kk;RT5%NAY`{f9b4oqTMAUx)Ya9DpCwx)l$K`3Xp(&ds)ERDT zLN=!k`8hS=1!y|bF$t55aN!#k8bNwk1EjC5i+&U9AZ$$1@jPN|1e2-EA^ z5??e(7@MZtU_`HqhsW;$-K&yp@Gk=oR%`%i-gsUUT55cJZNR;AtV?l+P)ljIu1!c{ zY5?32??Nlr?|m-%dv6)SahjIXjOJ^aSff9IaRrtIlvH8)yz=H`(ou!=^U6gg(orQu zoLtgP2m?>l$yVZOrli_3*?_^dS9vb>8?{tUd^t1VT{0uWxiYbl_CyO_JyWy3L;1_( zlV;k=i>9%mcI%%e$d)hO@Uw=!1wE3TF?LVxVolFbD^Wp zE~g4tBLXfBq>?1Cae1Zgo9HF{|CKdknjJ1+yON)ULLZxn+HE$(|8uhCQ&ct^9at&B z7s2wT+mX`TN%y$N1E#mI{Pfv0oxu`E>XB@er5!b;Tw6_P1}Y#_MTC!tXE%{PgG9+X zG_Ff}07sY;8X71F#zRdp+X1`Ct6jBblvIpL8J&CD<}S{NyArr>ERur1=+`S-cLX`NKt+*$eBcy04g%>}Hsd59)PznZje zMNM;Uqc^|2&9TnYUd%tN-PnIqMmdo8>_#`*nbG0sW5dxTbs3JHcq|=`?s=kUdvxZP zcE-&BUK_w}U-M(vMn@{=bEFdeQyp&bbdwm!LkeKPEBM)H$KeY((Afl#^jzyBwF0hP zpj8+4q6)y5qm{r=FnF<`dL3Ua$L9m>2{F!4GJ$f4jhQBQnhgq6uuyTan3<~;izlW* z;Vld6D?hN203&RY;jB2qJjf%Mszrca>u8E&RljdO&*1KdGCd&Ldnv*cH`avkbim>$ z9ZB8bHBPHWiGsgK12u+M;RkZ(MDZpH6!QafL49}a+5DFVU~0}HiRYa1LGK}86>lFR zz040|y=&B-h843q+WXh6?;U6_;vXsdL$tLDYqA4Fn3_GWelnPQP^oM4+0tu2 z@DS&B90Oren<067>^Gg3$|!{Rw#F?m)2MN`bq5?DOZbdNR$1yLJFWuAhPu_JSO9LI zmvn6jv%|0|o;^Zo5Poo8HS+4=@I>TM(qW^L^mhhRO=LFf9(jlJh>8hlj1PY{@<|e^ zck~fG!C^S+wSDv$`RB1>4f3XIAq@6zdI^PrkAF}Cwlp$eULd|rv2DR5IP~G$!z<=H zsl*lW;v=vmOD3Am`bLh%0~bM28@wWZDU;>$rGS8_tQ>hm!n~a~+awbbZt-B&K?Eb7 zYb#PNlgvdKESC!&iLgcMME?y$%F--(GX>BZGllR5SXp48?UesoG?pB{1LiBA$3~>Y zT%3>&_9Lt`RHt%V9HT%+cEGAQVnRA{tZ=E%gVqstW)H<4Zz7XvHL)!=GvCTkEVlj4 zj#cK$WM#&AZI+399}og?JrgFw=`1O1WVURL^4GYq_x#i~$#V5uF>BSH_QI0#mA>lY zh3x|^{G(<0V#a)UXVLV=>w6@d>lnS?u>XDo=cR{ysyKG!PX!9uI#m>M?MJ4HJEj^c zP{@Wbn6mD$GaqXRgbIms&Vqi=21@R+e8-T{6ZU{=SCu;qLqDS^lGbGo)V?d~$p`Oh zLnuZ`lq7T%%1q<*L?e>&v|zdAE=d3_>IwrjMM{$)v05JdIDa)KE;W!zcql&0`qU2# zQD>p8Xjjfw3>f&^x4fG%j;V)IlE_LC9+FD>WWL?hfve+BYjfeNI zEI&o&9>0=v6y5#r1vmcsKM>qFnPj?|CLGxA$+HrJd~AwX|HFd7$lluOS~C4;jXu$# z7KuO#at)&1r;C}1GWQ5Xm@?q&f^ePd;b zV~lM|Q@K4t~XH z+RSQ@UGyjzFdSL1kGEg5bIu(%3YgRJ;&d!-HEY4&^QpGrB^jtr!t_Bc9=k4>qT-cx zJ}4EzGJy33=@U@IsOx;eqlL7dQL_iO6e`l-LB1lMrK8w`-Ki`hn$k<3!W6VmQ{T(L zn+j*Cgl47UEjlqa$mYRnsM%$*S+g27{_R|h2AI_alT@pJ&tR!4If$|;59ThY=j3_b z14ttsI1ml$Vdx(1?-40Yu6)J3h&={Ili;6Huu77FWHci;@DpS-^CB{u@Xj{!2QuyC zllZU4x3+`JBW&fNHOI4+T@jnk*Phz9owl`;n>wyH^hLttk%y1h(QJ_-p(<i8xYSsA_-j;%Tes9^E!gwmc3^~i1wM@5Z*QO1BfNgHIT)SHS_(=PQ!kkCA z(GP`*N6v?WP-=I#$|V#HpqEdqpd50-tPQ22oCF4t15utea}(FZjeL~%W{AU9I9SU$ zgS#v@BI6C!XmBs@h)3xNeZO+1lo2jE5e%TbCUc(P4xz&pybh+VP(`O)C6(aenivj{ z__Az(MypH7mL`S+NYDliUS|wv1LW#U3=n=o|3iB-!mut90(L*dAs--K&j(Q6lnIIr z{*H6;*X_M{$H$Q3Rib?DpCzU|70dq^p#XT!$#6q?Ku$&B#6kfq8)D<}jDUKXnL3si zBG($QRgsgbY=XN80?DPElqszk}95C`qPS{l;JH zcwf-N0gCS7l^0`iOLg~R^YtsP*EEF8d{@}Mjx(?Z{6iHbdCG61I@{7xRvKgkbL zK@ZRZ4H9HR7}qGfV;#w;v@cg)j{^|qdiD@Mb5=`9A?mN z4OsVKBgKK1eaxA_^@gVaO9uEX;k#I%Y**?m+%LGb$YBP2TgKmDz_Xeq?*iv*n%%KF z!E|yoz@FNKB%x>;-*>81fSY){-)T2Wovxl~c4fCQu|H}mVLH#0SN%RnC$0G_XH;J zz#Z3QJwx!zF~x?Nd5_Q5SKHLwT(`2Yq}IP+d4sQ#e;mcv(K%z)S0w7AAAL&?OF#{4 zqDkj-N=>wwb9DJXBZ>CSL|PW`xwi8nq?J=tV)&+g|C#B>|6lpRCy$vpU$!6p2t+M3 zWJ;Jo3|?G!!eU9Curuw1^|B22q5*P#pVi#nOmJQ72tnh?G#rX zT`<0MQi+FRiZWFw=#4F&I>m)va^m`_*LbvoQkjHu&k>GSNg{P63b{zW%JFL`e+-ld zHX380hdf(FPfS^%RWvEQt@Hcs$EU1htF}p;Gi_(DzMxX!7Fkefx-u5CGGRqE(Tb{_ z5Vo=k#S~Uw@NKhbs}HZKDC)#t5?f=!k~%SR1*kQ@i5b~!`pd-N6~`CyKfbvB^SLX*DiV%R#TQ;<1=tEMEgUPizbSWx|2(sceCJB- zEL)33uiyh9T#uqx+HF_;ffmkT_9NQ&GNNi13BWiGx>twaGx)7CU1AswWVBaAF&B0uTO_z*&lZ0fUClLB-Un3|H)S`qw#~@SNLBZ4e_U1V7Pc^IW8S|a7-qD>Q zcRCC3D!u>~Fn%p~IIZF*Pi5eptGG3?TfLTKIRn~S0HrPfD$mwQh$DD*$4RNvq0M_5 zMqDEYlkZLZKr+6C$OgQ?^mr+3Y%+4wYjdCfLpWu6&Ra3=iv+IZ&_zP^7Rggv@2r~T z?H*{XD(&d-@lTdr1REF)Ta}6=H4O^8z8-<;xN_RRiX#ZeC5#=9y7U0D)qjtJvaC}O zs*q0w3JXD=?W)@4I%7p5Su}u~<98gSTEE-ziUDP#JuO{%KDLmsJmT;WRAlu!8aZv` zY#JUfR_=?d0AQ}Cq0}JK-U$%h#k(y+EUbMkIR>HM&QA&|7}@5W$Dspo20%FfOj3R& z3s#rq8Dt#*65N)AF%?i)-&sN|x;c3N!rw|+Vz4B{N|;VC{27HE!F_io+lZTn4r_!poVT4NVaOKt}QsBBX(O}$FW!sUo)HI$;s1`=ybGvT(`2>=;!FHEX&8uZInn8EqH zc7aljc28i+{QBrS+y6k~Z7K*n+HPCKT8c2AHV8Aw1)T0|a@i*RSK>_f@%C|-T&8~#Ck&iUbcxdy zQ2#1b*_=GCfT}NPqPv~g8jP0J#wTJDL|b$_#xLG}-Od8@B@ILiLW?e`jv{MyaT=oI z(D_qwV?3(q()xB6*o+JkVE|U$K&`O8mSX_tArB^}6&ozdmNg*W zkY*MP1J#MF#w8a5j3Uwv))-x>W()vZU3$$6~iwl@C!KK zwF}Jcz?W(SQg+k``td@I0Lo%ct-zJ?#+Pe_P0h6n1!GE4odEJfPyexCQ{LS{3wSxG z?!ZqUTpZsTz>ea}DUO)5HoW)gBz!z-CTBd|--6A}qv$^x{s!PD79* z3N>f`G)}&NQ(YH}l^Cd%T2Y_ilYxR`Fdb}PqzmD5BWFJKx4a8MJl+oe@lB73laav; z*d75se<2P-zj!wqHgVhaD&p1P{KB{fU|drL&1z5*3+basW|tM56g+4h6ZeY!tZU!* z!E7eM!^cKs9|F+iQczxlSHZ3q3pNU)@Jwz_DIdC3!l=}ioQiJ(MR>rS2g#}zJI1Rp z!6OJWa|IZ|j1YvXD$kq&Qvi4}Qh9E>#QZyAI0yS7a#g$gt^;Fq;5wmo6|s8Xks7;} ztz7C{*}B--nBVEEmFS#^sN?x-D_3~WqY{Mm4be}uu{lh zK|aYVgsWEwQWf&Wn(K(n1pO1$&E$-PL?*nzl?GN^;DGL^IoZWRb{vHLqz|4T(WGaA4QB!6};B?ja#d?%` zc({f*pM1A~D5^j%HXsV=gg6e%?3Pyb^;CQ>+QWRjO|bfdJ_Aq-KVKP~w4<7vWo!-3 zLl(^ICcp_mMifcRG8R>{YK7`tY%_TK#DogoA@AW2#rrTI?Cw|IlFWPUM2_hK*9W_~ zKk;RWc&=~`bc)NxLxYcSJwvDEV!@+nI<{oelbtD4)r&6MX=Fk#)_`^Y-iBfRN&^On zt%H4Xjh*E(VUbvX@27lE&PfCw<#k$C$Of9Ch7KoTv!Grlbb;}9w^_z`bby#xS4jOm z#dUQp#qGt*)vDrpUmySUoC^e$A}+wNV?mz-!jS=C4xIW2go($_0fB2$<|weeQNe_M zEMqL#+oPHdSmR(;fT3bf{fv~&aiGn%Its+og*G)fBzU?L?~o)6i7StS2-(6fWwcw6 zwSkZgqJ{*n!D$KYsfggBDXCM;lAKV4{|#CwU$0li1Ff8CsDPM+xI17vML=M+#NfeW zq*m}rg>Yh8-;dIb_(EM)rQay{0+twK(6%G7i~6ch&??yBnT-B=dI`lsX3^rB1)M zs$gYXPn*BEVtL`>b&L1|SVuRGRXUAfU&@K%(=df*O6MuT8@T+P_iq}XeOp!Yk6E;Q zi~j0=hegZzy5}Yv-7;q(+|jIR>9CdFN@Nb*bd$&@;?23x zA2Rj?RI;via7M8M02{_^h*Y~oTftvuv{sO4_|u!PXZUFS#ElBtuhUAakH4RvF@~$m zOrj?RivnLRX5#iQ;}x>2W@flunEPtr5$WN=UOsN4ZVrj{jCN3BsOrdg7&-Dd(Yx@8 zNgzIB5vt+$FF)Y{BbbGzUot!$wV9B}bmUDb1TP2*uP{92%*-nxI0Op;&FLt;fLBrX zjY%Q&=M2{Zohps-JOME!7YHJLz;O9y>@cAMf=Fm2De}PGAa6I$l&@zrW>U&zUm)b= z@|Tc_1$pE0aVBbvJ8aFi^D=Ph!JDPX?1agf|MgGo=_|92Q;E;AJDv&;*DA9Q0pQi{ zA8YI#*SMBb<>R=9hHLl91NAO-AiuiK=X5U4&#x}vpBdaR9Ay4h`S~TeENEz@rsoXR z+4fn<-%9tC-yESxZWV^M%GJZ$WD_Y}uM_6LR{lC+;<58OfxLkBWmN95<0|4d!a9jc zBJ^D_fN_QPrBMVS>L18WVQhN|=R1HnKGAT+`BADZ0~DETe07)R9DEP7(uUw@A>>K; z%%J@v*g#X?R~LY~-bT5L!E*8HT?Dx>dlzguG-e}i6{A){jE*G;8@SG1!G|uUrs^U+ zsA7uaov3JCz49KF<7sd1foKUDbMl;EMRMa3KgOK@2%qHGvm$vdg?P5-;?? z@x;j2UL5!O!3^zE%+Pk7%!(Y0%+aQ{K0jeyzxd~aH=5=xTBaE`G{wYRy1MSQ>PsqO z1cxEMZSd9J7%{)8(v-T(6!UcLlgp)smW&uKb+LcnH5v`64xkaCZxt>-H}xo zn~^2P#Js;@>#gQD?})iKY5TmS&9?0^PhM!)pSATgKBh{@O)wjt{AJAVQik}XnAVJ# zeJ?u`ud-MhV$fGNi=6sFOyE*erO?nM#TYJ{b?dwhQBq7Ww>AmNsQEGTlcG)Ew;oQ3 znP*MfC|bCv7!Lo)I4wBOz?p$F8)p&Dx#6=K|6PJ}CC)aS-8cg{k^9MAj&n24VVt+& zybI@p;d3wk`wY%s<9q|>2+j|2#&Lh_yu6Z27j;XSoNm-X-OkpW`2kqWxZLwW>+M;< z+-CBxemeS{DEt+Ur+?MF|HSflV{$oDba-A;z<({nbN^N|XBLc!!mRn`)8luTzqD}Q zF(*|QmG&=O8z?F+4)pli7R+++9&E?)J2EaYb0+gyT#5M{(~oDpZsHQosi>%FDqXf@ zR)0rxZec}T#ae!yINQK&T=2WJ3xukL<~fEBTXrTUUnA6%nv;^Qbzf`YOrr5FuGV~d z(mfma-{aexlZ3h|bF%6Bt^C`jij&9Cc&A?mqd&8h zo?g*+5_*Ss`q{SV7tT3d=y#j1w*G2o^dU1Ri|J;w>7j?CUy0*q9qmZOXP$$z31=71 zEjV}M+=uhGIFI3s!<~_Va}G`o=T$f#!1)}`gE+s!nSopA9GuH=UWoH{oWI2RKF$=p i2A>i 58930 bytes +2024/05/31-12:57:42.318551 7f20a5a006c0 compacted to: files[ 0 1 0 0 0 0 0 ] +2024/05/31-12:57:42.318708 7f20a5a006c0 Delete type=2 #5 +2024/05/31-12:57:42.318989 7f20a5a006c0 Manual compaction at level-0 from '!items!zMiaz2HLsddO22H3' @ 99 : 1 .. '!items!zMiaz2HLsddO22H3' @ 0 : 0; will stop at (end) diff --git a/packs/gears/LOG.old b/packs/gears/LOG.old new file mode 100644 index 0000000..3524d9e --- /dev/null +++ b/packs/gears/LOG.old @@ -0,0 +1,5 @@ +2024/05/31-12:36:59.694104 7f04c4c006c0 Recovering log #3 +2024/05/31-12:36:59.695341 7f04c4c006c0 Level-0 table #5: started +2024/05/31-12:37:00.103755 7f04c4c006c0 Level-0 table #5: 87512 bytes OK +2024/05/31-12:37:00.158532 7f04c4c006c0 Delete type=0 #3 +2024/05/31-12:37:00.158786 7f04c4c006c0 Delete type=3 #2 diff --git a/packs/gears/MANIFEST-000007 b/packs/gears/MANIFEST-000007 new file mode 100644 index 0000000000000000000000000000000000000000..84f52d159cfae3f20bb8cbd657efc0e78b0a327f GIT binary patch literal 260 zcmX>o_y6c{@`{-yskz09 zhVEI$jv=05mD!b!fu?CLj42FY0F$rs%}lH^^6)86N%1!_@-SvhhRFXfTp`HGz{teG z$-vCXa*Q!E>~#r<&k5vn1NqsG3vQM``8+^AD+3`D*%(;a8M!x|VTLIr*=ffhP6Gh8 C=tBnp literal 0 HcmV?d00001 diff --git a/packs/genelines/000009.log b/packs/genelines/000009.log new file mode 100644 index 0000000..e69de29 diff --git a/packs/genelines/000011.ldb b/packs/genelines/000011.ldb new file mode 100644 index 0000000000000000000000000000000000000000..dac98bf004ba4773755be135ec1339eb8f6aaf70 GIT binary patch literal 7865 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 literal 0 HcmV?d00001 diff --git a/packs/genelines/CURRENT b/packs/genelines/CURRENT new file mode 100644 index 0000000..875cf23 --- /dev/null +++ b/packs/genelines/CURRENT @@ -0,0 +1 @@ +MANIFEST-000007 diff --git a/packs/genelines/LOCK b/packs/genelines/LOCK new file mode 100644 index 0000000..e69de29 diff --git a/packs/genelines/LOG b/packs/genelines/LOG new file mode 100644 index 0000000..7e7e752 --- /dev/null +++ b/packs/genelines/LOG @@ -0,0 +1,13 @@ +2024/05/31-12:37:50.295525 7f20a7e006c0 Recovering log #6 +2024/05/31-12:37:50.344755 7f20a7e006c0 Delete type=0 #6 +2024/05/31-12:37:50.344847 7f20a7e006c0 Delete type=3 #4 +2024/05/31-12:57:42.332388 7f20a5a006c0 Level-0 table #10: started +2024/05/31-12:57:42.332415 7f20a5a006c0 Level-0 table #10: 0 bytes OK +2024/05/31-12:57:42.338850 7f20a5a006c0 Delete type=0 #8 +2024/05/31-12:57:42.365997 7f20a5a006c0 Manual compaction at level-0 from '!items!3o49zG4Xtc1I29j2' @ 72057594037927935 : 1 .. '!items!vDOAmovqE53dQzlh' @ 0 : 0; will stop at '!items!vDOAmovqE53dQzlh' @ 8 : 1 +2024/05/31-12:57:42.366005 7f20a5a006c0 Compacting 1@0 + 0@1 files +2024/05/31-12:57:42.369253 7f20a5a006c0 Generated table #11@0: 8 keys, 7865 bytes +2024/05/31-12:57:42.369293 7f20a5a006c0 Compacted 1@0 + 0@1 files => 7865 bytes +2024/05/31-12:57:42.376725 7f20a5a006c0 compacted to: files[ 0 1 0 0 0 0 0 ] +2024/05/31-12:57:42.376841 7f20a5a006c0 Delete type=2 #5 +2024/05/31-12:57:42.386385 7f20a5a006c0 Manual compaction at level-0 from '!items!vDOAmovqE53dQzlh' @ 8 : 1 .. '!items!vDOAmovqE53dQzlh' @ 0 : 0; will stop at (end) diff --git a/packs/genelines/LOG.old b/packs/genelines/LOG.old new file mode 100644 index 0000000..3f57dfe --- /dev/null +++ b/packs/genelines/LOG.old @@ -0,0 +1,5 @@ +2024/05/31-12:37:00.409789 7f04bfe006c0 Recovering log #3 +2024/05/31-12:37:00.410672 7f04bfe006c0 Level-0 table #5: started +2024/05/31-12:37:00.432255 7f04bfe006c0 Level-0 table #5: 11820 bytes OK +2024/05/31-12:37:00.469946 7f04bfe006c0 Delete type=0 #3 +2024/05/31-12:37:00.470035 7f04bfe006c0 Delete type=3 #2 diff --git a/packs/genelines/MANIFEST-000007 b/packs/genelines/MANIFEST-000007 new file mode 100644 index 0000000000000000000000000000000000000000..fac1d0631dbf5fb8121d259cd6206eb9b6fe9970 GIT binary patch literal 255 zcmZQz>DEkSU}TiaNi9pwNlDUksw_z@&n!-L&d)7KEJ`fNFJfn4T@xd(m|2pVTdZiD zZ(>>HZW2+FZ0KoZnPtSt$p8j0`7#%O$K3p~LRVAcl)$Q-3`P!!{FGESGY$quCJs&p yW=<9X8~Gjq5SJ6k5aCFmq{{7hE8VEnMuG03i0BKupEUSeFE!O3M?zHHWlzeKm4f@ zRgk!TflmsHUO76bs`Hfq>y;wPd})xA=PQ!10RC_R?~z1hfwrOO3O^@uGVdu?29b9O z=kswM72fbimzfH#P*fJ_m#-}FNHW*W$qFxt@CoM9;o~7jlma?l& znPbRAdssRDmhwPJCEOD)r+8#Oq-y_6FAmk1Z+z9lbOtz?VTIl>4(Q0;|Z`b>rpuw74H=1%E~}kTBI`EPzde|yvoF|qL<;-3l&D-d@2L) z%P4quI4^@{<;fg3$O>T=nJ5>n@G3GCNn$a4Jg+dknExYM;S_4NQDtR6hnmr&n;1L~ z+(4KUJshJ(Bu3$2ns}Axl;Xt;LN&`pxP-Z)TL~>f(+dmW=J+JR%gN>|X+@Irt9!1V zmivXKBG^#X)Y;He*4F8d`bwHmmHk-_vC{QmZXM_51zycR5r3E*f0*QIYaSwqg81`f za*RJu(w>rqEzgseY-B8q9X>nCL{`rkVuEZx2j>h|$jb0}j4CmHiIGGTqp+cn^=(2e zevxe6UkGFy?qo>-oAk>{s|hnB9~FZUN0wZYtjoG zJ9yh43D5R+I>4*;;l(WDhEw&j!!Qj#Sqj>>(jk@~zJMa?D06WkMX=ini0E#Ha^6c- zb(HwbthK9*^V%A#2HMfW%9}|zm)@IAjgp`;l8n_RbB4(asytWZcuIPD`h*7#r5>;RT)LF zOkq*Nty??c`LMzXoT4ycQRM}ge1Y>e zKbaSjVOff*V*hmH4t<0b`m;XDKsL052}+6z{|$214{3l0!~TpMRd3`6Ii@4$p$vW0 z!qghJWaN2Rp_r))%hav3h3TRO3WMwl33g6c_8a!o*|4~L{LqeHQ*HFwUueP&9etGx zxf0do39+rMXp!q=^MC~w%aeKl!XW#o(FVIUVkpRm_LsM;KMNh3II9HZ?y24;d;6w#8*n0 z$A3!Y5%3S;Bcq`}bA3Jl_!>?#60xU8s9h6xjy7D?gaMdZ}6p@^gvz|DE&CAYLC=!J0$QiM?iHi(g4mF!hl zou-l$jVO$d^>BDA0)hgU*d2Ni-rCL^l_1B;D5ntKL-I1f)*_W(2skFH#Y{(lYyNS7 zW#*SMz?-a~MllxG0xa`NkY!kp^#zjxf0pEps70HR%O&<2i_UYxW=rhjATOr28z)nC z8aA8#>7pszvg#n|+(gwnniejrSmCX-_H-}pQA<#b>)>r~5Y22!d4LD9YYPaRTT-Rq z>fgmDH2WtsBiGbChUw&#COO7WX*3=)I%)g6re!m793>)SzFZ(mc92sl-yq?kq`-wc zo-oY~dRZl~h=t#%vD^|KF4TcZRgsuMt4|L=XR?2Yx30{ccaA<7_5@~>(mU)Cn{l@I#|m4Fah*gAkNwfu%; z+N4kj0M#Ci%hVB>a_q8<5b<4Pava}9(&hqF{VsB0%<@K z{vucqSQ;eQKkVsuOq7RM8BQTAu(A+k2Istr&hlB)XjWt=j^x35l)^xF*30vNq=T%V zV+;yi1R~7K!HQRS2whF}Gk~QP%Pfb;(A@F4`x_bFa$G8rFe;49{Lb*S|}R>@~vva&yfe5vHt{Y3tnti!P;s z%tudV!)}u$C1)bDV7<;51o;@ST%#k*#n^vM z8QI|1?l?}KArqPZapg(u2DVMQfx3aEWfcQMLyk&oQ+LqJBiq-=#CwKJY9-MVRuXDF z=?AjEgG)mHRxV*q8v^Q{TY^ z+gCjRU^UuV2g@{q5iCJG2~|O5=&|OTQN0#h2uwUlwFmnl3Z@2r1Dh7SfB@K_%2DJf zf+gjVLSR97RU0HC`R^A3W>4AzUZZemEdvGs`vUbsZRRHI_?RNFF^O$GZ>mlBrY|Tu z!)*ogA5R#AdQ5I7G!1O)Ky$ydr?xlL(d)IlQLX)@u0vSt9?D+EgX;6f50X>IhJ%>c z%q<7WdDlDkVM2;9{UQh{$A!iSynwOZu919|FOi`HGckU+4GLpsd|U+Xg0+oFE_mzp zJyR%&N$v|Q09kfPZi{ctx_s8I24@J>xmItf zU|PYJL;{=;j0efLg5=0+M1v(^V_KA!rY$Kn9x7~McJ$_IP072X3H1kKck zq>wVoF2uyz~_r z(1T^bjtP9@pP<^h%j%s6&%j6uGS3l27}%ROv;P) z1BQtVl$&*yE>{LgfK|a8Gzd91g9fQn{1(YzhHK*>A;|LUTz@Qnh0N-t|d9uQA*m^Wtwkv z{ASC;)qXfp4{U15=fi|9s{z4Q8e2Yv6S#QBW zriN8f^+nIX*|M@hXNYYlN?k{Hb=&t`be685jgFtI>pNF>2JuhL{N$cB7XaeFJ&E|O z-e{<=bYWv{m7{^Rwhf_%Z%6#pGHd6tG{yyE?*b-c;!PNl1NoxU!(E=O@Z%dfSvtKnwT0N zZAh?$+<7&9_Hk-O?@&WsWrM@)?(;3{YeNqEXT6`pX6pUi*ucpmuYD)aE~+xi3rZZN zO&#~5G}>HJ(1_9+e~L;o(hAiCnF7;^Tt;@1&cf63Shp7kASUY_MhRHNZ-0T{=D%g# zROb#0py+@^ieyv{e=#WP1o810!9YH)`kXY`MK7=jPRqdg9E+bM zH=M*U{lv7k%5G0xYeTRF$fm8ewg)v9e)P>J{>{#^RhvEjLNVnsf0drr%oHu;8kwS)qx@64RNS`8=9vS_Ve zW+$D!bv^d=U~v+@KI`wa?@u(${!z*$x3#vp8wdQo4Gr~u{s?lq=FWOaSJZ*&6h0gC z!E|zbI+@k4Pe!08bn(O(KLO(3T-x#{a0I3AQCT}S=VpmKow#ULU`( z#6MWkU>`=!uFo6;SbCgCG#k#!C`?9*j7{Lti{QiGGfW-#zGvwEh_3%B0>zb3U~?Pk z(TYOs3L!5AWjE1j-An`wA=;R*=$3hD8pb{EXl_cx88#S;?<1)zh+^B$X{ZA`nr*k9 zx7ZLiY`orZhT3lV$Ld?2#>v=eGt)lctaK`VVX33XUD{gShg!ZyZBvr54v79$rUP%Y z6u15VWbB`pH`YLTW8pWr?UGyWpOQa$pmqU(gwwHarcX-#jw?ZK0u5m@OW+GU0FQ&S z1$5S@4`TcR9O7i4KgdL}aAUz;e-~9bL>1nEheA>Ul~u@rrv_5VXeyOS;V1uDD3u7c z{t0X08psrP1J$NEuWO+2VaNXFcbblYE|=L{9gGeRl=S(l9jNuRztPw6ike@T-vyd+ z>bUa|Nqb8wTMl7ieh6XX zC~$YN3`f(KK+cUTJ3-j$JZNkoiWVDH%)DEJB;+ieRpIVIhfnSax|%%UmH=w23??`! z$k>MhFcDBKi}#aL$A*4vz^YpM$%>mCd^2mk5UL$MwbDY_Z_;qyk+TWTyvJyQe4dTX zUW{!eD?`mj5)*QTT1-O?X7yn`oMOZ}oLNK!^G}+tD4v?iBEc8q6e3DTW2wBuyb1bG_d+J$V{K)=@`w6#^BcGu^#Ud^a> z;u=S5C#2>Iq@s-a@Q5lXSV`5Y|R-P|NBg zR`-x+MXSwKwM^=CpbpE+WKk_Pp1@HJtQhyxNBp$?g_?(n_zPrm9C-mY3J~J~s`vrq z*gxw!n()kd_VNQ{5vDB&HsI9M*q%bz7qEpu6e&n&=%*P`f{GBwimG8f4GRzJWE)h5 zwq?Th0YQW#^^uq!mr!#)q6yYeX2^wf4PK%c9?LY88{qO#gAuecqsIP*2D6i;DCF1h ziXqED2$jD%lXuqdr?7r8=(Ham&pbm(ryl>EcWWU~(&y=^Vol$&lG2DI*juAwiMXP> z5_Nu!k}&(Es_o4%(NG~(WqR zIbEtuR82sVW75Jpds%=7_CgTFCgL=V(0ENk)a+%V93(CZJBWNVY!j4cbaPQjMEBne zV3Mem1C;te@xrDRVM%&<50AHE2fUSvs#5r4T|)iJh#@kXX)H?AC|DnympS_soQ%@Y=XGk}Um8AF88&=Y9X5P7rVq85d&;e0zHLD5Y*vG) zi(41{85Zh4%WD<6`5=9{_}a9oSh2i`xADCnxBXL5r%qxF?&UWz(YclfDb71Fmf1fF@F}JSntGzX2U`7sGQMYFX;rYfsS0&h7NmjZhW{}| z`MLN7X;a5T7o-uTmtT-J?`FR6&^9B;Sxz3|?Qau`{p0N~h8NKABEE^cAhxF{nGz>N z+Soj{bl(LNB%09)a*T^4MV1d{UP%-HP1K@b4eF%9cE4xN1sDYn89?W2%df5}#07ZF z_z(`4Vsj^`0cqk&J$njphcwSMl4zZEkA>EgP`SIH!I`)69<2fp423d6%0#_6%bV22SZVh~q;0`B4_ZJryK>!FS0P1nARa%h}@ zCK%uXP5|}k_?sSQAO^j*=S-%F3!G=tziTrf$=!E0p%l;18WRLwZ_v`P?Pkkbq?>z4 zyBnoDpQ7AKmtqTaE-Q^zgiCuI0o3E#uK96;sG}jjF#L|zheHf&sL>LV!Kp~N?c*$;R-^PA zcG7u(PS74CDXU*Xi}I2_JuDjB`q&@A6*^SI?{#$?B%&c%^5NzRND(3TH+-ZwoM&Kj zkj3(ZHdVyzHf%L8lf6J}&NW&ZHvR6yr1O-<(-cvbvK6u#sP($cbz#(7c{m}#4&yo( z2j#Vh7~e#VZ=wu_48!}=<2R_b^V+M{M~WqlwwvomwxH9 z1wgjHnT$5Q&fbQq6;ZRd&FSmtscJ`k-%hrjSVaKP;g*i?OSb>ka@Kz<-29=~_Me2C zz_v@0Y3xpH>dJTYy~k|!)%9e7=^7L7KnIHY725%CL)1z^gF;rgM>V!s=D>QZR6hhzna-GIz}lrAM9SjXFK=yRdvuDy;+0kxicpj>95*$I*}C4_qfJxmPAI7jzf+C9E<)5CN@VO=kVb#DYxWaB~8n zQtXMbPoWmc&rL}u*!$3)2fK4>CDOVeJK3+e<8f@8?n`$nWmSVwTW@7YsVaNQ&}FX2 zW-X-4Q$>q0L5WKZ6fzQG&5*j!`RLCF~C}ztingDCr zL=)2Xw{l^U2PI(;@iTq#t@OQHY3Jiqpvl)4c3G{F6@AU&kPv^f!PtG%>M{ ztT$(at%8(pv|KNQgCTy7Z7-Pzw3w*%&3=&P&joGc;~5&f?pWWtmq-n};*((=bTT-1 zQvH5TaY(go;U+uR?DH>0SGZm}G_9lqN~i*~14A_zVu$VI_;zw%I_@A$Pfw1w($h82 z)Rdl%i+QgeqV&*IBO2CBpL-Ks|2heo0_*KP5PP^Tp|A$S0(9xl2iXi_d-cM7nRcz? znAm6-zFik@G5A`hB!qw7d&h&n#_bNzOfp1&pwVNiwf9=2CJEw5RmCPD5+o*0 zaB+bYo^}|Qe~lte7pjrJ0c*Oig@tI%@~>otselG|3ZT46dqZt3Ny29;n6@@8{+DLQ zJe**OcFYpjQNfB5=RkF9&{o^9tS{i|K&<^p@9X-d5PqOn=2XUyktdFkiAGuy9>aL+ z7>S|v7;dD6cGb@I=g2Fua>uxtva+dy5YVLk;3jwu`g$3k5azMY!wn#~EhNzZ2K)-G zBd1$ERvT~!xc%Dlq%{S6wc#?4wJ0~$zh-|qcd`ZHMXa=T-$y#vQetVnKiXaAQrt^h z8m!(%Geji*G&%k>8NZrJj{R3t5GYo*#1c&LKwHAP z;XW&7N(KC~?(GrCji6A^c*3e`g}y?lS1Q2ck=1`OCLDNdEt;hXaIxR$fe?y)o5`77 zL>-z}xs}vJqz@k@ozGEHWlOlWwxik6=&g3uHkTrg>(N;SbY6!L_WOAy5MM)%uOYJv z=$Z$Jcs-RIN9rkv%nE4peU5umJ-e41baZwykR4e>2sfNECR(dw`Dk|cJX((nYdP<0 zH6~^@L&rQC)@RtIbv>?;xexxTXH-6T?Zvb)0hIAVdUql1ynzZ01p9h@jjeUH{ua5a zwgY)<-X!x)@gwAkBV^6}1UyKNBS&yLT;8&hnsaxyg{gyrja4NghHV)if1J|;C7J+h zIGmyJsUu4qPh=;(=GY#BW79bOsskBDJ1$Sg4#Z>R?ilI(SR+>qcYB52!J+1^r5sx# zAr4+}1q6@WrAr!5XJw!~7efpF(I%wJ{ zt%i;YeWIQ2v5Yg}S!DV4b*u9Lt#6w|Yh`IiLv_#6sD0V8HV?D{As?W%^E6s_gjgk* zg6iqt5tOxmf2bb%4yZ=mmizxtf%?P`1Js@pXf6HP_f+QGooY*)tVm!$PQt`#G>+g% z5_&G7At*inmF1_q)~0r$0sc~pcj7N^Ol=dIwA9}!&`VM^!c^<=|wexJ5Z2)V9_(AU`aeu2Ew>7!fr-N}d=^Y`#$v9>X{? zN1lEnj{9_p+!+~p|OW0{D~ zC4BiOSM4VACR-_Pe~#2%Vf!ECiQT00J!-JWU&hx-Wq}oJRasqA7zOOl_3kdWdOXl> zfct70*rn)04dgwC$P9Kr`^<+cfr9w50AUrHVC?mILCwDPo2(L>AEwafxkX>X9!Z$Fu%sGUKJ0~-s z#~~uhAFH4`^|)D<>IgxI;F~0FH>=>35NAQKE})UPcsY>`{Skgpx0gZ4&IHhfW8Jxs z9zo4q9n))~#j(d9*+V%uP?1QrwY$>oUKXwHZs=L+K)eN|6?JgHL|zt3O3TLb<6n>` zz94HJA>cuB9Qgv{V^zx+q~#&x_^dpM(y6Aeu>Bceh{nH>1|MzxtH#6adV_}knTnGm zf29E`IVw95j}&JeqjO%Rjfv(#>wnl8nkf>XAGqWzZH{P>o`rU4!?iRGi`TKk2nBUk z(Ee!m4zg`0HPq*wP5T;EytAM$)VK)$el05MwiEA29lF9Mb zlR)id?N5@IJm7e|el2Cft!SWo5@pj73q*F8>oJwbo;HTzhM7h-LUr6=*6BeY`3y64 zMo4i)F6Sy5zQ7Vqq{>hNdAk~dBG6Je$O2O`$jy$>8YWzjtIHuXvvCP#$XVP0+ zi_Vk`v~gC)$yvYDC3^8*o06(5A6#(wn#Zro-#qK_&DH&fAKtqD?)0DL7v|?ba_I%> zFYOr{CeHWj(`UZ({6*^?S-H;e*v0o>y69lKM%VD?4KFc&NZ)w>)308q{`ArGH3zb0 zADk69Cmny2#R$haa1_8%3dbTi>fmUGLq}Y@^~DQ_f;1m5fQKy>AmA3f?qXXQe&$6i zA%pdar%JblM0i2sdojd|3bXNEvV<_Er7A58(U)43O+2e3W@s{Vh`O0)XOHO)=n3PD zT%vJCF@1aP$LB53w0F(O)n8M1B=ejFM9++~vyYl@&m_*DQQz>*qzfii|4GgJhI8iD zebd-bbBx5%=6m$; 14817 bytes +2024/05/31-12:57:42.298878 7f20a5a006c0 compacted to: files[ 0 1 0 0 0 0 0 ] +2024/05/31-12:57:42.298975 7f20a5a006c0 Delete type=2 #5 +2024/05/31-12:57:42.318947 7f20a5a006c0 Manual compaction at level-0 from '!items!xZL7aO0xOOZvB2cs' @ 53 : 1 .. '!items!xZL7aO0xOOZvB2cs' @ 0 : 0; will stop at (end) diff --git a/packs/injuries/LOG.old b/packs/injuries/LOG.old new file mode 100644 index 0000000..7f14182 --- /dev/null +++ b/packs/injuries/LOG.old @@ -0,0 +1,5 @@ +2024/05/31-12:37:00.162792 7f04c56006c0 Recovering log #3 +2024/05/31-12:37:00.163468 7f04c56006c0 Level-0 table #5: started +2024/05/31-12:37:00.172845 7f04c56006c0 Level-0 table #5: 21537 bytes OK +2024/05/31-12:37:00.220464 7f04c56006c0 Delete type=0 #3 +2024/05/31-12:37:00.220541 7f04c56006c0 Delete type=3 #2 diff --git a/packs/injuries/MANIFEST-000007 b/packs/injuries/MANIFEST-000007 new file mode 100644 index 0000000000000000000000000000000000000000..f14b50ce9438eeee58cacd004b180ff2d344ed9c GIT binary patch literal 256 zcmd0w)XSU1z{n_-lUkOVlai$8R9TW*o>`pgoS$2eSd>_jU&PM9x^M-fykcfaYHqQj zQB-K2w|Q=sXKH3uep09}qZtDjz~n2Ue9RO54J!Qoqsp9&l8YHlA@T~AIeZ)pj7%Jy z49uJ?SsAaNT7bBmKrS~+mT$Avry?kqhb4=Zfsk=*46N*o+z*Rk>PU807Q|TqBEdie literal 0 HcmV?d00001 diff --git a/packs/languages/000009.log b/packs/languages/000009.log new file mode 100644 index 0000000..e69de29 diff --git a/packs/languages/000011.ldb b/packs/languages/000011.ldb new file mode 100644 index 0000000000000000000000000000000000000000..164ac4c0407b2d7855a317e1a420762451d4bd66 GIT binary patch literal 1725 zcmd6nO-y4|6oB9L4Z}18N$V7-!U*$}M3eGUpujw_kqZ51D5WjX(ctZS_r2cw{&+u> zLP%T~W1<`5X12ruf~(Pl0cNEOHxp+PC?O_p)EG1qW#NLwjOlngNKJ^*g)Y1~CpqWc zb572AIp2NMW>T$N^c8F(*|^d@4yPls2jg6?I1}!V13Og%l1q#NWyG*d+*0x|iy1d# z7B%2lkf0)3P(Q%wnEY>}J;}7rB}>ObFUvUt%~_ zM`@%RSXIcir>C>G$IH0uKWGV)aK(}&hrQt?TSFVCBWNN%iNVjdOHNtkv4H!XlwE>` zIacpF=Px=EL!2sWNa3+1PpX#AA&0Atw=@ZJB(<}N`kV}=7D$Ii4r^pihDQRlB$Hvg z-HaBAg|gP*l;lqrh3Q})!}cz_>%XwMod&04&8+zzthJE>f-3PycNiB8RR_`OOxrI%e&y=F7Vx?h*6dNE{JW@;kogmq$MV_nLw^T zc5NIy&F%tM1kOVR8Sta>D*a%U_N`OpeNdJBK8S765g}3V%JFnAw2)B4atvHz_kq)o z6cI}0b^75t?OUVDB~X=o3B>Nuaew%&L>^Dg=QASoPUe7Zk}@B&}r(Dm>J&QeLb%UaUFuH?#Yog(3%3^p(={ zft5x=(r2e6Az4!wwTKsv_{Y-|>L7TAko0Pmq$%qUi0b|kqKW?$BE+uzTZn%Azd>}H z7BrYdW;D<@<4KABs0f~IzjyV%Ygi|*6~~nKz^{A2w@MMCD%m{{ztHp*y%_O!d*_UB zLF#=i9LRv?6OhQF{Rt8!umq)3CdeAS$P8(|fQ}R{*Y@F|eW*+GG5H-jc9)j5zJY9N zlE?n(fuQK004?lKz?LZQ(8oJ;rG-OKl{<$ZcAGAsV861!hft^w37C*|nLPx~Akt;1 zkkI49C!L?B9UX$Y%F~wLrU}doS#30zd%&Ks34-0i*|efeWr4W6$AIEh}QHk(7=Q4B3$$wYdmgyxaNXFL5C z@v-8UR8eFwxn<@J#2OM~Oa;PuQQ?_%=seAYQt(r 1725 bytes +2024/05/31-12:57:42.386148 7f20a5a006c0 compacted to: files[ 0 1 0 0 0 0 0 ] +2024/05/31-12:57:42.386245 7f20a5a006c0 Delete type=2 #5 +2024/05/31-12:57:42.386396 7f20a5a006c0 Manual compaction at level-0 from '!items!xbpEhhdqx4o5KUJA' @ 15 : 1 .. '!items!xbpEhhdqx4o5KUJA' @ 0 : 0; will stop at (end) diff --git a/packs/languages/LOG.old b/packs/languages/LOG.old new file mode 100644 index 0000000..dc1eed3 --- /dev/null +++ b/packs/languages/LOG.old @@ -0,0 +1,5 @@ +2024/05/31-12:37:00.283664 7f04bf4006c0 Recovering log #3 +2024/05/31-12:37:00.285227 7f04bf4006c0 Level-0 table #5: started +2024/05/31-12:37:00.295941 7f04bf4006c0 Level-0 table #5: 2524 bytes OK +2024/05/31-12:37:00.342228 7f04bf4006c0 Delete type=0 #3 +2024/05/31-12:37:00.342291 7f04bf4006c0 Delete type=3 #2 diff --git a/packs/languages/MANIFEST-000007 b/packs/languages/MANIFEST-000007 new file mode 100644 index 0000000000000000000000000000000000000000..0e13b15896fd840f7841867e55940578cf944ec6 GIT binary patch literal 255 zcmb=~U3e#vfss)vC$%g!CnZVGsj?)sJhM2}IX|}`u_&=5zlfcI^^UN-VrEHdZn2_) ze`17Ju3=_ohH-kNr&$1_00S7nGw<0&zKkTy7S*NusP%i=bQ{7CBZ1LdLN%u(C69@8yN5BiUJU5N81ZY27_< literal 0 HcmV?d00001 diff --git a/packs/skills/000009.log b/packs/skills/000009.log new file mode 100644 index 0000000..e69de29 diff --git a/packs/skills/000011.ldb b/packs/skills/000011.ldb new file mode 100644 index 0000000000000000000000000000000000000000..315e21b1cd28adda55a02261d6a1ed8a9d321dab GIT binary patch literal 11402 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 X@9n#h?`?YbpM9?%yS=us{m1_oL=%c; literal 0 HcmV?d00001 diff --git a/packs/skills/CURRENT b/packs/skills/CURRENT new file mode 100644 index 0000000..875cf23 --- /dev/null +++ b/packs/skills/CURRENT @@ -0,0 +1 @@ +MANIFEST-000007 diff --git a/packs/skills/LOCK b/packs/skills/LOCK new file mode 100644 index 0000000..e69de29 diff --git a/packs/skills/LOG b/packs/skills/LOG new file mode 100644 index 0000000..21cc783 --- /dev/null +++ b/packs/skills/LOG @@ -0,0 +1,13 @@ +2024/05/31-12:37:49.885012 7f20acc006c0 Recovering log #6 +2024/05/31-12:37:49.948288 7f20acc006c0 Delete type=0 #6 +2024/05/31-12:37:49.948350 7f20acc006c0 Delete type=3 #4 +2024/05/31-12:57:42.266276 7f20a5a006c0 Level-0 table #10: started +2024/05/31-12:57:42.266304 7f20a5a006c0 Level-0 table #10: 0 bytes OK +2024/05/31-12:57:42.272138 7f20a5a006c0 Delete type=0 #8 +2024/05/31-12:57:42.299102 7f20a5a006c0 Manual compaction at level-0 from '!items!0xlCQMyGIQJWPBM1' @ 72057594037927935 : 1 .. '!items!ukWyqxOnKGRp7Owm' @ 0 : 0; will stop at '!items!ukWyqxOnKGRp7Owm' @ 25 : 1 +2024/05/31-12:57:42.299113 7f20a5a006c0 Compacting 1@0 + 0@1 files +2024/05/31-12:57:42.302367 7f20a5a006c0 Generated table #11@0: 25 keys, 11402 bytes +2024/05/31-12:57:42.302389 7f20a5a006c0 Compacted 1@0 + 0@1 files => 11402 bytes +2024/05/31-12:57:42.308292 7f20a5a006c0 compacted to: files[ 0 1 0 0 0 0 0 ] +2024/05/31-12:57:42.308373 7f20a5a006c0 Delete type=2 #5 +2024/05/31-12:57:42.318969 7f20a5a006c0 Manual compaction at level-0 from '!items!ukWyqxOnKGRp7Owm' @ 25 : 1 .. '!items!ukWyqxOnKGRp7Owm' @ 0 : 0; will stop at (end) diff --git a/packs/skills/LOG.old b/packs/skills/LOG.old new file mode 100644 index 0000000..a5c33e8 --- /dev/null +++ b/packs/skills/LOG.old @@ -0,0 +1,5 @@ +2024/05/31-12:36:59.552707 7f04bfe006c0 Recovering log #3 +2024/05/31-12:36:59.558358 7f04bfe006c0 Level-0 table #5: started +2024/05/31-12:36:59.579826 7f04bfe006c0 Level-0 table #5: 15330 bytes OK +2024/05/31-12:36:59.626405 7f04bfe006c0 Delete type=0 #3 +2024/05/31-12:36:59.626466 7f04bfe006c0 Delete type=3 #2 diff --git a/packs/skills/MANIFEST-000007 b/packs/skills/MANIFEST-000007 new file mode 100644 index 0000000000000000000000000000000000000000..c721f9097f0dd60d5cacd14f5543122e2c0f0cb6 GIT binary patch literal 255 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 4158 bytes +2024/05/31-12:57:42.430495 7f20a5a006c0 compacted to: files[ 0 1 0 0 0 0 0 ] +2024/05/31-12:57:42.430590 7f20a5a006c0 Delete type=2 #5 +2024/05/31-12:57:42.436970 7f20a5a006c0 Manual compaction at level-0 from '!items!xaHXF4xCPb598RYA' @ 8 : 1 .. '!items!xaHXF4xCPb598RYA' @ 0 : 0; will stop at (end) diff --git a/packs/subcultures/LOG.old b/packs/subcultures/LOG.old new file mode 100644 index 0000000..d61ef0c --- /dev/null +++ b/packs/subcultures/LOG.old @@ -0,0 +1,5 @@ +2024/05/31-12:37:00.473437 7f04bf4006c0 Recovering log #3 +2024/05/31-12:37:00.473817 7f04bf4006c0 Level-0 table #5: started +2024/05/31-12:37:00.494156 7f04bf4006c0 Level-0 table #5: 6179 bytes OK +2024/05/31-12:37:00.530987 7f04bf4006c0 Delete type=0 #3 +2024/05/31-12:37:00.531064 7f04bf4006c0 Delete type=3 #2 diff --git a/packs/subcultures/MANIFEST-000007 b/packs/subcultures/MANIFEST-000007 new file mode 100644 index 0000000000000000000000000000000000000000..ea555c8b83ac502be2e2c4e33850b5e0a5a82850 GIT binary patch literal 255 zcmb=4bP!HtU}TiaNi9pwNlDUksw_z@&n!-L&d)7KEJ`fNFJfn4U2Gt)m|2pVTdZhM zksEFlWLlh=ns1tIl48lo$p8j0`HDo32se`o=YS+rON*dLM@9~a{FGESGY$quCJs&p yW=<9X8~Gjq5SJ6k>|acrcGyE%=5hS%=65{hyVvZ1d>=F zhbJe_k55&nom_cvaBV!pCzT)wDxW6Sp=&q@>TsMo9>Jy|Fm)3>i-s$Z)eBQlw7fRm zM8=wnIG2b`j2egf`bG+3rzSbx;)?ZYuHUA{7lv~1>^d|lLlwlh^eE|p zY&w@6l6?5u{wX={`h-LyoxS1CgvpR01C+7yJ-jdGPz&35I0hob;NrxdxR!54=Z=^% zGIA~KJM+|MCW^*2%kLcnDBT5K%5=0T4e~nnWLRh++wh5idL{+E=~A)kA6_K+O3PlF z9E5sqBemz1l8SS`DzG5Qn;B_KekQ6>)`EKQ;=qG$iCBo6413Av8EGHNCu~YA#G=IjVdNs zv=Tjef?a9oqox)#P|-L4HE0dpy%$jT16fLYC9m9gay)eJ@#RAoZtZHLVYzmL#GCum z00wMK1Y&7|8i-icbl#U|?B)rj&ctsj`!Kk-eXFenKL1#H1i}HR{QOhkPH=|{ZEf9t W9n5?UcD14Z*W&jJSG)bmx4!_NdH$gQ literal 0 HcmV?d00001 diff --git a/packs/weaknesses/CURRENT b/packs/weaknesses/CURRENT new file mode 100644 index 0000000..875cf23 --- /dev/null +++ b/packs/weaknesses/CURRENT @@ -0,0 +1 @@ +MANIFEST-000007 diff --git a/packs/weaknesses/LOCK b/packs/weaknesses/LOCK new file mode 100644 index 0000000..e69de29 diff --git a/packs/weaknesses/LOG b/packs/weaknesses/LOG new file mode 100644 index 0000000..df00be0 --- /dev/null +++ b/packs/weaknesses/LOG @@ -0,0 +1,13 @@ +2024/05/31-12:37:50.133633 7f20acc006c0 Recovering log #6 +2024/05/31-12:37:50.185827 7f20acc006c0 Delete type=0 #6 +2024/05/31-12:37:50.185917 7f20acc006c0 Delete type=3 #4 +2024/05/31-12:57:42.319061 7f20a5a006c0 Level-0 table #10: started +2024/05/31-12:57:42.319098 7f20a5a006c0 Level-0 table #10: 0 bytes OK +2024/05/31-12:57:42.325607 7f20a5a006c0 Delete type=0 #8 +2024/05/31-12:57:42.345684 7f20a5a006c0 Manual compaction at level-0 from '!items!FxCIbJm3T44kC0sG' @ 72057594037927935 : 1 .. '!items!VDYXsT8AZ6krv93p' @ 0 : 0; will stop at '!items!VDYXsT8AZ6krv93p' @ 4 : 1 +2024/05/31-12:57:42.345699 7f20a5a006c0 Compacting 1@0 + 0@1 files +2024/05/31-12:57:42.349053 7f20a5a006c0 Generated table #11@0: 4 keys, 837 bytes +2024/05/31-12:57:42.349088 7f20a5a006c0 Compacted 1@0 + 0@1 files => 837 bytes +2024/05/31-12:57:42.355720 7f20a5a006c0 compacted to: files[ 0 1 0 0 0 0 0 ] +2024/05/31-12:57:42.355816 7f20a5a006c0 Delete type=2 #5 +2024/05/31-12:57:42.386362 7f20a5a006c0 Manual compaction at level-0 from '!items!VDYXsT8AZ6krv93p' @ 4 : 1 .. '!items!VDYXsT8AZ6krv93p' @ 0 : 0; will stop at (end) diff --git a/packs/weaknesses/LOG.old b/packs/weaknesses/LOG.old new file mode 100644 index 0000000..e41336d --- /dev/null +++ b/packs/weaknesses/LOG.old @@ -0,0 +1,5 @@ +2024/05/31-12:37:00.223304 7f04bfe006c0 Recovering log #3 +2024/05/31-12:37:00.223338 7f04bfe006c0 Level-0 table #5: started +2024/05/31-12:37:00.234424 7f04bfe006c0 Level-0 table #5: 965 bytes OK +2024/05/31-12:37:00.281050 7f04bfe006c0 Delete type=0 #3 +2024/05/31-12:37:00.281171 7f04bfe006c0 Delete type=3 #2 diff --git a/packs/weaknesses/MANIFEST-000007 b/packs/weaknesses/MANIFEST-000007 new file mode 100644 index 0000000000000000000000000000000000000000..0b726fcce429bb042d51295986c08e1cdd1a8b2a GIT binary patch literal 255 zcmb2_=iivfz{n_-lUkOVlai$8R9TW*o>`pgoS$2eSd>_jU&PM9dX!yWF|#B!w^-4w z!r3#)E7v&0#3b9rQ3@?kEK5yc@Ej!|aWMP-)81&k~Z`EDy$e+~vlCJs&p yW=<9k=QpQ5gSebPE;kFuF(-%DMNlpe3kNF$A>-H>SlJo5kFvqkk?brEh_e7sKs*5e literal 0 HcmV?d00001 diff --git a/system.json b/system.json index 3f38e1b..15d6116 100644 --- a/system.json +++ b/system.json @@ -4,11 +4,10 @@ "description": "Shadows over Sol for FoundryVTT", "url": "https://www.uberwald.me/gitea/public/foundryvtt-shadows-over-sol/", "license": "LICENSE.txt", - "version": "11.0.1", + "version": "12.0.0", "compatibility": { - "minimum": "10", - "verified": "10", - "maximum": "11" + "minimum": "11", + "verified": "12" }, "esmodules": [ "module/sos-main.js" @@ -109,7 +108,9 @@ ], "socket": true, "manifest": "https://www.uberwald.me/gitea/public/foundryvtt-shadows-over-sol/raw/branch/v10/system.json", - "download": "https://www.uberwald.me/gitea/public/foundryvtt-shadows-over-sol/archive/foundryvtt-shadows-over-sol-11.0.1.zip", - "gridDistance": 5, - "gridUnits": "ft" + "download": "https://www.uberwald.me/gitea/public/foundryvtt-shadows-over-sol/archive/foundryvtt-shadows-over-sol-12.0.0.zip", + "grid": { + "distance": 5, + "units": "ft" + } } \ No newline at end of file