From d64f7dfe5c3f727939b36d92600fe04f11b0f4d0 Mon Sep 17 00:00:00 2001 From: lizzie Date: Sun, 22 Feb 2026 21:01:04 +0100 Subject: [PATCH 01/84] [dynarmic] Transition IR::Block to use stable_vector, remove inline pool + pooled vector, remove unused mutable get/set block functors (#3543) theoretically, better in practice, uh Signed-off-by: lizzie Reviewed-on: https://git.eden-emu.dev/eden-emu/eden/pulls/3543 Reviewed-by: DraVee Reviewed-by: CamilleLaVey Co-authored-by: lizzie Co-committed-by: lizzie --- .../src/dynarmic/backend/arm64/emit_arm64.cpp | 4 +- .../dynarmic/backend/riscv64/emit_riscv64.cpp | 2 +- .../src/dynarmic/backend/x64/a32_emit_x64.cpp | 4 +- .../src/dynarmic/backend/x64/a64_emit_x64.cpp | 2 +- .../A32/translate/conditional_state.cpp | 4 +- .../frontend/A32/translate/translate_arm.cpp | 4 +- .../A32/translate/translate_thumb.cpp | 4 +- .../frontend/A64/translate/a64_translate.cpp | 4 +- .../frontend/A64/translate/impl/system.cpp | 2 +- src/dynarmic/src/dynarmic/ir/basic_block.cpp | 32 ++++--------- src/dynarmic/src/dynarmic/ir/basic_block.h | 47 ++----------------- src/dynarmic/src/dynarmic/ir/ir_emitter.h | 17 +++---- .../src/dynarmic/ir/microinstruction.h | 6 +-- src/dynarmic/src/dynarmic/ir/opt_passes.cpp | 27 +++++------ 14 files changed, 51 insertions(+), 108 deletions(-) diff --git a/src/dynarmic/src/dynarmic/backend/arm64/emit_arm64.cpp b/src/dynarmic/src/dynarmic/backend/arm64/emit_arm64.cpp index 104d0a452c..e4958eb67f 100644 --- a/src/dynarmic/src/dynarmic/backend/arm64/emit_arm64.cpp +++ b/src/dynarmic/src/dynarmic/backend/arm64/emit_arm64.cpp @@ -212,7 +212,7 @@ EmittedBlockInfo EmitArm64(oaknut::CodeGenerator& code, IR::Block block, const E oaknut::Label pass; pass = conf.emit_cond(code, ctx, ctx.block.GetCondition()); - EmitAddCycles(code, ctx, ctx.block.ConditionFailedCycleCount()); + EmitAddCycles(code, ctx, ctx.block.cond_failed_cycle_count); conf.emit_condition_failed_terminal(code, ctx); code.l(pass); @@ -254,7 +254,7 @@ EmittedBlockInfo EmitArm64(oaknut::CodeGenerator& code, IR::Block block, const E reg_alloc.AssertNoMoreUses(); - EmitAddCycles(code, ctx, block.CycleCount()); + EmitAddCycles(code, ctx, block.cycle_count); conf.emit_terminal(code, ctx); code.BRK(0); diff --git a/src/dynarmic/src/dynarmic/backend/riscv64/emit_riscv64.cpp b/src/dynarmic/src/dynarmic/backend/riscv64/emit_riscv64.cpp index 50cbaf9526..32a26de781 100644 --- a/src/dynarmic/src/dynarmic/backend/riscv64/emit_riscv64.cpp +++ b/src/dynarmic/src/dynarmic/backend/riscv64/emit_riscv64.cpp @@ -151,7 +151,7 @@ EmittedBlockInfo EmitRV64(biscuit::Assembler& as, IR::Block block, const EmitCon reg_alloc.AssertNoMoreUses(); if (emit_conf.enable_cycle_counting) { - const size_t cycles_to_add = block.CycleCount(); + const size_t cycles_to_add = block.cycle_count; as.LD(Xscratch0, offsetof(StackLayout, cycles_remaining), sp); if (mcl::bit::sign_extend<12>(-cycles_to_add) == -cycles_to_add) { as.ADDI(Xscratch0, Xscratch0, -cycles_to_add); diff --git a/src/dynarmic/src/dynarmic/backend/x64/a32_emit_x64.cpp b/src/dynarmic/src/dynarmic/backend/x64/a32_emit_x64.cpp index d7d1c96232..ef6cac302d 100644 --- a/src/dynarmic/src/dynarmic/backend/x64/a32_emit_x64.cpp +++ b/src/dynarmic/src/dynarmic/backend/x64/a32_emit_x64.cpp @@ -153,7 +153,7 @@ A32EmitX64::BlockDescriptor A32EmitX64::Emit(IR::Block& block) { reg_alloc.AssertNoMoreUses(); if (conf.enable_cycle_counting) { - EmitAddCycles(block.CycleCount()); + EmitAddCycles(block.cycle_count); } EmitTerminal(block.GetTerminal(), ctx.Location().SetSingleStepping(false), ctx.IsSingleStep()); code.int3(); @@ -197,7 +197,7 @@ void A32EmitX64::EmitCondPrelude(const A32EmitContext& ctx) { Xbyak::Label pass = EmitCond(ctx.block.GetCondition()); if (conf.enable_cycle_counting) { - EmitAddCycles(ctx.block.ConditionFailedCycleCount()); + EmitAddCycles(ctx.block.cond_failed_cycle_count); } EmitTerminal(IR::Term::LinkBlock{ctx.block.ConditionFailedLocation()}, ctx.Location().SetSingleStepping(false), ctx.IsSingleStep()); code.L(pass); diff --git a/src/dynarmic/src/dynarmic/backend/x64/a64_emit_x64.cpp b/src/dynarmic/src/dynarmic/backend/x64/a64_emit_x64.cpp index 42ee281d00..97faaa7ec4 100644 --- a/src/dynarmic/src/dynarmic/backend/x64/a64_emit_x64.cpp +++ b/src/dynarmic/src/dynarmic/backend/x64/a64_emit_x64.cpp @@ -146,7 +146,7 @@ finish_this_inst: reg_alloc.AssertNoMoreUses(); if (conf.enable_cycle_counting) { - EmitAddCycles(block.CycleCount()); + EmitAddCycles(block.cycle_count); } EmitTerminal(block.GetTerminal(), ctx.Location().SetSingleStepping(false), ctx.IsSingleStep()); code.int3(); diff --git a/src/dynarmic/src/dynarmic/frontend/A32/translate/conditional_state.cpp b/src/dynarmic/src/dynarmic/frontend/A32/translate/conditional_state.cpp index 8c55588a28..6f6d2d7b68 100644 --- a/src/dynarmic/src/dynarmic/frontend/A32/translate/conditional_state.cpp +++ b/src/dynarmic/src/dynarmic/frontend/A32/translate/conditional_state.cpp @@ -48,7 +48,7 @@ bool IsConditionPassed(TranslatorVisitor& v, IR::Cond cond) { } else { if (cond == v.ir.block.GetCondition()) { v.ir.block.SetConditionFailedLocation(v.ir.current_location.AdvancePC(static_cast(v.current_instruction_size)).AdvanceIT()); - v.ir.block.ConditionFailedCycleCount()++; + v.ir.block.cond_failed_cycle_count++; return true; } @@ -79,7 +79,7 @@ bool IsConditionPassed(TranslatorVisitor& v, IR::Cond cond) { v.cond_state = ConditionalState::Translating; v.ir.block.SetCondition(cond); v.ir.block.SetConditionFailedLocation(v.ir.current_location.AdvancePC(static_cast(v.current_instruction_size)).AdvanceIT()); - v.ir.block.ConditionFailedCycleCount() = v.ir.block.CycleCount() + 1; + v.ir.block.cond_failed_cycle_count = v.ir.block.cycle_count + 1; return true; } diff --git a/src/dynarmic/src/dynarmic/frontend/A32/translate/translate_arm.cpp b/src/dynarmic/src/dynarmic/frontend/A32/translate/translate_arm.cpp index 5cc9ef3893..320046ffc1 100644 --- a/src/dynarmic/src/dynarmic/frontend/A32/translate/translate_arm.cpp +++ b/src/dynarmic/src/dynarmic/frontend/A32/translate/translate_arm.cpp @@ -61,7 +61,7 @@ void TranslateArm(IR::Block& block, LocationDescriptor descriptor, TranslateCall } visitor.ir.current_location = visitor.ir.current_location.AdvancePC(4); - block.CycleCount() += ticks_for_instruction; + block.cycle_count += ticks_for_instruction; } while (should_continue && CondCanContinue(visitor.cond_state, visitor.ir) && !single_step); if (visitor.cond_state == ConditionalState::Translating || visitor.cond_state == ConditionalState::Trailing || single_step) { @@ -101,7 +101,7 @@ bool TranslateSingleArmInstruction(IR::Block& block, LocationDescriptor descript // TODO: Feedback resulting cond status to caller somehow. visitor.ir.current_location = visitor.ir.current_location.AdvancePC(4); - block.CycleCount() += ticks_for_instruction; + block.cycle_count += ticks_for_instruction; block.SetEndLocation(visitor.ir.current_location); diff --git a/src/dynarmic/src/dynarmic/frontend/A32/translate/translate_thumb.cpp b/src/dynarmic/src/dynarmic/frontend/A32/translate/translate_thumb.cpp index e0333e487d..a043c3f543 100644 --- a/src/dynarmic/src/dynarmic/frontend/A32/translate/translate_thumb.cpp +++ b/src/dynarmic/src/dynarmic/frontend/A32/translate/translate_thumb.cpp @@ -161,7 +161,7 @@ void TranslateThumb(IR::Block& block, LocationDescriptor descriptor, TranslateCa } visitor.ir.current_location = visitor.ir.current_location.AdvancePC(static_cast(visitor.current_instruction_size)).AdvanceIT(); - block.CycleCount() += ticks_for_instruction; + block.cycle_count += ticks_for_instruction; } while (should_continue && CondCanContinue(visitor.cond_state, visitor.ir) && !single_step); if (visitor.cond_state == ConditionalState::Translating || visitor.cond_state == ConditionalState::Trailing || single_step) { @@ -214,7 +214,7 @@ bool TranslateSingleThumbInstruction(IR::Block& block, LocationDescriptor descri const s32 advance_pc = is_thumb_16 ? 2 : 4; visitor.ir.current_location = visitor.ir.current_location.AdvancePC(advance_pc); - block.CycleCount() += ticks_for_instruction; + block.cycle_count += ticks_for_instruction; block.SetEndLocation(visitor.ir.current_location); diff --git a/src/dynarmic/src/dynarmic/frontend/A64/translate/a64_translate.cpp b/src/dynarmic/src/dynarmic/frontend/A64/translate/a64_translate.cpp index 6778d13890..fc6841e082 100644 --- a/src/dynarmic/src/dynarmic/frontend/A64/translate/a64_translate.cpp +++ b/src/dynarmic/src/dynarmic/frontend/A64/translate/a64_translate.cpp @@ -30,7 +30,7 @@ void Translate(IR::Block& block, LocationDescriptor descriptor, MemoryReadCodeFu should_continue = visitor.RaiseException(Exception::NoExecuteFault); } visitor.ir.current_location = visitor.ir.current_location->AdvancePC(4); - block.CycleCount()++; + block.cycle_count++; } while (should_continue && !single_step); if (single_step && should_continue) { @@ -48,7 +48,7 @@ bool TranslateSingleInstruction(IR::Block& block, LocationDescriptor descriptor, should_continue = decoder.get().call(visitor, instruction); visitor.ir.current_location = visitor.ir.current_location->AdvancePC(4); - block.CycleCount()++; + block.cycle_count++; block.SetEndLocation(*visitor.ir.current_location); diff --git a/src/dynarmic/src/dynarmic/frontend/A64/translate/impl/system.cpp b/src/dynarmic/src/dynarmic/frontend/A64/translate/impl/system.cpp index c60fdc3ae0..61d5c065f4 100644 --- a/src/dynarmic/src/dynarmic/frontend/A64/translate/impl/system.cpp +++ b/src/dynarmic/src/dynarmic/frontend/A64/translate/impl/system.cpp @@ -130,7 +130,7 @@ bool TranslatorVisitor::MRS(Imm<1> o0, Imm<3> op1, Imm<4> CRn, Imm<4> CRm, Imm<3 case SystemRegisterEncoding::CNTPCT_EL0: // HACK: Ensure that this is the first instruction in the block it's emitted in, so the cycle count is most up-to-date. if (!ir.block.instructions.empty() && !options.wall_clock_cntpct) { - ir.block.CycleCount()--; + ir.block.cycle_count--; ir.SetTerm(IR::Term::LinkBlock{*ir.current_location}); return false; } diff --git a/src/dynarmic/src/dynarmic/ir/basic_block.cpp b/src/dynarmic/src/dynarmic/ir/basic_block.cpp index ac0f03d76a..8417661c42 100644 --- a/src/dynarmic/src/dynarmic/ir/basic_block.cpp +++ b/src/dynarmic/src/dynarmic/ir/basic_block.cpp @@ -30,38 +30,26 @@ Block::Block(LocationDescriptor location) noexcept /// Prepends a new instruction to this basic block before the insertion point, /// handling any allocations necessary to do so. /// @param insertion_point Where to insert the new instruction. -/// @param op Opcode representing the instruction to add. -/// @param args A sequence of Value instances used as arguments for the instruction. +/// @param op Opcode representing the instruction to add. +/// @param args A sequence of Value instances used as arguments for the instruction. /// @returns Iterator to the newly created instruction. -Block::iterator Block::PrependNewInst(iterator insertion_point, Opcode opcode, std::initializer_list args) noexcept { +Block::iterator Block::PrependNewInst(Block::const_iterator insertion_point, Opcode opcode, std::initializer_list args) noexcept { // First try using the "inline" buffer, otherwise fallback to a slower slab-like allocation scheme // purpouse is to avoid many calls to new/delete which invoke malloc which invokes mmap // just pool it!!! - reason why there is an inline buffer is because many small blocks are created // with few instructions due to subpar optimisations on other passes... plus branch-heavy code will // hugely benefit from the coherency of faster allocations... - IR::Inst* inst; - if (inlined_inst.size() < inlined_inst.max_size()) { - inlined_inst.emplace_back(opcode); - inst = &inlined_inst[inlined_inst.size() - 1]; - } else { - if (pooled_inst.empty() || pooled_inst.back().size() == pooled_inst.back().max_size()) - pooled_inst.emplace_back(); - pooled_inst.back().emplace_back(opcode); - inst = &pooled_inst.back()[pooled_inst.back().size() - 1]; - } - DEBUG_ASSERT(args.size() == inst->NumArgs()); - std::for_each(args.begin(), args.end(), [&inst, index = size_t(0)](const auto& arg) mutable { - inst->SetArg(index, arg); + auto it = instructions.insert(insertion_point, Inst(opcode)); + DEBUG_ASSERT(args.size() == it->NumArgs()); + std::for_each(args.begin(), args.end(), [&it, index = size_t(0)](const auto& arg) mutable { + it->SetArg(index, arg); index++; }); - return instructions.insert_before(insertion_point, inst); + return it; } void Block::Reset(LocationDescriptor location_) noexcept { - mcl::intrusive_list tmp = {}; - instructions.swap(tmp); - inlined_inst.clear(); - pooled_inst.clear(); + instructions.clear(); cond_failed.reset(); location = location_; end_location = location_; @@ -107,7 +95,7 @@ static std::string TerminalToString(const Terminal& terminal_variant) noexcept { std::string DumpBlock(const IR::Block& block) noexcept { std::string ret = fmt::format("Block: location={}-{}\n", block.Location(), block.EndLocation()) - + fmt::format("cycles={}", block.CycleCount()) + + fmt::format("cycles={}", block.cycle_count) + fmt::format(", entry_cond={}", A64::CondToString(block.GetCondition())); if (block.GetCondition() != Cond::AL) ret += fmt::format(", cond_fail={}", block.ConditionFailedLocation()); diff --git a/src/dynarmic/src/dynarmic/ir/basic_block.h b/src/dynarmic/src/dynarmic/ir/basic_block.h index 4044005bd0..db9ac7bd12 100644 --- a/src/dynarmic/src/dynarmic/ir/basic_block.h +++ b/src/dynarmic/src/dynarmic/ir/basic_block.h @@ -16,7 +16,6 @@ #include #include #include -#include #include "dynarmic/common/common_types.h" #include "dynarmic/ir/location_descriptor.h" @@ -33,10 +32,10 @@ enum class Opcode; /// Note that this is a linear IR and not a pure tree-based IR: i.e.: there is an ordering to /// the microinstructions. This only matters before chaining is done in order to correctly /// order memory accesses. -class alignas(4096) Block final { +class Block final { public: //using instruction_list_type = dense_list; - using instruction_list_type = mcl::intrusive_list; + using instruction_list_type = boost::container::stable_vector; using size_type = instruction_list_type::size_type; using iterator = instruction_list_type::iterator; using const_iterator = instruction_list_type::const_iterator; @@ -50,25 +49,9 @@ public: Block(Block&&) = default; Block& operator=(Block&&) = default; - /// Appends a new instruction to the end of this basic block, - /// handling any allocations necessary to do so. - /// @param op Opcode representing the instruction to add. - /// @param args A sequence of Value instances used as arguments for the instruction. - inline iterator AppendNewInst(const Opcode opcode, const std::initializer_list args) noexcept { - return PrependNewInst(instructions.end(), opcode, args); - } - iterator PrependNewInst(iterator insertion_point, Opcode op, std::initializer_list args) noexcept; + iterator PrependNewInst(const_iterator insertion_point, Opcode op, std::initializer_list args) noexcept; void Reset(LocationDescriptor location_) noexcept; - /// Gets a mutable reference to the instruction list for this basic block. - inline instruction_list_type& Instructions() noexcept { - return instructions; - } - /// Gets an immutable reference to the instruction list for this basic block. - inline const instruction_list_type& Instructions() const noexcept { - return instructions; - } - /// Gets the starting location for this basic block. inline LocationDescriptor Location() const noexcept { return location; @@ -104,15 +87,6 @@ public: return cond_failed.has_value(); } - /// Gets a mutable reference to the condition failed cycle count. - inline size_t& ConditionFailedCycleCount() noexcept { - return cond_failed_cycle_count; - } - /// Gets an immutable reference to the condition failed cycle count. - inline const size_t& ConditionFailedCycleCount() const noexcept { - return cond_failed_cycle_count; - } - /// Gets the terminal instruction for this basic block. inline Terminal GetTerminal() const noexcept { return terminal; @@ -132,21 +106,8 @@ public: return terminal.which() != 0; } - /// Gets a mutable reference to the cycle count for this basic block. - inline size_t& CycleCount() noexcept { - return cycle_count; - } - /// Gets an immutable reference to the cycle count for this basic block. - inline const size_t& CycleCount() const noexcept { - return cycle_count; - } - - /// "Hot cache" for small blocks so we don't call global allocator - boost::container::static_vector inlined_inst; /// List of instructions in this block. instruction_list_type instructions; - /// "Long/far" memory pool - boost::container::stable_vector> pooled_inst; /// Block to execute next if `cond` did not pass. std::optional cond_failed = {}; /// Description of the starting location of this block @@ -162,7 +123,7 @@ public: /// Number of cycles this block takes to execute. size_t cycle_count = 0; }; -static_assert(sizeof(Block) == 4096); +//static_assert(sizeof(Block) == 120); /// Returns a string representation of the contents of block. Intended for debugging. std::string DumpBlock(const IR::Block& block) noexcept; diff --git a/src/dynarmic/src/dynarmic/ir/ir_emitter.h b/src/dynarmic/src/dynarmic/ir/ir_emitter.h index 2b5c7d5cdd..becbbf92c7 100644 --- a/src/dynarmic/src/dynarmic/ir/ir_emitter.h +++ b/src/dynarmic/src/dynarmic/ir/ir_emitter.h @@ -70,7 +70,10 @@ enum class MemOp { /// The user of this class updates `current_location` as appropriate. class IREmitter { public: - explicit IREmitter(Block& block) : block(block), insertion_point(block.instructions.end()) {} + explicit IREmitter(Block& block) noexcept + : block(block) + , insertion_point(block.instructions.end()) + {} Block& block; @@ -2947,19 +2950,10 @@ public: block.SetTerminal(terminal); } - void SetInsertionPointBefore(IR::Inst* new_insertion_point) { - insertion_point = IR::Block::iterator{*new_insertion_point}; - } - void SetInsertionPointBefore(IR::Block::iterator new_insertion_point) { insertion_point = new_insertion_point; } - void SetInsertionPointAfter(IR::Inst* new_insertion_point) { - insertion_point = IR::Block::iterator{*new_insertion_point}; - ++insertion_point; - } - void SetInsertionPointAfter(IR::Block::iterator new_insertion_point) { insertion_point = new_insertion_point; ++insertion_point; @@ -2970,7 +2964,10 @@ protected: template T Inst(Opcode op, Args... args) { + auto const offset = std::distance(block.instructions.begin(), insertion_point); + auto const at_end = block.instructions.end() == insertion_point; auto iter = block.PrependNewInst(insertion_point, op, {Value(args)...}); + insertion_point = at_end ? block.instructions.end() : block.instructions.begin() + (offset + 1); return T(Value(&*iter)); } }; diff --git a/src/dynarmic/src/dynarmic/ir/microinstruction.h b/src/dynarmic/src/dynarmic/ir/microinstruction.h index 843b4cdf18..d1fea62e04 100644 --- a/src/dynarmic/src/dynarmic/ir/microinstruction.h +++ b/src/dynarmic/src/dynarmic/ir/microinstruction.h @@ -1,4 +1,4 @@ -// SPDX-FileCopyrightText: Copyright 2025 Eden Emulator Project +// SPDX-FileCopyrightText: Copyright 2026 Eden Emulator Project // SPDX-License-Identifier: GPL-3.0-or-later /* This file is part of the dynarmic project. @@ -10,9 +10,7 @@ #include -#include #include "dynarmic/common/common_types.h" - #include "dynarmic/ir/value.h" #include "dynarmic/ir/opcodes.h" @@ -26,7 +24,7 @@ constexpr size_t max_arg_count = 4; /// A representation of a microinstruction. A single ARM/Thumb instruction may be /// converted into zero or more microinstructions. //class Inst final { -class Inst final : public mcl::intrusive_list_node { +class Inst final { public: explicit Inst(Opcode op) : op(op) {} diff --git a/src/dynarmic/src/dynarmic/ir/opt_passes.cpp b/src/dynarmic/src/dynarmic/ir/opt_passes.cpp index f22e8aaa69..1a6670fcca 100644 --- a/src/dynarmic/src/dynarmic/ir/opt_passes.cpp +++ b/src/dynarmic/src/dynarmic/ir/opt_passes.cpp @@ -86,12 +86,10 @@ static void ConstantMemoryReads(IR::Block& block, A32::UserCallbacks* cb) { } static void FlagsPass(IR::Block& block) { - using Iterator = typename std::reverse_iterator; - struct FlagInfo { bool set_not_required = false; bool has_value_request = false; - Iterator value_request = {}; + IR::Block::reverse_iterator value_request = {}; }; struct ValuelessFlagInfo { bool set_not_required = false; @@ -102,7 +100,7 @@ static void FlagsPass(IR::Block& block) { FlagInfo c_flag; FlagInfo ge; - auto do_set = [&](FlagInfo& info, IR::Value value, Iterator inst) { + auto do_set = [&](FlagInfo& info, IR::Value value, IR::Block::reverse_iterator inst) { if (info.has_value_request) { info.value_request->ReplaceUsesWith(value); } @@ -114,14 +112,14 @@ static void FlagsPass(IR::Block& block) { info.set_not_required = true; }; - auto do_set_valueless = [&](ValuelessFlagInfo& info, Iterator inst) { + auto do_set_valueless = [](ValuelessFlagInfo& info, IR::Block::reverse_iterator inst) { if (info.set_not_required) { inst->Invalidate(); } info.set_not_required = true; }; - auto do_get = [](FlagInfo& info, Iterator inst) { + auto do_get = [](FlagInfo& info, IR::Block::reverse_iterator inst) { if (info.has_value_request) { info.value_request->ReplaceUsesWith(IR::Value{&*inst}); } @@ -448,7 +446,8 @@ static void A64CallbackConfigPass(IR::Block& block, const A64::UserConfig& conf) return; } - for (auto& inst : block.instructions) { + for (auto it = block.instructions.begin(); it != block.instructions.end(); it++) { + auto& inst = *it; if (inst.GetOpcode() != IR::Opcode::A64DataCacheOperationRaised) { continue; } @@ -457,7 +456,7 @@ static void A64CallbackConfigPass(IR::Block& block, const A64::UserConfig& conf) if (op == A64::DataCacheOperation::ZeroByVA) { A64::IREmitter ir{block}; ir.current_location = A64::LocationDescriptor{IR::LocationDescriptor{inst.GetArg(0).GetU64()}}; - ir.SetInsertionPointBefore(&inst); + ir.SetInsertionPointBefore(it); size_t bytes = 4 << static_cast(conf.dczid_el0 & 0b1111); IR::U64 addr{inst.GetArg(2)}; @@ -522,7 +521,7 @@ static void A64GetSetElimination(IR::Block& block) { const auto do_set = [&block](RegisterInfo& info, IR::Value value, Iterator set_inst, TrackingType tracking_type) { if (info.set_instruction_present) { info.last_set_instruction->Invalidate(); - block.Instructions().erase(info.last_set_instruction); + block.instructions.erase(info.last_set_instruction); } info.register_value = value; info.tracking_type = tracking_type; @@ -541,7 +540,7 @@ static void A64GetSetElimination(IR::Block& block) { ReplaceUsesWith(*get_inst, true, u32(info.register_value.GetImmediateAsU64())); } else { A64::IREmitter ir{block}; - ir.SetInsertionPointBefore(&*get_inst); + ir.SetInsertionPointBefore(get_inst); get_inst->ReplaceUsesWith(ir.LeastSignificantWord(IR::U64{info.register_value})); } } else { @@ -1210,7 +1209,7 @@ static void IdentityRemovalPass(IR::Block& block) { } if (it->GetOpcode() == IR::Opcode::Identity || it->GetOpcode() == IR::Opcode::Void) { to_invalidate.push_back(&*it); - it = block.Instructions().erase(it); + it = block.instructions.erase(it); } else { ++it; } @@ -1370,9 +1369,9 @@ static void PolyfillPass(IR::Block& block, const PolyfillOptions& polyfill) { IR::IREmitter ir{block}; - for (auto& inst : block.instructions) { - ir.SetInsertionPointBefore(&inst); - + for (auto it = block.instructions.begin(); it != block.instructions.end(); it++) { + auto& inst = *it; + ir.SetInsertionPointBefore(it); switch (inst.GetOpcode()) { case IR::Opcode::SHA256MessageSchedule0: if (polyfill.sha256) { From 0574d7d2c91b35a64986dc8c561f84fc291fcf2c Mon Sep 17 00:00:00 2001 From: crueter Date: Sun, 22 Feb 2026 22:03:32 +0100 Subject: [PATCH 02/84] [desktop] Fix mod import for romfs mods (#3609) Forgot a comma :( Signed-off-by: crueter Reviewed-on: https://git.eden-emu.dev/eden-emu/eden/pulls/3609 Reviewed-by: DraVee Reviewed-by: MaranBr --- src/frontend_common/mod_manager.cpp | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/frontend_common/mod_manager.cpp b/src/frontend_common/mod_manager.cpp index cbbb3b3400..2bf6c372d9 100644 --- a/src/frontend_common/mod_manager.cpp +++ b/src/frontend_common/mod_manager.cpp @@ -19,9 +19,10 @@ std::vector GetModFolder(const std::string& root) { auto callback = [&paths](const std::filesystem::directory_entry& entry) -> bool { const auto name = entry.path().filename().string(); static const std::array valid_names = {"exefs", - "romfs" + "romfs", "romfs_ext", - "cheats", "romfslite"}; + "cheats", + "romfslite"}; if (std::ranges::find(valid_names, name) != valid_names.end()) { paths.emplace_back(entry.path().parent_path()); From 12157214b693cf238068703b673f16b6981515cb Mon Sep 17 00:00:00 2001 From: crueter Date: Sun, 22 Feb 2026 23:28:46 +0100 Subject: [PATCH 03/84] [externals] Update FFmpeg to `c7b5f1537d` (#3604) Fixes some Vulkan VP9 thing Signed-off-by: crueter Reviewed-on: https://git.eden-emu.dev/eden-emu/eden/pulls/3604 Reviewed-by: DraVee --- externals/cpmfile.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/externals/cpmfile.json b/externals/cpmfile.json index 4a2e44fa12..37bf5dffb1 100644 --- a/externals/cpmfile.json +++ b/externals/cpmfile.json @@ -242,8 +242,8 @@ }, "ffmpeg": { "repo": "FFmpeg/FFmpeg", - "sha": "5e56937b74", - "hash": "9ab0457dcd6ce6359b5053c1662f57910d332f68ca0cca9d4134d858464840917027374de3d97e0863c3a7daaea2fe4f4cd17d1c6d8e7f740f4ad91e71c2932b", + "sha": "c7b5f1537d", + "hash": "ed177621176b3961bdcaa339187d3a7688c1c8b060b79c4bb0257cbc67ad7021ae5d5adca5303b45625abbbe3d9aafdd87ce777b8690ac295290d744c875489a", "bundled": true }, "ffmpeg-ci": { @@ -251,7 +251,7 @@ "package": "FFmpeg", "name": "ffmpeg", "repo": "crueter-ci/FFmpeg", - "version": "8.0.1-5e56937b74", + "version": "8.0.1-c7b5f1537d", "min_version": "4.1" }, "tzdb": { From d8b2971a2efa03822433282ff4556d30d70613f0 Mon Sep 17 00:00:00 2001 From: crueter Date: Mon, 23 Feb 2026 00:20:14 +0100 Subject: [PATCH 04/84] [desktop] Fix game list name column starting out super small by default (#3610) Unsure why but geometry is at 100x30 when this func is called. For now just use sane ish default of 840 Signed-off-by: crueter Reviewed-on: https://git.eden-emu.dev/eden-emu/eden/pulls/3610 Reviewed-by: DraVee Reviewed-by: MaranBr --- src/yuzu/game/game_list.cpp | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/yuzu/game/game_list.cpp b/src/yuzu/game/game_list.cpp index 80995a0e79..c57198848f 100644 --- a/src/yuzu/game/game_list.cpp +++ b/src/yuzu/game/game_list.cpp @@ -1099,13 +1099,14 @@ void GameList::SaveInterfaceLayout() { void GameList::LoadInterfaceLayout() { auto* header = tree_view->header(); - if (header->restoreState(UISettings::values.gamelist_header_state)) { + if (header->restoreState(UISettings::values.gamelist_header_state)) return; - } // We are using the name column to display icons and titles // so make it as large as possible as default. - header->resizeSection(COLUMN_NAME, header->width()); + + // TODO(crueter): width() is not initialized yet, so use a sane default value + header->resizeSection(COLUMN_NAME, 840); } const QStringList GameList::supported_file_extensions = { From 80d6172084cea72688c1663d676f0df9ba2839bb Mon Sep 17 00:00:00 2001 From: crueter Date: Mon, 23 Feb 2026 02:03:30 +0100 Subject: [PATCH 05/84] [desktop] Display currently applied update in tooltip alongside playtime (#3611) Also nicely formats both it and play time, alongside fallbacks if they have nothing Signed-off-by: crueter Reviewed-on: https://git.eden-emu.dev/eden-emu/eden/pulls/3611 Reviewed-by: DraVee Reviewed-by: Lizzie --- src/yuzu/game/game_list_p.h | 26 +++++++++++++++++++++++--- src/yuzu/game/game_list_worker.cpp | 2 +- 2 files changed, 24 insertions(+), 4 deletions(-) diff --git a/src/yuzu/game/game_list_p.h b/src/yuzu/game/game_list_p.h index 95f5f7eb78..9bae5b9e01 100644 --- a/src/yuzu/game/game_list_p.h +++ b/src/yuzu/game/game_list_p.h @@ -17,6 +17,7 @@ #include #include #include +#include #include "common/common_types.h" #include "common/logging/log.h" @@ -76,15 +77,34 @@ public: GameListItemPath() = default; GameListItemPath(const QString& game_path, const std::vector& picture_data, const QString& game_name, const QString& game_type, u64 program_id, - u64 play_time) { + u64 play_time, const QString &patch_versions) { setData(type(), TypeRole); setData(game_path, FullPathRole); setData(game_name, TitleRole); setData(qulonglong(program_id), ProgramIdRole); setData(game_type, FileTypeRole); - setData(QString::fromStdString(PlayTime::PlayTimeManager::GetReadablePlayTime(play_time)), - Qt::ToolTipRole); + const auto readable_play_time = + play_time > 0 + ? QObject::tr("Play Time: %1").arg(QString::fromStdString(PlayTime::PlayTimeManager::GetReadablePlayTime(play_time))) + : QObject::tr("Never Played"); + + const auto enabled_update = [patch_versions]() -> QString { + const QStringList lines = patch_versions.split(QLatin1Char('\n')); + const QRegularExpression regex{QStringLiteral(R"(^Update \(([0-9\.]+)\))")}; + for (const QString &line : std::as_const(lines)) { + const auto match = regex.match(line); + if (match.hasMatch() && match.hasCaptured(1)) + return QObject::tr("Version: %1").arg(match.captured(1)); + } + return QObject::tr("Version: 1.0.0"); + }(); + + const auto tooltip = QStringLiteral("%1\n%2").arg( + readable_play_time, + enabled_update); + + setData(tooltip, Qt::ToolTipRole); const u32 size = UISettings::values.game_icon_size.GetValue(); diff --git a/src/yuzu/game/game_list_worker.cpp b/src/yuzu/game/game_list_worker.cpp index d9c91334e1..c4504a0d5e 100644 --- a/src/yuzu/game/game_list_worker.cpp +++ b/src/yuzu/game/game_list_worker.cpp @@ -218,7 +218,7 @@ QList MakeGameListEntry(const std::string& path, u64 play_time = play_time_manager.GetPlayTime(program_id); return QList{ new GameListItemPath(FormatGameName(path), icon, QString::fromStdString(name), - file_type_string, program_id, play_time), + file_type_string, program_id, play_time, patch_versions), new GameListItem(file_type_string), new GameListItemSize(size), new GameListItemPlayTime(play_time), From 0a687b82d49f5b944379ce2522c8f7778150b034 Mon Sep 17 00:00:00 2001 From: lizzie Date: Mon, 23 Feb 2026 02:50:13 +0100 Subject: [PATCH 06/84] [crypto] Atomize all traces of MbedTLS, and require OpenSSL 3+ (#3606) Closes #3137 Closes #3465 - Replace all mbedtls usage with OpenSSL - require OpenSSL - Up OpenSSL version to 3, cuz that's what we actually need... CAVEATS: - httplib also now required - other ssl backends for svc are unused, maybe remove later * To be fair, our CI never used them anyways. And we never tested those TESTERS PLEASE TEST: - All games and applets boot - Boot, load, exit, etc. times Co-authored-by: crueter Signed-off-by: lizzie Co-authored-by: crueter Reviewed-on: https://git.eden-emu.dev/eden-emu/eden/pulls/3606 Reviewed-by: crueter Reviewed-by: MaranBr Reviewed-by: DraVee Co-authored-by: lizzie Co-committed-by: lizzie --- .patch/mbedtls/0001-aesni-fix.patch | 35 ---- .patch/mbedtls/0002-arm64-aes-fix.patch | 20 --- CMakeLists.txt | 55 ++---- cpmfile.json | 2 +- docs/Deps.md | 24 ++- externals/CMakeLists.txt | 7 +- externals/cpmfile.json | 17 +- src/core/CMakeLists.txt | 43 +++-- src/core/crypto/aes_util.cpp | 159 +++++++++++------- src/core/crypto/aes_util.h | 4 +- src/core/crypto/key_manager.cpp | 87 +++++----- src/core/crypto/partition_data_manager.cpp | 9 +- src/core/file_sys/registered_cache.cpp | 41 ++++- src/core/file_sys/xts_archive.cpp | 39 +++-- src/core/hle/service/bcat/bcat_util.h | 4 +- .../bcat/delivery_cache_directory_service.cpp | 9 +- .../hle/service/nfc/common/amiibo_crypto.cpp | 108 ++++++------ .../hle/service/nfc/common/amiibo_crypto.h | 15 +- src/core/hle/service/ro/ro.cpp | 11 +- src/core/loader/nca.cpp | 28 +-- src/dedicated_room/CMakeLists.txt | 7 +- src/dedicated_room/yuzu_room.cpp | 26 +-- src/frontend_common/CMakeLists.txt | 7 +- src/yuzu/CMakeLists.txt | 8 +- 24 files changed, 372 insertions(+), 393 deletions(-) delete mode 100644 .patch/mbedtls/0001-aesni-fix.patch delete mode 100644 .patch/mbedtls/0002-arm64-aes-fix.patch diff --git a/.patch/mbedtls/0001-aesni-fix.patch b/.patch/mbedtls/0001-aesni-fix.patch deleted file mode 100644 index 5587e4c22d..0000000000 --- a/.patch/mbedtls/0001-aesni-fix.patch +++ /dev/null @@ -1,35 +0,0 @@ -diff --git a/library/aesni.h b/library/aesni.h -index 754c984c79..59e27afd3e 100644 ---- a/library/aesni.h -+++ b/library/aesni.h -@@ -35,7 +35,7 @@ - /* GCC-like compilers: currently, we only support intrinsics if the requisite - * target flag is enabled when building the library (e.g. `gcc -mpclmul -msse2` - * or `clang -maes -mpclmul`). */ --#if (defined(__GNUC__) || defined(__clang__)) && defined(__AES__) && defined(__PCLMUL__) -+#if defined(__GNUC__) || defined(__clang__) - #define MBEDTLS_AESNI_HAVE_INTRINSICS - #endif - /* For 32-bit, we only support intrinsics */ -diff --git a/library/aesni.c b/library/aesni.c -index 2857068..3e104ab 100644 ---- a/library/aesni.c -+++ b/library/aesni.c -@@ -31,16 +31,14 @@ - #include - #endif - --#if defined(MBEDTLS_ARCH_IS_X86) - #if defined(MBEDTLS_COMPILER_IS_GCC) - #pragma GCC push_options - #pragma GCC target ("pclmul,sse2,aes") - #define MBEDTLS_POP_TARGET_PRAGMA --#elif defined(__clang__) && (__clang_major__ >= 5) -+#elif defined(__clang__) - #pragma clang attribute push (__attribute__((target("pclmul,sse2,aes"))), apply_to=function) - #define MBEDTLS_POP_TARGET_PRAGMA - #endif --#endif - - #if !defined(MBEDTLS_AES_USE_HARDWARE_ONLY) - /* diff --git a/.patch/mbedtls/0002-arm64-aes-fix.patch b/.patch/mbedtls/0002-arm64-aes-fix.patch deleted file mode 100644 index 2140943426..0000000000 --- a/.patch/mbedtls/0002-arm64-aes-fix.patch +++ /dev/null @@ -1,20 +0,0 @@ -diff --git a/library/common.h b/library/common.h -index 50f2a29..c60d9dc 100644 ---- a/library/common.h -+++ b/library/common.h -@@ -19,11 +19,11 @@ - #include - #include - --#if defined(__ARM_NEON) --#include -+#if defined(MBEDTLS_PLATFORM_IS_WINDOWS_ON_ARM64) -+#include - #define MBEDTLS_HAVE_NEON_INTRINSICS --#elif defined(MBEDTLS_PLATFORM_IS_WINDOWS_ON_ARM64) --#include -+#elif (defined(__ANDROID__) && defined(__ARM_FP)) || defined(__ARM_NEON) -+#include - #define MBEDTLS_HAVE_NEON_INTRINSICS - #endif - diff --git a/CMakeLists.txt b/CMakeLists.txt index b0a5ad9a51..dc46cdf817 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -55,24 +55,19 @@ if (YUZU_STATIC_ROOM) set(ENABLE_UPDATE_CHECKER OFF) set(USE_DISCORD_PRESENCE OFF) set(BUILD_TESTING OFF) - set(ENABLE_OPENSSL OFF) set(ENABLE_WEB_SERVICE OFF) set(ENABLE_LIBUSB OFF) - # allow static libs for boost and mbedtls though + # allow static libs for boost though set(Boost_USE_STATIC_LIBS ON) set(CMAKE_FIND_LIBRARY_SUFFIXES ".a") - set(MBEDTLS_LIB_SUFFIX "_static") + set(OPENSSL_USE_STATIC_LIBS ON) set(YUZU_USE_CPM ON) set(zstd_FORCE_BUNDLED ON) set(fmt_FORCE_BUNDLED ON) endif() -# common network mbedtls -# common: xbyak? booost fmt lz4 zstd -# network: enet boost - # qt stuff option(ENABLE_QT "Enable the Qt frontend" ON) option(ENABLE_QT_TRANSLATION "Enable translations for the Qt frontend" OFF) @@ -130,9 +125,6 @@ if (YUZU_STATIC_BUILD) set(YUZU_USE_BUNDLED_OPENSSL ON) set(HTTPLIB_USE_BROTLI_IF_AVAILABLE OFF) - - ## some libraries define a Library::Name_static alternative ## - set(MBEDTLS_LIB_SUFFIX _static) elseif(APPLE) set(YUZU_USE_CPM ON) @@ -145,7 +137,6 @@ if (YUZU_STATIC_BUILD) set(SPIRV-Tools_FORCE_BUNDLED ON) set(SPIRV-Headers_FORCE_BUNDLED ON) set(zstd_FORCE_BUNDLED ON) - set(MbedTLS_FORCE_BUNDLED ON) endif() endif() @@ -245,30 +236,12 @@ cmake_dependent_option(YUZU_USE_BUNDLED_MOLTENVK "Download bundled MoltenVK lib" option(YUZU_DISABLE_LLVM "Disable LLVM (useful for CI)" OFF) -set(DEFAULT_ENABLE_OPENSSL ON) -if (ANDROID OR WIN32 OR APPLE OR PLATFORM_SUN OR PLATFORM_OPENBSD) - # - Windows defaults to the Schannel backend. - # - macOS defaults to the SecureTransport backend. - # - Android currently has no SSL backend as the NDK doesn't include any SSL - # library; a proper 'native' backend would have to go through Java. - # - Solaris and OpenBSD have too old backends - # But you can force builds for those platforms to use OpenSSL if you have - # your own copy of it. - set(DEFAULT_ENABLE_OPENSSL OFF) -endif() - -if (ENABLE_WEB_SERVICE OR USE_DISCORD_PRESENCE) - set(DEFAULT_ENABLE_OPENSSL ON) -endif() - -option(ENABLE_OPENSSL "Enable OpenSSL backend for ISslConnection" ${DEFAULT_ENABLE_OPENSSL}) - set(DEFAULT_YUZU_USE_BUNDLED_OPENSSL OFF) if (EXT_DEFAULT OR PLATFORM_SUN OR PLATFORM_OPENBSD) set(DEFAULT_YUZU_USE_BUNDLED_OPENSSL ON) endif() -cmake_dependent_option(YUZU_USE_BUNDLED_OPENSSL "Download bundled OpenSSL build" ${DEFAULT_YUZU_USE_BUNDLED_OPENSSL} "ENABLE_OPENSSL" OFF) +option(YUZU_USE_BUNDLED_OPENSSL "Download bundled OpenSSL build" ${DEFAULT_YUZU_USE_BUNDLED_OPENSSL}) if (ANDROID AND YUZU_DOWNLOAD_ANDROID_VVL) AddJsonPackage(vulkan-validation-layers) @@ -397,18 +370,16 @@ set(THREADS_PREFER_PTHREAD_FLAG ON) find_package(Threads REQUIRED) # openssl funniness -if (ENABLE_OPENSSL) - if (YUZU_USE_BUNDLED_OPENSSL) - set(BUILD_SHARED_LIBS OFF) - AddJsonPackage(openssl) - if (OpenSSL_ADDED) - add_compile_definitions(YUZU_BUNDLED_OPENSSL) - endif() +if (YUZU_USE_BUNDLED_OPENSSL) + set(BUILD_SHARED_LIBS OFF) + AddJsonPackage(openssl) + if (OpenSSL_ADDED) + add_compile_definitions(YUZU_BUNDLED_OPENSSL) endif() - - find_package(OpenSSL 1.1.1 REQUIRED) endif() +find_package(OpenSSL 3 REQUIRED) + if (YUZU_USE_CPM) message(STATUS "Fetching needed dependencies with CPM") @@ -510,10 +481,6 @@ else() # wow find_package(Boost 1.57.0 CONFIG REQUIRED OPTIONAL_COMPONENTS headers context system fiber filesystem) - - if (ENABLE_OPENSSL) - find_package(OpenSSL 1.1.1 REQUIRED) - endif() endif() if(NOT TARGET Boost::headers) @@ -574,8 +541,8 @@ message(STATUS "Platform Libraries: ${PLATFORM_LIBRARIES}") add_subdirectory(externals) # pass targets from externals +# TODO(crueter): CPMUtil Propagate func? find_package(enet) -find_package(MbedTLS) find_package(unordered_dense REQUIRED) if (ARCHITECTURE_x86 OR ARCHITECTURE_x86_64) diff --git a/cpmfile.json b/cpmfile.json index 80086797af..774f160360 100644 --- a/cpmfile.json +++ b/cpmfile.json @@ -5,7 +5,7 @@ "name": "openssl", "repo": "crueter-ci/OpenSSL", "version": "3.6.0-1cb0d36b39", - "min_version": "1.1.1" + "min_version": "3" }, "boost": { "package": "Boost", diff --git a/docs/Deps.md b/docs/Deps.md index 69af8a7b6a..fe1f7a14b2 100644 --- a/docs/Deps.md +++ b/docs/Deps.md @@ -51,12 +51,11 @@ All other dependencies will be downloaded and built by [CPM](https://github.com/ * [fmt](https://fmt.dev/) 8.0.1+ * [lz4](http://www.lz4.org) * [nlohmann\_json](https://github.com/nlohmann/json) 3.8+ -* [OpenSSL](https://www.openssl.org/source/) 1.1.1+ +* [OpenSSL](https://www.openssl.org/source/) 3+ * [ZLIB](https://www.zlib.net/) 1.2+ * [zstd](https://facebook.github.io/zstd/) 1.5+ * [enet](http://enet.bespin.org/) 1.3+ * [Opus](https://opus-codec.org/) 1.3+ -* [MbedTLS](https://github.com/Mbed-TLS/mbedtls) 3+ Vulkan 1.3.274+ is also needed: @@ -121,7 +120,7 @@ sudo emerge -a \ dev-util/vulkan-utility-libraries dev-util/glslang \ media-gfx/renderdoc media-libs/libva media-libs/opus media-video/ffmpeg \ media-libs/VulkanMemoryAllocator media-libs/libsdl2 media-libs/cubeb \ - net-libs/enet net-libs/mbedtls \ + net-libs/enet \ sys-libs/zlib \ dev-cpp/nlohmann_json dev-cpp/simpleini dev-cpp/cpp-httplib dev-cpp/cpp-jwt \ games-util/gamemode \ @@ -139,7 +138,6 @@ Required USE flags: * `dev-qt/qtbase network concurrent dbus gui widgets` * `dev-libs/quazip qt6` -* `net-libs/mbedtls cmac` * `media-libs/libsdl2 haptic joystick sound video` * `dev-cpp/cpp-httplib ssl` @@ -151,7 +149,7 @@ Required USE flags: Arch Linux ```sh -sudo pacman -Syu --needed base-devel boost catch2 cmake enet ffmpeg fmt git glslang libzip lz4 mbedtls ninja nlohmann-json openssl opus qt6-base qt6-multimedia qt6-charts sdl2 zlib zstd zip unzip vulkan-headers vulkan-utility-libraries libusb spirv-tools spirv-headers +sudo pacman -Syu --needed base-devel boost catch2 cmake enet ffmpeg fmt git glslang libzip lz4 ninja nlohmann-json openssl opus qt6-base qt6-multimedia qt6-charts sdl2 zlib zstd zip unzip vulkan-headers vulkan-utility-libraries libusb spirv-tools spirv-headers ``` * Building with QT Web Engine requires `qt6-webengine` as well. @@ -164,7 +162,7 @@ sudo pacman -Syu --needed base-devel boost catch2 cmake enet ffmpeg fmt git glsl Ubuntu, Debian, Mint Linux ```sh -sudo apt-get install autoconf cmake g++ gcc git glslang-tools libglu1-mesa-dev libhidapi-dev libpulse-dev libtool libudev-dev libxcb-icccm4 libxcb-image0 libxcb-keysyms1 libxcb-render-util0 libxcb-xinerama0 libxcb-xkb1 libxext-dev libxkbcommon-x11-0 mesa-common-dev nasm ninja-build qt6-base-private-dev libmbedtls-dev catch2 libfmt-dev liblz4-dev nlohmann-json3-dev libzstd-dev libssl-dev libavfilter-dev libavcodec-dev libswscale-dev pkg-config zlib1g-dev libva-dev libvdpau-dev qt6-tools-dev qt6-charts-dev libvulkan-dev spirv-tools spirv-headers libusb-1.0-0-dev libxbyak-dev libboost-dev libboost-fiber-dev libboost-context-dev libsdl2-dev libopus-dev libasound2t64 vulkan-utility-libraries-dev +sudo apt-get install autoconf cmake g++ gcc git glslang-tools libglu1-mesa-dev libhidapi-dev libpulse-dev libtool libudev-dev libxcb-icccm4 libxcb-image0 libxcb-keysyms1 libxcb-render-util0 libxcb-xinerama0 libxcb-xkb1 libxext-dev libxkbcommon-x11-0 mesa-common-dev nasm ninja-build qt6-base-private-dev catch2 libfmt-dev liblz4-dev nlohmann-json3-dev libzstd-dev libssl-dev libavfilter-dev libavcodec-dev libswscale-dev pkg-config zlib1g-dev libva-dev libvdpau-dev qt6-tools-dev qt6-charts-dev libvulkan-dev spirv-tools spirv-headers libusb-1.0-0-dev libxbyak-dev libboost-dev libboost-fiber-dev libboost-context-dev libsdl2-dev libopus-dev libasound2t64 vulkan-utility-libraries-dev ``` * Ubuntu 22.04, Linux Mint 20, or Debian 12 or later is required. @@ -211,17 +209,15 @@ First, enable the community repository; [see here](https://wiki.alpinelinux.org/ # Enable the community repository setup-apkrepos -c # Install -apk add g++ git cmake make mbedtls-dev mbedtls-static mesa-dev qt6-qtbase-dev qt6-qtbase-private-dev libquazip1-qt6 ffmpeg-dev qt6-charts-dev libusb-dev libtool boost-dev sdl2-dev zstd-dev vulkan-utility-libraries spirv-tools-dev openssl-dev nlohmann-json lz4-dev opus-dev jq patch +apk add g++ git cmake make mesa-dev qt6-qtbase-dev qt6-qtbase-private-dev libquazip1-qt6 ffmpeg-dev qt6-charts-dev libusb-dev libtool boost-dev sdl2-dev zstd-dev vulkan-utility-libraries spirv-tools-dev openssl-dev nlohmann-json lz4-dev opus-dev jq patch ``` -`mbedtls-static` has to be specified otherwise `libeverest.a` and `libp256m.a` will fail to be found. -
Void Linux ```sh -xbps-install -Su git make cmake clang pkg-config patch mbedtls-devel SPIRV-Tools-devel SPIRV-Headers lz4 liblz4-devel boost-devel ffmpeg6-devel catch2 Vulkan-Utility-Libraries Vulkan-Headers glslang openssl-devel SDL2-devel quazip-qt6-devel qt6-base-devel qt6-qt5compat-devel qt6-charts-devel fmt-devel json-c++ libenet-devel libusb-devel +xbps-install -Su git make cmake clang pkg-config patch SPIRV-Tools-devel SPIRV-Headers lz4 liblz4-devel boost-devel ffmpeg6-devel catch2 Vulkan-Utility-Libraries Vulkan-Headers glslang openssl-devel SDL2-devel quazip-qt6-devel qt6-base-devel qt6-qt5compat-devel qt6-charts-devel fmt-devel json-c++ libenet-devel libusb-devel ``` Yes, `nlohmann-json` is just named `json-c++`. Why? @@ -259,7 +255,7 @@ brew install molten-vk
FreeBSD -As root run: `pkg install devel/cmake devel/sdl20 devel/boost-libs devel/catch2 devel/libfmt devel/nlohmann-json devel/ninja devel/nasm devel/autoconf devel/pkgconf devel/qt6-base devel/qt6-charts devel/simpleini net/enet multimedia/ffnvcodec-headers multimedia/ffmpeg audio/opus archivers/liblz4 lang/gcc12 graphics/glslang graphics/vulkan-utility-libraries graphics/spirv-tools www/cpp-httplib devel/unordered-dense mbedtls3 vulkan-headers quazip-qt6` +As root run: `pkg install devel/cmake devel/sdl20 devel/boost-libs devel/catch2 devel/libfmt devel/nlohmann-json devel/ninja devel/nasm devel/autoconf devel/pkgconf devel/qt6-base devel/qt6-charts devel/simpleini net/enet multimedia/ffnvcodec-headers multimedia/ffmpeg audio/opus archivers/liblz4 lang/gcc12 graphics/glslang graphics/vulkan-utility-libraries graphics/spirv-tools www/cpp-httplib devel/unordered-dense vulkan-headers quazip-qt6` If using FreeBSD 12 or prior, use `devel/pkg-config` instead. @@ -269,7 +265,7 @@ If using FreeBSD 12 or prior, use `devel/pkg-config` instead.
NetBSD -For NetBSD +10.1: `pkgin install git cmake boost fmtlib SDL2 catch2 libjwt spirv-headers spirv-tools ffmpeg7 libva nlohmann-json jq libopus qt6 mbedtls3 cpp-httplib lz4 vulkan-headers nasm autoconf enet pkg-config libusb1 libcxx`. +For NetBSD +10.1: `pkgin install git cmake boost fmtlib SDL2 catch2 libjwt spirv-headers spirv-tools ffmpeg7 libva nlohmann-json jq libopus qt6 cpp-httplib lz4 vulkan-headers nasm autoconf enet pkg-config libusb1 libcxx`. [Caveats](./Caveats.md#netbsd). @@ -313,7 +309,7 @@ sudo pkg install qt6 boost glslang libzip library/lz4 libusb-1 nlohmann-json ope ```sh BASE="git make autoconf libtool automake-wrapper jq patch" -MINGW="qt6-base qt6-charts qt6-tools qt6-translations qt6-svg cmake toolchain clang python-pip openssl vulkan-memory-allocator vulkan-devel glslang boost fmt lz4 nlohmann-json zlib zstd enet opus mbedtls libusb unordered_dense openssl SDL2" +MINGW="qt6-base qt6-charts qt6-tools qt6-translations qt6-svg cmake toolchain clang python-pip openssl vulkan-memory-allocator vulkan-devel glslang boost fmt lz4 nlohmann-json zlib zstd enet opus libusb unordered_dense openssl SDL2" # Either x86_64 or clang-aarch64 (Windows on ARM) packages="$BASE" for pkg in $MINGW; do @@ -339,7 +335,7 @@ pacman -Syuu --needed --noconfirm $packages HaikuOS ```sh -pkgman install git cmake patch libfmt_devel nlohmann_json lz4_devel opus_devel boost1.89_devel vulkan_devel qt6_base_devel qt6_declarative_devel libsdl2_devel ffmpeg7_devel libx11_devel enet_devel catch2_devel quazip1_qt5_devel qt6_5compat_devel mbedtls3_devel glslang qt6_devel qt6_charts_devel +pkgman install git cmake patch libfmt_devel nlohmann_json lz4_devel opus_devel boost1.89_devel vulkan_devel qt6_base_devel qt6_declarative_devel libsdl2_devel ffmpeg7_devel libx11_devel enet_devel catch2_devel quazip1_qt5_devel qt6_5compat_devel glslang qt6_devel qt6_charts_devel ``` [Caveats](./Caveats.md#haikuos). diff --git a/externals/CMakeLists.txt b/externals/CMakeLists.txt index 3b4627d48b..acec7debe5 100644 --- a/externals/CMakeLists.txt +++ b/externals/CMakeLists.txt @@ -41,9 +41,6 @@ if (NOT TARGET enet::enet) add_library(enet::enet ALIAS enet) endif() -# mbedtls -AddJsonPackage(mbedtls) - # stb add_library(stb stb/stb_dxt.cpp) target_include_directories(stb PUBLIC ./stb) @@ -234,9 +231,7 @@ if (VulkanMemoryAllocator_ADDED) endif() # httplib -if (ENABLE_WEB_SERVICE OR ENABLE_UPDATE_CHECKER OR USE_DISCORD_PRESENCE OR ENABLE_OPENSSL) - AddJsonPackage(httplib) -endif() +AddJsonPackage(httplib) # cpp-jwt if (ENABLE_WEB_SERVICE OR ENABLE_UPDATE_CHECKER) diff --git a/externals/cpmfile.json b/externals/cpmfile.json index 37bf5dffb1..9644647638 100644 --- a/externals/cpmfile.json +++ b/externals/cpmfile.json @@ -33,6 +33,9 @@ "find_args": "MODULE GLOBAL", "patches": [ "0001-mingw.patch" + ], + "options": [ + "HTTPLIB_REQUIRE_OPENSSL ON" ] }, "cpp-jwt": { @@ -88,20 +91,6 @@ "0001-avoid-memset-when-clearing-an-empty-table.patch" ] }, - "mbedtls": { - "package": "MbedTLS", - "repo": "Mbed-TLS/mbedtls", - "tag": "mbedtls-%VERSION%", - "hash": "6671fb8fcaa832e5b115dfdce8f78baa6a4aea71f5c89a640583634cdee27aefe3bf4be075744da91f7c3ae5ea4e0c765c8fc3937b5cfd9ea73d87ef496524da", - "version": "3", - "git_version": "3.6.4", - "artifact": "%TAG%.tar.bz2", - "skip_updates": true, - "patches": [ - "0001-aesni-fix.patch", - "0002-arm64-aes-fix.patch" - ] - }, "enet": { "repo": "lsalzman/enet", "tag": "v%VERSION%", diff --git a/src/core/CMakeLists.txt b/src/core/CMakeLists.txt index 4ac08726f7..b3071d94b2 100644 --- a/src/core/CMakeLists.txt +++ b/src/core/CMakeLists.txt @@ -1219,13 +1219,9 @@ target_link_libraries(core PRIVATE fmt::fmt nlohmann_json::nlohmann_json RenderDoc::API - ZLIB::ZLIB - MbedTLS::mbedcrypto${MBEDTLS_LIB_SUFFIX} - MbedTLS::mbedtls${MBEDTLS_LIB_SUFFIX}) + ZLIB::ZLIB) -if (ENABLE_WEB_SERVICE OR ENABLE_OPENSSL) - target_link_libraries(core PRIVATE httplib::httplib) -endif() +target_link_libraries(core PRIVATE httplib::httplib) if (ENABLE_WEB_SERVICE) target_compile_definitions(core PUBLIC ENABLE_WEB_SERVICE) @@ -1271,25 +1267,24 @@ if (ARCHITECTURE_x86_64 OR ARCHITECTURE_arm64) target_link_libraries(core PRIVATE dynarmic::dynarmic) endif() -if(ENABLE_OPENSSL) - target_sources(core PRIVATE - hle/service/ssl/ssl_backend_openssl.cpp) +target_sources(core PRIVATE hle/service/ssl/ssl_backend_openssl.cpp) - find_package(OpenSSL REQUIRED) +target_link_libraries(core PRIVATE OpenSSL::SSL OpenSSL::Crypto) +target_compile_definitions(core PRIVATE CPPHTTPLIB_OPENSSL_SUPPORT) - target_link_libraries(core PRIVATE OpenSSL::SSL OpenSSL::Crypto) - target_compile_definitions(core PRIVATE CPPHTTPLIB_OPENSSL_SUPPORT) -elseif (APPLE) - target_sources(core PRIVATE - hle/service/ssl/ssl_backend_securetransport.cpp) - target_link_libraries(core PRIVATE "-framework Security") -elseif (WIN32) - target_sources(core PRIVATE - hle/service/ssl/ssl_backend_schannel.cpp) - target_link_libraries(core PRIVATE crypt32 secur32) -else() - target_sources(core PRIVATE - hle/service/ssl/ssl_backend_none.cpp) -endif() +# TODO + +# elseif (APPLE) +# target_sources(core PRIVATE +# hle/service/ssl/ssl_backend_securetransport.cpp) +# target_link_libraries(core PRIVATE "-framework Security") +# elseif (WIN32) +# target_sources(core PRIVATE +# hle/service/ssl/ssl_backend_schannel.cpp) +# target_link_libraries(core PRIVATE crypt32 secur32) +# else() +# target_sources(core PRIVATE +# hle/service/ssl/ssl_backend_none.cpp) +# endif() create_target_directory_groups(core) diff --git a/src/core/crypto/aes_util.cpp b/src/core/crypto/aes_util.cpp index 0820ca30ea..1189e45bd8 100644 --- a/src/core/crypto/aes_util.cpp +++ b/src/core/crypto/aes_util.cpp @@ -1,13 +1,13 @@ -// SPDX-FileCopyrightText: Copyright 2025 Eden Emulator Project +// SPDX-FileCopyrightText: Copyright 2026 Eden Emulator Project // SPDX-License-Identifier: GPL-3.0-or-later // SPDX-FileCopyrightText: Copyright 2018 yuzu Emulator Project // SPDX-License-Identifier: GPL-2.0-or-later -#include #include #include -#include +#include +#include #include "common/assert.h" #include "common/logging/log.h" #include "core/crypto/aes_util.h" @@ -28,83 +28,121 @@ NintendoTweak CalculateNintendoTweak(std::size_t sector_id) { } } // Anonymous namespace -static_assert(static_cast(Mode::CTR) == - static_cast(MBEDTLS_CIPHER_AES_128_CTR), - "CTR has incorrect value."); -static_assert(static_cast(Mode::ECB) == - static_cast(MBEDTLS_CIPHER_AES_128_ECB), - "ECB has incorrect value."); -static_assert(static_cast(Mode::XTS) == - static_cast(MBEDTLS_CIPHER_AES_128_XTS), - "XTS has incorrect value."); - -// Structure to hide mbedtls types from header file +// Structure to hide OpenSSL types from header file struct CipherContext { - mbedtls_cipher_context_t encryption_context; - mbedtls_cipher_context_t decryption_context; + EVP_CIPHER_CTX* encryption_context = nullptr; + EVP_CIPHER_CTX* decryption_context = nullptr; + EVP_CIPHER* cipher = nullptr; }; +static inline const std::string GetCipherName(Mode mode, u32 key_size) { + std::string cipher; + std::size_t effective_bits = key_size * 8; + + switch (mode) { + case Mode::CTR: + cipher = "CTR"; + break; + case Mode::ECB: + cipher = "ECB"; + break; + case Mode::XTS: + cipher = "XTS"; + effective_bits /= 2; + break; + default: + UNREACHABLE(); + } + + return fmt::format("AES-{}-{}", effective_bits, cipher); +}; + +static EVP_CIPHER *GetCipher(Mode mode, u32 key_size) { + static auto fetch_cipher = [](Mode m, u32 k) { + return EVP_CIPHER_fetch(nullptr, GetCipherName(m, k).c_str(), nullptr); + }; + + static const struct { + EVP_CIPHER* ctr_16 = fetch_cipher(Mode::CTR, 16); + EVP_CIPHER* ecb_16 = fetch_cipher(Mode::ECB, 16); + EVP_CIPHER* xts_16 = fetch_cipher(Mode::XTS, 16); + EVP_CIPHER* ctr_32 = fetch_cipher(Mode::CTR, 32); + EVP_CIPHER* ecb_32 = fetch_cipher(Mode::ECB, 32); + EVP_CIPHER* xts_32 = fetch_cipher(Mode::XTS, 32); + } ciphers = {}; + + switch (mode) { + case Mode::CTR: + return key_size == 16 ? ciphers.ctr_16 : ciphers.ctr_32; + case Mode::ECB: + return key_size == 16 ? ciphers.ecb_16 : ciphers.ecb_32; + case Mode::XTS: + return key_size == 16 ? ciphers.xts_16 : ciphers.xts_32; + default: + UNIMPLEMENTED(); + } + + return nullptr; +} + +// TODO: WHY TEMPLATE??????? template Crypto::AESCipher::AESCipher(Key key, Mode mode) : ctx(std::make_unique()) { - mbedtls_cipher_init(&ctx->encryption_context); - mbedtls_cipher_init(&ctx->decryption_context); - ASSERT_MSG((mbedtls_cipher_setup( - &ctx->encryption_context, - mbedtls_cipher_info_from_type(static_cast(mode))) || - mbedtls_cipher_setup( - &ctx->decryption_context, - mbedtls_cipher_info_from_type(static_cast(mode)))) == 0, - "Failed to initialize mbedtls ciphers."); + ctx->encryption_context = EVP_CIPHER_CTX_new(); + ctx->decryption_context = EVP_CIPHER_CTX_new(); + ctx->cipher = GetCipher(mode, KeySize); + if (ctx->cipher) { + EVP_CIPHER_up_ref(ctx->cipher); + } else { + UNIMPLEMENTED(); + } - ASSERT( - !mbedtls_cipher_setkey(&ctx->encryption_context, key.data(), KeySize * 8, MBEDTLS_ENCRYPT)); - ASSERT( - !mbedtls_cipher_setkey(&ctx->decryption_context, key.data(), KeySize * 8, MBEDTLS_DECRYPT)); - //"Failed to set key on mbedtls ciphers."); + ASSERT_MSG(ctx->encryption_context && ctx->decryption_context && ctx->cipher, + "OpenSSL cipher context failed init!"); + + // now init ciphers + ASSERT(EVP_CipherInit_ex2(ctx->encryption_context, ctx->cipher, key.data(), NULL, 1, NULL)); + ASSERT(EVP_CipherInit_ex2(ctx->decryption_context, ctx->cipher, key.data(), NULL, 0, NULL)); + + EVP_CIPHER_CTX_set_padding(ctx->encryption_context, 0); + EVP_CIPHER_CTX_set_padding(ctx->decryption_context, 0); } template AESCipher::~AESCipher() { - mbedtls_cipher_free(&ctx->encryption_context); - mbedtls_cipher_free(&ctx->decryption_context); + EVP_CIPHER_CTX_free(ctx->encryption_context); + EVP_CIPHER_CTX_free(ctx->decryption_context); + EVP_CIPHER_free(ctx->cipher); } template void AESCipher::Transcode(const u8* src, std::size_t size, u8* dest, Op op) const { - auto* const context = op == Op::Encrypt ? &ctx->encryption_context : &ctx->decryption_context; - - mbedtls_cipher_reset(context); + auto* const context = op == Op::Encrypt ? ctx->encryption_context : ctx->decryption_context; if (size == 0) return; - const auto mode = mbedtls_cipher_get_cipher_mode(context); - std::size_t written = 0; + // reset + ASSERT(EVP_CipherInit_ex(context, nullptr, nullptr, nullptr, nullptr, -1)); - if (mode != MBEDTLS_MODE_ECB) { - const int ret = mbedtls_cipher_update(context, src, size, dest, &written); - ASSERT(ret == 0); - if (written != size) { - LOG_WARNING(Crypto, "Not all data was processed requested={:016X}, actual={:016X}.", size, written); - } - return; - } - - const auto block_size = mbedtls_cipher_get_block_size(context); - ASSERT(block_size <= AesBlockBytes); + const int block_size = EVP_CIPHER_CTX_get_block_size(context); + ASSERT(block_size > 0 && block_size <= int(AesBlockBytes)); const std::size_t whole_block_bytes = size - (size % block_size); + int written = 0; + if (whole_block_bytes != 0) { - const int ret = mbedtls_cipher_update(context, src, whole_block_bytes, dest, &written); - ASSERT(ret == 0); - if (written != whole_block_bytes) { + ASSERT(EVP_CipherUpdate(context, dest, &written, src, static_cast(whole_block_bytes))); + + if (std::size_t(written) != whole_block_bytes) { LOG_WARNING(Crypto, "Not all data was processed requested={:016X}, actual={:016X}.", whole_block_bytes, written); } } + // tail const std::size_t tail = size - whole_block_bytes; if (tail == 0) return; @@ -112,13 +150,13 @@ void AESCipher::Transcode(const u8* src, std::size_t size, u8* des std::array tail_buffer{}; std::memcpy(tail_buffer.data(), src + whole_block_bytes, tail); - std::size_t tail_written = 0; - const int ret = mbedtls_cipher_update(context, tail_buffer.data(), block_size, tail_buffer.data(), - &tail_written); - ASSERT(ret == 0); + int tail_written = 0; + + ASSERT(EVP_CipherUpdate(context, tail_buffer.data(), &tail_written, tail_buffer.data(), block_size)); + if (tail_written != block_size) { - LOG_WARNING(Crypto, "Not all data was processed requested={:016X}, actual={:016X}.", block_size, - tail_written); + LOG_WARNING(Crypto, "Tail block not fully processed requested={:016X}, actual={:016X}.", + block_size, tail_written); } std::memcpy(dest + whole_block_bytes, tail_buffer.data(), tail); @@ -137,9 +175,10 @@ void AESCipher::XTSTranscode(const u8* src, std::size_t size, u8* template void AESCipher::SetIV(std::span data) { - ASSERT_MSG((mbedtls_cipher_set_iv(&ctx->encryption_context, data.data(), data.size()) || - mbedtls_cipher_set_iv(&ctx->decryption_context, data.data(), data.size())) == 0, - "Failed to set IV on mbedtls ciphers."); + const int ret_enc = EVP_CipherInit_ex(ctx->encryption_context, nullptr, nullptr, nullptr, data.data(), -1); + const int ret_dec = EVP_CipherInit_ex(ctx->decryption_context, nullptr, nullptr, nullptr, data.data(), -1); + + ASSERT_MSG(ret_enc == 1 && ret_dec == 1, "Failed to set IV on OpenSSL contexts"); } template class AESCipher; diff --git a/src/core/crypto/aes_util.h b/src/core/crypto/aes_util.h index 7cc672635e..a3de95e5e2 100644 --- a/src/core/crypto/aes_util.h +++ b/src/core/crypto/aes_util.h @@ -1,4 +1,4 @@ -// SPDX-FileCopyrightText: Copyright 2025 Eden Emulator Project +// SPDX-FileCopyrightText: Copyright 2026 Eden Emulator Project // SPDX-License-Identifier: GPL-3.0-or-later // SPDX-FileCopyrightText: Copyright 2018 yuzu Emulator Project @@ -10,7 +10,6 @@ #include #include #include "common/common_types.h" -#include "core/file_sys/vfs/vfs.h" namespace Core::Crypto { @@ -62,4 +61,5 @@ public: private: std::unique_ptr ctx; }; + } // namespace Core::Crypto diff --git a/src/core/crypto/key_manager.cpp b/src/core/crypto/key_manager.cpp index 353274d77b..9a1b9d7a50 100644 --- a/src/core/crypto/key_manager.cpp +++ b/src/core/crypto/key_manager.cpp @@ -1,4 +1,4 @@ -// SPDX-FileCopyrightText: Copyright 2025 Eden Emulator Project +// SPDX-FileCopyrightText: Copyright 2026 Eden Emulator Project // SPDX-License-Identifier: GPL-3.0-or-later // SPDX-FileCopyrightText: Copyright 2018 yuzu Emulator Project @@ -9,35 +9,26 @@ #include #include #include -#include #include #include #include #include -#include -#include -#include -#include + +#include + #include "common/fs/file.h" #include "common/fs/fs.h" #include "common/fs/path_util.h" #include "common/hex_util.h" #include "common/logging/log.h" -#include "common/settings.h" #include "common/string_util.h" #include "core/crypto/aes_util.h" #include "core/crypto/key_manager.h" #include "core/crypto/partition_data_manager.h" #include "core/file_sys/content_archive.h" -#include "core/file_sys/nca_metadata.h" #include "core/file_sys/registered_cache.h" -#include "core/hle/service/filesystem/filesystem.h" #include "core/loader/loader.h" -#ifndef MBEDTLS_CMAC_C -#error mbedtls was compiled without CMAC support. Check your USE flags (Gentoo) or contact your package maintainer. -#endif - namespace Core::Crypto { namespace { @@ -527,15 +518,27 @@ static std::array MGF1(const std::array& seed) { std::array seed_exp{}; std::memcpy(seed_exp.data(), seed.data(), in_size); + EVP_MD_CTX* ctx = EVP_MD_CTX_new(); + const EVP_MD* sha256 = EVP_sha256(); + std::vector out; size_t i = 0; while (out.size() < target_size) { - out.resize(out.size() + 0x20); - seed_exp[in_size + 3] = static_cast(i); - mbedtls_sha256(seed_exp.data(), seed_exp.size(), out.data() + out.size() - 0x20, 0); + size_t offset = out.size(); + out.resize(offset + 0x20); + seed_exp[in_size + 3] = u8(i); + + u32 hash_len = 0; + + EVP_DigestInit_ex(ctx, sha256, nullptr); + EVP_DigestUpdate(ctx, seed_exp.data(), seed_exp.size()); + EVP_DigestFinal_ex(ctx, out.data() + offset, &hash_len); + ++i; } + EVP_MD_CTX_free(ctx); + std::array target; std::memcpy(target.data(), out.data(), target_size); return target; @@ -588,32 +591,28 @@ std::optional KeyManager::ParseTicketTitleKey(const Ticket& ticket) { return std::nullopt; } - mbedtls_mpi D; // RSA Private Exponent - mbedtls_mpi N; // RSA Modulus - mbedtls_mpi S; // Input - mbedtls_mpi M; // Output - - mbedtls_mpi_init(&D); - mbedtls_mpi_init(&N); - mbedtls_mpi_init(&S); - mbedtls_mpi_init(&M); - - const auto& title_key_block = ticket.GetData().title_key_block; - mbedtls_mpi_read_binary(&D, eticket_rsa_keypair.decryption_key.data(), - eticket_rsa_keypair.decryption_key.size()); - mbedtls_mpi_read_binary(&N, eticket_rsa_keypair.modulus.data(), - eticket_rsa_keypair.modulus.size()); - mbedtls_mpi_read_binary(&S, title_key_block.data(), title_key_block.size()); - - mbedtls_mpi_exp_mod(&M, &S, &D, &N, nullptr); - std::array rsa_step; - mbedtls_mpi_write_binary(&M, rsa_step.data(), rsa_step.size()); + { + // Private context for OpenSSL bignumbers + // Inside block because I dont wanna pollute the space... + const auto& title_key_block = ticket.GetData().title_key_block; + BIGNUM* D = BN_bin2bn(eticket_rsa_keypair.decryption_key.data(), int(eticket_rsa_keypair.decryption_key.size()), NULL); + BIGNUM* N = BN_bin2bn(eticket_rsa_keypair.modulus.data(), int(eticket_rsa_keypair.modulus.size()), NULL); + BIGNUM* S = BN_bin2bn(title_key_block.data(), int(title_key_block.size()), NULL); + BIGNUM* M = BN_new(); + // M = S ^ D mod N + BN_mod_exp(M, S, D, N, NULL); + BN_bn2bin(M, rsa_step.data()); + BN_free(D); + BN_free(N); + BN_free(S); + BN_free(M); + } u8 m_0 = rsa_step[0]; std::array m_1; - std::memcpy(m_1.data(), rsa_step.data() + 0x01, m_1.size()); std::array m_2; + std::memcpy(m_1.data(), rsa_step.data() + 0x01, m_1.size()); std::memcpy(m_2.data(), rsa_step.data() + 0x21, m_2.size()); if (m_0 != 0) { @@ -954,8 +953,18 @@ void KeyManager::DeriveSDSeedLazy() { static Key128 CalculateCMAC(const u8* source, size_t size, const Key128& key) { Key128 out{}; - mbedtls_cipher_cmac(mbedtls_cipher_info_from_type(MBEDTLS_CIPHER_AES_128_ECB), key.data(), - key.size() * 8, source, size, out.data()); + static EVP_MAC* mac = EVP_MAC_fetch(nullptr, "cmac", nullptr); + if (!mac) return out; + + static EVP_MAC_CTX* ctx = EVP_MAC_CTX_new(mac); + if (!ctx) return out; + + EVP_MAC_init(ctx, key.data(), key.size() * CHAR_BIT, NULL); + EVP_MAC_update(ctx, source, size); + + size_t len; + EVP_MAC_final(ctx, out.data(), &len, out.size()); + return out; } diff --git a/src/core/crypto/partition_data_manager.cpp b/src/core/crypto/partition_data_manager.cpp index e185838e57..4dd3d34fdc 100644 --- a/src/core/crypto/partition_data_manager.cpp +++ b/src/core/crypto/partition_data_manager.cpp @@ -1,25 +1,20 @@ -// SPDX-FileCopyrightText: Copyright 2025 Eden Emulator Project +// SPDX-FileCopyrightText: Copyright 2026 Eden Emulator Project // SPDX-License-Identifier: GPL-3.0-or-later // SPDX-FileCopyrightText: Copyright 2018 yuzu Emulator Project // SPDX-License-Identifier: GPL-2.0-or-later -#include #include -#include #include -#include #include "common/common_funcs.h" #include "common/common_types.h" #include "common/hex_util.h" -#include "common/logging/log.h" #include "common/string_util.h" #include "common/swap.h" #include "core/crypto/key_manager.h" #include "core/crypto/partition_data_manager.h" #include "core/crypto/xts_encryption_layer.h" #include "core/file_sys/kernel_executable.h" -#include "core/file_sys/vfs/vfs.h" #include "core/file_sys/vfs/vfs_offset.h" #include "core/file_sys/vfs/vfs_vector.h" #include "core/loader/loader.h" @@ -255,4 +250,4 @@ std::array PartitionDataManager::GetETicketExtendedKek() const { prodinfo_decrypted->Read(out.data(), out.size(), 0x3890); return out; } -} // namespace Core::Crypto \ No newline at end of file +} // namespace Core::Crypto diff --git a/src/core/file_sys/registered_cache.cpp b/src/core/file_sys/registered_cache.cpp index 1b2c45176b..7bf2ad8fcd 100644 --- a/src/core/file_sys/registered_cache.cpp +++ b/src/core/file_sys/registered_cache.cpp @@ -7,12 +7,11 @@ #include #include #include -#include +#include #include "common/assert.h" #include "common/fs/path_util.h" #include "common/hex_util.h" #include "common/logging/log.h" -#include "common/scope_exit.h" #include "common/string_util.h" #include "core/crypto/key_manager.h" #include "core/file_sys/card_image.h" @@ -64,17 +63,23 @@ static bool FollowsNcaIdFormat(std::string_view name) { static std::string GetRelativePathFromNcaID(const std::array& nca_id, bool second_hex_upper, bool within_two_digit, bool cnmt_suffix) { + const auto nca_str = Common::HexToString(nca_id, second_hex_upper); + if (!within_two_digit) { const auto format_str = fmt::runtime(cnmt_suffix ? "{}.cnmt.nca" : "/{}.nca"); - return fmt::format(format_str, Common::HexToString(nca_id, second_hex_upper)); + return fmt::format(format_str, nca_str); } Core::Crypto::SHA256Hash hash{}; - mbedtls_sha256(nca_id.data(), nca_id.size(), hash.data(), 0); + u32 hash_len = 0; + EVP_Digest(nca_id.data(), nca_id.size(), hash.data(), &hash_len, EVP_sha256(), nullptr); const auto format_str = fmt::runtime(cnmt_suffix ? "/000000{:02X}/{}.cnmt.nca" : "/000000{:02X}/{}.nca"); - return fmt::format(format_str, hash[0], Common::HexToString(nca_id, second_hex_upper)); + + LOG_DEBUG(Loader, "Decoded {} bytes, nca id {}", hash_len, nca_str); + + return fmt::format(format_str, hash[0], nca_str); } static std::string GetCNMTName(TitleType type, u64 title_id) { @@ -152,7 +157,11 @@ bool PlaceholderCache::Create(const NcaID& id, u64 size) const { } Core::Crypto::SHA256Hash hash{}; - mbedtls_sha256(id.data(), id.size(), hash.data(), 0); + u32 hash_len = 0; + EVP_Digest(id.data(), id.size(), hash.data(), &hash_len, EVP_sha256(), nullptr); + + LOG_DEBUG(Loader, "Decoded {} bytes, nca id {}", hash_len, id); + const auto dirname = fmt::format("000000{:02X}", hash[0]); const auto dir2 = GetOrCreateDirectoryRelative(dir, dirname); @@ -176,7 +185,11 @@ bool PlaceholderCache::Delete(const NcaID& id) const { } Core::Crypto::SHA256Hash hash{}; - mbedtls_sha256(id.data(), id.size(), hash.data(), 0); + u32 hash_len = 0; + EVP_Digest(id.data(), id.size(), hash.data(), &hash_len, EVP_sha256(), nullptr); + + LOG_DEBUG(Loader, "Decoded {} bytes, nca id {}", hash_len, id); + const auto dirname = fmt::format("000000{:02X}", hash[0]); const auto dir2 = GetOrCreateDirectoryRelative(dir, dirname); @@ -670,7 +683,12 @@ InstallResult RegisteredCache::InstallEntry(const NCA& nca, TitleType type, const OptionalHeader opt_header{0, 0}; ContentRecord c_rec{{}, {}, {}, GetCRTypeFromNCAType(nca.GetType()), {}}; const auto& data = nca.GetBaseFile()->ReadBytes(0x100000); - mbedtls_sha256(data.data(), data.size(), c_rec.hash.data(), 0); + + u32 hash_len = 0; + EVP_Digest(data.data(), data.size(), c_rec.hash.data(), &hash_len, EVP_sha256(), nullptr); + + LOG_DEBUG(Loader, "Decoded {} bytes, nca {}", hash_len, nca.GetName()); + std::memcpy(&c_rec.nca_id, &c_rec.hash, 16); const CNMT new_cnmt(header, opt_header, {c_rec}, {}); if (!RawInstallYuzuMeta(new_cnmt)) { @@ -781,7 +799,12 @@ InstallResult RegisteredCache::RawInstallNCA(const NCA& nca, const VfsCopyFuncti id = *override_id; } else { const auto& data = in->ReadBytes(0x100000); - mbedtls_sha256(data.data(), data.size(), hash.data(), 0); + + u32 hash_len = 0; + EVP_Digest(data.data(), data.size(), hash.data(), &hash_len, EVP_sha256(), nullptr); + + LOG_DEBUG(Loader, "Decoded {} bytes, nca {}", hash_len, nca.GetName()); + memcpy(id.data(), hash.data(), 16); } diff --git a/src/core/file_sys/xts_archive.cpp b/src/core/file_sys/xts_archive.cpp index c1912b2bda..7c5da5e7e3 100644 --- a/src/core/file_sys/xts_archive.cpp +++ b/src/core/file_sys/xts_archive.cpp @@ -1,17 +1,16 @@ -// SPDX-FileCopyrightText: Copyright 2025 Eden Emulator Project +// SPDX-FileCopyrightText: Copyright 2026 Eden Emulator Project // SPDX-License-Identifier: GPL-3.0-or-later // SPDX-FileCopyrightText: Copyright 2018 yuzu Emulator Project // SPDX-License-Identifier: GPL-2.0-or-later -#include #include #include #include #include -#include -#include +#include +#include #include "common/fs/path_util.h" #include "common/hex_util.h" @@ -31,19 +30,24 @@ constexpr u64 NAX_HEADER_PADDING_SIZE = 0x4000; template static bool CalculateHMAC256(Destination* out, const SourceKey* key, std::size_t key_length, const SourceData* data, std::size_t data_length) { - mbedtls_md_context_t context; - mbedtls_md_init(&context); + size_t out_len = 0; - if (mbedtls_md_setup(&context, mbedtls_md_info_from_type(MBEDTLS_MD_SHA256), 1) || - mbedtls_md_hmac_starts(&context, reinterpret_cast(key), key_length) || - mbedtls_md_hmac_update(&context, reinterpret_cast(data), data_length) || - mbedtls_md_hmac_finish(&context, reinterpret_cast(out))) { - mbedtls_md_free(&context); + static EVP_MAC* mac = EVP_MAC_fetch(nullptr, "HMAC", nullptr); + if (!mac) return false; + + static EVP_MAC_CTX* ctx = EVP_MAC_CTX_new(mac); + if (!ctx) return false; + + static OSSL_PARAM params[] = { + OSSL_PARAM_construct_utf8_string("digest", (char*)"SHA256", 0), + OSSL_PARAM_construct_end() + }; + + if (!EVP_MAC_init(ctx, reinterpret_cast(key), key_length, params)) return false; - } - mbedtls_md_free(&context); - return true; + return EVP_MAC_update(ctx, reinterpret_cast(data), data_length) && + EVP_MAC_final(ctx, reinterpret_cast(out), &out_len, 32); } NAX::NAX(VirtualFile file_) @@ -68,7 +72,12 @@ NAX::NAX(VirtualFile file_, std::array nca_id) : header(std::make_unique()), file(std::move(file_)), keys{Core::Crypto::KeyManager::Instance()} { Core::Crypto::SHA256Hash hash{}; - mbedtls_sha256(nca_id.data(), nca_id.size(), hash.data(), 0); + + u32 hash_len = 0; + EVP_Digest(nca_id.data(), nca_id.size(), hash.data(), &hash_len, EVP_sha256(), nullptr); + + LOG_DEBUG(Loader, "Decoded {} bytes, nca id {}", hash_len, nca_id); + status = Parse(fmt::format("/registered/000000{:02X}/{}.nca", hash[0], Common::HexToString(nca_id, false))); } diff --git a/src/core/hle/service/bcat/bcat_util.h b/src/core/hle/service/bcat/bcat_util.h index 6bf2657eeb..699d27e676 100644 --- a/src/core/hle/service/bcat/bcat_util.h +++ b/src/core/hle/service/bcat/bcat_util.h @@ -1,3 +1,6 @@ +// SPDX-FileCopyrightText: Copyright 2026 Eden Emulator Project +// SPDX-License-Identifier: GPL-3.0-or-later + // SPDX-FileCopyrightText: Copyright 2024 yuzu Emulator Project // SPDX-License-Identifier: GPL-3.0-or-later @@ -5,7 +8,6 @@ #include #include -#include #include "core/hle/service/bcat/bcat_result.h" #include "core/hle/service/bcat/bcat_types.h" diff --git a/src/core/hle/service/bcat/delivery_cache_directory_service.cpp b/src/core/hle/service/bcat/delivery_cache_directory_service.cpp index 70b875a2bf..8ead0bae99 100644 --- a/src/core/hle/service/bcat/delivery_cache_directory_service.cpp +++ b/src/core/hle/service/bcat/delivery_cache_directory_service.cpp @@ -1,9 +1,11 @@ -// SPDX-FileCopyrightText: Copyright 2025 Eden Emulator Project +// SPDX-FileCopyrightText: Copyright 2026 Eden Emulator Project // SPDX-License-Identifier: GPL-3.0-or-later // SPDX-FileCopyrightText: Copyright 2024 yuzu Emulator Project // SPDX-License-Identifier: GPL-3.0-or-later +#include +#include #include "common/string_util.h" #include "core/file_sys/vfs/vfs_types.h" #include "core/hle/service/bcat/bcat_result.h" @@ -18,7 +20,10 @@ namespace Service::BCAT { static BcatDigest DigestFile(const FileSys::VirtualFile& file) { BcatDigest out{}; const auto bytes = file->ReadAllBytes(); - mbedtls_md5(bytes.data(), bytes.size(), out.data()); + + u32 hash_len = 0; + EVP_Digest(bytes.data(), bytes.size(), out.data(), &hash_len, EVP_md5(), nullptr); + return out; } diff --git a/src/core/hle/service/nfc/common/amiibo_crypto.cpp b/src/core/hle/service/nfc/common/amiibo_crypto.cpp index 158fa8ed51..1a0f799679 100644 --- a/src/core/hle/service/nfc/common/amiibo_crypto.cpp +++ b/src/core/hle/service/nfc/common/amiibo_crypto.cpp @@ -1,3 +1,6 @@ +// SPDX-FileCopyrightText: Copyright 2026 Eden Emulator Project +// SPDX-License-Identifier: GPL-3.0-or-later + // SPDX-FileCopyrightText: Copyright 2022 yuzu Emulator Project // SPDX-License-Identifier: GPL-3.0-or-later @@ -5,8 +8,9 @@ // SPDX-License-Identifier: MIT #include -#include -#include + +#include +#include #include "common/fs/file.h" #include "common/fs/fs.h" @@ -179,7 +183,7 @@ std::vector GenerateInternalKey(const InternalKey& key, const HashSeed& seed return output; } -void CryptoInit(CryptoCtx& ctx, mbedtls_md_context_t& hmac_ctx, const HmacKey& hmac_key, +void CryptoInit(CryptoCtx& ctx, EVP_MAC_CTX* hmac_ctx, const HmacKey& hmac_key, std::span seed) { // Initialize context ctx.used = false; @@ -188,15 +192,17 @@ void CryptoInit(CryptoCtx& ctx, mbedtls_md_context_t& hmac_ctx, const HmacKey& h memcpy(ctx.buffer.data() + sizeof(u16), seed.data(), seed.size()); // Initialize HMAC context - mbedtls_md_init(&hmac_ctx); - mbedtls_md_setup(&hmac_ctx, mbedtls_md_info_from_type(MBEDTLS_MD_SHA256), 1); - mbedtls_md_hmac_starts(&hmac_ctx, hmac_key.data(), hmac_key.size()); + OSSL_PARAM params[2]; + params[0] = OSSL_PARAM_construct_utf8_string(OSSL_MAC_PARAM_DIGEST, (char*)"SHA256", 0); + params[1] = OSSL_PARAM_construct_end(); + + EVP_MAC_init(hmac_ctx, hmac_key.data(), hmac_key.size(), params); } -void CryptoStep(CryptoCtx& ctx, mbedtls_md_context_t& hmac_ctx, DrgbOutput& output) { +void CryptoStep(CryptoCtx& ctx, EVP_MAC_CTX* hmac_ctx, DrgbOutput& output) { // If used at least once, reinitialize the HMAC if (ctx.used) { - mbedtls_md_hmac_reset(&hmac_ctx); + EVP_MAC_init(hmac_ctx, nullptr, 0, nullptr); } ctx.used = true; @@ -207,9 +213,10 @@ void CryptoStep(CryptoCtx& ctx, mbedtls_md_context_t& hmac_ctx, DrgbOutput& outp ctx.counter++; // Do HMAC magic - mbedtls_md_hmac_update(&hmac_ctx, reinterpret_cast(ctx.buffer.data()), - ctx.buffer_size); - mbedtls_md_hmac_finish(&hmac_ctx, output.data()); + size_t out_len = 0; + EVP_MAC_update(hmac_ctx, reinterpret_cast(ctx.buffer.data()), + ctx.buffer_size); + EVP_MAC_final(hmac_ctx, output.data(), &out_len, output.size()); } DerivedKeys GenerateKey(const InternalKey& key, const NTAG215File& data) { @@ -220,7 +227,9 @@ DerivedKeys GenerateKey(const InternalKey& key, const NTAG215File& data) { // Initialize context CryptoCtx ctx{}; - mbedtls_md_context_t hmac_ctx; + EVP_MAC* mac = EVP_MAC_fetch(nullptr, "HMAC", nullptr); + EVP_MAC_CTX* hmac_ctx = EVP_MAC_CTX_new(mac); + CryptoInit(ctx, hmac_ctx, key.hmac_key, internal_key); // Generate derived keys @@ -231,26 +240,25 @@ DerivedKeys GenerateKey(const InternalKey& key, const NTAG215File& data) { memcpy(&derived_keys, temp.data(), sizeof(DerivedKeys)); // Cleanup context - mbedtls_md_free(&hmac_ctx); + EVP_MAC_CTX_free(hmac_ctx); + EVP_MAC_free(mac); return derived_keys; } void Cipher(const DerivedKeys& keys, const NTAG215File& in_data, NTAG215File& out_data) { - mbedtls_aes_context aes; - std::size_t nc_off = 0; - std::array nonce_counter{}; - std::array stream_block{}; - - const auto aes_key_size = static_cast(keys.aes_key.size() * 8); - mbedtls_aes_setkey_enc(&aes, keys.aes_key.data(), aes_key_size); - memcpy(nonce_counter.data(), keys.aes_iv.data(), sizeof(keys.aes_iv)); + EVP_CIPHER_CTX* ctx = EVP_CIPHER_CTX_new(); + EVP_EncryptInit_ex(ctx, EVP_aes_128_ctr(), nullptr, keys.aes_key.data(), keys.aes_iv.data()); constexpr std::size_t encrypted_data_size = HMAC_TAG_START - SETTINGS_START; - mbedtls_aes_crypt_ctr(&aes, encrypted_data_size, &nc_off, nonce_counter.data(), - stream_block.data(), - reinterpret_cast(&in_data.settings), - reinterpret_cast(&out_data.settings)); + int out_len1 = 0; + int out_len2 = 0; + + EVP_EncryptUpdate(ctx, reinterpret_cast(&out_data.settings), &out_len1, + reinterpret_cast(&in_data.settings), encrypted_data_size); + EVP_EncryptFinal_ex(ctx, reinterpret_cast(&out_data.settings) + out_len1, &out_len2); + + EVP_CIPHER_CTX_free(ctx); // Copy the rest of the data directly out_data.uid = in_data.uid; @@ -317,16 +325,18 @@ bool DecodeAmiibo(const EncryptedNTAG215File& encrypted_tag_data, NTAG215File& t // Regenerate tag HMAC. Note: order matters, data HMAC depends on tag HMAC! constexpr std::size_t input_length = DYNAMIC_LOCK_START - UUID_START; - mbedtls_md_hmac(mbedtls_md_info_from_type(MBEDTLS_MD_SHA256), tag_keys.hmac_key.data(), - sizeof(HmacKey), reinterpret_cast(&tag_data.uid), - input_length, reinterpret_cast(&tag_data.hmac_tag)); + size_t out_len = 0; + EVP_Q_mac(nullptr, "HMAC", nullptr, "SHA256", nullptr, + tag_keys.hmac_key.data(), sizeof(HmacKey), + reinterpret_cast(&tag_data.uid), input_length, + reinterpret_cast(&tag_data.hmac_tag), sizeof(tag_data.hmac_tag), &out_len); // Regenerate data HMAC constexpr std::size_t input_length2 = DYNAMIC_LOCK_START - WRITE_COUNTER_START; - mbedtls_md_hmac(mbedtls_md_info_from_type(MBEDTLS_MD_SHA256), data_keys.hmac_key.data(), - sizeof(HmacKey), - reinterpret_cast(&tag_data.write_counter), input_length2, - reinterpret_cast(&tag_data.hmac_data)); + EVP_Q_mac(nullptr, "HMAC", nullptr, "SHA256", nullptr, + data_keys.hmac_key.data(), sizeof(HmacKey), + reinterpret_cast(&tag_data.write_counter), input_length2, + reinterpret_cast(&tag_data.hmac_data), sizeof(tag_data.hmac_data), &out_len); if (tag_data.hmac_data != encrypted_tag_data.user_memory.hmac_data) { LOG_ERROR(Service_NFP, "hmac_data doesn't match"); @@ -354,31 +364,33 @@ bool EncodeAmiibo(const NTAG215File& tag_data, EncryptedNTAG215File& encrypted_t const auto tag_keys = GenerateKey(locked_secret, tag_data); NTAG215File encoded_tag_data{}; + size_t out_len = 0; // Generate tag HMAC constexpr std::size_t input_length = DYNAMIC_LOCK_START - UUID_START; constexpr std::size_t input_length2 = HMAC_TAG_START - WRITE_COUNTER_START; - mbedtls_md_hmac(mbedtls_md_info_from_type(MBEDTLS_MD_SHA256), tag_keys.hmac_key.data(), - sizeof(HmacKey), reinterpret_cast(&tag_data.uid), - input_length, reinterpret_cast(&encoded_tag_data.hmac_tag)); + EVP_Q_mac(nullptr, "HMAC", nullptr, "SHA256", nullptr, + tag_keys.hmac_key.data(), sizeof(HmacKey), + reinterpret_cast(&tag_data.uid), input_length, + reinterpret_cast(&encoded_tag_data.hmac_tag), sizeof(encoded_tag_data.hmac_tag), &out_len); - // Init mbedtls HMAC context - mbedtls_md_context_t ctx; - mbedtls_md_init(&ctx); - mbedtls_md_setup(&ctx, mbedtls_md_info_from_type(MBEDTLS_MD_SHA256), 1); + // Init OpenSSL HMAC context + EVP_MAC* mac = EVP_MAC_fetch(nullptr, "HMAC", nullptr); + EVP_MAC_CTX* ctx = EVP_MAC_CTX_new(mac); + OSSL_PARAM params[2]; + params[0] = OSSL_PARAM_construct_utf8_string(OSSL_MAC_PARAM_DIGEST, (char*)"SHA256", 0); + params[1] = OSSL_PARAM_construct_end(); // Generate data HMAC - mbedtls_md_hmac_starts(&ctx, data_keys.hmac_key.data(), sizeof(HmacKey)); - mbedtls_md_hmac_update(&ctx, reinterpret_cast(&tag_data.write_counter), - input_length2); // Data - mbedtls_md_hmac_update(&ctx, reinterpret_cast(&encoded_tag_data.hmac_tag), - sizeof(HashData)); // Tag HMAC - mbedtls_md_hmac_update(&ctx, reinterpret_cast(&tag_data.uid), - input_length); - mbedtls_md_hmac_finish(&ctx, reinterpret_cast(&encoded_tag_data.hmac_data)); + EVP_MAC_init(ctx, data_keys.hmac_key.data(), sizeof(HmacKey), params); + EVP_MAC_update(ctx, reinterpret_cast(&tag_data.write_counter), input_length2); // data + EVP_MAC_update(ctx, reinterpret_cast(&encoded_tag_data.hmac_tag), sizeof(HashData)); // tag hmax + EVP_MAC_update(ctx, reinterpret_cast(&tag_data.uid), input_length); + EVP_MAC_final(ctx, reinterpret_cast(&encoded_tag_data.hmac_data), &out_len, sizeof(encoded_tag_data.hmac_data)); // HMAC cleanup - mbedtls_md_free(&ctx); + EVP_MAC_CTX_free(ctx); + EVP_MAC_free(mac); // Encrypt Cipher(data_keys, tag_data, encoded_tag_data); diff --git a/src/core/hle/service/nfc/common/amiibo_crypto.h b/src/core/hle/service/nfc/common/amiibo_crypto.h index 2cc0e4d519..454bfcf29c 100644 --- a/src/core/hle/service/nfc/common/amiibo_crypto.h +++ b/src/core/hle/service/nfc/common/amiibo_crypto.h @@ -1,13 +1,18 @@ +// SPDX-FileCopyrightText: Copyright 2026 Eden Emulator Project +// SPDX-License-Identifier: GPL-3.0-or-later + // SPDX-FileCopyrightText: Copyright 2022 yuzu Emulator Project // SPDX-License-Identifier: GPL-3.0-or-later #pragma once #include +#include +#include #include "core/hle/service/nfp/nfp_types.h" -struct mbedtls_md_context_t; +typedef struct evp_mac_ctx_st EVP_MAC_CTX; namespace Service::NFP::AmiiboCrypto { // Byte locations in Service::NFP::NTAG215File @@ -73,12 +78,12 @@ HashSeed GetSeed(const NTAG215File& data); // Middle step on the generation of derived keys std::vector GenerateInternalKey(const InternalKey& key, const HashSeed& seed); -// Initializes mbedtls context -void CryptoInit(CryptoCtx& ctx, mbedtls_md_context_t& hmac_ctx, const HmacKey& hmac_key, +// Initializes OpenSSL HMAC context +void CryptoInit(CryptoCtx& ctx, EVP_MAC_CTX* hmac_ctx, const HmacKey& hmac_key, std::span seed); -// Feeds data to mbedtls context to generate the derived key -void CryptoStep(CryptoCtx& ctx, mbedtls_md_context_t& hmac_ctx, DrgbOutput& output); +// Feeds data to OpenSSL context to generate the derived key +void CryptoStep(CryptoCtx& ctx, EVP_MAC_CTX* hmac_ctx, DrgbOutput& output); // Generates the derived key from amiibo data DerivedKeys GenerateKey(const InternalKey& key, const NTAG215File& data); diff --git a/src/core/hle/service/ro/ro.cpp b/src/core/hle/service/ro/ro.cpp index 05806e9bf3..041c0dbd87 100644 --- a/src/core/hle/service/ro/ro.cpp +++ b/src/core/hle/service/ro/ro.cpp @@ -1,21 +1,21 @@ -// SPDX-FileCopyrightText: Copyright 2025 Eden Emulator Project +// SPDX-FileCopyrightText: Copyright 2026 Eden Emulator Project // SPDX-License-Identifier: GPL-3.0-or-later // SPDX-FileCopyrightText: Copyright 2023 yuzu Emulator Project // SPDX-License-Identifier: GPL-2.0-or-later -#include +#include +#include -#include "common/scope_exit.h" #include "core/hle/kernel/k_process.h" #include "core/hle/service/cmif_serialization.h" -#include "core/hle/service/ipc_helpers.h" #include "core/hle/service/ro/ro.h" #include "core/hle/service/ro/ro_nro_utils.h" #include "core/hle/service/ro/ro_results.h" #include "core/hle/service/ro/ro_types.h" #include "core/hle/service/server_manager.h" +#include "core/hle/service/service.h" namespace Service::RO { @@ -181,7 +181,8 @@ struct ProcessContext { std::vector nro_data(size); m_process->GetMemory().ReadBlock(base_address, nro_data.data(), size); - mbedtls_sha256(nro_data.data(), size, hash.data(), 0); + u32 hash_len = 0; + EVP_Digest(nro_data.data(), nro_data.size(), hash.data(), &hash_len, EVP_sha256(), nullptr); } for (size_t i = 0; i < MaxNrrInfos; i++) { diff --git a/src/core/loader/nca.cpp b/src/core/loader/nca.cpp index 1d4846df09..b656b9fe96 100644 --- a/src/core/loader/nca.cpp +++ b/src/core/loader/nca.cpp @@ -1,10 +1,12 @@ -// SPDX-FileCopyrightText: Copyright 2025 Eden Emulator Project +// SPDX-FileCopyrightText: Copyright 2026 Eden Emulator Project // SPDX-License-Identifier: GPL-3.0-or-later // SPDX-FileCopyrightText: Copyright 2018 yuzu Emulator Project // SPDX-License-Identifier: GPL-2.0-or-later #include +#include +#include #include "common/hex_util.h" #include "common/scope_exit.h" @@ -17,7 +19,6 @@ #include "core/hle/service/filesystem/filesystem.h" #include "core/loader/deconstructed_rom_directory.h" #include "core/loader/nca.h" -#include "mbedtls/sha256.h" #include "common/literals.h" namespace Loader { @@ -133,9 +134,8 @@ ResultStatus AppLoader_NCA::VerifyIntegrity(std::function const auto name = file->GetName(); // We won't try to verify meta NCAs. - if (name.ends_with(".cnmt.nca")) { + if (name.ends_with(".cnmt.nca")) return ResultStatus::Success; - } // Check if we can verify this file. NCAs should be named after their hashes. if (!name.ends_with(".nca") || name.size() != NcaFileNameWithHashLength) { @@ -151,15 +151,18 @@ ResultStatus AppLoader_NCA::VerifyIntegrity(std::function std::vector buffer(4_MiB); // Initialize sha256 verification context. - mbedtls_sha256_context ctx; - mbedtls_sha256_init(&ctx); - mbedtls_sha256_starts(&ctx, 0); + EVP_MD_CTX* ctx = EVP_MD_CTX_new(); + if (!ctx) + return ResultStatus::ErrorNotInitialized; // Ensure we maintain a clean state on exit. SCOPE_EXIT { - mbedtls_sha256_free(&ctx); + EVP_MD_CTX_free(ctx); }; + if (!EVP_DigestInit_ex(ctx, EVP_sha256(), nullptr)) + return ResultStatus::ErrorIntegrityVerificationFailed; + // Declare counters. const size_t total_size = file->GetSize(); size_t processed_size = 0; @@ -171,7 +174,9 @@ ResultStatus AppLoader_NCA::VerifyIntegrity(std::function const size_t read_size = file->Read(buffer.data(), intended_read_size, processed_size); // Update the hash function with the buffer contents. - mbedtls_sha256_update(&ctx, buffer.data(), read_size); + if (!EVP_DigestUpdate(ctx, buffer.data(), read_size)) { + return ResultStatus::ErrorIntegrityVerificationFailed; + } // Update counters. processed_size += read_size; @@ -184,7 +189,10 @@ ResultStatus AppLoader_NCA::VerifyIntegrity(std::function // Finalize context and compute the output hash. std::array output_hash; - mbedtls_sha256_finish(&ctx, output_hash.data()); + unsigned int output_len = 0; + if (!EVP_DigestFinal_ex(ctx, output_hash.data(), &output_len)) { + return ResultStatus::ErrorIntegrityVerificationFailed; + } // Compare to expected. if (std::memcmp(input_hash.data(), output_hash.data(), NcaSha256HalfHashLength) != 0) { diff --git a/src/dedicated_room/CMakeLists.txt b/src/dedicated_room/CMakeLists.txt index eb0b4f399e..36c8af5e34 100644 --- a/src/dedicated_room/CMakeLists.txt +++ b/src/dedicated_room/CMakeLists.txt @@ -1,4 +1,4 @@ -# SPDX-FileCopyrightText: Copyright 2025 Eden Emulator Project +# SPDX-FileCopyrightText: Copyright 2026 Eden Emulator Project # SPDX-License-Identifier: GPL-3.0-or-later # SPDX-FileCopyrightText: 2017 Citra Emulator Project @@ -16,7 +16,10 @@ if (ENABLE_WEB_SERVICE) target_link_libraries(yuzu-room PRIVATE web_service) endif() -target_link_libraries(yuzu-room PRIVATE MbedTLS::mbedcrypto${MBEDTLS_LIB_SUFFIX} MbedTLS::mbedtls${MBEDTLS_LIB_SUFFIX}) +target_link_libraries(yuzu-room PRIVATE + OpenSSL::SSL + OpenSSL::Crypto) + if (MSVC) target_link_libraries(yuzu-room PRIVATE getopt) endif() diff --git a/src/dedicated_room/yuzu_room.cpp b/src/dedicated_room/yuzu_room.cpp index 880431fa85..126053f43f 100644 --- a/src/dedicated_room/yuzu_room.cpp +++ b/src/dedicated_room/yuzu_room.cpp @@ -1,4 +1,4 @@ -// SPDX-FileCopyrightText: Copyright 2025 Eden Emulator Project +// SPDX-FileCopyrightText: Copyright 2026 Eden Emulator Project // SPDX-License-Identifier: GPL-3.0-or-later // SPDX-FileCopyrightText: Copyright 2017 Citra Emulator Project @@ -22,7 +22,7 @@ #include #endif -#include +#include #include "common/common_types.h" #include "common/detached_tasks.h" #include "common/fs/file.h" @@ -84,15 +84,11 @@ static constexpr char BanListMagic[] = "YuzuRoom-BanList-1"; static constexpr char token_delimiter{':'}; static void PadToken(std::string& token) { - std::size_t outlen = 0; - std::array output{}; std::array roundtrip{}; for (size_t i = 0; i < 3; i++) { - mbedtls_base64_decode(output.data(), output.size(), &outlen, - reinterpret_cast(token.c_str()), - token.length()); - mbedtls_base64_encode(roundtrip.data(), roundtrip.size(), &outlen, output.data(), outlen); + EVP_DecodeBlock(output.data(), reinterpret_cast(token.c_str()), token.size()); + EVP_EncodeBlock(output.data(), roundtrip.data(), roundtrip.size()); if (memcmp(roundtrip.data(), token.data(), token.size()) == 0) { break; } @@ -101,23 +97,17 @@ static void PadToken(std::string& token) { } static std::string UsernameFromDisplayToken(const std::string& display_token) { - std::size_t outlen; - + std::size_t outlen = 4 * ((display_token.length() + 2) / 3); std::array output{}; - mbedtls_base64_decode(output.data(), output.size(), &outlen, - reinterpret_cast(display_token.c_str()), - display_token.length()); + EVP_DecodeBlock(output.data(), reinterpret_cast(display_token.c_str()), display_token.length()); std::string decoded_display_token(reinterpret_cast(&output), outlen); return decoded_display_token.substr(0, decoded_display_token.find(token_delimiter)); } static std::string TokenFromDisplayToken(const std::string& display_token) { - std::size_t outlen; - + std::size_t outlen = 4 * ((display_token.length() + 2) / 3); std::array output{}; - mbedtls_base64_decode(output.data(), output.size(), &outlen, - reinterpret_cast(display_token.c_str()), - display_token.length()); + EVP_DecodeBlock(output.data(), reinterpret_cast(display_token.c_str()), display_token.length()); std::string decoded_display_token(reinterpret_cast(&output), outlen); return decoded_display_token.substr(decoded_display_token.find(token_delimiter) + 1); } diff --git a/src/frontend_common/CMakeLists.txt b/src/frontend_common/CMakeLists.txt index 82993e45b6..a6d580cb18 100644 --- a/src/frontend_common/CMakeLists.txt +++ b/src/frontend_common/CMakeLists.txt @@ -23,11 +23,8 @@ if (ENABLE_UPDATE_CHECKER) update_checker.cpp update_checker.h) - if (ENABLE_OPENSSL) - target_compile_definitions(frontend_common PUBLIC CPPHTTPLIB_OPENSSL_SUPPORT) - target_link_libraries(frontend_common PRIVATE OpenSSL::SSL OpenSSL::Crypto) - endif() - + target_compile_definitions(frontend_common PUBLIC CPPHTTPLIB_OPENSSL_SUPPORT) + target_link_libraries(frontend_common PRIVATE OpenSSL::SSL OpenSSL::Crypto) endif() create_target_directory_groups(frontend_common) diff --git a/src/yuzu/CMakeLists.txt b/src/yuzu/CMakeLists.txt index 1fb87fe1f8..ce8d1a6615 100644 --- a/src/yuzu/CMakeLists.txt +++ b/src/yuzu/CMakeLists.txt @@ -361,10 +361,6 @@ target_sources(yuzu ${LANGUAGES} ${THEMES}) -if (ENABLE_OPENSSL) - target_link_libraries(yuzu PRIVATE OpenSSL::SSL OpenSSL::Crypto) -endif() - if (APPLE) # Normal icns set(MACOSX_ICON "${CMAKE_SOURCE_DIR}/dist/eden.icns") @@ -458,8 +454,6 @@ if (NOT MSVC AND (APPLE OR NOT YUZU_STATIC_BUILD)) endif() # Remember that the linker is incredibly stupid. -if (YUZU_STATIC_BUILD AND MINGW AND ARCHITECTURE_x86_64 AND ENABLE_OPENSSL) - target_link_libraries(yuzu PRIVATE OpenSSL::SSL OpenSSL::Crypto) -endif() +target_link_libraries(yuzu PRIVATE OpenSSL::SSL OpenSSL::Crypto) create_target_directory_groups(yuzu) From 45eb9cfcee1512afae13df55512fd2adf1103952 Mon Sep 17 00:00:00 2001 From: crueter Date: Mon, 23 Feb 2026 02:52:12 +0100 Subject: [PATCH 07/84] [desktop] Reset speed mode on game shutdown (#3613) Closes #3602 Signed-off-by: crueter Reviewed-on: https://git.eden-emu.dev/eden-emu/eden/pulls/3613 Reviewed-by: CamilleLaVey Reviewed-by: Lizzie Reviewed-by: MaranBr --- src/yuzu/main_window.cpp | 28 +++++++++++++++++++++------- src/yuzu/main_window.h | 1 + 2 files changed, 22 insertions(+), 7 deletions(-) diff --git a/src/yuzu/main_window.cpp b/src/yuzu/main_window.cpp index d8b7f1adbc..e1a94632f9 100644 --- a/src/yuzu/main_window.cpp +++ b/src/yuzu/main_window.cpp @@ -1446,20 +1446,17 @@ void MainWindow::InitializeHotkeys() { connect_shortcut(QStringLiteral("Toggle Framerate Limit"), [this] { Settings::ToggleStandardMode(); - const bool limited = Settings::values.use_speed_limit.GetValue(); - m_fpsSuffix = limited ? QString{} : tr("Unlocked"); + SetFPSSuffix(); }); connect_shortcut(QStringLiteral("Toggle Turbo Speed"), [this] { Settings::ToggleTurboMode(); - const bool turbo = Settings::values.current_speed_mode.GetValue() == Settings::SpeedMode::Turbo; - m_fpsSuffix = turbo ? tr("Turbo") : QString{}; + SetFPSSuffix(); }); connect_shortcut(QStringLiteral("Toggle Slow Speed"), [this] { Settings::ToggleSlowMode(); - const bool slow = Settings::values.current_speed_mode.GetValue() == Settings::SpeedMode::Slow; - m_fpsSuffix = slow ? tr("Slow") : QString{}; + SetFPSSuffix(); }); connect_shortcut(QStringLiteral("Toggle Renderdoc Capture"), [] { @@ -2145,6 +2142,7 @@ void MainWindow::BootGame(const QString& filename, Service::AM::FrontendAppletPa status_bar_update_timer.start(500); renderer_status_button->setDisabled(true); refresh_button->setDisabled(true); + SetFPSSuffix(); if (UISettings::values.hide_mouse || Settings::values.mouse_panning) { render_window->installEventFilter(render_window); @@ -2209,8 +2207,9 @@ bool MainWindow::OnShutdownBegin() { AllowOSSleep(); - // Disable unlimited frame rate + // Disable unlimited frame rate and turbo/slow modes Settings::values.use_speed_limit.SetValue(true); + Settings::values.current_speed_mode = Settings::SpeedMode::Standard; if (QtCommon::system->IsShuttingDown()) { return false; @@ -4517,6 +4516,21 @@ void MainWindow::SetFirmwareVersion() { firmware_label->setToolTip(QString::fromStdString(display_title)); } +void MainWindow::SetFPSSuffix() { + switch (Settings::values.current_speed_mode.GetValue()) { + case Settings::SpeedMode::Slow: + m_fpsSuffix = tr("Slow"); + break; + case Settings::SpeedMode::Turbo: + m_fpsSuffix = tr("Turbo"); + break; + case Settings::SpeedMode::Standard: + const bool limited = Settings::values.use_speed_limit.GetValue(); + m_fpsSuffix = limited ? QString{} : tr("Unlocked"); + break; + } +} + bool MainWindow::SelectRomFSDumpTarget(const FileSys::ContentProvider& installed, u64 program_id, u64* selected_title_id, u8* selected_content_record_type) { using ContentInfo = std::tuple; diff --git a/src/yuzu/main_window.h b/src/yuzu/main_window.h index 4ebfdbcb1e..bb58191951 100644 --- a/src/yuzu/main_window.h +++ b/src/yuzu/main_window.h @@ -464,6 +464,7 @@ private: void OpenPerGameConfiguration(u64 title_id, const std::string& file_name); bool CheckFirmwarePresence(); void SetFirmwareVersion(); + void SetFPSSuffix(); void ConfigureFilesystemProvider(const std::string& filepath); /** * Open (or not) the right confirm dialog based on current setting and game exit lock From eb57e11f423eab55411aeea8b70ec93ae4219f13 Mon Sep 17 00:00:00 2001 From: crueter Date: Mon, 23 Feb 2026 03:47:19 +0100 Subject: [PATCH 08/84] [cmake] Delete YUZU_USE_CPM forever (#3615) This option is really confusing, and has long since outlived its originally intended purpose. Goodbye forever! Closes #3467 Signed-off-by: crueter Reviewed-on: https://git.eden-emu.dev/eden-emu/eden/pulls/3615 Reviewed-by: DraVee Reviewed-by: MaranBr --- CMakeLists.txt | 158 ++++++++++++++++++++----------------------------- 1 file changed, 65 insertions(+), 93 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index dc46cdf817..2832484c28 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -62,7 +62,6 @@ if (YUZU_STATIC_ROOM) set(Boost_USE_STATIC_LIBS ON) set(CMAKE_FIND_LIBRARY_SUFFIXES ".a") set(OPENSSL_USE_STATIC_LIBS ON) - set(YUZU_USE_CPM ON) set(zstd_FORCE_BUNDLED ON) set(fmt_FORCE_BUNDLED ON) @@ -126,8 +125,6 @@ if (YUZU_STATIC_BUILD) set(HTTPLIB_USE_BROTLI_IF_AVAILABLE OFF) elseif(APPLE) - set(YUZU_USE_CPM ON) - set(YUZU_USE_BUNDLED_FFMPEG ON) set(YUZU_USE_BUNDLED_SDL2 ON) set(YUZU_USE_BUNDLED_OPENSSL ON) @@ -189,8 +186,6 @@ if (MSVC OR ANDROID) set(EXT_DEFAULT ON) endif() -option(YUZU_USE_CPM "Use CPM to fetch system dependencies (fmt, boost, etc) if needed. Externals will still be fetched." ${EXT_DEFAULT}) - # ffmpeg option(YUZU_USE_BUNDLED_FFMPEG "Download bundled FFmpeg" ${EXT_DEFAULT}) cmake_dependent_option(YUZU_USE_EXTERNAL_FFMPEG "Build FFmpeg from external source" "${PLATFORM_SUN}" "NOT WIN32 AND NOT ANDROID" OFF) @@ -369,6 +364,8 @@ set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/bin) set(THREADS_PREFER_PTHREAD_FLAG ON) find_package(Threads REQUIRED) +find_package(RenderDoc MODULE) + # openssl funniness if (YUZU_USE_BUNDLED_OPENSSL) set(BUILD_SHARED_LIBS OFF) @@ -380,107 +377,82 @@ endif() find_package(OpenSSL 3 REQUIRED) -if (YUZU_USE_CPM) - message(STATUS "Fetching needed dependencies with CPM") +message(STATUS "Fetching needed dependencies with CPM") - set(BUILD_SHARED_LIBS OFF) - set(BUILD_TESTING OFF) - set(ENABLE_TESTING OFF) +set(BUILD_SHARED_LIBS OFF) +set(BUILD_TESTING OFF) +set(ENABLE_TESTING OFF) - # TODO(crueter): renderdoc? +# boost +set(BOOST_INCLUDE_LIBRARIES algorithm icl pool container heap asio headers process filesystem crc variant) - # boost - set(BOOST_INCLUDE_LIBRARIES algorithm icl pool container heap asio headers process filesystem crc variant) +AddJsonPackage(boost) - AddJsonPackage(boost) +# really annoying thing where boost::headers doesn't work with cpm +# TODO(crueter) investigate +set(BOOST_NO_HEADERS ${Boost_ADDED}) - # really annoying thing where boost::headers doesn't work with cpm - # TODO(crueter) investigate - set(BOOST_NO_HEADERS ${Boost_ADDED}) +if (Boost_ADDED) + if (MSVC OR ANDROID) + add_compile_definitions(YUZU_BOOST_v1) + endif() - if (Boost_ADDED) - if (MSVC OR ANDROID) - add_compile_definitions(YUZU_BOOST_v1) + if (NOT MSVC OR CXX_CLANG) + # boost sucks + if (PLATFORM_SUN) + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -pthreads") + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -pthreads") endif() - if (NOT MSVC OR CXX_CLANG) - # boost sucks - if (PLATFORM_SUN) - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -pthreads") - set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -pthreads") - endif() + target_compile_options(boost_heap INTERFACE -Wno-shadow) + target_compile_options(boost_icl INTERFACE -Wno-shadow) + target_compile_options(boost_asio INTERFACE -Wno-conversion -Wno-implicit-fallthrough) + endif() +endif() - target_compile_options(boost_heap INTERFACE -Wno-shadow) - target_compile_options(boost_icl INTERFACE -Wno-shadow) - target_compile_options(boost_asio INTERFACE -Wno-conversion -Wno-implicit-fallthrough) +# fmt +AddJsonPackage(fmt) + +# lz4 +AddJsonPackage(lz4) + +if (lz4_ADDED) + add_library(lz4::lz4 ALIAS lz4_static) +endif() + +# zstd +AddJsonPackage(zstd) + +if (zstd_ADDED) + add_library(zstd::zstd ALIAS libzstd_static) + add_library(zstd::libzstd ALIAS libzstd_static) +endif() + +if (NOT YUZU_STATIC_ROOM) + # nlohmann + AddJsonPackage(nlohmann) + + # zlib + AddJsonPackage(zlib) + + if (ZLIB_ADDED) + add_library(ZLIB::ZLIB ALIAS zlibstatic) + endif() + + # Opus + AddJsonPackage(opus) + + if (Opus_ADDED) + if (MSVC AND CXX_CLANG) + target_compile_options(opus PRIVATE + -Wno-implicit-function-declaration + ) endif() endif() - # fmt - AddJsonPackage(fmt) - - # lz4 - AddJsonPackage(lz4) - - if (lz4_ADDED) - add_library(lz4::lz4 ALIAS lz4_static) + if (NOT TARGET Opus::opus) + add_library(Opus::opus ALIAS opus) endif() - - # zstd - AddJsonPackage(zstd) - - if (zstd_ADDED) - add_library(zstd::zstd ALIAS libzstd_static) - add_library(zstd::libzstd ALIAS libzstd_static) - endif() - - if (NOT YUZU_STATIC_ROOM) - # nlohmann - AddJsonPackage(nlohmann) - - # zlib - AddJsonPackage(zlib) - - if (ZLIB_ADDED) - add_library(ZLIB::ZLIB ALIAS zlibstatic) - endif() - - # Opus - AddJsonPackage(opus) - - if (Opus_ADDED) - if (MSVC AND CXX_CLANG) - target_compile_options(opus PRIVATE - -Wno-implicit-function-declaration - ) - endif() - endif() - - if (NOT TARGET Opus::opus) - add_library(Opus::opus ALIAS opus) - endif() - endif() -else() - # TODO: we can probably just use CPM for this... right? - # Enforce the search mode of non-required packages for better and shorter failure messages - find_package(fmt 8 REQUIRED) - - if (NOT YUZU_DISABLE_LLVM) - find_package(LLVM MODULE COMPONENTS Demangle) - endif() - - find_package(nlohmann_json 3.8 REQUIRED) - find_package(lz4 REQUIRED) - find_package(RenderDoc MODULE) - find_package(stb MODULE) - - find_package(Opus 1.3 MODULE REQUIRED) - - find_package(ZLIB 1.2 REQUIRED) - find_package(zstd 1.5 REQUIRED MODULE) - - # wow - find_package(Boost 1.57.0 CONFIG REQUIRED OPTIONAL_COMPONENTS headers context system fiber filesystem) endif() if(NOT TARGET Boost::headers) From 89dd600790a30dcddab00b37ba348ae047818c13 Mon Sep 17 00:00:00 2001 From: crueter Date: Mon, 23 Feb 2026 03:47:25 +0100 Subject: [PATCH 09/84] [cmake] Comment out YUZU_USE_QT_MULTIMEDIA usages (#3616) This option is currently dead code. Let's not use it. In the future we should definitely update it. (or not, not a single soul used this beforehand). See: #3468 Signed-off-by: crueter Reviewed-on: https://git.eden-emu.dev/eden-emu/eden/pulls/3616 Reviewed-by: DraVee Reviewed-by: MaranBr --- CMakeLists.txt | 14 +++++++------- src/yuzu/CMakeLists.txt | 8 ++++---- 2 files changed, 11 insertions(+), 11 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 2832484c28..64e847465e 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -71,7 +71,7 @@ endif() option(ENABLE_QT "Enable the Qt frontend" ON) option(ENABLE_QT_TRANSLATION "Enable translations for the Qt frontend" OFF) option(ENABLE_UPDATE_CHECKER "Enable update checker (for Qt and Android)" OFF) -option(YUZU_USE_QT_MULTIMEDIA "Use QtMultimedia for Camera" OFF) +# option(YUZU_USE_QT_MULTIMEDIA "Use QtMultimedia for Camera" OFF) cmake_dependent_option(YUZU_USE_QT_WEB_ENGINE "Use QtWebEngine for web applet implementation" OFF "NOT YUZU_USE_BUNDLED_QT" OFF) set(YUZU_QT_MIRROR "" CACHE STRING "What mirror to use for downloading the bundled Qt libraries") cmake_dependent_option(YUZU_USE_BUNDLED_QT "Download bundled Qt binaries" "${MSVC}" "ENABLE_QT" OFF) @@ -582,9 +582,9 @@ if (ENABLE_QT) find_package(Qt6 CONFIG REQUIRED COMPONENTS Widgets Charts Concurrent) - if (YUZU_USE_QT_MULTIMEDIA) - find_package(Qt6 REQUIRED COMPONENTS Multimedia) - endif() + # if (YUZU_USE_QT_MULTIMEDIA) + # find_package(Qt6 REQUIRED COMPONENTS Multimedia) + # endif() if (PLATFORM_LINUX OR PLATFORM_FREEBSD) # yes Qt, we get it @@ -623,9 +623,9 @@ if (ENABLE_QT) if (PLATFORM_LINUX) list(APPEND YUZU_QT_COMPONENTS DBus) endif() - if (YUZU_USE_QT_MULTIMEDIA) - list(APPEND YUZU_QT_COMPONENTS Multimedia) - endif() + # if (YUZU_USE_QT_MULTIMEDIA) + # list(APPEND YUZU_QT_COMPONENTS Multimedia) + # endif() if (YUZU_USE_QT_WEB_ENGINE) list(APPEND YUZU_QT_COMPONENTS WebEngineCore WebEngineWidgets) endif() diff --git a/src/yuzu/CMakeLists.txt b/src/yuzu/CMakeLists.txt index ce8d1a6615..725639a8fe 100644 --- a/src/yuzu/CMakeLists.txt +++ b/src/yuzu/CMakeLists.txt @@ -412,10 +412,10 @@ if (ENABLE_WEB_SERVICE) target_compile_definitions(yuzu PRIVATE ENABLE_WEB_SERVICE) endif() -if (YUZU_USE_QT_MULTIMEDIA) - target_link_libraries(yuzu PRIVATE Qt6::Multimedia) - target_compile_definitions(yuzu PRIVATE YUZU_USE_QT_MULTIMEDIA) -endif () +# if (YUZU_USE_QT_MULTIMEDIA) +# target_link_libraries(yuzu PRIVATE Qt6::Multimedia) +# target_compile_definitions(yuzu PRIVATE YUZU_USE_QT_MULTIMEDIA) +# endif () if (YUZU_USE_QT_WEB_ENGINE) target_link_libraries(yuzu PRIVATE Qt6::WebEngineCore Qt6::WebEngineWidgets) From 963f9981ce9846a4ed97f6b12c49d9b61db6fab9 Mon Sep 17 00:00:00 2001 From: xbzk Date: Mon, 23 Feb 2026 06:40:42 +0100 Subject: [PATCH 10/84] [chore] Resolve more "warning C4127: conditional expression is constant" while building under MSVC (#3595) NOISY warning on NINJA MSVC build log. Complement for PR 3567. Now in another place. D:\dev\eden\src\dynarmic\src\dynarmic\backend\x64\emit_x64_vector_floating_point.cpp(207): warning C4127: conditional expression is constant D:\dev\eden\src\dynarmic\src\dynarmic\backend\x64\emit_x64_vector_floating_point.cpp(207): note: consider using 'if constexpr' statement instead Signed-off-by: xbzk Co-authored-by: DraVee Reviewed-on: https://git.eden-emu.dev/eden-emu/eden/pulls/3595 Reviewed-by: Lizzie Reviewed-by: DraVee Co-authored-by: xbzk Co-committed-by: xbzk --- src/dynarmic/src/dynarmic/common/assert.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/dynarmic/src/dynarmic/common/assert.h b/src/dynarmic/src/dynarmic/common/assert.h index adface269a..a79d865974 100644 --- a/src/dynarmic/src/dynarmic/common/assert.h +++ b/src/dynarmic/src/dynarmic/common/assert.h @@ -1,4 +1,4 @@ -// SPDX-FileCopyrightText: Copyright 2025 Eden Emulator Project +// SPDX-FileCopyrightText: Copyright 2026 Eden Emulator Project // SPDX-License-Identifier: GPL-3.0-or-later // SPDX-FileCopyrightText: 2013 Dolphin Emulator Project // SPDX-FileCopyrightText: 2014 Citra Emulator Project @@ -9,7 +9,7 @@ // TODO: Use source_info? [[noreturn]] void assert_terminate_impl(const char* s); #ifndef ASSERT -# define ASSERT(expr) do if(!(expr)) [[unlikely]] assert_terminate_impl(__FILE__ ": " #expr); while(0) +# define ASSERT(expr) do { auto&& condition = !(expr); if(condition) [[unlikely]] assert_terminate_impl(__FILE__ ": " #expr); } while(0) #endif #ifndef UNREACHABLE # ifdef _MSC_VER From c610b611261ae2bdb5df7bac6104f1c1e98b6354 Mon Sep 17 00:00:00 2001 From: lizzie Date: Mon, 23 Feb 2026 13:39:16 +0100 Subject: [PATCH 11/84] [common, hle] add new updates Polish+Thai languages (#3587) Signed-off-by: lizzie Co-authored-by: maufeat Reviewed-on: https://git.eden-emu.dev/eden-emu/eden/pulls/3587 Reviewed-by: Maufeat Reviewed-by: DraVee Co-authored-by: lizzie Co-committed-by: lizzie --- .../app/src/main/res/values/arrays.xml | 5 +- .../app/src/main/res/values/strings.xml | 4 +- src/common/settings_enums.h | 2 +- src/core/file_sys/control_metadata.cpp | 159 +++++-------- src/core/file_sys/control_metadata.h | 225 +++++++++++++++--- src/core/hle/service/ns/language.cpp | 82 +++++++ src/core/hle/service/ns/language.h | 5 + src/core/hle/service/set/settings_types.h | 15 +- src/qt_common/config/shared_translation.cpp | 3 +- 9 files changed, 358 insertions(+), 142 deletions(-) diff --git a/src/android/app/src/main/res/values/arrays.xml b/src/android/app/src/main/res/values/arrays.xml index b0487302b3..565decb390 100644 --- a/src/android/app/src/main/res/values/arrays.xml +++ b/src/android/app/src/main/res/values/arrays.xml @@ -64,7 +64,8 @@ @string/language_spanish @string/language_taiwanese @string/language_traditional_chinese - @string/language_serbian + @string/language_polish + @string/language_thai @@ -87,6 +88,7 @@ 11 16 18 + 19 @@ -407,6 +409,7 @@ @string/app_language_persian @string/app_language_hebrew @string/app_language_serbian + @string/app_language_thai 0 diff --git a/src/android/app/src/main/res/values/strings.xml b/src/android/app/src/main/res/values/strings.xml index 8a1193303e..a34d75d7cb 100644 --- a/src/android/app/src/main/res/values/strings.xml +++ b/src/android/app/src/main/res/values/strings.xml @@ -1011,7 +1011,8 @@ 简体中文 正體中文 Português do Brasil - српски + Polska + แบบไทย B @@ -1216,6 +1217,7 @@ فارسی עברית Српски + แบบไทย Theme Color diff --git a/src/common/settings_enums.h b/src/common/settings_enums.h index d4935d9b6d..638be4127f 100644 --- a/src/common/settings_enums.h +++ b/src/common/settings_enums.h @@ -120,7 +120,7 @@ ENUM(AudioMode, Mono, Stereo, Surround); ENUM(Language, Japanese, EnglishAmerican, French, German, Italian, Spanish, Chinese, Korean, Dutch, Portuguese, Russian, Taiwanese, EnglishBritish, FrenchCanadian, SpanishLatin, - ChineseSimplified, ChineseTraditional, PortugueseBrazilian, Serbian); + ChineseSimplified, ChineseTraditional, PortugueseBrazilian, Polish, Thai); ENUM(Region, Japan, Usa, Europe, Australia, China, Korea, Taiwan); ENUM(TimeZone, Auto, Default, Cet, Cst6Cdt, Cuba, Eet, Egypt, Eire, Est, Est5Edt, Gb, GbEire, Gmt, GmtPlusZero, GmtMinusZero, GmtZero, Greenwich, Hongkong, Hst, Iceland, Iran, Israel, Jamaica, diff --git a/src/core/file_sys/control_metadata.cpp b/src/core/file_sys/control_metadata.cpp index 7ca7703afa..3676c1bbc8 100644 --- a/src/core/file_sys/control_metadata.cpp +++ b/src/core/file_sys/control_metadata.cpp @@ -12,6 +12,7 @@ #include #include "common/settings.h" +#include "common/settings_enums.h" #include "common/string_util.h" #include "common/swap.h" #include "core/file_sys/control_metadata.h" @@ -19,7 +20,7 @@ namespace FileSys { -const std::array LANGUAGE_NAMES{{ +const std::array LANGUAGE_NAMES{{ "AmericanEnglish", "BritishEnglish", "Japanese", @@ -36,137 +37,95 @@ const std::array LANGUAGE_NAMES{{ "TraditionalChinese", "SimplifiedChinese", "BrazilianPortuguese", + "Polish", + "Thai", }}; -namespace { -constexpr std::size_t LEGACY_LANGUAGE_REGION_SIZE = sizeof(std::array); -constexpr std::size_t PACKED_LANGUAGE_REGION_MAX_SIZE = sizeof(LanguageEntry) * 32; +namespace +{ + constexpr std::size_t MAX_EXPANDED_LANG_SIZE = sizeof(LanguageEntry) * 32; -bool InflateRawDeflate(std::span compressed, std::vector& out) { - if (compressed.empty() || compressed.size() > std::numeric_limits::max()) { - return false; - } - z_stream stream{}; - stream.next_in = const_cast(reinterpret_cast(compressed.data())); - stream.avail_in = static_cast(compressed.size()); - if (inflateInit2(&stream, -MAX_WBITS) != Z_OK) { - return false; - } + bool InflateRawDeflate(std::span compressed, std::vector& out) + { + if (compressed.empty()) return false; - std::array chunk{}; - int ret = Z_OK; - while (ret == Z_OK) { - stream.next_out = reinterpret_cast(chunk.data()); - stream.avail_out = static_cast(chunk.size()); - ret = inflate(&stream, Z_NO_FLUSH); - if (ret != Z_OK && ret != Z_STREAM_END) { - inflateEnd(&stream); + z_stream stream{}; + stream.next_in = const_cast(reinterpret_cast(compressed.data())); + stream.avail_in = static_cast(compressed.size()); + if (inflateInit2(&stream, -MAX_WBITS) != Z_OK) { return false; } - const auto produced = chunk.size() - static_cast(stream.avail_out); - if (produced != 0) { - if (out.size() + produced > PACKED_LANGUAGE_REGION_MAX_SIZE) { - inflateEnd(&stream); - return false; - } - out.insert(out.end(), chunk.begin(), - chunk.begin() + static_cast(produced)); + out.resize(MAX_EXPANDED_LANG_SIZE); + stream.next_out = reinterpret_cast(out.data()); + stream.avail_out = static_cast(out.size()); + + int ret = inflate(&stream, Z_FINISH); + inflateEnd(&stream); + + if (ret != Z_STREAM_END && ret != Z_OK) { + return false; } + + // Shrink to actual decompressed size + out.resize(stream.total_out); + return true; } - - inflateEnd(&stream); - return ret == Z_STREAM_END; -} - -void DecodePackedLanguageEntries(RawNACP& raw) { - auto* packed_region = reinterpret_cast(raw.language_entries.data()); - u16_le compressed_size_le{}; - std::memcpy(&compressed_size_le, packed_region, sizeof(compressed_size_le)); - const auto compressed_size = static_cast(compressed_size_le); - - if (compressed_size == 0 || compressed_size > LEGACY_LANGUAGE_REGION_SIZE - sizeof(u16_le)) { - return; - } - - std::vector decompressed; - if (!InflateRawDeflate( - std::span(packed_region + sizeof(u16_le), compressed_size), decompressed)) { - return; - } - - if (decompressed.size() < LEGACY_LANGUAGE_REGION_SIZE || - decompressed.size() % sizeof(LanguageEntry) != 0) { - return; - } - - std::memcpy(raw.language_entries.data(), decompressed.data(), LEGACY_LANGUAGE_REGION_SIZE); -} } // namespace std::string LanguageEntry::GetApplicationName() const { - return Common::StringFromFixedZeroTerminatedBuffer(application_name.data(), - application_name.size()); + return Common::StringFromFixedZeroTerminatedBuffer(application_name.data(), application_name.size()); } std::string LanguageEntry::GetDeveloperName() const { - return Common::StringFromFixedZeroTerminatedBuffer(developer_name.data(), - developer_name.size()); + return Common::StringFromFixedZeroTerminatedBuffer(developer_name.data(), developer_name.size()); } -constexpr std::array language_to_codes = {{ - Language::Japanese, - Language::AmericanEnglish, - Language::French, - Language::German, - Language::Italian, - Language::Spanish, - Language::SimplifiedChinese, - Language::Korean, - Language::Dutch, - Language::Portuguese, - Language::Russian, - Language::TraditionalChinese, - Language::BritishEnglish, - Language::CanadianFrench, - Language::LatinAmericanSpanish, - Language::SimplifiedChinese, - Language::TraditionalChinese, - Language::BrazilianPortuguese, -}}; - NACP::NACP() = default; -NACP::NACP(VirtualFile file) { +NACP::NACP(VirtualFile file) +{ file->ReadObject(&raw); - DecodePackedLanguageEntries(raw); + if (raw.titles_data_format == TitleDataFormat::Compressed) { + const u16 compressed_size = raw.language_entries.compressed_data.buffer_size; + std::span compressed_payload{raw.language_entries.compressed_data.buffer, + compressed_size}; + + std::vector decompressed; + if (InflateRawDeflate(compressed_payload, decompressed)) { + const size_t entry_count = decompressed.size() / sizeof(LanguageEntry); + language_entries.resize(entry_count); + std::memcpy(language_entries.data(), decompressed.data(), decompressed.size()); + } + } else { + language_entries.resize(16); + std::memcpy(language_entries.data(), raw.language_entries.language_entries.data(), + sizeof(raw.language_entries.language_entries)); + } } NACP::~NACP() = default; const LanguageEntry& NACP::GetLanguageEntry() const { - Language language = - language_to_codes[static_cast(Settings::values.language_index.GetValue())]; + u32 index = static_cast(Settings::values.language_index.GetValue()); - { - const auto& language_entry = raw.language_entries.at(static_cast(language)); - if (!language_entry.GetApplicationName().empty()) - return language_entry; + if (index < language_entries.size()) { + return language_entries[index]; } - for (const auto& language_entry : raw.language_entries) { - if (!language_entry.GetApplicationName().empty()) - return language_entry; + for (const auto& entry : language_entries) { + return entry; } - return raw.language_entries.at(static_cast(Language::AmericanEnglish)); + return language_entries.at(static_cast(Language::AmericanEnglish)); } -std::array NACP::GetApplicationNames() const { - std::array names{}; - for (size_t i = 0; i < raw.language_entries.size(); ++i) { - names[i] = raw.language_entries[i].GetApplicationName(); +std::vector NACP::GetApplicationNames() const { + std::vector names; + names.reserve(language_entries.size()); + for (const auto& entry : language_entries) { + names.push_back(entry.GetApplicationName()); } return names; } @@ -205,7 +164,7 @@ bool NACP::GetUserAccountSwitchLock() const { } u32 NACP::GetSupportedLanguages() const { - return raw.supported_languages; + return u32(raw.supported_languages); } u64 NACP::GetDeviceSaveDataSize() const { diff --git a/src/core/file_sys/control_metadata.h b/src/core/file_sys/control_metadata.h index bd109f783f..7b90ba235d 100644 --- a/src/core/file_sys/control_metadata.h +++ b/src/core/file_sys/control_metadata.h @@ -25,22 +25,176 @@ struct LanguageEntry { std::string GetApplicationName() const; std::string GetDeveloperName() const; }; -static_assert(sizeof(LanguageEntry) == 0x300, "LanguageEntry has incorrect size."); +static_assert(sizeof(LanguageEntry) == 0x300); + +struct LanguageEntryData { + union { + // TitleDataFormat::Uncompressed (16 entries) + std::array language_entries; + + // TitleDataFormat::Compressed (18+ entries) + struct { + u16 buffer_size; + u8 buffer[0x2FFE]; + } compressed_data; + }; +}; + +enum class TitleDataFormat : u8 { + Uncompressed = 0, + Compressed = 1, +}; + +struct ApplicationNeighborDetectionGroupConfiguration { + u64 group_id; ///< GroupId + std::array key; +}; +static_assert(sizeof(ApplicationNeighborDetectionGroupConfiguration) == 0x18); + +// NeighborDetectionClientConfiguration +struct NeighborDetectionClientConfiguration { + ApplicationNeighborDetectionGroupConfiguration send_group_configuration; ///< SendGroupConfiguration + std::array receivable_group_configurations; ///< ReceivableGroupConfigurations +}; +static_assert(sizeof(NeighborDetectionClientConfiguration) == 0x198); + +enum class ApparentPlatform : u8 { + NX = 0, + Ounce = 1, + Count = 2 +}; + +enum class JitConfigurationFlag : u64 { + None = 0, + IsEnabled = 1, +}; + +struct JitConfiguration { + JitConfigurationFlag jit_configuration_flag; + u64 memory_size; +}; +static_assert(sizeof(JitConfiguration) == 0x10); + +enum RequiredAddOnContentsSetDescriptorFlag : u16 { + None = 0, + Continue = 1 +}; +struct RequiredAddOnContentsSetDescriptor { + u16 index : 15; + RequiredAddOnContentsSetDescriptorFlag flag : 1; +}; +static_assert(sizeof(RequiredAddOnContentsSetDescriptor) == 0x2); + +struct RequiredAddOnContentsSetBinaryDescriptor { + RequiredAddOnContentsSetDescriptor descriptors[0x20]; +}; +static_assert(sizeof(RequiredAddOnContentsSetBinaryDescriptor) == 0x40); + +enum class PlayReportPermission : u8 { + None = 0, + TargetMarketing = 1, +}; + +enum class CrashScreenshotForProd : u8 { + Deny = 0, + Allow = 1, +}; + +enum class CrashScreenshotForDev : u8 { + Deny = 0, + Allow = 1, +}; + +enum class ContentsAvailabilityTransitionPolicy : u8 { + NoPolicy = 0, + Stable = 1, + Changeable = 2, +}; + +struct AccessibleLaunchRequiredVersion { + std::array application_id; +}; +static_assert(sizeof(AccessibleLaunchRequiredVersion) == 0x40); + +enum class CrashReport : u8 { + Deny = 0, + Allow = 1, +}; + +enum class PlayLogQueryCapability : u8 { + None = 0, + WhiteList = 1, + All = 2, +}; + +struct ApplicationControlDataConditionData { + u8 priority; + INSERT_PADDING_BYTES(7); + u16 aoc_index; + INSERT_PADDING_BYTES(6); +}; +static_assert(sizeof(ApplicationControlDataConditionData) == 0x10); + +#pragma pack(push, 1) +struct ApplicationControlDataCondition { + u64 type; + std::array data; + u8 count; +}; +#pragma pack(pop) +static_assert(sizeof(ApplicationControlDataCondition) == 0x89); + +// A language on the NX. These are for names and icons. +#define NACP_LANGUAGE_LIST \ + NACP_LANGUAGE_ELEM(AmericanEnglish, 0) \ + NACP_LANGUAGE_ELEM(BritishEnglish, 1) \ + NACP_LANGUAGE_ELEM(Japanese, 2) \ + NACP_LANGUAGE_ELEM(French, 3) \ + NACP_LANGUAGE_ELEM(German, 4) \ + NACP_LANGUAGE_ELEM(LatinAmericanSpanish, 5) \ + NACP_LANGUAGE_ELEM(Spanish, 6) \ + NACP_LANGUAGE_ELEM(Italian, 7) \ + NACP_LANGUAGE_ELEM(Dutch, 8) \ + NACP_LANGUAGE_ELEM(CanadianFrench, 9) \ + NACP_LANGUAGE_ELEM(Portuguese, 10) \ + NACP_LANGUAGE_ELEM(Russian, 11) \ + NACP_LANGUAGE_ELEM(Korean, 12) \ + NACP_LANGUAGE_ELEM(TraditionalChinese, 13) \ + NACP_LANGUAGE_ELEM(SimplifiedChinese, 14) \ + NACP_LANGUAGE_ELEM(BrazilianPortuguese, 15) \ + NACP_LANGUAGE_ELEM(Polish, 16) \ + NACP_LANGUAGE_ELEM(Thai, 17) \ + +enum class Language : u8 { +#define NACP_LANGUAGE_ELEM(X, N) X = N, + NACP_LANGUAGE_LIST +#undef NACP_LANGUAGE_ELEM + Count = 18, + Default = 255, +}; + +// Yes it's duplicated, why? Bits i guess +enum class SupportedLanguage : u32 { +#define NACP_LANGUAGE_ELEM(X, N) X = 1ULL << N, + NACP_LANGUAGE_LIST +#undef NACP_LANGUAGE_ELEM +}; +#undef NACP_LANGUAGE_LIST // The raw file format of a NACP file. struct RawNACP { - std::array language_entries; + LanguageEntryData language_entries; std::array isbn; u8 startup_user_account; u8 user_account_switch_lock; u8 addon_content_registration_type; u32_le application_attribute; - u32_le supported_languages; + SupportedLanguage supported_languages; u32_le parental_control; bool screenshot_enabled; u8 video_capture_mode; bool data_loss_confirmation; - INSERT_PADDING_BYTES(1); + u8 play_log_policy; u64_le presence_group_id; std::array rating_age; std::array version_string; @@ -56,10 +210,14 @@ struct RawNACP { u8 logo_type; u8 logo_handling; bool runtime_add_on_content_install; - INSERT_PADDING_BYTES(5); + u8 runtime_parameter_delivery; + u8 appropriate_age_for_china; + INSERT_PADDING_BYTES(1); + CrashReport crash_report; u64_le seed_for_pseudo_device_id; std::array bcat_passphrase; - INSERT_PADDING_BYTES(7); + u8 startup_user_account_option; + INSERT_PADDING_BYTES(6); // ReservedForUserAccountSaveDataOperation u64_le user_account_save_data_max_size; u64_le user_account_save_data_max_journal_size; u64_le device_save_data_max_size; @@ -69,13 +227,28 @@ struct RawNACP { u64_le cache_storage_journal_size; u64_le cache_storage_data_and_journal_max_size; u16_le cache_storage_max_index; - INSERT_PADDING_BYTES(0x8B); + u8 runtime_upgrade; + u32_le supporting_limited_application_licenses; + std::array play_log_queryable_application_id; + PlayLogQueryCapability play_log_query_capability; + u8 repair_flag; + u8 program_index; + u8 required_network_service_license_on_launch_flag; u8 app_error_code_prefix; - INSERT_PADDING_BYTES(1); + TitleDataFormat titles_data_format; u8 acd_index; - u8 apparent_platform; - INSERT_PADDING_BYTES(0x22F); - std::array app_control_data_condition; + ApparentPlatform apparent_platform; + // NeighborDetectionClientConfiguration neighbor_detection_client_configuration; + // JitConfiguration jit_configuration; + // RequiredAddOnContentsSetBinaryDescriptor required_add_on_contents_set_binary_descriptor; + // PlayReportPermission play_report_permission; + // CrashScreenshotForProd crash_screenshot_for_prod; + // CrashScreenshotForDev crash_screenshot_for_dev; + // ContentsAvailabilityTransitionPolicy contents_availability_transition_policy; + // SupportedLanguage supported_language_copy; ///< TODO: add to XML generation. + INSERT_PADDING_BYTES(0x1EF); + AccessibleLaunchRequiredVersion accessible_launch_required_version; + ApplicationControlDataCondition application_control_data_condition; ///< Used for Switch 2 upgrade packs, which are distributed as AddOnContent titles u8 initial_program_index; INSERT_PADDING_BYTES(2); u32_le accessible_program_index_flags; @@ -85,34 +258,13 @@ struct RawNACP { u8 has_ingame_voice_chat; INSERT_PADDING_BYTES(3); u32_le supported_extra_addon_content_flag; - INSERT_PADDING_BYTES(0x698); + u8 has_karaoke_feature; + INSERT_PADDING_BYTES(0x697); std::array platform_specific_region; }; static_assert(sizeof(RawNACP) == 0x4000, "RawNACP has incorrect size."); -// A language on the NX. These are for names and icons. -enum class Language : u8 { - AmericanEnglish = 0, - BritishEnglish = 1, - Japanese = 2, - French = 3, - German = 4, - LatinAmericanSpanish = 5, - Spanish = 6, - Italian = 7, - Dutch = 8, - CanadianFrench = 9, - Portuguese = 10, - Russian = 11, - Korean = 12, - TraditionalChinese = 13, - SimplifiedChinese = 14, - BrazilianPortuguese = 15, - - Default = 255, -}; - -extern const std::array LANGUAGE_NAMES; +extern const std::array LANGUAGE_NAMES; // A class representing the format used by NX metadata files, typically named Control.nacp. // These store application name, dev name, title id, and other miscellaneous data. @@ -131,7 +283,7 @@ public: u64 GetDefaultNormalSaveSize() const; u64 GetDefaultJournalSaveSize() const; u32 GetSupportedLanguages() const; - std::array GetApplicationNames() const; + std::vector GetApplicationNames() const; std::vector GetRawBytes() const; bool GetUserAccountSwitchLock() const; u64 GetDeviceSaveDataSize() const; @@ -140,6 +292,7 @@ public: private: RawNACP raw{}; + std::vector language_entries; }; } // namespace FileSys diff --git a/src/core/hle/service/ns/language.cpp b/src/core/hle/service/ns/language.cpp index d187be935a..ff5ccdd6d3 100644 --- a/src/core/hle/service/ns/language.cpp +++ b/src/core/hle/service/ns/language.cpp @@ -1,3 +1,6 @@ +// SPDX-FileCopyrightText: Copyright 2026 Eden Emulator Project +// SPDX-License-Identifier: GPL-3.0-or-later + // SPDX-FileCopyrightText: Copyright 2019 yuzu Emulator Project // SPDX-License-Identifier: GPL-2.0-or-later @@ -22,6 +25,8 @@ constexpr ApplicationLanguagePriorityList priority_list_american_english = {{ ApplicationLanguage::SimplifiedChinese, ApplicationLanguage::TraditionalChinese, ApplicationLanguage::Korean, + ApplicationLanguage::Polish, + ApplicationLanguage::Thai, }}; constexpr ApplicationLanguagePriorityList priority_list_british_english = {{ @@ -40,6 +45,8 @@ constexpr ApplicationLanguagePriorityList priority_list_british_english = {{ ApplicationLanguage::SimplifiedChinese, ApplicationLanguage::TraditionalChinese, ApplicationLanguage::Korean, + ApplicationLanguage::Polish, + ApplicationLanguage::Thai, }}; constexpr ApplicationLanguagePriorityList priority_list_japanese = {{ @@ -58,6 +65,8 @@ constexpr ApplicationLanguagePriorityList priority_list_japanese = {{ ApplicationLanguage::SimplifiedChinese, ApplicationLanguage::TraditionalChinese, ApplicationLanguage::Korean, + ApplicationLanguage::Polish, + ApplicationLanguage::Thai, }}; constexpr ApplicationLanguagePriorityList priority_list_french = {{ @@ -76,6 +85,8 @@ constexpr ApplicationLanguagePriorityList priority_list_french = {{ ApplicationLanguage::SimplifiedChinese, ApplicationLanguage::TraditionalChinese, ApplicationLanguage::Korean, + ApplicationLanguage::Polish, + ApplicationLanguage::Thai, }}; constexpr ApplicationLanguagePriorityList priority_list_german = {{ @@ -94,6 +105,8 @@ constexpr ApplicationLanguagePriorityList priority_list_german = {{ ApplicationLanguage::SimplifiedChinese, ApplicationLanguage::TraditionalChinese, ApplicationLanguage::Korean, + ApplicationLanguage::Polish, + ApplicationLanguage::Thai, }}; constexpr ApplicationLanguagePriorityList priority_list_latin_american_spanish = {{ @@ -112,6 +125,8 @@ constexpr ApplicationLanguagePriorityList priority_list_latin_american_spanish = ApplicationLanguage::SimplifiedChinese, ApplicationLanguage::TraditionalChinese, ApplicationLanguage::Korean, + ApplicationLanguage::Polish, + ApplicationLanguage::Thai, }}; constexpr ApplicationLanguagePriorityList priority_list_spanish = {{ @@ -130,6 +145,8 @@ constexpr ApplicationLanguagePriorityList priority_list_spanish = {{ ApplicationLanguage::SimplifiedChinese, ApplicationLanguage::TraditionalChinese, ApplicationLanguage::Korean, + ApplicationLanguage::Polish, + ApplicationLanguage::Thai, }}; constexpr ApplicationLanguagePriorityList priority_list_italian = {{ @@ -148,6 +165,8 @@ constexpr ApplicationLanguagePriorityList priority_list_italian = {{ ApplicationLanguage::SimplifiedChinese, ApplicationLanguage::TraditionalChinese, ApplicationLanguage::Korean, + ApplicationLanguage::Polish, + ApplicationLanguage::Thai, }}; constexpr ApplicationLanguagePriorityList priority_list_dutch = {{ @@ -166,6 +185,8 @@ constexpr ApplicationLanguagePriorityList priority_list_dutch = {{ ApplicationLanguage::SimplifiedChinese, ApplicationLanguage::TraditionalChinese, ApplicationLanguage::Korean, + ApplicationLanguage::Polish, + ApplicationLanguage::Thai, }}; constexpr ApplicationLanguagePriorityList priority_list_canadian_french = {{ @@ -184,6 +205,8 @@ constexpr ApplicationLanguagePriorityList priority_list_canadian_french = {{ ApplicationLanguage::SimplifiedChinese, ApplicationLanguage::TraditionalChinese, ApplicationLanguage::Korean, + ApplicationLanguage::Polish, + ApplicationLanguage::Thai, }}; constexpr ApplicationLanguagePriorityList priority_list_portuguese = {{ @@ -202,6 +225,8 @@ constexpr ApplicationLanguagePriorityList priority_list_portuguese = {{ ApplicationLanguage::SimplifiedChinese, ApplicationLanguage::TraditionalChinese, ApplicationLanguage::Korean, + ApplicationLanguage::Polish, + ApplicationLanguage::Thai, }}; constexpr ApplicationLanguagePriorityList priority_list_russian = {{ @@ -220,6 +245,8 @@ constexpr ApplicationLanguagePriorityList priority_list_russian = {{ ApplicationLanguage::SimplifiedChinese, ApplicationLanguage::TraditionalChinese, ApplicationLanguage::Korean, + ApplicationLanguage::Polish, + ApplicationLanguage::Thai, }}; constexpr ApplicationLanguagePriorityList priority_list_korean = {{ @@ -238,6 +265,8 @@ constexpr ApplicationLanguagePriorityList priority_list_korean = {{ ApplicationLanguage::Japanese, ApplicationLanguage::SimplifiedChinese, ApplicationLanguage::TraditionalChinese, + ApplicationLanguage::Polish, + ApplicationLanguage::Thai, }}; constexpr ApplicationLanguagePriorityList priority_list_traditional_chinese = {{ @@ -256,6 +285,8 @@ constexpr ApplicationLanguagePriorityList priority_list_traditional_chinese = {{ ApplicationLanguage::Portuguese, ApplicationLanguage::Russian, ApplicationLanguage::Korean, + ApplicationLanguage::Polish, + ApplicationLanguage::Thai, }}; constexpr ApplicationLanguagePriorityList priority_list_simplified_chinese = {{ @@ -274,6 +305,8 @@ constexpr ApplicationLanguagePriorityList priority_list_simplified_chinese = {{ ApplicationLanguage::Portuguese, ApplicationLanguage::Russian, ApplicationLanguage::Korean, + ApplicationLanguage::Polish, + ApplicationLanguage::Thai, }}; constexpr ApplicationLanguagePriorityList priority_list_brazilian_portuguese = {{ @@ -293,6 +326,43 @@ constexpr ApplicationLanguagePriorityList priority_list_brazilian_portuguese = { ApplicationLanguage::Korean, ApplicationLanguage::SimplifiedChinese, ApplicationLanguage::TraditionalChinese, + ApplicationLanguage::Polish, + ApplicationLanguage::Thai, +}}; + +constexpr ApplicationLanguagePriorityList priority_list_thai = {{ + ApplicationLanguage::Thai, + ApplicationLanguage::AmericanEnglish, + ApplicationLanguage::BritishEnglish, + ApplicationLanguage::Japanese, + ApplicationLanguage::French, + ApplicationLanguage::German, + ApplicationLanguage::Spanish, + ApplicationLanguage::Italian, + ApplicationLanguage::Dutch, + ApplicationLanguage::CanadianFrench, + ApplicationLanguage::Russian, + ApplicationLanguage::Korean, + ApplicationLanguage::SimplifiedChinese, + ApplicationLanguage::TraditionalChinese, + ApplicationLanguage::Polish, +}}; + +constexpr ApplicationLanguagePriorityList priority_list_polish = {{ + ApplicationLanguage::Polish, + ApplicationLanguage::AmericanEnglish, + ApplicationLanguage::BritishEnglish, + ApplicationLanguage::Japanese, + ApplicationLanguage::French, + ApplicationLanguage::German, + ApplicationLanguage::Spanish, + ApplicationLanguage::Italian, + ApplicationLanguage::Dutch, + ApplicationLanguage::CanadianFrench, + ApplicationLanguage::Russian, + ApplicationLanguage::Korean, + ApplicationLanguage::SimplifiedChinese, + ApplicationLanguage::TraditionalChinese, }}; const ApplicationLanguagePriorityList* GetApplicationLanguagePriorityList( @@ -330,6 +400,10 @@ const ApplicationLanguagePriorityList* GetApplicationLanguagePriorityList( return &priority_list_simplified_chinese; case ApplicationLanguage::BrazilianPortuguese: return &priority_list_brazilian_portuguese; + case ApplicationLanguage::Polish: + return &priority_list_polish; + case ApplicationLanguage::Thai: + return &priority_list_thai; default: return nullptr; } @@ -372,6 +446,10 @@ std::optional ConvertToApplicationLanguage( return ApplicationLanguage::SimplifiedChinese; case Set::LanguageCode::PT_BR: return ApplicationLanguage::BrazilianPortuguese; + case Set::LanguageCode::TH: + return ApplicationLanguage::Thai; + case Set::LanguageCode::PL: + return ApplicationLanguage::Polish; default: return std::nullopt; } @@ -411,6 +489,10 @@ std::optional ConvertToLanguageCode(const ApplicationLanguage return Set::LanguageCode::ZH_HANS; case ApplicationLanguage::BrazilianPortuguese: return Set::LanguageCode::PT_BR; + case ApplicationLanguage::Thai: + return Set::LanguageCode::TH; + case ApplicationLanguage::Polish: + return Set::LanguageCode::PL; default: return std::nullopt; } diff --git a/src/core/hle/service/ns/language.h b/src/core/hle/service/ns/language.h index dad9934f2e..d86f59df49 100644 --- a/src/core/hle/service/ns/language.h +++ b/src/core/hle/service/ns/language.h @@ -1,3 +1,6 @@ +// SPDX-FileCopyrightText: Copyright 2026 Eden Emulator Project +// SPDX-License-Identifier: GPL-3.0-or-later + // SPDX-FileCopyrightText: Copyright 2019 yuzu Emulator Project // SPDX-License-Identifier: GPL-2.0-or-later @@ -26,6 +29,8 @@ enum class ApplicationLanguage : u8 { TraditionalChinese, SimplifiedChinese, BrazilianPortuguese, + Polish, + Thai, Count }; using ApplicationLanguagePriorityList = diff --git a/src/core/hle/service/set/settings_types.h b/src/core/hle/service/set/settings_types.h index 7f152cb523..469b8d745c 100644 --- a/src/core/hle/service/set/settings_types.h +++ b/src/core/hle/service/set/settings_types.h @@ -1,3 +1,6 @@ +// SPDX-FileCopyrightText: Copyright 2026 Eden Emulator Project +// SPDX-License-Identifier: GPL-3.0-or-later + // SPDX-FileCopyrightText: Copyright 2024 yuzu Emulator Project // SPDX-License-Identifier: GPL-3.0-or-later @@ -169,6 +172,8 @@ enum class Language : u32 { SimplifiedCHhinese, TraditionalChinese, BrazilianPortuguese, + Polish, + Thai }; /// This is "nn::settings::LanguageCode", which is a NUL-terminated string stored in a u64. @@ -191,6 +196,8 @@ enum class LanguageCode : u64 { ZH_HANS = 0x00736E61482D687A, ZH_HANT = 0x00746E61482D687A, PT_BR = 0x00000052422D7470, + PL = 0x000000000000706C, + TH = 0x0000000000006874, }; /// This is nn::settings::system::NotificationVolume @@ -248,7 +255,7 @@ enum class PlatformRegion : s32 { Terra = 2, }; -constexpr std::array available_language_codes = {{ +constexpr std::array available_language_codes = {{ LanguageCode::JA, LanguageCode::EN_US, LanguageCode::FR, @@ -267,9 +274,11 @@ constexpr std::array available_language_codes = {{ LanguageCode::ZH_HANS, LanguageCode::ZH_HANT, LanguageCode::PT_BR, + LanguageCode::PL, + LanguageCode::TH }}; -static constexpr std::array, 18> language_to_layout{{ +static constexpr std::array, 20> language_to_layout{{ {LanguageCode::JA, KeyboardLayout::Japanese}, {LanguageCode::EN_US, KeyboardLayout::EnglishUs}, {LanguageCode::FR, KeyboardLayout::French}, @@ -288,6 +297,8 @@ static constexpr std::array, 18> languag {LanguageCode::ZH_HANS, KeyboardLayout::ChineseSimplified}, {LanguageCode::ZH_HANT, KeyboardLayout::ChineseTraditional}, {LanguageCode::PT_BR, KeyboardLayout::Portuguese}, + {LanguageCode::PL, KeyboardLayout::EnglishUsInternational}, + {LanguageCode::TH, KeyboardLayout::EnglishUsInternational} }}; /// This is nn::settings::system::AccountNotificationFlag diff --git a/src/qt_common/config/shared_translation.cpp b/src/qt_common/config/shared_translation.cpp index f4355197b0..9666092802 100644 --- a/src/qt_common/config/shared_translation.cpp +++ b/src/qt_common/config/shared_translation.cpp @@ -651,7 +651,8 @@ std::unique_ptr ComboboxEnumeration(QObject* parent) PAIR(Language, ChineseSimplified, tr("Simplified Chinese")), PAIR(Language, ChineseTraditional, tr("Traditional Chinese (正體中文)")), PAIR(Language, PortugueseBrazilian, tr("Brazilian Portuguese (português do Brasil)")), - PAIR(Language, Serbian, tr("Serbian (српски)")), + PAIR(Language, Polish, tr("Polish (polska)")), + PAIR(Language, Thai, tr("Thai (แบบไทย)")), }}); translations->insert({Settings::EnumMetadata::Index(), { From a11eae425a2aafba5157942cd381a5f519921104 Mon Sep 17 00:00:00 2001 From: DraVee Date: Mon, 23 Feb 2026 19:40:56 +0100 Subject: [PATCH 12/84] [file_sys] Check if language_entry is empty (#3619) * fixup to #3587 Reviewed-on: https://git.eden-emu.dev/eden-emu/eden/pulls/3619 Reviewed-by: MaranBr Co-authored-by: DraVee Co-committed-by: DraVee --- src/core/file_sys/control_metadata.cpp | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/core/file_sys/control_metadata.cpp b/src/core/file_sys/control_metadata.cpp index 3676c1bbc8..23514bed01 100644 --- a/src/core/file_sys/control_metadata.cpp +++ b/src/core/file_sys/control_metadata.cpp @@ -110,12 +110,13 @@ NACP::~NACP() = default; const LanguageEntry& NACP::GetLanguageEntry() const { u32 index = static_cast(Settings::values.language_index.GetValue()); - if (index < language_entries.size()) { + if (index < language_entries.size() && !language_entries[index].GetApplicationName().empty()) { return language_entries[index]; } for (const auto& entry : language_entries) { - return entry; + if (!entry.GetApplicationName().empty()) + return entry; } return language_entries.at(static_cast(Language::AmericanEnglish)); From 213f7b810daf5c8565911b7446bf6e7f289edb09 Mon Sep 17 00:00:00 2001 From: lizzie Date: Mon, 23 Feb 2026 19:54:48 +0100 Subject: [PATCH 13/84] [dist] New 2026 Saint Patrick's icon; drop named variants (#3617) Signed-off-by: lizzie Reviewed-on: https://git.eden-emu.dev/eden-emu/eden/pulls/3617 Reviewed-by: MaranBr Reviewed-by: CamilleLaVey Co-authored-by: lizzie Co-committed-by: lizzie --- README.md | 2 +- dist/dev.eden_emu.eden.svg | 396 +++++----- dist/eden.bmp | Bin 262282 -> 262282 bytes dist/eden.ico | Bin 339477 -> 360967 bytes dist/icon_variations/2025_named.svg | 225 ------ dist/icon_variations/README.md | 2 +- dist/icon_variations/base_named.svg | 337 --------- dist/icon_variations/halloween2025_named.svg | 110 --- dist/icon_variations/newyear2025_named.svg | 684 ------------------ dist/icon_variations/original_named.svg | 81 --- dist/icon_variations/saintpatrick2026.svg | 196 +++++ dist/icon_variations/saintpatrick2026_bgcolor | 1 + dist/icon_variations/valentines2026_named.svg | 225 ------ dist/qt_themes/default/icons/256x256/eden.png | Bin 41527 -> 55169 bytes .../default/icons/256x256/eden_named.png | Bin 52879 -> 0 bytes .../res/drawable/ic_launcher_foreground.png | Bin 273428 -> 211092 bytes .../app/src/main/res/drawable/ic_yuzu.png | Bin 97299 -> 75066 bytes .../src/main/res/drawable/ic_yuzu_named.png | Bin 124574 -> 0 bytes .../src/main/res/drawable/ic_yuzu_splash.png | Bin 108600 -> 80705 bytes .../main/res/layout-w600dp/fragment_about.xml | 2 +- .../src/main/res/layout/fragment_about.xml | 2 +- .../src/main/res/mipmap-hdpi/ic_launcher.png | Bin 14163 -> 17867 bytes .../src/main/res/mipmap-mdpi/ic_launcher.png | Bin 9612 -> 11107 bytes .../src/main/res/mipmap-xhdpi/ic_launcher.png | Bin 24239 -> 35714 bytes .../main/res/mipmap-xxhdpi/ic_launcher.png | Bin 35511 -> 57465 bytes .../main/res/mipmap-xxxhdpi/ic_launcher.png | Bin 54764 -> 167558 bytes .../app/src/main/res/values/colors.xml | 2 +- tools/update-icons.sh | 9 +- 28 files changed, 385 insertions(+), 1889 deletions(-) delete mode 100644 dist/icon_variations/2025_named.svg delete mode 100644 dist/icon_variations/base_named.svg delete mode 100644 dist/icon_variations/halloween2025_named.svg delete mode 100644 dist/icon_variations/newyear2025_named.svg delete mode 100644 dist/icon_variations/original_named.svg create mode 100644 dist/icon_variations/saintpatrick2026.svg create mode 100644 dist/icon_variations/saintpatrick2026_bgcolor delete mode 100644 dist/icon_variations/valentines2026_named.svg delete mode 100644 dist/qt_themes/default/icons/256x256/eden_named.png delete mode 100644 src/android/app/src/main/res/drawable/ic_yuzu_named.png diff --git a/README.md b/README.md index db52c6435d..3ae31151f7 100644 --- a/README.md +++ b/README.md @@ -9,7 +9,7 @@


- Eden + Eden
Eden
diff --git a/dist/dev.eden_emu.eden.svg b/dist/dev.eden_emu.eden.svg index f88b52f625..b125f4fb80 100644 --- a/dist/dev.eden_emu.eden.svg +++ b/dist/dev.eden_emu.eden.svg @@ -6,225 +6,191 @@ viewBox="0 0 512 512" version="1.1" id="svg7" - sodipodi:docname="base.svg.2026_01_12_14_43_47.0.svg" - inkscape:version="1.4.2 (ebf0e94, 2025-05-08)" - inkscape:export-filename="base.svg.2026_01_12_14_43_47.0.svg" + sodipodi:docname="saintpatrick2026_named.svg" + inkscape:version="1.4.2 (ebf0e940d0, 2025-05-08)" + xml:space="preserve" + inkscape:export-filename="dev.eden_emu.eden.png" inkscape:export-xdpi="96" inkscape:export-ydpi="96" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns="http://www.w3.org/2000/svg" - xmlns:svg="http://www.w3.org/2000/svg"> + xmlns:svg="http://www.w3.org/2000/svg" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:dc="http://purl.org/dc/elements/1.1/"> + + + + + + + Madeline_Dev + mailto:madelvidel@gmail.com + + + 2025 + + 2025 Eden Emulator Project + https://git.eden-emu.dev + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + id="defs7"> diff --git a/dist/eden.bmp b/dist/eden.bmp index 2f9b91c73b0419fafd32513a9a5e7952168f7666..498d6f3893cad422d49d2155958288a8d5ed3fb5 100644 GIT binary patch literal 262282 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 N_4^Mz-?_O1{|Dt1H39$t literal 262282 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

gJhhIhToUyu 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

iHz^UOrlk(U2#+jV>X78!;P&FU+@WBbXPzT=rB3 z%BiL(tVq;HACzg4Ga(D89XilgHsowkb2F5z-YJ$TA#cm}qTP3mfBuH!sEHVJu!m7M zy5lL-jy`GB%wZ1YP%Ir2y67X$V6UW|mtp5QWP(Z&ozM)>8$w&hBx&J4a zWWd@MdKmH1O|8Xp5!Z9;1Rta0yp!H#!dW(}w*+>>G=F|7TTa)t>Kqo%lB~LA=us z*j9B~;mzuKDaZ?-YE4l20^-r?Ief2t*2 z*g3K}YrX7*KKML)y)22GBCqc^YJ^xfIvn-Xrx9164Fqi8Y;0+K2KvCMFM#zvm^;i` z|898B*UWi+UR5p+0Q<(?&;8%K3=sbtT8b3@kKU}3$5YPBlPM8$@=N9c+w(gOn~(TU z{=Pwa!bkSTtzwn|N3Dc2*P@jSJZqc9r04OOv9HgaWx(bSd$5JNg?}isvXJ}AJ1Z;l z&r04`m;Ay%c|i|W$0_`?ZixK@>?7-n9Dv3@kB4CI)8?_phQm(IMc&DZ$Fm%9L7w?6XWD$qh}sO;+i&p%#95B0J>o4(V?*aPpI$C|DC!NjuqxN z{`ney@BQexe;1hFkhWSP5c|*jzFO4;@v{v1yDDYiyo|gYEAzu9t9a0mZI8M0*xhPNm0NaPSH!p`RgXWw={ z>@*(DpKEo_??QfR){L%6S|)L*pD^B=ymQw3DrJFljn^kFR`H>!M+YJoR;F`dfxtiK zvD#^Yz{_ZBoYNw=H~_`bA%obm5T4?LJ0CB5?!CH+UEHfKqF9%_Xm zV% zw+uXFi;X^#dO@~aE<@cPIHA73q~bw~AqU#0b^VUs{?_*YlWui$o_lDV^?*@3?cm(i zy1+sYm~0`=C8jT|=hJK5VAw*|J~8p%^ZW*xXT$&MLiFc++vc& zJ9<&VQi=aE$K&3uU&CYCogz6{c~sSs8t>6Q`KKO8xS5Wgfi7|&@l)Vm^!&p_TQBh^v{s1q0$`eS;6Jd>3u&t@jbqiHd6KXgE!yd;Hv z%D{o^71BRHL1GaT1yiF>U8jFLu^;>GMR_HYwh!~fMy~jAJJ*osJh4LuIM+@)>>y{K znDHU@RMIDY4)cj$j@>CklMhJmxSdJ{3^_1n7HfaN$`LA<&1@NXa`vKEGE1{F7qr$|Iyx6lZojVnkMY;CcAOy&^x6`8fvu*A|6K)px!*Z;AiQn02}n`#Zdn)>L~*+otiBR^A7pM0IyvZasVmdV|2v@<3s-N4HN&YAsTY(9q^65 z<}`nRePlZ;Puw;B`JLJ;o9%tR>+h!DyfETzdHYabsc_W81pw=RN8EFM(X}hrcz%p= z|KjFm>7JL1{U7#!CYD_WU<;)sD(ug^SSWcvwJ5uu`#Kk6JSBf^lO0zp;5#J9l&Wm- z`m{(f;tuPZizE)1_GJh0{zcrWl?lZOGO;9HHY5Id_Ewe39Wxdb@l~~~uFsHe$P4)L zi5>Vi>j6D~K+6H@0#2(5|ix2)R{JY}wm;9T*r4agK8v5!-V-7)bX^i#(3V`?j zPW)qz7}x&~eUNt*_`lH5AdhF~$R9G1`y&2LGH^fqfj6r1fot||y6@)(ZZ1p2*Yz?6 zGw?n@Jcu$-^p{qp53F8e>6#kvLRp<{4j$9+*;2(0ey?KwhPF+rwxtJLod%IZ4t}Cwiobc;e za-crK76Wy^e|(K$|Kxyw4z)$(oaVCeP80u2(m(MlZsYp-{~mwyx5Qpgm9YoAgInb( zIf>p%Me|CKUx+cGQ8DW!=t{c6uig{L!MLp^3^OP2k@?6_>L3Rb=}Wy1V_-XlKtY3WgWKe6VSqYU&y9BA_Sd8*FH^|j{r`CB=s|GU3* zFJ=&cj~)2`6tiTp=X3oTi*-J<`?&^S{Yd*~QALIPmiWiIU&(->1LzO;D$14YKYPcr z{_VV$w1)z|s74&K(Ift8V}#$Sljv{j)xGd0C;Gj4`gzd&RzS&9ECmDU-#5IWZ*R! z9{dh!?TRd~m-+tuEu2%{nIBdhTbMtyAb7H%##76{ViW#3zf}3YuNRlt@$Zm^m~nc%39a*HS~*1At(OgUVjdCz=pW73Sep&l{Y9e#26M(GOs zXLdI2{}ANALjBHvG5)i&Do)kR(f(l%ncn~H9786KE!sl#2VOcgM;I6CgxZKzMaR7Q z2KqPgNSq&UiI@IoX2?77AIe8X&}*of*idpzrX_tW{esY2tn40VUKJ$^&;hT8Oh+Es z-M=t@#^1_0<4iL{CoBAOCdXSx2TS?I5|sx-4CwIY#EpN4J)ir(s(C9%&D+cQi2d01 ze`N>RY$5u?T?=z04R%d?vHD9~4}OOQH7Tb3-ys98aUoqZM}E0+xgpB8pj=Xh7!wJ* zRW3W4GbIT)*WZ=@C+}i7{&yN&bK9Fz71t=|$Z&>C1pJ1{h}r1aP-plBGl~EF5LpiV z=lWUypz*&1w$n27&WwouR61Jl%$fCo;u>X+0CF%Oe3`^}u=(|GF&}x|*f04`0%mpx zzJ(rwx1~E)H}Gq93!E%HuzCfW`BWTo&=dR;6TvsZetRo@Y5p8<=afNj|G!uNW6kND z@V6EI$+i0`X4Pa=B&$3C?ENJ2MAtRd{U@A9Fz%n;*d)*77Rc|jat$BAEC;ZKp2*3T zkgvHu{h_4RMiE!EfwG3GE3q28iKwir|r+9YF?@z3gQzGJarPKdd zlg;_53nDl^(ivs^|C4YWbv+kGX?vt+QpKR|BnVO0Ehx~9^0vjmdMwMUo|5eog?5RnT zC8(KZ-SjB*5O+KWu2C#AzmS##vmST}{=oZ~m)G7I$Fz%Qr*D%k;FxppN;qUe^9#Ak z0Qps33!5X^$T74Ro80rs39&JM2WA59LT!S#9GFq_lYpKC*K6M1zgH(Nw&R~R(2>-g zDh7l-|3+iWC30gujMYf|@2kBC?C0B-y9_)4eX!>yc`cl=rFu$R)ESHj>{ zv6g}HG6cSHdwT4R&&2HDJH;|LVI??zH(>rSdjY*;i29bbLP3oYKT8HyCN7bIwmFpa zgFlM~FACzE!2I`+fe|=%!TOT;|ERiFev{4p-&zJ9%FdNzw;2EQ-~J)?nJc4@YlR^` z)?WD_{sV7TNQXr5?#7#Ea9GQL*&lcUbC^DB%JztV*YCpn;OTp7{OjJC32A|{q%cwz z<%h{B^uYPz{?Yh9P?u`M|5+Imw@u-nJ;i2zA-(_Gk2YI~GB7dmGl@WMfbko~)40D= zClF(l3+}yKJTHRpvZ4TbFz5r@(i~e3UI}dzSf->z+D|>$nF=F9#|PVgY^%@|6joG zHUme>!1s)O&Z(%Df6a#f>p=z{1pW_xQSTT2HI4#r)yl@Uaw$X(%<8)`M#@})e!kUn zTp!~ecJ6kyJd=zbdo_Q+&;$N(t2`ckNaj@dD#lCi_3rUJ^SJY$Tm^t(=ct)8 z_Yau+$TX*fcNsA20V6JCHH(Sypn=F2ycf4x*5>VzO(jRb`@36afLCG!@?%niIykS|-V)k!{V8se3h z=aGBk3G~+ za;h?Q4j>QsKSBJL0sq~KfdAZ5;NL6*?s|YSKwo$;_)+FIg1fb~S{5`_%IL}>c`Q2< za+D|W-#7V%ef>L$`A^zPrE_+??7Uj8_)v&B^CI>$|I{S2YctVX4}Kx9ywjfWZ|DKT z7CIvI2e`Td|8ZXC5%c>MqE2EgYW$x#zg^9tF}NkRt9fM4pnss#h3%Lp3C;`n085K5 zAP45V2a^0(=UPxBuHrvuWpc^^#lPFp=llWY2uyRBEb;?J|A3>9%vui^923@Di`o{_ zu~9vX$=M&!brL-4IrW^uL4Fm^%GCGx=NzdAc9b3f@2zOo|)e8KNf=);)Pg3}Y-NPKfdFHoe4wok* zQ4eatEAc|qHkq1zM&X}2ApS-8C-se8NfTntWP1CI%UEXkZI5E;=&%95^Q^yAHj>@5H}rp~KUV2Of+V zX9qQl%(;(@+$ztamuynTDTROf0jD9q{_y`tL*Fey-RLsZ&P_p`X-DE8J(XNa54gm{%KWknnP*yqGs5iLD%1lV z5F>pC_E3lDgLZy7&goWMbKuzWBm?vZ1|=T0#XuwFv+7i7MSZ`w_&@QVhFT%k4RQaU zmU&z{g<}SvZU0wCWed5_BXi^jmP^MoOVmtavrk~H2mJ5{7$ddk$CxK`jg4x5z#JQO z*h0kry8ONObnhod*b_V>dZF|^(BJC}4lN4Jp7i)lkfA#^C68{N} z&GMLO|98lMl^(G6i8})SNq)wB%$V2b^a0pk&=)g?A4u`cwWw!sSjvEqgl>;OHUn)=#`mdd2OR`LKOx|F0{HliD9|c(s9u|J>V` zWVx+wZYE+&og+56&mXXH?lLyYnZ!CS%3~+kN0U-_$vDi;;9TyPAPZU!tYyG^T&VY% zxiTnZk@REEz+?|u>j8%hXj_Q*pPu+3^3nHhP8IDa)=<2P{8e9Yj`}^DRmp&%2Q>cA zMpRmb+wG3G6fzc5wWjdw*F^^L7PWv;DtT*hUmtg}r z`^3ShTQ~Oqw*RH~|9I^Gj}}xp**{J)p!{N2f52G}{4Og`p2*FUkC7ub=LU3sfJb7S zIRVOtdGYb2A24UHI8z?5^UnDv1D1NgG>1mz$dD_0JuhD2e@->Rfxq-lWsbu|dQKE5tFYBPZ0(l_z7Z(M|#FSlf`dW^pep@YvTasn) zg^%qvk+lps^Z+?W2Zb(?C24zYv&asrd3>uf56bwcwRZeF`~mmas5w8t9-852K9B&+ zVP$Te_+>1C`?y|w%pd=_205)b)PjyX^A`60K|f0d2EqPu+5Zcb{SW{5vBDbQzsgbv zP!_CxVs{x}ZeR#<1I!7mgFaZ-RxQg~m?x-`!?1OuzHLMtzeNh*>*k@KECuxud#+c@ zAYh;SzUG`Wj`v0e9tZv><|o+kA9eE*^0T+(W7KC*9;g?_V|GD@c-GK)?;~^Q0+TJI zxfa2(G9mLc@E9!%fd8PDVz2f;@n8GHb@{L)8u$;B1?W%cePN3O|B!>{Le|N+)P0f( z+_Q#_nBg%BxSx@GRARp>li7L4Bn7xP|NlT!qI3&EEw#=QxbzP=@&mJ_$LTrpLE`6j z>~j_kv9D&5C2f_SteLR;1fKl?Lk}1}F=b!?^25usw<8voh`z~UNkiQ~=d&i^JnqYU z$pSwj<2w9JhKxAs_4qey_`|Lw%exUXU9fM=-)PT#;sMYDgAglqvHxxHpB8zduvUJZ zUk&_wlL0HA*jWbHKVZ%c@SL&H-=lxvp{z`KIyXytpqF?+X} z>H)Jq;3@;!79y|2@YIvo|6>*Ych+TrSd<2^eSm^=wk&TJ^ zP|e_2nR!^&W*?D&+E`hKBV}M=>Tc-+pP;MB7jXE*u5lsy13FJ^*g}klzH(x+3_Jav zj5;@6MxLF9^Qqt%dRtx(ohh?WFY#gCF4ksMHJacy^1J<$8Cz8&|cTq?Ee zfOiWM2_><>3sKkHkUvA0fsuWqo z-T}zKpt#+tr=B)Y7w~EYU1MI(y@r5x#gW!DiMvy-bc3rcLHm+2Ff->6;zOttvXBAR zj`qRa`gv*l6#x42%p-E7I!4OAZjudofod-0Qt*Zh2w8}_Io~t+9JSMi3}~NN=f$WK zxL7yQ3v$s5^%A{~jInc#_QMRC{()JXI+M>8(oap(eT9mm`lL<0~^p+|B0GQW`%$5^*N|b z<=j5=zHdI~>prOtcfxMKkX-Wr4Gptmn{ZS)d-k+>L{t=MxV-*iYgx zXNz2*h<{@1Z#&NVpHkHSbS`O-e+K@4ZI%JAwveaTsB_Jnl^!s-RUG_6S_U3SC)c8X zoV(uVQabB_$CJZ=|8(F#2P;dGZad;KtU*2rpIzghzHqk`WA1?Fo%W;$9C1;H9(X=_ zpG?h-kcGwZ&;haFZ}r{_d;>iI2ODx#?I>%9*hlazW-)1QmHEYIRnI-KOdH7XBaQf) zYn;u9DHzY;^Jyb}kbO|)2lW1LKf)gv9{G_h1@2c6|5y>NdCFEJFUzj7Fg2HwHqe;! zs}%lqzSz26NZUf*^8;oX;Q7k|^r-2>m+S_k|a z^`EGJe!0|ve}@cE2mErjkeOpk%YZjMK%3}+)Hvyo5igyx6XcKf*_7^cDfLV~#zu+% z$;H5b1vt4N0|~brwQ00L>i+bltgm(W!f)iq$`d|^bC&Ypa)(6zslsyqp}UWTgR{FNaz>El8$+O=6#;$ zv~@D^c9xsYH&-49#n z58xXm&$Kav%$UW&*yzgzX>#n#8rjf_IZNQ%Wvvj`Ls*_>baNKd8{Gea|2gHk=+AKA zpBQ8uCJ{2R5dJZJVd{dxnGq)ZJL*Pt&77y$D0zm4qz0+|e?IX4c^zhOdg+DXXNO%W zH|!ta|ILgbVLvft;92l4_KDptD=Na}#I;jM92~7T(Rz{?|g2lOisZ2A{M?J+|%pwf+Qbxi~KIU9@L3}bxHQQl#`-4m&s8# zt!jmQ`U9>q;F()R>jBNRsIjk)&N2Xhz^g5!^?~1tpA?|9q^ZC z*gz92-0}bGf;yW&;7bo!$$)?UfU7M;uEl4-wKyJJqqFOaz)2?f=etz(;Jl4nkcYX)V-mnA zVXB$v6}}eyCr5yNV^;mniVM;Ne^>AQ{9Zf{0Z#zqLG+E^iQnurkIe7`9P;4ZAJ8>( zIyUOr7GhjT_s}pdM9y{U03Ju4eit#()3T>3Nctbc{|*h4-iLbdIAvKfr+%)w6 z8XSn={n-Q`xGV5~i!~5yYMX(7#6VqaApN&JE_7Euae-4GnUyU>8F(1^f$fT8$hm%k zIpev|1uL6N!4-N*Mwew{u7)xDTJL?#A(LBy90eJ8j5-d;fse1KJ;O_{6TY650n~Ty)T>cVz}@hgM-e@gnrk z=s7e4j*pjsOXtx`Ss-sj%$DInlVo=MN?DNnp^U|Bi@qN71Gd;GYKHn^|6h83iROR! zEBN1LVIJfokb!36e|LS0{JO9K`1d6PH9mY||8itz8DRbB!^j&iX|7bfxvu*evArL4 z!k=8OkW;toWb0MyxnhiouWl+*Jv8heu=@j;PdPjb;c@PDMO)=AfEJQDwxVF&GN zF1Oo3(-{v+Hphb;wve})xe@87?LNQ`%toetr9a1fB=%~lcTg`!{Lcq}#LF?e)c$Yy z!J8G=BDtu|IWX#k(>DraS5vZ^e&F?sgRd|%F97v%?4vO_B}T?<0oPm*xYoH&N_cC& zvh~g1hv)oGj0G8USp#KC;x^#Fz5N5OwbKq6aM(gd{{XqQm=_CbiL>W}S??TqBNI8Y z>GEF8GBuZVLCVMScH{!g>^69?>GLGsE|6(4i+$*ULDB~`)0^TqY1`-fHt_#||NI}Y z|118tbC+7>_eG8JFNK%9%Rm8rVjs3pJNpNi8=KQuDXf2X#Xk3U?*E)M^Eq&T4z~XV z=m4wUV!oC#unIC@#D)wR;C$8rxydpYeaYPacQscb#^G%5Y7Fq+SN(8P*41E!e5qjv zy;+bT&zkaLzWjkFQ9Io`DG>1=!v|Pfk&0SSXB)%udEZF$Pq$=KWwPp>Xa9VE^cK_p z(QzPh47~w+om{-cJs0sozxYkWFLPn%@GWlW!T&IWn)YQ7b)Q?Gv+RC_r&*Ip_HGZzQgB(D!~4{q?LH^2Vpd zJ@Nu(GCiLeCq|9{y)>}@Uq-xiHhPq2RpiSj4Q0~y7wi4l*#Ew<$AffUfHk7-^Y{!~ z$UQ%RKF0W?GQGg&17My_#%*_>Tgw1-!w%F+EGRI1fMH2T6t9Gyzo%kBkcU@cx9@3A zM=U5$mLNXg6?11^2>%%QhCpQprF>Td-IgIk;}T9x9=zv$f@ZYk~dWUAcUj{LkBs z9{4utQr05>RMag0qV#|-Tgac-D05`4wbSnPLbQc8Ua3{HBlT~xI?~s*dffaN^+Mtg zjq(!ku5)Dci916cW>yr+tja=JT~{jgsDHEa0W=1v9|BOjr|~}<^+D_()3p%}9boMb zkZbXc9Ppvoe1PD#3Xh-1c;gYwN@LC3V$@BKO+60$yU!=)%=+igZx+s>VQiH70nVv^ z4z&{9kSl%#{E3|-Hp=s++G+Mvj!WF5W;1a<)AIat5_iq>cQNE2efjWzwf*xpa>T^H zAp_R6(>gb19UFDk1KJjPTQ-#jsC#Oq_o>g)!5y@><}B=-Ld<3=Ryxjnzx6p~>GwC`d%F9;8vm4y2FS=}_}#3Hqd)usVxnE>3)thK z+7~d6W<9`OvSI1xWC6HZj66V&$2QMK7sus0og~? z3_Rd}Al9F#1Lo8a|1H2j7xe&bp?jqVT>A%{Z6V6QOXwk6*icK{Bxyz zb;V;$Qe%R#nSyVx%E~IESB5dsw+c`rmk8cbOBry~PLpe{N76}|Qw;n=23D3QOU3us zENu>z0|2+=Le$K$cVH@d2wsTVp}19^1-FWSbL#bcV)hOgvd{~2X=c;rw_*SDidd=t z@w(-A(7%~S@-iMl{%a|61I&?)k3}v*@oSkmw(iCj(t5y<0nQ&-n7Li$uDO4E+Us0n zUm64EBV~xb!5H`fy;(D7%8~U!{AXt9Jj{Q&q`425aPLR_2Q$DLAA>D)jWM9@^=kV6*9auOZ5*}_0T*59q@W_w!;3*iXu64qsgN^V#b1siK0$=A?k*-E%aJ$ zj644_Veu zPnGWIrSE;}Jz1T9K;qF8koRLfYL+gk86D*FrH^mMxIQPxFL@TpG0Ig0jyQ5I&P`gU z>PA^Fr)%b@2YLhl>*F?Q?EeJpllS&M@c(07;{3;a;{SYOo7`X0CciT20RQ#C-PTSU zw$N)e!swJ`XTx0HvAXLu9jMl zF(8cteWWjN{BkYu@5l=br$6jeBV@LP9Cf3wXQLLb6tP$6fkXIiR=l`I%;~zUf{tL# z++6t0J>m?0IfGvUGT^r!*a)9^gN(x*Z`wRu%V6_Ifs3-<65+e3psq^ZpRH@U{drdSzB;WcEZ*VXo|rc?i__}jd^`kdLJ_g*gtco zEdlcbPsmL0>kfr|!#tUDt%R*^6fvP=n6Y`)m;ulEj~%cu|M#k%{~JL2r?90>UMRaP z|5)rv5BRW!RBV*_f%er-KbTu2$Iu5}3mZ=VPOBs1KHhv_$^$v2CsgLDx*^uf=^mN~ zQ)8ri4!BPk1HxK+u^jgOZNGIu^G~RWY(!oFHV}OQ`ojYfZQNQuqZ1~UWr(1?<2G7p}AXbm2M}e%COM+vc39@B;6@h zoI%{zxxahb`!z23e?BiCJn3iAUp6CtmGn6_R^^MGWnhF1KK804VsEk4y%hrc|6SqV zG5>u&^no;Djjp;Z|4@8cepTFR^8>U!q~k)~@&o?bLe90*e*oX;wj1@pzq_5Ie=o5e z^Ia2Wka_1=p%1*arOb|hEd%rio`GI?zr0ZS!1Jq$CHI@_miCAhMu?r-AHR@In4zX+ zU?%1q_f5wvVh=LFe&UXaCuMq30_>k8Sp+?h@s*?Y+Wa}3g|VwXPvM_2qY>yMd&+`m z&YLa7oI&rH9Wp0}*bl`lj&riLG66Qf=lUb_ci=f~v24VdSHNdp4*bu_I3hh!D{8Ns zW*?2EE#xaMI*otWLDU0wTgdDW_|OA>=Ld|~ z=x>1kUS(wx`i*DaP{w#Te?Z5GT(1%T*7ndG#B5kMs(Z+^3_JpTFo8ZWus;(z;PiF> zd;pCR?v2IYUB}Ew)JofIp&5{Ym(v&*wblb2;3rSYLq9NWAjrUR#6k7@xgJjK z8{Sr=a%9VMPsw{J`=v8#NS*Kx8StzJym2i$_t11lPx1Z+@9`hvn{!*Ue9T><|GOKt zLAqv0%K&@G7DlcT)H^8qA2n}ti1{nn`>$WWu6$tl!M{O0&_((HL6sD4u%G^8;OpsZ^pgSW zuJ~tv{lJ1OnO#+?@c(IJm9%-NOYn@3ZzSjIE3y)Gsag-PMxu9`wH}}j7zmE7`K72o zf*-uGCR>_d>$ut?+;?LT_hQW`_y2cu!-X@tpH_T}JK+bDYgaF4pP2i8$H**sj-UHWnMqwT9rw&DM@jE~=r`U&sz2mI%qc8-m9J^8*&iu(w@ zZ;6UuyWUg&&AmPJTDnBSAK_-*Je8jzMngA@owRf8fD%!v}Vjfp~clvN5f)RAyC`$inJU$^Z6- z-!_oO2r-rZRhulYq6`>5G4(*d^l;@5m}8?n@01h_j+GQ81B=U2CFhQNPoxn8YC{Yt zLE(P}eBe&8=qpqB_n-$NjU3qvm_aZO+>5Lq;#!P#w$0kt*1y5($i2S?yzL(q!}mp= zn6*NKqBbe~yY|p%ec)LSc&``Id1A`In5Y#J&>Zh{PxbvJ=J(cx%88bEWhd#!^^y94 zTw8(QS{Z}-PI9jk_j(OLKXGhXqLKG%ZLP*$|1XSt68l`yrIGgm`?P@;VksYBZ1olS z2Zetv1BNcJj*WV=h3F43N7g<)@Iq0E?13KOOaWtGZ<7xZfB9n$dI9qDWgmJ9851?~ zWZ(uvjC2%oyT3#4fbJuEz@nd+I^hw>#l$lB0M%vC0VU|Ey5zTQ;EI`4$iNDd9+(B6 zm^^c?vC*f%tHPc##lHnPIN4U^_L;;UYlPNRq$nN0{()WzM@;y)mVxIW1EW)psoEi8 zpY=nBF6E-W!$05N{F^9)an~zUu9!K4+2CXB9tIv>)X#b2owoJ|yv0V1UK%X}T_6Mf z&&`vgn9)Q$a}nP>()M4FxmDH`9<)EEu}|4xet1FJr$Wvx_SBpE2WSgTJTqM?8t@9( z{_uHE6xJ2~2k!YA|0W-xJMjNCZJ>?ym*t=A_;-;3yFcJ+3wf&>^`};X`2oWp_$~Z_ zKjsz7i0TTN+E66}%S+|KoP1%9jJ2ZV*?Jf8o6oP;$$Iqe_Af0|yb||k+Iq>*N5GzX z*M4H+pEl4d`B^fnx*R9 zjLEvz&eQMEkE_1l>O_?%CjQ?@+N*G{>qouGfVCd*<`cWyLIXqQ!ygWVFU$R{RUH`{ z>UVmY^vBv&gZa&vYfao6*hh_P(t0(2L)TH8dntRt7hV~=k+|2f{|^}VDXA~9vKcKm%$uFdPXdE(N@JhJq0pkDZ%w(BTQDT>Y(3`F8wv#nxC<6uGUXu+Mkyp0G zMj0O^&vZY;hRCV)81Qe{K=1+ZzlG%)l4W57sXCyhV!IFg8v2NzQk=VH{2O}US>%U@ zCkKFUl=cqh?%_xtl`0Q8X8nCV9l7^s-KxiY$Pl&vvu0v|vVDx&X=fQAr_fS2pSb;c zz^I+mdVsc2PxMuek6t4)Qn$$X3oE5p5c6d3sMQYJvJynr$HJ0IdgHWx%Wlyv0Vf4E(%2 zv6caI|A68af?n`P2DD#1v?xd6e+G2Gn)+&~y-OWHJkfTkMr?F>xMQ~CP^v!X!u<`VcgT>lwtA^?XKZ0Zete5)U+eg8TCW=ZWfcbxR6Z_Yz}_rS^0Jz$db2$<*r{}YrgH1gC`$*U`b?GM|hwKcW2vG%{# zHr6=p{gi>ShEk;iAREjJ|A~I^vO41bstxxV|DI&v-o{3MgBcvZv&|o%9#AtWEoSn0 zmI3#kdZh=@Q?G5HXR}gdD(ru42c5j$?1o2Ac(Hoiz|dC`expHFpk7GV%n|Rbn;QuG zX9#-gX&=o6{@0<;@}f&FjQG#}x=j`%R!aQO0FTg1ap0LiPcdcSDcC{JNAH!f8K)s5 zvA{lfwoo&=5xoP&-`pMc^>4XwwM^xSnJ?x%ra{qLF3_QcH0gAl!1#)7rFiwwool?poqrHa(~%1*g&3Sz~&RX`2+3g zA8^kTKagK3J1qn9KKY9{qwM`E9#oz=~hUnPY2Ep`iol2P~?^JV+G_ z@|`2qm~lN)2KZRfch_V`W2xcq0`JrX#QfBvBqzCuM_myyuiuBSzX-m#wN=Oiqh5l! zfS1un!`TCrfi94R$=RW@pxDq4lz~sG(^UWD-R%4PT)r;vt43Len2(;r@fPMVndfl$ zo=4_x3wiSgx}2Kjp`X|}KVZm#u9?%ll)8sT_Y-@Tfg_M(Th8}u?CsrY`&_+x)e`?D z7mM#Zl(F~kfd75k270CP8g#%l=m1YL;F=%!d3xXv`4uv>vH^3HT4Y*%D^`oVf3Zm> zRbP|=W!3U*VVOLDT8ZDf_yeBxfOi>qG9yXe1XnM00PUd7O?A=)A5`O5zY!3zB933@=dF3DvLp`I7HRT&CUvvUg#xY?X-Cghm{`i6&EsOz%iS()9HEA z6|2`-*zK50tb1mRqn^X$Yzt{!;5>go_Yat5z%h%7y~HDeKakwIB4zu)rpat+ZT)Zb zbG6OydaS%uq2i#Bk>T0~T66KL{6pyt=z#Xffc6Lc%@4pIKzx+5XPzsrk@qgP0ROE@ z2HwXx*EGn$^oxx$wXQ*4ud0=oF{`*kezDwdlLN+uJj;N)E#%0Rpij)& z=^o%+9Cm)4>Ls2B-mST*dt_qt2I&dzX@?v*IEJ)Otnu&Q+;#3BFlO>`Mz@1kg0|11 zm`(PaFYvqy>pu9w9`R3ksBfyjufDndSCEr3`Tz;dm*tP;H{>5}GT_-3a`lPZuLpjO zUdpbeb$0B}YG{=WZC7L=YEs|7*sS!xG{^wuV0zspdAH`GjH#%W?nPztcpl=P;GJe{ zl*{f9f| z02%0jcsYptTLvQu*VT*q85(3=rSMHD?ZR?uNFBi2o1KuT%eLM@=Z@t_FFq z)s^r8fPF634K2jliTb!g__=()yOB@6hCEj(U)Ezj6M7BExrnt8oGYUe4=Aoh_K~rF z#-j`|=_1`sFk8 zO*+7^f3!~UPY=)@qAkSO&>J!yd4zK0jcmPM(KU_L|IfvyI_WuWb{s)Zx|yI|d> zAAI1_Rr%+#o6rIOo4v1qkLpa<=ia;b?v?+QwQg71twMzsZ%c7^FBB=o-Q68Zad!(I z0tv*3ySux4f)gmz-~aP`XHGJiOp-y`ZM$^${hgV~B+Q)edEG4G0aHDo+d|9_Fi%{2 zFXfAvE72nfGg}Sz4}F01H?K(<&aLpfatV8IOHN-emDSi+JR>s)ypSbR(=;9+FH8lE zO-TbUBuSg7805(!UB zT*SNy)laPVk=4QjN)J@!0nQoi?6^UOdhC)J0moI}!1A#3s)lqaddS#Ixejv{kEMFZ z;bd3E6Xb*W0Y{{x?Ly2~tjQ;~#2?W0z*rR<-Qs^#ul3}PqY2Oh^&o!g#J}PJtseA0 z@O#emgX0Q{q*c;2`5o|Y84sA&O6WXLw?9A~@JeK=3`)sS{_kYyfa$P* zGTeXc&%xhKLS4_{%uua9PSprG%WTN~UY>`m)RA)TG<)i6(*yL485?~c^HthAte1gq zJ7gkaMhimDsrf3b8)fgn67-xb0}rs5#x^fh67Hd23%doj#Mr61qtpqLy!S|J$o~&( zoG(QDSFfF}?hlMtIkKKM)5R|(RJVON3X2%S_$$%gQ!#)nwnd|1M~%)?%b&GONkHi0(m0yn>*rNeq9ci zpdKwJN7+QCyg(aiB5b7LN!YU#8;6}U5z;UuL|zNhc;Mv#t!D0Z?4cQ;`vUNVXF(TS zfIrOsFI{$H@{x?`iQ*iY=fU2+Sw zT4&&Q`|Z-3#Ii-QpFChx5A-~KFP8ZC&o7pSi8reAz$3+ljCr8;JTZCTt>|?51Tz_F z15ppm&MuIvcPn{7$BHp8qg(*fhlCqQ1(qw#cvJ6Xzm)@8=(Ka$% znuZ3+n?Zik5Hu9^M7j=`gTBnmHwu)zeq0>tpS7mz)Bd}Z_x!hF?-$FVEX)duaaH^H z79v-+0J47+_SCm>*@GEdmHh*iJYe7l=z*r_qvUKA&KTleO2&pp`5r@0{W;ZBtYKc8 zE5V%Ea`aj5NOYAe1yPc4zd-r@xO|S8Dwg)tYkqNcf1t9L zvJ?7guEcrjvi~MxnIACbPnoXEcT2A17ycfu%Rs0fDui6UCcllpsp$ZV^*~+zK<#?q zotSj_G`%VhxR~Jq9aqM@K)v99@48r(p_eZ&7xP0kUqRCi88SUBU1op}W~QddbkO9K zBpI6+r?5}_GasOM09W#W9eCh}(gXVEf6^9_K7)b3!B(y%~9G zrW|#a#)JGkCD1_^IZqch5$z)O)Q|SuB_FCjngu32V0q14Wo&c`Y9%Jfq^lbwBQFcK ze<5?eHo)+|5yzHb-uON2jp6Ts>f`U^YBh1i@>=3e`Mo(Fs8tUR-~-b=%N;?cpj($4*G#Y_n`TLL`L z*nzXwv2zu8|Im4-bag)GL#&gW$P5&} z8)=e-{z}b1t7@xh*uN{6^TW|ksm&ba-06uv2i1;Z?qYhpnz`!!Ks)QHau)tPW1hh6 z1JphAK~3i)**?ZR03K2`alrpp>HzKt7?*xseiMHiI^a?DfN5;h*e9;b7D|&QvFTNK zfd0T`_{62(TNVe@d4c>u8J+<0F-hCizF)(?s6y8brp3gV9O(kmq?@>y~~MQ)fmViI%4y?xK9x}nDC zCvN7vM_OFntLCe;b2}(KJdes?-%~O+$XaHEp|*lCQQ$}s9~<^kE&(5GKtJX2%pmc` zEaJ3>rOGDcXV7K6@#p1h^gZnIBV>6v^aOBE>`(POg55KiNs7FfwwJGRA6Zpfs5U*I z=Lod@1FV-Dja^PDIT?D~#~t|pe|fd!dyTPf?lEm9^H%0K81c7zZ)5_tIBG{ypDfj zpY^2HxnZ&lcG42WgO;J5dYb<+X^(!IcF2j1^xZ8Zymv}R`&DYT3Tq{pCw~9JT;&g2 zI&YMFDcgch;`18vU0(sOAA=s*?lX05|A>`bl@>w@-}+^tg~^ z`GL2i(`1+-Hp(0^V?*1DF+1<8J5R&|rsv4#l{~>1h8AySK7g1{M1Gj{qRbPQ!45O` z`#;ocwBg7DKB$v8SD2*g<<_SJ%QEo8qB!J=$peu6)CZ&N4g59jE;yq6JlW@Nf^PD|ZAAuehodoO;#60%x=~pEXJNh`Qm3^(G zH1u-q!>+#04y%#x@P$l?lqo?6q}9a*6}q6d+3W2t%#w5P?+vp5OW6KH=(|2@%%>(^ zpbeCqlSV&c3v~cvL9;X92PBk32RxY`;G8+m8|BPhHFr9y?mjY=9{>*wO3AIr6SHP+ zReq5Ke{t(au}O^e1t0%VIIr#RYP_k%SeP%)hMZ1#P^S6^d~fB58)E)WWocp$zkt30 z{bFbI)_7dc6o33Y67v>Q9+s)OTg=5(;{DO{%luvb4gVYIvJtT$_Rwgu|B{SDUaU22 zp3jo)RsXu)+pG8Ra`w;J;y~>GxF{~SV`ZezE}0vC0<(}@WKEp4baP;S06M^?x<5eK zKhA zZCLv`{7mCXO=eSWTSCO`lkzYBogCz~Z1N&yMI>TGz&>N5jE#=)M$f{P_0rsSrR>cz zKfi%}yeA9%#HKU^yE2{Cm9wt&nOKLi-K5Q>h1G1K50Mk@guJn1f}bw??*X5^DEpEB zdgPd=j(2lc{9P4C!j*G#g*>n^>ze#Nv0Q!!dK5jtp5o_0AEXw`{@a*qf;kS_^=k?V%?< z+n)pO|6ZSwyu%!I7h3=>dH=y)h4{*+Qt9dk^u^PYtnBi5V9n{z)HPm?M3!tdO9zivE^T;FJ4|>g9t>@%uEM z-z>d>{(%zAOV1sKf9oNA;q$qr@?z3m`K>Vz#MfX8AvXH^m=fupiFrleX|tV;zboZH z0C-|N_At3VERvz9cNm+SFGp?{$T8H;56R4yzeHA#4{^TGpTPrfMW@QZ6x2oo|FnnL zH!}ma6?H-Ums*VGnLc=YUxoLMwoX1~*STFwRsHsyGspY@`v(?4?vFriL@U%usQww& zO`w0EmBVMUD)99 zd4xZoQ-~eK5!H17ZKBHk#7WW!x?nJBs2Lm8{Q^E-37hEht?Lzh@N=?@h{FWLCcSRu zVOGlxmB-e7+^5YCI_7z0{NL+FhMKFj82K>bUeB4aetNL4m9%u`zHZ2U)=h)-{+Xu0 z|3|(D)qYB2OzUTAdL>WzVb7~S_W1F!{yWF>eWdMW%%DR|v%0>G=Mb~2ACoD6GGhm6JfO{5{0n+1U&b7XwwNRFX_{6? zt=mLX&`Y@j@uqV(N+lM(WyJ>nfV}Xuar888cz!m{OIeTE(<{+ae=s)zJ0h?v1+%wu zV3TOId6jV=zTcAXqrI>4_m~goE`kW$Yn#G&*_7<3YUh|A({az9nUMkKq`m82RXfd^ zIlX>VtDV+*XlMt$hZ@qY8SWKlY<#AC%>7=*uQ4y?d@EKqr(%Y0>;?4aoRqHU8)iQx zXO3>cd~4YG`b-lmkO^SC5F=4<>J zXHlm>uWg8BBSBZNa z|Get`1JnbopYG%2#%eDP@xa%GWq&D`bOX>Hab=SsW)dK-Mu1AH*Xzz3YIG6i!b*iSqa zG&c(~a8M_`uNZ#)^%8NqU4~wQYZ7$-hN>Nn1Aiocbz9O<6T#Z*Y!LInx!@VjOyT1! z;4K|LPev_K?1LK;f_fqk*m^do8$E*B3FeE5VN+aN`kcSZUa%e6@fEWcwRu|FOgZud z=c|w>RwjokzSxFc2z#<)j}4KHsF_=p;H&0NGiS`1LwX$% z^TeF7#k%Q{ffuBc$5CnOj2Y}^YNw6yZ_ESwUdj!rSF7Nk7(ZDQC{B>|e5~_@ex<)) zcRfPd+oR_ma=*L%T5-p$VT0ZCC2%*I@g8EaCY=6Iuj@TBhPlym@EN{kJje#|pjV9I zLBzizrNrVp&Rd=mKUskFV}sOvZg=S`SSZ*PUWr7NKxXyWah7qD&1t zCI0Yjbvxe}59A3S=zy-ypQ-&D2jO=Z>iX6GQp|AvHD|W{Say#oFX?s=c#wO9RXhk+ zS(^nrU&p=C^|uLkrETU7@%>t>{V@Knd>jRg8}B)#4ha6HNcP++mXC9aqz_`64HNPW zyZJ2H#boRgSI(IuAN&=>Idjc0Z>W1Bcp(Kjv^4a`fCr{$WUC%Z_KE34KG2Ch_UyTz zs``!7(L12^4`@9E=pz8u^}13E-j`Eui;yksio zEzShyb$y`o#eBRrKMwQN)jmqYY>608nH}Y(cGZsybCjW&x!VJ?wpzO%Q~NhKZ&ces zpwFE)zk|b6{_D?mTZnd0N6b{58EK6=y^GSvbC0xh`dsX9##G6Pkr#-4#)uB&cwz?W zN?GW4QnE0|koX7QVnDCZ=4XAsDK3A^=hQvaL7)bBoXF3YfxOtr^qbY}AYBhEzgC9t zSJl?1Y(ED-fVp5}zM$Xb48hhs|)-5d0p=@<^kI9wxyXeFCnCY2gXHtOKU${Y3^l>J>53a-tUsyS+CC? z?Th)NeS_?!Z=jv@3b-WQ{A{Fy&v|L(bz0uTY{e$7N8}xs!)n&zJDfL)IlJa(uN(1z z#kLTA;tj%>D2cJ5X2=gu46%}6>^-HuL+sN}*qr8sJx<4@ox@rg?z&5&F^|Sz_uNAM zsTXlqQfz*X;g5-b{#*67J+IG=>x<8Io4!CeVxsMha>KeE#G1MHGj1XGtL=9u)*0Wo z`=VI3-88@dm^=^z-Ovj=3H}gW(_YHjduaZm_EOe9cbYSI|B9KrFNDUZS)(t7#i&_} zuVdcg8(~pu#@0LG(b5>RwwgvnNpnyOMUnD8`sw?}#i>5B8Q_8G;DK4GiNcw>mduYJ z?lUkODEMBf>Sr;=c}4%Z1|Fd8GXZng+xXeZo0vEKCU(zo_ds>BlDDy+ zm^c$@G988`b9vwYaiQM))5B=C5M+#}(=0z7zFA zE2QbAWzyYoqqxD&GhqK);A?UDwQ{w$y{0*yKQ{jPIjD=0vQzoFmV%Toz+Rb#tdTRa zfpk6?RjAoPl=og=70ckI~?=Ku@i<`DyVA<4?4M44>~LuBt}v81e#tGvg1lZmwDSZRwGHLz<*&b0ww}l^J{^ z%?6^4MC{Y|Jy~8P4Y7~lxfsk}ueOsItv}!?a`QA80%IVq|_wtT^1T++X0oLHo)9anVId zp%rl<+Wvz>U8EUoAxn9Hyg(kP)By%vplqQh)dR*pv7RHVK4XjZLadwHirojOWz*yQ zA;8q%h<(!2!tK-iJNjqCmAPnNkm?oq40WP^0^ao+AzcU17Wz#*`e+avWl#O9N!Ml9 zt&$2Kn7QEjCB@P;qgY-~Fy2L@>42)cSuO9S)bxNB8`Uvi{aU$)rjiG=J@wo}(*X8R zx3~o559o8}=o4>*j~0QxVoPvOyN2&`yIm}EVJp#Bo{9Z_Gn26Y1^Zd8OLLT7u;g#? zJyPD7W+CMF($-ZG(IbPhEwPd@;76#pP2c9Iq}*a8u|o`1q}?j3SDqs`2wc4(A$q-3%&c4{Q+ZJsOgpU zG7Y=@k}GR_ZUIMwbnHLvx@H}>PwUFhhyEMg7V3h}T|^#8M@(oU>g06UZ+g{vfO_D! zsF5IX-dx=?cTIchbsnh87OK9dUXKOUk4%!5v1uwt@L_DKyoV3M)dNPmn4U-v7~4Wxtpu?@+WVM9XJe};_Z1Zu zJVbnR2KREYrvL91=YLe*;OAuDd@15nz&~rHRZJ)eJn#wPqNa9`&I=k37}X0s(u}PF z^ou{7p8A#P3F3XH zNYyPE>yVlr>-JDE{HD#=%cpW--~sA_S?~*nz%OV~%`Z45kD><}Q4c&34`{U$^og6G zPGT75kcMU^8Dc#J-y){67JI3Gm7SNZ>VBZsi>jYgjoeT_Bl_bV??mpRj=pf2O1FJS#8jC+Y9j#b4wB68wRG0sdJl`j9*j3mzEqgYkf|9?*SaO%MFZ z&`JHP%QJXe}g@htd*Dq9^mc);-9q= zoVOc?S|3YzfbU^#(AIqHEhll-gqtc^$8Hf;}`j5p&R~2XM72 z&a%k2FxCs2E-07K@?zPZ3EvtzfcikY2FOV4q-^bbQQ=?nk89=u=Ef>xLz++gBzmB+ z{bu%Ei?l>us$;pwtc0&rPrz&=bw8=xM^=e{T@P?i>tya}g+DM4Hc;68GGzntb47k}P5e+puJtg~Z5Qd^i!mbh z4=hLss^A0a1Ma8nhMnCNHjznOs5V4CcP#D-dl#tvKL6K~W#80>w>dt(0_cC`GS zyDEMu*w=Xh-%Z7Z(sMKa72l0BB$O?b0v?!#xDe~*%=yK}JfQC%U?0IB(MR?t>>v0m z=#}_Vc@sS~&6BT5hqUX`53`9rLC#@(_H~(*qtV1{J_mshredGXN?_g!m=F5mHfoo( z+8pB49DYq-)A>Q?31Tk?^55JHEWRfJ_R+@tJk*pLYUq$7?h_k}T^!g=8ECwN19|{< ze^ookQyO4D*@!sAgiuF11AK7tTCUGq8?D19ZUi0}=XXvb4RIb|fxD@#BGV#% z$KBMW#ihRpxvyhizj7vvHcv70SBPuP#rM9)*k~qbS>|>5OD#O`9A+&xOuj9hGww)_ z%)8P%^N#e-x+6of@5(1RcVtZN9rVrLk%_stLAPXL&P|yB{F4WGot}$*T17X+>gG)e zdVpGeV4k?vF>H$QM}4l#RpZ~|YvGtVy&CaR*2$@OX?lkALaoGWY7Y&tPx(*6KAKmc z2e^;SmZrg@}EfYRVJW-DBhB)sQf4KV^+O`KSlHEA#+kqVI+H%T)NvtSMcDJ>Bt;`}}t( z$K6mb#9SF;L^Hq#j1%q6OA&9(4`A#^`_47<0{;%*!(B|KHW7UT)>5->w3+7_RWqmK zU)KYb{xE%G-6uwkkdZC)F6K^i=Jc9y7fH{r583)XhCW0TP7TlA$h4*AtNxAI4 zepfEs!EUfG?n>%6<*-4F5D=o*tfx48Ed9H#l)#ye8#(3U#gJ@ zD)-dC3jDvN_H=9eDaixQw~8usS1RQ9a@at`zcC-oNs5$p>9KOUI75OFH_d_XTN^Lv zHWBxD+d}W4f1tJ75!nwPI~TD6$a=`QEgHOw@v6M$BLrHO8-jEe3_vjvfVqy4Yz5M2l8{J}Vp!?i3~lNzr4W5!FV3+5nqHYUPNI{IEf zom_3UkfsM30{gwZPKj-D6fv)49InNP?~H;i{Lgs&4~Ko77nmmo_SN^t^$pyMtGq{y z4RPn>RQScLoBOkg{GSeazw>&z1OWR*kngwu4tUr3Lc`BJ)dS3Z9E)=>j~clF#zwiH zcqD2innlJ5Yv#1tQS*E1H6DOJ9AwTP@J3$PQ{{(=ebx%C$V^tb1RcK~m?Oy?0pBUdmk@UjG=#=~IilLz8KofzNL z&tAvFKjM|W1Dx5#dx08{Kj6M_&w$DibR?XhrQb_SBox z1GU*g`i}1LiHL)uPL4g5zIRI%M#%$dU)_=wsF9!zMCuUgElvDgq-&VB437zxsqtZo z2Z(+0!t8`fewc?I%H_%7vKhItqxng48TkP})REF3;Jg*~+lQk!k2_k~S3ei{r!Jr# zXarlxln34h_TP6qE*oGkrO?*b=JXKzPM|kIs$YtB@INBvO~12oFFkbPuW^5-fFDZe z4^S7lqK~Ez^2P6@mP@~E4g2(iX%CSPcwJa@PmbIym!OB`@N=KO&9BRO;-2x&ILuSL zh&ftosi#zKSev=X$D>g{)Fv)PUPd3y3#ggX>qcKh4^3S>P_rKJmDk`C4~}IVRNF;k zRg$ZCp8U<&>!CvQ>I3_;p$7&>2TOflXL;SnLEiLnl;#00(k0YWhDQ0z#JFIY2|YkQ z(D(t56WBKpEVDqfQ8!9_F9z1Rr~Y%qNB3mMsrf3a@m$jZfielXf~Fp4jPS4ZlJ)Vi z7MtWqK~IQo@7%|ka(4dji2c%%Qj2%-nquXb{G2s@B*uSH^U)qLVfH*o35c_Hmm)^` zM)F;0n0in8WL4?|;$PPZQ@|JW56;}ycp>v!#t1ckz}PP!o@*lgeY_G|#5?CE1|vUa z1I%wJDv`OUiC~SKRv)C*42_5E@12w-Z(+U!dnv2;&{(Di%=!ZXzVb4tV}u?DjaT(^ zd9YbD-n@?;HN_QmqZ48KGzxH&*TDnzf&cp64)Qwa4e&!FKPPD&>Y6vZ)v~`p`kl73;MUlOgBzTDft+ec$9PX^feRFQTtfucNl8kE{k;$ebQv zp14T}>VZ%zN*ib%dS)WN(CY8V1KicL5`Mu9L;paBP#<}XIzZKPh0^% zAlK__FCPRrOXpxW=^y4HBO<+Je2kw=Mf{(&qLrAZ?XT&E$*7%U&Cr{un|kPi=x>M* zy_ZJYNQ)EcIRaz7Fc$fN381O@cVu?KZCOxwTb2~wlI7?_UItoRa6=a4Uzgc=*JWDH zHRO%2$pq9&j5pLtOvF{M8Je8MUWNi0j(O{y6SJkE3GR)1$zBLE*GC4MC?u**TgaS0 z@On^yjEF~!$6y0px}LA(KlK!I4xF*2_0Yu0kmwNDKv#i(l0gp`@jwF~duae3sPBCl zWT&Wsmz})jWh?J`V}^w9W%5KZHLFl3B6Xb}T*adk5xNqTk4)brl zAoDX6?hSJ48qR77=>I^<*8jQG?*Bbyzv;itdq>Jf{cCzodIRK)*;o9K_n71XnaqBI zKZ6JU7rm5!OuQ@gkt1%Menzz25d*Uv+bu0iI1k9>|N&Zw>2{Z5@7&+nPN zW0~AH#Xp}@Zald0K+QRVZ}4mAff4Wv;&5M;Zw%v7PUe(KXUtk*f93yS#ujHSKA&(C zb9Qe^_|FY9&S?M?40(V&;j*fd|Hc2UsUD7Bm`qWh7{5W|<7Y zjNb0pQPVmxA9&A|*A06(^!@>T4~Io_CCuu9NB0L_LcLIn@KEG}wYhSO&^wv%@MeWC zlL;G$yD3#~0pg?`!~KDO7lRI{T@O^^AG`oPp!2|+-~&w~ycu+zdVu~hd&{;#W`B@^ zUV6-0)O+e#GpG6}Q8V|K_-pb~e3{fwC{y)v4N)`qPEwih`gUT8ype!D`*_xl7RrmU z`SNGgOM@N)?BshsDhoX`X7-R7=1^DiK;@h{V>^hCHGd!$@gQx!P(@$81$v;u9{~Q} zK;7J^MDC~8W^B0_a>2R{bPW5siGSKiL(oT7-`^ehe+(XgO++4Ops;TvZT;+JU2Kp< zvUUeKT!XFi0KVEeoJ~{tR-mWTR4n_M%zu2DUlY$HWhWYHCRj(8_fL>Ft-%9!pf7nA zjFm=#57t9|w@AJPKDZ4&sJf?~`v=%l{|A%WX;njw+Ue(>XtoMx?sCSKHh0<-|CKy| zeAr{~fUzyqFBUyvn6bq@^#_b{!L)(=%1dQ7uumU(BI-pOqo49MKgNP;=K)h&h(5vV z@C91=Imoi;KnX-#2lu+d*1_Xo&_{?_|2t(BDZR3Byn0b=-3$V}O6! znE#3E5L^R5-;xJNoJG9>wazV*QCqEg>M?%;x`0%7PyN%Fu~nNMFy|9nW($!AUJ447 zRuSQ9#vJF&t;kGOu^&C2%Nf*bFfUNqK=1=PqKE8NKX=P`0CAz$4L)%j#Dtb1cjgb= zL&od4Cl4fpX5qg70aq2X{;}teKMfrHod1TNGvoayAHX;G9j+7bJOcE+&Id8zgPmEW z(gnQ%e}N73+c<63mf`{Q4%F30_Pp7CVoTjK2Flu&sm0r`N$#U4q|h2lx=T_=@9psxVLLTuiq}c zsp2}k=g(rAKdhbeC_F(v;CbMz6hU7<2O5Xxz91DdrJtM&^1=?Vl^LbdA-POmfIrNg ze7`sN1AjyhWhEKSnX9G;>YlBl`NTEP*m@Fw;BUZxhiKHgVa_P$uCK*Tl#u(^#Tzw2 z7con5cRprv8Su~9DoxQtN&K^)<`vjNFZ;Sm13y>k6znC7V#CBK12ziD&a1Y6K-G!D_Gb*}llUm~P6KU8MV|Wkw1=stmi!` zsf_2aR>uo89`t9_>MMDYo1a&&;8{HLXT$g81LEJn1GJI;73bLk^cg4~uYaT4MtCl< z`Gs;0^QC8}6-&EB?C6dwMvSN!x&c=;bGIg2$PzuE?IWw52Uss;8XK*h2VOxR*?rkFNle1Oj?9b_bFgAg_BzU2aySv$Q^E|GM8Jz(E3WeY6yud5Umhe1?4Q zP|S~LhP=RwiVrw{y%0MHDtFL4AFc19sm&+WXD!w~bJu*WM9n-v9q?voxb%xpl(8u( zGA21$MkL0|(D*p{G(J{lC&poSW1?KjNRwFXHPbOq-G}eY`GVJRbp}lYy$bp#kg{`1 zU`sxW;s1OwZ;n5ezgAoZ9#HuM>V|*8dA|<67>Dac5ZaI{eP-QXh=Ojg&C&Q_R7#Pw zODL2#kssq+A?~C319;#$>?8Z5AxBpGZr0j&aMV^a#~zv&K!3&T^%uB%0Q55GUGPB9 z=opyC*)^VdM`_?`=L^K+U&7W_LND_PI$vl_Ku7Us?I z0p%LcSwDB$xS(GF3$H@o56A0=3^f+)QPnVnEBS#kl={IhkM>fbY(yR0w3GrFfEtOm z@ww6{CR<*Q&XgBf8-)1K^PoQ(6Y7PY4^IIl%b!paVV>gU&)7fk7v#v;KkzcB0d~+d z#_pLmkulOAy_A#V6J&jIikwVO7fwV+bAFQu1)wk_8%~}(+W751LAJK1kfFj zvXyk4ktZl)v%wQd&=Vn;4d<3qAm_94+*xB<0Abs23fE-IIgk zGvuSVG!XXG<2o!Jd&Uw{Wqe{f`nS?$Npgm4NXd}B=$k)-+3L>NHyMaIDslPwk_ntc zXDNQ94bRWQ&w$TH`U1o_J!_9w0sGxE^D^~#E`)l17sqn-2|c;kJ@&@sT&cHqbbuOY2aa1+QBqBcc<(QWN7NIfv@K=o4YYE)(4M?J=Wx%$NRkT zS}YzDn`OA(1yL?@-px0lZ$XT&Gwwp-V-kNxUU~qc?R6c$p9f0B;{afswNC7ho(K8} z_RIU3xtTBE`k$PUug5C!GiBT5=H@<=@y}%ZQ;pqa=4aINPx3<^C_`b4Gm3#v^_aMW zjqxw20sb%OiRbYARbaCjaN7aY7q5-LYxK3JgXV&WZ~R z+y?j?f5zkg!OWO{y$#;OW5d6lQxEu8c3XIASiRWH=z67Pzs%Wzk0ZY<`JH;t{(E)@ zp51|Gci`C_cyN$3+G#o$KN5=EXZ$4 zOnQt2CIyIFtgBp(u$6Nmr^PDZs2uUzFNb{h$U&doav0a+{s-l3&~dQ~J1?%$4ib>y zEzxP=lA4_?h*LBFPE6d#-_HY{{P27aKEo(n-^KO+>2n-7{~vQ4p4HYqVSYxhWzx?Z z_nqhdzu@y$xGux}cEfoW<1D`AS;u82h$qhMbjVrRg*sHezK1YKGsDB9BD5D4!4t!K*Nu9mILj3-e zWav-%vrvZKyMABIL;+t>t}`Fo3^-VU-qax6Th<0hVpg)a#Cggd|06QTahVLW9w)s{ z4wBBtdP&ElJrs4qwad}&()DOJ>4vk{s53CoQQ=_pxuLSwZMl5rzCzZ!EtNH{i)5wq zTv=>CRp!`^k*U@n%a~JrWccw;z(Z>paNvCzbnt!o^jJrke}1^^aa}FW5jGN+9wn%u zfZiy608B*V^J4c&VOz=teg|Th`+u_Yf1dkpe+;~6@>7%XICGvq`uqw;K$hF%%y00_ z4qfr-w=V6N9Av@&3{g)agWj>3qD8bUD`Bhz>2ER=Ou=gKO_ z>9XYVc$s4}Ohz7SCw+FmB?I<0k}=0R$!fbPav|`DM5l%tumC+&ROE@XpN#MG;se+y z!~(GKtQOZuH;~_X-n=)&0PfGrpatY3@cTE|D=5zKUb4n(mwbF_rgS_#Qre#USlU|+ zk&ae_E2xvzAe{dI=?n~XsRILDAqxhb>@Ta`SIRd3t&(&%LyEq+A(>y~OTz6G2`LE^ zk8C%&oOD4>M;?(wK|5rZ?*`fGxl%T}FOkh|i)Fp@EE#d6we;Qnw!%U0-ET_2Jq=~_ zkv6i9`Z~YYi4eCVjIBX^De&GJR zg8Q=yXPyq8ml*K+(XdN0-f@+5IX6z)o*FLgK z^xuY~CNzTl9trz>Yv38_Z?{-lotq4rC~eM8P#9=?cAT^W4$NcV(d9sI_yfyamdfWo z8zt&SyyEwo&ffTS&un+u|P@5_Fd6%wBoNm;=9P|lX^7@rxZ`V{f_ z7b6R3-%-!e#>4meZ_sSW`U39Dvy1nU(N{m0Ru^XC?59gB1GPRstwsz~$br+Qy1+6y z!1EtxJ6YCwu9vg%=doYpZjExEyieJm_hqRZ4L=|o!TWP<$4Q@qt)$of78U3JC>YRi z@G7wIicEzcc`@LiWaVPUc2V(7+@}rD3#_kH_w46BXI1HVoISo1ZM}y0UUoS9ZzEva zE%!Si?QIvy2N!0^hdBRM)-w!bzyUCz>4C}88gig6U7*Q<+U)_#fv%w0P77td_ve_i z?N?#v8OwRo$1a&yWuwPRS>ZfS1|cTY^S}qv>p)BCz5l&BF`(Imnms^W!1LFMI^iQc zUv2ZLvJIdg(IZjB*kT*prwV`ZNoDVk{rj|IfM@mju^aoJfrF3nz0xtOL9FAvBtX{6AA#;>>kwe{r_-v0ows5!>l{X$~+zdtkgp_CSY|=6%CX zh!ONYHCUFpua(dJwoBaYv|7)fyieb72jT+j-IvRlb3>#Dc)#a?57qgb!$5B%dw}tQ zf%}`tkVEgufPIam@6P%aHX&^Sg#*}!{kQ*3#vXi6&id{|T#@^ui%Y;WGeG}N-l07B zx!8uqCFsRLFE(vG$o&7oXI~2}-%HHNkhMY9(#~$Vw79rXx;w3vRdMIVDjzZ10$tcWLyPt%e=4s-5BSKb09+yrw(`&>4`JX;P+mpkj=lQYH+j>kj z->@TM1B3DUYOjs5H|((F!LQ>PoASHl3O8Z60DEU8jbL5bfNO4yef68~L+q~LY_oW#co_}O;&UhS=?n8iT5lf$LU z*-4Uj!a=iwU;t%8A$CkD#c%QIxH_a-@)Xe-yS|4Bb<(<|cuvGDh|_->Ll zh!YJ(9)S6Ro)u(_0q6tR16zVO$gYTO(sOSUnR;oMgx*iUcPmq$KSfFi5yt zKc8>`F`{)c>&i6bjyg&Ypf;^=TEx;a$w+&m!S_{kWcqFlJma11@ST31PPF(?e#e6Pt7i*tf!4ndk<&+ zAwF*$?fU~!uF~FNqcpc&q0XM?|2`fc&GS(_Z+dU)dQMrfFWtVvH*5`ipp*4vSsHdg z{O={=Zv%pID?KuZ~Lw1c>m`HD@po%B8Mo}5fMW%m4yza#PCR_Y}~4>YcZfdSiJ zl#h44Ci|~0lWfGmagXzGZ~M_ML=QXqw9flpVH?!PAG*#Ba$;)AmtW=VIIKdj6f zn!`Y^gCENA{Fi_LJjD$1OPj67jwf2wR{<<@p=Qfq}3KKZ0Gb%W=MrfilR~ z;fx)#&VYPpiERF%-ovv8CSm8%zc1*7v(HY)Uf31Ew$j4>Gii2Zy|lQz7F3CW7LWnk z(yuC=Xv_Hwn{RU}Dy1Y)BK?dk@pxLG6GA-0f*>k4% zqps&X|Ess6WJ$y^3H%~O*#zecePsml@U6~_l~$*bD=>}~8^ws|A56WvLe}{06z5#u z8hM}R?_Ch6;sXn>E|#7r5HnExujh_6Ilvl{{>Qt^eAhYhdGP15#ABg+j9P(xF$W~- zs|?v3^0~NQ55#9IF^dDrGUp;U8D-T;`G$iJG?4+j-$0!BRoDTB7=ghaFvS4w^$p-) zC~IQW{r{2WfbQSpb1<&c0@sub)JQD}wv(m~Tcol5CTZ!kMS6Mel|jA-r7x}>oHr?1 z(A0LNbavh-S8vBb2AH??YQq6-!02ysl`XhE`H~EGT_dC1*ULo2b4DPh+Qnw7v;h`O zW5r$0jFS1DpUb*{y%Kgku}0m`T;Q>ov+xl(yqeRKDWukrmc-{y%;ae$mF@)iI4 z$?EUK;k5|Z)0ay8WwhHGg@KA#F?heX^#obwvt2fa9+fo6cXPU*uO%SfvpHawtU!FY z|LKp_`FAmcfnCuD)MrUD!Z3L{-Y2gU2}be{^4wA#3_#VHCsp27rgIs zEkOPI#%HVJljrVG~?}ph*%+F z1ku0%cSx#wirRGclm3kU9nT*#QvL(~<{_Lv?3Vy}|LQ(z?6gxFIc$^FDK5A#Rll?8 zcjV9G5aYR67A|LtgC!C&f;cgK-{U@~ES}}RUD*V*2UtHa#&M~v_S-GiX)b2Zp7Ebb z*}q9fU77;kuU<>m1vQ0zQ9E?ChV$1yb4_}m`oI{o`up`OG3^dNa_Aw%2WzznUzWpe zt5Iu~&s?$-Y_Z?#F`_3uXLG+#dylrp^iplu z`L9iLuap0c?-kFAvE4A>fOehn&mQ+N`F}>hPQ(ZpC)8p@^S!pp`oR4Xd5dwM>gUgz zFTdglS?9My=7O)fo*Z0JPiR~}z}nKzM|)yVrj=RwZ~U2S<8$NpnLb|cy-<4ZVm;y8 z@C~&Z5_1?}jA+b(X5ts?jC?@}XG@KyEr2;a^-4;gUd=hr-Ej6V(%wr)d}mUSy)<+_ zAdRl>$N7`?%DaxcWK1~fp&{E%zmp};sRy1E1H9+K$Qga)yh7!VnK$ftai%OmEOm3} zamjd4WY+d$%*Pt`2;&3e9p)o%@R8J9Q`$?8re09ChPm&>&%iiz*n^bEx({nT=NZnQ zb%nKKfU)AaCwod_Ml@rDInV)3DFez%u00ihAPY6?l>3k|{|XEo0Lj*9UuooWSl+pM zNZ!3#iGg>4fp#8;#N}@CBgp{cdq{l{{Y~Cu-8cRn>QCz;KWUE`A?t`(Loo2lB3bUg zPxi&yNTC_qkNf2czP=%Qqt3`God1xElaV+0Nac>qVSxO<7yM6K)A+ON|2}E*DSs|MS7#I zT(2wEYf5X<1p|;X`WUq(c0os(H)cKAylaMe=#O&Nrtf8*33dhfpK?DoDKA@w23(f6 zT#v~+q$(IVAPt@NVgHJ~#Mcn>sOt=A3xs`@rF^@(-do$xX-}|*fVCv8QBye4eUq#V zJR;8dA!cPib$>uvjI2d$XpZ{^>5RCco-@+x%d2CcmyEbHPWC6B630?Mu`l+P9nlA6 z3VKBBi#!z`%zZ{;;9TY zMxs-K*>eCfP}mHl^tS1_TKb&7j~F9s61RZl^Oyj6+wG(@bUgt&ZWaSOa|125|Bdet z?~C{S6tON1Q~XaE5Q?}_P4P41-!*;AIKzQVXH`$w7WHK_y?4o~pkorG;(pa_Kid9R zvb~jmIMI1|Mb4-;46w(9a)9<=uag6%r_})IfmreJvnG3Q?yez8_9~g0EUPbPx!>QV9 zN-O<>Ucz3(saNMgw`W(A`=*~&`S{m^WYCH3(tZC2(i^!$){^zy+pNxd!rF8J>xqW$ zc~h>UhZ+9BL!2G!?jG46WPG1z4`PkJZ8l;IQ$pS34V?Yk?xz)*!$3pWgKN@#fPc%+ zpM39hJ6?_==c1i`)!+4nOt8Hcq2h#={$1J-i;*Mx0P??w-6B~6A9-u!dC4}D^Cj=+ ze|=qcN1m1ysJ|PCzQXp8&}XD$fakv{VsD+iPb}~|hulw;k*Fi@exUYx!bg<@{a_2s zJKa}Ov+yq!6@}vbIPd`C4xtvOrZ_O~mHXWU*_r94WC5SogaiHc6M0_J`SN0EiJIa8 z4l86?;9=Pxe_4u<+c9VRr6M1&DdeauMSh@%^+YBA^&TTFe_Xp9pf2bHU9iY!jUgXY z`*)|`z+BOQ<6Ua4CuCiD)!OoR>$VA*Geq3*jL#0*0h~cSi~Z;^nF$u@0P;S42h?=@ zH*7wSG~{-M2D?cE51#+o3jVJR14F}X#pzD6vf+sXo{LU=PFe1CKUG$xT$O#f{wiKj zn|$Z*IwM~=HS~mROmR?nV4Og=4S3~q*E?~tHvWQizOqa{KuvMW3$ta|)eW*d@EGc{ z+|1VdF%}ecD-E@&hlDYr&gUmo>oc;n$E4@U0kRD?U=Vma204J3Z?e^u*w_36+Il4t z`XE^rxXnjBA!|wXnnL4xLd$B)YtjYmIh%|c!ua$kVjux>{I8Vfmh>6s7UUXaf8k*8 z{#PfGW2B+iC3(ZsM&2R@JcxlaRd8Uc3n&NLd7qN`N$%L+8znB~DdGv4;C?Sv&R>g` zWyvnm%lEi!%J8&Uw-W=GkvHn*vPn8SZIDkei(y8XmCTPiD>HE&i8&r!9M{PEs4f1$ zX1=skG*8C3Zy0$g02tGQ;C@X@3qi=4SegERh4u7qGuz_{Fg@ z8U2A1oo1=)3jg)8D;Bm<(rMWqwO1xynIJtlgP?|bLfQhxwdJ%2SyS2zy@tKv6VNwg z-*Kf~Xc8kr{Q&EVkD~V!I)M3s`HbIY=GEPA%${V-zW*=qzH2IY|DzChsqcAF-c)43 zfQ544ZP)`%T#raAk7Lr#>zK6hJSxpy;3qoll!;Nc5(_)HHoiBfGj?UV%loJ$V?Ake z)ROAd;^Ja?AGO6FC|V>fFD{S|(OWRddk^Z7PKswqtl79P^}iGR!j*xCWTNZ3iv9x2 zFu)j5)i|LZAD}%zouIBqx=9z*5V4M^3u*_ts`(Sz3<}d)vL3JpdcY>sG0+QrWVO#(9n=hpe#jZsG=HFn**YTQn$qs*Eg5%l zgiN!ap!y4X0tds1C_v4S|nmOZZd%dvRawSjA7OWQfK1)F~)_NKq)eOVePvNOSeW%ht+jELvo(fb5y z1TyOMlT6QFy9dRxI`N7$vt3nDQ_8wxt+p6?-v|TkFE5w50Y_zR_<4!HmuFV~m!Sv1 zD#Zmh!VwwjxKisgI#=0qs@IToKul<$?KISsekxthjh3x(R*3&ahy!{Jw!|Ej>6jTZ z4)a8Mpk~B;-mrJ|I-(<$HKo)AeUEmMi@6SBU+9j<9f5(CvNw94vKdV8g>FwUhDc&x z!H$s6WDxp|`t8y%Kp8L{GYFE=TMZ1buZ;aTX6?XAyq?F4ina5vlmpZSo$Oc3f&`2jC|dbOHNIY!Ul1mCbS+A|f`Sh!b_Y@TT7P3DgA~##w26@P9K91`At6{)I z4!r4MEpNgmeADf8l^B7kU!ZIO*aOYoj>@^~F^{bOd7pXTt%`!=J^KySYRh#D&=z

?#9&%`b1Nt8g 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 Kv+=+B>%Rbf4|OL1 literal 339477 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

wFeuZ$xpi2k!td|fT zSb1gn+x)O9orR{B=Pi>~%zoPN(jTymLbL@E2>v zr8L5bAyK>9sthZWI4FeG=%NedT>yQ4012`aHL4q~^wME|gNSUMrt>xEw!7@Kqo)01 zk^SS_3CyL?-vNH@l>?~88!64+_jm;AA(s<5UDnV^K08jFjvQ>bSLNz^?m&l#mMfU0 zsZVJvVvIJtvehfZeTE{`W$>G5<+bGJ3d>MUndJu|ziZAHVts)u47!{d{J=jb#0H$X zvdg?aXU|5t7ZV>@L(1F7)qCr;G66fA&VTl01=~IN>*906cV{$aOYXlTAnnRVvEYG9 zqusA}n;u%OUlI(b<;j54GzKFX0YoLXcNto+}I2YZ^ zaWB_2Tc@I~WT=fuhs3XUQ2xs z&}+1R)iVDetJ(Cy{7z4CFn|i2`9b_R2#Y7EhfC43K|T1Sm9B)o_yiqtWBZ3IU4t@F zO|$1*1#vxpqv0%lw+(|J;Mz~OpU%PU)ApFHIn!|$caDpyX^WS7k)z$Yhyq5Joz;Wxq3rd=UF-q!ZSVF(?Q|WRNZ&H1!x_7yH}#G zt0Gi`<>;X`>80JcUPpoLl73HWCX5k~e8D(^-u$3e`ls>dNm9r=I&Q^8q}I!3_=pJka14wsY0_v{`30|NOEPp=1zmJ7Vg}x$g9* z&2J%~CVk$^Y@7$nkBGMxy$)sVC#A8QT*1Lo2D3vUrriKrW#fxF?>csRr9Q7q0qwOf z-Fcy7eQ*Y%EgFrRvKpB7OK&SP%_3}w`aPg zmpv&7*1U>APL@*ypvTgmxVMfHMVn2#$+&yp{W_+m@?!vbBZ(or--S;@g3QbOw4731 zU4nDy^jf{!WR|@`Xl+aMPDkyBzm@RE?Fi(2`13Kd@e0C+YAEu~xPP{@(GkUq;U{f4kO=L5CO(T(!|1*vL}5Lrml<_IIkCy9;1@`J7<6bvfE z^F4$@o|sYHXi-ne({$DAKOv9#uOFV58>+=m)Fp=pqXnv@_N`!0WFcfdGK=3oy@nFE zA+t;~xBN~8HQRTTQCljRP>mtj&02{x3kkIOT*WMji0vZgeu%Jp6v2@4Z>}6)r7C|a zD~_t0&jC&r&~7Fsvz%SHuI`DSsH`A4zu~G*5$_srgz$D)!fHGqy5WiYvrPwcg$YG; zaROAr4G;-R4Il54;P*j)eqmF zmqGB=9db=VcTWQG!o6?&RR8^S&vT$tFH=-&Ac&B6zaR{$@-gcH-S(+nM8fwW+;2Sr zE>$ydnXYmX&b_eGg}!UPZuCIWWHbV*ZYJ^=G`nzjtZ z-~;L2LwoAQ9CDbTacX(c`Z zx3&7Pvfz{kfr1()FII#-J}BviOybUqt0l?d!Zp=zZWNj~5Usak;aA-yXHU)2C5FL0 zW7beq!{L+J2xL~tB_q&uoiWb!R|P0 zl-H?2&E#4syW4KnI-K6WKbR?0k)^(17n}`u;!81{>>+}t5um2o%PNh7?rMkVyv&^P z5Z8&(vP%~-!S~HBpssS9AoC2Mq!^KTmTEF!E`oB&`XBTuA{tT^zvQ^qy)>7-!n%~} zwrv&P`V-xgtVZo6-Imc88V>M#X{#_+uty?VHbEC=;ruP|Q_P3d?Wcg3Hk0SnMNh*->^W<;5~8ckR~0Jy7w>a!RbAQ85JVj8g06W5PqY)6PK6?k+L-FxF|5Mz*IXtYA1 ztO(%wj|S8NSRukKdXKN-h!vp4P62O2fr=y#x2rYnhIRs`DSqQT%mtl&uTOO)zfEx^ z7r&beDv65f!JRfD@7LGsAHv{0)q41;o@XH;uW&SG}>pT1`7|~Qjye4xR%;v6bSO`{v=C%h0giU6s_@) zGx+?RJjoiqjHx9Jk4E|issxu-yrO`A^&7+U-QtCLGUH}em$F>bTg=-{r1BKSyx+ml zL)*WP6DvWo2u4SdA zgF*kE&7@!C7kgZ4MQu-M&n)p0D714=s0sZH5459;zGC7CTA{%zaSjhf!fqs?Xb#4I zFCkB|h}UG}p2WCH>c2>+gAdr0N#N%c_+B9#uoTdJahOz&jEAv;{ChpiHN+E`?3c5J z2YU#W^_Q01nJSyJ_tG`#Qy-bwU>72gh&P8=AS=k4{G z-)FP>%k9b?Mj0srlW~^*z=AWl=^J-r{%b{55 zq7Ghj39^MZ_z|YuGd=PF>_P3Ge6b) zTZk981Ca!9{p9MMbW(^Tw2Zk0O97xu9yN=zGa;;RAkX7p?g<1fT8SPX)?;`!cO*&^ zMp!~D>x-EcFzaJv)@0gUHv7US;1e0mkgiatwOi?zpYZbU~q9UcR@6ur=vnIo3I3BvCw%3Tp1L3y#K`kgJXkbF`)@@fVG1 znG=?$dCL9ct6Zhr77zLs^+LU#8Qp-eM)netgTH#R$;@YxLeha))$wqshd z9gRn@kdcQHz!ozE->+#crc&V8ae4Hk$26tNrZ$IfCUeq$JsV9ZCtT_YQsv0S4=zs{ z_!@1cXF7BbtPGMNms-Iq7m_appq%9&w&AmtItTIE$qmP`ZFS3xwBdu}9k;xo_(p|s z-0CJbxgUVSgT(i4Z^XaDd`ZMALvK1_z`i5-A5aGWa8AJ6y}hB)y^~I7;KMKq5ec@W zHiXLv@6gCG2T&apAGEyUl7X9nF|+xo*sV8GW6&;Ia0V!6OLVm|jzS4~0@2!B>B=^) z%1g6rUWxqu%=A0|MVfNk61fGP=4A}qKx8R?F|$~Ez+RZ|4Qir=VTuyXTm#Oc2z)Tn zT{8Pk_omosnf|%r((?6}WOEZNMUrPKH7U^fZ$51C7SNFa+zu&cxl@#!UFvIE|Ba-~ z`30Vtz6rX@tm}T{p)FYOk9bWDYI4|9js4X@vB97^Me8eBUd+^Vyd^|5L{)p zasPsWyijnzm^OZx?*!F*pJwm8XNg#`F_abh${*+eTiu5ntx&$_Zo;w52v@sPYtU^9 z^nnp>hOKg0%zr}srQ!Ycxvna!MBEpGKR%0hKI@*$wZmEHX9N)5^uW_VCuH2?b2~Jz zp>)iq3fIwgiJ>Iv{qwH~i?_Ir81T28d+<8>ZQ@7P0?uQ4uG&fren=V*@60zv-Z(nI zJEFjZV$O-M{Mg_B48)#~EKk=lv|Fsy9@P1Nwoh2}@FFUe!j zvRJNZ!N&NA(4K9mMRBFt1@C%QP4b1s8WZv*9h(T*@L-_-I_c|Ir-xgdEqB*e!mpk6 zB3D$x&yz+wH4*oyFoE#2wmzB_}udszVl8PCs1d-+~Nwn0TK*uw~mt zw=oTrJ~M>hn>hzXgY!62Z#Hv9KB)+TXiA{x4uiKMy;ylXZtZaImLFJz5!ZXxS-bj^ z)O18b%kC}RchHJ*PJ+6W>Q>J=rAp)-FFG|1nS(pZX{1+k%$(@?`fkGmyh8>Tf*cwD z0HrbhLAv}|LE-5B?Xyr{Z>k9gqaR$JmD%;Y@7YAra4nbSMzOY^&s2#RCqfOy5l*dq zt`94i{r5RNp|4BHME1=s1bOMKp;)dM884XnKL6=CzF#yug^nXT(Y8CA{TBjNeu3`ki>=b%?nR@AMJ<}-1kqm$kEiHecnan zaFvFY&pcF*-Lm|30zc(i42AZshNiLXX$fJ9x2R}lO1%f;nSO0$LenZ|w=rAEdCaq4 z08U$Ti2a@LTbVPL>AuvMy(ZAYnsVBr5MC-dsriR5SLVBig1st&-AZ>YptS82a?a$mYtv<-lPzO!MU_ zy!HDtJrVW`ymW?d?VB1CQ82a{lp|C6fNO71t2yZc`AZqizJ5x@a(vQ6VSP_Yf-vs$ zPu83-Zp}Y0>~Z}M;8e*@rN0D=`r#SZE8lY5kIDR80iXHtRJ;gC7ANA!o1N|$?(drr>G>!WO9*bmYF|z;U zZbpS)!#?8rzEB$;a6rhrX;!5>&PPR1`<1#4-8hOWiR(7Bgp1Wz)?F_?nM}4?oc(fy z=x(@NHoZ#Hfjxa^9R}o{72-}8ekDmN?-74X>sk!0cv-EV` zj87%|JvWYFoy;$aZe<5koLH+rl;$>T<{MR0E%;-7Nr=W_C&4MB{3403!tYKMN=KfX zomoSNYq|M;JKYWSZ^PnM&IJ3eh{c}x;u(GWXd{;s1A3{<;keUYLGEbKgQYVonrl|c zKkpDrnxn<~@u+h&ubzMK(_t#UJYXz$mnXPbAe*nUKC-Hv) zcw$JTki<-;l7s+EdrHldaAI(BP z#znqUrPSOtaX+7~JdQCq+JC_D&866Oz4~M2yN8!d+0~XP%FrR}bq~n~|6n%gwj#F-*)>z3sG8F5d<}zL9)9 z4aEzo{Ogsec2LK)YgohbB4lrHImTRtlf3o^>PVcX84ac}B~jDs(&B-0dR!`aIW8 zu^{e1pbGow%5ygxRo*s$*zvmir8Q=Lwr5W)4#mGefvOvLt@U^2!~5#vPLb5t zDsbN?yK3&M((&Ff1{Dy^yHCK6gamlG8|{1?=66?poe$LCgs+b_?H(REwI|Mwtn>Vy z6c`~Y{$7!gdvh^f8A>TC4pIqJh_W&gpkY$EkI`KZuaHAu@(tDZpmVp#YAbac0A|qq z$;3;p7dF}tH>nBuRUjI6VX4^ro*((&>8uNRrRHMjc z9@?wEQXC#+%Y^4n)0C=Si}BU?_rUWxE7q?JNa6!>%r;{b#1IqeG8dIXA~}Nl8Q=DO zM$B3Qe?|=PC#Qb_%k^V3%Pgym_eAC2+4hxPs3f_u3;L?*a*U-@)5F&aqTo4|Y)-(+ z)O6%?ol{@_QDlhS@@*VJTY;P!3rUd%d&|zZp@QVL_|xG0LGixq@|0eKl4yyN0J-kT zaluZRf)1FAQ9Z22aRzP_roSoBjI4k0-t_NON*vZmM|K=}j~eiIC*D?`QlR!Er*>-#)@4S6w7rsxP2v^l#GNsjDR?%pYq zY;{z&cBCxjLBLz3&Rck9&NSn9+lrJu82HZNP;a0E+F_cY%#~jPE=T^+ABYq7H`led zzr$&5kz{n`sOcjE@8Pdl9p#LAm7ppqgD>Z!3N+SLA)FlSXP}THy^kIB?0HCQbumtG z0v=ynPVjP{YSl_i8;P4ugWOP*9!68hjcZ?;y&Ja>mPw$h_a6&u5lcK83=jw>b&A$X70^@SaA$~ffJdOraK_gbl3j%G)4 z@Mq*OCBW5R(g5VW@e2_DUdp!$^`ytvuRPN)JL$_JJS5v7KixSVwNAChE)YZ`P^Sco zA>^ux@iHX^{K9kP3TgQs+7uizM-Sh=aojd)A21c}INCtKv)HiTt%|M$cy>p3M2^tj z=Hi{j*T61nN1O#-{QX}7?h=hNZrck@&oY!elct(v2GP7apSNmPG8^x(Z0zh^V_(2b zt$4I`uTj0>FT)X7V!PIJ-U#&uVRF{6N%Yx+!CF7R&W$HMR69R7Ih;b&YCe;sYEz_Z&vR#OzG?MK*> z?~fAXm`~6Y* zIj^@8-_b)^p@R9a2nn=i>zapb$R3!H6bbt#TO3k9^I@G?(Q^z*OFnyx(t>SVERfri ze`M>?Rl-sp>6g3kgAAF{3!UhZ(FTL-XK(=rA_!gtqJ^+8w(g}FA16XzT%MFrzk1)5 zqQ>)dUQc{5cE$9=!|oJE`YPJ(!gDXM^LT9w`MI->ncu9j3Y08KOn} zQo8oaUeAyqy>nAhHcR?qPBrNO_g0A6XPE4#yZ3@`yaR!h5|m9K)tkuM z7pT_=QNi)&*H`uTY>m4>iaRL8@%0FuJf{nwuxAoPVi@Qcm}$8pAJWo&GW2Z3_(c59 zkG(v}&^|hh033hyq%ZEp6NeQ*gEK4E?<4Kiop$(2N94P7>(o_2feifKTml0Ug|bFE z1;4+_D>q@&Y}Nj9cC_?^TP+dBC-`X(DcyF%aLsZ#c~`o5>856wDCxEi&8`)QS3R__9cGU;8sa@ap{2IyVZ`ZSl^R;83`*FWfS!$Wz4C;Nm0tEQSpA)%H; z*exVEbwe5n2y(J87q&W_jViyjA~e=B?0gQ1iQ52K6~9dIbDQ%eYaeH<|GT!Tn=0M_ zL+n6ZFGbQAx|wNzu(Ze<^{dCsx?NN;&7dB0njQs~{u3nzT2+y2THfselqU~?^C2m> zoMsJ?gHLWYvg^^Y#~mX2hMn4r?O%D1E`qEaTV0+cEswLm^Ll%#R9HkgVHFELiLJGE$Q-!^aGsb>ls`TBKY}c}RO3s^cv~hWHs;fz3neGxl2A&&B^79iPgs+p;$Z zHhLQf#*t;~ne+7IcH{Wbl`jHU-)?hp+_wgLV$Ey}&1(H+Rerf1@`6IO?~eV>CPJz0 zA*uHTrDR@GVNwC`^b8)%8+*4Vl}w06>QAbKL|TXwWjb=v{Yl&l$tH1H2s&hzKCgeA2bd{ zq7Uo1Wboo4)n^NuokLqBL(x*bSd~VXWf^1-SaKeme3s;8o&B!~4*t$n)MxtaeJJV=Xq z&uQHU;>9{(=#U9sg@tRW#f!{Wdlqv(Ajs6Uv>7NtRlM@~AJ=};nP9UBl(dyS{fga_ zTU>dt6bQJVcaZ3lYnHJZKo>Q1MUehoTDO9068}hmmFZ0LewqoR14G7~bb9?6t2BPV z{FfNvi!|f`9JIt`TSug%5BU|7Svc#&By_Po)Cpcc^h6c7bSw9-u#8*?BgGYg64~HiwCOG*sYE1bk)ru3V z{p3d;o*4d=rXiz7c}B=2v^0G5A{P1+f1zNkvbRl<{ybY_Xqx*FrY42iB~Bnc*!vRn z*~(nVh=o+L`)RY5#78Lxshnpk?NMb+r<#K$4K&B?NeOH3Qug-?7*0!}=eX1WjdI5d zk)AbZv;3_^NGcAd_{s@@D?g|Zi`jWnB+=x%H2V4H2vdhViQ^qU|Keaj85Ke``E&Hd zf71!&y)X`jODf+eH5`lDxM{8nh|Y|C!DDH=p(sicRw`1Cto=%pfg9hC4TO|;DM}N_ ztfuvAb3ZOAG+w5u;RiVXDIj{X_w*%G41wy0IgTfk@v}kl=7DsNXGlVZgSK7~di%Tb zS=JIw2GITI{N{(;3C_F;in;Q_0EeHf@~=ZV(oI`=2+gmkp@#+!qSx3C-8XCKaw=`K zoB*F6y-C{On}p69rmf9V2sgIC&d1-OJCuEqhkUQ9n}S;*COiDvTwXfE)h^FX8ck4^ zSc@b)en@w=G_6R7@riYHB*{=#JI%H(10j`fdjrXGWba}7?%3UNY%Ez2t@y$M(sfG@ zQOd2!S%w3ZO&=Qzzi+a?0qkEml^pRpuqd2p89J`GMhedd?C)?J4va{bfOmmvG#cOl zT+S}}ZLJp|2loK*kKlB_m?^foq##e9gd+Q^<-ZUu=Su_$0JW0$iOj7|7SlV=K} z7}F)h4mp0f%LDs6~Hd#G#pl3Mu!UZ$;y?@ANIa3g06XbzQdOp{*2*a zflQZ_0_A6=5d$Z~zHI7_@$+h`sE%#ccG5AgF_%i~+u?FS*PWCcJu5B%ujo2Yqmlx5){DGJpk4 zdJKZBz}WSG?PVvATU7PAD^`#4ND`vwg`v1;JTg2$4&7-c`kmR~!R{#1iT3Qx6g6W> zGupoY?)Uw8aGXxp-A>#yS1H3Y+;WO9x`4>}1}@P>w0HzTa9q6j(0btE9r4 z-rnhhPt@E{*Y0qA2RRdf5d24d>k4D*THmVu#4UWph1)h@%3S)-rX$S)!Z?ZO#x<~= zc3+6{u>5mWwH%ev$4f1vjp<$~oEiZilp5&b&&k#DJm59EE_5pbtGK40z%7o8KtXeb zIIx%{S7BC=j7OgrEQJ$< zj?dZHE2*XX$OR@6S)WoREB4^nvqdBaE|Gx8Rh;q_kCBP8)yw*TPAfy&=&Gw?C(+-cBhBE-nW{N(7vg(j3kn#9HJVFd^u499 zKXJES8)%r~zWz1Jp}ph=dnr>lpY?@03ir#Z_}YQV+odNbx^sRwE&+;J(mf8iSHvg* zph2~oj4D-y-5uM(8|=`wi<+~DIZnAVL^Q427QCEP@cvL4cFEL24x7ckOx_usdPAbYQb#tQi2a?3dGUCm%5f{D{aIKFd12eAis-?K=vtG#D~&;g0o3d*oD-8ay#{ z7zkj*ZpDk%gt6*I-2U^yiIeBf`hE%|)g|HHhMNQR)2qn+@7*^e{nY2DN8^-7a`}}6 z%DQQCZONFxq z9G!S5HwI3{?a-$K7+u*-NE#Zr-E z$B$b0{M=ne?xH7py5?5vJ1MK9t~(Kg+^%Vt?Zv#nBny%(e@w?rbpuY=9R$3G+_Qsk zL?VB9XUzG8?j9>Nc<8cb(#kA()>-m62&DaD=6YchkWN5aLG2uI{{#HqmjVDmXMUy8 zQjXs8nd|Qrc{<%P$hd;5HCdhK%CwZ=f9F0loE%&C33F?bM9FTn%g4;cXs>c+r=w{K$W?No9CS$ zWnRP<&9;gtk{Fz1-77v<`<)+ZS6}~L^P#2rLxHm?k|mlvj>K%q-)of87)r>QAcDx5 z&EVxpii&}p_|r#7(;&6q>i1@0vSZ=hWx_W#rw)v18tfy(WPi=lI^JMZrU87LYx8gqSr$F9dqhZ4?;_)-O5PqXBG3{xiocw6bnC)Xh_EFeYxz4#yo^4a#wDmTNZn_+v~;r9 z^Y>wz?vB>aWEs_-aOgbt67u!|$Z=QDXMh2c`vgp25|ilKt|FkvydF_#nPR1EC+$+xGX@C1$Z!j)?=pH7PI3#mV-F6vaW__NYouK#H z+mMtVT#U7|h`qCz`?NC!xdhp58NJ{V8~8T!r;c5<^^JB~qmxa?O);=t6VH8q`)(bn z?brfu!TWO>JP7UXjkY8o6u{cZn>FMUevsj{_y8pH; zQ277|FGd>jtR%+}bRIUH_;WgCaL4uA@jcFApoG?eAPsyaLmQefPNSjyyll*C8d%7# zt##bR%R`9G?*TEQ=zZ8hhdtOBX3O$OqO?9DvAKUZdyQel#^q!50Wq+6UAC~|f?`iD z0M$ctB@=(Nl-_dG6(iPhRA`vkCt;?kn?63r7is4?Qv@1DxdZnih|CDsp%4!VU0Gi+p;hf=-15%f1c>!wK3WtY|{9s z@~eXu8;mWuYRU?c%_=;J3-U+J^+%w!&u1f^Vd;zXAl3?la`&s3Beo>fUN5+~W<1$6 zYUyCUfi_r^CGArDZPjHQidvm}8QeWs`~mfAwX~_Hs%LJ>!nXrLa3M>6e`Vbn$_#rX zPpOrS>84G(8I`iHP1X9sK9Q`%%5$5l%n$Pj4mf;`UgApiV^|1Iv)RPJA*bpeAyb}x z`Im%Ur1eX9v&GKnQQGo2ue7R=xUAXr$2V?780<{2hz(ujTOf)!WX#6(M#7oY%h4;7 z>pwauPL8t~N_m3br7CZzSR@^Ux)A7p>Vs?9(n!*95F5KWY%0t9TIR$mvvD_mt&_wx z!-Xd1L!Ts~nOf6rr5QdL4!EQJBB?-;sYAn^2DzX4VfqtJ<)5zR(deIaKB>SeiY*?H zLdu&}%bOw16fexan+GmuM|M0SEHZbivVSH%C*v(V%yNz5kYdcK6M4p}z621BqFLJp z;pBZasj`C4u|kS~Y9m?76^cm95srsvN_cq!PEO!P-*WQ&ZY6PV3aI6mPmA3cKgRy> z1a+Y)6Ax%h(N}FsX@#RkZ@bja9Li^aKicqOh3s~tPM%E=d5S@DTZ(V5X;-Lh-GVmS zmSK@`tXu9rfv+9#u6fplz?TkXF>PZbnx;p(>5C?P&9m zP>lRV0ZJhU^GsfQVbYB8e?Mn5(;Tj?DE0VRg;-$!Qs25vHOEk_4FaqS%u%Idddo~r z3h=Kp+p_zb?emRpCR99)ig12;>W&U|#iE9|5(C-{&T%RU89uAv71PvG<4I-Co;#wxa}71THWy?im7PufN*F#0(12QsYue0c^T#1*2^^HAGs z1dVjnjXBpn8cG{7X|JG!)!qC;UTilnafUwa&|scO;}`;%l41aL|SQJ%s~X>8=5+X z46d`J5DLUdg1g0^D(&iK0oLZ8*8xjsQGOM|my3nH-$e|G88aQUbNsFsiuvLsBqS?O zXD42LjS@PWme3j^8et!Z033mJGibN>F)5oLAq_qcx(K6c5GV2G<4spDHp+3MP#f#& z1inVQHfNy1PmZGFW~6dEQ^1m&_=bExqxmoKrDNW8FO8xKKYMhYsz^w-Vz*M^`aMWm z5%ojs5>jA<(GULKo0HG-I`!Kxdp;X(PXAKC47p%Vq(ma8E}dg&;zz4U7daUp+g*H# zVXC5p`L<`9FRjf|a%qKP6CUeGIh3srk;8NHAwJ-B45i<#T#BCuGhiVT(a*$kAjF`z zAq20)LALy2cV>3yVMRItW_2o>4Dyt#%c!j1bj0jiFgtq45o~fdA)kH*{ni1Ipl{27 zjj?TGo|@yNH5Ti-#9FxpowqiF(xIzatK@eZ39E0iFD55FfJT>qZ;5m( zCOIsXF|5uy*_kv=no?EoXF%eeNy|!EPRf%S+m0!Eeu-l= zW7Sk?>DBS*`@HJIVDJ5Be15V5Cp>0vw%-)(v9e97#=F+#N#1n%o=#?lgBqgRc>~R% zkFQ!hY?Okkx4;EiDNH|ze6=1g7XPBT4UE1<-jig^Li@zR&Tl`wOjasItsI-x<-}k-L zR9Xa;=z`zxe& z0GFqJntpQ3-yW&ww0Ctb+ZU@r%Jw2!Iq1Eu(pUjN`1;OQV2`GAE^9e%E6#!SNDar( z6-(RlXtR!+p8ivY3=TRhCkV@*?khCYzJ(QeJc72e=Z*W@Z8jaAA>(+5A;a}|{y(`d zPE^)S%(ml?p1{U$%&v9bnyhjN4fA?OPCx8_5;}-IbTT~_N{7eJ<=_vxDX$kQ78UB| zZ|lSxl~iuU&~0-@vG?f|%4Uecf7J=o-fHqON+5Ll8C9f*sEaOw7AITi?v?e_gmWU2 z&$Mcu+2?c&#l1$uv!g~|RITmG9u@5>Nz`G`FMdS&YvCmx# z0iXd(05@KZPTSZ5ODgAF4U2OUnawF^T*zllCR~paiA^&>Qk8T+N)ZhTeo~8oCI)9K ziZM7iBf5*dB<{P^^)&k1e0ur3KS~^RG7s;Jys+Rh>z!bT@8Y<4^U}A`vk-sygoaSz z3lGKWYPy_Xe5jPBkI$r^?B?8i>c?f$zx z)vO!IJqCX129OY4QOrLd9WI{LwyJ-!qY)U+IwZ9!s$*l&QG_rRAe{;B^E~l665>nR zsljbGJr*}F;bE0bjnIc55zs-_vwZ`b~T_C5CN{2{d4Xq6zJ^1Mi!b}EU zDg~*ghb^4uA!Pyn2cQfEd3CQs6Pwn)y+=9A~@MZvZvxVa6UjW+b&LDkCE>aUGdVXwzx`4?@Wg zK+0c`bK2y#VyRvWVooD0Ujs$1%UOPVy`H?fRIH|hd>isTJ&h>A)8sqs_OO(E7_-t$ zMh#C57t*-Cr2el_ky}zaDByOe~lZ>SHr3TNi=Qc)HUWvH;G14ufrIJYTbgu9P<5Z(Y1af3Vo{(8o4OB#8Tl>1 z|Dg2dcg!O1p~#P>JmukGB-IKE?fJcd!W-h)yQV|jendLIgG8os9kSKyJn8t+iShoU zUbo*F8>u{Re7v5gAd8N*>(SP~27WpNOq7Ee)v<8|p%3MI-#RI?=a!790RUe7h#u5j z2A1V{acr_GOo5a)Q*RUXKmvXyhxRq=kn356T4d$uNafK{WWH(*K4>BP-T0l@c5CmF zlsBLnIDZ-}aZK+K7mbQ+7tFqsE~(WpwtFYqIt%;4P(F>FyTKK<0svIyR!AYkdd%M*A0B&Js-qj3 z_V$)!a>k%MJdCI`j#MVascic9zT|(*$&t&eF3UQ1_L7xfR_;KctcVhNPLkM5i=)N0 zGR&fF)v5<&TUv53?_uJFnnwNau5r8xbvB;wC2OR*;2WZ{l%11&V%;n){ zG7riMOX_tL2ZxZ!=X4l)mwLYV>aFMeX4yM`SiKE7yPXoK%_W=uV3g1gi({2nj*eA3 zgr7#o+I1-Ot(vp*13+cG*jPF7gCF{Vy_u$|KXE={=k;rg(~Tqe>2wQHH6WBip|1~Z z{c8}#j>bnT=hqT^ea!Yo%WN+RPk>LPz`kCaPm>-yob@ zeow&<0`v>#9vdXK3px*~_smN?uL02Mdmz1{6o%Im=&>Mr@b%awgf$i;`-kC&DTLX~ zH$CYtwb~e$UB1u3)LX3Dzl*f^zhbfe=8=&~Kg$3eYu2D`)hc*lI4>U^ zC#Y9rgqifH5aP?#dT4EC>*Vk37+`mLl9*LcA(ZDWB-%j;vRQPlTMH4SF*Z`^tJRVZ zTjM?oLA|!L1I{kZjy~mY#J)#-2EW|(=%09jdR?xgeP>*cFg7r9kbCZj9EgZXUXW0* zsg|#+TE{K(lFwTsY;#~6WQFCk8FXj|j*k^EV{C8~U`95dzS`0uTm^SDgod3eibTxjW6}&>`~YF z|Du?r;T+CO66<@Z)Z~QJVj-16=c*p$Iy+G;*27A<{u-;@mpn>NLFsn*qhDSU{R{;c z;R)-1jnRGhi5I9h7CLgn^>P)Zk@01zj|Ukx6Pt%I**s`|gE(g`r{!f>m-|ns1bxEc zLO|rECMhs;5~GO&)8?XW_1=}he`34T?}5?x zi&%z_jI{i6t)~BdWVrnBTHVS*cNe#VOi+^&U#Z11jhFm!mx#%4e}W4@(9TDX@GDm{;9)N}dK* z?U+-CYOWuuI2pCdDL#`tkw6bevm=1r)Xe3il+ERk34dqozz~gtb`7bgrMGhL%Ha%r~gxaq2;UF+Af2N=H^QhFUu+t=#ETv933`?O(X+uM{L;3R+6;VUh>1xfiX4kiCP zr~OSCI6+LkG5JC z0qcNDv4S8KI0*TTN+gSF?Bg@?HcrB_JSEYtcf#G7o78Pn7c|H9JUVm`P(g^UHLF2h zh|$r?rYOee?$;;1FiEWzrn+-UbjP_Zs9P@~sXm;}rhl#^VSHd1mT3vw!vcCZ1pOSC z@AU62%Q;8BAi2sj^oUpnZ6&W4dX9~|vyK1)brrVVw}-CSd||hha-*`?4`PD}&xDQb zQ4>a`xzI^&+T%i?v0Vw%t{;5#AdYKMTM|X>*+OnmDD}Y_r^fyEEr6|HsgRWK2S9%5 z{=pYJ#=B~jczwMV54H7l)iP~)fCM!sw-}8rnDdo!s$4`!qA1JEoqj5PFO>SRCm5#l z)025$e`XIh{Av(cRL?e!0zVy&2|;C^_0iwh4s$^Iyz(%Eg(uL_-%BI=hP-km>4nUE z(yx_+v>g7gxL9;l*owmiXSX6L-8JM%_fP43{gQ&wlAT2fcpv{h_! zQ8|jdz+;GzK^*9$Zk2EbVG1B=r_me5CckLO z%MIsV0g>J^DT9i(!;{V{#o;%t!?T6te~xDt0I}Kbc)1k77cc2~?qaP>8 zY7wRu$jfSxnv=#iy2b)Fmg&@d@@P+*VmdRHtH-wzyLz^E@V<^&4S>sB4Y)iJvkW4i zikTELc7$u8V&n26pNw)nWUh*CvMxhi$!=6a&t-HOveqGLp@)ne8YD6&qnVfV@J3iO4cpWd+;{>kMVAL>BYq2I}8kx(@zD_T~75cN$1y@9;C*v zg@f1#;eD7v&js@!oPD43=s!>FejvJ1ZK8CIDPzhQPZ!Wpj8I8Qj%Aj*;@zmEe3wm% z5cN(`3nt3QT%#@;$#wDO`-e6$dp`xx!OTw~;3`%#cjuAW3jlo}^=km#VDtDNUv$zf zkGgS(Y~-6qwgP0_2p;HIja;pcNqI^Us-fh%%u#o|3+0sWa!C=Q-XUs1(2ys^Y)zJ& z%aKZfGXoW0bLRDu@Gb%p!O7nRX8)Ir%)8jzeAs%WcqagKLI&R=qQ^1ZKe%A2_I$bY+sFBR7YA@P)z5LtpI5^a!`7E zDM2kDuB+*MTFL9s_D5a?IPDqL z_9Y_vb1=WJ4XfWZO4|W(*n6Qs_FhQJ!U5+1;@_4Af%4n3&p z-4DM4^`INlMz3NaKgXaSI(E+|a2>L52CX#vKyZ(A!utgnx06er2w?p5Kb*5Hy1n_4 z*Mk8Mq~0iq-VH(>%x?_E*q05bI1%d)i@ykaAgedSF+Yoi{2CY!FuSJ$xNqC<&sdf+ ztz3qG)S_u?Wc?2eg=VAo0fMA31Y#LqyR8tDQV-<|% z(&(&|k$8l$blbAfcT~zS9$|Eu>GyYb*)wn2eh#ttE&+8(`iTJUT#Bc^t?k6Uzd0A1 z9(VKOrIMc{;8aLlQ4hsit~qVfEhp?9l132>g{TD*y<-*Vz#x(tfDF3JBZ#~ZR!F3h z2#NAg4N~y6L)}ZmDhFwa)0J9!)nMs=2=oMkeHlRiB~n}A%mGeS^$-Al1%dvZ3ICJi z=ygMFDV9c|n9d*<)i9epvCM!c|m;egOpF`g~}6r+D^1T{YmM*`_2LgabS!bi5QQA-oZcuoD(VI@P0 z)WP}@20f(_)cn*8K6O8YGC-_CXb)5Jl*-uI)q_H<3TXk~)lf|30hyqGWEizzraVUY z$ka7zDFQhkrBn*pD1w!YM5It}%A-&xtz0cuo>{+l<~+bb24H{B7^JhkvL0UOY4n3M z0}`HVMEdoNft3U+8Nv}HYd8u(Y~e_N$zW;d9fT7{o?ckM2{!vnPZYv?x>WR;RMuRQ z)Y+v{hZp;BOpjpqnVWIq)wez?(ez29-MSzp@29-~W%g*$krKjkBa}5uDAq6{1wsM` zf^rNZz(RtFAeu`i`_U(1 zbK&k!YVBSx0`&vx%=|*RL=Zb@>0>^5q+^H{jDEKZ$EHf-!9B|1zUzg)^ zr6+fJ9{tsrZvR=gw;O(@b+=Xrf=QuL+yf=tGmWEfB--uq+x^dRI*6q+2g_q)Br*-b z37lw_ivdeB%hhO41kWV^GmP{gEWknokWg+8{ZQke&w~1ahNHRUVOXJN@R?N}2QW>@ zlfY1#tkMJJyt>>8+PiLFrg5rqHUqG$XBQmzpufETB-GpgmC1i9!P%)v#_8^uCa$I* zer)>9e~{Cg#9(0Oem_^pR?=zlY-jn`nf&~RDi%U9-UpR7> zIuj|$He2MB%#*T-$(7v+8Rx=8WNm;jymv%6WBs;{^v51`{poMI{j8rs=Vq?ENA+Eh zMCp30emFW*zNoFIL#GQFOYAUhJ$XswIk+yGn^v5o(fwmVQjbvR%-$O+etE>HD>KC( z!&~#BL)Ldx-UUG@#Mb-%=y3Tl+4g*#@5u4o@*HNlmP$WM%!eT);C@}|i2nZWH5+c; zJa7|t4NMu=8Owk~orqJ)FGU?2bCKK%kjIeT)C$9a-Di&U2QxhZwOS3#1QmGK3J=#p z9^U?PTfHBBo)*K!{0o!Ver$ZS+MUXz(caeqA%#Cihs;tpW?`G8P-GBdEal8g)K>d&ptRb0D7s>Vl+1dv6DZ_Kcu7 zT04@uD`43EBhTk3@)se>Or=>Fl`^rZ1S{H zt^+&c66tb&IrIN9oX$X{ zoWM_|AO(I}s`=$_^qquDqC;zlgV8WbVUBw1{K6!0A0Hj9ccrsAbo8}>#6%;U?M|BG z|NPekLaiEsA>oJq4N~%TZjOhCV+jJSGsg5l`jB2@qtWbs=?+bvh4}!aBsy1jV{rE{ z#>V4q9UZ}^QnL24Wb~GMkzEguqDAZdFSZY&suGYCzX(EaPo)~Ii4%(;^nn99-r~!( zboI3~d=`+0(H+KgS`gdI9sC&6f}2j7`b;H*!E6`UskR_-TLFX(CJ(KT))sMO5QJ)& zz?X$0KIG0nY9iFmI~6@O_xw1v9~&L1ccpR}boRA358Eug{EiuwQXPKiK??l1Qlb)a z!?VigSb&+fXzeo6_aT-^riDL%R1#hNov@BDKAxPPIPYWd)T+3)XQA^fb0VY~@>Ja6 zdGe1!O4KXyRHt}Iec*+O-Ab0)V`OpSol{4ICk?=LTL;kL_D~qvUeEGr3tO0D6HzSz z5#V|9W?$&LJdqp{A6t6>e=My-*B|bBmNs$QiPN_c#}<)cOb4X9Ox8nnEXJ^@#H^JV0gYl&*~1u38PffPq&6X#8S2u>tlz+ zG0r~%Ls4f!QeGB>9_rQjp?O@G2xRG0FQNW6?2*5D++CADO&WkyLI`6U_%W>`N9(5g z|8#{N``7hqj3DqJl)7@nbXS68@y;x6_bvQ!#`)=cpP0n_$+6LBRhUhotFHht+4(2_ z^FcBkjMizYl?Xx*lejg@F^;Wkz*&bl((nUShm^lh$vUXxaaauUwb!F-IKpUq z`*}KcpBx*luk!*AUA+^Xe>$dyz%%7J@c)4{vwa#q|7zt3Vaj7E=_hf8>RodjTGGx# zVpN;8ywN#^7pOV%I&^s!&!>S@CO}tT0p(IG>s9mDPSYhhS(Z_K|Dx&w00dbG;vLEp z_cH@JneHn4NR{ho^8tua$VACW`PqP}I9vh3dkmsYjza1pyocT7Yav~kmem~fO)sV;0>w1&|0zOoz3I z-%-?sKY#c&pU0RhFRD&_-y)xh$AuJkk@OJ74inyVTa#z0%5~KF2y*Ila-!|B4Owiv zynD(3>|S>-HdXExN>jJAIBBXOOgJK#dU74B=^%k9a)6LfO57QE7*LCJfHqVqfk~{@ zMtppHJUN>o(X*-mF{ASzEDt8rrz&qc4t54H(})2CkU+JnA%uYP?87NPJq`Y}=u`ND9e;Tb~tX_wb+-?m%R4myiB%0B)IuGf4(>ncZ z`HE?2Vj7K@m1a7x={&6iDisYs6o{rjH4ayv zrQrh-Xz$J;Ootd7i&iH_TuPbr88qtP2ZfgEB`XFY6@!J?u9S3%c1>q0^ULFws9YrhBkokRE0o0&|(AG zXCiRUkVwR9qMCVKxuj)hUps=0(CtCu^sb-oX=L$ShKP2JEo1+ z61+go{sdkjAE6|=``cj*P%7$+66e2PNaV+()||2k!H~qGLdu%80&a5m)kEvUAf=4h zBphW+VPga({`k0$;w#%y@Ddc1#i5_Tcrb$iYaFbTkV*|hiajJ3HUJuXP^;viis3V( z81EPxH>tMn95RJ)xt9572LsiLffoiKDSoBL5S^XO?bf@j+EJ2idE>+y%L2+*i^%LK zfB`R1=0k_6v7j zhMP{TK&-y~ukfa;wu>Nkox;-Ehp1+tH3LMDlJ-fC#wFr;>50=At@oiVRXs~B{6o6gtyKw(}F9wL=tJ1fd#{u$LnM?n}=-1W?978r$hCcQdI2;xMjIFc4-uboFLX zEE*Nn-5XpaUUJbN)}yG4^WGYW7y%`*k{mGz59RnF(s6$f+suwZ&<>x zT4xMW$`cQ|39*i@5UGrZvC(9;(e$qwQQk7>KV?pOM+8TL8N>}w&quoiM-L2{R|&0U zs6dMV%8>_YZ0ILuH6X${bu$svd}bn+ti>Ny{sdzHC}Or#yM{L|@Lxt>b0mQjx^vN^x*q_`r3BD!*0=FKg(X#_If zkQgI8Pk@M;K4zyIuvX=1rHqGKkF(`LAi?PB%V6)$GRBJTthSEugVJ|@IT+c|p77vG z)532$=CH)1Cqtz#TB1q)ET&GETR*MJGYMZ=?q{Y{qEu07=|MT07LHakglLRmXP!x( z%wTeSI}go*g<6^XwIxU?8G?pLIJjAS0Q{f66K5o+V^6Z~iAl_FEspD;qdS9C)^Fr+ zNb*nre_+MVcis3FMF!RqlrQfSWNu*r0CP_O-rrfruFHFH!o!Bv8VjT{9vHF_1O$wk z_1~&I6En^8)e+6}+gv&U8tc_FbkaXFU@7S)B18W+;o*e&RA?K^p2+@AdJOw^p*`#44ug z%LbU`|6GMzh~{waU4H(|fUy$FgAvY-G=7@7511iwj@|+(>ziZae_&+X^rUhj3hm(> z>OYh+E)oP(Yk=^4C?&4#OYa;QsdoTqpYxXVfW+1d?)R&;^lI%qNKb($MgWH^&!XyR zF*-Szjsf^7iS9mNU|(HG&wpK-#2q&md;at6?49V!OdV&5v=1rCw~hkG0uU3+p7Y7F z4E1#c^)nZk0AkliOt};JG7?{Z=T0Gv%n^(3hvo`EqwzZ?2qhCCxiZ@sfIZs5g~%uD zzjwUo&Jt3fyEoMwP97b(odaq$2S1cdihlP%@g!I9+84M_!MHGES@baj%9FEnhQ-OT zy!7*cfn454TSp3`<1U*d^xiY``_E6%g-A@B&-NtP6KMuQ5(165r>)9yxbhxF{mhkv zLzkCuVL+ZHgmoDi#@tSB`U${?5*W;l4*}XjRqX*U|HDxo>(zaPSiGiI#dG4A(c2q9 z$t9elI0U)1W+d7n2*famuWrS4nY9AWiM+Gu0uhv&ZEj?7ax5?XLcACqogPx5z*y0( zO`QCo@bucT+SJKG;T)v31?P|=K~1CGsvL(a@6puHTvL1iIP%YPFF;MY19%bx%`&o1?1}lj ze3tLwZj!vCmB9!*zyh5@ppY+!eKz3lBpxL^zpmz#XL=c1(E}~A-dmCfKz5B!wL$#^ z=ftC}_179-&aaY z9eMJWkuJJLT5#e4vbj;h3cv|~i4jJG#A661Bt9dE3Dl%v0z3^E1qcTy3raljjB5sz zX$GDE^V-gnqPY^sdBXDAOpLuW2fMp0a3fb{YU6K3G3<(a%aVk319YM=QWHjC?ss z)aG4C#`<^fd-QitS=LdN|p0{j3I|5Ksl5C8U}6n*SraZCKA0}^j``4=OnbU>njR1Ea|xWxNchpQNL zIs^NeaBHip+AKXVC#xJ02sBVWX&6^Mis{p5#)yNtce zrT~KE@Y9``dNM8~&+jbocOL@(>haOnB&W_`l5b@4|2bj%!sN2lp6o?>qZ0%Nejto3 zZaBT2KC>>KwOm>?`hll`N(PX&+2(^rTbp?L<|+&5r%5wb01Bl>J3g?ybEcOY?PlI| z(HK<%Gvz6i8|^IB?8|mqxq_rI;=IyYtlkaK*Iry&?Ld82Kq!kz53Cavz|^=lYT7W? zO$o--$Utx-O?wT6(aiUb8R;vDzY}0pL9ahTUnF8JlzR*V_rL*+vR>kYW`R84+Dkh?NNwWm9x>O%XtZ|i0FclN?Blt0ca z{?>)=BjvUDs?wwmMV82S|TWaLF%gLDCAS*JN1`45E;3*!BQ++~baZF#=-4%=H@BklwI z%)AC5H$>>#uwCpK?&%#LH7FFsb5`vWkKx0RXU6vf>V7HG7cCDnLnw}k+xHJzWHRDq z$OfZPgw^GumHnQ4eQt>A2c8Fw4 zCCJI(DYG!2{C(m(A8_9+=_`ppaidcuv4L?Um;_-&BJK`eS*f{a*6S9%-F_%YoXLm4 ze>wEP7N}MkK>#ZSU)PH&HhS}SegF_eDAw`;GrH?Bqg~J@Vln3t@P*`=O+H?R^u_82 z3Db?rRs+mP>!m~SYJs?0U$E-y+QH<%S&_p zzR-Oug+HjFQ0IhKv>8b~^oXR6H;s>5)z{-8l@eGE{TvD(0$?;lYao{wqgLTIVOu-j znph7K2%SSaGa7pUmO$=F`sGevgq{gNSC>My?l3m)GD;ExpCH7-EA30xu2!&q0HlM& zri8RMAa?18qK4w;DGXm}Ha%CMKB_N8qu~en7U9#ON$hLGV z6M-Qz&Y=Ks;~4NU3I-qru&UQXk~kEL7GX$7H}=U20t2Z;s+5A0DFy|TSXDMq@UW2ykGZnf|6yaTgoISi9B(BxaoQTMqew*7-09wa7t9KzO+IoQtk3 zU3=v@K+=K>V+(*e=Nx5;2&5X5LoL<&JaQiV!%|%zg07~~FatrF(6`FN*qBAWT{b7e zcu{N#{xtsScen|fFv3_sFpy^nXPZB zt`AXHGiVt3Hi2A0G*9y$P@jieFD=t7hkg#wRjYC~jJ+?M3k1Ll#PT8i3P6C6fVH5p zaVygqfkN9Ng902OI0qy#!}mpn1>Ht!5&o?hV9RaRaUhzbo`(t^N@ZOT1OQG3+6KxI ze1QDLzUR(AXlw1h!{M_OI+)Ct8WUoriiISge~k~CW3p(uo)^vukl+Ga=Lw0K{y&yb&Xs^8SuZOAi6d*uhD_lh~fM^LLwVHL z(T2m5lMbMtaX%gKWa8P=Cm0<#4>@r?mp-S{A5Oh2C!dLjQ%mJttbTZYd8f-cy^aWg zD*zzwiAICr~Vt66g1$;}FU%{qG zw)8mp$H%qdvA+S@khEK7go>6#&V|;bd6u--l73%$!>|6q@CfC$S96 zfbwb3d14nkV1f80lW6x7Jm;JNQ5;F<9rM&4fFq!j=`_=a#e5+4q(U3%1D_ADJRq=nr4=K4@_U|b*u8vmgk~r zmO&mOpq?;@0O`>#DR^WtBR0<{2q@2i^M(PT2rQZ{;c&})h%^UY&q=?Cx}L62Zc&Cs z)3hiLrq}Hu=6hIj&POBQoPtwKu%OxBCuVD3yvXl|LNn)k6^PIh>JrcrG7-o!0NFhAKU?gB<=h%0%b@hHjP(wZ;<&N1S|!Ow|=1>Zx;0jhOjJQxU~z_Cm*04RV3 zCY?_%Y8S~;>0za{hhtTq+3VL?Nr@tcWEs$PkyKQ?>iKlh4Njh^pzt2LOh9p#4rp1>C+$y49Go+BHw{SYECLn-zC=4`{y#~YB}4(Lq(p&(liZ6A{?|}Az~*`$8oG^#0diekP>@5 z;fg{m&Hy+N7zix0X9XHQ5LVJ~_c)F;>e9Np5Dp1|*3Oe2$5BI+Fr);epq(%H>%mBQ zi<`4iaPZ&)20RdspN@Nog9%mRiMk?o5i#8dqB}5ku59|$5Y3Txz_x=KG*}`&bNxpP zJX_6oK6#Hcp95){bZo72t5a#w1%dlM{h?L3AZ~H}uL)@hf)Plt3IeJ@(EW`;!F>6) zl)jSnd93p}@VeFik_q=RajcvWB^LBw1p0~-4L|%&G`-If0B)=gOt|27)ZjuBzk@){ z_fbdGpgBxFOpWL#v+@B=x&)Wg+#N2n8JAr6jymUfk{iyu~pkcCLI|NT2zV$<42ar_b5=EJ~mA@L8$ySkZ9v zy;wc~H{F3#ldi>jbO3{`XWXc=O6+ljy^dT%s%CgEuz_z9s)T74u92OYycx(ORf<)} zMo6TSD#c#FRw$U}tmESN1Z;$w;zO$8x@iGEx~UvAD`WBU2W+H5I-V&%0Px}PY06J6 z@R=>IYLMoMdm$uL7+(l`K+ZvI<8Ud`D}%PrkQ$}yf@4+&7#j)`OKnEhC!%fs?5fRfOOoV zJgxANKD1JN*zz36XPP|bF!;oQg0R!>J+QuD5$b3v9nBbnhFER8NApp2F@c!LG{eUWM-Z+tlvoT6m>?FS z0YSLM(-3nrTF%n(JW@2$5{zih>|1KYCh!2yG|Dw`EgW1$y7g?i6X2p^E*;9`eQX&7 zDA#ZRD${kZBaDRo=8GywJV2Q#8Ct(?>?JVr=;%CxfN;%v zvDDJ_UCxnmwW3PJ#cbKQy_000ZLhvPJhpkZok;&KFX4u+d+`?gsx3tU^~gn_GB`By6GOyWoh z5_lPiHqtbo$&G6wali!R)ClzG)6gW<%9CvY8g`RrV#1)!a!p`kK*do@>9iQ{)FMe1 z;RkdwcLoB3uoy91l~1ECoB}~KXTFQLo(fDlw;rZRa-8O{X{NWVMb{TG^Im4YNjZ}! zUu&C$VUa*Zo@jDYnb2&R9U#aGp;^hY%}R3s!JK6w%M4Zk3ofQbO&cNR;J*MEjpM%( zjrKKfzKgk@k+za`ehkqZbWiKogc1Ye5XOjSe7oOik4sEE)Iu)DaTJgko)}M*pOzHt zZGpFF9!vlWK!ayG0y&O{B8H8^_?pq(PJHPvV-TYPVDF+_l^(|t12Z5b!2_z#=u8la z!lHRN0uo7{b%!!^IF4fp4D6GR%YWE-E-S$?1lyV;wXg9)*ot4&SuoeD%5gr6<}-to z2-YC$N`*YA&fkNoye4 zMpmfZ4AenLAC{0yf#ZCpZXt%F#w&m$#05iO+KHPl3>Tkw)9C|a+QzAsgkzw-9t3<6 zV(gJ@BQ}6i)Wbg0JH>zIerrO zAq&C?fB`E>I}p?zt9-ouBWv83{<1V`1$GO@wmEK`x78fz3V8R)tM1xe6$zWdk+ntFIP+t0-Os-hWn_`*h`y8TP1ue4u2tulo40s8VKva!K= z+ONnHYBUwZ-`&?Ro|W3YY$EzZccvf@W$!KborPlg3N=_$KcJUD?We89H30(Y^ z+J^uDDmayjF>z*OHlRUrPN#lqsw4YO`=J&ZQHS!lFWUQe*AH{j6BRG=&W)u!>ri3X zC{J1FRncX;Gq1MNQ$;<)kLl{(?d_cD(9bS3B6vQe4xH1LqyE;(sgDlVT$LzLTp%Uw z$LUBWwaM0g%$ClZ?Pr?gR0a{ADz+v=j+Zk^>~snFX-qyUM^Q$f7v+UI>e|FKLA((k zfKSU)nZVmWu5v@bF>oHF9#(zT@q9c@ENrOok|@uu=+vma@8vj>oh|84?=<}2)Wt5a zgPqox#}Q7PsL!MD^4{%C-aQ&Stt@*f-+g+2+;jGF-HG_hB>zuVUTb~p)ejTUi6|xz ztblX06;picq~=gSYZOEy6iv~c_dsn%HNsU4_S@tPYiOyJnQ!Wia{TLA}uNQhd;T$334Zo5zf@KQHeV)Wj^oHy|Fq zQ!T`zIa}ktfB=31zG4M+wz9mq_7z1<%tsh!c+v*?+@c|kURvqx^5-rF;C)xNa_e!g z#d&GB^|%ttZNScf$mp14m%-LV*51NtmKyH5&=m zHzJ9L3la@eDCViqWKs~T+43Ybjp7resF{FI4hiCbIFpbar@q!pr(B*Xg^~ugBEtl7 zwhV>zw%h#TR{xJsj)^nc=8xugt^sYKAWB)=Osb0*C>wWKsBTBL7@8!os7d$GLnejc zF*;{AIip;xo`p;#Oox85#Xvl3wU{4iKUK+T!K9igPeL=oCsPF3D3Dd#FvX1$A*)e;Yi)P3~@Mt zenQy3ybArK(A!aad0|lSEtIoLd*6tDCX#21Ar405*^Q<=TCW{K;*U==mQNBuS3P`I zRCah6k54&U$->;%p|lJMegXrFl$K#3NGkQ6tUO4de?0nhL_fWT9ZUC=$9YN|irm%Z zDCL~pyi)aD*Y253TGp-Y+@tX3*ZO$QW%^r#BZ64kgA^~yRK|P0MWYPjS@2Ud4v~q< zy^-EV>Q|glM!{H7>#H~eK|;kF6(Hl$SP#OuGGs~p@o9GQnS`cpK54~r#$jdm)}8fr zmG67#p~muE^fPj;-Q`gM5z($VeZR!KjgWuxhxpQ8J(bjC0Dg2rh*3I{RDWZYL$Y}} zd$IF2Ccb*R=*L6S;AMF{E1FKAA1|%!&^)dBskD!(}_v_LD0+k?hSD^_mQNi-hKbn_Vvtf;!a z)1V&&jG%G1TiiEnS-RTaPr8JoZ}VBdwt7eYaG(T+$oA?`*XE@4;8mG(wT);G{iKy+ z?EJNtN~NL9mVRoGXBV0=_43ooF)5#k>OKWNJM}X{zejziQa<_+k0XzOLAfvWINx^~ zCI0xs#&He6pWPnugEwc@Xu7qv-+R%wvIf*2o6%<1>^7tEO1qWs636uN=S~_K%j;zx zqyOm`-Z~Dync%Z~AjhQjt+l*r{RqA%M3KV@E4REK^X}8cedJ22#^4$yizMM7y=khX zsjhz6^**_NUe@8<(9dM@)N4v3UXJv3{!NJs0@QkbYFRIm6vSDm_7L8Oo2(W5WC}#cY{R zefsvu`udbJ+`re@#U`c=st^VO4pL>ASSffl?(g-TkGFHvHxgXHcHbA0qWSYK6B>Zie;V@1Fa8l2w=E91T@AytU8#K;K_D0bmuiPoU92_6@jdan z9?Ay^2DX_1qF8B0120&VlYrYir&~(iB7N`G6Td7bU00foQZk7S7DIh7jO7UfCycxF zYGn8^x`JsZCZb`IbH@&8cB85Lx=hS-QhBK3y3?c|&l5Z&*hJeTWw|6gRZEMAGE}BL zJlW!fVxvLz+!%4^yMCJO=jBf|JQIg{f4-dd+p(K{kAq1Kz~5gQ@P#wIG?T>7C869B zCL9ZRqZi#N?-=LD*g8x`!$jxq<^Y4;eph*2Ciq^nJXM@4HD0S8{fG}<7Scp>IQEk| z;(;{;HEi=jDVLmUv0B-4a3ScY*?xAGX&i8Sl5x*Ie8AG=iub_!wOtdoiAfE>OKVDm z*2Bkjm$Ts=#>rcaa?n_s@p_TEm*2IV%M6`6mAcgG?x|NlVQ45?=R0M8o7T~PH(-Qq zUPcBJ(UwHDl5T8)=x1-&n$C0QihdNf#i8CVxa|jb_Uv`4c&|yKA3D0o+g|+lvh(zD zYq-1V44fT^KsF9c7S(izZ7p?FA(o^|8 z;N@jx;|bb8g)zp_GTF7Np_z&dvn`Jw3I-vyy4+b^;;i=8a{f7&#$5O(S=8q#GD3f1 zSvA@RTmbr+OtyvIeiTYcpf@5sSIqhL-Pe^F&h1^`st1vNl29mVUvGhX#py%7leIhl z9MALGD2qOcH+M=j^~x}d@_2zD9;C6hi)BBP@=VQ4LJ%WQ23d)Qhi%5HVn+5InD6@8 zt8B9+&vffY!5JQQp5C!&DDI6ysp{c}DtrK=_^TT&+dBd)o<1A<{9K_p1(h^W2RtK$ zfe^*oqK-qfwwxe9WjfJ#Z1h9fQMO9lj0l|fP$5n|{gr{Iw=Hc;|K_^tw~nsb05}7I zE0K?jy&C9ksnLg&N>60$!35tYD;uwz2Jl>H@`!<4#t_F&)afhZ>|F&|6-ygl6vgiD zdkySXKnX!aLJ2`Yx{)p^X%LX^ZWK|ZENrl@-HKgEoWtoPB=-LnIrl$uDf@Z_p6{8R z{^tGOnVp%P-IHz4vU^lHBffKn%k#5Urjr!%f5Aa_4SQQ7?OvI#F*~}2hPbrA1iJpXB`NtGLYZf z|N6C~v+3;k$M(s&&2Nk}w}fdN(zwYVsA@-1X)RDlKXhMZQADPZ!@!rrpAas3ye@pV zum1_@rbCOiEp48@J*K*1i#&eWj(q%1cU&l8^Wn^-CdQWS>(Ywzr?{rlirJ@gte!b; z{v%&ZD09N&bDGUbYVnF8?005sv<^#b9bO#tA#1~d=vOgw%GU&ySDQ^YbQz9BIVPn} zUMdxSJpJIMc_!0`%(XZrT1*K_AF)iRiIH3%a_BWO&cQcB>Ue#E+lt*OYhIOGimnQr zHOhTtw#xd@n^W#Rp`<(gaq!wI{U?_4Dhs3vCy!b^Qs2KxS;6MUsr~E6ZW2Cw^KjB; z^4Tr@Y+6n*&Y!HZ-1*2F(Js%fsOX1A4j!&VVyLpl58f?TAbfMc^E{QQkw!bWph#Rrle%io#cIjwHq!7I7e!bM{ac0*i)&f<3rOcaKGDHGFOu@mwxIm<-7f!#E0q3^3?k9q$%a) z#XFmt83!lw6z7rNMx`+>j~u=nK~6_sTX9c)!pM9?d^hi$K1zHCLUKEU0o_zjvJ?wVprpwFuvuQSfhXInbgZ$w=Al1qHSmj zmSdhr=~>hBysJ z!j4*o)=C?Pc?a9Sxi+M^(!a&8puaG2kHDmgU9s+SFYJFldFPyIkxG;Bve(DoJ{{M5?dA&fpD&XSDGvz0nRUW`d!<#((&;!L-%bm1Q(duf448vZ0V3Az) zB(3j_KZgrUGc2}@T8E2GNgTL08^5HqdYxGLR@7Z*rf!Q?<+>-srxVXt=8iVYG@G|I zV_dbH{J|9#+GETAr1>wO9XtD^blm0Rch^QO9`hppmYle%HJfp%&L?^En5|o8tGI~A z-deTRLwLyfDl0LYd^_v>W1IC_l(bWsg>(H%|t>HR*u1>)R zG$2>szrAOH+bc%CsP6vo2}tA9h{*BI{cHIAzu21MXaWxp-rRT4@Z?_p#L(G;?3WyXvr!k1bE}Ac8Hq z3)EW8?wS}h9alR2YKlkBApX!NvhS*`QYSIph9tl6aNGajo_68(Wp^xZuJZBZyj%4$)L&#VUr_`yHompZrjz zCn|mKR90P1X}R8u8n?0r`iyO3hw-UWH=lksSTl`hO&rT0?zX7mh(odE4kTeO63*pm zo}bB+>ZA=~^0RJFavz<2g^Y{cn0lC+=24O0@nYio<*y>)0V+Fg$ws>LflSxDj9TFX znx6c-_SxGd;zc}Oh`O|H=8G~*R?3KnLF>Z_p@5;ACJcW`)=xfvXqx??OJWBjU#F=$ zH|0+}%bZLtP#k$jEAHAV3DMQDv(>Ke+boGEvzL;do{QYH_R2y5x%87(L^;7ze@#^z z%-kgQD9kKc>?*xwR=Mu(Icc6*xiv_U#`1#Ey41#~F-<-JW(Z+ z59{Sq&y<}$aMj}-E}92%!8uNdn|0&rhl3gRNBrD!o06Nx3~?Pfb-~(d{3C&pOUs;>csSPcEtq(y*lyRf_3P>;H+j?_DU{zv$rF6K)pm;EpXyuCJ~GVZk9y+`LC z?wrm#ar2m)_5u6X=B&yBUuy827XF*CPeb@WqHs zS7%C#m0!myzR&7Ekx$htO(CFU*+LuB*9$h^zOqlqL;k{Rde*Hya&KP9E|pz7p4rOQ z$y>yGx1W938L0x|GgFJ#ZnKLlB(I-zVZ{{`g&Q^*v{bAR7({%tZDv_P-~fEfUv~}< zxmdm=!3KQK5KK%g!=azG(*x||6+wVT{DnM@MyiW zCfrBW&gaC`uo&w4iogrE%bos^$SnA4_JZ~KGGEbO%vzIo{>gRK@gpP!ZJ*@oP1z-Q=&{3r zhDjq!>gOgZ9zA`o@r0vr)78zyvQ1vJ%xec`k9D7&61vRm)ytH{H%x{takbGQm@a*z z%ipZ}?$+rmuhVAM4J>0l@GO}wY&e^dmKb+?*=5%XqUn;F8~xV}e00BMExTd2`6;hl zn3aTwzi4q_m8I#F+m#Y`#j4G|hj-n#dZp;reT|cJ=T`}5AHB8i8a+xmywu9vhV-U< z#?+F8j5{WG=K4G73OH}NqUs!El(Ou@p}dwYOh;$WqGnIYcZbamI>%{jLCa8w^~9$p zxx2~;f8|d?4&ELn>`t2HcY5x5saIBeJvaGpc2Z+eGS0pV9b9_0c7Bmm`ikKOBO|D* znG41VzYm`I?!=;gW6!Z)uFPp-vWwJ5=%!y5uy-XIczNuID=ali;PVo#H7$ZI@1ny2 z4^mqd4%4=eKHr$_)j|$$EwO%*_Hd16LAs&+Zj>%*!m`~y^>~NhV}CqO7gFoAKiO(y6oPf z=0F@Pfls(%9m+V&Pd_qr;+>k=f@cRJ?`FTX#9b0VmnP}FG`1~MY#4KM)v+Z{-F^Ed zgQ%3^L@i&6GQ;!y5&wza%T7*U{a7C z>#rSIL7B(z`{2;<0fj=x{KXpYWu@mYo48nGO6sZes}?LK54zc?MV67SSK2EvF+r9-NC;svQTfh^>~lw$&wn8xd(>hyzb|ET##9To9=C&ZFl_9YGk`O?^BV; z)Jcb$6elIlT)Lul{fGWr#XOSIR#F}0Cmvmx6zzbH|BIsCc>mSgsF6zp2Il7ONE|hu zJaVktTc0$KWsXY*zdl=(Jawel?G^nI+g3i27Xw!uTDHS9`2m0VCFLV?E5qS;+y|3r zD)Np21v8uK9-mF}?1$EQ`YDCSZ}9XjezoyUO2q95Wd)q%GW(^M1&Nu>aOj@!c)nP*L$wPuD?oOz=_bOdtRK5yCL zW$v3cwesYmMjIO+#^q+*`fws6PtEx3yXKJ%F5x-yr(`R(3btIzo8OopQgB!x_L$P{ zl%dT70>{plk6dn7hc;LJRkdGJ0p`4>Hpw;h!^ zpabdSXD^fv+EQ-%M7C_zeq(_9WQMb zS>Z)r^C)cvqw#v}5wkqg5g{zc#WzI?tcR?U4SV>K#7Kx*``kh$Fm*q?MS{zC=2lOC zwCm15efg>0b5>n>RJ6AtL^t-sOwj|CJ8-ui$O~?Lr!dN$a4KiW8sj^8ap}A9Q?G0u zAUU|iI!L`#Sa>DNC?|-WGf?L8ho_TO;^wYr#V@h4e{estCE=nE>rrFA+K|fwZ_iga zdCl}g!_ar5tjArOn{BD}+RQBjUu)R%;xzek`XlIBXX=dwKdcobPfU8#a#C`nx?%o! z;n8oT`X`K8HfZPE85@Sh8lGI2!5pD5ZTKn#$vCeeh})&*-E3-cvFY{2i>%=(C7b;H z>hF%*v7&|I6!rCw`EfGAs4riP>^<(Jv#kz_=3dwJ zpQyN$Htp@LYjr`}o=DDYEm{6* zRbui>L~LC4A36E{F<(Vspt^*<-^66K%~9*m*~~Jgzeni%kFX0WUzycV6)CI2i+ELw zY!=iq7w$LJKJcve);p0Ui4!+^zouWjm1U81s_x=WxkP+XXyvL4iXf$x3Zg`Ii$vfu>-2lS0~&&eWet=d74a08N_^uAnsLvR-7Ao(qcgd z@kRn!Tl`YvRmRM0wpGN5NWF768Sl2;XuNC3IFtS-6?Li9-KvBTb@*DM+!n{I$j~WS zO?v%c`mufdI*Am-IK|HWvVzdEi8&{A(I&YwV$O9V+4*uc&n>)$)fDg`>Sa!m5n8Jy z39f&+?-1Ct;O&ZVuT7`tg(D&aor;deZ_G{Rw_OQy;iDTL4=iom z?WSqFJ?k%A<3w4>s1#I$$5=7;u*a=j`=GNX#`oSy>B`*@^Sriwnm=>e(99v@n=c!$ z&~33jYpwC7WS^oeW!Scsk(CY8Ztf!)E*dg^P`{09E#}8r1#TBvARkwfUh6hZ%;9vj zhQOo`j6-v$Uz{%W&VQopey2B-p+)l*re2$PS+eZeHhCKl{FR*7XkC=J$G!UgDifq) zk{?;{5b`1~oqSV!J)uA#a%93aALr~fsaXM!yq`Rex4FuiRqSXXsi1Hvxn<>B&B{RP z8}ob-TyU-21$UNJyja=&*~?Q^LSK#7ERia*)U0y2z{6ZBy;D6_cj~S2KGo^*_U8&> z>Es;=OV3r64?V!Qe8~8Qv$uw)sK$}Yw4CanxC^yxO(fvLD&H#2@bQ>4;IxFrMgFaE zf)B=?S)=`j@^gXwA^EyQ`l~+z{>Ux6V|+fMP<@6In?29+<&--mYxDer8T-}m4jt2S zQbOoF-7(_)sppLw>+f&ewL{7!-qlm?jC$GsRJ}{|UmL5fEp8uMSTnj{&JjW6 z53!d9@&dvN_*$7k?q)ZP?%W9~H+|cHXO#w{j1ko}Pu&)q4NgC*+SFh7&Hd9NcU{sI zcP3qaW1pk;?wZccrxLgB4XrjZT#>K@&B!=zPnuof8)mO%3wILRboefHEdPkfC0_22 zWKXQM~2dg=Om}ExPt$; zBJU)}&x*`A5PnyA>a+>Mqvc;CCuhu+xqAJ)&d&G+)1E#bFSisIb?0{8X#ALK5hB+H zB&ihL+gwL~si3pgg^Vu6=Ux1B-96!W<%^<*h|~kuS?5}LuBGwwTW>X87s*>Qchg#L zVR>Wt)Y?(o_{nbR_r)T!WkoZXGo+P0@LMD9X!RE}?%#aRVsF2w^_TN^7^clAe?D18 zRBVw{rf#gRTX+$lYSGQBl#7=$v;=If z@CrXr)nsovZ?#2!_4T`jqi08^jh?-Hez;~>WlCxF(JlG)q^Bas2mH|(lHs4)uvgo= z{{=#^%@pqyg8F{;mp1Y^XN;3<-1czEpZ6wJi*HJoSk8PsN<~#nHGpS{>#|*WPi6D{ z!gQve5=i|psJTWup#R%f={FMBJh3w}Ra^W#f3x+OQ16xVZ3FGx7j0ojYgyXZ%#_vH z5Y1>R93_>?}q#I zDK6>vU&g#^+;-jM_L4)7Ob@uNvlVW>c-i*RgYmN?ho4`QH|+snnz$lv$=#^~a&%+i zVUbd#z06Mb6Nv>LqC;BV^DWyL;qiF(;Q9w@t=2oCfr>tr0+ZxDFW}E#Q`T5L&2e3& znE&;bei8kQ7s|+JCT>oXx;N;r?76{O_oJD*FJ?SPPdAVvPold_{4^h{?Cy7R+Fe_{ zswc}0RciW_-?Be)*2AvM&2xUtR!c%Q$PHWCQ#StEBr?q5Riuh{3|!A<-7AkvoGKq4S@* zhKF2IDVuqKLMhR&H^4vEbbZyuF7^6p8$)zgNQ`X6q66&;dqsXd|U zW>%T-8iuT?OWG9q?SdvtuZgN1GK4ZvOvepx|#Zp-h%33_7g;sg` z#?RA{I>uKl5Ly+uzInlAi}YQ)il%LO(?C1sv8)j9A``h;=`^1@A8U}2l)>N{trFvV zgZlShaMxTkfjJ|r;Eh||TnQXu#~A5%!>7IrHn^F-^e`UdU-ir$gJbjOD)k_nktiI`& zULK}TSf?pVr&;mmI|*da_16}DSiM&Lnf}>FJ_mRb`-S>xO)hLXCf?f6ntQ5hWCZip zd5cfO*bUwl+0{v=!K9OaGTr|mo?o#2bwko&Q_Ya^ z%`MkN0w{~^@jOXSrGnC*zK%I3wSA@-E3?_kCyFnu^7$4*Nx-4$Dld~8me#bWU7aI- zEJbYm>fsywM(wwyxZOHuzd8Pi!KL`|p6WMwt>o1ydp4$43>qJI+s{Tj?sa|VBzvO|L4;25{yYkBEy>f2}kJgU5Mf-E&FjK$yE34%4ubJ}|sa~#F zIL+U7esSvLXVucYYtO5g*v>aDXOK3TF18jTj#)sMSi0t8tpZH6lh71)nyV=(TPI?p*oM z!3z~{4iO(R^PKQsA;Tx4^y!c{T+Ro3(S>lZq%0Ha%pCO~ z33vASTaD#`XI=E3kLc(A{7rQIP5pQLr8m?g@`o&upMUUv-k)UooqR7wuN(K`;3R)l z{|SeN&0VRny-CS(jF*wxgL!pA&0-IW>W7}ywHbrJ zpUftC$wCP|-}!KT0mPdJLEwiA;R^mX^h0#`kv91lfFQM^5Bj7R7!cN#Bee^0ZNkB> zXyX$EMPcXLJ(7nIy^FUt(Q*heW#?#8y73fJhS6M7hQV@DrhzayOHZ1drLPRG7CBqj zn4GO=iHq1`gO66$#U<<ONLG~tsUsi$Ciah)&_5YhV@Vn`P z7kYxcA6tjign1zMtxh16Bnw`0s>xWGuP=kSxh9P55y1D0!1rq4IySENFs6S-{C+Lq z{yMZeSn?_{S#xAvGqScm5#=I;t5Vu7~wa z-yGz>ivf&tztzIJ^EY zGK>&fm^(sU_Xr{M^@HzjlOHzL2tPz{OJ5<>I9sIJ*N=yoY&Hbu^7CLXMh(XK1mHc! zdGgsK6(Cks;jspVITs3j zoefeB7^J|OMho_-<^wiEVco++h}nfuR=n(+8~wuL0Dk>r1Q}L^pvRRET#S8x671K& zUX2Kh^`7l>8|wEP=ewQ{Rr!mc)q&zq3CU_xYvUEaEB|4gjSy2c2H|7monXwT!=4jL zNL4|}&<{KGcRKWizo0Mp!aZRF>}`#&jkE2~%G&`ys2TrVb^KxD;4jSO&%y}iInVu~ z5cJe4gb;5tfRt`D9p?1PVB0jX@hh-c3s_|WW~%TUV|0cu-@r1oZe1bI}Im2KM+}90YtS<(e5`V^6|4BcCF}F5e z9)0g6*isv-ppTE1Mer+LeS1EMJU|GEa6&OzZ8R=YE*|<@Q&pfCO3K#giTm9B0J|mw zcE-{g_(689Hv9%gK!vuL(tbh;_tOsJxUBPCi zV7oJ5Lu@VE(XKzquLFBN5@^*P(HcV1_JuGX|1KPA<9>?j7+j=m8gRd*I!FQ~@6&=d zcRTKPhY1s~JP(*!z`BVaA8*5lz!>v3#u@s-qwms&Uy+ADTxXc)Pc9Rd3}@O)MW z+qbX%ck;e{+{N}iBcD}QPV}AnZ3EnA>yODIaK>^VIn!Vf@ZKAE{{nd5i!(Rh z#cwxe zecxXkvFN)O^tMmHe20=@ zh>#O3d0|dDAI6hFm}BC;n1BDb%m2rz9~lOF?=Uw(YeF`aka?0rsf!ivYuer?=;Tbp&uK3QTWn8apH3K@sa*um;dyJ*O%MW{#roQ||CjS)d&zaj zrC}e>d`R2bdu&hh7n8_p$SyjWAD_|LXIe*_+{gV>sUtt6+td*|yKg8E^m1?tbm3aPDv?oI#vW9qi3h zo89-mGj|^#WEg`@9r}?o4F80=z8{Pk@UAR8um9Br&Ky()Za}L7HoS)Op0mE@yeA$T zH{;;Ebo@54Du1yWY)(bWYTxVmHE<%qxE2gHo(uD#ew1we-+oO%fU{cE{W?f(GQ5A4 zVYmYJ&$593bs*?}K}Z?e*m*ZN^B{GEyw7-GZR%Id{joD`DXNp<{KTcUIe)Smoa_1J zaB2V>AAskUYig4$2avPiKJc5qcSc_I3ZWfThy5MXL2y=666T2KKw3c1|Ab^4po9cf z^u31w_MW>_O~fXo@(bs_gygLVIYXZpA0-zA=XzT4ky~MWF!)t*Y6bgVguM-EV(QMp z)cx8>?OgJ2wJyfiKq#?4#(g-$V6YzWNCde9a{E6c*#@`pk@A%=S7F1M2k|d`&mEih z;A7#LL5z}IO|T@n%1`VCIaBY}FOCyt>r}A47_13KV(%B+{nqE9db{8F6Vg3NvPGW3 zw?%4G%qGBjAAqo6jMn?wnW=#g#X!V?5r%v zfBBD;rH6owfO7~pKn{_Ujrvn^)j!+5q=Fp?F42Vt_5plgkBJKI7IF^shyAAiIr#pw zd~d(Mu;KnjOSOdWZx{}zWExETPfM23c=*187%@YgM9S2#C1$E3_(kyT#Lv0c3O+{& zsoUXPr>Y>7gM+=E97>kK)c-PWFc%u}$R!?m@QVNQu=*Tae?r>V!2OndX;{M3PFngvyx_7h!2v#S`)O1RvWiXq&D^ozHtT5c!{YyhT_6x@~izMP*S4aWx%W8 zKZ_ag0lvXx1Lu3kq4y^uH{Sd=`oINPzmfMDAf!a|(UfEpD@w8{j*?=E{@112LlUj_ zmv}-OhLJA4fNfMu@-onz#n+ z$jsRR+_xM-N!qy+xL^HW=RMXwa)J?B=^}#SLZ$O42TXYhDWCbBANVc`^qcWDK~h&L zorO_yyaDik=kL)6l1=fz6>Ca@`6x<+9r6}9^jY)9pD@4aOh59nxA0!NK0;129tPvS z4z%elCCLo^&r7lyN{rA(D_z%N`~JIdQ812=>Aej}_hus1!6FEJBf`9L_xfghfHF!+ zHvjMA_6aw3R#OtqjNuIAaB_?-f}c_UYxM!x-yz3YBjku(gP8 z%wGd%)X7oygUQjhNG*J`wX<>d-xx-TbO7!<4xq$XOH$%3Z&Tu|(BDSlt2fSYex}W`Rc+at2v^iSkBnIdGHy5fw7QN?r-Z_UZloY3ldVz`or_Ge{~-qC72^sCb39xuSojCeDI66`X88fmwe8f{w- zg8o(#V}}xaHL<;)548zO3ZHe}ANzh!n%dZ!K&ii~>?Kf21aRYb!>{Z1Hd3Q(Bd9^H zli7(z2({(w-XY@V?KioGGpzJr7labvF^n2+Zw9&&sZn<5Zzs|AD9%+8t@aYHCM0j4 z-`j5-;^)`GoFC4(#VM&&xrj8>da42U?SDV~y5)>5g&OW)Lk)BrP6e*v*L;U>r+(pm z1=EMJ$A_01>L?9k{}XB?*zR|f2wSw;UJ9-8-*kzXp*0NNRq5Tm8lLr%vUK=x!7>Gv zwi{4Nh{f-TUr(Hguzv|0+e-2C9Y6_o?H#sX$m!nR7wCyF=Wz??fj+R98osLp`X~zS zZz+@@E40c+9K{E1O*jfC)M^il_0C2S+u&P{s%xuvOOS9*+fZu6?}=ZpcoVkk94*Lo zIng_S2iBRr!}mM&0qlJaR>&@d>hCcD`eisZ)ae5V`g@8qO7by9tL!$QwPDJpwL$Q% z7yOn`PvZ!&cnwmub2WkwR`Rd3f$x<2nE`&zzbS^j;!YDa#3_!tclTswlr>V`%l(C( z?C>S=^u4YKb&uB|YOu2&HN?3V?g8j;DUP-;QqG4@b?-|i8hlZ#~RW} zF$VhN*xr5Li5zEykmHRMAs>SrWvtEc_a6T{D$)m!MEI;ZBg1DuRc7#j#G4+ z|87%SAneNox^;_xPh(TZc-s9LNMn)-%zfPF0q4)qe7w;QAufYxeje7KBa7za1N`rkHVk}yQKF3niZj^OK=L$|CGGBc?oaYELMZ-L6KXAX zJi;67=)>}xaml+LIO<5*<295T0KZe;!#LENc=km>gtFTTq3v~EO!M~oi{|Bvwuv{m zKSHqjendT39bZ(JA4)JaMDZr7c(RYxLXvyWdp{&M6NKz-E`T#srV-3cfd78qw~b%a zt}n#>XV>N9eFN5~E3oHbj1q!ZEjFSVw<%X}RM#*PQ$umlKY;9m4Q>nrN+s#zTs~-8hnG5B!JU z03taVBc$CX`ZyiMR<%DF&V&KKVZe9swxT*$c&Ksi4GN22nU^ zX@qibYPWck0u2#Li~}FRR;L87rH;~e`~APXK5V}g7WKf{T@*N@0B7^NwMSQL0PGw6 ztWY}```zXM_s`IG??vgm13@siqhR5^k)F!vSZ-(j-qgcM(^>xRbm*9#Q%)DI+g_An z>jwPaj*?tWY+)b2N36*(KceihnOJM4T~5$7?`I>+Nk_-Ido}9Cv+Ob-DXrq6N4wU`JXbELzWJu{!nx3e25I;m!kK-lIcz-Akpr z2BCe@0fXJaDB0Wzg>n1?X}5(U$=R$&{*!i_A!IMBCA9_`M53V;@GH0v*YClt-FumI zFCP=?Ublgt`#gXs_!MCTIU^K!#|Gv*hx&Nmf%hDH0e49TwrH(3e4F3Rb~VY#s%QT1 zvO>r%Hqv+v%?7fmV;}!HSbh)JEua|oL8mhVT@k`(e1D!C;)2vfy7JJxeWd9wL6vl8 z7^5(8X?Hn(ZntAxPyV*NAs@@_Sa!#}-1T%!+mpYivO3GpU0=ui+e(@lTW8L7cWFAt_2h3Wvm0GG zb#~_VR5o`!_jPAwVPV~+;f`|&!UKoptHM0`5dwR^4uEqgFz@#m0dv0)x?^Z72-+u| zV?fw$f)WgkZ&LgnN0B|c|3)8v0U06cSs)}EOCP+FHcGXIwXaiHAGY6Y_ATSiALM`<*ceeL(Z{TZO8oA+-m4ekTw1JCWL8_W>~W8-ZPME9jy`bBly`$R>nZvc7x%ds!m%IDcNEiCJ;2q5(>W{?mtV*Z6)DY<7j! z!5rR_>gzL*=H=I|eX#oh-Nzdn`zOGBCx@{s9Q`*4{a>O-M=WTT{wQ7^euLWF&Woh6 z3x3P_aku!AJ*}|)10ANb?%n?*w{j` zc0s6i9%D#G_76#Vb`JrY$hNlp@OD9)dcqKk=hy?g?$jpjICdJ>p8uQKtG&E#?S-WQ z;n@G9{?QEk2v4{NEPEH`#)FILdXM5|v^7#?aDa#888DRW5jdRews#oG&wChochE4H z7Y!r32M#0o`VJ#|1`H#6`G35|!o2;4kv$;Hd(SYkQ`j(yeN z6)}wB82&MzOUN*aLu7mT!5{Ou27k;4WssdiAMBipyZ(WpThMTfmpE^Ko@)3$ ze^+)QY%N1dGTac`QYS?1RM2n#UTJp#z;jjvo{gx2OQX35tf#vNbcrhmZb7s*n`_8!*>jcW~n@M`^Z1&HZj5s zn-~$gO|&q>Hd+L(F@KxTZ9j(5t+~=z$A~bjV}%)*YZEQfmZr@g+jiYno^`AU!!8oa zgnWPJZ7Y~8o$Wfbl}WdYYLCOp!>-%P=(;Y@fuk?xcB*r4+hrHkL1$<` zl*zP;7ou8thf=KENt9h~ODMZ~{tg+;ePI6MIiF(bUQ4y`iD1~q3Nd&(H6<`g;`Zx_cya18rLAAtD_ zLiFA<0QhUnu#9^HQpvE42kGc?!m#j;ahx!Y%Sp>|xzl${)0;T%aya=pE+>xTa));o z#$6v4-&qbVOc@3_MSyH>zV%)3s;0<p3-pY=$MZa-c^3?^qr;ctZq&^?!29q-&t74Je{TCgmGL> zeQo}Cz-=q4b=*LjRqQ|b&#;d~U~Cz~Fpp1XSj3}%Tc7lR0a3vgC8}ALQ|_t$*ED6O?yS$!hK>@V^h^9x(o5JHiq%v%zYhUi#d~`<_+8j{`X=0<1jE! zc*xk9w7kJ8>XUCoP)$=1yk!~>V`riQ!z_seeFW{39x&LMfD$)j{C6s)yG0I$vkae% zDcox-&Naoz1EK8n5+ll3vZ<iHs6Lw`x)X6t&Ysz2~Qxewe44`Oh**L6`;^6PPB+hnS`*DD(#q%e&|$Ybrz?@zM~{2Ncs zc;C^bYV1X*n&Gm&V9{^{~Wiw{M>Qe*Pl~9CoOk=?rTmw=5mK~UvsDVe>#Ri5=xY? zMJXy?*)0WB9)?v&&-~Z%N2msYa&X^hq^Sg>Op~ta;ST4%?p&8Xd-WEhHvGzg>nmC< zU=0BOB+CTkv0D-k!!TVI_)qxA1FXD0=?(*iKJZ`M4cyk3Xke0x6sK-CC9Xj(z? z#7%Y|XeuGV|MWhbe>BgG(kM*B^ldofeLNIc_ficq5t9D?0ZfB*Yv6xlcQ)^f`~R50 z(1-cY1{nX9y%VX6l#xdV=kz@OtM5f_S<8tyFWTemyGe*I9kFX8X5Sm{0RHlAr2?*LJ zy~BW^lY$b(cA*r-JqfHOddMHW`28K4Y8XOOjZ`9vIyBRi!cnF{Rv+F!hjZs)4LlR$ zezR#DLf6Y)!qm%pz|_a=(I>sZfT5j+l0@ORy0-33ZbW7vRbD-xf1quHXYAXel}N&_ zO*ExQz&g7R@1Mapy{u;pz3f$}NgRTnh3_QlW=k@4vvEw_edyn!1J{^v!Z?2JFisrD z<)q>GF}J()oOB)Yas1uo<)q=1@xAKmr~}8ZnSqi;+=2hWSujE)fwFDPnXZ? zdH$~)fzVW6t3dn9uFflwuItwgg$o*GTW<|Ih6Et-yb8igxZ``i{Jj zOwF7K=mQx4oBE`87%;W=HIYSpQOf4Mm*^S?hSC(_`vN_^|MijoGGr0&2HKX`W*Gnb z@cs#$1Fp9)wQ>?@8i&R(v~tHYHTQ34YV5aTYVNazYg@Pm7rO>&yXN?Nh{N)JRv8`2 z>ok9dG(S)umR61}3v^;Zog5d#2fGH>h9(z&nWhl+h^Cf2mbSeY^M4f>|5f8Q(zb>( z=}K`aEX^Ei4Bxi$xa#;vU0i9}?DI7kLs^}d@fA3?mH9c``Sx|SVb*S&PVL2oA*8iq z?l_=E*ElqhWsuRIt$knsdq)8;TPK&7t&z{mRxjjbYairgYaRZ0tpTnM_%$GndV4y} z_Hb0BY!N`~hCnIJum{|v2cgs!zugsGiPW9nup zU$q{MwBe(B;O{y*tLyJH>P4Uv==~3jIc9RTdAyA+aqjeXn<09JOOz;HSGqKwhZ3t2FKU;Gn*$uJnQY zRrV=7HSUq0>H}qe)F+JReUJJCf7HV_fQJEfV!BuC0{sJgK*um1mTDdX_fSKo)_w|8 zMZqKgzg#4^UgAxhXnPsVTskXD*@_)GbvbI?il{8i%m$cElX+_XQCIj!n?jxMZ8CUjU8394wqfYd35I|X z##^RkG7m!|uOCA_Z$3-yurgacZwFiL@D8|E2Wh)zs~=X!!Y~&LYm@ft_BbrQP1@r= z=KC1-cRud?AIr;YD;M(ov#!7E?k3Im(udQw_BM0cj=6ugPrY5Q9f!Bm6*B|qGKp;Z z*7U9PEvY^7pCO-tFcdOZ(PfjU^et&|a4%K;8yl=#sK2wi{+|Zoe{kE|+KsiJgUv@B zzs~NQvO3`WRdr!pQg73f!(&Wm;NVAl{f*m4oH2Wzh=_E_KR4?{_WYQ7Z*6gJepd^HT(aa8zM<{v zC_-Ts)OGOutB?Obv;Q+$s)sE=tbqS45VTJ|9|P*@aFn_}@-A&#?ii}<|KBO?>{$Rs zW*qx|9zPMObi+r+loAx$_2aGiboni&_4N043v(d z4ABgfvOK(=A)T|CA=ShDNA>_hS1ueuT^E0yx&rv$hxyOMppmIuxQDJ(?8TNp)&PR` z$!B7qa2#by9z-ci;5+6L`>hz_-JgM@N#`L9m6E|Up_FsfWsxX*>(M^Ue;)6eSlbGM zs0zn@SzAstvbP=wdz=8lT<+`74dYJFT^1+2quW_sy-CwqzRtopWpQ-jq~U~jbUE?d zF84Jj{l_qtbP-Bf1i#@Rk`;$eltSK%=XJRTrbr%!^AA^e=|UMr)Fr@wIp}X~m~+bP z=wfwn1dHRubHcdY?&3JX;{+7Q2N?zlqCu4*RRsQ=equn69<=*C~ZY5N?V%xmM&T{i?*(~Oa9-1cZBPw z#3BsA15wlku>UUw^Pj(Q=al!e+%IYSm+IPCU7dw}Zuy^8MiWc1Fo>aWbT?b(R09b5 zON#7ilqphxQf7psv_&Z>TN*IG`$xWs1P_K?w}oUyvvN)VYqSRO~=gI-<{(I!mpSI*b02 zviTg!SPAowg=u)ENRc&taXOB^FdePibmj-P=M2n$(op*HeK+V5C8KDuu0w zn}GkzbAbQpHFS|9{7j)d58Aw>7Ut?hV5c9&Elh{~SRW)X#EO@~_}(S|8S4rVhG_9x z+JaO%W7WYQsN zC3W@*`03bvpjWc#9F@JPLs~4XxA{5gzDYUfsKEb5>XNMYc#(6nm>Z9bp|8q4Lz|n7 zvP4g?*;3~yz1FKUeg4+9Lwh;lZSHw0Q?QUu<4;S*y8-n3CvF|F{iLq$^!S3fuIj?VKjJ~7FU@X+@rA+=$a?_&pp~_u1h~?P-k6?W zjNupP-W@Jowd`}Ttqe}wk19v$hyu)`4>H#kRno+c&tkybgDOcKIo+h z?NH?C{;_SnZ5Ia*uJjySIPHV>G8B&}GNcRin1cCL4B?|u=;|1xTD+vwK0p;Yicm$5 zO=1cay<`X%9EUR~3V-9>R%SPKaqNNV@CnXbc{qCYHVt<=tb9&>tX)dQ3iOR9k{AMo zO$@;TfBO0(mJGo{He*wofcnM*MmwGZJ%Bm_ol=burQt(g-|3IM`7}b3IWd5-vFr%c`4?HdY#2qnv{U|*#Lpwd4W+{& z-A$03^J{PLRBycSoizKhVo`^5gu3ApLXo(zlrC}M1?YK}Dt>x2P5go+L*fF1zOhsu z!oIBVe?hK#FJGj7cOX)y4eyR_FW`l5o(y8^XYs*r0`Rd7GWg*4F!byiMW`tMUtUAl39>V{G`s@R3< z8sW=-f*_;~7l30IhtW1%I7kyMtEPyZ6KnFw7{D?H-LZD{Rv**kHY`}sPByfgWf3=! zg<*l=fMJDU0)Dn$7GGVILw~AxsXI-qtd=ZVwumfJ)+zsMp?}thm-0foV^p!SGLrnU z5p~9?1KAzwVzCi>s;P7obmESWFYUK%|MEw{6Te=+`+npngn8qjqj| z)vors*k+&y)-JzVJL#o(Oce>0O=TF+zqdr)hIc>#s2TU+*+He53 ztu251ohTwFGlfVKL4qa%|V*R=O7TDNL*fwqi#Iq4dnsWy{!wYuMJ1Y zgV_VqgUeQJaXqBL^!{7-f3}OZxx|UMJnt}R)d@OD@RV-joP!8K=rlrHcV-H4Pn?RLDz{2b{lZFg~;^qe#tmlMu$IpLVg3FEljahIAI5|^4uON;-<-c`WWb!7d4 z(708i*bDAFc!EokrjjPzZFk%5b}OlSx3b-OOPe;0ySowt5(q&;aCdiicb72Vf8OK5 zg8+eqw8?(G{0=ksj2#`jbMK>-+UIJkEPRZs#GaCVH{I|8X%t*0RU*&7R_dIuuhKr( z+h`vkL;K)*26(!4n*(_V)6`(?+f%7_npT^*?MtBe9=e^|O=Cc{btAr`Dg);z$dV4|WpMccy0|vD@K*VTOP4Jx8<)*1i9pbTYy0Zo zJ@{bt7dxiZtwjGJwQ2AbbYB7NpVshQX@%z5<_fdxmK7rJ0h_bDN=jGwPpTAnI6$90 z)kc@@E^qdMv{LIVt<-mpt+4icxZF&J7MX9uRSP_rU#_W8Kiyj=_M(m8;a-qClVzRQ zla}*N(Mn_2t7YbX^U6d%Qh8cjCDqFVr&b!c_*7~*(nj!lFVK9OH1yU#>GfmX=R2m= zZ2MZicJXrt#G%O9K4C;r39DcO4;mQn$sEQbS^M)Z3aRWjz@BkiUb8f~tkyn+-gmGxlvawb(L%Lz zy%i#_S1JXA?VtHUndllRGxyalHE>NR;5pK2OFvqRaud!gqs8nxE##f0r}KSj(xp)WGfT&@vuf!f$JAgJ_|~1zN1_TwNi)wz|yF3;PHI?{ikK za3}Tu2v#WPUvVx{Kac#u6EDB<(0nI(mj+kY{nc${3x2bt`L8ad_8%7vYL*2h*4T&A z`wp1RS@_XB-Z@%qdhM$+V-Hd%+t(s~#dt5NH1Q&(;_E94wJ((ys9&JfHkdb|>_qch z4LizTa-J3$y1N%I4VhYmc{4W_abc0zmy}oqEh^N#oKd9ha#!dWA73G~NcS?$SHIX% zEb#d>!9HFtS9pC8-6hMw$McbsijA*26{taeu>bM3G4Zm#?e>=iWz;?AY})jwH^J{6 zk=j>JFRp$x;OcGH_Xqn;m31KO|2!=;_S)M{ek6&*>^&A*TqkLtSCC@i_4o2LoZAX@ zF3}o0^m`LcJA6uFOInvoi_HUciiX$`^ML|$e^P88KE2SuJs@A>;@zQRtbBpq5~Hg$ zcggwQViWIO#a2Pnip+cm**>E=+dP=$KbE9WVCZ={PwgUp`|19*|ElFdzO^r(QE7hV zBx%6!KQ_F-e^&M5zB{YODzkemUp4GF7dk00xav{1B63Qh#qiIbip&B?u}$cdBGYSI za+X}YQDk`auGoK>@ET?H7Ylt}FXH=n(O~d>^(`tXSs5PMxH0Lmt3S(Y%KaC zWD46a6&V=O*G`gJK-2fXK2ZIX_eV(U{6q9G0et6ZU8dPOS5k_tgXb5Bhqr%8-zy3r zg%&{%iRKx3ITk&hsE{cR9@L-GWhtak|0>DjU;mNi zE4K)ka2jr@N7z30cPNuVuD(Z1zBov`K;TDe?Ggvk%GrOe7;>`-o13kBH9A`pW9J0u z?2o7eHr`Y5;9UpT_ESGF#&P9}xI08(Tguq4O8GbmN%A}td6(F)Wtk$h)qxzS9mD|z|m!Ao+7 zp(oG8m*fllUP|M++$a?KPI&vH@&aBy;4(DooS(2 z5cs^Aufco|mJ650$!j2tqfn0$E;lQ}1Mc0W>EvT0m74#$PEe6e_mbr?-ozf99KuhixW0-jG)awbIHJk`ku;qEL9;@96HGUvjjmT$2^>u zqUDjFrsE+~H&-Xu1{ZSpp>zyQA9~M~WB4dqY!g9KwXV`+wJWVzrhy-4FAJB?G8^6Y zncT8W0!gMI_+N=U*BkKNK6*!Mi=%UB9`2qCIr_N#TsSm+=sj1C!?Tc!50?gaZ%Hnfp0ajc~I5I`=^vX;rmUoT~rT%-gjUdNt4vB&=g&tundcsIVpm$LG~tV z`&>L7YrQzdD3UD9-L_G^C65LCRQ=xJ=~b_s?YEDjSI?2w>#O8SpZ0pX*eQCcT z-EO3sguIbv9Dw&86Z&PIY#v5xKJS)GHuOIh&x7Ath2M3VXBhf`9@k#bayZ)}d{(At zuusa`ylgyC5J6Hb;^rjj`h+H`xnT^E?W6A>TY+uYm#_AGu5t7C@nr7ro-8VbR4HCx-Q(3FsH^R=vzlF`uTfs;)HIIOxkXgX_dtA+z7!Wc4{Tp2QC# z$z~DqDg2-};x#<#5|+5p0?c1nowrLbE6Z#e_C^!+{Vr$O#Z5_->1$i<5=e@HKS|~X z|CiC6XBK=%?Ttn!qb1YWkH)H8rbz|?E@@^F^U{T5>mQh`5>3KLk}$$DR?VY64Smd= z$YnG-?`j&eY5VZRvcJ0-RXldRf9}uOLIvJ|DSqkVgZWFt_ZQhlQw|Dc;v?bil{|&k zku;j;P7`!}{n9OCXC({6$7KIZ2GB1_u}Y9nHVJt%R^79X)st%;MvLqQWWn*z!r^$9 zO_#(`Hc`i$Myq>Ori#K%l1vBN9BiK?n})8A;$7`b=Lg(bTSN5JPakN&T!%)gxG_KU zOBO})*xaxRJaf7qEesJvktF3yB*{2vZG_4dnj^-u;vq8WZ)*q*x02InHLoq~5xO)mM@z}$!9Gw4N6;{Qy9T;4O@DtS-(i*ugxGs}K5z$_P#^Ju79_DX-V z+^2kj3pC4pBG4@7i6FCkEl=($Ur~xx@aiN%L{YLh`e4Yi68Q*=v@z?N$s$G+MZ#>- zz2%WBDNmv%IJLgz3w|-bxZjl_i>lrzDw%3DPjnqi^PoSsp}zk~AUu1hd$; zl7x}X$>QLT^H%u@8DITvK^_uYU_7JU^v7WgXJcl?iDS(Y&Eum%cYds8>atAhBobgYy6!o? zxzNujhS0Z4NP=0y7ofd4!8-Au>8k^$_w)61;H+5i9Q0(&^q7?qGt!<6ogKA0bY>8< zm!|_~$E*sS<^M$dG}z9}gjFH4GoSOEJt|+TI2lIF2puZJVcLq8v=wv9wvrx?m<`>` z$yyaKE8Z?i&UfiR|HJXhg^o`ok=L%6 z+r{rmw~gP4`z^rlLZ03CTpqiG9Z^Q%`61fD)lvK?t7xML(qI=is_%0$kPSPQCzEKC z7!o6lQ;z0G9g8#!ZwpZK^^X<=@5)#jw4r2#8HZg>UmCYNoz-h6se3Pr z1NQXYkJ=V!+8J#ed@w{SAUDc5GB?UJc6mI{gSZREwhzYfUS}Ien9QO~q6MKk!9`Jq zp;gfFzM*_ETVT3Rw~O13v^}762YB8JJfoA@#a74&vSB>LN_e>)zL*SAALJ`(i`nCN z+S-@4H1_9=)&53R&w9wkJu$HU;`rr4wkMFkGJs$X`$)P?{K*WP1e$rD0_NM)N9h_3 z)(yKHXqr4bz-avT&&eg6A49@T<7Pw{MSc{Z5mb6j*@s5xhtPD(ILIe)3^Gcj38s;h zl?yeD{2@Zkhg{<)Nqm6S9VJXq^4AE=3fA<$sXnHIvFag~A5O1<=RmEHv~Yf`ZMN1G za>h8f-`6;PZWV@`#E~db;)B6@;jTVP-ZW8&{nIh=IkLSBaP||F1yM#vfL@e)uxXN3lu;C+Pdbj9&k(Fjl2(_@0e&A3%!3t9_%?JBrK0M@tsad$a|;9BooY+(AUMxO14Q_2bypE5p+*fn{lEz z>ZNp@`f5i+1)ChtH5s8Ue^dIf&Ec` zO+0@_dn3_~buPW8f-yiR!Y@pmGAD=|128wkc<{KFYCwCKK?KUDj97}N7a`mnkS5j4q2M+r8xGjDC~b* z%8IBtu;($^KC_4TM`K9VKYise20V)Wv%=fq3FYn?*@YWNQ8z_@dR;H}T#ztzZlH;D z?mb@HADTZzoIye?^W=j}l8pTgV)uKgh19q!`BOjbFd8S0AC~_hy>NO}HK;w1pYUvu zVJzuDUlYuaC*i^*Wp9nJY#;UDVav(tfc42C29cDtg)(J3KGZsTvwJC zKS3&qx673G=O?}3p%zx|q3loNN1$Jpj(a^08!W^A?Ng!4v*g2UGRAEG4fe4l!!DL2 z*(NT){`r~l@)^O8fsO-dfNnUA7Q|tU{^Q3`MvJR*V9#}fgpKZk!YS^?H-DEw)+WXp zXJd)4AcF*mvmOXANwU7C7w33&Nob?1QsA(D5O0=1-IN2Vw{EQ4b#dNwFMbB`00deW zJ#bAo=AyewAZ6pkNHWJ>6!lUI1}{N3uIWVkV?Jhc)~Zp?-E{oxT(;lgD@Y@OW?2vT z8YR8$t`=79t{i|l*zmqP5>59i9=7Y8WRs+rf@dlaH5Z)@3x(G#0u|LK&8y16H4GdG3BFZfLt) z`cOPqo(rYzKo<0xMhJCP4Q=x_O#aNrqG*z*$;9|TC48WISqKRx;&Kl>c^35hDrZs@?vsg zb0Dd#rS#*uvBaM)!>_KWN0whRO#CrWkTT!jD2Y&;pfUGt{eEqoNUrl!neWcMW{~)+ zt7=#?#w8jnPLR=utPHt03uQq{-(Z|Z}w@J#^!5c<99CyDkZ@zN8%7>#Bl18LbE!!jGdd=E>4Jt%t8C9`!J|x!sZQBiEAv zT4OCzs5=in$%|<4HcENJ&Adw9%{Y79vKdL1Rq%sGyGU}~B#roqGp70QQ&)KEC7g9# z5>a;vvbd@qCgD3mm_S`5vPp2gCd!|F6=TsgqZC$7%UT@*2wFpQDlS^4404#mY=rT8b>CTZo_ zMi62lea~woy^VyAwPEwZlqs>6Y465brMJYvhQh7)t3_2@R1Ul0tQ<<+)g!3CVH}MRCsVXT*6R=WddITXr;(+}OOL$tH$)VSMos=S_jVT6*dy?zyZUUEl=1T~tEp*#!aA zNhQ3++c@p7-UdmMIgpPicea~WT(FZ;2*un6ei}|MDlu9k>pgT6oUR$CJ#kH#H_g)| z`=<9PN1{a*Ut<$T+>CRGwkp``@1LiTj??#Hl0pmEK+Hx zX(IL3j-pIPuo3F48Ua}a(m><*G1~>~s6Em$?bDPM(Nj~F#oo4Vzk4zR@4TgvIO|mH zXv_3K_`o>qQfkM(266PfVkmXhiVyWL$ujac&ztOHny&9*nEJN6Zo+vN^_aYiDiK{5 zl)@zX_R)=@*vFvJkcCtqoIi}G?a}0&4qr>5&MJ`YlIUs=!?aiZEeqr)ZZ0%%u9*2j zgMB>l6=jh?i=0XD2Tf1I)Q{Y>6RtTgiK+rn4}+9*K30X3uZr?Wh^8-b*H8V?i5J!D zq#D(DSu;MyT|apv)(BScjj6uIX{1>ki8b!{_IGO78pSM|1lxg6ex}e(H|g93m54Sb zgJ6?H899$8w~0&}&}ocCnnd5;@OKy0Fv{!z{MTO5Nr=3vpIm=l3D5Lk6JzV&q%_7@ zriVvaW*E}Pc9G-4+S|5&)^|i%r;}*gw5bsm86Tt0)@aKNIxeuvpuR>4^xR_fV;b=( z?#7w+p|cJVZ+)!!EOQmSOtP1F8Kphvu9vhM>2ViSqna7d=o_iKW)$^9*)VY`McXt6 zbuk!M`@_+TIzmOMXd{eXW5WDK31#9sR0oe>stHX0umTG?3uM*U5Ep&h%?0 z8HS8+Z+@C>$gI}cg<*t?#H3?j!4VQ|3=xSO^<}_-l+~h zw`wG%qBs&^nW=+%1EMT5LC^RBdu!BD5qzq}7rGl}Jb&GS^|{%S^MKCgwdAsWvmEsO zu%~f`t*d_ew=P;qUgvpnrDv5Qd(J9Fz)qv+Rh>BM&rhadW|+r-2By0x2Dd>ED-$Y8 zqfTsmRf%c2te5eVmuc=yHa}qf_MOUYr1DkRhiEoq{rKqTvZ-MXNqi=h)ZpyeNOg^b zuf{V9Ct*1`YuO;@f&Rr+KjZ5QY6+QV6eD_Fc##z6L2g@S$>}!yf%y{VLG+YTbk`-F)Z$(tz(p_fdsoA3OJ8BuoYZG(h^tX9&Vm=rbJ0mZ40^jSt7Ci`r|rWw z+h7NuCfKG-i^bXViPFJ8MU-?{`H*nSOpS1hEKi)Xr?P-{`|oArvUylM5)dp(hu=rj zlS;Ae&bk@fFYyZ>xeVUxZ3fQfu(?7ret)XTKA1R(Yl)L(vmE;7hprgqh%f17zUQQ! zcIup3a?)v)_=b~;F}+hN0;vkCa(t3h7cE}~YEOLdPqkd64?edAm(Y;I; zOn1YzJDPpr+>)Q4d7jQy?MkxKYJBfH+)5WdmIcJas`!Bb^SqbPPED9aHoaX4Hp`?= z>aaK1?m4aWt1gB)`tCZ3WRp(aFg}aDb$guK!&!NDc?yfjb*u78ZYG8E;5X(j`dRN> z(9Sq`Ry{TJ6fdddgmQcb>ZK$4iE(Z@hH(^cs0*;YOFR^AA(&Yco! zHSy~>Y8_3&&2ospMV?}aMfT1Ri=41vi`Kq?WqM%pXS#yk zBxw>|nGd9K_rZO6rS}q@1woeqxDQ16FuV<$40+XHzTWGkl}t}Up2wA9d(eIbY}o&T zZq~2PhIvn1<`*vZG%uZWNl;3fR-FYnq7RdvL1$yClVL7#Hp-piWRUaP1)a{LG=u&D+QG{J?Z^`j`u1awO*K$ZNT_Ip_Z#nUU3b>3ia427CKL1V%TmX>{tbTdU-;Pp zXTw}?XQTXN7vuc$%lv{CSChgvSJR?8_)wv{s5l-r6##k)kVcW#ctu!z`iiJz*%eXo zGe4Sc6-SkU!&&{kt2W>3_yaMDA ziAo;>2oTqD6O|}k7M9JwB&vAO&8%$B6@aU_Y!17>BrKnYK1b12RIU!c;$IP!t^lk- zT|cAFa|ojWWoV-jVL2ci@%_-(YY6#};atZ@JLQ~hTL^voeG<8dl3MJ!%F@im**Pg^ zvl?>IqG8fyam5OhM_r}$2!HZ4FL}^ITtW`p_YBh4SZ^w1G zth1(jnw2Pe16;)wi?52y7Q;>!yCLpjR=SwO!PgfvU^t|)ypT5+Rw_zxqRK^=Mddu` z;LA&bk}_w0QNcySg7;4wmCbTAEFq0}A8#V)uf-aoYk4H;To!ecXb&3Kl6{6Xa+gG9 zlR?LWupL!*QHcq3{TOugGIaGhY(t2CkaXHdP6$1>!_!VZ(5YJ~=PWFL1a#Sg&QC$( z34{^2FLV=?*8!SvUk`jGLWau%q`HaA6Z;?u_bF0*Spjh6h@)It6Uwl1MW`zR_oo40 z0ak%`ZH#@hd`(m2d<5wd`8C1T+m=R+dY+t(&z@E#WVd1#Id4>?bit@_oio3<2J@n9 z_~2WYM3qXH#g&ULn!yHOJIq#?4Z*e+BTW*5K89ChX|ORxce65yeR;w5U{^~17Wp%R zEXRNT?{?(R$^^syBds&0LN3d$n-v`QGcWJ}xcdV9%=0B77iV}WDdX=U3-OGgi zcsHDfNj|Hc(R)BSwez@Uj>}oYVv(bHv)mbzD$F0p_uO+l{IUM2!72&Aos@8sZ!pAo z>bl!`*_@&T=hy1&@k~uzN*ql})~5Y9YdTp{m;@tI7+OGCJrj94EsbWSrozsQR{ zyfgZRAk3z)#W43kAjW3O6>tQV|KIcNNs4qu7=o{2g;nn zIQ6)l*+%5fFfSa4wjh)k>p#7A4Yyyo}OQ zy7}K&b%d_^@^|f{j+obxUv0YO zoJ5sEAG5+R_$r+!fS*$a?))5jSS6Y6UYv5{ka}+9DT9)KUN9}6c}l;SQ1i97btd3W z^m@ORt;IKodew@_4Xr|nd(eedgg#PB>fkpM$rF1X;Up*~?q)@k&KQ-N9Mdk?w@)Rb zX7{2bdPXyiV&9+oSxk(bz~*8w7q!@F*(SG7ggwGTqg1O;K@Wt|p zvj2g43aO7-0llD?MRzSur8|`}+Yf3MxSud6U3uE1a@q;QGD1!K?&)V#w)>Cf_*LYbutwpyLAl_lcHyo)syXG`7p2joOVX&jNiO=v!U^jiVQbZxpS^xoTrhm!#q8`EmdQvlsZdsI0w<+Z` zAJ8mvIi_E_@~lb4%+q?s#PiWRJLh+=+T0DCqdtxO!c%6A3XT@d^6tyZ$z{7vQf8Bh z@o!@G1#Xx3=ohNVK6R`=Oe?1!*Dtj{q*Ziehe~ec=0%zG056kXGR~9O0@L3_*#!Fi zZg)}X_9Ldv3y#3{=ySjRA$>n5v#U0_cs_cXoEKK>c#4Z%CyLME>S4Zc#k7DP)yRe) zWY8^&IW2qCi@cBMmA-t+xMGpFU8US5*a}D6|3XM@BFSN$GIG?g!s?Jt>7hfqWp5uh ztS~qysG5=R8YNyU8YOd@8c`al5#hY!ZR{71MNaH_Bc8qy%FiO$PbJ>g<&#btSE@kv zYxb%ad2CV2ZIs%57VJJ>YWEY|7c!gh5*J-NE37g6L`3Db2s-WwU3*v-5ije)Nf(4w z%dwA}>&uuH;w-9|3g6Q}n=c&DDn7h}SC9qScW;3Xj%eiISz$q+emPxodLE13xx8FB zv<_zb#Tm}Ril@?+)pfzi`B$(&D&LmHJte%7-tCs;Bv`sGpSZYc~meclc*a^u&4MZAeMn zn@w`AR`m}!npV#~VO*th)SyCqSg-uW{o19!?NTrD+M-fW#M<15ws)&$)6;tS)D1e| z^ug(OqV3att7dpUD=MYfBc%s5@+rn*`rD#hx?VBAW3x(O-VU`AuiaYZ+xF{Jd~i^|>S=)0 zL4z9OqlQ%)$Bb(fPw;CVIb~Wq`?RoO#(A^4DVMG46|O(tG3mn7RQ}vwZpc;sw^EMo zER;)mty=EPs$Thkr@Q67mbEB2iW{e#5;o2_VN&}LtLLy`jov~1YTNy~mH*nSUA`7@ z75MMmm$l06HEz6ZeYN8J-yzI_j_8-$Zc!<$#2lNt3QMSy34C9#knUH{r`wcsnJ-BB zUYysnL8+i=lS*OnHeONUcC`}Uof@U*cWIU#fE+gN(XMdVr(OQ_UhT5~AY|~(UhRsX zcWahy-K|l2Y=?S@+qNY|5ojw9^)&p3`qo39n-p{Do+WwoB-(T_Es^M!$(}tQzsq{= zz_X1_=S9^Ew&?c|`qXo`Ez60vd)fL9Sk#cMZxoVK!a6mK1IO_Uu}3N!PDaCr$k!*s zo5Ru4hO3+D1JC~H1%5F-rc+3F@$%?K=xyDiJo@XReERF+g06Lnh0VVy71eA|E-Kxq zT9Un)SCX`aR}!^Ftt@bxTB#Snb-Q}mg>4!YXSQopoQB<;fNdP#sabv!xYIi{%Fk|B zFLl|fR_3*3Nof$u$8S_A&RMTqREfG<)-KGy@#DN)iaOg5=~sTXl=zZOhRt`Rv;BIN zIDcCyzfY&)+jWZzdJbq{e;9I;*dOzM#4igN-zD_4ei1#aRY>=$<lb1b?Wwth&fKvJKR3C3C>>&u{{ew)8@eGR8WSseJf z0b6psD5}yrV_heASk!Pwa+I~#yAeN+Z_K;f6v>|w)SG~APo@_vOML`l{Cb94Si)Pbu=oW$MuToVeKNiU!#y>4oxwqrrT5t=oXcH zHg}>M6!Y1*0XxX2zl{jYPNaERnXM>`xiH;_I`^s<(jOklp}#5?HN#fFJk2kgd`Q1y zLUguYzlIz!s-3e_v*Ij#j2_j&en7t*rE+2NU^ot#oX~etCIc7KQi&Wc@Js1=_{lkA zgbWbB2%HnrT?A#YbJm9pmf=7s_v%)CbeLcNz+Qt}uhUxXV#fR|?|^@@23Uu0o`Ir`;3N>WGvymkItLoOcpX}Bh~Ro;BgKk4$l-GyJ%MRzYl46EiJHmp+p4QtPjwQl{L8oDBw9MY>m*=n6FYULpg3kv8Vosto4|M!x?U1%o@ zd+N{aGVPeQgWq-E*giK7G~l;x&kL(?=Cxu5Y~f$d!pdBn=cE6Nfc;7O!-69En`(K^ zF5Q~dZdUbjyY)wZF1byop6u4IU$j}h%5}q%%A}pTwJXj(N#(YUVVyvi1&~deb!4|* zo!$nus=)6S6w|$$B@}1h{wL&%@we!_p!#(uv&xyL1Pz3p-{9=(ehR5=DA}S<$u5)5 z+2;h+Z$UrBF7Sc>6}Tv9-3?=(;7T&&cL1{16+w_6}bGQ3g z#?GS3GW7c&95ij2vqk>~z72WtzO;SLPw87iat7z~oWzxL90j%SISH#u?q~gQw4XF8 zr)w2q`->{NHfYqI-J@TpzDcVd`~IWPVRqmhXXKr`UZd{t*9$9d>`*VGr%=~Vi%aQu ziz{0wKJerrvJvCJLDSZ`SP#4nKFbfZ?o=X(tsW})xDrLHz;H{%`umf0J%oA&;^q@m?k)yivlr|aA$apn0l z{EBlwDpp(vzIDBJv*$*gX8toIlB_f68MR*ae#sWSX0peyY1#(u#`nGlO+TyFQ0x;G zIEkv9;jd@!7dc-PR(*IzRQt$5tsBJ9Z1jGFv#t9jWc}iK%L)RW%mB;-Ji-BxP1@GH*Ym)`~Iw`e$gedR1U7@RgYW{*Dczr*Zlf6gSLVlM(z2#`R)JO zYuqwr55E=lk9=-{*}!_xu#4X&w^^^%3U&K#2aS99ZB9o_n=G;a@DR@8KMXkylKXh% zCYyI8Ik7yWrODPYOne@mZ_V6mRZGNz|1H}e&PRWba|n0Z2JDH<*F2Bk(dt;Tli#s% z7r&zlkPSP25A)O6yN%oM9R5~kFcZi=lXkM-w0$nh?%l=jY)1I?Zj+A5fI%c45x0_6 zc-LyLNjo2TJOM24K9pBEh_jCW#uz%BEIAyt@+8|0JIDdkwntFz2eeg*FblN5yW6CF z&NhP^B>A5}*!2su| z^?@@uDrnR@E@%MY-n6kl?HJ1^tk*jus53YLJkG%CpAa7#587sBw(B*CH|Vr{4g1f6E!Dx6cJAf3Y8DDz$XL%a{HD`N zHt4oKvR$cc*nCtUC?T~$GG+6X8pF-^*Swa z>$O{++icJ=^lIbLCX)fz9w$34Wt0y>Blb;2h9$$QLjz&2eoETR>yB@wG=wPE#8iT=C2ml(*G(q6=4j~UZ>qgB9`M@ z(JSz6I`dJ^LE>EQ2E!)uu@Z$ZwkoaFY<2irxvBJ%1>i}wmL4{`nP-moyBOYpu6>W2 zHmo=+$fx)^xCcyxUZ#fHB_~a0IexnJC#adq#bf+5A?mI{K}0 z9sOiM1O0eGdCF^uLMBngQ!#|o=kGgAb%kDWjFg~!?&*<)5tJU_lgGM_!DXvpE zDQcLDd4qzZNd>94jvtk-Er#u6k7j!FMoPa?lGqLXaA8Z=r^@Y_U#oQ`IPf3U4!=(n z+jBlz)Y|mng612rG5XoU21&VJmef(qS?FgA>gWdxS~|Yf==yr2VYk9}TEp*2uGQ-% z`vo2HKWcZa{tRt>IIn?j)n>_T8>A7xSvA@ka)W*+*<#o=`Dg9U6<;ptxbo4$miA8<*3-?9)o~N4{D!tY zLHCvD^MA$qL2a9$OCHZe|FnG>|K26)AdxGx*)xKNkD4^Dfvn=OM(PF7kpOFE%E1wS zBi*UrNY|=0Vy@gsKU~lRn{RE09j1My)^+fEt?s|C)$LK*W_n}Ndczy!xOpczZ_^>S z(XeOwTD>0SAGLcdzSr!2bzks0oj+6Vi2rzTTP5tH^ZohF^z{du=qE}Y%|B>$ zzxwigO1?1~JYQXlXTBQ@I;VZ7+5PdyitSa*k9O%v=^Kgu@!%PsKd55tQfx2(NvGT3 zTa9i4o?iS!slDgJMePk=F6lhypxyP@dV}uiKWlZ8{f~8FOc?H+w*)*_awR`%brXzd zGg%$z10vwxJ)bRVq+4_v=`quZqZ>T-qEAb~dj72gCav>4m*$b9;#)r}xtIIvyG0xQ z`)A~caWmOx+BOZcvd6l>8T&l#m?Oal1_RRQexpW;XG!#1)n@wdMa}g61#P__E^e>? zOrUA&LE9{ZqWYkUSmW7js$FEDiC0&j6Y1?WS()OfR{}!PCv%QE% zlAVGcg?0Kp5C5#&tp|I53byt+eCW`ZYF&Y_v9$*UZ4dsUhj(GEVhMfJnS86+P1fmk zEkv8U-(S?;{<&hagf>PqqkSm-SocZzVPQY?@zrnEQ zMi=>6w`V@{Thx_``g^}nYNpux8q|J2En}dW%M0CgKu>N5O2iB2|l28*ra(a`i_zV{3g1~u$gYsX{J9eX`!Dfw$cw4w$b+& zws-wosj~ojzYM$h408c9^lNjESy8#&!d}vV@36K$?oX<5R$weNHLnOE^ppP*`r3|u zzu1F%9PQfWHW_wK+hN=`td<3sPId57lX?peKC#v%2t4eu>zqj+Xae^i4HENq33 zv}3N8IJ!Tv6gCVaDylLeE@CIjH#%Y;95sX~T7e4^Z$k2h*;biB6xpw~yM}MBV)wG)&H0zMt zW77H1ZlksrzEExrf}XqITZr*~acA{ss$F5|Z?~a;es-;Hw;J{ZC;xj1C23ETkmRRR zNS(~@Y22x-Yv4m2w)oa1zIVy4i#DAEenx)P@18B0?_c2}h8=*QiB8$ES;1 z>AUmW=?6&rT(!&R8;$NS;0wYnMx8SgUuq{OY`Y2F^ai2(pC+{{LSdWOD}o>FG3}H? zK3(|E=8qLSOW%cWeWlV0Kalbz;cW!^7=MRNo4aB6A?Uka++))5h@(Y~+-^bJpLQ=Z z*B`4r(q+M9JHMM85VlXob07WhG`e2J*!~ab$LKeM?%8MT>g4ugd>?Clcb+eaY&Gg2 zhlQ>3tY1Z+f9W0cwf{z+%-Ki3jWb)GU|_blS+|8^oS~4#f4)%bCYy~qr-6m9bxMLD{UTL8o7#q}WmR z_PjRw{Sw$6zm;O$4x4MG==b_VE-s6gjmxGpJeS7dxsb!NaIbMI);X<|_37A)n(>u- z55YLF27cJ{i)Jgvm;o9jG~u3=*#y7Aek}b6^P_iQ%kM5|Z~sWKGY9ot20uUisMYl} z))P9LjJoDruxgV3#h@E!in_=aqwYyR>vRdR{yB`Xq=uFK663)({Q-Jm^Bn+R%ynMe z&F`3xJ_&t3&P0v!t(E)H7XL_^tE^HW&*Ann?ygT_{zcAPb;w~ose--6&oDPmd23$# zjZZMYz_Td2&*b-o{b=tiRrtW7j+&ozdPLa2A?U|dum(zJH0|XNPY)}{0B7Rp7X3Er zpwUJ@S7N@@#>NKb51p7tm4UxV?0-38jQ9y-?aL0@-L{xtYGPkW@n@ax$G=wVI*WV_ z%=bY@?@pt(Y{Q)`ma7#!8;-}m7ss#%IsL` zlcUqb>fiupgecA!(VsQZudB9E?D=B-%<6Ar^Q;^1F6?N-0oh z1%N6%H#zaEcKc%o1Rb+am^Waa+Da<1uO=(YKjU||f4&p>a`UO0_qxc}m`m?6?NV5$ z*S!!nzw~SM?jJu@=?Z*rQ78JkcKY!msf{pu;cOmff~YJoJi8w$olBD~BOB++bGYH| z8IIBLKK$@=)lR?7hMhBi&|>T0ZX1jV4PU{AhnADAk4uvcS)B7_=GQoT4WDSIuxecP+ZItZmYj6`hiOwmZ?qpJnf!pKx~0!i$eJ zk?Vh}Av;aGCa*W>dIb9@`q)ES4SWCkb6(elkCeL7-dWh$^5(n_HYb4YS%2F>ck(;w zZj(-mbD*O@hfJDmT(%6ukCY~xZ=`sKgpMzH9TdJ<&-Q=VJ`l#L8JNp^v9&SI>&eg| zThG|r-rdJ9<5>dyjwYOg^~SpkZvxbuteX|K8(^-Zb>)`tCj4pJch9zmlkG=%u5;9= zLJl^eh`Fl;)^;l}mwguJ7v9Emqwl|1(tQAZy9aDN@x4V|m2WNR>U?8fCw*&vC&ikO zexueQvH9)Bu$^1lysUlwe(`m>o%Hp2U6hSeZ{fVr7ivA^JB{wQ-kjfg!$ET_zB*=F z8{x0s@cVZ#$JaV4Zl3(XTuK~Y>Lu)V)`pY+pSa)G-iONjRh+GUPM2bDuuJ_1&92=a zEbc6RbADG3fW85nVc|OqIsJ`heWB+Xd{?O#K*t8~nVa$s zha0ZGvF78-4wrv04(AD|%p7R#OYHmfySMtgKgXZp^}(LOG~n6UQBgBFZPqAd)bh~%i?6qu()iRZ2qBmE-#mdyXQg^3mY&5ybL?r z2iuC>YTQ%5#ki*zK<{+`tvCzUP2XP7)r>X%a;)#kXS^Qrt$O$Sm;?1d>${9QO|bX*;9+6Qr1f}i6|?gCpZ0zq&T+=;i&glZe#=wG$pyP|JUb%f zn6Oy^d*pL5{xe^A9=@;vc5)r|QV3|jSN(w5Hr{EVuRYR5|GT7n!|EB7orNIS(^daa zu`Bn3#a%sHjCx8iPWXYJt=o*dUPM1{gy+By9TB!DTwhj0oUH0d&#J9BAN&9F9mMh4 z&i`8e8rxWMRE?6z7c0m+vnk#yY>>xu{FzuM@OBt?*}-Ps+iKLkcZ+ei-)7^Uyv;^8 znl>5TxB;M>jc?FR02ayuhhuq$i_4bd(z)`IGBR~@?MTY>;kmpl+z8y;3%lvZO5M@F z>2*JhaR6uZ+9rLc(fKOY0H5LeM9VPWTY`DtEJyQtd3yR|;=Medlvri|Y4iUN`ug$s zYaRMP>WMcC|8kU^G;b$oZCl6@LCXU;-!cblLgo)v7#m(hpZX*0@)RHt_LsHMsJ9x> zzQL&X27t-}@cs9)ah8X>=R&R=yO+fciQm9|JD>(_XM={|uhhC7aR&5z*!qI?dR?Hq zi(Is7Rq%hj^?|6TN=eY8_#HH78$#O%_U!-c=f`6c|6lX6Gym<&LUHClLh|@H`tL!c z>4T%>qGhE#d;bMK@eu1*v3?Y9GwNOipLlb#QP20V$K8PQ03X}b_K z?U<-VeuwaeWDd{P{k3+nq}e|F&wa~3`}sRw*Rgk(TJ57q3)T+YRsBpDd1opmzDslD z&WIZnFjh?4Z`w8oYl(#zFYwK{P6N!J%wea?V6RVO>|kq)S2i2=ytB!$=RLrOn~l0Z zU~$;>+bj+60?UgskD{yv>M&&cRXCTk5cBrAhtY;3zWLy3TPn92&o`=G`rp`}_@nw+ zPM2hk1F`SFk%<(LVe$BA5pj^o#zjAo;#sonHHqCg5W)*!k%4O_qH+#sf=&Rx|sg&dwIjm+&Mv9EYPCmg-hTnDrYa|B51 z<7y=i%;+SS1N+a_N*ww%WzXapiC>k&v9+u)T9A36xnc8nA(1pVQlMDL|05!Rd~Nrd zGIs>N?lykm2<^(4ybP7-qh$R{CS~e?tI1%Ie+0b3UBt7hCl9LMPU4)Kf21^MD*n-4 zspIzj_%rK03XFCM zp3h@wB4;lNBx8;QzlJA4Op@X!V}KxP3}eq@|B1Xk{vlxPOYjbB*gcWA$3FzbL5k-F z?LIanV>R<5d185N7sw}T(Tw$QnYHJD^6SvBJ1e9%S(_2%FjDdlm_h+}O`4n1h&99y~;dDtaV)$aYQxyORi4(ipqr z;ZJ%=s_nBlp^CCp2*F|(3hl2B3^yLYgcfPnB-8%#br1taBA0=cs2q7k zn@E5qvFnf8pSsg_t1a>E2=!74Fh1&ben#q!y+$f_{71g#@H;bVkG;OA=EQ3TwI|ms ztv&hb^MLnjPrdqG?WtEb)t-KJU)6!XpD5e-*e{ib*37Ed|Bw4t4tFZY`>MPc-^Iqc zmg331q+;t=q;&1Cq~_qeQ)`dEz8HEohkjp%e%IEXe#H?GTzmTE%-S{4iw0y@(TC&dmT(jqw3YAAz-nstSHyn)eNEK+juVi|UKSQaqNF^;wHKcnczK3+| zO;WY{-;-*Oz41t&zTbzQj{%~f*9t%UyQ>DKx zbErP@;$yYP-&jz+_aphLL+?tyNm^;1en)Nmzp)|op;e+xQnvm_Nk3n6`0eSnC)Nni zuYW1g`I(n%q3_=D>s-c0(DzsDSq=T$`qZ9UGrbbu$-7o zT?1R9u**8o8UQ=}27Q#M=E&PK+$K>{{M%2`vEdK+*3a$o_q&yYOe#bf1U^G5w|*&C zBkA8?eHwB^-~Ms|^xbnuIv?c!FVnJ3kD~uy{$0UWhNK?ziQD3H|Ffj}=)Y!^Zg_NU z$uBmoRR^9$KlF-hUvvYs7lDV9=(nB$PxC6bej!)0{{vDj$|9A2+JQvwHP-kI@Vy_C z@-1I8y)S~VzXF+gK;I1$sdKKbniK!TywA3|eA`OVkg;XE;$L!J#%eJE* z>8d{b+)&-i+5w9Zc3%6x^_xPM`Ogvenk?MUPlCmE* z5XfX+pWd%SR;`?_CO&+HRvmbTmi%HHUv=>Ld6m%Pm}r%i_x?WJuV1>WWSw1i_0bn@ zrF&UhXoDU2qd#~JYnBD2KW<=ioBvne(_`PdD+{nE^_TuiYL2`$3$kGSygPK=GV%JB z8TTb)0M>omo}i__E!~f8IZ}1beq8#8?U0(IFQLz0woRh@W8>1jtR1w1XHUtvaOBO| z&F-s6>AC0dUfS>f9l&whzpO8eGhPkd*BpJ5R3CU>K{Bs9{mLPXk!(&UE1SC)KZSMQ z`lUT(TONC{Z1ba#H^!bZ@=$f;SyJct#^lnCkNzy_^Rb2)GTz?~-E6LSl+6>X4}742 z@sCtmj-95l(*B3%WAnSSFOjxTAz||%^!5LS-ZP;0JDbao%WkmlJA!rJFSaEWyZ@qH zv1jb_{_0bIA)Qg1<;yld_92_=jbXeWk1g~<7Fm$V=QUV2vi+^H<8S`&%n#A0RUdte zRPFy@l4Q^3^eax#d)x2k^PG+Julwx&kG-#et15Zl9}rzOT;1=sL6>xwLD;docC6jq z0Ty5(AqonJC}3csC?W(WqZHPH3&2rtI;;f@xYyO*uLpGa zKcCshry^GHoFBoz=YpS;`>~RA|15d1=96=uQ-*`C@cu$m>tcasF4%oAD%|(C5zPDa zLf;Xe%Jv`h51slNxLOFDbzz>Eg7V;9=%(cS8q1ks6H!H>EMgs=sRZ{z_JZBXJ@^lL ze&#sy=)Z98vnhdjJP_{vH;+^Qe-Qn^xLs0Jt~yr7#`S1INO(zi%3C|CnwxuxnEs(1S-J zZun9;STEe+yzriRWXk83zY5lYXyDL_5x7tmo@IXhdjj|^bC~0BZ)9F4kb5NfZwdf^ zaU7iq=e`kS{+}wo>D+;KsPXwvhdo%XyA9lv8Zs((TR$Ena3W?wA74n1RN!(f+(-Tf z)=@;W`bwWAz#gA|bS5g;zl@w?bb+f)fFMBNm&dGwh2A6H!rH$w&%+)S>d+dU|L|@A zVjP^LSl~VEZh_bEFxHV-2fm;VghMCbRG)TWNk;~7{MFq%2HUg9bDMx=C~yA?8CuYS zPKAdS$>kkb-k|{kmUk#TxTHgV;L;9x5U(w7BtQSavJM2bb?f&FZKc)8+P6-Yd2II2 ztYcHJ!y4X~d93kkDeK&1#6G>S1MF3IGmlR8WgJ^1pBuPF^4N`xD^b=~)+byNPV)~e zl>s0I{O%JCz6aXWHSBYg)2&}1_Tiau4|i5)cJQ3u?4Y^!0K2aS!Siex{u5`>4~)6Z zJUsa~=HW?Fc`NKy2z&hza8LH1{`7#cFF~i-poh&@ql<{!-i(6_I&*;Y&-4G}G~#Du z-XENYSOE*aV;`Ki7Ld?$wLdLjBw~b2`Y~^t zT@D@8KS|S>vPO=NnSf7z+WHc z{*WBJei3U#UFm&-n|U^Q$1;%_1R zBKrZh-x9?3UM0s4STqwr1K_U_EZ=z;?8%3{T%W?du(nG(Bg3;m`awABZ?StwbDsdZ zEdDC>5#yN2-oI!bYu}2F?EQm^O!Hsr(g5HSOm$g=&G{sVrH1tI<#!SP>;8M|iU zTxYwN^uW=7()=ag^Cjnx!A9-xgh(GoGaWN#4>I?0w7oR5IZm_)okJyoP&`T)#z# zvbI8Q}4MWP=dw|n+ zpjRCkeOBD$>{_eN^<9jrU@en+jcdc2Pku9(vuh3FxI1>?>{;c{@m^UCz#^=w38{2z z!;jg|D$L%!9OrKsS_ZZqUf?C=o*&G8*2(GL<~j9`pt(%K93OER#N(~iiM0Dz{YaIe z8f+2>w)u&(do?Qj1ix?0^>9Gkty|>4&lbV_=L7J^!P-yL&+fIDwQ~v1a~zaQ^B$!R zkUTFuN1{THf2{KyhOk*~F!!O|*QJ*N*@ej;F z91q7n98ZVW0L<|Kkg&NR^(j#8#nV(?Q~gnGNJzDz^6Ip8#0=-TINx#bJ!a61ALx6> zG~k4B(h4QPw|EPjhPf3wjtBW1>*_^~QK#Q}I#Xj)b?c`aYulW%`u){U*X`pSaBN$0 z9NtU!g?Fi2X>aj%1$y~lcL&6ATi*@BND)Vbr>`8I>oLu73eI0YEMOjdKag>%PXj*a zo)Zvb&y?Tt*9=W$x-0;HTL1Oy)gEN*0H~!4^TBE@7n|qz4@ny^M9;8b8o|$ZxV02vqHPkuNk%gyD4*b zZv39-v9^Kk&G7;5-em}Py@R;hH;v(LcS;1LwjVgZU^*<#EL=4)*5=-I{HOWbTel6B!3KBJQ5m4fJo!2MXc4IozEa5NF4xKe=0- zqPbgLaJ#~`Ets)fFbac*DwHQOFe zw>hpGdhm9_KA;8PLFV}^N8GbxWw={6&*N^{QUU;u+85{xXJOjXe;o^^gYESS>i9p) zYZCls`~#W7g%gf2mMs9?wzfO{nrV+R?lz~z?43@sT(|XgIFL5~$@?5U*YyberYF~V z%RQdcc3cORW;)MBY}aK!70#Uy$6CDx^PDC3Q&(?EV~USWm5b+z$EkAhkSeD_No6EYQn{qM z4eN28w>|H znadcn7PdeAT4fWrVz`D(sUC6>arQ26$VUx7+#Q?Ap8rSQhMlK)jvlyOV!bD3&0C9U zGiIGCdwNuswS8_KeaU-X*=qd|efI3#%-JhIN6+@DXG`s~!7ZGXIDAxC4FK?9;3{ z4wwh^+ohf@wa>a;h1`uhZ3JsQ5nsYP0_+`5h~~Yv1JA)@D{n2~r2T?1Wf`W=nYWz& zFWmQqca$j~Cn0P7QpDZm^et`j?Az>lu=iWLyIt$rB0H_~bYt(_D97FET!$0F3+(q0 zcZ1s>{54+T{58At0XgjvywzU0jLA!jm~)m+V9suMtz)fNjo9lp{EzJ}4P$9<=_BamC-J#As?y7Bn!TPT! zlwF$4ZI%bPB7KYVL;7rrLuqx|CXXJ+!Skn*72b#r_joBz;GB=RtG#8pD}BD_uH5?_ z#J}UNfN-Tx-S~=q-*K1ue#e6{4%Fi<-}fB{@<=Fbv)otIj^wqXj&N-8afvLH43grc zY!%2_GcISj-?!YgJ9}^)w%_8e-)_X+u&q`{N>{GqHU#CWT!$SoT*sa2yk&m!B3*nN z>H<7)R>2sJ$w0WGWRu8`h$nG=gq+pkr#W?iV=_)#_<^>(RX*Rd*L!q;_k?P>;ji#P zyp`U6@|XJh@t62T0wP+BrOjy5oH{KXTfEPu{t?`HyP}y>R;IF+Y*1k>Zg{_gy<|ON zFJ9jZ>b&MH*nN#J-kutp%A-Omzb#>N`f5&{mda4K&q%Ow0B?m)ciyT!Li=aH{#dYN zAL1|ax8pDNXY!Z$wfH4_snhT5g&S&poSOga1&)X{Z=D`v)G{V-zIVIU zwN-Xn?9b*e+CQjhu`eota{zaVAIg{$iuelx*6{b&cY9CT&?|QZ$zvaj>gQtR&jXq_BEnoW4cgW)R&uT zBQ2jQZ-y?lcBtQ%v~+X&6xMmqUl_1~HszEIcYYue%sYq#vxB}D%nv-pUvL1oX9yMs zV(w&5%=~NhUD$7Z&zbAeaQ;u-irAA}ESSUB^7wQ7uwX%8yVkjt_6q0CJJgxCAP^PJ z4nq9d!AgR;hmr;J4q*tfFeGvDbp3p)oC?LuskpRIykDw46*ksJyj}fz!uCO!I|1xJ zY~6Li+7Nl}O!$4x`uqRM+rj=@t(ij|1^ih7l69o|ZgM;^zQo&5x`>D3qyOViJEkO<8v3+oYA9~^n06fO?}u6TTVe#$kAKG<<=4>uBX=XtU%PsYl-hEUyi<;k;g37C4Ay{$ya|W8@g^K>V1M5D00gk$jrM&im~?oWn4aP~ zONvwaQ(+5vsFjs!PlX@7AF$`xBEn65e(Kot_(;LOr<99lgvypI4nn0X0^wVda6_;b z5N+@gFDG$HA8B=@<%{>xwmO0-$B|&_@jqZayCwKHR0q(&{!oShCV=aLX`w&yr-q6P z(9C$-pkx|wm#E1Hr@^F&jp|04h>XiTYBaT{yy>F(7AQCdk?nv z2Ac=`C+uF!K{)32^~0P#d$zE&Hp2h8ms7_FxWf)1?yw+5wuM)wU<9#$`2Wv75K=TI z{8;hm3;4eTo^23jTX>%+^QFmhMjWYY{~;lWJL1S6Y_r{If}tn>Q+l`5hJw-O&lHWi zaHe?VMO+8})Jv0cDzAQ6zio5UR3GAXsl583c%Axjs&2h}!GPnKW4iCLU}Sg~{@}WM zK;95|*8TUH|8Y$BCJF|D{i(K8UsOotlaR`5Dim)c9;ez#%A?AtP`pn4I8~>mp?E)H zZNc^t{J$@S7yoq$|923Diw2*=9An>Hp8W}RK%M!|>wgLf{<-o!$JqbAz#i=XchrAK z_ZHgmpNmnvzoNp6M*s(35Jf{_jtvLdKb8zbBQe+LKq=Sa_#mEjefyt5#Sf z!tZwiY=8OVjr+0W|6Kk2eKATfBI-=>u&cNZhC-S`{W2;|m6MRls~<`$quP@CLoQ>k z-XYAlgt;i*o~k3Q4^mfJouOAS&-e)D86928(>?^hhxg%KSC0J|RJOfbma7+hl5cgY z?wIxaY;0_CS(}PWlT*B1bL)t=X-=H#w|-s7FB%aQQ8fJW(c&T3zz$ykL$BeYfl-*N z6Z9TXU1SIA0OYk<7U+X-aSHSFLJpT+z%p#Ru-a3=GWpEuA+ecxZZU}>C9D0#waJ0I3;I)q+ z%XM7T=REjT@Ke71rJs1c&(+$W4*wq^PjN4Tv9|I}PQX~#Kf-v;(>GfAT&UUpEAS4VLf? zLM7;0uP?$2k%f|{v3O$~f=oqyFM>?LH@ZO>$?JccjNhCtK6;(f6H`&C_iA|eJ4lv0He8uE z^x8Pykm$*Pe|bZ$0mMTR2MoSmlMi8ST)ZCDuKD%(L!u{f?5{3mnnlGiEUu|Dt#2Tf z?cM*eEThjeO)mKJ249=V8(Py}tz7l{uSpNBJ3fEN^@*H*S3Q`fQFj=Y*SgRxuhiO~ zWfhG8`b@LSPhtFdpx-2s&d^uAe(G{jcMPdq5x#`|09Qk!Co;{#H?l0QK4ka1rB{V^ zB9{4;qipL-{`{fWCw%Cmd3v=?o|-X4@{I%At8zwOG~wCDr1R|VQ~=5WW%WXm*BDw~ z-~MhHx9`mgn${T_&GfPk-Ruftm|Q}1(5)M=(XR6UWbHGR{yPBZBy zmrNL@QML9b%?h8AXm} zXkS3I&hSi1`>Yq!@B*&UjcQBvSw9pnr{eWPs!jcTDlL>p%#Iac^S7Ll5tgiR=M*{p zW1e#D?qLz`HWG@LiN{G>Nonys@%V@OoPM`)fmRr=(D;%C_yEeazJi#42BJcPixUep z&hS`PH=2-#^eYK4hV5NksC^C>=w4V@s1=6jeP0NDpuplPqTAf*T%dX8A=CVtSpQP` zsiRx{I+QLA^Vxlcx>XkHUf59Z&kNZ+i|eRR=@=@|Ip;*vyC7j)X?=oK9tN8yvSI$S;QdeLfSB_v+Xt9sd;hb8X>$+fXoZ*O8eAHdZ+KZ~pFGQ(h(0V{ zE>|aFE0k3+`rg4TyH>~tZJqyj6}l z=$01~?EhtOA7^Vv;7pyUIa%5lYuD&puvLEVJ6$rhB2H!NT*M5U`z@Cb>_D@;g)=n5 z-{hFxRLn6I*&xK&3%%;N8)f#2@XFPX!c1bXkE}oGH&gTcogDL9J#$Q=YxT-d4nvtb zksEV#BR|Qw&DDc3FlHZj?XFI_@V*yg=#9D1uClppKWaVTK3gvezwH(2n%Xr8Ve=3F zM^CnKGy?vV-)dZVn5}=MRW@SuyNBOtUZ}{>zcMycPqe;}dH7cIB6_D2wKzi??C>#d z5BlU9U&C+J&!=abTsO&rF}XGWAB(^?6}|i=1ijUY+(~r)6n@uCU8?DWZ!XOQ+ZXhE zi0C7(+R|(vuxK`qFwOSiXT~F(Wpo{H$}qZak**%` zD$Dpf$VOyriJXt{JH0D7T{AKO$6%Q>(->j@Zw;c+8@+48UTH>_7xsg7qOE${5Z)f) z9J5;(WTm|`i2mzM_fVAH`(CX+ui)GPzekKfmXJ(?Yna|5JwB3MgmOOQ6b_FbNbCIs z(MDcEg`+Pj<=H(<&a-)fzXY<(@8DGR$QN%d?*H-H^lmL*WS*u0fAPPCp;!7hMx?4m z7G#**Zn2D+(Ekgy$QQ579&}4L5%vGZ_%?cNbXyn3rRP{bXmOvCc*?T8NAxI4*NvW! zH@=t2w7y?g7t?#_oo(WGsp^+*WtiN;`Co|de7lD)=%X*H(*KD<^rMmj$W%xBI0TismP=J%!i3A0d1fqnCO&rlzPxvEP~9ZIPVWeIMiJ z8kfso=-nKhs(Vw|Z<@(H^xERlug}ykKYM2md$l&|o@M=zj8XAIJKFi3eM-l4^GCJv zQ+m8KzK33#+*f|47L}1{dB4qLwo2xHU}O6SXK7PU{y?962IWmZ1#1%g|CfXAtj@8C zt!`DHZRC!O`J&e~oTPPqV?y_{$f?uehTK`jqP)>rvMD+@7bdGk@mlHwX?izslE$^* zyjcR-6w?Rj1t4?yn~q89S0i8@Xp=3ni2rI{seYyv?f16N)9=&G>dt%0{wcb*P_pjr zQ7Pby#3#Q5*I?uKxdZR6$N4|X&}W1q{4GWqR*5KUNQ_OkO)NdT-&6d#kz?}|ryJkF z@oHCN(yZb-rx-tIV1L5l3$q94wf!@>WbKW+&Ik}m!FwD?w(`-^SlQWd zNtkT>7(FwM)daZ{Uz*>GtT&d3>spzK+#)?{^r}shcH(-qu%C19>>lrZJ>pik^r0X2 zS+6HwKp7J*$!3nb^zFMz=f8b7F+%?B=qvJBlf&dQCq&3+jJqWNZc@1Xr^}C&&zX0; zQ;JpM`jp?UkSUk5*y7i*} z({5Q)&VKW5;syE4f6qznCu?H3eAd(p@)@IVbxG-yXx*)T>1HP(cS@^Ah<4>Dh^mHG9!%kmk(eUtKlU7Fnw*!In+ zYu~1iyCR!9=~At%4Dip?fsav~ebSGq_Hla8?cxny*vA<@vrEu_VIOalVwVhx_SJvF;$ znl>oT7-TgjazD3AFnD1XuMcUWi|%uqgu#hs@d@$9aklX$aVWv^8A`Nz_IrX^LQIn7 z(+MvJ#u}#C#Tlpee`=gMAlCRL#KrpoZVaFIPt;54{mA60;S)C)_j+RQ7rm0KQ;?u< zyi{3Z4P(($!&qY&J2|Cq()5@8pXxW@);?bUxqZAL$ZRN-xqqxs2H-`KJfb>alV_$*1}cxul%5t%urvNS`mP6LRip#L(|)-n;(9 zFiz`_Zdz!jl(xo?qu9E zNYuEepMatjZ=+ip57&S_8`KxqpR|SR4!)yt_x(+^`w{mH5|r-iJb`^gLoO-%KQw)Y zk_KeU-O_xx`L^1fN}`*1pPxJaqFZluXsY4p>QL*)1^rCk%dfqqL@_C<>902}O zh%=7E*H!N1-`0(@yQy{;q3$2<2~*tG51-g)qC#hkV9n6Dss7LhY|OZ?{SYTwB-POa zuE97);~u`L`N;8nmy76*ZXCL;^VII9>fNGbtK>R$#r1y*GC`fvn;H-I-8V`3^^RUV zJWs5;y2qQ6BLR3#Fi*sU&!+0Oru@F{6MR|aLHsR)XPUQk;t;!Uf<&3cIVbyt zM;0&9Q=4~kF}m?q(P|HmUsbu!yQ}l0)(>9veU6_P#o;R|_mg9co_CKiNJ96GpZy8x z)Tbs14Rj$saYy?xhJJEyYQ-*kVww8w17qp?5+YBGX&QQBmo0ZqD{kHu<$LT{@SWCh z@G;w@^iBy&?3>ah3HH6>oQcPu+QFH~C>7ne zdh<=RPU65zs*l4jt2`9k0Y6AEPZG)ra#u%bCM=EYaT~q(_q{CCId)e!7Q@*#L&!zC# zQ19mRCX$nIPGoJgUGJ14u<4{{1}{;pjdc4H?vi>xM@fC2{|@_F*xROJX^68-!B^BC zj<Eo*UV;rIS^mw#! z`p;MNMDK6Zx3}bU5@J|BM%Q#x&~1y?-(Jy99u%n>dkW-aUDtYwuW3BN=an8OL>s1c z13y53IUxW0CuYewMlT*iyz-*T{nZ;X@tL7vVF(`UQS$`V7PM5l1RN#L-%@jrNn!`$bGr-{fw| zFn=05QxP5?^-D#scV0qq)-Pwr_kLNL(EBBZuohIBgs`v0QR=bp&#T5qT{TFxyQGyk z@w{qW@OkCfmlsuI%dTq0;X8&&_zBdDw+6YP4F&N&#p6`}B##;+QZ2SRTs8j4RipG@ zqjX;g_k5CVE_q#MS|p-t`f2EH@3-Gv)=9C5P>**%r}QNGtl|^iW!;oHmwG)zQF^Jp z!j)s+g)2WP3|Dy?6{(ptJKE^w?<3LQ=-zO)#5qs5NrWe;f1!&S$>_T2n;$P|CeJ;m z6q|lk^Qn*--_%XOm(*jc&#S~{Ur>u@oKt*^?;9sK;FW3% zW0gI%e!1|%@E0-b^GLE)JVkFbf4in zCNJgy`pM_Z+%2Uf3se`xjU%44fnSP1J^82ku7hOjoTCQb6Aw4dPzGt3>A6ll@j!VWQ=}4_)d|WZ{?P-nFX^}>6{q+RSiD8ddiVR9;^Mdk1L3}|=$_@9e;!!9j)lE+GK9%g_yE#WTs(}@ zd7cugl>7>K@;IlT@pHKD8&qry_r_t(EbadU@EE<`T8&)MV-($|u+w?Hx7|-`rT06b zmbxHR<@r8ndo5HcDeZ)E66>@|az(gi3XalyiEo&^!ne)el-;p-LyOdYo^ebu`SqDz z=|SOoZ*;GiyplO@Abnrnl&;dsFPi70DD&J-0G-R`xpQHxlgE^v#U58oNRHG_Nr^Fg z1)LCG>T*N)5aT2XcuN4p6F`2-UCTGwx6EFbUDkhz!_k+xGMh(Pla5vT+&;(|L=+_22z@rq?Tf;O6yJ{nTgT{8KWBjY(`32jh%Ia1Fa` zoh4yCYkJPWbr6wj;REZ}Js(=V?)lg%y(jn_#9#G%1mR=r^q#QB2=l12xW2D@T+n%G za^4^_^rC5Q#3l25XGJ4&&eyaj=T#;}BeDn~4a07YwtzIkN zwS3#_mSu+db&Jfuu32O+zha&f2)=YD(lqB;gi+Rmb9(O%oYHzVGpyGugGkft&Tm&^ z^kkGkc%5d!v!wG@EELwaLw-yc(rLZS`6u;rzdzP13)bp5sq#>3l<=Za^CxC*HM;K#K5WD87->=P6ZEM9d{{vE z4~#b-!fk*6$TKDOl4i@+1o7|wuGfa~BBHvyLbrvbqcW(EEi%?tKM z5SSJC0fH`?6`X{!NWe{Ka}(qXgU}shoC+|Cv@Gm;eMphaRa-7%^nQ&B>>h*cWZ#j5 zT)Z$kppb@6>1F+LS}$uoaQF<`J4aa-C|SQ2f+Ko8c4K3ja_1{nrDx@U{MJ3rS0>f z*d`8zn--$;W(9v-x5&Bxa^RNYn&~@yLgOVqppcq-Q1z{Is9s(Vgl3={0|agMPjVd* z*fo6DuDQ0AR*#$m7-HuoI-CRX@Z+d-@MTGE*k~Ree*&eM(BQtLj(#1pQip z52W9)%)+ffguz=Jq>^6ktMEE`ziQ^G-nAJAAW+JcDiCz*^Jqfzcau*pm5CY)|QO)Rc|(7?*W`eb7AE%kZKtvT;js-7*_r zGta_jbl>3s<=0g{3U3pARkGF`(#}_lvf*|(Y0N++@c;Fe0+=89Ovi?Gf;=mx^l2;% zGGL-3hKz3mwetQwpqV@1h+g4uHwOx2!%Wx+zlWFRYCc>WSi{NLrjdThS(-=I4)bT| zy+w+!<+XlH6g!L~L;T-gEqlC=;=AyD3a>eb)!*QYMwu<LIj zvoQ|pml5txn=;TzQ|6B_&fcpQIaL7M8eD^Rm(8;AY26I)gE!UQ3U4#L6*CX{s^yFd z)+y*2-iI&et5|?a{6BC_ao(D+zAjCr59$=6a7%V4@XfRCf4(jQ`JRD%NB62^FWax4 zYk#O$zREE}#*fzrmUJNN7uWT@RI#d`Vzl>vbaZ=YQHM}NdY3@0{9eAQIpe&QGJU-j z-lg~|y(vGc^$uS&&ccKjf>v-^4d>GUuua#~CX5!J^_${@D#rtlp-ZM@e^RIfXRXVy z=fniy4-G<+*HnI#MIMHJaF{_hKBSR}_bO(TdnshR_EN|?yGJ=^gO6(dn0*?BR=%1v zoq%3+1%Sg$_pyS$`fjWHmWAcyOP1pK31JuaP^*v&TDjh-M}Z(aOaB zDjC>EF{5O+LPoZiLgo{Y^W1L5?7h1|);%hD3%ynIr~0VojrUQ_9RuM+Z5hXG}wQi|CzR%4Q!s z^e`<$@5~ZWm?_;H&NhiKHf}56JOI9uk0VU;@M(h_;5r-ot7c(urK~F8O|VNLi|(nA zmF>|pI~|bZp^*Iq!n^JYIX65Ma-uyIvagX)nC_W<56a>IFCjnItw$zr>+c!w!5)!E z44J3i4Uk}33VcE&O+OZ;PaHuZRHMZ@C?oi z)>#H|$k*iKulwShP;p=5669crWzLw=N5B~;1NI#FV*$?5_@a5Cu)p)B1^Apv0q~uV zPaEdrlLmRfdmcWfn}?6;f7@_axXAhnwV!WUG;p$SHzIe>m%5AwX^t zQk;CKNAwcuMwPWC1n#rXnbJlDnR8{2nn`{}DX!1Qj2|-QqrFC@a%WBH)6Sa}7J@9G z^JfC^eu4N%BRFYLfISs+D%}xTtfC7z+zJYz=;&3w>3xK}{1nCsu9X<1lb}G?!9MI!*_R%8O{13MG&=R2Qe`A@Q zD$JQK-ST-`dKAWbsI#pR>Wg;imek>r343=hbr#y&i}UAp1zIThK~*UD*7+~1D+kuz z6^Bi@@<)uhb>x+1t51cZBe0$oIxe~5JIm8bjWPWbIxU@4SG=Yyg4LkRs zWfI#4oA5jN>el7QNwo;=H?BnP>fA{#J?S}ty$aYqY6TqUp7b;~b>0j&O+hC&4SoYo zcWH2tuP(3aHYKL(mYy{JAst#Z=tz8?@fmd`+~$Ru(bt_aV|;(cjM3~f?WeFm>64sq z&%n7b)P(&#+{ds0`TB`KuL-54sr;tG#`^*Od&9VPLB{-T`}B(5x~lWT0Y-RrISMc- ztz*aC29@aYfGU~22Bi~rX%|1ztr2$sO(Q)gA#=2 zPOIBqrwI8Qm2}*$#-He^C3t?oP;l#nDSIOH(HrFG`$6}nbRy-A>m{u((A5&od7WYZ zjaVP;ew5_>PfL7;_(70~00o;0WCKl#zVS0I?c{4x(s7S*c}H)v5;<=O_ZyXU^foT* zxX-j$4(fK?ZCKgS&$y&xpiyzhJ%$xfR^D-sNtv9lQ90z7cHCXlc8^K9oVQrMuus!c zIk0ahu$RtW!*bt!hGlnr4a?>Pnw0+FYgh{RTI;?q?5S6dd~^jed-O^t`52VN`Wlt} zeQ`)}2R|a0X=%r(A!Qx*8<%K8AIE(3%c6Jdme~6lm2~jZFRSANK2{h_`9XldM>JvF zgWmdOH@$R9CwS`?b-wpknOulzG3Zqx)azi4UOu3YKj`iQx_f~hdreDfb*#@1sk0Bt zgG~5Betdz41IERjfIImR6M-xMvHG;#UM;b0bL$=i*^ZcU3GaZ3_L50( z&kv(*>cwcMX7R7!TWcJ8@ZN4w;t1tziO!AH1rAe=nQ%tIUau3(t48lNe{OqA8xLef zq2_RZ+n8$#vPS|c0ay~iw=snyMjRZV%fTM%9K1<^SGBskAbWL>;xlV{7W=R2UK9=K z^mRS>TvE18g@e5`ICzT^8!!8VpSxbAe9+=QN|1fG8Xtf&{U)^vv`xF}r!@+tyBxan zO8s?2V@Z-jQXZ@Uc&%dT3S#H2n&qQ6s#Og3(65qTuZ&SCBJZ6g3HM)tW)-Ml4%E>o zQ(vo4ylZuLe&G&~?~uU<-6ZwjL|)ZV6V4Uj(BhB@Up5GyMM>lPYs~jBszm4D>RbHtd(Jz~Pe1V?KCy5WNcJnXH_!`oE(*rBJO9PIpNWsi~*YZS|8Zd9*Q_cFm9 zadZjVZTw!|Nwcb(qiUtu8m01yt9q8XK)q8dyB9xQ^m`E<>OXeXu26(FXodks^ZzJE zn>8xcR`e(fb5syi1?Y*!rDSL-BrFo-euUS0O)(_Z>Eh~>u|Nr{UPsgbN(UuIO3ry;iAWl#@o4!afTuw^`*qD)plyHtgd#u;!BMFZC%($7qS{ zdlY1gJ8ai^-_=Q@Qfsq%MPDzyvfoDkgi(lfwXCB`#o%S#%i=dF7vTdiCR{%;jNfdK z`u_TS3_iwKuUcsUYl;4nKTBvE6pJv(Tnv53tX3>vvPr#CeV=J{$1Pe_=&hURd6f&q zJq+G|dT{P0x}NqHmxf$YIi?ENMYTf_eUiB|jcAC`Neb$#ymG>-zz@$GX>` z9Qm14cG#z1V(y?&a$EtVWCftUz0ORsOnCq1<_S_fp0V^&%W-RD=&17h%|!h(O|0y0NgP zY`tPJUZqgJHfbX6umWU;>pk9YP=t4C7GVd4;_7AHO0&TiPOVm~m<2wf?PXZ`EqNvw zGX(7z1@~f*+K_UJ(aCdm>Yf-(@1$Odb{SO3 zJ1AF-SlX@ZF7RBnTc=oPXE)5K4Tv8zTgUfR9v7R+&ZSf9qh+%Mm6 zDC+wF_|zU4XNy`fCSxw^URnTkuP^Uez60u#{et#Royx9p<11v`^{P69A50Xk8$C+O zNWcCD!ZF{2kEVg$m%}>w+a04EEE1$Z3>yoSMC6u79BV7PaK1B^=W{*M4}y%G%lvSFPv-`cC{ z7x1q{H?6w;ld=2^OYk1u61-ib1aD9(!K-?dR6@JLrQJ&7h-|Rl?Syq?E?g64tW~ZE zTHd3KvsR&m4gDX4_9kS``x%z~r{;W1Y%8fQb-gDcj^`nVU#rpKzLg!eYE}LQJoa1B zvtsj-Ze{mjtuNlBQi|c;4)!+^!LKHy(j=^(S3fOYmx}utmg04ar5LU$8~>6oLo0ih zZ*_n)$*1awhp=u7^L-6K9^F#BQ>zrasFmUk%B6U%0`$|Pvxhho)sIHbgwwI zs9QzK((dJgHHu{z&Rlr6UK#c^EXOd1K04rDB;EpJEbdl**Hf?Zd)Nz_Ea_Ix@YF49 z)>x#y5JK6?is9bk4G-D$#ye#f4;Lo*IwmdbCInHx1Yl9;(dC-SRe-%{IGYpeWe`u z;JJ+;2i#X`?$})DFADBcPK7o8&r_B~G9jj=t=jYa7wjxe2W(7>%zgD8vij|X>b+4%O))&bnMTRQK&j5sg z-T#K?3cnmMEs=q11tQ<=k;cLQ9sKLgih;0yDB_dwwPAs}y;L3Jqre<~1rgWb1H z|G5&aSE(>q*|WmmQ?Ftn$YKFD{{`;tb=VF6!`G`xcTf@B&uHv>0rmC#zjV_+!2(Y4 zXn#~a{46?V%17rd*l53D$v3dh{sF#V20k!xmwuJAr+)QO5B=)f9{TT70eJu}paf6> zs0O@u*ME=2LGo(KDj_TdkT&@M=%YFY`aI^MS+&(sxnj_@fu*vitczvN^)2prsSjJ` zycK*eWb}Tt3D$Wc>25Bxs8qE-; zNjq86Ta5&U!n7?yKR^UNwg6caL;eUqF7US#>5O!YPzUlyP8hcpMumTbb(Kg|D3+X1 z8{q)LKk{<5MWVE@mhg|QutXRYcH$yT3u}oqA?dD$#3i7?W2hA>c~ zl;~`1O2UXtO*crcskCj~`m#-=JGj)XPh1&3wd1uoEo}awy(rm+v<*Bw!k8y7 z3^1;0UH^#Uvqqjar$wiQ-Wv*VOkz_go#PgvbN-p99d+PW{{{7`6Elxwzd$JBWW2K7c%i& zYSS*ZkRzOV!a-1s60DEHnf3!26xqrn7dbf+lNXYpB#T_+h4lO({M!||*eV&4a?$*f zhxH;RMwk}1l0)+SK?3-|{DgixpbkAmizW0VlPP3r1}R0hP;EDf5NTv$kS&DDnXuB5 zbZ1i01$FJ>B1-3zTo)vVY+MkUfqs-HXeKwFWVHEGZhn!u;)7Ga;R+{AlRt(oXq1akR*?XIA~eWWs0$$z zA-EtCcZz{14A`L`Y15}h6lD7cTt7)Yk*G*Hrlz7uHPEmNX;#xcgx`?rAl3{B$Oodr zk4sHhldkEmMr`>H^95KYpBcix@CS$ov4wv{Su02yWTrmCD9Nn(5P55=YeCiwKn$Sv z67G%AG))m8Tli_~eyz>z$#1g3_u6TuuY~f@{g$G_J*#Dy!E?T29+}ybb#%Hp>)7-$ ztYgzw0Nh!j(}Do!m?4v*^F0Rz6#9+tTo^E><$H7UbVQT*dvKqAkK1O>KEiVax+VPH zCj3?&ea{+{x7Hi6f@gonIyyrGxE=}ox)6?8p;HrC$EW521b|AwdjMt~pN8pyqjBy| z+atv{Hp|k22R5I7cz>_ZG8GkCy%5=(=wgx9?B4+X8n|n<4CMC@%wM5GPe=Gh5=P+T z--CY}3w=9uS~&3i7Wgd{aZGrYhH1E9@388;op#f6wpk;Zb<@B9No3CLz(+aTdZU8f zLlyGe2TW%KO)_I0p7R53NDN}_U5V%hZ(&ZPG~bpV!4F%_WlP5H4euoAW)i*;BXFTC z>&Q$c@bg*V|FpdM1cM0u#U`7W*(g1fyl@*fZuidFW3S6z0fQjF%Qo|jG%cP!PgBy->snc zGvK?tC7ge#I}I~}#^Jo3wo#0rf8}Wh{%VqcUZy&Fy+9G=dk(aQcFDAWQT69m1<3Rq zWZMC2pds@R$O+Tvm$gx6Z zBYJz93vhj79-52j+no{2X+@aZPM{N6*W1W@jZH$Q;(V_`{CtlAee%5;zwW~8iYRN7 zDR4i?0=Q3Yf_w2fLF|wLcGyDJrF{2|h;eA%SHC9FP2M1o88JgXB#6fX?^RNK zOtB1p=NU(*qZ~&s1oKu4cs~f7^FJov>? zKLcz1oKD~;qrhJhfUA$Q)->3E!oJf7_ML9_Q*yTh_tH4n|2JYBocJy5a{>zYjc5+P z&8b7yq$JRBEGq6VpBYSFgTGHltdLnej_MHO?U=OJ+ZQscV z8;Fj<$tusyZc+a3!DTFHBlP``Cl?cRb%OoTPY}YHp>@AO+}3r9nW}*V5knEkp$PsT z40E#_fIl5(V#dKqulSea;{@alIXmi9lGab%(6P7TKOxejfvhdeW zE)&sR$ibYhw7`Wj^jmff%g4&0=HqX z?;N2{^ZUDjo&{cm$-M>5f}KNOvJT8nV;`LV^wY~F)SYk;$qHOx%sD&*v7eYUkgYA8 zQ*Hl&b0+)10)k$E79Jj<$b99UbY%hNJQv581qJ_Pc1F z<3X;4pHa3N9u6$H&kk6q3qa(jOex+zMpy`E4z~Xi#P(gP!1iB!34kHpOi*=6NW~?! zl~xA%`r{?=jnEMMRQ>bH8V26{=8tNs|I-r}ol zza>iS{fkk7YTe%_YKt8>e!#uYik~>XOM}4%?>WB9aPzRVne|A2jnws9hH2Z!R^{#J zKR$1(Z5`jD9~%t*c2Fj7OMh>=+hojvx=qX0$XLzRt)a{{+#Ch2ekPo?g>$McXZLEv zaa-Ssx?PGXeNZfbFpq=WiPJq|kRn7n<*fYcGS1 zP{uS}lxYG4d`^ab*uGXDy4N^F^BVJ0zT;nySgy;zjC|60N#S@n=yS;&XyP6@ zwbs;za9@S%u?}(F)^`T}g8>-u{>xzfd&cHj!2j@-Ig4x%&Fpn8{{@@>LIs;f45F={ zRK#)rk}^uzG39OEp3U2|1AlRBcE!vkOR8y${{6Rb-h^7YnND*N(`D`twE5HS za~zy759)n!S)1Z(^Nu{O%N7gX=4~kNPmv#q^Und_XZkMd0D8FdHn`!h0_)u{WBy_R zeaX~5jOFmmmAdvi%t!Q9GnMFb=VfvofcvjS-lpW(v|~5iPmqH>QLQdQo#6R7u?ws@ zYP|LCFL{n0_^ZG=;D6SlT*i{QYRpxOYGr0D2L2b!wq(v;%Huh>e;u+mhqLwWuYhAs zSYPU#2UxyKQR(bMi0A0Oh_`lEB>;bUcwz2J;D6e}BvFS1D-d{nlq9) zYYoWi^%cn4Y`&_%ua}ih4n-WF<+b{7H|;>&jjlfe=NEZvys7~eUmEsm<1FYFSmL~+1tr3Aw(xfg`RvWL$t4-I`lhm)IJm?R29nD>_-I2Xy{eI5&O|tB* zb8F>g&38cTWgFITmO6Xz*X|iD9KQ`?eMY^;0e8c>4jx^34jw{%crGr8aQ-8uVyS>O@BP`F{rrsSi<^WLNDK5ycK&D z*^VBv9N?a}d@tfH-Pf7F#P1ZK5Rms(V5xsDXT~-TW74vXw88MMQ_VZDc|T*6r!x{k z{w~feR}S!>`&G!>eBKDhXL*bLy6~6yBL2bv#9t7g!(X&N8-TwWEDpe&$=fk=?20Ay zAq#5P9`a6YHnKsCQ7e79(>*XB>U}jbH=n;;{=x$Wf`$8$0QeWoJ2+7=Kd@Y|AP|2& zIEXppcVOnowKEvQR@U-gw0b2}v{P}@XiWcohc@x5A z1apGi1alAJuM0t#Gsd-=`IqBF=CHN3{0o+?LQ8;u)^Nul-eeyvm>2Yw$=ysI=LC7N zC!Uez%?#-*m>qmcFeez-1?bfvkE&C@Ogt?fr|LHqN^Zj$?OMegzJ4rom_sf9MUz~F z_kLJ|H-zve?QMaKlnj!`66spMOgt?fr}}CtY^2TX;H&(Zhr94+98nR>Jp5cR^9UB< zFoZ1uX-Cx;k5hS)!p6p;`Z$6)BR#8FL!8I425tVp|K#l={s%aP@Fw_S!7QpTsvQ}x ze!PBKl1%mUTH8iiJMny>j4y$Eb-}b_{Qxuo{+duUEfjPA_I}SExP3CKzw-zF{}p|M zoNd1~m^U^67flcSs^o3~hfJtzFPL(CQqj~<2B7Hc!to;R-+Rm019r@3^%L{|NnYp? ztpDr*u7Uh9ffYqlkAG!yH=9SMU`psT!Q@aC!4zVLWBtE0il&72|A6DR{IP+Xc;f=s z@kZ^dytH>zEFF?7PrN=Ar}C*Z38{E<$|Q|NwWmUhq6uMIMdQwe6pcN{1+c#= zj625`{C&Kb(|dO$f5M4Qyb%Y5{1;ljK@8y|-xcS+f`#_qbSYv=0P-GPbS-Hk2MsR+{D3W9VD z({#T7=MD@G2q?zy^ZoPj@!t2wInO!wop%Q2+;jiuFcF-_-)DFh$76ZJ&;P(5b*b?^ zn60vvaLtcy6Ar(|luUf`zsLP!{WN@n z;<2=ptT)UR47^&&H$6XwZ+5=X|2*B}glBwip3wScQ=VddVmXp}#C^@%#AC&!wE855Kk0M#s_i*7};uq2ormFeO7Dw=BOkIbt0s zg;ov>U+>Zyp2{J721*dE0blO|;Tv4~OK5Sc=A*eZ=hoKshj_I$x2-<0UE(ogUBXI6 zyZe=n@_?Vd20WP(TStbkd5I|*>;xU2?b9>blPR`+!U%M(-l((_N(rp*iTp3nzexnT z*M|vB?o@m&-d{&6K~!i)JT80pQFSiyhV*W!c*x4EUmJld_Nbch=R zUq=Yc9(*UXcqsC}(Aa@s4NQcFw*{qNm^+nMZ1#XDv3?4!-tFew9zT|ja`%S+FP9DX z<^XI-luBGn*4s5^gb%x9pkpat_olr-=lY>yv&WT~UnD7m)?1S=>Ko?85gOdd;u|>V z2~6(S``_$75g6W45$fO0EFI>>Z7%OKu8T^noJ$2-S2@Kd_lqUvw8c?!+{e}-j|1P| zDE{41xn!KPVaZq*0Ofmi+SgLM;ql5sBj zEz4|>L-mOO9pjz#gw{?wh1Q-kiml!2pFh@aL}2CCPiXDxP(0ej8e!kF6`qaDZ-S9+=o{(vjtgY)Y`r#fOx=(A+5{nn z*a_!c_z~dl*Y8=zZlu7(jj%?BcZA%Byn)`;0*v`g-eqh9=kh|$ zhsO%7{5lsJIQL;`K8oR6KdXRmK38^2^UENY%OB-AgEQLGiaRKvkUQulgR&XKZQ`w;9$ja`8L0vzcjWZ)>PfE)joc;XO3HaRzn%}|+6FNB+E4j8 znorI1beu?<;YpHA>`1QqqvJ)UUJTXKI`z4G>zSi1B^NP5mJqNSLyU4Q#2PCj<1DP+5L4gd*!jH*NbM(v}7}zD# z*q3B$yO10`H8~c2lsqr+7W%=U6+**?RF>QkalG)>2l{r)I_ADCW z@BBd@e2mN%#;~mXnRIpMgtvNLKV=&E5|&{+NmG7IGPK=H)772c6kvTm=s)Ce2?aL#|L=`!N=FSkh6r~r~-=u6V|y!(K2 zJj*KJtNEWbIKYE7>Cv}{=a9-D>c21FCWQGK$g>V+QZ?N?F z*ST~rLAu3D5w}!5U-DYZQyJWH@~nf}E%#%26b$h{T=ry~bhb$>$sO)DDaR(XGRG#2 z`5H*k^{tCn^_Uf>=-hZVX^MFe5w56|N>cZjo2=<6$g&Lnpzc(?XAI;lkM8%7yf*MB z$vV&bV*cwa%a9Mwm9#6{I+S^>?OmCu>b^B|P-MqcV}FtF>GunX>Ru#X&1*RN%O&T0 z*?MSI?ywhAGYu0-&Imt}GulTZ+cqRK+d7QN#u|J{P~K@K0ZfdF$F-C{ilk%p0vm08 zWfDv>MjCdu{OjE8S*){*+1B0$@Vg!H^ZqE$TYQVsk*US@lIMty7>nv*-q zM<-|43-V^HFGbG`+tAw?HsQHIR)$R&@UF~kxXu){(e`(J;<0UwNw*BiiB|WCjnxTI zjMJ-sor`TwFbpEEt)enIWVOdl*#arvJ>{w0Tv}mmt=CL~d z#0|$kM5%foPceSU1Gh{u7g~zvG;Isdg1;-F>sFjz;CHb)FB*MM`NZl6kvN0kAEMNJ zp1m;-%6(_=J9$*@J8t!UXi1lNOw&Hm+}sS?kb7CbyY&J{=%3F>^q+7^_czv6wZ10%i0Sa*@p=;vJW0uCj#+M_qn%Es<7(!z7gF43O z2QNslh;n~5DEzm#BLkJvpfeRb-ZXGYAL*|UZyGW;-Yj}s(6={9oJj=5{6vcgyYvw+ z71D+WG;*$=Q*Q&6lRh#~CCNH+YpikjooJnxzeZ`jyYH#*nZBn*^5QLGr^K0r?RhiQ zU!-5;3&^EBs87^uv6Dw1Q=VwSt@YUv%%;CX3``;>JZ7L|hNl@L!l@9Wm*ZZS>y_x~cv@6Ro2cMHqy6hUkR$k2H)VQO3~&A@_E& zP2?nSo1APLIT__7jQyMPe`Oo>SE6;~pCMW=*GCyeosYFll!-BqBP^?!CLF+v1Zf8M zg)GlRtLROb`-j+O>H}J@zmEF5LC5>L>c>r_;~M-#>mnYQ16xG=#wCpk{4R0iyXSDy z;BW$blWY~^m~0hW3sij#gzE;^K2!4FA2mFuL!e<(`{^2ZDfttBX@o zur$szvi24DP>4B&Xa!Y0Q+_%7nSvkj*9`mFUnL+e(IT4iu5N&6ES-~N8B-mq9aIH* z_k*;<1_Wz|5{_-t+?@e>F(kzNb!Tup60Q^cG4_k~(6W)&2kLZe9enJXFf{brgdt&# z>mO>JK$6YlNrGkEf&|O>YJh18iLJD^G`6L-IEz@uUoDXDtrGm#lkWG3yLo0K2kQTN z#E|Fep#(nZ>8lbn{kd{LM38n!ZH!rrh!f=yWgNx$Dg}7^>&Jc*^Lv>z>JE`ck&Gli zT93t?ml{FkzDh4o`sqaVd8QVM?{LI=>dR*ai6n4Heg|)*z~uqzL8b8)aV^^3l0Bc$ zRugX(yChMeh{XKi+r;)b6ic^fYj8AMyZj4zh6Ra1(M484g@dH1dW3)*$aH4L;wtM;7~LyPc!<{_V01pYLmbF+t;k=zl!MlID+j-NsS{pDc~E{YG(t+%( zK!%4>@UlRi@J7E;exU}D4AwczOF4L9pkZ9M7uu0c^sunr-a7H*xp7KoH>J?!&(wki zvF7!%TeAO4w8amMe-&#PuR?uI^^0w#Wi-xQi?NN7jvbg_4=_z&naD(##xbr6fsCtC zNQtj{C^tYivM$^>mWi=QVB*kE5j&8g+1zH=bX#q~RI4guWc^bd%>Z%fH?4uUSjWUZD$@Wzb zD*?}Y?rM>S*;52kFHCXPh=jdNpM~V9dC9dRS?cSzLn+ZS#N6z6RT4 zU}uC$EE51;)K_?)X~`FdVyxpjL|er-;X}ExaTZF1MKXyTm}C$+FgY`7U=q_5$xN_u zJmaDq&U>mHwckl8Vx5yxxQCl+M1ikXR4wi?CfqEsVNNniG2WL$`~3A{7)Ql$zo%+( zD)(i>2xIc}Jx*euv20?A@4!qF@>ivlt46HMQ>BQ-PZh(SJ(3H_bkT?#?4kd<2V{9W zD~D%4RSduFq#QZQL+@2LS2g5vX?&lJAw{;~#6>%qcp0a4daN8hjOu>|?h)pcH{~nl zDp{v(lGkFpl9@=0Bqqcpf$`IgVLa3#xKEYB*;rR56m3oCBr))5PWZqi<1q7AL}=Oc z-WS^$Z1IW&4@~Y9X7TD+xWy~xJq&!!1R5tYurL3CV$5t`vy2{&sxcam6(i?9R*bmy zR5|jMyLxoFuWlUk(kPJ$HA}9SfqCH+&162uxJL?+K@XG@3=VbhAZ}*4t*!y(ScLOp zUQFPTi+C=%=_dDd(TLY}*Gc^4UT+_Qx+2z6!ObYGlaod=DQbAmv#euC#qby8v1ST! zHO%bzKsny%fkM;;XO&2vzd^!#oSJiNyl$`|)ch6m5(JFb@@@Q|>CpPjoWK==4}K^@Hcj(sd{u94T54N&alK^KGN> zY_0!neQ2b5KkeeOEr_#uMcjwvTQ?1CNwOF7Mm<&h{YFS0euITJd#` zDltV56r-QrSBTkiPbuEqRX63Ed&-H!(3bohHip8c=Ca_+%wY4^#(`$3qzXQkla%DgDshPp%8BP6>%3KZq?Sw`8s?IhlPeLOOvn@6 zjIQ@ok`?a2?%VQl8}2B?-nyq48}d*&Hrr7xzQk2Ksn*BvHS@ysO^vtyE8#t*xYT>9 zuMRxXO;-pVnnmvDHT@l}InTDPos9E{i%D)THY<&O9AKJ~ z6l9T_2%E%6Ks_FagI#g7{iXSv4Dc%PHh9fERgW*fuN0dK{`YPx#4oz5oTT?yE3L=f z{^8`QVRn}X>M8SZABOnoC%+0ZfAgNNAn(;n^VF^IX-9APwk_V`z7Ra4UYMu#1P>X^ z?+5gy0KY~A4}8=2h4HI?kF?%Qd}^3;6*iA_H81S&)U=SWZK6r>upm-CGJsUMFyyvc z9&xtfOW)T_@8zJ9tawW?$@-q!>*rrRv*x**Wbee9U3WFfadtM$x=Z=pQGPYjLFIM-$HsXbZ^@^U=RcQ^ z#5iBp$vAi46TOUGPqmU&LM_uoKB9ht-$a1F`cWUgFiZQ!-vnozHT&!<$y>5siT4Kw zeGYLq&F%}Xv+$f>3@mC1&&)CwdYNXOa@2d9dR6hY{Z*Cpz6ZXEAdbT;;JfTQx;TF4N8Cr2iYON^ zV#sBsH{_O9cK1v2uP5KtcoX4foaKvkT;Xe$xv&M_EQar9V?Fyj86x}GV83?R@)&0U zV~ue@h!kICEGhZ?VIFUu!~omY4>>AH4akF#>=q`d2c_de^2*P4UZ zN%gRoB8b;T-1j9)vCO+hEOOhRh&(bX==j7azuObzf*y{>1wB!A$90$cMl5M&wI1@&E}%qtB1E$UX{5Urcs~NwCo(1Z-zoW3u%*VjRAf36Pl3I2~?v2wa`HV3aHS&Az|1p)s z&#lIp&f)L9XMPDki)9e(k-u)hCfD^?T_0QWq#u~p`%}CQEtR!H0tqwR53w0hcy7j! z^1%_LbWj9|nN>}8_I^z+Y3BDhrI0c7v|QS)t4gUnyq_?5W_{2X@L4SUuH|Z+Ll~Qo zcKe^&blOlz1ePK6dHTDjX?78wlgx+UWtz=+nq)DLbu*YN%4sDh<YJdEY-U<93)p zq6qJ3>$;y>3CQy?X=-{gCnw; z2ad>QEjuii{SP?&hH}^ux$NO6$AZ^%^shTAn|T3#e|c6hqwuz)(m$k27M)CduS-}@I3sujm z6^QJjpYwTxgGJ|fifuWs$s+em_#H8S-zBxIT0DQ5$A-DgJ?O@Jr%3;0v|mukssfJ+ zii@bDt?oLwIq2Y?(a&Y*y!P6N@pbUgwFgFp-#;?0=P2g&IVCeF6rU#wh=U=!Ki;#P z@ZQCI3Z9x2Fd{U}$9o_1$S|M5=N0CG0id7H+!rBFRDXyz+J8wchdC&d{o=S%zUH2O z*@T(6f$Y<%BIk8@(x=snemtke>3CY3-*~U#HAB$;-9g!$8y8e_>L}Mn-4Yz0(snV# z?X+y**Ipap8@KyLMY0d^e$Nd0v}b;6>%>G7^1zUd*8yAYk#XVk$Hs-sm&6muYmSG8 z1rdhHUyVo9vY@8oGNxe#CBB*3u*Dg02UYd5ypO z?pI)uW2!}c_Q>R4KBb&j{Q$D4{4dE_QWkvTkIzvWj|^FO4{ANfWNZHYnD#NM40&wC zp=+S?(3tfEI>Uj`FA3Nb0(l{K42lZjbKVXa*51P^-0yeGvGMy$44I_FkX`aTa!{?< za*rI_=e$~e z`^P5ryxYT7a%_X`)c#&Kj5ty|_217cDfZi!Eb05+C4&-j$*{QVH3R-2tjFeChP0RixO?}ils-D8U%Bj*Ud2yGwJQj-h1B~| zw+^rCS7ftn@nCypVf+<+!F|l%B%yE1RRh7(Lu!JI%`$>DhqNj>({*DH3L}5wo;j#d zPEP1m4mhM)zGa7E@s&La++8>Hx!c5C>iO4mZ?J>f0#KXYvuhjeyJ5f|0zY&+uV2>q z-20M#ZcEk@ErvMi=iv7pz6`ir0xIASrZvFF48|~5^tjAP4IX2!#IM??#IHW8#$(QC zqFtBEoYUemTV(i|o8(H(Hp&PI^Lzb%BRh>+a@vZKUN2Mf$5t7B#(8a#p1Kxv)m?@B z?Q(n;WawWtDd}`rr?SgdnNlKn$dJ7%CFGDsNr&wU#ipBN1P;3t_$5?l3v$|QgB_K? z)fWIfimEnj`DKKeT&?thAJu?`z<81h*Fb5jE7W6taFnImcfW~YLnWTQ-R z)aw4Fhu6rIk6AOIY|N_uWvkcpFS)cqrufBHIbr(ReuA=PeM`f(sZ=YiSEwc%m8!{h zwc4&L2UILWKby*;@~NJdK>H4=3K+;;Wv5c5yJ|qiwN)||qqeBj^qBusCGnkDOSULf zklpH4UDwEzjafIK*n5wnppwcJb8ktmL|YMT-3+^W-!$NnGJL1=wfy_Baxdzakh6Ma zovs)N$6qlJM4ZzR)*aI*X7(x<*KUz7Em$j4=DV_g`F8kW(0aw1AC3-Wr1t37{~o%> zkRc}rF;W{<>Uyk^tCm?KTWPsgu5#uM)k@9TKh=^A3f28q_OCdzU7@7>g07IcY6uv# zjnmpfX7zw_udOOIvP=7xg|C+>EyK0PiUF0g*UDGR?ANR7fHft{`c;w*N;ThNZD)dG z=pN;g8gOq-ejW5i!N%Xu>z8(>Hh-*t{x8NI)Ttr9f5Dg9rK%g`$_~P3XIBoWoVi-I zN^`SHZFlTyk}Kn^k*zXOQt}1zu-0KVW_STPsr@y-T^Y=Cn?OzIvTP=)H77zf^5Ao;64H>fhV{FZ|jb9YxmB zRu~!TAmN<#;^ZP?sIA~%VYR{_DS6ea4MI^?|p=a?_Zn8r~NPcwLRQe_zwC! zKD+&=$Pn1x9X{7Ps$0F}h;H?R!@4!8KpDV%2^`X?VOGml7h?^qSIJcAtdgnDL|Zy^ zJ%-L@@V~(c-O3)-*8T+VuY`y9*8iWM@$Fd$j!h)Vw@f5=@b|nZt0aQgeK)Ly68tjm zh;Gf+L%KEh4(ZfJ9Mq}J282KrPzNvvb?O>G>+fCDF?6i(kZx_x7Ui0#6$7gNzF=J0 zVS{|7#R1JKRovs;;x$&hMCOd_qx@4j`*Lr*QwEF#8zZG{*$sJwjJ#1uR0Q9*Hx~*-Wzqjp7nKG z)MrVH>NtQ-iuhqGG=4B#3e)9iy(_H~f?0$%NMSU(3DqNwifFPON=U>o(gBdh9EcM2 zb*2+-MPf)tJ=Agi3yO|%_zxA@)X^6IVZIzKXdQBC(bW$BK>;m9bt!5TA>HVIQg&1w z=|=w}b|MELH=OKfpZLdJJYFiZi_ZyEkCvV8OtJ4o(GRbhm!xDMmwQ17lp8|q&RKhYZ$j-;;< zEqZgKLZ?lZwiCT}Fh$ByYL-X{UTe~}WCbC91nQ`k{!~2rI_#jYM2v-kUo2@0#KWC_ z7~Jq$?)WXOiu8;Bw|mzjn%Xdus>csjMLdwI5`i|+HKZy;>t~D74v=aPOwcexwH{~| z{e02)mVwA4rjbKZ4PO(^&6$LKd431ZjafgVZo#=VV-Bz%xC=bz+?*Dhe|*fn-2EeZ z6`UU1`sZ<+&yYU>drBa;P&1npQXT(mzc+ys2j5M?R>HnAwz$mN6w9zL_og> zwMcAn&i|=zur^$We+c{D6vDYas~6|yjFGVU5^PKZs>QaxU(R4y7yhiy-8X1*&Th*V z<2Q2;3?jMvhjz=|KX^;w+3{TX@hxOuhK|wjb1&|LNu=l|&aK3rm;Y0n>Ai=~`dq95 z_s+C>yKl|-3*0CzFTw2KAd@-nX`A0Qr^KK@A1z)NNpd|J@>$n{jBr9H@R;h zqXfD<;fG1o4;*kvqxS>OHvT{H1N4aQ^J{Z(pU)T!E>7T7CTZJ;>g*d+nfxOooant> zcz#q9-g!p`6P(B11-9>Io&Te%4OwN-?E(%%I9KO%qMXEMxqK}@2=P&q>o67e&+H4` z`@pTJ4StQU^`>KHFh!UDW?|N$0pRQfQ^Q_?9AX0Q;iWKhoWrgP^e5_B|;Bo+* z`cZCta1_h?k|pQPRKh;@pA?>LmeA)1n`)cd)$)D*{+Jm|;n@koT>C**IrcV%A5Kwb)(@PX6F#&AzxmigNv8w&S%^&;AGZSsL^( zK+PxN#>~3>V`E}q|Bv~{Ml|xo{Q%pCDCQp-9mT!|8*k2PuY3mF-h$&a5m#{j*tqz% ze8thoBRo83*;nU&3)!Q9DZu1U#3c5$nTuFw|Jap(cti)*&H85_+u?7*y*Iln>-?X~ zSZDv5$GI_Q(kIHN+(uKbT)JlcOB?;$mW{3TaWBm$+zSi3axeb705}62=U!ZJ?2~b6 z!O@~qQ?C{rA2%(}ekdt4Pb7JraPHKup(Jnr$gxFdruuU)E&MzkB98x_2FHb*^Z#|@ zTwL%;KH#2TNVun#cI2L0w3>VVzY>7?d@N#EhbQxMcMmoLM7;8k3@3Q6|2BW`STD|* z`CmXsBhONBU&lSYv=gl!W7z1jLWsR`7!_K zNRs~zLvl9ay?*DgNks=|RPatO`!ago@#VvY+1yRLrFiE)&IkB9m+(%kKs@(qYu@pd znE>;pz&)~*DcCXLZuT{u4uw~SlY(QTvG%sz3wHeOO8dT)o@R2ga5k(h@5FMPFY|%- zMtruR=k@XqY#6{hv@QT(z9cw%moWKT#;wm=`Wq=!EF*cFMv}bEqpXW|&Jlb`JuS!z z;vHBo%R7YgrW($>Yw5lh99>CDc5Ij8AK0(}K8OS28%kRLOl*u}@A@w-fAjb;`5VR( zuCFOc`9_TtY@N83vwL|m@4&{-l;0{pY6Hb0!Om?`f+MS1d=_NjbC__i9pUfU(ucoy zvms#mWwFJWb8x{1_R-nu>|?VD`v`tlJUqJ(=g@pRzWv65UshL(+>Q8qxBOVS`7lY9 z_{=H35BPgF6aMZkz4^PgI{@iG>KDb1ZRtg8=6Mxv{_DG<-7`qRGMst8e3B`9!&2z7 zd-FwgwaguQw%vn`-%(q|cGI#N&jp;%O>jQ_6#n*|%^9!fWCY((RNx{;;JG1{?>LOTY-*C?N7uMOj4W&4zc!Cf% z7xuvSCfjxs-nQMH1nUmo#F@i5^ZM(6w`f}>YsUPMtf_Med--BgIA>;W&fGN-i0J)l zI$O16-Jv`DEqgoD*F4U+r|XY1vJWrA8Nz#j-JgWDtwmWbZtTF-!cg04+ zS+cf2chTl6@9AtqPP=%uE@uyHU5;~-zlGhRb4qc(u_4YHo(IeU=HeV#G3H3ro41Mk z>PtGWCDhBB!&|uH2zS|LW!?&$akF$Y;V#~!#QSgO3CO4OKSl=CFV-pMBH1SH`;aW! zkMosJ8I>$PLj?a`=!kP>uL>9AjNHX%>%IyWong3B?OqrCz2sNUthI#w&q`7>aj7bA z`mX%1s<(A}=-IkA1Pd;7DxP<#FV3lrE?$81UcVOpy} ztS0ZD{j9I1^TW2p3g=(yk26Yba84{6z?q+433D$oICC_DJ!Wlh?&MvB^V?>^8MRTH z|Mwy2rDuJ9CB1FS<-qnq#j~z21gZe$t6}CfhBy9TBxm@x-n>5!5bp3DgfnEDHvf-f z?BZEBzMkH;ZK{U7ONyu8+Kclcd0!L7({Bp+V~<7P%*`M9aJ8@2;HqPlgE;=i2;v-j-Uk86Zautrg8pIoP!k9PcIN^^tOZY=iDG5ei_JMx4 zuco(cd)%P=B+kc6DE;#Z^R*!yb*q|Ze*90a@nOWHoyIwLM+OLnTu%SmdfSo@+mlPi zJEfG4bH;gNpNR38N72@N^p}i$$l$!QjXb?$L|}83@J!D9B(%PsSUL{pN3}KgYxa$I zO2=7EDes+8CO${&gQYuDG6d%o4#PQrW8B|Ai>z@z#*K7l1jaXRakU>w3oY*vzTV|; zh32=yN=LVH9$Mqv*81Dh*V>%s?XKyiBR%8k*-W2=k@QTb`=vsoJB6jgaRwHyTbJX> z2u@jU2p1^V+Q+=Z{%CG9T9279aGD@<;}bfU`5;^a*e-ws`Cz z(7(N|*vdJvbcDA{TQV@#U10n`Phk3xa1HKs5SrXSS31*@1 zhSxLnKYf49N7>?xwLdNx0!sU@KEPjdM)Bw zy8I&?fDXm}?`_*HqX0+$H7I*9XIP9sbZ~d-;R>1pxmOAYdE2W#p?rRAK2k z{m9aFbmmz-E5^AwEz06qKQAlPalDvl;3HM2iZj2oo~+^y^eJg=yd)nw2J?$qdQbgW zx=&>aG#`z|`AfWynJXzrqAuVMdv<_5?D;~(=~i)UUo!0mJ-@@)OPHzl#4JRdXJms^UaYTHspP(zxbr*+xDBoLw^GCD}nzm7mhNe^T8= zE$C=Ix8>_V4r}=HLHVP-`{vpPN9WpvGM|Dhi$Eq>!_z)R?mkJ;^C20gFQi|oyZ@JN z=vSPJGZC80Y#4tiRp~KFRCSYmqyOw}^D)h@-x|NDgv^a^bi6vI;4FnCMMr}3G1g|9 zzkE-A^SP~F+XlzxkMilCH|KiCEZdMPSvWr-%O!XI1Qg}@ftoPM%SN&s6OukJ&u_;AB2tYu?>jg7z zb(JE={j(&-%}lWlKOS!ocsg9!t9PWT zk0_plo=p&I5@{T77`WrDZO9Dqc!~K`Mx&f&{geako0C2y*dSdyjU*r^TEd{nZ<4K} zmnB=r>;ZPS6T6Zuqc4Q%hFtYl2gJmvX?EJ>mMn_My6=tB`NGPc-uS)4$dGsRa?L z19LA!#ubd+)s$;Ayu?TWTX|H{Onp}hc-U>!}8Y$7`)TE<-mkZZjulA2vN z?-yU=Y=a74<-o<0E+VJ3X8oRz0F7XhW}6`8r}|PSKt1q!xPDl1oOz5$2kd4cH@g9H zyqkvWhYQ4d5|Cp&!XUf?`Q%SMR}K2%xoRNxGsF@P)d=FG7Sr*WO5nyw!-z_;-cKuI zZzl{1?VNz~2?Q3%&yM)jILr9okfXf>U?`AFoC(y8U_$hxYNO3!>*#g7WkLh$$B4&@ zO7tU-dcLbt=qT_0p5zvC_tG_^+>tAtcq)f>M!xl-&(uSo1nWnZgd0UM-m0O;U6jIq z^4AKBj#e26!$UcABjy$(-?@lm6a5Xm z-?brsImX4B$04tLlkuf!ACERt)o@=$!+zjfT%?*aw0+gFsX+Mks7Y55jVl7 zQp~S;*~kUCv%^diDEBgNjYzJKMkEu3Hi_{*QI-k4fyVFudYF}vFpJl~tI0qa>Wmov zhKV)E$$S?%e)XRyMp!v1M{RRckM{D?j?48kNT?1pL9TA(UdB98e&`V7#`e&RO+#MZ z@%Pl;ba59Mqq$P6sl0fs6Z-dNJZUvjCz6mx@c`brP>g(qQ$te$&$Ew076Vbj8d5>LOG!qg%bQ0OVhOa99j8hnA&BW|`s>z$5>Sy-% z9m1Eofjps-`q;?5-nbVMKB2jFJ&>2v)ik#+a?bwdpb)nidA~iM8PNR0;9`-Q3_cXE zk^eRmeEHB*1DzZv_4uGi%5ewpDa4L)P>BEeo_eb3BbE5uenziSFb{T!@CNf7Ft2w2 zY?b6f>&(y>Bog<4zj@jZerD+gfCv73IXt&?Gv-6Ors8RukQ(_FD+Q$IFQ z?!}OEvMHUf%O(7DQ$9fld6UOD8)PhSG0NJ4yu%lqjdJ!Nf8Ea?%2m2pgCU-#IW#Zn zc+9y4zu6 zJs<03%>~b`?)s_Ll(*OpY7_DW_X#t5LzrP+@7Yg%;AoOZj_a38ArI)k$p4$r4Dq;5 zbDJ*wo=;^7h>|=MqoL zeB?YY=;35iAnRzHuM3zVU){j^GG7mQ0Oe5ch1`kKkC6-TjC>k7CZE~mynM>ATPm;J zTn*BT!7~M*d>d_mP5+&SZTF2^&M`^tFT(4T-h(u^FY=uF(|o8c!Obv(anMN1zo3|Q z?6~Y(qeHUUT}~h;@9O>~@0`#|O?2P25UY+Hn&hl<_JEV}nJNclvbqR{M36<_7q%$H zUN(>HkYP(9r{(v^BRUp&MDO3%N*A~rWiZ~zXWN`JYCoiecNgE`=tWJ0`6v*_#5 z65}%fra5pwirStSWHC22GKga&s>IFn>GhzbJX_BFZxeiR?UpKtDRZqWSGrRPGVlo_-4X(8{}+;FW<$Qi`D^a z-corL`Kf>Dk33Yy`O}5E2s3TMot0pI=;QAmXnMejj=#9 z1+Ej%sbpsz7?2flOflEezJC^RFyoV(CIYGF=K17=ay~h(T+sQ1LiV9s+Bvn43}{}@ zT;{fRP8H;q+|bMsqAW&VCEDvA8RRwO(rkm9aXuffmzj3RDR~Py7F)8lwYEEk9L(W# zd}LI(68Q~Fn&(h#`{~z^J}-&?{h&FERF@T&~qDl1O&T6p+1gEG>K40=qqO zMY1~v6p#aQc|iWR$RT_Bx^{jQmEqVz{>HX-H|BdRMLxhaw+%U+?zGc(u}>TfiwNd+ zMIO5O$OU*3@{R&W+JVEEdja{_Vh$^_9gy=-b=xnw#doh62sUHfWaQmiaZb0`Ww)YW=?2--&O24g zh@DDB2l&Vw^H=Ux;Lk=Lw`o)d^f&6R=g{PO8s!MCy&)U9*#kbycCimG8wd&VQ+0&y z$v_%_oO8Td*jvhN6xW;{mT5fqiX!3V`{t_y?I3HGF2 z)Dtk*3;_cP;F{(aLr$g5n0sWMOqm<}_BZlt{7j$QEBcrJyg{~PJ#wF=p3xQ}XIK*% zwUFfpSY9>|NL@hwflsxwt$CEkKGhO(LaU@N)@I)70TsU^2Zj8+ezl#}_pc_}zapqm z;%5!=-0d`F$nyS`ipW27e4kpW@Vp-Ke6^DA>m2&FDwO#kN6|lfRZGhbX_QvkDU~H4 zUlnqWRZK=6B~8E-*N1j1mu8*N7UcvhLJqHeKwsSV*lGK5?{RI}*;XI@T}Ft%+fdLS z!QfC4c*sY&QnrLF>03<}_O0o#xL;Kta2<#>+`Ub)Jms)fdEJL{KAlBQDCCFYV&0go zisb>P^~xEFW7_2mo*y;4RLYCc9<@=v!WD9THprDfIHpxL$K+k2W02E(@_G%TAHY=3(TJ#h0;*OxPtnYruY-|0#bRWGRkYAACnbiZiphnrN zS6(@+U73NLBQ-Q9PJ3}wr;1rGU*(V2{lKkC$l-(BJ&;j-T(2?>e!Pg>J|j=*SM=Ji zQB5wGSL5^J|NWY`zx?)<<5quSpZ)FPd(VRoRn=qgds6g(OI)G^lG(Qe< z_Z2NgZX4u`+j&5{`Z8oqg&!1=SEnODm~nUiXY7{r1q**m6e8zKkxj5Dui7cyiVnzi z@)K+_Mc$HG4LMBiAh(I{0iC*VAie<+D1Fg?2e99xQ8R0uTvfl_sui90sFru!s#r;~ zts+S=^3T!V(Ij<#Zk-?@gsmtMfgTwo${FEDb|RMnG8W(zVn0zTgndMgranNv2joAH zBT{-aKY}fhlA}otP}-uD5~V*7<^G__5on47TFOBrm8OTh1)Wg#?oCJ+lr+Z!&0#?E zpwP18topLEEhSVhi?X3IXi0M%G%3+Wuj$X{mY^#7X|05j^hZvVdIF|M*J~7)@Cp9e zkv>vLx&WR?sxg6)9=L$L%<+H_Xx#fO+RJ`?^qJf6U%_>gM*ca6j7Y{BL#ez2Lw`fAgOi-w zGk=GyK85=>(Y>@^Cyxc)oBtGhs~jg%-oJqJV)!=%e9M6r_ETdo`jx+{^9~OCEB8SC zeoXp2$vJFHGFIzLrfeo%2r(BL(<;U7z=2uqF2Y zXF}HdbKcp5{0GyoigaSXJFoiPexCN&!gd=?_;+ajj@hQz=l%j~TM3i{Wgi0j>eQI3tsj!NhZfNnFvy-9@a+(sUl7XDVn#T@RH zxze1=^MB!7ojVfGn7P1gVAh8*cV^MWDccLr{BBuzW&+7SV@r^eqa*9w#5u^pu!wVQ z?nlTF>6r`NqeL7o&6nmlO!=sLiR&7ZyeVNkBq7kjOeZ$vf}h@V;~( zZQib7ByZ2~fkh{$rEo7UOl*f7s*~!D!v5|*IF-K;-tD$+sKWiuJ-e9hkG8?S=(pU{ zOR#Ub9XNxrrxr7X`~Q0Uc86-G{A0sO<}STX1@?d5;GV?(?K5=0bvxuWj$N7oPJ^)T zo0NlNi?0K^$M?u;!aKZHiFb5WIPcgh=2O5ujJ?b||JcIXJd@;Y!#>_^qm0@6<`#X5 ztR{1gu8IUVWy-Ooy}JB^YYBhf#xB^;dy02(eJN1ferzb_>|H7-*z)_>{EZU`d&x>t zxOMV&?!HxJyn`D)L0%IMrQmjkzkg#_KK4>eu0eUqk7OF26WHr2%eUV&nZIw-OkhU) zv3WYje$n=#ebdy6_D?6+JO4e~e*Q-6qn*`$S?}qmoc^I4^EYfHr6HP)HemlK;qTnm zm%r1_14si>J`ri`^-J6f)=vDca3x-A%cdH0H?O9$Qa@2%a~|Nf-3xsCQ_ge^gg5^o z!j0JLwr$sP!Pecif^EB*_plXh6q0@7Yl%MomR$^c`I1N3bBsH(7S1KC#dBx#Hf*gE zY}->mw}m-PWK#JO@*4Xj=WU}LcdZm`+)sp8kn@V})!VZ7C&9*jVQ6DM2mEz=81{cl z4+`cZ7JcC^!d|#+A8q>_nJv%V7a`cZ_h-soxb_gi9?LO;wTB9@|Bm+=;PO}67qjQC zSi+vQn!KH)EX|p}?uuab!Q#)5*$SUSh2T6EoC$x$32DK~V`jpY$EE|*J{hZyPvtM$ zw}!i9^9b%@>;qiBp)2-At`V#}I;&CUs?U($l-qQ0Hs`N6E{*+eve;|)0>}a~J_r1H zhtt{rtR2jryoRv;n%|8#W2d8V(V3jjk=e>z%GDp-<%;KD8jF2;#X$W&J#i`C=SHtv zYNP$)_J&e0<5)3g{6-6autqNJ&YQf?zZiS;nv9c_C!YTax*)Tp_}@ztisxLjE1q+; z4q!eDbFVRiDW`>;QQJ&8qqpJg`87TGe;y9_ESVqVbZuwxjGGq$Ho*EEl+3ur68?Q5 zn>%9PK)Mf%W4pbFV8TgH>=EO9j@&lpQqGr4{<%8}mr4J|nDLo%TjNDJkH#LUkdldy^MSn2Me+E1MSR;ci}-`i61M5yE`ni~9+v$1 zi1oR0TbWNehhd*lPU(2;_4xuQ8T*70SY0_$@uw3hRNCA@XnXBp={W4c`2w&hHQ-WBsZmrF;wwmi0_`R#2R z#>nz`HaOM6wo-2*16VxfjV_CMTXE<+Azz4ZtuL#x20rx9KL;Sb1Z3F87=3|g&?45`` z5kF?BKJJ~P@9~gj70_f}5#;0=dOb^$f7CTY!^yJ1{CP=ha#_{^3}m=vsy_Mgjf&&X zdB#4kS{vI^JGk%69}+M&&nBc8U_OjcCezfPo22G$n5^bTQdFJg)AfD*bF6|fH?(2C zXbdM2W0F)|WiyOlWWDPX>%jg8>tH6`;8{e9nu{8hg*^`%8740Z-XANT^Ilm3?&GtD z2FPUDgg!?seY+iz@E5Tj_5~u2+`P$$`aHdrl2XoWu{I>&xGvl?N zEe})l>iOEx-wSP75_0L7ycDB=% z?$vM4q*Dfko2J-AP6MW<*hB!Wm#=LiX2cqY+XZWd{1~ViM3M(akr=%owRp4e^>L=b zb5d+0r>EFPOpi4Q+a9JH`b&&a*y2~#;d9Y8E!8%1>MN`8Y3N%QYZPi*I9Esl)dNY8 zX7CS?x&5_u#7vBv3K>AeviUSAIbPHADKm)CgRI827|@ix^>yX%zp3TF`_5ji9-4 zX3+x3;-kGdOfU2$V&E<5`C?uwq2zx5piUTLM`eojHRu;{Y1A#j1^tDIRxx7}@%Mbh zw^RIxSoctXi9;-Vh(Qz+s25ohX%br*gZOjWPGj6@p9r`PHH>DvtAtHt#Y&BKOCHYLcBWhw@4DjXh&EiF9T{L1|~D1rb&#K zW=yKHN~E2)X4L8Dy0I}Y4HJq(&>n7{%wU`dFZAPbo+?NGdHUxBX~ZofP9TOnk_#ga z1428xD2MAIzJ7_5O0+s+%$K^VM2vha7t+m9AsqI`b$hHFJ;X~Z#x=+|v6|`>BNFv+ z$fvpj4CDFFbYcQs)uIyo4X}TKj;rUmBEmd{_~RTh`Zox~E>rXc+=0{(ieR5MRS2;sZQ0P9jdm*<{)@hTt4`*$3*c$30PvKjfpA6d7dp`Ym*&L1!jnpg94i zDHV{L=dP9D>7*97{*g+Y?LDQ0xn8=70T}Z-1l&-10R0eq-T3#Pow@?DS%o2pC6;+^ z_I9$L+1r_Z=5J^CnxxHkGs@WeNGE;qss72|UY1KH2l^y*xFQq(-ED<<)hAl1gI$d> zrXr?!m6K7<<%W0q0oYnD;mfKqqEx0QD_-gqOf_qPN6-}bnnl1659&%ifZgw$MlP1cb&ByLn5 zi5ZbA0^1Zh$dMmc{5QVi3OVGQN=}y(3R#^q=G030+HktLS+Kr!HD~p9w_x@3AIj~x zy>}-0y$eeUal^7#mDAQg(oReDGRdg+HOmz7pq#+%G-6h}xFQx=EL&XCcnkOdYn-Eq zGE5xzN=x{PL0mZVNH41dXWV%=3rB8uA+p|iUvk`ZD(LpOS z?Wti_EjTpB-io-GWJe(WR@uWeo3LB?u3oAygEh#b@wL{7PfZ69%lZy9))sxtL&Uf` z=;oE))Xpuqp_Tjgnr7}RAnCehE{&~ChYiP1spR*+X@&tEua)pSSt$3iHSBG7y4B~o4F};#{QO^KuUBS&zq3t-TONg(F zvwTG!8L`GA9y9_-0OBNpIMp~H9!L-a{pmOLSiBR;1xFF@`u*)yjMP3w&Tj|g3l7^W z3v}u8e%FA!Z;mS!*x%A)u@U>33Q!qhG||zZkLr#@+~@Dis1U>|^4_~|#P^S6c?C8& z7_p^sw)@XGFK8q%&%uZ@o8oRg<{*A{-ZeeW{96W``B!u~3r}hnuRozxJaWyioX(>= z6-)0|6;3&?D>!&vkF(&suJG6)HR1eazX&_6{gvGbadM-NYZfoXIlOZn3^{YfvYVCj z5NkY&a==;J(l-pbAH`j4hrLcM@kMMm;wMdk7eFP>p{~BH$FDr2#b+U=(r>Sl;Oqev zf#X3He!?c1;#-JU>NV%*nl9Vqi&vc1;&U*k0w_c5WaUXsei33&M-RGZ@bp6iHL#TnfSr?iXD+N+c}Z&xhc zxL&r@a&g~^@6Z-6&uFAL0*n5I<>Zr&xLnXM5)$j+4$QMNI1z#0)CZvx!FF+%B{PAlg0og9BDU>{ol0f+UiC^2V%zFyJRjoFT7|tvB^T%N&BYmjZzaZ6 z9oMOdIG|av1o4YM2U{1C(ce>_f7y5@@!Cz6VF>g{ZB?rL8RrB3f%vgY$8@XX5lbcj zY7v{pv;_1qh&f}{%2n^)s8DtKuugRn&QrSpo5#bJA5#A=Cl`$?5r_5lA^#T^t( zzzL}80KWYYOEv=Wa~lySb`$Ui5`ni3NJ1Ha__8}&l&k+i{9HeKjp_j>^+j{ZV>t%v z8~I81Iq5)#`q2*pUCGGawA3TVL}5g>#1YX)G~nqPfMHU$G~5WM@z~Muqn@-xfDyvS zL}5w2F@m0KJA$wKfAf?kV$+FL@d=%=;vUAHZ* zf`cC|akP~k3OnM51FvYA(V3QhM6D|wV@vvqOqkUhM;$@5T$c!2IZ*3Oq-?33h{Up` z|A~ABKZsb%iNuQ(P~jp4zlq!+njjjBxgtL|@K6H>iU~ktoYt?O5vPUR^Fl46fUJ>_83;7S zsGZjy7TtRTo9g_xZVRF_!q$CRS;Gp^0) zjCiYsm`~5~DTTel7I90|UWS+)$IQ*fUGh)hY=i?NNZ#R*{}f%Cgjlqh#iDuj- z$()%19sjXKx@LY9NA8t*1m`^Tnu32hzK^G zB*>4w3P=M|J{~(#c-uC=L7w;NtYvcuYxxXg?v{10_&ax`e!PtL^rd6&YQa{-PaIi6 z5H~_0hnR}w`W)Yg+t@-OnX|m5w)%eF`mJTGMe~LfEm}Z|7B8H^-(XkQbgo!VYcg7D z-}4Hb)&Wd=!CP)u$eQ!7I%mOp!db9-hhWXVcFSl%C%7C~F5aT>}kutja4F2yji=B2p63WZ>NlwbW$$f;AV(8 zjOB=Fs1e0Vh+`z$QSzr8e8C#_U-u+@jN?t-?@&CyA?~6bGFs7H18ysk)Am;JY~=F& z6d+%&;I9+Ui>y|5ODD=w{6CJ~EuMAl(`2=zf7bOo$T_2;Icnlj6OAU81T`wQBoqrM9Tb#e#e#GTO%bH`Dqy88Y_BW|g6@51 zVRcbd&bgQKyl3X0`Mz%kh|B!nJM&JWY{A($@wA|?6gw1@bY6tJd`S$^l>IMaz2-ya zbh6{yL@uEC?~tTupBF8bFhi~6v!iiV=~QsXLg+~T*YRGP2OoStw_`rEFkf)=>UFYz z0MGN1741`FyF2Dwd;Zdv*rh12XW*I4I%-9`<7Mm%xUj!>Uw|q`uT8($*h|nc7kF(< zm92W2%)>r_aB%SnK>QmqJ2gqhjEQQWa)oG95>3mOwzE>M$ZTVsACvhpW7l@fOin?6 zTt6F?{oJ&~_NiCPMu+^cZ(aXJm#0C*B0f^joKdHpzbqt*$yk zdol=iVQRLKBHPrEHiMWE0;{WY#ZzvcQR`EW878t%4TjA((4_Q{PJjEDh!Kvtxd^A< zKKFL5!d|^Wwq;t@*T2zUg#7;>yT%g!D})~GG>`vvFF)m%3t)UG#FvS zcg%VQU$4fmFOK3^rKb;OOw8>(dwPyDdulZbGJ56&$9q`oC@T=4G(Q|Gb(ABc9n+dRHbh6XZ7@~GmVZ#_mw_V3iIn3w*yNJ zGREDr%85f;L0_z#rYS`=cP+E8RO+RCSxNNrXqof}%-r<1jn&tein%fBX60!?L+uA> zq5&V*r*Cd;U{I5Ma#+<1^en8%RQ@YOT!CH3mi%r zg_~;~%Z?z%p&GlALnZWr%@vl#6H6^isFaDBBS;L``}f5r`fZ1Zh8uvfd&flSSwFSx z-}Q5Hw5p-iRpU^#xyGUTIiRRuRuDX|hHe^pR!6x_`QuEZ!e2h83MufhRHkmu&>W+@ z1%(zRH%hI_d$LW6f^HiXZXz+tZ7RC*&5F)t>E}+osh3M#8ecFh%eZJyg-yj1^_VZ} zL{seLn3zk|?=`ly&=I>sFcErNwM28Pz^YmS9j@A2rsc7@jLP~#>zd9I=!B^>x$-Ql zdDjifmLDEjI^+WQV{GAQlbY2K6ZA7N!gj3MkU`TP0SwdKlaX$c-?a2 z8?=f@5=%|jOHm4)uVUt%=lPb^T#VO}%cy$Z*I$P@O(Jv4g!WT`?IWtd?(Poy^F3$&*MIm~+<(9mi|%*1O( zRn9Sb)vLk1Cgn5l-s_vgwjApQD%-A?YlTh|1&jcX`5mwqoaXLyt4HqF7>&Va_3qm* z(`?i@KDJcrtajzt%LaAk*XRxNlPnrngIl#rnJT7E(S_ji%7EV7@->?_=xVin4xOCU zSLjXa!Og7!SN9XRyEUkwJH>OxM24>hi+C#<${zc{j&iBPT zref<%3ff8(bcJSvtKCy%6h*} z7_?C*4B1q;F;|1!M;BngqauvhLjtuMjle&S_y3yp;Rz$out*yJefNoc&9%du-t!sX z@KvNK1yM%B}Wv);0P}>ID*S`j_fpzBMF?`x(|HraL=###$J=SEB5QQkM!1N zeGsbO=6%6}^B9^tGC)Lt7zF)d_daudpzSjP7;tW?If9p?E?e?GKxuc;Qm`4=e#ug> z4fq4~9cL|sJHZX^JYyl;4Ia=v&`2_SnP!XTL0uU=geE-@MicHnW-4<(pd&Nb@mcG8 z;M=|nrAc<4G!y)R7|K|Pv#k%?QEtABv7nptA^5_S8 z$!F7sKhyBm>7f4oX&3mtP8ztay}rgBoD&u=bwa|S7vf{oaTmHD{?HI<@X&i40bXx4 zG)30B>vUZ8HdYwt&p*DCMKmMP+ zlR7Bs9jb-5-F%Vt~8a2<|Gv8yppQ zs=ENI5BJcP>t@h%0GySXr*XF>G$cOov*@AxXkE(hcd)-loQe-se$qOPR1!TJt|OH6 z3OTgzgbpo~+9-#Clp*}eX#5XU3))62xfxP|d4jDrp>x3VD48noKH8K9o>e7<=fQoc z?A}zqA<8gJgnViB4&*vSdG?}uK_mG#3GW1!s+VKZM(G5+;F%C$m3}YKto(ZG?*nTzoav=-FFWCI z#v$Lo1PB0!kOee>dq`&O2e0Hkor=WYEyeRV3g?Kw;zun1QhaHXhVV4F8oQVJq;DOo zkC#%~kn`_^pCRL(Tcrp5jq%EWm*=r@=9(MwO%UOYT0>1KUicDl3$raTC-569E0sRP z_Y`6v7Iy%x!U5;QtfMdvIm130akioU5K!k(ly$-B@4MLn^S|Q+|AS%&&ZFAAXPNNA zmX!CMu~*qYM2tU_u@IAM^HN84z_H2C`^=B{ng93&_?0mD;r{eh5q*b!d=Vud5-mn8O^bQfxnYZryDr*Pl2E_jqp!pNU}z^Qlx zM^r$YvM!AH*_R)(d@tL7?(nSflm;(&>5sy&p8`dZ>y8i`6^I||-hdBcZdS&QSVtvd ztbX6WZ5<^(x|y6q))O7uoR2ffJwWFhadblu&wH7xz-KMR_L#3P@L%&l6tcPdjrP5< zdJww+W9XByIL!JNb0GKW;;idvvCsB6+?T9)JGLuC-oJNqJ(eyK9Qu{wd92(g^4anZ zAGMf1+v73T$I3f=NuK`b28xS+JILGH;;e0u*lYK(w?X2y=a}f=mT;ci3Vq)G&17q2B;CCPm-azgPB`^T;frr5Tci@p|_x5X?ZQqUJZ&^zh@7q%= zadUt04j=WHWQ+p95TN8ce97I79)MzSIHVA5-IW-Ck2S$2=N}|4IA1zw-+p5p=-A;$ zA;*q8BfW!g<}w4g@lI^_&Ju0f_jkwcC`z3;hcn;l^Lkv2yl2j%yAe2f_~8@cAA0L}~!4ziz*E5yq@|7c$u zMoE?(_G$0uXP z%a=vF0{(-9pM2@1qp}4N>pOo+r(_Gm*N|uU`VG?m)p6XAv*iQNfoFq5fJs_8 zC!2A4kNg|l`88fEgv{Z}Nwf_do3zhKa}!O!9VeQW%>mk8L958=HjitS>cKHf znj)~zs75~WD}S!KqTd=@pd$s*mk)jsDjM`@#MzjW8&ni0z`yS2BiKtW36 zKRcV~={rk4KJz|&qu&-AV;^gpRxqP!YEcXjKL8T$GxH+KO|vJIjJ>E;PrvQ*$e}13 zc1aIx^G;RJvgqiK#B(BYkMRwTMYoW%JXkh9erTC#&ba$FxyR9$FhE=~R!sA>f?2gw z%SPcmN)V87$D#5Da1(Wc8$kLU`^vl`i(=Q~!&5b@m}T!3nC07-Fp2`JY|HbD%!~dg zrWfynPj)4<>}sJ|!OAkLk`WiiWW0~N7(C#cPh#}NQpF^3Gl1Y)r?QW3V-I?zeT_$@ z{T)TIb(JE=ysWL*x{_7OtbSH*SEC^9B{o%3+#9gQZD{_Gn_p#UWEvJs&NVCbxMf^? zD#N&Bdp^Cq6n7@9y`_^i4EG!SPo`=4Vfa5Lz62FOnQhIpLaWLrh^1`9nEP+h1yo_L zUcWxdyaL<14>K(8q$3}<5?cAoZWw@n(LJo$yV#^zXc1!5RFF_vbyEJCY;&f*7!W7GfDQ73w>PP9{UyR&bWoodrO8i-A`X;Bbdw`zVCYt~e8+NjwDdg9j5+a_AvWWWDd zLC()YS)fY1#r5->DaZW@v zJ}DJj7E-XIkT23f-e@E8R6c-rv=!g?B17OGMOPv?(p(gL%#iQoHc9$9@;X~WO@wZN z#VNAzi8^HPxb}$glQIwe&WOKso}53Z z|2Pj?w0}g>+ec%cI7MO)H0JAVWdC$2b;P8L`gLp<<)Yn1bJOec_cVH1?`zuCP4-Q{ ziv0#p^RTx%8oHKG1I@asd}*D3Vy=@HkL=di_$Ap--~adh`j{`z->CY?y%K*JKBo>E zbZTPn@_2vq?(clfdi;@p$@DgR_5k4a;n6|ko&=Xk-3yP$X-bkyl3yk zdpg-)+Qg4on%a73+Q`-;)2SABhxf7nbvE9OO@(KFB)0F|KPt+#rS5y;Zg-MDh+64O zVgkMUFp+nF4q%`{ag%zq)p!VU5Sx$-5Tm~t@FPB)P`pQH+Yk8PnlNn^CB6imwzI3J z!S*&F1Oxzi*XIe&{F?_I#U;GZB@`!U!A!x)@9(ME5Zl|tR}%d_B}|#qZwzRtLCtin zjuCt9@)sZ8l?+^c4PGuOf&&{|*nchC^>Q7>x=vb6k53~ZT7x)(SZxdcT%NNEq%I}ocM<|eb`(-WJp4~C;`pL@Nv-7$7;yTj#w;Jv6t%@%do%)Ta6YkL`M ze)3)Ej9X++M-q^zf@IpQD`>yq&NM%< z?RAenyB9IghnTlcaGi2fxlZ{Cb#SKUDO#*=xj~a)I@>;*Mf%$8v+q5krOakK z8`~k9!?H-74O>^@qaLHTo}1R_RJ62VYH>_2N@7tG#NA~U9L_Vi{n1@U_JRlYg_j;W z6vg2#yzlSZ792x=B6+@NnX@!cKWkJyv)~}{>GLK2%6N@Vh0DRq>)=kX!V23eUYSkB z!%Dj<7M}T4c2xqL-QJFM>JXgMo?Of*^~*Cai7c=v4JoxQ&nhr0oF1oB`e8o3%ni1D z_;3MUgxNTW`?;5S{ zmuNHAh!ov|VYtK1B-OCg40mVI;*9F;!LNtpGwWG}ws$3Y*0pt6^qLDdOsf*|ZR(m4 z)3XY(vF0V`jmLoF^}A`)m<;|m8h7t3iJVk7A<3jpANLVi;~eUzg*Nq+i(wCSgV{`- zr?rfaH*cH?9(xWr=^0n)4Nm6`?tcqz`b4^QV=`j-lb9rS6gXIN78Pe!mx3D>5$-m@ zvQ>V`yfx!2tAZ&cH4>ZOl4<&a^Gy9Ie$K=Sq{} z8LgbFR!V+Zj9AM^%=3s%{sw^4BpfR4K;kaKIyExJiXV^XqziOje3S)0@st_=49ZPoc=ATxqZ5u<`Rz#U~}v@ZUA*DYbrVmxhOam!S{s z=`L_*saU@~#QIG{aD>)V`=@UAPH=wPf-Sntjx##7$eNAlkE_QbbuBG0T39`q4jfriqT#4rbkMp!dKO_6mN)@P`xt;4WTdlO%zlk9b`d8Loo5Zfx^D{~HVk!=acdj*Bk-wp?h*SpP> zI{V$0Z3%p}zxUZWXczR+vf9_4WC6`;Xp^l94VNtQ|7ZJ85e;hX>NYImD_;_q-?1dF z5~%1{99JP01pPO2t#GI7!_8C`m zP_L5DO1>&{h+iz9lTv{FkEFj+KI?kv3tQ4QFSUR_EjJ6AIV_+VcMCVNt#54PI%Gwo z-qLD))0sOZyBPQUa?lpbwz=^;+M9^2(g(f|rRQKy)*^~Ca{Me)oC6PWzxI^eQV+^ntsLS_wi(_rXqaiuY*3w zkR*Jb;vT&*iB=qc>{%(hNav=XHRGO(FyXod8SrNxGZxN|Fy?HDGUuMXMCYc#rWm#X z#E1Bje@FOyqt01MKEUVWssJO|_c&+0%+uhpYlxZrF5Y+Ba4y;Ru;JrioNrH#w2*GY zd-n+9^WxtiV#sihrJHW=-iSj+PdDK+s1kb(I - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/dist/icon_variations/README.md b/dist/icon_variations/README.md index 7c444a7e04..4259f9ba39 100644 --- a/dist/icon_variations/README.md +++ b/dist/icon_variations/README.md @@ -2,7 +2,7 @@ These icons are licensed under GPLv3. Please see the [script for generating icons](../../tools/README.md) and appropriatedly redirect for seasonal icons. -- `base_named.svg` - Named variant. +- `base_named.svg` - Named variant (deprecated). - `base_small.svg`: Variant used for tiny icons (16x16, 64x64, etc). - `base.svg`: Variant without branding/naming. diff --git a/dist/icon_variations/base_named.svg b/dist/icon_variations/base_named.svg deleted file mode 100644 index 37f747d0fb..0000000000 --- a/dist/icon_variations/base_named.svg +++ /dev/null @@ -1,337 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/dist/icon_variations/halloween2025_named.svg b/dist/icon_variations/halloween2025_named.svg deleted file mode 100644 index 78fcaef5d9..0000000000 --- a/dist/icon_variations/halloween2025_named.svg +++ /dev/null @@ -1,110 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - diff --git a/dist/icon_variations/newyear2025_named.svg b/dist/icon_variations/newyear2025_named.svg deleted file mode 100644 index 5530089e4d..0000000000 --- a/dist/icon_variations/newyear2025_named.svg +++ /dev/null @@ -1,684 +0,0 @@ - - - - - - New Year 2025 Logo - - - Madeline_Dev - mailto:madelvidel@gmail.com - - - 2025 - - 2025 Eden Emulator Project - https://git.eden-emu.dev - - - - diff --git a/dist/icon_variations/original_named.svg b/dist/icon_variations/original_named.svg deleted file mode 100644 index 127bd05ae1..0000000000 --- a/dist/icon_variations/original_named.svg +++ /dev/null @@ -1,81 +0,0 @@ - - - - - - - - - - - - - - - - - diff --git a/dist/icon_variations/saintpatrick2026.svg b/dist/icon_variations/saintpatrick2026.svg new file mode 100644 index 0000000000..b125f4fb80 --- /dev/null +++ b/dist/icon_variations/saintpatrick2026.svg @@ -0,0 +1,196 @@ + + + + + + + + + Madeline_Dev + mailto:madelvidel@gmail.com + + + 2025 + + 2025 Eden Emulator Project + https://git.eden-emu.dev + + + + diff --git a/dist/icon_variations/saintpatrick2026_bgcolor b/dist/icon_variations/saintpatrick2026_bgcolor new file mode 100644 index 0000000000..5fc9cb0b37 --- /dev/null +++ b/dist/icon_variations/saintpatrick2026_bgcolor @@ -0,0 +1 @@ +#3cce5bff \ No newline at end of file diff --git a/dist/icon_variations/valentines2026_named.svg b/dist/icon_variations/valentines2026_named.svg deleted file mode 100644 index cba95d8fc8..0000000000 --- a/dist/icon_variations/valentines2026_named.svg +++ /dev/null @@ -1,225 +0,0 @@ - - - - - - - - - Madeline_Dev - mailto:madelvidel@gmail.com - - - 2025 - - 2025 Eden Emulator Project - https://git.eden-emu.dev - - - - diff --git a/dist/qt_themes/default/icons/256x256/eden.png b/dist/qt_themes/default/icons/256x256/eden.png index 2fb04d8bc227ca0fb5c7d6740bafda597cf0299a..fbee9f1836de5b90216f82f90835045004fa5e9a 100644 GIT binary patch literal 55169 zcmZ^K1yEa0^ltDJ4Q|DYySuvi?>TT2-SlL8X}0N|*qDChzJNQjR}03bS|`rz@y22s&k zs_1G000B$@Kv)z2@QAn+b^ri)^8f%x9{~WdYyg1N?OU6U1ft=Un~Jd~0D#-~-y3Pj z^@kPWB8Hc$rXt1>GAS}8-YxK#E#eZPm!grEthbk)s|P^S+{)U?-o@HX!P>{L%ySme zOz>Z`yoa^9m%XbCt)9KJHGq$YPmqeSxE0aL_+P7)xtFz=<$qoNSDO$g4<9EVza9^t z7@x2huOK@Qj~EY6{X3?h|7(D=tChWt|9?OB{~pkbo8OHX!190Y;DxxirQnbXtdebQ>Q-!}Hn=*Whi~ z##`v%aapK+mH$yiIT;O&GHc^uU=--JxKBc{aYW3(gB=Z7=lQVZP0oUxR|oHc2L}f?{QQI;)H~dPw<&N2XqKzq|R7GqCmb!eTzKz>91r7nu)PVy|HRmL|RH_+$c46RkjTa zdnM(xQQh7qx2LPIAXkntVeIbXzusqSqL|Uh6E^(lK@EN7Vfa-yCf%Jgi>IlSW}mcM z&{`Cky%ssAxhP2Wh^xj5NA2`wk14>5vWqh-ip`sq!7{}<_#rqAw8)(}y-J^mJ`u@T z$=HDClQYnwIB2b<0+JI!TJ)KP+?Fh~qwK#F2Dg?EjzvHIoUzN8J@k53niJ4b>)fV7 z$Z8r`gGI_!Ydb|62Npd1ZyMW+Uwp$vXs4_>!aMP5f+2bjoXV1dTJ z&m)65WopB44W=C!Q6)@)Zl^`wVN5d0;$2E!^6z5dTGUw188XF4af6?}V-ZH7^`fRK zeKIYXi4{QSNsuk!jWWl!%w|x@QU2s*^?Jp$zf7qI?Mt|2x24>tp@xMi#chSkQ}TxN z&&9>Xt{l~f>6&<$1$#bT+o!c>FRY~K;yPB*05)(t$VDg^51RlTcx~toXc1UjW-=J0 zwApePo^~d($4mzcOx+~gn}Qea-$Q-FC6Hd&X)FmDiYyt5cCTCmag4D&L49OH4NSZf zsvM4Q?cP`k1x+oO%Hg!2N+1Oh-#2Akem{TGWR;H{z6-|g`{?0unW%UdgVfTR=9lWo z-LSyWE#Dm&-i#dE=KJtw%S4+vDi;lode2NJ5_`)XbJpQf=nX>RLUQOAbNk$nn=j%s zv1N8H=;Y1e&n3pEMG|A2AQwxm;fXx9l59=Y-*jt1rWmDC1Ft&G!q8A2+#2g%i~^B1 zEV!)lLnV?s1Mj+0`ThC;YfFnc{I+CdWQ8BNm`Tmv{+$hFL4M(kYP{>O`l3Tn{TXOO zCz1p;1;B~5J?->g`Q8e3bE8~;#d@}oCo?BQn>~bO8%P6DN+tBPnYB4HNMtDb$OicC zELLObBc~&~u{{ab2fH!2kT+4K${Sz4?26P^A3Fe88NrT&LqnTJ-(1PUj_({64NpiFoiaQh^UX>pU3W!7^JP%?Weml)7QRz<)UZP%Q*a-8BeQLIxdJiG70)jSHe@aX z&~6^>*%}Fd4;9V;Q+xR^MoP|@viv`39N}`*(}d&uqyOf$L*hm%Kz`}JgQb75W~~w| zv)}RGpj7QcY=?Oyh;Bv7)czgvCe|}5o$Aox#_9XvE#%oi?89KJZ3yzu43<)Fl=~aZ z5FDcgz(X&rp%qDPh3IiJ&V27;omj#bXY>7lBPRjs&Hb8*Z(QRgKg(%Nd(w1#3VovU z+Z1(3oZK1y>@6L3j)^N!z>Vbo-B!Bp=zgXyb=Yy+Uk}lkn3xTtEyP?@nZSf>CDTW= zYZmbU(#X#&<`0txYeM1Ej3sdTSr}%_T^>(rIShF1K^WGV-$S$TG?&v?GS}RH_s1)S z?Av|ZG=ofWW3mBPWxQEY-K|~_w~24gJmPWo7^NVDdDXeGVE!C<<47#2l;3|)M=(aG)GbK80P~$6cbL25vU_@{?9um9;cwe{s zk3A}P2-=mn9fE%dL2i2;t~yBjaE2mHt8w}8RQs#wAcU=M;OT(sg+*@IZv;&?FBt3!bVp3e$mWTT%p$Or1RQpQ;qk|VD>hoq;???&9j>Z1yY<5prm%_ zSf!)(+jc7d{E^`My$eQHMj9HmxW(w_+iMa?E;*`X37uG z=UPxlff$`aZ9gFEyY0Z}64(1;tH3jLt4qej6;_gR>1bUYGzE-bnFYnmx$%U>?;}I` zb<_I!Fb+qg6wJ2Qt==_Te7X*h=fMdAJHpy!K@yI+WdX(V7wvxlA6neP_1L1%pH5#M zP3ijakVA=E+INqd!$UFWU=lG;#3i|(S(-cuwL_aD3RteXvOb(mio8y-!ILMHPTIpx zm6*$n=6+}DFVGd6Z)nkY{YKUb)P(cGm85WQ)^||K>?w^Bjh8aD)|x|?jr>v$+G&mg zl{54u>mIewf`S&w!@N(MlNKJ=yEln*Ir0a7VXzU$F z79>7{pM2o)v)7pc`k+)&iq8=2u5#S$Q4&0nGaWb^5wQDu@96jB`7+&o`r^VQX|_^$ z{`gn2qlb@HK;2_cRBmL*tLLJHfQr*sxn&O~^I_K}mVmUgt_)q4(z7_9XPP(v{>Ack zVRLUg@(QGqAbe;ezH56w{ zI0|I;2Q0k8xOq> zh6$M~Gm)5!YZ7~psG`tufN@{AYy!+>x~ zB(p%fz3*Oxr4&C3lQ11v^pl7AM!+pCBRw=-!dab(UXLNz}gx9x2Ai}m3Ubznj)O~}1BIZ4MEcK1L$seL2(v@0mRR&}2S882pW)#t9f z_I*LWhjhHQ`a#ou^f>K!NEB}v&!cP^LpSp_*8-A>tC7<>Z)mRwqmP$R+{5mh>|1%f z9`5Zx_4^Hv1G>TmozG?_(8xi7r$bf=(7TZ61~M|3NY1m)&Sk*@$3$rO;f)AknRfO$D(L_*1f1v(L918bgHmh`K=>>7uj9$vx41p>JymeitrT7_G9;H%ZlcN>ckpF)-Fe2%JxV>cSC^1-R7OzxF(F+#gVQ{dVa-zw2{y- z@ASOwZLbXIpJj;`PXdvyn2I?=X(EV8jtq6Q{IFWvb&}8yFL6)^gZv!EW7$c=WR3gl zEy0T@lsl|^b5Rj&I4A6HktwO>{@r_rqgfu-+EnOz8vRRKoj{f zSVAm5;(G9Ku?hQZTK<@A0>5G#ium3Hq96V^McT6nM(8@ zVk}<)7FO3P}ho8)(iA@-m8L$V539V(k-mpDO*T)crQ(O0Mo4!lj+Ae~(L9 z9CBB=&+d}hd?`7ws}xP#uO2L@$WR`8|GCCB(EA0N-QCN>QIgt|(1pzqPdA6Zl(0^id)ZLrOOEtV^hP8o3Lv1?OHm3KR+u2->uDa5(Z# zrQ|WgYYzdT8ht@asaZUhMtSBd^73goUaaky+7$>Tt(c6x=JGe5Uk_*0$f z@nPJOiKGJqk*fW79OycQYKtY$46p4m!Q z9_}A%{^Xa>icJ|^pqw1SrDhkjS1Co1pE0U#zJ`T5lMO!j*grH@OVXMiZ@DfyzY@HH zvzlLNX&j^;NmTrEwe&YrAY+Yc#52c@bQ5a32geRsp*z2oIil?q1uST1pPr|UEG%y0 zf0|}N#mRukO?QMXipWoYQ(_j|PphucmFf~!uJaGR^X_VIQ2ZF>TR%I9Tq5s~}d>-{sAEbLY3dlo4B?(VMH*Zh1X)`7o& z|2j66ZwVeEHPk-?5|twL*lvWj%m{7|=13MBI%?7!UTihWXuYv|DbTjxr1{Krl?no} zoN?rifL1PwMwU9rDL0chE@l&L5Ui+F922lD0XrNpnm1Hg&|gW#?3N{0BNP9FZm_$K zImL#%YETqhrGB6gvh^4){Xwd1o)SgDF)@!qwf|+i-cE>X+rO0TSuL<(t@NN?u9&?v z+WznFUs4>Eq+{a@(Nvj6?TK23H;k`5%xR;e1-?s!<@5-68rj6qx>YQ2?F3}va;mPR zD)*xQ`=@q;=1@g`dmBoV9!%3Kgz4!nUS1AIgKkEFIO$MHxlOI6@+DpU0ES+{6zjZ{Esmx77A8h2Q-avd3Ak8$eOj!-utW3uszTw*UKmTGq?@W7=5|2Om9WNdxZ$ z#}||Srl;Cd`lk6v>pjGG-4&KS-Rf`F{(JsMiT-*GtC1xeU@P;}2km^P;7q1V^r%`g zHi_|~BAOy*Z=OSMy>K}2nUbzwPW<5+td84NhApFOOLH&>hMR2F5aP}P-YB_!^SVOl zW!Es!@HNWEMCNW9#_I%XmCXpPO`OR$pZ;i~K8{IqAw)GWEi?|v?S9X+EQ^7>$vyL< zpxc|Yn($u!yzjR%%inWZ#K8`lVgwN zP9L>I+4?N~+GWxF#OY!4&H6pw@Rov~y%HYZ(-+WM>enBM5+&yfw&!^1fp60E+o?Cr zriRKc-q#B(QkUvWD*gDfeu1tx{e4D6v)-GRf{5M+=lRsK^`y#*4`bJ8RrM_o-va}g zl2AZ-$%laa=$t7fstg4>8PFlhuw52uT#JeFcMg)6)E-rw6s_d+$%JhYl#5BOoqkTQ zWRZ7&D6cp;rR6KUkT+e!R0dxNN`u)F5eAqRAq$*u>-_aQ7N`2*p77*)*R5hBzAO$> zgdbzFc?X{r&}>+!$-(S#>;*LJ!agko;z3=3qH7Hm9Z65D-xfj@f0Sw&Y#s~^OJN&P z2`^KiJHF)xn1B6(yjS~Wo1wRs@f*bAh%?f`%ItRImq6f4TKMH&$wG+^a zoe+KxfH`z?muUWm0=~>sQikPs#U9dxxDG`xB4P0tly=+(_2(>QUrfhAfPKAnpG)`& zOXd)z*vJP@SL{8YE0DbXjBTuvySD9;zS?j_rBrFgLp|g8-Je`67AhyKXR+;9D(3vA zLCnqAa5CdS0ejR*BzX57>}~THt%Ay5rye zCShe^F4)KSwLu)eR2b__Lr>T7>Uq_&=5>QHz!PA88@n9pDDwAZ$QtsMRbv`>n8GFz zW}d8T_M#5H;m^AwMAveVmJ|7N#H{@jmy!wN^!2lOyL0xBKd&NFMm3b~RA!jq0u=A? zYs@9@yZc zXjhnhU-;IC2R7N<#JyiV=G3MpHSE%86dXD&mew@8ZMqe|MS(Zl=k|e*;m8831fIh6 zbS)KRh4O8a8-k`YK_j zuEzn5w-p9c^)0UlAJiU9N~IFJ@hJ2t>-8w+{A6KuGLYBzi+FZ3EFP28E;KOm!2oJ{ z9kyRckm|-4L%C0N*2a33`nc2*_Xs$K0;+5}`c|12{_&|n6K*^^Vb+J8FYoyK)qOD} zo`}zza+V@qE}T6qv@c>h&%neyGF5)bQpJ{rzLC@(M`=&aozM>hxyppX@vW}O0~6bi z^o*_B4(p$dSr@CP&4y?pGTGOE&j*@f?URwlNYBmPu8VadI8Lmy3m&ld8c7-Mqy>I{ zSy$!?jdFS+(XGJ8K0Ebpx{B=2I@roLH_*n1@6tRWE8i!(tA zeKxI9F^0XSdU$nv+lj&Y>sDN1OBw}k1pJ*gV)a9hP1rg|du@D+RL%%|YzBA{onFg)EvbnhT&^j zD+lRb3T$z7Gkr^184Lk7ZXJ_H%r3|RF~-vi+x*d(-wW7E#1}mTCtE4sVk$Cu&Yx*F9RdQOhmb{>CmZrG^AhC~+bC;R5_YLD0!~D|2>IP0- z`gWRWH^U!)xM$rAzl(%Q&Oujt3QAbMDt+mT+?-17Iq&1+bLM6Sgkao(Z0h-xdqCV`SL1&OmbYRf}>i3Fw6DD75y*b z{m$q|!b|cYYNeM1`4EzQjV6qjTD>eSP2J&5a!QiEaeko(%cY9#`;ZKS0;`Z)EF**P zpeZV%&%WlXu-Y>zm(BXPHCX9T#X_0I$8<8=vq$35oA^IpukJ@9HE+;-37>WJQBsUv zAHZpwlV8ZR6cUrVZl1a~QEXfWM+SFnP$3IqoKg3ysW;=%<%ioX@OZ@02x@DPhnlI@ zysZ&m(84YQDTyo_;EB3l6{kK)tDV6YG7q+}KeS&^tJ%W9N#jrk-Tzc= zLUmFEBlB>@5<6BdTTTA7(;A0s_l#0)(mo zFYv-b0VRDBu2|(afhA!0tD>=Xz{@G7-ykbHh(yi`WWzmsf`=1vV29>)F>6Uo8^_~8 zHu*;BACJu=VD=<_B}UvN#w1xTkZvgwv#VVN6#Q^T&-UYcB$L4{@S*5jmZH@;Ol?c3 zoP{$8w^@|19cC{5f|+>~AJ@N?*8|lQ(>KDK2ll^b#IJ&TRdE!@ zrGoX<`GFL_syfGKFXtM-V^jo&*(tJ)1p$t!9x!Ch8luEESy>m))ui|0+hN@w>+YP_ z_+R*~e)W{#-xJdHZ|bUPBHedQy}+Ij{Le8#h!7M3XCYhl9*X1Wo}H&Tz(@`Plzood z5HQ(|>G}xku)yqrJQzi#p4;Ot5fvi&J2EzvzxSj^gQkD{b&tlW;;>#zI|dH2Yh1Sp ztsN)G4-3_l)dBBzCAhh0xRhTlN-QdqE9O3BE>3!fW0bE3wzOZ zmP2%IxZJend7=+#4x{vQr^s@#;ht7|BCEkZ{B<)Gu0nj{-ejzjj37bB(^(#kd5Xv2 zunn#ySn4 zanWz;YfI=3>99Djxe5xL@O~A1%ot`<|L`-3l~8zO(iIRIT{~%pz5c>fvEZ8O@FFzb zHqt#sqN|54SC(QU9U~ZJejD8$Bq7=&o|x^Vk0!)%d&XC)+5|VT3fT0(N!FZp`0&yD zY|8yTmPu*7jbpCbO=dQ4HYx-plrxURcNkoBl65BVNc6NhzBT+*?amrK7yfhJlY=Wb z7VONHPyZ`@8MZ*bw}J-Vp!m5C^d^juZe<#b$Ga#SfhT^Wa>QcUY7U2RM;Qe-QhqWO zL`lgWVg}kmVHDFe`DyAuZ#Gq%LkPWgnb6@jv+J)cKU(qr8YUwP)={J@k}X`k!WY_S zv8(#6n@*$@O4i3=s`&8hDOLE`);Q20`;k#E^s?wJaw?I}~CzCqu zbhSiYkw;nG!#Kw!7+SuejsKp#fkA%Xon!4}o-d3I@w`V9tt}PIhc27n5Z2@B+!N3> z_t~G%fJ2xB0GHmPLDHw|uUwG1{z(?rl%lLh^1uRx11wLSLPuf2vlE*@{Q$FfTcniA z?@^E`&HwUNnQH`+v3k-bOimpEsw6WUb};lK3P0Q5m>c)~&Y~@eOz(`=IA_S7JP_<( z+V&Uv$^4%L5)cL5ycV#ud{qcZ6^cfEY|t6Y7r_)BCv%aMF`80WsPod~mj2Kq7~_w_ zzOhk|z{(Br8?i^^Qys@~-DT+y?K_hGLOeuxXSiW|_tx6Z&`{mb@ZU4WbP<$=~-Ol zqJ;)}trUgdxxxDpI`_(%K|4+^9Inh-x;-ciTGvK#`!`OmF{hvw2ip0>6FlNd#boxy zTJCB#7cE}=h)T3K&unb+%%;|Q;T;vac#*Lwbgx;N^-|=U!oHS&61RC#Xq=A+KA+S)u--3pirL%SA_yya5l-^UFlvCt>|g;g|g;4jYL^u|492GSrC zsqcBGZxg4bpQZSggBMc{u8iLY#tjU(&UqNNJ3K11hgA4{QF6qe&qNKXiiGqL@J;sJkWky0K++;6Sr+$I>9J|i5icJ#a}$45+$V<&>`d<3S|%6ynkB9!a^kv z1Xf=6)4&-cy3S=+i|uR)@*sG5orKOeMTyw-b}_nZHLa|j=8|i7i_nft6&C(@5TBGU z@gKYSsUkhXG4iBrKk=wi9=BNrR8!(+LCC9ny1ezNt%Fz+1s2KoJviv?FH@s?y1MI~&eVKl{g9qoJ zv@hGvFw;Ys5kcXH;~#OyZge|(DEO{Yk}+ql&}eO)UZTCx`bR4ndEPpjLVL1q_6>%8 zv$9-$39fd_c-i)~H10H{IuG2S@Vr70odJxOd}3R^Fuu|w@}sI~gIkmZ=F)1b9TiT zHRn$kfg9mp$gPg)2QO(Dj)q=cCfE8K8ehBS$l9KVcj3vvtOPRm8_{2GMWc_T@|%^! zf`O~#bR^Olgi z(Z&{{(HJ1)F5PFa65#no_Y~XZ1ivG{XY)ZcyyS@M^8U|xTHR;tJ>2HLnq(B_(hRr; z>)!gOZHCK$kd}qqqN1WEANcyrr1YPP8@MpX`PlorD=Z9OD6@NP2zsViL=!Xc(zS;Y z_Vvegs*%l+2NtE*j}wNIq?a{KimT&$2vu5&*2|2T!;XJA_!KqV;X7d;*V=*v`&B`y zssA1upweBp_!_5+aE?v)pfl@b`_7c`{_BLljZK$KV?Y_!M>YS9N?RjV$Se{hB)AR6 zW}%a-^ts8y^DA?mE~Gm>>jh(efu8_ygM@+hA1y+|4C9MrIH!c5OoSc+i z^Nm6w#7oz_)BQQ&c{@wUQEmEZ#2`y;>S}zv+|O_7t!0e$I`x*}@y#PSU4QY6-P5s< z-`_U!FssPqg~xLM&Dk4Reu7cR{6r6)o&EM*hj_;MM$|*um8;yJWTY4C*W|Af=MMI! zqDNa!nX)NSUqqS+Z3L#cA_eNq+iSf*y-5nHziOM!vh&iiRRR?AOkXA+ywEeM&7#81 z%&oW8?NFC{PsKGb)nCTH=Z2GS}l$$AOt zAvb0{(1K;;XY*U};WbUishaN-RoONa9cVmH1ejeTW4hYnG5N5mgB5o3=bA`wi056; zCVCNwWOmpxyHf=L4inK&H|xi$H2m}NeO>o*_v;wzpan*m8I(pHYff@N^YT%k>}l|C z2CQ)KWSo>GGs)ZkgBsc&3jX__arPyBBa*#wvHlKn#momTQJC^{RH~k_mzLok7m*|( z)4fA`Mw@!35d%i=djjOHAk1gjaS%voR z>!d#tU1eiv`EgrDxN=~C{Zr;U~slB7O|uJ8Y9x4CW9C-}~F0226KHNwGT zMX~Bs9_W2Q#e%n3GjpvbuttD@4JzPANwUi~d1iBlOMRSAoAPE;ra_Q_>mBvi;&=Kn zPs!6}YwfZVA}%b#y4O~7Yr*%C8r*pwZ4QavYQUr1q|y0@%B4 z2{fzTC_I9K(I8|x1uaJyUU>U%%jOeD(_J*@hab2!lEcy(Dea;ASP06!5c!ZHC6tG5 z42=)Y6mbO?7tnI4qpkk3L3w$t=?R*n=o1LUpEV}MV`9Q*;u7;B`F?Loc2SERh3(sm zpug?O2=;-W(p2+mw3#?$8sSyJ4F(7tckIecL52Njd2!MCjyp5ycip8%FDJ9?Iq?N* zk&%^mAM7ycVKFiV$5bnJ>>~wwOe)hUwyw5RzFF~EwYDSI%r)D#)sFZ2m&LX#QqNt9 zps6XoKdbipROBth@?wA9mmc`L8{s{u+=H^gkyJ2^mQ~XmBS99HX-a9Y*Zn+RbpF3x5=fkeUQHn$*?}w~7 zBO&8qxfr@|!EC>`(+@rl1gY&<`qIC92D&Jq40A>cJYOWk&50P?j=V2E{$Ts1_=k<7 zp3DH>{$HvRF5SCrcZT^9EEV?GS&ZXJI(FhI^fSc;BK)NvG8~E`NYn&%LU1-~ww{RB z7Whi{&OeeZ_y5^gM+>cN9NyXS1?o8xLTl1Z=JHz6bYt8hASJu|DEzqkCV3>qLOIK_ zOgVd+(r3RP%67Er+uxKhQHG9sngWK)neEybM-xSlsu(+NA51LAxuXXVi)c*yyr|m5 z6f=?`aC0!e9P;USUUfB^3tskA{pz{9bc16+>G02`FWDs3zsYU9rcEExB7qHVbXo1? z)6~E14ghc!Nt5%{IAXeh&wMGECUEO-|3c+{RD0{vPPS^Z(s{NSyQ*oAv3ptejXiNg z?v!5oUF@{FC%XV^wM24P0`_k%4#%cVwsZX z(QNv7&A0eYNp8E#@#_NKY{_oBmjxl|EsSti;ja^$<5qm*laqX6Vga7yVNu6spJIH@ zupqm;4N`G?k^$CG$7!-pqwlh_UKrT|xxqHF^Rj|H!{75d55_qSQz1lKHAN0X)gJrF z66B5`ac@B1Njx|}aQ!NVvG-&^^}KJCdQd~Nzcp+E!}3&!)_YNsxL1aZ+=;a} ze&7-EW6xh)+iBmP3`Hzaznx6!o~!k!Pv5MnM2B|Y!Q<~}9x1JU(Np9hhp=X<1+xPq zvc8Apel5r35hP}75lM>N_lE$U16rQcHQ?{99N@qr!-c~!lcEBMCb?kzkDVv&0pH?x zPkqKA$23{E^mk7lSq!hfNGFG0Y{rTOimyGC>U67}_SFr^nd9XJU1LT?Zzp`Tbsd`A zh%j%gBouz?-*yaS-Q)E>oMJK5GJh{wGPi5RPiV!5U>11SmW#_sgA+|B7noR{A@to> zM|zZ3zrIY?8A!eDGr8&jcc|9B3^FHF5 zM8IfWPCs9^k_qU!x<$HVRH6Fok5tKc^&H9{T8;5Prr(|=jg}cyic{`U2acZ@q0ekh zCRP^D#RzG)TU^YY9jiB8{3Y^;zIQiyT)+1ZxO%d0W&EOUYxF@H--N!h_Lz^BoTFLiPs?g43$P zqjHO#aUVn=WamX>sq$78liwu0@z7FsIj>WIN8hjyBeRCPlC^BC{O;Y=b54zp^RMV4ea9T;a(Kqe_?ts* zg*O<_bs3lLTjMSns5PymGHS~%S1=X6W7qpB%XT;xmGxzf(xAF%IxY8*;^Ow-%|hfe zdJ)1Ot?;C32r^i)f)_Y&JZTcvJ!cE3crcCbUoUn%gM z*7?pEHB|2p!iXAkBz?uI&iA4#R(NReL+H!J^TI!)IF`)-s;i>lCRXuS=TbsXPR9L3 z)2++_*EgG?G| zS*ry9l|K`vGWjHxQ!KJHUFkFb7GY65Ke= z3CHtkzj2Z>nJq~#Q1BLAy%v%|ETxAdiO{CN&|LXlyi|8g6;@%g+<{pl*{vD3N+8{D z?7(#XRE|upi@z6BvD=X;lxF?D_}S)q3+SVb4f@m- z$lU!Y6vYJxvTNBInt-ikN_p?yj6XeZ+gIK7sHy;0mLo{4--RZS^Gf&5Rm%3;AMRDY)9L!-EYDNpbl%w*fI4hrXV zv5~3tv`d-4r)Zio{aXa)^r>!swoi7po8)~LsCv^$$sQc$IJXtL+i2X++C&_E*R~c)B^kB!i*WG~TXfOj!&SuE0x4}3Y00_TAipci z=FFqlmeOpdXufl~sjwHHS{o(LbxHhByJy~Ae0^eBoRMP*0Oi;m5gDVJ9- zw_>-MWBm1@JzYEN*S1PCMW6n?t*NelK>)DV^VhFVmH9-u-2b2n`umy|Ha`*_&19N&At!1N0=%Qt)pxD zCfaz$88{}EwZ|OmL!ZTDx0Hycy2DYs%0c*{dj8!S7@z&Xm@8VY)(;`xq`l0gd|wFyt#O4 zKaW*<_mk^#?XU*AATHe_uPi<2Yx=-HInfnmZ{!yqOQV2V%Kpoe?oIrSdIt|&aO3w~ z?5aXB0%(*LL$E|sSzo?XyAsp#&NCM`zBq5i?n=Q|qV&vQt3H2b-u5 z0idzb!IL(}3lM6AjQnrRSofh@C#x0)vo4u!`O8pYsa4D zka1ztdz2EMmOJQE>+x2*U7J3&_^q*)hUC2eosW%{lHOknhfi=>osaMxw{a)}0Js3@F{d3dS6XbD=H2YRW>z`1RhHv<$+n~x_ zD2Trkjvm$-92(ScJN+~ITp!pW803mG^?u-P0oqBxX7{}zRu@StAR)g?dDse%wq#)9 z{^xwTu~A5j$KLCF!}w9_x?_LFo@(KfFTVn7&SoEv(Id4QNaBZStwu^QSgn*<{|*k9 zJpLXRsGHd7V6!YVHj*5>sBqPF{uPDXJmW9a$u?IxRMBKWPScV3w=wk7cCe@V=(#3Rh%EtgFcF=uiG(+QaF`c7mZ#dj ze_^k?nxU{ARW`BPWWY1)V$C|pmw1!AC<0y0fBUK7?7G_Zg|1}dWdF#&g$6u6~F$d&UC zDP}Uv%%zQ=9nk4f&y#v+@`HQG|HisJSu0)fiXI3+JGwP|5^a^|>@&*xm*t?_}x)m#Sqg@jWDe!RP{Wtk{ zDBJ22=io^<9;F=jfeyQ*mZu~UpAkiqA=2842M2>yQ^iT_7$+i$BwWBr*C#xGjjZ!Q z^>eGcu1|>apbRa`JgMJ9uc2}Ehod)eFEZQ@U`eei{WINA)3*n$KXtCYe$I+Y|Ggpb zLbnmR#k{kDyj7si3a`*rJO7C!;`t9dX;)?mdiCD?ko)_y0bD8u&hk|!#MKmv_3PP$ z?mn?{U0)FcDoePR<@VmwZ^F1^;dNIt1+}3IhYP7X_;_Mx73Q8@FvG4ht-Kc*?AA)g?>pL zOffLjXL+bURVdCNVJ(;871jzh=N?!yIwAkSssRGBC0d)dL9-Bw-iQ1=_x;Z7C@+O+ zW(oG=4N|C|qO&9E($Mh3Me8>03mu%3^uZ4j39bwMoVY(FxjbKGbn9tT+H-Ier zY~TF|{wCuAto+a^y7nR|l2d%#&HWqeF6}IkyLV}1I{uC3AH@g#js*^vU3ybbicJ%x z3MTNwfl-tCuhqTuq3bVOZ*B2rq_0CbY@yz|5eeAg9u<1!Mn)m|jidh0g~VB1E9X}c zOpZ6|8ID;{eceXeV#?P_aCF`5Y^B@`{qEm^D#nsVN@5nyE@cg`agBLPG*`}wgr#N8 z%<%@+$XLbWKlw8Ts53x&Te<5$bY+lfF|Y_{WrIayC>yGGCpSgQrX?gU@HZgvq1Dzf zz`b=JPssXJhx4mXE@J=%3OEy#CJeGN`7GWT8nyjmEt3DlGIzr+gQHGh$M%{mw3M$%L3q+Ov78^^L$G5{9rs_2U~aMgM)tFZz&|G$4|8=G@shu6DzbXlHbgsUIkY-jjlxl*!Z*6S#>)eFX61dw1W&yW zrWwW}@$)IDoLjOtdHv#!d|a!cGi(S!f0Z}pZ)z!aFEQOCxnR7!(ndw;3w>RA)2>sT z*wNbUn!Ii0g2?=|5K*RlKJP@nUw!8%02cf&K9ikW+bl5S@u*mUy=JTVpY~6DoH7;M zQIA>E2#3@ z4X`>o=adPJ_))1D`vG}%Jk9-a#tv-C>0Tqe2*r{m)6|@m;)EzwHOiI#R;gF0;jURcS~W;5D-x_B@OL@@Tfbn>c5^7&+Ogc66& zAd{y0w&*>}>CThB1SIM_>jK6W?x47dl^&vNGrWJ^TZi7ZHmh+4g!R!3HU#*2zfyUO zfp-OX#^pqp8-I{YI&a>omRLU(vi4 zNvL{#mfkH_N$NRz=!?rN>|B}5SV-kF9sTswESt1)@XdRH1?s-40(z)nU#dmGE*Fhf z`vnxn$LSkmvnz4)Xq-Et-f~7CqK(rRsnA4Yo<6bu*)rKHTsm`E84iuDJu&P%O03_SxcXvNfHk<^upjF6{VlQm^fyJYHKYLCl%KP{O!)fx?80$J;He5K++5NHgL}Oeg6Hw|My$o z`zum`Bf8&Ui+*IHfMjj_~2h!+CkbJ<(-A1Yl{OujPMc^*s)z9G8&)~ar zD8JqrE7kt$x~{Oq=lLZ(Zxzp5B?xLEb5H9;=2vV|nv$f``$#!sU8O$T8KrONeOPw? z4F`XyPTQnfJ;`zXsy3$7{+Dw*|yUQkRhB~?tnn3Ii&k_*0Z!; z&6ppV!bu;+F#5U}erDzn>HZINdi=Fd;IH8|&f(Th<2R>JLA9emjNGtmgkz@~`2H%c zw;Y0AHNzM`aW36G3L8sUjy+5|y`T1gD-9TCk-nk#;-toIxa+NyOSO8A<(22C)-DnR zE@Pwb##}cJTp*}7W?5Q(jzD`@Mvh!|g1+9{DCGBJN@rIMK_=DD!O8c;hM?({V?%74 zIfi-yW@ZS20M~T~g%EMeuMEy0 z{O3ckz3Si(zoblugE|tmej#%-*B-@h&Y)Ez@o;4~D6}F_O?+J_{A|y!F}v_MmD)5DBX6N6zn9$-OAUoO1~{_k{g}o#nOk`Ut)gm* zuo%c6L}|@heflyLfbD~S<2vqy2&Kj%<;F6$nI@MSppYIUZRI0=LGpff@=|M!MLgwQ zfAB{JXQjEwsg)NQ$i#gu4*~Z8-%OPAuWSH3&%-bbfHx(Rf71IlsFiMk#8(mgXn|G% z-D9>jUgJF76K6@d?cpFz-(SOZ7xBDh0#ys$d%Z4+w+`q#0e|SO7RjXd$8Mn38q4mb zIPeY(Gk2ZAAG-V1`V>n`Pf)3xLuo%z$slf?$z;Y!r-wHsywn>D_~#Xo0s=plyt??y^{*Ni~Q%5iw&ofy()dhz*i0x}vYZ3YX62vk6+F}KU$ z7aIVk(KP)!jmkw$ zM)w0BSXfy2=J4?F_6>kx7$~Krl=1^WE@b|#BE3gJt1W8(uLAgiK-CHSHB4)G-MB8% zEg+&jf}j$*_i>rd>wsIYOX6Jv_`~07kwXp?Kgy)1a0FwMWS&M*Z_E<}UfkB(^2#iiPmoQGkV}taL_ilp(DEu=oc%gY zx5UKo!`NnaS3-hNw?EB+@h}xNwfKBA_aO=g3I}n6CN+0;!{)Rb;O_!z^mkwRl$uMF zTdUY+mb}x8ZDvqfQEQbcH<$5MaKpggPE1@XpJlc-#ew3j?PTElhKGlLU2DDg^2;xC z`|Y=1-T*8vF4AhXkW!8U?~dJS{}qIPW((Hes{{V+<6@dHz6UZQaQuo(xcSsGjXvrd&l2F+V0&w zBVafj7=H^&E2fuTh=-BdW`=?M0a~jsM?8V+2>x|qol0vOZiRY81kwuplzXpUB zRJ|&vR$gLXPn^&_s$m<2x4eGILu+rDWx1pLwO@!e(W z)#q?qQv^YoAgIuCXQXQh#MxeH1g}-6Wyw3VzWQ z9;_$(+-UH}=cY9$S6-s-RonMH54_tj3{k7qt{ejN_4Q#GhV*^^T_FcRAk;F#f9mGi z`PUuu{bjsh4I!*Zcp->l-mP8y>#_5LAeEZHFbna|3SrXI_aJs^Clr0K~YLSSr=wiXDQtra}K9#dtN@@e_i#0?a9 zL7k=Y30%KUF?%3E5E86b&Y>=TiG!2xC7T}FHBZ1cGaMLygj#ErQf)r2P874_RGQ1w z-O`4N&GiER^8E%b{G61sB$>YSfYBMNoV(yE8KpacKuam=f2GJ%onIP z=MvfL5abPandQ>+tW{5A8ksJyB$FN{lOEX;n2qKVLEt6~NfR$<#IqLK&r4~=TJ0i> zrDJ$OJ#pU!Yt<=EPkotcV{unKfn2Je{i6?I8L9YOEF(=ZI~L8~`z{23bS@3A#+lV) zasLT$i`M$Cc7< znWE790Mf|p`tDz=UEtECKVy0283NUcUGO$oOVu+hm7b^GTEsBYI8i(v5|IoF`GXin zYSZ&l+NaT6PV_Q>>(?TAuZ;qpT5BrJITlLCA})VtLAH%Ry}7)rMqse#07JcpyF!6{ zY7i$JoN?2Fznv#gT1VdM7C_fJ8WpZkN_88IEpVrG_}Qmdk5Tt(?fYE--qvchE}sJk z<5vUVEkuJp(ItfUEYW&?4S>J1K-yJ-t-v34eW|GKudfOG8jwZ?#~w|Hen2{RkaT9> zE`wiFD!sz=^k=EnrxLt|XxDEovQ&DWwOYvZ1A$}rA*B-+M?+r!{w?4rq6FYl*RyVU zRa8uYrfWlJAFH*NSXg_7mRIRA0;TFj&RqH`O}DgbM!=936N7i*Sh*PGrc6;t4?~w{ zcJqK=X^oTy`Am`C+#qQ?8x`3*It41~L>%ZD;hy~u@utIX<-qVQSfKAR-}yd{-N^(6abHsk<=5ClQc6B&Ro5)95maGv$rbvG~gqa99WKp5ztf$o~P z(h-F)tRiMAWD)w!d3<*%G74hH;Mag{4PqoZ4uwpS@3||QF`#xW%fGtv91Dxz#EW*? z_I(Ldi*o%u)y6bIm&m3;%I=Q|I$A>}Ge*kUIz#XKby{vICbntq#N;jXYy zI>unnQEW3G6J?gmXOYui=kVlvu*~c=8%2$#kR4{QXFpSmFUHBZoYRkGOyT;?n{4OT zjPy=&|Dm_BfA|(0E5%xMg_ozE;n}l~QES!E8nUSz4<3Fy_a1mNJ=tC)f~Mc(m8s|X z((`}LYHc;1Q?S*BRr9KxUpvKtVq6WlLu-8ics4me#7wgPRLHX03)~hjIq!K;rLMBs z%?y5N^^+QSCwAc;giPTzE>K_kI&S4yBr2g1GDW8Ut>lJ3jFp}UU1oQQ^6Z~cS@=pU zaMV#^0)6x%UffudWxpIyspftv5XA1 z)zkSTX;8@T+p?oCOaQKi13VJs7B@CHTZ6y-yX)>M3#H=>^&G`EbFtA~Ts?thW;rna zwwOb3ORA^)^frX6zy@f0iyK;a3^_heq$<{rCO=Lp>dpo}P3c;{*HX zFO2Z{r$2?11|PWh%-TugsV7PI>{sc zd$0`$&;wCr@7d%K)7St=Dcc6%O+bHW`WxWAh$aBcn;iTKGjovKo}b6*xrg?kPrGn8 zsosYvUHENkOJ74so5J`f$d7#-A=B}h*k+!-eLn{nl;*w=WyQrdz#qnHrkTSudtwg+ zVUo??8V&H!yRh?nEG~VArKQIRl-qTW>&-bf8v}KR?`6anWcDVQ}Z3`+5HSll0{V zxp)7AUEuHdwQ$$o`!EcXzkKOSOf65LRKR9EDgwc!%0-g}&ySNIdN)GYaRTge;BPN>+ZselJAUY<)k8YFZ})co#m6>) zUn@cj#%_SDg zry^q_qWpr#`MJkgTssBVoDT?Dg8hZbPPhW3?H)|SzGCj``hq`<_m58A7lD6h(@DY_ zjbo=6?VV(#IEHx{tpy!6nZ(-X5iQB13XZGxhyqDGiOUqBPxb$cO`~s~M<@!0+sweT=;lMiZ zYppS58r$r2=?P(w&+dub@68R4QZCKrN*7?Nog%F6Ke+dsnhJoJ+c^^9GX2Vr0^P#7kc zzVe#UXo{I$-goB*c-zr;MdBqJG1d&4TqvDOmIEh&!^v`>gs$HIeZc-UXz-7tb$vs8 zcQa-Ct->Aj9Q?aDeUDt`#%Y9fFw^76E4Hj^q>-g(|^?4Q-AC3F*L+}TbYv(A{&JwhB4c3Fd?fzSR7>3g^2xgXiZt}8= zEKn_)Q39}C=l8t&Re`_#{8ww2SgTDZ)O#hh#tLVqzeUq6Uy~8gKrY=+#_5TFzZ3>3 zGvD!|Zm`=ggu$DRyo=^(@uqB1zr7yC|V8#PSuKXG-4AGbG-_fe6H7odmzv=l3 zA(*SrQf{@4ITE->2w{1i*KGhi&lA9%VfIXbUIYJ3!g}6Z;1@=o?ARwTQWM)Qv0156 z40~WlZnt+mEZjbd8Y((Ws$)y^|F_m^FzKCLyC`h{(QKh#Qa zu&qKOA7GHrUC#XvKda@I!WjmU#}OzWKWKJHRyzd0j+ulmi{&#k-Ab1iH@o}_(~B=| z8Xs@J8eo!7_jSs>8XPMdP5imR3_lUp`-8yWwo%h)3h5%*RDN6QMj-H%%dzQWw7eEw z{RjzSTFtF8U7bpLSa%8`db)A|LI^C&DiF$lg&*dh2eq~Zv+h+U`DhSk4l_NugZjF{ z%IwA1q2|8ZoJFbDCakh{`Ol8je&QM%>GU{4*jEkyW@~}Dxv%1SYhCxa)|jSLJKO1T z*aH0RMdw&O7$OxDq6{-lE_>y1QBAiL&ghFCfEP4l#oMa`fBTrE=~Y=MpT<`m4 z=jI+~sdVldLV=JT9464BYKKgPrOu>m*bSiff}r8ndGz>KSSU|NK$DUFa_7%x2|lqU zHLLSSA}Ke^eEG${;OTQucg-MNAF4Kk7BkgLNiSp%FcF7@Ne=`#)CmO7qLbskZyJVQ z1m~bh;4UMr!6@Uuja|Yj?f`}ow>3v)`H6Vq?0PN2aJ*DH?(oxSq>;u+U+tt}f$vwD zpZgm1#!Oe8zuufi85@6x*PNjlt z1b?SuQfn=-R5{O3;c!$26tvtLr>DP7+U_Br9=NLTDdY5DNGqDi8#3ZdBL!adhJio1 zQM`Qd8RpieIWm4HlLH6n&kd1wG8odtkOrnSF%4@|sjg&l-d8?;;NvTwN~6rFxl=rQ z?insDT_DgZ9#pzjo@%B#P0Me!`2amy>)V0nE?&HdnIHfi0(!%bXn}vWtNwq}fM0_~ zqP!C2soy0(@e|nDL+fP0)=%5pP9C{qX*B_j>PeO^{sE2hiA}*D6DiCBLUcG1hMA4@ z{dW$2rCb&kzfGlbx|`(VuCQ7?v30heje?kluyG=T*B*|M%T9!VxXe_fKzTIXa`-%= z%k=z4lt~uX1b&_PTB}Wm^8m6Fu{L43w!oR0$GCmpd#`Ywn`dn-GlgZPX}GmWy3oKf zoGY%`>)F^dzc#~ab(M4Tr|8cQkxdoIr+eth6zR(|~$!EtS(Tc6ZCZ#-DZn?Vx5L0Te9sKQo1OzNr&S9DvvQB?=5rX;EQ{*#) z>>qv84#NSBAx+X&o)Sw49eQzLw_vwk-;M0*+dq7Shi`cglY{%Q3_BdI61n624u4T7zJAlZ4OB1OE2U`mF_mmHR?& zzsp+nB+Yg%U>o3XpPOS9kNW)t1N^?s1&*CVO$_O&X!pt)<{Pv$7RpvhwS z3|4O%JK|<29dLf`8S?1?hKdJw6beXbU|Z=ZWDCtldno9Q2EWpp{liE2zK4F2!F=bw z>ur0bMCZS8c$Y+C85T#!j?$a!<-dOYceuDT6;CSO$OmXKUz_7VF^=$$gquB$w)x3* z;(r0brBMCnrUrj_%qiYae(d967$EH^o{}JBDBXM+s;LkLrqhq<^plk7(psVXI`#4^ zEL{9U8kJKWDKy<_J(a@5FfyGiyEL)v-YAUN{@8KXU15IV>$vd{j8NO4Tsup>wXkFG z3t>jw|IjxKd;dqU%qz7d3tDbDOaMl|MCkxuHP;P6xi;`8*H67wVzGRlk>V}LXf#*L zt8r@jJ7iM5e zDhzR8=m6&zFCw=H1zg`{zCNG4kE6g4u-L8wg=NiDAu_WZYX1p+rR2)hmbj$~J< zF~@3cIw7$oDb?mVJ^gq*3vj!MTg!C1N@9jEVaMzE+Q6^1#x_$7_Ka?8EeHhVMv3!_ zXQHY|ux+nLDTV8MT&{0L1B>+qyiN;1mWc2tBg-=i^hN1^2xicDH!=9bcHi9ahcTRy zs0yIhN19uJefu$`Muq+S`6KH}N#V6inT{29h=6Bpi)hpx_pg;+j_(Tyn(iuVwKHKY zeh1)hzicy)A)KiEr!mYFxy+R-6Bg! zC-wT24p^#Opcc`O+s|umD^4Jo zS(#>TZH|W9;QZp*?Rh*%D$NR)R%hs*TD@MV29_F2w1QSUuM!)8b_lSSNdFJrKnK$| zwcD@JNHc@AZJ`Z8;H?q(73`Qhuzgnxt=82P!f-)KCrlDX_roxgSzv%Y(su^?1*Mq

Al&NpuPcLXPUp~u3Uj{2u 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%0DSrK;>ET~Nr#6kD#Cps@4h|t0ua6YHtVHhiWmrF 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 WLyEzn*rRZu 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

`^MK(qxxPy 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

Xa%yiu$ARbeg~nxjg=6uCp#{)^wau{G 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 Dw!bTL literal 273428 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Μ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

b%A{+Y8a$(;{1MqW@3(jO^7J> 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

From fc63de39dd4e1bd1bb4d0cee5808bb8f38598fa8 Mon Sep 17 00:00:00 2001 From: crueter Date: Fri, 27 Feb 2026 03:33:36 +0100 Subject: [PATCH 31/84] [docs] Bring back the Options page, and clean up LLM policy (#3649) Signed-off-by: crueter Reviewed-on: https://git.eden-emu.dev/eden-emu/eden/pulls/3649 --- docs/Options.md | 100 ++++++++++++++++++++++++++++++++++++++++++++ docs/README.md | 1 + docs/policies/AI.md | 9 +++- 3 files changed, 108 insertions(+), 2 deletions(-) create mode 100644 docs/Options.md diff --git a/docs/Options.md b/docs/Options.md new file mode 100644 index 0000000000..55aead805f --- /dev/null +++ b/docs/Options.md @@ -0,0 +1,100 @@ +# CMake Options + +To change these options, add `-DOPTION_NAME=NEWVALUE` to the command line. + +- On Qt Creator, go to Project -> Current Configuration + +Notes: + +- Defaults are marked per-platform. +- "Non-UNIX" just means Windows/MSVC and Android (yes, macOS is UNIX +- Android generally doesn't need to change anything; if you do, go to `src/android/app/build.gradle.kts` +- To set a boolean variable to on, use `ON` for the value; to turn it off, use `OFF` +- If a variable is mentioned as being e.g. "ON" for a specific platform(s), that means it is defaulted to OFF on others +- TYPE is always boolean unless otherwise specified +- Format: + - `OPTION_NAME` (TYPE DEFAULT) DESCRIPTION + +## Options + +### Dependencies + +These options control dependencies. + +- `YUZU_USE_BUNDLED_FFMPEG` (ON for non-UNIX) Download a pre-built and configured FFmpeg +- `YUZU_USE_EXTERNAL_FFMPEG` (ON for Solaris) Build FFmpeg from source +- `YUZU_DOWNLOAD_ANDROID_VVL` (ON) Download validation layer binary for Android +- `YUZU_DOWNLOAD_TIME_ZONE_DATA` (ON) Always download time zone binaries + - Currently, build fails without this +- `YUZU_TZDB_PATH` (string) Path to a pre-downloaded timezone database (useful for nixOS and Gentoo) +- `YUZU_USE_BUNDLED_MOLTENVK` (ON, macOS only) Download bundled MoltenVK lib +- `YUZU_USE_BUNDLED_OPENSSL` (ON for MSVC, Android, Solaris, and OpenBSD) Download bundled OpenSSL build +- `YUZU_USE_EXTERNAL_SDL2` (OFF) Compiles SDL2 from source +- `YUZU_USE_BUNDLED_SDL2` (ON for MSVC) Download a prebuilt SDL2 + +### Miscellaneous + +- `ENABLE_WEB_SERVICE` (ON) Enable multiplayer service +- `ENABLE_WIFI_SCAN` (OFF) Enable WiFi scanning (requires iw on Linux) - experimental +- `ENABLE_CUBEB` (ON) Enables the cubeb audio backend + - This option is subject for removal. +- `YUZU_TESTS` (ON) Compile tests - requires Catch2 +- `ENABLE_LTO` (OFF) Enable link-time optimization + - Not recommended on Windows + - UNIX may be better off appending `-flto=thin` to compiler args +- `USE_FASTER_LINKER` (OFF) Check if a faster linker is available + - Not recommended outside of Linux + +### Flavors + +These options control executables and build flavors. + +- `YUZU_LEGACY` (OFF): Apply patches to improve compatibility on some older GPUs at the cost of performance +- `NIGHTLY_BUILD` (OFF): This is only used by CI. Do not use this unless you're making your own distribution and know what you're doing. +- `YUZU_STATIC_BUILD` (OFF) Attempt to build using static libraries if possible + - Not supported on Linux + - Automatically set if `YUZU_USE_BUNDLED_QT` is on for non-Linux +- `ENABLE_UPDATE_CHECKER` (OFF) Enable update checking functionality +- `YUZU_DISABLE_LLVM` (OFF) Do not attempt to link to the LLVM demangler + - Really only useful for CI or distribution builds + +**Desktop only**: + +- `YUZU_CMD` (ON) Compile the SDL2 frontend (eden-cli) +- `YUZU_ROOM` (OFF) Compile dedicated room functionality into the main executable +- `YUZU_ROOM_STANDALONE` (OFF) Compile a separate executable for room functionality +- `YUZU_STATIC_ROOM` (OFF) Compile the room executable *only* as a static, portable executable + - This is only usable on Alpine Linux. + +### Desktop + +The following options are desktop only. + +- `ENABLE_LIBUSB` (ON) Enable the use of the libusb input frontend (HIGHLY RECOMMENDED) +- `ENABLE_OPENGL` (ON) Enable the OpenGL graphics frontend + - Unavailable on Windows/ARM64 + - You probably shouldn't turn this off. + +### Qt + +Also desktop-only, but apply strictly to Qt + +- `ENABLE_QT` (ON) Enable the Qt frontend (recommended) +- `ENABLE_QT_TRANSLATION` (OFF) Enable translations for the Qt frontend +- `YUZU_USE_BUNDLED_QT` (ON for MSVC) Download bundled Qt binaries + - Not recommended on Linux. For Windows and macOS, the provided build is statically linked. +- `YUZU_QT_MIRROR` (string) What mirror to use for downloading the bundled Qt libraries +- `YUZU_USE_QT_MULTIMEDIA` (OFF) Use QtMultimedia for camera support +- `YUZU_USE_QT_WEB_ENGINE` (OFF) Use QtWebEngine for web applet implementation (requires the huge QtWebEngine dependency; not recommended) +- `USE_DISCORD_PRESENCE` (OFF) Enables Discord Rich Presence (Qt frontend only) + +### Retired Options + +The following options were a part of Eden at one point, but have since been retired. + +- `ENABLE_OPENSSL` - MbedTLS was fully replaced with OpenSSL in [#3606](https://git.eden-emu.dev/eden-emu/eden/pulls/3606), because OpenSSL straight-up performs better. +- `ENABLE_SDL2` - While technically possible to *not* use SDL2 on desktop, this is **NOT** a supported configuration under any means, and adding this matrix to our build system was not worth the effort. +- `YUZU_USE_CPM` - This option once had a purpose, but that purpose has long since passed us by. *All* builds use CPMUtil to manage dependencies now. + - If you want to *force* the usage of system dependencies, use `-DCPMUTIL_FORCE_SYSTEM=ON`. + +See `src/dynarmic/CMakeLists.txt` for additional options--usually, these don't need changed diff --git a/docs/README.md b/docs/README.md index 5af1ac8345..01727ae4dc 100644 --- a/docs/README.md +++ b/docs/README.md @@ -3,6 +3,7 @@ This contains documentation created by developers. This contains build instructions, guidelines, instructions/layouts for [cool stuff we made](./CPMUtil), and more. - **[General Build Instructions](Build.md)** +- **[CMake Options](Options.md)** - **[Cross Compiling](CrossCompile.md)** - **[Development Guidelines](Development.md)** - **[Dependencies](Deps.md)** diff --git a/docs/policies/AI.md b/docs/policies/AI.md index 1618420a11..719548f4c8 100644 --- a/docs/policies/AI.md +++ b/docs/policies/AI.md @@ -17,7 +17,9 @@ AI is notorious for hallucinating facts out of thin air and sometimes outright l - Code that works, but is extraordinarily verbose or not nearly as efficient as it can be - Code that works well and is written well, but solves a different problem than was intended, or solves the same problem but in a completely incorrect way that will break other things horribly. -Human-written code will, without exception, always be of infinitely higher quality when properly researched and implemented by someone both familiar with the surrounding code and the programming language in use. LLMs may produce a "good enough" result, but this result is often subpar. Keep in mind: all code is held under a standard of excellence. If your code sucks, it will be rejected. AI-generated code just so happens to be a particularly sucky genre of code, and will thus be held to this same standard. +Human-written code will, without exception, always be of infinitely higher quality when properly researched and implemented by someone familiar with *both* the surrounding code and the programming language in use. LLMs may produce a "good enough" result, but this result is often subpar. + +**All code is held under a STRICT STANDARD OF EXCELLENCE**. AI code is no different, and since it often produces subpar or outright terrible code, it will often fail to meet this excellence standard. On a lesser-known note, LLM outputs often contain unicode symbols such as emojis or the arrow symbol. Please don't put Unicode symbols in your code. It messes with many an IDE, and the three people viewing your code on Lynx will be very unhappy. @@ -25,7 +27,8 @@ On a lesser-known note, LLM outputs often contain unicode symbols such as emojis ## Acceptable Use -- As stated previously, AI is good in a few *very specific* cases. In these cases, it's usually fine to use AI, as long as you **explicitly provide notice that it was used**. +As stated previously, AI is good in a few *very specific* cases. In these cases, it's usually fine to use AI, as long as you **explicitly provide notice that it was used**. + - Anything directly outside of the realm of the code written in your PR or patch is none of our business. - This primarily covers research. - However, we *still* strongly discourage this for the reasons mentioned above. @@ -104,4 +107,6 @@ This consolidates profile removal behavior, fixes potential race conditions in t This has all of the same problems as the other one. Needlessly verbose, doesn't address *what* it actually fixes ("consolidates profile removal behavior"... okay, why? What does it fix?), etc. It even has the bonus of totally hallucinating the addition of a method! +On a more "philosophical" note, LLMs tend to be geared towards *corporate language*, as that's what they're trained on. This is why AI-generated commit messages feel like "word salad", and typically pad out the commit message to make it *look* like a lot of things were changed (trust me, it's like that in the corporate world). They typically also drift towards unneeded buzzwords and useless implementation details. + **Don't use AI for commit messages**. From f8712e50e6860616b4ea86d57a9b09cd99aad728 Mon Sep 17 00:00:00 2001 From: JPikachu Date: Sat, 28 Feb 2026 01:06:22 +0100 Subject: [PATCH 32/84] [audio] stub SetAudioDeviceOutputVolumeAutoTuneEnabled and IsAudioDeviceOutputVolumeAutoTuneEnabled (#3654) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit For Pokémon LeafGreen Version and Pokémon FireRed Version Co-authored-by: JPikachu Reviewed-on: https://git.eden-emu.dev/eden-emu/eden/pulls/3654 Reviewed-by: Maufeat Reviewed-by: Lizzie Co-authored-by: JPikachu Co-committed-by: JPikachu --- src/core/hle/service/audio/audio_device.cpp | 17 ++++++++++++++--- src/core/hle/service/audio/audio_device.h | 5 +++++ 2 files changed, 19 insertions(+), 3 deletions(-) diff --git a/src/core/hle/service/audio/audio_device.cpp b/src/core/hle/service/audio/audio_device.cpp index 9bf78c4a55..eb64892ed8 100644 --- a/src/core/hle/service/audio/audio_device.cpp +++ b/src/core/hle/service/audio/audio_device.cpp @@ -1,4 +1,4 @@ -// SPDX-FileCopyrightText: Copyright 2025 Eden Emulator Project +// SPDX-FileCopyrightText: Copyright 2026 Eden Emulator Project // SPDX-License-Identifier: GPL-3.0-or-later // SPDX-FileCopyrightText: Copyright 2024 yuzu Emulator Project @@ -36,8 +36,8 @@ IAudioDevice::IAudioDevice(Core::System& system_, u64 applet_resource_user_id, u {16, nullptr, "ReleaseAudioInputDeviceNotification"}, //17.0.0+ {17, nullptr, "AcquireAudioOutputDeviceNotification"}, //17.0.0+ {18, nullptr, "ReleaseAudioOutputDeviceNotification"}, //17.0.0+ - {19, nullptr, "SetAudioDeviceOutputVolumeAutoTuneEnabled"}, //18.0.0+ - {20, nullptr, "IsAudioDeviceOutputVolumeAutoTuneEnabled"}, //18.0.0+ + {19, D<&IAudioDevice::SetAudioDeviceOutputVolumeAutoTuneEnabled>, "SetAudioDeviceOutputVolumeAutoTuneEnabled"}, //18.0.0+ + {20, D<&IAudioDevice::IsAudioDeviceOutputVolumeAutoTuneEnabled>, "IsAudioDeviceOutputVolumeAutoTuneEnabled"}, //18.0.0+ {21, nullptr, "IsActiveOutputDeviceEstimatedLowLatency"} //21.0.0+ }; RegisterHandlers(functions); @@ -170,4 +170,15 @@ Result IAudioDevice::ListAudioOutputDeviceName( R_SUCCEED(); } +Result IAudioDevice::SetAudioDeviceOutputVolumeAutoTuneEnabled(bool enabled) { + LOG_WARNING(Service_Audio, "(STUBBED) called"); + R_SUCCEED(); +} + +Result IAudioDevice::IsAudioDeviceOutputVolumeAutoTuneEnabled(Out out_enabled) { + LOG_WARNING(Service_Audio, "(STUBBED) called"); + *out_enabled = false; + R_SUCCEED(); +} + } // namespace Service::Audio diff --git a/src/core/hle/service/audio/audio_device.h b/src/core/hle/service/audio/audio_device.h index 752157272c..f6c12fbfeb 100644 --- a/src/core/hle/service/audio/audio_device.h +++ b/src/core/hle/service/audio/audio_device.h @@ -1,3 +1,6 @@ +// SPDX-FileCopyrightText: Copyright 2026 Eden Emulator Project +// SPDX-License-Identifier: GPL-3.0-or-later + // SPDX-FileCopyrightText: Copyright 2024 yuzu Emulator Project // SPDX-License-Identifier: GPL-2.0-or-later @@ -49,6 +52,8 @@ private: Result ListAudioOutputDeviceName( OutArray out_names, Out out_count); + Result SetAudioDeviceOutputVolumeAutoTuneEnabled(bool enabled); + Result IsAudioDeviceOutputVolumeAutoTuneEnabled(Out out_enabled); KernelHelpers::ServiceContext service_context; std::unique_ptr impl; From 06a08de68a95506a9cbe4633c58f6bdb5ded0c70 Mon Sep 17 00:00:00 2001 From: lizzie Date: Sat, 28 Feb 2026 01:06:33 +0100 Subject: [PATCH 33/84] [core/loader] prevent program_image reallocations in NSO+KIP loading methods (#3639) also changes some methods to std::span<> as well, but mainly std::vector<> in the NSO/KIP loading stuff is not needed to be memcpy'ed and memmove'd around this should save a marginal amount of loading time (RDR1) Signed-off-by: lizzie Reviewed-on: https://git.eden-emu.dev/eden-emu/eden/pulls/3639 Reviewed-by: DraVee Reviewed-by: Maufeat Co-authored-by: lizzie Co-committed-by: lizzie --- src/core/CMakeLists.txt | 1 - src/core/arm/nce/patcher.cpp | 9 +- src/core/arm/nce/patcher.h | 7 +- src/core/file_sys/kernel_executable.cpp | 9 +- src/core/file_sys/kernel_executable.h | 10 +- src/core/hle/kernel/code_set.h | 5 +- src/core/hle/kernel/physical_memory.h | 23 ----- .../hle/service/am/frontend/applet_error.cpp | 5 +- .../am/frontend/applet_software_keyboard.cpp | 19 ++-- .../am/frontend/applet_software_keyboard.h | 19 ++-- .../am/frontend/applet_web_browser.cpp | 13 ++- src/core/hle/service/lm/lm.cpp | 10 +- .../service/ns/platform_service_manager.cpp | 3 +- src/core/hle/service/ro/ro.cpp | 28 +++--- src/core/hle/service/ro/ro_types.h | 51 +--------- src/core/loader/kip.cpp | 19 +--- src/core/loader/nro.cpp | 4 +- src/core/loader/nso.cpp | 99 ++++++++----------- 18 files changed, 122 insertions(+), 212 deletions(-) delete mode 100644 src/core/hle/kernel/physical_memory.h diff --git a/src/core/CMakeLists.txt b/src/core/CMakeLists.txt index b3071d94b2..08d6e73688 100644 --- a/src/core/CMakeLists.txt +++ b/src/core/CMakeLists.txt @@ -342,7 +342,6 @@ add_library(core STATIC hle/kernel/message_buffer.h hle/kernel/physical_core.cpp hle/kernel/physical_core.h - hle/kernel/physical_memory.h hle/kernel/slab_helpers.h hle/kernel/svc.cpp hle/kernel/svc.h diff --git a/src/core/arm/nce/patcher.cpp b/src/core/arm/nce/patcher.cpp index bd8e4fd7fb..ea77166645 100644 --- a/src/core/arm/nce/patcher.cpp +++ b/src/core/arm/nce/patcher.cpp @@ -4,6 +4,7 @@ #include #include #include "common/arm64/native_clock.h" +#include "common/alignment.h" #include "common/literals.h" #include "core/arm/nce/arm_nce.h" #include "core/arm/nce/guest_context.h" @@ -46,8 +47,7 @@ Patcher::Patcher() : c(m_patch_instructions), c_pre(m_patch_instructions_pre) { Patcher::~Patcher() = default; -bool Patcher::PatchText(const Kernel::PhysicalMemory& program_image, - const Kernel::CodeSet::Segment& code) { +bool Patcher::PatchText(std::span program_image, const Kernel::CodeSet::Segment& code) { // If we have patched modules but cannot reach the new module, then it needs its own patcher. const size_t image_size = program_image.size(); @@ -175,10 +175,7 @@ bool Patcher::PatchText(const Kernel::PhysicalMemory& program_image, return true; } -bool Patcher::RelocateAndCopy(Common::ProcessAddress load_base, - const Kernel::CodeSet::Segment& code, - Kernel::PhysicalMemory& program_image, - EntryTrampolines* out_trampolines) { +bool Patcher::RelocateAndCopy(Common::ProcessAddress load_base, const Kernel::CodeSet::Segment& code, std::vector& program_image, EntryTrampolines* out_trampolines) { const size_t patch_size = GetSectionSize(); const size_t pre_patch_size = GetPreSectionSize(); diff --git a/src/core/arm/nce/patcher.h b/src/core/arm/nce/patcher.h index 303cf68ec6..499c98c901 100644 --- a/src/core/arm/nce/patcher.h +++ b/src/core/arm/nce/patcher.h @@ -14,7 +14,6 @@ #include "common/settings.h" #include "core/hle/kernel/code_set.h" #include "core/hle/kernel/k_typed_address.h" -#include "core/hle/kernel/physical_memory.h" #include using ModuleID = std::array; // NSO build ID struct PatchCacheKey { @@ -56,10 +55,8 @@ public: } explicit Patcher(); ~Patcher(); - bool PatchText(const Kernel::PhysicalMemory& program_image, - const Kernel::CodeSet::Segment& code); - bool RelocateAndCopy(Common::ProcessAddress load_base, const Kernel::CodeSet::Segment& code, - Kernel::PhysicalMemory& program_image, EntryTrampolines* out_trampolines); + bool PatchText(std::span program_image, const Kernel::CodeSet::Segment& code); + bool RelocateAndCopy(Common::ProcessAddress load_base, const Kernel::CodeSet::Segment& code, std::vector& program_image, EntryTrampolines* out_trampolines); size_t GetSectionSize() const noexcept; size_t GetPreSectionSize() const noexcept; diff --git a/src/core/file_sys/kernel_executable.cpp b/src/core/file_sys/kernel_executable.cpp index b84492d30a..dea05f840f 100644 --- a/src/core/file_sys/kernel_executable.cpp +++ b/src/core/file_sys/kernel_executable.cpp @@ -1,3 +1,6 @@ +// SPDX-FileCopyrightText: Copyright 2026 Eden Emulator Project +// SPDX-License-Identifier: GPL-3.0-or-later + // SPDX-FileCopyrightText: Copyright 2019 yuzu Emulator Project // SPDX-License-Identifier: GPL-2.0-or-later @@ -160,15 +163,15 @@ u32 KIP::GetMainThreadCpuCore() const { return header.default_core; } -const std::vector& KIP::GetTextSection() const { +std::span KIP::GetTextSection() const { return decompressed_sections[0]; } -const std::vector& KIP::GetRODataSection() const { +std::span KIP::GetRODataSection() const { return decompressed_sections[1]; } -const std::vector& KIP::GetDataSection() const { +std::span KIP::GetDataSection() const { return decompressed_sections[2]; } diff --git a/src/core/file_sys/kernel_executable.h b/src/core/file_sys/kernel_executable.h index 928ba2d99f..ac4b1acaf4 100644 --- a/src/core/file_sys/kernel_executable.h +++ b/src/core/file_sys/kernel_executable.h @@ -1,9 +1,13 @@ +// SPDX-FileCopyrightText: Copyright 2026 Eden Emulator Project +// SPDX-License-Identifier: GPL-3.0-or-later + // SPDX-FileCopyrightText: Copyright 2019 yuzu Emulator Project // SPDX-License-Identifier: GPL-2.0-or-later #pragma once #include +#include #include #include @@ -70,9 +74,9 @@ public: u32 GetMainThreadStackSize() const; u32 GetMainThreadCpuCore() const; - const std::vector& GetTextSection() const; - const std::vector& GetRODataSection() const; - const std::vector& GetDataSection() const; + std::span GetTextSection() const; + std::span GetRODataSection() const; + std::span GetDataSection() const; u32 GetTextOffset() const; u32 GetRODataOffset() const; diff --git a/src/core/hle/kernel/code_set.h b/src/core/hle/kernel/code_set.h index 1416fc52b1..88bc7f5e66 100644 --- a/src/core/hle/kernel/code_set.h +++ b/src/core/hle/kernel/code_set.h @@ -7,9 +7,9 @@ #pragma once #include +#include #include "core/hle/kernel/k_typed_address.h" -#include "core/hle/kernel/physical_memory.h" namespace Kernel { @@ -97,8 +97,7 @@ struct CodeSet final { #endif /// The overall data that backs this code set. - Kernel::PhysicalMemory memory; - + std::vector memory; /// The segments that comprise this code set. std::array segments; diff --git a/src/core/hle/kernel/physical_memory.h b/src/core/hle/kernel/physical_memory.h deleted file mode 100644 index 253fa45636..0000000000 --- a/src/core/hle/kernel/physical_memory.h +++ /dev/null @@ -1,23 +0,0 @@ -// SPDX-FileCopyrightText: Copyright 2019 yuzu Emulator Project -// SPDX-License-Identifier: GPL-2.0-or-later - -#pragma once - -#include - -#include "common/alignment.h" - -namespace Kernel { - -// This encapsulation serves 2 purposes: -// - First, to encapsulate host physical memory under a single type and set an -// standard for managing it. -// - Second to ensure all host backing memory used is aligned to 256 bytes due -// to strict alignment restrictions on GPU memory. - -using PhysicalMemoryVector = std::vector>; -class PhysicalMemory final : public PhysicalMemoryVector { - using PhysicalMemoryVector::PhysicalMemoryVector; -}; - -} // namespace Kernel diff --git a/src/core/hle/service/am/frontend/applet_error.cpp b/src/core/hle/service/am/frontend/applet_error.cpp index 34ec7013b5..1c530aa324 100644 --- a/src/core/hle/service/am/frontend/applet_error.cpp +++ b/src/core/hle/service/am/frontend/applet_error.cpp @@ -1,3 +1,6 @@ +// SPDX-FileCopyrightText: Copyright 2026 Eden Emulator Project +// SPDX-License-Identifier: GPL-3.0-or-later + // SPDX-FileCopyrightText: Copyright 2019 yuzu Emulator Project // SPDX-License-Identifier: GPL-2.0-or-later @@ -93,7 +96,7 @@ union Error::ErrorArguments { namespace { template -void CopyArgumentData(const std::vector& data, T& variable) { +void CopyArgumentData(std::span data, T& variable) { ASSERT(data.size() >= sizeof(T)); std::memcpy(&variable, data.data(), sizeof(T)); } diff --git a/src/core/hle/service/am/frontend/applet_software_keyboard.cpp b/src/core/hle/service/am/frontend/applet_software_keyboard.cpp index d1bc030182..fe07d72912 100644 --- a/src/core/hle/service/am/frontend/applet_software_keyboard.cpp +++ b/src/core/hle/service/am/frontend/applet_software_keyboard.cpp @@ -1,3 +1,6 @@ +// SPDX-FileCopyrightText: Copyright 2026 Eden Emulator Project +// SPDX-License-Identifier: GPL-3.0-or-later + // SPDX-FileCopyrightText: Copyright 2021 yuzu Emulator Project // SPDX-License-Identifier: GPL-2.0-or-later @@ -775,7 +778,7 @@ Result SoftwareKeyboard::RequestExit() { // Inline Software Keyboard Requests -void SoftwareKeyboard::RequestFinalize(const std::vector& request_data) { +void SoftwareKeyboard::RequestFinalize(std::span request_data) { LOG_DEBUG(Service_AM, "Processing Request: Finalize"); ChangeState(SwkbdState::NotInitialized); @@ -783,17 +786,17 @@ void SoftwareKeyboard::RequestFinalize(const std::vector& request_data) { ExitKeyboard(); } -void SoftwareKeyboard::RequestSetUserWordInfo(const std::vector& request_data) { +void SoftwareKeyboard::RequestSetUserWordInfo(std::span request_data) { LOG_WARNING(Service_AM, "SetUserWordInfo is not implemented."); ReplyReleasedUserWordInfo(); } -void SoftwareKeyboard::RequestSetCustomizeDic(const std::vector& request_data) { +void SoftwareKeyboard::RequestSetCustomizeDic(std::span request_data) { LOG_WARNING(Service_AM, "SetCustomizeDic is not implemented."); } -void SoftwareKeyboard::RequestCalc(const std::vector& request_data) { +void SoftwareKeyboard::RequestCalc(std::span request_data) { LOG_DEBUG(Service_AM, "Processing Request: Calc"); ASSERT(request_data.size() >= sizeof(SwkbdRequestCommand) + sizeof(SwkbdCalcArgCommon)); @@ -930,17 +933,17 @@ void SoftwareKeyboard::RequestCalcNew() { } } -void SoftwareKeyboard::RequestSetCustomizedDictionaries(const std::vector& request_data) { +void SoftwareKeyboard::RequestSetCustomizedDictionaries(std::span request_data) { LOG_WARNING(Service_AM, "SetCustomizedDictionaries is not implemented."); } -void SoftwareKeyboard::RequestUnsetCustomizedDictionaries(const std::vector& request_data) { +void SoftwareKeyboard::RequestUnsetCustomizedDictionaries(std::span request_data) { LOG_WARNING(Service_AM, "(STUBBED) Processing Request: UnsetCustomizedDictionaries"); ReplyUnsetCustomizedDictionaries(); } -void SoftwareKeyboard::RequestSetChangedStringV2Flag(const std::vector& request_data) { +void SoftwareKeyboard::RequestSetChangedStringV2Flag(std::span request_data) { LOG_DEBUG(Service_AM, "Processing Request: SetChangedStringV2Flag"); ASSERT(request_data.size() == sizeof(SwkbdRequestCommand) + 1); @@ -948,7 +951,7 @@ void SoftwareKeyboard::RequestSetChangedStringV2Flag(const std::vector& requ std::memcpy(&use_changed_string_v2, request_data.data() + sizeof(SwkbdRequestCommand), 1); } -void SoftwareKeyboard::RequestSetMovedCursorV2Flag(const std::vector& request_data) { +void SoftwareKeyboard::RequestSetMovedCursorV2Flag(std::span request_data) { LOG_DEBUG(Service_AM, "Processing Request: SetMovedCursorV2Flag"); ASSERT(request_data.size() == sizeof(SwkbdRequestCommand) + 1); diff --git a/src/core/hle/service/am/frontend/applet_software_keyboard.h b/src/core/hle/service/am/frontend/applet_software_keyboard.h index 2a7d01b965..a3e4150080 100644 --- a/src/core/hle/service/am/frontend/applet_software_keyboard.h +++ b/src/core/hle/service/am/frontend/applet_software_keyboard.h @@ -1,3 +1,6 @@ +// SPDX-FileCopyrightText: Copyright 2026 Eden Emulator Project +// SPDX-License-Identifier: GPL-3.0-or-later + // SPDX-FileCopyrightText: Copyright 2021 yuzu Emulator Project // SPDX-License-Identifier: GPL-2.0-or-later @@ -124,16 +127,16 @@ private: // Inline Software Keyboard Requests - void RequestFinalize(const std::vector& request_data); - void RequestSetUserWordInfo(const std::vector& request_data); - void RequestSetCustomizeDic(const std::vector& request_data); - void RequestCalc(const std::vector& request_data); + void RequestFinalize(std::span request_data); + void RequestSetUserWordInfo(std::span request_data); + void RequestSetCustomizeDic(std::span request_data); + void RequestCalc(std::span request_data); void RequestCalcOld(); void RequestCalcNew(); - void RequestSetCustomizedDictionaries(const std::vector& request_data); - void RequestUnsetCustomizedDictionaries(const std::vector& request_data); - void RequestSetChangedStringV2Flag(const std::vector& request_data); - void RequestSetMovedCursorV2Flag(const std::vector& request_data); + void RequestSetCustomizedDictionaries(std::span request_data); + void RequestUnsetCustomizedDictionaries(std::span request_data); + void RequestSetChangedStringV2Flag(std::span request_data); + void RequestSetMovedCursorV2Flag(std::span request_data); // Inline Software Keyboard Replies diff --git a/src/core/hle/service/am/frontend/applet_web_browser.cpp b/src/core/hle/service/am/frontend/applet_web_browser.cpp index 206f2fd495..98e3b9c66d 100644 --- a/src/core/hle/service/am/frontend/applet_web_browser.cpp +++ b/src/core/hle/service/am/frontend/applet_web_browser.cpp @@ -1,4 +1,4 @@ -// SPDX-FileCopyrightText: Copyright 2025 Eden Emulator Project +// SPDX-FileCopyrightText: Copyright 2026 Eden Emulator Project // SPDX-License-Identifier: GPL-3.0-or-later // SPDX-FileCopyrightText: Copyright 2020 yuzu Emulator Project @@ -34,22 +34,21 @@ namespace Service::AM::Frontend { namespace { template -void ParseRawValue(T& value, const std::vector& data) { +void ParseRawValue(T& value, std::span data) { static_assert(std::is_trivially_copyable_v, "It's undefined behavior to use memcpy with non-trivially copyable objects"); std::memcpy(&value, data.data(), data.size()); } template -T ParseRawValue(const std::vector& data) { +T ParseRawValue(std::span data) { T value; ParseRawValue(value, data); return value; } -std::string ParseStringValue(const std::vector& data) { - return Common::StringFromFixedZeroTerminatedBuffer(reinterpret_cast(data.data()), - data.size()); +std::string ParseStringValue(std::span data) { + return Common::StringFromFixedZeroTerminatedBuffer(reinterpret_cast(data.data()), data.size()); } std::string GetMainURL(const std::string& url) { @@ -72,7 +71,7 @@ std::string ResolveURL(const std::string& url) { return url.substr(0, index) + "lp1" + url.substr(index + 1); } -WebArgInputTLVMap ReadWebArgs(const std::vector& web_arg, WebArgHeader& web_arg_header) { +WebArgInputTLVMap ReadWebArgs(std::span web_arg, WebArgHeader& web_arg_header) { std::memcpy(&web_arg_header, web_arg.data(), sizeof(WebArgHeader)); if (web_arg.size() == sizeof(WebArgHeader)) { diff --git a/src/core/hle/service/lm/lm.cpp b/src/core/hle/service/lm/lm.cpp index 2fda8a3b90..0ff5ac0440 100644 --- a/src/core/hle/service/lm/lm.cpp +++ b/src/core/hle/service/lm/lm.cpp @@ -164,7 +164,7 @@ private: rb.Push(ResultSuccess); } - u64 ReadLeb128(const std::vector& data, std::size_t& offset) { + u64 ReadLeb128(std::span data, std::size_t& offset) { u64 result{}; u32 shift{}; @@ -180,7 +180,7 @@ private: return result; } - std::optional ReadString(const std::vector& data, std::size_t& offset, + std::optional ReadString(std::span data, std::size_t& offset, std::size_t length) { if (length == 0) { return std::nullopt; @@ -193,7 +193,7 @@ private: return output; } - u32_le ReadAsU32(const std::vector& data, std::size_t& offset, std::size_t length) { + u32_le ReadAsU32(std::span data, std::size_t& offset, std::size_t length) { ASSERT(length == sizeof(u32)); u32_le output{}; std::memcpy(&output, data.data() + offset, sizeof(u32)); @@ -201,7 +201,7 @@ private: return output; } - u64_le ReadAsU64(const std::vector& data, std::size_t& offset, std::size_t length) { + u64_le ReadAsU64(std::span data, std::size_t& offset, std::size_t length) { ASSERT(length == sizeof(u64)); u64_le output{}; std::memcpy(&output, data.data() + offset, sizeof(u64)); @@ -209,7 +209,7 @@ private: return output; } - void ParseLog(const LogPacketHeaderEntry entry, const std::vector& log_data) { + void ParseLog(const LogPacketHeaderEntry entry, std::span log_data) { // Possible entries std::optional text_log; std::optional line_number; diff --git a/src/core/hle/service/ns/platform_service_manager.cpp b/src/core/hle/service/ns/platform_service_manager.cpp index ec9f64945d..e91e6451a8 100644 --- a/src/core/hle/service/ns/platform_service_manager.cpp +++ b/src/core/hle/service/ns/platform_service_manager.cpp @@ -1,4 +1,4 @@ -// SPDX-FileCopyrightText: Copyright 2025 Eden Emulator Project +// SPDX-FileCopyrightText: Copyright 2026 Eden Emulator Project // SPDX-License-Identifier: GPL-3.0-or-later // SPDX-FileCopyrightText: Copyright 2018 yuzu Emulator Project @@ -21,7 +21,6 @@ #include "core/file_sys/system_archive/system_archive.h" #include "core/hle/kernel/k_shared_memory.h" #include "core/hle/kernel/kernel.h" -#include "core/hle/kernel/physical_memory.h" #include "core/hle/service/cmif_serialization.h" #include "core/hle/service/filesystem/filesystem.h" #include "core/hle/service/ns/platform_service_manager.h" diff --git a/src/core/hle/service/ro/ro.cpp b/src/core/hle/service/ro/ro.cpp index 041c0dbd87..cd50e69ce1 100644 --- a/src/core/hle/service/ro/ro.cpp +++ b/src/core/hle/service/ro/ro.cpp @@ -176,11 +176,9 @@ struct ProcessContext { // Calculate hash. Sha256Hash hash; { - const u64 size = nro_header->GetSize(); - + const u64 size = nro_header->m_size; std::vector nro_data(size); m_process->GetMemory().ReadBlock(base_address, nro_data.data(), size); - u32 hash_len = 0; EVP_Digest(nro_data.data(), nro_data.size(), hash.data(), &hash_len, EVP_sha256(), nullptr); } @@ -204,9 +202,7 @@ struct ProcessContext { R_THROW(RO::ResultNotAuthorized); } - Result ValidateNro(ModuleId* out_module_id, u64* out_rx_size, u64* out_ro_size, - u64* out_rw_size, u64 base_address, u64 expected_nro_size, - u64 expected_bss_size) { + Result ValidateNro(ModuleId* out_module_id, u64* out_rx_size, u64* out_ro_size, u64* out_rw_size, u64 base_address, u64 expected_nro_size, u64 expected_bss_size) { // Ensure we have a process to work on. R_UNLESS(m_process != nullptr, RO::ResultInvalidProcess); @@ -215,17 +211,17 @@ struct ProcessContext { m_process->GetMemory().ReadBlock(base_address, std::addressof(header), sizeof(header)); // Validate header. - R_UNLESS(header.IsMagicValid(), RO::ResultInvalidNro); + R_UNLESS(header.m_magic == NRO_HEADER_MAGIC, RO::ResultInvalidNro); // Read sizes from header. - const u64 nro_size = header.GetSize(); - const u64 text_ofs = header.GetTextOffset(); - const u64 text_size = header.GetTextSize(); - const u64 ro_ofs = header.GetRoOffset(); - const u64 ro_size = header.GetRoSize(); - const u64 rw_ofs = header.GetRwOffset(); - const u64 rw_size = header.GetRwSize(); - const u64 bss_size = header.GetBssSize(); + const u64 nro_size = header.m_size; + const u64 text_ofs = header.m_text_offset; + const u64 text_size = header.m_text_size; + const u64 ro_ofs = header.m_ro_offset; + const u64 ro_size = header.m_ro_size; + const u64 rw_ofs = header.m_rw_offset; + const u64 rw_size = header.m_rw_size; + const u64 bss_size = header.m_bss_size; // Validate sizes meet expected. R_UNLESS(nro_size == expected_nro_size, RO::ResultInvalidNro); @@ -251,7 +247,7 @@ struct ProcessContext { R_TRY(this->ValidateHasNroHash(base_address, std::addressof(header))); // Check if NRO has already been loaded. - const ModuleId* module_id = header.GetModuleId(); + const ModuleId* module_id = std::addressof(header.m_module_id); R_UNLESS(R_FAILED(this->GetNroInfoByModuleId(nullptr, module_id)), RO::ResultAlreadyLoaded); // Apply patches to NRO. diff --git a/src/core/hle/service/ro/ro_types.h b/src/core/hle/service/ro/ro_types.h index 624d52ee5f..50b424395a 100644 --- a/src/core/hle/service/ro/ro_types.h +++ b/src/core/hle/service/ro/ro_types.h @@ -1,3 +1,6 @@ +// SPDX-FileCopyrightText: Copyright 2026 Eden Emulator Project +// SPDX-License-Identifier: GPL-3.0-or-later + // SPDX-FileCopyrightText: Copyright 2023 yuzu Emulator Project // SPDX-License-Identifier: GPL-2.0-or-later @@ -112,52 +115,8 @@ private: }; static_assert(sizeof(NrrHeader) == 0x350, "NrrHeader has wrong size"); -class NroHeader { -public: - static constexpr u32 Magic = Common::MakeMagic('N', 'R', 'O', '0'); - -public: - bool IsMagicValid() const { - return m_magic == Magic; - } - - u32 GetSize() const { - return m_size; - } - - u32 GetTextOffset() const { - return m_text_offset; - } - - u32 GetTextSize() const { - return m_text_size; - } - - u32 GetRoOffset() const { - return m_ro_offset; - } - - u32 GetRoSize() const { - return m_ro_size; - } - - u32 GetRwOffset() const { - return m_rw_offset; - } - - u32 GetRwSize() const { - return m_rw_size; - } - - u32 GetBssSize() const { - return m_bss_size; - } - - const ModuleId* GetModuleId() const { - return std::addressof(m_module_id); - } - -private: +static constexpr u32 NRO_HEADER_MAGIC = Common::MakeMagic('N', 'R', 'O', '0'); +struct NroHeader { u32 m_entrypoint_insn; u32 m_mod_offset; INSERT_PADDING_BYTES_NOINIT(0x8); diff --git a/src/core/loader/kip.cpp b/src/core/loader/kip.cpp index b61ce80bae..db6c98c5a3 100644 --- a/src/core/loader/kip.cpp +++ b/src/core/loader/kip.cpp @@ -1,4 +1,4 @@ -// SPDX-FileCopyrightText: Copyright 2025 Eden Emulator Project +// SPDX-FileCopyrightText: Copyright 2026 Eden Emulator Project // SPDX-License-Identifier: GPL-3.0-or-later // SPDX-FileCopyrightText: Copyright 2019 yuzu Emulator Project @@ -75,21 +75,16 @@ AppLoader::LoadResult AppLoader_KIP::Load(Kernel::KProcess& process, kip->GetKernelCapabilities()); Kernel::CodeSet codeset; - Kernel::PhysicalMemory program_image; - - const auto load_segment = [&program_image](Kernel::CodeSet::Segment& segment, const std::vector& data, u32 offset) { + codeset.memory.resize(PageAlignSize(kip->GetBSSOffset()) + kip->GetBSSSize()); + const auto load_segment = [&codeset](Kernel::CodeSet::Segment& segment, std::span data, u32 offset) { segment.addr = offset; segment.offset = offset; segment.size = PageAlignSize(u32(data.size())); - program_image.resize(offset + data.size()); - std::memcpy(program_image.data() + offset, data.data(), data.size()); + std::memcpy(codeset.memory.data() + offset, data.data(), data.size()); }; - load_segment(codeset.CodeSegment(), kip->GetTextSection(), kip->GetTextOffset()); load_segment(codeset.RODataSegment(), kip->GetRODataSection(), kip->GetRODataOffset()); load_segment(codeset.DataSegment(), kip->GetDataSection(), kip->GetDataOffset()); - - program_image.resize(PageAlignSize(kip->GetBSSOffset()) + kip->GetBSSSize()); codeset.DataSegment().size += kip->GetBSSSize(); // TODO: this is bad form of ASLR, it sucks @@ -98,13 +93,9 @@ AppLoader::LoadResult AppLoader_KIP::Load(Kernel::KProcess& process, : std::rand()) * 0x734287f27) & 0xfff000; // Setup the process code layout - if (process - .LoadFromMetadata(FileSys::ProgramMetadata::GetDefault(), program_image.size(), 0, aslr_offset, false) - .IsError()) { + if (process.LoadFromMetadata(FileSys::ProgramMetadata::GetDefault(), codeset.memory.size(), 0, aslr_offset, false).IsError()) { return {ResultStatus::ErrorNotInitialized, {}}; } - - codeset.memory = std::move(program_image); const VAddr base_address = GetInteger(process.GetEntryPoint()); process.LoadModule(std::move(codeset), base_address); diff --git a/src/core/loader/nro.cpp b/src/core/loader/nro.cpp index a3cfa31be7..f5a77a726f 100644 --- a/src/core/loader/nro.cpp +++ b/src/core/loader/nro.cpp @@ -1,4 +1,4 @@ -// SPDX-FileCopyrightText: Copyright 2025 Eden Emulator Project +// SPDX-FileCopyrightText: Copyright 2026 Eden Emulator Project // SPDX-License-Identifier: GPL-3.0-or-later // SPDX-FileCopyrightText: Copyright 2018 yuzu Emulator Project @@ -160,7 +160,7 @@ static bool LoadNroImpl(Core::System& system, Kernel::KProcess& process, } // Build program image - Kernel::PhysicalMemory program_image(PageAlignSize(nro_header.file_size)); + std::vector program_image(PageAlignSize(nro_header.file_size)); std::memcpy(program_image.data(), data.data(), program_image.size()); if (program_image.size() != PageAlignSize(nro_header.file_size)) { return {}; diff --git a/src/core/loader/nso.cpp b/src/core/loader/nso.cpp index 458df110b6..f62b1f4957 100644 --- a/src/core/loader/nso.cpp +++ b/src/core/loader/nso.cpp @@ -4,6 +4,7 @@ // SPDX-FileCopyrightText: Copyright 2018 yuzu Emulator Project // SPDX-License-Identifier: GPL-2.0-or-later +#include #include #include #include @@ -40,17 +41,6 @@ struct MODHeader { }; static_assert(sizeof(MODHeader) == 0x1c, "MODHeader has incorrect size."); -std::vector DecompressSegment(const std::vector& compressed_data, - const NSOSegmentHeader& header) { - std::vector uncompressed_data = - Common::Compression::DecompressDataLZ4(compressed_data, header.size); - - ASSERT_MSG(uncompressed_data.size() == header.size, "{} != {}", header.size, - uncompressed_data.size()); - - return uncompressed_data; -} - constexpr u32 PageAlignSize(u32 size) { return static_cast((size + Core::Memory::YUZU_PAGEMASK) & ~Core::Memory::YUZU_PAGEMASK); } @@ -76,24 +66,16 @@ FileType AppLoader_NSO::IdentifyType(const FileSys::VirtualFile& in_file) { return FileType::NSO; } -std::optional AppLoader_NSO::LoadModule(Kernel::KProcess& process, Core::System& system, - const FileSys::VfsFile& nso_file, VAddr load_base, - bool should_pass_arguments, bool load_into_process, - std::optional pm, - std::vector* patches, - s32 patch_index) { - if (nso_file.GetSize() < sizeof(NSOHeader)) { +std::optional AppLoader_NSO::LoadModule(Kernel::KProcess& process, Core::System& system, const FileSys::VfsFile& nso_file, VAddr load_base, bool should_pass_arguments, bool load_into_process, std::optional pm, std::vector* patches, s32 patch_index) { + if (nso_file.GetSize() < sizeof(NSOHeader)) return std::nullopt; - } - NSOHeader nso_header{}; - if (sizeof(NSOHeader) != nso_file.ReadObject(&nso_header)) { + if (sizeof(NSOHeader) != nso_file.ReadObject(&nso_header)) return std::nullopt; - } - - if (nso_header.magic != Common::MakeMagic('N', 'S', 'O', '0')) { + if (nso_header.magic != Common::MakeMagic('N', 'S', 'O', '0')) + return std::nullopt; + if (nso_header.segments.empty()) return std::nullopt; - } // Allocate some space at the beginning if we are patching in PreText mode. const size_t module_start = [&]() -> size_t { @@ -110,42 +92,44 @@ std::optional AppLoader_NSO::LoadModule(Kernel::KProcess& process, Core:: return 0; }(); - // Build program image + auto const last_segment_it = &nso_header.segments[nso_header.segments.size() - 1]; + // Build program image directly in codeset memory :) Kernel::CodeSet codeset; - Kernel::PhysicalMemory program_image; - for (std::size_t i = 0; i < nso_header.segments.size(); ++i) { - std::vector data = nso_file.ReadBytes(nso_header.segments_compressed_size[i], - nso_header.segments[i].offset); - if (nso_header.IsSegmentCompressed(i)) { - data = DecompressSegment(data, nso_header.segments[i]); + codeset.memory.resize(module_start + last_segment_it->location + last_segment_it->size); + { + std::vector compressed_data(*std::ranges::max_element(nso_header.segments_compressed_size)); + std::vector decompressed_size(std::ranges::max_element(nso_header.segments, [](auto const& a, auto const& b) { + return a.size < b.size; + })->size); + for (std::size_t i = 0; i < nso_header.segments.size(); ++i) { + nso_file.Read(compressed_data.data(), nso_header.segments_compressed_size[i], nso_header.segments[i].offset); + if (nso_header.IsSegmentCompressed(i)) { + int r = Common::Compression::DecompressDataLZ4(decompressed_size.data(), nso_header.segments[i].size, compressed_data.data(), nso_header.segments_compressed_size[i]); + ASSERT(r == int(nso_header.segments[i].size)); + std::memcpy(codeset.memory.data() + module_start + nso_header.segments[i].location, decompressed_size.data(), nso_header.segments[i].size); + } else { + std::memcpy(codeset.memory.data() + module_start + nso_header.segments[i].location, compressed_data.data(), nso_header.segments[i].size); + } + codeset.segments[i].addr = module_start + nso_header.segments[i].location; + codeset.segments[i].offset = module_start + nso_header.segments[i].location; + codeset.segments[i].size = nso_header.segments[i].size; } - program_image.resize(module_start + nso_header.segments[i].location + - static_cast(data.size())); - std::memcpy(program_image.data() + module_start + nso_header.segments[i].location, - data.data(), data.size()); - codeset.segments[i].addr = module_start + nso_header.segments[i].location; - codeset.segments[i].offset = module_start + nso_header.segments[i].location; - codeset.segments[i].size = nso_header.segments[i].size; } if (should_pass_arguments && !Settings::values.program_args.GetValue().empty()) { const auto arg_data{Settings::values.program_args.GetValue()}; codeset.DataSegment().size += NSO_ARGUMENT_DATA_ALLOCATION_SIZE; - NSOArgumentHeader args_header{ - NSO_ARGUMENT_DATA_ALLOCATION_SIZE, static_cast(arg_data.size()), {}}; - const auto end_offset = program_image.size(); - program_image.resize(static_cast(program_image.size()) + - NSO_ARGUMENT_DATA_ALLOCATION_SIZE); - std::memcpy(program_image.data() + end_offset, &args_header, sizeof(NSOArgumentHeader)); - std::memcpy(program_image.data() + end_offset + sizeof(NSOArgumentHeader), arg_data.data(), - arg_data.size()); + NSOArgumentHeader args_header{NSO_ARGUMENT_DATA_ALLOCATION_SIZE, static_cast(arg_data.size()), {}}; + const auto end_offset = codeset.memory.size(); + codeset.memory.resize(u32(codeset.memory.size()) + NSO_ARGUMENT_DATA_ALLOCATION_SIZE); + std::memcpy(codeset.memory.data() + end_offset, &args_header, sizeof(NSOArgumentHeader)); + std::memcpy(codeset.memory.data() + end_offset + sizeof(NSOArgumentHeader), arg_data.data(), arg_data.size()); } codeset.DataSegment().size += nso_header.segments[2].bss_size; - u32 image_size{ - PageAlignSize(static_cast(program_image.size()) + nso_header.segments[2].bss_size)}; - program_image.resize(image_size); + u32 image_size = PageAlignSize(u32(codeset.memory.size()) + nso_header.segments[2].bss_size); + codeset.memory.resize(image_size); for (std::size_t i = 0; i < nso_header.segments.size(); ++i) { codeset.segments[i].size = PageAlignSize(codeset.segments[i].size); @@ -154,8 +138,7 @@ std::optional AppLoader_NSO::LoadModule(Kernel::KProcess& process, Core:: // Apply patches if necessary const auto name = nso_file.GetName(); if (pm && (pm->HasNSOPatch(nso_header.build_id, name) || Settings::values.dump_nso)) { - std::span patchable_section(program_image.data() + module_start, - program_image.size() - module_start); + std::span patchable_section(codeset.memory.data() + module_start, codeset.memory.size() - module_start); std::vector pi_header(sizeof(NSOHeader) + patchable_section.size()); std::memcpy(pi_header.data(), &nso_header, sizeof(NSOHeader)); std::memcpy(pi_header.data() + sizeof(NSOHeader), patchable_section.data(), @@ -174,15 +157,15 @@ std::optional AppLoader_NSO::LoadModule(Kernel::KProcess& process, Core:: //Set module ID using build_id from the NSO header patch->SetModuleID(nso_header.build_id); // Patch SVCs and MRS calls in the guest code - while (!patch->PatchText(program_image, code)) { + while (!patch->PatchText(codeset.memory, code)) { patch = &patches->emplace_back(); patch->SetModuleID(nso_header.build_id); // In case the patcher is changed for big modules, the new patcher should also have the build_id } } else if (patch) { - // Relocate code patch and copy to the program_image. + // Relocate code patch and copy to the program image. // Save size before RelocateAndCopy (which may resize) - const size_t size_before_relocate = program_image.size(); - if (patch->RelocateAndCopy(load_base, code, program_image, &process.GetPostHandlers())) { + const size_t size_before_relocate = codeset.memory.size(); + if (patch->RelocateAndCopy(load_base, code, codeset.memory, &process.GetPostHandlers())) { // Update patch section. auto& patch_segment = codeset.PatchSegment(); auto& post_patch_segment = codeset.PostPatchSegment(); @@ -203,7 +186,7 @@ std::optional AppLoader_NSO::LoadModule(Kernel::KProcess& process, Core:: } // Refresh image_size to take account the patch section if it was added by RelocateAndCopy - image_size = static_cast(program_image.size()); + image_size = static_cast(codeset.memory.size()); } #endif @@ -234,9 +217,7 @@ std::optional AppLoader_NSO::LoadModule(Kernel::KProcess& process, Core:: } // Load codeset for current process - codeset.memory = std::move(program_image); process.LoadModule(std::move(codeset), load_base); - return load_base + image_size; } From 4a833e7206ea0a603def7f9a8538b1dc032eea8e Mon Sep 17 00:00:00 2001 From: smiRaphi Date: Sat, 28 Feb 2026 01:06:59 +0100 Subject: [PATCH 34/84] [desktop] port IR Camera to Qt6 & fix camera saving on windows (#3630) The camera was previously saved without escaping the name which made the values unusable after a settings load, for whatever reason replacing the backslashes when saving with / doesn't work but replacing them with | does. Also note that the OBS virtual cam (and any other cameras that only have directshow drivers) won't work because Qt6 dropped support for that and the ffmpeg backend doesn't seem to support it either. Closes #3468 Reviewed-on: https://git.eden-emu.dev/eden-emu/eden/pulls/3630 Reviewed-by: crueter Reviewed-by: DraVee Co-authored-by: smiRaphi Co-committed-by: smiRaphi --- CMakeLists.txt | 14 ++-- src/yuzu/CMakeLists.txt | 8 +- src/yuzu/bootmanager.cpp | 57 ++++++------- src/yuzu/bootmanager.h | 10 ++- src/yuzu/configuration/configure_camera.cpp | 80 +++++++++---------- src/yuzu/configuration/configure_camera.h | 11 ++- .../configure_input_advanced.cpp | 4 +- 7 files changed, 90 insertions(+), 94 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 11d97724de..4490df21cb 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -70,7 +70,7 @@ endif() option(ENABLE_QT "Enable the Qt frontend" ON) option(ENABLE_QT_TRANSLATION "Enable translations for the Qt frontend" OFF) option(ENABLE_UPDATE_CHECKER "Enable update checker (for Qt and Android)" OFF) -# option(YUZU_USE_QT_MULTIMEDIA "Use QtMultimedia for Camera" OFF) +cmake_dependent_option(YUZU_USE_QT_MULTIMEDIA "Use QtMultimedia for Camera" OFF "NOT YUZU_USE_BUNDLED_QT" OFF) cmake_dependent_option(YUZU_USE_QT_WEB_ENGINE "Use QtWebEngine for web applet implementation" OFF "NOT YUZU_USE_BUNDLED_QT" OFF) set(YUZU_QT_MIRROR "" CACHE STRING "What mirror to use for downloading the bundled Qt libraries") cmake_dependent_option(YUZU_USE_BUNDLED_QT "Download bundled Qt binaries" "${MSVC}" "ENABLE_QT" OFF) @@ -577,9 +577,9 @@ if (ENABLE_QT) find_package(Qt6 CONFIG REQUIRED COMPONENTS Widgets Charts Concurrent) - # if (YUZU_USE_QT_MULTIMEDIA) - # find_package(Qt6 REQUIRED COMPONENTS Multimedia) - # endif() + if (YUZU_USE_QT_MULTIMEDIA) + find_package(Qt6 REQUIRED COMPONENTS Multimedia) + endif() if (PLATFORM_LINUX OR PLATFORM_FREEBSD) # yes Qt, we get it @@ -618,9 +618,9 @@ if (ENABLE_QT) if (PLATFORM_LINUX) list(APPEND YUZU_QT_COMPONENTS DBus) endif() - # if (YUZU_USE_QT_MULTIMEDIA) - # list(APPEND YUZU_QT_COMPONENTS Multimedia) - # endif() + if (YUZU_USE_QT_MULTIMEDIA) + list(APPEND YUZU_QT_COMPONENTS Multimedia) + endif() if (YUZU_USE_QT_WEB_ENGINE) list(APPEND YUZU_QT_COMPONENTS WebEngineCore WebEngineWidgets) endif() diff --git a/src/yuzu/CMakeLists.txt b/src/yuzu/CMakeLists.txt index c85d43235a..99fb2fec15 100644 --- a/src/yuzu/CMakeLists.txt +++ b/src/yuzu/CMakeLists.txt @@ -412,10 +412,10 @@ if (ENABLE_WEB_SERVICE) target_compile_definitions(yuzu PRIVATE ENABLE_WEB_SERVICE) endif() -# if (YUZU_USE_QT_MULTIMEDIA) -# target_link_libraries(yuzu PRIVATE Qt6::Multimedia) -# target_compile_definitions(yuzu PRIVATE YUZU_USE_QT_MULTIMEDIA) -# endif () +if (YUZU_USE_QT_MULTIMEDIA) + target_link_libraries(yuzu PRIVATE Qt6::Multimedia) + target_compile_definitions(yuzu PRIVATE YUZU_USE_QT_MULTIMEDIA) +endif () if (YUZU_USE_QT_WEB_ENGINE) target_link_libraries(yuzu PRIVATE Qt6::WebEngineCore Qt6::WebEngineWidgets) diff --git a/src/yuzu/bootmanager.cpp b/src/yuzu/bootmanager.cpp index 1b88f4133f..72a5157fc4 100644 --- a/src/yuzu/bootmanager.cpp +++ b/src/yuzu/bootmanager.cpp @@ -13,10 +13,11 @@ #include #include "common/settings_enums.h" #include "qt_common/config/uisettings.h" -#if (QT_VERSION < QT_VERSION_CHECK(6, 0, 0)) && YUZU_USE_QT_MULTIMEDIA +#if YUZU_USE_QT_MULTIMEDIA #include -#include -#include +#include +#include +#include #endif #include #include @@ -756,24 +757,25 @@ void GRenderWindow::TouchEndEvent() { } void GRenderWindow::InitializeCamera() { -#if (QT_VERSION < QT_VERSION_CHECK(6, 0, 0)) && YUZU_USE_QT_MULTIMEDIA +#if YUZU_USE_QT_MULTIMEDIA constexpr auto camera_update_ms = std::chrono::milliseconds{50}; // (50ms, 20Hz) if (!Settings::values.enable_ir_sensor) { return; } bool camera_found = false; - const QList cameras = QCameraInfo::availableCameras(); - for (const QCameraInfo& cameraInfo : cameras) { - if (Settings::values.ir_sensor_device.GetValue() == cameraInfo.deviceName().toStdString() || - Settings::values.ir_sensor_device.GetValue() == "Auto") { - camera = std::make_unique(cameraInfo); - if (!camera->isCaptureModeSupported(QCamera::CaptureMode::CaptureViewfinder) && - !camera->isCaptureModeSupported(QCamera::CaptureMode::CaptureStillImage)) { - LOG_ERROR(Frontend, - "Camera doesn't support CaptureViewfinder or CaptureStillImage"); + std::string current_device = Settings::values.ir_sensor_device.GetValue(); +#ifdef _WIN32 + std::replace(current_device.begin(), current_device.end(), '|', '\\'); +#endif + const QList cameras = QMediaDevices::videoInputs(); + for (const QCameraDevice& cameraDevice : cameras) { + if (current_device == cameraDevice.id().toStdString() || current_device == "auto") { + if (cameraDevice.videoFormats().isEmpty()) { + LOG_ERROR(Frontend, "Camera doesn't provide any video formats."); continue; } + camera = std::make_unique(cameraDevice); camera_found = true; break; } @@ -783,27 +785,16 @@ void GRenderWindow::InitializeCamera() { return; } - camera_capture = std::make_unique(camera.get()); - - if (!camera_capture->isCaptureDestinationSupported( - QCameraImageCapture::CaptureDestination::CaptureToBuffer)) { - LOG_ERROR(Frontend, "Camera doesn't support saving to buffer"); - return; - } + capture_session = std::make_unique(); + camera_capture = std::make_unique(); + capture_session->setCamera(camera.get()); + capture_session->setImageCapture(camera_capture.get()); const auto camera_width = input_subsystem->GetCamera()->getImageWidth(); const auto camera_height = input_subsystem->GetCamera()->getImageHeight(); camera_data.resize(camera_width * camera_height); - camera_capture->setCaptureDestination(QCameraImageCapture::CaptureDestination::CaptureToBuffer); - connect(camera_capture.get(), &QCameraImageCapture::imageCaptured, this, + connect(camera_capture.get(), &QImageCapture::imageCaptured, this, &GRenderWindow::OnCameraCapture); - camera->unload(); - if (camera->isCaptureModeSupported(QCamera::CaptureMode::CaptureViewfinder)) { - camera->setCaptureMode(QCamera::CaptureViewfinder); - } else if (camera->isCaptureModeSupported(QCamera::CaptureMode::CaptureStillImage)) { - camera->setCaptureMode(QCamera::CaptureStillImage); - } - camera->load(); camera->start(); pending_camera_snapshots = 0; @@ -817,18 +808,18 @@ void GRenderWindow::InitializeCamera() { } void GRenderWindow::FinalizeCamera() { -#if (QT_VERSION < QT_VERSION_CHECK(6, 0, 0)) && YUZU_USE_QT_MULTIMEDIA +#if YUZU_USE_QT_MULTIMEDIA if (camera_timer) { camera_timer->stop(); } if (camera) { - camera->unload(); + camera->stop(); } #endif } void GRenderWindow::RequestCameraCapture() { -#if (QT_VERSION < QT_VERSION_CHECK(6, 0, 0)) && YUZU_USE_QT_MULTIMEDIA +#if YUZU_USE_QT_MULTIMEDIA if (!Settings::values.enable_ir_sensor) { return; } @@ -849,7 +840,7 @@ void GRenderWindow::RequestCameraCapture() { } void GRenderWindow::OnCameraCapture(int requestId, const QImage& img) { -#if (QT_VERSION < QT_VERSION_CHECK(6, 0, 0)) && YUZU_USE_QT_MULTIMEDIA +#if YUZU_USE_QT_MULTIMEDIA // TODO: Capture directly in the format and resolution needed const auto camera_width = input_subsystem->GetCamera()->getImageWidth(); const auto camera_height = input_subsystem->GetCamera()->getImageHeight(); diff --git a/src/yuzu/bootmanager.h b/src/yuzu/bootmanager.h index 83d364df4b..837156a725 100644 --- a/src/yuzu/bootmanager.h +++ b/src/yuzu/bootmanager.h @@ -1,4 +1,4 @@ -// SPDX-FileCopyrightText: Copyright 2025 Eden Emulator Project +// SPDX-FileCopyrightText: Copyright 2026 Eden Emulator Project // SPDX-License-Identifier: GPL-3.0-or-later // SPDX-FileCopyrightText: 2014 Citra Emulator Project @@ -34,7 +34,8 @@ class MainWindow; class QCamera; -class QCameraImageCapture; +class QImageCapture; +class QMediaCaptureSession; class QCloseEvent; class QFocusEvent; class QKeyEvent; @@ -264,12 +265,13 @@ private: bool first_frame = false; InputCommon::TasInput::TasState last_tas_state; -#if (QT_VERSION < QT_VERSION_CHECK(6, 0, 0)) && YUZU_USE_QT_MULTIMEDIA +#if YUZU_USE_QT_MULTIMEDIA bool is_virtual_camera; int pending_camera_snapshots; std::vector camera_data; std::unique_ptr camera; - std::unique_ptr camera_capture; + std::unique_ptr camera_capture; + std::unique_ptr capture_session; std::unique_ptr camera_timer; #endif diff --git a/src/yuzu/configuration/configure_camera.cpp b/src/yuzu/configuration/configure_camera.cpp index 3368f53f30..eb39bbdc9f 100644 --- a/src/yuzu/configuration/configure_camera.cpp +++ b/src/yuzu/configuration/configure_camera.cpp @@ -1,11 +1,16 @@ +// SPDX-FileCopyrightText: Copyright 2026 Eden Emulator Project +// SPDX-License-Identifier: GPL-3.0-or-later + // Text : Copyright 2022 yuzu Emulator Project // SPDX-License-Identifier: GPL-3.0-or-later #include #include -#if (QT_VERSION < QT_VERSION_CHECK(6, 0, 0)) && YUZU_USE_QT_MULTIMEDIA -#include -#include +#if YUZU_USE_QT_MULTIMEDIA +#include +#include +#include +#include #endif #include #include @@ -36,22 +41,20 @@ ConfigureCamera::ConfigureCamera(QWidget* parent, InputCommon::InputSubsystem* i ConfigureCamera::~ConfigureCamera() = default; void ConfigureCamera::PreviewCamera() { -#if (QT_VERSION < QT_VERSION_CHECK(6, 0, 0)) && YUZU_USE_QT_MULTIMEDIA +#if YUZU_USE_QT_MULTIMEDIA const auto index = ui->ir_sensor_combo_box->currentIndex(); bool camera_found = false; - const QList cameras = QCameraInfo::availableCameras(); - for (const QCameraInfo& cameraInfo : cameras) { - if (input_devices[index] == cameraInfo.deviceName().toStdString() || - input_devices[index] == "Auto") { - LOG_INFO(Frontend, "Selected Camera {} {}", cameraInfo.description().toStdString(), - cameraInfo.deviceName().toStdString()); - camera = std::make_unique(cameraInfo); - if (!camera->isCaptureModeSupported(QCamera::CaptureMode::CaptureViewfinder) && - !camera->isCaptureModeSupported(QCamera::CaptureMode::CaptureStillImage)) { - LOG_ERROR(Frontend, - "Camera doesn't support CaptureViewfinder or CaptureStillImage"); + const QList cameras = QMediaDevices::videoInputs(); + for (const QCameraDevice& cameraDevice : cameras) { + if (input_devices[index] == cameraDevice.id().toStdString() || + input_devices[index] == "auto") { + LOG_INFO(Frontend, "Selected Camera {} {}", cameraDevice.description().toStdString(), + cameraDevice.id().toStdString()); + if (cameraDevice.videoFormats().isEmpty()) { + LOG_ERROR(Frontend, "Camera doesn't provide any video formats."); continue; } + camera = std::make_unique(cameraDevice); camera_found = true; break; } @@ -66,24 +69,12 @@ void ConfigureCamera::PreviewCamera() { return; } - camera_capture = std::make_unique(camera.get()); - - if (!camera_capture->isCaptureDestinationSupported( - QCameraImageCapture::CaptureDestination::CaptureToBuffer)) { - LOG_ERROR(Frontend, "Camera doesn't support saving to buffer"); - return; - } - - camera_capture->setCaptureDestination(QCameraImageCapture::CaptureDestination::CaptureToBuffer); - connect(camera_capture.get(), &QCameraImageCapture::imageCaptured, this, + capture_session = std::make_unique(); + camera_capture = std::make_unique(); + capture_session->setCamera(camera.get()); + capture_session->setImageCapture(camera_capture.get()); + connect(camera_capture.get(), &QImageCapture::imageCaptured, this, &ConfigureCamera::DisplayCapturedFrame); - camera->unload(); - if (camera->isCaptureModeSupported(QCamera::CaptureMode::CaptureViewfinder)) { - camera->setCaptureMode(QCamera::CaptureViewfinder); - } else if (camera->isCaptureModeSupported(QCamera::CaptureMode::CaptureStillImage)) { - camera->setCaptureMode(QCamera::CaptureStillImage); - } - camera->load(); camera->start(); pending_snapshots = 0; @@ -129,24 +120,31 @@ void ConfigureCamera::RetranslateUI() { } void ConfigureCamera::ApplyConfiguration() { - const auto index = ui->ir_sensor_combo_box->currentIndex(); - Settings::values.ir_sensor_device.SetValue(input_devices[index]); + std::string current_device = input_devices[ui->ir_sensor_combo_box->currentIndex()]; +#ifdef _WIN32 + // for whatever reason replacing with / isn't enough so we use | for saving + std::replace(current_device.begin(), current_device.end(), '\\', '|'); +#endif + Settings::values.ir_sensor_device.SetValue(current_device); } void ConfigureCamera::LoadConfiguration() { input_devices.clear(); ui->ir_sensor_combo_box->clear(); - input_devices.push_back("Auto"); + input_devices.push_back("auto"); ui->ir_sensor_combo_box->addItem(tr("Auto")); -#if (QT_VERSION < QT_VERSION_CHECK(6, 0, 0)) && YUZU_USE_QT_MULTIMEDIA - const auto cameras = QCameraInfo::availableCameras(); - for (const QCameraInfo& cameraInfo : cameras) { - input_devices.push_back(cameraInfo.deviceName().toStdString()); - ui->ir_sensor_combo_box->addItem(cameraInfo.description()); +#if YUZU_USE_QT_MULTIMEDIA + const auto cameras = QMediaDevices::videoInputs(); + for (const QCameraDevice& cameraDevice : cameras) { + input_devices.push_back(cameraDevice.id().toStdString()); + ui->ir_sensor_combo_box->addItem(cameraDevice.description()); } #endif - const auto current_device = Settings::values.ir_sensor_device.GetValue(); + std::string current_device = Settings::values.ir_sensor_device.GetValue(); +#ifdef _WIN32 + std::replace(current_device.begin(), current_device.end(), '|', '\\'); +#endif const auto devices_it = std::find_if( input_devices.begin(), input_devices.end(), diff --git a/src/yuzu/configuration/configure_camera.h b/src/yuzu/configuration/configure_camera.h index 3d822da7bb..610b362419 100644 --- a/src/yuzu/configuration/configure_camera.h +++ b/src/yuzu/configuration/configure_camera.h @@ -1,3 +1,6 @@ +// SPDX-FileCopyrightText: Copyright 2026 Eden Emulator Project +// SPDX-License-Identifier: GPL-3.0-or-later + // Text : Copyright 2022 yuzu Emulator Project // SPDX-License-Identifier: GPL-3.0-or-later @@ -8,7 +11,8 @@ class QTimer; class QCamera; -class QCameraImageCapture; +class QImageCapture; +class QMediaCaptureSession; namespace InputCommon { class InputSubsystem; @@ -46,9 +50,10 @@ private: bool is_virtual_camera; int pending_snapshots; -#if (QT_VERSION < QT_VERSION_CHECK(6, 0, 0)) && YUZU_USE_QT_MULTIMEDIA +#if YUZU_USE_QT_MULTIMEDIA std::unique_ptr camera; - std::unique_ptr camera_capture; + std::unique_ptr camera_capture; + std::unique_ptr capture_session; #endif std::unique_ptr camera_timer; std::vector input_devices; diff --git a/src/yuzu/configuration/configure_input_advanced.cpp b/src/yuzu/configuration/configure_input_advanced.cpp index 241d445cea..b1c19114bf 100644 --- a/src/yuzu/configuration/configure_input_advanced.cpp +++ b/src/yuzu/configuration/configure_input_advanced.cpp @@ -1,4 +1,4 @@ -// SPDX-FileCopyrightText: Copyright 2025 Eden Emulator Project +// SPDX-FileCopyrightText: Copyright 2026 Eden Emulator Project // SPDX-License-Identifier: GPL-3.0-or-later // SPDX-FileCopyrightText: Copyright 2020 yuzu Emulator Project @@ -201,7 +201,7 @@ void ConfigureInputAdvanced::UpdateUIEnabled() { ui->debug_configure->setEnabled(ui->debug_enabled->isChecked()); ui->touchscreen_advanced->setEnabled(ui->touchscreen_enabled->isChecked()); ui->ring_controller_configure->setEnabled(ui->enable_ring_controller->isChecked()); -#if QT_VERSION > QT_VERSION_CHECK(6, 0, 0) || !defined(YUZU_USE_QT_MULTIMEDIA) +#if !defined(YUZU_USE_QT_MULTIMEDIA) ui->enable_ir_sensor->setEnabled(false); ui->camera_configure->setEnabled(false); #endif From ac181b756f7c8e4abf67412cc2c61ba61f5e5301 Mon Sep 17 00:00:00 2001 From: John Date: Sat, 28 Feb 2026 01:07:40 +0100 Subject: [PATCH 35/84] [Config] Update Rescale Toggle Description to Include Intel GPUs (#3650) The toggle hack has benefits for Intel GPU users in Luigi Mansion 3 as they also suffer from line artifacts. Reviewed-on: https://git.eden-emu.dev/eden-emu/eden/pulls/3650 Reviewed-by: crueter Reviewed-by: DraVee Co-authored-by: John Co-committed-by: John --- src/qt_common/config/shared_translation.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/qt_common/config/shared_translation.cpp b/src/qt_common/config/shared_translation.cpp index 5f3a6c18c0..f49c43ee2a 100644 --- a/src/qt_common/config/shared_translation.cpp +++ b/src/qt_common/config/shared_translation.cpp @@ -360,7 +360,7 @@ std::unique_ptr InitializeTranslations(QObject* parent) rescale_hack, tr("Enable Legacy Rescale Pass"), tr("May fix rescale issues in some games by relying on behavior from the previous implementation.\n" - "Legacy behavior workaround that fixes AMD GPU line artifacts and Nvidia GPU grey texture flicker in Luigis Mansion 3.")); + "Legacy behavior workaround that fixes line artifacts on AMD and Intel GPUs, and grey texture flicker on Nvidia GPUs in Luigis Mansion 3.")); // Renderer (Extensions) INSERT(Settings, dyna_state, tr("Extended Dynamic State"), From 7de5eb6884bd3c4b4f8912406e30dc26497e9fbc Mon Sep 17 00:00:00 2001 From: xXJSONDeruloXx Date: Sat, 28 Feb 2026 16:05:06 +0100 Subject: [PATCH 36/84] [android] fix persist manual game pause after android sleep/wake (#3651) if user invokes the "pause game" option from the menu while in game, as expected this suspends the process till user manually hits resume.. except for one case: Android sleep/wake lifecycle. If user manually pauses a running game, then sleeps their device, then wakes their device; the game will self-resume without user pressing "resume game". Expected behavior IMO is that if user left the game process in manually paused state, app should respect this and persist the pause on system wake, so that user may manually press "resume game" to unfreeze the process. Simple fix is to have a few params for user initiated pause and resume, and update the pause and run methods to handle as described above. Please let me know if there is a cleaner way to implement! Reviewed-on: https://git.eden-emu.dev/eden-emu/eden/pulls/3651 Reviewed-by: crueter Reviewed-by: CamilleLaVey Reviewed-by: DraVee Co-authored-by: xXJSONDeruloXx Co-committed-by: xXJSONDeruloXx --- .../java/org/yuzu/yuzu_emu/NativeLibrary.kt | 4 + .../yuzu_emu/activities/EmulationActivity.kt | 8 +- .../yuzu_emu/fragments/EmulationFragment.kt | 144 +++++++++++++++--- .../org/yuzu/yuzu_emu/overlay/InputOverlay.kt | 7 +- .../src/main/jni/emu_window/emu_window.cpp | 11 ++ src/android/app/src/main/jni/native.cpp | 41 ++++- .../src/main/res/drawable/circle_white.xml | 4 + .../main/res/layout/fragment_emulation.xml | 28 ++++ 8 files changed, 220 insertions(+), 27 deletions(-) create mode 100644 src/android/app/src/main/res/drawable/circle_white.xml diff --git a/src/android/app/src/main/java/org/yuzu/yuzu_emu/NativeLibrary.kt b/src/android/app/src/main/java/org/yuzu/yuzu_emu/NativeLibrary.kt index e49f466462..1f0acf2835 100644 --- a/src/android/app/src/main/java/org/yuzu/yuzu_emu/NativeLibrary.kt +++ b/src/android/app/src/main/java/org/yuzu/yuzu_emu/NativeLibrary.kt @@ -152,6 +152,10 @@ object NativeLibrary { external fun surfaceDestroyed() + external fun getAppletCaptureBuffer(): ByteArray + external fun getAppletCaptureWidth(): Int + external fun getAppletCaptureHeight(): Int + /** * Unpauses emulation from a paused state. */ diff --git a/src/android/app/src/main/java/org/yuzu/yuzu_emu/activities/EmulationActivity.kt b/src/android/app/src/main/java/org/yuzu/yuzu_emu/activities/EmulationActivity.kt index 42d4f687f4..2764d7eac6 100644 --- a/src/android/app/src/main/java/org/yuzu/yuzu_emu/activities/EmulationActivity.kt +++ b/src/android/app/src/main/java/org/yuzu/yuzu_emu/activities/EmulationActivity.kt @@ -1,4 +1,4 @@ -// SPDX-FileCopyrightText: Copyright 2025 Eden Emulator Project +// SPDX-FileCopyrightText: Copyright 2026 Eden Emulator Project // SPDX-License-Identifier: GPL-3.0-or-later // SPDX-FileCopyrightText: 2023 yuzu Emulator Project @@ -204,9 +204,9 @@ class EmulationActivity : AppCompatActivity(), SensorEventListener, InputManager } override fun onPause() { - super.onPause() nfcReader.stopScanning() stopMotionSensorListener() + super.onPause() } override fun onDestroy() { @@ -339,6 +339,10 @@ class EmulationActivity : AppCompatActivity(), SensorEventListener, InputManager } override fun onSensorChanged(event: SensorEvent) { + if (!NativeLibrary.isRunning() || NativeLibrary.isPaused()) { + return + } + val rotation = this.display?.rotation if (rotation == Surface.ROTATION_90) { flipMotionOrientation = true diff --git a/src/android/app/src/main/java/org/yuzu/yuzu_emu/fragments/EmulationFragment.kt b/src/android/app/src/main/java/org/yuzu/yuzu_emu/fragments/EmulationFragment.kt index e8739e2d23..435fe5fe2c 100644 --- a/src/android/app/src/main/java/org/yuzu/yuzu_emu/fragments/EmulationFragment.kt +++ b/src/android/app/src/main/java/org/yuzu/yuzu_emu/fragments/EmulationFragment.kt @@ -15,6 +15,7 @@ import android.content.Intent import android.content.IntentFilter import android.content.pm.ActivityInfo import android.content.res.Configuration +import android.graphics.Bitmap import android.net.Uri import android.os.BatteryManager import android.os.BatteryManager.* @@ -97,6 +98,7 @@ import org.yuzu.yuzu_emu.utils.collect import org.yuzu.yuzu_emu.utils.CustomSettingsHandler import java.io.ByteArrayOutputStream import java.io.File +import java.nio.ByteBuffer import kotlin.coroutines.resume import kotlin.coroutines.suspendCoroutine import kotlin.or @@ -141,6 +143,7 @@ class EmulationFragment : Fragment(), SurfaceHolder.Callback { private var wasInputOverlayAutoHidden = false private var overlayTouchActive = false + private var pausedFrameBitmap: Bitmap? = null var shouldUseCustom = false private var isQuickSettingsMenuOpen = false @@ -703,6 +706,12 @@ class EmulationFragment : Fragment(), SurfaceHolder.Callback { binding.inGameMenu.menu.findItem(R.id.menu_quick_settings)?.isVisible = BooleanSetting.ENABLE_QUICK_SETTINGS.getBoolean() + binding.pausedIcon.setOnClickListener { + if (this::emulationState.isInitialized && emulationState.isPaused) { + resumeEmulationFromUi() + } + } + binding.inGameMenu.menu.findItem(R.id.menu_lock_drawer).apply { val lockMode = IntSetting.LOCK_DRAWER.getInt() val titleId = if (lockMode == DrawerLayout.LOCK_MODE_LOCKED_CLOSED) { @@ -728,11 +737,9 @@ class EmulationFragment : Fragment(), SurfaceHolder.Callback { when (it.itemId) { R.id.menu_pause_emulation -> { if (emulationState.isPaused) { - emulationState.run(false) - updatePauseMenuEntry(false) + resumeEmulationFromUi() } else { - emulationState.pause() - updatePauseMenuEntry(true) + pauseEmulationAndCaptureFrame() } binding.inGameMenu.requestFocus() true @@ -826,6 +833,7 @@ class EmulationFragment : Fragment(), SurfaceHolder.Callback { } R.id.menu_exit -> { + clearPausedFrame() emulationState.stop() NativeConfig.reloadGlobalConfig() emulationViewModel.setIsEmulationStopping(true) @@ -1197,6 +1205,71 @@ class EmulationFragment : Fragment(), SurfaceHolder.Callback { } } + private fun pauseEmulationAndCaptureFrame() { + emulationState.pause() + updatePauseMenuEntry(true) + capturePausedFrameFromCore() + updatePausedFrameVisibility() + } + + private fun capturePausedFrameFromCore() { + lifecycleScope.launch(Dispatchers.Default) { + val frameData = NativeLibrary.getAppletCaptureBuffer() + val width = NativeLibrary.getAppletCaptureWidth() + val height = NativeLibrary.getAppletCaptureHeight() + if (frameData.isEmpty() || width <= 0 || height <= 0) { + Log.warning( + "[EmulationFragment] Paused frame capture returned empty/invalid data. " + + "size=${frameData.size}, width=$width, height=$height" + ) + return@launch + } + + val expectedSize = width * height * 4 + if (frameData.size < expectedSize) { + Log.warning( + "[EmulationFragment] Paused frame buffer smaller than expected. " + + "size=${frameData.size}, expected=$expectedSize" + ) + return@launch + } + + val bitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888) + bitmap.copyPixelsFromBuffer(ByteBuffer.wrap(frameData, 0, expectedSize)) + + withContext(Dispatchers.Main) { + pausedFrameBitmap?.recycle() + pausedFrameBitmap = bitmap + updatePausedFrameVisibility() + } + } + } + + private fun updatePausedFrameVisibility() { + val b = _binding ?: return + val showPausedUi = this::emulationState.isInitialized && emulationState.isPaused + b.pausedIcon.setVisible(showPausedUi) + + val bitmap = if (showPausedUi) pausedFrameBitmap else null + b.pausedFrameImage.setImageBitmap(bitmap) + b.pausedFrameImage.setVisible(bitmap != null) + } + + private fun resumeEmulationFromUi() { + clearPausedFrame() + emulationState.resume() + updatePauseMenuEntry(emulationState.isPaused) + updatePausedFrameVisibility() + } + + private fun clearPausedFrame() { + val b = _binding + b?.pausedFrameImage?.setVisible(false) + b?.pausedFrameImage?.setImageDrawable(null) + pausedFrameBitmap?.recycle() + pausedFrameBitmap = null + } + private fun handleLoadAmiiboSelection(): Boolean { val binding = _binding ?: return true @@ -1290,8 +1363,9 @@ class EmulationFragment : Fragment(), SurfaceHolder.Callback { override fun onPause() { if (this::emulationState.isInitialized) { if (emulationState.isRunning && emulationActivity?.isInPictureInPictureMode != true) { - emulationState.pause() - updatePauseMenuEntry(true) + pauseEmulationAndCaptureFrame() + } else { + updatePausedFrameVisibility() } } super.onPause() @@ -1301,6 +1375,7 @@ class EmulationFragment : Fragment(), SurfaceHolder.Callback { super.onDestroyView() amiiboLoadJob?.cancel() amiiboLoadJob = null + clearPausedFrame() _binding?.surfaceInputOverlay?.touchEventListener = null _binding = null isAmiiboPickerOpen = false @@ -1321,6 +1396,7 @@ class EmulationFragment : Fragment(), SurfaceHolder.Callback { b.inGameMenu.post { if (!this::emulationState.isInitialized || _binding == null) return@post updatePauseMenuEntry(emulationState.isPaused) + updatePausedFrameVisibility() } } @@ -1760,6 +1836,7 @@ class EmulationFragment : Fragment(), SurfaceHolder.Callback { // Only update surface reference, don't trigger state changes emulationState.updateSurfaceReference(holder.surface) } + updatePausedFrameVisibility() } override fun surfaceDestroyed(holder: SurfaceHolder) { @@ -2090,6 +2167,29 @@ class EmulationFragment : Fragment(), SurfaceHolder.Callback { } } + @Synchronized + fun resume() { + if (state != State.PAUSED) { + Log.warning("[EmulationFragment] Resume called while emulation is not paused.") + return + } + if (!emulationCanStart.invoke()) { + Log.warning("[EmulationFragment] Resume blocked by emulationCanStart check.") + return + } + val currentSurface = surface + if (currentSurface == null || !currentSurface.isValid) { + Log.debug("[EmulationFragment] Resume requested with invalid surface.") + return + } + + NativeLibrary.surfaceChanged(currentSurface) + Log.debug("[EmulationFragment] Resuming emulation.") + NativeLibrary.unpauseEmulation() + NativeLibrary.playTimeManagerStart() + state = State.RUNNING + } + @Synchronized fun changeProgram(programIndex: Int) { emulationThread.join() @@ -2111,7 +2211,7 @@ class EmulationFragment : Fragment(), SurfaceHolder.Callback { @Synchronized fun updateSurface() { - if (surface != null) { + if (surface != null && state == State.RUNNING) { NativeLibrary.surfaceChanged(surface) } } @@ -2127,20 +2227,20 @@ class EmulationFragment : Fragment(), SurfaceHolder.Callback { @Synchronized fun clearSurface() { if (surface == null) { - Log.warning("[EmulationFragment] clearSurface called, but surface already null.") + Log.debug("[EmulationFragment] clearSurface called, but surface already null.") } else { + if (state == State.RUNNING) { + pause() + } + NativeLibrary.surfaceDestroyed() surface = null Log.debug("[EmulationFragment] Surface destroyed.") when (state) { - State.RUNNING -> { - state = State.PAUSED - } - - State.PAUSED -> Log.warning( + State.PAUSED -> Log.debug( "[EmulationFragment] Surface cleared while emulation paused." ) - else -> Log.warning( + else -> Log.debug( "[EmulationFragment] Surface cleared while emulation stopped." ) } @@ -2148,29 +2248,35 @@ class EmulationFragment : Fragment(), SurfaceHolder.Callback { } private fun runWithValidSurface(programIndex: Int = 0) { - NativeLibrary.surfaceChanged(surface) if (!emulationCanStart.invoke()) { return } + val currentSurface = surface + if (currentSurface == null || !currentSurface.isValid) { + Log.debug("[EmulationFragment] runWithValidSurface called with invalid surface.") + return + } when (state) { State.STOPPED -> { + NativeLibrary.surfaceChanged(currentSurface) emulationThread = Thread({ Log.debug("[EmulationFragment] Starting emulation thread.") NativeLibrary.run(gamePath, programIndex, true) }, "NativeEmulation") emulationThread.start() + state = State.RUNNING } State.PAUSED -> { - Log.debug("[EmulationFragment] Resuming emulation.") - NativeLibrary.unpauseEmulation() - NativeLibrary.playTimeManagerStart() + Log.debug( + "[EmulationFragment] Surface restored while emulation paused; " + + "waiting for explicit resume." + ) } else -> Log.debug("[EmulationFragment] Bug, run called while already running.") } - state = State.RUNNING } private enum class State { diff --git a/src/android/app/src/main/java/org/yuzu/yuzu_emu/overlay/InputOverlay.kt b/src/android/app/src/main/java/org/yuzu/yuzu_emu/overlay/InputOverlay.kt index e18077c673..d3b5d86174 100644 --- a/src/android/app/src/main/java/org/yuzu/yuzu_emu/overlay/InputOverlay.kt +++ b/src/android/app/src/main/java/org/yuzu/yuzu_emu/overlay/InputOverlay.kt @@ -1,4 +1,4 @@ -// SPDX-FileCopyrightText: Copyright 2025 Eden Emulator Project +// SPDX-FileCopyrightText: Copyright 2026 Eden Emulator Project // SPDX-License-Identifier: GPL-3.0-or-later package org.yuzu.yuzu_emu.overlay @@ -20,7 +20,6 @@ import android.os.Looper import android.util.AttributeSet import android.view.HapticFeedbackConstants import android.view.MotionEvent -import android.view.SurfaceView import android.view.View import android.view.View.OnTouchListener import android.view.WindowInsets @@ -42,10 +41,10 @@ import org.yuzu.yuzu_emu.utils.NativeConfig /** * Draws the interactive input overlay on top of the - * [SurfaceView] that is rendering emulation. + * emulation rendering surface. */ class InputOverlay(context: Context, attrs: AttributeSet?) : - SurfaceView(context, attrs), + View(context, attrs), OnTouchListener { private val overlayButtons: MutableSet = HashSet() private val overlayDpads: MutableSet = HashSet() diff --git a/src/android/app/src/main/jni/emu_window/emu_window.cpp b/src/android/app/src/main/jni/emu_window/emu_window.cpp index 06db553691..4e90cad570 100644 --- a/src/android/app/src/main/jni/emu_window/emu_window.cpp +++ b/src/android/app/src/main/jni/emu_window/emu_window.cpp @@ -1,3 +1,6 @@ +// SPDX-FileCopyrightText: Copyright 2026 Eden Emulator Project +// SPDX-License-Identifier: GPL-3.0-or-later + // SPDX-FileCopyrightText: 2023 yuzu Emulator Project // SPDX-License-Identifier: GPL-3.0-or-later @@ -14,6 +17,14 @@ #include "jni/native.h" void EmuWindow_Android::OnSurfaceChanged(ANativeWindow* surface) { + if (!surface) { + LOG_INFO(Frontend, "EmuWindow_Android::OnSurfaceChanged received null surface"); + m_window_width = 0; + m_window_height = 0; + window_info.render_surface = nullptr; + return; + } + m_window_width = ANativeWindow_getWidth(surface); m_window_height = ANativeWindow_getHeight(surface); diff --git a/src/android/app/src/main/jni/native.cpp b/src/android/app/src/main/jni/native.cpp index 2e50bb1069..c429f4a1e4 100644 --- a/src/android/app/src/main/jni/native.cpp +++ b/src/android/app/src/main/jni/native.cpp @@ -89,6 +89,8 @@ #include "jni/native.h" #include "video_core/renderer_base.h" #include "video_core/renderer_vulkan/renderer_vulkan.h" +#include "video_core/capture.h" +#include "video_core/textures/decoders.h" #include "video_core/vulkan_common/vulkan_instance.h" #include "video_core/vulkan_common/vulkan_surface.h" #include "video_core/shader_notify.h" @@ -780,9 +782,10 @@ void Java_org_yuzu_yuzu_1emu_NativeLibrary_surfaceChanged(JNIEnv* env, jobject i } void Java_org_yuzu_yuzu_1emu_NativeLibrary_surfaceDestroyed(JNIEnv* env, jobject instance) { - ANativeWindow_release(EmulationSession::GetInstance().NativeWindow()); + if (auto* native_window = EmulationSession::GetInstance().NativeWindow(); native_window) { + ANativeWindow_release(native_window); + } EmulationSession::GetInstance().SetNativeWindow(nullptr); - EmulationSession::GetInstance().SurfaceChanged(); } void Java_org_yuzu_yuzu_1emu_NativeLibrary_setAppDirectory(JNIEnv* env, jobject instance, @@ -969,6 +972,40 @@ jboolean Java_org_yuzu_yuzu_1emu_NativeLibrary_isPaused(JNIEnv* env, jclass claz return static_cast(EmulationSession::GetInstance().IsPaused()); } +jbyteArray Java_org_yuzu_yuzu_1emu_NativeLibrary_getAppletCaptureBuffer(JNIEnv* env, jclass clazz) { + using namespace VideoCore::Capture; + + if (!EmulationSession::GetInstance().IsRunning()) { + return env->NewByteArray(0); + } + + const auto tiled = EmulationSession::GetInstance().System().GPU().GetAppletCaptureBuffer(); + if (tiled.size() < TiledSize) { + return env->NewByteArray(0); + } + + std::vector linear(LinearWidth * LinearHeight * BytesPerPixel); + Tegra::Texture::UnswizzleTexture(linear, tiled, BytesPerPixel, LinearWidth, LinearHeight, + LinearDepth, BlockHeight, BlockDepth); + + auto buffer = env->NewByteArray(static_cast(linear.size())); + if (!buffer) { + return env->NewByteArray(0); + } + + env->SetByteArrayRegion(buffer, 0, static_cast(linear.size()), + reinterpret_cast(linear.data())); + return buffer; +} + +jint Java_org_yuzu_yuzu_1emu_NativeLibrary_getAppletCaptureWidth(JNIEnv* env, jclass clazz) { + return static_cast(VideoCore::Capture::LinearWidth); +} + +jint Java_org_yuzu_yuzu_1emu_NativeLibrary_getAppletCaptureHeight(JNIEnv* env, jclass clazz) { + return static_cast(VideoCore::Capture::LinearHeight); +} + void Java_org_yuzu_yuzu_1emu_NativeLibrary_initializeSystem(JNIEnv* env, jclass clazz, jboolean reload) { // Initialize the emulated system. diff --git a/src/android/app/src/main/res/drawable/circle_white.xml b/src/android/app/src/main/res/drawable/circle_white.xml new file mode 100644 index 0000000000..c94e68679a --- /dev/null +++ b/src/android/app/src/main/res/drawable/circle_white.xml @@ -0,0 +1,4 @@ + + + + diff --git a/src/android/app/src/main/res/layout/fragment_emulation.xml b/src/android/app/src/main/res/layout/fragment_emulation.xml index 7f5f039d5e..db363bc723 100644 --- a/src/android/app/src/main/res/layout/fragment_emulation.xml +++ b/src/android/app/src/main/res/layout/fragment_emulation.xml @@ -108,6 +108,22 @@ + + + + + + + + Date: Sat, 28 Feb 2026 19:34:55 +0100 Subject: [PATCH 37/84] [android] add IntSetting for static theme and set green as default (#3655) Reviewed-on: https://git.eden-emu.dev/eden-emu/eden/pulls/3655 Reviewed-by: CamilleLaVey Co-authored-by: PavelBARABANOV Co-committed-by: PavelBARABANOV --- .../features/settings/model/IntSetting.kt | 1 + .../settings/ui/SettingsFragmentPresenter.kt | 19 ++++++++++--------- .../yuzu_emu/utils/DirectoryInitialization.kt | 6 ++++++ .../org/yuzu/yuzu_emu/utils/ThemeHelper.kt | 4 ++-- .../app/src/main/jni/android_settings.h | 1 + .../app/src/main/res/values/strings.xml | 4 ++-- 6 files changed, 22 insertions(+), 13 deletions(-) diff --git a/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/model/IntSetting.kt b/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/model/IntSetting.kt index a24a2e1776..4c70d2b35b 100644 --- a/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/model/IntSetting.kt +++ b/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/model/IntSetting.kt @@ -34,6 +34,7 @@ enum class IntSetting(override val key: String) : AbstractIntSetting { MAX_ANISOTROPY("max_anisotropy"), THEME("theme"), THEME_MODE("theme_mode"), + STATIC_THEME_COLOR("static_theme_color"), APP_LANGUAGE("app_language"), OVERLAY_SCALE("control_scale"), OVERLAY_OPACITY("control_opacity"), diff --git a/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/ui/SettingsFragmentPresenter.kt b/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/ui/SettingsFragmentPresenter.kt index 332617804e..0fc4fb0b7f 100644 --- a/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/ui/SettingsFragmentPresenter.kt +++ b/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/ui/SettingsFragmentPresenter.kt @@ -1124,23 +1124,24 @@ class SettingsFragmentPresenter( } val staticThemeColor: AbstractIntSetting = object : AbstractIntSetting { - val preferences = PreferenceManager.getDefaultSharedPreferences( - YuzuApplication.appContext - ) override fun getInt(needsGlobal: Boolean): Int = - preferences.getInt(Settings.PREF_STATIC_THEME_COLOR, 0) + IntSetting.STATIC_THEME_COLOR.getInt(needsGlobal) + override fun setInt(value: Int) { - preferences.edit() { putInt(Settings.PREF_STATIC_THEME_COLOR, value) } + IntSetting.STATIC_THEME_COLOR.setInt(value) settingsViewModel.setShouldRecreate(true) } - override val key: String = Settings.PREF_STATIC_THEME_COLOR + override val key: String = IntSetting.STATIC_THEME_COLOR.key override val isRuntimeModifiable: Boolean = true + override fun getValueAsString(needsGlobal: Boolean): String = - preferences.getInt(Settings.PREF_STATIC_THEME_COLOR, 0).toString() - override val defaultValue: Any = 0 + IntSetting.STATIC_THEME_COLOR.getValueAsString(needsGlobal) + + override val defaultValue: Any = IntSetting.STATIC_THEME_COLOR.defaultValue + override fun reset() { - preferences.edit() { putInt(Settings.PREF_STATIC_THEME_COLOR, 0) } + IntSetting.STATIC_THEME_COLOR.reset() settingsViewModel.setShouldRecreate(true) } } diff --git a/src/android/app/src/main/java/org/yuzu/yuzu_emu/utils/DirectoryInitialization.kt b/src/android/app/src/main/java/org/yuzu/yuzu_emu/utils/DirectoryInitialization.kt index 6318aa71f2..f47c60491b 100644 --- a/src/android/app/src/main/java/org/yuzu/yuzu_emu/utils/DirectoryInitialization.kt +++ b/src/android/app/src/main/java/org/yuzu/yuzu_emu/utils/DirectoryInitialization.kt @@ -61,6 +61,12 @@ object DirectoryInitialization { saveConfig = true } + val staticThemeColor = preferences.migratePreference(Settings.PREF_STATIC_THEME_COLOR) + if (staticThemeColor != null) { + IntSetting.STATIC_THEME_COLOR.setInt(staticThemeColor) + saveConfig = true + } + val blackBackgrounds = preferences.migratePreference(Settings.PREF_BLACK_BACKGROUNDS) if (blackBackgrounds != null) { diff --git a/src/android/app/src/main/java/org/yuzu/yuzu_emu/utils/ThemeHelper.kt b/src/android/app/src/main/java/org/yuzu/yuzu_emu/utils/ThemeHelper.kt index 3e138c0244..83335b5e1c 100644 --- a/src/android/app/src/main/java/org/yuzu/yuzu_emu/utils/ThemeHelper.kt +++ b/src/android/app/src/main/java/org/yuzu/yuzu_emu/utils/ThemeHelper.kt @@ -1,4 +1,4 @@ -// SPDX-FileCopyrightText: 2025 Eden Emulator Project +// SPDX-FileCopyrightText: Copyright 2026 Eden Emulator Project // SPDX-License-Identifier: GPL-3.0-or-later package org.yuzu.yuzu_emu.utils @@ -52,7 +52,7 @@ object ThemeHelper { } private fun getSelectedStaticThemeColor(): Int { - val themeIndex = preferences.getInt(Settings.PREF_STATIC_THEME_COLOR, 0) + val themeIndex = IntSetting.STATIC_THEME_COLOR.getInt(false) val themes = arrayOf( R.style.Theme_Eden_Main, R.style.Theme_Yuzu_Main_Violet, diff --git a/src/android/app/src/main/jni/android_settings.h b/src/android/app/src/main/jni/android_settings.h index 4090330d78..606ce2ce84 100644 --- a/src/android/app/src/main/jni/android_settings.h +++ b/src/android/app/src/main/jni/android_settings.h @@ -56,6 +56,7 @@ namespace AndroidSettings { Settings::Setting theme{linkage, 0, "theme", Settings::Category::Android}; Settings::Setting theme_mode{linkage, -1, "theme_mode", Settings::Category::Android}; + Settings::Setting static_theme_color{linkage, 5, "static_theme_color", Settings::Category::Android}; Settings::Setting black_backgrounds{linkage, false, "black_backgrounds", Settings::Category::Android}; Settings::Setting app_language{linkage, 0, "app_language", Settings::Category::Android}; diff --git a/src/android/app/src/main/res/values/strings.xml b/src/android/app/src/main/res/values/strings.xml index fc1334863d..7d094effcb 100644 --- a/src/android/app/src/main/res/values/strings.xml +++ b/src/android/app/src/main/res/values/strings.xml @@ -1222,12 +1222,12 @@ Theme Color - Eden (Default) + Eden Violet Blue Cyan Red - Green + Green (Default) Yellow Orange Pink From 281d7a468e3c61706f9687a4bcdd4c2c097f24c9 Mon Sep 17 00:00:00 2001 From: lizzie Date: Sun, 1 Mar 2026 01:53:04 +0100 Subject: [PATCH 38/84] [ports] Remove ENABLE_OPENSSL and mbedtls nixos remnants (#3638) shell.nix still had references to mbedtls Signed-off-by: lizzie Reviewed-on: https://git.eden-emu.dev/eden-emu/eden/pulls/3638 Reviewed-by: MaranBr Reviewed-by: DraVee Co-authored-by: lizzie Co-committed-by: lizzie --- shell.nix | 2 +- src/android/app/build.gradle.kts | 1 - src/android/app/src/main/jni/CMakeLists.txt | 7 ++----- src/core/crypto/aes_util.cpp | 15 ++++----------- src/core/crypto/sha_util.cpp | 4 ---- src/core/crypto/sha_util.h | 19 ------------------- 6 files changed, 7 insertions(+), 41 deletions(-) delete mode 100644 src/core/crypto/sha_util.cpp delete mode 100644 src/core/crypto/sha_util.h diff --git a/shell.nix b/shell.nix index d835b43ed1..d8257b88d9 100644 --- a/shell.nix +++ b/shell.nix @@ -9,7 +9,7 @@ pkgs.mkShellNoCC { # libraries openssl boost fmt nlohmann_json lz4 zlib zstd enet libopus vulkan-headers vulkan-utility-libraries - spirv-tools spirv-headers vulkan-loader unzip mbedtls + spirv-tools spirv-headers vulkan-loader unzip glslang python3 httplib cpp-jwt ffmpeg-headless libusb1 cubeb # eden diff --git a/src/android/app/build.gradle.kts b/src/android/app/build.gradle.kts index 622ae53a77..3279a2202f 100644 --- a/src/android/app/build.gradle.kts +++ b/src/android/app/build.gradle.kts @@ -80,7 +80,6 @@ android { listOf( "-DENABLE_QT=0", // Don't use QT "-DENABLE_WEB_SERVICE=1", // Enable web service - "-DENABLE_OPENSSL=ON", "-DANDROID_ARM_NEON=true", // cryptopp requires Neon to work "-DYUZU_USE_CPM=ON", "-DCPMUTIL_FORCE_BUNDLED=ON", diff --git a/src/android/app/src/main/jni/CMakeLists.txt b/src/android/app/src/main/jni/CMakeLists.txt index 6cdacea320..c68e206d24 100644 --- a/src/android/app/src/main/jni/CMakeLists.txt +++ b/src/android/app/src/main/jni/CMakeLists.txt @@ -1,4 +1,4 @@ -# SPDX-FileCopyrightText: Copyright 2025 Eden Emulator Project +# SPDX-FileCopyrightText: Copyright 2026 Eden Emulator Project # SPDX-License-Identifier: GPL-3.0-or-later # SPDX-FileCopyrightText: 2023 yuzu Emulator Project @@ -27,10 +27,7 @@ if (ARCHITECTURE_arm64) target_link_libraries(yuzu-android PRIVATE adrenotools) endif() -if (ENABLE_OPENSSL OR ENABLE_WEB_SERVICE) - target_link_libraries(yuzu-android PRIVATE OpenSSL::SSL cpp-jwt::cpp-jwt) -endif() - +target_link_libraries(yuzu-android PRIVATE OpenSSL::SSL cpp-jwt::cpp-jwt) if (ENABLE_UPDATE_CHECKER) target_compile_definitions(yuzu-android PUBLIC ENABLE_UPDATE_CHECKER) endif() diff --git a/src/core/crypto/aes_util.cpp b/src/core/crypto/aes_util.cpp index 1189e45bd8..55f436f532 100644 --- a/src/core/crypto/aes_util.cpp +++ b/src/core/crypto/aes_util.cpp @@ -38,7 +38,6 @@ struct CipherContext { static inline const std::string GetCipherName(Mode mode, u32 key_size) { std::string cipher; std::size_t effective_bits = key_size * 8; - switch (mode) { case Mode::CTR: cipher = "CTR"; @@ -53,7 +52,6 @@ static inline const std::string GetCipherName(Mode mode, u32 key_size) { default: UNREACHABLE(); } - return fmt::format("AES-{}-{}", effective_bits, cipher); }; @@ -87,8 +85,7 @@ static EVP_CIPHER *GetCipher(Mode mode, u32 key_size) { // TODO: WHY TEMPLATE??????? template -Crypto::AESCipher::AESCipher(Key key, Mode mode) - : ctx(std::make_unique()) { +Crypto::AESCipher::AESCipher(Key key, Mode mode) : ctx(std::make_unique()) { ctx->encryption_context = EVP_CIPHER_CTX_new(); ctx->decryption_context = EVP_CIPHER_CTX_new(); @@ -99,9 +96,7 @@ Crypto::AESCipher::AESCipher(Key key, Mode mode) UNIMPLEMENTED(); } - ASSERT_MSG(ctx->encryption_context && ctx->decryption_context && ctx->cipher, - "OpenSSL cipher context failed init!"); - + ASSERT(ctx->encryption_context && ctx->decryption_context && ctx->cipher && "OpenSSL cipher context failed init!"); // now init ciphers ASSERT(EVP_CipherInit_ex2(ctx->encryption_context, ctx->cipher, key.data(), NULL, 1, NULL)); ASSERT(EVP_CipherInit_ex2(ctx->decryption_context, ctx->cipher, key.data(), NULL, 0, NULL)); @@ -165,8 +160,7 @@ void AESCipher::Transcode(const u8* src, std::size_t size, u8* des template void AESCipher::XTSTranscode(const u8* src, std::size_t size, u8* dest, std::size_t sector_id, std::size_t sector_size, Op op) { - ASSERT_MSG(size % sector_size == 0, "XTS decryption size must be a multiple of sector size."); - + ASSERT(size % sector_size == 0 && "XTS decryption size must be a multiple of sector size."); for (std::size_t i = 0; i < size; i += sector_size) { SetIV(CalculateNintendoTweak(sector_id++)); Transcode(src + i, sector_size, dest + i, op); @@ -177,8 +171,7 @@ template void AESCipher::SetIV(std::span data) { const int ret_enc = EVP_CipherInit_ex(ctx->encryption_context, nullptr, nullptr, nullptr, data.data(), -1); const int ret_dec = EVP_CipherInit_ex(ctx->decryption_context, nullptr, nullptr, nullptr, data.data(), -1); - - ASSERT_MSG(ret_enc == 1 && ret_dec == 1, "Failed to set IV on OpenSSL contexts"); + ASSERT(ret_enc == 1 && ret_dec == 1 && "Failed to set IV on OpenSSL contexts"); } template class AESCipher; diff --git a/src/core/crypto/sha_util.cpp b/src/core/crypto/sha_util.cpp deleted file mode 100644 index 7a2c048389..0000000000 --- a/src/core/crypto/sha_util.cpp +++ /dev/null @@ -1,4 +0,0 @@ -// SPDX-FileCopyrightText: Copyright 2018 yuzu Emulator Project -// SPDX-License-Identifier: GPL-2.0-or-later - -namespace Crypto {} // namespace Crypto diff --git a/src/core/crypto/sha_util.h b/src/core/crypto/sha_util.h deleted file mode 100644 index 5c2c43dbdb..0000000000 --- a/src/core/crypto/sha_util.h +++ /dev/null @@ -1,19 +0,0 @@ -// SPDX-FileCopyrightText: Copyright 2018 yuzu Emulator Project -// SPDX-License-Identifier: GPL-2.0-or-later - -#pragma once - -#include "common/assert.h" -#include "core/file_sys/vfs.h" -#include "key_manager.h" -#include "mbedtls/cipher.h" - -namespace Crypto { -typedef std::array SHA256Hash; - -inline SHA256Hash operator"" _HASH(const char* data, size_t len) { - if (len != 0x40) - return {}; -} - -} // namespace Crypto From 2991bd18ef18d46069344e816591e34f05dff397 Mon Sep 17 00:00:00 2001 From: lizzie Date: Sun, 1 Mar 2026 01:53:15 +0100 Subject: [PATCH 39/84] [vk] Enable VK_IMG_filter_cubic on powervr (#3643) in powervr, the enum for cubic filtering is an alias for an ext, however in true powervr fashion they want you to use their stupid VK_IMG and knowing powevr it probably bugs out if you dont Signed-off-by: lizzie Reviewed-on: https://git.eden-emu.dev/eden-emu/eden/pulls/3643 Reviewed-by: DraVee Reviewed-by: MaranBr Co-authored-by: lizzie Co-committed-by: lizzie --- src/video_core/renderer_vulkan/present/util.cpp | 7 ++++--- src/video_core/vulkan_common/vulkan_device.h | 1 + 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/src/video_core/renderer_vulkan/present/util.cpp b/src/video_core/renderer_vulkan/present/util.cpp index 29a1c34976..a2c4727703 100644 --- a/src/video_core/renderer_vulkan/present/util.cpp +++ b/src/video_core/renderer_vulkan/present/util.cpp @@ -1,4 +1,4 @@ -// SPDX-FileCopyrightText: Copyright 2025 Eden Emulator Project +// SPDX-FileCopyrightText: Copyright 2026 Eden Emulator Project // SPDX-License-Identifier: GPL-3.0-or-later // SPDX-FileCopyrightText: Copyright 2024 yuzu Emulator Project @@ -6,6 +6,7 @@ #include "common/assert.h" #include +#include #include "video_core/renderer_vulkan/present/util.h" namespace Vulkan { @@ -629,8 +630,8 @@ vk::Sampler CreateCubicSampler(const Device& device, VkCubicFilterWeightsQCOM qc .sType = VK_STRUCTURE_TYPE_SAMPLER_CREATE_INFO, .pNext = nullptr, .flags = 0, - .magFilter = VK_FILTER_CUBIC_EXT, - .minFilter = VK_FILTER_CUBIC_EXT, + .magFilter = device.IsExtFilterCubicSupported() ? VK_FILTER_CUBIC_EXT : VK_FILTER_LINEAR, + .minFilter = device.IsExtFilterCubicSupported() ? VK_FILTER_CUBIC_EXT : VK_FILTER_LINEAR, .mipmapMode = VK_SAMPLER_MIPMAP_MODE_NEAREST, .addressModeU = VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_BORDER, .addressModeV = VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_BORDER, diff --git a/src/video_core/vulkan_common/vulkan_device.h b/src/video_core/vulkan_common/vulkan_device.h index 7d738a81df..d3623d1186 100644 --- a/src/video_core/vulkan_common/vulkan_device.h +++ b/src/video_core/vulkan_common/vulkan_device.h @@ -107,6 +107,7 @@ VK_DEFINE_HANDLE(VmaAllocator) EXTENSION(NV, VIEWPORT_SWIZZLE, viewport_swizzle) \ EXTENSION(EXT, DESCRIPTOR_INDEXING, descriptor_indexing) \ EXTENSION(EXT, FILTER_CUBIC, filter_cubic) \ + EXTENSION(IMG, FILTER_CUBIC, filter_cubic_img) \ EXTENSION(QCOM, FILTER_CUBIC_WEIGHTS, filter_cubic_weights) // Define extensions which must be supported. From a8fc994c0b60be5a823da6466fefb8fb2d689e33 Mon Sep 17 00:00:00 2001 From: xbzk Date: Sun, 1 Mar 2026 23:21:26 +0100 Subject: [PATCH 40/84] pr3655 gradientbordercardview fix (#3658) This complements PR3655, where a change in theme setting caused gradientbordercardview theme color setting mismatch. Reviewed-on: https://git.eden-emu.dev/eden-emu/eden/pulls/3658 Reviewed-by: CamilleLaVey Co-authored-by: xbzk Co-committed-by: xbzk --- .../yuzu/yuzu_emu/views/GradientBorderCardView.kt | 12 +++--------- 1 file changed, 3 insertions(+), 9 deletions(-) diff --git a/src/android/app/src/main/java/org/yuzu/yuzu_emu/views/GradientBorderCardView.kt b/src/android/app/src/main/java/org/yuzu/yuzu_emu/views/GradientBorderCardView.kt index 8121cfb6fa..d6c0709d57 100644 --- a/src/android/app/src/main/java/org/yuzu/yuzu_emu/views/GradientBorderCardView.kt +++ b/src/android/app/src/main/java/org/yuzu/yuzu_emu/views/GradientBorderCardView.kt @@ -1,4 +1,4 @@ -// SPDX-FileCopyrightText: Copyright 2025 Eden Emulator Project +// SPDX-FileCopyrightText: Copyright 2026 Eden Emulator Project // SPDX-License-Identifier: GPL-3.0-or-later // SPDX-FileCopyrightText: 2023 yuzu Emulator Project @@ -11,8 +11,7 @@ import android.graphics.* import android.util.AttributeSet import com.google.android.material.card.MaterialCardView import org.yuzu.yuzu_emu.R -import org.yuzu.yuzu_emu.features.settings.model.Settings -import androidx.preference.PreferenceManager +import org.yuzu.yuzu_emu.features.settings.model.IntSetting class GradientBorderCardView @JvmOverloads constructor( context: Context, @@ -44,12 +43,7 @@ class GradientBorderCardView @JvmOverloads constructor( } private fun updateThemeState() { - val prefs = PreferenceManager.getDefaultSharedPreferences(context) - val themeIndex = try { - prefs.getInt(Settings.PREF_STATIC_THEME_COLOR, 0) - } catch (e: Exception) { - 0 // Default to Eden theme if error - } + val themeIndex = IntSetting.STATIC_THEME_COLOR.getInt(false) isEdenTheme = themeIndex == 0 invalidate() } From b5f9f8b7438a6a79644d712e267399d618f5d0e1 Mon Sep 17 00:00:00 2001 From: MaranBr Date: Mon, 2 Mar 2026 02:51:50 +0100 Subject: [PATCH 41/84] [vulkan] Fix Vulkan rendering, image layout, and synchronization issues (#3511) This fixes a visual corruption issue that occurred intermittently after loading screens, where some games would start the scene with vertex explosions, artifacts or with all colors blown out, resembling neon. Among the known games affected by this bug are Mario Kart 8 Deluxe, The Legend of Zelda: Breath of the Wild, The Legend of Zelda: Tears of the Kingdom, Kirby and the Forgotten Land, Luigi's Mansion 3, Xenoblade Chronicles 3 and possibly others as well. Reviewed-on: https://git.eden-emu.dev/eden-emu/eden/pulls/3511 Reviewed-by: DraVee Reviewed-by: Lizzie Co-authored-by: MaranBr Co-committed-by: MaranBr --- .../renderer_vulkan/vk_blit_screen.cpp | 45 +++++++++---------- .../renderer_vulkan/vk_master_semaphore.cpp | 10 ++--- .../renderer_vulkan/vk_scheduler.cpp | 16 +++---- .../renderer_vulkan/vk_texture_cache.cpp | 2 +- .../vulkan_common/vulkan_device.cpp | 8 ---- 5 files changed, 31 insertions(+), 50 deletions(-) diff --git a/src/video_core/renderer_vulkan/vk_blit_screen.cpp b/src/video_core/renderer_vulkan/vk_blit_screen.cpp index 0f54dd5ade..bb7eb9bdaa 100644 --- a/src/video_core/renderer_vulkan/vk_blit_screen.cpp +++ b/src/video_core/renderer_vulkan/vk_blit_screen.cpp @@ -1,4 +1,4 @@ -// SPDX-FileCopyrightText: Copyright 2025 Eden Emulator Project +// SPDX-FileCopyrightText: Copyright 2026 Eden Emulator Project // SPDX-License-Identifier: GPL-3.0-or-later // SPDX-FileCopyrightText: Copyright 2024 Torzu Emulator Project @@ -22,7 +22,8 @@ BlitScreen::BlitScreen(Tegra::MaxwellDeviceMemoryManager& device_memory_, const MemoryAllocator& memory_allocator_, PresentManager& present_manager_, Scheduler& scheduler_, const PresentFilters& filters_) : device_memory{device_memory_}, device{device_}, memory_allocator{memory_allocator_}, - present_manager{present_manager_}, scheduler{scheduler_}, filters{filters_}, image_count{1}, + present_manager{present_manager_}, scheduler{scheduler_}, filters{filters_}, + image_count{1}, image_index{0}, swapchain_view_format{VK_FORMAT_B8G8R8A8_UNORM} {} BlitScreen::~BlitScreen() = default; @@ -87,57 +88,49 @@ void BlitScreen::DrawToFrame(RasterizerVulkan& rasterizer, Frame* frame, bool resource_update_required = false; bool presentation_recreate_required = false; - // Recreate dynamic resources if the adapting filter changed if (!window_adapt || scaling_filter != filters.get_scaling_filter()) { resource_update_required = true; } - // Recreate dynamic resources if the image count changed - const size_t old_swapchain_image_count = - std::exchange(image_count, current_swapchain_image_count); - if (old_swapchain_image_count != current_swapchain_image_count) { + if (image_count != current_swapchain_image_count) { resource_update_required = true; + image_count = current_swapchain_image_count; } - // Recreate the presentation frame if the format or dimensions of the window changed - const VkFormat old_swapchain_view_format = - std::exchange(swapchain_view_format, current_swapchain_view_format); - if (old_swapchain_view_format != current_swapchain_view_format || + if (swapchain_view_format != current_swapchain_view_format || layout.width != frame->width || layout.height != frame->height) { resource_update_required = true; presentation_recreate_required = true; + swapchain_view_format = current_swapchain_view_format; } - // If we have a pending resource update, perform it if (resource_update_required) { - // Wait for idle to ensure no resources are in use WaitIdle(); - - // Update window adapt pass SetWindowAdaptPass(); - // Update frame format if needed if (presentation_recreate_required) { present_manager.RecreateFrame(frame, layout.width, layout.height, swapchain_view_format, window_adapt->GetRenderPass()); } + + image_index = 0; } - // Add additional layers if needed const VkExtent2D window_size{ .width = layout.screen.GetWidth(), .height = layout.screen.GetHeight(), }; - while (layers.size() < framebuffers.size()) { - layers.emplace_back(device, memory_allocator, scheduler, device_memory, image_count, - window_size, window_adapt->GetDescriptorSetLayout(), filters); + if (layers.size() != framebuffers.size()) { + layers.clear(); + for (size_t i = 0; i < framebuffers.size(); ++i) { + layers.emplace_back(device, memory_allocator, scheduler, device_memory, image_count, + window_size, window_adapt->GetDescriptorSetLayout(), filters); + } } - // Perform the draw window_adapt->Draw(rasterizer, scheduler, image_index, layers, framebuffers, layout, frame); - // Advance to next image if (++image_index >= image_count) { image_index = 0; } @@ -146,16 +139,20 @@ void BlitScreen::DrawToFrame(RasterizerVulkan& rasterizer, Frame* frame, vk::Framebuffer BlitScreen::CreateFramebuffer(const Layout::FramebufferLayout& layout, VkImageView image_view, VkFormat current_view_format) { - const bool format_updated = - std::exchange(swapchain_view_format, current_view_format) != current_view_format; + bool format_updated = swapchain_view_format != current_view_format; + swapchain_view_format = current_view_format; + if (!window_adapt || scaling_filter != filters.get_scaling_filter() || format_updated) { WaitIdle(); SetWindowAdaptPass(); + image_index = 0; } + const VkExtent2D extent{ .width = layout.width, .height = layout.height, }; + return CreateFramebuffer(image_view, extent, window_adapt->GetRenderPass()); } diff --git a/src/video_core/renderer_vulkan/vk_master_semaphore.cpp b/src/video_core/renderer_vulkan/vk_master_semaphore.cpp index 13ecfd20a6..b535097b36 100644 --- a/src/video_core/renderer_vulkan/vk_master_semaphore.cpp +++ b/src/video_core/renderer_vulkan/vk_master_semaphore.cpp @@ -121,10 +121,8 @@ VkResult MasterSemaphore::SubmitQueue(vk::CommandBuffer& cmdbuf, vk::CommandBuff } } -static constexpr std::array wait_stage_masks{ - VK_PIPELINE_STAGE_ALL_COMMANDS_BIT, - VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT, -}; +static constexpr VkPipelineStageFlags wait_stage_mask = VK_PIPELINE_STAGE_VERTEX_SHADER_BIT | VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT | + VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT; VkResult MasterSemaphore::SubmitQueueTimeline(vk::CommandBuffer& cmdbuf, vk::CommandBuffer& upload_cmdbuf, @@ -143,7 +141,7 @@ VkResult MasterSemaphore::SubmitQueueTimeline(vk::CommandBuffer& cmdbuf, const VkSemaphore* p_wait_sems = (num_wait_semaphores > 0) ? &wait_semaphore : nullptr; const VkPipelineStageFlags* p_wait_masks = - (num_wait_semaphores > 0) ? wait_stage_masks.data() : nullptr; + (num_wait_semaphores > 0) ? &wait_stage_mask : nullptr; const VkSemaphore* p_signal_sems = (num_signal_semaphores > 0) ? signal_semaphores.data() : nullptr; const u64 wait_zero = 0; // dummy for binary wait @@ -180,7 +178,7 @@ VkResult MasterSemaphore::SubmitQueueFence(vk::CommandBuffer& cmdbuf, const VkSemaphore* p_wait_sems = (num_wait_semaphores > 0) ? &wait_semaphore : nullptr; const VkPipelineStageFlags* p_wait_masks = - (num_wait_semaphores > 0) ? wait_stage_masks.data() : nullptr; + (num_wait_semaphores > 0) ? &wait_stage_mask : nullptr; const VkSemaphore* p_signal_sems = (num_signal_semaphores > 0) ? &signal_semaphore : nullptr; const std::array cmdbuffers{*upload_cmdbuf, *cmdbuf}; diff --git a/src/video_core/renderer_vulkan/vk_scheduler.cpp b/src/video_core/renderer_vulkan/vk_scheduler.cpp index e526d606dc..0a032cdae0 100644 --- a/src/video_core/renderer_vulkan/vk_scheduler.cpp +++ b/src/video_core/renderer_vulkan/vk_scheduler.cpp @@ -270,8 +270,8 @@ u64 Scheduler::SubmitExecution(VkSemaphore signal_semaphore, VkSemaphore wait_se .srcAccessMask = VK_ACCESS_TRANSFER_WRITE_BIT, .dstAccessMask = VK_ACCESS_MEMORY_READ_BIT | VK_ACCESS_MEMORY_WRITE_BIT, }; - upload_cmdbuf.PipelineBarrier(VK_PIPELINE_STAGE_TRANSFER_BIT, - VK_PIPELINE_STAGE_ALL_COMMANDS_BIT, 0, WRITE_BARRIER); + upload_cmdbuf.PipelineBarrier(VK_PIPELINE_STAGE_TRANSFER_BIT, VK_PIPELINE_STAGE_VERTEX_SHADER_BIT | + VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT | VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT, 0, WRITE_BARRIER); upload_cmdbuf.End(); cmdbuf.End(); @@ -372,15 +372,9 @@ void Scheduler::EndRenderPass() }; } cmdbuf.EndRenderPass(); - cmdbuf.PipelineBarrier(VK_PIPELINE_STAGE_EARLY_FRAGMENT_TESTS_BIT | - VK_PIPELINE_STAGE_LATE_FRAGMENT_TESTS_BIT | - VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT, - VK_PIPELINE_STAGE_ALL_COMMANDS_BIT, - 0, - nullptr, - nullptr, - vk::Span(barriers.data(), num_images) // Batched image barriers - ); + cmdbuf.PipelineBarrier(VK_PIPELINE_STAGE_EARLY_FRAGMENT_TESTS_BIT | VK_PIPELINE_STAGE_LATE_FRAGMENT_TESTS_BIT | + VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT, VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT | + VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT, 0, nullptr, nullptr, vk::Span(barriers.data(), num_images)); }); state.renderpass = nullptr; diff --git a/src/video_core/renderer_vulkan/vk_texture_cache.cpp b/src/video_core/renderer_vulkan/vk_texture_cache.cpp index 348e49fb6d..d51564dcb3 100644 --- a/src/video_core/renderer_vulkan/vk_texture_cache.cpp +++ b/src/video_core/renderer_vulkan/vk_texture_cache.cpp @@ -2500,7 +2500,7 @@ void TextureCacheRuntime::TransitionImageLayout(Image& image) { }; scheduler.RequestOutsideRenderPassOperationContext(); scheduler.Record([barrier](vk::CommandBuffer cmdbuf) { - cmdbuf.PipelineBarrier(VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT, + cmdbuf.PipelineBarrier(VK_PIPELINE_STAGE_ALL_COMMANDS_BIT, VK_PIPELINE_STAGE_ALL_COMMANDS_BIT, 0, barrier); }); } diff --git a/src/video_core/vulkan_common/vulkan_device.cpp b/src/video_core/vulkan_common/vulkan_device.cpp index 3d98f2cbf7..15f48ca8f4 100644 --- a/src/video_core/vulkan_common/vulkan_device.cpp +++ b/src/video_core/vulkan_common/vulkan_device.cpp @@ -557,20 +557,12 @@ Device::Device(VkInstance instance_, vk::PhysicalDevice physical_, VkSurfaceKHR } if (is_nvidia) { - const u32 nv_major_version = (properties.properties.driverVersion >> 22) & 0x3ff; const auto arch = GetNvidiaArch(); if (arch >= NvidiaArchitecture::Arch_AmpereOrNewer) { LOG_WARNING(Render_Vulkan, "Ampere and newer have broken float16 math"); features.shader_float16_int8.shaderFloat16 = false; } - if (nv_major_version >= 510) { - LOG_WARNING(Render_Vulkan, - "NVIDIA Drivers >= 510 do not support MSAA->MSAA image blits. " - "MSAA scaling will use 3D helpers. MSAA resolves work normally."); - cant_blit_msaa = true; - } - // Mali/ NVIDIA proprietary drivers: Shader stencil export not supported // Use hardware depth/stencil blits instead when available if (!extensions.shader_stencil_export) { From ea209e6dabdcd99f51dd2ae8b11adeb715b9668f Mon Sep 17 00:00:00 2001 From: MaranBr Date: Mon, 2 Mar 2026 02:53:01 +0100 Subject: [PATCH 42/84] [vulkan] Fine-tuning of frame pacing logic (#3628) It makes fine adjustments to the frame pacing, ensuring better stability and precision. Reviewed-on: https://git.eden-emu.dev/eden-emu/eden/pulls/3628 Reviewed-by: crueter Reviewed-by: Lizzie Co-authored-by: MaranBr Co-committed-by: MaranBr --- src/video_core/renderer_vulkan/vk_scheduler.h | 47 +++++++++++-------- 1 file changed, 28 insertions(+), 19 deletions(-) diff --git a/src/video_core/renderer_vulkan/vk_scheduler.h b/src/video_core/renderer_vulkan/vk_scheduler.h index 2913211480..667f136ee6 100644 --- a/src/video_core/renderer_vulkan/vk_scheduler.h +++ b/src/video_core/renderer_vulkan/vk_scheduler.h @@ -16,8 +16,8 @@ #include "common/alignment.h" #include "common/common_types.h" -#include "common/settings.h" #include "common/polyfill_thread.h" +#include "common/settings.h" #include "video_core/renderer_vulkan/vk_master_semaphore.h" #include "video_core/vulkan_common/vulkan_wrapper.h" @@ -114,29 +114,36 @@ public: /// Waits for the given GPU tick, optionally pacing frames. void Wait(u64 tick, double target_fps = 0.0) { - if (Settings::values.use_speed_limit.GetValue() && target_fps > 0.0) { - const auto now = std::chrono::steady_clock::now(); - if (start_time == std::chrono::steady_clock::time_point{} || current_target_fps != target_fps) { - start_time = now; - frame_counter = 0; - current_target_fps = target_fps; - } - frame_counter++; - std::chrono::duration frame_interval(1.0 / current_target_fps); - auto target_time = start_time + frame_interval * frame_counter; - if (target_time > now) { - std::this_thread::sleep_until(target_time); - } else { - start_time = now; - frame_counter = 0; - } - } if (tick > 0) { if (tick >= master_semaphore->CurrentTick()) { Flush(); } master_semaphore->Wait(tick); } + if (Settings::values.use_speed_limit.GetValue() && target_fps > 0.0) { + auto now = std::chrono::steady_clock::now(); + if (last_target_fps != target_fps) { + frame_interval = std::chrono::duration_cast(std::chrono::duration(1.0 / target_fps)); + max_frame_count = static_cast(0.1 * target_fps); + last_target_fps = target_fps; + frame_counter = 0; + start_time = now; + } + frame_counter++; + auto target_time = start_time + frame_interval * frame_counter; + if (target_time >= now) { + auto sleep_time = target_time - now; + if (sleep_time > std::chrono::milliseconds(15)) { + std::this_thread::sleep_for(sleep_time - std::chrono::milliseconds(1)); + } + while (std::chrono::steady_clock::now() < target_time) { + std::this_thread::yield(); + } + } else if (frame_counter > max_frame_count) { + frame_counter = 0; + start_time = now; + } + } } /// Returns the master timeline semaphore. @@ -281,9 +288,11 @@ private: std::condition_variable_any event_cv; std::jthread worker_thread; + std::chrono::steady_clock::duration frame_interval{}; std::chrono::steady_clock::time_point start_time{}; + double last_target_fps{}; + u64 max_frame_count{}; u64 frame_counter{}; - double current_target_fps{}; }; } // namespace Vulkan From 464212393e296c59488171692df1d096ecfa5607 Mon Sep 17 00:00:00 2001 From: crueter Date: Mon, 2 Mar 2026 05:28:26 +0100 Subject: [PATCH 43/84] [gitignore] add *.tar.zst (#3663) the amount of times I've accidentally committed a tar.zst to this repository... Signed-off-by: crueter Reviewed-on: https://git.eden-emu.dev/eden-emu/eden/pulls/3663 --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index 0be76d85cd..67bdd8adf4 100644 --- a/.gitignore +++ b/.gitignore @@ -63,3 +63,4 @@ artifacts *.AppImage* /install* vulkansdk*.exe +*.tar.zst From d720a7b4b4e3c2bc4f7e2c1b16e282ec91766aa8 Mon Sep 17 00:00:00 2001 From: tarako Date: Tue, 3 Mar 2026 01:54:57 +0100 Subject: [PATCH 44/84] [vulkan] Fixed dual-source blending to correctly map shader outputs. (#3637) Fixes Skyward Sword HD eye gitch and a related MoltenVK crash due to the incorrect output mapping. Verified working on mac and android. The test in vk_pipeline_cache.cpp is a bit ugly, but it didn't seem worth it to go lambda/macro just to make it look cleaner. Could change if necessary. Co-authored-by: tarako Reviewed-on: https://git.eden-emu.dev/eden-emu/eden/pulls/3637 Reviewed-by: CamilleLaVey Co-authored-by: tarako Co-committed-by: tarako --- .../backend/spirv/emit_spirv_special.cpp | 14 +++++++++ .../backend/spirv/spirv_emit_context.cpp | 15 ++++++++-- src/shader_recompiler/runtime_info.h | 3 ++ .../renderer_vulkan/vk_pipeline_cache.cpp | 30 ++++++++++++++++++- 4 files changed, 58 insertions(+), 4 deletions(-) diff --git a/src/shader_recompiler/backend/spirv/emit_spirv_special.cpp b/src/shader_recompiler/backend/spirv/emit_spirv_special.cpp index fe5e70a63b..8eca1fac29 100644 --- a/src/shader_recompiler/backend/spirv/emit_spirv_special.cpp +++ b/src/shader_recompiler/backend/spirv/emit_spirv_special.cpp @@ -1,3 +1,6 @@ +// SPDX-FileCopyrightText: Copyright 2026 Eden Emulator Project +// SPDX-License-Identifier: GPL-3.0-or-later + // SPDX-FileCopyrightText: Copyright 2021 yuzu Emulator Project // SPDX-License-Identifier: GPL-2.0-or-later @@ -91,6 +94,17 @@ void AlphaTest(EmitContext& ctx) { } // Anonymous namespace void EmitPrologue(EmitContext& ctx) { + if (ctx.stage == Stage::Fragment && ctx.runtime_info.dual_source_blend) { + // Initialize dual-source blending outputs - prevents MoltenVK crash. + const Id zero{ctx.Const(0.0f)}; + const Id one{ctx.Const(1.0f)}; + const Id default_color{ctx.ConstantComposite(ctx.F32[4], zero, zero, zero, one)}; + for (u32 i = 0; i < 2; ++i) { + if (Sirit::ValidId(ctx.frag_color[i])) { + ctx.OpStore(ctx.frag_color[i], default_color); + } + } + } if (ctx.stage == Stage::VertexB) { const Id zero{ctx.Const(0.0f)}; const Id one{ctx.Const(1.0f)}; diff --git a/src/shader_recompiler/backend/spirv/spirv_emit_context.cpp b/src/shader_recompiler/backend/spirv/spirv_emit_context.cpp index cd3394bdf0..b9a24496c9 100644 --- a/src/shader_recompiler/backend/spirv/spirv_emit_context.cpp +++ b/src/shader_recompiler/backend/spirv/spirv_emit_context.cpp @@ -1670,13 +1670,22 @@ void EmitContext::DefineOutputs(const IR::Program& program) { break; case Stage::Fragment: for (u32 index = 0; index < 8; ++index) { - if (!info.stores_frag_color[index] && !profile.need_declared_frag_colors) { + const bool need_dual_source = runtime_info.dual_source_blend && index <= 1; + if (!need_dual_source && !info.stores_frag_color[index] && + !profile.need_declared_frag_colors) { continue; } const Id type{GetAttributeType(*this, runtime_info.color_output_types[index])}; frag_color[index] = DefineOutput(*this, type, std::nullopt); - Decorate(frag_color[index], spv::Decoration::Location, index); - Name(frag_color[index], fmt::format("frag_color{}", index)); + // Correct mapping for dual-source blending + if (runtime_info.dual_source_blend && index <= 1) { + Decorate(frag_color[index], spv::Decoration::Location, 0u); + Decorate(frag_color[index], spv::Decoration::Index, index); + Name(frag_color[index], index == 0 ? "frag_color0" : "frag_color0_secondary"); + } else { + Decorate(frag_color[index], spv::Decoration::Location, index); + Name(frag_color[index], fmt::format("frag_color{}", index)); + } } if (info.stores_frag_depth) { frag_depth = DefineOutput(*this, F32[1], std::nullopt); diff --git a/src/shader_recompiler/runtime_info.h b/src/shader_recompiler/runtime_info.h index 613c598d0c..be10a9bb08 100644 --- a/src/shader_recompiler/runtime_info.h +++ b/src/shader_recompiler/runtime_info.h @@ -110,6 +110,9 @@ struct RuntimeInfo { /// Output types for each color attachment std::array color_output_types{}; + + /// Dual source blending + bool dual_source_blend{}; }; } // namespace Shader diff --git a/src/video_core/renderer_vulkan/vk_pipeline_cache.cpp b/src/video_core/renderer_vulkan/vk_pipeline_cache.cpp index f3dd0f90d8..77a4e8616a 100644 --- a/src/video_core/renderer_vulkan/vk_pipeline_cache.cpp +++ b/src/video_core/renderer_vulkan/vk_pipeline_cache.cpp @@ -237,11 +237,38 @@ Shader::RuntimeInfo MakeRuntimeInfo(std::span program } info.convert_depth_mode = gl_ndc; break; - case Shader::Stage::Fragment: + case Shader::Stage::Fragment: { info.alpha_test_func = MaxwellToCompareFunction( key.state.UnpackComparisonOp(key.state.alpha_test_func.Value())); info.alpha_test_reference = std::bit_cast(key.state.alpha_test_ref); + // Check for dual source blending + const auto& blend0 = key.state.attachments[0]; + if (blend0.enable != 0) { + using F = Maxwell::Blend::Factor; + const auto src_rgb = blend0.SourceRGBFactor(); + const auto dst_rgb = blend0.DestRGBFactor(); + const auto src_a = blend0.SourceAlphaFactor(); + const auto dst_a = blend0.DestAlphaFactor(); + info.dual_source_blend = + src_rgb == F::Source1Color_D3D || src_rgb == F::OneMinusSource1Color_D3D || + src_rgb == F::Source1Alpha_D3D || src_rgb == F::OneMinusSource1Alpha_D3D || + src_rgb == F::Source1Color_GL || src_rgb == F::OneMinusSource1Color_GL || + src_rgb == F::Source1Alpha_GL || src_rgb == F::OneMinusSource1Alpha_GL || + dst_rgb == F::Source1Color_D3D || dst_rgb == F::OneMinusSource1Color_D3D || + dst_rgb == F::Source1Alpha_D3D || dst_rgb == F::OneMinusSource1Alpha_D3D || + dst_rgb == F::Source1Color_GL || dst_rgb == F::OneMinusSource1Color_GL || + dst_rgb == F::Source1Alpha_GL || dst_rgb == F::OneMinusSource1Alpha_GL || + src_a == F::Source1Color_D3D || src_a == F::OneMinusSource1Color_D3D || + src_a == F::Source1Alpha_D3D || src_a == F::OneMinusSource1Alpha_D3D || + src_a == F::Source1Color_GL || src_a == F::OneMinusSource1Color_GL || + src_a == F::Source1Alpha_GL || src_a == F::OneMinusSource1Alpha_GL || + dst_a == F::Source1Color_D3D || dst_a == F::OneMinusSource1Color_D3D || + dst_a == F::Source1Alpha_D3D || dst_a == F::OneMinusSource1Alpha_D3D || + dst_a == F::Source1Color_GL || dst_a == F::OneMinusSource1Color_GL || + dst_a == F::Source1Alpha_GL || dst_a == F::OneMinusSource1Alpha_GL; + } + if (device.IsMoltenVK()) { for (size_t i = 0; i < 8; ++i) { const auto format = static_cast(key.state.color_formats[i]); @@ -258,6 +285,7 @@ Shader::RuntimeInfo MakeRuntimeInfo(std::span program } } break; + } default: break; } From 9d2341eaeafb275d3d3e4692812fe121ae24e2e3 Mon Sep 17 00:00:00 2001 From: PavelBARABANOV Date: Tue, 3 Mar 2026 14:27:47 +0100 Subject: [PATCH 45/84] [vk] Disable float16 math on non-MESA AMD drivers as 2026+ versions are broken (#3661) thanks MaranBR Reviewed-on: https://git.eden-emu.dev/eden-emu/eden/pulls/3661 Reviewed-by: MaranBr Reviewed-by: Maufeat Co-authored-by: PavelBARABANOV Co-committed-by: PavelBARABANOV --- src/video_core/vulkan_common/vulkan_device.cpp | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/video_core/vulkan_common/vulkan_device.cpp b/src/video_core/vulkan_common/vulkan_device.cpp index 15f48ca8f4..a2ff3ee6ed 100644 --- a/src/video_core/vulkan_common/vulkan_device.cpp +++ b/src/video_core/vulkan_common/vulkan_device.cpp @@ -586,12 +586,20 @@ Device::Device(VkInstance instance_, vk::PhysicalDevice physical_, VkSurfaceKHR if (is_amd_driver) { // AMD drivers need a higher amount of Sets per Pool in certain circumstances like in XC2. sets_per_pool = 96; + // Disable VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT on AMD GCN4 and lower as it is broken. if (!features.shader_float16_int8.shaderFloat16) { LOG_WARNING(Render_Vulkan, "AMD GCN4 and earlier have broken VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT"); has_broken_cube_compatibility = true; } + + // AMD drivers (2026+) have broken float16 math on DKCR + if (features.shader_float16_int8.shaderFloat16) { + LOG_WARNING(Render_Vulkan, + "AMD drivers (2026+) have broken float16 math"); + features.shader_float16_int8.shaderFloat16 = false; + } } if (is_qualcomm) { From c682306788055c57953aea38fdded95a0c6dfc09 Mon Sep 17 00:00:00 2001 From: wildcard Date: Wed, 4 Mar 2026 22:46:55 +0100 Subject: [PATCH 46/84] [vulkan] Implement push descriptors for compute pipelines (#3666) Implements push descriptor for compute pipelines along with a bug fix, the increment logic was, offset += sizeof(DescriptorUpdateEntry); This only advances the byte offset by a single descriptor slot, regardless of the array's size (descriptorCount).Now suppose if a shader utilized an array of descriptors (eg, layout(binding = 0) uniform sampler2D textures[4]) and if this happened to fit within the MaxPushDescriptors limit, the template would consume 4 * sizeof(DescriptorUpdateEntry) bytes, but the offset for the next binding would only advance by 1 slot. Reviewed-on: https://git.eden-emu.dev/eden-emu/eden/pulls/3666 Reviewed-by: MaranBr Co-authored-by: wildcard Co-committed-by: wildcard --- .../renderer_vulkan/pipeline_helper.h | 8 +++++-- .../renderer_vulkan/vk_compute_pipeline.cpp | 24 ++++++++++++------- .../renderer_vulkan/vk_compute_pipeline.h | 4 ++++ 3 files changed, 26 insertions(+), 10 deletions(-) diff --git a/src/video_core/renderer_vulkan/pipeline_helper.h b/src/video_core/renderer_vulkan/pipeline_helper.h index 910e07a606..e88b27b273 100644 --- a/src/video_core/renderer_vulkan/pipeline_helper.h +++ b/src/video_core/renderer_vulkan/pipeline_helper.h @@ -1,3 +1,6 @@ +// SPDX-FileCopyrightText: Copyright 2026 Eden Emulator Project +// SPDX-License-Identifier: GPL-3.0-or-later + // SPDX-FileCopyrightText: Copyright 2021 yuzu Emulator Project // SPDX-License-Identifier: GPL-2.0-or-later @@ -61,7 +64,8 @@ public: .pDescriptorUpdateEntries = entries.data(), .templateType = type, .descriptorSetLayout = descriptor_set_layout, - .pipelineBindPoint = VK_PIPELINE_BIND_POINT_GRAPHICS, + .pipelineBindPoint = + is_compute ? VK_PIPELINE_BIND_POINT_COMPUTE : VK_PIPELINE_BIND_POINT_GRAPHICS, .pipelineLayout = pipeline_layout, .set = 0, }); @@ -122,7 +126,7 @@ private: }); ++binding; num_descriptors += descriptors[i].count; - offset += sizeof(DescriptorUpdateEntry); + offset += sizeof(DescriptorUpdateEntry) * descriptors[i].count; } } diff --git a/src/video_core/renderer_vulkan/vk_compute_pipeline.cpp b/src/video_core/renderer_vulkan/vk_compute_pipeline.cpp index 51b5141a06..6a6fe2b830 100644 --- a/src/video_core/renderer_vulkan/vk_compute_pipeline.cpp +++ b/src/video_core/renderer_vulkan/vk_compute_pipeline.cpp @@ -50,11 +50,14 @@ ComputePipeline::ComputePipeline(const Device& device_, vk::PipelineCache& pipel DescriptorLayoutBuilder builder{device}; builder.Add(info, VK_SHADER_STAGE_COMPUTE_BIT); - descriptor_set_layout = builder.CreateDescriptorSetLayout(false); + uses_push_descriptor = builder.CanUsePushDescriptor(); + descriptor_set_layout = builder.CreateDescriptorSetLayout(uses_push_descriptor); pipeline_layout = builder.CreatePipelineLayout(*descriptor_set_layout); descriptor_update_template = - builder.CreateTemplate(*descriptor_set_layout, *pipeline_layout, false); - descriptor_allocator = descriptor_pool.Allocator(*descriptor_set_layout, info); + builder.CreateTemplate(*descriptor_set_layout, *pipeline_layout, uses_push_descriptor); + if (!uses_push_descriptor) { + descriptor_allocator = descriptor_pool.Allocator(*descriptor_set_layout, info); + } const VkPipelineShaderStageRequiredSubgroupSizeCreateInfoEXT subgroup_size_ci{ .sType = VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_REQUIRED_SUBGROUP_SIZE_CREATE_INFO_EXT, .pNext = nullptr, @@ -241,11 +244,16 @@ void ComputePipeline::Configure(Tegra::Engines::KeplerCompute& kepler_compute, RESCALING_LAYOUT_WORDS_OFFSET, sizeof(rescaling_data), rescaling_data.data()); } - const VkDescriptorSet descriptor_set{descriptor_allocator.Commit()}; - const vk::Device& dev{device.GetLogical()}; - dev.UpdateDescriptorSet(descriptor_set, *descriptor_update_template, descriptor_data); - cmdbuf.BindDescriptorSets(VK_PIPELINE_BIND_POINT_COMPUTE, *pipeline_layout, 0, - descriptor_set, nullptr); + if (uses_push_descriptor) { + cmdbuf.PushDescriptorSetWithTemplateKHR(*descriptor_update_template, *pipeline_layout, + 0, descriptor_data); + } else { + const VkDescriptorSet descriptor_set{descriptor_allocator.Commit()}; + const vk::Device& dev{device.GetLogical()}; + dev.UpdateDescriptorSet(descriptor_set, *descriptor_update_template, descriptor_data); + cmdbuf.BindDescriptorSets(VK_PIPELINE_BIND_POINT_COMPUTE, *pipeline_layout, 0, + descriptor_set, nullptr); + } }); } diff --git a/src/video_core/renderer_vulkan/vk_compute_pipeline.h b/src/video_core/renderer_vulkan/vk_compute_pipeline.h index d1a1e2c46d..aa84c00e12 100644 --- a/src/video_core/renderer_vulkan/vk_compute_pipeline.h +++ b/src/video_core/renderer_vulkan/vk_compute_pipeline.h @@ -1,3 +1,6 @@ +// SPDX-FileCopyrightText: Copyright 2026 Eden Emulator Project +// SPDX-License-Identifier: GPL-3.0-or-later + // SPDX-FileCopyrightText: Copyright 2019 yuzu Emulator Project // SPDX-License-Identifier: GPL-2.0-or-later @@ -55,6 +58,7 @@ private: vk::ShaderModule spv_module; vk::DescriptorSetLayout descriptor_set_layout; + bool uses_push_descriptor{false}; DescriptorAllocator descriptor_allocator; vk::PipelineLayout pipeline_layout; vk::DescriptorUpdateTemplate descriptor_update_template; From 7f5de6bcd651f8145e4746c76d0531b6560fd5e4 Mon Sep 17 00:00:00 2001 From: xbzk Date: Wed, 4 Mar 2026 22:51:35 +0100 Subject: [PATCH 47/84] [android/fs] external content loader + nca/xci patches (#3596) Foreword: WHY DON'T EVERYBODY USE ONE FOLDER FOR EACH GAME+CONTENTS? AIN'T THIS THE FORMAT GAMES COME WHEN YOU BUE THEM? DO YOU LIVE WITH ALL YOUR FRIENDS AND HAVE A 2ND HOUSE FOR ALL THE CHILDREN? Nice, i feel better now. This feat extends Maufeat's work on external content loading. It harmonically additions: "...also, if in each game folder X, you find a folder Y, and in this folder Y you detect ONLY a single game, then mount all external content for that game found in that folder Y and its subfolders." Permanent (not toggleable). External Content folders are supported equally. Also: -Reworked several routines for preserving single source of truth between android and other systems; -Fixed the annoying unknown format error for content files, by providing proper format detection. Reviewed-on: https://git.eden-emu.dev/eden-emu/eden/pulls/3596 Reviewed-by: MaranBr Reviewed-by: Lizzie Co-authored-by: xbzk Co-committed-by: xbzk --- .../java/org/yuzu/yuzu_emu/NativeLibrary.kt | 6 + .../org/yuzu/yuzu_emu/model/AddonViewModel.kt | 6 +- .../org/yuzu/yuzu_emu/ui/main/MainActivity.kt | 4 +- .../org/yuzu/yuzu_emu/utils/GameHelper.kt | 64 ++- .../app/src/main/jni/android_config.cpp | 6 + .../app/src/main/jni/game_metadata.cpp | 5 + src/android/app/src/main/jni/native.cpp | 116 +---- src/android/app/src/main/jni/native.h | 4 + src/common/settings.h | 2 + src/core/file_sys/patch_manager.cpp | 27 +- src/core/file_sys/registered_cache.cpp | 473 +++++++++--------- src/core/file_sys/registered_cache.h | 5 +- src/core/loader/loader.cpp | 70 ++- src/core/loader/loader.h | 22 +- src/core/loader/nsp.cpp | 36 +- src/core/loader/xci.cpp | 14 +- src/yuzu/game/game_list_worker.cpp | 22 +- src/yuzu/main_window.cpp | 19 +- 18 files changed, 477 insertions(+), 424 deletions(-) diff --git a/src/android/app/src/main/java/org/yuzu/yuzu_emu/NativeLibrary.kt b/src/android/app/src/main/java/org/yuzu/yuzu_emu/NativeLibrary.kt index 1f0acf2835..397b44c9f9 100644 --- a/src/android/app/src/main/java/org/yuzu/yuzu_emu/NativeLibrary.kt +++ b/src/android/app/src/main/java/org/yuzu/yuzu_emu/NativeLibrary.kt @@ -607,6 +607,12 @@ object NativeLibrary { */ external fun addFileToFilesystemProvider(path: String) + /** + * Adds a game-folder file to the manual filesystem provider, respecting the internal gate for + * game-folder external-content mounting. + */ + external fun addGameFolderFileToFilesystemProvider(path: String) + /** * Clears all files added to the manual filesystem provider in our EmulationSession instance */ diff --git a/src/android/app/src/main/java/org/yuzu/yuzu_emu/model/AddonViewModel.kt b/src/android/app/src/main/java/org/yuzu/yuzu_emu/model/AddonViewModel.kt index c682a13cfc..2a0e72be26 100644 --- a/src/android/app/src/main/java/org/yuzu/yuzu_emu/model/AddonViewModel.kt +++ b/src/android/app/src/main/java/org/yuzu/yuzu_emu/model/AddonViewModel.kt @@ -127,10 +127,6 @@ class AddonViewModel : ViewModel() { return } - // Check if there are multiple update versions - val updates = _patchList.value.filter { PatchType.from(it.type) == PatchType.Update } - val hasMultipleUpdates = updates.size > 1 - NativeConfig.setDisabledAddons( game!!.programId, _patchList.value.mapNotNull { @@ -140,7 +136,7 @@ class AddonViewModel : ViewModel() { if (PatchType.from(it.type) == PatchType.Update) { if (it.name.contains("(NAND)") || it.name.contains("(SDMC)")) { it.name - } else if (hasMultipleUpdates) { + } else if (it.numericVersion != 0L) { "Update@${it.numericVersion}" } else { it.name diff --git a/src/android/app/src/main/java/org/yuzu/yuzu_emu/ui/main/MainActivity.kt b/src/android/app/src/main/java/org/yuzu/yuzu_emu/ui/main/MainActivity.kt index 8a4262ebe7..db4cc0f60e 100644 --- a/src/android/app/src/main/java/org/yuzu/yuzu_emu/ui/main/MainActivity.kt +++ b/src/android/app/src/main/java/org/yuzu/yuzu_emu/ui/main/MainActivity.kt @@ -424,7 +424,9 @@ class MainActivity : AppCompatActivity(), ThemeProvider { ) val uriString = result.toString() - val folder = gamesViewModel.folders.value.firstOrNull { it.uriString == uriString } + val folder = gamesViewModel.folders.value.firstOrNull { + it.uriString == uriString && it.type == org.yuzu.yuzu_emu.model.DirectoryType.EXTERNAL_CONTENT + } if (folder != null) { Toast.makeText( applicationContext, diff --git a/src/android/app/src/main/java/org/yuzu/yuzu_emu/utils/GameHelper.kt b/src/android/app/src/main/java/org/yuzu/yuzu_emu/utils/GameHelper.kt index fff5fdfb9b..4a3cf61daa 100644 --- a/src/android/app/src/main/java/org/yuzu/yuzu_emu/utils/GameHelper.kt +++ b/src/android/app/src/main/java/org/yuzu/yuzu_emu/utils/GameHelper.kt @@ -51,11 +51,24 @@ object GameHelper { // Scan External Content directories and register all NSP/XCI files val externalContentDirs = NativeConfig.getExternalContentDirs() - for (externalDir in externalContentDirs) { + val uniqueExternalContentDirs = linkedSetOf() + externalContentDirs.forEach { externalDir -> + if (externalDir.isNotEmpty()) { + uniqueExternalContentDirs.add(externalDir) + } + } + + val mountedContainerUris = mutableSetOf() + for (externalDir in uniqueExternalContentDirs) { if (externalDir.isNotEmpty()) { val externalDirUri = externalDir.toUri() if (FileUtil.isTreeUriValid(externalDirUri)) { - scanExternalContentRecursive(FileUtil.listFiles(externalDirUri), 3) + scanContentContainersRecursive(FileUtil.listFiles(externalDirUri), 3) { + val containerUri = it.uri.toString() + if (mountedContainerUris.add(containerUri)) { + NativeLibrary.addFileToFilesystemProvider(containerUri) + } + } } } } @@ -65,10 +78,13 @@ object GameHelper { val gameDirUri = gameDir.uriString.toUri() val isValid = FileUtil.isTreeUriValid(gameDirUri) if (isValid) { + val scanDepth = if (gameDir.deepScan) 3 else 1 + addGamesRecursive( games, FileUtil.listFiles(gameDirUri), - if (gameDir.deepScan) 3 else 1 + scanDepth, + mountedContainerUris ) } else { badDirs.add(index) @@ -103,9 +119,10 @@ object GameHelper { // be done better imo. private val externalContentExtensions = setOf("nsp", "xci") - private fun scanExternalContentRecursive( + private fun scanContentContainersRecursive( files: Array, - depth: Int + depth: Int, + onContainerFound: (MinimalDocumentFile) -> Unit ) { if (depth <= 0) { return @@ -113,14 +130,15 @@ object GameHelper { files.forEach { if (it.isDirectory) { - scanExternalContentRecursive( + scanContentContainersRecursive( FileUtil.listFiles(it.uri), - depth - 1 + depth - 1, + onContainerFound ) } else { val extension = FileUtil.getExtension(it.uri).lowercase() if (externalContentExtensions.contains(extension)) { - NativeLibrary.addFileToFilesystemProvider(it.uri.toString()) + onContainerFound(it) } } } @@ -129,7 +147,8 @@ object GameHelper { private fun addGamesRecursive( games: MutableList, files: Array, - depth: Int + depth: Int, + mountedContainerUris: MutableSet ) { if (depth <= 0) { return @@ -140,11 +159,20 @@ object GameHelper { addGamesRecursive( games, FileUtil.listFiles(it.uri), - depth - 1 + depth - 1, + mountedContainerUris ) } else { - if (Game.extensions.contains(FileUtil.getExtension(it.uri))) { - val game = getGame(it.uri, true) + val extension = FileUtil.getExtension(it.uri).lowercase() + val filePath = it.uri.toString() + + if (externalContentExtensions.contains(extension) && + mountedContainerUris.add(filePath)) { + NativeLibrary.addGameFolderFileToFilesystemProvider(filePath) + } + + if (Game.extensions.contains(extension)) { + val game = getGame(it.uri, true, false) if (game != null) { games.add(game) } @@ -153,14 +181,20 @@ object GameHelper { } } - fun getGame(uri: Uri, addedToLibrary: Boolean): Game? { + fun getGame( + uri: Uri, + addedToLibrary: Boolean, + registerFilesystemProvider: Boolean = true + ): Game? { val filePath = uri.toString() if (!GameMetadata.getIsValid(filePath)) { return null } - // Needed to update installed content information - NativeLibrary.addFileToFilesystemProvider(filePath) + if (registerFilesystemProvider) { + // Needed to update installed content information + NativeLibrary.addFileToFilesystemProvider(filePath) + } var name = GameMetadata.getTitle(filePath) diff --git a/src/android/app/src/main/jni/android_config.cpp b/src/android/app/src/main/jni/android_config.cpp index 0171e2a7b3..0c5696ef3f 100644 --- a/src/android/app/src/main/jni/android_config.cpp +++ b/src/android/app/src/main/jni/android_config.cpp @@ -33,6 +33,12 @@ void AndroidConfig::ReadAndroidValues() { if (global) { ReadAndroidUIValues(); ReadUIValues(); + BeginGroup(Settings::TranslateCategory(Settings::Category::DataStorage)); + Settings::values.ext_content_from_game_dirs = ReadBooleanSetting( + std::string("ext_content_from_game_dirs"), + std::make_optional( + Settings::values.ext_content_from_game_dirs.GetDefault())); + EndGroup(); ReadOverlayValues(); } ReadDriverValues(); diff --git a/src/android/app/src/main/jni/game_metadata.cpp b/src/android/app/src/main/jni/game_metadata.cpp index e9c03b6440..9acba456f1 100644 --- a/src/android/app/src/main/jni/game_metadata.cpp +++ b/src/android/app/src/main/jni/game_metadata.cpp @@ -96,6 +96,11 @@ jboolean Java_org_yuzu_yuzu_1emu_utils_GameMetadata_getIsValid(JNIEnv* env, jobj return false; } + if ((file_type == Loader::FileType::NSP || file_type == Loader::FileType::XCI) && + !Loader::IsBootableGameContainer(file, file_type)) { + return false; + } + u64 program_id = 0; Loader::ResultStatus res = loader->ReadProgramId(program_id); if (res != Loader::ResultStatus::Success) { diff --git a/src/android/app/src/main/jni/native.cpp b/src/android/app/src/main/jni/native.cpp index c429f4a1e4..3f0029c78a 100644 --- a/src/android/app/src/main/jni/native.cpp +++ b/src/android/app/src/main/jni/native.cpp @@ -217,107 +217,8 @@ void EmulationSession::ConfigureFilesystemProvider(const std::string& filepath) return; } - const auto extension = Common::ToLower(filepath.substr(filepath.find_last_of('.') + 1)); - - if (extension == "nsp") { - auto nsp = std::make_shared(file); - if (nsp->GetStatus() == Loader::ResultStatus::Success) { - std::map nsp_versions; - std::map nsp_version_strings; - - for (const auto& [title_id, nca_map] : nsp->GetNCAs()) { - for (const auto& [type_pair, nca] : nca_map) { - const auto& [title_type, content_type] = type_pair; - - if (content_type == FileSys::ContentRecordType::Meta) { - const auto meta_nca = std::make_shared(nca->GetBaseFile()); - if (meta_nca->GetStatus() == Loader::ResultStatus::Success) { - const auto section0 = meta_nca->GetSubdirectories(); - if (!section0.empty()) { - for (const auto& meta_file : section0[0]->GetFiles()) { - if (meta_file->GetExtension() == "cnmt") { - FileSys::CNMT cnmt(meta_file); - nsp_versions[cnmt.GetTitleID()] = cnmt.GetTitleVersion(); - } - } - } - } - } - - if (content_type == FileSys::ContentRecordType::Control && - title_type == FileSys::TitleType::Update) { - auto romfs = nca->GetRomFS(); - if (romfs) { - auto extracted = FileSys::ExtractRomFS(romfs); - if (extracted) { - auto nacp_file = extracted->GetFile("control.nacp"); - if (!nacp_file) { - nacp_file = extracted->GetFile("Control.nacp"); - } - if (nacp_file) { - FileSys::NACP nacp(nacp_file); - auto ver_str = nacp.GetVersionString(); - if (!ver_str.empty()) { - nsp_version_strings[title_id] = ver_str; - } - } - } - } - } - } - } - - for (const auto& [title_id, nca_map] : nsp->GetNCAs()) { - for (const auto& [type_pair, nca] : nca_map) { - const auto& [title_type, content_type] = type_pair; - - if (title_type == FileSys::TitleType::Update) { - u32 version = 0; - auto ver_it = nsp_versions.find(title_id); - if (ver_it != nsp_versions.end()) { - version = ver_it->second; - } - - std::string version_string; - auto str_it = nsp_version_strings.find(title_id); - if (str_it != nsp_version_strings.end()) { - version_string = str_it->second; - } - - m_manual_provider->AddEntryWithVersion( - title_type, content_type, title_id, version, version_string, - nca->GetBaseFile()); - - LOG_DEBUG(Frontend, "Added NSP update entry - TitleID: {:016X}, Version: {}, VersionStr: {}", - title_id, version, version_string); - } else { - // Use regular AddEntry for non-updates - m_manual_provider->AddEntry(title_type, content_type, title_id, - nca->GetBaseFile()); - LOG_DEBUG(Frontend, "Added NSP entry - TitleID: {:016X}, TitleType: {}, ContentType: {}", - title_id, static_cast(title_type), static_cast(content_type)); - } - } - } - return; - } - } - - // Handle XCI files - if (extension == "xci") { - FileSys::XCI xci{file}; - if (xci.GetStatus() == Loader::ResultStatus::Success) { - const auto nsp = xci.GetSecurePartitionNSP(); - if (nsp) { - for (const auto& title : nsp->GetNCAs()) { - for (const auto& entry : title.second) { - m_manual_provider->AddEntry(entry.first.first, entry.first.second, title.first, - entry.second->GetBaseFile()); - } - } - } - return; - } + if (m_manual_provider->AddEntriesFromContainer(file)) { + return; } auto loader = Loader::GetLoader(m_system, file); @@ -339,6 +240,13 @@ void EmulationSession::ConfigureFilesystemProvider(const std::string& filepath) } } +void EmulationSession::ConfigureFilesystemProviderFromGameFolder(const std::string& filepath) { + if (!Settings::values.ext_content_from_game_dirs.GetValue()) { + return; + } + ConfigureFilesystemProvider(filepath); +} + void EmulationSession::InitializeSystem(bool reload) { if (!reload) { // Initialize logging system @@ -1609,6 +1517,12 @@ void Java_org_yuzu_yuzu_1emu_NativeLibrary_addFileToFilesystemProvider(JNIEnv* e Common::Android::GetJString(env, jpath)); } +void Java_org_yuzu_yuzu_1emu_NativeLibrary_addGameFolderFileToFilesystemProvider( + JNIEnv* env, jobject jobj, jstring jpath) { + EmulationSession::GetInstance().ConfigureFilesystemProviderFromGameFolder( + Common::Android::GetJString(env, jpath)); +} + void Java_org_yuzu_yuzu_1emu_NativeLibrary_clearFilesystemProvider(JNIEnv* env, jobject jobj) { EmulationSession::GetInstance().GetContentProvider()->ClearAllEntries(); } diff --git a/src/android/app/src/main/jni/native.h b/src/android/app/src/main/jni/native.h index dfbc8b2943..f2e5c2cfd6 100644 --- a/src/android/app/src/main/jni/native.h +++ b/src/android/app/src/main/jni/native.h @@ -1,3 +1,6 @@ +// SPDX-FileCopyrightText: Copyright 2026 Eden Emulator Project +// SPDX-License-Identifier: GPL-3.0-or-later + // SPDX-FileCopyrightText: Copyright 2023 yuzu Emulator Project // SPDX-License-Identifier: GPL-2.0-or-later @@ -46,6 +49,7 @@ public: const Core::PerfStatsResults& PerfStats(); int ShadersBuilding(); void ConfigureFilesystemProvider(const std::string& filepath); + void ConfigureFilesystemProviderFromGameFolder(const std::string& filepath); void InitializeSystem(bool reload); void SetAppletId(int applet_id); Core::SystemResultStatus InitializeEmulation(const std::string& filepath, diff --git a/src/common/settings.h b/src/common/settings.h index 7ea4136576..7c6c0d062f 100644 --- a/src/common/settings.h +++ b/src/common/settings.h @@ -756,6 +756,8 @@ struct Values { Category::DataStorage}; Setting gamecard_path{linkage, std::string(), "gamecard_path", Category::DataStorage}; + Setting ext_content_from_game_dirs{linkage, true, "ext_content_from_game_dirs", + Category::DataStorage}; std::vector external_content_dirs; // Debugging diff --git a/src/core/file_sys/patch_manager.cpp b/src/core/file_sys/patch_manager.cpp index 82944ceceb..e9c3bb75c2 100644 --- a/src/core/file_sys/patch_manager.cpp +++ b/src/core/file_sys/patch_manager.cpp @@ -117,6 +117,12 @@ void AppendCommaIfNotEmpty(std::string& to, std::string_view with) { bool IsDirValidAndNonEmpty(const VirtualDir& dir) { return dir != nullptr && (!dir->GetFiles().empty() || !dir->GetSubdirectories().empty()); } + +bool IsVersionedExternalUpdateDisabled(const std::vector& disabled, u32 version) { + const std::string disabled_key = fmt::format("Update@{}", version); + return std::find(disabled.cbegin(), disabled.cend(), disabled_key) != disabled.cend() || + std::find(disabled.cbegin(), disabled.cend(), "Update") != disabled.cend(); +} } // Anonymous namespace PatchManager::PatchManager(u64 title_id_, @@ -155,8 +161,7 @@ VirtualDir PatchManager::PatchExeFS(VirtualDir exefs) const { if (!update_versions.empty()) { checked_external = true; for (const auto& update_entry : update_versions) { - std::string disabled_key = fmt::format("Update@{}", update_entry.version); - if (std::find(disabled.cbegin(), disabled.cend(), disabled_key) == disabled.cend()) { + if (!IsVersionedExternalUpdateDisabled(disabled, update_entry.version)) { update_disabled = false; enabled_version = update_entry.version; break; @@ -175,8 +180,7 @@ VirtualDir PatchManager::PatchExeFS(VirtualDir exefs) const { if (!manual_update_versions.empty()) { checked_manual = true; for (const auto& update_entry : manual_update_versions) { - std::string disabled_key = fmt::format("Update@{}", update_entry.version); - if (std::find(disabled.cbegin(), disabled.cend(), disabled_key) == disabled.cend()) { + if (!IsVersionedExternalUpdateDisabled(disabled, update_entry.version)) { update_disabled = false; enabled_version = update_entry.version; break; @@ -580,8 +584,7 @@ VirtualFile PatchManager::PatchRomFS(const NCA* base_nca, VirtualFile base_romfs if (!update_versions.empty()) { checked_external = true; for (const auto& update_entry : update_versions) { - std::string disabled_key = fmt::format("Update@{}", update_entry.version); - if (std::find(disabled.cbegin(), disabled.cend(), disabled_key) == disabled.cend()) { + if (!IsVersionedExternalUpdateDisabled(disabled, update_entry.version)) { update_disabled = false; enabled_version = update_entry.version; update_raw = external_provider->GetEntryForVersion(update_tid, type, update_entry.version); @@ -600,8 +603,7 @@ VirtualFile PatchManager::PatchRomFS(const NCA* base_nca, VirtualFile base_romfs if (!manual_update_versions.empty()) { checked_manual = true; for (const auto& update_entry : manual_update_versions) { - std::string disabled_key = fmt::format("Update@{}", update_entry.version); - if (std::find(disabled.cbegin(), disabled.cend(), disabled_key) == disabled.cend()) { + if (!IsVersionedExternalUpdateDisabled(disabled, update_entry.version)) { update_disabled = false; enabled_version = update_entry.version; update_raw = manual_provider->GetEntryForVersion(update_tid, type, update_entry.version); @@ -704,9 +706,8 @@ std::vector PatchManager::GetPatches(VirtualFile update_raw) const { version_str = FormatTitleVersion(update_entry.version); } - std::string disabled_key = fmt::format("Update@{}", update_entry.version); const auto update_disabled = - std::find(disabled.cbegin(), disabled.cend(), disabled_key) != disabled.cend(); + IsVersionedExternalUpdateDisabled(disabled, update_entry.version); Patch update_patch = {.enabled = !update_disabled, .name = "Update", @@ -732,9 +733,8 @@ std::vector PatchManager::GetPatches(VirtualFile update_raw) const { version_str = FormatTitleVersion(update_entry.version); } - std::string disabled_key = fmt::format("Update@{}", update_entry.version); const auto update_disabled = - std::find(disabled.cbegin(), disabled.cend(), disabled_key) != disabled.cend(); + IsVersionedExternalUpdateDisabled(disabled, update_entry.version); Patch update_patch = {.enabled = !update_disabled, @@ -771,7 +771,8 @@ std::vector PatchManager::GetPatches(VirtualFile update_raw) const { std::nullopt, std::nullopt, ContentRecordType::Program, update_tid); for (const auto& [slot, entry] : all_updates) { - if (slot == ContentProviderUnionSlot::External) { + if (slot == ContentProviderUnionSlot::External || + slot == ContentProviderUnionSlot::FrontendManual) { continue; } diff --git a/src/core/file_sys/registered_cache.cpp b/src/core/file_sys/registered_cache.cpp index 7bf2ad8fcd..020d403c95 100644 --- a/src/core/file_sys/registered_cache.cpp +++ b/src/core/file_sys/registered_cache.cpp @@ -104,6 +104,206 @@ static std::string GetCNMTName(TitleType type, u64 title_id) { return fmt::format("{}_{:016x}.cnmt", TITLE_TYPE_NAMES[index], title_id); } +static std::shared_ptr OpenContainerAsNsp(const VirtualFile& file, Loader::FileType type) { + if (!file) { + return nullptr; + } + + if (type == Loader::FileType::Unknown || type == Loader::FileType::Error) { + type = Loader::IdentifyFile(file); + if (type == Loader::FileType::Unknown) { + type = Loader::GuessFromFilename(file->GetName()); + } + } + + if (type == Loader::FileType::NSP) { + auto nsp = std::make_shared(file); + return nsp->GetStatus() == Loader::ResultStatus::Success ? nsp : nullptr; + } + + if (type == Loader::FileType::XCI) { + XCI xci(file); + if (xci.GetStatus() != Loader::ResultStatus::Success) { + return nullptr; + } + + auto secure_partition = xci.GetSecurePartitionNSP(); + if (secure_partition == nullptr) { + return nullptr; + } + + return secure_partition; + } + + // SAF-backed files can occasionally fail type-guessing despite being valid NSP/XCI. + // As a last resort, probe both container parsers directly. + { + auto nsp = std::make_shared(file); + if (nsp->GetStatus() == Loader::ResultStatus::Success) { + return nsp; + } + } + { + XCI xci(file); + if (xci.GetStatus() == Loader::ResultStatus::Success) { + auto secure_partition = xci.GetSecurePartitionNSP(); + if (secure_partition != nullptr) { + return secure_partition; + } + } + } + + return nullptr; +} + +template +bool ForEachContainerEntry(const std::shared_ptr& nsp, bool only_content, + std::optional base_program_id, Callback&& on_entry) { + if (!nsp) { + return false; + } + + const auto& ncas = nsp->GetNCAs(); + if (ncas.empty()) { + return false; + } + + std::map versions; + std::map version_strings; + + for (const auto& [title_id, nca_map] : ncas) { + for (const auto& [type_pair, nca] : nca_map) { + if (!nca) { + continue; + } + + const auto& [title_type, content_type] = type_pair; + + if (content_type == ContentRecordType::Meta) { + const auto subdirs = nca->GetSubdirectories(); + if (!subdirs.empty()) { + for (const auto& inner_file : subdirs[0]->GetFiles()) { + if (inner_file->GetExtension() == "cnmt") { + const CNMT cnmt(inner_file); + versions[cnmt.GetTitleID()] = cnmt.GetTitleVersion(); + break; + } + } + } + } + + if (title_type == TitleType::Update && content_type == ContentRecordType::Control) { + const auto romfs = nca->GetRomFS(); + if (!romfs) { + continue; + } + + const auto extracted = ExtractRomFS(romfs); + if (!extracted) { + continue; + } + + auto nacp_file = extracted->GetFile("control.nacp"); + if (!nacp_file) { + nacp_file = extracted->GetFile("Control.nacp"); + } + if (!nacp_file) { + continue; + } + + const NACP nacp(nacp_file); + auto version_string = nacp.GetVersionString(); + if (!version_string.empty()) { + version_strings[title_id] = std::move(version_string); + } + } + } + } + + bool added_entries = false; + for (const auto& [title_id, nca_map] : ncas) { + if (base_program_id.has_value() && GetBaseTitleID(title_id) != *base_program_id) { + continue; + } + + for (const auto& [type_pair, nca] : nca_map) { + const auto& [title_type, content_type] = type_pair; + if (only_content && title_type != TitleType::Update && title_type != TitleType::AOC) { + continue; + } + + auto entry_file = nca ? nca->GetBaseFile() : nullptr; + if (!entry_file) { + continue; + } + + u32 version = 0; + std::string version_string; + + if (title_type == TitleType::Update) { + if (const auto version_it = versions.find(title_id); version_it != versions.end()) { + version = version_it->second; + } + + if (const auto version_str_it = version_strings.find(title_id); + version_str_it != version_strings.end()) { + version_string = version_str_it->second; + } + } + + on_entry(title_type, content_type, title_id, entry_file, version, version_string); + added_entries = true; + } + } + + return added_entries; +} + +static void UpsertExternalVersionEntry(std::vector& multi_version_entries, + u64 title_id, u32 version, + const std::string& version_string, + ContentRecordType content_type, const VirtualFile& file) { + auto it = std::find_if(multi_version_entries.begin(), multi_version_entries.end(), + [title_id, version](const ExternalUpdateEntry& entry) { + return entry.title_id == title_id && entry.version == version; + }); + + if (it == multi_version_entries.end()) { + ExternalUpdateEntry update_entry; + update_entry.title_id = title_id; + update_entry.version = version; + update_entry.version_string = version_string; + update_entry.files[static_cast(content_type)] = file; + multi_version_entries.push_back(std::move(update_entry)); + return; + } + + it->files[static_cast(content_type)] = file; + if (it->version_string.empty() && !version_string.empty()) { + it->version_string = version_string; + } +} + +template +static bool AddExternalEntriesFromContainer(const std::shared_ptr& nsp, EntryMap& entries, + VersionMap& versions, + std::vector& multi_version_entries) { + return ForEachContainerEntry( + nsp, true, std::nullopt, + [&entries, &versions, + &multi_version_entries](TitleType title_type, ContentRecordType content_type, u64 title_id, + const VirtualFile& file, u32 version, + const std::string& version_string) { + entries[{title_id, content_type, title_type}] = file; + + if (title_type == TitleType::Update) { + versions[title_id] = version; + UpsertExternalVersionEntry(multi_version_entries, title_id, version, version_string, + content_type, file); + } + }); +} + ContentRecordType GetCRTypeFromNCAType(NCAContentType type) { switch (type) { case NCAContentType::Program: @@ -1008,6 +1208,26 @@ void ManualContentProvider::AddEntryWithVersion(TitleType title_type, ContentRec } } +bool ManualContentProvider::AddEntriesFromContainer(VirtualFile file, bool only_content, + std::optional base_program_id) { + const auto nsp = OpenContainerAsNsp(file, Loader::FileType::Unknown); + if (!nsp) { + return false; + } + + return ForEachContainerEntry( + nsp, only_content, base_program_id, + [this](TitleType title_type, ContentRecordType content_type, u64 title_id, + const VirtualFile& entry_file, u32 version, const std::string& version_string) { + if (title_type == TitleType::Update) { + AddEntryWithVersion(title_type, content_type, title_id, version, version_string, + entry_file); + } else { + AddEntry(title_type, content_type, title_id, entry_file); + } + }); +} + void ManualContentProvider::ClearAllEntries() { entries.clear(); multi_version_entries.clear(); @@ -1091,14 +1311,6 @@ VirtualFile ManualContentProvider::GetEntryForVersion(u64 title_id, ContentRecor return nullptr; } -bool ManualContentProvider::HasMultipleVersions(u64 title_id, ContentRecordType type) const { - size_t count = 0; - for (const auto& entry : multi_version_entries) - if (entry.title_id == title_id && entry.files[size_t(type)]) - ++count; - return count > 0; -} - ExternalContentProvider::ExternalContentProvider(std::vector load_directories) : load_dirs(std::move(load_directories)) { ExternalContentProvider::Refresh(); @@ -1159,247 +1371,22 @@ void ExternalContentProvider::ScanDirectory(const VirtualDir& dir) { } void ExternalContentProvider::ProcessNSP(const VirtualFile& file) { - auto nsp = NSP(file); - if (nsp.GetStatus() != Loader::ResultStatus::Success) { + const auto nsp = OpenContainerAsNsp(file, Loader::FileType::NSP); + if (!nsp) { return; } LOG_DEBUG(Service_FS, "Processing NSP file: {}", file->GetName()); - - const auto ncas = nsp.GetNCAs(); - - std::map nsp_versions; - std::map nsp_version_strings; // title_id -> NACP version string - - for (const auto& [title_id, nca_map] : ncas) { - for (const auto& [type_pair, nca] : nca_map) { - const auto& [title_type, content_type] = type_pair; - - if (content_type == ContentRecordType::Meta) { - const auto subdirs = nca->GetSubdirectories(); - if (!subdirs.empty()) { - const auto section0 = subdirs[0]; - const auto files = section0->GetFiles(); - for (const auto& inner_file : files) { - if (inner_file->GetExtension() == "cnmt") { - const CNMT cnmt(inner_file); - const auto cnmt_title_id = cnmt.GetTitleID(); - const auto version = cnmt.GetTitleVersion(); - nsp_versions[cnmt_title_id] = version; - versions[cnmt_title_id] = version; - break; - } - } - } - } - - if (content_type == ContentRecordType::Control && title_type == TitleType::Update) { - auto romfs = nca->GetRomFS(); - if (romfs) { - auto extracted = ExtractRomFS(romfs); - if (extracted) { - auto nacp_file = extracted->GetFile("control.nacp"); - if (!nacp_file) { - nacp_file = extracted->GetFile("Control.nacp"); - } - if (nacp_file) { - NACP nacp(nacp_file); - auto ver_str = nacp.GetVersionString(); - if (!ver_str.empty()) { - nsp_version_strings[title_id] = ver_str; - } - } - } - } - } - } - } - - std::map, std::array> version_files; - - for (const auto& [title_id, nca_map] : ncas) { - for (const auto& [type_pair, nca] : nca_map) { - const auto& [title_type, content_type] = type_pair; - - if (title_type != TitleType::AOC && title_type != TitleType::Update) { - continue; - } - - auto nca_file = nsp.GetNCAFile(title_id, content_type, title_type); - if (nca_file != nullptr) { - entries[{title_id, content_type, title_type}] = nca_file; - - if (title_type == TitleType::Update) { - u32 version = 0; - auto ver_it = nsp_versions.find(title_id); - if (ver_it != nsp_versions.end()) { - version = ver_it->second; - } - - version_files[{title_id, version}][size_t(content_type)] = nca_file; - } - - LOG_DEBUG(Service_FS, "Added entry - Title ID: {:016X}, Type: {}, Content: {}", - title_id, static_cast(title_type), static_cast(content_type)); - } - } - } - - for (const auto& [key, files_map] : version_files) { - const auto& [title_id, version] = key; - - std::string ver_str; - auto str_it = nsp_version_strings.find(title_id); - if (str_it != nsp_version_strings.end()) { - ver_str = str_it->second; - } - - bool version_exists = false; - for (auto& existing : multi_version_entries) { - if (existing.title_id == title_id && existing.version == version) { - existing.files = files_map; - if (existing.version_string.empty() && !ver_str.empty()) { - existing.version_string = ver_str; - } - version_exists = true; - break; - } - } - - if (!version_exists && !files_map.empty()) { - ExternalUpdateEntry update_entry{ - .title_id = title_id, - .version = version, - .version_string = ver_str, - .files = files_map - }; - multi_version_entries.push_back(update_entry); - LOG_DEBUG(Service_FS, "Added multi-version update - Title ID: {:016X}, Version: {}, VersionStr: {}, Content types: {}", - title_id, version, ver_str, files_map.size()); - } - } + AddExternalEntriesFromContainer(nsp, entries, versions, multi_version_entries); } void ExternalContentProvider::ProcessXCI(const VirtualFile& file) { - auto xci = XCI(file); - if (xci.GetStatus() != Loader::ResultStatus::Success) { + const auto nsp = OpenContainerAsNsp(file, Loader::FileType::XCI); + if (!nsp) { return; } - auto nsp = xci.GetSecurePartitionNSP(); - if (nsp == nullptr) { - return; - } - - const auto ncas = nsp->GetNCAs(); - - std::map xci_versions; - std::map xci_version_strings; - - for (const auto& [title_id, nca_map] : ncas) { - for (const auto& [type_pair, nca] : nca_map) { - const auto& [title_type, content_type] = type_pair; - - if (content_type == ContentRecordType::Meta) { - const auto subdirs = nca->GetSubdirectories(); - if (!subdirs.empty()) { - const auto section0 = subdirs[0]; - const auto files = section0->GetFiles(); - for (const auto& inner_file : files) { - if (inner_file->GetExtension() == "cnmt") { - const CNMT cnmt(inner_file); - const auto cnmt_title_id = cnmt.GetTitleID(); - const auto version = cnmt.GetTitleVersion(); - xci_versions[cnmt_title_id] = version; - versions[cnmt_title_id] = version; - break; - } - } - } - } - - if (content_type == ContentRecordType::Control && title_type == TitleType::Update) { - auto romfs = nca->GetRomFS(); - if (romfs) { - auto extracted = ExtractRomFS(romfs); - if (extracted) { - auto nacp_file = extracted->GetFile("control.nacp"); - if (!nacp_file) { - nacp_file = extracted->GetFile("Control.nacp"); - } - if (nacp_file) { - NACP nacp(nacp_file); - auto ver_str = nacp.GetVersionString(); - if (!ver_str.empty()) { - xci_version_strings[title_id] = ver_str; - } - } - } - } - } - } - } - - std::map, std::array> version_files; - - for (const auto& [title_id, nca_map] : ncas) { - for (const auto& [type_pair, nca] : nca_map) { - const auto& [title_type, content_type] = type_pair; - - if (title_type != TitleType::AOC && title_type != TitleType::Update) { - continue; - } - - auto nca_file = nsp->GetNCAFile(title_id, content_type, title_type); - if (nca_file != nullptr) { - entries[{title_id, content_type, title_type}] = nca_file; - - if (title_type == TitleType::Update) { - u32 version = 0; - auto ver_it = xci_versions.find(title_id); - if (ver_it != xci_versions.end()) { - version = ver_it->second; - } - - version_files[{title_id, version}][size_t(content_type)] = nca_file; - } - } - } - } - - for (const auto& [key, files_map] : version_files) { - const auto& [title_id, version] = key; - - std::string ver_str; - auto str_it = xci_version_strings.find(title_id); - if (str_it != xci_version_strings.end()) { - ver_str = str_it->second; - } - - bool version_exists = false; - for (auto& existing : multi_version_entries) { - if (existing.title_id == title_id && existing.version == version) { - existing.files = files_map; - if (existing.version_string.empty() && !ver_str.empty()) { - existing.version_string = ver_str; - } - version_exists = true; - break; - } - } - - if (!version_exists && !files_map.empty()) { - ExternalUpdateEntry update_entry{ - .title_id = title_id, - .version = version, - .version_string = ver_str, - .files = files_map - }; - multi_version_entries.push_back(update_entry); - LOG_DEBUG(Service_FS, "Added multi-version update from XCI - Title ID: {:016X}, Version: {}, VersionStr: {}, Content types: {}", - title_id, version, ver_str, files_map.size()); - } - } + AddExternalEntriesFromContainer(nsp, entries, versions, multi_version_entries); } bool ExternalContentProvider::HasEntry(u64 title_id, ContentRecordType type) const { @@ -1491,12 +1478,4 @@ VirtualFile ExternalContentProvider::GetEntryForVersion(u64 title_id, ContentRec return nullptr; } -bool ExternalContentProvider::HasMultipleVersions(u64 title_id, ContentRecordType type) const { - size_t count = 0; - for (const auto& entry : multi_version_entries) - if (entry.title_id == title_id && entry.files[size_t(type)]) - ++count; - return count > 1; -} - } // namespace FileSys diff --git a/src/core/file_sys/registered_cache.h b/src/core/file_sys/registered_cache.h index 2e39f74db8..32134d1c48 100644 --- a/src/core/file_sys/registered_cache.h +++ b/src/core/file_sys/registered_cache.h @@ -9,6 +9,7 @@ #include #include #include +#include #include #include #include @@ -262,6 +263,8 @@ public: VirtualFile file); void AddEntryWithVersion(TitleType title_type, ContentRecordType content_type, u64 title_id, u32 version, const std::string& version_string, VirtualFile file); + bool AddEntriesFromContainer(VirtualFile file, bool only_content = false, + std::optional base_program_id = std::nullopt); void ClearAllEntries(); void Refresh() override; @@ -276,7 +279,6 @@ public: std::vector ListUpdateVersions(u64 title_id) const; VirtualFile GetEntryForVersion(u64 title_id, ContentRecordType type, u32 version) const; - bool HasMultipleVersions(u64 title_id, ContentRecordType type) const; private: std::map, VirtualFile> entries; @@ -303,7 +305,6 @@ public: std::vector ListUpdateVersions(u64 title_id) const; VirtualFile GetEntryForVersion(u64 title_id, ContentRecordType type, u32 version) const; - bool HasMultipleVersions(u64 title_id, ContentRecordType type) const; private: void ScanDirectory(const VirtualDir& dir); diff --git a/src/core/loader/loader.cpp b/src/core/loader/loader.cpp index 4379634d03..b4d50227d3 100644 --- a/src/core/loader/loader.cpp +++ b/src/core/loader/loader.cpp @@ -1,4 +1,4 @@ -// SPDX-FileCopyrightText: Copyright 2025 Eden Emulator Project +// SPDX-FileCopyrightText: Copyright 2026 Eden Emulator Project // SPDX-License-Identifier: GPL-3.0-or-later // SPDX-FileCopyrightText: Copyright 2018 yuzu Emulator Project @@ -9,11 +9,15 @@ #include #include #include +#include #include "common/concepts.h" #include "common/fs/path_util.h" #include "common/logging/log.h" #include "common/string_util.h" #include "core/core.h" +#include "core/file_sys/card_image.h" +#include "core/file_sys/common_funcs.h" +#include "core/file_sys/submission_package.h" #include "core/hle/kernel/k_process.h" #include "core/loader/deconstructed_rom_directory.h" #include "core/loader/kip.h" @@ -37,6 +41,49 @@ std::optional IdentifyFileLoader(FileSys::VirtualFile file) { return std::nullopt; } +std::shared_ptr OpenContainerAsNsp(FileSys::VirtualFile file, FileType type, + u64 program_id = 0, + std::size_t program_index = 0) { + if (!file) { + return nullptr; + } + + if (type == FileType::NSP) { + auto nsp = std::make_shared(file, program_id, program_index); + return nsp->GetStatus() == ResultStatus::Success ? nsp : nullptr; + } + + if (type == FileType::XCI) { + FileSys::XCI xci{file, program_id, program_index}; + if (xci.GetStatus() != ResultStatus::Success) { + return nullptr; + } + + auto secure_nsp = xci.GetSecurePartitionNSP(); + if (secure_nsp == nullptr || secure_nsp->GetStatus() != ResultStatus::Success) { + return nullptr; + } + + return secure_nsp; + } + + return nullptr; +} + +bool HasApplicationProgramContent(const std::shared_ptr& nsp) { + if (!nsp) { + return false; + } + + const auto& ncas = nsp->GetNCAs(); + return std::any_of(ncas.cbegin(), ncas.cend(), [](const auto& title_entry) { + const auto& nca_map = title_entry.second; + return nca_map.find( + {FileSys::TitleType::Application, FileSys::ContentRecordType::Program}) != + nca_map.end(); + }); +} + } // namespace FileType IdentifyFile(FileSys::VirtualFile file) { @@ -62,6 +109,27 @@ FileType IdentifyFile(FileSys::VirtualFile file) { } } +bool IsContainerType(FileType type) { + return type == FileType::NSP || type == FileType::XCI; +} + +bool IsBootableGameContainer(FileSys::VirtualFile file, FileType type, u64 program_id, + std::size_t program_index) { + if (!file) { + return false; + } + + if (type == FileType::Unknown) { + type = IdentifyFile(file); + } + + if (!IsContainerType(type)) { + return false; + } + + return HasApplicationProgramContent(OpenContainerAsNsp(file, type, program_id, program_index)); +} + FileType GuessFromFilename(const std::string& name) { if (name == "main") return FileType::DeconstructedRomDirectory; diff --git a/src/core/loader/loader.h b/src/core/loader/loader.h index f4e932cec9..95ce638da0 100644 --- a/src/core/loader/loader.h +++ b/src/core/loader/loader.h @@ -1,3 +1,6 @@ +// SPDX-FileCopyrightText: Copyright 2026 Eden Emulator Project +// SPDX-License-Identifier: GPL-3.0-or-later + // SPDX-FileCopyrightText: Copyright 2018 yuzu Emulator Project // SPDX-License-Identifier: GPL-2.0-or-later @@ -46,12 +49,29 @@ enum class FileType { }; /** - * Identifies the type of a bootable file based on the magic value in its header. + * Identifies the type of a supported file/container based on its structure. * @param file open file * @return FileType of file */ FileType IdentifyFile(FileSys::VirtualFile file); +/** + * Returns whether the file type represents a container format that can bundle multiple titles + * (currently NSP/XCI). + */ +bool IsContainerType(FileType type); + +/** + * Returns whether a container file is bootable as a game (has Application/Program content). + * + * @param file open file + * @param type optional file type; if Unknown it is auto-detected. + * @param program_id optional program id hint for multi-program containers. + * @param program_index optional program index hint for multi-program containers. + */ +bool IsBootableGameContainer(FileSys::VirtualFile file, FileType type = FileType::Unknown, + u64 program_id = 0, std::size_t program_index = 0); + /** * Guess the type of a bootable file from its name * @param name String name of bootable file diff --git a/src/core/loader/nsp.cpp b/src/core/loader/nsp.cpp index 3016d5f25f..4333acb70c 100644 --- a/src/core/loader/nsp.cpp +++ b/src/core/loader/nsp.cpp @@ -1,3 +1,6 @@ +// SPDX-FileCopyrightText: Copyright 2026 Eden Emulator Project +// SPDX-License-Identifier: GPL-3.0-or-later + // SPDX-FileCopyrightText: Copyright 2018 yuzu Emulator Project // SPDX-License-Identifier: GPL-2.0-or-later @@ -55,19 +58,30 @@ AppLoader_NSP::~AppLoader_NSP() = default; FileType AppLoader_NSP::IdentifyType(const FileSys::VirtualFile& nsp_file) { const FileSys::NSP nsp(nsp_file); - if (nsp.GetStatus() == ResultStatus::Success) { - // Extracted Type case - if (nsp.IsExtractedType() && nsp.GetExeFS() != nullptr && - FileSys::IsDirectoryExeFS(nsp.GetExeFS())) { - return FileType::NSP; + if (nsp.GetStatus() != ResultStatus::Success) { + return FileType::Error; + } + + // Extracted Type case + if (nsp.IsExtractedType() && nsp.GetExeFS() != nullptr && + FileSys::IsDirectoryExeFS(nsp.GetExeFS())) { + return FileType::NSP; + } + + // Non-extracted NSPs can legitimately contain only update/DLC content. + // Identify the container format itself; bootability is validated by Load(). + if (!nsp.GetNCAs().empty()) { + return FileType::NSP; + } + + // Fallback when NCAs couldn't be parsed (e.g. missing keys) but the PFS still contains NCAs. + for (const auto& entry : nsp.GetFiles()) { + if (entry == nullptr) { + continue; } - // Non-Extracted Type case - const auto program_id = nsp.GetProgramTitleID(); - if (!nsp.IsExtractedType() && - nsp.GetNCA(program_id, FileSys::ContentRecordType::Program) != nullptr && - AppLoader_NCA::IdentifyType( - nsp.GetNCAFile(program_id, FileSys::ContentRecordType::Program)) == FileType::NCA) { + const auto& name = entry->GetName(); + if (name.size() >= 4 && name.substr(name.size() - 4) == ".nca") { return FileType::NSP; } } diff --git a/src/core/loader/xci.cpp b/src/core/loader/xci.cpp index e9abb199a1..983184a226 100644 --- a/src/core/loader/xci.cpp +++ b/src/core/loader/xci.cpp @@ -1,3 +1,6 @@ +// SPDX-FileCopyrightText: Copyright 2026 Eden Emulator Project +// SPDX-License-Identifier: GPL-3.0-or-later + // SPDX-FileCopyrightText: Copyright 2018 yuzu Emulator Project // SPDX-License-Identifier: GPL-2.0-or-later @@ -44,10 +47,13 @@ AppLoader_XCI::~AppLoader_XCI() = default; FileType AppLoader_XCI::IdentifyType(const FileSys::VirtualFile& xci_file) { const FileSys::XCI xci(xci_file); - if (xci.GetStatus() == ResultStatus::Success && - xci.GetNCAByType(FileSys::NCAContentType::Program) != nullptr && - AppLoader_NCA::IdentifyType(xci.GetNCAFileByType(FileSys::NCAContentType::Program)) == - FileType::NCA) { + if (xci.GetStatus() != ResultStatus::Success) { + return FileType::Error; + } + + // Identify XCI as a valid container even when it does not include a bootable Program NCA. + // Bootability is handled by AppLoader_XCI::Load(). + if (xci.GetSecurePartitionNSP() != nullptr) { return FileType::XCI; } diff --git a/src/yuzu/game/game_list_worker.cpp b/src/yuzu/game/game_list_worker.cpp index c4504a0d5e..81012e4374 100644 --- a/src/yuzu/game/game_list_worker.cpp +++ b/src/yuzu/game/game_list_worker.cpp @@ -4,6 +4,7 @@ // SPDX-FileCopyrightText: Copyright 2018 yuzu Emulator Project // SPDX-License-Identifier: GPL-2.0-or-later +#include #include #include #include @@ -16,14 +17,17 @@ #include "common/fs/fs.h" #include "common/fs/path_util.h" +#include "common/settings.h" #include "core/core.h" #include "core/file_sys/card_image.h" +#include "core/file_sys/common_funcs.h" #include "core/file_sys/content_archive.h" #include "core/file_sys/control_metadata.h" #include "core/file_sys/fs_filesystem.h" #include "core/file_sys/nca_metadata.h" #include "core/file_sys/patch_manager.h" #include "core/file_sys/registered_cache.h" +#include "core/file_sys/romfs.h" #include "core/file_sys/submission_package.h" #include "core/loader/loader.h" #include "yuzu/compatibility_list.h" @@ -375,6 +379,12 @@ void GameListWorker::ScanFileSystem(ScanTarget target, const std::string& dir_pa return true; } + if (target == ScanTarget::PopulateGameList && + (file_type == Loader::FileType::XCI || file_type == Loader::FileType::NSP) && + !Loader::IsBootableGameContainer(file, file_type)) { + return true; + } + u64 program_id = 0; const auto res2 = loader->ReadProgramId(program_id); @@ -383,18 +393,10 @@ void GameListWorker::ScanFileSystem(ScanTarget target, const std::string& dir_pa provider->AddEntry(FileSys::TitleType::Application, FileSys::GetCRTypeFromNCAType(FileSys::NCA{file}.GetType()), program_id, file); - } else if (res2 == Loader::ResultStatus::Success && + } else if (Settings::values.ext_content_from_game_dirs.GetValue() && (file_type == Loader::FileType::XCI || file_type == Loader::FileType::NSP)) { - const auto nsp = file_type == Loader::FileType::NSP - ? std::make_shared(file) - : FileSys::XCI{file}.GetSecurePartitionNSP(); - for (const auto& title : nsp->GetNCAs()) { - for (const auto& entry : title.second) { - provider->AddEntry(entry.first.first, entry.first.second, title.first, - entry.second->GetBaseFile()); - } - } + void(provider->AddEntriesFromContainer(file)); } } else { std::vector program_ids; diff --git a/src/yuzu/main_window.cpp b/src/yuzu/main_window.cpp index 6ead3c4130..e02e02b413 100644 --- a/src/yuzu/main_window.cpp +++ b/src/yuzu/main_window.cpp @@ -2019,6 +2019,10 @@ void MainWindow::ConfigureFilesystemProvider(const std::string& filepath) { return; } + if (QtCommon::provider->AddEntriesFromContainer(file)) { + return; + } + auto loader = Loader::GetLoader(*QtCommon::system, file); if (!loader) { return; @@ -2033,19 +2037,8 @@ void MainWindow::ConfigureFilesystemProvider(const std::string& filepath) { const auto res2 = loader->ReadProgramId(program_id); if (res2 == Loader::ResultStatus::Success && file_type == Loader::FileType::NCA) { QtCommon::provider->AddEntry(FileSys::TitleType::Application, - FileSys::GetCRTypeFromNCAType(FileSys::NCA{file}.GetType()), program_id, - file); - } else if (res2 == Loader::ResultStatus::Success && - (file_type == Loader::FileType::XCI || file_type == Loader::FileType::NSP)) { - const auto nsp = file_type == Loader::FileType::NSP - ? std::make_shared(file) - : FileSys::XCI{file}.GetSecurePartitionNSP(); - for (const auto& title : nsp->GetNCAs()) { - for (const auto& entry : title.second) { - QtCommon::provider->AddEntry(entry.first.first, entry.first.second, title.first, - entry.second->GetBaseFile()); - } - } + FileSys::GetCRTypeFromNCAType(FileSys::NCA{file}.GetType()), + program_id, file); } } From cdf9b556b25b33cf558c0ed3085d99e129a2fb1c Mon Sep 17 00:00:00 2001 From: wildcard Date: Thu, 5 Mar 2026 00:54:26 +0100 Subject: [PATCH 48/84] [vulkan]fix vuid 02751 (#3573) Reviewed-on: https://git.eden-emu.dev/eden-emu/eden/pulls/3573 Reviewed-by: CamilleLaVey Reviewed-by: DraVee Co-authored-by: wildcard Co-committed-by: wildcard --- src/video_core/renderer_vulkan/vk_buffer_cache.cpp | 8 ++++++++ src/video_core/vulkan_common/vulkan_device.h | 5 +++++ 2 files changed, 13 insertions(+) diff --git a/src/video_core/renderer_vulkan/vk_buffer_cache.cpp b/src/video_core/renderer_vulkan/vk_buffer_cache.cpp index 6256bc8bd8..f4345262fb 100644 --- a/src/video_core/renderer_vulkan/vk_buffer_cache.cpp +++ b/src/video_core/renderer_vulkan/vk_buffer_cache.cpp @@ -108,6 +108,14 @@ VkBufferView Buffer::View(u32 offset, u32 size, VideoCore::Surface::PixelFormat // Null buffer not supported, adjust offset and size offset = 0; size = 0; + } else { + // Align offset down to minTexelBufferOffsetAlignment + const u32 alignment = static_cast(device->GetMinTexelBufferOffsetAlignment()); + if (alignment > 1) { + const u32 aligned_offset = offset & ~(alignment - 1); + size += offset - aligned_offset; + offset = aligned_offset; + } } const auto it{std::ranges::find_if(views, [offset, size, format](const BufferView& view) { return offset == view.offset && size == view.size && format == view.format; diff --git a/src/video_core/vulkan_common/vulkan_device.h b/src/video_core/vulkan_common/vulkan_device.h index d3623d1186..d29a8cd3f3 100644 --- a/src/video_core/vulkan_common/vulkan_device.h +++ b/src/video_core/vulkan_common/vulkan_device.h @@ -318,6 +318,11 @@ public: return properties.properties.limits.minStorageBufferOffsetAlignment; } + /// Returns texel buffer offset alignment requirement. + VkDeviceSize GetMinTexelBufferOffsetAlignment() const { + return properties.properties.limits.minTexelBufferOffsetAlignment; + } + /// Returns the maximum range for storage buffers. VkDeviceSize GetMaxStorageBufferRange() const { return properties.properties.limits.maxStorageBufferRange; From 69e47bd2c0c04e0e18c29a23533e8e7724436226 Mon Sep 17 00:00:00 2001 From: wildcard Date: Thu, 5 Mar 2026 00:54:48 +0100 Subject: [PATCH 49/84] [vulkan] Fix wrong stage index in prepare_stage render area check (#3672) The OpenGL correctly uses const auto& info{stage_infos[stage]}; Reviewed-on: https://git.eden-emu.dev/eden-emu/eden/pulls/3672 Reviewed-by: MaranBr Reviewed-by: DraVee Co-authored-by: wildcard Co-committed-by: wildcard --- src/video_core/renderer_vulkan/vk_graphics_pipeline.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/video_core/renderer_vulkan/vk_graphics_pipeline.cpp b/src/video_core/renderer_vulkan/vk_graphics_pipeline.cpp index d156baa77b..5b11a34232 100644 --- a/src/video_core/renderer_vulkan/vk_graphics_pipeline.cpp +++ b/src/video_core/renderer_vulkan/vk_graphics_pipeline.cpp @@ -474,7 +474,7 @@ bool GraphicsPipeline::ConfigureImpl(bool is_indexed) { buffer_cache.BindHostStageBuffers(stage); PushImageDescriptors(texture_cache, guest_descriptor_queue, stage_infos[stage], rescaling, samplers_it, views_it); - const auto& info{stage_infos[0]}; + const auto& info{stage_infos[stage]}; if (info.uses_render_area) { render_area.uses_render_area = true; render_area.words = {static_cast(regs.surface_clip.width), From 70c1e9abed3dc70284c4eece3786922b2fc144ed Mon Sep 17 00:00:00 2001 From: nekle Date: Thu, 5 Mar 2026 00:56:25 +0100 Subject: [PATCH 50/84] [android] Try and fix SD Card storage mount points for external paths (#3436) Reviewed-on: https://git.eden-emu.dev/eden-emu/eden/pulls/3436 Reviewed-by: DraVee Reviewed-by: MaranBr Co-authored-by: nekle Co-committed-by: nekle --- .../java/org/yuzu/yuzu_emu/utils/PathUtil.kt | 16 +++++++--------- 1 file changed, 7 insertions(+), 9 deletions(-) diff --git a/src/android/app/src/main/java/org/yuzu/yuzu_emu/utils/PathUtil.kt b/src/android/app/src/main/java/org/yuzu/yuzu_emu/utils/PathUtil.kt index a840b3b846..744e1d149c 100644 --- a/src/android/app/src/main/java/org/yuzu/yuzu_emu/utils/PathUtil.kt +++ b/src/android/app/src/main/java/org/yuzu/yuzu_emu/utils/PathUtil.kt @@ -1,4 +1,4 @@ -// SPDX-FileCopyrightText: Copyright 2025 Eden Emulator Project +// SPDX-FileCopyrightText: Copyright 2026 Eden Emulator Project // SPDX-License-Identifier: GPL-3.0-or-later package org.yuzu.yuzu_emu.utils @@ -80,16 +80,14 @@ object PathUtil { } } - // This really shouldn't be necessary, but the Android API seemingly - // doesn't have a way of doing this? - // Apparently, on certain devices the mount location can vary, so add - // extra cases here if we discover any new ones. fun getRemovableStoragePath(idString: String): String? { - var pathFile: File + val possibleMountPaths = listOf("/mnt/media_rw/$idString", "/storage/$idString") - pathFile = File("/mnt/media_rw/$idString"); - if (pathFile.exists()) { - return pathFile.absolutePath + for (mountPath in possibleMountPaths) { + val pathFile = File(mountPath); + if (pathFile.exists()) { + return pathFile.absolutePath + } } return null From 05f6942befe0ab1209ecc5e2ddb9716f49d65574 Mon Sep 17 00:00:00 2001 From: xbzk Date: Thu, 5 Mar 2026 00:58:49 +0100 Subject: [PATCH 51/84] [android, ui] fixed setting reset to defaults infinite loop (#3659) fixed a bug discovered by Pavel in which the settings' "reset to defaults" dialog would get stuck in a infinite loop, due to a recall prior to cleaning state. Reviewed-on: https://git.eden-emu.dev/eden-emu/eden/pulls/3659 Reviewed-by: MaranBr Reviewed-by: DraVee Reviewed-by: CamilleLaVey Co-authored-by: xbzk Co-committed-by: xbzk --- .../settings/ui/SettingsDialogFragment.kt | 42 +++++++------------ .../settings/ui/SettingsFragmentPresenter.kt | 5 ++- 2 files changed, 20 insertions(+), 27 deletions(-) diff --git a/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/ui/SettingsDialogFragment.kt b/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/ui/SettingsDialogFragment.kt index f66f4bac7f..4dcb35c010 100644 --- a/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/ui/SettingsDialogFragment.kt +++ b/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/ui/SettingsDialogFragment.kt @@ -1,4 +1,4 @@ -// SPDX-FileCopyrightText: Copyright 2025 Eden Emulator Project +// SPDX-FileCopyrightText: Copyright 2026 Eden Emulator Project // SPDX-License-Identifier: GPL-3.0-or-later // SPDX-FileCopyrightText: 2023 yuzu Emulator Project @@ -68,7 +68,9 @@ class SettingsDialogFragment : DialogFragment(), DialogInterface.OnClickListener MaterialAlertDialogBuilder(requireContext()) .setMessage(R.string.reset_setting_confirmation) .setPositiveButton(android.R.string.ok) { _: DialogInterface, _: Int -> - when (val item = settingsViewModel.clickedItem) { + val item = settingsViewModel.clickedItem ?: return@setPositiveButton + clearDialogState() + when (item) { is AnalogInputSetting -> { val stickParam = NativeInput.getStickParam( item.playerIndex, @@ -107,12 +109,17 @@ class SettingsDialogFragment : DialogFragment(), DialogInterface.OnClickListener } else -> { - settingsViewModel.clickedItem!!.setting.reset() + item.setting.reset() settingsViewModel.setAdapterItemChanged(position) } } } - .setNegativeButton(android.R.string.cancel, null) + .setNegativeButton(android.R.string.cancel) { _: DialogInterface, _: Int -> + clearDialogState() + } + .setOnCancelListener { + clearDialogState() + } .create() } @@ -186,27 +193,6 @@ class SettingsDialogFragment : DialogFragment(), DialogInterface.OnClickListener updateButtonState(isValid) } - /* - * xbzk: these two events, along with attachRepeat feature, - * were causing spinbox buttons to respond twice per press - * cutting these out to retain accelerated press functionality - * TODO: clean this out later if no issues arise - * - spinboxBinding.buttonDecrement.setOnClickListener { - val current = spinboxBinding.editValue.text.toString().toIntOrNull() ?: currentValue - val newValue = current - 1 - spinboxBinding.editValue.setText(newValue.toString()) - updateValidity(newValue) - } - - spinboxBinding.buttonIncrement.setOnClickListener { - val current = spinboxBinding.editValue.text.toString().toIntOrNull() ?: currentValue - val newValue = current + 1 - spinboxBinding.editValue.setText(newValue.toString()) - updateValidity(newValue) - } - */ - fun attachRepeat(button: View, delta: Int) { val handler = Handler(Looper.getMainLooper()) var runnable: Runnable? = null @@ -439,9 +425,13 @@ class SettingsDialogFragment : DialogFragment(), DialogInterface.OnClickListener private fun closeDialog() { settingsViewModel.setAdapterItemChanged(position) + clearDialogState() + dismiss() + } + + private fun clearDialogState() { settingsViewModel.clickedItem = null settingsViewModel.setSliderProgress(-1f) - dismiss() } private fun getValueForSingleChoiceSelection(item: SingleChoiceSetting, which: Int): Int { diff --git a/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/ui/SettingsFragmentPresenter.kt b/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/ui/SettingsFragmentPresenter.kt index 0fc4fb0b7f..77104e0614 100644 --- a/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/ui/SettingsFragmentPresenter.kt +++ b/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/ui/SettingsFragmentPresenter.kt @@ -1066,7 +1066,10 @@ class SettingsFragmentPresenter( IntSetting.THEME.getValueAsString() override val defaultValue: Int = IntSetting.THEME.defaultValue - override fun reset() = IntSetting.THEME.setInt(defaultValue) + override fun reset() { + IntSetting.THEME.setInt(defaultValue) + settingsViewModel.setShouldRecreate(true) + } } add(HeaderSetting(R.string.app_settings)) From 9a07bd0570ceba262b4a918f4927e5674b6f7269 Mon Sep 17 00:00:00 2001 From: lizzie Date: Thu, 5 Mar 2026 07:32:18 +0100 Subject: [PATCH 52/84] [vk] unify VkSurfaceKHR with Android and the rest of platforms; remove technically incorrect nullptr() ctor for handles (#2971) Removes some odd #ifdef-ing that just can use a shrimple opaque type. Also removes nullptr() ctor'ing for vulkan handles and such; it's not incorrect per se like how `void *p = 0;` isn't incorrect, just that, y'know, any static analyzer will go "woah". Also there isn't any guarantee that handles `sizeof(Handle) == sizeof(void*)` so may as well :) Signed-off-by: lizzie lizzie@eden-emu.dev Reviewed-on: https://git.eden-emu.dev/eden-emu/eden/pulls/2971 Reviewed-by: CamilleLaVey Reviewed-by: MaranBr Co-authored-by: lizzie Co-committed-by: lizzie --- src/video_core/renderer_vulkan/blit_image.cpp | 8 +-- .../renderer_vulkan/renderer_vulkan.cpp | 8 +-- .../renderer_vulkan/vk_compute_pass.cpp | 8 +-- .../renderer_vulkan/vk_compute_pipeline.cpp | 36 ++++++------- .../renderer_vulkan/vk_graphics_pipeline.cpp | 44 ++++++++------- .../renderer_vulkan/vk_present_manager.cpp | 20 ++----- .../renderer_vulkan/vk_present_manager.h | 16 ++---- .../renderer_vulkan/vk_query_cache.cpp | 2 +- .../renderer_vulkan/vk_query_cache.h | 5 +- .../renderer_vulkan/vk_scheduler.cpp | 2 +- src/video_core/renderer_vulkan/vk_scheduler.h | 8 +-- .../renderer_vulkan/vk_swapchain.cpp | 54 +++---------------- src/video_core/renderer_vulkan/vk_swapchain.h | 22 ++------ src/video_core/vulkan_common/vulkan.h | 5 +- .../vulkan_common/vulkan_device.cpp | 2 +- .../vulkan_common/vulkan_surface.cpp | 2 +- src/video_core/vulkan_common/vulkan_wrapper.h | 44 +++++++-------- 17 files changed, 104 insertions(+), 182 deletions(-) diff --git a/src/video_core/renderer_vulkan/blit_image.cpp b/src/video_core/renderer_vulkan/blit_image.cpp index 07611ef98c..789f4da2ed 100644 --- a/src/video_core/renderer_vulkan/blit_image.cpp +++ b/src/video_core/renderer_vulkan/blit_image.cpp @@ -1032,7 +1032,7 @@ void BlitImageHelper::ConvertDepthToColorPipeline(vk::Pipeline& pipeline, VkRend VkShaderModule frag_shader = *convert_float_to_depth_frag; const std::array stages = MakeStages(*full_screen_vert, frag_shader); const VkPipelineInputAssemblyStateCreateInfo input_assembly_ci = GetPipelineInputAssemblyStateCreateInfo(device); - pipeline = device.GetLogical().CreateGraphicsPipeline({ + pipeline = device.GetLogical().CreateGraphicsPipeline(VkGraphicsPipelineCreateInfo{ .sType = VK_STRUCTURE_TYPE_GRAPHICS_PIPELINE_CREATE_INFO, .pNext = nullptr, .flags = 0, @@ -1062,7 +1062,7 @@ void BlitImageHelper::ConvertColorToDepthPipeline(vk::Pipeline& pipeline, VkRend VkShaderModule frag_shader = *convert_depth_to_float_frag; const std::array stages = MakeStages(*full_screen_vert, frag_shader); const VkPipelineInputAssemblyStateCreateInfo input_assembly_ci = GetPipelineInputAssemblyStateCreateInfo(device); - pipeline = device.GetLogical().CreateGraphicsPipeline({ + pipeline = device.GetLogical().CreateGraphicsPipeline(VkGraphicsPipelineCreateInfo{ .sType = VK_STRUCTURE_TYPE_GRAPHICS_PIPELINE_CREATE_INFO, .pNext = nullptr, .flags = 0, @@ -1093,7 +1093,7 @@ void BlitImageHelper::ConvertPipelineEx(vk::Pipeline& pipeline, VkRenderPass ren } const std::array stages = MakeStages(*full_screen_vert, *module); const VkPipelineInputAssemblyStateCreateInfo input_assembly_ci = GetPipelineInputAssemblyStateCreateInfo(device); - pipeline = device.GetLogical().CreateGraphicsPipeline({ + pipeline = device.GetLogical().CreateGraphicsPipeline(VkGraphicsPipelineCreateInfo{ .sType = VK_STRUCTURE_TYPE_GRAPHICS_PIPELINE_CREATE_INFO, .pNext = nullptr, .flags = 0, @@ -1135,7 +1135,7 @@ void BlitImageHelper::ConvertPipeline(vk::Pipeline& pipeline, VkRenderPass rende is_target_depth ? *convert_float_to_depth_frag : *convert_depth_to_float_frag; const std::array stages = MakeStages(*full_screen_vert, frag_shader); const VkPipelineInputAssemblyStateCreateInfo input_assembly_ci = GetPipelineInputAssemblyStateCreateInfo(device); - pipeline = device.GetLogical().CreateGraphicsPipeline({ + pipeline = device.GetLogical().CreateGraphicsPipeline(VkGraphicsPipelineCreateInfo{ .sType = VK_STRUCTURE_TYPE_GRAPHICS_PIPELINE_CREATE_INFO, .pNext = nullptr, .flags = 0, diff --git a/src/video_core/renderer_vulkan/renderer_vulkan.cpp b/src/video_core/renderer_vulkan/renderer_vulkan.cpp index d1e607e75f..cb1b1a5362 100644 --- a/src/video_core/renderer_vulkan/renderer_vulkan.cpp +++ b/src/video_core/renderer_vulkan/renderer_vulkan.cpp @@ -137,14 +137,8 @@ try memory_allocator, scheduler, swapchain, -#ifdef ANDROID - surface) - , -#else *surface) - , -#endif - blit_swapchain(device_memory, + , blit_swapchain(device_memory, device, memory_allocator, present_manager, diff --git a/src/video_core/renderer_vulkan/vk_compute_pass.cpp b/src/video_core/renderer_vulkan/vk_compute_pass.cpp index 22e646afe9..d45a57f7bb 100644 --- a/src/video_core/renderer_vulkan/vk_compute_pass.cpp +++ b/src/video_core/renderer_vulkan/vk_compute_pass.cpp @@ -285,7 +285,7 @@ ComputePass::ComputePass(const Device& device_, DescriptorPool& descriptor_pool, .requiredSubgroupSize = optional_subgroup_size ? *optional_subgroup_size : 32U, }; bool use_setup_size = device.IsExtSubgroupSizeControlSupported() && optional_subgroup_size; - pipeline = device.GetLogical().CreateComputePipeline({ + pipeline = device.GetLogical().CreateComputePipeline(VkComputePipelineCreateInfo{ .sType = VK_STRUCTURE_TYPE_COMPUTE_PIPELINE_CREATE_INFO, .pNext = nullptr, .flags = 0, @@ -299,7 +299,7 @@ ComputePass::ComputePass(const Device& device_, DescriptorPool& descriptor_pool, .pSpecializationInfo = nullptr, }, .layout = *layout, - .basePipelineHandle = nullptr, + .basePipelineHandle = {}, .basePipelineIndex = 0, }); } @@ -944,7 +944,7 @@ MSAACopyPass::MSAACopyPass(const Device& device_, Scheduler& scheduler_, .codeSize = static_cast(code.size_bytes()), .pCode = code.data(), }); - pipelines[i] = device.GetLogical().CreateComputePipeline({ + pipelines[i] = device.GetLogical().CreateComputePipeline(VkComputePipelineCreateInfo{ .sType = VK_STRUCTURE_TYPE_COMPUTE_PIPELINE_CREATE_INFO, .pNext = nullptr, .flags = 0, @@ -958,7 +958,7 @@ MSAACopyPass::MSAACopyPass(const Device& device_, Scheduler& scheduler_, .pSpecializationInfo = nullptr, }, .layout = *layout, - .basePipelineHandle = nullptr, + .basePipelineHandle = {}, .basePipelineIndex = 0, }); }; diff --git a/src/video_core/renderer_vulkan/vk_compute_pipeline.cpp b/src/video_core/renderer_vulkan/vk_compute_pipeline.cpp index 6a6fe2b830..1a62324c95 100644 --- a/src/video_core/renderer_vulkan/vk_compute_pipeline.cpp +++ b/src/video_core/renderer_vulkan/vk_compute_pipeline.cpp @@ -67,26 +67,24 @@ ComputePipeline::ComputePipeline(const Device& device_, vk::PipelineCache& pipel if (device.IsKhrPipelineExecutablePropertiesEnabled() && Settings::values.renderer_debug.GetValue()) { flags |= VK_PIPELINE_CREATE_CAPTURE_STATISTICS_BIT_KHR; } - pipeline = device.GetLogical().CreateComputePipeline( - { - .sType = VK_STRUCTURE_TYPE_COMPUTE_PIPELINE_CREATE_INFO, - .pNext = nullptr, - .flags = flags, - .stage{ - .sType = VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO, - .pNext = - device.IsExtSubgroupSizeControlSupported() ? &subgroup_size_ci : nullptr, - .flags = 0, - .stage = VK_SHADER_STAGE_COMPUTE_BIT, - .module = *spv_module, - .pName = "main", - .pSpecializationInfo = nullptr, - }, - .layout = *pipeline_layout, - .basePipelineHandle = 0, - .basePipelineIndex = 0, + pipeline = device.GetLogical().CreateComputePipeline(VkComputePipelineCreateInfo{ + .sType = VK_STRUCTURE_TYPE_COMPUTE_PIPELINE_CREATE_INFO, + .pNext = nullptr, + .flags = flags, + .stage{ + .sType = VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO, + .pNext = + device.IsExtSubgroupSizeControlSupported() ? &subgroup_size_ci : nullptr, + .flags = 0, + .stage = VK_SHADER_STAGE_COMPUTE_BIT, + .module = *spv_module, + .pName = "main", + .pSpecializationInfo = nullptr, }, - *pipeline_cache); + .layout = *pipeline_layout, + .basePipelineHandle = 0, + .basePipelineIndex = 0, + }, *pipeline_cache); // Log compute pipeline creation if (Settings::values.gpu_logging_enabled.GetValue()) { diff --git a/src/video_core/renderer_vulkan/vk_graphics_pipeline.cpp b/src/video_core/renderer_vulkan/vk_graphics_pipeline.cpp index 5b11a34232..e989bf6b31 100644 --- a/src/video_core/renderer_vulkan/vk_graphics_pipeline.cpp +++ b/src/video_core/renderer_vulkan/vk_graphics_pipeline.cpp @@ -946,29 +946,27 @@ void GraphicsPipeline::MakePipeline(VkRenderPass render_pass) { flags |= VK_PIPELINE_CREATE_CAPTURE_STATISTICS_BIT_KHR; } - pipeline = device.GetLogical().CreateGraphicsPipeline( - { - .sType = VK_STRUCTURE_TYPE_GRAPHICS_PIPELINE_CREATE_INFO, - .pNext = nullptr, - .flags = flags, - .stageCount = static_cast(shader_stages.size()), - .pStages = shader_stages.data(), - .pVertexInputState = &vertex_input_ci, - .pInputAssemblyState = &input_assembly_ci, - .pTessellationState = &tessellation_ci, - .pViewportState = &viewport_ci, - .pRasterizationState = &rasterization_ci, - .pMultisampleState = &multisample_ci, - .pDepthStencilState = &depth_stencil_ci, - .pColorBlendState = &color_blend_ci, - .pDynamicState = &dynamic_state_ci, - .layout = *pipeline_layout, - .renderPass = render_pass, - .subpass = 0, - .basePipelineHandle = nullptr, - .basePipelineIndex = 0, - }, - *pipeline_cache); + pipeline = device.GetLogical().CreateGraphicsPipeline({ + .sType = VK_STRUCTURE_TYPE_GRAPHICS_PIPELINE_CREATE_INFO, + .pNext = nullptr, + .flags = flags, + .stageCount = static_cast(shader_stages.size()), + .pStages = shader_stages.data(), + .pVertexInputState = &vertex_input_ci, + .pInputAssemblyState = &input_assembly_ci, + .pTessellationState = &tessellation_ci, + .pViewportState = &viewport_ci, + .pRasterizationState = &rasterization_ci, + .pMultisampleState = &multisample_ci, + .pDepthStencilState = &depth_stencil_ci, + .pColorBlendState = &color_blend_ci, + .pDynamicState = &dynamic_state_ci, + .layout = *pipeline_layout, + .renderPass = render_pass, + .subpass = 0, + .basePipelineHandle = nullptr, + .basePipelineIndex = 0, + }, *pipeline_cache); // Log graphics pipeline creation if (Settings::values.gpu_logging_enabled.GetValue()) { diff --git a/src/video_core/renderer_vulkan/vk_present_manager.cpp b/src/video_core/renderer_vulkan/vk_present_manager.cpp index 3b5c2e3c01..aa019a4160 100644 --- a/src/video_core/renderer_vulkan/vk_present_manager.cpp +++ b/src/video_core/renderer_vulkan/vk_present_manager.cpp @@ -1,4 +1,4 @@ -// SPDX-FileCopyrightText: Copyright 2025 Eden Emulator Project +// SPDX-FileCopyrightText: Copyright 2026 Eden Emulator Project // SPDX-License-Identifier: GPL-3.0-or-later // SPDX-FileCopyrightText: Copyright 2023 yuzu Emulator Project @@ -101,22 +101,14 @@ PresentManager::PresentManager(const vk::Instance& instance_, MemoryAllocator& memory_allocator_, Scheduler& scheduler_, Swapchain& swapchain_, -#ifdef ANDROID - vk::SurfaceKHR& surface_) -#else - VkSurfaceKHR_T* surface_handle_) -#endif + VkSurfaceKHR_T* surface_) : instance{instance_} , render_window{render_window_} , device{device_} , memory_allocator{memory_allocator_} , scheduler{scheduler_} , swapchain{swapchain_} -#ifdef ANDROID , surface{surface_} -#else - , surface_handle{surface_handle_} -#endif , blit_supported{CanBlitToSwapchain(device.GetPhysical(), swapchain.GetImageViewFormat())} , use_present_thread{Settings::values.async_presentation.GetValue()} { @@ -299,11 +291,7 @@ void PresentManager::PresentThread(std::stop_token token) { } void PresentManager::RecreateSwapchain(Frame* frame) { -#ifndef ANDROID - swapchain.Create(surface_handle, frame->width, frame->height); // Pass raw pointer -#else - swapchain.Create(*surface, frame->width, frame->height); // Pass raw pointer -#endif + swapchain.Create(surface, frame->width, frame->height); // Pass raw pointer SetImageCount(); } @@ -322,7 +310,7 @@ void PresentManager::CopyToSwapchain(Frame* frame) { // Recreate surface and swapchain if needed. if (requires_recreation) { #ifdef ANDROID - surface = CreateSurface(instance, render_window.GetWindowInfo()); + surface = *CreateSurface(instance, render_window.GetWindowInfo()).address(); #endif RecreateSwapchain(frame); } diff --git a/src/video_core/renderer_vulkan/vk_present_manager.h b/src/video_core/renderer_vulkan/vk_present_manager.h index aacc9b025a..3d5cc32102 100644 --- a/src/video_core/renderer_vulkan/vk_present_manager.h +++ b/src/video_core/renderer_vulkan/vk_present_manager.h @@ -1,4 +1,4 @@ -// SPDX-FileCopyrightText: Copyright 2025 Eden Emulator Project +// SPDX-FileCopyrightText: Copyright 2026 Eden Emulator Project // SPDX-License-Identifier: GPL-3.0-or-later // SPDX-FileCopyrightText: Copyright 2023 yuzu Emulator Project @@ -15,8 +15,6 @@ #include "video_core/vulkan_common/vulkan_memory_allocator.h" #include "video_core/vulkan_common/vulkan_wrapper.h" -struct VkSurfaceKHR_T; - namespace Core::Frontend { class EmuWindow; } // namespace Core::Frontend @@ -46,11 +44,7 @@ public: MemoryAllocator& memory_allocator, Scheduler& scheduler, Swapchain& swapchain, -#ifdef ANDROID - vk::SurfaceKHR& surface); -#else - VkSurfaceKHR_T* surface_handle); -#endif + VkSurfaceKHR_T* surface); ~PresentManager(); /// Returns the last used presentation frame @@ -84,11 +78,7 @@ private: MemoryAllocator& memory_allocator; Scheduler& scheduler; Swapchain& swapchain; -#ifdef ANDROID - vk::SurfaceKHR& surface; -#else - VkSurfaceKHR_T* surface_handle; -#endif + VkSurfaceKHR_T* surface; vk::CommandPool cmdpool; std::vector frames; boost::container::deque present_queue; diff --git a/src/video_core/renderer_vulkan/vk_query_cache.cpp b/src/video_core/renderer_vulkan/vk_query_cache.cpp index 415259c72c..7cdb3acadd 100644 --- a/src/video_core/renderer_vulkan/vk_query_cache.cpp +++ b/src/video_core/renderer_vulkan/vk_query_cache.cpp @@ -1280,7 +1280,7 @@ void QueryCacheRuntime::EndHostConditionalRendering() { PauseHostConditionalRendering(); impl->hcr_is_set = false; impl->is_hcr_running = false; - impl->hcr_buffer = nullptr; + impl->hcr_buffer = VkBuffer{}; impl->hcr_offset = 0; } diff --git a/src/video_core/renderer_vulkan/vk_query_cache.h b/src/video_core/renderer_vulkan/vk_query_cache.h index b8dae9bc2d..e2aa4d991e 100644 --- a/src/video_core/renderer_vulkan/vk_query_cache.h +++ b/src/video_core/renderer_vulkan/vk_query_cache.h @@ -1,3 +1,6 @@ +// SPDX-FileCopyrightText: Copyright 2026 Eden Emulator Project +// SPDX-License-Identifier: GPL-3.0-or-later + // SPDX-FileCopyrightText: Copyright 2023 yuzu Emulator Project // SPDX-License-Identifier: GPL-3.0-or-later @@ -35,7 +38,7 @@ public: ~QueryCacheRuntime(); template - void SyncValues(std::span values, VkBuffer base_src_buffer = nullptr); + void SyncValues(std::span values, VkBuffer base_src_buffer = VkBuffer{}); void Barriers(bool is_prebarrier); diff --git a/src/video_core/renderer_vulkan/vk_scheduler.cpp b/src/video_core/renderer_vulkan/vk_scheduler.cpp index 0a032cdae0..947de6a80e 100644 --- a/src/video_core/renderer_vulkan/vk_scheduler.cpp +++ b/src/video_core/renderer_vulkan/vk_scheduler.cpp @@ -377,7 +377,7 @@ void Scheduler::EndRenderPass() VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT, 0, nullptr, nullptr, vk::Span(barriers.data(), num_images)); }); - state.renderpass = nullptr; + state.renderpass = VkRenderPass{}; num_renderpass_images = 0; } diff --git a/src/video_core/renderer_vulkan/vk_scheduler.h b/src/video_core/renderer_vulkan/vk_scheduler.h index 667f136ee6..00a912f2cd 100644 --- a/src/video_core/renderer_vulkan/vk_scheduler.h +++ b/src/video_core/renderer_vulkan/vk_scheduler.h @@ -44,10 +44,10 @@ public: ~Scheduler(); /// Sends the current execution context to the GPU. - u64 Flush(VkSemaphore signal_semaphore = nullptr, VkSemaphore wait_semaphore = nullptr); + u64 Flush(VkSemaphore signal_semaphore = {}, VkSemaphore wait_semaphore = {}); /// Sends the current execution context to the GPU and waits for it to complete. - void Finish(VkSemaphore signal_semaphore = nullptr, VkSemaphore wait_semaphore = nullptr); + void Finish(VkSemaphore signal_semaphore = {}, VkSemaphore wait_semaphore = {}); /// Waits for the worker thread to finish executing everything. After this function returns it's /// safe to touch worker resources. @@ -237,8 +237,8 @@ private: }; struct State { - VkRenderPass renderpass = nullptr; - VkFramebuffer framebuffer = nullptr; + VkRenderPass renderpass{}; + VkFramebuffer framebuffer{}; VkExtent2D render_area = {0, 0}; GraphicsPipeline* graphics_pipeline = nullptr; bool is_rescaling = false; diff --git a/src/video_core/renderer_vulkan/vk_swapchain.cpp b/src/video_core/renderer_vulkan/vk_swapchain.cpp index b89e981444..cd8f948d8b 100644 --- a/src/video_core/renderer_vulkan/vk_swapchain.cpp +++ b/src/video_core/renderer_vulkan/vk_swapchain.cpp @@ -109,38 +109,22 @@ VkCompositeAlphaFlagBitsKHR ChooseAlphaFlags(const VkSurfaceCapabilitiesKHR& cap } // Anonymous namespace Swapchain::Swapchain( -#ifdef ANDROID - VkSurfaceKHR surface_, -#else - VkSurfaceKHR_T* surface_handle_, -#endif + VkSurfaceKHR_T* surface_, const Device& device_, Scheduler& scheduler_, u32 width_, u32 height_) -#ifdef ANDROID : surface(surface_) -#else - : surface_handle{surface_handle_} -#endif , device{device_} , scheduler{scheduler_} { -#ifdef ANDROID Create(surface, width_, height_); -#else - Create(surface_handle, width_, height_); -#endif } Swapchain::~Swapchain() = default; void Swapchain::Create( -#ifdef ANDROID - VkSurfaceKHR surface_, -#else - VkSurfaceKHR_T* surface_handle_, -#endif + VkSurfaceKHR_T* surface_, u32 width_, u32 height_) { @@ -148,18 +132,10 @@ void Swapchain::Create( is_suboptimal = false; width = width_; height = height_; -#ifdef ANDROID surface = surface_; -#else - surface_handle = surface_handle_; -#endif const auto physical_device = device.GetPhysical(); -#ifdef ANDROID - const auto capabilities{physical_device.GetSurfaceCapabilitiesKHR(surface)}; -#else - const auto capabilities{physical_device.GetSurfaceCapabilitiesKHR(surface_handle)}; -#endif + const auto capabilities{physical_device.GetSurfaceCapabilitiesKHR(VkSurfaceKHR(surface))}; if (capabilities.maxImageExtent.width == 0 || capabilities.maxImageExtent.height == 0) { return; } @@ -254,14 +230,8 @@ void Swapchain::Present(VkSemaphore render_semaphore) { void Swapchain::CreateSwapchain(const VkSurfaceCapabilitiesKHR& capabilities) { const auto physical_device{device.GetPhysical()}; - -#ifdef ANDROID - const auto formats{physical_device.GetSurfaceFormatsKHR(surface)}; - const auto present_modes = physical_device.GetSurfacePresentModesKHR(surface); -#else - const auto formats{physical_device.GetSurfaceFormatsKHR(surface_handle)}; - const auto present_modes = physical_device.GetSurfacePresentModesKHR(surface_handle); -#endif + const auto formats{physical_device.GetSurfaceFormatsKHR(VkSurfaceKHR(surface))}; + const auto present_modes = physical_device.GetSurfacePresentModesKHR(VkSurfaceKHR(surface)); has_mailbox = std::find(present_modes.begin(), present_modes.end(), VK_PRESENT_MODE_MAILBOX_KHR) != present_modes.end(); @@ -290,11 +260,7 @@ void Swapchain::CreateSwapchain(const VkSurfaceCapabilitiesKHR& capabilities) { .sType = VK_STRUCTURE_TYPE_SWAPCHAIN_CREATE_INFO_KHR, .pNext = nullptr, .flags = 0, -#ifdef ANDROID - .surface = surface, -#else - .surface = surface_handle, -#endif + .surface = VkSurfaceKHR(surface), .minImageCount = requested_image_count, .imageFormat = surface_format.format, .imageColorSpace = surface_format.colorSpace, @@ -313,7 +279,7 @@ void Swapchain::CreateSwapchain(const VkSurfaceCapabilitiesKHR& capabilities) { .compositeAlpha = alpha_flags, .presentMode = present_mode, .clipped = VK_FALSE, - .oldSwapchain = nullptr, + .oldSwapchain = VkSwapchainKHR{}, }; const u32 graphics_family{device.GetGraphicsFamily()}; const u32 present_family{device.GetPresentFamily()}; @@ -345,11 +311,7 @@ void Swapchain::CreateSwapchain(const VkSurfaceCapabilitiesKHR& capabilities) { swapchain_ci.flags |= VK_SWAPCHAIN_CREATE_MUTABLE_FORMAT_BIT_KHR; } // Request the size again to reduce the possibility of a TOCTOU race condition. -#ifdef ANDROID - const auto updated_capabilities = physical_device.GetSurfaceCapabilitiesKHR(surface); -#else - const auto updated_capabilities = physical_device.GetSurfaceCapabilitiesKHR(surface_handle); -#endif + const auto updated_capabilities = physical_device.GetSurfaceCapabilitiesKHR(VkSurfaceKHR(surface)); swapchain_ci.imageExtent = ChooseSwapExtent(updated_capabilities, width, height); // Don't add code within this and the swapchain creation. swapchain = device.GetLogical().CreateSwapchainKHR(swapchain_ci); diff --git a/src/video_core/renderer_vulkan/vk_swapchain.h b/src/video_core/renderer_vulkan/vk_swapchain.h index 7e99bf8fa7..d926cc118a 100644 --- a/src/video_core/renderer_vulkan/vk_swapchain.h +++ b/src/video_core/renderer_vulkan/vk_swapchain.h @@ -1,4 +1,4 @@ -// SPDX-FileCopyrightText: Copyright 2025 Eden Emulator Project +// SPDX-FileCopyrightText: Copyright 2026 Eden Emulator Project // SPDX-License-Identifier: GPL-3.0-or-later // SPDX-FileCopyrightText: Copyright 2019 yuzu Emulator Project @@ -11,8 +11,6 @@ #include "common/common_types.h" #include "video_core/vulkan_common/vulkan_wrapper.h" -struct VkSurfaceKHR_T; - namespace Layout { struct FramebufferLayout; } @@ -25,11 +23,7 @@ class Scheduler; class Swapchain { public: explicit Swapchain( -#ifdef ANDROID - VkSurfaceKHR surface, -#else - VkSurfaceKHR_T* surface_handle, -#endif + VkSurfaceKHR_T* surface, const Device& device, Scheduler& scheduler, u32 width, @@ -38,11 +32,7 @@ public: /// Creates (or recreates) the swapchain with a given size. void Create( -#ifdef ANDROID - VkSurfaceKHR surface, -#else - VkSurfaceKHR_T* surface_handle, -#endif + VkSurfaceKHR_T* surface, u32 width, u32 height); @@ -128,11 +118,7 @@ private: bool NeedsPresentModeUpdate() const; -#ifdef ANDROID - VkSurfaceKHR surface; -#else - VkSurfaceKHR_T* surface_handle; -#endif + VkSurfaceKHR_T* surface; const Device& device; Scheduler& scheduler; diff --git a/src/video_core/vulkan_common/vulkan.h b/src/video_core/vulkan_common/vulkan.h index 8d2e8e2a37..2cc0f0d7f0 100644 --- a/src/video_core/vulkan_common/vulkan.h +++ b/src/video_core/vulkan_common/vulkan.h @@ -1,4 +1,4 @@ -// SPDX-FileCopyrightText: Copyright 2025 Eden Emulator Project +// SPDX-FileCopyrightText: Copyright 2026 Eden Emulator Project // SPDX-License-Identifier: GPL-3.0-or-later // SPDX-FileCopyrightText: Copyright 2023 yuzu Emulator Project @@ -40,3 +40,6 @@ #undef False #undef None #undef True + +// "Catch-all" handle for both Android and.. the rest of platforms +struct VkSurfaceKHR_T; diff --git a/src/video_core/vulkan_common/vulkan_device.cpp b/src/video_core/vulkan_common/vulkan_device.cpp index a2ff3ee6ed..b51c57d380 100644 --- a/src/video_core/vulkan_common/vulkan_device.cpp +++ b/src/video_core/vulkan_common/vulkan_device.cpp @@ -419,7 +419,7 @@ Device::Device(VkInstance instance_, vk::PhysicalDevice physical_, VkSurfaceKHR : instance{instance_}, dld{dld_}, physical{physical_}, format_properties(GetFormatProperties(physical)) { // Get suitability and device properties. - const bool is_suitable = GetSuitability(surface != nullptr); + const bool is_suitable = GetSuitability(surface != VkSurfaceKHR{}); const VkDriverId driver_id = properties.driver.driverID; diff --git a/src/video_core/vulkan_common/vulkan_surface.cpp b/src/video_core/vulkan_common/vulkan_surface.cpp index dc65d3960a..761b7759c8 100644 --- a/src/video_core/vulkan_common/vulkan_surface.cpp +++ b/src/video_core/vulkan_common/vulkan_surface.cpp @@ -15,7 +15,7 @@ vk::SurfaceKHR CreateSurface( const vk::Instance& instance, [[maybe_unused]] const Core::Frontend::EmuWindow::WindowSystemInfo& window_info) { [[maybe_unused]] const vk::InstanceDispatch& dld = instance.Dispatch(); - VkSurfaceKHR unsafe_surface = nullptr; + VkSurfaceKHR unsafe_surface = VkSurfaceKHR{}; #ifdef _WIN32 if (window_info.type == Core::Frontend::WindowSystemType::Windows) { diff --git a/src/video_core/vulkan_common/vulkan_wrapper.h b/src/video_core/vulkan_common/vulkan_wrapper.h index 5c04132f7b..872fbd858e 100644 --- a/src/video_core/vulkan_common/vulkan_wrapper.h +++ b/src/video_core/vulkan_common/vulkan_wrapper.h @@ -404,13 +404,13 @@ public: /// Construct a handle transferring the ownership from another handle. Handle(Handle&& rhs) noexcept - : handle{std::exchange(rhs.handle, nullptr)}, owner{rhs.owner}, dld{rhs.dld} {} + : handle{std::exchange(rhs.handle, Type{})}, owner{rhs.owner}, dld{rhs.dld} {} /// Assign the current handle transferring the ownership from another handle. /// Destroys any previously held object. Handle& operator=(Handle&& rhs) noexcept { Release(); - handle = std::exchange(rhs.handle, nullptr); + handle = std::exchange(rhs.handle, Type{}); owner = rhs.owner; dld = rhs.dld; return *this; @@ -424,7 +424,7 @@ public: /// Destroys any held object. void reset() noexcept { Release(); - handle = nullptr; + handle = Type{}; } /// Returns the address of the held object. @@ -440,7 +440,7 @@ public: /// Returns true when there's a held object. explicit operator bool() const noexcept { - return handle != nullptr; + return handle != Type{}; } #ifndef ANDROID @@ -455,7 +455,7 @@ public: #endif protected: - Type handle = nullptr; + Type handle{}; OwnerType owner = nullptr; const Dispatch* dld = nullptr; @@ -463,7 +463,7 @@ private: /// Destroys the held object if it exists. void Release() noexcept { if (handle) { - Destroy(owner, handle, *dld); + Destroy(OwnerType(owner), Type(handle), *dld); } } }; @@ -506,7 +506,7 @@ public: /// Destroys any held object. void reset() noexcept { Release(); - handle = nullptr; + handle = {}; } /// Returns the address of the held object. @@ -522,7 +522,7 @@ public: /// Returns true when there's a held object. explicit operator bool() const noexcept { - return handle != nullptr; + return handle != Type{}; } #ifndef ANDROID @@ -537,7 +537,7 @@ public: #endif protected: - Type handle = nullptr; + Type handle{}; const Dispatch* dld = nullptr; private: @@ -607,7 +607,7 @@ private: std::unique_ptr allocations; std::size_t num = 0; VkDevice device = nullptr; - PoolType pool = nullptr; + PoolType pool{}; const DeviceDispatch* dld = nullptr; }; @@ -669,12 +669,12 @@ public: Image& operator=(const Image&) = delete; Image(Image&& rhs) noexcept - : handle{std::exchange(rhs.handle, nullptr)}, usage{rhs.usage}, owner{rhs.owner}, + : handle{std::exchange(rhs.handle, VkImage{})}, usage{rhs.usage}, owner{rhs.owner}, allocator{rhs.allocator}, allocation{rhs.allocation}, dld{rhs.dld} {} Image& operator=(Image&& rhs) noexcept { Release(); - handle = std::exchange(rhs.handle, nullptr); + handle = std::exchange(rhs.handle, VkImage{}); usage = rhs.usage; owner = rhs.owner; allocator = rhs.allocator; @@ -693,11 +693,11 @@ public: void reset() noexcept { Release(); - handle = nullptr; + handle = VkImage{}; } explicit operator bool() const noexcept { - return handle != nullptr; + return handle != VkImage{}; } void SetObjectNameEXT(const char* name) const; @@ -709,7 +709,7 @@ public: private: void Release() const noexcept; - VkImage handle = nullptr; + VkImage handle{}; VkImageUsageFlags usage{}; VkDevice owner = nullptr; VmaAllocator allocator = nullptr; @@ -730,13 +730,13 @@ public: Buffer& operator=(const Buffer&) = delete; Buffer(Buffer&& rhs) noexcept - : handle{std::exchange(rhs.handle, nullptr)}, owner{rhs.owner}, allocator{rhs.allocator}, + : handle{std::exchange(rhs.handle, VkBuffer{})}, owner{rhs.owner}, allocator{rhs.allocator}, allocation{rhs.allocation}, mapped{rhs.mapped}, is_coherent{rhs.is_coherent}, dld{rhs.dld} {} Buffer& operator=(Buffer&& rhs) noexcept { Release(); - handle = std::exchange(rhs.handle, nullptr); + handle = std::exchange(rhs.handle, VkBuffer{}); owner = rhs.owner; allocator = rhs.allocator; allocation = rhs.allocation; @@ -756,11 +756,11 @@ public: void reset() noexcept { Release(); - handle = nullptr; + handle = VkBuffer{}; } explicit operator bool() const noexcept { - return handle != nullptr; + return handle != VkBuffer{}; } /// Returns the host mapped memory, an empty span otherwise. @@ -786,7 +786,7 @@ public: private: void Release() const noexcept; - VkBuffer handle = nullptr; + VkBuffer handle{}; VkDevice owner = nullptr; VmaAllocator allocator = nullptr; VmaAllocation allocation = nullptr; @@ -1020,10 +1020,10 @@ public: [[nodiscard]] PipelineLayout CreatePipelineLayout(const VkPipelineLayoutCreateInfo& ci) const; [[nodiscard]] Pipeline CreateGraphicsPipeline(const VkGraphicsPipelineCreateInfo& ci, - VkPipelineCache cache = nullptr) const; + VkPipelineCache cache = {}) const; [[nodiscard]] Pipeline CreateComputePipeline(const VkComputePipelineCreateInfo& ci, - VkPipelineCache cache = nullptr) const; + VkPipelineCache cache = {}) const; [[nodiscard]] Sampler CreateSampler(const VkSamplerCreateInfo& ci) const; From 529b0694995c84c51515022c52a66c67ceacdc65 Mon Sep 17 00:00:00 2001 From: xbzk Date: Thu, 5 Mar 2026 13:58:46 +0100 Subject: [PATCH 53/84] [android,ui] fixed top disalignment between buttons of each column in settings fragment (#3675) this silly little thing tickles obsessive compulsive disturbed fellas a lot hu3 was shipped along PR 3660, which was rediscussed for other reason, hence this tiny lonely PR. Reviewed-on: https://git.eden-emu.dev/eden-emu/eden/pulls/3675 Reviewed-by: DraVee Reviewed-by: MaranBr Co-authored-by: xbzk Co-committed-by: xbzk --- .../features/fetcher/SpacingItemDecoration.kt | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/fetcher/SpacingItemDecoration.kt b/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/fetcher/SpacingItemDecoration.kt index f3d000a739..b3ffcc2a35 100644 --- a/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/fetcher/SpacingItemDecoration.kt +++ b/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/fetcher/SpacingItemDecoration.kt @@ -1,10 +1,11 @@ -// SPDX-FileCopyrightText: Copyright 2025 Eden Emulator Project +// SPDX-FileCopyrightText: Copyright 2026 Eden Emulator Project // SPDX-License-Identifier: GPL-3.0-or-later package org.yuzu.yuzu_emu.features.fetcher import android.graphics.Rect import android.view.View +import androidx.recyclerview.widget.GridLayoutManager import androidx.recyclerview.widget.RecyclerView class SpacingItemDecoration(private val spacing: Int) : RecyclerView.ItemDecoration() { @@ -15,8 +16,20 @@ class SpacingItemDecoration(private val spacing: Int) : RecyclerView.ItemDecorat state: RecyclerView.State ) { outRect.bottom = spacing - if (parent.getChildAdapterPosition(view) == 0) { + + val position = parent.getChildAdapterPosition(view) + if (position == RecyclerView.NO_POSITION) return + + if (position == 0) { outRect.top = spacing + return + } + + // If the item is in the first row, but NOT in first column add top spacing as well + val layoutManager = parent.layoutManager + if (layoutManager is GridLayoutManager && layoutManager.spanSizeLookup.getSpanGroupIndex(position, layoutManager.spanCount) == 0) { + outRect.top = spacing + return } } } From 23566a1f7dc639946e6d3935f4951d4d2bce8461 Mon Sep 17 00:00:00 2001 From: MaranBr Date: Fri, 6 Mar 2026 15:02:59 +0100 Subject: [PATCH 54/84] [prepo] Add support for missing PlayReport commands (#3674) This fixes: `[ 433.095195] Debug core\hle\service\service.cpp:operator ():69: Assertion Failed! Unknown / unimplemented function '10107': port='prepo:u' cmd_buf={[0]=0x110006, [1]=0x80000014, [2]=0x1, [3]=0x0, [4]=0x0, [5]=0x191080, [6]=0x5A7350F8, [7]=0x112, [8]=0x5A735158}` Reviewed-on: https://git.eden-emu.dev/eden-emu/eden/pulls/3674 Reviewed-by: CamilleLaVey Reviewed-by: DraVee Reviewed-by: Maufeat Co-authored-by: MaranBr Co-committed-by: MaranBr --- src/core/hle/service/prepo/prepo.cpp | 8 +++++--- src/core/reporter.h | 4 ++++ 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/src/core/hle/service/prepo/prepo.cpp b/src/core/hle/service/prepo/prepo.cpp index 4fc59d0e10..bfc5539903 100644 --- a/src/core/hle/service/prepo/prepo.cpp +++ b/src/core/hle/service/prepo/prepo.cpp @@ -1,4 +1,4 @@ -// SPDX-FileCopyrightText: Copyright 2025 Eden Emulator Project +// SPDX-FileCopyrightText: Copyright 2026 Eden Emulator Project // SPDX-License-Identifier: GPL-3.0-or-later // SPDX-FileCopyrightText: Copyright 2018 yuzu Emulator Project @@ -28,8 +28,10 @@ public: {10101, &PlayReport::SaveReportWithUser, "SaveReportWithUserOld"}, {10102, &PlayReport::SaveReport, "SaveReportOld2"}, {10103, &PlayReport::SaveReportWithUser, "SaveReportWithUserOld2"}, - {10104, &PlayReport::SaveReport, "SaveReport"}, - {10105, &PlayReport::SaveReportWithUser, "SaveReportWithUser"}, + {10104, &PlayReport::SaveReport, "SaveReportOld3"}, + {10105, &PlayReport::SaveReportWithUser, "SaveReportWithUserOld3"}, + {10106, &PlayReport::SaveReport, "SaveReport"}, + {10107, &PlayReport::SaveReportWithUser, "SaveReportWithUser"}, {10200, &PlayReport::RequestImmediateTransmission, "RequestImmediateTransmission"}, {10300, &PlayReport::GetTransmissionStatus, "GetTransmissionStatus"}, {10400, &PlayReport::GetSystemSessionId, "GetSystemSessionId"}, diff --git a/src/core/reporter.h b/src/core/reporter.h index db1ca3ba0c..1eee8da31f 100644 --- a/src/core/reporter.h +++ b/src/core/reporter.h @@ -1,3 +1,6 @@ +// SPDX-FileCopyrightText: Copyright 2026 Eden Emulator Project +// SPDX-License-Identifier: GPL-3.0-or-later + // SPDX-FileCopyrightText: Copyright 2019 yuzu Emulator Project // SPDX-License-Identifier: GPL-2.0-or-later @@ -53,6 +56,7 @@ public: enum class PlayReportType { Old, Old2, + Old3, New, System, }; From c70b857c4f8324621c3d3f7dfe659856c8000878 Mon Sep 17 00:00:00 2001 From: lizzie Date: Fri, 6 Mar 2026 15:04:38 +0100 Subject: [PATCH 55/84] [video_core/engines] Macro HLE inline (#3653) Should slightly boost perf on android, Desktop is mainly unaffected (for now) Reviewed-on: https://git.eden-emu.dev/eden-emu/eden/pulls/3653 Reviewed-by: CamilleLaVey Reviewed-by: DraVee Co-authored-by: lizzie Co-committed-by: lizzie --- src/video_core/engines/maxwell_3d.cpp | 21 +- src/video_core/engines/maxwell_3d.h | 2 +- src/video_core/macro.cpp | 1103 ++++++++++--------------- src/video_core/macro.h | 166 +++- 4 files changed, 586 insertions(+), 706 deletions(-) diff --git a/src/video_core/engines/maxwell_3d.cpp b/src/video_core/engines/maxwell_3d.cpp index 7dbb8f6617..e48f294a5a 100644 --- a/src/video_core/engines/maxwell_3d.cpp +++ b/src/video_core/engines/maxwell_3d.cpp @@ -1,4 +1,4 @@ -// SPDX-FileCopyrightText: Copyright 2025 Eden Emulator Project +// SPDX-FileCopyrightText: Copyright 2026 Eden Emulator Project // SPDX-License-Identifier: GPL-3.0-or-later // SPDX-FileCopyrightText: Copyright 2018 yuzu Emulator Project @@ -26,8 +26,15 @@ namespace Tegra::Engines { constexpr u32 MacroRegistersStart = 0xE00; Maxwell3D::Maxwell3D(Core::System& system_, MemoryManager& memory_manager_) - : draw_manager{std::make_unique(this)}, system{system_}, - memory_manager{memory_manager_}, macro_engine{GetMacroEngine(*this)}, upload_state{memory_manager, regs.upload} { + : draw_manager{std::make_unique(this)}, system{system_} + , memory_manager{memory_manager_} +#ifdef ARCHITECTURE_x86_64 + , macro_engine(bool(Settings::values.disable_macro_jit)) +#else + , macro_engine(true) +#endif + , upload_state{memory_manager, regs.upload} +{ dirty.flags.flip(); InitializeRegisterDefaults(); execution_mask.reset(); @@ -328,9 +335,9 @@ void Maxwell3D::ProcessMethodCall(u32 method, u32 argument, u32 nonshadow_argume shadow_state.shadow_ram_control = static_cast(nonshadow_argument); return; case MAXWELL3D_REG_INDEX(load_mme.instruction_ptr): - return macro_engine->ClearCode(regs.load_mme.instruction_ptr); + return macro_engine.ClearCode(regs.load_mme.instruction_ptr); case MAXWELL3D_REG_INDEX(load_mme.instruction): - return macro_engine->AddCode(regs.load_mme.instruction_ptr, argument); + return macro_engine.AddCode(regs.load_mme.instruction_ptr, argument); case MAXWELL3D_REG_INDEX(load_mme.start_address): return ProcessMacroBind(argument); case MAXWELL3D_REG_INDEX(falcon[4]): @@ -398,7 +405,7 @@ void Maxwell3D::CallMacroMethod(u32 method, const std::vector& parameters) ((method - MacroRegistersStart) >> 1) % static_cast(macro_positions.size()); // Execute the current macro. - macro_engine->Execute(macro_positions[entry], parameters); + macro_engine.Execute(*this, macro_positions[entry], parameters); draw_manager->DrawDeferred(); } @@ -464,7 +471,7 @@ void Maxwell3D::CallMultiMethod(u32 method, const u32* base_start, u32 amount, } void Maxwell3D::ProcessMacroUpload(u32 data) { - macro_engine->AddCode(regs.load_mme.instruction_ptr++, data); + macro_engine.AddCode(regs.load_mme.instruction_ptr++, data); } void Maxwell3D::ProcessMacroBind(u32 data) { diff --git a/src/video_core/engines/maxwell_3d.h b/src/video_core/engines/maxwell_3d.h index 5312c04b6f..52546e4279 100644 --- a/src/video_core/engines/maxwell_3d.h +++ b/src/video_core/engines/maxwell_3d.h @@ -3203,7 +3203,7 @@ private: std::vector macro_params; /// Interpreter for the macro codes uploaded to the GPU. - std::optional macro_engine; + MacroEngine macro_engine; Upload::State upload_state; diff --git a/src/video_core/macro.cpp b/src/video_core/macro.cpp index 3fe69be4dd..0d1fe0a52b 100644 --- a/src/video_core/macro.cpp +++ b/src/video_core/macro.cpp @@ -1,4 +1,4 @@ -// SPDX-FileCopyrightText: Copyright 2025 Eden Emulator Project +// SPDX-FileCopyrightText: Copyright 2026 Eden Emulator Project // SPDX-License-Identifier: GPL-3.0-or-later // SPDX-FileCopyrightText: Copyright 2020 yuzu Emulator Project @@ -10,6 +10,7 @@ #include #include +#include #ifdef ARCHITECTURE_x86_64 // xbyak hates human beings #ifdef __GNUC__ @@ -73,601 +74,411 @@ bool IsTopologySafe(Maxwell3D::Regs::PrimitiveTopology topology) { } } -class HLEMacroImpl : public CachedMacro { -public: - explicit HLEMacroImpl(Maxwell3D& maxwell3d_) - : CachedMacro(maxwell3d_) - {} -}; +} // Anonymous namespace -/// @note: these macros have two versions, a normal and extended version, with the extended version -/// also assigning the base vertex/instance. -template -class HLE_DrawArraysIndirect final : public HLEMacroImpl { -public: - explicit HLE_DrawArraysIndirect(Maxwell3D& maxwell3d_) - : HLEMacroImpl(maxwell3d_) - {} - - void Execute(const std::vector& parameters, [[maybe_unused]] u32 method) override { - auto topology = static_cast(parameters[0]); - if (!maxwell3d.AnyParametersDirty() || !IsTopologySafe(topology)) { - Fallback(parameters); - return; - } - - auto& params = maxwell3d.draw_manager->GetIndirectParams(); - params.is_byte_count = false; - params.is_indexed = false; - params.include_count = false; - params.count_start_address = 0; - params.indirect_start_address = maxwell3d.GetMacroAddress(1); - params.buffer_size = 4 * sizeof(u32); - params.max_draw_counts = 1; - params.stride = 0; - - if (extended) { - maxwell3d.engine_state = Maxwell3D::EngineHint::OnHLEMacro; - maxwell3d.SetHLEReplacementAttributeType(0, 0x640, Maxwell3D::HLEReplacementAttributeType::BaseInstance); - } - - maxwell3d.draw_manager->DrawArrayIndirect(topology); - - if (extended) { - maxwell3d.engine_state = Maxwell3D::EngineHint::None; - maxwell3d.replace_table.clear(); - } +void HLE_DrawArraysIndirect::Execute(Engines::Maxwell3D& maxwell3d, std::span parameters, [[maybe_unused]] u32 method) { + auto topology = static_cast(parameters[0]); + if (!maxwell3d.AnyParametersDirty() || !IsTopologySafe(topology)) { + Fallback(maxwell3d, parameters); + return; } -private: - void Fallback(const std::vector& parameters) { - SCOPE_EXIT { - if (extended) { - maxwell3d.engine_state = Maxwell3D::EngineHint::None; - maxwell3d.replace_table.clear(); - } - }; - maxwell3d.RefreshParameters(); - const u32 instance_count = (maxwell3d.GetRegisterValue(0xD1B) & parameters[2]); + auto& params = maxwell3d.draw_manager->GetIndirectParams(); + params.is_byte_count = false; + params.is_indexed = false; + params.include_count = false; + params.count_start_address = 0; + params.indirect_start_address = maxwell3d.GetMacroAddress(1); + params.buffer_size = 4 * sizeof(u32); + params.max_draw_counts = 1; + params.stride = 0; - auto topology = static_cast(parameters[0]); - const u32 vertex_first = parameters[3]; - const u32 vertex_count = parameters[1]; - - if (!IsTopologySafe(topology) && size_t(maxwell3d.GetMaxCurrentVertices()) < size_t(vertex_first) + size_t(vertex_count)) { - ASSERT(false && "Faulty draw!"); - return; - } - - const u32 base_instance = parameters[4]; - if (extended) { - maxwell3d.regs.global_base_instance_index = base_instance; - maxwell3d.engine_state = Maxwell3D::EngineHint::OnHLEMacro; - maxwell3d.SetHLEReplacementAttributeType( - 0, 0x640, Maxwell3D::HLEReplacementAttributeType::BaseInstance); - } - - maxwell3d.draw_manager->DrawArray(topology, vertex_first, vertex_count, base_instance, - instance_count); - - if (extended) { - maxwell3d.regs.global_base_instance_index = 0; - maxwell3d.engine_state = Maxwell3D::EngineHint::None; - maxwell3d.replace_table.clear(); - } - } -}; - -/* - * @note: these macros have two versions, a normal and extended version, with the extended version - * also assigning the base vertex/instance. - */ -template -class HLE_DrawIndexedIndirect final : public HLEMacroImpl { -public: - explicit HLE_DrawIndexedIndirect(Maxwell3D& maxwell3d_) : HLEMacroImpl(maxwell3d_) {} - - void Execute(const std::vector& parameters, [[maybe_unused]] u32 method) override { - auto topology = static_cast(parameters[0]); - if (!maxwell3d.AnyParametersDirty() || !IsTopologySafe(topology)) { - Fallback(parameters); - return; - } - - const u32 estimate = static_cast(maxwell3d.EstimateIndexBufferSize()); - const u32 element_base = parameters[4]; - const u32 base_instance = parameters[5]; - maxwell3d.regs.vertex_id_base = element_base; - maxwell3d.regs.global_base_vertex_index = element_base; - maxwell3d.regs.global_base_instance_index = base_instance; - maxwell3d.dirty.flags[VideoCommon::Dirty::IndexBuffer] = true; - if (extended) { - maxwell3d.engine_state = Maxwell3D::EngineHint::OnHLEMacro; - maxwell3d.SetHLEReplacementAttributeType(0, 0x640, Maxwell3D::HLEReplacementAttributeType::BaseVertex); - maxwell3d.SetHLEReplacementAttributeType(0, 0x644, Maxwell3D::HLEReplacementAttributeType::BaseInstance); - } - auto& params = maxwell3d.draw_manager->GetIndirectParams(); - params.is_byte_count = false; - params.is_indexed = true; - params.include_count = false; - params.count_start_address = 0; - params.indirect_start_address = maxwell3d.GetMacroAddress(1); - params.buffer_size = 5 * sizeof(u32); - params.max_draw_counts = 1; - params.stride = 0; - maxwell3d.dirty.flags[VideoCommon::Dirty::IndexBuffer] = true; - maxwell3d.draw_manager->DrawIndexedIndirect(topology, 0, estimate); - maxwell3d.regs.vertex_id_base = 0x0; - maxwell3d.regs.global_base_vertex_index = 0x0; - maxwell3d.regs.global_base_instance_index = 0x0; - if (extended) { - maxwell3d.engine_state = Maxwell3D::EngineHint::None; - maxwell3d.replace_table.clear(); - } - } - -private: - void Fallback(const std::vector& parameters) { - maxwell3d.RefreshParameters(); - const u32 instance_count = (maxwell3d.GetRegisterValue(0xD1B) & parameters[2]); - const u32 element_base = parameters[4]; - const u32 base_instance = parameters[5]; - maxwell3d.regs.vertex_id_base = element_base; - maxwell3d.regs.global_base_vertex_index = element_base; - maxwell3d.regs.global_base_instance_index = base_instance; - maxwell3d.dirty.flags[VideoCommon::Dirty::IndexBuffer] = true; - if (extended) { - maxwell3d.engine_state = Maxwell3D::EngineHint::OnHLEMacro; - maxwell3d.SetHLEReplacementAttributeType(0, 0x640, Maxwell3D::HLEReplacementAttributeType::BaseVertex); - maxwell3d.SetHLEReplacementAttributeType(0, 0x644, Maxwell3D::HLEReplacementAttributeType::BaseInstance); - } - - maxwell3d.draw_manager->DrawIndex(Tegra::Maxwell3D::Regs::PrimitiveTopology(parameters[0]), parameters[3], parameters[1], element_base, base_instance, instance_count); - - maxwell3d.regs.vertex_id_base = 0x0; - maxwell3d.regs.global_base_vertex_index = 0x0; - maxwell3d.regs.global_base_instance_index = 0x0; - if (extended) { - maxwell3d.engine_state = Maxwell3D::EngineHint::None; - maxwell3d.replace_table.clear(); - } - } -}; - -class HLE_MultiLayerClear final : public HLEMacroImpl { -public: - explicit HLE_MultiLayerClear(Maxwell3D& maxwell3d_) : HLEMacroImpl(maxwell3d_) {} - - void Execute(const std::vector& parameters, [[maybe_unused]] u32 method) override { - maxwell3d.RefreshParameters(); - ASSERT(parameters.size() == 1); - - const Maxwell3D::Regs::ClearSurface clear_params{parameters[0]}; - const u32 rt_index = clear_params.RT; - const u32 num_layers = maxwell3d.regs.rt[rt_index].depth; - ASSERT(clear_params.layer == 0); - - maxwell3d.regs.clear_surface.raw = clear_params.raw; - maxwell3d.draw_manager->Clear(num_layers); - } -}; - -class HLE_MultiDrawIndexedIndirectCount final : public HLEMacroImpl { -public: - explicit HLE_MultiDrawIndexedIndirectCount(Maxwell3D& maxwell3d_) : HLEMacroImpl(maxwell3d_) {} - - void Execute(const std::vector& parameters, [[maybe_unused]] u32 method) override { - const auto topology = Maxwell3D::Regs::PrimitiveTopology(parameters[2]); - if (!IsTopologySafe(topology)) { - Fallback(parameters); - return; - } - - const u32 start_indirect = parameters[0]; - const u32 end_indirect = parameters[1]; - if (start_indirect >= end_indirect) { - // Nothing to do. - return; - } - - const u32 padding = parameters[3]; // padding is in words - - // size of each indirect segment - const u32 indirect_words = 5 + padding; - const u32 stride = indirect_words * sizeof(u32); - const std::size_t draw_count = end_indirect - start_indirect; - const u32 estimate = static_cast(maxwell3d.EstimateIndexBufferSize()); - maxwell3d.dirty.flags[VideoCommon::Dirty::IndexBuffer] = true; - auto& params = maxwell3d.draw_manager->GetIndirectParams(); - params.is_byte_count = false; - params.is_indexed = true; - params.include_count = true; - params.count_start_address = maxwell3d.GetMacroAddress(4); - params.indirect_start_address = maxwell3d.GetMacroAddress(5); - params.buffer_size = stride * draw_count; - params.max_draw_counts = draw_count; - params.stride = stride; - maxwell3d.dirty.flags[VideoCommon::Dirty::IndexBuffer] = true; + if (extended) { maxwell3d.engine_state = Maxwell3D::EngineHint::OnHLEMacro; - maxwell3d.SetHLEReplacementAttributeType( - 0, 0x640, Maxwell3D::HLEReplacementAttributeType::BaseVertex); - maxwell3d.SetHLEReplacementAttributeType( - 0, 0x644, Maxwell3D::HLEReplacementAttributeType::BaseInstance); - maxwell3d.SetHLEReplacementAttributeType(0, 0x648, - Maxwell3D::HLEReplacementAttributeType::DrawID); - maxwell3d.draw_manager->DrawIndexedIndirect(topology, 0, estimate); + maxwell3d.SetHLEReplacementAttributeType(0, 0x640, Maxwell3D::HLEReplacementAttributeType::BaseInstance); + } + + maxwell3d.draw_manager->DrawArrayIndirect(topology); + + if (extended) { maxwell3d.engine_state = Maxwell3D::EngineHint::None; maxwell3d.replace_table.clear(); } - -private: - void Fallback(const std::vector& parameters) { - SCOPE_EXIT { - // Clean everything. - maxwell3d.regs.vertex_id_base = 0x0; +} +void HLE_DrawArraysIndirect::Fallback(Engines::Maxwell3D& maxwell3d, std::span parameters) { + SCOPE_EXIT { + if (extended) { maxwell3d.engine_state = Maxwell3D::EngineHint::None; maxwell3d.replace_table.clear(); - }; - maxwell3d.RefreshParameters(); - const u32 start_indirect = parameters[0]; - const u32 end_indirect = parameters[1]; - if (start_indirect >= end_indirect) { - // Nothing to do. - return; - } - const auto topology = static_cast(parameters[2]); - const u32 padding = parameters[3]; - const std::size_t max_draws = parameters[4]; - - const u32 indirect_words = 5 + padding; - const std::size_t first_draw = start_indirect; - const std::size_t effective_draws = end_indirect - start_indirect; - const std::size_t last_draw = start_indirect + (std::min)(effective_draws, max_draws); - - for (std::size_t index = first_draw; index < last_draw; index++) { - const std::size_t base = index * indirect_words + 5; - const u32 base_vertex = parameters[base + 3]; - const u32 base_instance = parameters[base + 4]; - maxwell3d.regs.vertex_id_base = base_vertex; - maxwell3d.engine_state = Maxwell3D::EngineHint::OnHLEMacro; - maxwell3d.SetHLEReplacementAttributeType( - 0, 0x640, Maxwell3D::HLEReplacementAttributeType::BaseVertex); - maxwell3d.SetHLEReplacementAttributeType( - 0, 0x644, Maxwell3D::HLEReplacementAttributeType::BaseInstance); - maxwell3d.CallMethod(0x8e3, 0x648, true); - maxwell3d.CallMethod(0x8e4, static_cast(index), true); - maxwell3d.dirty.flags[VideoCommon::Dirty::IndexBuffer] = true; - maxwell3d.draw_manager->DrawIndex(topology, parameters[base + 2], parameters[base], - base_vertex, base_instance, parameters[base + 1]); } + }; + maxwell3d.RefreshParameters(); + const u32 instance_count = (maxwell3d.GetRegisterValue(0xD1B) & parameters[2]); + auto topology = Maxwell3D::Regs::PrimitiveTopology(parameters[0]); + const u32 vertex_first = parameters[3]; + const u32 vertex_count = parameters[1]; + if (!IsTopologySafe(topology) && size_t(maxwell3d.GetMaxCurrentVertices()) < size_t(vertex_first) + size_t(vertex_count)) { + ASSERT(false && "Faulty draw!"); + return; } -}; - -class HLE_DrawIndirectByteCount final : public HLEMacroImpl { -public: - explicit HLE_DrawIndirectByteCount(Maxwell3D& maxwell3d_) : HLEMacroImpl(maxwell3d_) {} - - void Execute(const std::vector& parameters, [[maybe_unused]] u32 method) override { - const bool force = maxwell3d.Rasterizer().HasDrawTransformFeedback(); - - auto topology = static_cast(parameters[0] & 0xFFFFU); - if (!force && (!maxwell3d.AnyParametersDirty() || !IsTopologySafe(topology))) { - Fallback(parameters); - return; - } - auto& params = maxwell3d.draw_manager->GetIndirectParams(); - params.is_byte_count = true; - params.is_indexed = false; - params.include_count = false; - params.count_start_address = 0; - params.indirect_start_address = maxwell3d.GetMacroAddress(2); - params.buffer_size = 4; - params.max_draw_counts = 1; - params.stride = parameters[1]; - maxwell3d.regs.draw.begin = parameters[0]; - maxwell3d.regs.draw_auto_stride = parameters[1]; - maxwell3d.regs.draw_auto_byte_count = parameters[2]; - - maxwell3d.draw_manager->DrawArrayIndirect(topology); + const u32 base_instance = parameters[4]; + if (extended) { + maxwell3d.regs.global_base_instance_index = base_instance; + maxwell3d.engine_state = Maxwell3D::EngineHint::OnHLEMacro; + maxwell3d.SetHLEReplacementAttributeType(0, 0x640, Maxwell3D::HLEReplacementAttributeType::BaseInstance); } - -private: - void Fallback(const std::vector& parameters) { - maxwell3d.RefreshParameters(); - - maxwell3d.regs.draw.begin = parameters[0]; - maxwell3d.regs.draw_auto_stride = parameters[1]; - maxwell3d.regs.draw_auto_byte_count = parameters[2]; - - maxwell3d.draw_manager->DrawArray( - maxwell3d.regs.draw.topology, 0, - maxwell3d.regs.draw_auto_byte_count / maxwell3d.regs.draw_auto_stride, 0, 1); - } -}; - -class HLE_C713C83D8F63CCF3 final : public HLEMacroImpl { -public: - explicit HLE_C713C83D8F63CCF3(Maxwell3D& maxwell3d_) : HLEMacroImpl(maxwell3d_) {} - - void Execute(const std::vector& parameters, [[maybe_unused]] u32 method) override { - maxwell3d.RefreshParameters(); - const u32 offset = (parameters[0] & 0x3FFFFFFF) << 2; - const u32 address = maxwell3d.regs.shadow_scratch[24]; - auto& const_buffer = maxwell3d.regs.const_buffer; - const_buffer.size = 0x7000; - const_buffer.address_high = (address >> 24) & 0xFF; - const_buffer.address_low = address << 8; - const_buffer.offset = offset; - } -}; - -class HLE_D7333D26E0A93EDE final : public HLEMacroImpl { -public: - explicit HLE_D7333D26E0A93EDE(Maxwell3D& maxwell3d_) : HLEMacroImpl(maxwell3d_) {} - - void Execute(const std::vector& parameters, [[maybe_unused]] u32 method) override { - maxwell3d.RefreshParameters(); - const size_t index = parameters[0]; - const u32 address = maxwell3d.regs.shadow_scratch[42 + index]; - const u32 size = maxwell3d.regs.shadow_scratch[47 + index]; - auto& const_buffer = maxwell3d.regs.const_buffer; - const_buffer.size = size; - const_buffer.address_high = (address >> 24) & 0xFF; - const_buffer.address_low = address << 8; - } -}; - -class HLE_BindShader final : public HLEMacroImpl { -public: - explicit HLE_BindShader(Maxwell3D& maxwell3d_) : HLEMacroImpl(maxwell3d_) {} - - void Execute(const std::vector& parameters, [[maybe_unused]] u32 method) override { - maxwell3d.RefreshParameters(); - auto& regs = maxwell3d.regs; - const u32 index = parameters[0]; - if ((parameters[1] - regs.shadow_scratch[28 + index]) == 0) { - return; - } - - regs.pipelines[index & 0xF].offset = parameters[2]; - maxwell3d.dirty.flags[VideoCommon::Dirty::Shaders] = true; - regs.shadow_scratch[28 + index] = parameters[1]; - regs.shadow_scratch[34 + index] = parameters[2]; - - const u32 address = parameters[4]; - auto& const_buffer = regs.const_buffer; - const_buffer.size = 0x10000; - const_buffer.address_high = (address >> 24) & 0xFF; - const_buffer.address_low = address << 8; - - const size_t bind_group_id = parameters[3] & 0x7F; - auto& bind_group = regs.bind_groups[bind_group_id]; - bind_group.raw_config = 0x11; - maxwell3d.ProcessCBBind(bind_group_id); - } -}; - -class HLE_SetRasterBoundingBox final : public HLEMacroImpl { -public: - explicit HLE_SetRasterBoundingBox(Maxwell3D& maxwell3d_) : HLEMacroImpl(maxwell3d_) {} - - void Execute(const std::vector& parameters, [[maybe_unused]] u32 method) override { - maxwell3d.RefreshParameters(); - const u32 raster_mode = parameters[0]; - auto& regs = maxwell3d.regs; - const u32 raster_enabled = maxwell3d.regs.conservative_raster_enable; - const u32 scratch_data = maxwell3d.regs.shadow_scratch[52]; - regs.raster_bounding_box.raw = raster_mode & 0xFFFFF00F; - regs.raster_bounding_box.pad.Assign(scratch_data & raster_enabled); - } -}; - -template -class HLE_ClearConstBuffer final : public HLEMacroImpl { -public: - explicit HLE_ClearConstBuffer(Maxwell3D& maxwell3d_) : HLEMacroImpl(maxwell3d_) {} - - void Execute(const std::vector& parameters, [[maybe_unused]] u32 method) override { - maxwell3d.RefreshParameters(); - static constexpr std::array zeroes{}; - auto& regs = maxwell3d.regs; - regs.const_buffer.size = u32(base_size); - regs.const_buffer.address_high = parameters[0]; - regs.const_buffer.address_low = parameters[1]; - regs.const_buffer.offset = 0; - maxwell3d.ProcessCBMultiData(zeroes.data(), parameters[2] * 4); - } -}; - -class HLE_ClearMemory final : public HLEMacroImpl { -public: - explicit HLE_ClearMemory(Maxwell3D& maxwell3d_) : HLEMacroImpl(maxwell3d_) {} - - void Execute(const std::vector& parameters, [[maybe_unused]] u32 method) override { - maxwell3d.RefreshParameters(); - - const u32 needed_memory = parameters[2] / sizeof(u32); - if (needed_memory > zero_memory.size()) { - zero_memory.resize(needed_memory, 0); - } - auto& regs = maxwell3d.regs; - regs.upload.line_length_in = parameters[2]; - regs.upload.line_count = 1; - regs.upload.dest.address_high = parameters[0]; - regs.upload.dest.address_low = parameters[1]; - maxwell3d.CallMethod(size_t(MAXWELL3D_REG_INDEX(launch_dma)), 0x1011, true); - maxwell3d.CallMultiMethod(size_t(MAXWELL3D_REG_INDEX(inline_data)), zero_memory.data(), needed_memory, needed_memory); - } - -private: - std::vector zero_memory; -}; - -class HLE_TransformFeedbackSetup final : public HLEMacroImpl { -public: - explicit HLE_TransformFeedbackSetup(Maxwell3D& maxwell3d_) : HLEMacroImpl(maxwell3d_) {} - - void Execute(const std::vector& parameters, [[maybe_unused]] u32 method) override { - maxwell3d.RefreshParameters(); - - auto& regs = maxwell3d.regs; - regs.transform_feedback_enabled = 1; - regs.transform_feedback.buffers[0].start_offset = 0; - regs.transform_feedback.buffers[1].start_offset = 0; - regs.transform_feedback.buffers[2].start_offset = 0; - regs.transform_feedback.buffers[3].start_offset = 0; - - regs.upload.line_length_in = 4; - regs.upload.line_count = 1; - regs.upload.dest.address_high = parameters[0]; - regs.upload.dest.address_low = parameters[1]; - maxwell3d.CallMethod(size_t(MAXWELL3D_REG_INDEX(launch_dma)), 0x1011, true); - maxwell3d.CallMethod(size_t(MAXWELL3D_REG_INDEX(inline_data)), regs.transform_feedback.controls[0].stride, true); - - maxwell3d.Rasterizer().RegisterTransformFeedback(regs.upload.dest.Address()); - } -}; - -} // Anonymous namespace - -HLEMacro::HLEMacro(Maxwell3D& maxwell3d_) : maxwell3d{maxwell3d_} {} - -HLEMacro::~HLEMacro() = default; - -std::unique_ptr HLEMacro::GetHLEProgram(u64 hash) const { - // Compiler will make you a GREAT job at making an ad-hoc hash table :) - switch (hash) { - case 0x0D61FC9FAAC9FCADULL: return std::make_unique>(maxwell3d); - case 0x8A4D173EB99A8603ULL: return std::make_unique>(maxwell3d); - case 0x771BB18C62444DA0ULL: return std::make_unique>(maxwell3d); - case 0x0217920100488FF7ULL: return std::make_unique>(maxwell3d); - case 0x3F5E74B9C9A50164ULL: return std::make_unique(maxwell3d); - case 0xEAD26C3E2109B06BULL: return std::make_unique(maxwell3d); - case 0xC713C83D8F63CCF3ULL: return std::make_unique(maxwell3d); - case 0xD7333D26E0A93EDEULL: return std::make_unique(maxwell3d); - case 0xEB29B2A09AA06D38ULL: return std::make_unique(maxwell3d); - case 0xDB1341DBEB4C8AF7ULL: return std::make_unique(maxwell3d); - case 0x6C97861D891EDf7EULL: return std::make_unique>(maxwell3d); - case 0xD246FDDF3A6173D7ULL: return std::make_unique>(maxwell3d); - case 0xEE4D0004BEC8ECF4ULL: return std::make_unique(maxwell3d); - case 0xFC0CF27F5FFAA661ULL: return std::make_unique(maxwell3d); - case 0xB5F74EDB717278ECULL: return std::make_unique(maxwell3d); - default: - return nullptr; + maxwell3d.draw_manager->DrawArray(topology, vertex_first, vertex_count, base_instance, instance_count); + if (extended) { + maxwell3d.regs.global_base_instance_index = 0; + maxwell3d.engine_state = Maxwell3D::EngineHint::None; + maxwell3d.replace_table.clear(); } } -namespace { -class MacroInterpreterImpl final : public CachedMacro { -public: - explicit MacroInterpreterImpl(Engines::Maxwell3D& maxwell3d_, const std::vector& code_) - : CachedMacro(maxwell3d_) - , code{code_} - {} +void HLE_DrawIndexedIndirect::Execute(Engines::Maxwell3D& maxwell3d, std::span parameters, [[maybe_unused]] u32 method) { + auto topology = static_cast(parameters[0]); + if (!maxwell3d.AnyParametersDirty() || !IsTopologySafe(topology)) { + Fallback(maxwell3d, parameters); + return; + } - void Execute(const std::vector& params, u32 method) override; + const u32 estimate = u32(maxwell3d.EstimateIndexBufferSize()); + const u32 element_base = parameters[4]; + const u32 base_instance = parameters[5]; + maxwell3d.regs.vertex_id_base = element_base; + maxwell3d.regs.global_base_vertex_index = element_base; + maxwell3d.regs.global_base_instance_index = base_instance; + maxwell3d.dirty.flags[VideoCommon::Dirty::IndexBuffer] = true; + if (extended) { + maxwell3d.engine_state = Maxwell3D::EngineHint::OnHLEMacro; + maxwell3d.SetHLEReplacementAttributeType(0, 0x640, Maxwell3D::HLEReplacementAttributeType::BaseVertex); + maxwell3d.SetHLEReplacementAttributeType(0, 0x644, Maxwell3D::HLEReplacementAttributeType::BaseInstance); + } + auto& params = maxwell3d.draw_manager->GetIndirectParams(); + params.is_byte_count = false; + params.is_indexed = true; + params.include_count = false; + params.count_start_address = 0; + params.indirect_start_address = maxwell3d.GetMacroAddress(1); + params.buffer_size = 5 * sizeof(u32); + params.max_draw_counts = 1; + params.stride = 0; + maxwell3d.dirty.flags[VideoCommon::Dirty::IndexBuffer] = true; + maxwell3d.draw_manager->DrawIndexedIndirect(topology, 0, estimate); + maxwell3d.regs.vertex_id_base = 0x0; + maxwell3d.regs.global_base_vertex_index = 0x0; + maxwell3d.regs.global_base_instance_index = 0x0; + if (extended) { + maxwell3d.engine_state = Maxwell3D::EngineHint::None; + maxwell3d.replace_table.clear(); + } +} +void HLE_DrawIndexedIndirect::Fallback(Engines::Maxwell3D& maxwell3d, std::span parameters) { + maxwell3d.RefreshParameters(); + const u32 instance_count = (maxwell3d.GetRegisterValue(0xD1B) & parameters[2]); + const u32 element_base = parameters[4]; + const u32 base_instance = parameters[5]; + maxwell3d.regs.vertex_id_base = element_base; + maxwell3d.regs.global_base_vertex_index = element_base; + maxwell3d.regs.global_base_instance_index = base_instance; + maxwell3d.dirty.flags[VideoCommon::Dirty::IndexBuffer] = true; + if (extended) { + maxwell3d.engine_state = Maxwell3D::EngineHint::OnHLEMacro; + maxwell3d.SetHLEReplacementAttributeType(0, 0x640, Maxwell3D::HLEReplacementAttributeType::BaseVertex); + maxwell3d.SetHLEReplacementAttributeType(0, 0x644, Maxwell3D::HLEReplacementAttributeType::BaseInstance); + } + maxwell3d.draw_manager->DrawIndex(Tegra::Maxwell3D::Regs::PrimitiveTopology(parameters[0]), parameters[3], parameters[1], element_base, base_instance, instance_count); + maxwell3d.regs.vertex_id_base = 0x0; + maxwell3d.regs.global_base_vertex_index = 0x0; + maxwell3d.regs.global_base_instance_index = 0x0; + if (extended) { + maxwell3d.engine_state = Maxwell3D::EngineHint::None; + maxwell3d.replace_table.clear(); + } +} +void HLE_MultiLayerClear::Execute(Engines::Maxwell3D& maxwell3d, std::span parameters, [[maybe_unused]] u32 method) { + maxwell3d.RefreshParameters(); + ASSERT(parameters.size() == 1); -private: - /// Resets the execution engine state, zeroing registers, etc. - void Reset(); + const Maxwell3D::Regs::ClearSurface clear_params{parameters[0]}; + const u32 rt_index = clear_params.RT; + const u32 num_layers = maxwell3d.regs.rt[rt_index].depth; + ASSERT(clear_params.layer == 0); - /** - * Executes a single macro instruction located at the current program counter. Returns whether - * the interpreter should keep running. - * - * @param is_delay_slot Whether the current step is being executed due to a delay slot in a - * previous instruction. - */ - bool Step(bool is_delay_slot); + maxwell3d.regs.clear_surface.raw = clear_params.raw; + maxwell3d.draw_manager->Clear(num_layers); +} +void HLE_MultiDrawIndexedIndirectCount::Execute(Engines::Maxwell3D& maxwell3d, std::span parameters, [[maybe_unused]] u32 method) { + const auto topology = Maxwell3D::Regs::PrimitiveTopology(parameters[2]); + if (!IsTopologySafe(topology)) { + Fallback(maxwell3d, parameters); + return; + } - /// Calculates the result of an ALU operation. src_a OP src_b; - u32 GetALUResult(Macro::ALUOperation operation, u32 src_a, u32 src_b); + const u32 start_indirect = parameters[0]; + const u32 end_indirect = parameters[1]; + if (start_indirect >= end_indirect) { + // Nothing to do. + return; + } - /// Performs the result operation on the input result and stores it in the specified register - /// (if necessary). - void ProcessResult(Macro::ResultOperation operation, u32 reg, u32 result); + const u32 padding = parameters[3]; // padding is in words - /// Evaluates the branch condition and returns whether the branch should be taken or not. - bool EvaluateBranchCondition(Macro::BranchCondition cond, u32 value) const; + // size of each indirect segment + const u32 indirect_words = 5 + padding; + const u32 stride = indirect_words * sizeof(u32); + const std::size_t draw_count = end_indirect - start_indirect; + const u32 estimate = static_cast(maxwell3d.EstimateIndexBufferSize()); + maxwell3d.dirty.flags[VideoCommon::Dirty::IndexBuffer] = true; + auto& params = maxwell3d.draw_manager->GetIndirectParams(); + params.is_byte_count = false; + params.is_indexed = true; + params.include_count = true; + params.count_start_address = maxwell3d.GetMacroAddress(4); + params.indirect_start_address = maxwell3d.GetMacroAddress(5); + params.buffer_size = stride * draw_count; + params.max_draw_counts = draw_count; + params.stride = stride; + maxwell3d.dirty.flags[VideoCommon::Dirty::IndexBuffer] = true; + maxwell3d.engine_state = Maxwell3D::EngineHint::OnHLEMacro; + maxwell3d.SetHLEReplacementAttributeType(0, 0x640, Maxwell3D::HLEReplacementAttributeType::BaseVertex); + maxwell3d.SetHLEReplacementAttributeType(0, 0x644, Maxwell3D::HLEReplacementAttributeType::BaseInstance); + maxwell3d.SetHLEReplacementAttributeType(0, 0x648, Maxwell3D::HLEReplacementAttributeType::DrawID); + maxwell3d.draw_manager->DrawIndexedIndirect(topology, 0, estimate); + maxwell3d.engine_state = Maxwell3D::EngineHint::None; + maxwell3d.replace_table.clear(); +} +void HLE_MultiDrawIndexedIndirectCount::Fallback(Engines::Maxwell3D& maxwell3d, std::span parameters) { + SCOPE_EXIT { + // Clean everything. + maxwell3d.regs.vertex_id_base = 0x0; + maxwell3d.engine_state = Maxwell3D::EngineHint::None; + maxwell3d.replace_table.clear(); + }; + maxwell3d.RefreshParameters(); + const u32 start_indirect = parameters[0]; + const u32 end_indirect = parameters[1]; + if (start_indirect >= end_indirect) { + // Nothing to do. + return; + } + const auto topology = static_cast(parameters[2]); + const u32 padding = parameters[3]; + const std::size_t max_draws = parameters[4]; + const u32 indirect_words = 5 + padding; + const std::size_t first_draw = start_indirect; + const std::size_t effective_draws = end_indirect - start_indirect; + const std::size_t last_draw = start_indirect + (std::min)(effective_draws, max_draws); + for (std::size_t index = first_draw; index < last_draw; index++) { + const std::size_t base = index * indirect_words + 5; + const u32 base_vertex = parameters[base + 3]; + const u32 base_instance = parameters[base + 4]; + maxwell3d.regs.vertex_id_base = base_vertex; + maxwell3d.engine_state = Maxwell3D::EngineHint::OnHLEMacro; + maxwell3d.SetHLEReplacementAttributeType(0, 0x640, Maxwell3D::HLEReplacementAttributeType::BaseVertex); + maxwell3d.SetHLEReplacementAttributeType(0, 0x644, Maxwell3D::HLEReplacementAttributeType::BaseInstance); + maxwell3d.CallMethod(0x8e3, 0x648, true); + maxwell3d.CallMethod(0x8e4, static_cast(index), true); + maxwell3d.dirty.flags[VideoCommon::Dirty::IndexBuffer] = true; + maxwell3d.draw_manager->DrawIndex(topology, parameters[base + 2], parameters[base], base_vertex, base_instance, parameters[base + 1]); + } +} +void HLE_DrawIndirectByteCount::Execute(Engines::Maxwell3D& maxwell3d, std::span parameters, [[maybe_unused]] u32 method) { + const bool force = maxwell3d.Rasterizer().HasDrawTransformFeedback(); + auto topology = Maxwell3D::Regs::PrimitiveTopology(parameters[0] & 0xFFFFU); + if (!force && (!maxwell3d.AnyParametersDirty() || !IsTopologySafe(topology))) { + Fallback(maxwell3d, parameters); + return; + } + auto& params = maxwell3d.draw_manager->GetIndirectParams(); + params.is_byte_count = true; + params.is_indexed = false; + params.include_count = false; + params.count_start_address = 0; + params.indirect_start_address = maxwell3d.GetMacroAddress(2); + params.buffer_size = 4; + params.max_draw_counts = 1; + params.stride = parameters[1]; + maxwell3d.regs.draw.begin = parameters[0]; + maxwell3d.regs.draw_auto_stride = parameters[1]; + maxwell3d.regs.draw_auto_byte_count = parameters[2]; + maxwell3d.draw_manager->DrawArrayIndirect(topology); +} +void HLE_DrawIndirectByteCount::Fallback(Engines::Maxwell3D& maxwell3d, std::span parameters) { + maxwell3d.RefreshParameters(); - /// Reads an opcode at the current program counter location. - Macro::Opcode GetOpcode() const; + maxwell3d.regs.draw.begin = parameters[0]; + maxwell3d.regs.draw_auto_stride = parameters[1]; + maxwell3d.regs.draw_auto_byte_count = parameters[2]; - /// Returns the specified register's value. Register 0 is hardcoded to always return 0. - u32 GetRegister(u32 register_id) const; + maxwell3d.draw_manager->DrawArray( + maxwell3d.regs.draw.topology, 0, + maxwell3d.regs.draw_auto_byte_count / maxwell3d.regs.draw_auto_stride, 0, 1); +} +void HLE_C713C83D8F63CCF3::Execute(Engines::Maxwell3D& maxwell3d, std::span parameters, [[maybe_unused]] u32 method) { + maxwell3d.RefreshParameters(); + const u32 offset = (parameters[0] & 0x3FFFFFFF) << 2; + const u32 address = maxwell3d.regs.shadow_scratch[24]; + auto& const_buffer = maxwell3d.regs.const_buffer; + const_buffer.size = 0x7000; + const_buffer.address_high = (address >> 24) & 0xFF; + const_buffer.address_low = address << 8; + const_buffer.offset = offset; +} +void HLE_D7333D26E0A93EDE::Execute(Engines::Maxwell3D& maxwell3d, std::span parameters, [[maybe_unused]] u32 method) { + maxwell3d.RefreshParameters(); + const size_t index = parameters[0]; + const u32 address = maxwell3d.regs.shadow_scratch[42 + index]; + const u32 size = maxwell3d.regs.shadow_scratch[47 + index]; + auto& const_buffer = maxwell3d.regs.const_buffer; + const_buffer.size = size; + const_buffer.address_high = (address >> 24) & 0xFF; + const_buffer.address_low = address << 8; +} +void HLE_BindShader::Execute(Engines::Maxwell3D& maxwell3d, std::span parameters, [[maybe_unused]] u32 method) { + maxwell3d.RefreshParameters(); + auto& regs = maxwell3d.regs; + const u32 index = parameters[0]; + if ((parameters[1] - regs.shadow_scratch[28 + index]) == 0) { + return; + } - /// Sets the register to the input value. - void SetRegister(u32 register_id, u32 value); + regs.pipelines[index & 0xF].offset = parameters[2]; + maxwell3d.dirty.flags[VideoCommon::Dirty::Shaders] = true; + regs.shadow_scratch[28 + index] = parameters[1]; + regs.shadow_scratch[34 + index] = parameters[2]; - /// Sets the method address to use for the next Send instruction. - void SetMethodAddress(u32 address); + const u32 address = parameters[4]; + auto& const_buffer = regs.const_buffer; + const_buffer.size = 0x10000; + const_buffer.address_high = (address >> 24) & 0xFF; + const_buffer.address_low = address << 8; - /// Calls a GPU Engine method with the input parameter. - void Send(u32 value); + const size_t bind_group_id = parameters[3] & 0x7F; + auto& bind_group = regs.bind_groups[bind_group_id]; + bind_group.raw_config = 0x11; + maxwell3d.ProcessCBBind(bind_group_id); +} +void HLE_SetRasterBoundingBox::Execute(Engines::Maxwell3D& maxwell3d, std::span parameters, [[maybe_unused]] u32 method) { + maxwell3d.RefreshParameters(); + const u32 raster_mode = parameters[0]; + auto& regs = maxwell3d.regs; + const u32 raster_enabled = maxwell3d.regs.conservative_raster_enable; + const u32 scratch_data = maxwell3d.regs.shadow_scratch[52]; + regs.raster_bounding_box.raw = raster_mode & 0xFFFFF00F; + regs.raster_bounding_box.pad.Assign(scratch_data & raster_enabled); +} +void HLE_ClearConstBuffer::Execute(Engines::Maxwell3D& maxwell3d, std::span parameters, [[maybe_unused]] u32 method) { + static constexpr std::array zeroes{}; //must be bigger than either 7000 or 5F00 + maxwell3d.RefreshParameters(); + auto& regs = maxwell3d.regs; + regs.const_buffer.size = u32(base_size); + regs.const_buffer.address_high = parameters[0]; + regs.const_buffer.address_low = parameters[1]; + regs.const_buffer.offset = 0; + maxwell3d.ProcessCBMultiData(zeroes.data(), parameters[2] * 4); +} +void HLE_ClearMemory::Execute(Engines::Maxwell3D& maxwell3d, std::span parameters, [[maybe_unused]] u32 method) { + maxwell3d.RefreshParameters(); + const u32 needed_memory = parameters[2] / sizeof(u32); + if (needed_memory > zero_memory.size()) { + zero_memory.resize(needed_memory, 0); + } + auto& regs = maxwell3d.regs; + regs.upload.line_length_in = parameters[2]; + regs.upload.line_count = 1; + regs.upload.dest.address_high = parameters[0]; + regs.upload.dest.address_low = parameters[1]; + maxwell3d.CallMethod(size_t(MAXWELL3D_REG_INDEX(launch_dma)), 0x1011, true); + maxwell3d.CallMultiMethod(size_t(MAXWELL3D_REG_INDEX(inline_data)), zero_memory.data(), needed_memory, needed_memory); +} +void HLE_TransformFeedbackSetup::Execute(Engines::Maxwell3D& maxwell3d, std::span parameters, [[maybe_unused]] u32 method) { + maxwell3d.RefreshParameters(); + auto& regs = maxwell3d.regs; + regs.transform_feedback_enabled = 1; + regs.transform_feedback.buffers[0].start_offset = 0; + regs.transform_feedback.buffers[1].start_offset = 0; + regs.transform_feedback.buffers[2].start_offset = 0; + regs.transform_feedback.buffers[3].start_offset = 0; + regs.upload.line_length_in = 4; + regs.upload.line_count = 1; + regs.upload.dest.address_high = parameters[0]; + regs.upload.dest.address_low = parameters[1]; + maxwell3d.CallMethod(size_t(MAXWELL3D_REG_INDEX(launch_dma)), 0x1011, true); + maxwell3d.CallMethod(size_t(MAXWELL3D_REG_INDEX(inline_data)), regs.transform_feedback.controls[0].stride, true); + maxwell3d.Rasterizer().RegisterTransformFeedback(regs.upload.dest.Address()); +} - /// Reads a GPU register located at the method address. - u32 Read(u32 method) const; +#define HLE_MACRO_LIST \ + HLE_MACRO_ELEM(0x0D61FC9FAAC9FCADULL, HLE_DrawArraysIndirect, (false)) \ + HLE_MACRO_ELEM(0x8A4D173EB99A8603ULL, HLE_DrawArraysIndirect, (true)) \ + HLE_MACRO_ELEM(0x771BB18C62444DA0ULL, HLE_DrawIndexedIndirect, (false)) \ + HLE_MACRO_ELEM(0x0217920100488FF7ULL, HLE_DrawIndexedIndirect, (true)) \ + HLE_MACRO_ELEM(0x3F5E74B9C9A50164ULL, HLE_MultiDrawIndexedIndirectCount, ()) \ + HLE_MACRO_ELEM(0xEAD26C3E2109B06BULL, HLE_MultiLayerClear, ()) \ + HLE_MACRO_ELEM(0xC713C83D8F63CCF3ULL, HLE_C713C83D8F63CCF3, ()) \ + HLE_MACRO_ELEM(0xD7333D26E0A93EDEULL, HLE_D7333D26E0A93EDE, ()) \ + HLE_MACRO_ELEM(0xEB29B2A09AA06D38ULL, HLE_BindShader, ()) \ + HLE_MACRO_ELEM(0xDB1341DBEB4C8AF7ULL, HLE_SetRasterBoundingBox, ()) \ + HLE_MACRO_ELEM(0x6C97861D891EDf7EULL, HLE_ClearConstBuffer, (0x5F00)) \ + HLE_MACRO_ELEM(0xD246FDDF3A6173D7ULL, HLE_ClearConstBuffer, (0x7000)) \ + HLE_MACRO_ELEM(0xEE4D0004BEC8ECF4ULL, HLE_ClearMemory, ()) \ + HLE_MACRO_ELEM(0xFC0CF27F5FFAA661ULL, HLE_TransformFeedbackSetup, ()) \ + HLE_MACRO_ELEM(0xB5F74EDB717278ECULL, HLE_DrawIndirectByteCount, ()) \ - /// Returns the next parameter in the parameter queue. - u32 FetchParameter(); +// Allocates and returns a cached macro if the hash matches a known function. +[[nodiscard]] inline AnyCachedMacro GetHLEProgram(u64 hash) noexcept { + // Compiler will make you a GREAT job at making an ad-hoc hash table :) + switch (hash) { +#define HLE_MACRO_ELEM(HASH, TY, VAL) case HASH: return TY VAL; + HLE_MACRO_LIST +#undef HLE_MACRO_ELEM + default: return std::monostate{}; + } +} +[[nodiscard]] inline bool CanBeHLEProgram(u64 hash) noexcept { + switch (hash) { +#define HLE_MACRO_ELEM(HASH, TY, VAL) case HASH: return true; + HLE_MACRO_LIST +#undef HLE_MACRO_ELEM + default: return false; + } +} - /// Current program counter - u32 pc{}; - /// Program counter to execute at after the delay slot is executed. - std::optional delayed_pc; - - /// General purpose macro registers. - std::array registers = {}; - - /// Method address to use for the next Send instruction. - Macro::MethodAddress method_address = {}; - - /// Input parameters of the current macro. - std::unique_ptr parameters; - std::size_t num_parameters = 0; - std::size_t parameters_capacity = 0; - /// Index of the next parameter that will be fetched by the 'parm' instruction. - u32 next_parameter_index = 0; - - bool carry_flag = false; - const std::vector& code; -}; - -void MacroInterpreterImpl::Execute(const std::vector& params, u32 method) { +void MacroInterpreterImpl::Execute(Engines::Maxwell3D& maxwell3d, std::span params, u32 method) { Reset(); registers[1] = params[0]; - num_parameters = params.size(); - - if (num_parameters > parameters_capacity) { - parameters_capacity = num_parameters; - parameters = std::make_unique(num_parameters); - } - std::memcpy(parameters.get(), params.data(), num_parameters * sizeof(u32)); + parameters.resize(params.size()); + std::memcpy(parameters.data(), params.data(), params.size() * sizeof(u32)); // Execute the code until we hit an exit condition. bool keep_executing = true; while (keep_executing) { - keep_executing = Step(false); + keep_executing = Step(maxwell3d, false); } // Assert the the macro used all the input parameters - ASSERT(next_parameter_index == num_parameters); + ASSERT(next_parameter_index == parameters.size()); } +/// Resets the execution engine state, zeroing registers, etc. void MacroInterpreterImpl::Reset() { registers = {}; pc = 0; delayed_pc = {}; method_address.raw = 0; - num_parameters = 0; + // Vector must hold its last indices otherwise wonky shit will happen // The next parameter index starts at 1, because $r1 already has the value of the first // parameter. next_parameter_index = 1; carry_flag = false; } -bool MacroInterpreterImpl::Step(bool is_delay_slot) { +/// @brief Executes a single macro instruction located at the current program counter. Returns whether +/// the interpreter should keep running. +/// @param is_delay_slot Whether the current step is being executed due to a delay slot in a previous instruction. +bool MacroInterpreterImpl::Step(Engines::Maxwell3D& maxwell3d, bool is_delay_slot) { u32 base_address = pc; Macro::Opcode opcode = GetOpcode(); @@ -682,14 +493,12 @@ bool MacroInterpreterImpl::Step(bool is_delay_slot) { switch (opcode.operation) { case Macro::Operation::ALU: { - u32 result = GetALUResult(opcode.alu_operation, GetRegister(opcode.src_a), - GetRegister(opcode.src_b)); - ProcessResult(opcode.result_operation, opcode.dst, result); + u32 result = GetALUResult(opcode.alu_operation, GetRegister(opcode.src_a), GetRegister(opcode.src_b)); + ProcessResult(maxwell3d, opcode.result_operation, opcode.dst, result); break; } case Macro::Operation::AddImmediate: { - ProcessResult(opcode.result_operation, opcode.dst, - GetRegister(opcode.src_a) + opcode.immediate); + ProcessResult(maxwell3d, opcode.result_operation, opcode.dst, GetRegister(opcode.src_a) + opcode.immediate); break; } case Macro::Operation::ExtractInsert: { @@ -699,7 +508,7 @@ bool MacroInterpreterImpl::Step(bool is_delay_slot) { src = (src >> opcode.bf_src_bit) & opcode.GetBitfieldMask(); dst &= ~(opcode.GetBitfieldMask() << opcode.bf_dst_bit); dst |= src << opcode.bf_dst_bit; - ProcessResult(opcode.result_operation, opcode.dst, dst); + ProcessResult(maxwell3d, opcode.result_operation, opcode.dst, dst); break; } case Macro::Operation::ExtractShiftLeftImmediate: { @@ -708,7 +517,7 @@ bool MacroInterpreterImpl::Step(bool is_delay_slot) { u32 result = ((src >> dst) & opcode.GetBitfieldMask()) << opcode.bf_dst_bit; - ProcessResult(opcode.result_operation, opcode.dst, result); + ProcessResult(maxwell3d, opcode.result_operation, opcode.dst, result); break; } case Macro::Operation::ExtractShiftLeftRegister: { @@ -717,12 +526,12 @@ bool MacroInterpreterImpl::Step(bool is_delay_slot) { u32 result = ((src >> opcode.bf_src_bit) & opcode.GetBitfieldMask()) << dst; - ProcessResult(opcode.result_operation, opcode.dst, result); + ProcessResult(maxwell3d, opcode.result_operation, opcode.dst, result); break; } case Macro::Operation::Read: { - u32 result = Read(GetRegister(opcode.src_a) + opcode.immediate); - ProcessResult(opcode.result_operation, opcode.dst, result); + u32 result = Read(maxwell3d, GetRegister(opcode.src_a) + opcode.immediate); + ProcessResult(maxwell3d, opcode.result_operation, opcode.dst, result); break; } case Macro::Operation::Branch: { @@ -738,7 +547,7 @@ bool MacroInterpreterImpl::Step(bool is_delay_slot) { delayed_pc = base_address + opcode.GetBranchTarget(); // Execute one more instruction due to the delay slot. - return Step(true); + return Step(maxwell3d, true); } break; } @@ -751,13 +560,13 @@ bool MacroInterpreterImpl::Step(bool is_delay_slot) { // cause an exit if it's executed inside a delay slot. if (opcode.is_exit && !is_delay_slot) { // Exit has a delay slot, execute the next instruction - Step(true); + Step(maxwell3d, true); return false; } - return true; } +/// Calculates the result of an ALU operation. src_a OP src_b; u32 MacroInterpreterImpl::GetALUResult(Macro::ALUOperation operation, u32 src_a, u32 src_b) { switch (operation) { case Macro::ALUOperation::Add: { @@ -797,7 +606,8 @@ u32 MacroInterpreterImpl::GetALUResult(Macro::ALUOperation operation, u32 src_a, } } -void MacroInterpreterImpl::ProcessResult(Macro::ResultOperation operation, u32 reg, u32 result) { +/// Performs the result operation on the input result and stores it in the specified register (if necessary). +void MacroInterpreterImpl::ProcessResult(Engines::Maxwell3D& maxwell3d, Macro::ResultOperation operation, u32 reg, u32 result) { switch (operation) { case Macro::ResultOperation::IgnoreAndFetch: // Fetch parameter and ignore result. @@ -815,12 +625,12 @@ void MacroInterpreterImpl::ProcessResult(Macro::ResultOperation operation, u32 r case Macro::ResultOperation::FetchAndSend: // Fetch parameter and send result. SetRegister(reg, FetchParameter()); - Send(result); + Send(maxwell3d, result); break; case Macro::ResultOperation::MoveAndSend: // Move and send result. SetRegister(reg, result); - Send(result); + Send(maxwell3d, result); break; case Macro::ResultOperation::FetchAndSetMethod: // Fetch parameter and use result as Method Address. @@ -831,13 +641,13 @@ void MacroInterpreterImpl::ProcessResult(Macro::ResultOperation operation, u32 r // Move result and use as Method Address, then fetch and send parameter. SetRegister(reg, result); SetMethodAddress(result); - Send(FetchParameter()); + Send(maxwell3d, FetchParameter()); break; case Macro::ResultOperation::MoveAndSetMethodSend: // Move result and use as Method Address, then send bits 12:17 of result. SetRegister(reg, result); SetMethodAddress(result); - Send((result >> 12) & 0b111111); + Send(maxwell3d, (result >> 12) & 0b111111); break; default: UNIMPLEMENTED_MSG("Unimplemented result operation {}", operation); @@ -845,6 +655,7 @@ void MacroInterpreterImpl::ProcessResult(Macro::ResultOperation operation, u32 r } } +/// Evaluates the branch condition and returns whether the branch should be taken or not. bool MacroInterpreterImpl::EvaluateBranchCondition(Macro::BranchCondition cond, u32 value) const { switch (cond) { case Macro::BranchCondition::Zero: @@ -855,46 +666,44 @@ bool MacroInterpreterImpl::EvaluateBranchCondition(Macro::BranchCondition cond, UNREACHABLE(); } +/// Reads an opcode at the current program counter location. Macro::Opcode MacroInterpreterImpl::GetOpcode() const { ASSERT((pc % sizeof(u32)) == 0); ASSERT(pc < code.size() * sizeof(u32)); return {code[pc / sizeof(u32)]}; } +/// Returns the specified register's value. Register 0 is hardcoded to always return 0. u32 MacroInterpreterImpl::GetRegister(u32 register_id) const { - return registers.at(register_id); + return registers[register_id]; } +/// Sets the register to the input value. void MacroInterpreterImpl::SetRegister(u32 register_id, u32 value) { // Register 0 is hardwired as the zero register. // Ensure no writes to it actually occur. - if (register_id == 0) { + if (register_id == 0) return; - } - - registers.at(register_id) = value; + registers[register_id] = value; } -void MacroInterpreterImpl::SetMethodAddress(u32 address) { - method_address.raw = address; -} - -void MacroInterpreterImpl::Send(u32 value) { +/// Calls a GPU Engine method with the input parameter. +void MacroInterpreterImpl::Send(Engines::Maxwell3D& maxwell3d, u32 value) { maxwell3d.CallMethod(method_address.address, value, true); // Increment the method address by the method increment. - method_address.address.Assign(method_address.address.Value() + - method_address.increment.Value()); + method_address.address.Assign(method_address.address.Value() + method_address.increment.Value()); } -u32 MacroInterpreterImpl::Read(u32 method) const { +/// Reads a GPU register located at the method address. +u32 MacroInterpreterImpl::Read(Engines::Maxwell3D& maxwell3d, u32 method) const { return maxwell3d.GetRegisterValue(method); } +/// Returns the next parameter in the parameter queue. u32 MacroInterpreterImpl::FetchParameter() { - ASSERT(next_parameter_index < num_parameters); + ASSERT(next_parameter_index < parameters.size()); return parameters[next_parameter_index++]; } -} // Anonymous namespace #ifdef ARCHITECTURE_x86_64 namespace { @@ -930,17 +739,15 @@ static const auto default_cg_mode = Xbyak::DontSetProtectRWE; static const auto default_cg_mode = nullptr; //Allow RWE #endif -class MacroJITx64Impl final : public Xbyak::CodeGenerator, public CachedMacro { -public: - explicit MacroJITx64Impl(Engines::Maxwell3D& maxwell3d_, const std::vector& code_) +struct MacroJITx64Impl final : public Xbyak::CodeGenerator, public DynamicCachedMacro { + explicit MacroJITx64Impl(std::span code_) : Xbyak::CodeGenerator(MAX_CODE_SIZE, default_cg_mode) - , CachedMacro(maxwell3d_) , code{code_} { Compile(); } - void Execute(const std::vector& parameters, u32 method) override; + void Execute(Engines::Maxwell3D& maxwell3d, std::span parameters, u32 method) override; void Compile_ALU(Macro::Opcode opcode); void Compile_AddImmediate(Macro::Opcode opcode); @@ -950,18 +757,13 @@ public: void Compile_Read(Macro::Opcode opcode); void Compile_Branch(Macro::Opcode opcode); -private: void Optimizer_ScanFlags(); - void Compile(); bool Compile_NextInstruction(); - Xbyak::Reg32 Compile_FetchParameter(); Xbyak::Reg32 Compile_GetRegister(u32 index, Xbyak::Reg32 dst); - void Compile_ProcessResult(Macro::ResultOperation operation, u32 reg); void Compile_Send(Xbyak::Reg32 value); - Macro::Opcode GetOpCode() const; struct JITState { @@ -981,21 +783,17 @@ private: bool enable_asserts{}; }; OptimizerState optimizer{}; - std::optional next_opcode{}; ProgramType program{nullptr}; - std::array labels; std::array delay_skip; Xbyak::Label end_of_code{}; - bool is_delay_slot{}; u32 pc{}; - - const std::vector& code; + std::span code; }; -void MacroJITx64Impl::Execute(const std::vector& parameters, u32 method) { +void MacroJITx64Impl::Execute(Engines::Maxwell3D& maxwell3d, std::span parameters, u32 method) { ASSERT_OR_EXECUTE(program != nullptr, { return; }); JITState state{}; state.maxwell3d = &maxwell3d; @@ -1231,7 +1029,7 @@ void MacroJITx64Impl::Compile_Read(Macro::Opcode opcode) { Compile_ProcessResult(opcode.result_operation, opcode.dst); } -void Send(Engines::Maxwell3D* maxwell3d, Macro::MethodAddress method_address, u32 value) { +static void MacroJIT_SendThunk(Engines::Maxwell3D* maxwell3d, Macro::MethodAddress method_address, u32 value) { maxwell3d->CallMethod(method_address.address, value, true); } @@ -1240,7 +1038,7 @@ void MacroJITx64Impl::Compile_Send(Xbyak::Reg32 value) { mov(Common::X64::ABI_PARAM1, qword[STATE]); mov(Common::X64::ABI_PARAM2.cvt32(), METHOD_ADDRESS); mov(Common::X64::ABI_PARAM3.cvt32(), value); - Common::X64::CallFarFunction(*this, &Send); + Common::X64::CallFarFunction(*this, &MacroJIT_SendThunk); Common::X64::ABI_PopRegistersAndAdjustStack(*this, PersistentCallerSavedRegs(), 0); Xbyak::Label dont_process{}; @@ -1452,10 +1250,8 @@ bool MacroJITx64Impl::Compile_NextInstruction() { return true; } -static void WarnInvalidParameter(uintptr_t parameter, uintptr_t max_parameter) { - LOG_CRITICAL(HW_GPU, - "Macro JIT: invalid parameter access 0x{:x} (0x{:x} is the last parameter)", - parameter, max_parameter - sizeof(u32)); +static void MacroJIT_ErrorThunk(uintptr_t parameter, uintptr_t max_parameter) { + LOG_CRITICAL(HW_GPU, "Macro JIT: invalid parameter access 0x{:x} (0x{:x} is the last parameter)", parameter, max_parameter - sizeof(u32)); } Xbyak::Reg32 MacroJITx64Impl::Compile_FetchParameter() { @@ -1465,7 +1261,7 @@ Xbyak::Reg32 MacroJITx64Impl::Compile_FetchParameter() { Common::X64::ABI_PushRegistersAndAdjustStack(*this, PersistentCallerSavedRegs(), 0); mov(Common::X64::ABI_PARAM1, PARAMETERS); mov(Common::X64::ABI_PARAM2, MAX_PARAMETER); - Common::X64::CallFarFunction(*this, &WarnInvalidParameter); + Common::X64::CallFarFunction(*this, &MacroJIT_ErrorThunk); Common::X64::ABI_PopRegistersAndAdjustStack(*this, PersistentCallerSavedRegs(), 0); L(parameter_ok); mov(eax, dword[PARAMETERS]); @@ -1574,33 +1370,42 @@ static void Dump(u64 hash, std::span code, bool decompiled = false) { macro_file.write(reinterpret_cast(code.data()), code.size_bytes()); } -MacroEngine::MacroEngine(Engines::Maxwell3D& maxwell3d_, bool is_interpreted_) - : hle_macros{std::make_optional(maxwell3d_)} - , maxwell3d{maxwell3d_} - , is_interpreted{is_interpreted_} -{} - -MacroEngine::~MacroEngine() = default; - -void MacroEngine::AddCode(u32 method, u32 data) { - uploaded_macro_code[method].push_back(data); -} - -void MacroEngine::ClearCode(u32 method) { - macro_cache.erase(method); - uploaded_macro_code.erase(method); -} - -void MacroEngine::Execute(u32 method, const std::vector& parameters) { - auto compiled_macro = macro_cache.find(method); - if (compiled_macro != macro_cache.end()) { - const auto& cache_info = compiled_macro->second; - if (cache_info.has_hle_program) { - cache_info.hle_program->Execute(parameters, method); - } else { - maxwell3d.RefreshParameters(); - cache_info.lle_program->Execute(parameters, method); - } +void MacroEngine::Execute(Engines::Maxwell3D& maxwell3d, u32 method, std::span parameters) { + auto const execute_variant = [&maxwell3d, ¶meters, method](AnyCachedMacro& acm) { + if (auto a = std::get_if(&acm)) + a->Execute(maxwell3d, parameters, method); + if (auto a = std::get_if(&acm)) + a->Execute(maxwell3d, parameters, method); + if (auto a = std::get_if(&acm)) + a->Execute(maxwell3d, parameters, method); + if (auto a = std::get_if(&acm)) + a->Execute(maxwell3d, parameters, method); + if (auto a = std::get_if(&acm)) + a->Execute(maxwell3d, parameters, method); + if (auto a = std::get_if(&acm)) + a->Execute(maxwell3d, parameters, method); + if (auto a = std::get_if(&acm)) + a->Execute(maxwell3d, parameters, method); + if (auto a = std::get_if(&acm)) + a->Execute(maxwell3d, parameters, method); + if (auto a = std::get_if(&acm)) + a->Execute(maxwell3d, parameters, method); + if (auto a = std::get_if(&acm)) + a->Execute(maxwell3d, parameters, method); + if (auto a = std::get_if(&acm)) + a->Execute(maxwell3d, parameters, method); + if (auto a = std::get_if(&acm)) + a->Execute(maxwell3d, parameters, method); + if (auto a = std::get_if(&acm)) + a->Execute(maxwell3d, parameters, method); + if (auto a = std::get_if>(&acm)) + a->get()->Execute(maxwell3d, parameters, method); + }; + if (auto const it = macro_cache.find(method); it != macro_cache.end()) { + auto& ci = it->second; + if (!CanBeHLEProgram(ci.hash) || Settings::values.disable_macro_hle) + maxwell3d.RefreshParameters(); //LLE must reload parameters + execute_variant(ci.program); } else { // Macro not compiled, check if it's uploaded and if so, compile it std::optional mid_method; @@ -1617,51 +1422,37 @@ void MacroEngine::Execute(u32 method, const std::vector& parameters) { return; } } - auto& cache_info = macro_cache[method]; - - if (!mid_method.has_value()) { - cache_info.lle_program = Compile(macro_code->second); - cache_info.hash = Common::HashValue(macro_code->second); - } else { + auto& ci = macro_cache[method]; + if (mid_method) { const auto& macro_cached = uploaded_macro_code[mid_method.value()]; const auto rebased_method = method - mid_method.value(); auto& code = uploaded_macro_code[method]; code.resize(macro_cached.size() - rebased_method); std::memcpy(code.data(), macro_cached.data() + rebased_method, code.size() * sizeof(u32)); - cache_info.hash = Common::HashValue(code); - cache_info.lle_program = Compile(code); - } - - auto hle_program = hle_macros->GetHLEProgram(cache_info.hash); - if (!hle_program || Settings::values.disable_macro_hle) { - maxwell3d.RefreshParameters(); - cache_info.lle_program->Execute(parameters, method); + ci.hash = Common::HashValue(code); + ci.program = Compile(maxwell3d, code); } else { - cache_info.has_hle_program = true; - cache_info.hle_program = std::move(hle_program); - cache_info.hle_program->Execute(parameters, method); + ci.program = Compile(maxwell3d, macro_code->second); + ci.hash = Common::HashValue(macro_code->second); } - + if (CanBeHLEProgram(ci.hash) && !Settings::values.disable_macro_hle) { + ci.program = GetHLEProgram(ci.hash); + } else { + maxwell3d.RefreshParameters(); + } + execute_variant(ci.program); if (Settings::values.dump_macros) { - Dump(cache_info.hash, macro_code->second, cache_info.has_hle_program); + Dump(ci.hash, macro_code->second, !std::holds_alternative(ci.program)); } } } -std::unique_ptr MacroEngine::Compile(const std::vector& code) { +AnyCachedMacro MacroEngine::Compile(Engines::Maxwell3D& maxwell3d, std::span code) { #ifdef ARCHITECTURE_x86_64 if (!is_interpreted) - return std::make_unique(maxwell3d, code); -#endif - return std::make_unique(maxwell3d, code); -} - -std::optional GetMacroEngine(Engines::Maxwell3D& maxwell3d) { -#ifdef ARCHITECTURE_x86_64 - return std::make_optional(maxwell3d, bool(Settings::values.disable_macro_jit)); -#else - return std::make_optional(maxwell3d, true); + return std::make_unique(code); #endif + return MacroInterpreterImpl(code); } } // namespace Tegra diff --git a/src/video_core/macro.h b/src/video_core/macro.h index 9bdb4219ce..a9a8f2de04 100644 --- a/src/video_core/macro.h +++ b/src/video_core/macro.h @@ -7,8 +7,10 @@ #pragma once #include -#include +#include +#include #include +#include #include "common/bit_field.h" #include "common/common_types.h" @@ -98,62 +100,142 @@ union MethodAddress { } // namespace Macro -class CachedMacro { -public: - CachedMacro(Engines::Maxwell3D& maxwell3d_) - : maxwell3d{maxwell3d_} - {} - virtual ~CachedMacro() = default; +struct HLEMacro { +}; +/// @note: these macros have two versions, a normal and extended version, with the extended version +/// also assigning the base vertex/instance. +struct HLE_DrawArraysIndirect final { + HLE_DrawArraysIndirect(bool extended_) noexcept : extended{extended_} {} + void Execute(Engines::Maxwell3D& maxwell3d, std::span parameters, [[maybe_unused]] u32 method); + void Fallback(Engines::Maxwell3D& maxwell3d, std::span parameters); + bool extended; +}; +/// @note: these macros have two versions, a normal and extended version, with the extended version +/// also assigning the base vertex/instance. +struct HLE_DrawIndexedIndirect final { + explicit HLE_DrawIndexedIndirect(bool extended_) noexcept : extended{extended_} {} + void Execute(Engines::Maxwell3D& maxwell3d, std::span parameters, [[maybe_unused]] u32 method); + void Fallback(Engines::Maxwell3D& maxwell3d, std::span parameters); + bool extended; +}; +struct HLE_MultiLayerClear final { + void Execute(Engines::Maxwell3D& maxwell3d, std::span parameters, [[maybe_unused]] u32 method); +}; +struct HLE_MultiDrawIndexedIndirectCount final { + void Execute(Engines::Maxwell3D& maxwell3d, std::span parameters, [[maybe_unused]] u32 method); + void Fallback(Engines::Maxwell3D& maxwell3d, std::span parameters); +}; +struct HLE_DrawIndirectByteCount final { + void Execute(Engines::Maxwell3D& maxwell3d, std::span parameters, [[maybe_unused]] u32 method); + void Fallback(Engines::Maxwell3D& maxwell3d, std::span parameters); +}; +struct HLE_C713C83D8F63CCF3 final { + void Execute(Engines::Maxwell3D& maxwell3d, std::span parameters, [[maybe_unused]] u32 method); +}; +struct HLE_D7333D26E0A93EDE final { + void Execute(Engines::Maxwell3D& maxwell3d, std::span parameters, [[maybe_unused]] u32 method); +}; +struct HLE_BindShader final { + void Execute(Engines::Maxwell3D& maxwell3d, std::span parameters, [[maybe_unused]] u32 method); +}; +struct HLE_SetRasterBoundingBox final { + void Execute(Engines::Maxwell3D& maxwell3d, std::span parameters, [[maybe_unused]] u32 method); +}; +struct HLE_ClearConstBuffer final { + HLE_ClearConstBuffer(size_t base_size_) noexcept : base_size{base_size_} {} + void Execute(Engines::Maxwell3D& maxwell3d, std::span parameters, [[maybe_unused]] u32 method); + size_t base_size; +}; +struct HLE_ClearMemory final { + void Execute(Engines::Maxwell3D& maxwell3d, std::span parameters, [[maybe_unused]] u32 method); + std::vector zero_memory; +}; +struct HLE_TransformFeedbackSetup final { + void Execute(Engines::Maxwell3D& maxwell3d, std::span parameters, [[maybe_unused]] u32 method); +}; +struct MacroInterpreterImpl final { + MacroInterpreterImpl() {} + MacroInterpreterImpl(std::span code_) : code{code_} {} + void Execute(Engines::Maxwell3D& maxwell3d, std::span params, u32 method); + void Reset(); + bool Step(Engines::Maxwell3D& maxwell3d, bool is_delay_slot); + u32 GetALUResult(Macro::ALUOperation operation, u32 src_a, u32 src_b); + void ProcessResult(Engines::Maxwell3D& maxwell3d, Macro::ResultOperation operation, u32 reg, u32 result); + bool EvaluateBranchCondition(Macro::BranchCondition cond, u32 value) const; + Macro::Opcode GetOpcode() const; + u32 GetRegister(u32 register_id) const; + void SetRegister(u32 register_id, u32 value); + /// Sets the method address to use for the next Send instruction. + [[nodiscard]] inline void SetMethodAddress(u32 address) noexcept { + method_address.raw = address; + } + void Send(Engines::Maxwell3D& maxwell3d, u32 value); + u32 Read(Engines::Maxwell3D& maxwell3d, u32 method) const; + u32 FetchParameter(); + /// General purpose macro registers. + std::array registers = {}; + /// Input parameters of the current macro. + std::vector parameters; + std::span code; + /// Program counter to execute at after the delay slot is executed. + std::optional delayed_pc; + /// Method address to use for the next Send instruction. + Macro::MethodAddress method_address = {}; + /// Current program counter + u32 pc{}; + /// Index of the next parameter that will be fetched by the 'parm' instruction. + u32 next_parameter_index = 0; + bool carry_flag = false; +}; +struct DynamicCachedMacro { + virtual ~DynamicCachedMacro() = default; /// Executes the macro code with the specified input parameters. /// @param parameters The parameters of the macro /// @param method The method to execute - virtual void Execute(const std::vector& parameters, u32 method) = 0; - Engines::Maxwell3D& maxwell3d; + virtual void Execute(Engines::Maxwell3D& maxwell3d, std::span parameters, u32 method) = 0; }; -class HLEMacro { -public: - explicit HLEMacro(Engines::Maxwell3D& maxwell3d_); - ~HLEMacro(); - // Allocates and returns a cached macro if the hash matches a known function. - // Returns nullptr otherwise. - [[nodiscard]] std::unique_ptr GetHLEProgram(u64 hash) const; -private: - Engines::Maxwell3D& maxwell3d; -}; - -class MacroEngine { -public: - explicit MacroEngine(Engines::Maxwell3D& maxwell3d, bool is_interpreted); - ~MacroEngine(); +using AnyCachedMacro = std::variant< + std::monostate, + HLEMacro, + HLE_DrawArraysIndirect, + HLE_DrawIndexedIndirect, + HLE_MultiDrawIndexedIndirectCount, + HLE_MultiLayerClear, + HLE_C713C83D8F63CCF3, + HLE_D7333D26E0A93EDE, + HLE_BindShader, + HLE_SetRasterBoundingBox, + HLE_ClearConstBuffer, + HLE_ClearMemory, + HLE_TransformFeedbackSetup, + HLE_DrawIndirectByteCount, + MacroInterpreterImpl, + // Used for JIT x86 macro + std::unique_ptr +>; +struct MacroEngine { + MacroEngine(bool is_interpreted_) noexcept : is_interpreted{is_interpreted_} {} // Store the uploaded macro code to compile them when they're called. - void AddCode(u32 method, u32 data); - + inline void AddCode(u32 method, u32 data) noexcept { + uploaded_macro_code[method].push_back(data); + } // Clear the code associated with a method. - void ClearCode(u32 method); - + inline void ClearCode(u32 method) noexcept { + macro_cache.erase(method); + uploaded_macro_code.erase(method); + } // Compiles the macro if its not in the cache, and executes the compiled macro - void Execute(u32 method, const std::vector& parameters); - -protected: - std::unique_ptr Compile(const std::vector& code); - -private: + void Execute(Engines::Maxwell3D& maxwell3d, u32 method, std::span parameters); + AnyCachedMacro Compile(Engines::Maxwell3D& maxwell3d, std::span code); struct CacheInfo { - std::unique_ptr lle_program{}; - std::unique_ptr hle_program{}; + AnyCachedMacro program; u64 hash{}; - bool has_hle_program{}; }; - ankerl::unordered_dense::map macro_cache; ankerl::unordered_dense::map> uploaded_macro_code; - std::optional hle_macros; - Engines::Maxwell3D& maxwell3d; bool is_interpreted; }; -std::optional GetMacroEngine(Engines::Maxwell3D& maxwell3d); - } // namespace Tegra From 2ed1328c93c4739c069e7a284cb82b0a72762dac Mon Sep 17 00:00:00 2001 From: lizzie Date: Fri, 6 Mar 2026 15:05:05 +0100 Subject: [PATCH 56/84] [vk] use static_vector instead of small_vector for TFB and other bindings (#3641) MK8D is a big offender, taking up lots of time memcpy'ing and memmov'ing small_vector<> AND to add salt to the wound it doesn't even do heap allocations (no game does I think) - so basically useless waste of compute time in hot path for NO reason :^) Signed-off-by: lizzie Reviewed-on: https://git.eden-emu.dev/eden-emu/eden/pulls/3641 Reviewed-by: CamilleLaVey Reviewed-by: DraVee Co-authored-by: lizzie Co-committed-by: lizzie --- .../buffer_cache/buffer_cache_base.h | 13 +++-- .../renderer_vulkan/vk_buffer_cache.cpp | 50 +++++++++---------- 2 files changed, 33 insertions(+), 30 deletions(-) diff --git a/src/video_core/buffer_cache/buffer_cache_base.h b/src/video_core/buffer_cache/buffer_cache_base.h index 0596329392..08524bd854 100644 --- a/src/video_core/buffer_cache/buffer_cache_base.h +++ b/src/video_core/buffer_cache/buffer_cache_base.h @@ -14,9 +14,12 @@ #include #include #include -#include #include +#include +#include +#include + #include "common/common_types.h" #include "common/div_ceil.h" #include "common/literals.h" @@ -94,10 +97,10 @@ static constexpr Binding NULL_BINDING{ template struct HostBindings { - boost::container::small_vector buffers; - boost::container::small_vector offsets; - boost::container::small_vector sizes; - boost::container::small_vector strides; + boost::container::static_vector buffers; + boost::container::static_vector offsets; + boost::container::static_vector sizes; + boost::container::static_vector strides; u32 min_index{NUM_VERTEX_BUFFERS}; u32 max_index{0}; }; diff --git a/src/video_core/renderer_vulkan/vk_buffer_cache.cpp b/src/video_core/renderer_vulkan/vk_buffer_cache.cpp index f4345262fb..c842cce709 100644 --- a/src/video_core/renderer_vulkan/vk_buffer_cache.cpp +++ b/src/video_core/renderer_vulkan/vk_buffer_cache.cpp @@ -10,6 +10,7 @@ #include #include +#include "video_core/buffer_cache/buffer_cache_base.h" #include "video_core/renderer_vulkan/vk_buffer_cache.h" #include "video_core/renderer_vulkan/maxwell_to_vk.h" @@ -583,18 +584,18 @@ void BufferCacheRuntime::BindVertexBuffer(u32 index, VkBuffer buffer, u32 offset } void BufferCacheRuntime::BindVertexBuffers(VideoCommon::HostBindings& bindings) { - boost::container::small_vector buffer_handles; - for (u32 index = 0; index < bindings.buffers.size(); ++index) { - auto handle = bindings.buffers[index]->Handle(); + boost::container::static_vector buffer_handles(bindings.buffers.size()); + for (u32 i = 0; i < bindings.buffers.size(); ++i) { + auto handle = bindings.buffers[i]->Handle(); if (handle == VK_NULL_HANDLE) { - bindings.offsets[index] = 0; - bindings.sizes[index] = VK_WHOLE_SIZE; + bindings.offsets[i] = 0; + bindings.sizes[i] = VK_WHOLE_SIZE; if (!device.HasNullDescriptor()) { ReserveNullBuffer(); handle = *null_buffer; } } - buffer_handles.push_back(handle); + buffer_handles[i] = handle; } const u32 device_max = device.GetMaxVertexInputBindings(); const u32 min_binding = (std::min)(bindings.min_index, device_max); @@ -604,19 +605,12 @@ void BufferCacheRuntime::BindVertexBuffers(VideoCommon::HostBindings& bi return; } if (device.IsExtExtendedDynamicStateSupported()) { - scheduler.Record([bindings_ = std::move(bindings), - buffer_handles_ = std::move(buffer_handles), - binding_count](vk::CommandBuffer cmdbuf) { - cmdbuf.BindVertexBuffers2EXT(bindings_.min_index, binding_count, buffer_handles_.data(), - bindings_.offsets.data(), bindings_.sizes.data(), - bindings_.strides.data()); + scheduler.Record([bindings_ = std::move(bindings), buffer_handles_ = std::move(buffer_handles), binding_count](vk::CommandBuffer cmdbuf) { + cmdbuf.BindVertexBuffers2EXT(bindings_.min_index, binding_count, buffer_handles_.data(), bindings_.offsets.data(), bindings_.sizes.data(), bindings_.strides.data()); }); } else { - scheduler.Record([bindings_ = std::move(bindings), - buffer_handles_ = std::move(buffer_handles), - binding_count](vk::CommandBuffer cmdbuf) { - cmdbuf.BindVertexBuffers(bindings_.min_index, binding_count, buffer_handles_.data(), - bindings_.offsets.data()); + scheduler.Record([bindings_ = std::move(bindings), buffer_handles_ = std::move(buffer_handles), binding_count](vk::CommandBuffer cmdbuf) { + cmdbuf.BindVertexBuffers(bindings_.min_index, binding_count, buffer_handles_.data(), bindings_.offsets.data()); }); } } @@ -647,15 +641,21 @@ void BufferCacheRuntime::BindTransformFeedbackBuffers(VideoCommon::HostBindings< // Already logged in the rasterizer return; } - boost::container::small_vector buffer_handles; - for (u32 index = 0; index < bindings.buffers.size(); ++index) { - buffer_handles.push_back(bindings.buffers[index]->Handle()); + boost::container::static_vector buffer_handles(bindings.buffers.size()); + for (u32 i = 0; i < bindings.buffers.size(); ++i) { + auto handle = bindings.buffers[i]->Handle(); + if (handle == VK_NULL_HANDLE) { + bindings.offsets[i] = 0; + bindings.sizes[i] = VK_WHOLE_SIZE; + if (!device.HasNullDescriptor()) { + ReserveNullBuffer(); + handle = *null_buffer; + } + } + buffer_handles[i] = handle; } - scheduler.Record([bindings_ = std::move(bindings), - buffer_handles_ = std::move(buffer_handles)](vk::CommandBuffer cmdbuf) { - cmdbuf.BindTransformFeedbackBuffersEXT(0, static_cast(buffer_handles_.size()), - buffer_handles_.data(), bindings_.offsets.data(), - bindings_.sizes.data()); + scheduler.Record([bindings_ = std::move(bindings), buffer_handles_ = std::move(buffer_handles)](vk::CommandBuffer cmdbuf) { + cmdbuf.BindTransformFeedbackBuffersEXT(0, u32(buffer_handles_.size()), buffer_handles_.data(), bindings_.offsets.data(), bindings_.sizes.data()); }); } From b75e81af5e11cb09eae405d51c40489401794912 Mon Sep 17 00:00:00 2001 From: lizzie Date: Fri, 6 Mar 2026 15:05:39 +0100 Subject: [PATCH 57/84] [video_core/engines] implement stub NV01 timer, inline other channel engines (#3640) Signed-off-by: lizzie Reviewed-on: https://git.eden-emu.dev/eden-emu/eden/pulls/3640 Reviewed-by: CamilleLaVey Reviewed-by: DraVee Co-authored-by: lizzie Co-committed-by: lizzie --- src/video_core/control/channel_state.cpp | 15 ++++--- src/video_core/control/channel_state.h | 44 +++++++++---------- src/video_core/engines/engine_interface.h | 3 +- src/video_core/engines/maxwell_3d.h | 2 +- src/video_core/engines/nv01_timer.h | 52 +++++++++++++++++++++++ src/video_core/engines/puller.cpp | 42 +++++++++--------- src/video_core/engines/puller.h | 4 ++ 7 files changed, 109 insertions(+), 53 deletions(-) create mode 100644 src/video_core/engines/nv01_timer.h diff --git a/src/video_core/control/channel_state.cpp b/src/video_core/control/channel_state.cpp index 2539997d53..d07c7e2a83 100644 --- a/src/video_core/control/channel_state.cpp +++ b/src/video_core/control/channel_state.cpp @@ -1,3 +1,6 @@ +// SPDX-FileCopyrightText: Copyright 2026 Eden Emulator Project +// SPDX-License-Identifier: GPL-3.0-or-later + // SPDX-FileCopyrightText: 2022 yuzu Emulator Project // SPDX-License-Identifier: GPL-3.0-or-later @@ -19,12 +22,12 @@ ChannelState::ChannelState(s32 bind_id_) : bind_id{bind_id_}, initialized{} {} void ChannelState::Init(Core::System& system, GPU& gpu, u64 program_id_) { ASSERT(memory_manager); program_id = program_id_; - dma_pusher = std::make_unique(system, gpu, *memory_manager, *this); - maxwell_3d = std::make_unique(system, *memory_manager); - fermi_2d = std::make_unique(*memory_manager); - kepler_compute = std::make_unique(system, *memory_manager); - maxwell_dma = std::make_unique(system, *memory_manager); - kepler_memory = std::make_unique(system, *memory_manager); + dma_pusher.emplace(system, gpu, *memory_manager, *this); + maxwell_3d.emplace(system, *memory_manager); + fermi_2d.emplace(*memory_manager); + kepler_compute.emplace(system, *memory_manager); + maxwell_dma.emplace(system, *memory_manager); + kepler_memory.emplace(system, *memory_manager); initialized = true; } diff --git a/src/video_core/control/channel_state.h b/src/video_core/control/channel_state.h index b385f4939f..2984d2e09e 100644 --- a/src/video_core/control/channel_state.h +++ b/src/video_core/control/channel_state.h @@ -1,3 +1,6 @@ +// SPDX-FileCopyrightText: Copyright 2026 Eden Emulator Project +// SPDX-License-Identifier: GPL-3.0-or-later + // SPDX-FileCopyrightText: 2022 yuzu Emulator Project // SPDX-License-Identifier: GPL-3.0-or-later @@ -6,6 +9,12 @@ #include #include "common/common_types.h" +#include "video_core/engines/fermi_2d.h" +#include "video_core/engines/kepler_memory.h" +#include "video_core/engines/kepler_compute.h" +#include "video_core/engines/maxwell_3d.h" +#include "video_core/engines/maxwell_dma.h" +#include "video_core/dma_pusher.h" namespace Core { class System; @@ -18,49 +27,34 @@ class RasterizerInterface; namespace Tegra { class GPU; - -namespace Engines { -class Puller; -class Fermi2D; -class Maxwell3D; -class MaxwellDMA; -class KeplerCompute; -class KeplerMemory; -} // namespace Engines - class MemoryManager; -class DmaPusher; namespace Control { struct ChannelState { explicit ChannelState(s32 bind_id); - ChannelState(const ChannelState& state) = delete; - ChannelState& operator=(const ChannelState&) = delete; - ChannelState(ChannelState&& other) noexcept = default; - ChannelState& operator=(ChannelState&& other) noexcept = default; void Init(Core::System& system, GPU& gpu, u64 program_id); void BindRasterizer(VideoCore::RasterizerInterface* rasterizer); - s32 bind_id = -1; - u64 program_id = 0; /// 3D engine - std::unique_ptr maxwell_3d; + std::optional maxwell_3d; /// 2D engine - std::unique_ptr fermi_2d; + std::optional fermi_2d; /// Compute engine - std::unique_ptr kepler_compute; + std::optional kepler_compute; /// DMA engine - std::unique_ptr maxwell_dma; + std::optional maxwell_dma; /// Inline memory engine - std::unique_ptr kepler_memory; - + std::optional kepler_memory; + /// NV01 Timer + std::optional nv01_timer; + std::optional dma_pusher; std::shared_ptr memory_manager; - std::unique_ptr dma_pusher; - + s32 bind_id = -1; + u64 program_id = 0; bool initialized{}; }; diff --git a/src/video_core/engines/engine_interface.h b/src/video_core/engines/engine_interface.h index e271ecab59..bf3bd66aca 100644 --- a/src/video_core/engines/engine_interface.h +++ b/src/video_core/engines/engine_interface.h @@ -1,4 +1,4 @@ -// SPDX-FileCopyrightText: Copyright 2025 Eden Emulator Project +// SPDX-FileCopyrightText: Copyright 2026 Eden Emulator Project // SPDX-License-Identifier: GPL-3.0-or-later // SPDX-FileCopyrightText: Copyright 2020 yuzu Emulator Project @@ -15,6 +15,7 @@ namespace Tegra::Engines { enum class EngineTypes : u32 { + Nv01Timer, KeplerCompute, Maxwell3D, Fermi2D, diff --git a/src/video_core/engines/maxwell_3d.h b/src/video_core/engines/maxwell_3d.h index 52546e4279..b73082b7ef 100644 --- a/src/video_core/engines/maxwell_3d.h +++ b/src/video_core/engines/maxwell_3d.h @@ -2258,7 +2258,7 @@ public: /// Returns whether the vertex array specified by index is supposed to be /// accessed per instance or not. bool IsInstancingEnabled(std::size_t index) const { - return is_instanced[index]; + return bool(is_instanced[index]); //FUCK YOU MSVC } }; diff --git a/src/video_core/engines/nv01_timer.h b/src/video_core/engines/nv01_timer.h new file mode 100644 index 0000000000..a8e60f9f53 --- /dev/null +++ b/src/video_core/engines/nv01_timer.h @@ -0,0 +1,52 @@ +// SPDX-FileCopyrightText: Copyright 2026 Eden Emulator Project +// SPDX-License-Identifier: GPL-3.0-or-later + +// SPDX-FileCopyrightText: Copyright 2018 yuzu Emulator Project +// SPDX-License-Identifier: GPL-2.0-or-later + +#pragma once + +#include +#include +#include "common/bit_field.h" +#include "common/common_funcs.h" +#include "common/common_types.h" +#include "common/logging/log.h" +#include "video_core/engines/engine_interface.h" +#include "video_core/engines/engine_upload.h" + +namespace Core { +class System; +} + +namespace Tegra { +class MemoryManager; +} + +namespace Tegra::Engines { +class Nv01Timer final : public EngineInterface { +public: + explicit Nv01Timer(Core::System& system_, MemoryManager& memory_manager) + : system{system_} + {} + ~Nv01Timer() override; + + /// Write the value to the register identified by method. + void CallMethod(u32 method, u32 method_argument, bool is_last_call) override { + LOG_DEBUG(HW_GPU, "method={}, argument={}, is_last_call={}", method, method_argument, is_last_call); + } + + /// Write multiple values to the register identified by method. + void CallMultiMethod(u32 method, const u32* base_start, u32 amount, u32 methods_pending) override { + LOG_DEBUG(HW_GPU, "method={}, base_start={}, amount={}, pending={}", method, fmt::ptr(base_start), amount, methods_pending); + } + + struct Regs { + // No fucking idea + INSERT_PADDING_BYTES_NOINIT(0x48); + } regs{}; +private: + void ConsumeSinkImpl() override {} + Core::System& system; +}; +} diff --git a/src/video_core/engines/puller.cpp b/src/video_core/engines/puller.cpp index 8dd34c04ab..b5b4e5d7fa 100644 --- a/src/video_core/engines/puller.cpp +++ b/src/video_core/engines/puller.cpp @@ -1,3 +1,6 @@ +// SPDX-FileCopyrightText: Copyright 2026 Eden Emulator Project +// SPDX-License-Identifier: GPL-3.0-or-later + // SPDX-FileCopyrightText: 2022 yuzu Emulator Project // SPDX-License-Identifier: GPL-3.0-or-later @@ -34,24 +37,22 @@ void Puller::ProcessBindMethod(const MethodCall& method_call) { bound_engines[method_call.subchannel] = engine_id; switch (engine_id) { case EngineID::FERMI_TWOD_A: - dma_pusher.BindSubchannel(channel_state.fermi_2d.get(), method_call.subchannel, - EngineTypes::Fermi2D); + dma_pusher.BindSubchannel(&*channel_state.fermi_2d, method_call.subchannel, EngineTypes::Fermi2D); break; case EngineID::MAXWELL_B: - dma_pusher.BindSubchannel(channel_state.maxwell_3d.get(), method_call.subchannel, - EngineTypes::Maxwell3D); + dma_pusher.BindSubchannel(&*channel_state.maxwell_3d, method_call.subchannel, EngineTypes::Maxwell3D); break; case EngineID::KEPLER_COMPUTE_B: - dma_pusher.BindSubchannel(channel_state.kepler_compute.get(), method_call.subchannel, - EngineTypes::KeplerCompute); + dma_pusher.BindSubchannel(&*channel_state.kepler_compute, method_call.subchannel, EngineTypes::KeplerCompute); break; case EngineID::MAXWELL_DMA_COPY_A: - dma_pusher.BindSubchannel(channel_state.maxwell_dma.get(), method_call.subchannel, - EngineTypes::MaxwellDMA); + dma_pusher.BindSubchannel(&*channel_state.maxwell_dma, method_call.subchannel, EngineTypes::MaxwellDMA); break; case EngineID::KEPLER_INLINE_TO_MEMORY_B: - dma_pusher.BindSubchannel(channel_state.kepler_memory.get(), method_call.subchannel, - EngineTypes::KeplerMemory); + dma_pusher.BindSubchannel(&*channel_state.kepler_memory, method_call.subchannel, EngineTypes::KeplerMemory); + break; + case EngineID::NV01_TIMER: + dma_pusher.BindSubchannel(&*channel_state.nv01_timer, method_call.subchannel, EngineTypes::Nv01Timer); break; default: UNIMPLEMENTED_MSG("Unimplemented engine {:04X}", engine_id); @@ -209,24 +210,22 @@ void Puller::CallEngineMethod(const MethodCall& method_call) { switch (engine) { case EngineID::FERMI_TWOD_A: - channel_state.fermi_2d->CallMethod(method_call.method, method_call.argument, - method_call.IsLastCall()); + channel_state.fermi_2d->CallMethod(method_call.method, method_call.argument, method_call.IsLastCall()); break; case EngineID::MAXWELL_B: - channel_state.maxwell_3d->CallMethod(method_call.method, method_call.argument, - method_call.IsLastCall()); + channel_state.maxwell_3d->CallMethod(method_call.method, method_call.argument, method_call.IsLastCall()); break; case EngineID::KEPLER_COMPUTE_B: - channel_state.kepler_compute->CallMethod(method_call.method, method_call.argument, - method_call.IsLastCall()); + channel_state.kepler_compute->CallMethod(method_call.method, method_call.argument, method_call.IsLastCall()); break; case EngineID::MAXWELL_DMA_COPY_A: - channel_state.maxwell_dma->CallMethod(method_call.method, method_call.argument, - method_call.IsLastCall()); + channel_state.maxwell_dma->CallMethod(method_call.method, method_call.argument, method_call.IsLastCall()); break; case EngineID::KEPLER_INLINE_TO_MEMORY_B: - channel_state.kepler_memory->CallMethod(method_call.method, method_call.argument, - method_call.IsLastCall()); + channel_state.kepler_memory->CallMethod(method_call.method, method_call.argument, method_call.IsLastCall()); + break; + case EngineID::NV01_TIMER: + channel_state.nv01_timer->CallMethod(method_call.method, method_call.argument, method_call.IsLastCall()); break; default: UNIMPLEMENTED_MSG("Unimplemented engine"); @@ -255,6 +254,9 @@ void Puller::CallEngineMultiMethod(u32 method, u32 subchannel, const u32* base_s case EngineID::KEPLER_INLINE_TO_MEMORY_B: channel_state.kepler_memory->CallMultiMethod(method, base_start, amount, methods_pending); break; + case EngineID::NV01_TIMER: + channel_state.nv01_timer->CallMultiMethod(method, base_start, amount, methods_pending); + break; default: UNIMPLEMENTED_MSG("Unimplemented engine"); break; diff --git a/src/video_core/engines/puller.h b/src/video_core/engines/puller.h index d4175ee945..fe5102e3ed 100644 --- a/src/video_core/engines/puller.h +++ b/src/video_core/engines/puller.h @@ -1,3 +1,6 @@ +// SPDX-FileCopyrightText: Copyright 2026 Eden Emulator Project +// SPDX-License-Identifier: GPL-3.0-or-later + // SPDX-FileCopyrightText: 2022 yuzu Emulator Project // SPDX-License-Identifier: GPL-3.0-or-later @@ -20,6 +23,7 @@ class MemoryManager; class DmaPusher; enum class EngineID { + NV01_TIMER = 0x0004, FERMI_TWOD_A = 0x902D, // 2D Engine MAXWELL_B = 0xB197, // 3D Engine KEPLER_COMPUTE_B = 0xB1C0, From e4122dae1d56a8b358c46e450b3d50ca10ffcc21 Mon Sep 17 00:00:00 2001 From: crueter Date: Fri, 6 Mar 2026 16:38:21 +0100 Subject: [PATCH 58/84] [desktop] addons: open mod folder in rc menu (#3662) also fixed the multiselection being absolutely horrendous Signed-off-by: crueter Reviewed-on: https://git.eden-emu.dev/eden-emu/eden/pulls/3662 --- .../configure_per_game_addons.cpp | 21 +++++++++++++++---- 1 file changed, 17 insertions(+), 4 deletions(-) diff --git a/src/yuzu/configuration/configure_per_game_addons.cpp b/src/yuzu/configuration/configure_per_game_addons.cpp index bdff73a040..1d2d358672 100644 --- a/src/yuzu/configuration/configure_per_game_addons.cpp +++ b/src/yuzu/configuration/configure_per_game_addons.cpp @@ -10,13 +10,14 @@ #include +#include #include #include #include +#include #include #include #include -#include #include "common/common_types.h" #include "common/fs/fs.h" @@ -42,7 +43,7 @@ ConfigurePerGameAddons::ConfigurePerGameAddons(Core::System& system_, QWidget* p item_model = new QStandardItemModel(tree_view); tree_view->setModel(item_model); tree_view->setAlternatingRowColors(true); - tree_view->setSelectionMode(QHeaderView::MultiSelection); + tree_view->setSelectionMode(QHeaderView::ExtendedSelection); tree_view->setSelectionBehavior(QHeaderView::SelectRows); tree_view->setVerticalScrollMode(QHeaderView::ScrollPerPixel); tree_view->setHorizontalScrollMode(QHeaderView::ScrollPerPixel); @@ -248,8 +249,11 @@ void ConfigurePerGameAddons::AddonDeleteRequested(QList selected) { void ConfigurePerGameAddons::showContextMenu(const QPoint& pos) { const QModelIndex index = tree_view->indexAt(pos); - auto selected = tree_view->selectionModel()->selectedIndexes(); - if (index.isValid() && selected.empty()) selected = {index}; + auto selected = tree_view->selectionModel()->selectedRows(); + if (index.isValid() && selected.empty()) { + QModelIndex idx = item_model->index(index.row(), 0); + if (idx.isValid()) selected << idx; + } if (selected.empty()) return; @@ -260,6 +264,15 @@ void ConfigurePerGameAddons::showContextMenu(const QPoint& pos) { AddonDeleteRequested(selected); }); + if (selected.length() == 1) { + auto loc = selected.at(0).data(PATCH_LOCATION).toString(); + if (QFileInfo::exists(loc)) { + QAction* open = menu.addAction(tr("&Open in File Manager")); + connect(open, &QAction::triggered, this, + [selected, loc]() { QDesktopServices::openUrl(QUrl::fromLocalFile(loc)); }); + } + } + menu.exec(tree_view->viewport()->mapToGlobal(pos)); } From c062931c9bef18afd5f0cd74329e8c3e32b4b598 Mon Sep 17 00:00:00 2001 From: lizzie Date: Fri, 6 Mar 2026 16:38:39 +0100 Subject: [PATCH 59/84] [qt] add translation table entry for debug_knobs,serial_battery and serial_unit (#3682) trivial qt change Signed-off-by: lizzie Reviewed-on: https://git.eden-emu.dev/eden-emu/eden/pulls/3682 Reviewed-by: DraVee Co-authored-by: lizzie Co-committed-by: lizzie --- src/qt_common/config/shared_translation.cpp | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/qt_common/config/shared_translation.cpp b/src/qt_common/config/shared_translation.cpp index f49c43ee2a..d1ed32134c 100644 --- a/src/qt_common/config/shared_translation.cpp +++ b/src/qt_common/config/shared_translation.cpp @@ -425,6 +425,9 @@ std::unique_ptr InitializeTranslations(QObject* parent) "their resolution, details and supported controllers and depending on this setting.\n" "Setting to Handheld can help improve performance for low end systems.")); INSERT(Settings, current_user, QString(), QString()); + INSERT(Settings, serial_unit, tr("Unit Serial"), QString()); + INSERT(Settings, serial_battery, tr("Battery Serial"), QString()); + INSERT(Settings, debug_knobs, tr("Debug knobs"), QString()); // Controls From ddac8c8eb500918bd8c89e0c330587c591206c2c Mon Sep 17 00:00:00 2001 From: xbzk Date: Fri, 6 Mar 2026 19:52:17 +0100 Subject: [PATCH 60/84] [vk] fix crash introduced in 9a07bd0570 (#3685) Fix for current crash on master. Just reverted only the necessary stuff so that PresentManager can hold a reference to khr and resist death upon application hold/restore. @Lizzie shall judge. Reviewed-on: https://git.eden-emu.dev/eden-emu/eden/pulls/3685 Co-authored-by: xbzk Co-committed-by: xbzk --- src/video_core/renderer_vulkan/renderer_vulkan.cpp | 2 +- src/video_core/renderer_vulkan/vk_present_manager.cpp | 6 +++--- src/video_core/renderer_vulkan/vk_present_manager.h | 4 ++-- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/video_core/renderer_vulkan/renderer_vulkan.cpp b/src/video_core/renderer_vulkan/renderer_vulkan.cpp index cb1b1a5362..1725bc8ccc 100644 --- a/src/video_core/renderer_vulkan/renderer_vulkan.cpp +++ b/src/video_core/renderer_vulkan/renderer_vulkan.cpp @@ -137,7 +137,7 @@ try memory_allocator, scheduler, swapchain, - *surface) + surface) , blit_swapchain(device_memory, device, memory_allocator, diff --git a/src/video_core/renderer_vulkan/vk_present_manager.cpp b/src/video_core/renderer_vulkan/vk_present_manager.cpp index aa019a4160..80853362ad 100644 --- a/src/video_core/renderer_vulkan/vk_present_manager.cpp +++ b/src/video_core/renderer_vulkan/vk_present_manager.cpp @@ -101,7 +101,7 @@ PresentManager::PresentManager(const vk::Instance& instance_, MemoryAllocator& memory_allocator_, Scheduler& scheduler_, Swapchain& swapchain_, - VkSurfaceKHR_T* surface_) + vk::SurfaceKHR& surface_) : instance{instance_} , render_window{render_window_} , device{device_} @@ -291,7 +291,7 @@ void PresentManager::PresentThread(std::stop_token token) { } void PresentManager::RecreateSwapchain(Frame* frame) { - swapchain.Create(surface, frame->width, frame->height); // Pass raw pointer + swapchain.Create(*surface, frame->width, frame->height); // Pass raw pointer SetImageCount(); } @@ -310,7 +310,7 @@ void PresentManager::CopyToSwapchain(Frame* frame) { // Recreate surface and swapchain if needed. if (requires_recreation) { #ifdef ANDROID - surface = *CreateSurface(instance, render_window.GetWindowInfo()).address(); + surface = CreateSurface(instance, render_window.GetWindowInfo()); #endif RecreateSwapchain(frame); } diff --git a/src/video_core/renderer_vulkan/vk_present_manager.h b/src/video_core/renderer_vulkan/vk_present_manager.h index 3d5cc32102..c51f8ed77f 100644 --- a/src/video_core/renderer_vulkan/vk_present_manager.h +++ b/src/video_core/renderer_vulkan/vk_present_manager.h @@ -44,7 +44,7 @@ public: MemoryAllocator& memory_allocator, Scheduler& scheduler, Swapchain& swapchain, - VkSurfaceKHR_T* surface); + vk::SurfaceKHR& surface); ~PresentManager(); /// Returns the last used presentation frame @@ -78,7 +78,7 @@ private: MemoryAllocator& memory_allocator; Scheduler& scheduler; Swapchain& swapchain; - VkSurfaceKHR_T* surface; + vk::SurfaceKHR& surface; vk::CommandPool cmdpool; std::vector frames; boost::container::deque present_queue; From 11ad71b1e7db5206f074481d642020d1c30dafb1 Mon Sep 17 00:00:00 2001 From: lizzie Date: Sat, 7 Mar 2026 18:16:05 +0100 Subject: [PATCH 61/84] [docs] Obtanium, installing mods, external ES-DE config, section about CFW and settings (#3678) Signed-off-by: lizzie Reviewed-on: https://git.eden-emu.dev/eden-emu/eden/pulls/3678 Reviewed-by: DraVee Reviewed-by: CamilleLaVey Co-authored-by: lizzie Co-committed-by: lizzie --- README.md | 8 +- docs/README.md | 3 +- docs/user/AddGamesToSRM.md | 100 ---------- docs/user/CFW.md | 11 ++ docs/user/Graphics.md | 4 +- docs/user/Mods.md | 206 +++++++++++++++++++++ docs/user/README.md | 19 +- docs/user/Settings.md | 54 ++++++ docs/user/{AddEdenToSRM.md => SteamROM.md} | 129 +++++++++++-- docs/user/ThirdParty.md | 59 ++++++ 10 files changed, 473 insertions(+), 120 deletions(-) delete mode 100644 docs/user/AddGamesToSRM.md create mode 100644 docs/user/CFW.md create mode 100644 docs/user/Mods.md create mode 100644 docs/user/Settings.md rename docs/user/{AddEdenToSRM.md => SteamROM.md} (50%) diff --git a/README.md b/README.md index 3ae31151f7..44a2b4c28b 100644 --- a/README.md +++ b/README.md @@ -61,6 +61,10 @@ See the [sign-up instructions](docs/SIGNUP.md) for information on registration. Alternatively, if you wish to add translations, go to the [Eden project on Transifex](https://app.transifex.com/edenemu/eden-emulator) and review [the translations README](./dist/languages). +## Documentation + +We have a user manual! See our [User Handbook](./docs/user/README.md). + ## Building See the [General Build Guide](docs/Build.md) @@ -69,7 +73,9 @@ For information on provided development tooling, see the [Tools directory](./too ## Download -You can download the latest releases from [here](https://github.com/eden-emulator/Releases/releases). +You can download the latest releases from [here](https://git.eden-emu.dev/eden-emu/eden/releases). + +Save us some bandwidth! We have [mirrors available](./docs/user/ThirdParty.md#mirrors) as well. ## Support diff --git a/docs/README.md b/docs/README.md index 01727ae4dc..4ea532be8e 100644 --- a/docs/README.md +++ b/docs/README.md @@ -1,5 +1,7 @@ # Eden Build Documentation +Are you just a casual user? Take a look at our [User Handbook](./user) then! + This contains documentation created by developers. This contains build instructions, guidelines, instructions/layouts for [cool stuff we made](./CPMUtil), and more. - **[General Build Instructions](Build.md)** @@ -11,7 +13,6 @@ This contains documentation created by developers. This contains build instructi - **[CPM - CMake Package Manager](./CPMUtil)** - **[Platform-Specific Caveats](Caveats.md)** - **[The NVIDIA SM86 (Maxwell) GPU](./NvidiaGpu.md)** -- **[User Handbook](./user)** - **[Dynarmic](./dynarmic)** - **[Cross compilation](./CrossCompile.md)** - **[Driver Bugs](./DriverBugs.md)** diff --git a/docs/user/AddGamesToSRM.md b/docs/user/AddGamesToSRM.md deleted file mode 100644 index 433999c9b6..0000000000 --- a/docs/user/AddGamesToSRM.md +++ /dev/null @@ -1,100 +0,0 @@ -# Importing Games into Steam with Steam Rom Manager - -Use this when you want to import your games inside Eden into Steam to launch with artwork from Steam Game Mode without needing to launch Eden first. - -**Click [Here](https://evilperson1337.notion.site/Importing-Games-into-Steam-with-Steam-Rom-Manager-2b757c2edaf680d7a491c92b138f1fcc) for a version of this guide with images & visual elements.** - ---- - -### Pre-Requisites - -- Steam Deck Set up and Configured -- Eden set up and Configured -- Internet Access - ---- - -## Steps - -1. Press the **STEAM** button and then go to *Power → Switch to Desktop* to enter the Desktop mode. - -1. Install ***Steam ROM Manager***, there are 2 ways you can accomplish this, either manually or through [*EmuDeck*](https://www.emudeck.com/#downloads). - - --- - - ### Manual Installation - - 1. Open the *Discover Store* and search for *Steam ROM Manager.* - 2. Select the **Install** button to install the program. - - --- - - ### Installing Through *EmuDeck* - - - - 1. Open **EmuDeck**, then navigate to *Manage Emulators.* - 2. Scroll down to the bottom of the page to the *Manage your Tools & Frontends* section. Click **Steam ROM Manager**. - - 3. Click the **Install** button on the right hand side to install it. - - --- - -2. Open the Start Menu and Launch ***Steam ROM Manager*** - -1. The program will now launch and show you a window with parsers. - - - -2. Switch off all Parsers by hitting the *Toggle Parsers* switch. -3. Scroll down the list on the left-hand side and look for a parser called *Nintendo Switch - Eden* and switch it on. This parser may not exist depending on how you installed *Steam ROM Manager* (EmuDeck creates it for you). Follow these steps to create it if it is missing. - - --- - ### Creating the Eden Parser - - 1. Select Create Parser and in the *Community Presets* option look for **Nintendo Switch - Yuzu**. - 2. Change the **Parser title** from *Nintendo Switch - Yuzu* to *Nintendo Switch - Eden.* - 3. Hit the **Browse** option under the *ROMs directory* section. Select the directory containing your Switch ROMs. - 4. Under *Steam collections*, you can add a Steam category name. This just organizes the games under a common category in your Steam Library, this is optional but recommended. - 5. Scroll down slightly to the **Executable Configuration → Executable**, select **Browse** and select the Eden AppImage. - 6. Leave everything else the same and hit **Save** to save the parser. - --- - -4. Click the Eden parser to view the options on the right, select **Test** at the bottom of the screen to ensure that *Steam ROM Manager* detects your games correctly. -1. *Steam ROM Manager* will start to scan the specified ROMs directory and match them to games. Look over the results to ensure they are accurate. If you do not see any entries - check your parsers ROMs directory field. -1. When you are happy with the results, click the **Add Games** → **Parse** to start the actual Parsing. -1. The program will now identify the games and pull artwork from [*SteamGridDB*](https://www.steamgriddb.com/). -2. Review the game matches and ensure everything is there. - - --- - - ### Correcting a Mismatch - - If the game is not identified correctly, you may need to tell *Steam ROM Manager* what the game is manually. - - 1. Hover over the game card and click the magnifying glass icon. - 2. Search for the game on the *Search SteamGridDB* section and scroll through the results, selecting the one you want. - 3. Ensure the *Name* and *Game ID* update in the **Per-App Exceptions** and press **Save and close**. The game should now update. - - --- - - ### Excluding Matches - - You may want to tell Steam ROM Manager to ignore some files (updates/DLC/etc.) that it finds in the directory. This is how you do so. - - 1. Hit the **Exclude Games** button in the bottom right. - 2. Deselect the game you want to exclude, the poster artwork should go dim and the **Number Excluded** number should increment up. Repeat with any other exclusions you want to add. - 3. Hit **Save Excludes** when you are happy with your selections. - --- -3. When you are happy with the results, select **Save to Steam** to save the results. -1. The program will now start writing the entries into the Steam Library. You should get pop up notifications of the progress, but you can monitor the progress by selecting the **Log** on the left-hand side if needed. -2. Restart Steam to have the changes take effect. Check your library to ensure that your games are there, in a category if you defined one in the parser. -3. Try to launch a game and ensure everything is working. You are now good to go. \ No newline at end of file diff --git a/docs/user/CFW.md b/docs/user/CFW.md new file mode 100644 index 0000000000..ea224d3d36 --- /dev/null +++ b/docs/user/CFW.md @@ -0,0 +1,11 @@ +# User Handbook - Custom Firmware (CFW) + +At the moment of writing, we do not support CFW such as Atmosphere, due to: + +- Lacking the required LLE emulation capabilities to properly emulate the full firmware. +- Lack of implementation on some of the key internals. +- Nobody has bothered to do it (PRs always welcome!) + +We do however, maintain HLE compatibility with the former mentioned CFW, applications that require Atmosphere to run will run fine in the emulator without any adjustments. + +If they don't run - then that's a bug! diff --git a/docs/user/Graphics.md b/docs/user/Graphics.md index e1e13a777d..ad359b9049 100644 --- a/docs/user/Graphics.md +++ b/docs/user/Graphics.md @@ -1,5 +1,7 @@ # User Handbook - Graphics +Graphical enhancements and visual quality improvments. This doesn't cover texture mods. + ## Visual Enhancements ### Anti-aliasing @@ -89,7 +91,7 @@ The OpenGL backend would invoke behaviour that would result in swarst/LLVMpipe w ### HaikuOS compatibility -HaikuOS bundles a Mesa library that doesn't support full core OpenGL 4.6 (required by the emulator). This leads to HaikuOS being one of the few computer platforms where Vulkan is the only available option for users. If OpenGL is desired, Mesa has to be built manually from source. For debugging purpouses `lavapipe` is recommended over the GPU driver; there is in-kernel support for NVIDIA cards through. +HaikuOS bundles a Mesa library that doesn't support full core OpenGL 4.6 (required by the emulator). This leads to HaikuOS being one of the few computer platforms where Vulkan is the only available option for users. If OpenGL is desired, Mesa has to be built manually from source. For debugging purposes `lavapipe` is recommended over the GPU driver; there is in-kernel support for NVIDIA cards through. ### Fixes for Windows 10 and above having "Device loss" diff --git a/docs/user/Mods.md b/docs/user/Mods.md new file mode 100644 index 0000000000..11361d628c --- /dev/null +++ b/docs/user/Mods.md @@ -0,0 +1,206 @@ +# User Handbook - Installing Mods + +## General Notes + +**Note:** When installing a mod, always read the mod's installation instructions. + +This is especially important if a mod uses a framework such as **ARCropolis**, **Skyline**, or **Atmosphere plugins**. In those cases, follow the framework's instructions instead of using Eden's normal mod folder. + +For example, **Super Smash Bros. Ultimate** uses such a framework. See the related section below for details. + +--- + +# Installing Mods for Most Games + +1. Right click a game in the game list. +2. Click **"Open Mod Data Location"**. +3. Extract the mod into that folder. + +Each mod should be placed inside **its own subfolder**. + +--- + +# Enabling or Disabling Mods + +1. Right click the game in the game list. +2. Click **Configure Game**. +3. In the **Add-Ons** tab, enable or disable mods, updates, and DLC by ticking or unticking their boxes. + +--- + +# Important Note About SD Card Paths + +Some mods are designed for real Nintendo Switch consoles and refer to the **SD card root**. + +The emulated SD card is located at: + +``` +%AppData%\eden\sdmc +``` + +Example: + +``` +Switch instruction: sd:/ultimate/mods +Eden equivalent: sdmc/ultimate/mods +``` + +--- + +# Framework-Based Mods (Super Smash Bros. Ultimate) + +Some games require external mod frameworks instead of the built-in mod loader. + +The most common example is **Super Smash Bros. Ultimate**. + +These mods are installed directly to the **emulated SD card**, not the normal Eden mod folder. + +--- + +# Installing the ARCropolis Modding Framework + +**Note:** Some mod packs bundle ARCropolis with their installer (for example, Smash Ult-S). + +--- + +## 1. Download ARCropolis + +Download the latest release: + +https://github.com/Raytwo/ARCropolis/releases/ + +--- + +## 2. Install ARCropolis + +Extract the **`atmosphere`** folder into: + +``` +%AppData%\eden\sdmc +``` + +This is the **emulated SD card directory**. + +Verify installation by checking that the following file exists: + +``` +sdmc\atmosphere\contents\01006A800016E000\romfs\skyline\plugins\libarcropolis.nro +``` + +--- + +## 3. Download Skyline + +Download the latest Skyline release: + +https://github.com/skyline-dev/skyline/releases + +Skyline used to be bundled with ARCropolis but is now distributed separately to avoid compatibility issues caused by outdated bundled versions. + +--- + +## 4. Install Skyline + +Extract the **`exefs`** folder into: + +``` +sdmc\atmosphere\contents\01006A800016E000 +``` + +The `exefs` folder should be **next to the `romfs` folder**. + +Verify installation by checking that the following file exists: + +``` +%AppData%\eden\sdmc\atmosphere\contents\01006A800016E000\exefs\subsdk9 +``` + +--- + +## 5. Launch the Game Once + +Start the game and make sure you see the **ARCropolis version text on the title screen**. + +This will also create the folders required for installing mods. + +--- + +## 6. Install Smash Ultimate Mods + +Install mods inside: + +``` +sdmc\ultimate\mods +``` + +Each mod must be placed inside **its own subfolder**. + +Example: + +``` +sdmc\ultimate\mods\ExampleMod +``` + +--- + +# Troubleshooting + +## ARCropolis text does not appear on startup + +Check the following: + +- `libarcropolis.nro` exists in: + +``` +sdmc\atmosphere\contents\01006A800016E000\romfs\skyline\plugins +``` + +- `subsdk9` exists in: + +``` +sdmc\atmosphere\contents\01006A800016E000\exefs +``` + +- Files were extracted to: + +``` +%AppData%\eden\sdmc +``` + +--- + +## Mods are not loading + +Make sure mods are installed inside: + +``` +sdmc\ultimate\mods +``` + +Each mod must have its **own subfolder**. + +Correct example: + +``` +sdmc\ultimate\mods\ExampleMod +``` + +Incorrect example: + +``` +sdmc\ultimate\mods\ExampleMod\ExampleMod +``` + +--- + +## Installing mods in the wrong folder + +ARCropolis mods **do not go in Eden's normal mod folder**. + +Do **not** install Smash mods here: + +``` +user\load\01006A800016E000 +``` + +That folder is only used for traditional **RomFS mods**, not ARCropolis. diff --git a/docs/user/README.md b/docs/user/README.md index 5fd3a17e51..9804f4d62f 100644 --- a/docs/user/README.md +++ b/docs/user/README.md @@ -4,10 +4,14 @@ The "FAQ". This handbook is primarily aimed at the end-user - baking useful knowledge for enhancing their emulation experience. +A copy of this handbook is [available online](https://git.eden-emu.dev/eden-emu/eden/src/branch/master/docs/user/README.md). + ## Basics - **[The Basics](Basics.md)** - **[Quickstart](./QuickStart.md)** +- **[Settings](./Settings.md)** +- **[Installing Mods](./Mods.md)** - **[Run On macOS](./RunOnMacOS.md)** - **[Audio](Audio.md)** - **[Graphics](Graphics.md)** @@ -17,22 +21,29 @@ This handbook is primarily aimed at the end-user - baking useful knowledge for e - **[Using Amiibo](./UsingAmiibo.md)** - **[Using Cheats](./UsingCheats.md)** - **[Importing Saves](./ImportingSaves.md)** -- **[Add Eden to Steam ROM Manager](./AddEdenToSRM.md)** -- **[Add Games to Steam ROM Manager](./AddGamesToSRM.md)** - **[Installing Atmosphere Mods](./InstallingAtmosphereMods.md)** - **[Installing Updates & DLCs](./InstallingUpdatesDLC.md)** - **[Controller Profiles](./ControllerProfiles.md)** - **[Alter Date & Time](./AlterDateTime.md)** +## 3rd-party Integration + +- **[Configuring Steam ROM Manager](./SteamROM.md)** +- **[Server hosting](ServerHosting.md)** +- **[Syncthing Guide](./SyncthingGuide.md)** +- **[Third Party](./ThirdParty.md)** + - **[Obtainium](./ThirdParty.md#configuring-obtainium)** + - **[ES-DE](./ThirdParty.md#configuring-es-de)** + - **[Mirrors](./ThirdParty.md#mirrors)** + ## Advanced +- **[Custom Firmware](./CFW.md)** - **[How To Access Logs](./HowToAccessLogs.md)** - **[Gyro Controls](./GyroControls.md)** - **[Platforms and Architectures](Architectures.md)** -- **[Server hosting](ServerHosting.md)** - **[Command Line](CommandLine.md)** - **[Native Application Development](Native.md)** - **[Adding Boolean Settings Toggles](AddingBooleanToggles.md)** - **[Adding Debug Knobs](./AddingDebugKnobs.md)** -- **[Syncthing Guide](./SyncthingGuide.md)** - **[Testing](Testing.md)** diff --git a/docs/user/Settings.md b/docs/user/Settings.md new file mode 100644 index 0000000000..35fcd0c9ef --- /dev/null +++ b/docs/user/Settings.md @@ -0,0 +1,54 @@ +# User Handbook - Settings + +As the emulator continues to grow, so does the number of settings that come and go. + +Most of the development adds new settings that enhance performance/compatibility, only to be removed later in newer versions due to newfound discoveries or because they were "a hacky workaround". + +As such, this guide will NOT mention those kind of settings, we'd rather mention settings which have a long shelf time (i.e won't get removed in future releases) and are likely to be unchanged. + +Some of the options are self explainatory, and they do exactly what they say they do (i.e "Pause when not in focus"); such options will be also skipped due to triviality. + +## Foreword + +Before touching the settings, please see the game boots with stock options. We try our best to ensure users can boot any game using the default settings. If they don't work, then you may try fiddling with options - but please, first use stock options. + +## General + +- `General/Force X11 as Graphics Backend`: Wayland on *NIX has prominent issues that are unlikely to be resolved; the kind that are "not our fault, it's Wayland issue", this "temporary" hack forces X11 as the backend, regardless of the desktop manager's default. +- `General/Enable Gamemode`: This only does anything when you have Feral Interactive's Gamemode library installed somewhere, if you do, this will help boost FPS by telling the OS to explicitly prioritize *this* application for "gaming" - only for *NIX systems. +- `Hotkeys`: Deceptively to remove a hotkey you must right click and a menu will appear to remove that specific hotkey. +- `UI/Language`: Changes language *of the interface* NOT the emulated program! +- `Debug/Enable Auto Stub`: May help to "fix" some games by just lying and saying that everything they do returns "success" instead of outright crashing for any function/service that is NOT implemented. +- `Debug/Show log in console`: Does as said, note that the program may need to be reopened (Windows) for changes to take effect. +- `Debug/Flush log output`: Classically, every write to the log is "buffered", that is, changes aren't written to the disk UNTIL the program has decided it is time to write, until then it keeps data in a buffer which resides on RAM. If the program crashes, the OS will automatically discard said buffer (any RAM associated with a dead process is automatically discarded/reused for some other purpose); this means critical data may not be logged to the disk on time, which may lead to missing log lines. Use this if you're wanting to remove that factor when debugging, sometimes a hard crash may "eat" some of the log lines IF this option isn't enabled. +- `Debug/Disable Macro HLE:` The emulator has HLE emulation of macro programs for Maxwell, this means that some details are purpousefully skipped; this option forces all macro programs to be ran without skipping anything. + +## System + +- `System/RNG Seed`: Set to 0 (and uncheck) to disable ASLR systemwide (this makes mods like CTGP to stop working); by default it enables ASLR to replicate console behaviour. +- `Network/Enable Airplane Mode`: Enable this if a game is crashing before loading AND the logs mention anything related to "web" or "internet" services. + +## CPU + +- `CPU/Virtual table bouncing`: Some games have the tendency to crash on loading due to an indirect bad jump (Pokemon ZA being the worst offender); this option lies to the game and tells it to just pretend it never executed a given function. This is fine for most casual users, but developers of switch applications **must** disable this. This temporary "hack" should hopefully be gone in 6-7 months from now on. +- `Fastmem`, aka. `CPU/Enable Host MMU`: Enables "fastmem"; a detailed description of fastmem can be found [here](../dynarmic/Design.md#fast-memory-fastmem). +- `CPU/Unsafe FMA`: Enables deliberate innacurate FMA behaviour which may affect how FMA returns any given operation - this may introduce tiny floating point errors which can cascade in sensitive code (i.e FFmpeg). +- `CPU/Faster FRSQRTE and FRECPE`: Introduces accuracy errors on square root and reciprocals in exchange for less checks - this introduces inaccuracies with some cases but it's mostly safe. +- `CPU/Faster ASIMD Instructions`: Skips rounding mode checks for ARM ASIMD instructions - this means some code dpeending on these rounding modes may misbehave. +- `CPU/Disable address space checks`: Before each memory access, the emulator checks the address is in range, if not it faults; this option makes it so the emulator skips the check entirely (which may be expensive for a myriad of reasons). However at the same time this allows the guest program to "break out" of the emulation context by writing to arbitrary addresses. +- `CPU/Ignore global monitor`: This relies on a quirk present on x86 to avoid the ARM global monitor emulation, this may increase performance in mutex-heavy contexts (i.e games waiting for next frames or such); but also can cause deadlocks and fun to debug issues. + +It is important to note the majority of precision-reducing instructions do not benefit cases where they are not used, which means the performance gains will vary per game. + +# Graphics + +See also [an extended breakdown of some options](./Graphics.md). + +- `Extras/Extended Dynamic State` and `Extras/Vertex Input Dynamic State`: These Vulkan extensions essentially allow you to reuse the same pipeline but just change the state between calls (so called "dynamic state"); the "extended" levels signifies how much state can be placed on this "dynamic" range, for example the amount of depth culling to use can be placed on the dynamic state, avoiding costly reloads and flushes. While this by itself is a fine option, SOME vendors (notably PowerVR and Mali) have problems with anything related to EDS3. EDS3 contains EDS2, and EDS2 contains EDS1. Essentially this means more extended data the driver has to keep track of, at the benefit of avoiding costly flushes. +- `Advanced/Use persistent cache`: This saves compiled shaders onto the disk, independent of any driver's own disk saved shaders (yes, some drivers, notably NVIDIA, save a secondary shader cache onto disk) - disable this only if you're debugging or working on the GPU backend. This option is meant to massively help to reduce shader stutters (after playing for one session that compiles them). +- `Advanced/Use Vulkan pipeline cache`: This is NOT the same as `Use persistent cache`; it's a separate flag that tells the Vulkan backend to create pipeline caches, which are a detail that can be used to massively improve performance and remove pipeline creation overhead. This is a Vulkan feature. + +## Controls + +Most of the controls should work out of the box. If not, please use a joystick calibrator to ensure it's not an issue with your own controller, for example: +- https://github.com/dkosmari/calibrate-joystick diff --git a/docs/user/AddEdenToSRM.md b/docs/user/SteamROM.md similarity index 50% rename from docs/user/AddEdenToSRM.md rename to docs/user/SteamROM.md index 4658bcf7e0..a782b51969 100644 --- a/docs/user/AddEdenToSRM.md +++ b/docs/user/SteamROM.md @@ -1,4 +1,6 @@ -# Importing Eden into Steam with Steam Rom Manager +# User Handbook - Configuring Steam ROM Manager + +## Importing Eden into Steam with Steam Rom Manager Use this when you want to import the Eden AppImage into your Steam Library along with artwork using *Steam ROM Manager.* @@ -6,7 +8,7 @@ Use this when you want to import the Eden AppImage into your Steam Library along --- -### Pre-Requisites +#### Pre-Requisites - Eden set up and configured - Internet Connection @@ -14,9 +16,9 @@ Use this when you want to import the Eden AppImage into your Steam Library along --- -## Steps +### Steps -### Initial Setup +#### Initial Setup 1. Press the **STEAM** button and then go to *Power → Switch to Desktop* to enter the Desktop mode. @@ -24,14 +26,14 @@ Use this when you want to import the Eden AppImage into your Steam Library along --- - ### Manual Installation + #### Manual Installation 1. Open the *Discover Store* and search for *Steam ROM Manager.* 2. Select the **Install** button to install the program. --- - ### Installing Through *EmuDeck* + #### Installing Through *EmuDeck*