diff options
-rw-r--r-- | scripts/fuzz_relooper.py | 2 | ||||
-rw-r--r-- | src/cfg/Relooper.cpp | 170 | ||||
-rw-r--r-- | src/cfg/Relooper.h | 76 | ||||
-rw-r--r-- | src/passes/RemoveUnusedNames.cpp | 78 | ||||
-rw-r--r-- | src/wasm-validator.h | 7 | ||||
-rw-r--r-- | test/emcc_O2_hello_world.fromasm | 4 | ||||
-rw-r--r-- | test/emcc_O2_hello_world.fromasm.imprecise | 4 | ||||
-rw-r--r-- | test/emcc_hello_world.fromasm | 5938 | ||||
-rw-r--r-- | test/emcc_hello_world.fromasm.imprecise | 5938 | ||||
-rw-r--r-- | test/example/c-api-kitchen-sink.c | 97 | ||||
-rw-r--r-- | test/example/c-api-kitchen-sink.txt | 1707 | ||||
-rw-r--r-- | test/example/c-api-kitchen-sink.txt.txt | 600 | ||||
-rw-r--r-- | test/example/relooper-fuzz.c | 6 | ||||
-rw-r--r-- | test/example/relooper-fuzz.txt | 295 | ||||
-rw-r--r-- | test/example/relooper-fuzz1.c | 332 | ||||
-rw-r--r-- | test/example/relooper-fuzz1.txt | 501 | ||||
-rw-r--r-- | test/memorygrowth.fromasm | 4 | ||||
-rw-r--r-- | test/memorygrowth.fromasm.imprecise | 4 | ||||
-rw-r--r-- | test/passes/remove-unused-names.txt | 55 | ||||
-rw-r--r-- | test/passes/remove-unused-names.wast | 63 | ||||
-rw-r--r-- | test/unit.fromasm | 63 | ||||
-rw-r--r-- | test/unit.fromasm.imprecise | 63 |
22 files changed, 9105 insertions, 6902 deletions
diff --git a/scripts/fuzz_relooper.py b/scripts/fuzz_relooper.py index b8602ab81..53a16c8bd 100644 --- a/scripts/fuzz_relooper.py +++ b/scripts/fuzz_relooper.py @@ -308,7 +308,7 @@ int main() { print '^' subprocess.check_call(['./fuzz'], stdout=open('fuzz.wast', 'w')) print '*' - fast_out = subprocess.Popen(['bin/binaryen-shell', 'fuzz.wast'], + fast_out = subprocess.Popen(['bin/wasm-shell', 'fuzz.wast'], stdout=subprocess.PIPE, stderr=subprocess.PIPE).communicate()[0] print '-' diff --git a/src/cfg/Relooper.cpp b/src/cfg/Relooper.cpp index 9330be718..cde61df0b 100644 --- a/src/cfg/Relooper.cpp +++ b/src/cfg/Relooper.cpp @@ -18,6 +18,7 @@ #include <string.h> #include <stdlib.h> + #include <list> #include <stack> #include <string> @@ -38,6 +39,59 @@ static void PrintDebug(const char *Format, ...); #define DebugDump(x, ...) #endif +// Rendering utilities + +static wasm::Expression* HandleFollowupMultiples(wasm::Expression* Ret, Shape* Parent, RelooperBuilder& Builder, bool InLoop) { + if (!Parent->Next) return Ret; + + auto* Curr = Ret->dynCast<wasm::Block>(); + if (!Curr || Curr->name.is()) { + Curr = Builder.makeBlock(Ret); + } + // for each multiple after us, we create a block target for breaks to reach + while (Parent->Next) { + auto* Multiple = Shape::IsMultiple(Parent->Next); + if (!Multiple) break; + for (auto& iter : Multiple->InnerMap) { + int Id = iter.first; + Shape* Body = iter.second; + Curr->name = Builder.getBlockBreakName(Id); + auto* Outer = Builder.makeBlock(Curr); + Outer->list.push_back(Body->Render(Builder, InLoop)); + Outer->finalize(); // TODO: not really necessary + Curr = Outer; + } + Parent->Next = Parent->Next->Next; + } + // after the multiples is a simple or a loop, in both cases we must hit an entry + // block, and so this is the last one we need to take into account now (this + // is why we require that loops hit an entry). + if (Parent->Next) { + auto* Simple = Shape::IsSimple(Parent->Next); + if (Simple) { + // breaking on the next block's id takes us out, where we + // will reach its rendering + Curr->name = Builder.getBlockBreakName(Simple->Inner->Id); + } else { + // add one break target per entry for the loop + auto* Loop = Shape::IsLoop(Parent->Next); + assert(Loop); + assert(Loop->Entries.size() > 0); + if (Loop->Entries.size() == 1) { + Curr->name = Builder.getBlockBreakName((*Loop->Entries.begin())->Id); + } else { + for (auto* Entry : Loop->Entries) { + Curr->name = Builder.getBlockBreakName(Entry->Id); + auto* Outer = Builder.makeBlock(Curr); + Outer->finalize(); // TODO: not really necessary + Curr = Outer; + } + } + } + } + return Curr; +} + // Branch Branch::Branch(wasm::Expression* ConditionInit, wasm::Expression* CodeInit) : Ancestor(nullptr), Condition(ConditionInit), Code(CodeInit) {} @@ -53,12 +107,11 @@ wasm::Expression* Branch::Render(RelooperBuilder& Builder, Block *Target, bool S auto* Ret = Builder.makeBlock(); if (Code) Ret->list.push_back(Code); if (SetLabel) Ret->list.push_back(Builder.makeSetLabel(Target->Id)); - if (Ancestor) { - if (Type == Break) { - Ret->list.push_back(Builder.makeShapeBreak(Ancestor->Id)); - } else if (Type == Continue) { - Ret->list.push_back(Builder.makeShapeContinue(Ancestor->Id)); - } + if (Type == Break) { + Ret->list.push_back(Builder.makeBlockBreak(Target->Id)); + } else if (Type == Continue) { + assert(Ancestor); + Ret->list.push_back(Builder.makeShapeContinue(Ancestor->Id)); } Ret->finalize(); return Ret; @@ -100,7 +153,6 @@ wasm::Expression* Block::Render(RelooperBuilder& Builder, bool InLoop) { } bool SetLabel = true; // in some cases it is clear we can avoid setting label, see later - bool ForceSetLabel = Shape::IsEmulated(Parent) != nullptr; // A setting of the label variable (label = x) is necessary if it can // cause an impact. The main case is where we set label to x, then elsewhere @@ -129,7 +181,6 @@ wasm::Expression* Block::Render(RelooperBuilder& Builder, bool InLoop) { if (Fused) { PrintDebug("Fusing Multiple to Simple\n", 0); Parent->Next = Parent->Next->Next; - // When the Multiple has the same number of groups as we have branches, // they will all be fused, so it is safe to not set the label at all. // If a switch, then we can have multiple branches to the same target @@ -170,24 +221,23 @@ wasm::Expression* Block::Render(RelooperBuilder& Builder, bool InLoop) { Target = DefaultTarget; Details = ProcessedBranchesOut[DefaultTarget]; } - bool SetCurrLabel = (SetLabel && Target->IsCheckedMultipleEntry) || ForceSetLabel; + bool SetCurrLabel = SetLabel && Target->IsCheckedMultipleEntry; bool HasFusedContent = Fused && contains(Fused->InnerMap, Target->Id); + if (HasFusedContent) { + assert(Details->Type == Branch::Break); + Details->Type = Branch::Direct; + } wasm::Expression* CurrContent = nullptr; + bool IsDefault = iter == ProcessedBranchesOut.end(); if (SetCurrLabel || Details->Type != Branch::Direct || HasFusedContent || Details->Code) { CurrContent = Details->Render(Builder, Target, SetCurrLabel); if (HasFusedContent) { CurrContent = Builder.blockify(CurrContent, Fused->InnerMap.find(Target->Id)->second->Render(Builder, InLoop)); - } else if (Details->Type == Branch::Nested) { - // Nest the parent content here, and remove it from showing up afterwards as Next - assert(Parent->Next); - CurrContent = Builder.blockify(CurrContent, Parent->Next->Render(Builder, InLoop)); - Parent->Next = nullptr; } } - bool isDefault = iter == ProcessedBranchesOut.end(); // If there is nothing to show in this branch, omit the condition if (CurrContent) { - if (isDefault) { + if (IsDefault) { wasm::Expression* Now; if (RemainingConditions) { Now = Builder.makeIf(RemainingConditions, CurrContent); @@ -218,7 +268,7 @@ wasm::Expression* Block::Render(RelooperBuilder& Builder, bool InLoop) { RemainingConditions = Now; } } - if (isDefault) break; + if (IsDefault) break; } } else { // Emit a switch @@ -239,18 +289,17 @@ wasm::Expression* Block::Render(RelooperBuilder& Builder, bool InLoop) { CurrName = SwitchDefault; } // generate the content for this block - bool SetCurrLabel = (SetLabel && Target->IsCheckedMultipleEntry) || ForceSetLabel; + bool SetCurrLabel = SetLabel && Target->IsCheckedMultipleEntry; bool HasFusedContent = Fused && contains(Fused->InnerMap, Target->Id); + if (HasFusedContent) { + assert(Details->Type == Branch::Break); + Details->Type = Branch::Direct; + } wasm::Expression* CurrContent = nullptr; if (SetCurrLabel || Details->Type != Branch::Direct || HasFusedContent || Details->Code) { CurrContent = Details->Render(Builder, Target, SetCurrLabel); if (HasFusedContent) { CurrContent = Builder.blockify(CurrContent, Fused->InnerMap.find(Target->Id)->second->Render(Builder, InLoop)); - } else if (Details->Type == Branch::Nested) { - // Nest the parent content here, and remove it from showing up afterwards as Next - assert(Parent->Next); - CurrContent = Builder.blockify(CurrContent, Parent->Next->Render(Builder, InLoop)); - Parent->Next = nullptr; } } // generate a block to branch to, if we have content @@ -286,15 +335,8 @@ wasm::Expression* Block::Render(RelooperBuilder& Builder, bool InLoop) { } if (Root) { - if (Fused) { - // We are fusing a multiple into this simple - auto* Block = Builder.makeBlock(Root); - Block->name = Builder.getBreakName(Fused->Id); - Root = Block; - } Ret->list.push_back(Root); } - Ret->finalize(); return Ret; @@ -304,6 +346,7 @@ wasm::Expression* Block::Render(RelooperBuilder& Builder, bool InLoop) { wasm::Expression* SimpleShape::Render(RelooperBuilder& Builder, bool InLoop) { auto* Ret = Inner->Render(Builder, InLoop); + Ret = HandleFollowupMultiples(Ret, this, Builder, InLoop); if (Next) { Ret = Builder.makeSequence(Ret, Next->Render(Builder, InLoop)); } @@ -329,8 +372,8 @@ wasm::Expression* MultipleShape::Render(RelooperBuilder& Builder, bool InLoop) { CurrIf = Now; } } - auto* Ret = Builder.makeBlock(FirstIf); - Ret->name = Builder.getBreakName(Id); + wasm::Expression* Ret = Builder.makeBlock(FirstIf); + Ret = HandleFollowupMultiples(Ret, this, Builder, InLoop); if (Next) { Ret = Builder.makeSequence(Ret, Next->Render(Builder, InLoop)); } @@ -340,22 +383,17 @@ wasm::Expression* MultipleShape::Render(RelooperBuilder& Builder, bool InLoop) { // LoopShape wasm::Expression* LoopShape::Render(RelooperBuilder& Builder, bool InLoop) { - wasm::Expression* Ret = Builder.makeLoop(Builder.getBreakName(Id), Builder.getContinueName(Id), Inner->Render(Builder, true)); + wasm::Expression* Ret = Builder.makeLoop(wasm::Name(), Builder.getShapeContinueName(Id), Inner->Render(Builder, true)); + Ret = HandleFollowupMultiples(Ret, this, Builder, InLoop); if (Next) { Ret = Builder.makeSequence(Ret, Next->Render(Builder, InLoop)); } return Ret; } -// EmulatedShape - -wasm::Expression* EmulatedShape::Render(RelooperBuilder& Builder, bool InLoop) { - abort(); // TODO -} - // Relooper -Relooper::Relooper() : Root(nullptr), Emulate(false), MinSize(false), BlockIdCounter(1), ShapeIdCounter(0) { // block ID 0 is reserved for clearings +Relooper::Relooper() : Root(nullptr), MinSize(false), BlockIdCounter(1), ShapeIdCounter(0) { // block ID 0 is reserved for clearings } Relooper::~Relooper() { @@ -462,27 +500,12 @@ void Relooper::Calculate(Block *Entry) { BlockSet JustInner; JustInner.insert(Inner); for (BlockSet::iterator iter = NextEntries.begin(); iter != NextEntries.end(); iter++) { - Solipsize(*iter, Branch::Direct, Simple, JustInner); + Solipsize(*iter, Branch::Break, Simple, JustInner); } } return Simple; } - Shape *MakeEmulated(BlockSet &Blocks, Block *Entry, BlockSet &NextEntries) { - PrintDebug("creating emulated block with entry #%d and everything it can reach, %d blocks\n", Entry->Id, Blocks.size()); - EmulatedShape *Emulated = new EmulatedShape; - Notice(Emulated); - Emulated->Entry = Entry; - for (BlockSet::iterator iter = Blocks.begin(); iter != Blocks.end(); iter++) { - Block *Curr = *iter; - Emulated->Blocks.insert(Curr); - Curr->Parent = Emulated; - Solipsize(Curr, Branch::Continue, Emulated, Blocks); - } - Blocks.clear(); - return Emulated; - } - Shape *MakeLoop(BlockSet &Blocks, BlockSet& Entries, BlockSet &NextEntries) { // Find the inner blocks in this loop. Proceed backwards from the entries until // you reach a seen block, collecting as you go. @@ -590,8 +613,9 @@ void Relooper::Calculate(Block *Entry) { Solipsize(*iter, Branch::Break, Loop, InnerBlocks); } // Finish up - Shape *Inner = Process(InnerBlocks, Entries, nullptr); + Shape *Inner = Process(InnerBlocks, Entries); Loop->Inner = Inner; + Loop->Entries = Entries; return Loop; } @@ -715,9 +739,8 @@ void Relooper::Calculate(Block *Entry) { #endif } - Shape *MakeMultiple(BlockSet &Blocks, BlockSet& Entries, BlockBlockSetMap& IndependentGroups, Shape *Prev, BlockSet &NextEntries) { + Shape *MakeMultiple(BlockSet &Blocks, BlockSet& Entries, BlockBlockSetMap& IndependentGroups, BlockSet &NextEntries, bool IsCheckedMultiple) { PrintDebug("creating multiple block with %d inner groups\n", IndependentGroups.size()); - bool Fused = !!(Shape::IsSimple(Prev)); MultipleShape *Multiple = new MultipleShape(); Notice(Multiple); BlockSet CurrEntries; @@ -745,9 +768,8 @@ void Relooper::Calculate(Block *Entry) { iter = Next; // increment carefully because Solipsize can remove us } } - Multiple->InnerMap[CurrEntry->Id] = Process(CurrBlocks, CurrEntries, nullptr); - // If we are not fused, then our entries will actually be checked - if (!Fused) { + Multiple->InnerMap[CurrEntry->Id] = Process(CurrBlocks, CurrEntries); + if (IsCheckedMultiple) { CurrEntry->IsCheckedMultipleEntry = true; } } @@ -767,13 +789,14 @@ void Relooper::Calculate(Block *Entry) { // The Make* functions receive a NextEntries. If they fill it with data, those are the entries for the // ->Next block on them, and the blocks are what remains in Blocks (which Make* modify). In this way // we avoid recursing on Next (imagine a long chain of Simples, if we recursed we could blow the stack). - Shape *Process(BlockSet &Blocks, BlockSet& InitialEntries, Shape *Prev) { + Shape *Process(BlockSet &Blocks, BlockSet& InitialEntries) { PrintDebug("Process() called\n", 0); BlockSet *Entries = &InitialEntries; BlockSet TempEntries[2]; int CurrTempIndex = 0; BlockSet *NextEntries; Shape *Ret = nullptr; + Shape *Prev = nullptr; #define Make(call) \ Shape *Temp = call; \ if (Prev) Prev->Next = Temp; \ @@ -794,9 +817,6 @@ void Relooper::Calculate(Block *Entry) { if (Entries->size() == 0) return Ret; if (Entries->size() == 1) { Block *Curr = *(Entries->begin()); - if (Parent->Emulate) { - Make(MakeEmulated(Blocks, Curr, *NextEntries)); - } if (Curr->BranchesIn.size() == 0) { // One entry, no looping ==> Simple Make(MakeSimple(Blocks, Curr, *NextEntries)); @@ -816,7 +836,8 @@ void Relooper::Calculate(Block *Entry) { if (IndependentGroups.size() > 0) { // We can handle a group in a multiple if its entry cannot be reached by another group. // Note that it might be reachable by itself - a loop. But that is fine, we will create - // a loop inside the multiple block (which is the performant order to do it). + // a loop inside the multiple block, which is both the performant order to do it, and + // preserves the property that a loop will always reach an entry. for (BlockBlockSetMap::iterator iter = IndependentGroups.begin(); iter != IndependentGroups.end();) { Block *Entry = iter->first; BlockSet &Group = iter->second; @@ -879,7 +900,18 @@ void Relooper::Calculate(Block *Entry) { if (IndependentGroups.size() > 0) { // Some groups removable ==> Multiple - Make(MakeMultiple(Blocks, *Entries, IndependentGroups, Prev, *NextEntries)); + // This is a checked multiple if it has an entry that is an entry to this Process call, that is, + // if we can reach it from outside this set of blocks, then we must check the label variable + // to do so. Otherwise, if it is just internal blocks, those can always be jumped to forward, + // without using the label variable + bool Checked = false; + for (auto* Entry : *Entries) { + if (InitialEntries.count(Entry)) { + Checked = true; + break; + } + } + Make(MakeMultiple(Blocks, *Entries, IndependentGroups, *NextEntries, Checked)); } } // No independent groups, must be loopable ==> Loop @@ -901,7 +933,7 @@ void Relooper::Calculate(Block *Entry) { BlockSet Entries; Entries.insert(Entry); - Root = Analyzer(this).Process(AllBlocks, Entries, nullptr); + Root = Analyzer(this).Process(AllBlocks, Entries); assert(Root); } diff --git a/src/cfg/Relooper.h b/src/cfg/Relooper.h index 74a95c8bf..50f40fd88 100644 --- a/src/cfg/Relooper.h +++ b/src/cfg/Relooper.h @@ -53,17 +53,21 @@ public: wasm::Binary* makeCheckLabel(wasm::Index value) { return makeBinary(wasm::EqInt32, makeGetLabel(), makeConst(wasm::Literal(int32_t(value)))); } - wasm::Break* makeShapeBreak(int id) { - return wasm::Builder::makeBreak(getBreakName(id)); + + // breaks are on blocks, as they can be specific, we make one wasm block per basic block + wasm::Break* makeBlockBreak(int id) { + return wasm::Builder::makeBreak(getBlockBreakName(id)); } + // continues are on shapes, as there is one per loop, and if we have more than one + // going there, it is irreducible control flow anyhow wasm::Break* makeShapeContinue(int id) { - return wasm::Builder::makeBreak(getContinueName(id)); + return wasm::Builder::makeBreak(getShapeContinueName(id)); } - wasm::Name getBreakName(int id) { - return wasm::Name(std::string("shape$") + std::to_string(id) + "$break"); + wasm::Name getBlockBreakName(int id) { + return wasm::Name(std::string("block$") + std::to_string(id) + "$break"); } - wasm::Name getContinueName(int id) { + wasm::Name getShapeContinueName(int id) { return wasm::Name(std::string("shape$") + std::to_string(id) + "$continue"); } }; @@ -76,9 +80,7 @@ struct Branch { enum FlowType { Direct = 0, // We will directly reach the right location through other means, no need for continue or break Break = 1, - Continue = 2, - Nested = 3 // This code is directly reached, but we must be careful to ensure it is nested in an if - it is not reached - // unconditionally, other code paths exist alongside it that we need to make sure do not intertwine + Continue = 2 }; Shape *Ancestor; // If not NULL, this shape is the relevant one for purposes of getting to the target block. We break or continue on it Branch::FlowType Type; // If Ancestor is not NULL, this says whether to break or continue @@ -144,12 +146,14 @@ struct InsertOrderedSet InsertOrderedSet() {} InsertOrderedSet(const InsertOrderedSet& other) { + *this = other; + } + InsertOrderedSet& operator=(const InsertOrderedSet& other) { + clear(); for (auto i : other.List) { insert(i); // inserting manually creates proper iterators } - } - InsertOrderedSet& operator=(const InsertOrderedSet& other) { - abort(); // TODO, watch out for iterators + return *this; } }; @@ -218,7 +222,7 @@ struct Block { BlockBranchMap ProcessedBranchesOut; BlockSet ProcessedBranchesIn; Shape *Parent; // The shape we are directly inside - int Id; // A unique identifier, defined when added to relooper. Note that this uniquely identifies a *logical* block - if we split it, the two instances have the same content *and* the same Id + int Id; // A unique identifier, defined when added to relooper wasm::Expression* Code; // The code in this block. This can be arbitrary wasm code, including internal control flow, it should just not branch to the outside wasm::Expression* SwitchCondition; // If nullptr, then this block ends in ifs (or nothing). otherwise, this block ends in a switch, done on this condition bool IsCheckedMultipleEntry; // If true, we are a multiple entry, so reaching us requires setting the label variable @@ -241,26 +245,25 @@ struct Block { // Represents a structured control flow shape, one of // -// Simple: No control flow at all, just instructions. If several -// blocks, then -// -// Multiple: A shape with more than one entry. If the next block to -// be entered is among them, we run it and continue to -// the next shape, otherwise we continue immediately to the -// next shape. +// Simple: No control flow at all, just instructions in a single +// basic block. // -// Loop: An infinite loop. +// Multiple: A shape with at least one entry. We may visit one of +// the entries, or none, before continuing to the next +// shape after this. // -// Emulated: Control flow is managed by a switch in a loop. This -// is necessary in some cases, for example when control -// flow is not known until runtime (indirect branches, -// setjmp returns, etc.) +// Loop: An infinite loop. We assume the property that a loop +// will always visit one of its entries, and so for example +// we cannot have a loop containing a multiple and nothing +// else (since we might not visit any of the multiple's +// blocks). Multiple entries are possible for the block, +// however, which is necessary for irreducible control +// flow, of course. // struct SimpleShape; struct MultipleShape; struct LoopShape; -struct EmulatedShape; struct Shape { int Id; // A unique identifier. Used to identify loops, labels are Lx where x is the Id. Defined when added to relooper @@ -270,8 +273,7 @@ struct Shape { enum ShapeType { Simple, Multiple, - Loop, - Emulated + Loop }; ShapeType Type; @@ -283,7 +285,6 @@ struct Shape { static SimpleShape *IsSimple(Shape *It) { return It && It->Type == Simple ? (SimpleShape*)It : NULL; } static MultipleShape *IsMultiple(Shape *It) { return It && It->Type == Multiple ? (MultipleShape*)It : NULL; } static LoopShape *IsLoop(Shape *It) { return It && It->Type == Loop ? (LoopShape*)It : NULL; } - static EmulatedShape *IsEmulated(Shape *It) { return It && It->Type == Emulated ? (EmulatedShape*)It : NULL; } }; struct SimpleShape : public Shape { @@ -293,7 +294,6 @@ struct SimpleShape : public Shape { wasm::Expression* Render(RelooperBuilder& Builder, bool InLoop) override; }; -// Blocks with the same id were split and are identical, so we just care about ids in Multiple entries typedef std::map<int, Shape*> IdShapeMap; struct MultipleShape : public Shape { @@ -307,17 +307,9 @@ struct MultipleShape : public Shape { struct LoopShape : public Shape { Shape *Inner; - LoopShape() : Shape(Loop), Inner(NULL) {} - wasm::Expression* Render(RelooperBuilder& Builder, bool InLoop) override; -}; + BlockSet Entries; // we must visit at least one of these -// TODO EmulatedShape is only partially functional. Currently it can be used for the -// entire set of blocks being relooped, but not subsets. -struct EmulatedShape : public Shape { - Block *Entry; - BlockSet Blocks; - - EmulatedShape() : Shape(Emulated) { } + LoopShape() : Shape(Loop), Inner(NULL) {} wasm::Expression* Render(RelooperBuilder& Builder, bool InLoop) override; }; @@ -336,7 +328,6 @@ struct Relooper { std::deque<Block*> Blocks; std::deque<Shape*> Shapes; Shape *Root; - bool Emulate; bool MinSize; int BlockIdCounter; int ShapeIdCounter; @@ -352,9 +343,6 @@ struct Relooper { // Renders the result. wasm::Expression* Render(RelooperBuilder& Builder); - // Sets whether we must emulate everything with switch-loop code - void SetEmulate(int E) { Emulate = !!E; } - // Sets us to try to minimize size void SetMinSize(bool MinSize_) { MinSize = MinSize_; } }; diff --git a/src/passes/RemoveUnusedNames.cpp b/src/passes/RemoveUnusedNames.cpp index 1cd2a483f..9c6743479 100644 --- a/src/passes/RemoveUnusedNames.cpp +++ b/src/passes/RemoveUnusedNames.cpp @@ -15,7 +15,8 @@ */ // -// Removes names from locations that are never branched to. +// Removes names from locations that are never branched to, and +// merge names when possible (by merging their blocks) // #include <wasm.h> @@ -30,27 +31,84 @@ struct RemoveUnusedNames : public WalkerPass<PostWalker<RemoveUnusedNames, Visit // We maintain a list of branches that we saw in children, then when we reach // a parent block, we know if it was branched to - std::set<Name> branchesSeen; + std::map<Name, std::set<Expression*>> branchesSeen; void visitBreak(Break *curr) { - branchesSeen.insert(curr->name); + branchesSeen[curr->name].insert(curr); + } + + void visitSwitch(Switch *curr) { + for (auto name : curr->targets) { + branchesSeen[name].insert(curr); + } + branchesSeen[curr->default_].insert(curr); + } + + void handleBreakTarget(Name& name) { + if (name.is()) { + if (branchesSeen.find(name) == branchesSeen.end()) { + name = Name(); + } else { + branchesSeen.erase(name); + } + } } void visitBlock(Block *curr) { - if (curr->name.is() && branchesSeen.count(curr->name) == 0) { - curr->name = Name(); + if (curr->name.is() && curr->list.size() == 1) { + auto* child = curr->list[0]->dynCast<Block>(); + if (child && child->name.is()) { + // we have just one child, this block, so breaking out of it goes to the same place as breaking out of us, we just need one name (and block) + auto& branches = branchesSeen[curr->name]; + for (auto* branch : branches) { + if (Break* br = branch->dynCast<Break>()) { + if (br->name == curr->name) br->name = child->name; + } else if (Switch* sw = branch->dynCast<Switch>()) { + for (auto& target : sw->targets) { + if (target == curr->name) target = child->name; + } + if (sw->default_ == curr->name) sw->default_ = child->name; + } else { + WASM_UNREACHABLE(); + } + } + replaceCurrent(child); + } + } + handleBreakTarget(curr->name); + if (curr->name.is() && curr->list.size() == 1) { + auto* child = curr->list[0]->dynCast<Loop>(); + if (child && !child->out.is()) { + // we have just one child, this loop, and it lacks an out label. So this block's name is doing just that! + child->out = curr->name; + replaceCurrent(child); + } } } - void visitSwitch(Switch *curr) { - for (auto name : curr->targets) { - branchesSeen.insert(name); + void visitLoop(Loop *curr) { + handleBreakTarget(curr->in); + // Loops can have just 'in', but cannot have just 'out' + auto out = curr->out; + handleBreakTarget(curr->out); + if (curr->out.is() && !curr->in.is()) { + auto* block = getModule()->allocator.alloc<Block>(); + block->name = out; + block->list.push_back(curr->body); + replaceCurrent(block); + } + if (curr->in.is() && !curr->out.is()) { + auto* child = curr->body->dynCast<Block>(); + if (child && child->name.is()) { + // we have just one child, this block, and we lack an out label. So we can take the block's! + curr->out = child->name; + child->name = Name(); + } } - branchesSeen.insert(curr->default_); } void visitFunction(Function *curr) { - branchesSeen.clear(); + assert(branchesSeen.empty()); } }; diff --git a/src/wasm-validator.h b/src/wasm-validator.h index b9ad30c73..066ab57da 100644 --- a/src/wasm-validator.h +++ b/src/wasm-validator.h @@ -312,7 +312,12 @@ public: void doWalkFunction(Function* func) { PostWalker<WasmValidator, Visitor<WasmValidator>>::doWalkFunction(func); - shouldBeTrue(breakTypes.size() == 0, "break targets", "all break targets must be valid"); + if (!shouldBeTrue(breakTypes.size() == 0, "break targets", "all break targets must be valid")) { + for (auto& target : breakTypes) { + std::cerr << " - " << target.first << '\n'; + } + breakTypes.clear(); + } } private: diff --git a/test/emcc_O2_hello_world.fromasm b/test/emcc_O2_hello_world.fromasm index 7bd7b46ff..828905561 100644 --- a/test/emcc_O2_hello_world.fromasm +++ b/test/emcc_O2_hello_world.fromasm @@ -5237,7 +5237,7 @@ (i32.const 24) ) ) - (loop $do-out$73 $do-in$74 + (loop $do-in$74 (i32.store (set_local $3 (i32.add @@ -5777,7 +5777,7 @@ (set_local $2 (i32.const 0) ) - (loop $do-out$77 $do-in$78 + (loop $do-in$78 (i32.store offset=12 (set_local $1 (i32.add diff --git a/test/emcc_O2_hello_world.fromasm.imprecise b/test/emcc_O2_hello_world.fromasm.imprecise index 12c24dd85..ede6c05d4 100644 --- a/test/emcc_O2_hello_world.fromasm.imprecise +++ b/test/emcc_O2_hello_world.fromasm.imprecise @@ -5236,7 +5236,7 @@ (i32.const 24) ) ) - (loop $do-out$73 $do-in$74 + (loop $do-in$74 (i32.store (set_local $3 (i32.add @@ -5776,7 +5776,7 @@ (set_local $2 (i32.const 0) ) - (loop $do-out$77 $do-in$78 + (loop $do-in$78 (i32.store offset=12 (set_local $1 (i32.add diff --git a/test/emcc_hello_world.fromasm b/test/emcc_hello_world.fromasm index e36db1cc9..c99290ba8 100644 --- a/test/emcc_hello_world.fromasm +++ b/test/emcc_hello_world.fromasm @@ -323,80 +323,78 @@ ) (block $switch$0 (block $switch-default$3 - (block $switch-default$3 - (block $switch-case$2 - (block $switch-case$1 - (br_table $switch-case$1 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-case$2 $switch-default$3 - (i32.sub - (set_local $2 - (i32.and - (get_local $2) - (i32.const 2047) - ) + (block $switch-case$2 + (block $switch-case$1 + (br_table $switch-case$1 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-case$2 $switch-default$3 + (i32.sub + (set_local $2 + (i32.and + (get_local $2) + (i32.const 2047) ) - (i32.const 0) ) + (i32.const 0) ) ) - (i32.store - (get_local $1) - (if - (f64.ne - (get_local $0) - (f64.const 0) - ) - (block - (set_local $0 - (call $_frexp - (f64.mul - (get_local $0) - (f64.const 18446744073709551615) - ) - (get_local $1) + ) + (i32.store + (get_local $1) + (if + (f64.ne + (get_local $0) + (f64.const 0) + ) + (block + (set_local $0 + (call $_frexp + (f64.mul + (get_local $0) + (f64.const 18446744073709551615) ) + (get_local $1) ) - (i32.add - (i32.load - (get_local $1) - ) - (i32.const -64) + ) + (i32.add + (i32.load + (get_local $1) ) + (i32.const -64) ) - (i32.const 0) ) - ) - (br $switch$0 - (get_local $0) + (i32.const 0) ) ) (br $switch$0 (get_local $0) ) ) - (i32.store - (get_local $1) - (i32.add - (get_local $2) - (i32.const -1022) - ) + (br $switch$0 + (get_local $0) ) - (i32.store - (i32.load - (i32.const 24) - ) - (get_local $3) + ) + (i32.store + (get_local $1) + (i32.add + (get_local $2) + (i32.const -1022) ) - (i32.store offset=4 - (i32.load - (i32.const 24) - ) - (i32.or - (i32.and - (get_local $4) - (i32.const -2146435073) - ) - (i32.const 1071644672) + ) + (i32.store + (i32.load + (i32.const 24) + ) + (get_local $3) + ) + (i32.store offset=4 + (i32.load + (i32.const 24) + ) + (i32.or + (i32.and + (get_local $4) + (i32.const -2146435073) ) + (i32.const 1071644672) ) ) (f64.load @@ -1494,7 +1492,7 @@ (i32.const 40) ) ) - (loop $do-out$0 $do-in$1 + (loop $do-in$1 (i32.store (get_local $4) (i32.const 0) @@ -3208,41 +3206,39 @@ ) (loop $label$break$L9 $label$continue$L9 (block $switch-default$5 - (block $switch-default$5 - (block $switch-case$4 - (block $switch-case$3 - (br_table $switch-case$4 $switch-default$5 $switch-default$5 $switch-default$5 $switch-default$5 $switch-default$5 $switch-default$5 $switch-default$5 $switch-default$5 $switch-default$5 $switch-default$5 $switch-default$5 $switch-default$5 $switch-default$5 $switch-default$5 $switch-default$5 $switch-default$5 $switch-default$5 $switch-default$5 $switch-default$5 $switch-default$5 $switch-default$5 $switch-default$5 $switch-default$5 $switch-default$5 $switch-default$5 $switch-default$5 $switch-default$5 $switch-default$5 $switch-default$5 $switch-default$5 $switch-default$5 $switch-default$5 $switch-default$5 $switch-default$5 $switch-default$5 $switch-default$5 $switch-case$3 $switch-default$5 - (i32.sub - (i32.shr_s - (i32.shl - (get_local $1) - (i32.const 24) - ) + (block $switch-case$4 + (block $switch-case$3 + (br_table $switch-case$4 $switch-default$5 $switch-default$5 $switch-default$5 $switch-default$5 $switch-default$5 $switch-default$5 $switch-default$5 $switch-default$5 $switch-default$5 $switch-default$5 $switch-default$5 $switch-default$5 $switch-default$5 $switch-default$5 $switch-default$5 $switch-default$5 $switch-default$5 $switch-default$5 $switch-default$5 $switch-default$5 $switch-default$5 $switch-default$5 $switch-default$5 $switch-default$5 $switch-default$5 $switch-default$5 $switch-default$5 $switch-default$5 $switch-default$5 $switch-default$5 $switch-default$5 $switch-default$5 $switch-default$5 $switch-default$5 $switch-default$5 $switch-default$5 $switch-case$3 $switch-default$5 + (i32.sub + (i32.shr_s + (i32.shl + (get_local $1) (i32.const 24) ) - (i32.const 0) + (i32.const 24) ) + (i32.const 0) ) ) - (set_local $54 - (get_local $5) - ) - (set_local $65 - (get_local $5) - ) - (set_local $12 - (i32.const 9) - ) - (br $label$break$L9) ) - (set_local $41 + (set_local $54 (get_local $5) ) - (set_local $55 + (set_local $65 (get_local $5) ) + (set_local $12 + (i32.const 9) + ) (br $label$break$L9) ) + (set_local $41 + (get_local $5) + ) + (set_local $55 + (get_local $5) + ) + (br $label$break$L9) ) (set_local $1 (i32.load8_s @@ -3938,7 +3934,7 @@ ) ) ) - (loop $while-out$17 $while-in$18 + (loop $while-in$18 (set_local $5 (i32.add (i32.mul @@ -4393,621 +4389,258 @@ ) ) ) - (block $label$break$L75 - (block $switch$24 - (block $switch-default$127 - (block $switch-default$127 - (block $switch-case$126 - (block $switch-case$55 - (block $switch-case$54 - (block $switch-case$53 - (block $switch-case$52 - (block $switch-case$51 - (block $switch-case$50 - (block $switch-case$49 - (block $switch-case$48 - (block $switch-case$47 - (block $switch-case$46 - (block $switch-case$45 - (block $switch-case$44 - (block $switch-case$43 - (block $switch-case$42 - (block $switch-case$41 - (block $switch-case$40 - (block $switch-case$37 - (block $switch-case$36 - (block $switch-case$35 - (block $switch-case$34 - (br_table $switch-case$49 $switch-default$127 $switch-case$47 $switch-default$127 $switch-case$52 $switch-case$51 $switch-case$50 $switch-default$127 $switch-default$127 $switch-default$127 $switch-default$127 $switch-default$127 $switch-default$127 $switch-default$127 $switch-default$127 $switch-default$127 $switch-default$127 $switch-default$127 $switch-case$48 $switch-default$127 $switch-default$127 $switch-default$127 $switch-default$127 $switch-case$36 $switch-default$127 $switch-default$127 $switch-default$127 $switch-default$127 $switch-default$127 $switch-default$127 $switch-default$127 $switch-default$127 $switch-case$53 $switch-default$127 $switch-case$44 $switch-case$42 $switch-case$126 $switch-case$55 $switch-case$54 $switch-default$127 $switch-case$41 $switch-default$127 $switch-default$127 $switch-default$127 $switch-case$45 $switch-case$34 $switch-case$40 $switch-case$35 $switch-default$127 $switch-default$127 $switch-case$46 $switch-default$127 $switch-case$43 $switch-default$127 $switch-default$127 $switch-case$37 $switch-default$127 - (i32.sub - (set_local $26 - (select - (i32.and - (get_local $1) - (i32.const -33) - ) - (get_local $1) - (get_local $5) - ) - ) - (i32.const 65) - ) - ) - ) - (block $switch-default$33 - (block $switch-default$33 - (block $switch-case$32 - (block $switch-case$31 - (block $switch-case$30 - (block $switch-case$29 - (block $switch-case$28 - (block $switch-case$27 - (block $switch-case$26 - (br_table $switch-case$26 $switch-case$27 $switch-case$28 $switch-case$29 $switch-case$30 $switch-default$33 $switch-case$31 $switch-case$32 $switch-default$33 - (i32.sub - (get_local $13) - (i32.const 0) - ) - ) - ) - (i32.store - (i32.load - (get_local $19) - ) - (get_local $22) - ) - (set_local $20 - (get_local $9) - ) - (set_local $1 - (get_local $17) - ) - (set_local $8 - (get_local $21) - ) - (br $label$continue$L1) - ) - (i32.store - (i32.load - (get_local $19) - ) - (get_local $22) - ) - (set_local $20 - (get_local $9) - ) - (set_local $1 - (get_local $17) - ) - (set_local $8 - (get_local $21) - ) - (br $label$continue$L1) - ) - (i32.store - (set_local $1 - (i32.load - (get_local $19) - ) - ) - (get_local $22) - ) - (i32.store offset=4 - (get_local $1) - (i32.shr_s - (i32.shl - (i32.lt_s - (get_local $22) - (i32.const 0) - ) - (i32.const 31) - ) - (i32.const 31) - ) - ) - (set_local $20 - (get_local $9) - ) - (set_local $1 - (get_local $17) - ) - (set_local $8 - (get_local $21) - ) - (br $label$continue$L1) - ) - (i32.store16 - (i32.load - (get_local $19) - ) - (i32.and - (get_local $22) - (i32.const 65535) - ) - ) - (set_local $20 - (get_local $9) - ) - (set_local $1 - (get_local $17) - ) - (set_local $8 - (get_local $21) - ) - (br $label$continue$L1) - ) - (i32.store8 - (i32.load - (get_local $19) - ) - (i32.and - (get_local $22) - (i32.const 255) - ) - ) - (set_local $20 - (get_local $9) - ) - (set_local $1 - (get_local $17) - ) - (set_local $8 - (get_local $21) - ) - (br $label$continue$L1) - ) - (i32.store - (i32.load - (get_local $19) - ) - (get_local $22) - ) - (set_local $20 - (get_local $9) - ) - (set_local $1 - (get_local $17) - ) - (set_local $8 - (get_local $21) - ) - (br $label$continue$L1) - ) - (i32.store - (set_local $1 - (i32.load - (get_local $19) - ) - ) - (get_local $22) - ) - (i32.store offset=4 - (get_local $1) - (i32.shr_s - (i32.shl - (i32.lt_s - (get_local $22) - (i32.const 0) - ) - (i32.const 31) - ) - (i32.const 31) - ) - ) - (set_local $20 - (get_local $9) - ) - (set_local $1 - (get_local $17) - ) - (set_local $8 - (get_local $21) - ) - (br $label$continue$L1) - ) - (set_local $20 - (get_local $9) - ) - (set_local $1 - (get_local $17) - ) - (set_local $8 - (get_local $21) - ) - (br $label$continue$L1) - ) - ) - (set_local $46 - (i32.or - (get_local $18) - (i32.const 8) - ) - ) - (set_local $57 - (select - (get_local $10) - (i32.const 8) - (i32.gt_u - (get_local $10) - (i32.const 8) - ) - ) - ) - (set_local $68 - (i32.const 120) - ) - (set_local $12 - (i32.const 64) - ) - (br $switch$24) - ) - ) - (set_local $46 - (get_local $18) - ) - (set_local $57 - (get_local $10) - ) - (set_local $68 - (get_local $26) - ) - (set_local $12 - (i32.const 64) - ) - (br $switch$24) - ) - (if - (i32.and - (i32.eq - (set_local $5 - (i32.load - (set_local $1 - (get_local $19) - ) - ) - ) - (i32.const 0) - ) - (i32.eq - (set_local $1 - (i32.load offset=4 - (get_local $1) - ) - ) - (i32.const 0) - ) - ) - (set_local $6 - (get_local $28) - ) - (block - (set_local $6 - (get_local $28) - ) - (loop $while-out$38 $while-in$39 - (i32.store8 - (set_local $6 - (i32.add - (get_local $6) - (i32.const -1) - ) - ) - (i32.and - (i32.or - (i32.and - (get_local $5) - (i32.const 7) - ) - (i32.const 48) - ) - (i32.const 255) - ) - ) - (if - (i32.and - (i32.eq - (set_local $5 - (call $_bitshift64Lshr - (get_local $5) - (get_local $1) - (i32.const 3) - ) - ) - (i32.const 0) - ) - (i32.eq - (set_local $1 - (i32.load - (i32.const 168) - ) - ) - (i32.const 0) - ) - ) - (br $while-out$38) - ) - (br $while-in$39) - ) - ) - ) - (set_local $58 - (if - (i32.eq - (i32.and - (get_local $18) - (i32.const 8) - ) + (block $switch$24 + (block $switch-default$127 + (block $switch-case$49 + (block $switch-case$48 + (block $switch-case$47 + (block $switch-case$46 + (block $switch-case$45 + (block $switch-case$44 + (block $switch-case$43 + (block $switch-case$41 + (block $switch-case$40 + (block $switch-case$36 + (block $switch-case$35 + (block $switch-case$34 + (br_table $switch-case$49 $switch-default$127 $switch-case$47 $switch-default$127 $switch-case$49 $switch-case$49 $switch-case$49 $switch-default$127 $switch-default$127 $switch-default$127 $switch-default$127 $switch-default$127 $switch-default$127 $switch-default$127 $switch-default$127 $switch-default$127 $switch-default$127 $switch-default$127 $switch-case$48 $switch-default$127 $switch-default$127 $switch-default$127 $switch-default$127 $switch-case$36 $switch-default$127 $switch-default$127 $switch-default$127 $switch-default$127 $switch-default$127 $switch-default$127 $switch-default$127 $switch-default$127 $switch-case$49 $switch-default$127 $switch-case$44 $switch-case$41 $switch-case$49 $switch-case$49 $switch-case$49 $switch-default$127 $switch-case$41 $switch-default$127 $switch-default$127 $switch-default$127 $switch-case$45 $switch-case$34 $switch-case$40 $switch-case$35 $switch-default$127 $switch-default$127 $switch-case$46 $switch-default$127 $switch-case$43 $switch-default$127 $switch-default$127 $switch-case$36 $switch-default$127 + (i32.sub + (set_local $26 + (select + (i32.and + (get_local $1) + (i32.const -33) + ) + (get_local $1) + (get_local $5) + ) + ) + (i32.const 65) + ) + ) + ) + (block $switch-default$33 + (block $switch-case$32 + (block $switch-case$31 + (block $switch-case$30 + (block $switch-case$29 + (block $switch-case$28 + (block $switch-case$27 + (block $switch-case$26 + (br_table $switch-case$26 $switch-case$27 $switch-case$28 $switch-case$29 $switch-case$30 $switch-default$33 $switch-case$31 $switch-case$32 $switch-default$33 + (i32.sub + (get_local $13) (i32.const 0) ) - (block - (set_local $34 - (get_local $18) - ) - (set_local $32 - (get_local $10) - ) - (set_local $35 - (i32.const 0) - ) - (set_local $36 - (i32.const 4091) - ) - (set_local $12 - (i32.const 77) - ) - (get_local $6) - ) - (block - (set_local $5 - (i32.lt_s - (get_local $10) - (set_local $1 - (i32.add - (i32.sub - (get_local $71) - (get_local $6) - ) - (i32.const 1) - ) - ) - ) - ) - (set_local $34 - (get_local $18) - ) - (set_local $32 - (select - (get_local $1) - (get_local $10) - (get_local $5) - ) - ) - (set_local $35 - (i32.const 0) - ) - (set_local $36 - (i32.const 4091) - ) - (set_local $12 - (i32.const 77) - ) - (get_local $6) - ) - ) - ) - (br $switch$24) - ) - ) - (set_local $5 - (i32.load - (set_local $1 - (get_local $19) - ) - ) - ) - (if - (i32.lt_s - (set_local $33 - (i32.load offset=4 - (get_local $1) - ) - ) - (i32.const 0) - ) - (block - (set_local $1 - (call $_i64Subtract - (i32.const 0) - (i32.const 0) - (get_local $5) - (get_local $33) - ) - ) - (set_local $5 - (i32.load - (i32.const 168) ) ) (i32.store - (set_local $33 + (i32.load (get_local $19) ) - (get_local $1) - ) - (i32.store offset=4 - (get_local $33) - (get_local $5) + (get_local $22) ) - (set_local $33 - (get_local $1) - ) - (set_local $59 - (get_local $5) + (set_local $20 + (get_local $9) ) - (set_local $60 - (i32.const 1) + (set_local $1 + (get_local $17) ) - (set_local $61 - (i32.const 4091) + (set_local $8 + (get_local $21) ) - (set_local $12 - (i32.const 76) + (br $label$continue$L1) + ) + (i32.store + (i32.load + (get_local $19) ) - (br $label$break$L75) + (get_local $22) ) + (set_local $20 + (get_local $9) + ) + (set_local $1 + (get_local $17) + ) + (set_local $8 + (get_local $21) + ) + (br $label$continue$L1) ) - (set_local $33 - (if - (i32.eq - (i32.and - (get_local $18) - (i32.const 2048) - ) - (i32.const 0) - ) - (block - (set_local $1 - (select - (i32.const 4091) - (i32.const 4093) - (i32.eq - (set_local $6 - (i32.and - (get_local $18) - (i32.const 1) - ) - ) - (i32.const 0) - ) - ) - ) - (set_local $59 - (get_local $33) - ) - (set_local $60 - (get_local $6) - ) - (set_local $61 - (get_local $1) - ) - (set_local $12 - (i32.const 76) - ) - (get_local $5) + (i32.store + (set_local $1 + (i32.load + (get_local $19) ) - (block - (set_local $59 - (get_local $33) - ) - (set_local $60 - (i32.const 1) - ) - (set_local $61 - (i32.const 4092) - ) - (set_local $12 - (i32.const 76) + ) + (get_local $22) + ) + (i32.store offset=4 + (get_local $1) + (i32.shr_s + (i32.shl + (i32.lt_s + (get_local $22) + (i32.const 0) ) - (get_local $5) + (i32.const 31) ) + (i32.const 31) ) ) - (br $switch$24) + (set_local $20 + (get_local $9) + ) + (set_local $1 + (get_local $17) + ) + (set_local $8 + (get_local $21) + ) + (br $label$continue$L1) ) - (set_local $33 + (i32.store16 (i32.load - (set_local $1 - (get_local $19) - ) + (get_local $19) ) - ) - (set_local $59 - (i32.load offset=4 - (get_local $1) + (i32.and + (get_local $22) + (i32.const 65535) ) ) - (set_local $60 - (i32.const 0) + (set_local $20 + (get_local $9) ) - (set_local $61 - (i32.const 4091) + (set_local $1 + (get_local $17) ) - (set_local $12 - (i32.const 76) + (set_local $8 + (get_local $21) ) - (br $switch$24) + (br $label$continue$L1) ) - (set_local $5 + (i32.store8 (i32.load - (set_local $1 - (get_local $19) - ) + (get_local $19) ) - ) - (i32.load offset=4 - (get_local $1) - ) - (i32.store8 - (get_local $72) (i32.and - (get_local $5) + (get_local $22) (i32.const 255) ) ) - (set_local $47 - (get_local $72) - ) - (set_local $37 - (get_local $7) - ) - (set_local $42 - (i32.const 1) - ) - (set_local $43 - (i32.const 0) + (set_local $20 + (get_local $9) ) - (set_local $48 - (i32.const 4091) + (set_local $1 + (get_local $17) ) - (set_local $49 - (get_local $28) + (set_local $8 + (get_local $21) ) - (br $switch$24) + (br $label$continue$L1) ) - (set_local $50 - (call $_strerror - (i32.load - (call $___errno_location) - ) + (i32.store + (i32.load + (get_local $19) ) + (get_local $22) ) - (set_local $12 - (i32.const 82) + (set_local $20 + (get_local $9) ) - (br $switch$24) + (set_local $1 + (get_local $17) + ) + (set_local $8 + (get_local $21) + ) + (br $label$continue$L1) ) - (set_local $5 - (i32.ne - (set_local $1 - (i32.load - (get_local $19) - ) + (i32.store + (set_local $1 + (i32.load + (get_local $19) ) - (i32.const 0) ) + (get_local $22) ) - (set_local $50 - (select - (get_local $1) - (i32.const 4101) - (get_local $5) + (i32.store offset=4 + (get_local $1) + (i32.shr_s + (i32.shl + (i32.lt_s + (get_local $22) + (i32.const 0) + ) + (i32.const 31) + ) + (i32.const 31) ) ) - (set_local $12 - (i32.const 82) + (set_local $20 + (get_local $9) + ) + (set_local $1 + (get_local $17) ) - (br $switch$24) + (set_local $8 + (get_local $21) + ) + (br $label$continue$L1) + ) + (set_local $20 + (get_local $9) ) + (set_local $1 + (get_local $17) + ) + (set_local $8 + (get_local $21) + ) + (br $label$continue$L1) + ) + (set_local $46 + (i32.or + (get_local $18) + (i32.const 8) + ) + ) + (set_local $57 + (select + (get_local $10) + (i32.const 8) + (i32.gt_u + (get_local $10) + (i32.const 8) + ) + ) + ) + (set_local $68 + (i32.const 120) + ) + (set_local $12 + (i32.const 64) + ) + (br $switch$24) + ) + (set_local $46 + (get_local $18) + ) + (set_local $57 + (get_local $10) + ) + (set_local $68 + (get_local $26) + ) + (set_local $12 + (i32.const 64) + ) + (br $switch$24) + ) + (if + (i32.and + (i32.eq (set_local $5 (i32.load (set_local $1 @@ -5015,1097 +4648,1403 @@ ) ) ) - (i32.load offset=4 - (get_local $1) + (i32.const 0) + ) + (i32.eq + (set_local $1 + (i32.load offset=4 + (get_local $1) + ) ) - (i32.store - (get_local $73) - (get_local $5) + (i32.const 0) + ) + ) + (set_local $6 + (get_local $28) + ) + (block + (set_local $6 + (get_local $28) + ) + (loop $while-out$38 $while-in$39 + (i32.store8 + (set_local $6 + (i32.add + (get_local $6) + (i32.const -1) + ) + ) + (i32.and + (i32.or + (i32.and + (get_local $5) + (i32.const 7) + ) + (i32.const 48) + ) + (i32.const 255) + ) ) - (i32.store - (get_local $76) - (i32.const 0) + (if + (i32.and + (i32.eq + (set_local $5 + (call $_bitshift64Lshr + (get_local $5) + (get_local $1) + (i32.const 3) + ) + ) + (i32.const 0) + ) + (i32.eq + (set_local $1 + (i32.load + (i32.const 168) + ) + ) + (i32.const 0) + ) + ) + (br $while-out$38) ) - (i32.store - (get_local $19) - (get_local $73) + (br $while-in$39) + ) + ) + ) + (set_local $58 + (if + (i32.eq + (i32.and + (get_local $18) + (i32.const 8) ) - (set_local $69 - (i32.const -1) + (i32.const 0) + ) + (block + (set_local $34 + (get_local $18) + ) + (set_local $32 + (get_local $10) + ) + (set_local $35 + (i32.const 0) + ) + (set_local $36 + (i32.const 4091) ) (set_local $12 - (i32.const 86) + (i32.const 77) ) - (br $switch$24) + (get_local $6) ) - (set_local $12 - (if - (i32.eq + (block + (set_local $5 + (i32.lt_s (get_local $10) - (i32.const 0) - ) - (block - (call $_pad - (get_local $0) - (i32.const 32) - (get_local $16) - (i32.const 0) - (get_local $18) - ) - (set_local $38 - (i32.const 0) + (set_local $1 + (i32.add + (i32.sub + (get_local $71) + (get_local $6) + ) + (i32.const 1) + ) ) - (i32.const 98) ) - (block - (set_local $69 - (get_local $10) + ) + (set_local $34 + (get_local $18) + ) + (set_local $32 + (select + (get_local $1) + (get_local $10) + (get_local $5) + ) + ) + (set_local $35 + (i32.const 0) + ) + (set_local $36 + (i32.const 4091) + ) + (set_local $12 + (i32.const 77) + ) + (get_local $6) + ) + ) + ) + (br $switch$24) + ) + (set_local $5 + (i32.load + (set_local $1 + (get_local $19) + ) + ) + ) + (if + (i32.lt_s + (set_local $33 + (i32.load offset=4 + (get_local $1) + ) + ) + (i32.const 0) + ) + (block + (set_local $1 + (call $_i64Subtract + (i32.const 0) + (i32.const 0) + (get_local $5) + (get_local $33) + ) + ) + (set_local $5 + (i32.load + (i32.const 168) + ) + ) + (i32.store + (set_local $33 + (get_local $19) + ) + (get_local $1) + ) + (i32.store offset=4 + (get_local $33) + (get_local $5) + ) + (set_local $33 + (get_local $1) + ) + (set_local $59 + (get_local $5) + ) + (set_local $60 + (i32.const 1) + ) + (set_local $61 + (i32.const 4091) + ) + (set_local $12 + (i32.const 76) + ) + (br $switch$24) + ) + ) + (set_local $33 + (if + (i32.eq + (i32.and + (get_local $18) + (i32.const 2048) + ) + (i32.const 0) + ) + (block + (set_local $1 + (select + (i32.const 4091) + (i32.const 4093) + (i32.eq + (set_local $6 + (i32.and + (get_local $18) + (i32.const 1) + ) ) - (i32.const 86) + (i32.const 0) ) ) ) - (br $switch$24) + (set_local $59 + (get_local $33) + ) + (set_local $60 + (get_local $6) + ) + (set_local $61 + (get_local $1) + ) + (set_local $12 + (i32.const 76) + ) + (get_local $5) + ) + (block + (set_local $59 + (get_local $33) + ) + (set_local $60 + (i32.const 1) + ) + (set_local $61 + (i32.const 4092) + ) + (set_local $12 + (i32.const 76) + ) + (get_local $5) ) ) ) + (br $switch$24) ) + (set_local $33 + (i32.load + (set_local $1 + (get_local $19) + ) + ) + ) + (set_local $59 + (i32.load offset=4 + (get_local $1) + ) + ) + (set_local $60 + (i32.const 0) + ) + (set_local $61 + (i32.const 4091) + ) + (set_local $12 + (i32.const 76) + ) + (br $switch$24) ) - ) - ) - ) - (set_local $15 - (f64.load - (get_local $19) - ) - ) - (i32.store - (get_local $25) - (i32.const 0) - ) - (f64.store - (i32.load - (i32.const 24) - ) - (get_local $15) - ) - (i32.load - (i32.load - (i32.const 24) - ) - ) - (set_local $51 - (if - (i32.lt_s - (i32.load offset=4 + (set_local $5 (i32.load - (i32.const 24) + (set_local $1 + (get_local $19) + ) ) ) - (i32.const 0) - ) - (block - (set_local $39 - (i32.const 4108) - ) - (set_local $15 - (f64.neg - (get_local $15) - ) + (i32.load offset=4 + (get_local $1) ) - (i32.const 1) - ) - (if - (i32.eq + (i32.store8 + (get_local $72) (i32.and - (get_local $18) - (i32.const 2048) + (get_local $5) + (i32.const 255) ) + ) + (set_local $47 + (get_local $72) + ) + (set_local $37 + (get_local $7) + ) + (set_local $42 + (i32.const 1) + ) + (set_local $43 (i32.const 0) ) - (block - (set_local $39 - (select - (i32.const 4109) - (i32.const 4114) - (i32.eq - (set_local $1 - (i32.and - (get_local $18) - (i32.const 1) - ) - ) - (i32.const 0) - ) - ) + (set_local $48 + (i32.const 4091) + ) + (set_local $49 + (get_local $28) + ) + (br $switch$24) + ) + (set_local $50 + (call $_strerror + (i32.load + (call $___errno_location) ) - (get_local $1) ) - (block - (set_local $39 - (i32.const 4111) + ) + (set_local $12 + (i32.const 82) + ) + (br $switch$24) + ) + (set_local $5 + (i32.ne + (set_local $1 + (i32.load + (get_local $19) ) - (i32.const 1) ) + (i32.const 0) ) ) + (set_local $50 + (select + (get_local $1) + (i32.const 4101) + (get_local $5) + ) + ) + (set_local $12 + (i32.const 82) + ) + (br $switch$24) ) - (f64.store + (set_local $5 (i32.load - (i32.const 24) + (set_local $1 + (get_local $19) + ) ) - (get_local $15) ) - (i32.load - (i32.load - (i32.const 24) + (i32.load offset=4 + (get_local $1) + ) + (i32.store + (get_local $73) + (get_local $5) + ) + (i32.store + (get_local $76) + (i32.const 0) + ) + (i32.store + (get_local $19) + (get_local $73) + ) + (set_local $69 + (i32.const -1) + ) + (set_local $12 + (i32.const 86) + ) + (br $switch$24) + ) + (set_local $12 + (if + (i32.eq + (get_local $10) + (i32.const 0) + ) + (block + (call $_pad + (get_local $0) + (i32.const 32) + (get_local $16) + (i32.const 0) + (get_local $18) + ) + (set_local $38 + (i32.const 0) + ) + (i32.const 98) + ) + (block + (set_local $69 + (get_local $10) + ) + (i32.const 86) ) ) - (set_local $20 - (get_local $9) + ) + (br $switch$24) + ) + (set_local $15 + (f64.load + (get_local $19) + ) + ) + (i32.store + (get_local $25) + (i32.const 0) + ) + (f64.store + (i32.load + (i32.const 24) + ) + (get_local $15) + ) + (i32.load + (i32.load + (i32.const 24) + ) + ) + (set_local $51 + (if + (i32.lt_s + (i32.load offset=4 + (i32.load + (i32.const 24) + ) + ) + (i32.const 0) ) - (set_local $1 - (block $do-once$56 - (if - (i32.or - (i32.lt_u + (block + (set_local $39 + (i32.const 4108) + ) + (set_local $15 + (f64.neg + (get_local $15) + ) + ) + (i32.const 1) + ) + (if + (i32.eq + (i32.and + (get_local $18) + (i32.const 2048) + ) + (i32.const 0) + ) + (block + (set_local $39 + (select + (i32.const 4109) + (i32.const 4114) + (i32.eq (set_local $1 (i32.and - (i32.load offset=4 - (i32.load - (i32.const 24) - ) - ) - (i32.const 2146435072) + (get_local $18) + (i32.const 1) ) ) - (i32.const 2146435072) + (i32.const 0) ) + ) + ) + (get_local $1) + ) + (block + (set_local $39 + (i32.const 4111) + ) + (i32.const 1) + ) + ) + ) + ) + (f64.store + (i32.load + (i32.const 24) + ) + (get_local $15) + ) + (i32.load + (i32.load + (i32.const 24) + ) + ) + (set_local $20 + (get_local $9) + ) + (set_local $1 + (block $do-once$56 + (if + (i32.or + (i32.lt_u + (set_local $1 (i32.and - (i32.eq - (get_local $1) - (i32.const 2146435072) + (i32.load offset=4 + (i32.load + (i32.const 24) + ) ) - (i32.const 0) + (i32.const 2146435072) ) ) - (block - (if - (set_local $5 - (f64.ne - (set_local $15 - (f64.mul - (call $_frexpl - (get_local $15) - (get_local $25) - ) - (f64.const 2) - ) + (i32.const 2146435072) + ) + (i32.and + (i32.eq + (get_local $1) + (i32.const 2146435072) + ) + (i32.const 0) + ) + ) + (block + (if + (set_local $5 + (f64.ne + (set_local $15 + (f64.mul + (call $_frexpl + (get_local $15) + (get_local $25) ) - (f64.const 0) + (f64.const 2) ) ) - (i32.store + (f64.const 0) + ) + ) + (i32.store + (get_local $25) + (i32.add + (i32.load (get_local $25) + ) + (i32.const -1) + ) + ) + ) + (if + (i32.eq + (set_local $14 + (i32.or + (get_local $26) + (i32.const 32) + ) + ) + (i32.const 97) + ) + (block + (set_local $9 + (select + (get_local $39) (i32.add - (i32.load - (get_local $25) + (get_local $39) + (i32.const 9) + ) + (i32.eq + (set_local $6 + (i32.and + (get_local $26) + (i32.const 32) + ) ) - (i32.const -1) + (i32.const 0) ) ) ) - (if - (i32.eq - (set_local $14 - (i32.or - (get_local $26) - (i32.const 32) - ) - ) - (i32.const 97) + (set_local $7 + (i32.or + (get_local $51) + (i32.const 2) ) - (block - (set_local $9 - (select - (get_local $39) - (i32.add - (get_local $39) - (i32.const 9) - ) - (i32.eq - (set_local $6 - (i32.and - (get_local $26) - (i32.const 32) - ) + ) + (set_local $15 + (if + (i32.or + (i32.gt_u + (get_local $10) + (i32.const 11) + ) + (i32.eq + (set_local $1 + (i32.sub + (i32.const 12) + (get_local $10) ) - (i32.const 0) ) + (i32.const 0) ) ) - (set_local $7 - (i32.or - (get_local $51) - (i32.const 2) + (get_local $15) + (block + (set_local $30 + (f64.const 8) ) - ) - (set_local $15 - (if - (i32.or - (i32.gt_u - (get_local $10) - (i32.const 11) + (loop $while-out$60 $while-in$61 + (set_local $30 + (f64.mul + (get_local $30) + (f64.const 16) ) + ) + (if (i32.eq (set_local $1 - (i32.sub - (i32.const 12) - (get_local $10) + (i32.add + (get_local $1) + (i32.const -1) ) ) (i32.const 0) ) + (br $while-out$60) ) - (get_local $15) - (block - (set_local $30 - (f64.const 8) - ) - (loop $while-out$60 $while-in$61 - (set_local $30 - (f64.mul - (get_local $30) - (f64.const 16) - ) - ) - (if - (i32.eq - (set_local $1 - (i32.add - (get_local $1) - (i32.const -1) - ) - ) - (i32.const 0) - ) - (br $while-out$60) - ) - (br $while-in$61) - ) - (select - (f64.neg - (f64.add - (get_local $30) - (f64.sub - (f64.neg - (get_local $15) - ) - (get_local $30) - ) - ) - ) + (br $while-in$61) + ) + (select + (f64.neg + (f64.add + (get_local $30) (f64.sub - (f64.add + (f64.neg (get_local $15) - (get_local $30) ) (get_local $30) ) - (i32.eq - (i32.shr_s - (i32.shl - (i32.load8_s - (get_local $9) - ) - (i32.const 24) - ) - (i32.const 24) + ) + ) + (f64.sub + (f64.add + (get_local $15) + (get_local $30) + ) + (get_local $30) + ) + (i32.eq + (i32.shr_s + (i32.shl + (i32.load8_s + (get_local $9) ) - (i32.const 45) + (i32.const 24) ) + (i32.const 24) ) + (i32.const 45) ) ) ) - (set_local $5 - (i32.lt_s - (set_local $1 - (i32.load - (get_local $25) - ) - ) - (i32.const 0) + ) + ) + (set_local $5 + (i32.lt_s + (set_local $1 + (i32.load + (get_local $25) ) ) - (set_local $5 - (i32.shr_s - (i32.shl - (i32.lt_s - (set_local $8 - (select - (i32.sub - (i32.const 0) - (get_local $1) - ) - (get_local $1) - (get_local $5) - ) + (i32.const 0) + ) + ) + (set_local $5 + (i32.shr_s + (i32.shl + (i32.lt_s + (set_local $8 + (select + (i32.sub + (i32.const 0) + (get_local $1) ) - (i32.const 0) + (get_local $1) + (get_local $5) ) - (i32.const 31) ) - (i32.const 31) + (i32.const 0) ) + (i32.const 31) ) - (i32.store8 - (i32.add - (set_local $5 - (if - (i32.eq - (set_local $5 - (call $_fmt_u - (get_local $8) - (get_local $5) - (get_local $52) - ) - ) + (i32.const 31) + ) + ) + (i32.store8 + (i32.add + (set_local $5 + (if + (i32.eq + (set_local $5 + (call $_fmt_u + (get_local $8) + (get_local $5) (get_local $52) ) - (block - (i32.store8 - (get_local $74) - (i32.const 48) - ) - (get_local $74) - ) - (get_local $5) ) + (get_local $52) ) - (i32.const -1) - ) - (i32.and - (i32.add - (i32.and - (i32.shr_s - (get_local $1) - (i32.const 31) - ) - (i32.const 2) + (block + (i32.store8 + (get_local $74) + (i32.const 48) ) - (i32.const 43) + (get_local $74) ) - (i32.const 255) + (get_local $5) ) ) - (i32.store8 - (set_local $8 - (i32.add - (get_local $5) - (i32.const -2) - ) - ) + (i32.const -1) + ) + (i32.and + (i32.add (i32.and - (i32.add - (get_local $26) - (i32.const 15) + (i32.shr_s + (get_local $1) + (i32.const 31) ) - (i32.const 255) + (i32.const 2) ) + (i32.const 43) ) - (set_local $5 - (i32.lt_s - (get_local $10) - (i32.const 1) - ) + (i32.const 255) + ) + ) + (i32.store8 + (set_local $8 + (i32.add + (get_local $5) + (i32.const -2) ) - (set_local $13 - (i32.eq - (i32.and - (get_local $18) - (i32.const 8) - ) - (i32.const 0) - ) + ) + (i32.and + (i32.add + (get_local $26) + (i32.const 15) ) - (set_local $11 - (get_local $29) + (i32.const 255) + ) + ) + (set_local $5 + (i32.lt_s + (get_local $10) + (i32.const 1) + ) + ) + (set_local $13 + (i32.eq + (i32.and + (get_local $18) + (i32.const 8) ) - (loop $while-out$62 $while-in$63 - (i32.store8 - (get_local $11) + (i32.const 0) + ) + ) + (set_local $11 + (get_local $29) + ) + (loop $while-out$62 $while-in$63 + (i32.store8 + (get_local $11) + (i32.and + (i32.or (i32.and - (i32.or - (i32.and - (i32.load8_s - (i32.add - (set_local $1 - (call_import $f64-to-int - (get_local $15) - ) - ) - (i32.const 4075) + (i32.load8_s + (i32.add + (set_local $1 + (call_import $f64-to-int + (get_local $15) ) ) - (i32.const 255) + (i32.const 4075) ) - (get_local $6) ) (i32.const 255) ) + (get_local $6) ) - (set_local $15 - (f64.mul - (f64.sub - (get_local $15) - (f64.convert_s/i32 - (get_local $1) - ) - ) - (f64.const 16) + (i32.const 255) + ) + ) + (set_local $15 + (f64.mul + (f64.sub + (get_local $15) + (f64.convert_s/i32 + (get_local $1) ) ) - (set_local $11 - (block $do-once$64 - (if - (i32.eq - (i32.sub - (set_local $1 - (i32.add - (get_local $11) - (i32.const 1) - ) - ) - (get_local $64) - ) - (i32.const 1) - ) - (block - (br_if $do-once$64 - (get_local $1) - (i32.and - (get_local $13) - (i32.and - (get_local $5) - (f64.eq - (get_local $15) - (f64.const 0) - ) - ) - ) - ) - (i32.store8 - (get_local $1) - (i32.const 46) - ) + (f64.const 16) + ) + ) + (set_local $11 + (block $do-once$64 + (if + (i32.eq + (i32.sub + (set_local $1 (i32.add (get_local $11) - (i32.const 2) + (i32.const 1) ) ) - (get_local $1) + (get_local $64) ) - ) - ) - (if - (f64.eq - (get_local $15) - (f64.const 0) + (i32.const 1) ) (block - (set_local $1 - (get_local $11) - ) - (br $while-out$62) - ) - ) - (br $while-in$63) - ) - (set_local $5 - (i32.and - (i32.ne - (get_local $10) - (i32.const 0) - ) - (i32.lt_s - (i32.add - (get_local $78) + (br_if $do-once$64 (get_local $1) - ) - (get_local $10) - ) - ) - ) - (call $_pad - (get_local $0) - (i32.const 32) - (get_local $16) - (set_local $5 - (i32.add - (set_local $6 - (select - (i32.sub - (i32.add - (get_local $79) - (get_local $10) - ) - (get_local $8) - ) - (i32.add - (i32.sub - (get_local $77) - (get_local $8) + (i32.and + (get_local $13) + (i32.and + (get_local $5) + (f64.eq + (get_local $15) + (f64.const 0) ) - (get_local $1) ) - (get_local $5) ) ) - (get_local $7) - ) - ) - (get_local $18) - ) - (if - (i32.eq - (i32.and - (i32.load - (get_local $0) + (i32.store8 + (get_local $1) + (i32.const 46) + ) + (i32.add + (get_local $11) + (i32.const 2) ) - (i32.const 32) ) - (i32.const 0) - ) - (call $___fwritex - (get_local $9) - (get_local $7) - (get_local $0) + (get_local $1) ) ) - (call $_pad - (get_local $0) - (i32.const 48) - (get_local $16) - (get_local $5) - (i32.xor - (get_local $18) - (i32.const 65536) - ) + ) + (if + (f64.eq + (get_local $15) + (f64.const 0) ) - (set_local $1 - (i32.sub - (get_local $1) - (get_local $64) + (block + (set_local $1 + (get_local $11) ) + (br $while-out$62) ) - (if - (i32.eq - (i32.and - (i32.load - (get_local $0) - ) - (i32.const 32) - ) - (i32.const 0) - ) - (call $___fwritex - (get_local $29) + ) + (br $while-in$63) + ) + (set_local $5 + (i32.and + (i32.ne + (get_local $10) + (i32.const 0) + ) + (i32.lt_s + (i32.add + (get_local $78) (get_local $1) - (get_local $0) ) + (get_local $10) ) - (call $_pad - (get_local $0) - (i32.const 48) - (i32.sub - (get_local $6) - (i32.add - (get_local $1) - (set_local $1 + ) + ) + (call $_pad + (get_local $0) + (i32.const 32) + (get_local $16) + (set_local $5 + (i32.add + (set_local $6 + (select + (i32.sub + (i32.add + (get_local $79) + (get_local $10) + ) + (get_local $8) + ) + (i32.add (i32.sub - (get_local $40) + (get_local $77) (get_local $8) ) + (get_local $1) ) + (get_local $5) ) ) - (i32.const 0) - (i32.const 0) + (get_local $7) ) - (if - (i32.eq - (i32.and - (i32.load - (get_local $0) - ) - (i32.const 32) - ) - (i32.const 0) - ) - (call $___fwritex - (get_local $8) - (get_local $1) + ) + (get_local $18) + ) + (if + (i32.eq + (i32.and + (i32.load (get_local $0) ) - ) - (call $_pad - (get_local $0) (i32.const 32) - (get_local $16) - (get_local $5) - (i32.xor - (get_local $18) - (i32.const 8192) + ) + (i32.const 0) + ) + (call $___fwritex + (get_local $9) + (get_local $7) + (get_local $0) + ) + ) + (call $_pad + (get_local $0) + (i32.const 48) + (get_local $16) + (get_local $5) + (i32.xor + (get_local $18) + (i32.const 65536) + ) + ) + (set_local $1 + (i32.sub + (get_local $1) + (get_local $64) + ) + ) + (if + (i32.eq + (i32.and + (i32.load + (get_local $0) ) + (i32.const 32) ) - (br $do-once$56 - (select - (get_local $16) - (get_local $5) - (i32.lt_s - (get_local $5) - (get_local $16) + (i32.const 0) + ) + (call $___fwritex + (get_local $29) + (get_local $1) + (get_local $0) + ) + ) + (call $_pad + (get_local $0) + (i32.const 48) + (i32.sub + (get_local $6) + (i32.add + (get_local $1) + (set_local $1 + (i32.sub + (get_local $40) + (get_local $8) ) ) ) ) + (i32.const 0) + (i32.const 0) ) - (set_local $1 + (if + (i32.eq + (i32.and + (i32.load + (get_local $0) + ) + (i32.const 32) + ) + (i32.const 0) + ) + (call $___fwritex + (get_local $8) + (get_local $1) + (get_local $0) + ) + ) + (call $_pad + (get_local $0) + (i32.const 32) + (get_local $16) + (get_local $5) + (i32.xor + (get_local $18) + (i32.const 8192) + ) + ) + (br $do-once$56 (select - (i32.const 6) - (get_local $10) + (get_local $16) + (get_local $5) (i32.lt_s - (get_local $10) - (i32.const 0) + (get_local $5) + (get_local $16) ) ) ) - (set_local $62 - (set_local $9 - (select - (get_local $80) - (get_local $81) - (i32.lt_s - (if - (get_local $5) - (block - (i32.store - (get_local $25) - (set_local $5 - (i32.add - (i32.load - (get_local $25) - ) - (i32.const -28) - ) - ) - ) - (set_local $15 - (f64.mul - (get_local $15) - (f64.const 268435456) + ) + ) + (set_local $1 + (select + (i32.const 6) + (get_local $10) + (i32.lt_s + (get_local $10) + (i32.const 0) + ) + ) + ) + (set_local $62 + (set_local $9 + (select + (get_local $80) + (get_local $81) + (i32.lt_s + (if + (get_local $5) + (block + (i32.store + (get_local $25) + (set_local $5 + (i32.add + (i32.load + (get_local $25) ) + (i32.const -28) ) - (get_local $5) ) - (i32.load - (get_local $25) + ) + (set_local $15 + (f64.mul + (get_local $15) + (f64.const 268435456) ) ) - (i32.const 0) + (get_local $5) + ) + (i32.load + (get_local $25) ) ) + (i32.const 0) ) ) - (set_local $7 - (get_local $9) + ) + ) + (set_local $7 + (get_local $9) + ) + (loop $while-out$66 $while-in$67 + (i32.store + (get_local $7) + (set_local $5 + (call_import $f64-to-int + (get_local $15) + ) ) - (loop $while-out$66 $while-in$67 - (i32.store - (get_local $7) - (set_local $5 - (call_import $f64-to-int + ) + (set_local $7 + (i32.add + (get_local $7) + (i32.const 4) + ) + ) + (if + (f64.eq + (set_local $15 + (f64.mul + (f64.sub (get_local $15) + (f64.convert_u/i32 + (get_local $5) + ) ) + (f64.const 1e9) ) ) - (set_local $7 - (i32.add - (get_local $7) - (i32.const 4) - ) + (f64.const 0) + ) + (block + (set_local $6 + (get_local $7) ) - (if - (f64.eq - (set_local $15 - (f64.mul - (f64.sub - (get_local $15) - (f64.convert_u/i32 - (get_local $5) - ) - ) - (f64.const 1e9) - ) - ) - (f64.const 0) - ) - (block - (set_local $6 - (get_local $7) - ) - (br $while-out$66) - ) + (br $while-out$66) + ) + ) + (br $while-in$67) + ) + (if + (i32.gt_s + (set_local $5 + (i32.load + (get_local $25) ) - (br $while-in$67) ) - (if - (i32.gt_s - (set_local $5 - (i32.load - (get_local $25) + (i32.const 0) + ) + (block + (set_local $8 + (get_local $9) + ) + (set_local $13 + (get_local $6) + ) + (loop $while-out$68 $while-in$69 + (set_local $11 + (select + (i32.const 29) + (get_local $5) + (i32.gt_s + (get_local $5) + (i32.const 29) ) ) - (i32.const 0) ) - (block - (set_local $8 - (get_local $9) - ) - (set_local $13 - (get_local $6) - ) - (loop $while-out$68 $while-in$69 - (set_local $11 - (select - (i32.const 29) - (get_local $5) - (i32.gt_s - (get_local $5) - (i32.const 29) + (set_local $7 + (block $do-once$70 + (if + (i32.lt_u + (set_local $7 + (i32.add + (get_local $13) + (i32.const -4) + ) ) + (get_local $8) ) - ) - (set_local $7 - (block $do-once$70 - (if - (i32.lt_u - (set_local $7 - (i32.add - (get_local $13) - (i32.const -4) - ) - ) - (get_local $8) - ) - (get_local $8) - (block - (set_local $5 - (i32.const 0) - ) - (set_local $10 - (get_local $7) - ) - (loop $while-out$72 $while-in$73 - (set_local $6 - (call $___uremdi3 - (set_local $5 - (call $_i64Add - (call $_bitshift64Shl - (i32.load - (get_local $10) - ) - (i32.const 0) - (get_local $11) - ) - (i32.load - (i32.const 168) - ) - (get_local $5) - (i32.const 0) - ) - ) - (set_local $7 + (get_local $8) + (block + (set_local $5 + (i32.const 0) + ) + (set_local $10 + (get_local $7) + ) + (loop $while-out$72 $while-in$73 + (set_local $6 + (call $___uremdi3 + (set_local $5 + (call $_i64Add + (call $_bitshift64Shl (i32.load - (i32.const 168) + (get_local $10) ) + (i32.const 0) + (get_local $11) + ) + (i32.load + (i32.const 168) ) - (i32.const 1000000000) - (i32.const 0) - ) - ) - (i32.load - (i32.const 168) - ) - (i32.store - (get_local $10) - (get_local $6) - ) - (set_local $5 - (call $___udivdi3 (get_local $5) - (get_local $7) - (i32.const 1000000000) (i32.const 0) ) ) - (i32.load - (i32.const 168) - ) - (if - (i32.lt_u - (set_local $7 - (i32.add - (get_local $10) - (i32.const -4) - ) - ) - (get_local $8) - ) - (br $while-out$72) - (set_local $10 - (get_local $7) + (set_local $7 + (i32.load + (i32.const 168) ) ) - (br $while-in$73) + (i32.const 1000000000) + (i32.const 0) ) - (br_if $do-once$70 - (get_local $8) - (i32.eq - (get_local $5) - (i32.const 0) - ) + ) + (i32.load + (i32.const 168) + ) + (i32.store + (get_local $10) + (get_local $6) + ) + (set_local $5 + (call $___udivdi3 + (get_local $5) + (get_local $7) + (i32.const 1000000000) + (i32.const 0) ) - (i32.store + ) + (i32.load + (i32.const 168) + ) + (if + (i32.lt_u (set_local $7 (i32.add - (get_local $8) + (get_local $10) (i32.const -4) ) ) - (get_local $5) + (get_local $8) + ) + (br $while-out$72) + (set_local $10 + (get_local $7) ) - (get_local $7) ) + (br $while-in$73) ) - ) - ) - (loop $while-out$74 $while-in$75 - (if - (i32.le_u - (get_local $13) - (get_local $7) + (br_if $do-once$70 + (get_local $8) + (i32.eq + (get_local $5) + (i32.const 0) + ) ) - (br $while-out$74) - ) - (if - (i32.eq - (i32.load - (set_local $5 - (i32.add - (get_local $13) - (i32.const -4) - ) + (i32.store + (set_local $7 + (i32.add + (get_local $8) + (i32.const -4) ) ) - (i32.const 0) - ) - (set_local $13 (get_local $5) ) - (br $while-out$74) + (get_local $7) ) - (br $while-in$75) ) - (i32.store - (get_local $25) - (set_local $5 - (i32.sub - (i32.load - (get_local $25) + ) + ) + (loop $while-out$74 $while-in$75 + (if + (i32.le_u + (get_local $13) + (get_local $7) + ) + (br $while-out$74) + ) + (if + (i32.eq + (i32.load + (set_local $5 + (i32.add + (get_local $13) + (i32.const -4) ) - (get_local $11) ) ) + (i32.const 0) ) - (if - (i32.gt_s - (get_local $5) - (i32.const 0) - ) - (set_local $8 - (get_local $7) - ) - (block - (set_local $6 - (get_local $13) - ) - (br $while-out$68) + (set_local $13 + (get_local $5) + ) + (br $while-out$74) + ) + (br $while-in$75) + ) + (i32.store + (get_local $25) + (set_local $5 + (i32.sub + (i32.load + (get_local $25) ) + (get_local $11) ) - (br $while-in$69) ) ) - (set_local $7 - (get_local $9) + (if + (i32.gt_s + (get_local $5) + (i32.const 0) + ) + (set_local $8 + (get_local $7) + ) + (block + (set_local $6 + (get_local $13) + ) + (br $while-out$68) + ) ) + (br $while-in$69) ) - (if - (i32.lt_s - (get_local $5) - (i32.const 0) - ) - (block - (set_local $8 - (i32.add - (i32.and - (call_import $i32s-div - (i32.add - (get_local $1) - (i32.const 25) - ) - (i32.const 9) - ) - (i32.const -1) + ) + (set_local $7 + (get_local $9) + ) + ) + (if + (i32.lt_s + (get_local $5) + (i32.const 0) + ) + (block + (set_local $8 + (i32.add + (i32.and + (call_import $i32s-div + (i32.add + (get_local $1) + (i32.const 25) ) - (i32.const 1) + (i32.const 9) ) + (i32.const -1) ) - (set_local $10 - (i32.eq - (get_local $14) - (i32.const 102) + (i32.const 1) + ) + ) + (set_local $10 + (i32.eq + (get_local $14) + (i32.const 102) + ) + ) + (set_local $23 + (get_local $6) + ) + (loop $while-out$76 $while-in$77 + (set_local $5 + (i32.gt_s + (set_local $6 + (i32.sub + (i32.const 0) + (get_local $5) + ) ) + (i32.const 9) ) - (set_local $23 + ) + (set_local $13 + (select + (i32.const 9) (get_local $6) + (get_local $5) ) - (loop $while-out$76 $while-in$77 - (set_local $5 - (i32.gt_s - (set_local $6 - (i32.sub - (i32.const 0) - (get_local $5) + ) + (set_local $11 + (block $do-once$78 + (if + (i32.lt_u + (get_local $7) + (get_local $23) + ) + (block + (set_local $70 + (i32.add + (i32.shl + (i32.const 1) + (get_local $13) + ) + (i32.const -1) ) ) - (i32.const 9) - ) - ) - (set_local $13 - (select - (i32.const 9) - (get_local $6) - (get_local $5) - ) - ) - (set_local $11 - (block $do-once$78 - (if - (i32.lt_u - (get_local $7) - (get_local $23) + (set_local $27 + (i32.shr_u + (i32.const 1000000000) + (get_local $13) ) - (block - (set_local $70 - (i32.add - (i32.shl - (i32.const 1) - (get_local $13) + ) + (set_local $11 + (i32.const 0) + ) + (set_local $17 + (get_local $7) + ) + (loop $while-out$80 $while-in$81 + (set_local $6 + (i32.and + (set_local $5 + (i32.load + (get_local $17) ) - (i32.const -1) ) + (get_local $70) ) - (set_local $27 + ) + (i32.store + (get_local $17) + (i32.add (i32.shr_u - (i32.const 1000000000) + (get_local $5) (get_local $13) ) + (get_local $11) ) - (set_local $11 - (i32.const 0) - ) - (set_local $17 - (get_local $7) - ) - (loop $while-out$80 $while-in$81 - (set_local $6 - (i32.and - (set_local $5 - (i32.load - (get_local $17) - ) - ) - (get_local $70) - ) - ) - (i32.store - (get_local $17) - (i32.add - (i32.shr_u - (get_local $5) - (get_local $13) - ) - (get_local $11) - ) - ) - (set_local $11 - (i32.mul - (get_local $6) - (get_local $27) - ) - ) - (if - (i32.ge_u - (set_local $17 - (i32.add - (get_local $17) - (i32.const 4) - ) - ) - (get_local $23) - ) - (br $while-out$80) - ) - (br $while-in$81) + ) + (set_local $11 + (i32.mul + (get_local $6) + (get_local $27) ) - (set_local $5 - (select + ) + (if + (i32.ge_u + (set_local $17 (i32.add - (get_local $7) + (get_local $17) (i32.const 4) ) - (get_local $7) - (i32.eq - (i32.load - (get_local $7) - ) - (i32.const 0) - ) ) - ) - (if - (i32.eq - (get_local $11) - (i32.const 0) - ) - (br $do-once$78 - (get_local $5) - ) - ) - (i32.store (get_local $23) - (get_local $11) - ) - (set_local $23 - (i32.add - (get_local $23) - (i32.const 4) - ) ) - (get_local $5) + (br $while-out$80) ) + (br $while-in$81) + ) + (set_local $5 (select (i32.add (get_local $7) @@ -6120,1161 +6059,1242 @@ ) ) ) - ) - ) - (set_local $5 - (i32.gt_s - (i32.shr_s - (i32.sub + (if + (i32.eq + (get_local $11) + (i32.const 0) + ) + (br $do-once$78 + (get_local $5) + ) + ) + (i32.store + (get_local $23) + (get_local $11) + ) + (set_local $23 + (i32.add (get_local $23) - (set_local $7 - (select - (get_local $9) - (get_local $11) - (get_local $10) - ) - ) + (i32.const 4) ) - (i32.const 2) ) - (get_local $8) + (get_local $5) ) - ) - (set_local $6 (select (i32.add (get_local $7) - (i32.shl - (get_local $8) - (i32.const 2) - ) + (i32.const 4) ) - (get_local $23) - (get_local $5) - ) - ) - (i32.store - (get_local $25) - (set_local $5 - (i32.add + (get_local $7) + (i32.eq (i32.load - (get_local $25) + (get_local $7) ) - (get_local $13) + (i32.const 0) ) ) ) - (if - (i32.lt_s - (get_local $5) - (i32.const 0) - ) - (block + ) + ) + (set_local $5 + (i32.gt_s + (i32.shr_s + (i32.sub + (get_local $23) (set_local $7 - (get_local $11) - ) - (set_local $23 - (get_local $6) + (select + (get_local $9) + (get_local $11) + (get_local $10) + ) ) ) - (block - (set_local $7 - (get_local $11) - ) - (set_local $27 - (get_local $6) - ) - (br $while-out$76) + (i32.const 2) + ) + (get_local $8) + ) + ) + (set_local $6 + (select + (i32.add + (get_local $7) + (i32.shl + (get_local $8) + (i32.const 2) ) ) - (br $while-in$77) + (get_local $23) + (get_local $5) ) ) - (set_local $27 - (get_local $6) + (i32.store + (get_local $25) + (set_local $5 + (i32.add + (i32.load + (get_local $25) + ) + (get_local $13) + ) + ) ) - ) - (block $do-once$82 (if - (i32.lt_u - (get_local $7) - (get_local $27) + (i32.lt_s + (get_local $5) + (i32.const 0) ) (block - (set_local $6 - (i32.mul - (i32.shr_s - (i32.sub - (get_local $62) - (get_local $7) - ) - (i32.const 2) - ) - (i32.const 9) + (set_local $7 + (get_local $11) + ) + (set_local $23 + (get_local $6) + ) + ) + (block + (set_local $7 + (get_local $11) + ) + (set_local $27 + (get_local $6) + ) + (br $while-out$76) + ) + ) + (br $while-in$77) + ) + ) + (set_local $27 + (get_local $6) + ) + ) + (block $do-once$82 + (if + (i32.lt_u + (get_local $7) + (get_local $27) + ) + (block + (set_local $6 + (i32.mul + (i32.shr_s + (i32.sub + (get_local $62) + (get_local $7) ) + (i32.const 2) ) - (if - (i32.lt_u - (set_local $5 - (i32.load - (get_local $7) - ) - ) - (i32.const 10) + (i32.const 9) + ) + ) + (if + (i32.lt_u + (set_local $5 + (i32.load + (get_local $7) ) - (block - (set_local $13 - (get_local $6) + ) + (i32.const 10) + ) + (block + (set_local $13 + (get_local $6) + ) + (br $do-once$82) + ) + (set_local $8 + (i32.const 10) + ) + ) + (loop $while-out$84 $while-in$85 + (set_local $6 + (i32.add + (get_local $6) + (i32.const 1) + ) + ) + (if + (i32.lt_u + (get_local $5) + (set_local $8 + (i32.mul + (get_local $8) + (i32.const 10) ) - (br $do-once$82) ) - (set_local $8 - (i32.const 10) + ) + (block + (set_local $13 + (get_local $6) ) + (br $while-out$84) ) - (loop $while-out$84 $while-in$85 - (set_local $6 - (i32.add - (get_local $6) - (i32.const 1) + ) + (br $while-in$85) + ) + ) + (set_local $13 + (i32.const 0) + ) + ) + ) + (set_local $7 + (if + (i32.lt_s + (set_local $5 + (i32.add + (i32.sub + (get_local $1) + (select + (get_local $13) + (i32.const 0) + (i32.ne + (get_local $14) + (i32.const 102) ) ) - (if - (i32.lt_u - (get_local $5) - (set_local $8 - (i32.mul - (get_local $8) - (i32.const 10) + ) + (i32.shr_s + (i32.shl + (i32.and + (set_local $70 + (i32.ne + (get_local $1) + (i32.const 0) ) ) - ) - (block - (set_local $13 - (get_local $6) + (set_local $8 + (i32.eq + (get_local $14) + (i32.const 103) + ) ) - (br $while-out$84) ) + (i32.const 31) ) - (br $while-in$85) + (i32.const 31) ) ) - (set_local $13 - (i32.const 0) + ) + (i32.add + (i32.mul + (i32.shr_s + (i32.sub + (get_local $27) + (get_local $62) + ) + (i32.const 2) + ) + (i32.const 9) ) + (i32.const -9) ) ) - (set_local $7 - (if - (i32.lt_s - (set_local $5 + (block + (set_local $6 + (i32.add + (i32.add + (get_local $9) + (i32.const 4) + ) + (i32.shl (i32.add - (i32.sub - (get_local $1) - (select - (get_local $13) - (i32.const 0) - (i32.ne - (get_local $14) - (i32.const 102) - ) - ) - ) - (i32.shr_s - (i32.shl - (i32.and - (set_local $70 - (i32.ne - (get_local $1) - (i32.const 0) - ) - ) - (set_local $8 - (i32.eq - (get_local $14) - (i32.const 103) - ) + (i32.and + (call_import $i32s-div + (set_local $5 + (i32.add + (get_local $5) + (i32.const 9216) ) ) - (i32.const 31) + (i32.const 9) ) - (i32.const 31) + (i32.const -1) ) + (i32.const -1024) ) + (i32.const 2) ) - (i32.add - (i32.mul - (i32.shr_s - (i32.sub - (get_local $27) - (get_local $62) + ) + ) + (if + (i32.lt_s + (set_local $11 + (i32.add + (i32.and + (call_import $i32s-rem + (get_local $5) + (i32.const 9) ) - (i32.const 2) + (i32.const -1) ) - (i32.const 9) + (i32.const 1) ) - (i32.const -9) ) + (i32.const 9) ) (block - (set_local $6 - (i32.add - (i32.add - (get_local $9) - (i32.const 4) + (set_local $5 + (i32.const 10) + ) + (loop $while-out$86 $while-in$87 + (set_local $5 + (i32.mul + (get_local $5) + (i32.const 10) ) - (i32.shl - (i32.add + ) + (if + (i32.eq + (set_local $11 + (i32.add + (get_local $11) + (i32.const 1) + ) + ) + (i32.const 9) + ) + (block + (set_local $17 + (get_local $5) + ) + (br $while-out$86) + ) + ) + (br $while-in$87) + ) + ) + (set_local $17 + (i32.const 10) + ) + ) + (block $do-once$88 + (if + (i32.eqz + (i32.and + (set_local $11 + (i32.eq + (i32.add + (get_local $6) + (i32.const 4) + ) + (get_local $27) + ) + ) + (i32.eq + (set_local $14 (i32.and - (call_import $i32s-div + (call_import $i32u-rem (set_local $5 - (i32.add - (get_local $5) - (i32.const 9216) + (i32.load + (get_local $6) ) ) - (i32.const 9) + (get_local $17) ) (i32.const -1) ) - (i32.const -1024) ) - (i32.const 2) + (i32.const 0) ) ) ) - (if - (i32.lt_s - (set_local $11 - (i32.add + (block + (set_local $15 + (select + (f64.const 9007199254740992) + (f64.const 9007199254740994) + (i32.eq (i32.and - (call_import $i32s-rem - (get_local $5) - (i32.const 9) + (i32.and + (call_import $i32u-div + (get_local $5) + (get_local $17) + ) + (i32.const -1) ) - (i32.const -1) + (i32.const 1) ) - (i32.const 1) + (i32.const 0) ) ) - (i32.const 9) ) - (block - (set_local $5 - (i32.const 10) - ) - (loop $while-out$86 $while-in$87 - (set_local $5 - (i32.mul - (get_local $5) - (i32.const 10) - ) - ) - (if - (i32.eq - (set_local $11 - (i32.add - (get_local $11) - (i32.const 1) + (set_local $30 + (if + (i32.lt_u + (get_local $14) + (set_local $10 + (i32.and + (call_import $i32s-div + (get_local $17) + (i32.const 2) ) + (i32.const -1) ) - (i32.const 9) ) - (block - (set_local $17 - (get_local $5) + ) + (f64.const 0.5) + (select + (f64.const 1) + (f64.const 1.5) + (i32.and + (get_local $11) + (i32.eq + (get_local $14) + (get_local $10) ) - (br $while-out$86) ) ) - (br $while-in$87) ) ) - (set_local $17 - (i32.const 10) - ) - ) - (block $do-once$88 - (if - (i32.eqz - (i32.and - (set_local $11 - (i32.eq - (i32.add - (get_local $6) - (i32.const 4) - ) - (get_local $27) - ) - ) + (set_local $15 + (block $do-once$90 + (if (i32.eq - (set_local $14 - (i32.and - (call_import $i32u-rem - (set_local $5 - (i32.load - (get_local $6) + (get_local $51) + (i32.const 0) + ) + (get_local $15) + (block + (if + (i32.ne + (i32.shr_s + (i32.shl + (i32.load8_s + (get_local $39) ) + (i32.const 24) ) - (get_local $17) + (i32.const 24) ) - (i32.const -1) + (i32.const 45) + ) + (br $do-once$90 + (get_local $15) ) ) - (i32.const 0) - ) - ) - ) - (block - (set_local $15 - (select - (f64.const 9007199254740992) - (f64.const 9007199254740994) - (i32.eq - (i32.and - (i32.and - (call_import $i32u-div - (get_local $5) - (get_local $17) - ) - (i32.const -1) - ) - (i32.const 1) + (set_local $30 + (f64.neg + (get_local $30) ) - (i32.const 0) + ) + (f64.neg + (get_local $15) ) ) ) - (set_local $30 + ) + ) + (i32.store + (get_local $6) + (set_local $5 + (i32.sub + (get_local $5) + (get_local $14) + ) + ) + ) + (if + (f64.eq + (f64.add + (get_local $15) + (get_local $30) + ) + (get_local $15) + ) + (br $do-once$88) + ) + (i32.store + (get_local $6) + (set_local $5 + (i32.add + (get_local $5) + (get_local $17) + ) + ) + ) + (if + (i32.gt_u + (get_local $5) + (i32.const 999999999) + ) + (loop $while-out$92 $while-in$93 + (i32.store + (get_local $6) + (i32.const 0) + ) + (set_local $7 (if (i32.lt_u - (get_local $14) - (set_local $10 - (i32.and - (call_import $i32s-div - (get_local $17) - (i32.const 2) - ) - (i32.const -1) - ) - ) - ) - (f64.const 0.5) - (select - (f64.const 1) - (f64.const 1.5) - (i32.and - (get_local $11) - (i32.eq - (get_local $14) - (get_local $10) + (set_local $6 + (i32.add + (get_local $6) + (i32.const -4) ) ) + (get_local $7) ) - ) - ) - (set_local $15 - (block $do-once$90 - (if - (i32.eq - (get_local $51) - (i32.const 0) - ) - (get_local $15) - (block - (if - (i32.ne - (i32.shr_s - (i32.shl - (i32.load8_s - (get_local $39) - ) - (i32.const 24) - ) - (i32.const 24) - ) - (i32.const 45) - ) - (br $do-once$90 - (get_local $15) - ) - ) - (set_local $30 - (f64.neg - (get_local $30) + (block + (i32.store + (set_local $5 + (i32.add + (get_local $7) + (i32.const -4) ) ) - (f64.neg - (get_local $15) - ) + (i32.const 0) ) - ) - ) - ) - (i32.store - (get_local $6) - (set_local $5 - (i32.sub (get_local $5) - (get_local $14) ) + (get_local $7) ) ) - (if - (f64.eq - (f64.add - (get_local $15) - (get_local $30) - ) - (get_local $15) - ) - (br $do-once$88) - ) (i32.store (get_local $6) (set_local $5 (i32.add - (get_local $5) - (get_local $17) + (i32.load + (get_local $6) + ) + (i32.const 1) ) ) ) (if - (i32.gt_u + (i32.le_u (get_local $5) (i32.const 999999999) ) - (loop $while-out$92 $while-in$93 - (i32.store - (get_local $6) - (i32.const 0) - ) - (set_local $7 - (if - (i32.lt_u - (set_local $6 - (i32.add - (get_local $6) - (i32.const -4) - ) - ) - (get_local $7) - ) - (block - (i32.store - (set_local $5 - (i32.add - (get_local $7) - (i32.const -4) - ) - ) - (i32.const 0) - ) - (get_local $5) - ) - (get_local $7) - ) - ) - (i32.store - (get_local $6) - (set_local $5 - (i32.add - (i32.load - (get_local $6) - ) - (i32.const 1) - ) - ) - ) - (if - (i32.le_u - (get_local $5) - (i32.const 999999999) - ) - (br $while-out$92) - ) - (br $while-in$93) - ) + (br $while-out$92) ) - (set_local $11 - (i32.mul - (i32.shr_s - (i32.sub - (get_local $62) - (get_local $7) - ) - (i32.const 2) - ) - (i32.const 9) + (br $while-in$93) + ) + ) + (set_local $11 + (i32.mul + (i32.shr_s + (i32.sub + (get_local $62) + (get_local $7) ) + (i32.const 2) ) - (if - (i32.lt_u - (set_local $5 - (i32.load - (get_local $7) - ) - ) - (i32.const 10) - ) - (block - (set_local $13 - (get_local $11) - ) - (br $do-once$88) - ) - (set_local $10 - (i32.const 10) + (i32.const 9) + ) + ) + (if + (i32.lt_u + (set_local $5 + (i32.load + (get_local $7) ) ) - (loop $while-out$94 $while-in$95 - (set_local $11 - (i32.add - (get_local $11) - (i32.const 1) - ) - ) - (if - (i32.lt_u - (get_local $5) - (set_local $10 - (i32.mul - (get_local $10) - (i32.const 10) - ) - ) - ) - (block - (set_local $13 - (get_local $11) - ) - (br $while-out$94) - ) - ) - (br $while-in$95) + (i32.const 10) + ) + (block + (set_local $13 + (get_local $11) ) + (br $do-once$88) + ) + (set_local $10 + (i32.const 10) ) ) - ) - (set_local $6 - (i32.gt_u - (get_local $27) - (set_local $5 + (loop $while-out$94 $while-in$95 + (set_local $11 (i32.add - (get_local $6) - (i32.const 4) + (get_local $11) + (i32.const 1) + ) + ) + (if + (i32.lt_u + (get_local $5) + (set_local $10 + (i32.mul + (get_local $10) + (i32.const 10) + ) + ) + ) + (block + (set_local $13 + (get_local $11) + ) + (br $while-out$94) ) ) + (br $while-in$95) ) ) - (set_local $6 - (select - (get_local $5) - (get_local $27) + ) + ) + (set_local $6 + (i32.gt_u + (get_local $27) + (set_local $5 + (i32.add (get_local $6) + (i32.const 4) ) ) - (get_local $7) ) - (block - (set_local $6 - (get_local $27) - ) - (get_local $7) + ) + (set_local $6 + (select + (get_local $5) + (get_local $27) + (get_local $6) ) ) + (get_local $7) ) - (set_local $27 - (i32.sub + (block + (set_local $6 + (get_local $27) + ) + (get_local $7) + ) + ) + ) + (set_local $27 + (i32.sub + (i32.const 0) + (get_local $13) + ) + ) + (loop $while-out$96 $while-in$97 + (if + (i32.le_u + (get_local $6) + (get_local $7) + ) + (block + (set_local $11 (i32.const 0) - (get_local $13) ) + (set_local $23 + (get_local $6) + ) + (br $while-out$96) ) - (loop $while-out$96 $while-in$97 - (if - (i32.le_u - (get_local $6) - (get_local $7) - ) - (block - (set_local $11 - (i32.const 0) - ) - (set_local $23 + ) + (if + (i32.eq + (i32.load + (set_local $5 + (i32.add (get_local $6) + (i32.const -4) ) - (br $while-out$96) ) ) - (if - (i32.eq - (i32.load - (set_local $5 + (i32.const 0) + ) + (set_local $6 + (get_local $5) + ) + (block + (set_local $11 + (i32.const 1) + ) + (set_local $23 + (get_local $6) + ) + (br $while-out$96) + ) + ) + (br $while-in$97) + ) + (set_local $8 + (block $do-once$98 + (if + (get_local $8) + (block + (set_local $8 + (if + (i32.and + (i32.gt_s + (set_local $1 + (i32.add + (i32.xor + (i32.and + (get_local $70) + (i32.const 1) + ) + (i32.const 1) + ) + (get_local $1) + ) + ) + (get_local $13) + ) + (i32.gt_s + (get_local $13) + (i32.const -5) + ) + ) + (block + (set_local $10 + (i32.add + (get_local $26) + (i32.const -1) + ) + ) + (i32.sub + (i32.add + (get_local $1) + (i32.const -1) + ) + (get_local $13) + ) + ) + (block + (set_local $10 + (i32.add + (get_local $26) + (i32.const -2) + ) + ) (i32.add - (get_local $6) - (i32.const -4) + (get_local $1) + (i32.const -1) ) ) ) - (i32.const 0) - ) - (set_local $6 - (get_local $5) ) - (block - (set_local $11 - (i32.const 1) + (if + (i32.ne + (set_local $1 + (i32.and + (get_local $18) + (i32.const 8) + ) + ) + (i32.const 0) ) - (set_local $23 - (get_local $6) + (block + (set_local $14 + (get_local $8) + ) + (set_local $26 + (get_local $10) + ) + (br $do-once$98 + (get_local $1) + ) ) - (br $while-out$96) ) - ) - (br $while-in$97) - ) - (set_local $8 - (block $do-once$98 - (if - (get_local $8) - (block - (set_local $8 + (block $do-once$100 + (if + (get_local $11) + (block (if - (i32.and - (i32.gt_s - (set_local $1 + (i32.eq + (set_local $1 + (i32.load (i32.add - (i32.xor - (i32.and - (get_local $70) - (i32.const 1) - ) - (i32.const 1) - ) - (get_local $1) + (get_local $23) + (i32.const -4) ) ) - (get_local $13) - ) - (i32.gt_s - (get_local $13) - (i32.const -5) ) + (i32.const 0) ) (block - (set_local $10 - (i32.add - (get_local $26) - (i32.const -1) - ) + (set_local $6 + (i32.const 9) ) - (i32.sub - (i32.add + (br $do-once$100) + ) + ) + (if + (i32.eq + (i32.and + (call_import $i32u-rem (get_local $1) - (i32.const -1) + (i32.const 10) ) - (get_local $13) + (i32.const -1) ) + (i32.const 0) ) (block - (set_local $10 - (i32.add - (get_local $26) - (i32.const -2) - ) + (set_local $5 + (i32.const 10) ) - (i32.add - (get_local $1) - (i32.const -1) + (set_local $6 + (i32.const 0) ) ) - ) - ) - (if - (i32.ne - (set_local $1 - (i32.and - (get_local $18) - (i32.const 8) + (block + (set_local $6 + (i32.const 0) ) - ) - (i32.const 0) - ) - (block - (set_local $14 - (get_local $8) - ) - (set_local $26 - (get_local $10) - ) - (br $do-once$98 - (get_local $1) + (br $do-once$100) ) ) - ) - (block $do-once$100 - (if - (get_local $11) - (block - (if - (i32.eq - (set_local $1 - (i32.load - (i32.add - (get_local $23) - (i32.const -4) - ) - ) - ) - (i32.const 0) - ) - (block - (set_local $6 - (i32.const 9) - ) - (br $do-once$100) - ) - ) - (if - (i32.eq - (i32.and - (call_import $i32u-rem - (get_local $1) - (i32.const 10) - ) - (i32.const -1) - ) - (i32.const 0) - ) - (block - (set_local $5 - (i32.const 10) - ) - (set_local $6 - (i32.const 0) - ) - ) - (block - (set_local $6 - (i32.const 0) - ) - (br $do-once$100) - ) + (loop $while-out$102 $while-in$103 + (set_local $6 + (i32.add + (get_local $6) + (i32.const 1) ) - (loop $while-out$102 $while-in$103 - (set_local $6 - (i32.add - (get_local $6) - (i32.const 1) - ) - ) - (if - (i32.ne - (i32.and - (call_import $i32u-rem - (get_local $1) - (set_local $5 - (i32.mul - (get_local $5) - (i32.const 10) - ) - ) + ) + (if + (i32.ne + (i32.and + (call_import $i32u-rem + (get_local $1) + (set_local $5 + (i32.mul + (get_local $5) + (i32.const 10) ) - (i32.const -1) ) - (i32.const 0) ) - (br $while-out$102) + (i32.const -1) ) - (br $while-in$103) + (i32.const 0) ) + (br $while-out$102) ) - (set_local $6 - (i32.const 9) - ) + (br $while-in$103) ) ) - (set_local $1 - (i32.add - (i32.mul - (i32.shr_s - (i32.sub - (get_local $23) - (get_local $62) - ) - (i32.const 2) - ) - (i32.const 9) - ) - (i32.const -9) - ) + (set_local $6 + (i32.const 9) ) - (if - (i32.eq - (i32.or - (get_local $10) - (i32.const 32) + ) + ) + (set_local $1 + (i32.add + (i32.mul + (i32.shr_s + (i32.sub + (get_local $23) + (get_local $62) ) - (i32.const 102) + (i32.const 2) ) - (block - (set_local $1 - (i32.lt_s - (set_local $5 - (i32.sub - (get_local $1) - (get_local $6) - ) - ) - (i32.const 0) - ) - ) + (i32.const 9) + ) + (i32.const -9) + ) + ) + (if + (i32.eq + (i32.or + (get_local $10) + (i32.const 32) + ) + (i32.const 102) + ) + (block + (set_local $1 + (i32.lt_s (set_local $5 - (i32.lt_s - (get_local $8) - (set_local $1 - (select - (i32.const 0) - (get_local $5) - (get_local $1) - ) - ) - ) - ) - (set_local $14 - (select - (get_local $8) + (i32.sub (get_local $1) - (get_local $5) + (get_local $6) ) ) - (set_local $26 - (get_local $10) - ) (i32.const 0) ) - (block + ) + (set_local $5 + (i32.lt_s + (get_local $8) (set_local $1 - (i32.lt_s - (set_local $5 - (i32.sub - (i32.add - (get_local $1) - (get_local $13) - ) - (get_local $6) - ) - ) + (select (i32.const 0) + (get_local $5) + (get_local $1) ) ) + ) + ) + (set_local $14 + (select + (get_local $8) + (get_local $1) + (get_local $5) + ) + ) + (set_local $26 + (get_local $10) + ) + (i32.const 0) + ) + (block + (set_local $1 + (i32.lt_s (set_local $5 - (i32.lt_s - (get_local $8) - (set_local $1 - (select - (i32.const 0) - (get_local $5) - (get_local $1) - ) + (i32.sub + (i32.add + (get_local $1) + (get_local $13) ) + (get_local $6) ) ) - (set_local $14 + (i32.const 0) + ) + ) + (set_local $5 + (i32.lt_s + (get_local $8) + (set_local $1 (select - (get_local $8) - (get_local $1) + (i32.const 0) (get_local $5) + (get_local $1) ) ) - (set_local $26 - (get_local $10) - ) - (i32.const 0) ) ) - ) - (block (set_local $14 - (get_local $1) + (select + (get_local $8) + (get_local $1) + (get_local $5) + ) ) - (i32.and - (get_local $18) - (i32.const 8) + (set_local $26 + (get_local $10) ) + (i32.const 0) ) ) ) + (block + (set_local $14 + (get_local $1) + ) + (i32.and + (get_local $18) + (i32.const 8) + ) + ) ) - (set_local $17 - (i32.and - (i32.ne - (set_local $1 - (i32.or - (get_local $14) - (get_local $8) - ) - ) + ) + ) + (set_local $17 + (i32.and + (i32.ne + (set_local $1 + (i32.or + (get_local $14) + (get_local $8) + ) + ) + (i32.const 0) + ) + (i32.const 1) + ) + ) + (set_local $13 + (if + (set_local $10 + (i32.eq + (i32.or + (get_local $26) + (i32.const 32) + ) + (i32.const 102) + ) + ) + (block + (set_local $6 + (select + (get_local $13) (i32.const 0) + (i32.gt_s + (get_local $13) + (i32.const 0) + ) ) - (i32.const 1) ) + (i32.const 0) ) - (set_local $13 - (if - (set_local $10 - (i32.eq - (i32.or - (get_local $26) - (i32.const 32) + (block + (set_local $5 + (i32.shr_s + (i32.shl + (i32.lt_s + (set_local $6 + (select + (get_local $27) + (get_local $13) + (i32.lt_s + (get_local $13) + (i32.const 0) + ) + ) + ) + (i32.const 0) ) - (i32.const 102) + (i32.const 31) ) + (i32.const 31) ) - (block - (set_local $6 - (select - (get_local $13) - (i32.const 0) - (i32.gt_s - (get_local $13) - (i32.const 0) + ) + (if + (i32.lt_s + (i32.sub + (get_local $40) + (set_local $5 + (call $_fmt_u + (get_local $6) + (get_local $5) + (get_local $52) ) ) ) - (i32.const 0) + (i32.const 2) ) - (block - (set_local $5 - (i32.shr_s - (i32.shl - (i32.lt_s - (set_local $6 - (select - (get_local $27) - (get_local $13) - (i32.lt_s - (get_local $13) - (i32.const 0) - ) - ) - ) - (i32.const 0) - ) - (i32.const 31) + (loop $while-out$104 $while-in$105 + (i32.store8 + (set_local $5 + (i32.add + (get_local $5) + (i32.const -1) ) - (i32.const 31) ) + (i32.const 48) ) (if (i32.lt_s (i32.sub (get_local $40) - (set_local $5 - (call $_fmt_u - (get_local $6) - (get_local $5) - (get_local $52) - ) - ) - ) - (i32.const 2) - ) - (loop $while-out$104 $while-in$105 - (i32.store8 - (set_local $5 - (i32.add - (get_local $5) - (i32.const -1) - ) - ) - (i32.const 48) - ) - (if - (i32.lt_s - (i32.sub - (get_local $40) - (get_local $5) - ) - (i32.const 2) - ) (get_local $5) - (br $while-out$104) ) - (br $while-in$105) + (i32.const 2) ) (get_local $5) + (br $while-out$104) ) - (i32.store8 - (i32.add - (get_local $5) - (i32.const -1) - ) + (br $while-in$105) + ) + (get_local $5) + ) + (i32.store8 + (i32.add + (get_local $5) + (i32.const -1) + ) + (i32.and + (i32.add (i32.and - (i32.add - (i32.and - (i32.shr_s - (get_local $13) - (i32.const 31) - ) - (i32.const 2) - ) - (i32.const 43) - ) - (i32.const 255) - ) - ) - (i32.store8 - (set_local $5 - (i32.add - (get_local $5) - (i32.const -2) + (i32.shr_s + (get_local $13) + (i32.const 31) ) + (i32.const 2) ) - (i32.and - (get_local $26) - (i32.const 255) - ) + (i32.const 43) ) - (set_local $6 - (i32.sub - (get_local $40) - (get_local $5) - ) + (i32.const 255) + ) + ) + (i32.store8 + (set_local $5 + (i32.add + (get_local $5) + (i32.const -2) ) + ) + (i32.and + (get_local $26) + (i32.const 255) + ) + ) + (set_local $6 + (i32.sub + (get_local $40) (get_local $5) ) ) + (get_local $5) ) - (call $_pad - (get_local $0) - (i32.const 32) - (get_local $16) - (set_local $6 + ) + ) + (call $_pad + (get_local $0) + (i32.const 32) + (get_local $16) + (set_local $6 + (i32.add + (i32.add (i32.add (i32.add - (i32.add - (i32.add - (get_local $51) - (i32.const 1) - ) - (get_local $14) - ) - (get_local $17) + (get_local $51) + (i32.const 1) ) - (get_local $6) + (get_local $14) ) + (get_local $17) ) - (get_local $18) + (get_local $6) ) - (if - (i32.eq - (i32.and - (i32.load - (get_local $0) - ) - (i32.const 32) - ) - (i32.const 0) - ) - (call $___fwritex - (get_local $39) - (get_local $51) + ) + (get_local $18) + ) + (if + (i32.eq + (i32.and + (i32.load (get_local $0) ) + (i32.const 32) ) - (call $_pad - (get_local $0) - (i32.const 48) - (get_local $16) - (get_local $6) - (i32.xor - (get_local $18) - (i32.const 65536) + (i32.const 0) + ) + (call $___fwritex + (get_local $39) + (get_local $51) + (get_local $0) + ) + ) + (call $_pad + (get_local $0) + (i32.const 48) + (get_local $16) + (get_local $6) + (i32.xor + (get_local $18) + (i32.const 65536) + ) + ) + (block $do-once$106 + (if + (get_local $10) + (block + (set_local $7 + (set_local $8 + (select + (get_local $9) + (get_local $7) + (i32.gt_u + (get_local $7) + (get_local $9) + ) + ) + ) ) - ) - (block $do-once$106 - (if - (get_local $10) - (block - (set_local $7 - (set_local $8 - (select - (get_local $9) - (get_local $7) - (i32.gt_u - (get_local $7) - (get_local $9) - ) - ) + (loop $while-out$108 $while-in$109 + (set_local $5 + (call $_fmt_u + (i32.load + (get_local $7) ) + (i32.const 0) + (get_local $45) ) - (loop $while-out$108 $while-in$109 - (set_local $5 - (call $_fmt_u - (i32.load - (get_local $7) + ) + (block $do-once$110 + (if + (i32.eq + (get_local $7) + (get_local $8) + ) + (block + (if + (i32.ne + (get_local $5) + (get_local $45) ) - (i32.const 0) - (get_local $45) + (br $do-once$110) + ) + (i32.store8 + (get_local $53) + (i32.const 48) + ) + (set_local $5 + (get_local $53) ) ) - (block $do-once$110 + (block (if - (i32.eq - (get_local $7) - (get_local $8) + (i32.gt_u + (get_local $5) + (get_local $29) ) - (block - (if - (i32.ne + (get_local $5) + (br $do-once$110) + ) + (loop $while-out$112 $while-in$113 + (i32.store8 + (set_local $5 + (i32.add (get_local $5) - (get_local $45) + (i32.const -1) ) - (br $do-once$110) - ) - (i32.store8 - (get_local $53) - (i32.const 48) - ) - (set_local $5 - (get_local $53) ) + (i32.const 48) ) - (block - (if - (i32.gt_u - (get_local $5) - (get_local $29) - ) + (if + (i32.gt_u (get_local $5) - (br $do-once$110) - ) - (loop $while-out$112 $while-in$113 - (i32.store8 - (set_local $5 - (i32.add - (get_local $5) - (i32.const -1) - ) - ) - (i32.const 48) - ) - (if - (i32.gt_u - (get_local $5) - (get_local $29) - ) - (get_local $5) - (br $while-out$112) - ) - (br $while-in$113) + (get_local $29) ) + (get_local $5) + (br $while-out$112) ) + (br $while-in$113) ) ) - (if - (i32.eq + ) + ) + (if + (i32.eq + (i32.and + (i32.load + (get_local $0) + ) + (i32.const 32) + ) + (i32.const 0) + ) + (call $___fwritex + (get_local $5) + (i32.sub + (get_local $75) + (get_local $5) + ) + (get_local $0) + ) + ) + (if + (i32.gt_u + (set_local $7 + (i32.add + (get_local $7) + (i32.const 4) + ) + ) + (get_local $9) + ) + (block + (set_local $5 + (get_local $7) + ) + (br $while-out$108) + ) + (get_local $7) + ) + (br $while-in$109) + ) + (block $do-once$114 + (if + (i32.ne + (get_local $1) + (i32.const 0) + ) + (block + (br_if $do-once$114 + (i32.ne (i32.and (i32.load (get_local $0) @@ -7283,75 +7303,162 @@ ) (i32.const 0) ) - (call $___fwritex - (get_local $5) - (i32.sub - (get_local $75) - (get_local $5) + ) + (call $___fwritex + (i32.const 4143) + (i32.const 1) + (get_local $0) + ) + ) + ) + ) + (if + (i32.and + (i32.gt_s + (get_local $14) + (i32.const 0) + ) + (i32.lt_u + (get_local $5) + (get_local $23) + ) + ) + (loop $while-out$116 $while-in$117 + (if + (i32.gt_u + (set_local $1 + (call $_fmt_u + (i32.load + (get_local $5) + ) + (i32.const 0) + (get_local $45) ) - (get_local $0) ) + (get_local $29) ) - (if - (i32.gt_u - (set_local $7 + (loop $while-out$118 $while-in$119 + (i32.store8 + (set_local $1 (i32.add - (get_local $7) - (i32.const 4) + (get_local $1) + (i32.const -1) ) ) - (get_local $9) + (i32.const 48) ) - (block - (set_local $5 - (get_local $7) + (if + (i32.gt_u + (get_local $1) + (get_local $29) ) - (br $while-out$108) + (get_local $1) + (br $while-out$118) ) - (get_local $7) + (br $while-in$119) ) - (br $while-in$109) + (get_local $1) ) - (block $do-once$114 - (if - (i32.ne - (get_local $1) - (i32.const 0) - ) - (block - (br_if $do-once$114 - (i32.ne - (i32.and - (i32.load - (get_local $0) - ) - (i32.const 32) - ) - (i32.const 0) - ) - ) - (call $___fwritex - (i32.const 4143) - (i32.const 1) + (if + (i32.eq + (i32.and + (i32.load (get_local $0) ) + (i32.const 32) ) + (i32.const 0) + ) + (call $___fwritex + (get_local $1) + (select + (i32.const 9) + (get_local $14) + (i32.gt_s + (get_local $14) + (i32.const 9) + ) + ) + (get_local $0) + ) + ) + (set_local $1 + (i32.add + (get_local $14) + (i32.const -9) ) ) (if (i32.and (i32.gt_s (get_local $14) - (i32.const 0) + (i32.const 9) ) (i32.lt_u - (get_local $5) + (set_local $5 + (i32.add + (get_local $5) + (i32.const 4) + ) + ) (get_local $23) ) ) - (loop $while-out$116 $while-in$117 + (set_local $14 + (get_local $1) + ) + (block + (set_local $14 + (get_local $1) + ) + (br $while-out$116) + ) + ) + (br $while-in$117) + ) + (get_local $14) + ) + (call $_pad + (get_local $0) + (i32.const 48) + (i32.add + (get_local $14) + (i32.const 9) + ) + (i32.const 9) + (i32.const 0) + ) + ) + (block + (set_local $11 + (select + (get_local $23) + (i32.add + (get_local $7) + (i32.const 4) + ) + (get_local $11) + ) + ) + (if + (i32.gt_s + (get_local $14) + (i32.const -1) + ) + (block + (set_local $9 + (i32.eq + (get_local $8) + (i32.const 0) + ) + ) + (set_local $5 + (get_local $7) + ) + (loop $while-out$120 $while-in$121 + (set_local $8 (if - (i32.gt_u + (i32.eq (set_local $1 (call $_fmt_u (i32.load @@ -7361,494 +7468,359 @@ (get_local $45) ) ) - (get_local $29) + (get_local $45) ) - (loop $while-out$118 $while-in$119 + (block (i32.store8 - (set_local $1 - (i32.add - (get_local $1) - (i32.const -1) - ) - ) + (get_local $53) (i32.const 48) ) - (if - (i32.gt_u - (get_local $1) - (get_local $29) - ) - (get_local $1) - (br $while-out$118) - ) - (br $while-in$119) + (get_local $53) ) (get_local $1) ) + ) + (block $do-once$122 (if (i32.eq - (i32.and - (i32.load - (get_local $0) - ) - (i32.const 32) - ) - (i32.const 0) - ) - (call $___fwritex - (get_local $1) - (select - (i32.const 9) - (get_local $14) - (i32.gt_s - (get_local $14) - (i32.const 9) - ) - ) - (get_local $0) - ) - ) - (set_local $1 - (i32.add - (get_local $14) - (i32.const -9) - ) - ) - (if - (i32.and - (i32.gt_s - (get_local $14) - (i32.const 9) - ) - (i32.lt_u - (set_local $5 - (i32.add - (get_local $5) - (i32.const 4) - ) - ) - (get_local $23) - ) - ) - (set_local $14 - (get_local $1) + (get_local $5) + (get_local $7) ) (block - (set_local $14 - (get_local $1) + (set_local $1 + (i32.add + (get_local $8) + (i32.const 1) + ) ) - (br $while-out$116) - ) - ) - (br $while-in$117) - ) - (get_local $14) - ) - (call $_pad - (get_local $0) - (i32.const 48) - (i32.add - (get_local $14) - (i32.const 9) - ) - (i32.const 9) - (i32.const 0) - ) - ) - (block - (set_local $11 - (select - (get_local $23) - (i32.add - (get_local $7) - (i32.const 4) - ) - (get_local $11) - ) - ) - (if - (i32.gt_s - (get_local $14) - (i32.const -1) - ) - (block - (set_local $9 - (i32.eq - (get_local $8) - (i32.const 0) - ) - ) - (set_local $5 - (get_local $7) - ) - (loop $while-out$120 $while-in$121 - (set_local $8 (if (i32.eq - (set_local $1 - (call $_fmt_u - (i32.load - (get_local $5) - ) - (i32.const 0) - (get_local $45) + (i32.and + (i32.load + (get_local $0) ) + (i32.const 32) ) - (get_local $45) + (i32.const 0) ) - (block - (i32.store8 - (get_local $53) - (i32.const 48) - ) - (get_local $53) + (call $___fwritex + (get_local $8) + (i32.const 1) + (get_local $0) ) - (get_local $1) ) - ) - (block $do-once$122 (if - (i32.eq - (get_local $5) - (get_local $7) - ) - (block - (set_local $1 - (i32.add - (get_local $8) - (i32.const 1) - ) - ) - (if - (i32.eq - (i32.and - (i32.load - (get_local $0) - ) - (i32.const 32) - ) - (i32.const 0) - ) - (call $___fwritex - (get_local $8) - (i32.const 1) - (get_local $0) - ) - ) - (if - (i32.and - (get_local $9) - (i32.lt_s - (get_local $14) - (i32.const 1) - ) - ) - (br $do-once$122) - ) - (if - (i32.ne - (i32.and - (i32.load - (get_local $0) - ) - (i32.const 32) - ) - (i32.const 0) - ) - (br $do-once$122) - ) - (call $___fwritex - (i32.const 4143) + (i32.and + (get_local $9) + (i32.lt_s + (get_local $14) (i32.const 1) - (get_local $0) ) ) - (block - (if - (i32.gt_u - (get_local $8) - (get_local $29) - ) - (set_local $1 - (get_local $8) - ) - (block - (set_local $1 - (get_local $8) - ) - (br $do-once$122) - ) - ) - (loop $while-out$124 $while-in$125 - (i32.store8 - (set_local $1 - (i32.add - (get_local $1) - (i32.const -1) - ) - ) - (i32.const 48) - ) - (if - (i32.gt_u - (get_local $1) - (get_local $29) - ) - (get_local $1) - (br $while-out$124) + (br $do-once$122) + ) + (if + (i32.ne + (i32.and + (i32.load + (get_local $0) ) - (br $while-in$125) + (i32.const 32) ) + (i32.const 0) ) + (br $do-once$122) ) - ) - (set_local $8 - (i32.sub - (get_local $75) - (get_local $1) + (call $___fwritex + (i32.const 4143) + (i32.const 1) + (get_local $0) ) ) - (if - (i32.eq - (i32.and - (i32.load - (get_local $0) - ) - (i32.const 32) + (block + (if + (i32.gt_u + (get_local $8) + (get_local $29) ) - (i32.const 0) - ) - (call $___fwritex - (get_local $1) - (select + (set_local $1 (get_local $8) - (get_local $14) - (i32.gt_s - (get_local $14) + ) + (block + (set_local $1 (get_local $8) ) + (br $do-once$122) ) - (get_local $0) ) - ) - (if - (i32.eqz - (i32.and - (i32.lt_u - (set_local $5 - (i32.add - (get_local $5) - (i32.const 4) - ) + (loop $while-out$124 $while-in$125 + (i32.store8 + (set_local $1 + (i32.add + (get_local $1) + (i32.const -1) ) - (get_local $11) ) - (i32.gt_s - (set_local $14 - (i32.sub - (get_local $14) - (get_local $8) - ) - ) - (i32.const -1) + (i32.const 48) + ) + (if + (i32.gt_u + (get_local $1) + (get_local $29) ) + (get_local $1) + (br $while-out$124) ) + (br $while-in$125) ) - (br $while-out$120) ) - (br $while-in$121) ) ) - (get_local $14) - ) - (call $_pad - (get_local $0) - (i32.const 48) - (i32.add - (get_local $14) - (i32.const 18) + (set_local $8 + (i32.sub + (get_local $75) + (get_local $1) + ) ) - (i32.const 18) - (i32.const 0) - ) - (br_if $do-once$106 - (i32.ne - (i32.and - (i32.load - (get_local $0) + (if + (i32.eq + (i32.and + (i32.load + (get_local $0) + ) + (i32.const 32) ) - (i32.const 32) + (i32.const 0) + ) + (call $___fwritex + (get_local $1) + (select + (get_local $8) + (get_local $14) + (i32.gt_s + (get_local $14) + (get_local $8) + ) + ) + (get_local $0) ) - (i32.const 0) ) - ) - (call $___fwritex - (get_local $13) - (i32.sub - (get_local $40) - (get_local $13) + (if + (i32.eqz + (i32.and + (i32.lt_u + (set_local $5 + (i32.add + (get_local $5) + (i32.const 4) + ) + ) + (get_local $11) + ) + (i32.gt_s + (set_local $14 + (i32.sub + (get_local $14) + (get_local $8) + ) + ) + (i32.const -1) + ) + ) + ) + (br $while-out$120) ) - (get_local $0) + (br $while-in$121) ) ) + (get_local $14) ) - ) - (call $_pad - (get_local $0) - (i32.const 32) - (get_local $16) - (get_local $6) - (i32.xor - (get_local $18) - (i32.const 8192) - ) - ) - (select - (get_local $16) - (get_local $6) - (i32.lt_s - (get_local $6) - (get_local $16) + (call $_pad + (get_local $0) + (i32.const 48) + (i32.add + (get_local $14) + (i32.const 18) + ) + (i32.const 18) + (i32.const 0) ) - ) - ) - (block - (set_local $5 - (select - (i32.const 4127) - (i32.const 4131) - (set_local $8 - (i32.ne - (i32.and - (get_local $26) - (i32.const 32) + (br_if $do-once$106 + (i32.ne + (i32.and + (i32.load + (get_local $0) ) - (i32.const 0) + (i32.const 32) ) + (i32.const 0) ) ) - ) - (set_local $6 - (select - (i32.const 0) - (get_local $51) - (set_local $1 - (i32.or - (f64.ne - (get_local $15) - (get_local $15) - ) - (i32.const 0) - ) + (call $___fwritex + (get_local $13) + (i32.sub + (get_local $40) + (get_local $13) ) + (get_local $0) ) ) + ) + ) + (call $_pad + (get_local $0) + (i32.const 32) + (get_local $16) + (get_local $6) + (i32.xor + (get_local $18) + (i32.const 8192) + ) + ) + (select + (get_local $16) + (get_local $6) + (i32.lt_s + (get_local $6) + (get_local $16) + ) + ) + ) + (block + (set_local $5 + (select + (i32.const 4127) + (i32.const 4131) (set_local $8 - (select - (select - (i32.const 4135) - (i32.const 4139) - (get_local $8) + (i32.ne + (i32.and + (get_local $26) + (i32.const 32) ) - (get_local $5) - (get_local $1) + (i32.const 0) ) ) - (call $_pad - (get_local $0) - (i32.const 32) - (get_local $16) - (set_local $5 - (i32.add - (get_local $6) - (i32.const 3) + ) + ) + (set_local $6 + (select + (i32.const 0) + (get_local $51) + (set_local $1 + (i32.or + (f64.ne + (get_local $15) + (get_local $15) ) + (i32.const 0) ) - (get_local $7) ) - (if - (i32.eq - (i32.and - (if - (i32.eq - (i32.and - (set_local $1 - (i32.load - (get_local $0) - ) - ) - (i32.const 32) - ) - (i32.const 0) - ) - (block - (call $___fwritex - (get_local $39) - (get_local $6) - (get_local $0) - ) + ) + ) + (set_local $8 + (select + (select + (i32.const 4135) + (i32.const 4139) + (get_local $8) + ) + (get_local $5) + (get_local $1) + ) + ) + (call $_pad + (get_local $0) + (i32.const 32) + (get_local $16) + (set_local $5 + (i32.add + (get_local $6) + (i32.const 3) + ) + ) + (get_local $7) + ) + (if + (i32.eq + (i32.and + (if + (i32.eq + (i32.and + (set_local $1 (i32.load (get_local $0) ) ) - (get_local $1) + (i32.const 32) ) - (i32.const 32) + (i32.const 0) ) - (i32.const 0) - ) - (call $___fwritex - (get_local $8) - (i32.const 3) - (get_local $0) + (block + (call $___fwritex + (get_local $39) + (get_local $6) + (get_local $0) + ) + (i32.load + (get_local $0) + ) + ) + (get_local $1) ) - ) - (call $_pad - (get_local $0) (i32.const 32) - (get_local $16) - (get_local $5) - (i32.xor - (get_local $18) - (i32.const 8192) - ) - ) - (select - (get_local $16) - (get_local $5) - (i32.lt_s - (get_local $5) - (get_local $16) - ) ) + (i32.const 0) + ) + (call $___fwritex + (get_local $8) + (i32.const 3) + (get_local $0) + ) + ) + (call $_pad + (get_local $0) + (i32.const 32) + (get_local $16) + (get_local $5) + (i32.xor + (get_local $18) + (i32.const 8192) + ) + ) + (select + (get_local $16) + (get_local $5) + (i32.lt_s + (get_local $5) + (get_local $16) ) ) ) ) - (set_local $8 - (get_local $21) - ) - (br $label$continue$L1) - ) - (set_local $47 - (get_local $20) - ) - (set_local $37 - (get_local $18) - ) - (set_local $42 - (get_local $10) - ) - (set_local $43 - (i32.const 0) - ) - (set_local $48 - (i32.const 4091) - ) - (set_local $49 - (get_local $28) ) ) + (set_local $8 + (get_local $21) + ) + (br $label$continue$L1) + ) + (set_local $47 + (get_local $20) + ) + (set_local $37 + (get_local $18) + ) + (set_local $42 + (get_local $10) + ) + (set_local $43 + (i32.const 0) + ) + (set_local $48 + (i32.const 4091) + ) + (set_local $49 + (get_local $28) ) ) (block $label$break$L308 @@ -8747,51 +8719,22 @@ (i32.const 20) ) (block $switch-default$14 - (block $switch-default$14 - (block $switch-case$13 - (block $switch-case$12 - (block $switch-case$11 - (block $switch-case$10 - (block $switch-case$9 - (block $switch-case$8 - (block $switch-case$7 - (block $switch-case$6 - (block $switch-case$5 - (block $switch-case$4 - (br_table $switch-case$4 $switch-case$5 $switch-case$6 $switch-case$7 $switch-case$8 $switch-case$9 $switch-case$10 $switch-case$11 $switch-case$12 $switch-case$13 $switch-default$14 - (i32.sub - (get_local $1) - (i32.const 9) - ) - ) - ) - (set_local $3 - (i32.load - (set_local $1 - (i32.and - (i32.add - (i32.load - (get_local $2) - ) - (i32.const 3) - ) - (i32.const -4) - ) - ) - ) - ) - (i32.store - (get_local $2) - (i32.add + (block $switch-case$13 + (block $switch-case$12 + (block $switch-case$11 + (block $switch-case$10 + (block $switch-case$9 + (block $switch-case$8 + (block $switch-case$7 + (block $switch-case$6 + (block $switch-case$5 + (block $switch-case$4 + (br_table $switch-case$4 $switch-case$5 $switch-case$6 $switch-case$7 $switch-case$8 $switch-case$9 $switch-case$10 $switch-case$11 $switch-case$12 $switch-case$13 $switch-default$14 + (i32.sub (get_local $1) - (i32.const 4) + (i32.const 9) ) ) - (i32.store - (get_local $0) - (get_local $3) - ) - (br $label$break$L1) ) (set_local $3 (i32.load @@ -8819,19 +8762,6 @@ (get_local $0) (get_local $3) ) - (i32.store offset=4 - (get_local $0) - (i32.shr_s - (i32.shl - (i32.lt_s - (get_local $3) - (i32.const 0) - ) - (i32.const 31) - ) - (i32.const 31) - ) - ) (br $label$break$L1) ) (set_local $3 @@ -8862,101 +8792,87 @@ ) (i32.store offset=4 (get_local $0) - (i32.const 0) + (i32.shr_s + (i32.shl + (i32.lt_s + (get_local $3) + (i32.const 0) + ) + (i32.const 31) + ) + (i32.const 31) + ) ) (br $label$break$L1) ) - (set_local $5 + (set_local $3 (i32.load - (set_local $3 - (set_local $1 - (i32.and - (i32.add - (i32.load - (get_local $2) - ) - (i32.const 7) + (set_local $1 + (i32.and + (i32.add + (i32.load + (get_local $2) ) - (i32.const -8) + (i32.const 3) ) + (i32.const -4) ) ) ) ) - (set_local $3 - (i32.load offset=4 - (get_local $3) - ) - ) (i32.store (get_local $2) (i32.add (get_local $1) - (i32.const 8) + (i32.const 4) ) ) (i32.store (get_local $0) - (get_local $5) + (get_local $3) ) (i32.store offset=4 (get_local $0) - (get_local $3) + (i32.const 0) ) (br $label$break$L1) ) - (set_local $3 + (set_local $5 (i32.load - (set_local $1 - (i32.and - (i32.add - (i32.load - (get_local $2) + (set_local $3 + (set_local $1 + (i32.and + (i32.add + (i32.load + (get_local $2) + ) + (i32.const 7) ) - (i32.const 3) + (i32.const -8) ) - (i32.const -4) ) ) ) ) + (set_local $3 + (i32.load offset=4 + (get_local $3) + ) + ) (i32.store (get_local $2) (i32.add (get_local $1) - (i32.const 4) - ) - ) - (set_local $2 - (i32.shr_s - (i32.shl - (i32.lt_s - (set_local $1 - (i32.shr_s - (i32.shl - (i32.and - (get_local $3) - (i32.const 65535) - ) - (i32.const 16) - ) - (i32.const 16) - ) - ) - (i32.const 0) - ) - (i32.const 31) - ) - (i32.const 31) + (i32.const 8) ) ) (i32.store (get_local $0) - (get_local $1) + (get_local $5) ) (i32.store offset=4 (get_local $0) - (get_local $2) + (get_local $3) ) (br $label$break$L1) ) @@ -8982,16 +8898,36 @@ (i32.const 4) ) ) + (set_local $2 + (i32.shr_s + (i32.shl + (i32.lt_s + (set_local $1 + (i32.shr_s + (i32.shl + (i32.and + (get_local $3) + (i32.const 65535) + ) + (i32.const 16) + ) + (i32.const 16) + ) + ) + (i32.const 0) + ) + (i32.const 31) + ) + (i32.const 31) + ) + ) (i32.store (get_local $0) - (i32.and - (get_local $3) - (i32.const 65535) - ) + (get_local $1) ) (i32.store offset=4 (get_local $0) - (i32.const 0) + (get_local $2) ) (br $label$break$L1) ) @@ -9017,36 +8953,16 @@ (i32.const 4) ) ) - (set_local $2 - (i32.shr_s - (i32.shl - (i32.lt_s - (set_local $1 - (i32.shr_s - (i32.shl - (i32.and - (get_local $3) - (i32.const 255) - ) - (i32.const 24) - ) - (i32.const 24) - ) - ) - (i32.const 0) - ) - (i32.const 31) - ) - (i32.const 31) - ) - ) (i32.store (get_local $0) - (get_local $1) + (i32.and + (get_local $3) + (i32.const 65535) + ) ) (i32.store offset=4 (get_local $0) - (get_local $2) + (i32.const 0) ) (br $label$break$L1) ) @@ -9072,30 +8988,50 @@ (i32.const 4) ) ) + (set_local $2 + (i32.shr_s + (i32.shl + (i32.lt_s + (set_local $1 + (i32.shr_s + (i32.shl + (i32.and + (get_local $3) + (i32.const 255) + ) + (i32.const 24) + ) + (i32.const 24) + ) + ) + (i32.const 0) + ) + (i32.const 31) + ) + (i32.const 31) + ) + ) (i32.store (get_local $0) - (i32.and - (get_local $3) - (i32.const 255) - ) + (get_local $1) ) (i32.store offset=4 (get_local $0) - (i32.const 0) + (get_local $2) ) (br $label$break$L1) ) - (set_local $4 - (f64.load + (set_local $3 + (i32.load (set_local $1 (i32.and (i32.add (i32.load (get_local $2) ) - (i32.const 7) + (i32.const 3) ) - (i32.const -8) + (i32.const -4) ) ) ) @@ -9104,12 +9040,19 @@ (get_local $2) (i32.add (get_local $1) - (i32.const 8) + (i32.const 4) ) ) - (f64.store + (i32.store (get_local $0) - (get_local $4) + (i32.and + (get_local $3) + (i32.const 255) + ) + ) + (i32.store offset=4 + (get_local $0) + (i32.const 0) ) (br $label$break$L1) ) @@ -9139,6 +9082,33 @@ (get_local $0) (get_local $4) ) + (br $label$break$L1) + ) + (set_local $4 + (f64.load + (set_local $1 + (i32.and + (i32.add + (i32.load + (get_local $2) + ) + (i32.const 7) + ) + (i32.const -8) + ) + ) + ) + ) + (i32.store + (get_local $2) + (i32.add + (get_local $1) + (i32.const 8) + ) + ) + (f64.store + (get_local $0) + (get_local $4) ) ) ) diff --git a/test/emcc_hello_world.fromasm.imprecise b/test/emcc_hello_world.fromasm.imprecise index 155c50dc6..ee84765a1 100644 --- a/test/emcc_hello_world.fromasm.imprecise +++ b/test/emcc_hello_world.fromasm.imprecise @@ -317,80 +317,78 @@ ) (block $switch$0 (block $switch-default$3 - (block $switch-default$3 - (block $switch-case$2 - (block $switch-case$1 - (br_table $switch-case$1 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-case$2 $switch-default$3 - (i32.sub - (set_local $2 - (i32.and - (get_local $2) - (i32.const 2047) - ) + (block $switch-case$2 + (block $switch-case$1 + (br_table $switch-case$1 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-default$3 $switch-case$2 $switch-default$3 + (i32.sub + (set_local $2 + (i32.and + (get_local $2) + (i32.const 2047) ) - (i32.const 0) ) + (i32.const 0) ) ) - (i32.store - (get_local $1) - (if - (f64.ne - (get_local $0) - (f64.const 0) - ) - (block - (set_local $0 - (call $_frexp - (f64.mul - (get_local $0) - (f64.const 18446744073709551615) - ) - (get_local $1) + ) + (i32.store + (get_local $1) + (if + (f64.ne + (get_local $0) + (f64.const 0) + ) + (block + (set_local $0 + (call $_frexp + (f64.mul + (get_local $0) + (f64.const 18446744073709551615) ) + (get_local $1) ) - (i32.add - (i32.load - (get_local $1) - ) - (i32.const -64) + ) + (i32.add + (i32.load + (get_local $1) ) + (i32.const -64) ) - (i32.const 0) ) - ) - (br $switch$0 - (get_local $0) + (i32.const 0) ) ) (br $switch$0 (get_local $0) ) ) - (i32.store - (get_local $1) - (i32.add - (get_local $2) - (i32.const -1022) - ) + (br $switch$0 + (get_local $0) ) - (i32.store - (i32.load - (i32.const 24) - ) - (get_local $3) + ) + (i32.store + (get_local $1) + (i32.add + (get_local $2) + (i32.const -1022) ) - (i32.store offset=4 - (i32.load - (i32.const 24) - ) - (i32.or - (i32.and - (get_local $4) - (i32.const -2146435073) - ) - (i32.const 1071644672) + ) + (i32.store + (i32.load + (i32.const 24) + ) + (get_local $3) + ) + (i32.store offset=4 + (i32.load + (i32.const 24) + ) + (i32.or + (i32.and + (get_local $4) + (i32.const -2146435073) ) + (i32.const 1071644672) ) ) (f64.load @@ -1488,7 +1486,7 @@ (i32.const 40) ) ) - (loop $do-out$0 $do-in$1 + (loop $do-in$1 (i32.store (get_local $4) (i32.const 0) @@ -3202,41 +3200,39 @@ ) (loop $label$break$L9 $label$continue$L9 (block $switch-default$5 - (block $switch-default$5 - (block $switch-case$4 - (block $switch-case$3 - (br_table $switch-case$4 $switch-default$5 $switch-default$5 $switch-default$5 $switch-default$5 $switch-default$5 $switch-default$5 $switch-default$5 $switch-default$5 $switch-default$5 $switch-default$5 $switch-default$5 $switch-default$5 $switch-default$5 $switch-default$5 $switch-default$5 $switch-default$5 $switch-default$5 $switch-default$5 $switch-default$5 $switch-default$5 $switch-default$5 $switch-default$5 $switch-default$5 $switch-default$5 $switch-default$5 $switch-default$5 $switch-default$5 $switch-default$5 $switch-default$5 $switch-default$5 $switch-default$5 $switch-default$5 $switch-default$5 $switch-default$5 $switch-default$5 $switch-default$5 $switch-case$3 $switch-default$5 - (i32.sub - (i32.shr_s - (i32.shl - (get_local $1) - (i32.const 24) - ) + (block $switch-case$4 + (block $switch-case$3 + (br_table $switch-case$4 $switch-default$5 $switch-default$5 $switch-default$5 $switch-default$5 $switch-default$5 $switch-default$5 $switch-default$5 $switch-default$5 $switch-default$5 $switch-default$5 $switch-default$5 $switch-default$5 $switch-default$5 $switch-default$5 $switch-default$5 $switch-default$5 $switch-default$5 $switch-default$5 $switch-default$5 $switch-default$5 $switch-default$5 $switch-default$5 $switch-default$5 $switch-default$5 $switch-default$5 $switch-default$5 $switch-default$5 $switch-default$5 $switch-default$5 $switch-default$5 $switch-default$5 $switch-default$5 $switch-default$5 $switch-default$5 $switch-default$5 $switch-default$5 $switch-case$3 $switch-default$5 + (i32.sub + (i32.shr_s + (i32.shl + (get_local $1) (i32.const 24) ) - (i32.const 0) + (i32.const 24) ) + (i32.const 0) ) ) - (set_local $54 - (get_local $5) - ) - (set_local $65 - (get_local $5) - ) - (set_local $12 - (i32.const 9) - ) - (br $label$break$L9) ) - (set_local $41 + (set_local $54 (get_local $5) ) - (set_local $55 + (set_local $65 (get_local $5) ) + (set_local $12 + (i32.const 9) + ) (br $label$break$L9) ) + (set_local $41 + (get_local $5) + ) + (set_local $55 + (get_local $5) + ) + (br $label$break$L9) ) (set_local $1 (i32.load8_s @@ -3932,7 +3928,7 @@ ) ) ) - (loop $while-out$17 $while-in$18 + (loop $while-in$18 (set_local $5 (i32.add (i32.mul @@ -4387,621 +4383,258 @@ ) ) ) - (block $label$break$L75 - (block $switch$24 - (block $switch-default$127 - (block $switch-default$127 - (block $switch-case$126 - (block $switch-case$55 - (block $switch-case$54 - (block $switch-case$53 - (block $switch-case$52 - (block $switch-case$51 - (block $switch-case$50 - (block $switch-case$49 - (block $switch-case$48 - (block $switch-case$47 - (block $switch-case$46 - (block $switch-case$45 - (block $switch-case$44 - (block $switch-case$43 - (block $switch-case$42 - (block $switch-case$41 - (block $switch-case$40 - (block $switch-case$37 - (block $switch-case$36 - (block $switch-case$35 - (block $switch-case$34 - (br_table $switch-case$49 $switch-default$127 $switch-case$47 $switch-default$127 $switch-case$52 $switch-case$51 $switch-case$50 $switch-default$127 $switch-default$127 $switch-default$127 $switch-default$127 $switch-default$127 $switch-default$127 $switch-default$127 $switch-default$127 $switch-default$127 $switch-default$127 $switch-default$127 $switch-case$48 $switch-default$127 $switch-default$127 $switch-default$127 $switch-default$127 $switch-case$36 $switch-default$127 $switch-default$127 $switch-default$127 $switch-default$127 $switch-default$127 $switch-default$127 $switch-default$127 $switch-default$127 $switch-case$53 $switch-default$127 $switch-case$44 $switch-case$42 $switch-case$126 $switch-case$55 $switch-case$54 $switch-default$127 $switch-case$41 $switch-default$127 $switch-default$127 $switch-default$127 $switch-case$45 $switch-case$34 $switch-case$40 $switch-case$35 $switch-default$127 $switch-default$127 $switch-case$46 $switch-default$127 $switch-case$43 $switch-default$127 $switch-default$127 $switch-case$37 $switch-default$127 - (i32.sub - (set_local $26 - (select - (i32.and - (get_local $1) - (i32.const -33) - ) - (get_local $1) - (get_local $5) - ) - ) - (i32.const 65) - ) - ) - ) - (block $switch-default$33 - (block $switch-default$33 - (block $switch-case$32 - (block $switch-case$31 - (block $switch-case$30 - (block $switch-case$29 - (block $switch-case$28 - (block $switch-case$27 - (block $switch-case$26 - (br_table $switch-case$26 $switch-case$27 $switch-case$28 $switch-case$29 $switch-case$30 $switch-default$33 $switch-case$31 $switch-case$32 $switch-default$33 - (i32.sub - (get_local $13) - (i32.const 0) - ) - ) - ) - (i32.store - (i32.load - (get_local $19) - ) - (get_local $22) - ) - (set_local $20 - (get_local $9) - ) - (set_local $1 - (get_local $17) - ) - (set_local $8 - (get_local $21) - ) - (br $label$continue$L1) - ) - (i32.store - (i32.load - (get_local $19) - ) - (get_local $22) - ) - (set_local $20 - (get_local $9) - ) - (set_local $1 - (get_local $17) - ) - (set_local $8 - (get_local $21) - ) - (br $label$continue$L1) - ) - (i32.store - (set_local $1 - (i32.load - (get_local $19) - ) - ) - (get_local $22) - ) - (i32.store offset=4 - (get_local $1) - (i32.shr_s - (i32.shl - (i32.lt_s - (get_local $22) - (i32.const 0) - ) - (i32.const 31) - ) - (i32.const 31) - ) - ) - (set_local $20 - (get_local $9) - ) - (set_local $1 - (get_local $17) - ) - (set_local $8 - (get_local $21) - ) - (br $label$continue$L1) - ) - (i32.store16 - (i32.load - (get_local $19) - ) - (i32.and - (get_local $22) - (i32.const 65535) - ) - ) - (set_local $20 - (get_local $9) - ) - (set_local $1 - (get_local $17) - ) - (set_local $8 - (get_local $21) - ) - (br $label$continue$L1) - ) - (i32.store8 - (i32.load - (get_local $19) - ) - (i32.and - (get_local $22) - (i32.const 255) - ) - ) - (set_local $20 - (get_local $9) - ) - (set_local $1 - (get_local $17) - ) - (set_local $8 - (get_local $21) - ) - (br $label$continue$L1) - ) - (i32.store - (i32.load - (get_local $19) - ) - (get_local $22) - ) - (set_local $20 - (get_local $9) - ) - (set_local $1 - (get_local $17) - ) - (set_local $8 - (get_local $21) - ) - (br $label$continue$L1) - ) - (i32.store - (set_local $1 - (i32.load - (get_local $19) - ) - ) - (get_local $22) - ) - (i32.store offset=4 - (get_local $1) - (i32.shr_s - (i32.shl - (i32.lt_s - (get_local $22) - (i32.const 0) - ) - (i32.const 31) - ) - (i32.const 31) - ) - ) - (set_local $20 - (get_local $9) - ) - (set_local $1 - (get_local $17) - ) - (set_local $8 - (get_local $21) - ) - (br $label$continue$L1) - ) - (set_local $20 - (get_local $9) - ) - (set_local $1 - (get_local $17) - ) - (set_local $8 - (get_local $21) - ) - (br $label$continue$L1) - ) - ) - (set_local $46 - (i32.or - (get_local $18) - (i32.const 8) - ) - ) - (set_local $57 - (select - (get_local $10) - (i32.const 8) - (i32.gt_u - (get_local $10) - (i32.const 8) - ) - ) - ) - (set_local $68 - (i32.const 120) - ) - (set_local $12 - (i32.const 64) - ) - (br $switch$24) - ) - ) - (set_local $46 - (get_local $18) - ) - (set_local $57 - (get_local $10) - ) - (set_local $68 - (get_local $26) - ) - (set_local $12 - (i32.const 64) - ) - (br $switch$24) - ) - (if - (i32.and - (i32.eq - (set_local $5 - (i32.load - (set_local $1 - (get_local $19) - ) - ) - ) - (i32.const 0) - ) - (i32.eq - (set_local $1 - (i32.load offset=4 - (get_local $1) - ) - ) - (i32.const 0) - ) - ) - (set_local $6 - (get_local $28) - ) - (block - (set_local $6 - (get_local $28) - ) - (loop $while-out$38 $while-in$39 - (i32.store8 - (set_local $6 - (i32.add - (get_local $6) - (i32.const -1) - ) - ) - (i32.and - (i32.or - (i32.and - (get_local $5) - (i32.const 7) - ) - (i32.const 48) - ) - (i32.const 255) - ) - ) - (if - (i32.and - (i32.eq - (set_local $5 - (call $_bitshift64Lshr - (get_local $5) - (get_local $1) - (i32.const 3) - ) - ) - (i32.const 0) - ) - (i32.eq - (set_local $1 - (i32.load - (i32.const 168) - ) - ) - (i32.const 0) - ) - ) - (br $while-out$38) - ) - (br $while-in$39) - ) - ) - ) - (set_local $58 - (if - (i32.eq - (i32.and - (get_local $18) - (i32.const 8) - ) + (block $switch$24 + (block $switch-default$127 + (block $switch-case$49 + (block $switch-case$48 + (block $switch-case$47 + (block $switch-case$46 + (block $switch-case$45 + (block $switch-case$44 + (block $switch-case$43 + (block $switch-case$41 + (block $switch-case$40 + (block $switch-case$36 + (block $switch-case$35 + (block $switch-case$34 + (br_table $switch-case$49 $switch-default$127 $switch-case$47 $switch-default$127 $switch-case$49 $switch-case$49 $switch-case$49 $switch-default$127 $switch-default$127 $switch-default$127 $switch-default$127 $switch-default$127 $switch-default$127 $switch-default$127 $switch-default$127 $switch-default$127 $switch-default$127 $switch-default$127 $switch-case$48 $switch-default$127 $switch-default$127 $switch-default$127 $switch-default$127 $switch-case$36 $switch-default$127 $switch-default$127 $switch-default$127 $switch-default$127 $switch-default$127 $switch-default$127 $switch-default$127 $switch-default$127 $switch-case$49 $switch-default$127 $switch-case$44 $switch-case$41 $switch-case$49 $switch-case$49 $switch-case$49 $switch-default$127 $switch-case$41 $switch-default$127 $switch-default$127 $switch-default$127 $switch-case$45 $switch-case$34 $switch-case$40 $switch-case$35 $switch-default$127 $switch-default$127 $switch-case$46 $switch-default$127 $switch-case$43 $switch-default$127 $switch-default$127 $switch-case$36 $switch-default$127 + (i32.sub + (set_local $26 + (select + (i32.and + (get_local $1) + (i32.const -33) + ) + (get_local $1) + (get_local $5) + ) + ) + (i32.const 65) + ) + ) + ) + (block $switch-default$33 + (block $switch-case$32 + (block $switch-case$31 + (block $switch-case$30 + (block $switch-case$29 + (block $switch-case$28 + (block $switch-case$27 + (block $switch-case$26 + (br_table $switch-case$26 $switch-case$27 $switch-case$28 $switch-case$29 $switch-case$30 $switch-default$33 $switch-case$31 $switch-case$32 $switch-default$33 + (i32.sub + (get_local $13) (i32.const 0) ) - (block - (set_local $34 - (get_local $18) - ) - (set_local $32 - (get_local $10) - ) - (set_local $35 - (i32.const 0) - ) - (set_local $36 - (i32.const 4091) - ) - (set_local $12 - (i32.const 77) - ) - (get_local $6) - ) - (block - (set_local $5 - (i32.lt_s - (get_local $10) - (set_local $1 - (i32.add - (i32.sub - (get_local $71) - (get_local $6) - ) - (i32.const 1) - ) - ) - ) - ) - (set_local $34 - (get_local $18) - ) - (set_local $32 - (select - (get_local $1) - (get_local $10) - (get_local $5) - ) - ) - (set_local $35 - (i32.const 0) - ) - (set_local $36 - (i32.const 4091) - ) - (set_local $12 - (i32.const 77) - ) - (get_local $6) - ) - ) - ) - (br $switch$24) - ) - ) - (set_local $5 - (i32.load - (set_local $1 - (get_local $19) - ) - ) - ) - (if - (i32.lt_s - (set_local $33 - (i32.load offset=4 - (get_local $1) - ) - ) - (i32.const 0) - ) - (block - (set_local $1 - (call $_i64Subtract - (i32.const 0) - (i32.const 0) - (get_local $5) - (get_local $33) - ) - ) - (set_local $5 - (i32.load - (i32.const 168) ) ) (i32.store - (set_local $33 + (i32.load (get_local $19) ) - (get_local $1) - ) - (i32.store offset=4 - (get_local $33) - (get_local $5) + (get_local $22) ) - (set_local $33 - (get_local $1) - ) - (set_local $59 - (get_local $5) + (set_local $20 + (get_local $9) ) - (set_local $60 - (i32.const 1) + (set_local $1 + (get_local $17) ) - (set_local $61 - (i32.const 4091) + (set_local $8 + (get_local $21) ) - (set_local $12 - (i32.const 76) + (br $label$continue$L1) + ) + (i32.store + (i32.load + (get_local $19) ) - (br $label$break$L75) + (get_local $22) ) + (set_local $20 + (get_local $9) + ) + (set_local $1 + (get_local $17) + ) + (set_local $8 + (get_local $21) + ) + (br $label$continue$L1) ) - (set_local $33 - (if - (i32.eq - (i32.and - (get_local $18) - (i32.const 2048) - ) - (i32.const 0) - ) - (block - (set_local $1 - (select - (i32.const 4091) - (i32.const 4093) - (i32.eq - (set_local $6 - (i32.and - (get_local $18) - (i32.const 1) - ) - ) - (i32.const 0) - ) - ) - ) - (set_local $59 - (get_local $33) - ) - (set_local $60 - (get_local $6) - ) - (set_local $61 - (get_local $1) - ) - (set_local $12 - (i32.const 76) - ) - (get_local $5) + (i32.store + (set_local $1 + (i32.load + (get_local $19) ) - (block - (set_local $59 - (get_local $33) - ) - (set_local $60 - (i32.const 1) - ) - (set_local $61 - (i32.const 4092) - ) - (set_local $12 - (i32.const 76) + ) + (get_local $22) + ) + (i32.store offset=4 + (get_local $1) + (i32.shr_s + (i32.shl + (i32.lt_s + (get_local $22) + (i32.const 0) ) - (get_local $5) + (i32.const 31) ) + (i32.const 31) ) ) - (br $switch$24) + (set_local $20 + (get_local $9) + ) + (set_local $1 + (get_local $17) + ) + (set_local $8 + (get_local $21) + ) + (br $label$continue$L1) ) - (set_local $33 + (i32.store16 (i32.load - (set_local $1 - (get_local $19) - ) + (get_local $19) ) - ) - (set_local $59 - (i32.load offset=4 - (get_local $1) + (i32.and + (get_local $22) + (i32.const 65535) ) ) - (set_local $60 - (i32.const 0) + (set_local $20 + (get_local $9) ) - (set_local $61 - (i32.const 4091) + (set_local $1 + (get_local $17) ) - (set_local $12 - (i32.const 76) + (set_local $8 + (get_local $21) ) - (br $switch$24) + (br $label$continue$L1) ) - (set_local $5 + (i32.store8 (i32.load - (set_local $1 - (get_local $19) - ) + (get_local $19) ) - ) - (i32.load offset=4 - (get_local $1) - ) - (i32.store8 - (get_local $72) (i32.and - (get_local $5) + (get_local $22) (i32.const 255) ) ) - (set_local $47 - (get_local $72) - ) - (set_local $37 - (get_local $7) - ) - (set_local $42 - (i32.const 1) - ) - (set_local $43 - (i32.const 0) + (set_local $20 + (get_local $9) ) - (set_local $48 - (i32.const 4091) + (set_local $1 + (get_local $17) ) - (set_local $49 - (get_local $28) + (set_local $8 + (get_local $21) ) - (br $switch$24) + (br $label$continue$L1) ) - (set_local $50 - (call $_strerror - (i32.load - (call $___errno_location) - ) + (i32.store + (i32.load + (get_local $19) ) + (get_local $22) ) - (set_local $12 - (i32.const 82) + (set_local $20 + (get_local $9) ) - (br $switch$24) + (set_local $1 + (get_local $17) + ) + (set_local $8 + (get_local $21) + ) + (br $label$continue$L1) ) - (set_local $5 - (i32.ne - (set_local $1 - (i32.load - (get_local $19) - ) + (i32.store + (set_local $1 + (i32.load + (get_local $19) ) - (i32.const 0) ) + (get_local $22) ) - (set_local $50 - (select - (get_local $1) - (i32.const 4101) - (get_local $5) + (i32.store offset=4 + (get_local $1) + (i32.shr_s + (i32.shl + (i32.lt_s + (get_local $22) + (i32.const 0) + ) + (i32.const 31) + ) + (i32.const 31) ) ) - (set_local $12 - (i32.const 82) + (set_local $20 + (get_local $9) + ) + (set_local $1 + (get_local $17) ) - (br $switch$24) + (set_local $8 + (get_local $21) + ) + (br $label$continue$L1) + ) + (set_local $20 + (get_local $9) ) + (set_local $1 + (get_local $17) + ) + (set_local $8 + (get_local $21) + ) + (br $label$continue$L1) + ) + (set_local $46 + (i32.or + (get_local $18) + (i32.const 8) + ) + ) + (set_local $57 + (select + (get_local $10) + (i32.const 8) + (i32.gt_u + (get_local $10) + (i32.const 8) + ) + ) + ) + (set_local $68 + (i32.const 120) + ) + (set_local $12 + (i32.const 64) + ) + (br $switch$24) + ) + (set_local $46 + (get_local $18) + ) + (set_local $57 + (get_local $10) + ) + (set_local $68 + (get_local $26) + ) + (set_local $12 + (i32.const 64) + ) + (br $switch$24) + ) + (if + (i32.and + (i32.eq (set_local $5 (i32.load (set_local $1 @@ -5009,1097 +4642,1403 @@ ) ) ) - (i32.load offset=4 - (get_local $1) + (i32.const 0) + ) + (i32.eq + (set_local $1 + (i32.load offset=4 + (get_local $1) + ) ) - (i32.store - (get_local $73) - (get_local $5) + (i32.const 0) + ) + ) + (set_local $6 + (get_local $28) + ) + (block + (set_local $6 + (get_local $28) + ) + (loop $while-out$38 $while-in$39 + (i32.store8 + (set_local $6 + (i32.add + (get_local $6) + (i32.const -1) + ) + ) + (i32.and + (i32.or + (i32.and + (get_local $5) + (i32.const 7) + ) + (i32.const 48) + ) + (i32.const 255) + ) ) - (i32.store - (get_local $76) - (i32.const 0) + (if + (i32.and + (i32.eq + (set_local $5 + (call $_bitshift64Lshr + (get_local $5) + (get_local $1) + (i32.const 3) + ) + ) + (i32.const 0) + ) + (i32.eq + (set_local $1 + (i32.load + (i32.const 168) + ) + ) + (i32.const 0) + ) + ) + (br $while-out$38) ) - (i32.store - (get_local $19) - (get_local $73) + (br $while-in$39) + ) + ) + ) + (set_local $58 + (if + (i32.eq + (i32.and + (get_local $18) + (i32.const 8) ) - (set_local $69 - (i32.const -1) + (i32.const 0) + ) + (block + (set_local $34 + (get_local $18) + ) + (set_local $32 + (get_local $10) + ) + (set_local $35 + (i32.const 0) + ) + (set_local $36 + (i32.const 4091) ) (set_local $12 - (i32.const 86) + (i32.const 77) ) - (br $switch$24) + (get_local $6) ) - (set_local $12 - (if - (i32.eq + (block + (set_local $5 + (i32.lt_s (get_local $10) - (i32.const 0) - ) - (block - (call $_pad - (get_local $0) - (i32.const 32) - (get_local $16) - (i32.const 0) - (get_local $18) - ) - (set_local $38 - (i32.const 0) + (set_local $1 + (i32.add + (i32.sub + (get_local $71) + (get_local $6) + ) + (i32.const 1) + ) ) - (i32.const 98) ) - (block - (set_local $69 - (get_local $10) + ) + (set_local $34 + (get_local $18) + ) + (set_local $32 + (select + (get_local $1) + (get_local $10) + (get_local $5) + ) + ) + (set_local $35 + (i32.const 0) + ) + (set_local $36 + (i32.const 4091) + ) + (set_local $12 + (i32.const 77) + ) + (get_local $6) + ) + ) + ) + (br $switch$24) + ) + (set_local $5 + (i32.load + (set_local $1 + (get_local $19) + ) + ) + ) + (if + (i32.lt_s + (set_local $33 + (i32.load offset=4 + (get_local $1) + ) + ) + (i32.const 0) + ) + (block + (set_local $1 + (call $_i64Subtract + (i32.const 0) + (i32.const 0) + (get_local $5) + (get_local $33) + ) + ) + (set_local $5 + (i32.load + (i32.const 168) + ) + ) + (i32.store + (set_local $33 + (get_local $19) + ) + (get_local $1) + ) + (i32.store offset=4 + (get_local $33) + (get_local $5) + ) + (set_local $33 + (get_local $1) + ) + (set_local $59 + (get_local $5) + ) + (set_local $60 + (i32.const 1) + ) + (set_local $61 + (i32.const 4091) + ) + (set_local $12 + (i32.const 76) + ) + (br $switch$24) + ) + ) + (set_local $33 + (if + (i32.eq + (i32.and + (get_local $18) + (i32.const 2048) + ) + (i32.const 0) + ) + (block + (set_local $1 + (select + (i32.const 4091) + (i32.const 4093) + (i32.eq + (set_local $6 + (i32.and + (get_local $18) + (i32.const 1) + ) ) - (i32.const 86) + (i32.const 0) ) ) ) - (br $switch$24) + (set_local $59 + (get_local $33) + ) + (set_local $60 + (get_local $6) + ) + (set_local $61 + (get_local $1) + ) + (set_local $12 + (i32.const 76) + ) + (get_local $5) + ) + (block + (set_local $59 + (get_local $33) + ) + (set_local $60 + (i32.const 1) + ) + (set_local $61 + (i32.const 4092) + ) + (set_local $12 + (i32.const 76) + ) + (get_local $5) ) ) ) + (br $switch$24) ) + (set_local $33 + (i32.load + (set_local $1 + (get_local $19) + ) + ) + ) + (set_local $59 + (i32.load offset=4 + (get_local $1) + ) + ) + (set_local $60 + (i32.const 0) + ) + (set_local $61 + (i32.const 4091) + ) + (set_local $12 + (i32.const 76) + ) + (br $switch$24) ) - ) - ) - ) - (set_local $15 - (f64.load - (get_local $19) - ) - ) - (i32.store - (get_local $25) - (i32.const 0) - ) - (f64.store - (i32.load - (i32.const 24) - ) - (get_local $15) - ) - (i32.load - (i32.load - (i32.const 24) - ) - ) - (set_local $51 - (if - (i32.lt_s - (i32.load offset=4 + (set_local $5 (i32.load - (i32.const 24) + (set_local $1 + (get_local $19) + ) ) ) - (i32.const 0) - ) - (block - (set_local $39 - (i32.const 4108) - ) - (set_local $15 - (f64.neg - (get_local $15) - ) + (i32.load offset=4 + (get_local $1) ) - (i32.const 1) - ) - (if - (i32.eq + (i32.store8 + (get_local $72) (i32.and - (get_local $18) - (i32.const 2048) + (get_local $5) + (i32.const 255) ) + ) + (set_local $47 + (get_local $72) + ) + (set_local $37 + (get_local $7) + ) + (set_local $42 + (i32.const 1) + ) + (set_local $43 (i32.const 0) ) - (block - (set_local $39 - (select - (i32.const 4109) - (i32.const 4114) - (i32.eq - (set_local $1 - (i32.and - (get_local $18) - (i32.const 1) - ) - ) - (i32.const 0) - ) - ) + (set_local $48 + (i32.const 4091) + ) + (set_local $49 + (get_local $28) + ) + (br $switch$24) + ) + (set_local $50 + (call $_strerror + (i32.load + (call $___errno_location) ) - (get_local $1) ) - (block - (set_local $39 - (i32.const 4111) + ) + (set_local $12 + (i32.const 82) + ) + (br $switch$24) + ) + (set_local $5 + (i32.ne + (set_local $1 + (i32.load + (get_local $19) ) - (i32.const 1) ) + (i32.const 0) ) ) + (set_local $50 + (select + (get_local $1) + (i32.const 4101) + (get_local $5) + ) + ) + (set_local $12 + (i32.const 82) + ) + (br $switch$24) ) - (f64.store + (set_local $5 (i32.load - (i32.const 24) + (set_local $1 + (get_local $19) + ) ) - (get_local $15) ) - (i32.load - (i32.load - (i32.const 24) + (i32.load offset=4 + (get_local $1) + ) + (i32.store + (get_local $73) + (get_local $5) + ) + (i32.store + (get_local $76) + (i32.const 0) + ) + (i32.store + (get_local $19) + (get_local $73) + ) + (set_local $69 + (i32.const -1) + ) + (set_local $12 + (i32.const 86) + ) + (br $switch$24) + ) + (set_local $12 + (if + (i32.eq + (get_local $10) + (i32.const 0) + ) + (block + (call $_pad + (get_local $0) + (i32.const 32) + (get_local $16) + (i32.const 0) + (get_local $18) + ) + (set_local $38 + (i32.const 0) + ) + (i32.const 98) + ) + (block + (set_local $69 + (get_local $10) + ) + (i32.const 86) ) ) - (set_local $20 - (get_local $9) + ) + (br $switch$24) + ) + (set_local $15 + (f64.load + (get_local $19) + ) + ) + (i32.store + (get_local $25) + (i32.const 0) + ) + (f64.store + (i32.load + (i32.const 24) + ) + (get_local $15) + ) + (i32.load + (i32.load + (i32.const 24) + ) + ) + (set_local $51 + (if + (i32.lt_s + (i32.load offset=4 + (i32.load + (i32.const 24) + ) + ) + (i32.const 0) ) - (set_local $1 - (block $do-once$56 - (if - (i32.or - (i32.lt_u + (block + (set_local $39 + (i32.const 4108) + ) + (set_local $15 + (f64.neg + (get_local $15) + ) + ) + (i32.const 1) + ) + (if + (i32.eq + (i32.and + (get_local $18) + (i32.const 2048) + ) + (i32.const 0) + ) + (block + (set_local $39 + (select + (i32.const 4109) + (i32.const 4114) + (i32.eq (set_local $1 (i32.and - (i32.load offset=4 - (i32.load - (i32.const 24) - ) - ) - (i32.const 2146435072) + (get_local $18) + (i32.const 1) ) ) - (i32.const 2146435072) + (i32.const 0) ) + ) + ) + (get_local $1) + ) + (block + (set_local $39 + (i32.const 4111) + ) + (i32.const 1) + ) + ) + ) + ) + (f64.store + (i32.load + (i32.const 24) + ) + (get_local $15) + ) + (i32.load + (i32.load + (i32.const 24) + ) + ) + (set_local $20 + (get_local $9) + ) + (set_local $1 + (block $do-once$56 + (if + (i32.or + (i32.lt_u + (set_local $1 (i32.and - (i32.eq - (get_local $1) - (i32.const 2146435072) + (i32.load offset=4 + (i32.load + (i32.const 24) + ) ) - (i32.const 0) + (i32.const 2146435072) ) ) - (block - (if - (set_local $5 - (f64.ne - (set_local $15 - (f64.mul - (call $_frexpl - (get_local $15) - (get_local $25) - ) - (f64.const 2) - ) + (i32.const 2146435072) + ) + (i32.and + (i32.eq + (get_local $1) + (i32.const 2146435072) + ) + (i32.const 0) + ) + ) + (block + (if + (set_local $5 + (f64.ne + (set_local $15 + (f64.mul + (call $_frexpl + (get_local $15) + (get_local $25) ) - (f64.const 0) + (f64.const 2) ) ) - (i32.store + (f64.const 0) + ) + ) + (i32.store + (get_local $25) + (i32.add + (i32.load (get_local $25) + ) + (i32.const -1) + ) + ) + ) + (if + (i32.eq + (set_local $14 + (i32.or + (get_local $26) + (i32.const 32) + ) + ) + (i32.const 97) + ) + (block + (set_local $9 + (select + (get_local $39) (i32.add - (i32.load - (get_local $25) + (get_local $39) + (i32.const 9) + ) + (i32.eq + (set_local $6 + (i32.and + (get_local $26) + (i32.const 32) + ) ) - (i32.const -1) + (i32.const 0) ) ) ) - (if - (i32.eq - (set_local $14 - (i32.or - (get_local $26) - (i32.const 32) - ) - ) - (i32.const 97) + (set_local $7 + (i32.or + (get_local $51) + (i32.const 2) ) - (block - (set_local $9 - (select - (get_local $39) - (i32.add - (get_local $39) - (i32.const 9) - ) - (i32.eq - (set_local $6 - (i32.and - (get_local $26) - (i32.const 32) - ) + ) + (set_local $15 + (if + (i32.or + (i32.gt_u + (get_local $10) + (i32.const 11) + ) + (i32.eq + (set_local $1 + (i32.sub + (i32.const 12) + (get_local $10) ) - (i32.const 0) ) + (i32.const 0) ) ) - (set_local $7 - (i32.or - (get_local $51) - (i32.const 2) + (get_local $15) + (block + (set_local $30 + (f64.const 8) ) - ) - (set_local $15 - (if - (i32.or - (i32.gt_u - (get_local $10) - (i32.const 11) + (loop $while-out$60 $while-in$61 + (set_local $30 + (f64.mul + (get_local $30) + (f64.const 16) ) + ) + (if (i32.eq (set_local $1 - (i32.sub - (i32.const 12) - (get_local $10) + (i32.add + (get_local $1) + (i32.const -1) ) ) (i32.const 0) ) + (br $while-out$60) ) - (get_local $15) - (block - (set_local $30 - (f64.const 8) - ) - (loop $while-out$60 $while-in$61 - (set_local $30 - (f64.mul - (get_local $30) - (f64.const 16) - ) - ) - (if - (i32.eq - (set_local $1 - (i32.add - (get_local $1) - (i32.const -1) - ) - ) - (i32.const 0) - ) - (br $while-out$60) - ) - (br $while-in$61) - ) - (select - (f64.neg - (f64.add - (get_local $30) - (f64.sub - (f64.neg - (get_local $15) - ) - (get_local $30) - ) - ) - ) + (br $while-in$61) + ) + (select + (f64.neg + (f64.add + (get_local $30) (f64.sub - (f64.add + (f64.neg (get_local $15) - (get_local $30) ) (get_local $30) ) - (i32.eq - (i32.shr_s - (i32.shl - (i32.load8_s - (get_local $9) - ) - (i32.const 24) - ) - (i32.const 24) + ) + ) + (f64.sub + (f64.add + (get_local $15) + (get_local $30) + ) + (get_local $30) + ) + (i32.eq + (i32.shr_s + (i32.shl + (i32.load8_s + (get_local $9) ) - (i32.const 45) + (i32.const 24) ) + (i32.const 24) ) + (i32.const 45) ) ) ) - (set_local $5 - (i32.lt_s - (set_local $1 - (i32.load - (get_local $25) - ) - ) - (i32.const 0) + ) + ) + (set_local $5 + (i32.lt_s + (set_local $1 + (i32.load + (get_local $25) ) ) - (set_local $5 - (i32.shr_s - (i32.shl - (i32.lt_s - (set_local $8 - (select - (i32.sub - (i32.const 0) - (get_local $1) - ) - (get_local $1) - (get_local $5) - ) + (i32.const 0) + ) + ) + (set_local $5 + (i32.shr_s + (i32.shl + (i32.lt_s + (set_local $8 + (select + (i32.sub + (i32.const 0) + (get_local $1) ) - (i32.const 0) + (get_local $1) + (get_local $5) ) - (i32.const 31) ) - (i32.const 31) + (i32.const 0) ) + (i32.const 31) ) - (i32.store8 - (i32.add - (set_local $5 - (if - (i32.eq - (set_local $5 - (call $_fmt_u - (get_local $8) - (get_local $5) - (get_local $52) - ) - ) + (i32.const 31) + ) + ) + (i32.store8 + (i32.add + (set_local $5 + (if + (i32.eq + (set_local $5 + (call $_fmt_u + (get_local $8) + (get_local $5) (get_local $52) ) - (block - (i32.store8 - (get_local $74) - (i32.const 48) - ) - (get_local $74) - ) - (get_local $5) ) + (get_local $52) ) - (i32.const -1) - ) - (i32.and - (i32.add - (i32.and - (i32.shr_s - (get_local $1) - (i32.const 31) - ) - (i32.const 2) + (block + (i32.store8 + (get_local $74) + (i32.const 48) ) - (i32.const 43) + (get_local $74) ) - (i32.const 255) + (get_local $5) ) ) - (i32.store8 - (set_local $8 - (i32.add - (get_local $5) - (i32.const -2) - ) - ) + (i32.const -1) + ) + (i32.and + (i32.add (i32.and - (i32.add - (get_local $26) - (i32.const 15) + (i32.shr_s + (get_local $1) + (i32.const 31) ) - (i32.const 255) + (i32.const 2) ) + (i32.const 43) ) - (set_local $5 - (i32.lt_s - (get_local $10) - (i32.const 1) - ) + (i32.const 255) + ) + ) + (i32.store8 + (set_local $8 + (i32.add + (get_local $5) + (i32.const -2) ) - (set_local $13 - (i32.eq - (i32.and - (get_local $18) - (i32.const 8) - ) - (i32.const 0) - ) + ) + (i32.and + (i32.add + (get_local $26) + (i32.const 15) ) - (set_local $11 - (get_local $29) + (i32.const 255) + ) + ) + (set_local $5 + (i32.lt_s + (get_local $10) + (i32.const 1) + ) + ) + (set_local $13 + (i32.eq + (i32.and + (get_local $18) + (i32.const 8) ) - (loop $while-out$62 $while-in$63 - (i32.store8 - (get_local $11) + (i32.const 0) + ) + ) + (set_local $11 + (get_local $29) + ) + (loop $while-out$62 $while-in$63 + (i32.store8 + (get_local $11) + (i32.and + (i32.or (i32.and - (i32.or - (i32.and - (i32.load8_s - (i32.add - (set_local $1 - (i32.trunc_s/f64 - (get_local $15) - ) - ) - (i32.const 4075) + (i32.load8_s + (i32.add + (set_local $1 + (i32.trunc_s/f64 + (get_local $15) ) ) - (i32.const 255) + (i32.const 4075) ) - (get_local $6) ) (i32.const 255) ) + (get_local $6) ) - (set_local $15 - (f64.mul - (f64.sub - (get_local $15) - (f64.convert_s/i32 - (get_local $1) - ) - ) - (f64.const 16) + (i32.const 255) + ) + ) + (set_local $15 + (f64.mul + (f64.sub + (get_local $15) + (f64.convert_s/i32 + (get_local $1) ) ) - (set_local $11 - (block $do-once$64 - (if - (i32.eq - (i32.sub - (set_local $1 - (i32.add - (get_local $11) - (i32.const 1) - ) - ) - (get_local $64) - ) - (i32.const 1) - ) - (block - (br_if $do-once$64 - (get_local $1) - (i32.and - (get_local $13) - (i32.and - (get_local $5) - (f64.eq - (get_local $15) - (f64.const 0) - ) - ) - ) - ) - (i32.store8 - (get_local $1) - (i32.const 46) - ) + (f64.const 16) + ) + ) + (set_local $11 + (block $do-once$64 + (if + (i32.eq + (i32.sub + (set_local $1 (i32.add (get_local $11) - (i32.const 2) + (i32.const 1) ) ) - (get_local $1) + (get_local $64) ) - ) - ) - (if - (f64.eq - (get_local $15) - (f64.const 0) + (i32.const 1) ) (block - (set_local $1 - (get_local $11) - ) - (br $while-out$62) - ) - ) - (br $while-in$63) - ) - (set_local $5 - (i32.and - (i32.ne - (get_local $10) - (i32.const 0) - ) - (i32.lt_s - (i32.add - (get_local $78) + (br_if $do-once$64 (get_local $1) - ) - (get_local $10) - ) - ) - ) - (call $_pad - (get_local $0) - (i32.const 32) - (get_local $16) - (set_local $5 - (i32.add - (set_local $6 - (select - (i32.sub - (i32.add - (get_local $79) - (get_local $10) - ) - (get_local $8) - ) - (i32.add - (i32.sub - (get_local $77) - (get_local $8) + (i32.and + (get_local $13) + (i32.and + (get_local $5) + (f64.eq + (get_local $15) + (f64.const 0) ) - (get_local $1) ) - (get_local $5) ) ) - (get_local $7) - ) - ) - (get_local $18) - ) - (if - (i32.eq - (i32.and - (i32.load - (get_local $0) + (i32.store8 + (get_local $1) + (i32.const 46) + ) + (i32.add + (get_local $11) + (i32.const 2) ) - (i32.const 32) ) - (i32.const 0) - ) - (call $___fwritex - (get_local $9) - (get_local $7) - (get_local $0) + (get_local $1) ) ) - (call $_pad - (get_local $0) - (i32.const 48) - (get_local $16) - (get_local $5) - (i32.xor - (get_local $18) - (i32.const 65536) - ) + ) + (if + (f64.eq + (get_local $15) + (f64.const 0) ) - (set_local $1 - (i32.sub - (get_local $1) - (get_local $64) + (block + (set_local $1 + (get_local $11) ) + (br $while-out$62) ) - (if - (i32.eq - (i32.and - (i32.load - (get_local $0) - ) - (i32.const 32) - ) - (i32.const 0) - ) - (call $___fwritex - (get_local $29) + ) + (br $while-in$63) + ) + (set_local $5 + (i32.and + (i32.ne + (get_local $10) + (i32.const 0) + ) + (i32.lt_s + (i32.add + (get_local $78) (get_local $1) - (get_local $0) ) + (get_local $10) ) - (call $_pad - (get_local $0) - (i32.const 48) - (i32.sub - (get_local $6) - (i32.add - (get_local $1) - (set_local $1 + ) + ) + (call $_pad + (get_local $0) + (i32.const 32) + (get_local $16) + (set_local $5 + (i32.add + (set_local $6 + (select + (i32.sub + (i32.add + (get_local $79) + (get_local $10) + ) + (get_local $8) + ) + (i32.add (i32.sub - (get_local $40) + (get_local $77) (get_local $8) ) + (get_local $1) ) + (get_local $5) ) ) - (i32.const 0) - (i32.const 0) + (get_local $7) ) - (if - (i32.eq - (i32.and - (i32.load - (get_local $0) - ) - (i32.const 32) - ) - (i32.const 0) - ) - (call $___fwritex - (get_local $8) - (get_local $1) + ) + (get_local $18) + ) + (if + (i32.eq + (i32.and + (i32.load (get_local $0) ) - ) - (call $_pad - (get_local $0) (i32.const 32) - (get_local $16) - (get_local $5) - (i32.xor - (get_local $18) - (i32.const 8192) + ) + (i32.const 0) + ) + (call $___fwritex + (get_local $9) + (get_local $7) + (get_local $0) + ) + ) + (call $_pad + (get_local $0) + (i32.const 48) + (get_local $16) + (get_local $5) + (i32.xor + (get_local $18) + (i32.const 65536) + ) + ) + (set_local $1 + (i32.sub + (get_local $1) + (get_local $64) + ) + ) + (if + (i32.eq + (i32.and + (i32.load + (get_local $0) ) + (i32.const 32) ) - (br $do-once$56 - (select - (get_local $16) - (get_local $5) - (i32.lt_s - (get_local $5) - (get_local $16) + (i32.const 0) + ) + (call $___fwritex + (get_local $29) + (get_local $1) + (get_local $0) + ) + ) + (call $_pad + (get_local $0) + (i32.const 48) + (i32.sub + (get_local $6) + (i32.add + (get_local $1) + (set_local $1 + (i32.sub + (get_local $40) + (get_local $8) ) ) ) ) + (i32.const 0) + (i32.const 0) ) - (set_local $1 + (if + (i32.eq + (i32.and + (i32.load + (get_local $0) + ) + (i32.const 32) + ) + (i32.const 0) + ) + (call $___fwritex + (get_local $8) + (get_local $1) + (get_local $0) + ) + ) + (call $_pad + (get_local $0) + (i32.const 32) + (get_local $16) + (get_local $5) + (i32.xor + (get_local $18) + (i32.const 8192) + ) + ) + (br $do-once$56 (select - (i32.const 6) - (get_local $10) + (get_local $16) + (get_local $5) (i32.lt_s - (get_local $10) - (i32.const 0) + (get_local $5) + (get_local $16) ) ) ) - (set_local $62 - (set_local $9 - (select - (get_local $80) - (get_local $81) - (i32.lt_s - (if - (get_local $5) - (block - (i32.store - (get_local $25) - (set_local $5 - (i32.add - (i32.load - (get_local $25) - ) - (i32.const -28) - ) - ) - ) - (set_local $15 - (f64.mul - (get_local $15) - (f64.const 268435456) + ) + ) + (set_local $1 + (select + (i32.const 6) + (get_local $10) + (i32.lt_s + (get_local $10) + (i32.const 0) + ) + ) + ) + (set_local $62 + (set_local $9 + (select + (get_local $80) + (get_local $81) + (i32.lt_s + (if + (get_local $5) + (block + (i32.store + (get_local $25) + (set_local $5 + (i32.add + (i32.load + (get_local $25) ) + (i32.const -28) ) - (get_local $5) ) - (i32.load - (get_local $25) + ) + (set_local $15 + (f64.mul + (get_local $15) + (f64.const 268435456) ) ) - (i32.const 0) + (get_local $5) + ) + (i32.load + (get_local $25) ) ) + (i32.const 0) ) ) - (set_local $7 - (get_local $9) + ) + ) + (set_local $7 + (get_local $9) + ) + (loop $while-out$66 $while-in$67 + (i32.store + (get_local $7) + (set_local $5 + (i32.trunc_s/f64 + (get_local $15) + ) ) - (loop $while-out$66 $while-in$67 - (i32.store - (get_local $7) - (set_local $5 - (i32.trunc_s/f64 + ) + (set_local $7 + (i32.add + (get_local $7) + (i32.const 4) + ) + ) + (if + (f64.eq + (set_local $15 + (f64.mul + (f64.sub (get_local $15) + (f64.convert_u/i32 + (get_local $5) + ) ) + (f64.const 1e9) ) ) - (set_local $7 - (i32.add - (get_local $7) - (i32.const 4) - ) + (f64.const 0) + ) + (block + (set_local $6 + (get_local $7) ) - (if - (f64.eq - (set_local $15 - (f64.mul - (f64.sub - (get_local $15) - (f64.convert_u/i32 - (get_local $5) - ) - ) - (f64.const 1e9) - ) - ) - (f64.const 0) - ) - (block - (set_local $6 - (get_local $7) - ) - (br $while-out$66) - ) + (br $while-out$66) + ) + ) + (br $while-in$67) + ) + (if + (i32.gt_s + (set_local $5 + (i32.load + (get_local $25) ) - (br $while-in$67) ) - (if - (i32.gt_s - (set_local $5 - (i32.load - (get_local $25) + (i32.const 0) + ) + (block + (set_local $8 + (get_local $9) + ) + (set_local $13 + (get_local $6) + ) + (loop $while-out$68 $while-in$69 + (set_local $11 + (select + (i32.const 29) + (get_local $5) + (i32.gt_s + (get_local $5) + (i32.const 29) ) ) - (i32.const 0) ) - (block - (set_local $8 - (get_local $9) - ) - (set_local $13 - (get_local $6) - ) - (loop $while-out$68 $while-in$69 - (set_local $11 - (select - (i32.const 29) - (get_local $5) - (i32.gt_s - (get_local $5) - (i32.const 29) + (set_local $7 + (block $do-once$70 + (if + (i32.lt_u + (set_local $7 + (i32.add + (get_local $13) + (i32.const -4) + ) ) + (get_local $8) ) - ) - (set_local $7 - (block $do-once$70 - (if - (i32.lt_u - (set_local $7 - (i32.add - (get_local $13) - (i32.const -4) - ) - ) - (get_local $8) - ) - (get_local $8) - (block - (set_local $5 - (i32.const 0) - ) - (set_local $10 - (get_local $7) - ) - (loop $while-out$72 $while-in$73 - (set_local $6 - (call $___uremdi3 - (set_local $5 - (call $_i64Add - (call $_bitshift64Shl - (i32.load - (get_local $10) - ) - (i32.const 0) - (get_local $11) - ) - (i32.load - (i32.const 168) - ) - (get_local $5) - (i32.const 0) - ) - ) - (set_local $7 + (get_local $8) + (block + (set_local $5 + (i32.const 0) + ) + (set_local $10 + (get_local $7) + ) + (loop $while-out$72 $while-in$73 + (set_local $6 + (call $___uremdi3 + (set_local $5 + (call $_i64Add + (call $_bitshift64Shl (i32.load - (i32.const 168) + (get_local $10) ) + (i32.const 0) + (get_local $11) + ) + (i32.load + (i32.const 168) ) - (i32.const 1000000000) - (i32.const 0) - ) - ) - (i32.load - (i32.const 168) - ) - (i32.store - (get_local $10) - (get_local $6) - ) - (set_local $5 - (call $___udivdi3 (get_local $5) - (get_local $7) - (i32.const 1000000000) (i32.const 0) ) ) - (i32.load - (i32.const 168) - ) - (if - (i32.lt_u - (set_local $7 - (i32.add - (get_local $10) - (i32.const -4) - ) - ) - (get_local $8) - ) - (br $while-out$72) - (set_local $10 - (get_local $7) + (set_local $7 + (i32.load + (i32.const 168) ) ) - (br $while-in$73) + (i32.const 1000000000) + (i32.const 0) ) - (br_if $do-once$70 - (get_local $8) - (i32.eq - (get_local $5) - (i32.const 0) - ) + ) + (i32.load + (i32.const 168) + ) + (i32.store + (get_local $10) + (get_local $6) + ) + (set_local $5 + (call $___udivdi3 + (get_local $5) + (get_local $7) + (i32.const 1000000000) + (i32.const 0) ) - (i32.store + ) + (i32.load + (i32.const 168) + ) + (if + (i32.lt_u (set_local $7 (i32.add - (get_local $8) + (get_local $10) (i32.const -4) ) ) - (get_local $5) + (get_local $8) + ) + (br $while-out$72) + (set_local $10 + (get_local $7) ) - (get_local $7) ) + (br $while-in$73) ) - ) - ) - (loop $while-out$74 $while-in$75 - (if - (i32.le_u - (get_local $13) - (get_local $7) + (br_if $do-once$70 + (get_local $8) + (i32.eq + (get_local $5) + (i32.const 0) + ) ) - (br $while-out$74) - ) - (if - (i32.eq - (i32.load - (set_local $5 - (i32.add - (get_local $13) - (i32.const -4) - ) + (i32.store + (set_local $7 + (i32.add + (get_local $8) + (i32.const -4) ) ) - (i32.const 0) - ) - (set_local $13 (get_local $5) ) - (br $while-out$74) + (get_local $7) ) - (br $while-in$75) ) - (i32.store - (get_local $25) - (set_local $5 - (i32.sub - (i32.load - (get_local $25) + ) + ) + (loop $while-out$74 $while-in$75 + (if + (i32.le_u + (get_local $13) + (get_local $7) + ) + (br $while-out$74) + ) + (if + (i32.eq + (i32.load + (set_local $5 + (i32.add + (get_local $13) + (i32.const -4) ) - (get_local $11) ) ) + (i32.const 0) ) - (if - (i32.gt_s - (get_local $5) - (i32.const 0) - ) - (set_local $8 - (get_local $7) - ) - (block - (set_local $6 - (get_local $13) - ) - (br $while-out$68) + (set_local $13 + (get_local $5) + ) + (br $while-out$74) + ) + (br $while-in$75) + ) + (i32.store + (get_local $25) + (set_local $5 + (i32.sub + (i32.load + (get_local $25) ) + (get_local $11) ) - (br $while-in$69) ) ) - (set_local $7 - (get_local $9) + (if + (i32.gt_s + (get_local $5) + (i32.const 0) + ) + (set_local $8 + (get_local $7) + ) + (block + (set_local $6 + (get_local $13) + ) + (br $while-out$68) + ) ) + (br $while-in$69) ) - (if - (i32.lt_s - (get_local $5) - (i32.const 0) - ) - (block - (set_local $8 - (i32.add - (i32.and - (i32.div_s - (i32.add - (get_local $1) - (i32.const 25) - ) - (i32.const 9) - ) - (i32.const -1) + ) + (set_local $7 + (get_local $9) + ) + ) + (if + (i32.lt_s + (get_local $5) + (i32.const 0) + ) + (block + (set_local $8 + (i32.add + (i32.and + (i32.div_s + (i32.add + (get_local $1) + (i32.const 25) ) - (i32.const 1) + (i32.const 9) ) + (i32.const -1) ) - (set_local $10 - (i32.eq - (get_local $14) - (i32.const 102) + (i32.const 1) + ) + ) + (set_local $10 + (i32.eq + (get_local $14) + (i32.const 102) + ) + ) + (set_local $23 + (get_local $6) + ) + (loop $while-out$76 $while-in$77 + (set_local $5 + (i32.gt_s + (set_local $6 + (i32.sub + (i32.const 0) + (get_local $5) + ) ) + (i32.const 9) ) - (set_local $23 + ) + (set_local $13 + (select + (i32.const 9) (get_local $6) + (get_local $5) ) - (loop $while-out$76 $while-in$77 - (set_local $5 - (i32.gt_s - (set_local $6 - (i32.sub - (i32.const 0) - (get_local $5) + ) + (set_local $11 + (block $do-once$78 + (if + (i32.lt_u + (get_local $7) + (get_local $23) + ) + (block + (set_local $70 + (i32.add + (i32.shl + (i32.const 1) + (get_local $13) + ) + (i32.const -1) ) ) - (i32.const 9) - ) - ) - (set_local $13 - (select - (i32.const 9) - (get_local $6) - (get_local $5) - ) - ) - (set_local $11 - (block $do-once$78 - (if - (i32.lt_u - (get_local $7) - (get_local $23) + (set_local $27 + (i32.shr_u + (i32.const 1000000000) + (get_local $13) ) - (block - (set_local $70 - (i32.add - (i32.shl - (i32.const 1) - (get_local $13) + ) + (set_local $11 + (i32.const 0) + ) + (set_local $17 + (get_local $7) + ) + (loop $while-out$80 $while-in$81 + (set_local $6 + (i32.and + (set_local $5 + (i32.load + (get_local $17) ) - (i32.const -1) ) + (get_local $70) ) - (set_local $27 + ) + (i32.store + (get_local $17) + (i32.add (i32.shr_u - (i32.const 1000000000) + (get_local $5) (get_local $13) ) + (get_local $11) ) - (set_local $11 - (i32.const 0) - ) - (set_local $17 - (get_local $7) - ) - (loop $while-out$80 $while-in$81 - (set_local $6 - (i32.and - (set_local $5 - (i32.load - (get_local $17) - ) - ) - (get_local $70) - ) - ) - (i32.store - (get_local $17) - (i32.add - (i32.shr_u - (get_local $5) - (get_local $13) - ) - (get_local $11) - ) - ) - (set_local $11 - (i32.mul - (get_local $6) - (get_local $27) - ) - ) - (if - (i32.ge_u - (set_local $17 - (i32.add - (get_local $17) - (i32.const 4) - ) - ) - (get_local $23) - ) - (br $while-out$80) - ) - (br $while-in$81) + ) + (set_local $11 + (i32.mul + (get_local $6) + (get_local $27) ) - (set_local $5 - (select + ) + (if + (i32.ge_u + (set_local $17 (i32.add - (get_local $7) + (get_local $17) (i32.const 4) ) - (get_local $7) - (i32.eq - (i32.load - (get_local $7) - ) - (i32.const 0) - ) ) - ) - (if - (i32.eq - (get_local $11) - (i32.const 0) - ) - (br $do-once$78 - (get_local $5) - ) - ) - (i32.store (get_local $23) - (get_local $11) - ) - (set_local $23 - (i32.add - (get_local $23) - (i32.const 4) - ) ) - (get_local $5) + (br $while-out$80) ) + (br $while-in$81) + ) + (set_local $5 (select (i32.add (get_local $7) @@ -6114,1161 +6053,1242 @@ ) ) ) - ) - ) - (set_local $5 - (i32.gt_s - (i32.shr_s - (i32.sub + (if + (i32.eq + (get_local $11) + (i32.const 0) + ) + (br $do-once$78 + (get_local $5) + ) + ) + (i32.store + (get_local $23) + (get_local $11) + ) + (set_local $23 + (i32.add (get_local $23) - (set_local $7 - (select - (get_local $9) - (get_local $11) - (get_local $10) - ) - ) + (i32.const 4) ) - (i32.const 2) ) - (get_local $8) + (get_local $5) ) - ) - (set_local $6 (select (i32.add (get_local $7) - (i32.shl - (get_local $8) - (i32.const 2) - ) + (i32.const 4) ) - (get_local $23) - (get_local $5) - ) - ) - (i32.store - (get_local $25) - (set_local $5 - (i32.add + (get_local $7) + (i32.eq (i32.load - (get_local $25) + (get_local $7) ) - (get_local $13) + (i32.const 0) ) ) ) - (if - (i32.lt_s - (get_local $5) - (i32.const 0) - ) - (block + ) + ) + (set_local $5 + (i32.gt_s + (i32.shr_s + (i32.sub + (get_local $23) (set_local $7 - (get_local $11) - ) - (set_local $23 - (get_local $6) + (select + (get_local $9) + (get_local $11) + (get_local $10) + ) ) ) - (block - (set_local $7 - (get_local $11) - ) - (set_local $27 - (get_local $6) - ) - (br $while-out$76) + (i32.const 2) + ) + (get_local $8) + ) + ) + (set_local $6 + (select + (i32.add + (get_local $7) + (i32.shl + (get_local $8) + (i32.const 2) ) ) - (br $while-in$77) + (get_local $23) + (get_local $5) ) ) - (set_local $27 - (get_local $6) + (i32.store + (get_local $25) + (set_local $5 + (i32.add + (i32.load + (get_local $25) + ) + (get_local $13) + ) + ) ) - ) - (block $do-once$82 (if - (i32.lt_u - (get_local $7) - (get_local $27) + (i32.lt_s + (get_local $5) + (i32.const 0) ) (block - (set_local $6 - (i32.mul - (i32.shr_s - (i32.sub - (get_local $62) - (get_local $7) - ) - (i32.const 2) - ) - (i32.const 9) + (set_local $7 + (get_local $11) + ) + (set_local $23 + (get_local $6) + ) + ) + (block + (set_local $7 + (get_local $11) + ) + (set_local $27 + (get_local $6) + ) + (br $while-out$76) + ) + ) + (br $while-in$77) + ) + ) + (set_local $27 + (get_local $6) + ) + ) + (block $do-once$82 + (if + (i32.lt_u + (get_local $7) + (get_local $27) + ) + (block + (set_local $6 + (i32.mul + (i32.shr_s + (i32.sub + (get_local $62) + (get_local $7) ) + (i32.const 2) ) - (if - (i32.lt_u - (set_local $5 - (i32.load - (get_local $7) - ) - ) - (i32.const 10) + (i32.const 9) + ) + ) + (if + (i32.lt_u + (set_local $5 + (i32.load + (get_local $7) ) - (block - (set_local $13 - (get_local $6) + ) + (i32.const 10) + ) + (block + (set_local $13 + (get_local $6) + ) + (br $do-once$82) + ) + (set_local $8 + (i32.const 10) + ) + ) + (loop $while-out$84 $while-in$85 + (set_local $6 + (i32.add + (get_local $6) + (i32.const 1) + ) + ) + (if + (i32.lt_u + (get_local $5) + (set_local $8 + (i32.mul + (get_local $8) + (i32.const 10) ) - (br $do-once$82) ) - (set_local $8 - (i32.const 10) + ) + (block + (set_local $13 + (get_local $6) ) + (br $while-out$84) ) - (loop $while-out$84 $while-in$85 - (set_local $6 - (i32.add - (get_local $6) - (i32.const 1) + ) + (br $while-in$85) + ) + ) + (set_local $13 + (i32.const 0) + ) + ) + ) + (set_local $7 + (if + (i32.lt_s + (set_local $5 + (i32.add + (i32.sub + (get_local $1) + (select + (get_local $13) + (i32.const 0) + (i32.ne + (get_local $14) + (i32.const 102) ) ) - (if - (i32.lt_u - (get_local $5) - (set_local $8 - (i32.mul - (get_local $8) - (i32.const 10) + ) + (i32.shr_s + (i32.shl + (i32.and + (set_local $70 + (i32.ne + (get_local $1) + (i32.const 0) ) ) - ) - (block - (set_local $13 - (get_local $6) + (set_local $8 + (i32.eq + (get_local $14) + (i32.const 103) + ) ) - (br $while-out$84) ) + (i32.const 31) ) - (br $while-in$85) + (i32.const 31) ) ) - (set_local $13 - (i32.const 0) + ) + (i32.add + (i32.mul + (i32.shr_s + (i32.sub + (get_local $27) + (get_local $62) + ) + (i32.const 2) + ) + (i32.const 9) ) + (i32.const -9) ) ) - (set_local $7 - (if - (i32.lt_s - (set_local $5 + (block + (set_local $6 + (i32.add + (i32.add + (get_local $9) + (i32.const 4) + ) + (i32.shl (i32.add - (i32.sub - (get_local $1) - (select - (get_local $13) - (i32.const 0) - (i32.ne - (get_local $14) - (i32.const 102) - ) - ) - ) - (i32.shr_s - (i32.shl - (i32.and - (set_local $70 - (i32.ne - (get_local $1) - (i32.const 0) - ) - ) - (set_local $8 - (i32.eq - (get_local $14) - (i32.const 103) - ) + (i32.and + (i32.div_s + (set_local $5 + (i32.add + (get_local $5) + (i32.const 9216) ) ) - (i32.const 31) + (i32.const 9) ) - (i32.const 31) + (i32.const -1) ) + (i32.const -1024) ) + (i32.const 2) ) - (i32.add - (i32.mul - (i32.shr_s - (i32.sub - (get_local $27) - (get_local $62) + ) + ) + (if + (i32.lt_s + (set_local $11 + (i32.add + (i32.and + (i32.rem_s + (get_local $5) + (i32.const 9) ) - (i32.const 2) + (i32.const -1) ) - (i32.const 9) + (i32.const 1) ) - (i32.const -9) ) + (i32.const 9) ) (block - (set_local $6 - (i32.add - (i32.add - (get_local $9) - (i32.const 4) + (set_local $5 + (i32.const 10) + ) + (loop $while-out$86 $while-in$87 + (set_local $5 + (i32.mul + (get_local $5) + (i32.const 10) ) - (i32.shl - (i32.add + ) + (if + (i32.eq + (set_local $11 + (i32.add + (get_local $11) + (i32.const 1) + ) + ) + (i32.const 9) + ) + (block + (set_local $17 + (get_local $5) + ) + (br $while-out$86) + ) + ) + (br $while-in$87) + ) + ) + (set_local $17 + (i32.const 10) + ) + ) + (block $do-once$88 + (if + (i32.eqz + (i32.and + (set_local $11 + (i32.eq + (i32.add + (get_local $6) + (i32.const 4) + ) + (get_local $27) + ) + ) + (i32.eq + (set_local $14 (i32.and - (i32.div_s + (i32.rem_u (set_local $5 - (i32.add - (get_local $5) - (i32.const 9216) + (i32.load + (get_local $6) ) ) - (i32.const 9) + (get_local $17) ) (i32.const -1) ) - (i32.const -1024) ) - (i32.const 2) + (i32.const 0) ) ) ) - (if - (i32.lt_s - (set_local $11 - (i32.add + (block + (set_local $15 + (select + (f64.const 9007199254740992) + (f64.const 9007199254740994) + (i32.eq (i32.and - (i32.rem_s - (get_local $5) - (i32.const 9) + (i32.and + (i32.div_u + (get_local $5) + (get_local $17) + ) + (i32.const -1) ) - (i32.const -1) + (i32.const 1) ) - (i32.const 1) + (i32.const 0) ) ) - (i32.const 9) ) - (block - (set_local $5 - (i32.const 10) - ) - (loop $while-out$86 $while-in$87 - (set_local $5 - (i32.mul - (get_local $5) - (i32.const 10) - ) - ) - (if - (i32.eq - (set_local $11 - (i32.add - (get_local $11) - (i32.const 1) + (set_local $30 + (if + (i32.lt_u + (get_local $14) + (set_local $10 + (i32.and + (i32.div_s + (get_local $17) + (i32.const 2) ) + (i32.const -1) ) - (i32.const 9) ) - (block - (set_local $17 - (get_local $5) + ) + (f64.const 0.5) + (select + (f64.const 1) + (f64.const 1.5) + (i32.and + (get_local $11) + (i32.eq + (get_local $14) + (get_local $10) ) - (br $while-out$86) ) ) - (br $while-in$87) ) ) - (set_local $17 - (i32.const 10) - ) - ) - (block $do-once$88 - (if - (i32.eqz - (i32.and - (set_local $11 - (i32.eq - (i32.add - (get_local $6) - (i32.const 4) - ) - (get_local $27) - ) - ) + (set_local $15 + (block $do-once$90 + (if (i32.eq - (set_local $14 - (i32.and - (i32.rem_u - (set_local $5 - (i32.load - (get_local $6) + (get_local $51) + (i32.const 0) + ) + (get_local $15) + (block + (if + (i32.ne + (i32.shr_s + (i32.shl + (i32.load8_s + (get_local $39) ) + (i32.const 24) ) - (get_local $17) + (i32.const 24) ) - (i32.const -1) + (i32.const 45) + ) + (br $do-once$90 + (get_local $15) ) ) - (i32.const 0) - ) - ) - ) - (block - (set_local $15 - (select - (f64.const 9007199254740992) - (f64.const 9007199254740994) - (i32.eq - (i32.and - (i32.and - (i32.div_u - (get_local $5) - (get_local $17) - ) - (i32.const -1) - ) - (i32.const 1) + (set_local $30 + (f64.neg + (get_local $30) ) - (i32.const 0) + ) + (f64.neg + (get_local $15) ) ) ) - (set_local $30 + ) + ) + (i32.store + (get_local $6) + (set_local $5 + (i32.sub + (get_local $5) + (get_local $14) + ) + ) + ) + (if + (f64.eq + (f64.add + (get_local $15) + (get_local $30) + ) + (get_local $15) + ) + (br $do-once$88) + ) + (i32.store + (get_local $6) + (set_local $5 + (i32.add + (get_local $5) + (get_local $17) + ) + ) + ) + (if + (i32.gt_u + (get_local $5) + (i32.const 999999999) + ) + (loop $while-out$92 $while-in$93 + (i32.store + (get_local $6) + (i32.const 0) + ) + (set_local $7 (if (i32.lt_u - (get_local $14) - (set_local $10 - (i32.and - (i32.div_s - (get_local $17) - (i32.const 2) - ) - (i32.const -1) - ) - ) - ) - (f64.const 0.5) - (select - (f64.const 1) - (f64.const 1.5) - (i32.and - (get_local $11) - (i32.eq - (get_local $14) - (get_local $10) + (set_local $6 + (i32.add + (get_local $6) + (i32.const -4) ) ) + (get_local $7) ) - ) - ) - (set_local $15 - (block $do-once$90 - (if - (i32.eq - (get_local $51) - (i32.const 0) - ) - (get_local $15) - (block - (if - (i32.ne - (i32.shr_s - (i32.shl - (i32.load8_s - (get_local $39) - ) - (i32.const 24) - ) - (i32.const 24) - ) - (i32.const 45) - ) - (br $do-once$90 - (get_local $15) - ) - ) - (set_local $30 - (f64.neg - (get_local $30) + (block + (i32.store + (set_local $5 + (i32.add + (get_local $7) + (i32.const -4) ) ) - (f64.neg - (get_local $15) - ) + (i32.const 0) ) - ) - ) - ) - (i32.store - (get_local $6) - (set_local $5 - (i32.sub (get_local $5) - (get_local $14) ) + (get_local $7) ) ) - (if - (f64.eq - (f64.add - (get_local $15) - (get_local $30) - ) - (get_local $15) - ) - (br $do-once$88) - ) (i32.store (get_local $6) (set_local $5 (i32.add - (get_local $5) - (get_local $17) + (i32.load + (get_local $6) + ) + (i32.const 1) ) ) ) (if - (i32.gt_u + (i32.le_u (get_local $5) (i32.const 999999999) ) - (loop $while-out$92 $while-in$93 - (i32.store - (get_local $6) - (i32.const 0) - ) - (set_local $7 - (if - (i32.lt_u - (set_local $6 - (i32.add - (get_local $6) - (i32.const -4) - ) - ) - (get_local $7) - ) - (block - (i32.store - (set_local $5 - (i32.add - (get_local $7) - (i32.const -4) - ) - ) - (i32.const 0) - ) - (get_local $5) - ) - (get_local $7) - ) - ) - (i32.store - (get_local $6) - (set_local $5 - (i32.add - (i32.load - (get_local $6) - ) - (i32.const 1) - ) - ) - ) - (if - (i32.le_u - (get_local $5) - (i32.const 999999999) - ) - (br $while-out$92) - ) - (br $while-in$93) - ) + (br $while-out$92) ) - (set_local $11 - (i32.mul - (i32.shr_s - (i32.sub - (get_local $62) - (get_local $7) - ) - (i32.const 2) - ) - (i32.const 9) + (br $while-in$93) + ) + ) + (set_local $11 + (i32.mul + (i32.shr_s + (i32.sub + (get_local $62) + (get_local $7) ) + (i32.const 2) ) - (if - (i32.lt_u - (set_local $5 - (i32.load - (get_local $7) - ) - ) - (i32.const 10) - ) - (block - (set_local $13 - (get_local $11) - ) - (br $do-once$88) - ) - (set_local $10 - (i32.const 10) + (i32.const 9) + ) + ) + (if + (i32.lt_u + (set_local $5 + (i32.load + (get_local $7) ) ) - (loop $while-out$94 $while-in$95 - (set_local $11 - (i32.add - (get_local $11) - (i32.const 1) - ) - ) - (if - (i32.lt_u - (get_local $5) - (set_local $10 - (i32.mul - (get_local $10) - (i32.const 10) - ) - ) - ) - (block - (set_local $13 - (get_local $11) - ) - (br $while-out$94) - ) - ) - (br $while-in$95) + (i32.const 10) + ) + (block + (set_local $13 + (get_local $11) ) + (br $do-once$88) + ) + (set_local $10 + (i32.const 10) ) ) - ) - (set_local $6 - (i32.gt_u - (get_local $27) - (set_local $5 + (loop $while-out$94 $while-in$95 + (set_local $11 (i32.add - (get_local $6) - (i32.const 4) + (get_local $11) + (i32.const 1) + ) + ) + (if + (i32.lt_u + (get_local $5) + (set_local $10 + (i32.mul + (get_local $10) + (i32.const 10) + ) + ) + ) + (block + (set_local $13 + (get_local $11) + ) + (br $while-out$94) ) ) + (br $while-in$95) ) ) - (set_local $6 - (select - (get_local $5) - (get_local $27) + ) + ) + (set_local $6 + (i32.gt_u + (get_local $27) + (set_local $5 + (i32.add (get_local $6) + (i32.const 4) ) ) - (get_local $7) ) - (block - (set_local $6 - (get_local $27) - ) - (get_local $7) + ) + (set_local $6 + (select + (get_local $5) + (get_local $27) + (get_local $6) ) ) + (get_local $7) ) - (set_local $27 - (i32.sub + (block + (set_local $6 + (get_local $27) + ) + (get_local $7) + ) + ) + ) + (set_local $27 + (i32.sub + (i32.const 0) + (get_local $13) + ) + ) + (loop $while-out$96 $while-in$97 + (if + (i32.le_u + (get_local $6) + (get_local $7) + ) + (block + (set_local $11 (i32.const 0) - (get_local $13) ) + (set_local $23 + (get_local $6) + ) + (br $while-out$96) ) - (loop $while-out$96 $while-in$97 - (if - (i32.le_u - (get_local $6) - (get_local $7) - ) - (block - (set_local $11 - (i32.const 0) - ) - (set_local $23 + ) + (if + (i32.eq + (i32.load + (set_local $5 + (i32.add (get_local $6) + (i32.const -4) ) - (br $while-out$96) ) ) - (if - (i32.eq - (i32.load - (set_local $5 + (i32.const 0) + ) + (set_local $6 + (get_local $5) + ) + (block + (set_local $11 + (i32.const 1) + ) + (set_local $23 + (get_local $6) + ) + (br $while-out$96) + ) + ) + (br $while-in$97) + ) + (set_local $8 + (block $do-once$98 + (if + (get_local $8) + (block + (set_local $8 + (if + (i32.and + (i32.gt_s + (set_local $1 + (i32.add + (i32.xor + (i32.and + (get_local $70) + (i32.const 1) + ) + (i32.const 1) + ) + (get_local $1) + ) + ) + (get_local $13) + ) + (i32.gt_s + (get_local $13) + (i32.const -5) + ) + ) + (block + (set_local $10 + (i32.add + (get_local $26) + (i32.const -1) + ) + ) + (i32.sub + (i32.add + (get_local $1) + (i32.const -1) + ) + (get_local $13) + ) + ) + (block + (set_local $10 + (i32.add + (get_local $26) + (i32.const -2) + ) + ) (i32.add - (get_local $6) - (i32.const -4) + (get_local $1) + (i32.const -1) ) ) ) - (i32.const 0) - ) - (set_local $6 - (get_local $5) ) - (block - (set_local $11 - (i32.const 1) + (if + (i32.ne + (set_local $1 + (i32.and + (get_local $18) + (i32.const 8) + ) + ) + (i32.const 0) ) - (set_local $23 - (get_local $6) + (block + (set_local $14 + (get_local $8) + ) + (set_local $26 + (get_local $10) + ) + (br $do-once$98 + (get_local $1) + ) ) - (br $while-out$96) ) - ) - (br $while-in$97) - ) - (set_local $8 - (block $do-once$98 - (if - (get_local $8) - (block - (set_local $8 + (block $do-once$100 + (if + (get_local $11) + (block (if - (i32.and - (i32.gt_s - (set_local $1 + (i32.eq + (set_local $1 + (i32.load (i32.add - (i32.xor - (i32.and - (get_local $70) - (i32.const 1) - ) - (i32.const 1) - ) - (get_local $1) + (get_local $23) + (i32.const -4) ) ) - (get_local $13) - ) - (i32.gt_s - (get_local $13) - (i32.const -5) ) + (i32.const 0) ) (block - (set_local $10 - (i32.add - (get_local $26) - (i32.const -1) - ) + (set_local $6 + (i32.const 9) ) - (i32.sub - (i32.add + (br $do-once$100) + ) + ) + (if + (i32.eq + (i32.and + (i32.rem_u (get_local $1) - (i32.const -1) + (i32.const 10) ) - (get_local $13) + (i32.const -1) ) + (i32.const 0) ) (block - (set_local $10 - (i32.add - (get_local $26) - (i32.const -2) - ) + (set_local $5 + (i32.const 10) ) - (i32.add - (get_local $1) - (i32.const -1) + (set_local $6 + (i32.const 0) ) ) - ) - ) - (if - (i32.ne - (set_local $1 - (i32.and - (get_local $18) - (i32.const 8) + (block + (set_local $6 + (i32.const 0) ) - ) - (i32.const 0) - ) - (block - (set_local $14 - (get_local $8) - ) - (set_local $26 - (get_local $10) - ) - (br $do-once$98 - (get_local $1) + (br $do-once$100) ) ) - ) - (block $do-once$100 - (if - (get_local $11) - (block - (if - (i32.eq - (set_local $1 - (i32.load - (i32.add - (get_local $23) - (i32.const -4) - ) - ) - ) - (i32.const 0) - ) - (block - (set_local $6 - (i32.const 9) - ) - (br $do-once$100) - ) - ) - (if - (i32.eq - (i32.and - (i32.rem_u - (get_local $1) - (i32.const 10) - ) - (i32.const -1) - ) - (i32.const 0) - ) - (block - (set_local $5 - (i32.const 10) - ) - (set_local $6 - (i32.const 0) - ) - ) - (block - (set_local $6 - (i32.const 0) - ) - (br $do-once$100) - ) + (loop $while-out$102 $while-in$103 + (set_local $6 + (i32.add + (get_local $6) + (i32.const 1) ) - (loop $while-out$102 $while-in$103 - (set_local $6 - (i32.add - (get_local $6) - (i32.const 1) - ) - ) - (if - (i32.ne - (i32.and - (i32.rem_u - (get_local $1) - (set_local $5 - (i32.mul - (get_local $5) - (i32.const 10) - ) - ) + ) + (if + (i32.ne + (i32.and + (i32.rem_u + (get_local $1) + (set_local $5 + (i32.mul + (get_local $5) + (i32.const 10) ) - (i32.const -1) ) - (i32.const 0) ) - (br $while-out$102) + (i32.const -1) ) - (br $while-in$103) + (i32.const 0) ) + (br $while-out$102) ) - (set_local $6 - (i32.const 9) - ) + (br $while-in$103) ) ) - (set_local $1 - (i32.add - (i32.mul - (i32.shr_s - (i32.sub - (get_local $23) - (get_local $62) - ) - (i32.const 2) - ) - (i32.const 9) - ) - (i32.const -9) - ) + (set_local $6 + (i32.const 9) ) - (if - (i32.eq - (i32.or - (get_local $10) - (i32.const 32) + ) + ) + (set_local $1 + (i32.add + (i32.mul + (i32.shr_s + (i32.sub + (get_local $23) + (get_local $62) ) - (i32.const 102) + (i32.const 2) ) - (block - (set_local $1 - (i32.lt_s - (set_local $5 - (i32.sub - (get_local $1) - (get_local $6) - ) - ) - (i32.const 0) - ) - ) + (i32.const 9) + ) + (i32.const -9) + ) + ) + (if + (i32.eq + (i32.or + (get_local $10) + (i32.const 32) + ) + (i32.const 102) + ) + (block + (set_local $1 + (i32.lt_s (set_local $5 - (i32.lt_s - (get_local $8) - (set_local $1 - (select - (i32.const 0) - (get_local $5) - (get_local $1) - ) - ) - ) - ) - (set_local $14 - (select - (get_local $8) + (i32.sub (get_local $1) - (get_local $5) + (get_local $6) ) ) - (set_local $26 - (get_local $10) - ) (i32.const 0) ) - (block + ) + (set_local $5 + (i32.lt_s + (get_local $8) (set_local $1 - (i32.lt_s - (set_local $5 - (i32.sub - (i32.add - (get_local $1) - (get_local $13) - ) - (get_local $6) - ) - ) + (select (i32.const 0) + (get_local $5) + (get_local $1) ) ) + ) + ) + (set_local $14 + (select + (get_local $8) + (get_local $1) + (get_local $5) + ) + ) + (set_local $26 + (get_local $10) + ) + (i32.const 0) + ) + (block + (set_local $1 + (i32.lt_s (set_local $5 - (i32.lt_s - (get_local $8) - (set_local $1 - (select - (i32.const 0) - (get_local $5) - (get_local $1) - ) + (i32.sub + (i32.add + (get_local $1) + (get_local $13) ) + (get_local $6) ) ) - (set_local $14 + (i32.const 0) + ) + ) + (set_local $5 + (i32.lt_s + (get_local $8) + (set_local $1 (select - (get_local $8) - (get_local $1) + (i32.const 0) (get_local $5) + (get_local $1) ) ) - (set_local $26 - (get_local $10) - ) - (i32.const 0) ) ) - ) - (block (set_local $14 - (get_local $1) + (select + (get_local $8) + (get_local $1) + (get_local $5) + ) ) - (i32.and - (get_local $18) - (i32.const 8) + (set_local $26 + (get_local $10) ) + (i32.const 0) ) ) ) + (block + (set_local $14 + (get_local $1) + ) + (i32.and + (get_local $18) + (i32.const 8) + ) + ) ) - (set_local $17 - (i32.and - (i32.ne - (set_local $1 - (i32.or - (get_local $14) - (get_local $8) - ) - ) + ) + ) + (set_local $17 + (i32.and + (i32.ne + (set_local $1 + (i32.or + (get_local $14) + (get_local $8) + ) + ) + (i32.const 0) + ) + (i32.const 1) + ) + ) + (set_local $13 + (if + (set_local $10 + (i32.eq + (i32.or + (get_local $26) + (i32.const 32) + ) + (i32.const 102) + ) + ) + (block + (set_local $6 + (select + (get_local $13) (i32.const 0) + (i32.gt_s + (get_local $13) + (i32.const 0) + ) ) - (i32.const 1) ) + (i32.const 0) ) - (set_local $13 - (if - (set_local $10 - (i32.eq - (i32.or - (get_local $26) - (i32.const 32) + (block + (set_local $5 + (i32.shr_s + (i32.shl + (i32.lt_s + (set_local $6 + (select + (get_local $27) + (get_local $13) + (i32.lt_s + (get_local $13) + (i32.const 0) + ) + ) + ) + (i32.const 0) ) - (i32.const 102) + (i32.const 31) ) + (i32.const 31) ) - (block - (set_local $6 - (select - (get_local $13) - (i32.const 0) - (i32.gt_s - (get_local $13) - (i32.const 0) + ) + (if + (i32.lt_s + (i32.sub + (get_local $40) + (set_local $5 + (call $_fmt_u + (get_local $6) + (get_local $5) + (get_local $52) ) ) ) - (i32.const 0) + (i32.const 2) ) - (block - (set_local $5 - (i32.shr_s - (i32.shl - (i32.lt_s - (set_local $6 - (select - (get_local $27) - (get_local $13) - (i32.lt_s - (get_local $13) - (i32.const 0) - ) - ) - ) - (i32.const 0) - ) - (i32.const 31) + (loop $while-out$104 $while-in$105 + (i32.store8 + (set_local $5 + (i32.add + (get_local $5) + (i32.const -1) ) - (i32.const 31) ) + (i32.const 48) ) (if (i32.lt_s (i32.sub (get_local $40) - (set_local $5 - (call $_fmt_u - (get_local $6) - (get_local $5) - (get_local $52) - ) - ) - ) - (i32.const 2) - ) - (loop $while-out$104 $while-in$105 - (i32.store8 - (set_local $5 - (i32.add - (get_local $5) - (i32.const -1) - ) - ) - (i32.const 48) - ) - (if - (i32.lt_s - (i32.sub - (get_local $40) - (get_local $5) - ) - (i32.const 2) - ) (get_local $5) - (br $while-out$104) ) - (br $while-in$105) + (i32.const 2) ) (get_local $5) + (br $while-out$104) ) - (i32.store8 - (i32.add - (get_local $5) - (i32.const -1) - ) + (br $while-in$105) + ) + (get_local $5) + ) + (i32.store8 + (i32.add + (get_local $5) + (i32.const -1) + ) + (i32.and + (i32.add (i32.and - (i32.add - (i32.and - (i32.shr_s - (get_local $13) - (i32.const 31) - ) - (i32.const 2) - ) - (i32.const 43) - ) - (i32.const 255) - ) - ) - (i32.store8 - (set_local $5 - (i32.add - (get_local $5) - (i32.const -2) + (i32.shr_s + (get_local $13) + (i32.const 31) ) + (i32.const 2) ) - (i32.and - (get_local $26) - (i32.const 255) - ) + (i32.const 43) ) - (set_local $6 - (i32.sub - (get_local $40) - (get_local $5) - ) + (i32.const 255) + ) + ) + (i32.store8 + (set_local $5 + (i32.add + (get_local $5) + (i32.const -2) ) + ) + (i32.and + (get_local $26) + (i32.const 255) + ) + ) + (set_local $6 + (i32.sub + (get_local $40) (get_local $5) ) ) + (get_local $5) ) - (call $_pad - (get_local $0) - (i32.const 32) - (get_local $16) - (set_local $6 + ) + ) + (call $_pad + (get_local $0) + (i32.const 32) + (get_local $16) + (set_local $6 + (i32.add + (i32.add (i32.add (i32.add - (i32.add - (i32.add - (get_local $51) - (i32.const 1) - ) - (get_local $14) - ) - (get_local $17) + (get_local $51) + (i32.const 1) ) - (get_local $6) + (get_local $14) ) + (get_local $17) ) - (get_local $18) + (get_local $6) ) - (if - (i32.eq - (i32.and - (i32.load - (get_local $0) - ) - (i32.const 32) - ) - (i32.const 0) - ) - (call $___fwritex - (get_local $39) - (get_local $51) + ) + (get_local $18) + ) + (if + (i32.eq + (i32.and + (i32.load (get_local $0) ) + (i32.const 32) ) - (call $_pad - (get_local $0) - (i32.const 48) - (get_local $16) - (get_local $6) - (i32.xor - (get_local $18) - (i32.const 65536) + (i32.const 0) + ) + (call $___fwritex + (get_local $39) + (get_local $51) + (get_local $0) + ) + ) + (call $_pad + (get_local $0) + (i32.const 48) + (get_local $16) + (get_local $6) + (i32.xor + (get_local $18) + (i32.const 65536) + ) + ) + (block $do-once$106 + (if + (get_local $10) + (block + (set_local $7 + (set_local $8 + (select + (get_local $9) + (get_local $7) + (i32.gt_u + (get_local $7) + (get_local $9) + ) + ) + ) ) - ) - (block $do-once$106 - (if - (get_local $10) - (block - (set_local $7 - (set_local $8 - (select - (get_local $9) - (get_local $7) - (i32.gt_u - (get_local $7) - (get_local $9) - ) - ) + (loop $while-out$108 $while-in$109 + (set_local $5 + (call $_fmt_u + (i32.load + (get_local $7) ) + (i32.const 0) + (get_local $45) ) - (loop $while-out$108 $while-in$109 - (set_local $5 - (call $_fmt_u - (i32.load - (get_local $7) + ) + (block $do-once$110 + (if + (i32.eq + (get_local $7) + (get_local $8) + ) + (block + (if + (i32.ne + (get_local $5) + (get_local $45) ) - (i32.const 0) - (get_local $45) + (br $do-once$110) + ) + (i32.store8 + (get_local $53) + (i32.const 48) + ) + (set_local $5 + (get_local $53) ) ) - (block $do-once$110 + (block (if - (i32.eq - (get_local $7) - (get_local $8) + (i32.gt_u + (get_local $5) + (get_local $29) ) - (block - (if - (i32.ne + (get_local $5) + (br $do-once$110) + ) + (loop $while-out$112 $while-in$113 + (i32.store8 + (set_local $5 + (i32.add (get_local $5) - (get_local $45) + (i32.const -1) ) - (br $do-once$110) - ) - (i32.store8 - (get_local $53) - (i32.const 48) - ) - (set_local $5 - (get_local $53) ) + (i32.const 48) ) - (block - (if - (i32.gt_u - (get_local $5) - (get_local $29) - ) + (if + (i32.gt_u (get_local $5) - (br $do-once$110) - ) - (loop $while-out$112 $while-in$113 - (i32.store8 - (set_local $5 - (i32.add - (get_local $5) - (i32.const -1) - ) - ) - (i32.const 48) - ) - (if - (i32.gt_u - (get_local $5) - (get_local $29) - ) - (get_local $5) - (br $while-out$112) - ) - (br $while-in$113) + (get_local $29) ) + (get_local $5) + (br $while-out$112) ) + (br $while-in$113) ) ) - (if - (i32.eq + ) + ) + (if + (i32.eq + (i32.and + (i32.load + (get_local $0) + ) + (i32.const 32) + ) + (i32.const 0) + ) + (call $___fwritex + (get_local $5) + (i32.sub + (get_local $75) + (get_local $5) + ) + (get_local $0) + ) + ) + (if + (i32.gt_u + (set_local $7 + (i32.add + (get_local $7) + (i32.const 4) + ) + ) + (get_local $9) + ) + (block + (set_local $5 + (get_local $7) + ) + (br $while-out$108) + ) + (get_local $7) + ) + (br $while-in$109) + ) + (block $do-once$114 + (if + (i32.ne + (get_local $1) + (i32.const 0) + ) + (block + (br_if $do-once$114 + (i32.ne (i32.and (i32.load (get_local $0) @@ -7277,75 +7297,162 @@ ) (i32.const 0) ) - (call $___fwritex - (get_local $5) - (i32.sub - (get_local $75) - (get_local $5) + ) + (call $___fwritex + (i32.const 4143) + (i32.const 1) + (get_local $0) + ) + ) + ) + ) + (if + (i32.and + (i32.gt_s + (get_local $14) + (i32.const 0) + ) + (i32.lt_u + (get_local $5) + (get_local $23) + ) + ) + (loop $while-out$116 $while-in$117 + (if + (i32.gt_u + (set_local $1 + (call $_fmt_u + (i32.load + (get_local $5) + ) + (i32.const 0) + (get_local $45) ) - (get_local $0) ) + (get_local $29) ) - (if - (i32.gt_u - (set_local $7 + (loop $while-out$118 $while-in$119 + (i32.store8 + (set_local $1 (i32.add - (get_local $7) - (i32.const 4) + (get_local $1) + (i32.const -1) ) ) - (get_local $9) + (i32.const 48) ) - (block - (set_local $5 - (get_local $7) + (if + (i32.gt_u + (get_local $1) + (get_local $29) ) - (br $while-out$108) + (get_local $1) + (br $while-out$118) ) - (get_local $7) + (br $while-in$119) ) - (br $while-in$109) + (get_local $1) ) - (block $do-once$114 - (if - (i32.ne - (get_local $1) - (i32.const 0) - ) - (block - (br_if $do-once$114 - (i32.ne - (i32.and - (i32.load - (get_local $0) - ) - (i32.const 32) - ) - (i32.const 0) - ) - ) - (call $___fwritex - (i32.const 4143) - (i32.const 1) + (if + (i32.eq + (i32.and + (i32.load (get_local $0) ) + (i32.const 32) ) + (i32.const 0) + ) + (call $___fwritex + (get_local $1) + (select + (i32.const 9) + (get_local $14) + (i32.gt_s + (get_local $14) + (i32.const 9) + ) + ) + (get_local $0) + ) + ) + (set_local $1 + (i32.add + (get_local $14) + (i32.const -9) ) ) (if (i32.and (i32.gt_s (get_local $14) - (i32.const 0) + (i32.const 9) ) (i32.lt_u - (get_local $5) + (set_local $5 + (i32.add + (get_local $5) + (i32.const 4) + ) + ) (get_local $23) ) ) - (loop $while-out$116 $while-in$117 + (set_local $14 + (get_local $1) + ) + (block + (set_local $14 + (get_local $1) + ) + (br $while-out$116) + ) + ) + (br $while-in$117) + ) + (get_local $14) + ) + (call $_pad + (get_local $0) + (i32.const 48) + (i32.add + (get_local $14) + (i32.const 9) + ) + (i32.const 9) + (i32.const 0) + ) + ) + (block + (set_local $11 + (select + (get_local $23) + (i32.add + (get_local $7) + (i32.const 4) + ) + (get_local $11) + ) + ) + (if + (i32.gt_s + (get_local $14) + (i32.const -1) + ) + (block + (set_local $9 + (i32.eq + (get_local $8) + (i32.const 0) + ) + ) + (set_local $5 + (get_local $7) + ) + (loop $while-out$120 $while-in$121 + (set_local $8 (if - (i32.gt_u + (i32.eq (set_local $1 (call $_fmt_u (i32.load @@ -7355,494 +7462,359 @@ (get_local $45) ) ) - (get_local $29) + (get_local $45) ) - (loop $while-out$118 $while-in$119 + (block (i32.store8 - (set_local $1 - (i32.add - (get_local $1) - (i32.const -1) - ) - ) + (get_local $53) (i32.const 48) ) - (if - (i32.gt_u - (get_local $1) - (get_local $29) - ) - (get_local $1) - (br $while-out$118) - ) - (br $while-in$119) + (get_local $53) ) (get_local $1) ) + ) + (block $do-once$122 (if (i32.eq - (i32.and - (i32.load - (get_local $0) - ) - (i32.const 32) - ) - (i32.const 0) - ) - (call $___fwritex - (get_local $1) - (select - (i32.const 9) - (get_local $14) - (i32.gt_s - (get_local $14) - (i32.const 9) - ) - ) - (get_local $0) - ) - ) - (set_local $1 - (i32.add - (get_local $14) - (i32.const -9) - ) - ) - (if - (i32.and - (i32.gt_s - (get_local $14) - (i32.const 9) - ) - (i32.lt_u - (set_local $5 - (i32.add - (get_local $5) - (i32.const 4) - ) - ) - (get_local $23) - ) - ) - (set_local $14 - (get_local $1) + (get_local $5) + (get_local $7) ) (block - (set_local $14 - (get_local $1) + (set_local $1 + (i32.add + (get_local $8) + (i32.const 1) + ) ) - (br $while-out$116) - ) - ) - (br $while-in$117) - ) - (get_local $14) - ) - (call $_pad - (get_local $0) - (i32.const 48) - (i32.add - (get_local $14) - (i32.const 9) - ) - (i32.const 9) - (i32.const 0) - ) - ) - (block - (set_local $11 - (select - (get_local $23) - (i32.add - (get_local $7) - (i32.const 4) - ) - (get_local $11) - ) - ) - (if - (i32.gt_s - (get_local $14) - (i32.const -1) - ) - (block - (set_local $9 - (i32.eq - (get_local $8) - (i32.const 0) - ) - ) - (set_local $5 - (get_local $7) - ) - (loop $while-out$120 $while-in$121 - (set_local $8 (if (i32.eq - (set_local $1 - (call $_fmt_u - (i32.load - (get_local $5) - ) - (i32.const 0) - (get_local $45) + (i32.and + (i32.load + (get_local $0) ) + (i32.const 32) ) - (get_local $45) + (i32.const 0) ) - (block - (i32.store8 - (get_local $53) - (i32.const 48) - ) - (get_local $53) + (call $___fwritex + (get_local $8) + (i32.const 1) + (get_local $0) ) - (get_local $1) ) - ) - (block $do-once$122 (if - (i32.eq - (get_local $5) - (get_local $7) - ) - (block - (set_local $1 - (i32.add - (get_local $8) - (i32.const 1) - ) - ) - (if - (i32.eq - (i32.and - (i32.load - (get_local $0) - ) - (i32.const 32) - ) - (i32.const 0) - ) - (call $___fwritex - (get_local $8) - (i32.const 1) - (get_local $0) - ) - ) - (if - (i32.and - (get_local $9) - (i32.lt_s - (get_local $14) - (i32.const 1) - ) - ) - (br $do-once$122) - ) - (if - (i32.ne - (i32.and - (i32.load - (get_local $0) - ) - (i32.const 32) - ) - (i32.const 0) - ) - (br $do-once$122) - ) - (call $___fwritex - (i32.const 4143) + (i32.and + (get_local $9) + (i32.lt_s + (get_local $14) (i32.const 1) - (get_local $0) ) ) - (block - (if - (i32.gt_u - (get_local $8) - (get_local $29) - ) - (set_local $1 - (get_local $8) - ) - (block - (set_local $1 - (get_local $8) - ) - (br $do-once$122) - ) - ) - (loop $while-out$124 $while-in$125 - (i32.store8 - (set_local $1 - (i32.add - (get_local $1) - (i32.const -1) - ) - ) - (i32.const 48) - ) - (if - (i32.gt_u - (get_local $1) - (get_local $29) - ) - (get_local $1) - (br $while-out$124) + (br $do-once$122) + ) + (if + (i32.ne + (i32.and + (i32.load + (get_local $0) ) - (br $while-in$125) + (i32.const 32) ) + (i32.const 0) ) + (br $do-once$122) ) - ) - (set_local $8 - (i32.sub - (get_local $75) - (get_local $1) + (call $___fwritex + (i32.const 4143) + (i32.const 1) + (get_local $0) ) ) - (if - (i32.eq - (i32.and - (i32.load - (get_local $0) - ) - (i32.const 32) + (block + (if + (i32.gt_u + (get_local $8) + (get_local $29) ) - (i32.const 0) - ) - (call $___fwritex - (get_local $1) - (select + (set_local $1 (get_local $8) - (get_local $14) - (i32.gt_s - (get_local $14) + ) + (block + (set_local $1 (get_local $8) ) + (br $do-once$122) ) - (get_local $0) ) - ) - (if - (i32.eqz - (i32.and - (i32.lt_u - (set_local $5 - (i32.add - (get_local $5) - (i32.const 4) - ) + (loop $while-out$124 $while-in$125 + (i32.store8 + (set_local $1 + (i32.add + (get_local $1) + (i32.const -1) ) - (get_local $11) ) - (i32.gt_s - (set_local $14 - (i32.sub - (get_local $14) - (get_local $8) - ) - ) - (i32.const -1) + (i32.const 48) + ) + (if + (i32.gt_u + (get_local $1) + (get_local $29) ) + (get_local $1) + (br $while-out$124) ) + (br $while-in$125) ) - (br $while-out$120) ) - (br $while-in$121) ) ) - (get_local $14) - ) - (call $_pad - (get_local $0) - (i32.const 48) - (i32.add - (get_local $14) - (i32.const 18) + (set_local $8 + (i32.sub + (get_local $75) + (get_local $1) + ) ) - (i32.const 18) - (i32.const 0) - ) - (br_if $do-once$106 - (i32.ne - (i32.and - (i32.load - (get_local $0) + (if + (i32.eq + (i32.and + (i32.load + (get_local $0) + ) + (i32.const 32) ) - (i32.const 32) + (i32.const 0) + ) + (call $___fwritex + (get_local $1) + (select + (get_local $8) + (get_local $14) + (i32.gt_s + (get_local $14) + (get_local $8) + ) + ) + (get_local $0) ) - (i32.const 0) ) - ) - (call $___fwritex - (get_local $13) - (i32.sub - (get_local $40) - (get_local $13) + (if + (i32.eqz + (i32.and + (i32.lt_u + (set_local $5 + (i32.add + (get_local $5) + (i32.const 4) + ) + ) + (get_local $11) + ) + (i32.gt_s + (set_local $14 + (i32.sub + (get_local $14) + (get_local $8) + ) + ) + (i32.const -1) + ) + ) + ) + (br $while-out$120) ) - (get_local $0) + (br $while-in$121) ) ) + (get_local $14) ) - ) - (call $_pad - (get_local $0) - (i32.const 32) - (get_local $16) - (get_local $6) - (i32.xor - (get_local $18) - (i32.const 8192) - ) - ) - (select - (get_local $16) - (get_local $6) - (i32.lt_s - (get_local $6) - (get_local $16) + (call $_pad + (get_local $0) + (i32.const 48) + (i32.add + (get_local $14) + (i32.const 18) + ) + (i32.const 18) + (i32.const 0) ) - ) - ) - (block - (set_local $5 - (select - (i32.const 4127) - (i32.const 4131) - (set_local $8 - (i32.ne - (i32.and - (get_local $26) - (i32.const 32) + (br_if $do-once$106 + (i32.ne + (i32.and + (i32.load + (get_local $0) ) - (i32.const 0) + (i32.const 32) ) + (i32.const 0) ) ) - ) - (set_local $6 - (select - (i32.const 0) - (get_local $51) - (set_local $1 - (i32.or - (f64.ne - (get_local $15) - (get_local $15) - ) - (i32.const 0) - ) + (call $___fwritex + (get_local $13) + (i32.sub + (get_local $40) + (get_local $13) ) + (get_local $0) ) ) + ) + ) + (call $_pad + (get_local $0) + (i32.const 32) + (get_local $16) + (get_local $6) + (i32.xor + (get_local $18) + (i32.const 8192) + ) + ) + (select + (get_local $16) + (get_local $6) + (i32.lt_s + (get_local $6) + (get_local $16) + ) + ) + ) + (block + (set_local $5 + (select + (i32.const 4127) + (i32.const 4131) (set_local $8 - (select - (select - (i32.const 4135) - (i32.const 4139) - (get_local $8) + (i32.ne + (i32.and + (get_local $26) + (i32.const 32) ) - (get_local $5) - (get_local $1) + (i32.const 0) ) ) - (call $_pad - (get_local $0) - (i32.const 32) - (get_local $16) - (set_local $5 - (i32.add - (get_local $6) - (i32.const 3) + ) + ) + (set_local $6 + (select + (i32.const 0) + (get_local $51) + (set_local $1 + (i32.or + (f64.ne + (get_local $15) + (get_local $15) ) + (i32.const 0) ) - (get_local $7) ) - (if - (i32.eq - (i32.and - (if - (i32.eq - (i32.and - (set_local $1 - (i32.load - (get_local $0) - ) - ) - (i32.const 32) - ) - (i32.const 0) - ) - (block - (call $___fwritex - (get_local $39) - (get_local $6) - (get_local $0) - ) + ) + ) + (set_local $8 + (select + (select + (i32.const 4135) + (i32.const 4139) + (get_local $8) + ) + (get_local $5) + (get_local $1) + ) + ) + (call $_pad + (get_local $0) + (i32.const 32) + (get_local $16) + (set_local $5 + (i32.add + (get_local $6) + (i32.const 3) + ) + ) + (get_local $7) + ) + (if + (i32.eq + (i32.and + (if + (i32.eq + (i32.and + (set_local $1 (i32.load (get_local $0) ) ) - (get_local $1) + (i32.const 32) ) - (i32.const 32) + (i32.const 0) ) - (i32.const 0) - ) - (call $___fwritex - (get_local $8) - (i32.const 3) - (get_local $0) + (block + (call $___fwritex + (get_local $39) + (get_local $6) + (get_local $0) + ) + (i32.load + (get_local $0) + ) + ) + (get_local $1) ) - ) - (call $_pad - (get_local $0) (i32.const 32) - (get_local $16) - (get_local $5) - (i32.xor - (get_local $18) - (i32.const 8192) - ) - ) - (select - (get_local $16) - (get_local $5) - (i32.lt_s - (get_local $5) - (get_local $16) - ) ) + (i32.const 0) + ) + (call $___fwritex + (get_local $8) + (i32.const 3) + (get_local $0) + ) + ) + (call $_pad + (get_local $0) + (i32.const 32) + (get_local $16) + (get_local $5) + (i32.xor + (get_local $18) + (i32.const 8192) + ) + ) + (select + (get_local $16) + (get_local $5) + (i32.lt_s + (get_local $5) + (get_local $16) ) ) ) ) - (set_local $8 - (get_local $21) - ) - (br $label$continue$L1) - ) - (set_local $47 - (get_local $20) - ) - (set_local $37 - (get_local $18) - ) - (set_local $42 - (get_local $10) - ) - (set_local $43 - (i32.const 0) - ) - (set_local $48 - (i32.const 4091) - ) - (set_local $49 - (get_local $28) ) ) + (set_local $8 + (get_local $21) + ) + (br $label$continue$L1) + ) + (set_local $47 + (get_local $20) + ) + (set_local $37 + (get_local $18) + ) + (set_local $42 + (get_local $10) + ) + (set_local $43 + (i32.const 0) + ) + (set_local $48 + (i32.const 4091) + ) + (set_local $49 + (get_local $28) ) ) (block $label$break$L308 @@ -8741,51 +8713,22 @@ (i32.const 20) ) (block $switch-default$14 - (block $switch-default$14 - (block $switch-case$13 - (block $switch-case$12 - (block $switch-case$11 - (block $switch-case$10 - (block $switch-case$9 - (block $switch-case$8 - (block $switch-case$7 - (block $switch-case$6 - (block $switch-case$5 - (block $switch-case$4 - (br_table $switch-case$4 $switch-case$5 $switch-case$6 $switch-case$7 $switch-case$8 $switch-case$9 $switch-case$10 $switch-case$11 $switch-case$12 $switch-case$13 $switch-default$14 - (i32.sub - (get_local $1) - (i32.const 9) - ) - ) - ) - (set_local $3 - (i32.load - (set_local $1 - (i32.and - (i32.add - (i32.load - (get_local $2) - ) - (i32.const 3) - ) - (i32.const -4) - ) - ) - ) - ) - (i32.store - (get_local $2) - (i32.add + (block $switch-case$13 + (block $switch-case$12 + (block $switch-case$11 + (block $switch-case$10 + (block $switch-case$9 + (block $switch-case$8 + (block $switch-case$7 + (block $switch-case$6 + (block $switch-case$5 + (block $switch-case$4 + (br_table $switch-case$4 $switch-case$5 $switch-case$6 $switch-case$7 $switch-case$8 $switch-case$9 $switch-case$10 $switch-case$11 $switch-case$12 $switch-case$13 $switch-default$14 + (i32.sub (get_local $1) - (i32.const 4) + (i32.const 9) ) ) - (i32.store - (get_local $0) - (get_local $3) - ) - (br $label$break$L1) ) (set_local $3 (i32.load @@ -8813,19 +8756,6 @@ (get_local $0) (get_local $3) ) - (i32.store offset=4 - (get_local $0) - (i32.shr_s - (i32.shl - (i32.lt_s - (get_local $3) - (i32.const 0) - ) - (i32.const 31) - ) - (i32.const 31) - ) - ) (br $label$break$L1) ) (set_local $3 @@ -8856,101 +8786,87 @@ ) (i32.store offset=4 (get_local $0) - (i32.const 0) + (i32.shr_s + (i32.shl + (i32.lt_s + (get_local $3) + (i32.const 0) + ) + (i32.const 31) + ) + (i32.const 31) + ) ) (br $label$break$L1) ) - (set_local $5 + (set_local $3 (i32.load - (set_local $3 - (set_local $1 - (i32.and - (i32.add - (i32.load - (get_local $2) - ) - (i32.const 7) + (set_local $1 + (i32.and + (i32.add + (i32.load + (get_local $2) ) - (i32.const -8) + (i32.const 3) ) + (i32.const -4) ) ) ) ) - (set_local $3 - (i32.load offset=4 - (get_local $3) - ) - ) (i32.store (get_local $2) (i32.add (get_local $1) - (i32.const 8) + (i32.const 4) ) ) (i32.store (get_local $0) - (get_local $5) + (get_local $3) ) (i32.store offset=4 (get_local $0) - (get_local $3) + (i32.const 0) ) (br $label$break$L1) ) - (set_local $3 + (set_local $5 (i32.load - (set_local $1 - (i32.and - (i32.add - (i32.load - (get_local $2) + (set_local $3 + (set_local $1 + (i32.and + (i32.add + (i32.load + (get_local $2) + ) + (i32.const 7) ) - (i32.const 3) + (i32.const -8) ) - (i32.const -4) ) ) ) ) + (set_local $3 + (i32.load offset=4 + (get_local $3) + ) + ) (i32.store (get_local $2) (i32.add (get_local $1) - (i32.const 4) - ) - ) - (set_local $2 - (i32.shr_s - (i32.shl - (i32.lt_s - (set_local $1 - (i32.shr_s - (i32.shl - (i32.and - (get_local $3) - (i32.const 65535) - ) - (i32.const 16) - ) - (i32.const 16) - ) - ) - (i32.const 0) - ) - (i32.const 31) - ) - (i32.const 31) + (i32.const 8) ) ) (i32.store (get_local $0) - (get_local $1) + (get_local $5) ) (i32.store offset=4 (get_local $0) - (get_local $2) + (get_local $3) ) (br $label$break$L1) ) @@ -8976,16 +8892,36 @@ (i32.const 4) ) ) + (set_local $2 + (i32.shr_s + (i32.shl + (i32.lt_s + (set_local $1 + (i32.shr_s + (i32.shl + (i32.and + (get_local $3) + (i32.const 65535) + ) + (i32.const 16) + ) + (i32.const 16) + ) + ) + (i32.const 0) + ) + (i32.const 31) + ) + (i32.const 31) + ) + ) (i32.store (get_local $0) - (i32.and - (get_local $3) - (i32.const 65535) - ) + (get_local $1) ) (i32.store offset=4 (get_local $0) - (i32.const 0) + (get_local $2) ) (br $label$break$L1) ) @@ -9011,36 +8947,16 @@ (i32.const 4) ) ) - (set_local $2 - (i32.shr_s - (i32.shl - (i32.lt_s - (set_local $1 - (i32.shr_s - (i32.shl - (i32.and - (get_local $3) - (i32.const 255) - ) - (i32.const 24) - ) - (i32.const 24) - ) - ) - (i32.const 0) - ) - (i32.const 31) - ) - (i32.const 31) - ) - ) (i32.store (get_local $0) - (get_local $1) + (i32.and + (get_local $3) + (i32.const 65535) + ) ) (i32.store offset=4 (get_local $0) - (get_local $2) + (i32.const 0) ) (br $label$break$L1) ) @@ -9066,30 +8982,50 @@ (i32.const 4) ) ) + (set_local $2 + (i32.shr_s + (i32.shl + (i32.lt_s + (set_local $1 + (i32.shr_s + (i32.shl + (i32.and + (get_local $3) + (i32.const 255) + ) + (i32.const 24) + ) + (i32.const 24) + ) + ) + (i32.const 0) + ) + (i32.const 31) + ) + (i32.const 31) + ) + ) (i32.store (get_local $0) - (i32.and - (get_local $3) - (i32.const 255) - ) + (get_local $1) ) (i32.store offset=4 (get_local $0) - (i32.const 0) + (get_local $2) ) (br $label$break$L1) ) - (set_local $4 - (f64.load + (set_local $3 + (i32.load (set_local $1 (i32.and (i32.add (i32.load (get_local $2) ) - (i32.const 7) + (i32.const 3) ) - (i32.const -8) + (i32.const -4) ) ) ) @@ -9098,12 +9034,19 @@ (get_local $2) (i32.add (get_local $1) - (i32.const 8) + (i32.const 4) ) ) - (f64.store + (i32.store (get_local $0) - (get_local $4) + (i32.and + (get_local $3) + (i32.const 255) + ) + ) + (i32.store offset=4 + (get_local $0) + (i32.const 0) ) (br $label$break$L1) ) @@ -9133,6 +9076,33 @@ (get_local $0) (get_local $4) ) + (br $label$break$L1) + ) + (set_local $4 + (f64.load + (set_local $1 + (i32.and + (i32.add + (i32.load + (get_local $2) + ) + (i32.const 7) + ) + (i32.const -8) + ) + ) + ) + ) + (i32.store + (get_local $2) + (i32.add + (get_local $1) + (i32.const 8) + ) + ) + (f64.store + (get_local $0) + (get_local $4) ) ) ) diff --git a/test/example/c-api-kitchen-sink.c b/test/example/c-api-kitchen-sink.c index 568492659..496ac4efd 100644 --- a/test/example/c-api-kitchen-sink.c +++ b/test/example/c-api-kitchen-sink.c @@ -270,37 +270,48 @@ void test_core() { BinaryenModuleDispose(module); } +BinaryenExpressionRef makeCallCheck(BinaryenModuleRef module, int x) { + BinaryenExpressionRef callOperands[] = { makeInt32(module, x) }; + return BinaryenCallImport(module, "check", callOperands, 1, BinaryenNone()); +} + void test_relooper() { BinaryenModuleRef module = BinaryenModuleCreate(); BinaryenFunctionTypeRef v = BinaryenAddFunctionType(module, "v", BinaryenNone(), NULL, 0); BinaryenType localTypes[] = { BinaryenInt32() }; + { + BinaryenType iparams[1] = { BinaryenInt32() }; + BinaryenFunctionTypeRef vi = BinaryenAddFunctionType(module, "vi", BinaryenNone(), iparams, 1); + BinaryenAddImport(module, "check", "module", "check", vi); + } + { // trivial: just one block RelooperRef relooper = RelooperCreate(); - RelooperBlockRef block = RelooperAddBlock(relooper, makeSomething(module)); + RelooperBlockRef block = RelooperAddBlock(relooper, makeCallCheck(module, 1337)); BinaryenExpressionRef body = RelooperRenderAndDispose(relooper, block, 0, module); BinaryenFunctionRef sinker = BinaryenAddFunction(module, "just-one-block", v, localTypes, 1, body); } { // two blocks RelooperRef relooper = RelooperCreate(); - RelooperBlockRef block0 = RelooperAddBlock(relooper, makeInt32(module, 0)); - RelooperBlockRef block1 = RelooperAddBlock(relooper, makeInt32(module, 1)); + RelooperBlockRef block0 = RelooperAddBlock(relooper, makeCallCheck(module, 0)); + RelooperBlockRef block1 = RelooperAddBlock(relooper, makeCallCheck(module, 1)); RelooperAddBranch(block0, block1, NULL, NULL); // no condition, no code on branch BinaryenExpressionRef body = RelooperRenderAndDispose(relooper, block0, 0, module); BinaryenFunctionRef sinker = BinaryenAddFunction(module, "two-blocks", v, localTypes, 1, body); } { // two blocks with code between them RelooperRef relooper = RelooperCreate(); - RelooperBlockRef block0 = RelooperAddBlock(relooper, makeInt32(module, 0)); - RelooperBlockRef block1 = RelooperAddBlock(relooper, makeInt32(module, 1)); + RelooperBlockRef block0 = RelooperAddBlock(relooper, makeCallCheck(module, 0)); + RelooperBlockRef block1 = RelooperAddBlock(relooper, makeCallCheck(module, 1)); RelooperAddBranch(block0, block1, NULL, makeInt32(module, 77)); // code on branch BinaryenExpressionRef body = RelooperRenderAndDispose(relooper, block0, 0, module); BinaryenFunctionRef sinker = BinaryenAddFunction(module, "two-blocks-plus-code", v, localTypes, 1, body); } { // two blocks in a loop RelooperRef relooper = RelooperCreate(); - RelooperBlockRef block0 = RelooperAddBlock(relooper, makeInt32(module, 0)); - RelooperBlockRef block1 = RelooperAddBlock(relooper, makeInt32(module, 1)); + RelooperBlockRef block0 = RelooperAddBlock(relooper, makeCallCheck(module, 0)); + RelooperBlockRef block1 = RelooperAddBlock(relooper, makeCallCheck(module, 1)); RelooperAddBranch(block0, block1, NULL, NULL); RelooperAddBranch(block1, block0, NULL, NULL); BinaryenExpressionRef body = RelooperRenderAndDispose(relooper, block0, 0, module); @@ -308,8 +319,8 @@ void test_relooper() { } { // two blocks in a loop with codes RelooperRef relooper = RelooperCreate(); - RelooperBlockRef block0 = RelooperAddBlock(relooper, makeInt32(module, 0)); - RelooperBlockRef block1 = RelooperAddBlock(relooper, makeInt32(module, 1)); + RelooperBlockRef block0 = RelooperAddBlock(relooper, makeCallCheck(module, 0)); + RelooperBlockRef block1 = RelooperAddBlock(relooper, makeCallCheck(module, 1)); RelooperAddBranch(block0, block1, NULL, makeInt32(module, 33)); RelooperAddBranch(block1, block0, NULL, makeInt32(module, -66)); BinaryenExpressionRef body = RelooperRenderAndDispose(relooper, block0, 0, module); @@ -317,9 +328,9 @@ void test_relooper() { } { // split RelooperRef relooper = RelooperCreate(); - RelooperBlockRef block0 = RelooperAddBlock(relooper, makeInt32(module, 0)); - RelooperBlockRef block1 = RelooperAddBlock(relooper, makeInt32(module, 1)); - RelooperBlockRef block2 = RelooperAddBlock(relooper, makeInt32(module, 2)); + RelooperBlockRef block0 = RelooperAddBlock(relooper, makeCallCheck(module, 0)); + RelooperBlockRef block1 = RelooperAddBlock(relooper, makeCallCheck(module, 1)); + RelooperBlockRef block2 = RelooperAddBlock(relooper, makeCallCheck(module, 2)); RelooperAddBranch(block0, block1, makeInt32(module, 55), NULL); RelooperAddBranch(block0, block2, NULL, NULL); BinaryenExpressionRef body = RelooperRenderAndDispose(relooper, block0, 0, module); @@ -327,9 +338,9 @@ void test_relooper() { } { // split + code RelooperRef relooper = RelooperCreate(); - RelooperBlockRef block0 = RelooperAddBlock(relooper, makeInt32(module, 0)); - RelooperBlockRef block1 = RelooperAddBlock(relooper, makeInt32(module, 1)); - RelooperBlockRef block2 = RelooperAddBlock(relooper, makeInt32(module, 2)); + RelooperBlockRef block0 = RelooperAddBlock(relooper, makeCallCheck(module, 0)); + RelooperBlockRef block1 = RelooperAddBlock(relooper, makeCallCheck(module, 1)); + RelooperBlockRef block2 = RelooperAddBlock(relooper, makeCallCheck(module, 2)); BinaryenExpressionRef temp = makeInt32(module, 10); RelooperAddBranch(block0, block1, makeInt32(module, 55), temp); RelooperAddBranch(block0, block2, NULL, makeInt32(module, 20)); @@ -338,9 +349,9 @@ void test_relooper() { } { // if RelooperRef relooper = RelooperCreate(); - RelooperBlockRef block0 = RelooperAddBlock(relooper, makeInt32(module, 0)); - RelooperBlockRef block1 = RelooperAddBlock(relooper, makeInt32(module, 1)); - RelooperBlockRef block2 = RelooperAddBlock(relooper, makeInt32(module, 2)); + RelooperBlockRef block0 = RelooperAddBlock(relooper, makeCallCheck(module, 0)); + RelooperBlockRef block1 = RelooperAddBlock(relooper, makeCallCheck(module, 1)); + RelooperBlockRef block2 = RelooperAddBlock(relooper, makeCallCheck(module, 2)); RelooperAddBranch(block0, block1, makeInt32(module, 55), NULL); RelooperAddBranch(block0, block2, NULL, NULL); RelooperAddBranch(block1, block2, NULL, NULL); @@ -349,9 +360,9 @@ void test_relooper() { } { // if + code RelooperRef relooper = RelooperCreate(); - RelooperBlockRef block0 = RelooperAddBlock(relooper, makeInt32(module, 0)); - RelooperBlockRef block1 = RelooperAddBlock(relooper, makeInt32(module, 1)); - RelooperBlockRef block2 = RelooperAddBlock(relooper, makeInt32(module, 2)); + RelooperBlockRef block0 = RelooperAddBlock(relooper, makeCallCheck(module, 0)); + RelooperBlockRef block1 = RelooperAddBlock(relooper, makeCallCheck(module, 1)); + RelooperBlockRef block2 = RelooperAddBlock(relooper, makeCallCheck(module, 2)); BinaryenExpressionRef temp = makeInt32(module, -1); RelooperAddBranch(block0, block1, makeInt32(module, 55), temp); RelooperAddBranch(block0, block2, NULL, makeInt32(module, -2)); @@ -361,10 +372,10 @@ void test_relooper() { } { // if-else RelooperRef relooper = RelooperCreate(); - RelooperBlockRef block0 = RelooperAddBlock(relooper, makeInt32(module, 0)); - RelooperBlockRef block1 = RelooperAddBlock(relooper, makeInt32(module, 1)); - RelooperBlockRef block2 = RelooperAddBlock(relooper, makeInt32(module, 2)); - RelooperBlockRef block3 = RelooperAddBlock(relooper, makeInt32(module, 3)); + RelooperBlockRef block0 = RelooperAddBlock(relooper, makeCallCheck(module, 0)); + RelooperBlockRef block1 = RelooperAddBlock(relooper, makeCallCheck(module, 1)); + RelooperBlockRef block2 = RelooperAddBlock(relooper, makeCallCheck(module, 2)); + RelooperBlockRef block3 = RelooperAddBlock(relooper, makeCallCheck(module, 3)); RelooperAddBranch(block0, block1, makeInt32(module, 55), NULL); RelooperAddBranch(block0, block2, NULL, NULL); RelooperAddBranch(block1, block3, NULL, NULL); @@ -374,9 +385,9 @@ void test_relooper() { } { // loop+tail RelooperRef relooper = RelooperCreate(); - RelooperBlockRef block0 = RelooperAddBlock(relooper, makeInt32(module, 0)); - RelooperBlockRef block1 = RelooperAddBlock(relooper, makeInt32(module, 1)); - RelooperBlockRef block2 = RelooperAddBlock(relooper, makeInt32(module, 2)); + RelooperBlockRef block0 = RelooperAddBlock(relooper, makeCallCheck(module, 0)); + RelooperBlockRef block1 = RelooperAddBlock(relooper, makeCallCheck(module, 1)); + RelooperBlockRef block2 = RelooperAddBlock(relooper, makeCallCheck(module, 2)); RelooperAddBranch(block0, block1, NULL, NULL); RelooperAddBranch(block1, block0, makeInt32(module, 10), NULL); RelooperAddBranch(block1, block2, NULL, NULL); @@ -385,13 +396,13 @@ void test_relooper() { } { // nontrivial loop + phi to head RelooperRef relooper = RelooperCreate(); - RelooperBlockRef block0 = RelooperAddBlock(relooper, makeInt32(module, 0)); - RelooperBlockRef block1 = RelooperAddBlock(relooper, makeInt32(module, 1)); - RelooperBlockRef block2 = RelooperAddBlock(relooper, makeInt32(module, 2)); - RelooperBlockRef block3 = RelooperAddBlock(relooper, makeInt32(module, 3)); - RelooperBlockRef block4 = RelooperAddBlock(relooper, makeInt32(module, 4)); - RelooperBlockRef block5 = RelooperAddBlock(relooper, makeInt32(module, 5)); - RelooperBlockRef block6 = RelooperAddBlock(relooper, makeInt32(module, 6)); + RelooperBlockRef block0 = RelooperAddBlock(relooper, makeCallCheck(module, 0)); + RelooperBlockRef block1 = RelooperAddBlock(relooper, makeCallCheck(module, 1)); + RelooperBlockRef block2 = RelooperAddBlock(relooper, makeCallCheck(module, 2)); + RelooperBlockRef block3 = RelooperAddBlock(relooper, makeCallCheck(module, 3)); + RelooperBlockRef block4 = RelooperAddBlock(relooper, makeCallCheck(module, 4)); + RelooperBlockRef block5 = RelooperAddBlock(relooper, makeCallCheck(module, 5)); + RelooperBlockRef block6 = RelooperAddBlock(relooper, makeCallCheck(module, 6)); RelooperAddBranch(block0, block1, NULL, makeInt32(module, 10)); RelooperAddBranch(block1, block2, makeInt32(module, -2), NULL); RelooperAddBranch(block1, block6, NULL, makeInt32(module, 20)); @@ -407,10 +418,10 @@ void test_relooper() { { // switch RelooperRef relooper = RelooperCreate(); BinaryenExpressionRef temp = makeInt32(module, -99); - RelooperBlockRef block0 = RelooperAddBlockWithSwitch(relooper, makeInt32(module, 0), temp); - RelooperBlockRef block1 = RelooperAddBlock(relooper, makeInt32(module, 1)); - RelooperBlockRef block2 = RelooperAddBlock(relooper, makeInt32(module, 2)); - RelooperBlockRef block3 = RelooperAddBlock(relooper, makeInt32(module, 3)); + RelooperBlockRef block0 = RelooperAddBlockWithSwitch(relooper, makeCallCheck(module, 0), temp); + RelooperBlockRef block1 = RelooperAddBlock(relooper, makeCallCheck(module, 1)); + RelooperBlockRef block2 = RelooperAddBlock(relooper, makeCallCheck(module, 2)); + RelooperBlockRef block3 = RelooperAddBlock(relooper, makeCallCheck(module, 3)); BinaryenIndex to_block1[] = { 2, 5 }; RelooperAddBranchForSwitch(block0, block1, to_block1, 2, NULL); BinaryenIndex to_block2[] = { 4 }; @@ -421,9 +432,9 @@ void test_relooper() { } { // duff's device RelooperRef relooper = RelooperCreate(); - RelooperBlockRef block0 = RelooperAddBlock(relooper, makeInt32(module, 0)); - RelooperBlockRef block1 = RelooperAddBlock(relooper, makeInt32(module, 1)); - RelooperBlockRef block2 = RelooperAddBlock(relooper, makeInt32(module, 2)); + RelooperBlockRef block0 = RelooperAddBlock(relooper, makeCallCheck(module, 0)); + RelooperBlockRef block1 = RelooperAddBlock(relooper, makeCallCheck(module, 1)); + RelooperBlockRef block2 = RelooperAddBlock(relooper, makeCallCheck(module, 2)); RelooperAddBranch(block0, block1, makeInt32(module, 10), NULL); RelooperAddBranch(block0, block2, NULL, NULL); RelooperAddBranch(block1, block2, NULL, NULL); @@ -437,7 +448,7 @@ void test_relooper() { { // return in a block RelooperRef relooper = RelooperCreate(); - BinaryenExpressionRef listList[] = { makeInt32(module, 42), BinaryenReturn(module, makeInt32(module, 1337)) }; + BinaryenExpressionRef listList[] = { makeCallCheck(module, 42), BinaryenReturn(module, makeInt32(module, 1337)) }; BinaryenExpressionRef list = BinaryenBlock(module, "the-list", listList, 2); RelooperBlockRef block = RelooperAddBlock(relooper, list); BinaryenExpressionRef body = RelooperRenderAndDispose(relooper, block, 0, module); diff --git a/test/example/c-api-kitchen-sink.txt b/test/example/c-api-kitchen-sink.txt index bd3b911f7..64f5fc3b4 100644 --- a/test/example/c-api-kitchen-sink.txt +++ b/test/example/c-api-kitchen-sink.txt @@ -370,40 +370,63 @@ raw: (module (memory 0) (type $v (func)) + (type $vi (func (param i32))) (type $i (func (result i32))) + (import $check "module" "check" (param i32)) (func $just-one-block (type $v) (local $0 i32) - (i32.const 1337) + (call_import $check + (i32.const 1337) + ) ) (func $two-blocks (type $v) (local $0 i32) - (block - (i32.const 0) + (block $block$2$break + (call_import $check + (i32.const 0) + ) + (block + (br $block$2$break) + ) ) (block - (i32.const 1) + (call_import $check + (i32.const 1) + ) ) ) (func $two-blocks-plus-code (type $v) (local $0 i32) - (block - (i32.const 0) + (block $block$2$break + (call_import $check + (i32.const 0) + ) (block (i32.const 77) + (br $block$2$break) ) ) (block - (i32.const 1) + (call_import $check + (i32.const 1) + ) ) ) (func $loop (type $v) (local $0 i32) - (loop $shape$0$break $shape$0$continue - (block - (i32.const 0) + (loop $shape$0$continue + (block $block$2$break + (call_import $check + (i32.const 0) + ) + (block + (br $block$2$break) + ) ) (block - (i32.const 1) + (call_import $check + (i32.const 1) + ) (block (br $shape$0$continue) ) @@ -412,15 +435,20 @@ raw: ) (func $loop-plus-code (type $v) (local $0 i32) - (loop $shape$0$break $shape$0$continue - (block - (i32.const 0) + (loop $shape$0$continue + (block $block$2$break + (call_import $check + (i32.const 0) + ) (block (i32.const 33) + (br $block$2$break) ) ) (block - (i32.const 1) + (call_import $check + (i32.const 1) + ) (block (i32.const -66) (br $shape$0$continue) @@ -430,14 +458,18 @@ raw: ) (func $split (type $v) (local $0 i32) - (i32.const 0) - (block $shape$1$break - (if - (i32.const 55) - (block + (call_import $check + (i32.const 0) + ) + (if + (i32.const 55) + (block + (call_import $check (i32.const 1) ) - (block + ) + (block + (call_import $check (i32.const 2) ) ) @@ -445,19 +477,23 @@ raw: ) (func $split-plus-code (type $v) (local $0 i32) - (i32.const 0) - (block $shape$1$break - (if - (i32.const 55) + (call_import $check + (i32.const 0) + ) + (if + (i32.const 55) + (block + (i32.const 10) (block - (i32.const 10) - (block + (call_import $check (i32.const 1) ) ) + ) + (block + (i32.const 20) (block - (i32.const 20) - (block + (call_import $check (i32.const 2) ) ) @@ -466,166 +502,197 @@ raw: ) (func $if (type $v) (local $0 i32) - (block - (i32.const 0) - (block $shape$1$break - (if - (i32.const 55) - (block + (block $block$3$break + (call_import $check + (i32.const 0) + ) + (if + (i32.const 55) + (block + (call_import $check (i32.const 1) - (block - (br $shape$1$break) - ) + ) + (block + (br $block$3$break) ) ) + (br $block$3$break) ) ) (block - (i32.const 2) + (call_import $check + (i32.const 2) + ) ) ) (func $if-plus-code (type $v) (local $0 i32) - (block - (i32.const 0) - (block $shape$1$break - (if - (i32.const 55) + (block $block$3$break + (call_import $check + (i32.const 0) + ) + (if + (i32.const 55) + (block + (i32.const -1) (block - (i32.const -1) - (block + (call_import $check (i32.const 1) - (block - (i32.const -3) - (br $shape$1$break) - ) + ) + (block + (i32.const -3) + (br $block$3$break) ) ) + ) + (block (i32.const -2) + (br $block$3$break) ) ) ) (block - (i32.const 2) + (call_import $check + (i32.const 2) + ) ) ) (func $if-else (type $v) (local $0 i32) - (block - (i32.const 0) - (block $shape$1$break - (if - (i32.const 55) - (block + (block $block$4$break + (call_import $check + (i32.const 0) + ) + (if + (i32.const 55) + (block + (call_import $check (i32.const 1) - (block - (br $shape$1$break) - ) ) (block + (br $block$4$break) + ) + ) + (block + (call_import $check (i32.const 2) - (block - (br $shape$1$break) - ) + ) + (block + (br $block$4$break) ) ) ) ) (block - (i32.const 3) + (call_import $check + (i32.const 3) + ) ) ) (func $loop-tail (type $v) (local $0 i32) - (loop $shape$0$break $shape$0$continue - (block - (i32.const 0) - ) - (block - (i32.const 1) - (if - (i32.const 10) - (br $shape$0$continue) - (br $shape$0$break) + (block $block$3$break + (loop $shape$0$continue + (block $block$2$break + (call_import $check + (i32.const 0) + ) + (block + (br $block$2$break) + ) + ) + (block + (call_import $check + (i32.const 1) + ) + (if + (i32.const 10) + (br $shape$0$continue) + (br $block$3$break) + ) ) ) ) (block - (i32.const 2) + (call_import $check + (i32.const 2) + ) ) ) (func $nontrivial-loop-plus-phi-to-head (type $v) (local $0 i32) - (block - (i32.const 0) + (block $block$2$break + (call_import $check + (i32.const 0) + ) (block (i32.const 10) + (br $block$2$break) ) ) (block - (loop $shape$1$break $shape$1$continue - (block - (i32.const 1) - (if - (i32.eqz - (i32.const -2) - ) - (block - (i32.const 20) - (br $shape$1$break) - ) - ) - ) - (block - (i32.const 2) - (if - (i32.const -6) - (block - (set_local $0 - (i32.const 4) + (block $block$7$break + (block $block$4$break + (loop $shape$1$continue + (block $block$3$break + (call_import $check + (i32.const 1) + ) + (if + (i32.const -2) + (br $block$3$break) + (block + (i32.const 20) + (br $block$7$break) + ) ) - (br $shape$1$break) ) (block - (i32.const 30) - (br $shape$1$continue) + (call_import $check + (i32.const 2) + ) + (if + (i32.const -6) + (br $block$4$break) + (block + (i32.const 30) + (br $shape$1$continue) + ) + ) ) ) ) - ) - (block - (block $shape$4$break - (if - (i32.eq - (get_local $0) - (i32.const 4) + (block + (block $block$6$break + (call_import $check + (i32.const 3) ) - (block + (if + (i32.const -10) (block - (i32.const 3) - (block $shape$6$break - (if - (i32.const -10) - (block - (i32.const 4) - (block - (br $shape$6$break) - ) - ) - ) + (call_import $check + (i32.const 4) ) - ) - (block - (i32.const 5) (block - (i32.const 40) - (br $shape$4$break) + (br $block$6$break) ) ) + (br $block$6$break) + ) + ) + (block + (call_import $check + (i32.const 5) + ) + (block + (i32.const 40) + (br $block$7$break) ) ) ) - (block + ) + (block + (call_import $check (i32.const 6) ) ) @@ -633,38 +700,44 @@ raw: ) (func $switch (type $v) (local $0 i32) - (i32.const 0) - (block $shape$1$break - (block $switch$1$leave - (block $switch$1$default - (block $switch$1$case$3 - (block $switch$1$case$2 - (br_table $switch$1$default $switch$1$default $switch$1$case$2 $switch$1$default $switch$1$case$3 $switch$1$case$2 $switch$1$default - (i32.const -99) - ) + (call_import $check + (i32.const 0) + ) + (block $switch$1$leave + (block $switch$1$default + (block $switch$1$case$3 + (block $switch$1$case$2 + (br_table $switch$1$default $switch$1$default $switch$1$case$2 $switch$1$default $switch$1$case$3 $switch$1$case$2 $switch$1$default + (i32.const -99) ) + ) + (block (block - (block + (call_import $check (i32.const 1) ) ) - (br $switch$1$leave) ) + (br $switch$1$leave) + ) + (block + (i32.const 55) (block - (i32.const 55) - (block + (call_import $check (i32.const 2) ) ) - (br $switch$1$leave) ) + (br $switch$1$leave) + ) + (block (block - (block + (call_import $check (i32.const 3) ) ) - (br $switch$1$leave) ) + (br $switch$1$leave) ) ) (func $duffs-device (type $v) @@ -676,52 +749,66 @@ raw: (local $5 f64) (local $6 i32) (block - (i32.const 0) + (block $block$3$break + (block $block$2$break + (call_import $check + (i32.const 0) + ) + (if + (i32.const 10) + (block + (set_local $3 + (i32.const 2) + ) + (br $block$2$break) + ) + (block + (set_local $3 + (i32.const 3) + ) + (br $block$3$break) + ) + ) + ) + ) + ) + (loop $shape$1$continue (if - (i32.const 10) - (set_local $3 + (i32.eq + (get_local $3) (i32.const 2) ) - (set_local $3 - (i32.const 3) + (block + (set_local $3 + (i32.const 0) + ) + (call_import $check + (i32.const 1) + ) + (block + (set_local $3 + (i32.const 3) + ) + (br $shape$1$continue) + ) ) - ) - ) - (loop $shape$1$break $shape$1$continue - (block $shape$2$break (if (i32.eq (get_local $3) - (i32.const 2) + (i32.const 3) ) (block (set_local $3 (i32.const 0) ) - (i32.const 1) - (block - (set_local $3 - (i32.const 3) - ) - (br $shape$1$continue) - ) - ) - (if - (i32.eq - (get_local $3) - (i32.const 3) + (call_import $check + (i32.const 2) ) (block (set_local $3 - (i32.const 0) - ) - (i32.const 2) - (block - (set_local $3 - (i32.const 2) - ) - (br $shape$1$continue) + (i32.const 2) ) + (br $shape$1$continue) ) ) ) @@ -731,7 +818,9 @@ raw: (func $return (type $i) (result i32) (local $0 i32) (block $the-list - (i32.const 42) + (call_import $check + (i32.const 42) + ) (return (i32.const 1337) ) @@ -742,22 +831,179 @@ optimized: (module (memory 0) (type $v (func)) + (type $vi (func (param i32))) (type $i (func (result i32))) + (import $check "module" "check" (param i32)) (func $just-one-block (type $v) - (nop) + (call_import $check + (i32.const 1337) + ) + ) + (func $two-blocks (type $v) + (call_import $check + (i32.const 0) + ) + (call_import $check + (i32.const 1) + ) + ) + (func $loop (type $v) + (loop $shape$0$continue + (call_import $check + (i32.const 0) + ) + (call_import $check + (i32.const 1) + ) + (br $shape$0$continue) + ) + ) + (func $split (type $v) + (call_import $check + (i32.const 0) + ) + (if + (i32.const 55) + (call_import $check + (i32.const 1) + ) + (call_import $check + (i32.const 2) + ) + ) + ) + (func $if (type $v) + (call_import $check + (i32.const 0) + ) + (if + (i32.const 55) + (call_import $check + (i32.const 1) + ) + ) + (call_import $check + (i32.const 2) + ) + ) + (func $if-else (type $v) + (call_import $check + (i32.const 0) + ) + (if + (i32.const 55) + (call_import $check + (i32.const 1) + ) + (call_import $check + (i32.const 2) + ) + ) + (call_import $check + (i32.const 3) + ) + ) + (func $loop-tail (type $v) + (loop $block$3$break $shape$0$continue + (call_import $check + (i32.const 0) + ) + (call_import $check + (i32.const 1) + ) + (if + (i32.const 10) + (br $shape$0$continue) + (br $block$3$break) + ) + ) + (call_import $check + (i32.const 2) + ) + ) + (func $nontrivial-loop-plus-phi-to-head (type $v) + (call_import $check + (i32.const 0) + ) + (block $block$7$break + (loop $block$4$break $shape$1$continue + (call_import $check + (i32.const 1) + ) + (br_if $block$7$break + (i32.const 0) + ) + (call_import $check + (i32.const 2) + ) + (if + (i32.const -6) + (br $block$4$break) + (br $shape$1$continue) + ) + ) + (call_import $check + (i32.const 3) + ) + (if + (i32.const -10) + (call_import $check + (i32.const 4) + ) + ) + (call_import $check + (i32.const 5) + ) + ) + (call_import $check + (i32.const 6) + ) + ) + (func $switch (type $v) + (call_import $check + (i32.const 0) + ) + (block $switch$1$leave + (block $switch$1$default + (block $switch$1$case$3 + (block $switch$1$case$2 + (br_table $switch$1$default $switch$1$default $switch$1$case$2 $switch$1$default $switch$1$case$3 $switch$1$case$2 $switch$1$default + (i32.const -99) + ) + ) + (call_import $check + (i32.const 1) + ) + (br $switch$1$leave) + ) + (call_import $check + (i32.const 2) + ) + (br $switch$1$leave) + ) + (call_import $check + (i32.const 3) + ) + ) ) (func $duffs-device (type $v) (local $0 i32) + (call_import $check + (i32.const 0) + ) (set_local $0 (i32.const 2) ) - (loop $shape$1$break $shape$1$continue + (loop $shape$1$continue (if (i32.eq (get_local $0) (i32.const 2) ) (block + (call_import $check + (i32.const 1) + ) (set_local $0 (i32.const 3) ) @@ -769,6 +1015,9 @@ optimized: (i32.const 3) ) (block + (call_import $check + (i32.const 2) + ) (set_local $0 (i32.const 2) ) @@ -779,6 +1028,9 @@ optimized: ) ) (func $return (type $i) (result i32) + (call_import $check + (i32.const 42) + ) (i32.const 1337) ) ) @@ -1517,303 +1769,503 @@ int main() { BinaryenIndex paramTypes[] = { 0 }; functionTypes[0] = BinaryenAddFunctionType(the_module, "v", 0, paramTypes, 0); } + { + BinaryenIndex paramTypes[] = { 1 }; + functionTypes[1] = BinaryenAddFunctionType(the_module, "vi", 0, paramTypes, 1); + } + BinaryenAddImport(the_module, "check", "module", "check", functionTypes[1]); the_relooper = RelooperCreate(); expressions[1] = BinaryenConst(the_module, BinaryenLiteralInt32(1337)); - relooperBlocks[0] = RelooperAddBlock(the_relooper, expressions[1]); - expressions[2] = RelooperRenderAndDispose(the_relooper, relooperBlocks[0], 0, the_module); { - BinaryenType varTypes[] = { 1 }; - functions[0] = BinaryenAddFunction(the_module, "just-one-block", functionTypes[0], varTypes, 1, expressions[2]); + BinaryenExpressionRef operands[] = { expressions[1] }; + expressions[2] = BinaryenCallImport(the_module, "check", operands, 1, 0); } - the_relooper = RelooperCreate(); - expressions[3] = BinaryenConst(the_module, BinaryenLiteralInt32(0)); - relooperBlocks[0] = RelooperAddBlock(the_relooper, expressions[3]); - expressions[4] = BinaryenConst(the_module, BinaryenLiteralInt32(1)); - relooperBlocks[1] = RelooperAddBlock(the_relooper, expressions[4]); - RelooperAddBranch(relooperBlocks[0], relooperBlocks[1], expressions[0], expressions[0]); - expressions[5] = RelooperRenderAndDispose(the_relooper, relooperBlocks[0], 0, the_module); + relooperBlocks[0] = RelooperAddBlock(the_relooper, expressions[2]); + expressions[3] = RelooperRenderAndDispose(the_relooper, relooperBlocks[0], 0, the_module); { BinaryenType varTypes[] = { 1 }; - functions[1] = BinaryenAddFunction(the_module, "two-blocks", functionTypes[0], varTypes, 1, expressions[5]); + functions[0] = BinaryenAddFunction(the_module, "just-one-block", functionTypes[0], varTypes, 1, expressions[3]); } the_relooper = RelooperCreate(); - expressions[6] = BinaryenConst(the_module, BinaryenLiteralInt32(0)); - relooperBlocks[0] = RelooperAddBlock(the_relooper, expressions[6]); - expressions[7] = BinaryenConst(the_module, BinaryenLiteralInt32(1)); + expressions[4] = BinaryenConst(the_module, BinaryenLiteralInt32(0)); + { + BinaryenExpressionRef operands[] = { expressions[4] }; + expressions[5] = BinaryenCallImport(the_module, "check", operands, 1, 0); + } + relooperBlocks[0] = RelooperAddBlock(the_relooper, expressions[5]); + expressions[6] = BinaryenConst(the_module, BinaryenLiteralInt32(1)); + { + BinaryenExpressionRef operands[] = { expressions[6] }; + expressions[7] = BinaryenCallImport(the_module, "check", operands, 1, 0); + } relooperBlocks[1] = RelooperAddBlock(the_relooper, expressions[7]); - expressions[8] = BinaryenConst(the_module, BinaryenLiteralInt32(77)); - RelooperAddBranch(relooperBlocks[0], relooperBlocks[1], expressions[0], expressions[8]); - expressions[9] = RelooperRenderAndDispose(the_relooper, relooperBlocks[0], 0, the_module); + RelooperAddBranch(relooperBlocks[0], relooperBlocks[1], expressions[0], expressions[0]); + expressions[8] = RelooperRenderAndDispose(the_relooper, relooperBlocks[0], 0, the_module); { BinaryenType varTypes[] = { 1 }; - functions[2] = BinaryenAddFunction(the_module, "two-blocks-plus-code", functionTypes[0], varTypes, 1, expressions[9]); + functions[1] = BinaryenAddFunction(the_module, "two-blocks", functionTypes[0], varTypes, 1, expressions[8]); } the_relooper = RelooperCreate(); - expressions[10] = BinaryenConst(the_module, BinaryenLiteralInt32(0)); + expressions[9] = BinaryenConst(the_module, BinaryenLiteralInt32(0)); + { + BinaryenExpressionRef operands[] = { expressions[9] }; + expressions[10] = BinaryenCallImport(the_module, "check", operands, 1, 0); + } relooperBlocks[0] = RelooperAddBlock(the_relooper, expressions[10]); expressions[11] = BinaryenConst(the_module, BinaryenLiteralInt32(1)); - relooperBlocks[1] = RelooperAddBlock(the_relooper, expressions[11]); + { + BinaryenExpressionRef operands[] = { expressions[11] }; + expressions[12] = BinaryenCallImport(the_module, "check", operands, 1, 0); + } + relooperBlocks[1] = RelooperAddBlock(the_relooper, expressions[12]); + expressions[13] = BinaryenConst(the_module, BinaryenLiteralInt32(77)); + RelooperAddBranch(relooperBlocks[0], relooperBlocks[1], expressions[0], expressions[13]); + expressions[14] = RelooperRenderAndDispose(the_relooper, relooperBlocks[0], 0, the_module); + { + BinaryenType varTypes[] = { 1 }; + functions[2] = BinaryenAddFunction(the_module, "two-blocks-plus-code", functionTypes[0], varTypes, 1, expressions[14]); + } + the_relooper = RelooperCreate(); + expressions[15] = BinaryenConst(the_module, BinaryenLiteralInt32(0)); + { + BinaryenExpressionRef operands[] = { expressions[15] }; + expressions[16] = BinaryenCallImport(the_module, "check", operands, 1, 0); + } + relooperBlocks[0] = RelooperAddBlock(the_relooper, expressions[16]); + expressions[17] = BinaryenConst(the_module, BinaryenLiteralInt32(1)); + { + BinaryenExpressionRef operands[] = { expressions[17] }; + expressions[18] = BinaryenCallImport(the_module, "check", operands, 1, 0); + } + relooperBlocks[1] = RelooperAddBlock(the_relooper, expressions[18]); RelooperAddBranch(relooperBlocks[0], relooperBlocks[1], expressions[0], expressions[0]); RelooperAddBranch(relooperBlocks[1], relooperBlocks[0], expressions[0], expressions[0]); - expressions[12] = RelooperRenderAndDispose(the_relooper, relooperBlocks[0], 0, the_module); + expressions[19] = RelooperRenderAndDispose(the_relooper, relooperBlocks[0], 0, the_module); { BinaryenType varTypes[] = { 1 }; - functions[3] = BinaryenAddFunction(the_module, "loop", functionTypes[0], varTypes, 1, expressions[12]); + functions[3] = BinaryenAddFunction(the_module, "loop", functionTypes[0], varTypes, 1, expressions[19]); } the_relooper = RelooperCreate(); - expressions[13] = BinaryenConst(the_module, BinaryenLiteralInt32(0)); - relooperBlocks[0] = RelooperAddBlock(the_relooper, expressions[13]); - expressions[14] = BinaryenConst(the_module, BinaryenLiteralInt32(1)); - relooperBlocks[1] = RelooperAddBlock(the_relooper, expressions[14]); - expressions[15] = BinaryenConst(the_module, BinaryenLiteralInt32(33)); - RelooperAddBranch(relooperBlocks[0], relooperBlocks[1], expressions[0], expressions[15]); - expressions[16] = BinaryenConst(the_module, BinaryenLiteralInt32(-66)); - RelooperAddBranch(relooperBlocks[1], relooperBlocks[0], expressions[0], expressions[16]); - expressions[17] = RelooperRenderAndDispose(the_relooper, relooperBlocks[0], 0, the_module); + expressions[20] = BinaryenConst(the_module, BinaryenLiteralInt32(0)); + { + BinaryenExpressionRef operands[] = { expressions[20] }; + expressions[21] = BinaryenCallImport(the_module, "check", operands, 1, 0); + } + relooperBlocks[0] = RelooperAddBlock(the_relooper, expressions[21]); + expressions[22] = BinaryenConst(the_module, BinaryenLiteralInt32(1)); + { + BinaryenExpressionRef operands[] = { expressions[22] }; + expressions[23] = BinaryenCallImport(the_module, "check", operands, 1, 0); + } + relooperBlocks[1] = RelooperAddBlock(the_relooper, expressions[23]); + expressions[24] = BinaryenConst(the_module, BinaryenLiteralInt32(33)); + RelooperAddBranch(relooperBlocks[0], relooperBlocks[1], expressions[0], expressions[24]); + expressions[25] = BinaryenConst(the_module, BinaryenLiteralInt32(-66)); + RelooperAddBranch(relooperBlocks[1], relooperBlocks[0], expressions[0], expressions[25]); + expressions[26] = RelooperRenderAndDispose(the_relooper, relooperBlocks[0], 0, the_module); { BinaryenType varTypes[] = { 1 }; - functions[4] = BinaryenAddFunction(the_module, "loop-plus-code", functionTypes[0], varTypes, 1, expressions[17]); + functions[4] = BinaryenAddFunction(the_module, "loop-plus-code", functionTypes[0], varTypes, 1, expressions[26]); } the_relooper = RelooperCreate(); - expressions[18] = BinaryenConst(the_module, BinaryenLiteralInt32(0)); - relooperBlocks[0] = RelooperAddBlock(the_relooper, expressions[18]); - expressions[19] = BinaryenConst(the_module, BinaryenLiteralInt32(1)); - relooperBlocks[1] = RelooperAddBlock(the_relooper, expressions[19]); - expressions[20] = BinaryenConst(the_module, BinaryenLiteralInt32(2)); - relooperBlocks[2] = RelooperAddBlock(the_relooper, expressions[20]); - expressions[21] = BinaryenConst(the_module, BinaryenLiteralInt32(55)); - RelooperAddBranch(relooperBlocks[0], relooperBlocks[1], expressions[21], expressions[0]); + expressions[27] = BinaryenConst(the_module, BinaryenLiteralInt32(0)); + { + BinaryenExpressionRef operands[] = { expressions[27] }; + expressions[28] = BinaryenCallImport(the_module, "check", operands, 1, 0); + } + relooperBlocks[0] = RelooperAddBlock(the_relooper, expressions[28]); + expressions[29] = BinaryenConst(the_module, BinaryenLiteralInt32(1)); + { + BinaryenExpressionRef operands[] = { expressions[29] }; + expressions[30] = BinaryenCallImport(the_module, "check", operands, 1, 0); + } + relooperBlocks[1] = RelooperAddBlock(the_relooper, expressions[30]); + expressions[31] = BinaryenConst(the_module, BinaryenLiteralInt32(2)); + { + BinaryenExpressionRef operands[] = { expressions[31] }; + expressions[32] = BinaryenCallImport(the_module, "check", operands, 1, 0); + } + relooperBlocks[2] = RelooperAddBlock(the_relooper, expressions[32]); + expressions[33] = BinaryenConst(the_module, BinaryenLiteralInt32(55)); + RelooperAddBranch(relooperBlocks[0], relooperBlocks[1], expressions[33], expressions[0]); RelooperAddBranch(relooperBlocks[0], relooperBlocks[2], expressions[0], expressions[0]); - expressions[22] = RelooperRenderAndDispose(the_relooper, relooperBlocks[0], 0, the_module); + expressions[34] = RelooperRenderAndDispose(the_relooper, relooperBlocks[0], 0, the_module); { BinaryenType varTypes[] = { 1 }; - functions[5] = BinaryenAddFunction(the_module, "split", functionTypes[0], varTypes, 1, expressions[22]); + functions[5] = BinaryenAddFunction(the_module, "split", functionTypes[0], varTypes, 1, expressions[34]); } the_relooper = RelooperCreate(); - expressions[23] = BinaryenConst(the_module, BinaryenLiteralInt32(0)); - relooperBlocks[0] = RelooperAddBlock(the_relooper, expressions[23]); - expressions[24] = BinaryenConst(the_module, BinaryenLiteralInt32(1)); - relooperBlocks[1] = RelooperAddBlock(the_relooper, expressions[24]); - expressions[25] = BinaryenConst(the_module, BinaryenLiteralInt32(2)); - relooperBlocks[2] = RelooperAddBlock(the_relooper, expressions[25]); - expressions[26] = BinaryenConst(the_module, BinaryenLiteralInt32(10)); - expressions[27] = BinaryenConst(the_module, BinaryenLiteralInt32(55)); - RelooperAddBranch(relooperBlocks[0], relooperBlocks[1], expressions[27], expressions[26]); - expressions[28] = BinaryenConst(the_module, BinaryenLiteralInt32(20)); - RelooperAddBranch(relooperBlocks[0], relooperBlocks[2], expressions[0], expressions[28]); - expressions[29] = RelooperRenderAndDispose(the_relooper, relooperBlocks[0], 0, the_module); + expressions[35] = BinaryenConst(the_module, BinaryenLiteralInt32(0)); + { + BinaryenExpressionRef operands[] = { expressions[35] }; + expressions[36] = BinaryenCallImport(the_module, "check", operands, 1, 0); + } + relooperBlocks[0] = RelooperAddBlock(the_relooper, expressions[36]); + expressions[37] = BinaryenConst(the_module, BinaryenLiteralInt32(1)); + { + BinaryenExpressionRef operands[] = { expressions[37] }; + expressions[38] = BinaryenCallImport(the_module, "check", operands, 1, 0); + } + relooperBlocks[1] = RelooperAddBlock(the_relooper, expressions[38]); + expressions[39] = BinaryenConst(the_module, BinaryenLiteralInt32(2)); + { + BinaryenExpressionRef operands[] = { expressions[39] }; + expressions[40] = BinaryenCallImport(the_module, "check", operands, 1, 0); + } + relooperBlocks[2] = RelooperAddBlock(the_relooper, expressions[40]); + expressions[41] = BinaryenConst(the_module, BinaryenLiteralInt32(10)); + expressions[42] = BinaryenConst(the_module, BinaryenLiteralInt32(55)); + RelooperAddBranch(relooperBlocks[0], relooperBlocks[1], expressions[42], expressions[41]); + expressions[43] = BinaryenConst(the_module, BinaryenLiteralInt32(20)); + RelooperAddBranch(relooperBlocks[0], relooperBlocks[2], expressions[0], expressions[43]); + expressions[44] = RelooperRenderAndDispose(the_relooper, relooperBlocks[0], 0, the_module); { BinaryenType varTypes[] = { 1 }; - functions[6] = BinaryenAddFunction(the_module, "split-plus-code", functionTypes[0], varTypes, 1, expressions[29]); + functions[6] = BinaryenAddFunction(the_module, "split-plus-code", functionTypes[0], varTypes, 1, expressions[44]); } the_relooper = RelooperCreate(); - expressions[30] = BinaryenConst(the_module, BinaryenLiteralInt32(0)); - relooperBlocks[0] = RelooperAddBlock(the_relooper, expressions[30]); - expressions[31] = BinaryenConst(the_module, BinaryenLiteralInt32(1)); - relooperBlocks[1] = RelooperAddBlock(the_relooper, expressions[31]); - expressions[32] = BinaryenConst(the_module, BinaryenLiteralInt32(2)); - relooperBlocks[2] = RelooperAddBlock(the_relooper, expressions[32]); - expressions[33] = BinaryenConst(the_module, BinaryenLiteralInt32(55)); - RelooperAddBranch(relooperBlocks[0], relooperBlocks[1], expressions[33], expressions[0]); + expressions[45] = BinaryenConst(the_module, BinaryenLiteralInt32(0)); + { + BinaryenExpressionRef operands[] = { expressions[45] }; + expressions[46] = BinaryenCallImport(the_module, "check", operands, 1, 0); + } + relooperBlocks[0] = RelooperAddBlock(the_relooper, expressions[46]); + expressions[47] = BinaryenConst(the_module, BinaryenLiteralInt32(1)); + { + BinaryenExpressionRef operands[] = { expressions[47] }; + expressions[48] = BinaryenCallImport(the_module, "check", operands, 1, 0); + } + relooperBlocks[1] = RelooperAddBlock(the_relooper, expressions[48]); + expressions[49] = BinaryenConst(the_module, BinaryenLiteralInt32(2)); + { + BinaryenExpressionRef operands[] = { expressions[49] }; + expressions[50] = BinaryenCallImport(the_module, "check", operands, 1, 0); + } + relooperBlocks[2] = RelooperAddBlock(the_relooper, expressions[50]); + expressions[51] = BinaryenConst(the_module, BinaryenLiteralInt32(55)); + RelooperAddBranch(relooperBlocks[0], relooperBlocks[1], expressions[51], expressions[0]); RelooperAddBranch(relooperBlocks[0], relooperBlocks[2], expressions[0], expressions[0]); RelooperAddBranch(relooperBlocks[1], relooperBlocks[2], expressions[0], expressions[0]); - expressions[34] = RelooperRenderAndDispose(the_relooper, relooperBlocks[0], 0, the_module); + expressions[52] = RelooperRenderAndDispose(the_relooper, relooperBlocks[0], 0, the_module); { BinaryenType varTypes[] = { 1 }; - functions[7] = BinaryenAddFunction(the_module, "if", functionTypes[0], varTypes, 1, expressions[34]); + functions[7] = BinaryenAddFunction(the_module, "if", functionTypes[0], varTypes, 1, expressions[52]); } the_relooper = RelooperCreate(); - expressions[35] = BinaryenConst(the_module, BinaryenLiteralInt32(0)); - relooperBlocks[0] = RelooperAddBlock(the_relooper, expressions[35]); - expressions[36] = BinaryenConst(the_module, BinaryenLiteralInt32(1)); - relooperBlocks[1] = RelooperAddBlock(the_relooper, expressions[36]); - expressions[37] = BinaryenConst(the_module, BinaryenLiteralInt32(2)); - relooperBlocks[2] = RelooperAddBlock(the_relooper, expressions[37]); - expressions[38] = BinaryenConst(the_module, BinaryenLiteralInt32(-1)); - expressions[39] = BinaryenConst(the_module, BinaryenLiteralInt32(55)); - RelooperAddBranch(relooperBlocks[0], relooperBlocks[1], expressions[39], expressions[38]); - expressions[40] = BinaryenConst(the_module, BinaryenLiteralInt32(-2)); - RelooperAddBranch(relooperBlocks[0], relooperBlocks[2], expressions[0], expressions[40]); - expressions[41] = BinaryenConst(the_module, BinaryenLiteralInt32(-3)); - RelooperAddBranch(relooperBlocks[1], relooperBlocks[2], expressions[0], expressions[41]); - expressions[42] = RelooperRenderAndDispose(the_relooper, relooperBlocks[0], 0, the_module); + expressions[53] = BinaryenConst(the_module, BinaryenLiteralInt32(0)); + { + BinaryenExpressionRef operands[] = { expressions[53] }; + expressions[54] = BinaryenCallImport(the_module, "check", operands, 1, 0); + } + relooperBlocks[0] = RelooperAddBlock(the_relooper, expressions[54]); + expressions[55] = BinaryenConst(the_module, BinaryenLiteralInt32(1)); + { + BinaryenExpressionRef operands[] = { expressions[55] }; + expressions[56] = BinaryenCallImport(the_module, "check", operands, 1, 0); + } + relooperBlocks[1] = RelooperAddBlock(the_relooper, expressions[56]); + expressions[57] = BinaryenConst(the_module, BinaryenLiteralInt32(2)); + { + BinaryenExpressionRef operands[] = { expressions[57] }; + expressions[58] = BinaryenCallImport(the_module, "check", operands, 1, 0); + } + relooperBlocks[2] = RelooperAddBlock(the_relooper, expressions[58]); + expressions[59] = BinaryenConst(the_module, BinaryenLiteralInt32(-1)); + expressions[60] = BinaryenConst(the_module, BinaryenLiteralInt32(55)); + RelooperAddBranch(relooperBlocks[0], relooperBlocks[1], expressions[60], expressions[59]); + expressions[61] = BinaryenConst(the_module, BinaryenLiteralInt32(-2)); + RelooperAddBranch(relooperBlocks[0], relooperBlocks[2], expressions[0], expressions[61]); + expressions[62] = BinaryenConst(the_module, BinaryenLiteralInt32(-3)); + RelooperAddBranch(relooperBlocks[1], relooperBlocks[2], expressions[0], expressions[62]); + expressions[63] = RelooperRenderAndDispose(the_relooper, relooperBlocks[0], 0, the_module); { BinaryenType varTypes[] = { 1 }; - functions[8] = BinaryenAddFunction(the_module, "if-plus-code", functionTypes[0], varTypes, 1, expressions[42]); + functions[8] = BinaryenAddFunction(the_module, "if-plus-code", functionTypes[0], varTypes, 1, expressions[63]); } the_relooper = RelooperCreate(); - expressions[43] = BinaryenConst(the_module, BinaryenLiteralInt32(0)); - relooperBlocks[0] = RelooperAddBlock(the_relooper, expressions[43]); - expressions[44] = BinaryenConst(the_module, BinaryenLiteralInt32(1)); - relooperBlocks[1] = RelooperAddBlock(the_relooper, expressions[44]); - expressions[45] = BinaryenConst(the_module, BinaryenLiteralInt32(2)); - relooperBlocks[2] = RelooperAddBlock(the_relooper, expressions[45]); - expressions[46] = BinaryenConst(the_module, BinaryenLiteralInt32(3)); - relooperBlocks[3] = RelooperAddBlock(the_relooper, expressions[46]); - expressions[47] = BinaryenConst(the_module, BinaryenLiteralInt32(55)); - RelooperAddBranch(relooperBlocks[0], relooperBlocks[1], expressions[47], expressions[0]); + expressions[64] = BinaryenConst(the_module, BinaryenLiteralInt32(0)); + { + BinaryenExpressionRef operands[] = { expressions[64] }; + expressions[65] = BinaryenCallImport(the_module, "check", operands, 1, 0); + } + relooperBlocks[0] = RelooperAddBlock(the_relooper, expressions[65]); + expressions[66] = BinaryenConst(the_module, BinaryenLiteralInt32(1)); + { + BinaryenExpressionRef operands[] = { expressions[66] }; + expressions[67] = BinaryenCallImport(the_module, "check", operands, 1, 0); + } + relooperBlocks[1] = RelooperAddBlock(the_relooper, expressions[67]); + expressions[68] = BinaryenConst(the_module, BinaryenLiteralInt32(2)); + { + BinaryenExpressionRef operands[] = { expressions[68] }; + expressions[69] = BinaryenCallImport(the_module, "check", operands, 1, 0); + } + relooperBlocks[2] = RelooperAddBlock(the_relooper, expressions[69]); + expressions[70] = BinaryenConst(the_module, BinaryenLiteralInt32(3)); + { + BinaryenExpressionRef operands[] = { expressions[70] }; + expressions[71] = BinaryenCallImport(the_module, "check", operands, 1, 0); + } + relooperBlocks[3] = RelooperAddBlock(the_relooper, expressions[71]); + expressions[72] = BinaryenConst(the_module, BinaryenLiteralInt32(55)); + RelooperAddBranch(relooperBlocks[0], relooperBlocks[1], expressions[72], expressions[0]); RelooperAddBranch(relooperBlocks[0], relooperBlocks[2], expressions[0], expressions[0]); RelooperAddBranch(relooperBlocks[1], relooperBlocks[3], expressions[0], expressions[0]); RelooperAddBranch(relooperBlocks[2], relooperBlocks[3], expressions[0], expressions[0]); - expressions[48] = RelooperRenderAndDispose(the_relooper, relooperBlocks[0], 0, the_module); + expressions[73] = RelooperRenderAndDispose(the_relooper, relooperBlocks[0], 0, the_module); { BinaryenType varTypes[] = { 1 }; - functions[9] = BinaryenAddFunction(the_module, "if-else", functionTypes[0], varTypes, 1, expressions[48]); + functions[9] = BinaryenAddFunction(the_module, "if-else", functionTypes[0], varTypes, 1, expressions[73]); } the_relooper = RelooperCreate(); - expressions[49] = BinaryenConst(the_module, BinaryenLiteralInt32(0)); - relooperBlocks[0] = RelooperAddBlock(the_relooper, expressions[49]); - expressions[50] = BinaryenConst(the_module, BinaryenLiteralInt32(1)); - relooperBlocks[1] = RelooperAddBlock(the_relooper, expressions[50]); - expressions[51] = BinaryenConst(the_module, BinaryenLiteralInt32(2)); - relooperBlocks[2] = RelooperAddBlock(the_relooper, expressions[51]); + expressions[74] = BinaryenConst(the_module, BinaryenLiteralInt32(0)); + { + BinaryenExpressionRef operands[] = { expressions[74] }; + expressions[75] = BinaryenCallImport(the_module, "check", operands, 1, 0); + } + relooperBlocks[0] = RelooperAddBlock(the_relooper, expressions[75]); + expressions[76] = BinaryenConst(the_module, BinaryenLiteralInt32(1)); + { + BinaryenExpressionRef operands[] = { expressions[76] }; + expressions[77] = BinaryenCallImport(the_module, "check", operands, 1, 0); + } + relooperBlocks[1] = RelooperAddBlock(the_relooper, expressions[77]); + expressions[78] = BinaryenConst(the_module, BinaryenLiteralInt32(2)); + { + BinaryenExpressionRef operands[] = { expressions[78] }; + expressions[79] = BinaryenCallImport(the_module, "check", operands, 1, 0); + } + relooperBlocks[2] = RelooperAddBlock(the_relooper, expressions[79]); RelooperAddBranch(relooperBlocks[0], relooperBlocks[1], expressions[0], expressions[0]); - expressions[52] = BinaryenConst(the_module, BinaryenLiteralInt32(10)); - RelooperAddBranch(relooperBlocks[1], relooperBlocks[0], expressions[52], expressions[0]); + expressions[80] = BinaryenConst(the_module, BinaryenLiteralInt32(10)); + RelooperAddBranch(relooperBlocks[1], relooperBlocks[0], expressions[80], expressions[0]); RelooperAddBranch(relooperBlocks[1], relooperBlocks[2], expressions[0], expressions[0]); - expressions[53] = RelooperRenderAndDispose(the_relooper, relooperBlocks[0], 0, the_module); + expressions[81] = RelooperRenderAndDispose(the_relooper, relooperBlocks[0], 0, the_module); { BinaryenType varTypes[] = { 1 }; - functions[10] = BinaryenAddFunction(the_module, "loop-tail", functionTypes[0], varTypes, 1, expressions[53]); + functions[10] = BinaryenAddFunction(the_module, "loop-tail", functionTypes[0], varTypes, 1, expressions[81]); } the_relooper = RelooperCreate(); - expressions[54] = BinaryenConst(the_module, BinaryenLiteralInt32(0)); - relooperBlocks[0] = RelooperAddBlock(the_relooper, expressions[54]); - expressions[55] = BinaryenConst(the_module, BinaryenLiteralInt32(1)); - relooperBlocks[1] = RelooperAddBlock(the_relooper, expressions[55]); - expressions[56] = BinaryenConst(the_module, BinaryenLiteralInt32(2)); - relooperBlocks[2] = RelooperAddBlock(the_relooper, expressions[56]); - expressions[57] = BinaryenConst(the_module, BinaryenLiteralInt32(3)); - relooperBlocks[3] = RelooperAddBlock(the_relooper, expressions[57]); - expressions[58] = BinaryenConst(the_module, BinaryenLiteralInt32(4)); - relooperBlocks[4] = RelooperAddBlock(the_relooper, expressions[58]); - expressions[59] = BinaryenConst(the_module, BinaryenLiteralInt32(5)); - relooperBlocks[5] = RelooperAddBlock(the_relooper, expressions[59]); - expressions[60] = BinaryenConst(the_module, BinaryenLiteralInt32(6)); - relooperBlocks[6] = RelooperAddBlock(the_relooper, expressions[60]); - expressions[61] = BinaryenConst(the_module, BinaryenLiteralInt32(10)); - RelooperAddBranch(relooperBlocks[0], relooperBlocks[1], expressions[0], expressions[61]); - expressions[62] = BinaryenConst(the_module, BinaryenLiteralInt32(-2)); - RelooperAddBranch(relooperBlocks[1], relooperBlocks[2], expressions[62], expressions[0]); - expressions[63] = BinaryenConst(the_module, BinaryenLiteralInt32(20)); - RelooperAddBranch(relooperBlocks[1], relooperBlocks[6], expressions[0], expressions[63]); - expressions[64] = BinaryenConst(the_module, BinaryenLiteralInt32(-6)); - RelooperAddBranch(relooperBlocks[2], relooperBlocks[3], expressions[64], expressions[0]); - expressions[65] = BinaryenConst(the_module, BinaryenLiteralInt32(30)); - RelooperAddBranch(relooperBlocks[2], relooperBlocks[1], expressions[0], expressions[65]); - expressions[66] = BinaryenConst(the_module, BinaryenLiteralInt32(-10)); - RelooperAddBranch(relooperBlocks[3], relooperBlocks[4], expressions[66], expressions[0]); + expressions[82] = BinaryenConst(the_module, BinaryenLiteralInt32(0)); + { + BinaryenExpressionRef operands[] = { expressions[82] }; + expressions[83] = BinaryenCallImport(the_module, "check", operands, 1, 0); + } + relooperBlocks[0] = RelooperAddBlock(the_relooper, expressions[83]); + expressions[84] = BinaryenConst(the_module, BinaryenLiteralInt32(1)); + { + BinaryenExpressionRef operands[] = { expressions[84] }; + expressions[85] = BinaryenCallImport(the_module, "check", operands, 1, 0); + } + relooperBlocks[1] = RelooperAddBlock(the_relooper, expressions[85]); + expressions[86] = BinaryenConst(the_module, BinaryenLiteralInt32(2)); + { + BinaryenExpressionRef operands[] = { expressions[86] }; + expressions[87] = BinaryenCallImport(the_module, "check", operands, 1, 0); + } + relooperBlocks[2] = RelooperAddBlock(the_relooper, expressions[87]); + expressions[88] = BinaryenConst(the_module, BinaryenLiteralInt32(3)); + { + BinaryenExpressionRef operands[] = { expressions[88] }; + expressions[89] = BinaryenCallImport(the_module, "check", operands, 1, 0); + } + relooperBlocks[3] = RelooperAddBlock(the_relooper, expressions[89]); + expressions[90] = BinaryenConst(the_module, BinaryenLiteralInt32(4)); + { + BinaryenExpressionRef operands[] = { expressions[90] }; + expressions[91] = BinaryenCallImport(the_module, "check", operands, 1, 0); + } + relooperBlocks[4] = RelooperAddBlock(the_relooper, expressions[91]); + expressions[92] = BinaryenConst(the_module, BinaryenLiteralInt32(5)); + { + BinaryenExpressionRef operands[] = { expressions[92] }; + expressions[93] = BinaryenCallImport(the_module, "check", operands, 1, 0); + } + relooperBlocks[5] = RelooperAddBlock(the_relooper, expressions[93]); + expressions[94] = BinaryenConst(the_module, BinaryenLiteralInt32(6)); + { + BinaryenExpressionRef operands[] = { expressions[94] }; + expressions[95] = BinaryenCallImport(the_module, "check", operands, 1, 0); + } + relooperBlocks[6] = RelooperAddBlock(the_relooper, expressions[95]); + expressions[96] = BinaryenConst(the_module, BinaryenLiteralInt32(10)); + RelooperAddBranch(relooperBlocks[0], relooperBlocks[1], expressions[0], expressions[96]); + expressions[97] = BinaryenConst(the_module, BinaryenLiteralInt32(-2)); + RelooperAddBranch(relooperBlocks[1], relooperBlocks[2], expressions[97], expressions[0]); + expressions[98] = BinaryenConst(the_module, BinaryenLiteralInt32(20)); + RelooperAddBranch(relooperBlocks[1], relooperBlocks[6], expressions[0], expressions[98]); + expressions[99] = BinaryenConst(the_module, BinaryenLiteralInt32(-6)); + RelooperAddBranch(relooperBlocks[2], relooperBlocks[3], expressions[99], expressions[0]); + expressions[100] = BinaryenConst(the_module, BinaryenLiteralInt32(30)); + RelooperAddBranch(relooperBlocks[2], relooperBlocks[1], expressions[0], expressions[100]); + expressions[101] = BinaryenConst(the_module, BinaryenLiteralInt32(-10)); + RelooperAddBranch(relooperBlocks[3], relooperBlocks[4], expressions[101], expressions[0]); RelooperAddBranch(relooperBlocks[3], relooperBlocks[5], expressions[0], expressions[0]); RelooperAddBranch(relooperBlocks[4], relooperBlocks[5], expressions[0], expressions[0]); - expressions[67] = BinaryenConst(the_module, BinaryenLiteralInt32(40)); - RelooperAddBranch(relooperBlocks[5], relooperBlocks[6], expressions[0], expressions[67]); - expressions[68] = RelooperRenderAndDispose(the_relooper, relooperBlocks[0], 0, the_module); + expressions[102] = BinaryenConst(the_module, BinaryenLiteralInt32(40)); + RelooperAddBranch(relooperBlocks[5], relooperBlocks[6], expressions[0], expressions[102]); + expressions[103] = RelooperRenderAndDispose(the_relooper, relooperBlocks[0], 0, the_module); { BinaryenType varTypes[] = { 1 }; - functions[11] = BinaryenAddFunction(the_module, "nontrivial-loop-plus-phi-to-head", functionTypes[0], varTypes, 1, expressions[68]); + functions[11] = BinaryenAddFunction(the_module, "nontrivial-loop-plus-phi-to-head", functionTypes[0], varTypes, 1, expressions[103]); } the_relooper = RelooperCreate(); - expressions[69] = BinaryenConst(the_module, BinaryenLiteralInt32(-99)); - expressions[70] = BinaryenConst(the_module, BinaryenLiteralInt32(0)); - relooperBlocks[0] = RelooperAddBlockWithSwitch(the_relooper, expressions[70], expressions[69]); - expressions[71] = BinaryenConst(the_module, BinaryenLiteralInt32(1)); - relooperBlocks[1] = RelooperAddBlock(the_relooper, expressions[71]); - expressions[72] = BinaryenConst(the_module, BinaryenLiteralInt32(2)); - relooperBlocks[2] = RelooperAddBlock(the_relooper, expressions[72]); - expressions[73] = BinaryenConst(the_module, BinaryenLiteralInt32(3)); - relooperBlocks[3] = RelooperAddBlock(the_relooper, expressions[73]); + expressions[104] = BinaryenConst(the_module, BinaryenLiteralInt32(-99)); + expressions[105] = BinaryenConst(the_module, BinaryenLiteralInt32(0)); + { + BinaryenExpressionRef operands[] = { expressions[105] }; + expressions[106] = BinaryenCallImport(the_module, "check", operands, 1, 0); + } + relooperBlocks[0] = RelooperAddBlockWithSwitch(the_relooper, expressions[106], expressions[104]); + expressions[107] = BinaryenConst(the_module, BinaryenLiteralInt32(1)); + { + BinaryenExpressionRef operands[] = { expressions[107] }; + expressions[108] = BinaryenCallImport(the_module, "check", operands, 1, 0); + } + relooperBlocks[1] = RelooperAddBlock(the_relooper, expressions[108]); + expressions[109] = BinaryenConst(the_module, BinaryenLiteralInt32(2)); + { + BinaryenExpressionRef operands[] = { expressions[109] }; + expressions[110] = BinaryenCallImport(the_module, "check", operands, 1, 0); + } + relooperBlocks[2] = RelooperAddBlock(the_relooper, expressions[110]); + expressions[111] = BinaryenConst(the_module, BinaryenLiteralInt32(3)); + { + BinaryenExpressionRef operands[] = { expressions[111] }; + expressions[112] = BinaryenCallImport(the_module, "check", operands, 1, 0); + } + relooperBlocks[3] = RelooperAddBlock(the_relooper, expressions[112]); { BinaryenIndex indexes[] = { 2, 5 }; RelooperAddBranchForSwitch(relooperBlocks[0], relooperBlocks[1], indexes, 2, expressions[0]); } - expressions[74] = BinaryenConst(the_module, BinaryenLiteralInt32(55)); + expressions[113] = BinaryenConst(the_module, BinaryenLiteralInt32(55)); { BinaryenIndex indexes[] = { 4 }; - RelooperAddBranchForSwitch(relooperBlocks[0], relooperBlocks[2], indexes, 1, expressions[74]); + RelooperAddBranchForSwitch(relooperBlocks[0], relooperBlocks[2], indexes, 1, expressions[113]); } { BinaryenIndex indexes[] = { 0 }; RelooperAddBranchForSwitch(relooperBlocks[0], relooperBlocks[3], indexes, 0, expressions[0]); } - expressions[75] = RelooperRenderAndDispose(the_relooper, relooperBlocks[0], 0, the_module); + expressions[114] = RelooperRenderAndDispose(the_relooper, relooperBlocks[0], 0, the_module); { BinaryenType varTypes[] = { 1 }; - functions[12] = BinaryenAddFunction(the_module, "switch", functionTypes[0], varTypes, 1, expressions[75]); + functions[12] = BinaryenAddFunction(the_module, "switch", functionTypes[0], varTypes, 1, expressions[114]); } the_relooper = RelooperCreate(); - expressions[76] = BinaryenConst(the_module, BinaryenLiteralInt32(0)); - relooperBlocks[0] = RelooperAddBlock(the_relooper, expressions[76]); - expressions[77] = BinaryenConst(the_module, BinaryenLiteralInt32(1)); - relooperBlocks[1] = RelooperAddBlock(the_relooper, expressions[77]); - expressions[78] = BinaryenConst(the_module, BinaryenLiteralInt32(2)); - relooperBlocks[2] = RelooperAddBlock(the_relooper, expressions[78]); - expressions[79] = BinaryenConst(the_module, BinaryenLiteralInt32(10)); - RelooperAddBranch(relooperBlocks[0], relooperBlocks[1], expressions[79], expressions[0]); + expressions[115] = BinaryenConst(the_module, BinaryenLiteralInt32(0)); + { + BinaryenExpressionRef operands[] = { expressions[115] }; + expressions[116] = BinaryenCallImport(the_module, "check", operands, 1, 0); + } + relooperBlocks[0] = RelooperAddBlock(the_relooper, expressions[116]); + expressions[117] = BinaryenConst(the_module, BinaryenLiteralInt32(1)); + { + BinaryenExpressionRef operands[] = { expressions[117] }; + expressions[118] = BinaryenCallImport(the_module, "check", operands, 1, 0); + } + relooperBlocks[1] = RelooperAddBlock(the_relooper, expressions[118]); + expressions[119] = BinaryenConst(the_module, BinaryenLiteralInt32(2)); + { + BinaryenExpressionRef operands[] = { expressions[119] }; + expressions[120] = BinaryenCallImport(the_module, "check", operands, 1, 0); + } + relooperBlocks[2] = RelooperAddBlock(the_relooper, expressions[120]); + expressions[121] = BinaryenConst(the_module, BinaryenLiteralInt32(10)); + RelooperAddBranch(relooperBlocks[0], relooperBlocks[1], expressions[121], expressions[0]); RelooperAddBranch(relooperBlocks[0], relooperBlocks[2], expressions[0], expressions[0]); RelooperAddBranch(relooperBlocks[1], relooperBlocks[2], expressions[0], expressions[0]); RelooperAddBranch(relooperBlocks[2], relooperBlocks[1], expressions[0], expressions[0]); - expressions[80] = RelooperRenderAndDispose(the_relooper, relooperBlocks[0], 3, the_module); + expressions[122] = RelooperRenderAndDispose(the_relooper, relooperBlocks[0], 3, the_module); { BinaryenType varTypes[] = { 1, 1, 2, 1, 3, 4, 1 }; - functions[13] = BinaryenAddFunction(the_module, "duffs-device", functionTypes[0], varTypes, 7, expressions[80]); + functions[13] = BinaryenAddFunction(the_module, "duffs-device", functionTypes[0], varTypes, 7, expressions[122]); } { BinaryenIndex paramTypes[] = { 0 }; - functionTypes[1] = BinaryenAddFunctionType(the_module, "i", 1, paramTypes, 0); + functionTypes[2] = BinaryenAddFunctionType(the_module, "i", 1, paramTypes, 0); } the_relooper = RelooperCreate(); - expressions[81] = BinaryenConst(the_module, BinaryenLiteralInt32(42)); - expressions[82] = BinaryenConst(the_module, BinaryenLiteralInt32(1337)); - expressions[83] = BinaryenReturn(the_module, expressions[82]); + expressions[123] = BinaryenConst(the_module, BinaryenLiteralInt32(42)); { - BinaryenExpressionRef children[] = { expressions[81], expressions[83] }; - expressions[84] = BinaryenBlock(the_module, "the-list", children, 2); + BinaryenExpressionRef operands[] = { expressions[123] }; + expressions[124] = BinaryenCallImport(the_module, "check", operands, 1, 0); } - relooperBlocks[0] = RelooperAddBlock(the_relooper, expressions[84]); - expressions[85] = RelooperRenderAndDispose(the_relooper, relooperBlocks[0], 0, the_module); + expressions[125] = BinaryenConst(the_module, BinaryenLiteralInt32(1337)); + expressions[126] = BinaryenReturn(the_module, expressions[125]); + { + BinaryenExpressionRef children[] = { expressions[124], expressions[126] }; + expressions[127] = BinaryenBlock(the_module, "the-list", children, 2); + } + relooperBlocks[0] = RelooperAddBlock(the_relooper, expressions[127]); + expressions[128] = RelooperRenderAndDispose(the_relooper, relooperBlocks[0], 0, the_module); { BinaryenType varTypes[] = { 1 }; - functions[14] = BinaryenAddFunction(the_module, "return", functionTypes[1], varTypes, 1, expressions[85]); + functions[14] = BinaryenAddFunction(the_module, "return", functionTypes[2], varTypes, 1, expressions[128]); } raw: BinaryenModulePrint(the_module); (module (memory 0) (type $v (func)) + (type $vi (func (param i32))) (type $i (func (result i32))) + (import $check "module" "check" (param i32)) (func $just-one-block (type $v) (local $0 i32) - (i32.const 1337) + (call_import $check + (i32.const 1337) + ) ) (func $two-blocks (type $v) (local $0 i32) - (block - (i32.const 0) + (block $block$2$break + (call_import $check + (i32.const 0) + ) + (block + (br $block$2$break) + ) ) (block - (i32.const 1) + (call_import $check + (i32.const 1) + ) ) ) (func $two-blocks-plus-code (type $v) (local $0 i32) - (block - (i32.const 0) + (block $block$2$break + (call_import $check + (i32.const 0) + ) (block (i32.const 77) + (br $block$2$break) ) ) (block - (i32.const 1) + (call_import $check + (i32.const 1) + ) ) ) (func $loop (type $v) (local $0 i32) - (loop $shape$0$break $shape$0$continue - (block - (i32.const 0) + (loop $shape$0$continue + (block $block$2$break + (call_import $check + (i32.const 0) + ) + (block + (br $block$2$break) + ) ) (block - (i32.const 1) + (call_import $check + (i32.const 1) + ) (block (br $shape$0$continue) ) @@ -1822,15 +2274,20 @@ raw: ) (func $loop-plus-code (type $v) (local $0 i32) - (loop $shape$0$break $shape$0$continue - (block - (i32.const 0) + (loop $shape$0$continue + (block $block$2$break + (call_import $check + (i32.const 0) + ) (block (i32.const 33) + (br $block$2$break) ) ) (block - (i32.const 1) + (call_import $check + (i32.const 1) + ) (block (i32.const -66) (br $shape$0$continue) @@ -1840,14 +2297,18 @@ raw: ) (func $split (type $v) (local $0 i32) - (i32.const 0) - (block $shape$1$break - (if - (i32.const 55) - (block + (call_import $check + (i32.const 0) + ) + (if + (i32.const 55) + (block + (call_import $check (i32.const 1) ) - (block + ) + (block + (call_import $check (i32.const 2) ) ) @@ -1855,19 +2316,23 @@ raw: ) (func $split-plus-code (type $v) (local $0 i32) - (i32.const 0) - (block $shape$1$break - (if - (i32.const 55) + (call_import $check + (i32.const 0) + ) + (if + (i32.const 55) + (block + (i32.const 10) (block - (i32.const 10) - (block + (call_import $check (i32.const 1) ) ) + ) + (block + (i32.const 20) (block - (i32.const 20) - (block + (call_import $check (i32.const 2) ) ) @@ -1876,166 +2341,197 @@ raw: ) (func $if (type $v) (local $0 i32) - (block - (i32.const 0) - (block $shape$1$break - (if - (i32.const 55) - (block + (block $block$3$break + (call_import $check + (i32.const 0) + ) + (if + (i32.const 55) + (block + (call_import $check (i32.const 1) - (block - (br $shape$1$break) - ) + ) + (block + (br $block$3$break) ) ) + (br $block$3$break) ) ) (block - (i32.const 2) + (call_import $check + (i32.const 2) + ) ) ) (func $if-plus-code (type $v) (local $0 i32) - (block - (i32.const 0) - (block $shape$1$break - (if - (i32.const 55) + (block $block$3$break + (call_import $check + (i32.const 0) + ) + (if + (i32.const 55) + (block + (i32.const -1) (block - (i32.const -1) - (block + (call_import $check (i32.const 1) - (block - (i32.const -3) - (br $shape$1$break) - ) + ) + (block + (i32.const -3) + (br $block$3$break) ) ) + ) + (block (i32.const -2) + (br $block$3$break) ) ) ) (block - (i32.const 2) + (call_import $check + (i32.const 2) + ) ) ) (func $if-else (type $v) (local $0 i32) - (block - (i32.const 0) - (block $shape$1$break - (if - (i32.const 55) - (block + (block $block$4$break + (call_import $check + (i32.const 0) + ) + (if + (i32.const 55) + (block + (call_import $check (i32.const 1) - (block - (br $shape$1$break) - ) ) (block + (br $block$4$break) + ) + ) + (block + (call_import $check (i32.const 2) - (block - (br $shape$1$break) - ) + ) + (block + (br $block$4$break) ) ) ) ) (block - (i32.const 3) + (call_import $check + (i32.const 3) + ) ) ) (func $loop-tail (type $v) (local $0 i32) - (loop $shape$0$break $shape$0$continue - (block - (i32.const 0) - ) - (block - (i32.const 1) - (if - (i32.const 10) - (br $shape$0$continue) - (br $shape$0$break) + (block $block$3$break + (loop $shape$0$continue + (block $block$2$break + (call_import $check + (i32.const 0) + ) + (block + (br $block$2$break) + ) + ) + (block + (call_import $check + (i32.const 1) + ) + (if + (i32.const 10) + (br $shape$0$continue) + (br $block$3$break) + ) ) ) ) (block - (i32.const 2) + (call_import $check + (i32.const 2) + ) ) ) (func $nontrivial-loop-plus-phi-to-head (type $v) (local $0 i32) - (block - (i32.const 0) + (block $block$2$break + (call_import $check + (i32.const 0) + ) (block (i32.const 10) + (br $block$2$break) ) ) (block - (loop $shape$1$break $shape$1$continue - (block - (i32.const 1) - (if - (i32.eqz - (i32.const -2) - ) - (block - (i32.const 20) - (br $shape$1$break) - ) - ) - ) - (block - (i32.const 2) - (if - (i32.const -6) - (block - (set_local $0 - (i32.const 4) + (block $block$7$break + (block $block$4$break + (loop $shape$1$continue + (block $block$3$break + (call_import $check + (i32.const 1) + ) + (if + (i32.const -2) + (br $block$3$break) + (block + (i32.const 20) + (br $block$7$break) + ) ) - (br $shape$1$break) ) (block - (i32.const 30) - (br $shape$1$continue) + (call_import $check + (i32.const 2) + ) + (if + (i32.const -6) + (br $block$4$break) + (block + (i32.const 30) + (br $shape$1$continue) + ) + ) ) ) ) - ) - (block - (block $shape$4$break - (if - (i32.eq - (get_local $0) - (i32.const 4) + (block + (block $block$6$break + (call_import $check + (i32.const 3) ) - (block + (if + (i32.const -10) (block - (i32.const 3) - (block $shape$6$break - (if - (i32.const -10) - (block - (i32.const 4) - (block - (br $shape$6$break) - ) - ) - ) + (call_import $check + (i32.const 4) ) - ) - (block - (i32.const 5) (block - (i32.const 40) - (br $shape$4$break) + (br $block$6$break) ) ) + (br $block$6$break) + ) + ) + (block + (call_import $check + (i32.const 5) + ) + (block + (i32.const 40) + (br $block$7$break) ) ) ) - (block + ) + (block + (call_import $check (i32.const 6) ) ) @@ -2043,38 +2539,44 @@ raw: ) (func $switch (type $v) (local $0 i32) - (i32.const 0) - (block $shape$1$break - (block $switch$1$leave - (block $switch$1$default - (block $switch$1$case$3 - (block $switch$1$case$2 - (br_table $switch$1$default $switch$1$default $switch$1$case$2 $switch$1$default $switch$1$case$3 $switch$1$case$2 $switch$1$default - (i32.const -99) - ) + (call_import $check + (i32.const 0) + ) + (block $switch$1$leave + (block $switch$1$default + (block $switch$1$case$3 + (block $switch$1$case$2 + (br_table $switch$1$default $switch$1$default $switch$1$case$2 $switch$1$default $switch$1$case$3 $switch$1$case$2 $switch$1$default + (i32.const -99) ) + ) + (block (block - (block + (call_import $check (i32.const 1) ) ) - (br $switch$1$leave) ) + (br $switch$1$leave) + ) + (block + (i32.const 55) (block - (i32.const 55) - (block + (call_import $check (i32.const 2) ) ) - (br $switch$1$leave) ) + (br $switch$1$leave) + ) + (block (block - (block + (call_import $check (i32.const 3) ) ) - (br $switch$1$leave) ) + (br $switch$1$leave) ) ) (func $duffs-device (type $v) @@ -2086,52 +2588,66 @@ raw: (local $5 f64) (local $6 i32) (block - (i32.const 0) + (block $block$3$break + (block $block$2$break + (call_import $check + (i32.const 0) + ) + (if + (i32.const 10) + (block + (set_local $3 + (i32.const 2) + ) + (br $block$2$break) + ) + (block + (set_local $3 + (i32.const 3) + ) + (br $block$3$break) + ) + ) + ) + ) + ) + (loop $shape$1$continue (if - (i32.const 10) - (set_local $3 + (i32.eq + (get_local $3) (i32.const 2) ) - (set_local $3 - (i32.const 3) + (block + (set_local $3 + (i32.const 0) + ) + (call_import $check + (i32.const 1) + ) + (block + (set_local $3 + (i32.const 3) + ) + (br $shape$1$continue) + ) ) - ) - ) - (loop $shape$1$break $shape$1$continue - (block $shape$2$break (if (i32.eq (get_local $3) - (i32.const 2) + (i32.const 3) ) (block (set_local $3 (i32.const 0) ) - (i32.const 1) - (block - (set_local $3 - (i32.const 3) - ) - (br $shape$1$continue) - ) - ) - (if - (i32.eq - (get_local $3) - (i32.const 3) + (call_import $check + (i32.const 2) ) (block (set_local $3 - (i32.const 0) - ) - (i32.const 2) - (block - (set_local $3 - (i32.const 2) - ) - (br $shape$1$continue) + (i32.const 2) ) + (br $shape$1$continue) ) ) ) @@ -2141,7 +2657,9 @@ raw: (func $return (type $i) (result i32) (local $0 i32) (block $the-list - (i32.const 42) + (call_import $check + (i32.const 42) + ) (return (i32.const 1337) ) @@ -2156,22 +2674,179 @@ optimized: (module (memory 0) (type $v (func)) + (type $vi (func (param i32))) (type $i (func (result i32))) + (import $check "module" "check" (param i32)) (func $just-one-block (type $v) - (nop) + (call_import $check + (i32.const 1337) + ) + ) + (func $two-blocks (type $v) + (call_import $check + (i32.const 0) + ) + (call_import $check + (i32.const 1) + ) + ) + (func $loop (type $v) + (loop $shape$0$continue + (call_import $check + (i32.const 0) + ) + (call_import $check + (i32.const 1) + ) + (br $shape$0$continue) + ) + ) + (func $split (type $v) + (call_import $check + (i32.const 0) + ) + (if + (i32.const 55) + (call_import $check + (i32.const 1) + ) + (call_import $check + (i32.const 2) + ) + ) + ) + (func $if (type $v) + (call_import $check + (i32.const 0) + ) + (if + (i32.const 55) + (call_import $check + (i32.const 1) + ) + ) + (call_import $check + (i32.const 2) + ) + ) + (func $if-else (type $v) + (call_import $check + (i32.const 0) + ) + (if + (i32.const 55) + (call_import $check + (i32.const 1) + ) + (call_import $check + (i32.const 2) + ) + ) + (call_import $check + (i32.const 3) + ) + ) + (func $loop-tail (type $v) + (loop $block$3$break $shape$0$continue + (call_import $check + (i32.const 0) + ) + (call_import $check + (i32.const 1) + ) + (if + (i32.const 10) + (br $shape$0$continue) + (br $block$3$break) + ) + ) + (call_import $check + (i32.const 2) + ) + ) + (func $nontrivial-loop-plus-phi-to-head (type $v) + (call_import $check + (i32.const 0) + ) + (block $block$7$break + (loop $block$4$break $shape$1$continue + (call_import $check + (i32.const 1) + ) + (br_if $block$7$break + (i32.const 0) + ) + (call_import $check + (i32.const 2) + ) + (if + (i32.const -6) + (br $block$4$break) + (br $shape$1$continue) + ) + ) + (call_import $check + (i32.const 3) + ) + (if + (i32.const -10) + (call_import $check + (i32.const 4) + ) + ) + (call_import $check + (i32.const 5) + ) + ) + (call_import $check + (i32.const 6) + ) + ) + (func $switch (type $v) + (call_import $check + (i32.const 0) + ) + (block $switch$1$leave + (block $switch$1$default + (block $switch$1$case$3 + (block $switch$1$case$2 + (br_table $switch$1$default $switch$1$default $switch$1$case$2 $switch$1$default $switch$1$case$3 $switch$1$case$2 $switch$1$default + (i32.const -99) + ) + ) + (call_import $check + (i32.const 1) + ) + (br $switch$1$leave) + ) + (call_import $check + (i32.const 2) + ) + (br $switch$1$leave) + ) + (call_import $check + (i32.const 3) + ) + ) ) (func $duffs-device (type $v) (local $0 i32) + (call_import $check + (i32.const 0) + ) (set_local $0 (i32.const 2) ) - (loop $shape$1$break $shape$1$continue + (loop $shape$1$continue (if (i32.eq (get_local $0) (i32.const 2) ) (block + (call_import $check + (i32.const 1) + ) (set_local $0 (i32.const 3) ) @@ -2183,6 +2858,9 @@ optimized: (i32.const 3) ) (block + (call_import $check + (i32.const 2) + ) (set_local $0 (i32.const 2) ) @@ -2193,6 +2871,9 @@ optimized: ) ) (func $return (type $i) (result i32) + (call_import $check + (i32.const 42) + ) (i32.const 1337) ) ) diff --git a/test/example/c-api-kitchen-sink.txt.txt b/test/example/c-api-kitchen-sink.txt.txt index a9e599bef..96cbaaa00 100644 --- a/test/example/c-api-kitchen-sink.txt.txt +++ b/test/example/c-api-kitchen-sink.txt.txt @@ -364,40 +364,63 @@ (module (memory 0) (type $v (func)) + (type $vi (func (param i32))) (type $i (func (result i32))) + (import $check "module" "check" (param i32)) (func $just-one-block (type $v) (local $0 i32) - (i32.const 1337) + (call_import $check + (i32.const 1337) + ) ) (func $two-blocks (type $v) (local $0 i32) - (block - (i32.const 0) + (block $block$2$break + (call_import $check + (i32.const 0) + ) + (block + (br $block$2$break) + ) ) (block - (i32.const 1) + (call_import $check + (i32.const 1) + ) ) ) (func $two-blocks-plus-code (type $v) (local $0 i32) - (block - (i32.const 0) + (block $block$2$break + (call_import $check + (i32.const 0) + ) (block (i32.const 77) + (br $block$2$break) ) ) (block - (i32.const 1) + (call_import $check + (i32.const 1) + ) ) ) (func $loop (type $v) (local $0 i32) - (loop $shape$0$break $shape$0$continue - (block - (i32.const 0) + (loop $shape$0$continue + (block $block$2$break + (call_import $check + (i32.const 0) + ) + (block + (br $block$2$break) + ) ) (block - (i32.const 1) + (call_import $check + (i32.const 1) + ) (block (br $shape$0$continue) ) @@ -406,15 +429,20 @@ ) (func $loop-plus-code (type $v) (local $0 i32) - (loop $shape$0$break $shape$0$continue - (block - (i32.const 0) + (loop $shape$0$continue + (block $block$2$break + (call_import $check + (i32.const 0) + ) (block (i32.const 33) + (br $block$2$break) ) ) (block - (i32.const 1) + (call_import $check + (i32.const 1) + ) (block (i32.const -66) (br $shape$0$continue) @@ -424,14 +452,18 @@ ) (func $split (type $v) (local $0 i32) - (i32.const 0) - (block $shape$1$break - (if - (i32.const 55) - (block + (call_import $check + (i32.const 0) + ) + (if + (i32.const 55) + (block + (call_import $check (i32.const 1) ) - (block + ) + (block + (call_import $check (i32.const 2) ) ) @@ -439,19 +471,23 @@ ) (func $split-plus-code (type $v) (local $0 i32) - (i32.const 0) - (block $shape$1$break - (if - (i32.const 55) + (call_import $check + (i32.const 0) + ) + (if + (i32.const 55) + (block + (i32.const 10) (block - (i32.const 10) - (block + (call_import $check (i32.const 1) ) ) + ) + (block + (i32.const 20) (block - (i32.const 20) - (block + (call_import $check (i32.const 2) ) ) @@ -460,166 +496,197 @@ ) (func $if (type $v) (local $0 i32) - (block - (i32.const 0) - (block $shape$1$break - (if - (i32.const 55) - (block + (block $block$3$break + (call_import $check + (i32.const 0) + ) + (if + (i32.const 55) + (block + (call_import $check (i32.const 1) - (block - (br $shape$1$break) - ) + ) + (block + (br $block$3$break) ) ) + (br $block$3$break) ) ) (block - (i32.const 2) + (call_import $check + (i32.const 2) + ) ) ) (func $if-plus-code (type $v) (local $0 i32) - (block - (i32.const 0) - (block $shape$1$break - (if - (i32.const 55) + (block $block$3$break + (call_import $check + (i32.const 0) + ) + (if + (i32.const 55) + (block + (i32.const -1) (block - (i32.const -1) - (block + (call_import $check (i32.const 1) - (block - (i32.const -3) - (br $shape$1$break) - ) + ) + (block + (i32.const -3) + (br $block$3$break) ) ) + ) + (block (i32.const -2) + (br $block$3$break) ) ) ) (block - (i32.const 2) + (call_import $check + (i32.const 2) + ) ) ) (func $if-else (type $v) (local $0 i32) - (block - (i32.const 0) - (block $shape$1$break - (if - (i32.const 55) - (block + (block $block$4$break + (call_import $check + (i32.const 0) + ) + (if + (i32.const 55) + (block + (call_import $check (i32.const 1) - (block - (br $shape$1$break) - ) ) (block + (br $block$4$break) + ) + ) + (block + (call_import $check (i32.const 2) - (block - (br $shape$1$break) - ) + ) + (block + (br $block$4$break) ) ) ) ) (block - (i32.const 3) + (call_import $check + (i32.const 3) + ) ) ) (func $loop-tail (type $v) (local $0 i32) - (loop $shape$0$break $shape$0$continue - (block - (i32.const 0) - ) - (block - (i32.const 1) - (if - (i32.const 10) - (br $shape$0$continue) - (br $shape$0$break) + (block $block$3$break + (loop $shape$0$continue + (block $block$2$break + (call_import $check + (i32.const 0) + ) + (block + (br $block$2$break) + ) + ) + (block + (call_import $check + (i32.const 1) + ) + (if + (i32.const 10) + (br $shape$0$continue) + (br $block$3$break) + ) ) ) ) (block - (i32.const 2) + (call_import $check + (i32.const 2) + ) ) ) (func $nontrivial-loop-plus-phi-to-head (type $v) (local $0 i32) - (block - (i32.const 0) + (block $block$2$break + (call_import $check + (i32.const 0) + ) (block (i32.const 10) + (br $block$2$break) ) ) (block - (loop $shape$1$break $shape$1$continue - (block - (i32.const 1) - (if - (i32.eqz - (i32.const -2) - ) - (block - (i32.const 20) - (br $shape$1$break) - ) - ) - ) - (block - (i32.const 2) - (if - (i32.const -6) - (block - (set_local $0 - (i32.const 4) + (block $block$7$break + (block $block$4$break + (loop $shape$1$continue + (block $block$3$break + (call_import $check + (i32.const 1) + ) + (if + (i32.const -2) + (br $block$3$break) + (block + (i32.const 20) + (br $block$7$break) + ) ) - (br $shape$1$break) ) (block - (i32.const 30) - (br $shape$1$continue) + (call_import $check + (i32.const 2) + ) + (if + (i32.const -6) + (br $block$4$break) + (block + (i32.const 30) + (br $shape$1$continue) + ) + ) ) ) ) - ) - (block - (block $shape$4$break - (if - (i32.eq - (get_local $0) - (i32.const 4) + (block + (block $block$6$break + (call_import $check + (i32.const 3) ) - (block + (if + (i32.const -10) (block - (i32.const 3) - (block $shape$6$break - (if - (i32.const -10) - (block - (i32.const 4) - (block - (br $shape$6$break) - ) - ) - ) + (call_import $check + (i32.const 4) ) - ) - (block - (i32.const 5) (block - (i32.const 40) - (br $shape$4$break) + (br $block$6$break) ) ) + (br $block$6$break) + ) + ) + (block + (call_import $check + (i32.const 5) + ) + (block + (i32.const 40) + (br $block$7$break) ) ) ) - (block + ) + (block + (call_import $check (i32.const 6) ) ) @@ -627,38 +694,44 @@ ) (func $switch (type $v) (local $0 i32) - (i32.const 0) - (block $shape$1$break - (block $switch$1$leave - (block $switch$1$default - (block $switch$1$case$3 - (block $switch$1$case$2 - (br_table $switch$1$default $switch$1$default $switch$1$case$2 $switch$1$default $switch$1$case$3 $switch$1$case$2 $switch$1$default - (i32.const -99) - ) + (call_import $check + (i32.const 0) + ) + (block $switch$1$leave + (block $switch$1$default + (block $switch$1$case$3 + (block $switch$1$case$2 + (br_table $switch$1$default $switch$1$default $switch$1$case$2 $switch$1$default $switch$1$case$3 $switch$1$case$2 $switch$1$default + (i32.const -99) ) + ) + (block (block - (block + (call_import $check (i32.const 1) ) ) - (br $switch$1$leave) ) + (br $switch$1$leave) + ) + (block + (i32.const 55) (block - (i32.const 55) - (block + (call_import $check (i32.const 2) ) ) - (br $switch$1$leave) ) + (br $switch$1$leave) + ) + (block (block - (block + (call_import $check (i32.const 3) ) ) - (br $switch$1$leave) ) + (br $switch$1$leave) ) ) (func $duffs-device (type $v) @@ -670,52 +743,66 @@ (local $5 f64) (local $6 i32) (block - (i32.const 0) + (block $block$3$break + (block $block$2$break + (call_import $check + (i32.const 0) + ) + (if + (i32.const 10) + (block + (set_local $3 + (i32.const 2) + ) + (br $block$2$break) + ) + (block + (set_local $3 + (i32.const 3) + ) + (br $block$3$break) + ) + ) + ) + ) + ) + (loop $shape$1$continue (if - (i32.const 10) - (set_local $3 + (i32.eq + (get_local $3) (i32.const 2) ) - (set_local $3 - (i32.const 3) + (block + (set_local $3 + (i32.const 0) + ) + (call_import $check + (i32.const 1) + ) + (block + (set_local $3 + (i32.const 3) + ) + (br $shape$1$continue) + ) ) - ) - ) - (loop $shape$1$break $shape$1$continue - (block $shape$2$break (if (i32.eq (get_local $3) - (i32.const 2) + (i32.const 3) ) (block (set_local $3 (i32.const 0) ) - (i32.const 1) - (block - (set_local $3 - (i32.const 3) - ) - (br $shape$1$continue) - ) - ) - (if - (i32.eq - (get_local $3) - (i32.const 3) + (call_import $check + (i32.const 2) ) (block (set_local $3 - (i32.const 0) - ) - (i32.const 2) - (block - (set_local $3 - (i32.const 2) - ) - (br $shape$1$continue) + (i32.const 2) ) + (br $shape$1$continue) ) ) ) @@ -725,7 +812,9 @@ (func $return (type $i) (result i32) (local $0 i32) (block $the-list - (i32.const 42) + (call_import $check + (i32.const 42) + ) (return (i32.const 1337) ) @@ -735,22 +824,179 @@ (module (memory 0) (type $v (func)) + (type $vi (func (param i32))) (type $i (func (result i32))) + (import $check "module" "check" (param i32)) (func $just-one-block (type $v) - (nop) + (call_import $check + (i32.const 1337) + ) + ) + (func $two-blocks (type $v) + (call_import $check + (i32.const 0) + ) + (call_import $check + (i32.const 1) + ) + ) + (func $loop (type $v) + (loop $shape$0$continue + (call_import $check + (i32.const 0) + ) + (call_import $check + (i32.const 1) + ) + (br $shape$0$continue) + ) + ) + (func $split (type $v) + (call_import $check + (i32.const 0) + ) + (if + (i32.const 55) + (call_import $check + (i32.const 1) + ) + (call_import $check + (i32.const 2) + ) + ) + ) + (func $if (type $v) + (call_import $check + (i32.const 0) + ) + (if + (i32.const 55) + (call_import $check + (i32.const 1) + ) + ) + (call_import $check + (i32.const 2) + ) + ) + (func $if-else (type $v) + (call_import $check + (i32.const 0) + ) + (if + (i32.const 55) + (call_import $check + (i32.const 1) + ) + (call_import $check + (i32.const 2) + ) + ) + (call_import $check + (i32.const 3) + ) + ) + (func $loop-tail (type $v) + (loop $block$3$break $shape$0$continue + (call_import $check + (i32.const 0) + ) + (call_import $check + (i32.const 1) + ) + (if + (i32.const 10) + (br $shape$0$continue) + (br $block$3$break) + ) + ) + (call_import $check + (i32.const 2) + ) + ) + (func $nontrivial-loop-plus-phi-to-head (type $v) + (call_import $check + (i32.const 0) + ) + (block $block$7$break + (loop $block$4$break $shape$1$continue + (call_import $check + (i32.const 1) + ) + (br_if $block$7$break + (i32.const 0) + ) + (call_import $check + (i32.const 2) + ) + (if + (i32.const -6) + (br $block$4$break) + (br $shape$1$continue) + ) + ) + (call_import $check + (i32.const 3) + ) + (if + (i32.const -10) + (call_import $check + (i32.const 4) + ) + ) + (call_import $check + (i32.const 5) + ) + ) + (call_import $check + (i32.const 6) + ) + ) + (func $switch (type $v) + (call_import $check + (i32.const 0) + ) + (block $switch$1$leave + (block $switch$1$default + (block $switch$1$case$3 + (block $switch$1$case$2 + (br_table $switch$1$default $switch$1$default $switch$1$case$2 $switch$1$default $switch$1$case$3 $switch$1$case$2 $switch$1$default + (i32.const -99) + ) + ) + (call_import $check + (i32.const 1) + ) + (br $switch$1$leave) + ) + (call_import $check + (i32.const 2) + ) + (br $switch$1$leave) + ) + (call_import $check + (i32.const 3) + ) + ) ) (func $duffs-device (type $v) (local $0 i32) + (call_import $check + (i32.const 0) + ) (set_local $0 (i32.const 2) ) - (loop $shape$1$break $shape$1$continue + (loop $shape$1$continue (if (i32.eq (get_local $0) (i32.const 2) ) (block + (call_import $check + (i32.const 1) + ) (set_local $0 (i32.const 3) ) @@ -762,6 +1008,9 @@ (i32.const 3) ) (block + (call_import $check + (i32.const 2) + ) (set_local $0 (i32.const 2) ) @@ -772,6 +1021,9 @@ ) ) (func $return (type $i) (result i32) + (call_import $check + (i32.const 42) + ) (i32.const 1337) ) ) diff --git a/test/example/relooper-fuzz.c b/test/example/relooper-fuzz.c index ecb204347..65d00aa5d 100644 --- a/test/example/relooper-fuzz.c +++ b/test/example/relooper-fuzz.c @@ -256,12 +256,14 @@ int main() { // memory BinaryenSetMemory(module, 1, 1, "mem", NULL, NULL, NULL, 0); + assert(BinaryenModuleValidate(module)); + + BinaryenModulePrint(module); + BinaryenModuleOptimize(module); assert(BinaryenModuleValidate(module)); - // write it out - BinaryenModulePrint(module); BinaryenModuleDispose(module); diff --git a/test/example/relooper-fuzz.txt b/test/example/relooper-fuzz.txt index 6a45dbe84..b4e6c8b57 100644 --- a/test/example/relooper-fuzz.txt +++ b/test/example/relooper-fuzz.txt @@ -152,6 +152,299 @@ (i32.const 112) (i32.const 34) ) + (block + (block + (block $block$6$break + (block $block$5$break + (block + (call_import $print + (i32.const 0) + ) + (set_local $0 + (call $check) + ) + ) + (if + (i32.eq + (i32.rem_u + (get_local $0) + (i32.const 2) + ) + (i32.const 0) + ) + (block + (set_local $1 + (i32.const 6) + ) + (br $block$6$break) + ) + (block + (block + (call_import $print + (i32.const 8) + ) + (set_local $0 + (call $check) + ) + ) + (block + (br $block$5$break) + ) + ) + ) + ) + ) + ) + (loop $shape$3$continue + (block $block$5$break + (if + (i32.eq + (get_local $1) + (i32.const 6) + ) + (block + (set_local $1 + (i32.const 0) + ) + (block + (call_import $print + (i32.const 5) + ) + (set_local $0 + (call $check) + ) + ) + (if + (i32.eq + (i32.rem_u + (get_local $0) + (i32.const 2) + ) + (i32.const 0) + ) + (br $shape$3$continue) + (block + (set_local $1 + (i32.const 6) + ) + (br $shape$3$continue) + ) + ) + ) + ) + ) + (block + (block $block$3$break + (block + (call_import $print + (i32.const 4) + ) + (set_local $0 + (call $check) + ) + ) + (if + (i32.eq + (i32.rem_u + (get_local $0) + (i32.const 3) + ) + (i32.const 0) + ) + (br $shape$3$continue) + (if + (i32.eq + (i32.rem_u + (get_local $0) + (i32.const 3) + ) + (i32.const 1) + ) + (block + (set_local $1 + (i32.const 6) + ) + (br $shape$3$continue) + ) + (br $block$3$break) + ) + ) + ) + (block + (block + (call_import $print + (i32.const 2) + ) + (set_local $0 + (call $check) + ) + ) + (block + (set_local $1 + (i32.const 6) + ) + (br $shape$3$continue) + ) + ) + ) + ) + ) + ) +) +(module + (memory 1 1) + (export "mem" memory) + (start $main) + (type $i (func (result i32))) + (type $v (func)) + (type $vi (func (param i32))) + (import $print "spectest" "print" (param i32)) + (func $check (type $i) (result i32) + (if + (i32.eq + (i32.load + (i32.const 4) + ) + (i32.const 108) + ) + (unreachable) + ) + (i32.store + (i32.const 4) + (i32.add + (i32.load + (i32.const 4) + ) + (i32.const 4) + ) + ) + (call_import $print + (i32.sub + (i32.const 0) + (i32.load offset=4 + (i32.load + (i32.const 4) + ) + ) + ) + ) + (i32.load offset=4 + (i32.load + (i32.const 4) + ) + ) + ) + (func $main (type $v) + (local $0 i32) + (local $1 i32) + (i32.store + (i32.const 8) + (i32.const 89) + ) + (i32.store + (i32.const 12) + (i32.const 12) + ) + (i32.store + (i32.const 16) + (i32.const 78) + ) + (i32.store + (i32.const 20) + (i32.const 149) + ) + (i32.store + (i32.const 24) + (i32.const 118) + ) + (i32.store + (i32.const 28) + (i32.const 179) + ) + (i32.store + (i32.const 32) + (i32.const 127) + ) + (i32.store + (i32.const 36) + (i32.const 80) + ) + (i32.store + (i32.const 40) + (i32.const 21) + ) + (i32.store + (i32.const 44) + (i32.const 34) + ) + (i32.store + (i32.const 48) + (i32.const 119) + ) + (i32.store + (i32.const 52) + (i32.const 98) + ) + (i32.store + (i32.const 56) + (i32.const 38) + ) + (i32.store + (i32.const 60) + (i32.const 29) + ) + (i32.store + (i32.const 64) + (i32.const 36) + ) + (i32.store + (i32.const 68) + (i32.const 147) + ) + (i32.store + (i32.const 72) + (i32.const 13) + ) + (i32.store + (i32.const 76) + (i32.const 55) + ) + (i32.store + (i32.const 80) + (i32.const 166) + ) + (i32.store + (i32.const 84) + (i32.const 16) + ) + (i32.store + (i32.const 88) + (i32.const 143) + ) + (i32.store + (i32.const 92) + (i32.const 52) + ) + (i32.store + (i32.const 96) + (i32.const 130) + ) + (i32.store + (i32.const 100) + (i32.const 150) + ) + (i32.store + (i32.const 104) + (i32.const 176) + ) + (i32.store + (i32.const 108) + (i32.const 91) + ) + (i32.store + (i32.const 112) + (i32.const 34) + ) (call_import $print (i32.const 0) ) @@ -173,7 +466,7 @@ (call $check) ) ) - (loop $shape$3$break $shape$3$continue + (loop $shape$3$continue (if (i32.eq (get_local $0) diff --git a/test/example/relooper-fuzz1.c b/test/example/relooper-fuzz1.c new file mode 100644 index 000000000..fbbbfdd59 --- /dev/null +++ b/test/example/relooper-fuzz1.c @@ -0,0 +1,332 @@ + + +#include <assert.h> +#include <stdio.h> + +#include "binaryen-c.h" + +// globals: address 4 is index +// decisions are at address 8+ + +int main() { + BinaryenModuleRef module = BinaryenModuleCreate(); + + // check() + + // if the end, halt + BinaryenExpressionRef halter = BinaryenIf(module, + BinaryenBinary(module, + BinaryenEqInt32(), + BinaryenLoad(module, 4, 0, 0, 0, BinaryenInt32(), + BinaryenConst(module, BinaryenLiteralInt32(4))), + BinaryenConst(module, BinaryenLiteralInt32(4 * 30)) // jumps of 4 bytes + ), + BinaryenUnreachable(module), + NULL + ); + // increment index + BinaryenExpressionRef incer = BinaryenStore(module, + 4, 0, 0, + BinaryenConst(module, BinaryenLiteralInt32(4)), + BinaryenBinary(module, + BinaryenAddInt32(), + BinaryenLoad(module, 4, 0, 0, 0, BinaryenInt32(), + BinaryenConst(module, BinaryenLiteralInt32(4))), + BinaryenConst(module, BinaryenLiteralInt32(4)) + ) + ); + + // optionally, print the return value + BinaryenExpressionRef args[] = { + BinaryenBinary(module, + BinaryenSubInt32(), + BinaryenConst(module, BinaryenLiteralInt32(0)), + BinaryenLoad(module, + 4, 0, 4, 0, BinaryenInt32(), + BinaryenLoad(module, 4, 0, 0, 0, BinaryenInt32(), + BinaryenConst(module, BinaryenLiteralInt32(4))) + ) + ) + }; + BinaryenExpressionRef debugger; + if (1) debugger = BinaryenCallImport(module, "print", args, 1, + BinaryenNone()); + else debugger = BinaryenNop(module); + + // return the decision. need to subtract 4 that we just added, + // and add 8 since that's where we start, so overall offset 4 + BinaryenExpressionRef returner = BinaryenLoad(module, + 4, 0, 4, 0, BinaryenInt32(), + BinaryenLoad(module, 4, 0, 0, 0, BinaryenInt32(), + BinaryenConst(module, BinaryenLiteralInt32(4))) + ); + BinaryenExpressionRef checkBodyList[] = { halter, incer, debugger, + returner }; + BinaryenExpressionRef checkBody = BinaryenBlock(module, + NULL, checkBodyList, sizeof(checkBodyList) / sizeof(BinaryenExpressionRef) + ); + BinaryenFunctionTypeRef i = BinaryenAddFunctionType(module, "i", + BinaryenInt32(), + NULL, 0); + BinaryenAddFunction(module, "check", i, NULL, 0, checkBody); + + // contents of main() begin here + + RelooperRef relooper = RelooperCreate(); + + + RelooperBlockRef b0; + { + BinaryenExpressionRef args[] = { + BinaryenConst(module, BinaryenLiteralInt32(0)) + }; + BinaryenExpressionRef list[] = { + BinaryenCallImport(module, "print", args, 1, BinaryenNone()), + BinaryenSetLocal(module, 0, BinaryenCall(module, "check", NULL, 0, + BinaryenInt32())) + }; + + b0 = RelooperAddBlock(relooper, BinaryenBlock(module, NULL, list, 2)); + + } + + RelooperBlockRef b1; + { + BinaryenExpressionRef args[] = { + BinaryenConst(module, BinaryenLiteralInt32(1)) + }; + BinaryenExpressionRef list[] = { + BinaryenCallImport(module, "print", args, 1, BinaryenNone()), + BinaryenSetLocal(module, 0, BinaryenCall(module, "check", NULL, 0, + BinaryenInt32())) + }; + + b1 = RelooperAddBlock(relooper, BinaryenBlock(module, NULL, list, 2)); + + } + + RelooperBlockRef b2; + { + BinaryenExpressionRef args[] = { + BinaryenConst(module, BinaryenLiteralInt32(2)) + }; + BinaryenExpressionRef list[] = { + BinaryenCallImport(module, "print", args, 1, BinaryenNone()), + BinaryenSetLocal(module, 0, BinaryenCall(module, "check", NULL, 0, + BinaryenInt32())) + }; + + b2 = RelooperAddBlock(relooper, BinaryenBlock(module, NULL, list, 2)); + + } + + RelooperBlockRef b3; + { + BinaryenExpressionRef args[] = { + BinaryenConst(module, BinaryenLiteralInt32(3)) + }; + BinaryenExpressionRef list[] = { + BinaryenCallImport(module, "print", args, 1, BinaryenNone()), + BinaryenSetLocal(module, 0, BinaryenCall(module, "check", NULL, 0, + BinaryenInt32())) + }; + + b3 = RelooperAddBlock(relooper, BinaryenBlock(module, NULL, list, 2)); + + } + + RelooperBlockRef b4; + { + BinaryenExpressionRef args[] = { + BinaryenConst(module, BinaryenLiteralInt32(4)) + }; + BinaryenExpressionRef list[] = { + BinaryenCallImport(module, "print", args, 1, BinaryenNone()), + BinaryenSetLocal(module, 0, BinaryenCall(module, "check", NULL, 0, + BinaryenInt32())) + }; + + b4 = RelooperAddBlock(relooper, BinaryenBlock(module, NULL, list, 2)); + + } + + RelooperBlockRef b5; + { + BinaryenExpressionRef args[] = { + BinaryenConst(module, BinaryenLiteralInt32(5)) + }; + BinaryenExpressionRef list[] = { + BinaryenCallImport(module, "print", args, 1, BinaryenNone()), + BinaryenSetLocal(module, 0, BinaryenCall(module, "check", NULL, 0, + BinaryenInt32())) + }; + + b5 = RelooperAddBlock(relooper, BinaryenBlock(module, NULL, list, 2)); + + } + + RelooperBlockRef b6; + { + BinaryenExpressionRef args[] = { + BinaryenConst(module, BinaryenLiteralInt32(6)) + }; + BinaryenExpressionRef list[] = { + BinaryenCallImport(module, "print", args, 1, BinaryenNone()), + BinaryenSetLocal(module, 0, BinaryenCall(module, "check", NULL, 0, + BinaryenInt32())) + }; + + b6 = RelooperAddBlock(relooper, BinaryenBlock(module, NULL, list, 2)); + + } + + RelooperBlockRef b7; + { + BinaryenExpressionRef args[] = { + BinaryenConst(module, BinaryenLiteralInt32(7)) + }; + BinaryenExpressionRef list[] = { + BinaryenCallImport(module, "print", args, 1, BinaryenNone()), + BinaryenSetLocal(module, 0, BinaryenCall(module, "check", NULL, 0, + BinaryenInt32())) + }; + + b7 = RelooperAddBlock(relooper, BinaryenBlock(module, NULL, list, 2)); + + } + + RelooperBlockRef b8; + { + BinaryenExpressionRef args[] = { + BinaryenConst(module, BinaryenLiteralInt32(8)) + }; + BinaryenExpressionRef list[] = { + BinaryenCallImport(module, "print", args, 1, BinaryenNone()), + BinaryenSetLocal(module, 0, BinaryenCall(module, "check", NULL, 0, + BinaryenInt32())) + }; + + b8 = RelooperAddBlock(relooper, BinaryenBlock(module, NULL, list, 2)); + + } + + RelooperBlockRef b9; + { + BinaryenExpressionRef args[] = { + BinaryenConst(module, BinaryenLiteralInt32(9)) + }; + BinaryenExpressionRef list[] = { + BinaryenCallImport(module, "print", args, 1, BinaryenNone()), + BinaryenSetLocal(module, 0, BinaryenCall(module, "check", NULL, 0, + BinaryenInt32())) + }; + + b9 = RelooperAddBlock(relooper, BinaryenBlock(module, NULL, list, 2)); + + } + + RelooperAddBranch(b0, b2, BinaryenBinary(module, + BinaryenEqInt32(), + BinaryenBinary(module, + BinaryenRemUInt32(), + BinaryenGetLocal(module, 0, BinaryenInt32()), + BinaryenConst(module, BinaryenLiteralInt32(4)) + ), + BinaryenConst(module, BinaryenLiteralInt32(0)) + ), NULL); + + RelooperAddBranch(b0, b7, BinaryenBinary(module, + BinaryenEqInt32(), + BinaryenBinary(module, + BinaryenRemUInt32(), + BinaryenGetLocal(module, 0, BinaryenInt32()), + BinaryenConst(module, BinaryenLiteralInt32(4)) + ), + BinaryenConst(module, BinaryenLiteralInt32(2)) + ), NULL); + + RelooperAddBranch(b0, b3, NULL, NULL); + + RelooperAddBranch(b2, b3, BinaryenBinary(module, + BinaryenEqInt32(), + BinaryenBinary(module, + BinaryenRemUInt32(), + BinaryenGetLocal(module, 0, BinaryenInt32()), + BinaryenConst(module, BinaryenLiteralInt32(2)) + ), + BinaryenConst(module, BinaryenLiteralInt32(0)) + ), NULL); + + RelooperAddBranch(b2, b9, NULL, NULL); + + RelooperAddBranch(b3, b3, NULL, NULL); + + RelooperAddBranch(b7, b2, BinaryenBinary(module, + BinaryenEqInt32(), + BinaryenBinary(module, + BinaryenRemUInt32(), + BinaryenGetLocal(module, 0, BinaryenInt32()), + BinaryenConst(module, BinaryenLiteralInt32(3)) + ), + BinaryenConst(module, BinaryenLiteralInt32(0)) + ), NULL); + + RelooperAddBranch(b7, b9, NULL, NULL); + + BinaryenExpressionRef body = RelooperRenderAndDispose(relooper, b0, 1, + module); + + int decisions[] = { 67, 131, 49, 36, 112, 161, 62, 166, 16, 88, 176, 152, 161, 194, 117, 180, 60, 166, 55, 183, 150, 73, 196, 143, 76, 182, 97, 140, 126, 3 }; + int numDecisions = sizeof(decisions)/sizeof(int); + + // write out all the decisions, then the body of the function + BinaryenExpressionRef full[numDecisions + 1]; + + { + int i; + for (i = 0; i < numDecisions; i++) { + full[i] = BinaryenStore(module, + 4, 0, 0, + BinaryenConst(module, BinaryenLiteralInt32(8 + 4 * i)), + BinaryenConst(module, BinaryenLiteralInt32(decisions[i])) + ); + } + } + full[numDecisions] = body; + BinaryenExpressionRef all = BinaryenBlock(module, NULL, full, + numDecisions + 1); + + BinaryenFunctionTypeRef v = BinaryenAddFunctionType(module, "v", + BinaryenNone(), + NULL, 0); + // locals: state, free-for-label + BinaryenType localTypes[] = { BinaryenInt32(), BinaryenInt32() }; + BinaryenFunctionRef theMain = BinaryenAddFunction(module, "main", v, + localTypes, 2, all); + BinaryenSetStart(module, theMain); + + // import + + BinaryenType iparams[] = { BinaryenInt32() }; + BinaryenFunctionTypeRef vi = BinaryenAddFunctionType(module, "vi", + BinaryenNone(), + iparams, 1); + BinaryenAddImport(module, "print", "spectest", "print", vi); + + // memory + BinaryenSetMemory(module, 1, 1, "mem", NULL, NULL, NULL, 0); + + assert(BinaryenModuleValidate(module)); + + BinaryenModulePrint(module); + + BinaryenModuleOptimize(module); + + assert(BinaryenModuleValidate(module)); + + BinaryenModulePrint(module); + + BinaryenModuleDispose(module); + + return 0; +} diff --git a/test/example/relooper-fuzz1.txt b/test/example/relooper-fuzz1.txt new file mode 100644 index 000000000..437dab062 --- /dev/null +++ b/test/example/relooper-fuzz1.txt @@ -0,0 +1,501 @@ +(module + (memory 1 1) + (export "mem" memory) + (start $main) + (type $i (func (result i32))) + (type $v (func)) + (type $vi (func (param i32))) + (import $print "spectest" "print" (param i32)) + (func $check (type $i) (result i32) + (if + (i32.eq + (i32.load + (i32.const 4) + ) + (i32.const 120) + ) + (unreachable) + ) + (i32.store + (i32.const 4) + (i32.add + (i32.load + (i32.const 4) + ) + (i32.const 4) + ) + ) + (call_import $print + (i32.sub + (i32.const 0) + (i32.load offset=4 + (i32.load + (i32.const 4) + ) + ) + ) + ) + (i32.load offset=4 + (i32.load + (i32.const 4) + ) + ) + ) + (func $main (type $v) + (local $0 i32) + (local $1 i32) + (i32.store + (i32.const 8) + (i32.const 67) + ) + (i32.store + (i32.const 12) + (i32.const 131) + ) + (i32.store + (i32.const 16) + (i32.const 49) + ) + (i32.store + (i32.const 20) + (i32.const 36) + ) + (i32.store + (i32.const 24) + (i32.const 112) + ) + (i32.store + (i32.const 28) + (i32.const 161) + ) + (i32.store + (i32.const 32) + (i32.const 62) + ) + (i32.store + (i32.const 36) + (i32.const 166) + ) + (i32.store + (i32.const 40) + (i32.const 16) + ) + (i32.store + (i32.const 44) + (i32.const 88) + ) + (i32.store + (i32.const 48) + (i32.const 176) + ) + (i32.store + (i32.const 52) + (i32.const 152) + ) + (i32.store + (i32.const 56) + (i32.const 161) + ) + (i32.store + (i32.const 60) + (i32.const 194) + ) + (i32.store + (i32.const 64) + (i32.const 117) + ) + (i32.store + (i32.const 68) + (i32.const 180) + ) + (i32.store + (i32.const 72) + (i32.const 60) + ) + (i32.store + (i32.const 76) + (i32.const 166) + ) + (i32.store + (i32.const 80) + (i32.const 55) + ) + (i32.store + (i32.const 84) + (i32.const 183) + ) + (i32.store + (i32.const 88) + (i32.const 150) + ) + (i32.store + (i32.const 92) + (i32.const 73) + ) + (i32.store + (i32.const 96) + (i32.const 196) + ) + (i32.store + (i32.const 100) + (i32.const 143) + ) + (i32.store + (i32.const 104) + (i32.const 76) + ) + (i32.store + (i32.const 108) + (i32.const 182) + ) + (i32.store + (i32.const 112) + (i32.const 97) + ) + (i32.store + (i32.const 116) + (i32.const 140) + ) + (i32.store + (i32.const 120) + (i32.const 126) + ) + (i32.store + (i32.const 124) + (i32.const 3) + ) + (block + (block $block$10$break + (block $block$4$break + (block $block$3$break + (block + (call_import $print + (i32.const 0) + ) + (set_local $0 + (call $check) + ) + ) + (if + (i32.eq + (i32.rem_u + (get_local $0) + (i32.const 4) + ) + (i32.const 0) + ) + (br $block$3$break) + (if + (i32.eq + (i32.rem_u + (get_local $0) + (i32.const 4) + ) + (i32.const 2) + ) + (block + (block + (call_import $print + (i32.const 7) + ) + (set_local $0 + (call $check) + ) + ) + (if + (i32.eq + (i32.rem_u + (get_local $0) + (i32.const 3) + ) + (i32.const 0) + ) + (br $block$3$break) + (br $block$10$break) + ) + ) + (br $block$4$break) + ) + ) + ) + (block + (block + (call_import $print + (i32.const 2) + ) + (set_local $0 + (call $check) + ) + ) + (if + (i32.eq + (i32.rem_u + (get_local $0) + (i32.const 2) + ) + (i32.const 0) + ) + (br $block$4$break) + (br $block$10$break) + ) + ) + ) + (loop $shape$6$continue + (block + (call_import $print + (i32.const 3) + ) + (set_local $0 + (call $check) + ) + ) + (block + (br $shape$6$continue) + ) + ) + ) + (block + (block + (call_import $print + (i32.const 9) + ) + (set_local $0 + (call $check) + ) + ) + ) + ) + ) +) +(module + (memory 1 1) + (export "mem" memory) + (start $main) + (type $i (func (result i32))) + (type $v (func)) + (type $vi (func (param i32))) + (import $print "spectest" "print" (param i32)) + (func $check (type $i) (result i32) + (if + (i32.eq + (i32.load + (i32.const 4) + ) + (i32.const 120) + ) + (unreachable) + ) + (i32.store + (i32.const 4) + (i32.add + (i32.load + (i32.const 4) + ) + (i32.const 4) + ) + ) + (call_import $print + (i32.sub + (i32.const 0) + (i32.load offset=4 + (i32.load + (i32.const 4) + ) + ) + ) + ) + (i32.load offset=4 + (i32.load + (i32.const 4) + ) + ) + ) + (func $main (type $v) + (local $0 i32) + (i32.store + (i32.const 8) + (i32.const 67) + ) + (i32.store + (i32.const 12) + (i32.const 131) + ) + (i32.store + (i32.const 16) + (i32.const 49) + ) + (i32.store + (i32.const 20) + (i32.const 36) + ) + (i32.store + (i32.const 24) + (i32.const 112) + ) + (i32.store + (i32.const 28) + (i32.const 161) + ) + (i32.store + (i32.const 32) + (i32.const 62) + ) + (i32.store + (i32.const 36) + (i32.const 166) + ) + (i32.store + (i32.const 40) + (i32.const 16) + ) + (i32.store + (i32.const 44) + (i32.const 88) + ) + (i32.store + (i32.const 48) + (i32.const 176) + ) + (i32.store + (i32.const 52) + (i32.const 152) + ) + (i32.store + (i32.const 56) + (i32.const 161) + ) + (i32.store + (i32.const 60) + (i32.const 194) + ) + (i32.store + (i32.const 64) + (i32.const 117) + ) + (i32.store + (i32.const 68) + (i32.const 180) + ) + (i32.store + (i32.const 72) + (i32.const 60) + ) + (i32.store + (i32.const 76) + (i32.const 166) + ) + (i32.store + (i32.const 80) + (i32.const 55) + ) + (i32.store + (i32.const 84) + (i32.const 183) + ) + (i32.store + (i32.const 88) + (i32.const 150) + ) + (i32.store + (i32.const 92) + (i32.const 73) + ) + (i32.store + (i32.const 96) + (i32.const 196) + ) + (i32.store + (i32.const 100) + (i32.const 143) + ) + (i32.store + (i32.const 104) + (i32.const 76) + ) + (i32.store + (i32.const 108) + (i32.const 182) + ) + (i32.store + (i32.const 112) + (i32.const 97) + ) + (i32.store + (i32.const 116) + (i32.const 140) + ) + (i32.store + (i32.const 120) + (i32.const 126) + ) + (i32.store + (i32.const 124) + (i32.const 3) + ) + (block $block$10$break + (block $block$4$break + (call_import $print + (i32.const 0) + ) + (if + (i32.ne + (i32.rem_u + (set_local $0 + (call $check) + ) + (i32.const 4) + ) + (i32.const 0) + ) + (if + (i32.eq + (i32.rem_u + (get_local $0) + (i32.const 4) + ) + (i32.const 2) + ) + (block + (call_import $print + (i32.const 7) + ) + (br_if $block$10$break + (i32.ne + (i32.rem_u + (call $check) + (i32.const 3) + ) + (i32.const 0) + ) + ) + ) + (br $block$4$break) + ) + ) + (call_import $print + (i32.const 2) + ) + (br_if $block$10$break + (i32.ne + (i32.rem_u + (call $check) + (i32.const 2) + ) + (i32.const 0) + ) + ) + ) + (loop $shape$6$continue + (call_import $print + (i32.const 3) + ) + (call $check) + (br $shape$6$continue) + ) + ) + (call_import $print + (i32.const 9) + ) + (call $check) + ) +) diff --git a/test/memorygrowth.fromasm b/test/memorygrowth.fromasm index 4211dfa0e..5c005ba99 100644 --- a/test/memorygrowth.fromasm +++ b/test/memorygrowth.fromasm @@ -5312,7 +5312,7 @@ (i32.const 24) ) ) - (loop $do-out$73 $do-in$74 + (loop $do-in$74 (i32.store (set_local $1 (i32.add @@ -5852,7 +5852,7 @@ (set_local $4 (i32.const 0) ) - (loop $do-out$44 $do-in$45 + (loop $do-in$45 (i32.store offset=12 (set_local $15 (i32.add diff --git a/test/memorygrowth.fromasm.imprecise b/test/memorygrowth.fromasm.imprecise index 65fadc981..b70bc7c9e 100644 --- a/test/memorygrowth.fromasm.imprecise +++ b/test/memorygrowth.fromasm.imprecise @@ -5311,7 +5311,7 @@ (i32.const 24) ) ) - (loop $do-out$73 $do-in$74 + (loop $do-in$74 (i32.store (set_local $1 (i32.add @@ -5851,7 +5851,7 @@ (set_local $4 (i32.const 0) ) - (loop $do-out$44 $do-in$45 + (loop $do-in$45 (i32.store offset=12 (set_local $15 (i32.add diff --git a/test/passes/remove-unused-names.txt b/test/passes/remove-unused-names.txt index c73772d99..74cde2f1a 100644 --- a/test/passes/remove-unused-names.txt +++ b/test/passes/remove-unused-names.txt @@ -3,4 +3,59 @@ (func $b0 (param $i1 i32) (result i32) (i32.const 0) ) + (func $loops + (loop $out $in + (br $out) + (br $in) + ) + (block $out + (br $out) + ) + (loop $in + (br $in) + ) + (loop + (nop) + ) + (loop + (loop $out $in + (br $out) + (br $in) + ) + ) + (block + (loop $out $in + (br $out) + (br $in) + ) + ) + (loop $out $in + (br $out) + (br $in) + ) + (loop $out $in + (br $out) + (br $in) + ) + (loop $out $in + (br $out) + (br $in) + ) + ) + (func $merges + (block $b + (br $b) + (br $b) + ) + (block $b + (br_table $b $b + (i32.const 3) + ) + ) + (block $b + (br_table $b $b + (i32.const 3) + ) + ) + ) ) diff --git a/test/passes/remove-unused-names.wast b/test/passes/remove-unused-names.wast index 8cf74ca07..9423b2675 100644 --- a/test/passes/remove-unused-names.wast +++ b/test/passes/remove-unused-names.wast @@ -5,5 +5,68 @@ (i32.const 0) ) ) + (func $loops + (loop $out $in + (br $out) + (br $in) + ) + (loop $out $in + (br $out) + ) + (loop $out $in + (br $in) + ) + (loop $out $in + (nop) + ) + (loop $out $in + (loop $out $in + (br $out) + (br $in) + ) + ) + (block $out + (loop $out $in + (br $out) + (br $in) + ) + ) + (loop $out $in + (block $out + (br $out) + (br $in) + ) + ) + (loop $in + (block $out + (br $out) + (br $in) + ) + ) + (block $out + (loop $in + (br $out) + (br $in) + ) + ) + ) + (func $merges + (block $a + (block $b + (br $a) + (br $b) + ) + ) + (block $a + (block $b + (br_table $a $b (i32.const 3)) + ) + ) + (block $a + (block $b + (br_table $b $a (i32.const 3)) + ) + ) + ) ) diff --git a/test/unit.fromasm b/test/unit.fromasm index 15a2f2007..f939782e7 100644 --- a/test/unit.fromasm +++ b/test/unit.fromasm @@ -143,56 +143,51 @@ (i32.const 51) ) ) - (block $label$break$Lout - (block $switch-default$16 - (block $switch-case$15 - (block $switch-case$12 - (block $switch-case$9 - (block $switch-case$8 - (br_table $switch-case$15 $switch-default$16 $switch-default$16 $switch-case$12 $switch-default$16 $switch-default$16 $switch-default$16 $switch-default$16 $switch-case$9 $switch-default$16 $switch-case$8 $switch-default$16 - (i32.sub - (get_local $0) - (i32.const 2) - ) + (block $switch-default$16 + (block $switch-case$15 + (block $switch-case$12 + (block $switch-case$9 + (block $switch-case$8 + (br_table $switch-case$15 $switch-default$16 $switch-default$16 $switch-case$12 $switch-default$16 $switch-default$16 $switch-default$16 $switch-default$16 $switch-case$9 $switch-default$16 $switch-case$8 $switch-default$16 + (i32.sub + (get_local $0) + (i32.const 2) ) ) - (br $label$break$Lout) ) - (br $label$break$Lout) - ) - (loop $while-out$10 $while-in$11 - (br $while-out$10) + (br $switch-default$16) ) - (br $label$break$Lout) + (br $switch-default$16) ) - (loop $while-out$13 $while-in$14 - (br $label$break$Lout) + (block $while-out$10 ) + (br $switch-default$16) + ) + (loop + (br $switch-default$16) ) ) (loop $label$break$L1 $label$continue$L1 (loop $label$break$L3 $label$continue$L3 (block $switch$17 (block $switch-default$21 - (block $switch-default$21 - (block $switch-case$20 - (block $switch-case$19 - (block $switch-case$18 - (br_table $switch-case$18 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-case$20 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-case$19 $switch-default$21 - (i32.sub - (get_local $0) - (i32.const -1) - ) + (block $switch-case$20 + (block $switch-case$19 + (block $switch-case$18 + (br_table $switch-case$18 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-case$20 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-case$19 $switch-default$21 + (i32.sub + (get_local $0) + (i32.const -1) ) ) - (br $label$break$L1) ) - (br $switch$17) + (br $label$break$L1) ) - (br $label$break$L3) + (br $switch$17) ) - (br $label$break$L1) + (br $label$break$L3) ) + (br $label$break$L1) ) (br $label$continue$L3) ) @@ -332,11 +327,11 @@ ) ) (func $continues - (loop $while-out$0 $while-in$1 + (loop $while-in$1 (call_import $print (i32.const 1) ) - (loop $do-once$2 $unlikely-continue$3 + (loop $unlikely-continue$3 (call_import $print (i32.const 5) ) diff --git a/test/unit.fromasm.imprecise b/test/unit.fromasm.imprecise index 1ee3b88ea..f80f4ce6c 100644 --- a/test/unit.fromasm.imprecise +++ b/test/unit.fromasm.imprecise @@ -133,56 +133,51 @@ (i32.const 51) ) ) - (block $label$break$Lout - (block $switch-default$16 - (block $switch-case$15 - (block $switch-case$12 - (block $switch-case$9 - (block $switch-case$8 - (br_table $switch-case$15 $switch-default$16 $switch-default$16 $switch-case$12 $switch-default$16 $switch-default$16 $switch-default$16 $switch-default$16 $switch-case$9 $switch-default$16 $switch-case$8 $switch-default$16 - (i32.sub - (get_local $0) - (i32.const 2) - ) + (block $switch-default$16 + (block $switch-case$15 + (block $switch-case$12 + (block $switch-case$9 + (block $switch-case$8 + (br_table $switch-case$15 $switch-default$16 $switch-default$16 $switch-case$12 $switch-default$16 $switch-default$16 $switch-default$16 $switch-default$16 $switch-case$9 $switch-default$16 $switch-case$8 $switch-default$16 + (i32.sub + (get_local $0) + (i32.const 2) ) ) - (br $label$break$Lout) ) - (br $label$break$Lout) - ) - (loop $while-out$10 $while-in$11 - (br $while-out$10) + (br $switch-default$16) ) - (br $label$break$Lout) + (br $switch-default$16) ) - (loop $while-out$13 $while-in$14 - (br $label$break$Lout) + (block $while-out$10 ) + (br $switch-default$16) + ) + (loop + (br $switch-default$16) ) ) (loop $label$break$L1 $label$continue$L1 (loop $label$break$L3 $label$continue$L3 (block $switch$17 (block $switch-default$21 - (block $switch-default$21 - (block $switch-case$20 - (block $switch-case$19 - (block $switch-case$18 - (br_table $switch-case$18 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-case$20 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-case$19 $switch-default$21 - (i32.sub - (get_local $0) - (i32.const -1) - ) + (block $switch-case$20 + (block $switch-case$19 + (block $switch-case$18 + (br_table $switch-case$18 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-case$20 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-default$21 $switch-case$19 $switch-default$21 + (i32.sub + (get_local $0) + (i32.const -1) ) ) - (br $label$break$L1) ) - (br $switch$17) + (br $label$break$L1) ) - (br $label$break$L3) + (br $switch$17) ) - (br $label$break$L1) + (br $label$break$L3) ) + (br $label$break$L1) ) (br $label$continue$L3) ) @@ -316,11 +311,11 @@ ) ) (func $continues - (loop $while-out$0 $while-in$1 + (loop $while-in$1 (call_import $print (i32.const 1) ) - (loop $do-once$2 $unlikely-continue$3 + (loop $unlikely-continue$3 (call_import $print (i32.const 5) ) |