0x78f6…ce19

All memos sent from and to 0x78f6…ce19.

{"version":"signal-rituals-bytecode-storage-v1","storagePattern":"SSTORE2-style bytecode data contracts","storageMode":"derived-glyphs-from-tone-style","grid":{"columns":64,"rows":113},"frames":17,"glyphPalette":" #%&*+-/;=\\|▀█▌▐░▒▓","configuredGlyphs":" .,:;-/\\|+=*#%░▒▓█▌▐▀▄","playbackMode":"pingpong","displayedFrames":17,"timelineFrames":32,"runtimeLoop":"fixed-frame-timeline","procedural":false,"proceduralOverlay":false,"proceduralMotion":{"enabled":false},"glyphStrategy":"derive glyph density from 8-level tone data and sparse style anchors; edge-aware mode stores sparse directional edge styles; readable keyframes remain reference-only","glyphLayerStored":false,"omittedGlyphLayerBytes":76840,"toneLevels":8,"toneBitsPerCell":3,"styleStorageMode":"sparseAnchors","styleBlobName":"style_sparse_anchors_packed","styleSparseMode":"anchor-edge-derived-style","styleIndexBits":13,"styleValueBits":4,"styleSparseBytes":27328,"styleDense4BitBytes":61472,"ritualEngineCompatibility":{"version":"ritual-engine-compat-v1","ritualEngineReady":true,"rendererVersion":"svg-tone-style-layer-v3","remixOverlaysCanonical":false,"notes":["Ritual Engine overlays are non-canonical collector-side transforms applied after canonical reconstruction.","This compatibility block is readiness metadata only and does not change the canonical artwork output."],"seedField":{"field":"ritualEngine.seed","fallbackField":"settingsSeed","available":true,"value":738176307},"canonicalDefaults":{"paletteId":"tiefling20","paletteInvert":false,"palettePreserveLuminance":false,"asciiBrightness":-8,"asciiMidtones":15,"asciiHighlightFill":0,"asciiHighlightThreshold":90,"motionStyle":"rain","rainAccent":16,"asciiStatic":true,"asciiStaticAmount":22,"asciiStaticSpeed":14,"glitchEnabled":false,"glitchPasses":[[0,45,15],[0,30,43],[0,30,26]],"asciiAdaptiveSize":false},"potentiallyRemixableControls":["visualRenderer.paletteId","visualRenderer.paletteInvert","visualRenderer.palettePreserveLuminance","visualRenderer.effects.asciiBrightness","visualRenderer.effects.asciiMidtones","visualRenderer.effects.asciiHighlightFill","visualRenderer.effects.asciiHighlightThreshold","visualRenderer.effects.motionStyle","visualRenderer.effects.rainAccent","visualRenderer.effects.asciiStatic","visualRenderer.effects.asciiStaticAmount","visualRenderer.effects.asciiStaticSpeed","visualRenderer.effects.glitchEnabled","visualRenderer.effects.glitchPasses","visualRenderer.effects.asciiAdaptiveSize","ritualEngine.seed"],"lockedControls":["textGrid.columns","textGrid.rows","playback.frames","playback.timelineFrames","playback.mode","visualRenderer.effects.edgeAwareEnabled","visualRenderer.effects.edgeDogSmallRadius","visualRenderer.effects.edgeDogLargeRadius","visualRenderer.effects.edgeDogStrength","visualRenderer.effects.edgeDogThreshold","visualRenderer.effects.edgeSobelThreshold","visualRenderer.effects.edgeMinCellRatio","visualRenderer.effects.edgeRotateDirection","artifactFrame"]}}
</text><text x="0" y="152.74" textLength="224" lengthAdjust="spacingAndGlyphs"> ## ## </text><text x="0" y="159.74" textLength="224" lengthAdjust="spacingAndGlyphs"> ## # </text><text x="0" y="166.74" textLength="224" lengthAdjust="spacingAndGlyphs"> ## # </text><text x="0" y="173.74" textLength="224" lengthAdjust="spacingAndGlyphs"> ## ### </text><text x="0" y="180.74" textLength="224" lengthAdjust="spacingAndGlyphs"> ## ### </text><text x="0" y="187.74" textLength="224" lengthAdjust="spacingAndGlyphs"> ## ### </text><text x="0" y="194.74" textLength="224" lengthAdjust="spacingAndGlyphs"> ### ## </text><text x="0" y="201.74" textLength="224" lengthAdjust="spacingAndGlyphs"> #### ## </text><text x="0" y="208.74" textLength="224" lengthAdjust="spacingAndGlyphs"> #### ## </text><text x="0" y="215.74" textLength="224" lengthAdjust="spacingAndGlyphs"> #### # </text><text x="0" y="222.74" textLength="224" lengthAdjust="spacingAndGlyphs"> #### # </text><text x="0" y="299.74" textLength="224" lengthAdjust="spacingAndGlyphs"> #</text><text x="0" y="320.74" textLength="224" lengthAdjust="spacingAndGlyphs"> ## </text><text x="0" y="341.74" textLength="224" lengthAdjust="spacingAndGlyphs"> ######## </text><text x="0" y="362.74" textLength="224" lengthAdjust="spacingAndGlyphs"> #### </text><text x="0" y="369.74" textLength="224" lengthAdjust="spacingAndGlyphs">############# </text><text x="0" y="390.74" textLength="224" lengthAdjust="spacingAndGlyphs"> #### </text><text x="0" y="397.74" textLength="224" lengthAdjust="spacingAndGlyphs"> ################### </text></g></g></svg>
N <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 224 399" width="224" height="399" data-poster-grid="32x57" data-source-grid="64x113" data-detail="0.5" data-background="0.55" data-poster-tones="8"><rect width="100%" height="100%" fill="#08090b"/><g font-family="ui-monospace,SFMono-Regular,Menlo,Consolas,monospace" font-size="9" font-weight="700" letter-spacing="0"><g fill="rgb(49,44,43)" opacity="0.86" xml:space="preserve"><text x="0" y="12.74" textLength="224" lengthAdjust="spacingAndGlyphs">.,......:..:..,::... </text><text x="0" y="19.74" textLength="224" lengthAdjust="spacingAndGlyphs">...,,:....,.,:..... ....,::...,</text><text x="0" y="26.74" textLength="224" lengthAdjust="spacingAndGlyphs">.,:....,,:....,,:,. ,.,:.....::</text><text x="0" y="47.74" textLength="224" lengthAdjust="spacingAndGlyphs">:....,,:....,,:.. </text><text x="0" y="54.74" textLength="224" lengthAdjust="spacingAndGlyphs">..,.,.....,:.... ...,,,,...,.</text><text x="0" y="61.74" textLength="224" lengthAdjust="spacingAndGlyphs">,:....,,,.,..,., .,:,...,:::.</text><text x="0" y="82.74" textLength="224" lengthAdjust="spacingAndGlyphs">.....:,....,., </text><text x="0" y="89.74" textLength="224" lengthAdjust="spacingAndGlyphs">..::....,.::. .|.,.,:....,:</text><text x="0" y="96.74" textLength="224" lengthAdjust="spacingAndGlyphs">,....,,:..... \.:....,,,,..</text><text x="0" y="117.74" textLength="224" lengthAdjust="spacingAndGlyphs">....,:.... </text><text x="0" y="124.74" textLength="224" lengthAdjust="spacingAndGlyphs">,::....,,,.... ...,:....,,:,</text><text x="0" y="131.74" textLength="224" lengthAdjust="spacingAndGlyphs">....,::../.,: .,.,......:....</text><text x="0" y="152.74" textLength="224" lengthAdjust="spacingAndGlyphs">..,:,.. </text><text x="0" y="159.74" textLength="224" lengthAdjust="spacingAndGlyphs">,,..... ... ..,::....,.,..</text><text x="0" y="166.74" textLength="224" lengthAdjust="spacingAndGlyphs">..,,:,. .,, .::,...,,:.. .,</text><text x="0" y="187.74" textLength="224" lengthAdjust="spacingAndGlyphs">,.: </text><text x="0" y="194.74" textLength="224" lengthAdjust="spacingAndGlyphs">:...,,, , ... ,;.....,:.,.</text><text x="0" y="201.74" textLength="224" lengthAdjust="spacingAndGlyphs">.,.,:.: . , ,: ..,:,....,.</text><text x="0" y="229.74" textLength="224" lengthAdjust="spacingAndGlyphs">....,,,,..,., /.. ::. .,,:....</text><text x="0" y="236.74" textLength="224" lengthAdjust="spacingAndGlyphs">..::...,,:,....,,, .... .....::</text><text x="0" y="264.74" textLength="224" lengthAdjust="spacingAndGlyphs">....::....,:,...,,::. ..,, ....</text><text x="0" y="271.74" textLength="224" lengthAdjust="spacingAndGlyphs"> ... ::.. ::.</text><text x="0" y="299.74" textLength="224" lengthAdjust="spacingAndGlyphs"> ... : .. </text><text x="0" y="306.74" textLength="224" lengthAdjust="spacingAndGlyphs">,.....,,....,,,::..,,:,. , ,,, </text><text x="0" y="334.74" textLength="224" lengthAdjust="spacingAndGlyphs">,,,....,:,......::. ,,,:. .,.:,</text><text x="0" y="341.74" textLength="224" lengthAdjust="spacingAndGlyphs"> .... : ...</text><text x="0" y="369.74" textLength="224" lengthAdjust="spacingAndGlyphs"> ,,...,. :.</text><text x="0" y="376.74" textLength="224" lengthAdjust="spacingAndGlyphs"> .,......:.....,::...,,::. . </text></g><g fill="rgb(58,66,87)" opacity="0.906" xml:space="preserve"><text x="0" y="96.74" textLength="224" lengthAdjust="spacingAndGlyphs"> ▌ </text><text x="0" y="124.74" textLength="224" lengthAdjust="spacingAndGlyphs"> ▌| </text><text x="0" y="271.74" textLength="224" lengthAdjust="spacingAndGlyphs">--█▌▌▌▌ █▌▌- █ </text><text x="0" y="299.74" textLength="224" lengthAdjust="spacingAndGlyphs"> | </text><text x="0" y="341.74" textLength="224" lengthAdjust="spacingAndGlyphs"> \ </text><text x="0" y="369.74" textLength="224" lengthAdjust="spacingAndGlyphs"> - </text></g><g fill="rgb(134,103,102)" opacity="0.951" xml:space="preserve"><text x="0" y="194.74" textLength="224" lengthAdjust="spacingAndGlyphs"> | </text><text x="0" y="201.74" textLength="224" lengthAdjust="spacingAndGlyphs"> ▒ \ </text><text x="0" y="229.74" textLength="224" lengthAdjust="spacingAndGlyphs"> ▒- </text><text x="0" y="236.74" textLength="224" lengthAdjust="spacingAndGlyphs"> ▒ </text><text x="0" y="264.74" textLength="224" lengthAdjust="spacingAndGlyphs"> - </text><text x="0" y="271.74" textLength="224" lengthAdjust="spacingAndGlyphs"> ░░▒░▒▒▒ </text><text x="0" y="299.74" textLength="224" lengthAdjust="spacingAndGlyphs">▒--- - </text><text x="0" y="306.74" textLength="224" lengthAdjust="spacingAndGlyphs"> | </text><text x="0" y="334.74" textLength="224" lengthAdjust="spacingAndGlyphs"> -- </text><text x="0" y="341.74" textLength="224" lengthAdjust="spacingAndGlyphs"> \ </text><text x="0" y="369.74" textLength="224" lengthAdjust="spacingAndGlyphs"> -- </text><text x="0" y="376.74" textLength="224" lengthAdjust="spacingAndGlyphs"> -- </text></g><g fill="rgb(155,107,130)" opacity="0.997" xml:space="preserve"><text x="0" y="19.74" textLength="224" lengthAdjust="spacingAndGlyphs"> / </text><text x="0" y="33.74" textLength="224" lengthAdjust="spacingAndGlyphs"> | </text><text x="0" y="54.74" textLength="224" lengthAdjust="spacingAndGlyphs"> / </text><text x="0" y="61.74" textLength="224" lengthAdjust="spacingAndGlyphs"> | </text><text x="0" y="131.74" textLength="224" lengthAdjust="spacingAndGlyphs"> % </text><text x="0" y="145.74" textLength="224" lengthAdjust="spacingAndGlyphs"> | </text><text x="0" y="152.74" textLength="224" lengthAdjust="spacingAndGlyphs"> | </text><text x="0" y="159.74" textLength="224" lengthAdjust="spacingAndGlyphs"> /# </text><text x="0" y="180.74" textLength="224" lengthAdjust="spacingAndGlyphs"> | </text><text x="0" y="208.74" textLength="224" lengthAdjust="spacingAndGlyphs"> \ </text><text x="0" y="215.74" textLength="224" lengthAdjust="spacingAndGlyphs"> # </text><text x="0" y="222.74" textLength="224" lengthAdjust="spacingAndGlyphs"> | </text><text x="0" y="243.74" textLength="224" lengthAdjust="spacingAndGlyphs"> # </text><text x="0" y="250.74" textLength="224" lengthAdjust="spacingAndGlyphs"> \ </text><text x="0" y="271.74" textLength="224" lengthAdjust="spacingAndGlyphs"> % </text><text x="0" y="285.74" textLength="224" lengthAdjust="spacingAndGlyphs"> -%###%## </text><text x="0" y="299.74" textLength="224" lengthAdjust="spacingAndGlyphs"> %- \ </text><text x="0" y="313.74" textLength="224" lengthAdjust="spacingAndGlyphs"> \ </text><text x="0" y="320.74" textLength="224" lengthAdjust="spacingAndGlyphs"> #- </text><text x="0" y="362.74" textLength="224" lengthAdjust="spacingAndGlyphs"> - </text><text x="0" y="369.74" textLength="224" lengthAdjust="spacingAndGlyphs"> - # </text><text x="0" y="376.74" textLength="224" lengthAdjust="spacingAndGlyphs"> - </text><text x="0" y="390.74" textLength="224" lengthAdjust="spacingAndGlyphs"> - </text></g><g fill="rgb(180,113,184)" opacity="1" xml:space="preserve"><text x="0" y="12.74" textLength="224" lengthAdjust="spacingAndGlyphs"> | </text><text x="0" y="89.74" textLength="224" lengthAdjust="spacingAndGlyphs"> / | </text><text x="0" y="117.74" textLength="224" lengthAdjust="spacingAndGlyphs"> | </text><text x="0" y="145.74" textLength="224" lengthAdjust="spacingAndGlyphs"> | </text><text x="0" y="159.74" textLength="224" lengthAdjust="spacingAndGlyphs"> / | </text><text x="0" y="166.74" textLength="224" lengthAdjust="spacingAndGlyphs"> \ </text><text x="0" y="180.74" textLength="224" lengthAdjust="spacingAndGlyphs"> \\ </text><text x="0" y="187.74" textLength="224" lengthAdjust="spacingAndGlyphs"> | </text><text x="0" y="194.74" textLength="224" lengthAdjust="spacingAndGlyphs"> \ </text><text x="0" y="215.74" textLength="224" lengthAdjust="spacingAndGlyphs"> | | </text><text x="0" y="229.74" textLength="224" lengthAdjust="spacingAndGlyphs"> \ </text><text x="0" y="278.74" textLength="224" lengthAdjust="spacingAndGlyphs"> \ </text><text x="0" y="285.74" textLength="224" lengthAdjust="spacingAndGlyphs"> \| </text><text x="0" y="292.74" textLength="224" lengthAdjust="spacingAndGlyphs"> | </text><text x="0" y="299.74" textLength="224" lengthAdjust="spacingAndGlyphs"> ------ ---- \- </text><text x="0" y="320.74" textLength="224" lengthAdjust="spacingAndGlyphs"> -||\ | </text><text x="0" y="341.74" textLength="224" lengthAdjust="spacingAndGlyphs">- --| </text><text x="0" y="362.74" textLength="224" lengthAdjust="spacingAndGlyphs"> -- </text><text x="0" y="369.74" textLength="224" lengthAdjust="spacingAndGlyphs"> -- </text><text x="0" y="376.74" textLength="224" lengthAdjust="spacingAndGlyphs">- =</text><text x="0" y="390.74" textLength="224" lengthAdjust="spacingAndGlyphs"> -- \ </text><text x="0" y="397.74" textLength="224" lengthAdjust="spacingAndGlyphs"> -- </text></g><g fill="rgb(180,170,102)" opacity="1" xml:space="preserve"><text x="0" y="19.74" textLength="224" lengthAdjust="spacingAndGlyphs"> | </text><text x="0" y="26.74" textLength="224" lengthAdjust="spacingAndGlyphs"> | </text><text x="0" y="33.74" textLength="224" lengthAdjust="spacingAndGlyphs"> \ </text><text x="0" y="68.74" textLength="224" lengthAdjust="spacingAndGlyphs"> / </text><text x="0" y="110.74" textLength="224" lengthAdjust="spacingAndGlyphs"> \ </text><text x="0" y="131.74" textLength="224" lengthAdjust="spacingAndGlyphs"> | </text><text x="0" y="138.74" textLength="224" lengthAdjust="spacingAndGlyphs"> - | | </text><text x="0" y="159.74" textLength="224" lengthAdjust="spacingAndGlyphs"> \ </text><text x="0" y="166.74" textLength="224" lengthAdjust="spacingAndGlyphs"> | </text><text x="0" y="173.74" textLength="224" lengthAdjust="spacingAndGlyphs"> | </text><text x="0" y="201.74" textLength="224" lengthAdjust="spacingAndGlyphs"> \ </text><text x="0" y="208.74" textLength="224" lengthAdjust="spacingAndGlyphs"> | /\ </text><text x="0" y="215.74" textLength="224" lengthAdjust="spacingAndGlyphs"> | </text><text x="0" y="229.74" textLength="224" lengthAdjust="spacingAndGlyphs"> ; </text><text x="0" y="236.74" textLength="224" lengthAdjust="spacingAndGlyphs"> \ </text><text x="0" y="257.74" textLength="224" lengthAdjust="spacingAndGlyphs"> - \ </text><text x="0" y="264.74" textLength="224" lengthAdjust="spacingAndGlyphs"> / </text><text x="0" y="271.74" textLength="224" lengthAdjust="spacingAndGlyphs"> / </text><text x="0" y="292.74" textLength="224" lengthAdjust="spacingAndGlyphs"> - </text><text x="0" y="299.74" textLength="224" lengthAdjust="spacingAndGlyphs"> --- </text><text x="0" y="306.74" textLength="224" lengthAdjust="spacingAndGlyphs"> / </text><text x="0" y="320.74" textLength="224" lengthAdjust="spacingAndGlyphs">-- -/--/ | </text><text x="0" y="341.74" textLength="224" lengthAdjust="spacingAndGlyphs"> ---- /\-/ </text><text x="0" y="348.74" textLength="224" lengthAdjust="spacingAndGlyphs"> \- </text><text x="0" y="362.74" textLength="224" lengthAdjust="spacingAndGlyphs"> --- \ / </text><text x="0" y="369.74" textLength="224" lengthAdjust="spacingAndGlyphs"> -- </text><text x="0" y="376.74" textLength="224" lengthAdjust="spacingAndGlyphs"> \ </text><text x="0" y="390.74" textLength="224" lengthAdjust="spacingAndGlyphs"> -- </text></g><g fill="rgb(194,214,197)" opacity="1" xml:space="preserve"><text x="0" y="54.74" textLength="224" lengthAdjust="spacingAndGlyphs"> | </text><text x="0" y="82.74" textLength="224" lengthAdjust="spacingAndGlyphs"> | </text><text x="0" y="110.74" textLength="224" lengthAdjust="spacingAndGlyphs"> | </text><text x="0" y="138.74" textLength="224" lengthAdjust="spacingAndGlyphs"> | </text><text x="0" y="166.74" textLength="224" lengthAdjust="spacingAndGlyphs"> &amp; # </text><text x="0" y="173.74" textLength="224" lengthAdjust="spacingAndGlyphs"> # </text><text x="0" y="180.74" textLength="224" lengthAdjust="spacingAndGlyphs"> | </text><text x="0" y="187.74" textLength="224" lengthAdjust="spacingAndGlyphs"> | # # </text><text x="0" y="194.74" textLength="224" lengthAdjust="spacingAndGlyphs"> # # </text><text x="0" y="201.74" textLength="224" lengthAdjust="spacingAndGlyphs"> # </text><text x="0" y="215.74" textLength="224" lengthAdjust="spacingAndGlyphs"> # </text><text x="0" y="222.74" textLength="224" lengthAdjust="spacingAndGlyphs"> # # </text><text x="0" y="229.74" textLength="224" lengthAdjust="spacingAndGlyphs"> # </text><text x="0" y="236.74" textLength="224" lengthAdjust="spacingAndGlyphs"> &amp; </text><text x="0" y="243.74" textLength="224" lengthAdjust="spacingAndGlyphs"> # # </text><text x="0" y="250.74" textLength="224" lengthAdjust="spacingAndGlyphs"> # </text><text x="0" y="257.74" textLength="224" lengthAdjust="spacingAndGlyphs"> # </text><text x="0" y="264.74" textLength="224" lengthAdjust="spacingAndGlyphs"> &amp; </text><text x="0" y="271.74" textLength="224" lengthAdjust="spacingAndGlyphs"> # </text><text x="0" y="278.74" textLength="224" lengthAdjust="spacingAndGlyphs"> # </text><text x="0" y="285.74" textLength="224" lengthAdjust="spacingAndGlyphs"> &amp;# </text><text x="0" y="292.74" textLength="224" lengthAdjust="spacingAndGlyphs"> # </text><text x="0" y="299.74" textLength="224" lengthAdjust="spacingAndGlyphs"> # </text><text x="0" y="306.74" textLength="224" lengthAdjust="spacingAndGlyphs"> # #</text><text x="0" y="313.74" textLength="224" lengthAdjust="spacingAndGlyphs"> &amp;</text><text x="0" y="320.74" textLength="224" lengthAdjust="spacingAndGlyphs"> -- # </text><text x="0" y="327.74" textLength="224" lengthAdjust="spacingAndGlyphs"> # </text><text x="0" y="334.74" textLength="224" lengthAdjust="spacingAndGlyphs"> # </text><text x="0" y="341.74" textLength="224" lengthAdjust="spacingAndGlyphs"> - # </text><text x="0" y="355.74" textLength="224" lengthAdjust="spacingAndGlyphs"> # </text><text x="0" y="362.74" textLength="224" lengthAdjust="spacingAndGlyphs"> - </text><text x="0" y="369.74" textLength="224" lengthAdjust="spacingAndGlyphs"> - </text><text x="0" y="383.74" textLength="224" lengthAdjust="spacingAndGlyphs"> &amp;#</text><text x="0" y="390.74" textLength="224" lengthAdjust="spacingAndGlyphs"> &amp;</text><text x="0" y="397.74" textLength="224" lengthAdjust="spacingAndGlyphs"> - #</text></g><g fill="rgb(249,249,249)" opacity="1" xml:space="preserve"><text x="0" y="26.74" textLength="224" lengthAdjust="spacingAndGlyphs"> # </text><text x="0" y="33.74" textLength="224" lengthAdjust="spacingAndGlyphs"> # </text><text x="0" y="40.74" textLength="224" lengthAdjust="spacingAndGlyphs"> ## </text><text x="0" y="47.74" textLength="224" lengthAdjust="spacingAndGlyphs"> ### </text><text x="0" y="54.74" textLength="224" lengthAdjust="spacingAndGlyphs"> ## </text><text x="0" y="61.74" textLength="224" lengthAdjust="spacingAndGlyphs"> ### </text><text x="0" y="68.74" textLength="224" lengthAdjust="spacingAndGlyphs"> ### </text><text x="0" y="75.74" textLength="224" lengthAdjust="spacingAndGlyphs"> #### </text><text x="0" y="82.74" textLength="224" lengthAdjust="spacingAndGlyphs"> #### </text><text x="0" y="89.74" textLength="224" lengthAdjust="spacingAndGlyphs"> #### </text><text x="0" y="96.74" textLength="224" lengthAdjust="spacingAndGlyphs"> ##### </text><text x="0" y="103.74" textLength="224" lengthAdjust="spacingAndGlyphs"> ##### </text><text x="0" y="110.74" textLength="224" lengthAdjust="spacingAndGlyphs"> #### </text><text x="0" y="117.74" textLength="224" lengthAdjust="spacingAndGlyphs"> ### </text><text x="0" y="124.74" textLength="224" lengthAdjust="spacingAndGlyphs"> ### </text><text x="0" y="131.74" textLength="224" lengthAdjust="spacingAndGlyphs"> ## </text><text x="0" y="138.74" textLength="224" lengthAdjust="spacingAndGlyphs"> ## </text><text x="0" y="145.74" textLength="224" lengthAdjust="spacingAndGlyphs"> # ##
{"version":"signal-rituals-bytecode-storage-v1","storagePattern":"SSTORE2-style bytecode data contracts","storageMode":"derived-glyphs-from-tone-style","grid":{"columns":65,"rows":116},"frames":17,"glyphPalette":" #%&*+,-/:;=\\|▀█▌▐░▒▓","configuredGlyphs":" .,:;-/\\|+=*#%░▒▓█▌▐▀▄","playbackMode":"pingpong","displayedFrames":17,"timelineFrames":32,"runtimeLoop":"fixed-frame-timeline","procedural":false,"proceduralOverlay":false,"proceduralMotion":{"enabled":false},"glyphStrategy":"derive glyph density from 8-level tone data and sparse style anchors; edge-aware mode stores sparse directional edge styles; readable keyframes remain reference-only","glyphLayerStored":false,"omittedGlyphLayerBytes":80113,"toneLevels":8,"toneBitsPerCell":3,"styleStorageMode":"sparseAnchors","styleBlobName":"style_sparse_anchors_packed","styleSparseMode":"anchor-edge-derived-style","styleIndexBits":13,"styleValueBits":4,"styleSparseBytes":18074,"styleDense4BitBytes":64090,"ritualEngineCompatibility":{"version":"ritual-engine-compat-v1","ritualEngineReady":true,"rendererVersion":"svg-tone-style-layer-v3","remixOverlaysCanonical":false,"notes":["Ritual Engine overlays are non-canonical collector-side transforms applied after canonical reconstruction.","This compatibility block is readiness metadata only and does not change the canonical artwork output."],"seedField":{"field":"ritualEngine.seed","fallbackField":"settingsSeed","available":true,"value":2832209971},"canonicalDefaults":{"paletteId":"oil_6","paletteInvert":false,"palettePreserveLuminance":true,"asciiBrightness":-5,"asciiMidtones":4,"asciiHighlightFill":32,"asciiHighlightThreshold":98,"motionStyle":"rain","rainAccent":11,"asciiStatic":true,"asciiStaticAmount":8,"asciiStaticSpeed":47,"glitchEnabled":false,"glitchPasses":[[0,29,52],[0,25,33],[0,37,27]],"asciiAdaptiveSize":false},"potentiallyRemixableControls":["visualRenderer.paletteId","visualRenderer.paletteInvert","visualRenderer.palettePreserveLuminance","visualRenderer.effects.asciiBrightness","visualRenderer.effects.asciiMidtones","visualRenderer.effects.asciiHighlightFill","visualRenderer.effects.asciiHighlightThreshold","visualRenderer.effects.motionStyle","visualRenderer.effects.rainAccent","visualRenderer.effects.asciiStatic","visualRenderer.effects.asciiStaticAmount","visualRenderer.effects.asciiStaticSpeed","visualRenderer.effects.glitchEnabled","visualRenderer.effects.glitchPasses","visualRenderer.effects.asciiAdaptiveSize","ritualEngine.seed"],"lockedControls":["textGrid.columns","textGrid.rows","playback.frames","playback.timelineFrames","playback.mode","visualRenderer.effects.edgeAwareEnabled","visualRenderer.effects.edgeDogSmallRadius","visualRenderer.effects.edgeDogLargeRadius","visualRenderer.effects.edgeDogStrength","visualRenderer.effects.edgeDogThreshold","visualRenderer.effects.edgeSobelThreshold","visualRenderer.effects.edgeMinCellRatio","visualRenderer.effects.edgeRotateDirection","artifactFrame"]}}
xt x="0" y="397.74" textLength="231" lengthAdjust="spacingAndGlyphs"> / </text><text x="0" y="404.74" textLength="231" lengthAdjust="spacingAndGlyphs"> | </text></g><g fill="rgb(250,250,250)" opacity="1" xml:space="preserve"><text x="0" y="40.74" textLength="231" lengthAdjust="spacingAndGlyphs"> ######################## </text><text x="0" y="47.74" textLength="231" lengthAdjust="spacingAndGlyphs"> ######################## </text><text x="0" y="54.74" textLength="231" lengthAdjust="spacingAndGlyphs"> ######################## </text><text x="0" y="61.74" textLength="231" lengthAdjust="spacingAndGlyphs"> ######################## </text><text x="0" y="68.74" textLength="231" lengthAdjust="spacingAndGlyphs"> ######################## </text><text x="0" y="75.74" textLength="231" lengthAdjust="spacingAndGlyphs"> ######################## </text><text x="0" y="82.74" textLength="231" lengthAdjust="spacingAndGlyphs"> ######################## </text><text x="0" y="89.74" textLength="231" lengthAdjust="spacingAndGlyphs"> ########## ########### </text><text x="0" y="96.74" textLength="231" lengthAdjust="spacingAndGlyphs"> ######### ########## </text><text x="0" y="103.74" textLength="231" lengthAdjust="spacingAndGlyphs"> ######### ########## </text><text x="0" y="110.74" textLength="231" lengthAdjust="spacingAndGlyphs"> ######### ######### </text><text x="0" y="117.74" textLength="231" lengthAdjust="spacingAndGlyphs"> ######### ######### </text><text x="0" y="124.74" textLength="231" lengthAdjust="spacingAndGlyphs"> ######### ######### #</text><text x="0" y="131.74" textLength="231" lengthAdjust="spacingAndGlyphs"> ######### # #### ##</text><text x="0" y="138.74" textLength="231" lengthAdjust="spacingAndGlyphs"> ###### ## ## </text><text x="0" y="145.74" textLength="231" lengthAdjust="spacingAndGlyphs"> ##### ## #</text><text x="0" y="152.74" textLength="231" lengthAdjust="spacingAndGlyphs"> #### ##</text><text x="0" y="159.74" textLength="231" lengthAdjust="spacingAndGlyphs"> #### # ## </text><text x="0" y="166.74" textLength="231" lengthAdjust="spacingAndGlyphs"> ### ###### #</text><text x="0" y="173.74" textLength="231" lengthAdjust="spacingAndGlyphs"> ## ######## ##</text><text x="0" y="180.74" textLength="231" lengthAdjust="spacingAndGlyphs"> ## # ######## ## </text><text x="0" y="187.74" textLength="231" lengthAdjust="spacingAndGlyphs"> ## ### ########## #</text><text x="0" y="194.74" textLength="231" lengthAdjust="spacingAndGlyphs"> ## ## # ######## ##</text><text x="0" y="201.74" textLength="231" lengthAdjust="spacingAndGlyphs"> ### ## ## ######## ## </text><text x="0" y="208.74" textLength="231" lengthAdjust="spacingAndGlyphs"> ### # ## ########## #</text><text x="0" y="215.74" textLength="231" lengthAdjust="spacingAndGlyphs"> #### ########## ##</text><text x="0" y="222.74" textLength="231" lengthAdjust="spacingAndGlyphs"> ##### # ########## </text><text x="0" y="229.74" textLength="231" lengthAdjust="spacingAndGlyphs"> ###### # ######### #</text><text x="0" y="236.74" textLength="231" lengthAdjust="spacingAndGlyphs"> ###### # ####### ##</text><text x="0" y="243.74" textLength="231" lengthAdjust="spacingAndGlyphs"> ###### ########## </text><text x="0" y="250.74" textLength="231" lengthAdjust="spacingAndGlyphs"> ###### ########### #</text><text x="0" y="257.74" textLength="231" lengthAdjust="spacingAndGlyphs"> ##### # ####### ##</text><text x="0" y="264.74" textLength="231" lengthAdjust="spacingAndGlyphs"> ##### # ########## </text><text x="0" y="271.74" textLength="231" lengthAdjust="spacingAndGlyphs"> ##### # ######### #</text><text x="0" y="278.74" textLength="231" lengthAdjust="spacingAndGlyphs"> ##### ### ######## ##</text><text x="0" y="285.74" textLength="231" lengthAdjust="spacingAndGlyphs"> ####### ## # ########### </text><text x="0" y="292.74" textLength="231" lengthAdjust="spacingAndGlyphs"> ## #### # ########### #</text><text x="0" y="299.74" textLength="231" lengthAdjust="spacingAndGlyphs">## #### ## # ######### ##</text><text x="0" y="306.74" textLength="231" lengthAdjust="spacingAndGlyphs"># ###### ## # ############# </text><text x="0" y="313.74" textLength="231" lengthAdjust="spacingAndGlyphs"> ## ### ### ############ #</text><text x="0" y="320.74" textLength="231" lengthAdjust="spacingAndGlyphs">## #### # # ########## ##</text><text x="0" y="327.74" textLength="231" lengthAdjust="spacingAndGlyphs"># ####### # ############# </text><text x="0" y="334.74" textLength="231" lengthAdjust="spacingAndGlyphs"> ## ##### # ############# #</text><text x="0" y="341.74" textLength="231" lengthAdjust="spacingAndGlyphs">## ######## # ########### ##</text><text x="0" y="348.74" textLength="231" lengthAdjust="spacingAndGlyphs"># ########## ############## </text><text x="0" y="355.74" textLength="231" lengthAdjust="spacingAndGlyphs"> ## ######## # ############# </text><text x="0" y="362.74" textLength="231" lengthAdjust="spacingAndGlyphs">## ########### # ########## </text><text x="0" y="369.74" textLength="231" lengthAdjust="spacingAndGlyphs"># ############ ######### </text><text x="0" y="376.74" textLength="231" lengthAdjust="spacingAndGlyphs"> ## ######### # ########## </text><text x="0" y="383.74" textLength="231" lengthAdjust="spacingAndGlyphs">## ########## # ########### </text><text x="0" y="390.74" textLength="231" lengthAdjust="spacingAndGlyphs"># ### ## ## ## ## ### </text><text x="0" y="397.74" textLength="231" lengthAdjust="spacingAndGlyphs"> ## ## ## ### ### ### </text><text x="0" y="404.74" textLength="231" lengthAdjust="spacingAndGlyphs">## ## ## ## ### ### </text></g></g></svg>
N <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 231 406" width="231" height="406" data-poster-grid="33x58" data-source-grid="65x116" data-detail="0.5" data-background="0.55" data-poster-tones="8"><rect width="100%" height="100%" fill="#08090b"/><g font-family="ui-monospace,SFMono-Regular,Menlo,Consolas,monospace" font-size="9" font-weight="700" letter-spacing="0"><g fill="rgb(17,17,26)" opacity="0.86" xml:space="preserve"><text x="0" y="12.74" textLength="231" lengthAdjust="spacingAndGlyphs">:....,,,....,.:,...,,,,.....,:...</text><text x="0" y="19.74" textLength="231" lengthAdjust="spacingAndGlyphs">..,.,.....,::...,,,:...,,:,...,,,</text><text x="0" y="26.74" textLength="231" lengthAdjust="spacingAndGlyphs">,:....,,,....,.,:....,:,...,,,:..</text><text x="0" y="47.74" textLength="231" lengthAdjust="spacingAndGlyphs">..... ...,</text><text x="0" y="54.74" textLength="231" lengthAdjust="spacingAndGlyphs">..::. ..::</text><text x="0" y="61.74" textLength="231" lengthAdjust="spacingAndGlyphs">,.... ,...</text><text x="0" y="82.74" textLength="231" lengthAdjust="spacingAndGlyphs">...., ..,.</text><text x="0" y="89.74" textLength="231" lengthAdjust="spacingAndGlyphs">,::.. ,::.</text><text x="0" y="96.74" textLength="231" lengthAdjust="spacingAndGlyphs">...., ..., ....</text><text x="0" y="117.74" textLength="231" lengthAdjust="spacingAndGlyphs">..,:, _.,,, ..,:</text><text x="0" y="124.74" textLength="231" lengthAdjust="spacingAndGlyphs">,,... :,.... ,.. </text><text x="0" y="131.74" textLength="231" lengthAdjust="spacingAndGlyphs">..,.: ....,: . . </text><text x="0" y="152.74" textLength="231" lengthAdjust="spacingAndGlyphs">.,:,. ,,.....,:....,,,... </text><text x="0" y="159.74" textLength="231" lengthAdjust="spacingAndGlyphs">:.... ...,:,....,,,..... </text><text x="0" y="166.74" textLength="231" lengthAdjust="spacingAndGlyphs">.,.,: ..::....,::...,. . </text><text x="0" y="187.74" textLength="231" lengthAdjust="spacingAndGlyphs">.,:.. .: ..,::.... . </text><text x="0" y="194.74" textLength="231" lengthAdjust="spacingAndGlyphs">...,, . ,:..... </text><text x="0" y="201.74" textLength="231" lengthAdjust="spacingAndGlyphs">.,::. .: ..,,: </text><text x="0" y="222.74" textLength="231" lengthAdjust="spacingAndGlyphs">:,... .,, </text><text x="0" y="229.74" textLength="231" lengthAdjust="spacingAndGlyphs">..,., :,. </text><text x="0" y="236.74" textLength="231" lengthAdjust="spacingAndGlyphs">.:,.. ..,. </text><text x="0" y="257.74" textLength="231" lengthAdjust="spacingAndGlyphs">,..., .. </text><text x="0" y="264.74" textLength="231" lengthAdjust="spacingAndGlyphs">..,:: ,, </text><text x="0" y="271.74" textLength="231" lengthAdjust="spacingAndGlyphs">,:.. :. </text><text x="0" y="292.74" textLength="231" lengthAdjust="spacingAndGlyphs"> .. </text><text x="0" y="299.74" textLength="231" lengthAdjust="spacingAndGlyphs"> : .:: </text><text x="0" y="306.74" textLength="231" lengthAdjust="spacingAndGlyphs"> . . .. .</text><text x="0" y="327.74" textLength="231" lengthAdjust="spacingAndGlyphs"> . . :</text><text x="0" y="334.74" textLength="231" lengthAdjust="spacingAndGlyphs"> . </text><text x="0" y="341.74" textLength="231" lengthAdjust="spacingAndGlyphs"> , </text><text x="0" y="362.74" textLength="231" lengthAdjust="spacingAndGlyphs"> . ,:,</text><text x="0" y="369.74" textLength="231" lengthAdjust="spacingAndGlyphs"> . ,. ....</text><text x="0" y="376.74" textLength="231" lengthAdjust="spacingAndGlyphs"> .,.,</text><text x="0" y="397.74" textLength="231" lengthAdjust="spacingAndGlyphs"> . ,,...,.,:.</text><text x="0" y="404.74" textLength="231" lengthAdjust="spacingAndGlyphs"> . . ..,.:,....</text></g><g fill="rgb(41,41,65)" opacity="0.906" xml:space="preserve"><text x="0" y="222.74" textLength="231" lengthAdjust="spacingAndGlyphs"> █ ▌ </text><text x="0" y="229.74" textLength="231" lengthAdjust="spacingAndGlyphs"> ▓█ ▌ ▌ </text><text x="0" y="257.74" textLength="231" lengthAdjust="spacingAndGlyphs"> ▌ </text><text x="0" y="264.74" textLength="231" lengthAdjust="spacingAndGlyphs"> ▌ ▌</text><text x="0" y="271.74" textLength="231" lengthAdjust="spacingAndGlyphs"> ▌ </text><text x="0" y="341.74" textLength="231" lengthAdjust="spacingAndGlyphs"> ▌ </text><text x="0" y="397.74" textLength="231" lengthAdjust="spacingAndGlyphs"> ▌ </text><text x="0" y="404.74" textLength="231" lengthAdjust="spacingAndGlyphs"> █ █ </text></g><g fill="rgb(73,75,117)" opacity="0.951" xml:space="preserve"><text x="0" y="131.74" textLength="231" lengthAdjust="spacingAndGlyphs"> ▓ </text><text x="0" y="236.74" textLength="231" lengthAdjust="spacingAndGlyphs"> ░ </text><text x="0" y="264.74" textLength="231" lengthAdjust="spacingAndGlyphs"> / </text><text x="0" y="306.74" textLength="231" lengthAdjust="spacingAndGlyphs"> ░ % </text><text x="0" y="404.74" textLength="231" lengthAdjust="spacingAndGlyphs"> | </text></g><g fill="rgb(121,108,151)" opacity="0.997" xml:space="preserve"><text x="0" y="96.74" textLength="231" lengthAdjust="spacingAndGlyphs"> # </text><text x="0" y="131.74" textLength="231" lengthAdjust="spacingAndGlyphs"> - % </text><text x="0" y="138.74" textLength="231" lengthAdjust="spacingAndGlyphs"> % </text><text x="0" y="159.74" textLength="231" lengthAdjust="spacingAndGlyphs"> % </text><text x="0" y="180.74" textLength="231" lengthAdjust="spacingAndGlyphs"> /</text><text x="0" y="194.74" textLength="231" lengthAdjust="spacingAndGlyphs"> % </text><text x="0" y="201.74" textLength="231" lengthAdjust="spacingAndGlyphs"> / /</text><text x="0" y="222.74" textLength="231" lengthAdjust="spacingAndGlyphs"> # /</text><text x="0" y="243.74" textLength="231" lengthAdjust="spacingAndGlyphs"> / / </text><text x="0" y="250.74" textLength="231" lengthAdjust="spacingAndGlyphs"> % / </text><text x="0" y="257.74" textLength="231" lengthAdjust="spacingAndGlyphs"> # # </text><text x="0" y="264.74" textLength="231" lengthAdjust="spacingAndGlyphs"> / </text><text x="0" y="271.74" textLength="231" lengthAdjust="spacingAndGlyphs"> # % % </text><text x="0" y="278.74" textLength="231" lengthAdjust="spacingAndGlyphs"> % </text><text x="0" y="285.74" textLength="231" lengthAdjust="spacingAndGlyphs"> % </text><text x="0" y="292.74" textLength="231" lengthAdjust="spacingAndGlyphs">/ / % ░ % </text><text x="0" y="299.74" textLength="231" lengthAdjust="spacingAndGlyphs"> # </text><text x="0" y="313.74" textLength="231" lengthAdjust="spacingAndGlyphs">/ # # </text><text x="0" y="334.74" textLength="231" lengthAdjust="spacingAndGlyphs">/ \ % # </text><text x="0" y="341.74" textLength="231" lengthAdjust="spacingAndGlyphs"> % # # </text><text x="0" y="348.74" textLength="231" lengthAdjust="spacingAndGlyphs"> /</text><text x="0" y="362.74" textLength="231" lengthAdjust="spacingAndGlyphs"> % </text><text x="0" y="383.74" textLength="231" lengthAdjust="spacingAndGlyphs"> # </text><text x="0" y="390.74" textLength="231" lengthAdjust="spacingAndGlyphs"> % % </text><text x="0" y="397.74" textLength="231" lengthAdjust="spacingAndGlyphs"> % </text><text x="0" y="404.74" textLength="231" lengthAdjust="spacingAndGlyphs"> # </text></g><g fill="rgb(171,141,168)" opacity="1" xml:space="preserve"><text x="0" y="89.74" textLength="231" lengthAdjust="spacingAndGlyphs"> - </text><text x="0" y="110.74" textLength="231" lengthAdjust="spacingAndGlyphs"> | </text><text x="0" y="117.74" textLength="231" lengthAdjust="spacingAndGlyphs"> | </text><text x="0" y="138.74" textLength="231" lengthAdjust="spacingAndGlyphs"> /</text><text x="0" y="152.74" textLength="231" lengthAdjust="spacingAndGlyphs"> \ </text><text x="0" y="159.74" textLength="231" lengthAdjust="spacingAndGlyphs"> /</text><text x="0" y="166.74" textLength="231" lengthAdjust="spacingAndGlyphs"> - </text><text x="0" y="173.74" textLength="231" lengthAdjust="spacingAndGlyphs"> \ / </text><text x="0" y="194.74" textLength="231" lengthAdjust="spacingAndGlyphs"> | | \ </text><text x="0" y="208.74" textLength="231" lengthAdjust="spacingAndGlyphs"> \ | </text><text x="0" y="215.74" textLength="231" lengthAdjust="spacingAndGlyphs"> \ | </text><text x="0" y="222.74" textLength="231" lengthAdjust="spacingAndGlyphs"> || \\ </text><text x="0" y="236.74" textLength="231" lengthAdjust="spacingAndGlyphs"> / / | </text><text x="0" y="243.74" textLength="231" lengthAdjust="spacingAndGlyphs"> | </text><text x="0" y="257.74" textLength="231" lengthAdjust="spacingAndGlyphs"> \ / </text><text x="0" y="264.74" textLength="231" lengthAdjust="spacingAndGlyphs"> \ </text><text x="0" y="271.74" textLength="231" lengthAdjust="spacingAndGlyphs"> | \ </text><text x="0" y="278.74" textLength="231" lengthAdjust="spacingAndGlyphs"> | +| </text><text x="0" y="285.74" textLength="231" lengthAdjust="spacingAndGlyphs"> |+ </text><text x="0" y="292.74" textLength="231" lengthAdjust="spacingAndGlyphs"> \ | / </text><text x="0" y="299.74" textLength="231" lengthAdjust="spacingAndGlyphs"> | | </text><text x="0" y="306.74" textLength="231" lengthAdjust="spacingAndGlyphs"> \ </text><text x="0" y="313.74" textLength="231" lengthAdjust="spacingAndGlyphs"> | </text><text x="0" y="320.74" textLength="231" lengthAdjust="spacingAndGlyphs"> | - + </text><text x="0" y="327.74" textLength="231" lengthAdjust="spacingAndGlyphs"> | \ | </text><text x="0" y="334.74" textLength="231" lengthAdjust="spacingAndGlyphs"> \ </text><text x="0" y="341.74" textLength="231" lengthAdjust="spacingAndGlyphs"> \ </text><text x="0" y="355.74" textLength="231" lengthAdjust="spacingAndGlyphs">/ \ </text><text x="0" y="362.74" textLength="231" lengthAdjust="spacingAndGlyphs"> | </text><text x="0" y="369.74" textLength="231" lengthAdjust="spacingAndGlyphs"> \ </text><text x="0" y="376.74" textLength="231" lengthAdjust="spacingAndGlyphs">/ \\ </text><text x="0" y="383.74" textLength="231" lengthAdjust="spacingAndGlyphs"> / </text><text x="0" y="390.74" textLength="231" lengthAdjust="spacingAndGlyphs"> | | / </text><text x="0" y="397.74" textLength="231" lengthAdjust="spacingAndGlyphs">/ \ </text></g><g fill="rgb(210,176,169)" opacity="1" xml:space="preserve"><text x="0" y="89.74" textLength="231" lengthAdjust="spacingAndGlyphs"> - </text><text x="0" y="138.74" textLength="231" lengthAdjust="spacingAndGlyphs"> - - </text><text x="0" y="173.74" textLength="231" lengthAdjust="spacingAndGlyphs"> / </text><text x="0" y="215.74" textLength="231" lengthAdjust="spacingAndGlyphs"> /- </text><text x="0" y="229.74" textLength="231" lengthAdjust="spacingAndGlyphs"> /- </text><text x="0" y="236.74" textLength="231" lengthAdjust="spacingAndGlyphs"> |/ / </text><text x="0" y="243.74" textLength="231" lengthAdjust="spacingAndGlyphs"> / / </text><text x="0" y="250.74" textLength="231" lengthAdjust="spacingAndGlyphs"> - - </text><text x="0" y="257.74" textLength="231" lengthAdjust="spacingAndGlyphs"> / /- </text><text x="0" y="264.74" textLength="231" lengthAdjust="spacingAndGlyphs"> // / / </text><text x="0" y="271.74" textLength="231" lengthAdjust="spacingAndGlyphs"> / </text><text x="0" y="278.74" textLength="231" lengthAdjust="spacingAndGlyphs"> / // </text><text x="0" y="285.74" textLength="231" lengthAdjust="spacingAndGlyphs"> // </text><text x="0" y="292.74" textLength="231" lengthAdjust="spacingAndGlyphs"> - </text><text x="0" y="299.74" textLength="231" lengthAdjust="spacingAndGlyphs"> \ / /- </text><text x="0" y="306.74" textLength="231" lengthAdjust="spacingAndGlyphs"> // </text><text x="0" y="313.74" textLength="231" lengthAdjust="spacingAndGlyphs"> // / </text><text x="0" y="320.74" textLength="231" lengthAdjust="spacingAndGlyphs"> | - </text><text x="0" y="327.74" textLength="231" lengthAdjust="spacingAndGlyphs"> \- </text><text x="0" y="334.74" textLength="231" lengthAdjust="spacingAndGlyphs"> / - </text><text x="0" y="341.74" textLength="231" lengthAdjust="spacingAndGlyphs"> - </text><text x="0" y="348.74" textLength="231" lengthAdjust="spacingAndGlyphs"> \ ///- </text><text x="0" y="355.74" textLength="231" lengthAdjust="spacingAndGlyphs"> - / </text><text x="0" y="376.74" textLength="231" lengthAdjust="spacingAndGlyphs"> -/ - </text><text x="0" y="383.74" textLength="231" lengthAdjust="spacingAndGlyphs"> - </text><text x="0" y="390.74" textLength="231" lengthAdjust="spacingAndGlyphs"> /- / </text><text x="0" y="397.74" textLength="231" lengthAdjust="spacingAndGlyphs"> // </text><text x="0" y="404.74" textLength="231" lengthAdjust="spacingAndGlyphs"> | | </text></g><g fill="rgb(239,214,181)" opacity="1" xml:space="preserve"><text x="0" y="89.74" textLength="231" lengthAdjust="spacingAndGlyphs"> - </text><text x="0" y="110.74" textLength="231" lengthAdjust="spacingAndGlyphs"> | </text><text x="0" y="131.74" textLength="231" lengthAdjust="spacingAndGlyphs"> - </text><text x="0" y="138.74" textLength="231" lengthAdjust="spacingAndGlyphs"> / </text><text x="0" y="145.74" textLength="231" lengthAdjust="spacingAndGlyphs"> | </text><text x="0" y="152.74" textLength="231" lengthAdjust="spacingAndGlyphs"> |: </text><text x="0" y="159.74" textLength="231" lengthAdjust="spacingAndGlyphs"> : </text><text x="0" y="173.74" textLength="231" lengthAdjust="spacingAndGlyphs"> / </text><text x="0" y="180.74" textLength="231" lengthAdjust="spacingAndGlyphs"> | / </text><text x="0" y="194.74" textLength="231" lengthAdjust="spacingAndGlyphs"> / </text><text x="0" y="201.74" textLength="231" lengthAdjust="spacingAndGlyphs"> : / </text><text x="0" y="208.74" textLength="231" lengthAdjust="spacingAndGlyphs"> \ </text><text x="0" y="215.74" textLength="231" lengthAdjust="spacingAndGlyphs"> : / </text><text x="0" y="222.74" textLength="231" lengthAdjust="spacingAndGlyphs"> : </text><text x="0" y="229.74" textLength="231" lengthAdjust="spacingAndGlyphs"> ,, </text><text x="0" y="236.74" textLength="231" lengthAdjust="spacingAndGlyphs"> , </text><text x="0" y="243.74" textLength="231" lengthAdjust="spacingAndGlyphs"> . </text><text x="0" y="257.74" textLength="231" lengthAdjust="spacingAndGlyphs"> | , : </text><text x="0" y="264.74" textLength="231" lengthAdjust="spacingAndGlyphs"> - </text><text x="0" y="271.74" textLength="231" lengthAdjust="spacingAndGlyphs"> - - : , </text><text x="0" y="278.74" textLength="231" lengthAdjust="spacingAndGlyphs"> / / </text><text x="0" y="285.74" textLength="231" lengthAdjust="spacingAndGlyphs"> : </text><text x="0" y="292.74" textLength="231" lengthAdjust="spacingAndGlyphs"> / , : </text><text x="0" y="299.74" textLength="231" lengthAdjust="spacingAndGlyphs"> / , </text><text x="0" y="313.74" textLength="231" lengthAdjust="spacingAndGlyphs"> / </text><text x="0" y="320.74" textLength="231" lengthAdjust="spacingAndGlyphs"> / | : </text><text x="0" y="327.74" textLength="231" lengthAdjust="spacingAndGlyphs"> /: , </text><text x="0" y="334.74" textLength="231" lengthAdjust="spacingAndGlyphs"> / :\ </text><text x="0" y="341.74" textLength="231" lengthAdjust="spacingAndGlyphs"> : : </text><text x="0" y="355.74" textLength="231" lengthAdjust="spacingAndGlyphs"> \ / </text><text x="0" y="362.74" textLength="231" lengthAdjust="spacingAndGlyphs"> , . / </text><text x="0" y="369.74" textLength="231" lengthAdjust="spacingAndGlyphs"> ::: </text><text x="0" y="376.74" textLength="231" lengthAdjust="spacingAndGlyphs"> : </text><text x="0" y="383.74" textLength="231" lengthAdjust="spacingAndGlyphs"> ; </text><text x="0" y="390.74" textLength="231" lengthAdjust="spacingAndGlyphs"> / </text><te
{"version":"signal-rituals-bytecode-storage-v1","storagePattern":"SSTORE2-style bytecode data contracts","storageMode":"derived-glyphs-from-tone-style","grid":{"columns":65,"rows":116},"frames":17,"glyphPalette":" #%&*+-/\\|†‡","configuredGlyphs":" +*#%†‡","playbackMode":"pingpong","displayedFrames":17,"timelineFrames":32,"runtimeLoop":"fixed-frame-timeline","procedural":false,"proceduralOverlay":false,"proceduralMotion":{"enabled":false},"glyphStrategy":"derive glyph density from 8-level tone data and sparse style anchors; edge-aware mode stores sparse directional edge styles; readable keyframes remain reference-only","glyphLayerStored":false,"omittedGlyphLayerBytes":64090,"toneLevels":8,"toneBitsPerCell":3,"styleStorageMode":"dense4bit","styleBlobName":"style_dense_4bit_packed","styleBitsPerCell":4,"styleSparseMode":"anchor-edge-derived-style","styleIndexBits":13,"styleValueBits":4,"styleSparseBytes":154356,"styleDense4BitBytes":64090,"ritualEngineCompatibility":{"version":"ritual-engine-compat-v1","ritualEngineReady":true,"rendererVersion":"svg-tone-style-layer-v3","remixOverlaysCanonical":false,"notes":["Ritual Engine overlays are non-canonical collector-side transforms applied after canonical reconstruction.","This compatibility block is readiness metadata only and does not change the canonical artwork output."],"seedField":{"field":"ritualEngine.seed","fallbackField":"settingsSeed","available":true,"value":422573176},"canonicalDefaults":{"paletteId":"lospec500","paletteInvert":false,"palettePreserveLuminance":true,"asciiBrightness":0,"asciiMidtones":2,"asciiHighlightFill":0,"asciiHighlightThreshold":90,"motionStyle":"rain","rainAccent":1,"asciiStatic":false,"asciiStaticAmount":0,"asciiStaticSpeed":33,"glitchEnabled":false,"glitchPasses":[[7,41,31],[7,44,26],[1,39,32]],"asciiAdaptiveSize":true},"potentiallyRemixableControls":["visualRenderer.paletteId","visualRenderer.paletteInvert","visualRenderer.palettePreserveLuminance","visualRenderer.effects.asciiBrightness","visualRenderer.effects.asciiMidtones","visualRenderer.effects.asciiHighlightFill","visualRenderer.effects.asciiHighlightThreshold","visualRenderer.effects.motionStyle","visualRenderer.effects.rainAccent","visualRenderer.effects.asciiStatic","visualRenderer.effects.asciiStaticAmount","visualRenderer.effects.asciiStaticSpeed","visualRenderer.effects.glitchEnabled","visualRenderer.effects.glitchPasses","visualRenderer.effects.asciiAdaptiveSize","ritualEngine.seed"],"lockedControls":["textGrid.columns","textGrid.rows","playback.frames","playback.timelineFrames","playback.mode","visualRenderer.effects.edgeAwareEnabled","visualRenderer.effects.edgeDogSmallRadius","visualRenderer.effects.edgeDogLargeRadius","visualRenderer.effects.edgeDogStrength","visualRenderer.effects.edgeDogThreshold","visualRenderer.effects.edgeSobelThreshold","visualRenderer.effects.edgeMinCellRatio","visualRenderer.effects.edgeRotateDirection","artifactFrame"]}}
2K74" textLength="231" lengthAdjust="spacingAndGlyphs"> * # </text><text x="0" y="68.74" textLength="231" lengthAdjust="spacingAndGlyphs"> * * * </text><text x="0" y="75.74" textLength="231" lengthAdjust="spacingAndGlyphs"> * </text><text x="0" y="82.74" textLength="231" lengthAdjust="spacingAndGlyphs"> # * </text><text x="0" y="89.74" textLength="231" lengthAdjust="spacingAndGlyphs"> *+ </text><text x="0" y="110.74" textLength="231" lengthAdjust="spacingAndGlyphs"> - </text><text x="0" y="124.74" textLength="231" lengthAdjust="spacingAndGlyphs"> | </text><text x="0" y="131.74" textLength="231" lengthAdjust="spacingAndGlyphs"> \/ - </text><text x="0" y="152.74" textLength="231" lengthAdjust="spacingAndGlyphs"> * * </text><text x="0" y="159.74" textLength="231" lengthAdjust="spacingAndGlyphs"> + * </text><text x="0" y="166.74" textLength="231" lengthAdjust="spacingAndGlyphs"> * | </text><text x="0" y="173.74" textLength="231" lengthAdjust="spacingAndGlyphs"> * * \ </text><text x="0" y="180.74" textLength="231" lengthAdjust="spacingAndGlyphs"> / + </text><text x="0" y="187.74" textLength="231" lengthAdjust="spacingAndGlyphs"> * / * * * </text><text x="0" y="194.74" textLength="231" lengthAdjust="spacingAndGlyphs"> +* * * * \</text><text x="0" y="201.74" textLength="231" lengthAdjust="spacingAndGlyphs"> * * / </text><text x="0" y="208.74" textLength="231" lengthAdjust="spacingAndGlyphs"> * \ * </text><text x="0" y="215.74" textLength="231" lengthAdjust="spacingAndGlyphs"> \\ * </text><text x="0" y="222.74" textLength="231" lengthAdjust="spacingAndGlyphs"> * </text><text x="0" y="229.74" textLength="231" lengthAdjust="spacingAndGlyphs"> * * </text><text x="0" y="236.74" textLength="231" lengthAdjust="spacingAndGlyphs"> / </text><text x="0" y="243.74" textLength="231" lengthAdjust="spacingAndGlyphs"> / # * </text><text x="0" y="257.74" textLength="231" lengthAdjust="spacingAndGlyphs"> + + </text><text x="0" y="271.74" textLength="231" lengthAdjust="spacingAndGlyphs"> * ** </text><text x="0" y="278.74" textLength="231" lengthAdjust="spacingAndGlyphs"> *| |</text><text x="0" y="285.74" textLength="231" lengthAdjust="spacingAndGlyphs"> / </text><text x="0" y="292.74" textLength="231" lengthAdjust="spacingAndGlyphs"> # </text><text x="0" y="299.74" textLength="231" lengthAdjust="spacingAndGlyphs"> + </text><text x="0" y="306.74" textLength="231" lengthAdjust="spacingAndGlyphs"> / / * </text><text x="0" y="313.74" textLength="231" lengthAdjust="spacingAndGlyphs"> # * | </text><text x="0" y="320.74" textLength="231" lengthAdjust="spacingAndGlyphs"> * </text><text x="0" y="327.74" textLength="231" lengthAdjust="spacingAndGlyphs"> * * </text><text x="0" y="334.74" textLength="231" lengthAdjust="spacingAndGlyphs"> * + * *</text><text x="0" y="341.74" textLength="231" lengthAdjust="spacingAndGlyphs"> / </text><text x="0" y="348.74" textLength="231" lengthAdjust="spacingAndGlyphs"> * * / / </text><text x="0" y="355.74" textLength="231" lengthAdjust="spacingAndGlyphs"> * * |*</text><text x="0" y="362.74" textLength="231" lengthAdjust="spacingAndGlyphs"> * / </text><text x="0" y="369.74" textLength="231" lengthAdjust="spacingAndGlyphs"> # + * * *</text><text x="0" y="376.74" textLength="231" lengthAdjust="spacingAndGlyphs"> * / </text><text x="0" y="383.74" textLength="231" lengthAdjust="spacingAndGlyphs"> * * * / * + </text><text x="0" y="390.74" textLength="231" lengthAdjust="spacingAndGlyphs"> * * # #</text><text x="0" y="397.74" textLength="231" lengthAdjust="spacingAndGlyphs"> * * </text><text x="0" y="404.74" textLength="231" lengthAdjust="spacingAndGlyphs"> * ** *+ *</text></g><g fill="rgb(218,223,195)" opacity="1" xml:space="preserve"><text x="0" y="12.74" textLength="231" lengthAdjust="spacingAndGlyphs"> # </text><text x="0" y="54.74" textLength="231" lengthAdjust="spacingAndGlyphs"> # </text><text x="0" y="117.74" textLength="231" lengthAdjust="spacingAndGlyphs"> ## &amp; </text><text x="0" y="152.74" textLength="231" lengthAdjust="spacingAndGlyphs"> # </text><text x="0" y="159.74" textLength="231" lengthAdjust="spacingAndGlyphs"> # </text><text x="0" y="180.74" textLength="231" lengthAdjust="spacingAndGlyphs"> | </text><text x="0" y="187.74" textLength="231" lengthAdjust="spacingAndGlyphs"> \ </text><text x="0" y="194.74" textLength="231" lengthAdjust="spacingAndGlyphs"> / </text><text x="0" y="208.74" textLength="231" lengthAdjust="spacingAndGlyphs"> - </text><text x="0" y="250.74" textLength="231" lengthAdjust="spacingAndGlyphs"> \ # </text><text x="0" y="257.74" textLength="231" lengthAdjust="spacingAndGlyphs"> # </text><text x="0" y="292.74" textLength="231" lengthAdjust="spacingAndGlyphs"> / </text><text x="0" y="313.74" textLength="231" lengthAdjust="spacingAndGlyphs"> / </text><text x="0" y="348.74" textLength="231" lengthAdjust="spacingAndGlyphs"> | </text></g><g fill="rgb(255,255,255)" opacity="1" xml:space="preserve"><text x="0" y="5.74" textLength="231" lengthAdjust="spacingAndGlyphs"> + </text><text x="0" y="19.74" textLength="231" lengthAdjust="spacingAndGlyphs"> + +</text><text x="0" y="26.74" textLength="231" lengthAdjust="spacingAndGlyphs"> + +</text><text x="0" y="33.74" textLength="231" lengthAdjust="spacingAndGlyphs"> ++</text><text x="0" y="40.74" textLength="231" lengthAdjust="spacingAndGlyphs"> ++</text><text x="0" y="47.74" textLength="231" lengthAdjust="spacingAndGlyphs"> ++ </text><text x="0" y="54.74" textLength="231" lengthAdjust="spacingAndGlyphs"> + + </text><text x="0" y="61.74" textLength="231" lengthAdjust="spacingAndGlyphs"> + + + +</text><text x="0" y="68.74" textLength="231" lengthAdjust="spacingAndGlyphs"> + +</text><text x="0" y="75.74" textLength="231" lengthAdjust="spacingAndGlyphs"> ++</text><text x="0" y="82.74" textLength="231" lengthAdjust="spacingAndGlyphs"> +++</text><text x="0" y="89.74" textLength="231" lengthAdjust="spacingAndGlyphs"> + +++</text><text x="0" y="96.74" textLength="231" lengthAdjust="spacingAndGlyphs"> ++ + </text><text x="0" y="103.74" textLength="231" lengthAdjust="spacingAndGlyphs"> + </text><text x="0" y="110.74" textLength="231" lengthAdjust="spacingAndGlyphs"> + ++</text><text x="0" y="117.74" textLength="231" lengthAdjust="spacingAndGlyphs"> + +++</text><text x="0" y="124.74" textLength="231" lengthAdjust="spacingAndGlyphs"> +++ ++ +++</text><text x="0" y="131.74" textLength="231" lengthAdjust="spacingAndGlyphs"> + ++</text><text x="0" y="138.74" textLength="231" lengthAdjust="spacingAndGlyphs"> ++ </text><text x="0" y="145.74" textLength="231" lengthAdjust="spacingAndGlyphs"> ++ + + </text><text x="0" y="152.74" textLength="231" lengthAdjust="spacingAndGlyphs"> + ++</text><text x="0" y="159.74" textLength="231" lengthAdjust="spacingAndGlyphs"> + ++</text><text x="0" y="166.74" textLength="231" lengthAdjust="spacingAndGlyphs"> + ++ ++</text><text x="0" y="173.74" textLength="231" lengthAdjust="spacingAndGlyphs"> +++ +</text><text x="0" y="180.74" textLength="231" lengthAdjust="spacingAndGlyphs"> ++ </text><text x="0" y="187.74" textLength="231" lengthAdjust="spacingAndGlyphs"> + + + </text><text x="0" y="194.74" textLength="231" lengthAdjust="spacingAndGlyphs"> +++ + + </text><text x="0" y="201.74" textLength="231" lengthAdjust="spacingAndGlyphs"> ++ ++ ++</text><text x="0" y="208.74" textLength="231" lengthAdjust="spacingAndGlyphs"> +++ ++ +</text><text x="0" y="215.74" textLength="231" lengthAdjust="spacingAndGlyphs"> +++ + + + +</text><text x="0" y="222.74" textLength="231" lengthAdjust="spacingAndGlyphs"> ++ ++ ++ + </text><text x="0" y="229.74" textLength="231" lengthAdjust="spacingAndGlyphs"> + +++ + + ++ + </text><text x="0" y="236.74" textLength="231" lengthAdjust="spacingAndGlyphs"> +++ + +++ + </text><text x="0" y="243.74" textLength="231" lengthAdjust="spacingAndGlyphs"> +++ +++ + + +</text><text x="0" y="250.74" textLength="231" lengthAdjust="spacingAndGlyphs"> + +++ + ++ + +</text><text x="0" y="257.74" textLength="231" lengthAdjust="spacingAndGlyphs"> +++ ++ + ++ +</text><text x="0" y="264.74" textLength="231" lengthAdjust="spacingAndGlyphs"> ++ +++ +++ + </text><text x="0" y="271.74" textLength="231" lengthAdjust="spacingAndGlyphs"> +++ + ++ </text><text x="0" y="278.74" textLength="231" lengthAdjust="spacingAndGlyphs"> +++ ++ + </text><text x="0" y="285.74" textLength="231" lengthAdjust="spacingAndGlyphs"> + +++ ++ +</text><text x="0" y="292.74" textLength="231" lengthAdjust="spacingAndGlyphs"> +++ ++ ++</text><text x="0" y="299.74" textLength="231" lengthAdjust="spacingAndGlyphs"> ++ ++ +++ + </text><text x="0" y="306.74" textLength="231" lengthAdjust="spacingAndGlyphs"> +++ ++ </text><text x="0" y="313.74" textLength="231" lengthAdjust="spacingAndGlyphs"> +++ ++ </text><text x="0" y="320.74" textLength="231" lengthAdjust="spacingAndGlyphs"> + ++ +++ + +</text><text x="0" y="327.74" textLength="231" lengthAdjust="spacingAndGlyphs"> +++ +++ +++</text><text x="0" y="334.74" textLength="231" lengthAdjust="spacingAndGlyphs"> + ++ + </text><text x="0" y="341.74" textLength="231" lengthAdjust="spacingAndGlyphs"> + ++ </text><text x="0" y="348.74" textLength="231" lengthAdjust="spacingAndGlyphs"> ++ + </text><text x="0" y="355.74" textLength="231" lengthAdjust="spacingAndGlyphs"> ++ </text><text x="0" y="362.74" textLength="231" lengthAdjust="spacingAndGlyphs"> ++ +</text><text x="0" y="369.74" textLength="231" lengthAdjust="spacingAndGlyphs"> ++ </text><text x="0" y="376.74" textLength="231" lengthAdjust="spacingAndGlyphs"> ++ </text><text x="0" y="383.74" textLength="231" lengthAdjust="spacingAndGlyphs"> + ++ ++ </text><text x="0" y="390.74" textLength="231" lengthAdjust="spacingAndGlyphs"> + + +++ ++ </text><text x="0" y="397.74" textLength="231" lengthAdjust="spacingAndGlyphs"> + +++ + +</text><text x="0" y="404.74" textLength="231" lengthAdjust="spacingAndGlyphs"> +++ </text></g></g></svg>
N <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 231 406" width="231" height="406" data-poster-grid="33x58" data-source-grid="65x116" data-detail="0.5" data-background="0.39" data-poster-tones="8"><rect width="100%" height="100%" fill="#08090b"/><g font-family="ui-monospace,SFMono-Regular,Menlo,Consolas,monospace" font-size="9" font-weight="700" letter-spacing="0"><g fill="rgb(24,9,16)" opacity="0.86" xml:space="preserve"><text x="0" y="19.74" textLength="231" lengthAdjust="spacingAndGlyphs">‡‡‡‡‡‡†‡‡‡‡‡‡‡++ *‡‡†‡‡†‡‡‡‡++ * </text><text x="0" y="26.74" textLength="231" lengthAdjust="spacingAndGlyphs">‡‡‡‡‡‡‡†‡‡‡‡‡‡* +‡‡‡†‡‡†‡‡‡* </text><text x="0" y="54.74" textLength="231" lengthAdjust="spacingAndGlyphs">‡‡‡‡‡‡ * + #‡‡‡†‡‡‡‡‡‡+ #</text><text x="0" y="61.74" textLength="231" lengthAdjust="spacingAndGlyphs">‡‡‡‡+* + / +‡‡‡‡†‡‡‡‡‡# + </text><text x="0" y="89.74" textLength="231" lengthAdjust="spacingAndGlyphs">‡‡#++++ # / ++‡‡‡‡‡‡†‡* </text><text x="0" y="96.74" textLength="231" lengthAdjust="spacingAndGlyphs">‡‡++*# + * +**‡‡‡†‡‡‡‡# *</text><text x="0" y="124.74" textLength="231" lengthAdjust="spacingAndGlyphs">## + ## * ‡‡‡‡‡‡‡‡‡†* </text><text x="0" y="131.74" textLength="231" lengthAdjust="spacingAndGlyphs">+ **# +++ # + *‡‡‡‡‡‡‡‡‡‡++ </text><text x="0" y="159.74" textLength="231" lengthAdjust="spacingAndGlyphs"> #++‡† # * / +‡‡#+ </text><text x="0" y="166.74" textLength="231" lengthAdjust="spacingAndGlyphs"> +**‡‡+ ++/ #†‡++* </text><text x="0" y="194.74" textLength="231" lengthAdjust="spacingAndGlyphs"> + ## *## + *†‡++ </text><text x="0" y="201.74" textLength="231" lengthAdjust="spacingAndGlyphs"> * |+ ‡‡++ ‡†+ </text><text x="0" y="229.74" textLength="231" lengthAdjust="spacingAndGlyphs"> ‡‡ + # \* #‡‡+ ‡‡++ #</text><text x="0" y="236.74" textLength="231" lengthAdjust="spacingAndGlyphs"> #‡‡+ / / #+ +‡‡# ‡‡*# </text><text x="0" y="264.74" textLength="231" lengthAdjust="spacingAndGlyphs">+ ‡‡‡†++* + # +++ </text><text x="0" y="271.74" textLength="231" lengthAdjust="spacingAndGlyphs"># ++‡‡†‡# + + * * ## </text><text x="0" y="299.74" textLength="231" lengthAdjust="spacingAndGlyphs">* ++†‡‡‡‡‡+| # * +** </text><text x="0" y="306.74" textLength="231" lengthAdjust="spacingAndGlyphs">+ *‡†‡‡‡‡*# #\+ + *</text><text x="0" y="334.74" textLength="231" lengthAdjust="spacingAndGlyphs">* ‡†‡‡‡‡‡‡‡‡#++ # </text><text x="0" y="341.74" textLength="231" lengthAdjust="spacingAndGlyphs">+ †‡‡‡# ++‡‡‡‡ + + </text><text x="0" y="369.74" textLength="231" lengthAdjust="spacingAndGlyphs"> ++‡‡#\ ++**##++ * # </text><text x="0" y="376.74" textLength="231" lengthAdjust="spacingAndGlyphs"> #‡‡++ + + </text><text x="0" y="404.74" textLength="231" lengthAdjust="spacingAndGlyphs"> # + *‡‡+++ * **#‡‡ </text></g><g fill="rgb(57,31,45)" opacity="0.906" xml:space="preserve"><text x="0" y="19.74" textLength="231" lengthAdjust="spacingAndGlyphs"> † </text><text x="0" y="26.74" textLength="231" lengthAdjust="spacingAndGlyphs"> / </text><text x="0" y="54.74" textLength="231" lengthAdjust="spacingAndGlyphs"> † † </text><text x="0" y="89.74" textLength="231" lengthAdjust="spacingAndGlyphs"> † % † | </text><text x="0" y="96.74" textLength="231" lengthAdjust="spacingAndGlyphs"> ‡ / | </text><text x="0" y="124.74" textLength="231" lengthAdjust="spacingAndGlyphs"> †‡ | | </text><text x="0" y="131.74" textLength="231" lengthAdjust="spacingAndGlyphs"> % </text><text x="0" y="159.74" textLength="231" lengthAdjust="spacingAndGlyphs"> † - † </text><text x="0" y="166.74" textLength="231" lengthAdjust="spacingAndGlyphs"> / </text><text x="0" y="194.74" textLength="231" lengthAdjust="spacingAndGlyphs"> / / † </text><text x="0" y="201.74" textLength="231" lengthAdjust="spacingAndGlyphs"> % † | | </text><text x="0" y="229.74" textLength="231" lengthAdjust="spacingAndGlyphs"> † \ </text><text x="0" y="236.74" textLength="231" lengthAdjust="spacingAndGlyphs">† † </text><text x="0" y="264.74" textLength="231" lengthAdjust="spacingAndGlyphs"> †† </text><text x="0" y="271.74" textLength="231" lengthAdjust="spacingAndGlyphs"> ‡ † †</text><text x="0" y="299.74" textLength="231" lengthAdjust="spacingAndGlyphs"> / / </text><text x="0" y="306.74" textLength="231" lengthAdjust="spacingAndGlyphs"> † ‡ / † † </text><text x="0" y="334.74" textLength="231" lengthAdjust="spacingAndGlyphs"> †% </text><text x="0" y="341.74" textLength="231" lengthAdjust="spacingAndGlyphs"> † \ † † %</text><text x="0" y="369.74" textLength="231" lengthAdjust="spacingAndGlyphs">| / - </text><text x="0" y="376.74" textLength="231" lengthAdjust="spacingAndGlyphs">| † / † </text><text x="0" y="404.74" textLength="231" lengthAdjust="spacingAndGlyphs"> † † | </text></g><g fill="rgb(68,72,122)" opacity="0.951" xml:space="preserve"><text x="0" y="26.74" textLength="231" lengthAdjust="spacingAndGlyphs"> / </text><text x="0" y="54.74" textLength="231" lengthAdjust="spacingAndGlyphs"> % </text><text x="0" y="61.74" textLength="231" lengthAdjust="spacingAndGlyphs"> % - # | </text><text x="0" y="96.74" textLength="231" lengthAdjust="spacingAndGlyphs"> % / </text><text x="0" y="124.74" textLength="231" lengthAdjust="spacingAndGlyphs"> %% </text><text x="0" y="131.74" textLength="231" lengthAdjust="spacingAndGlyphs"> | </text><text x="0" y="159.74" textLength="231" lengthAdjust="spacingAndGlyphs"> / - | \ </text><text x="0" y="166.74" textLength="231" lengthAdjust="spacingAndGlyphs"> % </text><text x="0" y="194.74" textLength="231" lengthAdjust="spacingAndGlyphs">/ #| \ </text><text x="0" y="201.74" textLength="231" lengthAdjust="spacingAndGlyphs"># % | </text><text x="0" y="229.74" textLength="231" lengthAdjust="spacingAndGlyphs">| % </text><text x="0" y="264.74" textLength="231" lengthAdjust="spacingAndGlyphs"> //|% †</text><text x="0" y="271.74" textLength="231" lengthAdjust="spacingAndGlyphs"> || </text><text x="0" y="299.74" textLength="231" lengthAdjust="spacingAndGlyphs"> \ </text><text x="0" y="306.74" textLength="231" lengthAdjust="spacingAndGlyphs"> % / </text><text x="0" y="334.74" textLength="231" lengthAdjust="spacingAndGlyphs"> % % † </text><text x="0" y="341.74" textLength="231" lengthAdjust="spacingAndGlyphs"> / / </text><text x="0" y="369.74" textLength="231" lengthAdjust="spacingAndGlyphs"> % % </text><text x="0" y="376.74" textLength="231" lengthAdjust="spacingAndGlyphs"> # %</text><text x="0" y="404.74" textLength="231" lengthAdjust="spacingAndGlyphs"> % </text></g><g fill="rgb(103,110,146)" opacity="0.997" xml:space="preserve"><text x="0" y="12.74" textLength="231" lengthAdjust="spacingAndGlyphs"> | | </text><text x="0" y="26.74" textLength="231" lengthAdjust="spacingAndGlyphs"> | </text><text x="0" y="33.74" textLength="231" lengthAdjust="spacingAndGlyphs"> % </text><text x="0" y="54.74" textLength="231" lengthAdjust="spacingAndGlyphs"> % </text><text x="0" y="61.74" textLength="231" lengthAdjust="spacingAndGlyphs"> % </text><text x="0" y="68.74" textLength="231" lengthAdjust="spacingAndGlyphs"> / </text><text x="0" y="75.74" textLength="231" lengthAdjust="spacingAndGlyphs"> † % </text><text x="0" y="82.74" textLength="231" lengthAdjust="spacingAndGlyphs"> / </text><text x="0" y="89.74" textLength="231" lengthAdjust="spacingAndGlyphs"> % | </text><text x="0" y="96.74" textLength="231" lengthAdjust="spacingAndGlyphs"> %/ </text><text x="0" y="103.74" textLength="231" lengthAdjust="spacingAndGlyphs"> / </text><text x="0" y="117.74" textLength="231" lengthAdjust="spacingAndGlyphs"> % </text><text x="0" y="124.74" textLength="231" lengthAdjust="spacingAndGlyphs"> / </text><text x="0" y="131.74" textLength="231" lengthAdjust="spacingAndGlyphs"> / </text><text x="0" y="138.74" textLength="231" lengthAdjust="spacingAndGlyphs"> | - % </text><text x="0" y="145.74" textLength="231" lengthAdjust="spacingAndGlyphs"> % / </text><text x="0" y="152.74" textLength="231" lengthAdjust="spacingAndGlyphs"> \ - </text><text x="0" y="159.74" textLength="231" lengthAdjust="spacingAndGlyphs"> / / % / </text><text x="0" y="166.74" textLength="231" lengthAdjust="spacingAndGlyphs"> %# | </text><text x="0" y="173.74" textLength="231" lengthAdjust="spacingAndGlyphs"> / # | / </text><text x="0" y="180.74" textLength="231" lengthAdjust="spacingAndGlyphs">% | </text><text x="0" y="187.74" textLength="231" lengthAdjust="spacingAndGlyphs"> % % </text><text x="0" y="201.74" textLength="231" lengthAdjust="spacingAndGlyphs"> % </text><text x="0" y="208.74" textLength="231" lengthAdjust="spacingAndGlyphs">| % \ </text><text x="0" y="215.74" textLength="231" lengthAdjust="spacingAndGlyphs"> | </text><text x="0" y="222.74" textLength="231" lengthAdjust="spacingAndGlyphs"> % \</text><text x="0" y="229.74" textLength="231" lengthAdjust="spacingAndGlyphs"> \ </text><text x="0" y="243.74" textLength="231" lengthAdjust="spacingAndGlyphs"> % / % | </text><text x="0" y="271.74" textLength="231" lengthAdjust="spacingAndGlyphs"> % \ % </text><text x="0" y="285.74" textLength="231" lengthAdjust="spacingAndGlyphs"> / / || </text><text x="0" y="292.74" textLength="231" lengthAdjust="spacingAndGlyphs"> / </text><text x="0" y="299.74" textLength="231" lengthAdjust="spacingAndGlyphs"> % / </text><text x="0" y="306.74" textLength="231" lengthAdjust="spacingAndGlyphs"> # </text><text x="0" y="313.74" textLength="231" lengthAdjust="spacingAndGlyphs"> \ / %||</text><text x="0" y="327.74" textLength="231" lengthAdjust="spacingAndGlyphs"> / </text><text x="0" y="334.74" textLength="231" lengthAdjust="spacingAndGlyphs"> % / % </text><text x="0" y="341.74" textLength="231" lengthAdjust="spacingAndGlyphs"> %# / | </text><text x="0" y="348.74" textLength="231" lengthAdjust="spacingAndGlyphs"> / %% † % </text><text x="0" y="355.74" textLength="231" lengthAdjust="spacingAndGlyphs"> # % % </text><text x="0" y="362.74" textLength="231" lengthAdjust="spacingAndGlyphs"> % / \ </text><text x="0" y="369.74" textLength="231" lengthAdjust="spacingAndGlyphs"> % % </text><text x="0" y="376.74" textLength="231" lengthAdjust="spacingAndGlyphs"> |// | / %/ - </text><text x="0" y="383.74" textLength="231" lengthAdjust="spacingAndGlyphs"> % </text><text x="0" y="390.74" textLength="231" lengthAdjust="spacingAndGlyphs"> % % / </text><text x="0" y="397.74" textLength="231" lengthAdjust="spacingAndGlyphs"> #% | </text><text x="0" y="404.74" textLength="231" lengthAdjust="spacingAndGlyphs">% %% | </text></g><g fill="rgb(211,137,61)" opacity="1" xml:space="preserve"><text x="0" y="5.74" textLength="231" lengthAdjust="spacingAndGlyphs"> * </text><text x="0" y="26.74" textLength="231" lengthAdjust="spacingAndGlyphs"> * </text><text x="0" y="33.74" textLength="231" lengthAdjust="spacingAndGlyphs"> + </text><text x="0" y="40.74" textLength="231" lengthAdjust="spacingAndGlyphs"> * </text><text x="0" y="54.74" textLength="231" lengthAdjust="spacingAndGlyphs"> - -\ / </text><text x="0" y="61.74" textLength="231" lengthAdjust="spacingAndGlyphs"> \ </text><text x="0" y="68.74" textLength="231" lengthAdjust="spacingAndGlyphs"> * \ </text><text x="0" y="75.74" textLength="231" lengthAdjust="spacingAndGlyphs"> \ </text><text x="0" y="82.74" textLength="231" lengthAdjust="spacingAndGlyphs"> | </text><text x="0" y="89.74" textLength="231" lengthAdjust="spacingAndGlyphs"> * </text><text x="0" y="96.74" textLength="231" lengthAdjust="spacingAndGlyphs"> / | </text><text x="0" y="103.74" textLength="231" lengthAdjust="spacingAndGlyphs"> / </text><text x="0" y="131.74" textLength="231" lengthAdjust="spacingAndGlyphs"> | / </text><text x="0" y="138.74" textLength="231" lengthAdjust="spacingAndGlyphs">* </text><text x="0" y="145.74" textLength="231" lengthAdjust="spacingAndGlyphs">* * </text><text x="0" y="152.74" textLength="231" lengthAdjust="spacingAndGlyphs"> ** + </text><text x="0" y="159.74" textLength="231" lengthAdjust="spacingAndGlyphs">* *\ </text><text x="0" y="166.74" textLength="231" lengthAdjust="spacingAndGlyphs">* ** \ * / </text><text x="0" y="173.74" textLength="231" lengthAdjust="spacingAndGlyphs"> / * + </text><text x="0" y="180.74" textLength="231" lengthAdjust="spacingAndGlyphs"> ** + # / *</text><text x="0" y="187.74" textLength="231" lengthAdjust="spacingAndGlyphs">| * * # </text><text x="0" y="194.74" textLength="231" lengthAdjust="spacingAndGlyphs"> * * </text><text x="0" y="201.74" textLength="231" lengthAdjust="spacingAndGlyphs"> */ ** *| </text><text x="0" y="208.74" textLength="231" lengthAdjust="spacingAndGlyphs"> # </text><text x="0" y="215.74" textLength="231" lengthAdjust="spacingAndGlyphs"> * * \ </text><text x="0" y="222.74" textLength="231" lengthAdjust="spacingAndGlyphs"> / / \ </text><text x="0" y="229.74" textLength="231" lengthAdjust="spacingAndGlyphs"> / * </text><text x="0" y="236.74" textLength="231" lengthAdjust="spacingAndGlyphs"> * / * \ * |</text><text x="0" y="243.74" textLength="231" lengthAdjust="spacingAndGlyphs"> * </text><text x="0" y="250.74" textLength="231" lengthAdjust="spacingAndGlyphs"> / + / </text><text x="0" y="257.74" textLength="231" lengthAdjust="spacingAndGlyphs"> * </text><text x="0" y="264.74" textLength="231" lengthAdjust="spacingAndGlyphs"> * / / * </text><text x="0" y="271.74" textLength="231" lengthAdjust="spacingAndGlyphs"> * / </text><text x="0" y="278.74" textLength="231" lengthAdjust="spacingAndGlyphs"> * </text><text x="0" y="285.74" textLength="231" lengthAdjust="spacingAndGlyphs"> #| </text><text x="0" y="292.74" textLength="231" lengthAdjust="spacingAndGlyphs"> * * </text><text x="0" y="299.74" textLength="231" lengthAdjust="spacingAndGlyphs"> * / *</text><text x="0" y="306.74" textLength="231" lengthAdjust="spacingAndGlyphs"> * \ </text><text x="0" y="313.74" textLength="231" lengthAdjust="spacingAndGlyphs"> * </text><text x="0" y="320.74" textLength="231" lengthAdjust="spacingAndGlyphs"> # / * </text><text x="0" y="327.74" textLength="231" lengthAdjust="spacingAndGlyphs"> * </text><text x="0" y="334.74" textLength="231" lengthAdjust="spacingAndGlyphs"> / + </text><text x="0" y="341.74" textLength="231" lengthAdjust="spacingAndGlyphs"> ** * * </text><text x="0" y="348.74" textLength="231" lengthAdjust="spacingAndGlyphs"> * * </text><text x="0" y="355.74" textLength="231" lengthAdjust="spacingAndGlyphs"> | */ </text><text x="0" y="362.74" textLength="231" lengthAdjust="spacingAndGlyphs"> * * * * </text><text x="0" y="369.74" textLength="231" lengthAdjust="spacingAndGlyphs"> / * | </text><text x="0" y="376.74" textLength="231" lengthAdjust="spacingAndGlyphs"> ** * / - / #* </text><text x="0" y="383.74" textLength="231" lengthAdjust="spacingAndGlyphs"> * # * * | </text><text x="0" y="390.74" textLength="231" lengthAdjust="spacingAndGlyphs"> / * * </text><text x="0" y="397.74" textLength="231" lengthAdjust="spacingAndGlyphs"> ** * / *| </text><text x="0" y="404.74" textLength="231" lengthAdjust="spacingAndGlyphs"> # * </text></g><g fill="rgb(233,178,101)" opacity="1" xml:space="preserve"><text x="0" y="12.74" textLength="231" lengthAdjust="spacingAndGlyphs"> |</text><text x="0" y="33.74" textLength="231" lengthAdjust="spacingAndGlyphs"> * </text><text x="0" y="40.74" textLength="231" lengthAdjust="spacingAndGlyphs"> * </text><text x="0" y="47.74" textLength="231" lengthAdjust="spacingAndGlyphs"> -* * </text><text x="0" y="54.74" textLength="231" lengthAdjust="spacingAndGlyphs"> + </text><text x="0" y="61.
{"version":"signal-rituals-bytecode-storage-v1","storagePattern":"SSTORE2-style bytecode data contracts","storageMode":"derived-glyphs-from-tone-style","grid":{"columns":65,"rows":116},"frames":17,"glyphPalette":" #%&*+,-/:;=\\|▀▄█▌▐░▒▓","configuredGlyphs":" .,:;-/\\|+=*#%░▒▓█▌▐▀▄","playbackMode":"pingpong","displayedFrames":17,"timelineFrames":32,"runtimeLoop":"fixed-frame-timeline-with-procedural-overlay","procedural":false,"proceduralOverlay":true,"proceduralMotion":{"enabled":true,"fps":24,"type":"warez","style":"warez","drift":{"speed":1,"strength":0.42},"rain":{"speed":1.2,"strength":0.48},"fractal":{"speed":0.9,"strength":0.62,"coverage":0.42},"warez":{"speed":0.11,"strength":0.41,"coverage":0.48,"packet":7,"rebuild":0.55,"localized":true,"centerX":0.46,"centerY":0.39,"falloff":0.35}},"glyphStrategy":"derive glyph density from 8-level tone data and sparse style anchors; edge-aware mode stores sparse directional edge styles; readable keyframes remain reference-only","glyphLayerStored":false,"omittedGlyphLayerBytes":80113,"toneLevels":8,"toneBitsPerCell":3,"styleStorageMode":"dense4bit","styleBlobName":"style_dense_4bit_packed","styleBitsPerCell":4,"styleSparseMode":"anchor-edge-derived-style","styleIndexBits":13,"styleValueBits":4,"styleSparseBytes":137380,"styleDense4BitBytes":64090,"ritualEngineCompatibility":{"version":"ritual-engine-compat-v1","ritualEngineReady":true,"rendererVersion":"svg-tone-style-layer-v3","remixOverlaysCanonical":false,"notes":["Ritual Engine overlays are non-canonical collector-side transforms applied after canonical reconstruction.","This compatibility block is readiness metadata only and does not change the canonical artwork output."],"seedField":{"field":"ritualEngine.seed","fallbackField":"settingsSeed","available":true,"value":3224492443},"canonicalDefaults":{"paletteId":"sirens_at_night","paletteInvert":false,"palettePreserveLuminance":true,"asciiBrightness":7,"asciiMidtones":13,"asciiHighlightFill":0,"asciiHighlightThreshold":98,"motionStyle":"staticCrawl","rainAccent":0,"asciiStatic":false,"asciiStaticAmount":0,"asciiStaticSpeed":47,"glitchEnabled":false,"glitchPasses":[[0,42,27],[0,19,32],[0,28,22]],"asciiAdaptiveSize":true},"potentiallyRemixableControls":["visualRenderer.paletteId","visualRenderer.paletteInvert","visualRenderer.palettePreserveLuminance","visualRenderer.effects.asciiBrightness","visualRenderer.effects.asciiMidtones","visualRenderer.effects.asciiHighlightFill","visualRenderer.effects.asciiHighlightThreshold","visualRenderer.effects.motionStyle","visualRenderer.effects.rainAccent","visualRenderer.effects.asciiStatic","visualRenderer.effects.asciiStaticAmount","visualRenderer.effects.asciiStaticSpeed","visualRenderer.effects.glitchEnabled","visualRenderer.effects.glitchPasses","visualRenderer.effects.asciiAdaptiveSize","ritualEngine.seed"],"lockedControls":["textGrid.columns","textGrid.rows","playback.frames","playback.timelineFrames","playback.mode","visualRenderer.effects.edgeAwareEnabled","visualRenderer.effects.edgeDogSmallRadius","visualRenderer.effects.edgeDogLargeRadius","visualRenderer.effects.edgeDogStrength","visualRenderer.effects.edgeDogThreshold","visualRenderer.effects.edgeSobelThreshold","visualRenderer.effects.edgeMinCellRatio","visualRenderer.effects.edgeRotateDirection","artifactFrame"]}}
</text><text x="0" y="207.02" textLength="363" lengthAdjust="spacingAndGlyphs"> // / </text><text x="0" y="218.02" textLength="363" lengthAdjust="spacingAndGlyphs"> / / </text><text x="0" y="229.02" textLength="363" lengthAdjust="spacingAndGlyphs"> // </text><text x="0" y="240.02" textLength="363" lengthAdjust="spacingAndGlyphs">\ / </text><text x="0" y="251.02" textLength="363" lengthAdjust="spacingAndGlyphs">/ / /+ </text><text x="0" y="262.02" textLength="363" lengthAdjust="spacingAndGlyphs">// </text><text x="0" y="273.02" textLength="363" lengthAdjust="spacingAndGlyphs">// </text><text x="0" y="284.02" textLength="363" lengthAdjust="spacingAndGlyphs">/// // </text><text x="0" y="295.02" textLength="363" lengthAdjust="spacingAndGlyphs"> // </text><text x="0" y="306.02" textLength="363" lengthAdjust="spacingAndGlyphs"> /-/ </text><text x="0" y="317.02" textLength="363" lengthAdjust="spacingAndGlyphs"> /- </text><text x="0" y="328.02" textLength="363" lengthAdjust="spacingAndGlyphs"> //- </text><text x="0" y="339.02" textLength="363" lengthAdjust="spacingAndGlyphs"> // </text><text x="0" y="350.02" textLength="363" lengthAdjust="spacingAndGlyphs"> /// </text><text x="0" y="361.02" textLength="363" lengthAdjust="spacingAndGlyphs"> // </text><text x="0" y="372.02" textLength="363" lengthAdjust="spacingAndGlyphs"> // //\ </text><text x="0" y="383.02" textLength="363" lengthAdjust="spacingAndGlyphs"> // </text><text x="0" y="394.02" textLength="363" lengthAdjust="spacingAndGlyphs"> / </text><text x="0" y="416.02" textLength="363" lengthAdjust="spacingAndGlyphs"> \/ /// </text><text x="0" y="427.02" textLength="363" lengthAdjust="spacingAndGlyphs"> //// </text><text x="0" y="460.02" textLength="363" lengthAdjust="spacingAndGlyphs"> \/ </text><text x="0" y="471.02" textLength="363" lengthAdjust="spacingAndGlyphs"> /- </text><text x="0" y="482.02" textLength="363" lengthAdjust="spacingAndGlyphs"> // </text><text x="0" y="493.02" textLength="363" lengthAdjust="spacingAndGlyphs"> // </text><text x="0" y="570.02" textLength="363" lengthAdjust="spacingAndGlyphs"> / </text></g><g fill="rgb(221,232,228)" opacity="1" xml:space="preserve"><text x="0" y="86.02" textLength="363" lengthAdjust="spacingAndGlyphs"> :: : </text><text x="0" y="97.02" textLength="363" lengthAdjust="spacingAndGlyphs"> ;::: : ; </text><text x="0" y="108.02" textLength="363" lengthAdjust="spacingAndGlyphs"> ::::; \ </text><text x="0" y="119.02" textLength="363" lengthAdjust="spacingAndGlyphs">;::::: </text><text x="0" y="130.02" textLength="363" lengthAdjust="spacingAndGlyphs">:;:: : : </text><text x="0" y="141.02" textLength="363" lengthAdjust="spacingAndGlyphs">: : : </text><text x="0" y="152.02" textLength="363" lengthAdjust="spacingAndGlyphs"> / :\: </text><text x="0" y="163.02" textLength="363" lengthAdjust="spacingAndGlyphs"> : - </text><text x="0" y="174.02" textLength="363" lengthAdjust="spacingAndGlyphs"> ::: : |: </text><text x="0" y="185.02" textLength="363" lengthAdjust="spacingAndGlyphs"> + : </text><text x="0" y="196.02" textLength="363" lengthAdjust="spacingAndGlyphs"> ,: </text><text x="0" y="218.02" textLength="363" lengthAdjust="spacingAndGlyphs"> : </text><text x="0" y="240.02" textLength="363" lengthAdjust="spacingAndGlyphs"> :;: </text><text x="0" y="273.02" textLength="363" lengthAdjust="spacingAndGlyphs"> : </text><text x="0" y="504.02" textLength="363" lengthAdjust="spacingAndGlyphs"> : </text></g><g fill="rgb(255,255,255)" opacity="1" xml:space="preserve"><text x="0" y="97.02" textLength="363" lengthAdjust="spacingAndGlyphs"> ... </text><text x="0" y="130.02" textLength="363" lengthAdjust="spacingAndGlyphs"> . ... </text><text x="0" y="141.02" textLength="363" lengthAdjust="spacingAndGlyphs"> . . .;... </text><text x="0" y="152.02" textLength="363" lengthAdjust="spacingAndGlyphs"> ....+. . </text><text x="0" y="163.02" textLength="363" lengthAdjust="spacingAndGlyphs"> ...... </text><text x="0" y="174.02" textLength="363" lengthAdjust="spacingAndGlyphs"> ..;. </text><text x="0" y="185.02" textLength="363" lengthAdjust="spacingAndGlyphs"> .. </text><text x="0" y="229.02" textLength="363" lengthAdjust="spacingAndGlyphs"> * </text><text x="0" y="240.02" textLength="363" lengthAdjust="spacingAndGlyphs"> . </text><text x="0" y="251.02" textLength="363" lengthAdjust="spacingAndGlyphs"> . </text></g></g></svg>
N <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 363 638" width="363" height="638" data-poster-grid="33x58" data-source-grid="65x116" data-detail="0.5" data-background="0.38" data-poster-tones="8"><rect width="100%" height="100%" fill="#08090b"/><g font-family="ui-monospace,SFMono-Regular,Menlo,Consolas,monospace" font-size="14" font-weight="700" letter-spacing="0"><g fill="rgb(4,8,15)" opacity="0.86" xml:space="preserve"><text x="0" y="31.02" textLength="363" lengthAdjust="spacingAndGlyphs">▄▄▄▄▄▄▀▄▄▄▄▄▄▄▄▄▄, ▄▄▄▄▄▄▄▄▄</text><text x="0" y="42.02" textLength="363" lengthAdjust="spacingAndGlyphs">▄▄▄▄▄▄▄▀▄▄▄▄▄▄, ..▄▄▄▄▄▄▄</text><text x="0" y="86.02" textLength="363" lengthAdjust="spacingAndGlyphs">▄▄▄:.. ,,:▄▄▄▀▄ .▄▄▄▄▄▄</text><text x="0" y="97.02" textLength="363" lengthAdjust="spacingAndGlyphs">▄▄▄- .▄▄▄▄▀ ,▄▄▄▄▄▄</text><text x="0" y="141.02" textLength="363" lengthAdjust="spacingAndGlyphs"> .. .▄▄▄: ,▄▄▄▄</text><text x="0" y="152.02" textLength="363" lengthAdjust="spacingAndGlyphs">▄▄▄. ▄▄▀. |▄▄▄▄</text><text x="0" y="196.02" textLength="363" lengthAdjust="spacingAndGlyphs">▀▄▄. .:= .▄▄. ▄▄▄</text><text x="0" y="207.02" textLength="363" lengthAdjust="spacingAndGlyphs">▄▀▄,: . .▄▄▄ ,▄</text><text x="0" y="251.02" textLength="363" lengthAdjust="spacingAndGlyphs"> .▄▄, . ..,▄▀ .</text><text x="0" y="262.02" textLength="363" lengthAdjust="spacingAndGlyphs"> ,▄▄.. :.▄▄| </text><text x="0" y="306.02" textLength="363" lengthAdjust="spacingAndGlyphs">. ,▄▄▄. ,:\.\ .. ::.▄. </text><text x="0" y="317.02" textLength="363" lengthAdjust="spacingAndGlyphs">, .▄▄▄: ..; : .. : ..,▄▄ </text><text x="0" y="361.02" textLength="363" lengthAdjust="spacingAndGlyphs">▀▄, .▄▄▄:▄▄..,,▄▄.. </text><text x="0" y="372.02" textLength="363" lengthAdjust="spacingAndGlyphs">▄▀▄. ,▄▄▄..,▄::...▄, </text><text x="0" y="416.02" textLength="363" lengthAdjust="spacingAndGlyphs">▄▄▄\ ▄▄▄... </text><text x="0" y="427.02" textLength="363" lengthAdjust="spacingAndGlyphs">▄▄▄.. ▄▄▄,, </text><text x="0" y="471.02" textLength="363" lengthAdjust="spacingAndGlyphs">▄▄▄. </text><text x="0" y="482.02" textLength="363" lengthAdjust="spacingAndGlyphs">▄▄. </text><text x="0" y="526.02" textLength="363" lengthAdjust="spacingAndGlyphs">▄▄. </text><text x="0" y="537.02" textLength="363" lengthAdjust="spacingAndGlyphs">▄▄▄▄▄ ., </text><text x="0" y="581.02" textLength="363" lengthAdjust="spacingAndGlyphs">▄▄▄ ▄▄▄▄\ :▄▄▄▄▀▄▄▀. </text><text x="0" y="592.02" textLength="363" lengthAdjust="spacingAndGlyphs">▄▄▄: .▄▄▄▄...▄▄▄▄▄▄▄▄,, </text><text x="0" y="636.02" textLength="363" lengthAdjust="spacingAndGlyphs">▄▄▄▄▄▄▄▄▄▄▀▄▄▄▄▄▄▄▄▄▀▄▄▄▄▄▄:: </text></g><g fill="rgb(59,29,45)" opacity="0.906" xml:space="preserve"><text x="0" y="42.02" textLength="363" lengthAdjust="spacingAndGlyphs"> ▌ </text><text x="0" y="141.02" textLength="363" lengthAdjust="spacingAndGlyphs"> - </text><text x="0" y="152.02" textLength="363" lengthAdjust="spacingAndGlyphs"> ▐ </text><text x="0" y="196.02" textLength="363" lengthAdjust="spacingAndGlyphs"> ▌▌ ▐ \ </text><text x="0" y="207.02" textLength="363" lengthAdjust="spacingAndGlyphs"> ▌ ▌ ▌▌\ \ | </text><text x="0" y="251.02" textLength="363" lengthAdjust="spacingAndGlyphs"> | ▌▓ ▌ </text><text x="0" y="262.02" textLength="363" lengthAdjust="spacingAndGlyphs"> ▌ ▐▌ ▐ \ </text><text x="0" y="306.02" textLength="363" lengthAdjust="spacingAndGlyphs"> █▌ ▐▌ █ </text><text x="0" y="317.02" textLength="363" lengthAdjust="spacingAndGlyphs"> ▐▌ ▌▌ ▌ ▌▌ </text><text x="0" y="361.02" textLength="363" lengthAdjust="spacingAndGlyphs"> ▌ ▌ </text><text x="0" y="372.02" textLength="363" lengthAdjust="spacingAndGlyphs"> \ </text><text x="0" y="416.02" textLength="363" lengthAdjust="spacingAndGlyphs"> █ ▌ </text><text x="0" y="471.02" textLength="363" lengthAdjust="spacingAndGlyphs"> ▌ </text><text x="0" y="482.02" textLength="363" lengthAdjust="spacingAndGlyphs"> ▌ </text><text x="0" y="526.02" textLength="363" lengthAdjust="spacingAndGlyphs"> █▌ ▌ ▐▌▌▌█ </text><text x="0" y="537.02" textLength="363" lengthAdjust="spacingAndGlyphs"> █ ▐▌▌ </text><text x="0" y="581.02" textLength="363" lengthAdjust="spacingAndGlyphs"> | ▌ ▌▌ </text><text x="0" y="592.02" textLength="363" lengthAdjust="spacingAndGlyphs"> █ ▌ </text><text x="0" y="636.02" textLength="363" lengthAdjust="spacingAndGlyphs"> ▌ </text></g><g fill="rgb(104,72,89)" opacity="0.951" xml:space="preserve"><text x="0" y="97.02" textLength="363" lengthAdjust="spacingAndGlyphs"> ▒ </text><text x="0" y="141.02" textLength="363" lengthAdjust="spacingAndGlyphs"> ▒ ▓ </text><text x="0" y="152.02" textLength="363" lengthAdjust="spacingAndGlyphs"> |▒ | </text><text x="0" y="196.02" textLength="363" lengthAdjust="spacingAndGlyphs"> ▒ </text><text x="0" y="207.02" textLength="363" lengthAdjust="spacingAndGlyphs"> ▒ </text><text x="0" y="251.02" textLength="363" lengthAdjust="spacingAndGlyphs"> ▒▓ ▐▒ ▒ </text><text x="0" y="262.02" textLength="363" lengthAdjust="spacingAndGlyphs"> ▒ ▒ |▒ ▒ ▓▒▒ \▒ |</text><text x="0" y="306.02" textLength="363" lengthAdjust="spacingAndGlyphs"> % ▒ \▒ </text><text x="0" y="317.02" textLength="363" lengthAdjust="spacingAndGlyphs"> \ ▒▒ </text><text x="0" y="361.02" textLength="363" lengthAdjust="spacingAndGlyphs"> \ </text><text x="0" y="427.02" textLength="363" lengthAdjust="spacingAndGlyphs"> ▒ ▒ </text><text x="0" y="471.02" textLength="363" lengthAdjust="spacingAndGlyphs"> ▒ ▒ </text><text x="0" y="482.02" textLength="363" lengthAdjust="spacingAndGlyphs"> ░\ ▒ ▒ </text><text x="0" y="526.02" textLength="363" lengthAdjust="spacingAndGlyphs"> ▒ ▒ ▒ ▒▒░▒</text><text x="0" y="537.02" textLength="363" lengthAdjust="spacingAndGlyphs"> ░ / ▒▒ ▒▒▒▒░</text><text x="0" y="581.02" textLength="363" lengthAdjust="spacingAndGlyphs"> / ▒▒▒░▒▒▒</text><text x="0" y="592.02" textLength="363" lengthAdjust="spacingAndGlyphs"> ▒▒▒▒▓▒▒</text><text x="0" y="636.02" textLength="363" lengthAdjust="spacingAndGlyphs"> ▓▒▒</text></g><g fill="rgb(78,130,142)" opacity="0.997" xml:space="preserve"><text x="0" y="31.02" textLength="363" lengthAdjust="spacingAndGlyphs"> - </text><text x="0" y="53.02" textLength="363" lengthAdjust="spacingAndGlyphs"> - | </text><text x="0" y="86.02" textLength="363" lengthAdjust="spacingAndGlyphs"> - ░ </text><text x="0" y="97.02" textLength="363" lengthAdjust="spacingAndGlyphs"> | </text><text x="0" y="108.02" textLength="363" lengthAdjust="spacingAndGlyphs"> - %%-/ % | </text><text x="0" y="119.02" textLength="363" lengthAdjust="spacingAndGlyphs"> - </text><text x="0" y="130.02" textLength="363" lengthAdjust="spacingAndGlyphs"> \ % \ </text><text x="0" y="141.02" textLength="363" lengthAdjust="spacingAndGlyphs"> % % </text><text x="0" y="163.02" textLength="363" lengthAdjust="spacingAndGlyphs"> - </text><text x="0" y="174.02" textLength="363" lengthAdjust="spacingAndGlyphs"> | </text><text x="0" y="185.02" textLength="363" lengthAdjust="spacingAndGlyphs"> %░ %# % </text><text x="0" y="196.02" textLength="363" lengthAdjust="spacingAndGlyphs"> %| %\ </text><text x="0" y="207.02" textLength="363" lengthAdjust="spacingAndGlyphs"> % % % ░ \\ </text><text x="0" y="218.02" textLength="363" lengthAdjust="spacingAndGlyphs"> % % \ </text><text x="0" y="229.02" textLength="363" lengthAdjust="spacingAndGlyphs"> #% %# % </text><text x="0" y="240.02" textLength="363" lengthAdjust="spacingAndGlyphs"> % % | </text><text x="0" y="251.02" textLength="363" lengthAdjust="spacingAndGlyphs"> %% </text><text x="0" y="262.02" textLength="363" lengthAdjust="spacingAndGlyphs"> % </text><text x="0" y="273.02" textLength="363" lengthAdjust="spacingAndGlyphs"> \ \ % / </text><text x="0" y="284.02" textLength="363" lengthAdjust="spacingAndGlyphs"> % %| % </text><text x="0" y="295.02" textLength="363" lengthAdjust="spacingAndGlyphs">\ </text><text x="0" y="306.02" textLength="363" lengthAdjust="spacingAndGlyphs"> | </text><text x="0" y="317.02" textLength="363" lengthAdjust="spacingAndGlyphs"> % </text><text x="0" y="328.02" textLength="363" lengthAdjust="spacingAndGlyphs"> %</text><text x="0" y="361.02" textLength="363" lengthAdjust="spacingAndGlyphs"> % </text><text x="0" y="372.02" textLength="363" lengthAdjust="spacingAndGlyphs"> / % </text><text x="0" y="383.02" textLength="363" lengthAdjust="spacingAndGlyphs"> % </text><text x="0" y="394.02" textLength="363" lengthAdjust="spacingAndGlyphs"> / - % %░ </text><text x="0" y="405.02" textLength="363" lengthAdjust="spacingAndGlyphs"> / % </text><text x="0" y="416.02" textLength="363" lengthAdjust="spacingAndGlyphs"> \ % % ░</text><text x="0" y="427.02" textLength="363" lengthAdjust="spacingAndGlyphs"> / \ % </text><text x="0" y="438.02" textLength="363" lengthAdjust="spacingAndGlyphs"> % \ % </text><text x="0" y="449.02" textLength="363" lengthAdjust="spacingAndGlyphs"> % % % </text><text x="0" y="460.02" textLength="363" lengthAdjust="spacingAndGlyphs"> % # </text><text x="0" y="471.02" textLength="363" lengthAdjust="spacingAndGlyphs"> % % #% </text><text x="0" y="482.02" textLength="363" lengthAdjust="spacingAndGlyphs"> % % %% #%</text><text x="0" y="493.02" textLength="363" lengthAdjust="spacingAndGlyphs"> %%% ░</text><text x="0" y="504.02" textLength="363" lengthAdjust="spacingAndGlyphs"> % # %%# </text><text x="0" y="515.02" textLength="363" lengthAdjust="spacingAndGlyphs"> % % % </text><text x="0" y="526.02" textLength="363" lengthAdjust="spacingAndGlyphs"> %# % </text><text x="0" y="537.02" textLength="363" lengthAdjust="spacingAndGlyphs"> #%% </text><text x="0" y="548.02" textLength="363" lengthAdjust="spacingAndGlyphs"> % </text><text x="0" y="559.02" textLength="363" lengthAdjust="spacingAndGlyphs"> % </text><text x="0" y="570.02" textLength="363" lengthAdjust="spacingAndGlyphs"> % % </text><text x="0" y="581.02" textLength="363" lengthAdjust="spacingAndGlyphs"> % </text><text x="0" y="592.02" textLength="363" lengthAdjust="spacingAndGlyphs"> %% </text></g><g fill="rgb(241,134,134)" opacity="1" xml:space="preserve"><text x="0" y="31.02" textLength="363" lengthAdjust="spacingAndGlyphs"> | </text><text x="0" y="64.02" textLength="363" lengthAdjust="spacingAndGlyphs"> - </text><text x="0" y="108.02" textLength="363" lengthAdjust="spacingAndGlyphs"> | </text><text x="0" y="119.02" textLength="363" lengthAdjust="spacingAndGlyphs"> / - | +|| </text><text x="0" y="130.02" textLength="363" lengthAdjust="spacingAndGlyphs"> | +| </text><text x="0" y="141.02" textLength="363" lengthAdjust="spacingAndGlyphs"> | |\| </text><text x="0" y="152.02" textLength="363" lengthAdjust="spacingAndGlyphs"> / | | || </text><text x="0" y="163.02" textLength="363" lengthAdjust="spacingAndGlyphs"> | \ ||| </text><text x="0" y="174.02" textLength="363" lengthAdjust="spacingAndGlyphs"> || | || </text><text x="0" y="185.02" textLength="363" lengthAdjust="spacingAndGlyphs"> ||| | | || </text><text x="0" y="196.02" textLength="363" lengthAdjust="spacingAndGlyphs"> | | | \|| </text><text x="0" y="207.02" textLength="363" lengthAdjust="spacingAndGlyphs"> \ | \| </text><text x="0" y="218.02" textLength="363" lengthAdjust="spacingAndGlyphs"> | + |\| </text><text x="0" y="229.02" textLength="363" lengthAdjust="spacingAndGlyphs">\ # | | |\ </text><text x="0" y="240.02" textLength="363" lengthAdjust="spacingAndGlyphs"> \ * | || </text><text x="0" y="251.02" textLength="363" lengthAdjust="spacingAndGlyphs"> \ | | ||| </text><text x="0" y="262.02" textLength="363" lengthAdjust="spacingAndGlyphs"> ▐ % || </text><text x="0" y="273.02" textLength="363" lengthAdjust="spacingAndGlyphs"> ▐ = \|\</text><text x="0" y="284.02" textLength="363" lengthAdjust="spacingAndGlyphs"> \|</text><text x="0" y="295.02" textLength="363" lengthAdjust="spacingAndGlyphs"> |+</text><text x="0" y="306.02" textLength="363" lengthAdjust="spacingAndGlyphs"> | |</text><text x="0" y="317.02" textLength="363" lengthAdjust="spacingAndGlyphs"> | |</text><text x="0" y="339.02" textLength="363" lengthAdjust="spacingAndGlyphs"> | |\</text><text x="0" y="350.02" textLength="363" lengthAdjust="spacingAndGlyphs"> |+||</text><text x="0" y="361.02" textLength="363" lengthAdjust="spacingAndGlyphs"> | |+| |||+|</text><text x="0" y="372.02" textLength="363" lengthAdjust="spacingAndGlyphs"> | | ||||</text><text x="0" y="383.02" textLength="363" lengthAdjust="spacingAndGlyphs"> ||| || +| ||</text><text x="0" y="394.02" textLength="363" lengthAdjust="spacingAndGlyphs"> ||\ | || |+| |</text><text x="0" y="405.02" textLength="363" lengthAdjust="spacingAndGlyphs"> /||+ ||+ \||||||+ </text><text x="0" y="416.02" textLength="363" lengthAdjust="spacingAndGlyphs"> |\|| |||||+ | | </text><text x="0" y="427.02" textLength="363" lengthAdjust="spacingAndGlyphs"> \|| |\|||||| + ||</text><text x="0" y="438.02" textLength="363" lengthAdjust="spacingAndGlyphs"> || |||||+||\||| +|||||</text><text x="0" y="449.02" textLength="363" lengthAdjust="spacingAndGlyphs"> |||||\||||||+||\|| +||||</text><text x="0" y="460.02" textLength="363" lengthAdjust="spacingAndGlyphs"> |||||\||||||+||+|| |||</text><text x="0" y="471.02" textLength="363" lengthAdjust="spacingAndGlyphs"> | |||||+||\||||||+|| |</text><text x="0" y="482.02" textLength="363" lengthAdjust="spacingAndGlyphs"> |||||+||\||||||+| </text><text x="0" y="493.02" textLength="363" lengthAdjust="spacingAndGlyphs"> | ||\|||+||+||||||\ </text><text x="0" y="504.02" textLength="363" lengthAdjust="spacingAndGlyphs"> - | ||\||||||+|||| </text><text x="0" y="515.02" textLength="363" lengthAdjust="spacingAndGlyphs"> |\ +||\||||||+||| </text><text x="0" y="526.02" textLength="363" lengthAdjust="spacingAndGlyphs"> |||+||||||\| </text><text x="0" y="537.02" textLength="363" lengthAdjust="spacingAndGlyphs"> ||||+||||| </text><text x="0" y="548.02" textLength="363" lengthAdjust="spacingAndGlyphs"> |+ ||||+|| </text><text x="0" y="559.02" textLength="363" lengthAdjust="spacingAndGlyphs"> || ||||| </text><text x="0" y="570.02" textLength="363" lengthAdjust="spacingAndGlyphs"> \ || </text><text x="0" y="581.02" textLength="363" lengthAdjust="spacingAndGlyphs"> |\ </text></g><g fill="rgb(162,205,193)" opacity="1" xml:space="preserve"><text x="0" y="20.02" textLength="363" lengthAdjust="spacingAndGlyphs"> // </text><text x="0" y="31.02" textLength="363" lengthAdjust="spacingAndGlyphs"> /-// </text><text x="0" y="42.02" textLength="363" lengthAdjust="spacingAndGlyphs"> /////-// </text><text x="0" y="53.02" textLength="363" lengthAdjust="spacingAndGlyphs"> /-//\/ \/ </text><text x="0" y="64.02" textLength="363" lengthAdjust="spacingAndGlyphs"> ////-/ /// </text><text x="0" y="75.02" textLength="363" lengthAdjust="spacingAndGlyphs"> /\///// // </text><text x="0" y="86.02" textLength="363" lengthAdjust="spacingAndGlyphs"> //-/ /// </text><text x="0" y="97.02" textLength="363" lengthAdjust="spacingAndGlyphs"> - // // </text><text x="0" y="108.02" textLength="363" lengthAdjust="spacingAndGlyphs"> // // </text><text x="0" y="119.02" textLength="363" lengthAdjust="spacingAndGlyphs"> / / \ </text><text x="0" y="141.02" textLength="363" lengthAdjust="spacingAndGlyphs"> - / </text><text x="0" y="163.02" textLength="363" lengthAdjust="spacingAndGlyphs"> /\ / \ </text><text x="0" y="174.02" textLength="363" lengthAdjust="spacingAndGlyphs"> - </text><text x="0" y="185.02" textLength="363" lengthAdjust="spacingAndGlyphs"> -/ </text><text x="0" y="196.02" textLength="363" lengthAdjust="spacingAndGlyphs"> / █
{"version":"signal-rituals-bytecode-storage-v1","storagePattern":"SSTORE2-style bytecode data contracts","storageMode":"derived-glyphs-from-tone-style","grid":{"columns":62,"rows":110},"frames":24,"glyphPalette":" #%*+-/:;=\\|▀█▌▐░▒▓","configuredGlyphs":" .,:;-/\\|+=*#%░▒▓█▌▐▀▄","playbackMode":"normal","displayedFrames":24,"timelineFrames":24,"runtimeLoop":"fixed-frame-timeline-with-procedural-overlay","procedural":false,"proceduralOverlay":true,"proceduralMotion":{"enabled":true,"fps":24,"type":"drift","style":"drift","drift":{"speed":0.53,"strength":0.25},"rain":{"speed":1.2,"strength":0.48},"fractal":{"speed":0.9,"strength":0.62,"coverage":0.42},"warez":{"speed":1,"strength":0.7,"coverage":0.48,"packet":7,"rebuild":0.55,"localized":false,"centerX":0.5,"centerY":0.5,"falloff":0.3}},"glyphStrategy":"derive glyph density from 8-level tone data and sparse style anchors; edge-aware mode stores sparse directional edge styles; readable keyframes remain reference-only","glyphLayerStored":false,"omittedGlyphLayerBytes":102300,"toneLevels":8,"toneBitsPerCell":3,"styleStorageMode":"sparseAnchors","styleBlobName":"style_sparse_anchors_packed","styleSparseMode":"anchor-edge-derived-style","styleIndexBits":13,"styleValueBits":4,"styleSparseBytes":61019,"styleDense4BitBytes":81840,"ritualEngineCompatibility":{"version":"ritual-engine-compat-v1","ritualEngineReady":true,"rendererVersion":"svg-tone-style-layer-v3","remixOverlaysCanonical":false,"notes":["Ritual Engine overlays are non-canonical collector-side transforms applied after canonical reconstruction.","This compatibility block is readiness metadata only and does not change the canonical artwork output."],"seedField":{"field":"ritualEngine.seed","fallbackField":"settingsSeed","available":true,"value":2995974067},"canonicalDefaults":{"paletteId":"lospec500","paletteInvert":false,"palettePreserveLuminance":true,"asciiBrightness":0,"asciiMidtones":2,"asciiHighlightFill":0,"asciiHighlightThreshold":96,"motionStyle":"pulseDrift","rainAccent":21,"asciiStatic":false,"asciiStaticAmount":0,"asciiStaticSpeed":21,"glitchEnabled":false,"glitchPasses":[[15,42,18],[0,31,26],[2,41,17]],"asciiAdaptiveSize":false},"potentiallyRemixableControls":["visualRenderer.paletteId","visualRenderer.paletteInvert","visualRenderer.palettePreserveLuminance","visualRenderer.effects.asciiBrightness","visualRenderer.effects.asciiMidtones","visualRenderer.effects.asciiHighlightFill","visualRenderer.effects.asciiHighlightThreshold","visualRenderer.effects.motionStyle","visualRenderer.effects.rainAccent","visualRenderer.effects.asciiStatic","visualRenderer.effects.asciiStaticAmount","visualRenderer.effects.asciiStaticSpeed","visualRenderer.effects.glitchEnabled","visualRenderer.effects.glitchPasses","visualRenderer.effects.asciiAdaptiveSize","ritualEngine.seed"],"lockedControls":["textGrid.columns","textGrid.rows","playback.frames","playback.timelineFrames","playback.mode","visualRenderer.effects.edgeAwareEnabled","visualRenderer.effects.edgeDogSmallRadius","visualRenderer.effects.edgeDogLargeRadius","visualRenderer.effects.edgeDogStrength","visualRenderer.effects.edgeDogThreshold","visualRenderer.effects.edgeSobelThreshold","visualRenderer.effects.edgeMinCellRatio","visualRenderer.effects.edgeRotateDirection","artifactFrame"]}}
xt x="0" y="176.76" textLength="558" lengthAdjust="spacingAndGlyphs"> / / </text><text x="0" y="194.76" textLength="558" lengthAdjust="spacingAndGlyphs"> // / </text><text x="0" y="212.76" textLength="558" lengthAdjust="spacingAndGlyphs"> /| </text><text x="0" y="230.76" textLength="558" lengthAdjust="spacingAndGlyphs"> / / / - </text><text x="0" y="248.76" textLength="558" lengthAdjust="spacingAndGlyphs"> | // </text><text x="0" y="266.76" textLength="558" lengthAdjust="spacingAndGlyphs"> /// | </text><text x="0" y="284.76" textLength="558" lengthAdjust="spacingAndGlyphs"> - // </text><text x="0" y="302.76" textLength="558" lengthAdjust="spacingAndGlyphs"> // </text><text x="0" y="320.76" textLength="558" lengthAdjust="spacingAndGlyphs"> / </text><text x="0" y="338.76" textLength="558" lengthAdjust="spacingAndGlyphs"> / </text><text x="0" y="356.76" textLength="558" lengthAdjust="spacingAndGlyphs"> | </text><text x="0" y="374.76" textLength="558" lengthAdjust="spacingAndGlyphs"> - / </text><text x="0" y="392.76" textLength="558" lengthAdjust="spacingAndGlyphs"> / / </text><text x="0" y="410.76" textLength="558" lengthAdjust="spacingAndGlyphs"> | -- </text><text x="0" y="428.76" textLength="558" lengthAdjust="spacingAndGlyphs"> \ / - </text><text x="0" y="446.76" textLength="558" lengthAdjust="spacingAndGlyphs"> /\ | </text><text x="0" y="464.76" textLength="558" lengthAdjust="spacingAndGlyphs"> / // / </text><text x="0" y="482.76" textLength="558" lengthAdjust="spacingAndGlyphs"> / - / // / </text><text x="0" y="500.76" textLength="558" lengthAdjust="spacingAndGlyphs"> /|| / / </text><text x="0" y="518.76" textLength="558" lengthAdjust="spacingAndGlyphs"> / </text><text x="0" y="608.76" textLength="558" lengthAdjust="spacingAndGlyphs"> \//\ </text><text x="0" y="626.76" textLength="558" lengthAdjust="spacingAndGlyphs"> /\ / </text><text x="0" y="644.76" textLength="558" lengthAdjust="spacingAndGlyphs"> //-/ </text><text x="0" y="662.76" textLength="558" lengthAdjust="spacingAndGlyphs"> \/// / </text><text x="0" y="680.76" textLength="558" lengthAdjust="spacingAndGlyphs"> / / </text><text x="0" y="698.76" textLength="558" lengthAdjust="spacingAndGlyphs"> /- / / </text></g><g fill="rgb(218,223,195)" opacity="1" xml:space="preserve"><text x="0" y="266.76" textLength="558" lengthAdjust="spacingAndGlyphs"> :: </text><text x="0" y="428.76" textLength="558" lengthAdjust="spacingAndGlyphs"> :::: ,: </text><text x="0" y="446.76" textLength="558" lengthAdjust="spacingAndGlyphs"> ;:: ::,: </text><text x="0" y="464.76" textLength="558" lengthAdjust="spacingAndGlyphs"> ,: :: </text><text x="0" y="482.76" textLength="558" lengthAdjust="spacingAndGlyphs"> , : </text><text x="0" y="626.76" textLength="558" lengthAdjust="spacingAndGlyphs"> : </text><text x="0" y="662.76" textLength="558" lengthAdjust="spacingAndGlyphs"> : </text><text x="0" y="680.76" textLength="558" lengthAdjust="spacingAndGlyphs"> ; :: </text><text x="0" y="698.76" textLength="558" lengthAdjust="spacingAndGlyphs"> : </text></g></g></svg>
N <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 558 990" width="558" height="990" data-poster-grid="31x55" data-source-grid="62x110" data-detail="0.5" data-background="0.55" data-poster-tones="8"><rect width="100%" height="100%" fill="#08090b"/><g font-family="ui-monospace,SFMono-Regular,Menlo,Consolas,monospace" font-size="23" font-weight="700" letter-spacing="0"><g fill="rgb(24,9,16)" opacity="0.86" xml:space="preserve"><text x="0" y="68.76" textLength="558" lengthAdjust="spacingAndGlyphs"> .. , </text><text x="0" y="86.76" textLength="558" lengthAdjust="spacingAndGlyphs"> . | </text><text x="0" y="104.76" textLength="558" lengthAdjust="spacingAndGlyphs"> , : </text><text x="0" y="158.76" textLength="558" lengthAdjust="spacingAndGlyphs"> . .,,:: </text><text x="0" y="176.76" textLength="558" lengthAdjust="spacingAndGlyphs"> | ,::..., </text><text x="0" y="194.76" textLength="558" lengthAdjust="spacingAndGlyphs"> . ...,,:: . </text><text x="0" y="248.76" textLength="558" lengthAdjust="spacingAndGlyphs"> , .,, </text><text x="0" y="266.76" textLength="558" lengthAdjust="spacingAndGlyphs"> ::... , . :</text><text x="0" y="284.76" textLength="558" lengthAdjust="spacingAndGlyphs"> ..,,: . . .</text><text x="0" y="338.76" textLength="558" lengthAdjust="spacingAndGlyphs"> : </text><text x="0" y="356.76" textLength="558" lengthAdjust="spacingAndGlyphs"> . ::.. :||.,, ,,::</text><text x="0" y="374.76" textLength="558" lengthAdjust="spacingAndGlyphs"> ..,| . : ::...</text><text x="0" y="428.76" textLength="558" lengthAdjust="spacingAndGlyphs">., </text><text x="0" y="446.76" textLength="558" lengthAdjust="spacingAndGlyphs">:. :..| ..,,::.</text><text x="0" y="464.76" textLength="558" lengthAdjust="spacingAndGlyphs"> .., ,::...,</text><text x="0" y="536.76" textLength="558" lengthAdjust="spacingAndGlyphs"> .. : .,,::..</text><text x="0" y="554.76" textLength="558" lengthAdjust="spacingAndGlyphs"> ., ,::...,,</text><text x="0" y="626.76" textLength="558" lengthAdjust="spacingAndGlyphs"> . . ...,,::.. </text><text x="0" y="644.76" textLength="558" lengthAdjust="spacingAndGlyphs"> ,::...,, </text><text x="0" y="716.76" textLength="558" lengthAdjust="spacingAndGlyphs"> , ,::. , </text><text x="0" y="734.76" textLength="558" lengthAdjust="spacingAndGlyphs"> . :.... | </text><text x="0" y="806.76" textLength="558" lengthAdjust="spacingAndGlyphs"> ...,,::.... : ,,:....,,</text><text x="0" y="824.76" textLength="558" lengthAdjust="spacingAndGlyphs"> ,,::....,::... ....,,:..</text><text x="0" y="896.76" textLength="558" lengthAdjust="spacingAndGlyphs"> ...,,::. .,::....,,:</text><text x="0" y="914.76" textLength="558" lengthAdjust="spacingAndGlyphs">. ..,,::... :....,::...</text><text x="0" y="986.76" textLength="558" lengthAdjust="spacingAndGlyphs"> ,,::...,,:: ,::. </text></g><g fill="rgb(57,31,45)" opacity="0.906" xml:space="preserve"><text x="0" y="14.76" textLength="558" lengthAdjust="spacingAndGlyphs">▌|▐|| ▌ █ ▐ ▌|▌</text><text x="0" y="68.76" textLength="558" lengthAdjust="spacingAndGlyphs"> | █ | | </text><text x="0" y="86.76" textLength="558" lengthAdjust="spacingAndGlyphs"> | ▌▌▌ | ------- ▌▌ | ▌ </text><text x="0" y="104.76" textLength="558" lengthAdjust="spacingAndGlyphs"> | | ▌ ▌▌▌ | /</text><text x="0" y="158.76" textLength="558" lengthAdjust="spacingAndGlyphs"> ▌▌ </text><text x="0" y="176.76" textLength="558" lengthAdjust="spacingAndGlyphs"> | ▐▌ </text><text x="0" y="194.76" textLength="558" lengthAdjust="spacingAndGlyphs"> ▐ </text><text x="0" y="248.76" textLength="558" lengthAdjust="spacingAndGlyphs"> █▌ ▌ </text><text x="0" y="266.76" textLength="558" lengthAdjust="spacingAndGlyphs"> ▌| ▌ ▌ / </text><text x="0" y="284.76" textLength="558" lengthAdjust="spacingAndGlyphs"> | ▌ ▌▌ </text><text x="0" y="338.76" textLength="558" lengthAdjust="spacingAndGlyphs">▌ ▌ </text><text x="0" y="356.76" textLength="558" lengthAdjust="spacingAndGlyphs">▌ █ ▌ </text><text x="0" y="374.76" textLength="558" lengthAdjust="spacingAndGlyphs">▌ ▌ ▐ ▌/ / </text><text x="0" y="428.76" textLength="558" lengthAdjust="spacingAndGlyphs"> ▌ </text><text x="0" y="446.76" textLength="558" lengthAdjust="spacingAndGlyphs"> ▌ </text><text x="0" y="464.76" textLength="558" lengthAdjust="spacingAndGlyphs">|▌ | | </text><text x="0" y="518.76" textLength="558" lengthAdjust="spacingAndGlyphs"> ▐ </text><text x="0" y="536.76" textLength="558" lengthAdjust="spacingAndGlyphs"> | █ ▌ </text><text x="0" y="554.76" textLength="558" lengthAdjust="spacingAndGlyphs"> | ▌ ▌ | </text><text x="0" y="626.76" textLength="558" lengthAdjust="spacingAndGlyphs"> ▌ ▌ ▌</text><text x="0" y="644.76" textLength="558" lengthAdjust="spacingAndGlyphs"> ▌| /▌ ▌</text><text x="0" y="716.76" textLength="558" lengthAdjust="spacingAndGlyphs"> ▌▌ / ▌ ▌ -- </text><text x="0" y="734.76" textLength="558" lengthAdjust="spacingAndGlyphs"> █ ▌ ▌ |▌ ▌ </text><text x="0" y="806.76" textLength="558" lengthAdjust="spacingAndGlyphs"> |▌ ▌█ ▌▌▌▌ </text><text x="0" y="824.76" textLength="558" lengthAdjust="spacingAndGlyphs"> ▌█ ▌▌█▌ </text><text x="0" y="896.76" textLength="558" lengthAdjust="spacingAndGlyphs"> \ ▌▌ ▌▌ </text><text x="0" y="914.76" textLength="558" lengthAdjust="spacingAndGlyphs"> -▌▌▌▌▌- ▌ ▌ </text><text x="0" y="986.76" textLength="558" lengthAdjust="spacingAndGlyphs">|▌▌▌▌ | | ▌▐▌▌▌▌▌</text></g><g fill="rgb(68,72,122)" opacity="0.951" xml:space="preserve"><text x="0" y="14.76" textLength="558" lengthAdjust="spacingAndGlyphs"> ▒ ▒▒ |▒▒▒▒▒▓▒▒|▒▒|▒▒▒ ▒ </text><text x="0" y="68.76" textLength="558" lengthAdjust="spacingAndGlyphs"> ▒ ▒▓▒▒░▒▒▒ </text><text x="0" y="86.76" textLength="558" lengthAdjust="spacingAndGlyphs">▒ ▒ ▒ ▒ ▒░</text><text x="0" y="104.76" textLength="558" lengthAdjust="spacingAndGlyphs">▓ | ░ | ▒ ▓▒▒ </text><text x="0" y="158.76" textLength="558" lengthAdjust="spacingAndGlyphs">▒ ▒░ ||| </text><text x="0" y="176.76" textLength="558" lengthAdjust="spacingAndGlyphs">▒ ▒ ░| ▒ ▒ </text><text x="0" y="194.76" textLength="558" lengthAdjust="spacingAndGlyphs"> ▒ ▒▒ |░ ▒ |▒ ▒ </text><text x="0" y="248.76" textLength="558" lengthAdjust="spacingAndGlyphs"> || ▒ </text><text x="0" y="266.76" textLength="558" lengthAdjust="spacingAndGlyphs"> || ░▒ / </text><text x="0" y="284.76" textLength="558" lengthAdjust="spacingAndGlyphs">▒ ||▒ ▒| ▒ ▒ | ▒ ▒ </text><text x="0" y="338.76" textLength="558" lengthAdjust="spacingAndGlyphs"> |▒ </text><text x="0" y="356.76" textLength="558" lengthAdjust="spacingAndGlyphs"> ▒▓ ▒ ▒ </text><text x="0" y="374.76" textLength="558" lengthAdjust="spacingAndGlyphs"> ▒ ▒ ▒ ▒ ▒ </text><text x="0" y="428.76" textLength="558" lengthAdjust="spacingAndGlyphs"> ▒ </text><text x="0" y="446.76" textLength="558" lengthAdjust="spacingAndGlyphs"> | </text><text x="0" y="464.76" textLength="558" lengthAdjust="spacingAndGlyphs"> | ▒ </text><text x="0" y="518.76" textLength="558" lengthAdjust="spacingAndGlyphs">▒ </text><text x="0" y="536.76" textLength="558" lengthAdjust="spacingAndGlyphs">▒| ▒ ▒▒ ▒ </text><text x="0" y="554.76" textLength="558" lengthAdjust="spacingAndGlyphs"> ▒ ░ ▒ ▓ ▒ </text><text x="0" y="626.76" textLength="558" lengthAdjust="spacingAndGlyphs"> |▓ ▒ ▒ </text><text x="0" y="644.76" textLength="558" lengthAdjust="spacingAndGlyphs"> |▒ | ▓ \ </text><text x="0" y="716.76" textLength="558" lengthAdjust="spacingAndGlyphs"> ░ ▒ ▓ ▒ ▒ </text><text x="0" y="734.76" textLength="558" lengthAdjust="spacingAndGlyphs"> | ▒ ▒▒▒ ░▒▒▒ ▒ </text><text x="0" y="806.76" textLength="558" lengthAdjust="spacingAndGlyphs"> | </text><text x="0" y="896.76" textLength="558" lengthAdjust="spacingAndGlyphs">░--- ▒▒▓ </text><text x="0" y="914.76" textLength="558" lengthAdjust="spacingAndGlyphs"> ░ </text></g><g fill="rgb(103,110,146)" opacity="0.997" xml:space="preserve"><text x="0" y="32.76" textLength="558" lengthAdjust="spacingAndGlyphs"> % </text><text x="0" y="50.76" textLength="558" lengthAdjust="spacingAndGlyphs"> % % % # </text><text x="0" y="68.76" textLength="558" lengthAdjust="spacingAndGlyphs">% % % ░ % </text><text x="0" y="86.76" textLength="558" lengthAdjust="spacingAndGlyphs"> % # %% % </text><text x="0" y="104.76" textLength="558" lengthAdjust="spacingAndGlyphs"> | % ░ % </text><text x="0" y="122.76" textLength="558" lengthAdjust="spacingAndGlyphs"> % | |%-----% % %</text><text x="0" y="140.76" textLength="558" lengthAdjust="spacingAndGlyphs"> % ░ |░ </text><text x="0" y="158.76" textLength="558" lengthAdjust="spacingAndGlyphs"> % % | </text><text x="0" y="176.76" textLength="558" lengthAdjust="spacingAndGlyphs"> || % | %%</text><text x="0" y="194.76" textLength="558" lengthAdjust="spacingAndGlyphs">% % / %</text><text x="0" y="212.76" textLength="558" lengthAdjust="spacingAndGlyphs">% | % % </text><text x="0" y="230.76" textLength="558" lengthAdjust="spacingAndGlyphs"># # % </text><text x="0" y="248.76" textLength="558" lengthAdjust="spacingAndGlyphs">% % -% /</text><text x="0" y="266.76" textLength="558" lengthAdjust="spacingAndGlyphs">% | \ </text><text x="0" y="284.76" textLength="558" lengthAdjust="spacingAndGlyphs"> %| / </text><text x="0" y="302.76" textLength="558" lengthAdjust="spacingAndGlyphs"> %| % ░ % </text><text x="0" y="320.76" textLength="558" lengthAdjust="spacingAndGlyphs"> | % % % </text><text x="0" y="338.76" textLength="558" lengthAdjust="spacingAndGlyphs"> | % % % </text><text x="0" y="356.76" textLength="558" lengthAdjust="spacingAndGlyphs"> % % #% % </text><text x="0" y="374.76" textLength="558" lengthAdjust="spacingAndGlyphs"> %% | </text><text x="0" y="392.76" textLength="558" lengthAdjust="spacingAndGlyphs"> | % | | % </text><text x="0" y="410.76" textLength="558" lengthAdjust="spacingAndGlyphs"> % -% | </text><text x="0" y="428.76" textLength="558" lengthAdjust="spacingAndGlyphs"> ░ %| </text><text x="0" y="446.76" textLength="558" lengthAdjust="spacingAndGlyphs"> %░ # </text><text x="0" y="464.76" textLength="558" lengthAdjust="spacingAndGlyphs"> %% % % </text><text x="0" y="482.76" textLength="558" lengthAdjust="spacingAndGlyphs"> | % % </text><text x="0" y="500.76" textLength="558" lengthAdjust="spacingAndGlyphs"> | % </text><text x="0" y="518.76" textLength="558" lengthAdjust="spacingAndGlyphs"> # % % </text><text x="0" y="536.76" textLength="558" lengthAdjust="spacingAndGlyphs"> | | % %%%%░% </text><text x="0" y="554.76" textLength="558" lengthAdjust="spacingAndGlyphs">||| %% %%%% </text><text x="0" y="572.76" textLength="558" lengthAdjust="spacingAndGlyphs">| | %% %%%% </text><text x="0" y="590.76" textLength="558" lengthAdjust="spacingAndGlyphs"> | %%% %%%% </text><text x="0" y="608.76" textLength="558" lengthAdjust="spacingAndGlyphs">| ||| #% % </text><text x="0" y="626.76" textLength="558" lengthAdjust="spacingAndGlyphs"> | | %%# % ░ </text><text x="0" y="644.76" textLength="558" lengthAdjust="spacingAndGlyphs"> % %%% % \ </text><text x="0" y="662.76" textLength="558" lengthAdjust="spacingAndGlyphs"> | %%% % </text><text x="0" y="680.76" textLength="558" lengthAdjust="spacingAndGlyphs"> %% </text><text x="0" y="698.76" textLength="558" lengthAdjust="spacingAndGlyphs"># | </text><text x="0" y="716.76" textLength="558" lengthAdjust="spacingAndGlyphs">% % % % %#%%</text><text x="0" y="734.76" textLength="558" lengthAdjust="spacingAndGlyphs">% %% ░%%#%</text><text x="0" y="752.76" textLength="558" lengthAdjust="spacingAndGlyphs">% %% %░%%#</text><text x="0" y="770.76" textLength="558" lengthAdjust="spacingAndGlyphs">% </text><text x="0" y="788.76" textLength="558" lengthAdjust="spacingAndGlyphs">% </text><text x="0" y="806.76" textLength="558" lengthAdjust="spacingAndGlyphs">% </text><text x="0" y="824.76" textLength="558" lengthAdjust="spacingAndGlyphs">░% </text><text x="0" y="842.76" textLength="558" lengthAdjust="spacingAndGlyphs">% </text><text x="0" y="878.76" textLength="558" lengthAdjust="spacingAndGlyphs"> % %%░- </text><text x="0" y="950.76" textLength="558" lengthAdjust="spacingAndGlyphs"> % </text></g><g fill="rgb(211,137,61)" opacity="1" xml:space="preserve"><text x="0" y="68.76" textLength="558" lengthAdjust="spacingAndGlyphs"> | | </text><text x="0" y="86.76" textLength="558" lengthAdjust="spacingAndGlyphs"> | | </text><text x="0" y="104.76" textLength="558" lengthAdjust="spacingAndGlyphs"> \|||||| | \ </text><text x="0" y="122.76" textLength="558" lengthAdjust="spacingAndGlyphs"> |+ | | </text><text x="0" y="140.76" textLength="558" lengthAdjust="spacingAndGlyphs"> || | | </text><text x="0" y="158.76" textLength="558" lengthAdjust="spacingAndGlyphs"> |||\ | | | </text><text x="0" y="176.76" textLength="558" lengthAdjust="spacingAndGlyphs"> || \| || </text><text x="0" y="194.76" textLength="558" lengthAdjust="spacingAndGlyphs"> |+| || </text><text x="0" y="212.76" textLength="558" lengthAdjust="spacingAndGlyphs"> +||+| || </text><text x="0" y="230.76" textLength="558" lengthAdjust="spacingAndGlyphs"> | ||+ | / |</text><text x="0" y="248.76" textLength="558" lengthAdjust="spacingAndGlyphs"> | | | || </text><text x="0" y="266.76" textLength="558" lengthAdjust="spacingAndGlyphs"> + || + </text><text x="0" y="284.76" textLength="558" lengthAdjust="spacingAndGlyphs"> | / </text><text x="0" y="302.76" textLength="558" lengthAdjust="spacingAndGlyphs"> | \ | </text><text x="0" y="320.76" textLength="558" lengthAdjust="spacingAndGlyphs"> | |+/ </text><text x="0" y="338.76" textLength="558" lengthAdjust="spacingAndGlyphs"> | | | / / </text><text x="0" y="356.76" textLength="558" lengthAdjust="spacingAndGlyphs"> | | | </text><text x="0" y="374.76" textLength="558" lengthAdjust="spacingAndGlyphs"> | | / / </text><text x="0" y="392.76" textLength="558" lengthAdjust="spacingAndGlyphs"> \ | | </text><text x="0" y="410.76" textLength="558" lengthAdjust="spacingAndGlyphs"> | /| / </text><text x="0" y="428.76" textLength="558" lengthAdjust="spacingAndGlyphs"> || | </text><text x="0" y="446.76" textLength="558" lengthAdjust="spacingAndGlyphs"> || | </text><text x="0" y="464.76" textLength="558" lengthAdjust="spacingAndGlyphs"> | | + </text><text x="0" y="482.76" textLength="558" lengthAdjust="spacingAndGlyphs"> | | | </text><text x="0" y="500.76" textLength="558" lengthAdjust="spacingAndGlyphs"> | | \| | </text><text x="0" y="518.76" textLength="558" lengthAdjust="spacingAndGlyphs"> ||| | ||+| </text><text x="0" y="536.76" textLength="558" lengthAdjust="spacingAndGlyphs"> ||| </text><text x="0" y="554.76" textLength="558" lengthAdjust="spacingAndGlyphs"> ||| </text><text x="0" y="572.76" textLength="558" lengthAdjust="spacingAndGlyphs"> |\| </text><text x="0" y="590.76" textLength="558" lengthAdjust="spacingAndGlyphs"> | |\ </text><text x="0" y="608.76" textLength="558" lengthAdjust="spacingAndGlyphs"> | | </text><text x="0" y="626.76" textLength="558" lengthAdjust="spacingAndGlyphs">| | </text><text x="0" y="644.76" textLength="558" lengthAdjust="spacingAndGlyphs">| | | </text><text x="0" y="662.76" textLength="558" lengthAdjust="spacingAndGlyphs">| | </text><text x="0" y="680.76" textLength="558" lengthAdjust="spacingAndGlyphs">| | | | </text><text x="0" y="698.76" textLength="558" lengthAdjust="spacingAndGlyphs"> \ | </text><text x="0" y="716.76" textLength="558" lengthAdjust="spacingAndGlyphs"> | || || </text><text x="0" y="932.76" textLength="558" lengthAdjust="spacingAndGlyphs"> | </text><text x="0" y="950.76" textLength="558" lengthAdjust="spacingAndGlyphs"> | </text><text x="0" y="968.76" textLength="558" lengthAdjust="spacingAndGlyphs"> || </text><text x="0" y="986.76" textLength="558" lengthAdjust="spacingAndGlyphs"> || </text></g><g fill="rgb(233,178,101)" opacity="1" xml:space="preserve"><text x="0" y="140.76" textLength="558" lengthAdjust="spacingAndGlyphs"> / / </text><text x="0" y="158.76" textLength="558" lengthAdjust="spacingAndGlyphs"> \ </text><te
N <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 231 406" width="231" height="406" data-poster-grid="33x58" data-source-grid="65x116" data-detail="0.5" data-background="0.39" data-poster-tones="8"><rect width="100%" height="100%" fill="#08090b"/><g font-family="ui-monospace,SFMono-Regular,Menlo,Consolas,monospace" font-size="9" font-weight="700" letter-spacing="0"><g fill="rgb(24,9,16)" opacity="0.86" xml:space="preserve"><text x="0" y="19.74" textLength="231" lengthAdjust="spacingAndGlyphs">‡‡‡‡‡‡†‡‡‡‡‡‡‡++ *‡‡†‡‡†‡‡‡‡++ * </text><text x="0" y="26.74" textLength="231" lengthAdjust="spacingAndGlyphs">‡‡‡‡‡‡‡†‡‡‡‡‡‡* +‡‡‡†‡‡†‡‡‡* </text><text x="0" y="54.74" textLength="231" lengthAdjust="spacingAndGlyphs">‡‡‡‡‡‡ * + #‡‡‡†‡‡‡‡‡‡+ #</text><text x="0" y="61.74" textLength="231" lengthAdjust="spacingAndGlyphs">‡‡‡‡+* + / +‡‡‡‡†‡‡‡‡‡# + </text><text x="0" y="89.74" textLength="231" lengthAdjust="spacingAndGlyphs">‡‡#++++ # / ++‡‡‡‡‡‡†‡* </text><text x="0" y="96.74" textLength="231" lengthAdjust="spacingAndGlyphs">‡‡++*# + * +**‡‡‡†‡‡‡‡# *</text><text x="0" y="124.74" textLength="231" lengthAdjust="spacingAndGlyphs">## + ## * ‡‡‡‡‡‡‡‡‡†* </text><text x="0" y="131.74" textLength="231" lengthAdjust="spacingAndGlyphs">+ **# +++ # + *‡‡‡‡‡‡‡‡‡‡++ </text><text x="0" y="159.74" textLength="231" lengthAdjust="spacingAndGlyphs"> #++‡† # * / +‡‡#+ </text><text x="0" y="166.74" textLength="231" lengthAdjust="spacingAndGlyphs"> +**‡‡+ ++/ #†‡++* </text><text x="0" y="194.74" textLength="231" lengthAdjust="spacingAndGlyphs"> + ## *## + *†‡++ </text><text x="0" y="201.74" textLength="231" lengthAdjust="spacingAndGlyphs"> * |+ ‡‡++ ‡†+ </text><text x="0" y="229.74" textLength="231" lengthAdjust="spacingAndGlyphs"> ‡‡ + # \* #‡‡+ ‡‡++ #</text><text x="0" y="236.74" textLength="231" lengthAdjust="spacingAndGlyphs"> #‡‡+ / / #+ +‡‡# ‡‡*# </text><text x="0" y="264.74" textLength="231" lengthAdjust="spacingAndGlyphs">+ ‡‡‡†++* + # +++ </text><text x="0" y="271.74" textLength="231" lengthAdjust="spacingAndGlyphs"># ++‡‡†‡# + + * * ## </text><text x="0" y="299.74" textLength="231" lengthAdjust="spacingAndGlyphs">* ++†‡‡‡‡‡+| # * +** </text><text x="0" y="306.74" textLength="231" lengthAdjust="spacingAndGlyphs">+ *‡†‡‡‡‡*# #\+ + *</text><text x="0" y="334.74" textLength="231" lengthAdjust="spacingAndGlyphs">* ‡†‡‡‡‡‡‡‡‡#++ # </text><text x="0" y="341.74" textLength="231" lengthAdjust="spacingAndGlyphs">+ †‡‡‡# ++‡‡‡‡ + + </text><text x="0" y="369.74" textLength="231" lengthAdjust="spacingAndGlyphs"> ++‡‡#\ ++**##++ * # </text><text x="0" y="376.74" textLength="231" lengthAdjust="spacingAndGlyphs"> #‡‡++ + + </text><text x="0" y="404.74" textLength="231" lengthAdjust="spacingAndGlyphs"> # + *‡‡+++ * **#‡‡ </text></g><g fill="rgb(57,31,45)" opacity="0.906" xml:space="preserve"><text x="0" y="19.74" textLength="231" lengthAdjust="spacingAndGlyphs"> † </text><text x="0" y="26.74" textLength="231" lengthAdjust="spacingAndGlyphs"> / </text><text x="0" y="54.74" textLength="231" lengthAdjust="spacingAndGlyphs"> † † </text><text x="0" y="89.74" textLength="231" lengthAdjust="spacingAndGlyphs"> † % † | </text><text x="0" y="96.74" textLength="231" lengthAdjust="spacingAndGlyphs"> ‡ / | </text><text x="0" y="124.74" textLength="231" lengthAdjust="spacingAndGlyphs"> †‡ | | </text><text x="0" y="131.74" textLength="231" lengthAdjust="spacingAndGlyphs"> % </text><text x="0" y="159.74" textLength="231" lengthAdjust="spacingAndGlyphs"> † - † </text><text x="0" y="166.74" textLength="231" lengthAdjust="spacingAndGlyphs"> / </text><text x="0" y="194.74" textLength="231" lengthAdjust="spacingAndGlyphs"> / / † </text><text x="0" y="201.74" textLength="231" lengthAdjust="spacingAndGlyphs"> % † | | </text><text x="0" y="229.74" textLength="231" lengthAdjust="spacingAndGlyphs"> † \ </text><text x="0" y="236.74" textLength="231" lengthAdjust="spacingAndGlyphs">† † </text><text x="0" y="264.74" textLength="231" lengthAdjust="spacingAndGlyphs"> †† </text><text x="0" y="271.74" textLength="231" lengthAdjust="spacingAndGlyphs"> ‡ † †</text><text x="0" y="299.74" textLength="231" lengthAdjust="spacingAndGlyphs"> / / </text><text x="0" y="306.74" textLength="231" lengthAdjust="spacingAndGlyphs"> † ‡ / † † </text><text x="0" y="334.74" textLength="231" lengthAdjust="spacingAndGlyphs"> †% </text><text x="0" y="341.74" textLength="231" lengthAdjust="spacingAndGlyphs"> † \ † † %</text><text x="0" y="369.74" textLength="231" lengthAdjust="spacingAndGlyphs">| / - </text><text x="0" y="376.74" textLength="231" lengthAdjust="spacingAndGlyphs">| † / † </text><text x="0" y="404.74" textLength="231" lengthAdjust="spacingAndGlyphs"> † † | </text></g><g fill="rgb(68,72,122)" opacity="0.951" xml:space="preserve"><text x="0" y="26.74" textLength="231" lengthAdjust="spacingAndGlyphs"> / </text><text x="0" y="54.74" textLength="231" lengthAdjust="spacingAndGlyphs"> % </text><text x="0" y="61.74" textLength="231" lengthAdjust="spacingAndGlyphs"> % - # | </text><text x="0" y="96.74" textLength="231" lengthAdjust="spacingAndGlyphs"> % / </text><text x="0" y="124.74" textLength="231" lengthAdjust="spacingAndGlyphs"> %% </text><text x="0" y="131.74" textLength="231" lengthAdjust="spacingAndGlyphs"> | </text><text x="0" y="159.74" textLength="231" lengthAdjust="spacingAndGlyphs"> / - | \ </text><text x="0" y="166.74" textLength="231" lengthAdjust="spacingAndGlyphs"> % </text><text x="0" y="194.74" textLength="231" lengthAdjust="spacingAndGlyphs">/ #| \ </text><text x="0" y="201.74" textLength="231" lengthAdjust="spacingAndGlyphs"># % | </text><text x="0" y="229.74" textLength="231" lengthAdjust="spacingAndGlyphs">| % </text><text x="0" y="264.74" textLength="231" lengthAdjust="spacingAndGlyphs"> //|% †</text><text x="0" y="271.74" textLength="231" lengthAdjust="spacingAndGlyphs"> || </text><text x="0" y="299.74" textLength="231" lengthAdjust="spacingAndGlyphs"> \ </text><text x="0" y="306.74" textLength="231" lengthAdjust="spacingAndGlyphs"> % / </text><text x="0" y="334.74" textLength="231" lengthAdjust="spacingAndGlyphs"> % % † </text><text x="0" y="341.74" textLength="231" lengthAdjust="spacingAndGlyphs"> / / </text><text x="0" y="369.74" textLength="231" lengthAdjust="spacingAndGlyphs"> % % </text><text x="0" y="376.74" textLength="231" lengthAdjust="spacingAndGlyphs"> # %</text><text x="0" y="404.74" textLength="231" lengthAdjust="spacingAndGlyphs"> % </text></g><g fill="rgb(103,110,146)" opacity="0.997" xml:space="preserve"><text x="0" y="12.74" textLength="231" lengthAdjust="spacingAndGlyphs"> | | </text><text x="0" y="26.74" textLength="231" lengthAdjust="spacingAndGlyphs"> | </text><text x="0" y="33.74" textLength="231" lengthAdjust="spacingAndGlyphs"> % </text><text x="0" y="54.74" textLength="231" lengthAdjust="spacingAndGlyphs"> % </text><text x="0" y="61.74" textLength="231" lengthAdjust="spacingAndGlyphs"> % </text><text x="0" y="68.74" textLength="231" lengthAdjust="spacingAndGlyphs"> / </text><text x="0" y="75.74" textLength="231" lengthAdjust="spacingAndGlyphs"> † % </text><text x="0" y="82.74" textLength="231" lengthAdjust="spacingAndGlyphs"> / </text><text x="0" y="89.74" textLength="231" lengthAdjust="spacingAndGlyphs"> % | </text><text x="0" y="96.74" textLength="231" lengthAdjust="spacingAndGlyphs"> %/ </text><text x="0" y="103.74" textLength="231" lengthAdjust="spacingAndGlyphs"> / </text><text x="0" y="117.74" textLength="231" lengthAdjust="spacingAndGlyphs"> % </text><text x="0" y="124.74" textLength="231" lengthAdjust="spacingAndGlyphs"> / </text><text x="0" y="131.74" textLength="231" lengthAdjust="spacingAndGlyphs"> / </text><text x="0" y="138.74" textLength="231" lengthAdjust="spacingAndGlyphs"> | - % </text><text x="0" y="145.74" textLength="231" lengthAdjust="spacingAndGlyphs"> % / </text><text x="0" y="152.74" textLength="231" lengthAdjust="spacingAndGlyphs"> \ - </text><text x="0" y="159.74" textLength="231" lengthAdjust="spacingAndGlyphs"> / / % / </text><text x="0" y="166.74" textLength="231" lengthAdjust="spacingAndGlyphs"> %# | </text><text x="0" y="173.74" textLength="231" lengthAdjust="spacingAndGlyphs"> / # | / </text><text x="0" y="180.74" textLength="231" lengthAdjust="spacingAndGlyphs">% | </text><text x="0" y="187.74" textLength="231" lengthAdjust="spacingAndGlyphs"> % % </text><text x="0" y="201.74" textLength="231" lengthAdjust="spacingAndGlyphs"> % </text><text x="0" y="208.74" textLength="231" lengthAdjust="spacingAndGlyphs">| % \ </text><text x="0" y="215.74" textLength="231" lengthAdjust="spacingAndGlyphs"> | </text><text x="0" y="222.74" textLength="231" lengthAdjust="spacingAndGlyphs"> % \</text><text x="0" y="229.74" textLength="231" lengthAdjust="spacingAndGlyphs"> \ </text><text x="0" y="243.74" textLength="231" lengthAdjust="spacingAndGlyphs"> % / % | </text><text x="0" y="271.74" textLength="231" lengthAdjust="spacingAndGlyphs"> % \ % </text><text x="0" y="285.74" textLength="231" lengthAdjust="spacingAndGlyphs"> / / || </text><text x="0" y="292.74" textLength="231" lengthAdjust="spacingAndGlyphs"> / </text><text x="0" y="299.74" textLength="231" lengthAdjust="spacingAndGlyphs"> % / </text><text x="0" y="306.74" textLength="231" lengthAdjust="spacingAndGlyphs"> # </text><text x="0" y="313.74" textLength="231" lengthAdjust="spacingAndGlyphs"> \ / %||</text><text x="0" y="327.74" textLength="231" lengthAdjust="spacingAndGlyphs"> / </text><text x="0" y="334.74" textLength="231" lengthAdjust="spacingAndGlyphs"> % / % </text><text x="0" y="341.74" textLength="231" lengthAdjust="spacingAndGlyphs"> %# / | </text><text x="0" y="348.74" textLength="231" lengthAdjust="spacingAndGlyphs"> / %% † % </text><text x="0" y="355.74" textLength="231" lengthAdjust="spacingAndGlyphs"> # % % </text><text x="0" y="362.74" textLength="231" lengthAdjust="spacingAndGlyphs"> % / \ </text><text x="0" y="369.74" textLength="231" lengthAdjust="spacingAndGlyphs"> % % </text><text x="0" y="376.74" textLength="231" lengthAdjust="spacingAndGlyphs"> |// | / %/ - </text><text x="0" y="383.74" textLength="231" lengthAdjust="spacingAndGlyphs"> % </text><text x="0" y="390.74" textLength="231" lengthAdjust="spacingAndGlyphs"> % % / </text><text x="0" y="397.74" textLength="231" lengthAdjust="spacingAndGlyphs"> #% | </text><text x="0" y="404.74" textLength="231" lengthAdjust="spacingAndGlyphs">% %% | </text></g><g fill="rgb(211,137,61)" opacity="1" xml:space="preserve"><text x="0" y="5.74" textLength="231" lengthAdjust="spacingAndGlyphs"> * </text><text x="0" y="26.74" textLength="231" lengthAdjust="spacingAndGlyphs"> * </text><text x="0" y="33.74" textLength="231" lengthAdjust="spacingAndGlyphs"> + </text><text x="0" y="40.74" textLength="231" lengthAdjust="spacingAndGlyphs"> * </text><text x="0" y="54.74" textLength="231" lengthAdjust="spacingAndGlyphs"> - -\ / </text><text x="0" y="61.74" textLength="231" lengthAdjust="spacingAndGlyphs"> \ </text><text x="0" y="68.74" textLength="231" lengthAdjust="spacingAndGlyphs"> * \ </text><text x="0" y="75.74" textLength="231" lengthAdjust="spacingAndGlyphs"> \ </text><text x="0" y="82.74" textLength="231" lengthAdjust="spacingAndGlyphs"> | </text><text x="0" y="89.74" textLength="231" lengthAdjust="spacingAndGlyphs"> * </text><text x="0" y="96.74" textLength="231" lengthAdjust="spacingAndGlyphs"> / | </text><text x="0" y="103.74" textLength="231" lengthAdjust="spacingAndGlyphs"> / </text><text x="0" y="131.74" textLength="231" lengthAdjust="spacingAndGlyphs"> | / </text><text x="0" y="138.74" textLength="231" lengthAdjust="spacingAndGlyphs">* </text><text x="0" y="145.74" textLength="231" lengthAdjust="spacingAndGlyphs">* * </text><text x="0" y="152.74" textLength="231" lengthAdjust="spacingAndGlyphs"> ** + </text><text x="0" y="159.74" textLength="231" lengthAdjust="spacingAndGlyphs">* *\ </text><text x="0" y="166.74" textLength="231" lengthAdjust="spacingAndGlyphs">* ** \ * / </text><text x="0" y="173.74" textLength="231" lengthAdjust="spacingAndGlyphs"> / * + </text><text x="0" y="180.74" textLength="231" lengthAdjust="spacingAndGlyphs"> ** + # / *</text><text x="0" y="187.74" textLength="231" lengthAdjust="spacingAndGlyphs">| * * # </text><text x="0" y="194.74" textLength="231" lengthAdjust="spacingAndGlyphs"> * * </text><text x="0" y="201.74" textLength="231" lengthAdjust="spacingAndGlyphs"> */ ** *| </text><text x="0" y="208.74" textLength="231" lengthAdjust="spacingAndGlyphs"> # </text><text x="0" y="215.74" textLength="231" lengthAdjust="spacingAndGlyphs"> * * \ </text><text x="0" y="222.74" textLength="231" lengthAdjust="spacingAndGlyphs"> / / \ </text><text x="0" y="229.74" textLength="231" lengthAdjust="spacingAndGlyphs"> / * </text><text x="0" y="236.74" textLength="231" lengthAdjust="spacingAndGlyphs"> * / * \ * |</text><text x="0" y="243.74" textLength="231" lengthAdjust="spacingAndGlyphs"> * </text><text x="0" y="250.74" textLength="231" lengthAdjust="spacingAndGlyphs"> / + / </text><text x="0" y="257.74" textLength="231" lengthAdjust="spacingAndGlyphs"> * </text><text x="0" y="264.74" textLength="231" lengthAdjust="spacingAndGlyphs"> * / / * </text><text x="0" y="271.74" textLength="231" lengthAdjust="spacingAndGlyphs"> * / </text><text x="0" y="278.74" textLength="231" lengthAdjust="spacingAndGlyphs"> * </text><text x="0" y="285.74" textLength="231" lengthAdjust="spacingAndGlyphs"> #| </text><text x="0" y="292.74" textLength="231" lengthAdjust="spacingAndGlyphs"> * * </text><text x="0" y="299.74" textLength="231" lengthAdjust="spacingAndGlyphs"> * / *</text><text x="0" y="306.74" textLength="231" lengthAdjust="spacingAndGlyphs"> * \ </text><text x="0" y="313.74" textLength="231" lengthAdjust="spacingAndGlyphs"> * </text><text x="0" y="320.74" textLength="231" lengthAdjust="spacingAndGlyphs"> # / * </text><text x="0" y="327.74" textLength="231" lengthAdjust="spacingAndGlyphs"> * </text><text x="0" y="334.74" textLength="231" lengthAdjust="spacingAndGlyphs"> / + </text><text x="0" y="341.74" textLength="231" lengthAdjust="spacingAndGlyphs"> ** * * </text><text x="0" y="348.74" textLength="231" lengthAdjust="spacingAndGlyphs"> * * </text><text x="0" y="355.74" textLength="231" lengthAdjust="spacingAndGlyphs"> | */ </text><text x="0" y="362.74" textLength="231" lengthAdjust="spacingAndGlyphs"> * * * * </text><text x="0" y="369.74" textLength="231" lengthAdjust="spacingAndGlyphs"> / * | </text><text x="0" y="376.74" textLength="231" lengthAdjust="spacingAndGlyphs"> ** * / - / #* </text><text x="0" y="383.74" textLength="231" lengthAdjust="spacingAndGlyphs"> * # * * | </text><text x="0" y="390.74" textLength="231" lengthAdjust="spacingAndGlyphs"> / * * </text><text x="0" y="397.74" textLength="231" lengthAdjust="spacingAndGlyphs"> ** * / *| </text><text x="0" y="404.74" textLength="231" lengthAdjust="spacingAndGlyphs"> # * </text></g><g fill="rgb(233,178,101)" opacity="1" xml:space="preserve"><text x="0" y="12.74" textLength="231" lengthAdjust="spacingAndGlyphs"> |</text><text x="0" y="33.74" textLength="231" lengthAdjust="spacingAndGlyphs"> * </text><text x="0" y="40.74" textLength="231" lengthAdjust="spacingAndGlyphs"> * </text><text x="0" y="47.74" textLength="231" lengthAdjust="spacingAndGlyphs"> -* * </text><text x="0" y="54.74" textLength="231" lengthAdjust="spacingAndGlyphs"> + </text><text x="0" y="61.2K74" textLength="231" lengthAdjust="spacingAndGlyphs"> * # </text><text x="0" y="68.74" textLength="231" lengthAdjust="spacingAndGlyphs"> * * * </text><text x="0" y="75.74" textLength="231" lengthAdjust="spacingAndGlyphs"> * </text><text x="0" y="82.74" textLength="231" lengthAdjust="spacingAndGlyphs"> # * </text><text x="0" y="89.74" textLength="231" lengthAdjust="spacingAndGlyphs"> *+ </text><text x="0" y="110.74" textLength="231" lengthAdjust="spacingAndGlyphs"> - </text><text x="0" y="124.74" textLength="231" lengthAdjust="spacingAndGlyphs"> | </text><text x="0" y="131.74" textLength="231" lengthAdjust="spacingAndGlyphs"> \/ - </text><text x="0" y="152.74" textLength="231" lengthAdjust="spacingAndGlyphs"> * * </text><text x="0" y="159.74" textLength="231" lengthAdjust="spacingAndGlyphs"> + * </text><text x="0" y="166.74" textLength="231" lengthAdjust="spacingAndGlyphs"> * | </text><text x="0" y="173.74" textLength="231" lengthAdjust="spacingAndGlyphs"> * * \ </text><text x="0" y="180.74" textLength="231" lengthAdjust="spacingAndGlyphs"> / + </text><text x="0" y="187.74" textLength="231" lengthAdjust="spacingAndGlyphs"> * / * * * </text><text x="0" y="194.74" textLength="231" lengthAdjust="spacingAndGlyphs"> +* * * * \</text><text x="0" y="201.74" textLength="231" lengthAdjust="spacingAndGlyphs"> * * / </text><text x="0" y="208.74" textLength="231" lengthAdjust="spacingAndGlyphs"> * \ * </text><text x="0" y="215.74" textLength="231" lengthAdjust="spacingAndGlyphs"> \\ * </text><text x="0" y="222.74" textLength="231" lengthAdjust="spacingAndGlyphs"> * </text><text x="0" y="229.74" textLength="231" lengthAdjust="spacingAndGlyphs"> * * </text><text x="0" y="236.74" textLength="231" lengthAdjust="spacingAndGlyphs"> / </text><text x="0" y="243.74" textLength="231" lengthAdjust="spacingAndGlyphs"> / # * </text><text x="0" y="257.74" textLength="231" lengthAdjust="spacingAndGlyphs"> + + </text><text x="0" y="271.74" textLength="231" lengthAdjust="spacingAndGlyphs"> * ** </text><text x="0" y="278.74" textLength="231" lengthAdjust="spacingAndGlyphs"> *| |</text><text x="0" y="285.74" textLength="231" lengthAdjust="spacingAndGlyphs"> / </text><text x="0" y="292.74" textLength="231" lengthAdjust="spacingAndGlyphs"> # </text><text x="0" y="299.74" textLength="231" lengthAdjust="spacingAndGlyphs"> + </text><text x="0" y="306.74" textLength="231" lengthAdjust="spacingAndGlyphs"> / / * </text><text x="0" y="313.74" textLength="231" lengthAdjust="spacingAndGlyphs"> # * | </text><text x="0" y="320.74" textLength="231" lengthAdjust="spacingAndGlyphs"> * </text><text x="0" y="327.74" textLength="231" lengthAdjust="spacingAndGlyphs"> * * </text><text x="0" y="334.74" textLength="231" lengthAdjust="spacingAndGlyphs"> * + * *</text><text x="0" y="341.74" textLength="231" lengthAdjust="spacingAndGlyphs"> / </text><text x="0" y="348.74" textLength="231" lengthAdjust="spacingAndGlyphs"> * * / / </text><text x="0" y="355.74" textLength="231" lengthAdjust="spacingAndGlyphs"> * * |*</text><text x="0" y="362.74" textLength="231" lengthAdjust="spacingAndGlyphs"> * / </text><text x="0" y="369.74" textLength="231" lengthAdjust="spacingAndGlyphs"> # + * * *</text><text x="0" y="376.74" textLength="231" lengthAdjust="spacingAndGlyphs"> * / </text><text x="0" y="383.74" textLength="231" lengthAdjust="spacingAndGlyphs"> * * * / * + </text><text x="0" y="390.74" textLength="231" lengthAdjust="spacingAndGlyphs"> * * # #</text><text x="0" y="397.74" textLength="231" lengthAdjust="spacingAndGlyphs"> * * </text><text x="0" y="404.74" textLength="231" lengthAdjust="spacingAndGlyphs"> * ** *+ *</text></g><g fill="rgb(218,223,195)" opacity="1" xml:space="preserve"><text x="0" y="12.74" textLength="231" lengthAdjust="spacingAndGlyphs"> # </text><text x="0" y="54.74" textLength="231" lengthAdjust="spacingAndGlyphs"> # </text><text x="0" y="117.74" textLength="231" lengthAdjust="spacingAndGlyphs"> ## &amp; </text><text x="0" y="152.74" textLength="231" lengthAdjust="spacingAndGlyphs"> # </text><text x="0" y="159.74" textLength="231" lengthAdjust="spacingAndGlyphs"> # </text><text x="0" y="180.74" textLength="231" lengthAdjust="spacingAndGlyphs"> | </text><text x="0" y="187.74" textLength="231" lengthAdjust="spacingAndGlyphs"> \ </text><text x="0" y="194.74" textLength="231" lengthAdjust="spacingAndGlyphs"> / </text><text x="0" y="208.74" textLength="231" lengthAdjust="spacingAndGlyphs"> - </text><text x="0" y="250.74" textLength="231" lengthAdjust="spacingAndGlyphs"> \ # </text><text x="0" y="257.74" textLength="231" lengthAdjust="spacingAndGlyphs"> # </text><text x="0" y="292.74" textLength="231" lengthAdjust="spacingAndGlyphs"> / </text><text x="0" y="313.74" textLength="231" lengthAdjust="spacingAndGlyphs"> / </text><text x="0" y="348.74" textLength="231" lengthAdjust="spacingAndGlyphs"> | </text></g><g fill="rgb(255,255,255)" opacity="1" xml:space="preserve"><text x="0" y="5.74" textLength="231" lengthAdjust="spacingAndGlyphs"> + </text><text x="0" y="19.74" textLength="231" lengthAdjust="spacingAndGlyphs"> + +</text><text x="0" y="26.74" textLength="231" lengthAdjust="spacingAndGlyphs"> + +</text><text x="0" y="33.74" textLength="231" lengthAdjust="spacingAndGlyphs"> ++</text><text x="0" y="40.74" textLength="231" lengthAdjust="spacingAndGlyphs"> ++</text><text x="0" y="47.74" textLength="231" lengthAdjust="spacingAndGlyphs"> ++ </text><text x="0" y="54.74" textLength="231" lengthAdjust="spacingAndGlyphs"> + + </text><text x="0" y="61.74" textLength="231" lengthAdjust="spacingAndGlyphs"> + + + +</text><text x="0" y="68.74" textLength="231" lengthAdjust="spacingAndGlyphs"> + +</text><text x="0" y="75.74" textLength="231" lengthAdjust="spacingAndGlyphs"> ++</text><text x="0" y="82.74" textLength="231" lengthAdjust="spacingAndGlyphs"> +++</text><text x="0" y="89.74" textLength="231" lengthAdjust="spacingAndGlyphs"> + +++</text><text x="0" y="96.74" textLength="231" lengthAdjust="spacingAndGlyphs"> ++ + </text><text x="0" y="103.74" textLength="231" lengthAdjust="spacingAndGlyphs"> + </text><text x="0" y="110.74" textLength="231" lengthAdjust="spacingAndGlyphs"> + ++</text><text x="0" y="117.74" textLength="231" lengthAdjust="spacingAndGlyphs"> + +++</text><text x="0" y="124.74" textLength="231" lengthAdjust="spacingAndGlyphs"> +++ ++ +++</text><text x="0" y="131.74" textLength="231" lengthAdjust="spacingAndGlyphs"> + ++</text><text x="0" y="138.74" textLength="231" lengthAdjust="spacingAndGlyphs"> ++ </text><text x="0" y="145.74" textLength="231" lengthAdjust="spacingAndGlyphs"> ++ + + </text><text x="0" y="152.74" textLength="231" lengthAdjust="spacingAndGlyphs"> + ++</text><text x="0" y="159.74" textLength="231" lengthAdjust="spacingAndGlyphs"> + ++</text><text x="0" y="166.74" textLength="231" lengthAdjust="spacingAndGlyphs"> + ++ ++</text><text x="0" y="173.74" textLength="231" lengthAdjust="spacingAndGlyphs"> +++ +</text><text x="0" y="180.74" textLength="231" lengthAdjust="spacingAndGlyphs"> ++ </text><text x="0" y="187.74" textLength="231" lengthAdjust="spacingAndGlyphs"> + + + </text><text x="0" y="194.74" textLength="231" lengthAdjust="spacingAndGlyphs"> +++ + + </text><text x="0" y="201.74" textLength="231" lengthAdjust="spacingAndGlyphs"> ++ ++ ++</text><text x="0" y="208.74" textLength="231" lengthAdjust="spacingAndGlyphs"> +++ ++ +</text><text x="0" y="215.74" textLength="231" lengthAdjust="spacingAndGlyphs"> +++ + + + +</text><text x="0" y="222.74" textLength="231" lengthAdjust="spacingAndGlyphs"> ++ ++ ++ + </text><text x="0" y="229.74" textLength="231" lengthAdjust="spacingAndGlyphs"> + +++ + + ++ + </text><text x="0" y="236.74" textLength="231" lengthAdjust="spacingAndGlyphs"> +++ + +++ + </text><text x="0" y="243.74" textLength="231" lengthAdjust="spacingAndGlyphs"> +++ +++ + + +</text><text x="0" y="250.74" textLength="231" lengthAdjust="spacingAndGlyphs"> + +++ + ++ + +</text><text x="0" y="257.74" textLength="231" lengthAdjust="spacingAndGlyphs"> +++ ++ + ++ +</text><text x="0" y="264.74" textLength="231" lengthAdjust="spacingAndGlyphs"> ++ +++ +++ + </text><text x="0" y="271.74" textLength="231" lengthAdjust="spacingAndGlyphs"> +++ + ++ </text><text x="0" y="278.74" textLength="231" lengthAdjust="spacingAndGlyphs"> +++ ++ + </text><text x="0" y="285.74" textLength="231" lengthAdjust="spacingAndGlyphs"> + +++ ++ +</text><text x="0" y="292.74" textLength="231" lengthAdjust="spacingAndGlyphs"> +++ ++ ++</text><text x="0" y="299.74" textLength="231" lengthAdjust="spacingAndGlyphs"> ++ ++ +++ + </text><text x="0" y="306.74" textLength="231" lengthAdjust="spacingAndGlyphs"> +++ ++ </text><text x="0" y="313.74" textLength="231" lengthAdjust="spacingAndGlyphs"> +++ ++ </text><text x="0" y="320.74" textLength="231" lengthAdjust="spacingAndGlyphs"> + ++ +++ + +</text><text x="0" y="327.74" textLength="231" lengthAdjust="spacingAndGlyphs"> +++ +++ +++</text><text x="0" y="334.74" textLength="231" lengthAdjust="spacingAndGlyphs"> + ++ + </text><text x="0" y="341.74" textLength="231" lengthAdjust="spacingAndGlyphs"> + ++ </text><text x="0" y="348.74" textLength="231" lengthAdjust="spacingAndGlyphs"> ++ + </text><text x="0" y="355.74" textLength="231" lengthAdjust="spacingAndGlyphs"> ++ </text><text x="0" y="362.74" textLength="231" lengthAdjust="spacingAndGlyphs"> ++ +</text><text x="0" y="369.74" textLength="231" lengthAdjust="spacingAndGlyphs"> ++ </text><text x="0" y="376.74" textLength="231" lengthAdjust="spacingAndGlyphs"> ++ </text><text x="0" y="383.74" textLength="231" lengthAdjust="spacingAndGlyphs"> + ++ ++ </text><text x="0" y="390.74" textLength="231" lengthAdjust="spacingAndGlyphs"> + + +++ ++ </text><text x="0" y="397.74" textLength="231" lengthAdjust="spacingAndGlyphs"> + +++ + +</text><text x="0" y="404.74" textLength="231" lengthAdjust="spacingAndGlyphs"> +++ </text></g></g></svg>
ionFrame = frame) { const storageFrame = grPureProceduralEnabled() ? 0 : frame; let toneLines = toneLineCache[storageFrame]; if (!toneLines) { toneLines = grGeneratedToneFrame(storedToneFrames, storageFrame).split("\n"); toneLineCache[storageFrame] = toneLines; } let styleLines = styleLineCache[storageFrame]; if (!styleLines) { styleLines = grGeneratedStyleFrame(storedStyleFrames, storageFrame).split("\n"); styleLineCache[storageFrame] = styleLines; } svgComputeRowOffsets(frame); for (let row = 0; row < rows; row += 1) { const toneLine = toneLines[row] || ""; const styleLine = styleLines[row] || ""; for (let column = 0; column < columns; column += 1) { const tone = toneValueMap[toneLine[column] || "0"] ?? 0; const style = grEffectiveStyle(styleLine[column] || "0", tone); const adaptiveSpec = grAdaptiveBlockSpec(styleLines, column, row, style); const recoveredAdaptiveDenseAnchor = adaptiveSpec ? adaptiveSpec.recoveredDenseAnchor : false; const adaptiveScale = adaptiveSpec ? 1 : 1; const glyph = grEdgeGlyphFromStyle(style) || grGlyphFromTone(tone, column, row, frame); const index = row * columns + column; if (style === "1") { svgClearCell(targetCells[index]); if (targetGlowCells?.[index]) svgClearCell(targetGlowCells[index]); continue; } const shouldGlow = svgSetCell(targetCells[index], glyph, tone, style, column, row, frame, adaptiveScale, motionFrame, recoveredAdaptiveDenseAnchor, adaptiveSpec); if (targetGlowCells) { if (shouldGlow) { if (!targetGlowCells[index]) targetGlowCells[index] = svgCreateCellNode(targetGlowCells._parent, column, row); svgSetCell(targetGlowCells[index], glyph, tone, style, column, row, frame, adaptiveScale, motionFrame, recoveredAdaptiveDenseAnchor, adaptiveSpec); } else if (targetGlowCells[index]) { svgClearCell(targetGlowCells[index]); } } } } } function svgBuildCachedFrame(frame) { const group = document.createElementNS(svgNs, "g"); const glowGroup = RENDER_GLOW_ENABLED ? document.createElementNS(svgNs, "g") : null; group.setAttribute("opacity", "0"); group.style.display = "none"; if (glowGroup) { glowGroup.setAttribute("opacity", "0"); glowGroup.style.display = "none"; } const targetCells = []; const targetGlowCells = []; if (glowGroup) targetGlowCells._parent = glowGroup; createCellNodes(group, targetCells); cellsLayer.appendChild(group); if (glowGroup) glowCellsLayer.appendChild(glowGroup); svgPaintCells(targetCells, frame, glowGroup ? targetGlowCells : null); frameGroups[frame] = { group, glowGroup }; return frameGroups[frame]; } function svgShowCachedFrame(frame, timelineFrame) { const entry = frameGroups[frame] || svgBuildCachedFrame(frame); if (activeFrameGroup && activeFrameGroup !== entry) { activeFrameGroup.group.style.display = "none"; activeFrameGroup.group.setAttribute("opacity", "0"); if (activeFrameGroup.glowGroup) { activeFrameGroup.glowGroup.style.display = "none"; activeFrameGroup.glowGroup.setAttribute("opacity", "0"); } } entry.group.style.display = "block"; entry.group.setAttribute("opacity", "1"); if (entry.glowGroup) { entry.glowGroup.style.display = "block"; entry.glowGroup.setAttribute("opacity", "1"); } activeFrameGroup = entry; svgQueueWarmFrame(grPlaybackFrame((timelineFrame + 1) % grTimelineFrameCount())); } function svgQueueWarmFrame(frame) { if (!CACHE_FRAME_GROUPS) return; if (frameGroups[frame] || warmingFrames.has(frame)) return; warmingFrames.add(frame); const build = () => { svgBuildCachedFrame(frame); warmingFrames.delete(frame); }; if (typeof requestIdleCallback === "function") requestIdleCallback(build, { timeout: 120 }); else setTimeout(build, 1); } function svgPrebuildCachedFrames() { if (!CACHE_FRAME_GROUPS) return; svgBuildCachedFrame(0); svgQueueWarmFrame(grPlaybackFrame(1 % grTimelineFrameCount())); } function svgStart() { const fps = Math.max(1, SIGNAL_RITUAL_ENGINE.fps || 12); const frameMs = 1000 / fps; const proceduralFrameMs = 1000 / PROCEDURAL_RENDER_FPS; let lastTime = 0; let startTime = 0; function next(now) { if (document.hidden) { lastTime = now; requestAnimationFrame(next); return; } if (!lastTime) lastTime = now; if (!startTime) startTime = now; const elapsed = now - lastTime; if (grProceduralMotionEnabled() && elapsed >= proceduralFrameMs) { tick = ((now - startTime) / 1000) * PROCEDURAL_MOTION_CLOCK_FPS; svgRender(tick); lastTime += Math.max(1, Math.floor(elapsed / proceduralFrameMs)) * proceduralFrameMs; } else if (!grProceduralMotionEnabled() && elapsed >= frameMs) { const steps = Math.max(1, Math.floor(elapsed / frameMs)); tick = (tick + steps) % grTimelineFrameCount(); svgRender(tick); lastTime += steps * frameMs; } requestAnimationFrame(next); } if (typeof requestAnimationFrame === "function") requestAnimationFrame(next); else setInterval(() => { tick = grProceduralMotionEnabled() ? tick + (PROCEDURAL_MOTION_CLOCK_FPS / PROCEDURAL_RENDER_FPS) : (tick + 1) % grTimelineFrameCount(); svgRender(tick); }, Math.round(grProceduralMotionEnabled() ? proceduralFrameMs : frameMs)); } try { svgPrebuildCachedFrames(); svgRender(0); tick = 0; svgStart(); } catch (error) { const art = document.getElementById("art"); if (art) { const fallback = document.createElementNS(svgNs, "text"); fallback.setAttribute("x", "50%"); fallback.setAttribute("y", "50%"); fallback.setAttribute("fill", "#f3f0e8"); fallback.setAttribute("font-family", "monospace"); fallback.setAttribute("font-size", Math.max(18, Math.round(cell * 2))); fallback.setAttribute("text-anchor", "middle"); fallback.textContent = "SIGNAL RITUALS"; art.appendChild(fallback); } }
.max(tone, highlightFill, isLargeAnchor || isHighlightMark || isHeavyInk ? 0.72 : 0); const density = Math.max(0.28, Math.min(0.62, 0.24 + strong * 0.38)); return grSeeded(column * 1201 + row * 379 + frame * 97 + 17) < density; } function svgSetCell(node, glyph, tone, style, column, row, frame, adaptiveScale = 1, motionFrame = frame, recoveredAdaptiveDenseAnchor = false, adaptiveSpec = null) { const isLargeAnchor = style === "2"; const isHighlightMark = style === "3"; const isHeavyInk = style === "4"; const isBackgroundStyle = style === "5"; const isEdge = grIsEdgeStyle(style); const isStoredDenseStyle = grIsDenseHighlightStyle(style); const isRecoveredLargeHighlight = recoveredAdaptiveDenseAnchor; const useRecoveredDenseAnchor = isRecoveredLargeHighlight && isStoredDenseStyle; const glowStyle = isStoredDenseStyle && !useRecoveredDenseAnchor ? "0" : style; const isAdaptiveClear = style === "1"; if (isAdaptiveClear) { svgClearCell(node); return false; } const isStoredSpace = glyph === " " || isBackgroundStyle; if (isStoredSpace) { const chars = SIGNAL_RITUAL_ENGINE.glyphs; const backgroundIndex = Math.max(1, Math.min(chars.length - 1, Math.floor(grSeeded(column * 181 + row * 557) * Math.min(4, chars.length - 1)))); glyph = chars[backgroundIndex] || "."; } if (!isEdge) glyph = grMotionGlyph(glyph, column, row, frame, tone); const isDenseHighlight = !isStoredSpace && ( useRecoveredDenseAnchor || (!isStoredDenseStyle && grShouldUseDenseHighlightGlyph(tone, style)) ); if (isDenseHighlight) { glyph = grDenseHighlightGlyph(tone, style, column, row, frame); } if (glyph === " " && tone < 0.02) { svgClearCell(node); return false; } const highlightFill = Math.max(grHighlightFill(tone), isHeavyInk ? 0.35 : 0); const fill = highlightFill > 0 || isHighlightMark || isHeavyInk || isDenseHighlight ? grRgbString(grHighlightInkColor(tone, highlightFill, isHighlightMark, isHeavyInk, isDenseHighlight)) : svgToneFill(tone); const usesAdaptiveBlock = Boolean(adaptiveSpec); const largeScale = usesAdaptiveBlock ? adaptiveSpec.scale : grHighlightCellScale(tone, style, column, row, frame, isRecoveredLargeHighlight); const sizeScale = grSizeGlitchScale(column, row, frame) * largeScale; const tuning = SIGNAL_RITUAL_ENGINE.visualRenderer.rendererTuning || {}; const bgAlpha = Math.max( tuning.backgroundAlphaMin ?? 0.02, Math.min(tuning.backgroundAlphaMax ?? 0.12, (tuning.backgroundAlphaBase ?? 0.035) + tone * (tuning.backgroundAlphaTone ?? 0.18)), ); const alpha = isStoredSpace ? bgAlpha : Math.max(0.82, Math.min(1, 0.86 + tone * 0.32)); const text = isHighlightMark || grShouldHighlightBlock(tone) ? "#" : glyph; const opacity = alpha.toFixed(3); const fontWeight = String(isStoredSpace ? 700 : isEdge ? 800 : grHighlightWeight(tone, style)); const glyphScale = tuning.glyphScale ?? 1.25; const usesFixedHighlightSize = isLargeAnchor || isHighlightMark || isHeavyInk || isDenseHighlight || isRecoveredLargeHighlight || usesAdaptiveBlock; const rawFontSize = usesFixedHighlightSize ? cell * (glyphScale + highlightFill * (tuning.highlightGlyphBoost ?? 0.38)) * sizeScale : cell * glyphScale * sizeScale; const maxFontSize = usesFixedHighlightSize ? rawFontSize : cell * (adaptiveScale > 1 ? Math.min(1.35, adaptiveScale * 1.12) : 1.2); const fontSize = String(Math.round(Math.min(rawFontSize, maxFontSize))); const rowOffset = rowOffsets[row] || 0; const centeredOffset = adaptiveSpec ? [adaptiveSpec.offsetX, adaptiveSpec.offsetY] : [0, 0]; const proceduralOffset = grProceduralGlyphOffset(column, row, motionFrame, tone); const tx = rowOffset + centeredOffset[0] + proceduralOffset[0]; const ty = centeredOffset[1] + proceduralOffset[1]; const transform = tx || ty ? "translate(" + tx + " " + ty + ")" : ""; node._grColumn = column; node._grRow = row; node._grTone = tone; node._grBaseRowOffset = rowOffset; node._grCenteredOffsetX = centeredOffset[0]; node._grCenteredOffsetY = centeredOffset[1]; if (node._grText !== text) { node.textContent = text; node._grText = text; } if (node._grFill !== fill) { node.setAttribute("fill", fill); node._grFill = fill; } if (node._grOpacity !== opacity) { node.setAttribute("opacity", opacity); node._grOpacity = opacity; } if (node._grFontSize !== fontSize) { node.setAttribute("font-size", fontSize); node._grFontSize = fontSize; } if (node._grFontWeight !== fontWeight) { node.setAttribute("font-weight", fontWeight); node._grFontWeight = fontWeight; } if (node._grStroke) { node.removeAttribute("stroke"); node._grStroke = ""; } if (node._grStrokeWidth) { node.removeAttribute("stroke-width"); node._grStrokeWidth = ""; } if (node._grTransform !== transform) { if (transform) node.setAttribute("transform", transform); else node.removeAttribute("transform"); node._grTransform = transform; } return !isStoredSpace && grShouldGlowCell(tone, glowStyle, highlightFill, column, row, motionFrame); } function svgSetProceduralTransform(node, frame) { if (!node || node._grText === "") return; const column = node._grColumn || 0; const row = node._grRow || 0; const tone = node._grTone || 0; const proceduralOffset = grProceduralGlyphOffset(column, row, frame, tone); const tx = (node._grBaseRowOffset || 0) + (node._grCenteredOffsetX || 0) + proceduralOffset[0]; const ty = (node._grCenteredOffsetY || 0) + proceduralOffset[1]; const transform = tx || ty ? "translate(" + tx + " " + ty + ")" : ""; if (node._grTransform !== transform) { if (transform) node.setAttribute("transform", transform); else node.removeAttribute("transform"); node._grTransform = transform; } } function svgMoveProceduralCells(targetCells, frame, targetGlowCells = null) { for (let index = 0; index < targetCells.length; index += 1) { svgSetProceduralTransform(targetCells[index], frame); if (targetGlowCells?.[index]) svgSetProceduralTransform(targetGlowCells[index], frame); } } function svgToneFill(tone) { const toneKey = Math.max(0, Math.min(15, Math.round(tone * 15))); const effects = SIGNAL_RITUAL_ENGINE.visualRenderer.effects || {}; const key = String(toneKey) + ":" + (effects.asciiBrightness || 0) + ":" + (effects.asciiMidtones || 0); if (!toneFillCache[key]) toneFillCache[key] = grRgbString(grInkColor(toneKey / 15)); return toneFillCache[key]; } function svgPooledRect(layer, pool, index, x, y, width, height, fill, opacity) { let rect = pool[index]; if (!rect) { rect = document.createElementNS(svgNs, "rect"); pool[index] = rect; layer.appendChild(rect); } const next = [x, y, width, height, fill, opacity.toFixed(3)]; const prev = rect._grRect || []; if (prev[0] !== next[0]) rect.setAttribute("x", next[0]); if (prev[1] !== next[1]) rect.setAttribute("y", next[1]); if (prev[2] !== next[2]) rect.setAttribute("width", next[2]); if (prev[3] !== next[3]) rect.setAttribute("height", next[3]); if (prev[4] !== next[4]) rect.setAttribute("fill", next[4]); if (prev[5] !== next[5]) rect.setAttribute("opacity", next[5]); rect._grRect = next; } function svgHideUnusedRects(pool, used) { for (let i = used; i < pool.length; i += 1) { if (pool[i]._grRect?.[5] === "0") continue; pool[i].setAttribute("opacity", "0"); pool[i]._grRect = [...(pool[i]._grRect || [0, 0, 0, 0, "#000", "0"])]; pool[i]._grRect[5] = "0"; } } function svgRenderEffects(frame) { const effects = grEffectSettings(); const fullWidth = columns * cell; const fullHeight = rows * cell; let scanRect = 0; let staticRect = 0; const scan = (effects.badScanlines || 0) / 100; if (scan > 0) { const spacing = Math.max(2, Math.round(9 - scan * 6)) * (SMOOTH_MARKETPLACE_MODE ? 2 : 1); for (let y = 0; y < fullHeight; y += spacing) { svgPooledRect(scanlinesLayer, scanlineRects, scanRect, 0, y, fullWidth, 1, "#000", Math.min(0.32, scan * 0.7)); scanRect += 1; } for (let y = Math.floor(frame % spacing); y < fullHeight; y += spacing * 7) { svgPooledRect(scanlinesLayer, scanlineRects, scanRect, 0, y, fullWidth, 1, "#fff", Math.min(0.18, scan * 0.42)); scanRect += 1; } } svgHideUnusedRects(scanlineRects, scanRect); const staticAmount = effects.asciiStatic ? (effects.asciiStaticAmount || 0) / 100 : 0; if (staticAmount > 0) { const opacity = Math.min(0.5, staticAmount * 0.72); const fleckCap = SMOOTH_MARKETPLACE_MODE ? 160 : 520; const flecks = Math.min(fleckCap, Math.round((fullWidth * fullHeight * staticAmount) / (SMOOTH_MARKETPLACE_MODE ? 2600 : 1100))); for (let i = 0; i < flecks; i += 1) { const x = Math.floor(grSmoothRandom(i * 977 + 83, frame * 0.18) * fullWidth); const y = Math.floor(grSmoothRandom(i * 977 + 84, frame * 0.16) * fullHeight); const sizeBoost = SMOOTH_MARKETPLACE_MODE ? 2.2 : 1; const size = Math.max(1, Math.floor(sizeBoost + grSmoothRandom(i * 977 + 85, frame * 0.08) * (staticAmount * 6 * sizeBoost))); svgPooledRect(staticLayer, staticRects, staticRect, x, y, size, size, grSeeded(i * 463 + frame * 79) > 0.5 ? "#ffffff" : "#000000", opacity); staticRect += 1; } } const compression = (effects.compressionScars || 0) / 100; if (compression > 0) { const block = Math.max(8, Math.round(28 - compression * 18)); const opacity = Math.min(0.22, compression * 0.55); for (let y = 0; y < fullHeight; y += block) { for (let x = 0; x < fullWidth; x += block) { if (grSeeded(x * 17 + y * 53 + frame * 101) > compression * 0.55) continue; svgPooledRect(staticLayer, staticRects, staticRect, x, y, Math.min(block, fullWidth - x), Math.min(block, fullHeight - y), grSeeded(x * 83 + y * 29 + frame * 43) > 0.5 ? "#ffffff" : "#000000", opacity); staticRect += 1; } } } const symbolDropout = (effects.symbolDropout || 0) / 100; if (symbolDropout > 0) { const block = Math.max(2, Math.round(cell * (1 + symbolDropout * (SMOOTH_MARKETPLACE_MODE ? 2.2 : 1.6)))); const opacity = Math.min(0.65, symbolDropout * 1.25); const bg = SIGNAL_RITUAL_ENGINE.visualRenderer.background || "#08090b"; for (let y = 0; y < fullHeight; y += block) { for (let x = 0; x < fullWidth; x += block) { if (grSeeded(x * 101 + y * 307 + frame * 131) < symbolDropout * 0.16) { svgPooledRect(staticLayer, staticRects, staticRect, x, y, block, block, bg, opacity); staticRect += 1; } } } } svgHideUnusedRects(staticRects, staticRect); const vignette = (effects.vignette || 0) / 100; vignetteLayer.setAttribute("opacity", Math.min(0.55, vignette * 0.9).toFixed(3)); } function svgRender(timelineFrame) { const procedural = grProceduralMotionEnabled(); const pureProcedural = grPureProceduralEnabled(); const motionFrame = procedural ? Math.max(0, Number(timelineFrame) || 0) : grPlaybackFrame(timelineFrame); const baseTimelineFrame = pureProcedural ? motionFrame : procedural ? grBaseTimelineFrameFromMotionClock(motionFrame) : timelineFrame; const frame = pureProcedural ? motionFrame : grPlaybackFrame(baseTimelineFrame); if (CACHE_FRAME_GROUPS) { svgShowCachedFrame(frame, timelineFrame); svgRenderEffects(frame); return; } if (procedural) { const repaintEvery = Math.max(1, PROCEDURAL_MOTION_CLOCK_FPS / PROCEDURAL_REPAINT_FPS); if (motionFrame < lastProceduralPaintFrame || motionFrame - lastProceduralPaintFrame >= repaintEvery) { svgPaintCells(cells, frame, null, motionFrame); svgRenderEffects(frame); lastProceduralPaintFrame = motionFrame; } else { svgMoveProceduralCells(cells, motionFrame); } return; } svgPaintCells(cells, frame); svgRenderEffects(frame); } function svgPaintCells(targetCells, frame, targetGlowCells = null, mot
form); } svgDrawArtifactFrame(); } function svgDrawArtifactFrame() { if (!artifactFrame || !artifactFrameLayer) return; artifactFrameLayer.textContent = ""; const color = SIGNAL_RITUAL_ENGINE.visualRenderer.background === "#f7f7f2" ? "#08090b" : "#f3f0e8"; const corner = artifactFrame.borderGlyphs?.corner || "+"; const horizontal = artifactFrame.borderGlyphs?.horizontal || "-"; const vertical = artifactFrame.borderGlyphs?.vertical || "|"; function addText(text, column, row) { const node = document.createElementNS(svgNs, "text"); node.setAttribute("class", "cell"); node.setAttribute("x", column * cell + cell / 2); node.setAttribute("y", row * cell + cell / 2); node.setAttribute("font-size", Math.round(cell * 1.18)); node.setAttribute("font-weight", "700"); node.setAttribute("fill", color); node.setAttribute("opacity", "0.92"); node.textContent = text; artifactFrameLayer.appendChild(node); } svgDrawBorderLine(0, color, corner, horizontal, [ { text: artifactFrame.collectionName || "Signal Rituals", align: "left", max: Math.floor(artifactFrameColumns * 0.38) }, { text: artifactFrame.artworkName || "Untitled", align: "right", max: Math.floor(artifactFrameColumns * 0.48) }, ]); svgDrawBorderLine(artifactFrameRows - 1, color, corner, horizontal, [ { text: "Seed: " + (artifactFrame.seed || "-"), align: "right", max: Math.floor(artifactFrameColumns * 0.44) }, ]); for (let row = 1; row < artifactFrameRows - 1; row += 1) { addText(vertical, 0, row); addText(vertical, artifactFrameColumns - 1, row); } } function svgFrameText(text, maxLength) { text = String(text || "").replace(/[^\x20-\x7E]/g, "").replace(/\s+/g, " ").trim(); if (text.length <= maxLength) return text; return maxLength <= 3 ? text.slice(0, maxLength) : text.slice(0, maxLength - 3) + "..."; } function svgDrawBorderLine(row, color, corner, horizontal, segments = []) { const line = new Array(artifactFrameColumns).fill(horizontal); for (let column = 0; column < artifactFrameColumns; column += 1) { if (column === 0 || column === artifactFrameColumns - 1) line[column] = corner; } const occupied = new Array(artifactFrameColumns).fill(false); occupied[0] = true; occupied[artifactFrameColumns - 1] = true; for (const segment of segments) { const text = " " + svgFrameText(segment.text, Math.max(0, segment.max || artifactFrameColumns - 4)) + " "; let start = 2; if (segment.align === "center") start = Math.floor((artifactFrameColumns - text.length) / 2); if (segment.align === "right") start = artifactFrameColumns - text.length - 2; start = Math.max(1, Math.min(artifactFrameColumns - text.length - 1, start)); for (let index = 0; index < text.length; index += 1) { const column = start + index; if (column <= 0 || column >= artifactFrameColumns - 1 || occupied[column]) continue; line[column] = text[index]; occupied[column] = true; } } for (let column = 0; column < artifactFrameColumns; column += 1) { const node = document.createElementNS(svgNs, "text"); node.setAttribute("class", "cell"); node.setAttribute("x", column * cell + cell / 2); node.setAttribute("y", row * cell + cell / 2); node.setAttribute("font-size", Math.round(cell * 1.18)); node.setAttribute("font-weight", "700"); node.setAttribute("fill", color); node.setAttribute("opacity", "0.92"); node.textContent = line[column]; artifactFrameLayer.appendChild(node); } } function createCellNodes(parent, output) { for (let row = 0; row < rows; row += 1) { for (let column = 0; column < columns; column += 1) { output.push(svgCreateCellNode(parent, column, row)); } } } function svgCreateCellNode(parent, column, row) { const tuning = SIGNAL_RITUAL_ENGINE.visualRenderer.rendererTuning || {}; const glyphScale = tuning.glyphScale ?? 1.25; const text = document.createElementNS(svgNs, "text"); text.setAttribute("class", "cell"); text.setAttribute("x", column * cell + cell / 2); text.setAttribute("y", row * cell + cell / 2); text.setAttribute("font-size", Math.round(cell * glyphScale)); text.textContent = " "; parent.appendChild(text); return text; } function svgRowGlitchOffset(row, frame) { const effects = grEffectSettings(); const passes = grActiveGlitchPasses(frame); const fullWidth = columns * cell; const rowY = row * cell; let offset = 0; for (const pass of passes) { const seed = frame * 4099 + pass.index * 10007 + 101; const time = frame * (0.016 + pass.speed * 0.3); if (pass.index === 0) { const bandCount = Math.max(1, Math.round(3 + pass.strength * 14)); for (let band = 0; band < bandCount; band += 1) { const bandSeed = seed + band * 977; const y = Math.floor(grSmoothRandom(bandSeed, time * 0.82) * rows * cell); const bandHeight = Math.max(1, Math.floor((grSmoothRandom(bandSeed + 37, time * 0.45) * 10 + 2) * pass.strength)); if (rowY < y || rowY > y + bandHeight) continue; offset += Math.round((grSmoothRandom(bandSeed + 73, time) - 0.5) * fullWidth * 0.16 * pass.strength); } } else { const slices = pass.index === 1 ? 5 : 10; const sliceHeight = Math.max(1, Math.ceil(rows / slices)); const slice = Math.floor(row / sliceHeight); const sliceSeed = seed + slice * 557; const direction = grSmoothRandom(sliceSeed, time * 0.5) * 2 - 1; const travel = 0.025 + grSmoothRandom(sliceSeed + 89, time * 0.42) * (slices === 5 ? 0.18 : 0.26); offset += Math.round(direction * travel * fullWidth * pass.strength); } } const brokenRows = (effects.brokenRows || 0) / 100; const misregistration = (effects.misregistration || 0) / 100; if (brokenRows > 0 || misregistration > 0) { const tears = Math.round(1 + brokenRows * 10 + misregistration * 5); for (let i = 0; i < tears; i += 1) { const active = grSmoothRandom(i * 379 + 73, frame * 0.12) < brokenRows * 0.85 + misregistration * 0.35; if (!active) continue; const y = Math.floor(grSmoothRandom(i * 701 + 17, frame * 0.1) * rows); const bandHeight = Math.max(1, Math.round(1 + grSmoothRandom(i * 313 + 29, frame * 0.07) * (2 + brokenRows * 18))); if (row < y || row > y + bandHeight) continue; offset += Math.round((grSmoothRandom(i * 997 + 41, frame * 0.16) - 0.5) * fullWidth * (brokenRows * 0.14 + misregistration * 0.08)); } } return offset; } function svgComputeRowOffsets(frame) { for (let row = 0; row < rows; row += 1) rowOffsets[row] = svgRowGlitchOffset(row, frame); } function svgClearCell(node) { if (node._grText !== "") { node.textContent = ""; node._grText = ""; } node._grTone = 0; } function grToneAt(toneLines, column, row) { const line = toneLines[Math.max(0, Math.min(rows - 1, row))] || ""; return toneValueMap[line[Math.max(0, Math.min(columns - 1, column))] || "0"] ?? 0; } function grAdaptiveCellScale(toneLines, column, row) { const effects = grEffectSettings(); if (!effects.asciiAdaptiveSize) return 1; const blockColumn = column - (column % 2); const blockRow = row - (row % 2); const a = grToneAt(toneLines, blockColumn, blockRow); const b = grToneAt(toneLines, blockColumn + 1, blockRow); const c = grToneAt(toneLines, blockColumn, blockRow + 1); const d = grToneAt(toneLines, blockColumn + 1, blockRow + 1); const maxTone = Math.max(a, b, c, d); const minTone = Math.min(a, b, c, d); if (maxTone > 0.68) return 1; if (maxTone - minTone > 0.24) return 1; return Math.max(1, Math.min(1.18, 1 + ((effects.asciiLargeScale || 2) - 1) * 0.12)); } function grAdaptiveClearedNeighborCount(styleLines, column, row) { let clearedNeighbors = 0; for (let y = row - 1; y <= row + 1; y += 1) { const line = styleLines[Math.max(0, Math.min(rows - 1, y))] || ""; for (let x = column - 1; x <= column + 1; x += 1) { if (x === column && y === row) continue; if ((line[Math.max(0, Math.min(columns - 1, x))] || "0") === "1") clearedNeighbors += 1; } } return clearedNeighbors; } function grRecoveredAdaptiveDenseAnchor(styleLines, column, row, style) { return grIsDenseHighlightStyle(style) && grAdaptiveClearedNeighborCount(styleLines, column, row) >= 2; } function grStoredAnchorScale(styleLines, column, row, style) { const canBeAdaptiveAnchor = style === "2" || style === "3" || grIsDenseHighlightStyle(style); if (!canBeAdaptiveAnchor) return 1; const clearedNeighbors = grAdaptiveClearedNeighborCount(styleLines, column, row); if (style !== "2" && clearedNeighbors < 2) return 1; const tuning = SIGNAL_RITUAL_ENGINE.visualRenderer.rendererTuning || {}; return Math.min(3, Math.max(1.35, (grEffectSettings().asciiLargeScale || 2) * (tuning.largeAnchorScaleMultiplier ?? 0.95))); } function grIsAdaptiveAnchorStyle(style) { return style === "2" || style === "3" || style === "4" || grIsDenseHighlightStyle(style) || grIsEdgeStyle(style); } function grAdaptiveBlockSpec(styleLines, column, row, style) { const effects = grEffectSettings(); if (!effects.asciiAdaptiveSize || !grIsAdaptiveAnchorStyle(style)) return null; const maxBlockSize = Math.max(2, Math.min(4, Math.round(effects.asciiLargeScale || 2))); for (let blockSize = maxBlockSize; blockSize >= 2; blockSize -= 1) { const startColumn = column - Math.floor(blockSize / 2); const startRow = row - Math.floor(blockSize / 2); const endColumn = startColumn + blockSize; const endRow = startRow + blockSize; if (startColumn < 0 || startRow < 0 || endColumn > columns || endRow > rows) continue; let helperCells = 0; let valid = true; for (let y = startRow; y < endRow && valid; y += 1) { const line = styleLines[y] || ""; for (let x = startColumn; x < endColumn; x += 1) { if (x === column && y === row) continue; if ((line[x] || "0") !== "1") { valid = false; break; } helperCells += 1; } } if (!valid || helperCells === 0) continue; const blockCenterX = (startColumn + blockSize / 2) * cell; const blockCenterY = (startRow + blockSize / 2) * cell; const anchorCenterX = (column + 0.5) * cell; const anchorCenterY = (row + 0.5) * cell; return { scale: blockSize, offsetX: blockCenterX - anchorCenterX, offsetY: blockCenterY - anchorCenterY, recoveredDenseAnchor: grIsDenseHighlightStyle(style), }; } return null; } function grAdaptiveAnchorOffset(styleLines, column, row, style) { const canBeAdaptiveAnchor = style === "2" || style === "3" || grIsDenseHighlightStyle(style); if (!canBeAdaptiveAnchor) return [0, 0]; let minX = 0; let maxX = 0; let minY = 0; let maxY = 0; let hasClear = false; for (let y = row - 1; y <= row + 1; y += 1) { const line = styleLines[Math.max(0, Math.min(rows - 1, y))] || ""; for (let x = column - 1; x <= column + 1; x += 1) { if ((line[Math.max(0, Math.min(columns - 1, x))] || "0") !== "1") continue; const dx = x - column; const dy = y - row; minX = Math.min(minX, dx); maxX = Math.max(maxX, dx); minY = Math.min(minY, dy); maxY = Math.max(maxY, dy); hasClear = true; } } if (!hasClear) return [0, 0]; return [((minX + maxX) / 2) * cell, ((minY + maxY) / 2) * cell]; } function grShouldGlowCell(tone, style, highlightFill, column, row, frame) { if (!RENDER_GLOW_ENABLED) return false; const isLargeAnchor = style === "2"; const isHighlightMark = style === "3"; const isHeavyInk = style === "4" || grIsDenseHighlightStyle(style); const highlightThreshold = (grEffectSettings().asciiHighlightThreshold || 65) / 100; const glowToneFloor = Math.max(0.42, highlightThreshold - 0.24); const eligible = isLargeAnchor || isHighlightMark || isHeavyInk || highlightFill > 0.08 || tone >= glowToneFloor; if (!eligible) return false; const strong = Math
let value = 0; let shift = 0; let remaining = bits; while (remaining > 0) { const current = this.bytes[this.byteIndex] || 0; const available = 8 - this.bitIndex; const take = Math.min(available, remaining); const mask = (1 << take) - 1; value |= ((current >> this.bitIndex) & mask) << shift; this.bitIndex += take; if (this.bitIndex === 8) { this.bitIndex = 0; this.byteIndex += 1; } shift += take; remaining -= take; } return value; } } function grFrameLines(values, columns, rows) { const lines = []; for (let row = 0; row < rows; row += 1) { lines.push(values.slice(row * columns, row * columns + columns).join("")); } return lines.join("\n"); } function grDecodeToneFrames(encoded, columns, rows, frameCount) { const reader = new GrBitReader(grBase64Bytes(encoded)); const tones = ["0", "2", "4", "6", "9", "B", "D", "F"]; const frames = []; const cells = columns * rows; for (let frame = 0; frame < frameCount; frame += 1) { const values = new Array(cells); for (let cell = 0; cell < cells; cell += 1) values[cell] = tones[reader.read(3)] || "0"; frames.push(grFrameLines(values, columns, rows)); } return frames; } function grDecodeStyleFrames(encoded, columns, rows, frameCount, indexBits, valueBits, storageMode) { if (storageMode === "dense4bit") return grDecodeDense4BitStyleFrames(encoded, columns, rows, frameCount); return grDecodeSparseStyleFrames(encoded, columns, rows, frameCount, indexBits, valueBits); } function grDecodeDense4BitStyleFrames(encoded, columns, rows, frameCount) { const reader = new GrBitReader(grBase64Bytes(encoded)); const frames = []; const cells = columns * rows; for (let frame = 0; frame < frameCount; frame += 1) { const values = new Array(cells); for (let cell = 0; cell < cells; cell += 1) values[cell] = reader.read(4).toString(16).toUpperCase(); frames.push(grFrameLines(values, columns, rows)); } return frames; } function grDecodeSparseStyleFrames(encoded, columns, rows, frameCount, indexBits, valueBits) { const reader = new GrBitReader(grBase64Bytes(encoded)); const frames = []; const cells = columns * rows; for (let frame = 0; frame < frameCount; frame += 1) { const values = new Array(cells).fill("0"); const count = reader.read(16); for (let item = 0; item < count; item += 1) { const index = reader.read(indexBits); const style = reader.read(valueBits); if (index < cells) values[index] = String(style); } frames.push(grFrameLines(values, columns, rows)); } return frames; } const grConfig = grDecodeJson(GR_CONFIG_B64); const grRuntimeSeed = String(grConfig?.ritualEngineCompatibility?.seedField?.value || grConfig?.seed || ""); const grRuntime = GENESIS_RUNTIME_BY_SEED[grRuntimeSeed] || GENESIS_RUNTIME_BY_SEED[Object.keys(GENESIS_RUNTIME_BY_SEED)[0]]; Object.assign(SIGNAL_RITUAL_ENGINE, { glyphs: grRuntime.glyphs || grConfig.configuredGlyphs || "", ritualGlyphs: grRuntime.ritualGlyphs || (grConfig.configuredGlyphs || "").replace(/\s/g, ""), displayedFrames: grConfig.displayedFrames || grRuntime.displayedFrames, playbackMode: grConfig.playbackMode || grRuntime.playbackMode || "normal", timelineFrames: grConfig.timelineFrames || grRuntime.timelineFrames || grRuntime.displayedFrames, fps: grRuntime.fps || 12, keyframeSourceFrames: grRuntime.keyframeSourceFrames, storageSourceFrames: grRuntime.storageSourceFrames, interpolation: grRuntime.interpolation || "none", seed: grRuntime.seed, procedural: Boolean(grConfig.procedural ?? grRuntime.procedural), proceduralOverlay: Boolean(grConfig.proceduralOverlay ?? grRuntime.proceduralOverlay), proceduralMotion: grConfig.proceduralMotion || grRuntime.proceduralMotion || { enabled: false }, visualRenderer: grRuntime.visualRenderer, }); const keyframeSourceFrames = SIGNAL_RITUAL_ENGINE.storageSourceFrames || SIGNAL_RITUAL_ENGINE.keyframeSourceFrames; const columns = Math.max(1, Number(grConfig.grid?.columns) || grRuntime.columns || 1); const rows = Math.max(1, Number(grConfig.grid?.rows) || grRuntime.rows || 1); const cell = Math.max(1, Number(grRuntime.cell) || 16); const svgNs = "http://www.w3.org/2000/svg"; function grEnsureRuntimeSvgScaffold() { const art = document.getElementById("art"); if (!art) { return { art: null, artifactFrameLayer: null, glowCellsLayer: null, cellsLayer: null, scanlinesLayer: null, staticLayer: null, vignetteLayer: null, }; } const ensureLayer = (id, tagName = "g", beforeId = null) => { let node = document.getElementById(id); if (node) return node; node = document.createElementNS(svgNs, tagName); node.setAttribute("id", id); if (id === "scanlines" || id === "static" || id === "vignette") node.setAttribute("class", "fx"); if (beforeId) { const before = document.getElementById(beforeId); if (before && before.parentNode === art) art.insertBefore(node, before); else art.appendChild(node); } else { art.appendChild(node); } return node; }; const glowAmount = Math.max(0, Math.min(100, Number(SIGNAL_RITUAL_ENGINE.visualRenderer?.effects?.asciiGlow || 0))); if (glowAmount > 0 && !document.getElementById("glyphGlow")) { const glowStrength = glowAmount / 100; const wideRadius = Math.max(3, Math.min(22, cell * (0.38 + glowStrength * 0.72))).toFixed(2); const hotRadius = Math.max(1.5, Math.min(9, cell * (0.16 + glowStrength * 0.32))).toFixed(2); const wideAlpha = Math.max(0.12, Math.min(0.72, glowStrength * 0.62)).toFixed(3); const hotAlpha = Math.max(0.18, Math.min(0.9, glowStrength * 0.72)).toFixed(3); let defs = art.querySelector("defs"); if (!defs) { defs = document.createElementNS(svgNs, "defs"); art.insertBefore(defs, art.firstChild); } const filter = document.createElementNS(svgNs, "filter"); filter.setAttribute("id", "glyphGlow"); filter.setAttribute("x", "-30%"); filter.setAttribute("y", "-30%"); filter.setAttribute("width", "160%"); filter.setAttribute("height", "160%"); filter.setAttribute("color-interpolation-filters", "sRGB"); const wideBlur = document.createElementNS(svgNs, "feGaussianBlur"); wideBlur.setAttribute("in", "SourceGraphic"); wideBlur.setAttribute("stdDeviation", wideRadius); wideBlur.setAttribute("result", "wideBlur"); filter.appendChild(wideBlur); const wideTransfer = document.createElementNS(svgNs, "feComponentTransfer"); wideTransfer.setAttribute("in", "wideBlur"); wideTransfer.setAttribute("result", "wideGlow"); const wideFunc = document.createElementNS(svgNs, "feFuncA"); wideFunc.setAttribute("type", "linear"); wideFunc.setAttribute("slope", wideAlpha); wideTransfer.appendChild(wideFunc); filter.appendChild(wideTransfer); const hotBlur = document.createElementNS(svgNs, "feGaussianBlur"); hotBlur.setAttribute("in", "SourceGraphic"); hotBlur.setAttribute("stdDeviation", hotRadius); hotBlur.setAttribute("result", "hotBlur"); filter.appendChild(hotBlur); const hotTransfer = document.createElementNS(svgNs, "feComponentTransfer"); hotTransfer.setAttribute("in", "hotBlur"); hotTransfer.setAttribute("result", "hotGlow"); const hotFunc = document.createElementNS(svgNs, "feFuncA"); hotFunc.setAttribute("type", "linear"); hotFunc.setAttribute("slope", hotAlpha); hotTransfer.appendChild(hotFunc); filter.appendChild(hotTransfer); const merge = document.createElementNS(svgNs, "feMerge"); for (const input of ["wideGlow", "hotGlow", "SourceGraphic"]) { const node = document.createElementNS(svgNs, "feMergeNode"); node.setAttribute("in", input); merge.appendChild(node); } filter.appendChild(merge); defs.appendChild(filter); } const scanlinesLayer = ensureLayer("scanlines", "g", "static"); const staticLayer = ensureLayer("static", "g", "glowCells"); const glowCellsLayer = ensureLayer("glowCells", "g", "cells"); if (glowAmount > 0) glowCellsLayer.setAttribute("filter", "url(#glyphGlow)"); const cellsLayer = ensureLayer("cells", "g", "artifactFrame"); const artifactFrameLayer = ensureLayer("artifactFrame", "g", "vignette"); const vignetteLayer = ensureLayer("vignette", "rect"); if (!vignetteLayer.getAttribute("width")) vignetteLayer.setAttribute("width", "100%"); if (!vignetteLayer.getAttribute("height")) vignetteLayer.setAttribute("height", "100%"); if (!vignetteLayer.getAttribute("fill")) vignetteLayer.setAttribute("fill", "#000"); if (!vignetteLayer.getAttribute("opacity")) vignetteLayer.setAttribute("opacity", "0"); return { art, artifactFrameLayer, glowCellsLayer, cellsLayer, scanlinesLayer, staticLayer, vignetteLayer, }; } const grRuntimeSvg = grEnsureRuntimeSvgScaffold(); const art = grRuntimeSvg.art; const artifactFrameLayer = grRuntimeSvg.artifactFrameLayer; const glowCellsLayer = grRuntimeSvg.glowCellsLayer; const cellsLayer = grRuntimeSvg.cellsLayer; const scanlinesLayer = grRuntimeSvg.scanlinesLayer; const staticLayer = grRuntimeSvg.staticLayer; const vignetteLayer = grRuntimeSvg.vignetteLayer; const artifactFrame = grRuntime.artifactFrame || null; const artifactFramePad = artifactFrame?.padding || { left: 0, right: 0, top: 0, bottom: 0 }; const artifactFrameColumns = artifactFrame ? columns + (artifactFramePad.left || 0) + (artifactFramePad.right || 0) : columns; const artifactFrameRows = artifactFrame ? rows + (artifactFramePad.top || 0) + (artifactFramePad.bottom || 0) : rows; const artworkOffsetX = (artifactFramePad.left || 0) * cell; const artworkOffsetY = (artifactFramePad.top || 0) * cell; const outerMargin = 3; const cells = []; const rowOffsets = new Array(rows).fill(0); const scanlineRects = []; const staticRects = []; const toneLineCache = []; const styleLineCache = []; const toneFillCache = Object.create(null); const toneValueMap = { "0": 0, "2": 2 / 15, "4": 4 / 15, "6": 6 / 15, "9": 9 / 15, "B": 11 / 15, "D": 13 / 15, "F": 1 }; const SMOOTH_MARKETPLACE_MODE = true; const storedToneFrames = grDecodeToneFrames(GR_TONE_B64, columns, rows, keyframeSourceFrames.length); const storedStyleFrames = grDecodeStyleFrames(GR_STYLE_B64, columns, rows, keyframeSourceFrames.length, grConfig.styleIndexBits || 13, grConfig.styleValueBits || 3, grConfig.styleStorageMode || "sparseAnchors"); const RENDER_GLOW_ENABLED = Number(SIGNAL_RITUAL_ENGINE.visualRenderer?.effects?.asciiGlow || 0) > 0; const CACHE_FRAME_GROUPS = !(SIGNAL_RITUAL_ENGINE.proceduralMotion && SIGNAL_RITUAL_ENGINE.proceduralMotion.enabled); const PROCEDURAL_MOTION_CLOCK_FPS = 60; const PROCEDURAL_RENDER_FPS = 60; const PROCEDURAL_REPAINT_FPS = 60; const frameGroups = []; const warmingFrames = new Set(); let activeFrameGroup = null; let lastProceduralPaintFrame = -Infinity; setupSvgViewport(); let tick = -1; if (!CACHE_FRAME_GROUPS) { createCellNodes(cellsLayer, cells); } function setupSvgViewport() { if (!art) return; const width = artifactFrameColumns * cell; const height = artifactFrameRows * cell; const aspect = artifactFrameColumns / Math.max(1, artifactFrameRows); art.setAttribute("viewBox", (-outerMargin) + " " + (-outerMargin) + " " + (width + outerMargin * 2) + " " + (height + outerMargin * 2)); art.setAttribute("preserveAspectRatio", "xMidYMid meet"); art.style.width = "auto"; art.style.height = "min(100vh, calc(100vw / " + aspect + "), " + height + "px)"; const transform = artworkOffsetX || artworkOffsetY ? "translate(" + artworkOffsetX + " " + artworkOffsetY + ")" : ""; if (transform) { glowCellsLayer.setAttribute("transform", transform); cellsLayer.setAttribute("transform", transform); scanlinesLayer.setAttribute("transform", transform); staticLayer.setAttribute("transform", transform); vignetteLayer.setAttribute("transform", trans
cluster * 211, time * 0.32) * 0.9); if (grSmoothRandom(column * 1201 + cluster * 379 + 97, time) > chance) return 1; const seed = column * 733 + cluster * 997 + Math.floor(time) * 433; if (grSeeded(seed + 19) < 0.34) return Math.max(0.28, 1 - range * (0.22 + grSeeded(seed + 23) * 0.62)); return Math.min(3.25, 1 + range * (0.35 + grSeeded(seed + 29) * 1.65)); } function grHighlightFill(tone) { const effects = grEffectSettings(); const fill = (effects.asciiHighlightFill || 0) / 100; if (fill <= 0) return 0; const threshold = (effects.asciiHighlightThreshold || 100) / 100; return grSmoothstep(threshold, 1, tone) * fill; } function grHighlightWeight(tone, style) { if (style === "2" || style === "3") return 900; if (style === "5") return 700; const effects = grEffectSettings(); const tuning = SIGNAL_RITUAL_ENGINE.visualRenderer.rendererTuning || {}; const threshold = (effects.asciiHighlightThreshold || 100) / 100; const fill = grHighlightFill(tone); const strength = Math.max(fill, grSmoothstep(Math.max(0.48, threshold - 0.2), 1, tone) * (tuning.highlightWeightBoost ?? 0.9)); if (strength >= 0.48 || tone >= 0.78) return 900; if (strength >= 0.18 || tone >= 0.58) return 800; return 700; } function grShouldHighlightBlock(tone) { const effects = grEffectSettings(); if (!effects.asciiHighlightBlocks) return false; return tone >= (effects.asciiHighlightBlockThreshold || 100) / 100; } function grHighlightCellScale(tone, style, column, row, frame, recoveredAdaptiveDenseAnchor = false) { const tuning = SIGNAL_RITUAL_ENGINE.visualRenderer.rendererTuning || {}; if (style === "2") return Math.min(3, Math.max(1.35, (grEffectSettings().asciiLargeScale || 2) * (tuning.largeAnchorScaleMultiplier ?? 0.95))); if (recoveredAdaptiveDenseAnchor) return 1; const fill = grHighlightFill(tone); const threshold = (grEffectSettings().asciiHighlightThreshold || 100) / 100; if (tone < Math.max(tuning.brightOpenToneFloor ?? 0.58, threshold - 0.16) && fill <= 0.02) return 1; const base = 1 + Math.max(fill, grSmoothstep(Math.max(0.48, threshold - 0.18), 1, tone) * (tuning.brightScaleBoost ?? 0.72)); return Math.min(1.55, tuning.brightScaleMax ?? 2.45, base); } function grSkipBrightCrowding(tone, style, column, row, frame) { if (style === "2" || style === "3") return false; const tuning = SIGNAL_RITUAL_ENGINE.visualRenderer.rendererTuning || {}; const threshold = (grEffectSettings().asciiHighlightThreshold || 100) / 100; const fill = grHighlightFill(tone); if (tone < Math.max(tuning.brightCrowdToneFloor ?? 0.62, threshold - 0.12) && fill <= 0.06) return false; const checker = (column + row + Math.floor(frame / 2)) % 2; if (tone > 0.86) return column % 2 !== 0 || row % 2 !== 0; return checker !== 0 && grSeeded(column * 997 + row * 449 + frame * 17) < (tuning.brightCrowdSkip ?? 0.7); } function grShouldUseDenseHighlightGlyph(tone, style) { if (style === "1" || style === "2" || style === "3" || grIsEdgeStyle(style)) return false; if (grIsDenseHighlightStyle(style)) return true; const threshold = (grEffectSettings().asciiHighlightThreshold || 100) / 100; return style === "4" || grHighlightFill(tone) > 0.02 || tone >= Math.max(0.66, threshold - 0.08); } const DENSE_HIGHLIGHT_GLYPHS = "$@&#"; function denseHighlightGlyphFromStyle(style) { if (!style) return null; const index = parseInt(style, 16) - 10; return index >= 0 && index < DENSE_HIGHLIGHT_GLYPHS.length ? DENSE_HIGHLIGHT_GLYPHS[index] : null; } function grDenseHighlightGlyph(tone, style, column, row, frame) { const storedGlyph = denseHighlightGlyphFromStyle(style); if (storedGlyph) return storedGlyph; const glyphs = "$@&#"; const shaped = Math.max(0, Math.min(1, tone)); const base = Math.floor(shaped * glyphs.length); const jitter = grSeeded(column * 811 + row * 353 + frame * 41); const offset = jitter < 0.2 ? -1 : jitter > 0.82 ? 1 : 0; const index = Math.max(0, Math.min(glyphs.length - 1, base + offset)); return glyphs[index] || "#"; } function grGlyphFromTone(tone, column, row, frame) { const chars = SIGNAL_RITUAL_ENGINE.glyphs; if (!chars || !chars.length) return " "; const shaped = Math.max(0, Math.min(1, tone)); let index = Math.round((1 - shaped) * (chars.length - 1)); const jitter = grSeeded(column * 911 + row * 353 + frame * 17); if (jitter < 0.18) index += grSeeded(column * 1193 + row * 281) < 0.5 ? -1 : 1; index = Math.max(0, Math.min(chars.length - 1, index)); const effects = grEffectSettings(); const threshold = (effects.asciiHighlightThreshold || 100) / 100; if (chars[index] === " " && tone >= Math.max(0.58, threshold - 0.14)) { index = Math.max(1, Math.min(chars.length - 1, 1)); } return chars[index] || " "; } function grEdgeGlyphFromStyle(style) { if (style === "6") return "|"; if (style === "7") return "-"; if (style === "8") return "/"; if (style === "9") return "\\"; return null; } function grIsEdgeStyle(style) { return style === "6" || style === "7" || style === "8" || style === "9"; } function grIsDenseHighlightStyle(style) { return style === "A" || style === "B" || style === "C" || style === "D"; } function grEffectiveStyle(rawStyle, tone) { const storageMode = SIGNAL_RITUAL_ENGINE.visualRenderer?.storageMode || SIGNAL_RITUAL_ENGINE.storageMode; if (storageMode === "derived-glyphs-from-tone-style") { if (rawStyle === "1" || rawStyle === "2" || rawStyle === "3" || rawStyle === "4" || grIsDenseHighlightStyle(rawStyle) || grIsEdgeStyle(rawStyle)) return rawStyle; return tone < 0.08 ? "5" : "0"; } return rawStyle || "0"; } function grGeneratedToneFrame(storedToneFrames, displayedFrame) { const source = SIGNAL_RITUAL_ENGINE.keyframeSourceFrames.map((frame) => frame - 1); let rightSlot = source.findIndex((frame) => frame >= displayedFrame); if (rightSlot < 0) rightSlot = source.length - 1; const leftSlot = Math.max(0, rightSlot - (source[rightSlot] === displayedFrame ? 0 : 1)); const leftFrame = source[leftSlot]; const rightFrame = source[rightSlot]; const a = storedToneFrames[leftSlot] || ""; const b = storedToneFrames[rightSlot] || a; const t = rightFrame === leftFrame ? 0 : (displayedFrame - leftFrame) / (rightFrame - leftFrame); const eased = t * t * (3 - 2 * t); let output = ""; const max = Math.max(a.length, b.length); for (let i = 0; i < max; i += 1) { const ca = a[i] || "0"; const cb = b[i] || ca; if (ca === "\n" || cb === "\n") output += "\n"; else { const av = parseInt(ca, 16); const bv = parseInt(cb, 16); const blended = Math.max(0, Math.min(15, Math.round(av + (bv - av) * eased))); output += blended.toString(16).toUpperCase(); } } return output; } function grGeneratedStyleFrame(storedStyleFrames, displayedFrame) { const source = SIGNAL_RITUAL_ENGINE.keyframeSourceFrames.map((frame) => frame - 1); let rightSlot = source.findIndex((frame) => frame >= displayedFrame); if (rightSlot < 0) rightSlot = source.length - 1; const leftSlot = Math.max(0, rightSlot - (source[rightSlot] === displayedFrame ? 0 : 1)); const leftFrame = source[leftSlot]; const rightFrame = source[rightSlot]; if (rightFrame === leftFrame) return storedStyleFrames[leftSlot] || ""; const t = (displayedFrame - leftFrame) / (rightFrame - leftFrame); return t < 0.5 ? storedStyleFrames[leftSlot] || "" : storedStyleFrames[rightSlot] || storedStyleFrames[leftSlot] || ""; } function grMix(a, b, amount) { return [ Math.round(a[0] + (b[0] - a[0]) * amount), Math.round(a[1] + (b[1] - a[1]) * amount), Math.round(a[2] + (b[2] - a[2]) * amount), ]; } function grPaletteColor(value) { const renderer = SIGNAL_RITUAL_ENGINE.visualRenderer; const ramp = renderer.paletteColors || [[255, 255, 255]]; const v = renderer.paletteInvert ? 1 - value : value; const scaled = Math.max(0, Math.min(1, v)) * (ramp.length - 1); const start = Math.floor(scaled); const end = Math.min(ramp.length - 1, start + 1); return grMix(ramp[start], ramp[end], scaled - start); } function grLuminance(color) { return (color[0] * 0.2126 + color[1] * 0.7152 + color[2] * 0.0722) / 255; } function grPreserveLuminance(color, targetTone) { const target = Math.max(0, Math.min(1, targetTone)); const current = Math.max(0, Math.min(1, grLuminance(color))); if (current <= 0.0001) { const gray = Math.round(target * 255); return [gray, gray, gray]; } if (target <= current) { const ratio = target / current; return color.map((channel) => Math.max(0, Math.min(255, Math.round(channel * ratio)))); } const amount = Math.min(1, (target - current) / Math.max(0.0001, 1 - current)); return color.map((channel) => Math.max(0, Math.min(255, Math.round(channel + (255 - channel) * amount)))); } function grApplyPostAsciiChannel(value, contrastFactor, midtoneAmount) { const contrasted = Math.max(0, Math.min(255, contrastFactor * (value - 128) + 128)); if (midtoneAmount === 0) return contrasted; const normalized = contrasted / 255; const midtoneMask = 4 * normalized * (1 - normalized); return Math.max(0, Math.min(255, contrasted + midtoneAmount * midtoneMask * 96)); } function grApplyPostAsciiToneToColor(color, brightness = 0, midtones = 0) { const contrast = Math.max(-100, Math.min(100, Number(brightness) || 0)); const factor = (259 * (contrast + 255)) / (255 * (259 - contrast)); const midtoneAmount = Math.max(-1, Math.min(1, (Number(midtones) || 0) / 100)); return color.map((channel) => grApplyPostAsciiChannel(channel, factor, midtoneAmount)); } function grRawInkColor(tone) { const renderer = SIGNAL_RITUAL_ENGINE.visualRenderer; if (renderer.inkMode === "bw") return [245, 245, 235]; const floor = renderer.rendererTuning?.paletteToneFloor ?? 0.05; const value = Math.max(floor, tone); const color = grPaletteColor(value); return renderer.palettePreserveLuminance ? grPreserveLuminance(color, value) : color; } function grFinalToneColor(color) { const effects = SIGNAL_RITUAL_ENGINE.visualRenderer.effects || {}; return grApplyPostAsciiToneToColor(color, effects.asciiBrightness, effects.asciiMidtones); } function grInkColor(tone) { return grFinalToneColor(grRawInkColor(tone)); } function grHighlightInkColor(tone, highlightFill, isHighlightMark, isHeavyInk, isDenseHighlight) { const color = grRawInkColor(tone); const effects = SIGNAL_RITUAL_ENGINE.visualRenderer.effects || {}; const threshold = (effects.asciiHighlightThreshold || 100) / 100; const protectedTopToneHighlight = tone >= 0.92 && (isDenseHighlight || isHighlightMark || isHeavyInk); const toneLift = grSmoothstep(Math.max(0.48, threshold - 0.2), 1, tone) * (0.72 + highlightFill * 0.34); const denseLift = isDenseHighlight ? 0.68 + grSmoothstep(0.66, 0.9, tone) * 0.24 : 0; const lift = Math.max( highlightFill * 0.72, toneLift, denseLift, isHighlightMark ? 0.62 : 0, isHeavyInk ? 0.52 : 0, ); if (lift <= 0) return grFinalToneColor(color); const cap = isDenseHighlight || isHighlightMark || isHeavyInk || tone >= 0.78 ? 0.98 : 0.78; const liftedColor = color.map((channel) => Math.max(0, Math.min(255, Math.round(channel + (255 - channel) * Math.min(cap, lift))))); return protectedTopToneHighlight ? liftedColor : grFinalToneColor(liftedColor); } function grRgbString(color) { return "rgb(" + color[0] + "," + color[1] + "," + color[2] + ")"; } function grBase64Bytes(encoded) { const text = atob(encoded); const bytes = new Uint8Array(text.length); for (let i = 0; i < text.length; i += 1) bytes[i] = text.charCodeAt(i); return bytes; } function grDecodeJson(encoded) { const bytes = grBase64Bytes(encoded); let text = ""; for (let i = 0; i < bytes.length; i += 1) text += String.fromCharCode(bytes[i]); return JSON.parse(text); } class GrBitReader { constructor(bytes) { this.bytes = bytes; this.byteIndex = 0; this.bitIndex = 0; } read(bits) {
+ 3)); const sortB = Math.round((field.cellular - 0.5) * field.packet * 2.15 + (field.fine - 0.5) * field.packet * 1.2); const tearSlip = Math.round(Math.sin(field.blockY * 2.31 + field.hold * 6.1 + field.coarseSeed * 4) * (field.packet * 1.32 + 2)) * field.tearGate; const verticalDrop = Math.round(Math.sin(colBand * 1.63 - field.hold * 3.4 + seed * 0.00019) * 4.8); const microGate = grSmoothstep(0.45, 1, field.micro); const microXSlip = Math.round((grProceduralFractalNoise(field.microX * 1.9, field.microY * 1.4, field.fastHold, seed + 1201) - 0.5) * 11) * microGate; const microYSlip = Math.round((grProceduralFractalNoise(field.microX * 1.2 + 5, field.microY * 1.6 - 3, field.fastHold, seed + 1601) - 0.5) * 10) * microGate; const scatterAngle = grProceduralFractalNoise(field.blockX * 1.8 + 13, field.blockY * 1.3 - 7, field.hold, seed + 2003) * Math.PI * 2; const scatter = Math.max(field.burst * field.coverageGate, field.windFalloff * 0.42) * (0.7 + profile.rebuild); const strength = Math.max(0, profile.strength) * field.toneMask; const quantum = cell * 0.25; const windPush = field.windFalloff * field.packet * strength * cell * 1.35; return [ grProceduralQuantize(((sortA + sortB + tearSlip + microXSlip) * cell * strength * field.gate * 1.18) + Math.cos(scatterAngle) * cell * field.packet * strength * scatter * 0.9 + Math.cos(field.windAngle) * windPush, quantum), grProceduralQuantize(((verticalDrop + microYSlip) * cell * strength * field.gate * 0.72) + Math.sin(scatterAngle) * cell * field.packet * strength * scatter * 0.62 + Math.sin(field.windAngle) * windPush * 0.95, quantum), ]; } function grWarezProceduralGlyph(glyph, chars, column, row, frame, tone) { const settings = grProceduralMotionSettings(); if (!settings?.enabled || (settings.type || settings.style) !== "warez") return glyph; if (glyph === " " && tone < 0.08) return glyph; const seed = Number(SIGNAL_RITUAL_ENGINE.seed || 1); const profile = grProceduralWarezProfile(settings); const field = grWarezMotionField(profile, column, row, frame, tone, seed, columns, rows); const charIndex = chars.indexOf(glyph); if (charIndex < 0) return glyph; const chance = Math.min(0.97, (0.22 + profile.strength * 0.31 + field.burst * 0.38 + field.windFalloff * 0.36) * Math.max(field.gate, field.windFalloff * 0.82, field.feather * 0.62)); const roll = grProceduralFractalNoise(column * 0.79 + field.blockX, row * 0.83 - field.blockY, field.fastHold, seed + 2401); if (roll > chance) return glyph; const radius = Math.max(2, Math.round(2 + profile.strength * 4 + field.micro * 5.2 + field.windFalloff * 5.5)); const denseBias = field.burst > 0.24 || field.tearGate > 0.6 || field.windFalloff > 0.5 ? 3 : 0; const drift = Math.round((grProceduralFractalNoise(field.warpedColumn * 0.2, field.warpedRow * 0.17, field.hold, seed + 3307) - 0.5) * radius * 1.2); const farShuffle = grProceduralFractalNoise(column * 0.39 + field.fine * 2.7, row * 0.35 - field.micro * 2.1, field.fastHold, seed + 3607) < field.windFalloff * 0.32; const start = farShuffle ? 1 : Math.max(1, charIndex - Math.max(1, radius - denseBias) + Math.min(0, drift)); const end = farShuffle ? chars.length - 1 : Math.min(chars.length - 1, charIndex + radius + denseBias + Math.max(0, drift)); const pick = Math.floor(start + grProceduralFractalNoise(field.blockX * 1.17 + column * 0.21, field.blockY * 1.31 + row * 0.17, field.hold, seed + 2909) * (end - start + 1)); return chars[pick] || glyph; } function grProceduralGlyphOffset(column, row, frame, tone) { const settings = grProceduralMotionSettings(); if (!settings?.enabled) return [0, 0]; const type = settings.type || settings.style || "drift"; const seed = Number(SIGNAL_RITUAL_ENGINE.seed || 1); const safeTone = grClampUnit(tone, 0); const baseStrength = 0.22 + safeTone * 0.78; if (type === "rain") { const profile = grProceduralProfile(settings, "rain", 1.2, 0.48); const strength = cell * profile.strength * baseStrength; const time = frame * 0.15 * Math.max(0.02, profile.speed); const phase = grSeeded(column * 911 + seed * 13) * Math.PI * 2; const fall = Math.sin(time * 2.15 + row * 0.18 + phase); const sway = Math.sin(time * 0.72 + column * 0.29 + row * 0.04 + seed * 0.00031); return [sway * strength * 0.24, fall * strength * 1.18]; } if (type === "fractal") { const profile = grProceduralProfile(settings, "fractal", 0.9, 0.62); const strength = cell * profile.strength * baseStrength; const time = frame * 0.075 * Math.max(0.02, profile.speed); const field = grProceduralFractalNoise(column * 0.09, row * 0.09, time, seed); const coverage = Math.max(0.05, Math.min(1, profile.coverage)); const mask = grSmoothstep(1 - coverage, 1, field) * (0.28 + grSmoothstep(0.04, 0.92, safeTone) * 0.72); const angle = grProceduralFractalNoise(column * 0.14 + 19, row * 0.14 - 11, time * 0.9 + 4.7, seed + 101) * Math.PI * 2; return [Math.cos(angle) * strength * mask, Math.sin(angle) * strength * mask]; } if (type === "warez") { return grWarezProceduralOffset(settings, column, row, frame, tone, seed); } const profile = grProceduralProfile(settings, "drift", 1, 0.42); const strength = cell * profile.strength * baseStrength; const time = frame * 0.11 * Math.max(0.02, profile.speed); const phase = column * 0.37 + row * 0.29 + seed * 0.000001; const driftX = Math.sin(time + phase) * strength; const driftY = Math.cos(time * 0.73 + column * 0.17 - row * 0.31 + seed * 0.0000007) * strength * 0.62; return [driftX, driftY]; } function grPlaybackFrame(timelineFrame) { const base = grBaseFrameCount(); const tick = Math.max(0, Math.floor(timelineFrame || 0)); if (grPlaybackMode() !== "pingpong" || base <= 1) return tick % base; const period = base * 2 - 2; const wrapped = tick % period; return wrapped < base ? wrapped : period - wrapped; } function grActiveGlitchStrength(frame) { const effects = grEffectSettings(); if (!effects.glitchEnabled || !effects.glitchPasses) return 0; let strength = 0; for (let i = 0; i < effects.glitchPasses.length; i += 1) { const pass = effects.glitchPasses[i]; const frames = (pass[0] || 0) / 100; const passStrength = (pass[1] || 0) / 100; const speed = (pass[2] || 0) / 100; const time = frame * (0.012 + speed * 0.2); if (grSmoothRandom(frame * 977 + i * 1009 + 19, time) < frames) { strength = Math.max(strength, passStrength); } } return strength; } function grActiveGlitchPasses(frame) { const effects = grEffectSettings(); if (!effects.glitchEnabled || !effects.glitchPasses) return []; const passes = []; for (let i = 0; i < effects.glitchPasses.length; i += 1) { const pass = effects.glitchPasses[i]; const frames = (pass[0] || 0) / 100; const strength = (pass[1] || 0) / 100; const speed = (pass[2] || 0) / 100; if (frames <= 0 || strength <= 0) continue; const time = frame * (0.012 + speed * 0.2); if (grSmoothRandom(frame * 977 + i * 1009 + 19, time) < frames) { passes.push({ index: i, strength, speed }); } } return passes; } function grMotionGlyph(glyph, column, row, frame, tone) { if (glyph === " " && tone < 0.08) return glyph; const effects = grEffectSettings(); const chars = SIGNAL_RITUAL_ENGINE.glyphs; let charIndex = Math.max(0, chars.indexOf(glyph)); if (effects.asciiAnimate) { const style = effects.motionStyle || "rain"; const fallSpeed = (effects.fallSpeed || 0) / 100; const symbolDrift = (effects.symbolDrift || 0) / 100; const rainAccent = (effects.rainAccent || 0) / 100; const phase = Math.floor(grSeeded(column + 401) * 80); const speed = 0.25 + fallSpeed * 1.8; let streamSeed = column * 4099 + Math.floor(row - frame * speed - phase) * 131 + 1701; if (style === "signalTear") { const tearTime = Math.floor(frame * (0.12 + fallSpeed * 0.55)); const tearBand = Math.floor(row / Math.max(1, Math.round(2 + grSeeded(row + tearTime) * 9))); streamSeed = column * 467 + tearBand * 3511 + tearTime * 977 + 211; } else if (style === "staticCrawl") { const crawlTime = Math.floor(frame * (0.2 + fallSpeed * 1.3)); streamSeed = column * 997 + row * 443 + crawlTime * 1889 + Math.floor(grSeeded(row + crawlTime) * 17); } else if (style === "pulseDrift") { const pulse = Math.sin(frame * (0.045 + fallSpeed * 0.08) + column * 0.42 + row * 0.23); streamSeed = column * 4099 + row * 131 + Math.floor((pulse + 1) * 900) + 1701; } const accent = grSeeded(streamSeed + 811); if (rainAccent > 0 && accent < rainAccent * 0.42) { const radius = 1 + Math.ceil(rainAccent * 3); const start = Math.max(1, charIndex - radius); const end = Math.min(chars.length - 1, charIndex + radius); glyph = chars[Math.floor(start + grSeeded(streamSeed + 1307) * (end - start + 1))] || glyph; charIndex = Math.max(0, chars.indexOf(glyph)); } else if (grSeeded(streamSeed) < 0.18 + symbolDrift * 0.62) { const start = Math.max(1, charIndex - 1); const end = Math.min(chars.length - 1, charIndex + 1); glyph = chars[Math.floor(start + grSeeded(streamSeed) * (end - start + 1))] || glyph; charIndex = Math.max(0, chars.indexOf(glyph)); } } const glitchStrength = grActiveGlitchStrength(frame); if (glitchStrength > 0) { const seed = column * 733 + row * 379 + frame * 47; if (grSeeded(seed) <= glitchStrength / 1.25) { const radius = chars.length >= 8 ? 2 : 1; const start = Math.max(1, charIndex - radius); const end = Math.min(chars.length - 1, charIndex + radius); glyph = chars[Math.floor(start + grSeeded(seed + 911) * (end - start + 1))] || glyph; charIndex = Math.max(0, chars.indexOf(glyph)); } } if (effects.asciiStatic) { const amount = (effects.asciiStaticAmount || 0) / 100; const speed = (effects.asciiStaticSpeed || 0) / 100; const style = effects.motionStyle || "rain"; const styleSpeed = style === "staticCrawl" ? 1.35 : style === "signalTear" ? 0.75 : style === "pulseDrift" ? 0.42 : 1; const time = frame * (0.016 + speed * 0.28) * styleSpeed; const glyphFrame = Math.floor(frame * (0.04 + speed * 0.52) * styleSpeed); const horizontalTear = grSmoothRandom(row * 997 + 61, time); const noise = grSmoothRandom(column * 571 + row * 823 + 127, time * 1.15); const pulseBoost = style === "pulseDrift" ? Math.max(0, Math.sin(frame * (0.035 + speed * 0.1) + row * 0.17)) * amount * 0.28 : 0; const tearBoost = style === "signalTear" && horizontalTear < amount * 0.2 ? amount * 0.55 : 0; const chance = amount * 0.18 + tearBoost + pulseBoost + (horizontalTear < amount * 0.12 ? amount * 0.48 : 0); if (noise <= chance) { if (horizontalTear < amount * 0.16 && grSeeded(column * 67 + row * 31 + glyphFrame) < 0.38) { const smearGlyphs = " -=_"; glyph = smearGlyphs[Math.floor(grSeeded(row * 43 + glyphFrame * 17) * smearGlyphs.length)] || glyph; } else { const radius = Math.max(1, Math.round(1 + amount * 5)); const start = Math.max(1, charIndex - radius); const end = Math.min(chars.length - 1, charIndex + radius); glyph = chars[Math.floor(start + grSeeded(column * 953 + row * 227 + glyphFrame * 29) * (end - start + 1))] || glyph; } } } glyph = grWarezProceduralGlyph(glyph, chars, column, row, frame, tone); return glyph; } function grSizeGlitchScale(column, row, frame) { const effects = grEffectSettings(); const probability = (effects.asciiSizeGlitchProbability || 0) / 100; const range = (effects.asciiSizeGlitchRange || 0) / 100; if (probability <= 0 || range <= 0) return 1; const time = frame * (0.045 + range * 0.46); const cluster = Math.floor(row / Math.max(1, Math.round(1 + grSeeded(column * 617 + row * 31) * 4))); const chance = probability * (0.45 + grSmoothRandom(column * 409 +
glyphs":" .,:;-/\\|+=*#%░▒▓█▌▐▀▄","interpolation":"none","keyframeSourceFrames":[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],"playbackMode":"pingpong","procedural":false,"proceduralMotion":{"drift":{"speed":1,"strength":0.42},"enabled":true,"fps":24,"fractal":{"coverage":0.42,"speed":0.9,"strength":0.62},"rain":{"speed":1.2,"strength":0.48},"style":"warez","type":"warez","warez":{"centerX":0.46,"centerY":0.39,"coverage":0.48,"falloff":0.35,"localized":true,"packet":7,"rebuild":0.55,"speed":0.11,"strength":0.41}},"proceduralOverlay":true,"ritualGlyphs":".,:;-/\\|+=*#%░▒▓█▌▐▀▄","rows":116,"seed":3224492443,"storageSourceFrames":[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],"timelineFrames":32,"visualRenderer":{"background":"#08090b","effects":{"asciiAdaptiveSize":true,"asciiAnimate":false,"asciiBrightness":7,"asciiGlow":56,"asciiHighlightBlockThreshold":85,"asciiHighlightBlocks":false,"asciiHighlightFill":0,"asciiHighlightThreshold":98,"asciiLargeScale":3,"asciiMidtones":13,"asciiSizeGlitchProbability":10,"asciiSizeGlitchRange":54,"asciiStatic":false,"asciiStaticAmount":0,"asciiStaticSpeed":47,"badScanlines":27,"brokenRows":8,"compressionScars":0,"edgeAwareEnabled":true,"edgeDogLargeRadius":7,"edgeDogSmallRadius":1.1,"edgeDogStrength":3.6,"edgeDogThreshold":9,"edgeMinCellRatio":10,"edgeRotateDirection":true,"edgeSobelThreshold":99,"fallSpeed":51,"glitchEnabled":false,"glitchPasses":[[0,42,27],[0,19,32],[0,28,22]],"inkBleed":0,"misregistration":0,"motionStyle":"staticCrawl","rainAccent":0,"symbolDrift":47,"symbolDropout":2,"vignette":0},"inkMode":"palette","mode":"clean-glyphs-plus-tone-style-ritual-fx","paletteColors":[[5,7,10],[10,14,21],[16,21,31],[21,28,42],[26,36,52],[48,37,54],[77,36,51],[106,36,48],[135,35,45],[146,37,47],[118,46,58],[90,55,70],[63,64,81],[35,73,93],[40,82,100],[45,91,106],[50,100,113],[55,109,120],[85,107,116],[128,99,107],[170,91,97],[213,83,88],[234,89,91],[213,123,120],[191,157,148],[170,190,176],[149,224,204],[165,228,211],[181,232,217],[197,236,224],[213,241,231],[222,243,235],[227,245,238],[232,247,242],[237,249,245],[242,250,248],[245,252,249],[249,253,251],[252,254,253],[255,255,255]],"paletteId":"sirens_at_night","paletteInvert":false,"paletteLabel":"Emergency Velvet","palettePreserveLuminance":true,"recommendedCellSize":11,"rendererTuning":{"backgroundAlphaBase":0.035,"backgroundAlphaMax":0.12,"backgroundAlphaMin":0.02,"backgroundAlphaTone":0.18,"brightCrowdSkip":0.7,"brightCrowdToneFloor":0.62,"brightOpenToneFloor":0.58,"brightScaleBoost":0.72,"brightScaleMax":2.45,"glyphScale":1.25,"highlightGlyphBoost":0.38,"largeAnchorScaleMultiplier":1,"paletteToneFloor":0.05},"storageMode":"derived-glyphs-from-tone-style","toneLevels":8,"version":"svg-tone-style-layer-v3"}}}; function grSeeded(seed) { let value = seed >>> 0; value = (value * 1664525 + 1013904223) >>> 0; return value / 4294967296; } function grSmoothRandom(seed, time) { const frame = Math.floor(time); const phase = time - frame; const eased = phase * phase * (3 - 2 * phase); const a = grSeeded(seed + frame * 1009); const b = grSeeded(seed + (frame + 1) * 1009); return a + (b - a) * eased; } function grSmoothstep(edge0, edge1, value) { const t = Math.max(0, Math.min(1, (value - edge0) / (edge1 - edge0))); return t * t * (3 - 2 * t); } function grEffectSettings() { return SIGNAL_RITUAL_ENGINE.visualRenderer.effects || {}; } function grPackedConfig() { return typeof grConfig !== "undefined" && grConfig ? grConfig : {}; } function grPlaybackMode() { const config = grPackedConfig(); return config.playbackMode || SIGNAL_RITUAL_ENGINE.playbackMode || SIGNAL_RITUAL_ENGINE.visualRenderer?.playbackMode || "normal"; } function grBaseFrameCount() { const config = grPackedConfig(); return Math.max(1, config.displayedFrames || SIGNAL_RITUAL_ENGINE.displayedFrames || 1); } function grTimelineFrameCount() { const config = grPackedConfig(); const explicit = config.timelineFrames || SIGNAL_RITUAL_ENGINE.timelineFrames; if (explicit) return Math.max(1, explicit); const base = grBaseFrameCount(); return grPlaybackMode() === "pingpong" && base > 1 ? base * 2 - 2 : base; } function grProceduralMotionSettings() { const config = grPackedConfig(); return config.proceduralMotion || SIGNAL_RITUAL_ENGINE.proceduralMotion || { enabled: false }; } function grProceduralMotionEnabled() { return Boolean(grProceduralMotionSettings()?.enabled); } function grPureProceduralEnabled() { return Boolean(SIGNAL_RITUAL_ENGINE.procedural && grProceduralMotionEnabled()); } function grProceduralOverlayEnabled() { return Boolean(SIGNAL_RITUAL_ENGINE.proceduralOverlay && grProceduralMotionEnabled()); } function grBaseTimelineFrameFromMotionClock(motionFrame) { const fps = Math.max(1, SIGNAL_RITUAL_ENGINE.fps || 12); return Math.floor((Math.max(0, Number(motionFrame) || 0) / PROCEDURAL_MOTION_CLOCK_FPS) * fps) % grTimelineFrameCount(); } function grClampUnit(value, fallback) { const numeric = Number(value); if (!Number.isFinite(numeric)) return fallback || 0; return Math.max(0, Math.min(1, numeric)); } function grProceduralProfile(settings, key, fallbackSpeed, fallbackStrength) { const profile = settings?.[key] || {}; return { speed: Math.max(0, Math.min(4, Number(profile.speed ?? settings?.speed ?? fallbackSpeed))), strength: Math.max(0, Math.min(1.4, Number(profile.strength ?? settings?.amplitude ?? fallbackStrength))), coverage: grClampUnit(profile.coverage ?? 0.42, 0.42), }; } function grProceduralFractalNoise(x, y, time, seed) { const s = Number(seed || 1) * 0.00013; const a = Math.sin(x * 1.73 + y * 2.11 + time + s); const b = Math.sin(x * 3.91 - y * 1.37 + time * 1.71 + s * 1.9); const c = Math.sin((x + y) * 2.47 + time * 0.63 + s * 2.7); return Math.max(0, Math.min(1, (a * 0.5 + b * 0.3 + c * 0.2) * 0.5 + 0.5)); } function grProceduralQuantize(value, quantum) { const q = Number(quantum); if (!Number.isFinite(q) || q <= 0) return value; return Math.round(value / q) * q; } function grProceduralWarezProfile(settings) { const profile = settings?.warez || {}; return { speed: Math.max(0, Math.min(4, Number(profile.speed ?? 1))), strength: Math.max(0, Math.min(3.2, Number(profile.strength ?? 0.7))), coverage: Math.max(0.05, Math.min(1, Number(profile.coverage ?? 0.48))), packet: Math.max(2, Math.min(18, Number(profile.packet ?? 7))), rebuild: grClampUnit(profile.rebuild ?? 0.55, 0.55), localized: Boolean(profile.localized), centerX: grClampUnit(profile.centerX ?? 0.5, 0.5), centerY: grClampUnit(profile.centerY ?? 0.5, 0.5), falloff: Math.max(0.01, Math.min(1, Number(profile.falloff ?? 0.3))), }; } function grWarezLocalityMask(profile, column, row, gridColumns, gridRows) { if (!profile.localized) return 1; const columns = Math.max(1, Number(gridColumns) || 1); const rows = Math.max(1, Number(gridRows) || 1); const x = columns <= 1 ? 0.5 : column / Math.max(1, columns - 1); const y = rows <= 1 ? 0.5 : row / Math.max(1, rows - 1); const distance = Math.hypot(x - profile.centerX, y - profile.centerY); return Math.max(0, 1 - grSmoothstep(0, Math.max(0.01, profile.falloff), distance)); } function grWarezMotionField(profile, column, row, frame, tone, seed, gridColumns, gridRows) { const safeTone = grClampUnit(tone, 0); const speed = Math.max(0.02, profile.speed); const time = frame * 0.115 * speed; const packet = profile.packet; const microPacket = Math.max(2, Math.round(packet * 0.45)); const warpA = grProceduralFractalNoise(column * 0.047, row * 0.039, time * 0.62, seed + 211) - 0.5; const warpB = grProceduralFractalNoise(column * 0.071 + 17, row * 0.053 - 9, time * 0.49, seed + 277) - 0.5; const warpC = grProceduralFractalNoise(column * 0.023 - 11, row * 0.027 + 19, time * 0.31, seed + 349) - 0.5; const warpedColumn = column + warpA * packet * 3.4 + warpC * packet * 1.6 + Math.sin(row * 0.071 + time * 1.7) * packet * 0.42; const warpedRow = row + warpB * packet * 3 + warpC * packet * 1.2 + Math.sin(column * 0.053 - time * 1.3) * packet * 0.36; const blockX = Math.floor(warpedColumn / packet); const blockY = Math.floor(warpedRow / packet); const microX = Math.floor((column + warpB * microPacket * 4.2 + warpC * microPacket * 1.7) / microPacket); const microY = Math.floor((row + warpA * microPacket * 3.8 - warpC * microPacket * 1.5) / microPacket); const coarseSeed = grProceduralFractalNoise(blockX * 0.71, blockY * 0.93, 0, seed + 503); const microSeed = grProceduralFractalNoise(microX * 1.37, microY * 1.17, 0, seed + 911); const hold = time + coarseSeed * 0.9; const fastHold = time * 1.9 + microSeed * 0.58; const diagonal = column * 0.37 + row * 0.21; const ribbon = grProceduralFractalNoise(diagonal * 0.035 + warpA * 0.9, (row - column) * 0.028 + warpB * 0.8, hold * 0.9, seed + 71); const cellular = grProceduralFractalNoise(warpedColumn * 0.055 + Math.sin(blockY), warpedRow * 0.061, hold * 0.7, seed + 307); const island = grProceduralFractalNoise(column * 0.031 + ribbon * 1.3, row * 0.037 + cellular * 1.1, hold * 0.38, seed + 1733); const fine = grProceduralFractalNoise(column * 0.13 + warpA * 4, row * 0.11 - warpB * 4, fastHold * 1.35, seed + 811); const micro = grProceduralFractalNoise(microX * 0.76 + warpA + fine * 0.7, microY * 0.83 + warpB - fine * 0.55, fastHold * 1.2, seed + 613); const toneMask = 0.16 + grSmoothstep(0.02, 0.92, safeTone) * 0.84; const fractalIsland = Math.max(ribbon * 0.26 + cellular * 0.27 + island * 0.3 + fine * 0.27, micro * 0.74); const feather = grSmoothstep(1 - profile.coverage - 0.22, 1 - profile.coverage + 0.2, fractalIsland); const coverageGate = grSmoothstep(1 - profile.coverage, 1, fractalIsland); const sweep = (warpedRow / Math.max(1, packet * 2.35) + ribbon * 1.9 + fine * 0.55 + time * 0.58 + coarseSeed) % 1; const tearGate = (1 - grSmoothstep(0.035, 0.24, Math.abs(sweep - 0.5))) * (0.45 + island * 0.55); const rebuildPhase = (time * 0.13 + coarseSeed * 0.8 + microSeed * 0.2) % 1; const burst = Math.pow(Math.max(0, Math.sin(rebuildPhase * Math.PI)), 0.7) * profile.rebuild; const windAngle = grProceduralFractalNoise(column * 0.018 + 5 + warpA, row * 0.021 - 8 + warpB, hold * 0.52, seed + 2207) * Math.PI * 2; const locality = grWarezLocalityMask(profile, column, row, gridColumns, gridRows); const localizedFeather = feather * locality; const localizedCoverageGate = coverageGate * locality; const localizedTearGate = tearGate * locality; const localizedBurst = burst * locality; const windFalloff = Math.pow(Math.max(feather * 0.85, coverageGate, tearGate * 0.9, burst * 0.78), 0.5) * (0.48 + fine * 0.82) * locality; const gate = Math.max(coverageGate * 0.72, tearGate * 1.08, burst * feather) * toneMask * Math.max(0.35, feather) * locality; return { safeTone, time, hold, fastHold, packet, microPacket, blockX, blockY, microX, microY, warpedColumn, warpedRow, coarseSeed, microSeed, ribbon, cellular, island, fine, micro, feather: localizedFeather, coverageGate: localizedCoverageGate, tearGate: localizedTearGate, burst: localizedBurst, gate, toneMask, windAngle, windFalloff, locality }; } function grWarezProceduralOffset(settings, column, row, frame, tone, seed) { const profile = grProceduralWarezProfile(settings); const field = grWarezMotionField(profile, column, row, frame, tone, seed, columns, rows); const rowBandSize = Math.max(1, Math.round(field.packet * (0.55 + field.coarseSeed * 0.85))); const colBandSize = Math.max(1, Math.round(field.packet * (0.5 + field.microSeed * 0.7))); const rowBand = Math.floor((field.warpedRow + field.ribbon * field.packet * 2.2 + field.island * field.packet) / rowBandSize); const colBand = Math.floor((field.warpedColumn + field.cellular * field.packet * 1.6) / colBandSize); const sortA = Math.round(Math.sin(rowBand * 1.81 + field.hold * 4.9 + seed * 0.00013) * (field.packet * 1.28
const SIGNAL_RITUAL_ENGINE = { version: "ritual-engine-v1", glyphs: "", ritualGlyphs: "", visualRenderer: { effects: {}, rendererTuning: {} }, proceduralMotion: { enabled: false } }; const GENESIS_RUNTIME_BY_SEED = {"422573176":{"artifactFrame":{"artworkName":"Anna","borderGlyphs":{"corner":"#","horizontal":"#","vertical":"#"},"borderType":"hash","collectionName":"Signal Rituals","enabled":true,"padding":{"bottom":2,"left":2,"right":2,"top":2},"seed":"422573176"},"artworkName":"Anna","cell":14,"columns":65,"displayedFrames":17,"fps":12,"glyphs":" +*#%†‡","interpolation":"none","keyframeSourceFrames":[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],"playbackMode":"pingpong","procedural":false,"proceduralMotion":{"enabled":false},"proceduralOverlay":false,"ritualGlyphs":"†‡","rows":116,"seed":422573176,"storageSourceFrames":[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],"timelineFrames":32,"visualRenderer":{"background":"#08090b","effects":{"asciiAdaptiveSize":true,"asciiAnimate":false,"asciiBrightness":0,"asciiGlow":100,"asciiHighlightBlockThreshold":85,"asciiHighlightBlocks":false,"asciiHighlightFill":0,"asciiHighlightThreshold":90,"asciiLargeScale":4,"asciiMidtones":2,"asciiSizeGlitchProbability":0,"asciiSizeGlitchRange":49,"asciiStatic":false,"asciiStaticAmount":0,"asciiStaticSpeed":33,"badScanlines":0,"brokenRows":0,"compressionScars":0,"edgeAwareEnabled":true,"edgeDogLargeRadius":7.2,"edgeDogSmallRadius":0.8,"edgeDogStrength":2.4,"edgeDogThreshold":39,"edgeMinCellRatio":11,"edgeRotateDirection":true,"edgeSobelThreshold":110,"fallSpeed":20,"glitchEnabled":false,"glitchPasses":[[7,41,31],[7,44,26],[1,39,32]],"inkBleed":0,"misregistration":0,"motionStyle":"rain","rainAccent":1,"symbolDrift":26,"symbolDropout":0,"vignette":0},"inkMode":"palette","mode":"clean-glyphs-plus-tone-style-ritual-fx","paletteColors":[[16,18,28],[47,30,50],[99,41,67],[37,62,65],[74,54,61],[90,54,93],[119,59,75],[39,92,71],[162,61,54],[195,55,61],[101,81,120],[77,90,157],[131,82,126],[77,114,90],[11,137,121],[125,116,81],[211,96,59],[73,130,201],[133,121,169],[247,110,122],[197,121,174],[108,162,114],[230,135,57],[185,152,74],[82,185,119],[88,189,227],[185,162,208],[219,159,177],[232,172,72],[236,170,135],[207,184,160],[161,219,108],[126,233,165],[194,217,156],[225,207,210],[248,208,218],[218,234,211],[242,233,223],[247,242,185],[255,255,255]],"paletteId":"lospec500","paletteInvert":false,"paletteLabel":"Festival Machine","palettePreserveLuminance":true,"recommendedCellSize":7,"rendererTuning":{"backgroundAlphaBase":0.035,"backgroundAlphaMax":0.12,"backgroundAlphaMin":0.02,"backgroundAlphaTone":0.18,"brightCrowdSkip":0.7,"brightCrowdToneFloor":0.62,"brightOpenToneFloor":0.58,"brightScaleBoost":0.72,"brightScaleMax":2.45,"glyphScale":1.25,"highlightGlyphBoost":0.38,"largeAnchorScaleMultiplier":1,"paletteToneFloor":0.05},"storageMode":"derived-glyphs-from-tone-style","toneLevels":8,"version":"svg-tone-style-layer-v3"}},"738176307":{"artifactFrame":{"artworkName":"Staircase","borderGlyphs":{"corner":"#","horizontal":"#","vertical":"#"},"borderType":"hash","collectionName":"Signal Rituals","enabled":true,"padding":{"bottom":2,"left":2,"right":2,"top":2},"seed":"738176307"},"artworkName":"Staircase","cell":14,"columns":64,"displayedFrames":17,"fps":12,"glyphs":" .,:;-/\\|+=*#%░▒▓█▌▐▀▄","interpolation":"none","keyframeSourceFrames":[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],"playbackMode":"pingpong","procedural":false,"proceduralMotion":{"enabled":false},"proceduralOverlay":false,"ritualGlyphs":".,:;-/\\|+=*#%░▒▓█▌▐▀▄","rows":113,"seed":738176307,"storageSourceFrames":[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],"timelineFrames":32,"visualRenderer":{"background":"#08090b","effects":{"asciiAdaptiveSize":false,"asciiAnimate":true,"asciiBrightness":-8,"asciiGlow":100,"asciiHighlightBlockThreshold":88,"asciiHighlightBlocks":false,"asciiHighlightFill":0,"asciiHighlightThreshold":90,"asciiLargeScale":3,"asciiMidtones":15,"asciiSizeGlitchProbability":0,"asciiSizeGlitchRange":24,"asciiStatic":true,"asciiStaticAmount":22,"asciiStaticSpeed":14,"badScanlines":4,"brokenRows":0,"compressionScars":0,"edgeAwareEnabled":true,"edgeDogLargeRadius":6.9,"edgeDogSmallRadius":0.8,"edgeDogStrength":3.6,"edgeDogThreshold":11,"edgeMinCellRatio":7,"edgeRotateDirection":true,"edgeSobelThreshold":30,"fallSpeed":19,"glitchEnabled":false,"glitchPasses":[[0,45,15],[0,30,43],[0,30,26]],"inkBleed":0,"misregistration":0,"motionStyle":"rain","rainAccent":16,"symbolDrift":49,"symbolDropout":0,"vignette":0},"inkMode":"palette","mode":"clean-glyphs-plus-tone-style-ritual-fx","paletteColors":[[6,6,6],[21,19,19],[36,32,31],[44,41,40],[50,48,50],[45,50,65],[44,52,77],[71,59,63],[99,64,54],[134,66,61],[153,71,71],[123,86,85],[104,97,93],[109,97,87],[102,101,84],[72,113,88],[86,110,99],[165,85,122],[190,78,126],[147,95,107],[140,98,113],[170,88,145],[174,92,169],[155,108,185],[127,125,184],[93,142,172],[104,151,137],[139,156,90],[175,158,87],[210,158,103],[213,173,140],[206,194,183],[190,203,200],[174,208,210],[201,212,164],[236,215,109],[226,221,164],[210,227,232],[231,241,245],[255,255,255]],"paletteId":"tiefling20","paletteInvert":false,"paletteLabel":"Carnival Ash","palettePreserveLuminance":false,"recommendedCellSize":7,"rendererTuning":{"backgroundAlphaBase":0.035,"backgroundAlphaMax":0.12,"backgroundAlphaMin":0.02,"backgroundAlphaTone":0.18,"brightCrowdSkip":0.7,"brightCrowdToneFloor":0.62,"brightOpenToneFloor":0.58,"brightScaleBoost":0.72,"brightScaleMax":2.45,"glyphScale":1.25,"highlightGlyphBoost":0.38,"largeAnchorScaleMultiplier":1,"paletteToneFloor":0.05},"storageMode":"derived-glyphs-from-tone-style","toneLevels":8,"version":"svg-tone-style-layer-v3"}},"2832209971":{"artifactFrame":{"artworkName":"Frame","borderGlyphs":{"corner":"#","horizontal":"#","vertical":"#"},"borderType":"hash","collectionName":"Signal Rituals","enabled":true,"padding":{"bottom":2,"left":2,"right":2,"top":2},"seed":"2832209971"},"artworkName":"Frame","cell":14,"columns":65,"displayedFrames":17,"fps":12,"glyphs":" .,:;-/\\|+=*#%░▒▓█▌▐▀▄","interpolation":"none","keyframeSourceFrames":[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],"playbackMode":"pingpong","procedural":false,"proceduralMotion":{"enabled":false},"proceduralOverlay":false,"ritualGlyphs":".,:;-/\\|+=*#%░▒▓█▌▐▀▄","rows":116,"seed":2832209971,"storageSourceFrames":[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],"timelineFrames":32,"visualRenderer":{"background":"#08090b","effects":{"asciiAdaptiveSize":false,"asciiAnimate":true,"asciiBrightness":-5,"asciiGlow":100,"asciiHighlightBlockThreshold":86,"asciiHighlightBlocks":false,"asciiHighlightFill":32,"asciiHighlightThreshold":98,"asciiLargeScale":3,"asciiMidtones":4,"asciiSizeGlitchProbability":9,"asciiSizeGlitchRange":26,"asciiStatic":true,"asciiStaticAmount":8,"asciiStaticSpeed":47,"badScanlines":21,"brokenRows":0,"compressionScars":0,"edgeAwareEnabled":true,"edgeDogLargeRadius":7,"edgeDogSmallRadius":0.8,"edgeDogStrength":3.5,"edgeDogThreshold":23,"edgeMinCellRatio":7,"edgeRotateDirection":true,"edgeSobelThreshold":93,"fallSpeed":35,"glitchEnabled":false,"glitchPasses":[[0,29,52],[0,25,33],[0,37,27]],"inkBleed":0,"misregistration":0,"motionStyle":"rain","rainAccent":11,"symbolDrift":27,"symbolDropout":16,"vignette":0},"inkMode":"palette","mode":"clean-glyphs-plus-tone-style-ritual-fx","paletteColors":[[7,7,12],[12,12,21],[17,17,29],[22,22,38],[27,27,46],[32,32,55],[37,37,64],[42,42,72],[47,48,81],[52,54,90],[57,59,99],[63,65,108],[68,71,117],[73,77,126],[83,82,131],[93,87,135],[103,92,140],[114,97,144],[124,102,149],[134,107,154],[144,113,157],[153,121,158],[162,128,159],[171,136,161],[180,144,162],[189,151,164],[198,159,165],[205,167,166],[212,175,167],[218,183,168],[225,191,169],[232,199,170],[239,207,171],[243,214,176],[244,219,187],[245,224,197],[247,229,208],[248,235,218],[250,240,229],[251,245,239]],"paletteId":"oil_6","paletteInvert":false,"paletteLabel":"Mineral Fog","palettePreserveLuminance":true,"recommendedCellSize":7,"rendererTuning":{"backgroundAlphaBase":0.035,"backgroundAlphaMax":0.12,"backgroundAlphaMin":0.02,"backgroundAlphaTone":0.18,"brightCrowdSkip":0.7,"brightCrowdToneFloor":0.62,"brightOpenToneFloor":0.58,"brightScaleBoost":0.72,"brightScaleMax":2.45,"glyphScale":1.25,"highlightGlyphBoost":0.38,"largeAnchorScaleMultiplier":1,"paletteToneFloor":0.05},"storageMode":"derived-glyphs-from-tone-style","toneLevels":8,"version":"svg-tone-style-layer-v3"}},"2995974067":{"artifactFrame":{"artworkName":"Window","borderGlyphs":{"corner":"#","horizontal":"#","vertical":"#"},"borderType":"hash","collectionName":"Signal Rituals","enabled":true,"padding":{"bottom":2,"left":2,"right":2,"top":2},"seed":"2995974067"},"artworkName":"Window","cell":36,"columns":62,"displayedFrames":24,"fps":12,"glyphs":" .,:;-/\\|+=*#%░▒▓█▌▐▀▄","interpolation":"none","keyframeSourceFrames":[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24],"playbackMode":"normal","procedural":false,"proceduralMotion":{"drift":{"speed":0.53,"strength":0.25},"enabled":true,"fps":24,"fractal":{"coverage":0.42,"speed":0.9,"strength":0.62},"rain":{"speed":1.2,"strength":0.48},"style":"drift","type":"drift","warez":{"centerX":0.5,"centerY":0.5,"coverage":0.48,"falloff":0.3,"localized":false,"packet":7,"rebuild":0.55,"speed":1,"strength":0.7}},"proceduralOverlay":true,"ritualGlyphs":".,:;-/\\|+=*#%░▒▓█▌▐▀▄","rows":110,"seed":2995974067,"storageSourceFrames":[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24],"timelineFrames":24,"visualRenderer":{"background":"#08090b","effects":{"asciiAdaptiveSize":false,"asciiAnimate":false,"asciiBrightness":0,"asciiGlow":99,"asciiHighlightBlockThreshold":87,"asciiHighlightBlocks":false,"asciiHighlightFill":0,"asciiHighlightThreshold":96,"asciiLargeScale":3,"asciiMidtones":2,"asciiSizeGlitchProbability":14,"asciiSizeGlitchRange":30,"asciiStatic":false,"asciiStaticAmount":0,"asciiStaticSpeed":21,"badScanlines":0,"brokenRows":0,"compressionScars":0,"edgeAwareEnabled":true,"edgeDogLargeRadius":7.1,"edgeDogSmallRadius":0.7,"edgeDogStrength":4,"edgeDogThreshold":9,"edgeMinCellRatio":3,"edgeRotateDirection":true,"edgeSobelThreshold":29,"fallSpeed":58,"glitchEnabled":false,"glitchPasses":[[15,42,18],[0,31,26],[2,41,17]],"inkBleed":0,"misregistration":0,"motionStyle":"pulseDrift","rainAccent":21,"symbolDrift":19,"symbolDropout":0,"vignette":0},"inkMode":"palette","mode":"clean-glyphs-plus-tone-style-ritual-fx","paletteColors":[[16,18,28],[47,30,50],[99,41,67],[37,62,65],[74,54,61],[90,54,93],[119,59,75],[39,92,71],[162,61,54],[195,55,61],[101,81,120],[77,90,157],[131,82,126],[77,114,90],[11,137,121],[125,116,81],[211,96,59],[73,130,201],[133,121,169],[247,110,122],[197,121,174],[108,162,114],[230,135,57],[185,152,74],[82,185,119],[88,189,227],[185,162,208],[219,159,177],[232,172,72],[236,170,135],[207,184,160],[161,219,108],[126,233,165],[194,217,156],[225,207,210],[248,208,218],[218,234,211],[242,233,223],[247,242,185],[255,255,255]],"paletteId":"lospec500","paletteInvert":false,"paletteLabel":"Festival Machine","palettePreserveLuminance":true,"recommendedCellSize":18,"rendererTuning":{"backgroundAlphaBase":0.035,"backgroundAlphaMax":0.12,"backgroundAlphaMin":0.02,"backgroundAlphaTone":0.18,"brightCrowdSkip":0.7,"brightCrowdToneFloor":0.62,"brightOpenToneFloor":0.58,"brightScaleBoost":0.72,"brightScaleMax":2.45,"glyphScale":1.25,"highlightGlyphBoost":0.38,"largeAnchorScaleMultiplier":1,"paletteToneFloor":0.05},"storageMode":"derived-glyphs-from-tone-style","toneLevels":8,"version":"svg-tone-style-layer-v3"}},"3224492443":{"artifactFrame":{"artworkName":"Fading Away","borderGlyphs":{"corner":"#","horizontal":"#","vertical":"#"},"borderType":"hash","collectionName":"Signal Rituals","enabled":true,"padding":{"bottom":2,"left":2,"right":2,"top":2},"seed":"3224492443"},"artworkName":"Fading Away","cell":22,"columns":65,"displayedFrames":17,"fps":12,"