| Andrew Cooke | Contents | Latest | RSS | Twitter | Previous | Next

C[omp]ute

Welcome to my blog, which was once a mailing list of the same name and is still generated by mail. Please reply via the "comment" links.

Always interested in offers/projects/new ideas. Eclectic experience in fields like: numerical computing; Python web; Java enterprise; functional languages; GPGPU; SQL databases; etc. Based in Santiago, Chile; telecommute worldwide. CV; email.

Personal Projects

Lepl parser for Python.

Colorless Green.

Photography around Santiago.

SVG experiment.

Professional Portfolio

Calibration of seismometers.

Data access via web services.

Cache rewrite.

Extending OpenSSH.

Last 100 entries

Re: Python's sad, unimaginative Enum; Re: Some explanation; Some explanation; Printing binary trees sideways; Atoms in python; About "Python's sad, unimaginative Enum"; Frustration Understood; Some good feedback here; this is fucking useless; I agree with you #nt; What would be imaginative?; Re: Enum; Enum; Python's sad, unimaginative Enum; Possible Fix; Work, Exhaustion, Vacation; VirtualBox with Centos 6.3 to 6.4, client; Matasano - Programming Lessons Learned; PDF to HTML; Alternate Substitution; Why RSA Works; Trigger; Dreaming of Death; Example: Tracing; Using Coroutines In Protocol Simulations; Python 3.3 Only; Pure Python SHA1 and MD4 Implementations; Ubuntu on VirtualBox; Starting TOR as a service on OpenSuse 12.3; 1001 Albums; Using fail2ban on OpenSuse 12.3; PPPoE on OpenSuse 12.3; Good Article on Unified Physics; It's Police (Carabineros); Linux Software for Listening to and Exploring Music; Android is Pretty Bad; Lucky Number; 3D Printing for Casting; Cover Art for MPDroid; Who'd a thought the French were so bigoted?; PS Input Signal; Small Problem with Roksan K2 Amp; Roksan K2 Amp + ATC SCM7 Speakers; Do What Makes Sense; Re: Arguing About Tests, Still; Arguing About Tests, Still; Images; Good Article on NY Drummers; Related Bug Report; Getting Python 3.3 and Virtualenv Working in OpenSuse 12.3; How I Am; Awesome video about digital audio; The Difference Between Dimensional and Normalized Databases; The rise of the new Chinese bogeyman; Updated Syntax; Very First Steps to C-ORM; The Ideal User Interface For Music Exploration; Can The Republicans Be Saved?; Rate Limiting Calls to EchoNest; Mods to Cache; Comparing UYKFG and UYKFD/E/F; Someone Else is Concerned; EchoNest-based Playlist Generator for MPD; Example Voting Results; A Heavyweight Python Cache; Identifying Artists with EchoNest; Notes on Pregalex / Pregabalina / Lyrica; The Neil Cowley Trio; Drake - Make for Data; A Reliable Python Web Service; Useful Python Date/Time Library?; Need to Sleep, But this is Good; Command Line Set Difference; Little Details...; Linux Command Line Tricks; AutoTools Tutorial; Hangman Tactics; A Tor Proxy Embedded In A Web Page; Tree (Nested Dicts) in Python; Sleeping at Parties; I Know Someone Who Hurts Other People; Light and Tea; Description of the LCS35 Time Capsule Crypto-Puzzle; Re: I can relate to that ...; I can relate to that ...; Re: It's 2012 Why Does My IDE Suck?; My Own Alternative Medicine; Nice explanation of SVM; Why and How Writing Crypto is Hard; Re: It's 2012 Why Does My IDE Suck?; Incremental Regular Expressions; BBC Map Confused at Pole; Social Media: Ground Zero in the Culture War; My Visit to the Psycho Doc; Learning Modern 3D Graphics Programming; Hope you got some crackers to go with the cheese; Re: But how easy would it be ...; But how easy would it be ...; Powerline Freq Fingerprinting of Audio; The Folly of Scientism; Cheese - Because You're Going to Die Anyway

© 2006-2013 Andrew Cooke (site) / post authors (content).

LEPL Optimisation with URL Validation

From: andrew cooke <andrew@...>

Date: Sat, 1 May 2010 10:25:32 -0400

Here are some interesting optimisation results from the latest (unreleased,
wil be 4.2) LEPL.

I've been working on validator for URLs (RFC3696) and, due to a
misunderstanding in my test code, thought I was only validating around 5 URLs
a second(!)  So I started looking at optimisation, got sucked in, and never
really measured things right...  And, of course, it turns out that it was
already running much faster than I thought, but that the extra optimisations
helped anyway.

Those (the extra optimisations) being improved compilation to regular
expressions.  In particular: (1) compilation to Python's own (re library)
regexps is now supported; (2) arbitrary repeats are supported (before only 0,
1 or many repeats); (3) the rewriting system is "smarter", able to handle many
more corner cases.

The fastest setting can now validate 240 HTTP URLs in 0.21 seconds - that's
around 1ms per URL.

To give some idea of the efficiency of the rewriting, the basic parser, as
written by hand (in a style meant to be easy to read and maintain, not
efficient) has 984 "components" (where I am using a "component" to be one line
of text in when the parser is printed as a tree), and a maximum nesting depth
of over 20.  The rewritten parser has 25 components and a maximum nestigdepth
of 7.  In fact, I'll try pasting both below.

And here are some timing data (times are for 240 URLs (best of 10 attempts),
on my laptop, and are repeatable to around 0.01):

  1.17s - No compilation at all

  Single optimisations:
  1.02s - Removing trampolining where possible (10% speedup)
  0.48s - Compiling to LEPL's NFA regexps
  0.45s - Compiling to LEPL's DFA regexps
  0.23s - Compiling to Python's re regexps
  
  Multiple optimisations:
  0.56s - Default (LEPL's NFA regexps)
  0.21s - Default + Python's re regexps

The good news here is that the default setting gives over double the speed,
while using Python's re regexps gives an *additional* better-than-doubling
(Python's re regexp cannot handle streams of data, so cannot be used by
default, but in a case like this, where a URL is a single line, it adds no
problems).

The disturbing news is that the default setting is actually slower than using
.config.clear().compile_to_nfa() (ie, just compiling to NFA regexps, and doing
nothing else).  I do not (yet) understand this.

Anyway, a URL per ms is not to be sneezed at! :o)

Andrew

PS Here's the optimal version:

TrampolineWrapper<FullFirstMatch:<>>
 +- SequenceWrapper<AndNoTrampoline:<>>
 |   +- SequenceWrapper<AndNoTrampoline:<add>>
 |   |   +- FunctionWrapper<Literal:<>>
 |   |   |   `- 'http://'
 |   |   +- SequenceWrapper<AndNoTrampoline:<add,transformation,transformation>>
 |   |   |   +- SequenceWrapper<AndNoTrampoline:<add>>
 |   |   |   |   +- SequenceWrapper<DepthNoTrampoline:<add>>
 |   |   |   |   |   +- start 1
 |   |   |   |   |   +- stop None
 |   |   |   |   |   +- rest SequenceWrapper<AndNoTrampoline:<>>
 |   |   |   |   |   |   +- FunctionWrapper<Regexp:<>>
 |   |   |   |   |   |   |   `- '\\.'
 |   |   |   |   |   |   `- FunctionWrapper<Regexp:<empty_adapter,transformation>>
 |   |   |   |   |   |       `- '[0-9A-Za-z](?:(?:[0-9A-Za-z]|\\-)*[0-9A-Za-z])?'
 |   |   |   |   |   `- first FunctionWrapper<Regexp:<empty_adapter,transformation>>
 |   |   |   |   |       `- '[0-9A-Za-z](?:(?:[0-9A-Za-z]|\\-)*[0-9A-Za-z])?'
 |   |   |   |   `- FunctionWrapper<Literal:<>>
 |   |   |   |       `- '.'
 |   |   |   `- FunctionWrapper<Regexp:<empty_adapter,transformation,transformation>>
 |   |   |       `- '[0-9A-Za-z](?:(?:[0-9A-Za-z]|\\-)*[0-9A-Za-z])?'
 |   |   `- FunctionWrapper<Regexp:<>>
 |   |       `- '(?::[0-9](?:[0-9])*)?(?:/(?:(?:%[0-9A-Fa-f][0-9A-Fa-f]|[!-"\\$&-\\.0-:=@-~])(?:%[0-9A-Fa-f][0-9A-Fa-f]|[!-"\\$&-\\.0-:=@-~])*(?:/(?:%[0-9A-Fa-f][0-9A-Fa-f]|[!-"\\$&-\\.0-:=@-~])(?:%[0-9A-Fa-f][0-9A-Fa-f]|[!-"\\$&-\\.0-:=@-~])*)*(?:/)?)?(?:\\?(?:%[0-9A-Fa-f][0-9A-Fa-f]|[!-"\\$&-:=@-~])(?:%[0-9A-Fa-f][0-9A-Fa-f]|[!-"\\$&-:=@-~])*)?(?:#(?:%[0-9A-Fa-f][0-9A-Fa-f]|[!-"\\$&-:=@-~])(?:%[0-9A-Fa-f][0-9A-Fa-f]|[!-"\\$&-:=@-~])*)?)?'
 |   `- FunctionWrapper<Eof:<>>
 `- True

And here's the parser as naively constructed from the initial Python code:

TrampolineWrapper<And:<>>
 +- Transform:<add>
 |   +- TrampolineWrapper<And:<>>
 |   |   +- Transform:<add>
 |   |   |   +- TrampolineWrapper<And:<>>
 |   |   |   |   +- Transform:<add>
 |   |   |   |   |   +- TrampolineWrapper<And:<>>
 |   |   |   |   |   |   +- FunctionWrapper<Literal:<>>
 |   |   |   |   |   |   |   `- 'http://'
 |   |   |   |   |   |   `- Transform:<transformation>
 |   |   |   |   |   |       +- Transform:<transformation>
 |   |   |   |   |   |       |   +- Transform:<add>
 |   |   |   |   |   |       |   |   +- TrampolineWrapper<And:<>>
 |   |   |   |   |   |       |   |   |   +- Transform:<add>
 |   |   |   |   |   |       |   |   |   |   +- TrampolineWrapper<And:<>>
 |   |   |   |   |   |       |   |   |   |   |   +- Transform:<add>
 |   |   |   |   |   |       |   |   |   |   |   |   +- TrampolineWrapper<DepthFirst:<>>
 |   |   |   |   |   |       |   |   |   |   |   |   |   +- start 1
 |   |   |   |   |   |       |   |   |   |   |   |   |   +- stop None
 |   |   |   |   |   |       |   |   |   |   |   |   |   +- rest TrampolineWrapper<And:<>>
 |   |   |   |   |   |       |   |   |   |   |   |   |   |   +- FunctionWrapper<Regexp:<>>
 |   |   |   |   |   |       |   |   |   |   |   |   |   |   |   `- '\\.'
 |   |   |   |   |   |       |   |   |   |   |   |   |   |   `- Transform:<transformation>
 |   |   |   |   |   |       |   |   |   |   |   |   |   |       +- Transform:<add>
 |   |   |   |   |   |       |   |   |   |   |   |   |   |       |   +- TrampolineWrapper<And:<>>
 |   |   |   |   |   |       |   |   |   |   |   |   |   |       |   |   +- FunctionWrapper<Any:<>>
 |   |   |   |   |   |       |   |   |   |   |   |   |   |       |   |   |   `- 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789'
 |   |   |   |   |   |       |   |   |   |   |   |   |   |       |   |   `- TrampolineWrapper<DepthFirst:<>>
 |   |   |   |   |   |       |   |   |   |   |   |   |   |       |   |       +- start 0
 |   |   |   |   |   |       |   |   |   |   |   |   |   |       |   |       +- stop 1
 |   |   |   |   |   |       |   |   |   |   |   |   |   |       |   |       +- rest Transform:<add>
 |   |   |   |   |   |       |   |   |   |   |   |   |   |       |   |       |   +- TrampolineWrapper<And:<>>
 |   |   |   |   |   |       |   |   |   |   |   |   |   |       |   |       |   |   +- TrampolineWrapper<DepthFirst:<>>
 |   |   |   |   |   |       |   |   |   |   |   |   |   |       |   |       |   |   |   +- start 0
 |   |   |   |   |   |       |   |   |   |   |   |   |   |       |   |       |   |   |   +- stop None
 |   |   |   |   |   |       |   |   |   |   |   |   |   |       |   |       |   |   |   +- rest TrampolineWrapper<Or:<>>
 |   |   |   |   |   |       |   |   |   |   |   |   |   |       |   |       |   |   |   |   +- FunctionWrapper<Any:<>>
 |   |   |   |   |   |       |   |   |   |   |   |   |   |       |   |       |   |   |   |   |   `- 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789'
 |   |   |   |   |   |       |   |   |   |   |   |   |   |       |   |       |   |   |   |   `- FunctionWrapper<Literal:<>>
 |   |   |   |   |   |       |   |   |   |   |   |   |   |       |   |       |   |   |   |       `- '-'
 |   |   |   |   |   |       |   |   |   |   |   |   |   |       |   |       |   |   |   `- first TrampolineWrapper<Or:<>>
 |   |   |   |   |   |       |   |   |   |   |   |   |   |       |   |       |   |   |       +- FunctionWrapper<Any:<>>
 |   |   |   |   |   |       |   |   |   |   |   |   |   |       |   |       |   |   |       |   `- 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789'
 |   |   |   |   |   |       |   |   |   |   |   |   |   |       |   |       |   |   |       `- FunctionWrapper<Literal:<>>
 |   |   |   |   |   |       |   |   |   |   |   |   |   |       |   |       |   |   |           `- '-'
 |   |   |   |   |   |       |   |   |   |   |   |   |   |       |   |       |   |   `- FunctionWrapper<Any:<>>
 |   |   |   |   |   |       |   |   |   |   |   |   |   |       |   |       |   |       `- 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789'
 |   |   |   |   |   |       |   |   |   |   |   |   |   |       |   |       |   `- TransformationWrapper(<add>)
 |   |   |   |   |   |       |   |   |   |   |   |   |   |       |   |       `- first Transform:<add>
 |   |   |   |   |   |       |   |   |   |   |   |   |   |       |   |           +- TrampolineWrapper<And:<>>
 |   |   |   |   |   |       |   |   |   |   |   |   |   |       |   |           |   +- TrampolineWrapper<DepthFirst:<>>
 |   |   |   |   |   |       |   |   |   |   |   |   |   |       |   |           |   |   +- start 0
 |   |   |   |   |   |       |   |   |   |   |   |   |   |       |   |           |   |   +- stop None
 |   |   |   |   |   |       |   |   |   |   |   |   |   |       |   |           |   |   +- rest TrampolineWrapper<Or:<>>
 |   |   |   |   |   |       |   |   |   |   |   |   |   |       |   |           |   |   |   +- FunctionWrapper<Any:<>>
 |   |   |   |   |   |       |   |   |   |   |   |   |   |       |   |           |   |   |   |   `- 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789'
 |   |   |   |   |   |       |   |   |   |   |   |   |   |       |   |           |   |   |   `- FunctionWrapper<Literal:<>>
 |   |   |   |   |   |       |   |   |   |   |   |   |   |       |   |           |   |   |       `- '-'
 |   |   |   |   |   |       |   |   |   |   |   |   |   |       |   |           |   |   `- first TrampolineWrapper<Or:<>>
 |   |   |   |   |   |       |   |   |   |   |   |   |   |       |   |           |   |       +- FunctionWrapper<Any:<>>
 |   |   |   |   |   |       |   |   |   |   |   |   |   |       |   |           |   |       |   `- 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789'
 |   |   |   |   |   |       |   |   |   |   |   |   |   |       |   |           |   |       `- FunctionWrapper<Literal:<>>
 |   |   |   |   |   |       |   |   |   |   |   |   |   |       |   |           |   |           `- '-'
 |   |   |   |   |   |       |   |   |   |   |   |   |   |       |   |           |   `- FunctionWrapper<Any:<>>
 |   |   |   |   |   |       |   |   |   |   |   |   |   |       |   |           |       `- 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789'
 |   |   |   |   |   |       |   |   |   |   |   |   |   |       |   |           `- TransformationWrapper(<add>)
 |   |   |   |   |   |       |   |   |   |   |   |   |   |       |   `- TransformationWrapper(<add>)
 |   |   |   |   |   |       |   |   |   |   |   |   |   |       `- TransformationWrapper(<transformation>)
 |   |   |   |   |   |       |   |   |   |   |   |   |   `- first Transform:<transformation>
 |   |   |   |   |   |       |   |   |   |   |   |   |       +- Transform:<add>
 |   |   |   |   |   |       |   |   |   |   |   |   |       |   +- TrampolineWrapper<And:<>>
 |   |   |   |   |   |       |   |   |   |   |   |   |       |   |   +- FunctionWrapper<Any:<>>
 |   |   |   |   |   |       |   |   |   |   |   |   |       |   |   |   `- 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789'
 |   |   |   |   |   |       |   |   |   |   |   |   |       |   |   `- TrampolineWrapper<DepthFirst:<>>
 |   |   |   |   |   |       |   |   |   |   |   |   |       |   |       +- start 0
 |   |   |   |   |   |       |   |   |   |   |   |   |       |   |       +- stop 1
 |   |   |   |   |   |       |   |   |   |   |   |   |       |   |       +- rest Transform:<add>
 |   |   |   |   |   |       |   |   |   |   |   |   |       |   |       |   +- TrampolineWrapper<And:<>>
 |   |   |   |   |   |       |   |   |   |   |   |   |       |   |       |   |   +- TrampolineWrapper<DepthFirst:<>>
 |   |   |   |   |   |       |   |   |   |   |   |   |       |   |       |   |   |   +- start 0
 |   |   |   |   |   |       |   |   |   |   |   |   |       |   |       |   |   |   +- stop None
 |   |   |   |   |   |       |   |   |   |   |   |   |       |   |       |   |   |   +- rest TrampolineWrapper<Or:<>>
 |   |   |   |   |   |       |   |   |   |   |   |   |       |   |       |   |   |   |   +- FunctionWrapper<Any:<>>
 |   |   |   |   |   |       |   |   |   |   |   |   |       |   |       |   |   |   |   |   `- 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789'
 |   |   |   |   |   |       |   |   |   |   |   |   |       |   |       |   |   |   |   `- FunctionWrapper<Literal:<>>
 |   |   |   |   |   |       |   |   |   |   |   |   |       |   |       |   |   |   |       `- '-'
 |   |   |   |   |   |       |   |   |   |   |   |   |       |   |       |   |   |   `- first TrampolineWrapper<Or:<>>
 |   |   |   |   |   |       |   |   |   |   |   |   |       |   |       |   |   |       +- FunctionWrapper<Any:<>>
 |   |   |   |   |   |       |   |   |   |   |   |   |       |   |       |   |   |       |   `- 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789'
 |   |   |   |   |   |       |   |   |   |   |   |   |       |   |       |   |   |       `- FunctionWrapper<Literal:<>>
 |   |   |   |   |   |       |   |   |   |   |   |   |       |   |       |   |   |           `- '-'
 |   |   |   |   |   |       |   |   |   |   |   |   |       |   |       |   |   `- FunctionWrapper<Any:<>>
 |   |   |   |   |   |       |   |   |   |   |   |   |       |   |       |   |       `- 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789'
 |   |   |   |   |   |       |   |   |   |   |   |   |       |   |       |   `- TransformationWrapper(<add>)
 |   |   |   |   |   |       |   |   |   |   |   |   |       |   |       `- first Transform:<add>
 |   |   |   |   |   |       |   |   |   |   |   |   |       |   |           +- TrampolineWrapper<And:<>>
 |   |   |   |   |   |       |   |   |   |   |   |   |       |   |           |   +- TrampolineWrapper<DepthFirst:<>>
 |   |   |   |   |   |       |   |   |   |   |   |   |       |   |           |   |   +- start 0
 |   |   |   |   |   |       |   |   |   |   |   |   |       |   |           |   |   +- stop None
 |   |   |   |   |   |       |   |   |   |   |   |   |       |   |           |   |   +- rest TrampolineWrapper<Or:<>>
 |   |   |   |   |   |       |   |   |   |   |   |   |       |   |           |   |   |   +- FunctionWrapper<Any:<>>
 |   |   |   |   |   |       |   |   |   |   |   |   |       |   |           |   |   |   |   `- 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789'
 |   |   |   |   |   |       |   |   |   |   |   |   |       |   |           |   |   |   `- FunctionWrapper<Literal:<>>
 |   |   |   |   |   |       |   |   |   |   |   |   |       |   |           |   |   |       `- '-'
 |   |   |   |   |   |       |   |   |   |   |   |   |       |   |           |   |   `- first TrampolineWrapper<Or:<>>
 |   |   |   |   |   |       |   |   |   |   |   |   |       |   |           |   |       +- FunctionWrapper<Any:<>>
 |   |   |   |   |   |       |   |   |   |   |   |   |       |   |           |   |       |   `- 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789'
 |   |   |   |   |   |       |   |   |   |   |   |   |       |   |           |   |       `- FunctionWrapper<Literal:<>>
 |   |   |   |   |   |       |   |   |   |   |   |   |       |   |           |   |           `- '-'
 |   |   |   |   |   |       |   |   |   |   |   |   |       |   |           |   `- FunctionWrapper<Any:<>>
 |   |   |   |   |   |       |   |   |   |   |   |   |       |   |           |       `- 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789'
 |   |   |   |   |   |       |   |   |   |   |   |   |       |   |           `- TransformationWrapper(<add>)
 |   |   |   |   |   |       |   |   |   |   |   |   |       |   `- TransformationWrapper(<add>)
 |   |   |   |   |   |       |   |   |   |   |   |   |       `- TransformationWrapper(<transformation>)
 |   |   |   |   |   |       |   |   |   |   |   |   `- TransformationWrapper(<add>)
 |   |   |   |   |   |       |   |   |   |   |   `- FunctionWrapper<Literal:<>>
 |   |   |   |   |   |       |   |   |   |   |       `- '.'
 |   |   |   |   |   |       |   |   |   |   `- TransformationWrapper(<add>)
 |   |   |   |   |   |       |   |   |   `- Transform:<transformation>
 |   |   |   |   |   |       |   |   |       +- Transform:<transformation>
 |   |   |   |   |   |       |   |   |       |   +- Transform:<add>
 |   |   |   |   |   |       |   |   |       |   |   +- TrampolineWrapper<And:<>>
 |   |   |   |   |   |       |   |   |       |   |   |   +- FunctionWrapper<Any:<>>
 |   |   |   |   |   |       |   |   |       |   |   |   |   `- 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789'
 |   |   |   |   |   |       |   |   |       |   |   |   `- TrampolineWrapper<DepthFirst:<>>
 |   |   |   |   |   |       |   |   |       |   |   |       +- start 0
 |   |   |   |   |   |       |   |   |       |   |   |       +- stop 1
 |   |   |   |   |   |       |   |   |       |   |   |       +- rest Transform:<add>
 |   |   |   |   |   |       |   |   |       |   |   |       |   +- TrampolineWrapper<And:<>>
 |   |   |   |   |   |       |   |   |       |   |   |       |   |   +- TrampolineWrapper<DepthFirst:<>>
 |   |   |   |   |   |       |   |   |       |   |   |       |   |   |   +- start 0
 |   |   |   |   |   |       |   |   |       |   |   |       |   |   |   +- stop None
 |   |   |   |   |   |       |   |   |       |   |   |       |   |   |   +- rest TrampolineWrapper<Or:<>>
 |   |   |   |   |   |       |   |   |       |   |   |       |   |   |   |   +- FunctionWrapper<Any:<>>
 |   |   |   |   |   |       |   |   |       |   |   |       |   |   |   |   |   `- 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789'
 |   |   |   |   |   |       |   |   |       |   |   |       |   |   |   |   `- FunctionWrapper<Literal:<>>
 |   |   |   |   |   |       |   |   |       |   |   |       |   |   |   |       `- '-'
 |   |   |   |   |   |       |   |   |       |   |   |       |   |   |   `- first TrampolineWrapper<Or:<>>
 |   |   |   |   |   |       |   |   |       |   |   |       |   |   |       +- FunctionWrapper<Any:<>>
 |   |   |   |   |   |       |   |   |       |   |   |       |   |   |       |   `- 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789'
 |   |   |   |   |   |       |   |   |       |   |   |       |   |   |       `- FunctionWrapper<Literal:<>>
 |   |   |   |   |   |       |   |   |       |   |   |       |   |   |           `- '-'
 |   |   |   |   |   |       |   |   |       |   |   |       |   |   `- FunctionWrapper<Any:<>>
 |   |   |   |   |   |       |   |   |       |   |   |       |   |       `- 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789'
 |   |   |   |   |   |       |   |   |       |   |   |       |   `- TransformationWrapper(<add>)
 |   |   |   |   |   |       |   |   |       |   |   |       `- first Transform:<add>
 |   |   |   |   |   |       |   |   |       |   |   |           +- TrampolineWrapper<And:<>>
 |   |   |   |   |   |       |   |   |       |   |   |           |   +- TrampolineWrapper<DepthFirst:<>>
 |   |   |   |   |   |       |   |   |       |   |   |           |   |   +- start 0
 |   |   |   |   |   |       |   |   |       |   |   |           |   |   +- stop None
 |   |   |   |   |   |       |   |   |       |   |   |           |   |   +- rest TrampolineWrapper<Or:<>>
 |   |   |   |   |   |       |   |   |       |   |   |           |   |   |   +- FunctionWrapper<Any:<>>
 |   |   |   |   |   |       |   |   |       |   |   |           |   |   |   |   `- 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789'
 |   |   |   |   |   |       |   |   |       |   |   |           |   |   |   `- FunctionWrapper<Literal:<>>
 |   |   |   |   |   |       |   |   |       |   |   |           |   |   |       `- '-'
 |   |   |   |   |   |       |   |   |       |   |   |           |   |   `- first TrampolineWrapper<Or:<>>
 |   |   |   |   |   |       |   |   |       |   |   |           |   |       +- FunctionWrapper<Any:<>>
 |   |   |   |   |   |       |   |   |       |   |   |           |   |       |   `- 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789'
 |   |   |   |   |   |       |   |   |       |   |   |           |   |       `- FunctionWrapper<Literal:<>>
 |   |   |   |   |   |       |   |   |       |   |   |           |   |           `- '-'
 |   |   |   |   |   |       |   |   |       |   |   |           |   `- FunctionWrapper<Any:<>>
 |   |   |   |   |   |       |   |   |       |   |   |           |       `- 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789'
 |   |   |   |   |   |       |   |   |       |   |   |           `- TransformationWrapper(<add>)
 |   |   |   |   |   |       |   |   |       |   |   `- TransformationWrapper(<add>)
 |   |   |   |   |   |       |   |   |       |   `- TransformationWrapper(<transformation>)
 |   |   |   |   |   |       |   |   |       `- TransformationWrapper(<transformation>)
 |   |   |   |   |   |       |   |   `- TransformationWrapper(<add>)
 |   |   |   |   |   |       |   `- TransformationWrapper(<transformation>)
 |   |   |   |   |   |       `- TransformationWrapper(<transformation>)
 |   |   |   |   |   `- TransformationWrapper(<add>)
 |   |   |   |   `- TrampolineWrapper<DepthFirst:<>>
 |   |   |   |       +- start 0
 |   |   |   |       +- stop 1
 |   |   |   |       +- rest Transform:<add>
 |   |   |   |       |   +- TrampolineWrapper<And:<>>
 |   |   |   |       |   |   +- FunctionWrapper<Literal:<>>
 |   |   |   |       |   |   |   `- ':'
 |   |   |   |       |   |   `- Transform:<add>
 |   |   |   |       |   |       +- TrampolineWrapper<DepthFirst:<>>
 |   |   |   |       |   |       |   +- start 1
 |   |   |   |       |   |       |   +- stop None
 |   |   |   |       |   |       |   +- rest FunctionWrapper<Any:<>>
 |   |   |   |       |   |       |   |   `- '0123456789'
 |   |   |   |       |   |       |   `- first FunctionWrapper<Any:<>>
 |   |   |   |       |   |       |       `- '0123456789'
 |   |   |   |       |   |       `- TransformationWrapper(<add>)
 |   |   |   |       |   `- TransformationWrapper(<add>)
 |   |   |   |       `- first Transform:<add>
 |   |   |   |           +- TrampolineWrapper<And:<>>
 |   |   |   |           |   +- FunctionWrapper<Literal:<>>
 |   |   |   |           |   |   `- ':'
 |   |   |   |           |   `- Transform:<add>
 |   |   |   |           |       +- TrampolineWrapper<DepthFirst:<>>
 |   |   |   |           |       |   +- start 1
 |   |   |   |           |       |   +- stop None
 |   |   |   |           |       |   +- rest FunctionWrapper<Any:<>>
 |   |   |   |           |       |   |   `- '0123456789'
 |   |   |   |           |       |   `- first FunctionWrapper<Any:<>>
 |   |   |   |           |       |       `- '0123456789'
 |   |   |   |           |       `- TransformationWrapper(<add>)
 |   |   |   |           `- TransformationWrapper(<add>)
 |   |   |   `- TransformationWrapper(<add>)
 |   |   `- TrampolineWrapper<DepthFirst:<>>
 |   |       +- start 0
 |   |       +- stop 1
 |   |       +- rest Transform:<add>
 |   |       |   +- TrampolineWrapper<And:<>>
 |   |       |   |   +- Transform:<add>
 |   |       |   |   |   +- TrampolineWrapper<And:<>>
 |   |       |   |   |   |   +- Transform:<add>
 |   |       |   |   |   |   |   +- TrampolineWrapper<And:<>>
 |   |       |   |   |   |   |   |   +- FunctionWrapper<Literal:<>>
 |   |       |   |   |   |   |   |   |   `- '/'
 |   |       |   |   |   |   |   |   `- TrampolineWrapper<DepthFirst:<>>
 |   |       |   |   |   |   |   |       +- start 0
 |   |       |   |   |   |   |   |       +- stop 1
 |   |       |   |   |   |   |   |       +- rest Transform:<add>
 |   |       |   |   |   |   |   |       |   +- TrampolineWrapper<And:<>>
 |   |       |   |   |   |   |   |       |   |   +- Transform:<add>
 |   |       |   |   |   |   |   |       |   |   |   +- TrampolineWrapper<DepthFirst:<>>
 |   |       |   |   |   |   |   |       |   |   |   |   +- start 1
 |   |       |   |   |   |   |   |       |   |   |   |   +- stop None
 |   |       |   |   |   |   |   |       |   |   |   |   +- rest TrampolineWrapper<And:<>>
 |   |       |   |   |   |   |   |       |   |   |   |   |   +- FunctionWrapper<Regexp:<>>
 |   |       |   |   |   |   |   |       |   |   |   |   |   |   `- '/'
 |   |       |   |   |   |   |   |       |   |   |   |   |   `- Transform:<add>
 |   |       |   |   |   |   |   |       |   |   |   |   |       +- TrampolineWrapper<DepthFirst:<>>
 |   |       |   |   |   |   |   |       |   |   |   |   |       |   +- start 1
 |   |       |   |   |   |   |   |       |   |   |   |   |       |   +- stop None
 |   |       |   |   |   |   |   |       |   |   |   |   |       |   +- rest TrampolineWrapper<Or:<>>
 |   |       |   |   |   |   |   |       |   |   |   |   |       |   |   +- Transform:<add>
 |   |       |   |   |   |   |   |       |   |   |   |   |       |   |   |   +- TrampolineWrapper<And:<>>
 |   |       |   |   |   |   |   |       |   |   |   |   |       |   |   |   |   +- FunctionWrapper<Literal:<>>
 |   |       |   |   |   |   |   |       |   |   |   |   |       |   |   |   |   |   `- '%'
 |   |       |   |   |   |   |   |       |   |   |   |   |       |   |   |   |   `- Transform:<add>
 |   |       |   |   |   |   |   |       |   |   |   |   |       |   |   |   |       +- TrampolineWrapper<DepthFirst:<>>
 |   |       |   |   |   |   |   |       |   |   |   |   |       |   |   |   |       |   +- start 2
 |   |       |   |   |   |   |   |       |   |   |   |   |       |   |   |   |       |   +- stop 2
 |   |       |   |   |   |   |   |       |   |   |   |   |       |   |   |   |       |   +- rest FunctionWrapper<Any:<>>
 |   |       |   |   |   |   |   |       |   |   |   |   |       |   |   |   |       |   |   `- '0123456789abcdefABCDEF'
 |   |       |   |   |   |   |   |       |   |   |   |   |       |   |   |   |       |   `- first FunctionWrapper<Any:<>>
 |   |       |   |   |   |   |   |       |   |   |   |   |       |   |   |   |       |       `- '0123456789abcdefABCDEF'
 |   |       |   |   |   |   |   |       |   |   |   |   |       |   |   |   |       `- TransformationWrapper(<add>)
 |   |       |   |   |   |   |   |       |   |   |   |   |       |   |   |   `- TransformationWrapper(<add>)
 |   |       |   |   |   |   |   |       |   |   |   |   |       |   |   `- FunctionWrapper<Any:<>>
 |   |       |   |   |   |   |   |       |   |   |   |   |       |   |       `- '"$&(*,.02468:@BDFHJLNPRTVXZ\\^`bdfhjlnprtvxz|~!\')+-13579=ACEGIKMOQSUWY[]_acegikmoqsuwy{}'
 |   |       |   |   |   |   |   |       |   |   |   |   |       |   `- first TrampolineWrapper<Or:<>>
 |   |       |   |   |   |   |   |       |   |   |   |   |       |       +- Transform:<add>
 |   |       |   |   |   |   |   |       |   |   |   |   |       |       |   +- TrampolineWrapper<And:<>>
 |   |       |   |   |   |   |   |       |   |   |   |   |       |       |   |   +- FunctionWrapper<Literal:<>>
 |   |       |   |   |   |   |   |       |   |   |   |   |       |       |   |   |   `- '%'
 |   |       |   |   |   |   |   |       |   |   |   |   |       |       |   |   `- Transform:<add>
 |   |       |   |   |   |   |   |       |   |   |   |   |       |       |   |       +- TrampolineWrapper<DepthFirst:<>>
 |   |       |   |   |   |   |   |       |   |   |   |   |       |       |   |       |   +- start 2
 |   |       |   |   |   |   |   |       |   |   |   |   |       |       |   |       |   +- stop 2
 |   |       |   |   |   |   |   |       |   |   |   |   |       |       |   |       |   +- rest FunctionWrapper<Any:<>>
 |   |       |   |   |   |   |   |       |   |   |   |   |       |       |   |       |   |   `- '0123456789abcdefABCDEF'
 |   |       |   |   |   |   |   |       |   |   |   |   |       |       |   |       |   `- first FunctionWrapper<Any:<>>
 |   |       |   |   |   |   |   |       |   |   |   |   |       |       |   |       |       `- '0123456789abcdefABCDEF'
 |   |       |   |   |   |   |   |       |   |   |   |   |       |       |   |       `- TransformationWrapper(<add>)
 |   |       |   |   |   |   |   |       |   |   |   |   |       |       |   `- TransformationWrapper(<add>)
 |   |       |   |   |   |   |   |       |   |   |   |   |       |       `- FunctionWrapper<Any:<>>
 |   |       |   |   |   |   |   |       |   |   |   |   |       |           `- '"$&(*,.02468:@BDFHJLNPRTVXZ\\^`bdfhjlnprtvxz|~!\')+-13579=ACEGIKMOQSUWY[]_acegikmoqsuwy{}'
 |   |       |   |   |   |   |   |       |   |   |   |   |       `- TransformationWrapper(<add>)
 |   |       |   |   |   |   |   |       |   |   |   |   `- first Transform:<add>
 |   |       |   |   |   |   |   |       |   |   |   |       +- TrampolineWrapper<DepthFirst:<>>
 |   |       |   |   |   |   |   |       |   |   |   |       |   +- start 1
 |   |       |   |   |   |   |   |       |   |   |   |       |   +- stop None
 |   |       |   |   |   |   |   |       |   |   |   |       |   +- rest TrampolineWrapper<Or:<>>
 |   |       |   |   |   |   |   |       |   |   |   |       |   |   +- Transform:<add>
 |   |       |   |   |   |   |   |       |   |   |   |       |   |   |   +- TrampolineWrapper<And:<>>
 |   |       |   |   |   |   |   |       |   |   |   |       |   |   |   |   +- FunctionWrapper<Literal:<>>
 |   |       |   |   |   |   |   |       |   |   |   |       |   |   |   |   |   `- '%'
 |   |       |   |   |   |   |   |       |   |   |   |       |   |   |   |   `- Transform:<add>
 |   |       |   |   |   |   |   |       |   |   |   |       |   |   |   |       +- TrampolineWrapper<DepthFirst:<>>
 |   |       |   |   |   |   |   |       |   |   |   |       |   |   |   |       |   +- start 2
 |   |       |   |   |   |   |   |       |   |   |   |       |   |   |   |       |   +- stop 2
 |   |       |   |   |   |   |   |       |   |   |   |       |   |   |   |       |   +- rest FunctionWrapper<Any:<>>
 |   |       |   |   |   |   |   |       |   |   |   |       |   |   |   |       |   |   `- '0123456789abcdefABCDEF'
 |   |       |   |   |   |   |   |       |   |   |   |       |   |   |   |       |   `- first FunctionWrapper<Any:<>>
 |   |       |   |   |   |   |   |       |   |   |   |       |   |   |   |       |       `- '0123456789abcdefABCDEF'
 |   |       |   |   |   |   |   |       |   |   |   |       |   |   |   |       `- TransformationWrapper(<add>)
 |   |       |   |   |   |   |   |       |   |   |   |       |   |   |   `- TransformationWrapper(<add>)
 |   |       |   |   |   |   |   |       |   |   |   |       |   |   `- FunctionWrapper<Any:<>>
 |   |       |   |   |   |   |   |       |   |   |   |       |   |       `- '"$&(*,.02468:@BDFHJLNPRTVXZ\\^`bdfhjlnprtvxz|~!\')+-13579=ACEGIKMOQSUWY[]_acegikmoqsuwy{}'
 |   |       |   |   |   |   |   |       |   |   |   |       |   `- first TrampolineWrapper<Or:<>>
 |   |       |   |   |   |   |   |       |   |   |   |       |       +- Transform:<add>
 |   |       |   |   |   |   |   |       |   |   |   |       |       |   +- TrampolineWrapper<And:<>>
 |   |       |   |   |   |   |   |       |   |   |   |       |       |   |   +- FunctionWrapper<Literal:<>>
 |   |       |   |   |   |   |   |       |   |   |   |       |       |   |   |   `- '%'
 |   |       |   |   |   |   |   |       |   |   |   |       |       |   |   `- Transform:<add>
 |   |       |   |   |   |   |   |       |   |   |   |       |       |   |       +- TrampolineWrapper<DepthFirst:<>>
 |   |       |   |   |   |   |   |       |   |   |   |       |       |   |       |   +- start 2
 |   |       |   |   |   |   |   |       |   |   |   |       |       |   |       |   +- stop 2
 |   |       |   |   |   |   |   |       |   |   |   |       |       |   |       |   +- rest FunctionWrapper<Any:<>>
 |   |       |   |   |   |   |   |       |   |   |   |       |       |   |       |   |   `- '0123456789abcdefABCDEF'
 |   |       |   |   |   |   |   |       |   |   |   |       |       |   |       |   `- first FunctionWrapper<Any:<>>
 |   |       |   |   |   |   |   |       |   |   |   |       |       |   |       |       `- '0123456789abcdefABCDEF'
 |   |       |   |   |   |   |   |       |   |   |   |       |       |   |       `- TransformationWrapper(<add>)
 |   |       |   |   |   |   |   |       |   |   |   |       |       |   `- TransformationWrapper(<add>)
 |   |       |   |   |   |   |   |       |   |   |   |       |       `- FunctionWrapper<Any:<>>
 |   |       |   |   |   |   |   |       |   |   |   |       |           `- '"$&(*,.02468:@BDFHJLNPRTVXZ\\^`bdfhjlnprtvxz|~!\')+-13579=ACEGIKMOQSUWY[]_acegikmoqsuwy{}'
 |   |       |   |   |   |   |   |       |   |   |   |       `- TransformationWrapper(<add>)
 |   |       |   |   |   |   |   |       |   |   |   `- TransformationWrapper(<add>)
 |   |       |   |   |   |   |   |       |   |   `- TrampolineWrapper<DepthFirst:<>>
 |   |       |   |   |   |   |   |       |   |       +- start 0
 |   |       |   |   |   |   |   |       |   |       +- stop 1
 |   |       |   |   |   |   |   |       |   |       +- rest FunctionWrapper<Literal:<>>
 |   |       |   |   |   |   |   |       |   |       |   `- '/'
 |   |       |   |   |   |   |   |       |   |       `- first FunctionWrapper<Literal:<>>
 |   |       |   |   |   |   |   |       |   |           `- '/'
 |   |       |   |   |   |   |   |       |   `- TransformationWrapper(<add>)
 |   |       |   |   |   |   |   |       `- first Transform:<add>
 |   |       |   |   |   |   |   |           +- TrampolineWrapper<And:<>>
 |   |       |   |   |   |   |   |           |   +- Transform:<add>
 |   |       |   |   |   |   |   |           |   |   +- TrampolineWrapper<DepthFirst:<>>
 |   |       |   |   |   |   |   |           |   |   |   +- start 1
 |   |       |   |   |   |   |   |           |   |   |   +- stop None
 |   |       |   |   |   |   |   |           |   |   |   +- rest TrampolineWrapper<And:<>>
 |   |       |   |   |   |   |   |           |   |   |   |   +- FunctionWrapper<Regexp:<>>
 |   |       |   |   |   |   |   |           |   |   |   |   |   `- '/'
 |   |       |   |   |   |   |   |           |   |   |   |   `- Transform:<add>
 |   |       |   |   |   |   |   |           |   |   |   |       +- TrampolineWrapper<DepthFirst:<>>
 |   |       |   |   |   |   |   |           |   |   |   |       |   +- start 1
 |   |       |   |   |   |   |   |           |   |   |   |       |   +- stop None
 |   |       |   |   |   |   |   |           |   |   |   |       |   +- rest TrampolineWrapper<Or:<>>
 |   |       |   |   |   |   |   |           |   |   |   |       |   |   +- Transform:<add>
 |   |       |   |   |   |   |   |           |   |   |   |       |   |   |   +- TrampolineWrapper<And:<>>
 |   |       |   |   |   |   |   |           |   |   |   |       |   |   |   |   +- FunctionWrapper<Literal:<>>
 |   |       |   |   |   |   |   |           |   |   |   |       |   |   |   |   |   `- '%'
 |   |       |   |   |   |   |   |           |   |   |   |       |   |   |   |   `- Transform:<add>
 |   |       |   |   |   |   |   |           |   |   |   |       |   |   |   |       +- TrampolineWrapper<DepthFirst:<>>
 |   |       |   |   |   |   |   |           |   |   |   |       |   |   |   |       |   +- start 2
 |   |       |   |   |   |   |   |           |   |   |   |       |   |   |   |       |   +- stop 2
 |   |       |   |   |   |   |   |           |   |   |   |       |   |   |   |       |   +- rest FunctionWrapper<Any:<>>
 |   |       |   |   |   |   |   |           |   |   |   |       |   |   |   |       |   |   `- '0123456789abcdefABCDEF'
 |   |       |   |   |   |   |   |           |   |   |   |       |   |   |   |       |   `- first FunctionWrapper<Any:<>>
 |   |       |   |   |   |   |   |           |   |   |   |       |   |   |   |       |       `- '0123456789abcdefABCDEF'
 |   |       |   |   |   |   |   |           |   |   |   |       |   |   |   |       `- TransformationWrapper(<add>)
 |   |       |   |   |   |   |   |           |   |   |   |       |   |   |   `- TransformationWrapper(<add>)
 |   |       |   |   |   |   |   |           |   |   |   |       |   |   `- FunctionWrapper<Any:<>>
 |   |       |   |   |   |   |   |           |   |   |   |       |   |       `- '"$&(*,.02468:@BDFHJLNPRTVXZ\\^`bdfhjlnprtvxz|~!\')+-13579=ACEGIKMOQSUWY[]_acegikmoqsuwy{}'
 |   |       |   |   |   |   |   |           |   |   |   |       |   `- first TrampolineWrapper<Or:<>>
 |   |       |   |   |   |   |   |           |   |   |   |       |       +- Transform:<add>
 |   |       |   |   |   |   |   |           |   |   |   |       |       |   +- TrampolineWrapper<And:<>>
 |   |       |   |   |   |   |   |           |   |   |   |       |       |   |   +- FunctionWrapper<Literal:<>>
 |   |       |   |   |   |   |   |           |   |   |   |       |       |   |   |   `- '%'
 |   |       |   |   |   |   |   |           |   |   |   |       |       |   |   `- Transform:<add>
 |   |       |   |   |   |   |   |           |   |   |   |       |       |   |       +- TrampolineWrapper<DepthFirst:<>>
 |   |       |   |   |   |   |   |           |   |   |   |       |       |   |       |   +- start 2
 |   |       |   |   |   |   |   |           |   |   |   |       |       |   |       |   +- stop 2
 |   |       |   |   |   |   |   |           |   |   |   |       |       |   |       |   +- rest FunctionWrapper<Any:<>>
 |   |       |   |   |   |   |   |           |   |   |   |       |       |   |       |   |   `- '0123456789abcdefABCDEF'
 |   |       |   |   |   |   |   |           |   |   |   |       |       |   |       |   `- first FunctionWrapper<Any:<>>
 |   |       |   |   |   |   |   |           |   |   |   |       |       |   |       |       `- '0123456789abcdefABCDEF'
 |   |       |   |   |   |   |   |           |   |   |   |       |       |   |       `- TransformationWrapper(<add>)
 |   |       |   |   |   |   |   |           |   |   |   |       |       |   `- TransformationWrapper(<add>)
 |   |       |   |   |   |   |   |           |   |   |   |       |       `- FunctionWrapper<Any:<>>
 |   |       |   |   |   |   |   |           |   |   |   |       |           `- '"$&(*,.02468:@BDFHJLNPRTVXZ\\^`bdfhjlnprtvxz|~!\')+-13579=ACEGIKMOQSUWY[]_acegikmoqsuwy{}'
 |   |       |   |   |   |   |   |           |   |   |   |       `- TransformationWrapper(<add>)
 |   |       |   |   |   |   |   |           |   |   |   `- first Transform:<add>
 |   |       |   |   |   |   |   |           |   |   |       +- TrampolineWrapper<DepthFirst:<>>
 |   |       |   |   |   |   |   |           |   |   |       |   +- start 1
 |   |       |   |   |   |   |   |           |   |   |       |   +- stop None
 |   |       |   |   |   |   |   |           |   |   |       |   +- rest TrampolineWrapper<Or:<>>
 |   |       |   |   |   |   |   |           |   |   |       |   |   +- Transform:<add>
 |   |       |   |   |   |   |   |           |   |   |       |   |   |   +- TrampolineWrapper<And:<>>
 |   |       |   |   |   |   |   |           |   |   |       |   |   |   |   +- FunctionWrapper<Literal:<>>
 |   |       |   |   |   |   |   |           |   |   |       |   |   |   |   |   `- '%'
 |   |       |   |   |   |   |   |           |   |   |       |   |   |   |   `- Transform:<add>
 |   |       |   |   |   |   |   |           |   |   |       |   |   |   |       +- TrampolineWrapper<DepthFirst:<>>
 |   |       |   |   |   |   |   |           |   |   |       |   |   |   |       |   +- start 2
 |   |       |   |   |   |   |   |           |   |   |       |   |   |   |       |   +- stop 2
 |   |       |   |   |   |   |   |           |   |   |       |   |   |   |       |   +- rest FunctionWrapper<Any:<>>
 |   |       |   |   |   |   |   |           |   |   |       |   |   |   |       |   |   `- '0123456789abcdefABCDEF'
 |   |       |   |   |   |   |   |           |   |   |       |   |   |   |       |   `- first FunctionWrapper<Any:<>>
 |   |       |   |   |   |   |   |           |   |   |       |   |   |   |       |       `- '0123456789abcdefABCDEF'
 |   |       |   |   |   |   |   |           |   |   |       |   |   |   |       `- TransformationWrapper(<add>)
 |   |       |   |   |   |   |   |           |   |   |       |   |   |   `- TransformationWrapper(<add>)
 |   |       |   |   |   |   |   |           |   |   |       |   |   `- FunctionWrapper<Any:<>>
 |   |       |   |   |   |   |   |           |   |   |       |   |       `- '"$&(*,.02468:@BDFHJLNPRTVXZ\\^`bdfhjlnprtvxz|~!\')+-13579=ACEGIKMOQSUWY[]_acegikmoqsuwy{}'
 |   |       |   |   |   |   |   |           |   |   |       |   `- first TrampolineWrapper<Or:<>>
 |   |       |   |   |   |   |   |           |   |   |       |       +- Transform:<add>
 |   |       |   |   |   |   |   |           |   |   |       |       |   +- TrampolineWrapper<And:<>>
 |   |       |   |   |   |   |   |           |   |   |       |       |   |   +- FunctionWrapper<Literal:<>>
 |   |       |   |   |   |   |   |           |   |   |       |       |   |   |   `- '%'
 |   |       |   |   |   |   |   |           |   |   |       |       |   |   `- Transform:<add>
 |   |       |   |   |   |   |   |           |   |   |       |       |   |       +- TrampolineWrapper<DepthFirst:<>>
 |   |       |   |   |   |   |   |           |   |   |       |       |   |       |   +- start 2
 |   |       |   |   |   |   |   |           |   |   |       |       |   |       |   +- stop 2
 |   |       |   |   |   |   |   |           |   |   |       |       |   |       |   +- rest FunctionWrapper<Any:<>>
 |   |       |   |   |   |   |   |           |   |   |       |       |   |       |   |   `- '0123456789abcdefABCDEF'
 |   |       |   |   |   |   |   |           |   |   |       |       |   |       |   `- first FunctionWrapper<Any:<>>
 |   |       |   |   |   |   |   |           |   |   |       |       |   |       |       `- '0123456789abcdefABCDEF'
 |   |       |   |   |   |   |   |           |   |   |       |       |   |       `- TransformationWrapper(<add>)
 |   |       |   |   |   |   |   |           |   |   |       |       |   `- TransformationWrapper(<add>)
 |   |       |   |   |   |   |   |           |   |   |       |       `- FunctionWrapper<Any:<>>
 |   |       |   |   |   |   |   |           |   |   |       |           `- '"$&(*,.02468:@BDFHJLNPRTVXZ\\^`bdfhjlnprtvxz|~!\')+-13579=ACEGIKMOQSUWY[]_acegikmoqsuwy{}'
 |   |       |   |   |   |   |   |           |   |   |       `- TransformationWrapper(<add>)
 |   |       |   |   |   |   |   |           |   |   `- TransformationWrapper(<add>)
 |   |       |   |   |   |   |   |           |   `- TrampolineWrapper<DepthFirst:<>>
 |   |       |   |   |   |   |   |           |       +- start 0
 |   |       |   |   |   |   |   |           |       +- stop 1
 |   |       |   |   |   |   |   |           |       +- rest FunctionWrapper<Literal:<>>
 |   |       |   |   |   |   |   |           |       |   `- '/'
 |   |       |   |   |   |   |   |           |       `- first FunctionWrapper<Literal:<>>
 |   |       |   |   |   |   |   |           |           `- '/'
 |   |       |   |   |   |   |   |           `- TransformationWrapper(<add>)
 |   |       |   |   |   |   |   `- TransformationWrapper(<add>)
 |   |       |   |   |   |   `- TrampolineWrapper<DepthFirst:<>>
 |   |       |   |   |   |       +- start 0
 |   |       |   |   |   |       +- stop 1
 |   |       |   |   |   |       +- rest Transform:<add>
 |   |       |   |   |   |       |   +- TrampolineWrapper<And:<>>
 |   |       |   |   |   |       |   |   +- FunctionWrapper<Literal:<>>
 |   |       |   |   |   |       |   |   |   `- '?'
 |   |       |   |   |   |       |   |   `- Transform:<add>
 |   |       |   |   |   |       |   |       +- TrampolineWrapper<DepthFirst:<>>
 |   |       |   |   |   |       |   |       |   +- start 1
 |   |       |   |   |   |       |   |       |   +- stop None
 |   |       |   |   |   |       |   |       |   +- rest TrampolineWrapper<Or:<>>
 |   |       |   |   |   |       |   |       |   |   +- Transform:<add>
 |   |       |   |   |   |       |   |       |   |   |   +- TrampolineWrapper<And:<>>
 |   |       |   |   |   |       |   |       |   |   |   |   +- FunctionWrapper<Literal:<>>
 |   |       |   |   |   |       |   |       |   |   |   |   |   `- '%'
 |   |       |   |   |   |       |   |       |   |   |   |   `- Transform:<add>
 |   |       |   |   |   |       |   |       |   |   |   |       +- TrampolineWrapper<DepthFirst:<>>
 |   |       |   |   |   |       |   |       |   |   |   |       |   +- start 2
 |   |       |   |   |   |       |   |       |   |   |   |       |   +- stop 2
 |   |       |   |   |   |       |   |       |   |   |   |       |   +- rest FunctionWrapper<Any:<>>
 |   |       |   |   |   |       |   |       |   |   |   |       |   |   `- '0123456789abcdefABCDEF'
 |   |       |   |   |   |       |   |       |   |   |   |       |   `- first FunctionWrapper<Any:<>>
 |   |       |   |   |   |       |   |       |   |   |   |       |       `- '0123456789abcdefABCDEF'
 |   |       |   |   |   |       |   |       |   |   |   |       `- TransformationWrapper(<add>)
 |   |       |   |   |   |       |   |       |   |   |   `- TransformationWrapper(<add>)
 |   |       |   |   |   |       |   |       |   |   `- FunctionWrapper<Any:<>>
 |   |       |   |   |   |       |   |       |   |       `- '"$&(*,.02468:@BDFHJLNPRTVXZ\\^`bdfhjlnprtvxz|~!\')+-13579=ACEGIKMOQSUWY[]_acegikmoqsuwy{}/'
 |   |       |   |   |   |       |   |       |   `- first TrampolineWrapper<Or:<>>
 |   |       |   |   |   |       |   |       |       +- Transform:<add>
 |   |       |   |   |   |       |   |       |       |   +- TrampolineWrapper<And:<>>
 |   |       |   |   |   |       |   |       |       |   |   +- FunctionWrapper<Literal:<>>
 |   |       |   |   |   |       |   |       |       |   |   |   `- '%'
 |   |       |   |   |   |       |   |       |       |   |   `- Transform:<add>
 |   |       |   |   |   |       |   |       |       |   |       +- TrampolineWrapper<DepthFirst:<>>
 |   |       |   |   |   |       |   |       |       |   |       |   +- start 2
 |   |       |   |   |   |       |   |       |       |   |       |   +- stop 2
 |   |       |   |   |   |       |   |       |       |   |       |   +- rest FunctionWrapper<Any:<>>
 |   |       |   |   |   |       |   |       |       |   |       |   |   `- '0123456789abcdefABCDEF'
 |   |       |   |   |   |       |   |       |       |   |       |   `- first FunctionWrapper<Any:<>>
 |   |       |   |   |   |       |   |       |       |   |       |       `- '0123456789abcdefABCDEF'
 |   |       |   |   |   |       |   |       |       |   |       `- TransformationWrapper(<add>)
 |   |       |   |   |   |       |   |       |       |   `- TransformationWrapper(<add>)
 |   |       |   |   |   |       |   |       |       `- FunctionWrapper<Any:<>>
 |   |       |   |   |   |       |   |       |           `- '"$&(*,.02468:@BDFHJLNPRTVXZ\\^`bdfhjlnprtvxz|~!\')+-13579=ACEGIKMOQSUWY[]_acegikmoqsuwy{}/'
 |   |       |   |   |   |       |   |       `- TransformationWrapper(<add>)
 |   |       |   |   |   |       |   `- TransformationWrapper(<add>)
 |   |       |   |   |   |       `- first Transform:<add>
 |   |       |   |   |   |           +- TrampolineWrapper<And:<>>
 |   |       |   |   |   |           |   +- FunctionWrapper<Literal:<>>
 |   |       |   |   |   |           |   |   `- '?'
 |   |       |   |   |   |           |   `- Transform:<add>
 |   |       |   |   |   |           |       +- TrampolineWrapper<DepthFirst:<>>
 |   |       |   |   |   |           |       |   +- start 1
 |   |       |   |   |   |           |       |   +- stop None
 |   |       |   |   |   |           |       |   +- rest TrampolineWrapper<Or:<>>
 |   |       |   |   |   |           |       |   |   +- Transform:<add>
 |   |       |   |   |   |           |       |   |   |   +- TrampolineWrapper<And:<>>
 |   |       |   |   |   |           |       |   |   |   |   +- FunctionWrapper<Literal:<>>
 |   |       |   |   |   |           |       |   |   |   |   |   `- '%'
 |   |       |   |   |   |           |       |   |   |   |   `- Transform:<add>
 |   |       |   |   |   |           |       |   |   |   |       +- TrampolineWrapper<DepthFirst:<>>
 |   |       |   |   |   |           |       |   |   |   |       |   +- start 2
 |   |       |   |   |   |           |       |   |   |   |       |   +- stop 2
 |   |       |   |   |   |           |       |   |   |   |       |   +- rest FunctionWrapper<Any:<>>
 |   |       |   |   |   |           |       |   |   |   |       |   |   `- '0123456789abcdefABCDEF'
 |   |       |   |   |   |           |       |   |   |   |       |   `- first FunctionWrapper<Any:<>>
 |   |       |   |   |   |           |       |   |   |   |       |       `- '0123456789abcdefABCDEF'
 |   |       |   |   |   |           |       |   |   |   |       `- TransformationWrapper(<add>)
 |   |       |   |   |   |           |       |   |   |   `- TransformationWrapper(<add>)
 |   |       |   |   |   |           |       |   |   `- FunctionWrapper<Any:<>>
 |   |       |   |   |   |           |       |   |       `- '"$&(*,.02468:@BDFHJLNPRTVXZ\\^`bdfhjlnprtvxz|~!\')+-13579=ACEGIKMOQSUWY[]_acegikmoqsuwy{}/'
 |   |       |   |   |   |           |       |   `- first TrampolineWrapper<Or:<>>
 |   |       |   |   |   |           |       |       +- Transform:<add>
 |   |       |   |   |   |           |       |       |   +- TrampolineWrapper<And:<>>
 |   |       |   |   |   |           |       |       |   |   +- FunctionWrapper<Literal:<>>
 |   |       |   |   |   |           |       |       |   |   |   `- '%'
 |   |       |   |   |   |           |       |       |   |   `- Transform:<add>
 |   |       |   |   |   |           |       |       |   |       +- TrampolineWrapper<DepthFirst:<>>
 |   |       |   |   |   |           |       |       |   |       |   +- start 2
 |   |       |   |   |   |           |       |       |   |       |   +- stop 2
 |   |       |   |   |   |           |       |       |   |       |   +- rest FunctionWrapper<Any:<>>
 |   |       |   |   |   |           |       |       |   |       |   |   `- '0123456789abcdefABCDEF'
 |   |       |   |   |   |           |       |       |   |       |   `- first FunctionWrapper<Any:<>>
 |   |       |   |   |   |           |       |       |   |       |       `- '0123456789abcdefABCDEF'
 |   |       |   |   |   |           |       |       |   |       `- TransformationWrapper(<add>)
 |   |       |   |   |   |           |       |       |   `- TransformationWrapper(<add>)
 |   |       |   |   |   |           |       |       `- FunctionWrapper<Any:<>>
 |   |       |   |   |   |           |       |           `- '"$&(*,.02468:@BDFHJLNPRTVXZ\\^`bdfhjlnprtvxz|~!\')+-13579=ACEGIKMOQSUWY[]_acegikmoqsuwy{}/'
 |   |       |   |   |   |           |       `- TransformationWrapper(<add>)
 |   |       |   |   |   |           `- TransformationWrapper(<add>)
 |   |       |   |   |   `- TransformationWrapper(<add>)
 |   |       |   |   `- TrampolineWrapper<DepthFirst:<>>
 |   |       |   |       +- start 0
 |   |       |   |       +- stop 1
 |   |       |   |       +- rest Transform:<add>
 |   |       |   |       |   +- TrampolineWrapper<And:<>>
 |   |       |   |       |   |   +- FunctionWrapper<Literal:<>>
 |   |       |   |       |   |   |   `- '#'
 |   |       |   |       |   |   `- Transform:<add>
 |   |       |   |       |   |       +- TrampolineWrapper<DepthFirst:<>>
 |   |       |   |       |   |       |   +- start 1
 |   |       |   |       |   |       |   +- stop None
 |   |       |   |       |   |       |   +- rest TrampolineWrapper<Or:<>>
 |   |       |   |       |   |       |   |   +- Transform:<add>
 |   |       |   |       |   |       |   |   |   +- TrampolineWrapper<And:<>>
 |   |       |   |       |   |       |   |   |   |   +- FunctionWrapper<Literal:<>>
 |   |       |   |       |   |       |   |   |   |   |   `- '%'
 |   |       |   |       |   |       |   |   |   |   `- Transform:<add>
 |   |       |   |       |   |       |   |   |   |       +- TrampolineWrapper<DepthFirst:<>>
 |   |       |   |       |   |       |   |   |   |       |   +- start 2
 |   |       |   |       |   |       |   |   |   |       |   +- stop 2
 |   |       |   |       |   |       |   |   |   |       |   +- rest FunctionWrapper<Any:<>>
 |   |       |   |       |   |       |   |   |   |       |   |   `- '0123456789abcdefABCDEF'
 |   |       |   |       |   |       |   |   |   |       |   `- first FunctionWrapper<Any:<>>
 |   |       |   |       |   |       |   |   |   |       |       `- '0123456789abcdefABCDEF'
 |   |       |   |       |   |       |   |   |   |       `- TransformationWrapper(<add>)
 |   |       |   |       |   |       |   |   |   `- TransformationWrapper(<add>)
 |   |       |   |       |   |       |   |   `- FunctionWrapper<Any:<>>
 |   |       |   |       |   |       |   |       `- '"$&(*,.02468:@BDFHJLNPRTVXZ\\^`bdfhjlnprtvxz|~!\')+-13579=ACEGIKMOQSUWY[]_acegikmoqsuwy{}/'
 |   |       |   |       |   |       |   `- first TrampolineWrapper<Or:<>>
 |   |       |   |       |   |       |       +- Transform:<add>
 |   |       |   |       |   |       |       |   +- TrampolineWrapper<And:<>>
 |   |       |   |       |   |       |       |   |   +- FunctionWrapper<Literal:<>>
 |   |       |   |       |   |       |       |   |   |   `- '%'
 |   |       |   |       |   |       |       |   |   `- Transform:<add>
 |   |       |   |       |   |       |       |   |       +- TrampolineWrapper<DepthFirst:<>>
 |   |       |   |       |   |       |       |   |       |   +- start 2
 |   |       |   |       |   |       |       |   |       |   +- stop 2
 |   |       |   |       |   |       |       |   |       |   +- rest FunctionWrapper<Any:<>>
 |   |       |   |       |   |       |       |   |       |   |   `- '0123456789abcdefABCDEF'
 |   |       |   |       |   |       |       |   |       |   `- first FunctionWrapper<Any:<>>
 |   |       |   |       |   |       |       |   |       |       `- '0123456789abcdefABCDEF'
 |   |       |   |       |   |       |       |   |       `- TransformationWrapper(<add>)
 |   |       |   |       |   |       |       |   `- TransformationWrapper(<add>)
 |   |       |   |       |   |       |       `- FunctionWrapper<Any:<>>
 |   |       |   |       |   |       |           `- '"$&(*,.02468:@BDFHJLNPRTVXZ\\^`bdfhjlnprtvxz|~!\')+-13579=ACEGIKMOQSUWY[]_acegikmoqsuwy{}/'
 |   |       |   |       |   |       `- TransformationWrapper(<add>)
 |   |       |   |       |   `- TransformationWrapper(<add>)
 |   |       |   |       `- first Transform:<add>
 |   |       |   |           +- TrampolineWrapper<And:<>>
 |   |       |   |           |   +- FunctionWrapper<Literal:<>>
 |   |       |   |           |   |   `- '#'
 |   |       |   |           |   `- Transform:<add>
 |   |       |   |           |       +- TrampolineWrapper<DepthFirst:<>>
 |   |       |   |           |       |   +- start 1
 |   |       |   |           |       |   +- stop None
 |   |       |   |           |       |   +- rest TrampolineWrapper<Or:<>>
 |   |       |   |           |       |   |   +- Transform:<add>
 |   |       |   |           |       |   |   |   +- TrampolineWrapper<And:<>>
 |   |       |   |           |       |   |   |   |   +- FunctionWrapper<Literal:<>>
 |   |       |   |           |       |   |   |   |   |   `- '%'
 |   |       |   |           |       |   |   |   |   `- Transform:<add>
 |   |       |   |           |       |   |   |   |       +- TrampolineWrapper<DepthFirst:<>>
 |   |       |   |           |       |   |   |   |       |   +- start 2
 |   |       |   |           |       |   |   |   |       |   +- stop 2
 |   |       |   |           |       |   |   |   |       |   +- rest FunctionWrapper<Any:<>>
 |   |       |   |           |       |   |   |   |       |   |   `- '0123456789abcdefABCDEF'
 |   |       |   |           |       |   |   |   |       |   `- first FunctionWrapper<Any:<>>
 |   |       |   |           |       |   |   |   |       |       `- '0123456789abcdefABCDEF'
 |   |       |   |           |       |   |   |   |       `- TransformationWrapper(<add>)
 |   |       |   |           |       |   |   |   `- TransformationWrapper(<add>)
 |   |       |   |           |       |   |   `- FunctionWrapper<Any:<>>
 |   |       |   |           |       |   |       `- '"$&(*,.02468:@BDFHJLNPRTVXZ\\^`bdfhjlnprtvxz|~!\')+-13579=ACEGIKMOQSUWY[]_acegikmoqsuwy{}/'
 |   |       |   |           |       |   `- first TrampolineWrapper<Or:<>>
 |   |       |   |           |       |       +- Transform:<add>
 |   |       |   |           |       |       |   +- TrampolineWrapper<And:<>>
 |   |       |   |           |       |       |   |   +- FunctionWrapper<Literal:<>>
 |   |       |   |           |       |       |   |   |   `- '%'
 |   |       |   |           |       |       |   |   `- Transform:<add>
 |   |       |   |           |       |       |   |       +- TrampolineWrapper<DepthFirst:<>>
 |   |       |   |           |       |       |   |       |   +- start 2
 |   |       |   |           |       |       |   |       |   +- stop 2
 |   |       |   |           |       |       |   |       |   +- rest FunctionWrapper<Any:<>>
 |   |       |   |           |       |       |   |       |   |   `- '0123456789abcdefABCDEF'
 |   |       |   |           |       |       |   |       |   `- first FunctionWrapper<Any:<>>
 |   |       |   |           |       |       |   |       |       `- '0123456789abcdefABCDEF'
 |   |       |   |           |       |       |   |       `- TransformationWrapper(<add>)
 |   |       |   |           |       |       |   `- TransformationWrapper(<add>)
 |   |       |   |           |       |       `- FunctionWrapper<Any:<>>
 |   |       |   |           |       |           `- '"$&(*,.02468:@BDFHJLNPRTVXZ\\^`bdfhjlnprtvxz|~!\')+-13579=ACEGIKMOQSUWY[]_acegikmoqsuwy{}/'
 |   |       |   |           |       `- TransformationWrapper(<add>)
 |   |       |   |           `- TransformationWrapper(<add>)
 |   |       |   `- TransformationWrapper(<add>)
 |   |       `- first Transform:<add>
 |   |           +- TrampolineWrapper<And:<>>
 |   |           |   +- Transform:<add>
 |   |           |   |   +- TrampolineWrapper<And:<>>
 |   |           |   |   |   +- Transform:<add>
 |   |           |   |   |   |   +- TrampolineWrapper<And:<>>
 |   |           |   |   |   |   |   +- FunctionWrapper<Literal:<>>
 |   |           |   |   |   |   |   |   `- '/'
 |   |           |   |   |   |   |   `- TrampolineWrapper<DepthFirst:<>>
 |   |           |   |   |   |   |       +- start 0
 |   |           |   |   |   |   |       +- stop 1
 |   |           |   |   |   |   |       +- rest Transform:<add>
 |   |           |   |   |   |   |       |   +- TrampolineWrapper<And:<>>
 |   |           |   |   |   |   |       |   |   +- Transform:<add>
 |   |           |   |   |   |   |       |   |   |   +- TrampolineWrapper<DepthFirst:<>>
 |   |           |   |   |   |   |       |   |   |   |   +- start 1
 |   |           |   |   |   |   |       |   |   |   |   +- stop None
 |   |           |   |   |   |   |       |   |   |   |   +- rest TrampolineWrapper<And:<>>
 |   |           |   |   |   |   |       |   |   |   |   |   +- FunctionWrapper<Regexp:<>>
 |   |           |   |   |   |   |       |   |   |   |   |   |   `- '/'
 |   |           |   |   |   |   |       |   |   |   |   |   `- Transform:<add>
 |   |           |   |   |   |   |       |   |   |   |   |       +- TrampolineWrapper<DepthFirst:<>>
 |   |           |   |   |   |   |       |   |   |   |   |       |   +- start 1
 |   |           |   |   |   |   |       |   |   |   |   |       |   +- stop None
 |   |           |   |   |   |   |       |   |   |   |   |       |   +- rest TrampolineWrapper<Or:<>>
 |   |           |   |   |   |   |       |   |   |   |   |       |   |   +- Transform:<add>
 |   |           |   |   |   |   |       |   |   |   |   |       |   |   |   +- TrampolineWrapper<And:<>>
 |   |           |   |   |   |   |       |   |   |   |   |       |   |   |   |   +- FunctionWrapper<Literal:<>>
 |   |           |   |   |   |   |       |   |   |   |   |       |   |   |   |   |   `- '%'
 |   |           |   |   |   |   |       |   |   |   |   |       |   |   |   |   `- Transform:<add>
 |   |           |   |   |   |   |       |   |   |   |   |       |   |   |   |       +- TrampolineWrapper<DepthFirst:<>>
 |   |           |   |   |   |   |       |   |   |   |   |       |   |   |   |       |   +- start 2
 |   |           |   |   |   |   |       |   |   |   |   |       |   |   |   |       |   +- stop 2
 |   |           |   |   |   |   |       |   |   |   |   |       |   |   |   |       |   +- rest FunctionWrapper<Any:<>>
 |   |           |   |   |   |   |       |   |   |   |   |       |   |   |   |       |   |   `- '0123456789abcdefABCDEF'
 |   |           |   |   |   |   |       |   |   |   |   |       |   |   |   |       |   `- first FunctionWrapper<Any:<>>
 |   |           |   |   |   |   |       |   |   |   |   |       |   |   |   |       |       `- '0123456789abcdefABCDEF'
 |   |           |   |   |   |   |       |   |   |   |   |       |   |   |   |       `- TransformationWrapper(<add>)
 |   |           |   |   |   |   |       |   |   |   |   |       |   |   |   `- TransformationWrapper(<add>)
 |   |           |   |   |   |   |       |   |   |   |   |       |   |   `- FunctionWrapper<Any:<>>
 |   |           |   |   |   |   |       |   |   |   |   |       |   |       `- '"$&(*,.02468:@BDFHJLNPRTVXZ\\^`bdfhjlnprtvxz|~!\')+-13579=ACEGIKMOQSUWY[]_acegikmoqsuwy{}'
 |   |           |   |   |   |   |       |   |   |   |   |       |   `- first TrampolineWrapper<Or:<>>
 |   |           |   |   |   |   |       |   |   |   |   |       |       +- Transform:<add>
 |   |           |   |   |   |   |       |   |   |   |   |       |       |   +- TrampolineWrapper<And:<>>
 |   |           |   |   |   |   |       |   |   |   |   |       |       |   |   +- FunctionWrapper<Literal:<>>
 |   |           |   |   |   |   |       |   |   |   |   |       |       |   |   |   `- '%'
 |   |           |   |   |   |   |       |   |   |   |   |       |       |   |   `- Transform:<add>
 |   |           |   |   |   |   |       |   |   |   |   |       |       |   |       +- TrampolineWrapper<DepthFirst:<>>
 |   |           |   |   |   |   |       |   |   |   |   |       |       |   |       |   +- start 2
 |   |           |   |   |   |   |       |   |   |   |   |       |       |   |       |   +- stop 2
 |   |           |   |   |   |   |       |   |   |   |   |       |       |   |       |   +- rest FunctionWrapper<Any:<>>
 |   |           |   |   |   |   |       |   |   |   |   |       |       |   |       |   |   `- '0123456789abcdefABCDEF'
 |   |           |   |   |   |   |       |   |   |   |   |       |       |   |       |   `- first FunctionWrapper<Any:<>>
 |   |           |   |   |   |   |       |   |   |   |   |       |       |   |       |       `- '0123456789abcdefABCDEF'
 |   |           |   |   |   |   |       |   |   |   |   |       |       |   |       `- TransformationWrapper(<add>)
 |   |           |   |   |   |   |       |   |   |   |   |       |       |   `- TransformationWrapper(<add>)
 |   |           |   |   |   |   |       |   |   |   |   |       |       `- FunctionWrapper<Any:<>>
 |   |           |   |   |   |   |       |   |   |   |   |       |           `- '"$&(*,.02468:@BDFHJLNPRTVXZ\\^`bdfhjlnprtvxz|~!\')+-13579=ACEGIKMOQSUWY[]_acegikmoqsuwy{}'
 |   |           |   |   |   |   |       |   |   |   |   |       `- TransformationWrapper(<add>)
 |   |           |   |   |   |   |       |   |   |   |   `- first Transform:<add>
 |   |           |   |   |   |   |       |   |   |   |       +- TrampolineWrapper<DepthFirst:<>>
 |   |           |   |   |   |   |       |   |   |   |       |   +- start 1
 |   |           |   |   |   |   |       |   |   |   |       |   +- stop None
 |   |           |   |   |   |   |       |   |   |   |       |   +- rest TrampolineWrapper<Or:<>>
 |   |           |   |   |   |   |       |   |   |   |       |   |   +- Transform:<add>
 |   |           |   |   |   |   |       |   |   |   |       |   |   |   +- TrampolineWrapper<And:<>>
 |   |           |   |   |   |   |       |   |   |   |       |   |   |   |   +- FunctionWrapper<Literal:<>>
 |   |           |   |   |   |   |       |   |   |   |       |   |   |   |   |   `- '%'
 |   |           |   |   |   |   |       |   |   |   |       |   |   |   |   `- Transform:<add>
 |   |           |   |   |   |   |       |   |   |   |       |   |   |   |       +- TrampolineWrapper<DepthFirst:<>>
 |   |           |   |   |   |   |       |   |   |   |       |   |   |   |       |   +- start 2
 |   |           |   |   |   |   |       |   |   |   |       |   |   |   |       |   +- stop 2
 |   |           |   |   |   |   |       |   |   |   |       |   |   |   |       |   +- rest FunctionWrapper<Any:<>>
 |   |           |   |   |   |   |       |   |   |   |       |   |   |   |       |   |   `- '0123456789abcdefABCDEF'
 |   |           |   |   |   |   |       |   |   |   |       |   |   |   |       |   `- first FunctionWrapper<Any:<>>
 |   |           |   |   |   |   |       |   |   |   |       |   |   |   |       |       `- '0123456789abcdefABCDEF'
 |   |           |   |   |   |   |       |   |   |   |       |   |   |   |       `- TransformationWrapper(<add>)
 |   |           |   |   |   |   |       |   |   |   |       |   |   |   `- TransformationWrapper(<add>)
 |   |           |   |   |   |   |       |   |   |   |       |   |   `- FunctionWrapper<Any:<>>
 |   |           |   |   |   |   |       |   |   |   |       |   |       `- '"$&(*,.02468:@BDFHJLNPRTVXZ\\^`bdfhjlnprtvxz|~!\')+-13579=ACEGIKMOQSUWY[]_acegikmoqsuwy{}'
 |   |           |   |   |   |   |       |   |   |   |       |   `- first TrampolineWrapper<Or:<>>
 |   |           |   |   |   |   |       |   |   |   |       |       +- Transform:<add>
 |   |           |   |   |   |   |       |   |   |   |       |       |   +- TrampolineWrapper<And:<>>
 |   |           |   |   |   |   |       |   |   |   |       |       |   |   +- FunctionWrapper<Literal:<>>
 |   |           |   |   |   |   |       |   |   |   |       |       |   |   |   `- '%'
 |   |           |   |   |   |   |       |   |   |   |       |       |   |   `- Transform:<add>
 |   |           |   |   |   |   |       |   |   |   |       |       |   |       +- TrampolineWrapper<DepthFirst:<>>
 |   |           |   |   |   |   |       |   |   |   |       |       |   |       |   +- start 2
 |   |           |   |   |   |   |       |   |   |   |       |       |   |       |   +- stop 2
 |   |           |   |   |   |   |       |   |   |   |       |       |   |       |   +- rest FunctionWrapper<Any:<>>
 |   |           |   |   |   |   |       |   |   |   |       |       |   |       |   |   `- '0123456789abcdefABCDEF'
 |   |           |   |   |   |   |       |   |   |   |       |       |   |       |   `- first FunctionWrapper<Any:<>>
 |   |           |   |   |   |   |       |   |   |   |       |       |   |       |       `- '0123456789abcdefABCDEF'
 |   |           |   |   |   |   |       |   |   |   |       |       |   |       `- TransformationWrapper(<add>)
 |   |           |   |   |   |   |       |   |   |   |       |       |   `- TransformationWrapper(<add>)
 |   |           |   |   |   |   |       |   |   |   |       |       `- FunctionWrapper<Any:<>>
 |   |           |   |   |   |   |       |   |   |   |       |           `- '"$&(*,.02468:@BDFHJLNPRTVXZ\\^`bdfhjlnprtvxz|~!\')+-13579=ACEGIKMOQSUWY[]_acegikmoqsuwy{}'
 |   |           |   |   |   |   |       |   |   |   |       `- TransformationWrapper(<add>)
 |   |           |   |   |   |   |       |   |   |   `- TransformationWrapper(<add>)
 |   |           |   |   |   |   |       |   |   `- TrampolineWrapper<DepthFirst:<>>
 |   |           |   |   |   |   |       |   |       +- start 0
 |   |           |   |   |   |   |       |   |       +- stop 1
 |   |           |   |   |   |   |       |   |       +- rest FunctionWrapper<Literal:<>>
 |   |           |   |   |   |   |       |   |       |   `- '/'
 |   |           |   |   |   |   |       |   |       `- first FunctionWrapper<Literal:<>>
 |   |           |   |   |   |   |       |   |           `- '/'
 |   |           |   |   |   |   |       |   `- TransformationWrapper(<add>)
 |   |           |   |   |   |   |       `- first Transform:<add>
 |   |           |   |   |   |   |           +- TrampolineWrapper<And:<>>
 |   |           |   |   |   |   |           |   +- Transform:<add>
 |   |           |   |   |   |   |           |   |   +- TrampolineWrapper<DepthFirst:<>>
 |   |           |   |   |   |   |           |   |   |   +- start 1
 |   |           |   |   |   |   |           |   |   |   +- stop None
 |   |           |   |   |   |   |           |   |   |   +- rest TrampolineWrapper<And:<>>
 |   |           |   |   |   |   |           |   |   |   |   +- FunctionWrapper<Regexp:<>>
 |   |           |   |   |   |   |           |   |   |   |   |   `- '/'
 |   |           |   |   |   |   |           |   |   |   |   `- Transform:<add>
 |   |           |   |   |   |   |           |   |   |   |       +- TrampolineWrapper<DepthFirst:<>>
 |   |           |   |   |   |   |           |   |   |   |       |   +- start 1
 |   |           |   |   |   |   |           |   |   |   |       |   +- stop None
 |   |           |   |   |   |   |           |   |   |   |       |   +- rest TrampolineWrapper<Or:<>>
 |   |           |   |   |   |   |           |   |   |   |       |   |   +- Transform:<add>
 |   |           |   |   |   |   |           |   |   |   |       |   |   |   +- TrampolineWrapper<And:<>>
 |   |           |   |   |   |   |           |   |   |   |       |   |   |   |   +- FunctionWrapper<Literal:<>>
 |   |           |   |   |   |   |           |   |   |   |       |   |   |   |   |   `- '%'
 |   |           |   |   |   |   |           |   |   |   |       |   |   |   |   `- Transform:<add>
 |   |           |   |   |   |   |           |   |   |   |       |   |   |   |       +- TrampolineWrapper<DepthFirst:<>>
 |   |           |   |   |   |   |           |   |   |   |       |   |   |   |       |   +- start 2
 |   |           |   |   |   |   |           |   |   |   |       |   |   |   |       |   +- stop 2
 |   |           |   |   |   |   |           |   |   |   |       |   |   |   |       |   +- rest FunctionWrapper<Any:<>>
 |   |           |   |   |   |   |           |   |   |   |       |   |   |   |       |   |   `- '0123456789abcdefABCDEF'
 |   |           |   |   |   |   |           |   |   |   |       |   |   |   |       |   `- first FunctionWrapper<Any:<>>
 |   |           |   |   |   |   |           |   |   |   |       |   |   |   |       |       `- '0123456789abcdefABCDEF'
 |   |           |   |   |   |   |           |   |   |   |       |   |   |   |       `- TransformationWrapper(<add>)
 |   |           |   |   |   |   |           |   |   |   |       |   |   |   `- TransformationWrapper(<add>)
 |   |           |   |   |   |   |           |   |   |   |       |   |   `- FunctionWrapper<Any:<>>
 |   |           |   |   |   |   |           |   |   |   |       |   |       `- '"$&(*,.02468:@BDFHJLNPRTVXZ\\^`bdfhjlnprtvxz|~!\')+-13579=ACEGIKMOQSUWY[]_acegikmoqsuwy{}'
 |   |           |   |   |   |   |           |   |   |   |       |   `- first TrampolineWrapper<Or:<>>
 |   |           |   |   |   |   |           |   |   |   |       |       +- Transform:<add>
 |   |           |   |   |   |   |           |   |   |   |       |       |   +- TrampolineWrapper<And:<>>
 |   |           |   |   |   |   |           |   |   |   |       |       |   |   +- FunctionWrapper<Literal:<>>
 |   |           |   |   |   |   |           |   |   |   |       |       |   |   |   `- '%'
 |   |           |   |   |   |   |           |   |   |   |       |       |   |   `- Transform:<add>
 |   |           |   |   |   |   |           |   |   |   |       |       |   |       +- TrampolineWrapper<DepthFirst:<>>
 |   |           |   |   |   |   |           |   |   |   |       |       |   |       |   +- start 2
 |   |           |   |   |   |   |           |   |   |   |       |       |   |       |   +- stop 2
 |   |           |   |   |   |   |           |   |   |   |       |       |   |       |   +- rest FunctionWrapper<Any:<>>
 |   |           |   |   |   |   |           |   |   |   |       |       |   |       |   |   `- '0123456789abcdefABCDEF'
 |   |           |   |   |   |   |           |   |   |   |       |       |   |       |   `- first FunctionWrapper<Any:<>>
 |   |           |   |   |   |   |           |   |   |   |       |       |   |       |       `- '0123456789abcdefABCDEF'
 |   |           |   |   |   |   |           |   |   |   |       |       |   |       `- TransformationWrapper(<add>)
 |   |           |   |   |   |   |           |   |   |   |       |       |   `- TransformationWrapper(<add>)
 |   |           |   |   |   |   |           |   |   |   |       |       `- FunctionWrapper<Any:<>>
 |   |           |   |   |   |   |           |   |   |   |       |           `- '"$&(*,.02468:@BDFHJLNPRTVXZ\\^`bdfhjlnprtvxz|~!\')+-13579=ACEGIKMOQSUWY[]_acegikmoqsuwy{}'
 |   |           |   |   |   |   |           |   |   |   |       `- TransformationWrapper(<add>)
 |   |           |   |   |   |   |           |   |   |   `- first Transform:<add>
 |   |           |   |   |   |   |           |   |   |       +- TrampolineWrapper<DepthFirst:<>>
 |   |           |   |   |   |   |           |   |   |       |   +- start 1
 |   |           |   |   |   |   |           |   |   |       |   +- stop None
 |   |           |   |   |   |   |           |   |   |       |   +- rest TrampolineWrapper<Or:<>>
 |   |           |   |   |   |   |           |   |   |       |   |   +- Transform:<add>
 |   |           |   |   |   |   |           |   |   |       |   |   |   +- TrampolineWrapper<And:<>>
 |   |           |   |   |   |   |           |   |   |       |   |   |   |   +- FunctionWrapper<Literal:<>>
 |   |           |   |   |   |   |           |   |   |       |   |   |   |   |   `- '%'
 |   |           |   |   |   |   |           |   |   |       |   |   |   |   `- Transform:<add>
 |   |           |   |   |   |   |           |   |   |       |   |   |   |       +- TrampolineWrapper<DepthFirst:<>>
 |   |           |   |   |   |   |           |   |   |       |   |   |   |       |   +- start 2
 |   |           |   |   |   |   |           |   |   |       |   |   |   |       |   +- stop 2
 |   |           |   |   |   |   |           |   |   |       |   |   |   |       |   +- rest FunctionWrapper<Any:<>>
 |   |           |   |   |   |   |           |   |   |       |   |   |   |       |   |   `- '0123456789abcdefABCDEF'
 |   |           |   |   |   |   |           |   |   |       |   |   |   |       |   `- first FunctionWrapper<Any:<>>
 |   |           |   |   |   |   |           |   |   |       |   |   |   |       |       `- '0123456789abcdefABCDEF'
 |   |           |   |   |   |   |           |   |   |       |   |   |   |       `- TransformationWrapper(<add>)
 |   |           |   |   |   |   |           |   |   |       |   |   |   `- TransformationWrapper(<add>)
 |   |           |   |   |   |   |           |   |   |       |   |   `- FunctionWrapper<Any:<>>
 |   |           |   |   |   |   |           |   |   |       |   |       `- '"$&(*,.02468:@BDFHJLNPRTVXZ\\^`bdfhjlnprtvxz|~!\')+-13579=ACEGIKMOQSUWY[]_acegikmoqsuwy{}'
 |   |           |   |   |   |   |           |   |   |       |   `- first TrampolineWrapper<Or:<>>
 |   |           |   |   |   |   |           |   |   |       |       +- Transform:<add>
 |   |           |   |   |   |   |           |   |   |       |       |   +- TrampolineWrapper<And:<>>
 |   |           |   |   |   |   |           |   |   |       |       |   |   +- FunctionWrapper<Literal:<>>
 |   |           |   |   |   |   |           |   |   |       |       |   |   |   `- '%'
 |   |           |   |   |   |   |           |   |   |       |       |   |   `- Transform:<add>
 |   |           |   |   |   |   |           |   |   |       |       |   |       +- TrampolineWrapper<DepthFirst:<>>
 |   |           |   |   |   |   |           |   |   |       |       |   |       |   +- start 2
 |   |           |   |   |   |   |           |   |   |       |       |   |       |   +- stop 2
 |   |           |   |   |   |   |           |   |   |       |       |   |       |   +- rest FunctionWrapper<Any:<>>
 |   |           |   |   |   |   |           |   |   |       |       |   |       |   |   `- '0123456789abcdefABCDEF'
 |   |           |   |   |   |   |           |   |   |       |       |   |       |   `- first FunctionWrapper<Any:<>>
 |   |           |   |   |   |   |           |   |   |       |       |   |       |       `- '0123456789abcdefABCDEF'
 |   |           |   |   |   |   |           |   |   |       |       |   |       `- TransformationWrapper(<add>)
 |   |           |   |   |   |   |           |   |   |       |       |   `- TransformationWrapper(<add>)
 |   |           |   |   |   |   |           |   |   |       |       `- FunctionWrapper<Any:<>>
 |   |           |   |   |   |   |           |   |   |       |           `- '"$&(*,.02468:@BDFHJLNPRTVXZ\\^`bdfhjlnprtvxz|~!\')+-13579=ACEGIKMOQSUWY[]_acegikmoqsuwy{}'
 |   |           |   |   |   |   |           |   |   |       `- TransformationWrapper(<add>)
 |   |           |   |   |   |   |           |   |   `- TransformationWrapper(<add>)
 |   |           |   |   |   |   |           |   `- TrampolineWrapper<DepthFirst:<>>
 |   |           |   |   |   |   |           |       +- start 0
 |   |           |   |   |   |   |           |       +- stop 1
 |   |           |   |   |   |   |           |       +- rest FunctionWrapper<Literal:<>>
 |   |           |   |   |   |   |           |       |   `- '/'
 |   |           |   |   |   |   |           |       `- first FunctionWrapper<Literal:<>>
 |   |           |   |   |   |   |           |           `- '/'
 |   |           |   |   |   |   |           `- TransformationWrapper(<add>)
 |   |           |   |   |   |   `- TransformationWrapper(<add>)
 |   |           |   |   |   `- TrampolineWrapper<DepthFirst:<>>
 |   |           |   |   |       +- start 0
 |   |           |   |   |       +- stop 1
 |   |           |   |   |       +- rest Transform:<add>
 |   |           |   |   |       |   +- TrampolineWrapper<And:<>>
 |   |           |   |   |       |   |   +- FunctionWrapper<Literal:<>>
 |   |           |   |   |       |   |   |   `- '?'
 |   |           |   |   |       |   |   `- Transform:<add>
 |   |           |   |   |       |   |       +- TrampolineWrapper<DepthFirst:<>>
 |   |           |   |   |       |   |       |   +- start 1
 |   |           |   |   |       |   |       |   +- stop None
 |   |           |   |   |       |   |       |   +- rest TrampolineWrapper<Or:<>>
 |   |           |   |   |       |   |       |   |   +- Transform:<add>
 |   |           |   |   |       |   |       |   |   |   +- TrampolineWrapper<And:<>>
 |   |           |   |   |       |   |       |   |   |   |   +- FunctionWrapper<Literal:<>>
 |   |           |   |   |       |   |       |   |   |   |   |   `- '%'
 |   |           |   |   |       |   |       |   |   |   |   `- Transform:<add>
 |   |           |   |   |       |   |       |   |   |   |       +- TrampolineWrapper<DepthFirst:<>>
 |   |           |   |   |       |   |       |   |   |   |       |   +- start 2
 |   |           |   |   |       |   |       |   |   |   |       |   +- stop 2
 |   |           |   |   |       |   |       |   |   |   |       |   +- rest FunctionWrapper<Any:<>>
 |   |           |   |   |       |   |       |   |   |   |       |   |   `- '0123456789abcdefABCDEF'
 |   |           |   |   |       |   |       |   |   |   |       |   `- first FunctionWrapper<Any:<>>
 |   |           |   |   |       |   |       |   |   |   |       |       `- '0123456789abcdefABCDEF'
 |   |           |   |   |       |   |       |   |   |   |       `- TransformationWrapper(<add>)
 |   |           |   |   |       |   |       |   |   |   `- TransformationWrapper(<add>)
 |   |           |   |   |       |   |       |   |   `- FunctionWrapper<Any:<>>
 |   |           |   |   |       |   |       |   |       `- '"$&(*,.02468:@BDFHJLNPRTVXZ\\^`bdfhjlnprtvxz|~!\')+-13579=ACEGIKMOQSUWY[]_acegikmoqsuwy{}/'
 |   |           |   |   |       |   |       |   `- first TrampolineWrapper<Or:<>>
 |   |           |   |   |       |   |       |       +- Transform:<add>
 |   |           |   |   |       |   |       |       |   +- TrampolineWrapper<And:<>>
 |   |           |   |   |       |   |       |       |   |   +- FunctionWrapper<Literal:<>>
 |   |           |   |   |       |   |       |       |   |   |   `- '%'
 |   |           |   |   |       |   |       |       |   |   `- Transform:<add>
 |   |           |   |   |       |   |       |       |   |       +- TrampolineWrapper<DepthFirst:<>>
 |   |           |   |   |       |   |       |       |   |       |   +- start 2
 |   |           |   |   |       |   |       |       |   |       |   +- stop 2
 |   |           |   |   |       |   |       |       |   |       |   +- rest FunctionWrapper<Any:<>>
 |   |           |   |   |       |   |       |       |   |       |   |   `- '0123456789abcdefABCDEF'
 |   |           |   |   |       |   |       |       |   |       |   `- first FunctionWrapper<Any:<>>
 |   |           |   |   |       |   |       |       |   |       |       `- '0123456789abcdefABCDEF'
 |   |           |   |   |       |   |       |       |   |       `- TransformationWrapper(<add>)
 |   |           |   |   |       |   |       |       |   `- TransformationWrapper(<add>)
 |   |           |   |   |       |   |       |       `- FunctionWrapper<Any:<>>
 |   |           |   |   |       |   |       |           `- '"$&(*,.02468:@BDFHJLNPRTVXZ\\^`bdfhjlnprtvxz|~!\')+-13579=ACEGIKMOQSUWY[]_acegikmoqsuwy{}/'
 |   |           |   |   |       |   |       `- TransformationWrapper(<add>)
 |   |           |   |   |       |   `- TransformationWrapper(<add>)
 |   |           |   |   |       `- first Transform:<add>
 |   |           |   |   |           +- TrampolineWrapper<And:<>>
 |   |           |   |   |           |   +- FunctionWrapper<Literal:<>>
 |   |           |   |   |           |   |   `- '?'
 |   |           |   |   |           |   `- Transform:<add>
 |   |           |   |   |           |       +- TrampolineWrapper<DepthFirst:<>>
 |   |           |   |   |           |       |   +- start 1
 |   |           |   |   |           |       |   +- stop None
 |   |           |   |   |           |       |   +- rest TrampolineWrapper<Or:<>>
 |   |           |   |   |           |       |   |   +- Transform:<add>
 |   |           |   |   |           |       |   |   |   +- TrampolineWrapper<And:<>>
 |   |           |   |   |           |       |   |   |   |   +- FunctionWrapper<Literal:<>>
 |   |           |   |   |           |       |   |   |   |   |   `- '%'
 |   |           |   |   |           |       |   |   |   |   `- Transform:<add>
 |   |           |   |   |           |       |   |   |   |       +- TrampolineWrapper<DepthFirst:<>>
 |   |           |   |   |           |       |   |   |   |       |   +- start 2
 |   |           |   |   |           |       |   |   |   |       |   +- stop 2
 |   |           |   |   |           |       |   |   |   |       |   +- rest FunctionWrapper<Any:<>>
 |   |           |   |   |           |       |   |   |   |       |   |   `- '0123456789abcdefABCDEF'
 |   |           |   |   |           |       |   |   |   |       |   `- first FunctionWrapper<Any:<>>
 |   |           |   |   |           |       |   |   |   |       |       `- '0123456789abcdefABCDEF'
 |   |           |   |   |           |       |   |   |   |       `- TransformationWrapper(<add>)
 |   |           |   |   |           |       |   |   |   `- TransformationWrapper(<add>)
 |   |           |   |   |           |       |   |   `- FunctionWrapper<Any:<>>
 |   |           |   |   |           |       |   |       `- '"$&(*,.02468:@BDFHJLNPRTVXZ\\^`bdfhjlnprtvxz|~!\')+-13579=ACEGIKMOQSUWY[]_acegikmoqsuwy{}/'
 |   |           |   |   |           |       |   `- first TrampolineWrapper<Or:<>>
 |   |           |   |   |           |       |       +- Transform:<add>
 |   |           |   |   |           |       |       |   +- TrampolineWrapper<And:<>>
 |   |           |   |   |           |       |       |   |   +- FunctionWrapper<Literal:<>>
 |   |           |   |   |           |       |       |   |   |   `- '%'
 |   |           |   |   |           |       |       |   |   `- Transform:<add>
 |   |           |   |   |           |       |       |   |       +- TrampolineWrapper<DepthFirst:<>>
 |   |           |   |   |           |       |       |   |       |   +- start 2
 |   |           |   |   |           |       |       |   |       |   +- stop 2
 |   |           |   |   |           |       |       |   |       |   +- rest FunctionWrapper<Any:<>>
 |   |           |   |   |           |       |       |   |       |   |   `- '0123456789abcdefABCDEF'
 |   |           |   |   |           |       |       |   |       |   `- first FunctionWrapper<Any:<>>
 |   |           |   |   |           |       |       |   |       |       `- '0123456789abcdefABCDEF'
 |   |           |   |   |           |       |       |   |       `- TransformationWrapper(<add>)
 |   |           |   |   |           |       |       |   `- TransformationWrapper(<add>)
 |   |           |   |   |           |       |       `- FunctionWrapper<Any:<>>
 |   |           |   |   |           |       |           `- '"$&(*,.02468:@BDFHJLNPRTVXZ\\^`bdfhjlnprtvxz|~!\')+-13579=ACEGIKMOQSUWY[]_acegikmoqsuwy{}/'
 |   |           |   |   |           |       `- TransformationWrapper(<add>)
 |   |           |   |   |           `- TransformationWrapper(<add>)
 |   |           |   |   `- TransformationWrapper(<add>)
 |   |           |   `- TrampolineWrapper<DepthFirst:<>>
 |   |           |       +- start 0
 |   |           |       +- stop 1
 |   |           |       +- rest Transform:<add>
 |   |           |       |   +- TrampolineWrapper<And:<>>
 |   |           |       |   |   +- FunctionWrapper<Literal:<>>
 |   |           |       |   |   |   `- '#'
 |   |           |       |   |   `- Transform:<add>
 |   |           |       |   |       +- TrampolineWrapper<DepthFirst:<>>
 |   |           |       |   |       |   +- start 1
 |   |           |       |   |       |   +- stop None
 |   |           |       |   |       |   +- rest TrampolineWrapper<Or:<>>
 |   |           |       |   |       |   |   +- Transform:<add>
 |   |           |       |   |       |   |   |   +- TrampolineWrapper<And:<>>
 |   |           |       |   |       |   |   |   |   +- FunctionWrapper<Literal:<>>
 |   |           |       |   |       |   |   |   |   |   `- '%'
 |   |           |       |   |       |   |   |   |   `- Transform:<add>
 |   |           |       |   |       |   |   |   |       +- TrampolineWrapper<DepthFirst:<>>
 |   |           |       |   |       |   |   |   |       |   +- start 2
 |   |           |       |   |       |   |   |   |       |   +- stop 2
 |   |           |       |   |       |   |   |   |       |   +- rest FunctionWrapper<Any:<>>
 |   |           |       |   |       |   |   |   |       |   |   `- '0123456789abcdefABCDEF'
 |   |           |       |   |       |   |   |   |       |   `- first FunctionWrapper<Any:<>>
 |   |           |       |   |       |   |   |   |       |       `- '0123456789abcdefABCDEF'
 |   |           |       |   |       |   |   |   |       `- TransformationWrapper(<add>)
 |   |           |       |   |       |   |   |   `- TransformationWrapper(<add>)
 |   |           |       |   |       |   |   `- FunctionWrapper<Any:<>>
 |   |           |       |   |       |   |       `- '"$&(*,.02468:@BDFHJLNPRTVXZ\\^`bdfhjlnprtvxz|~!\')+-13579=ACEGIKMOQSUWY[]_acegikmoqsuwy{}/'
 |   |           |       |   |       |   `- first TrampolineWrapper<Or:<>>
 |   |           |       |   |       |       +- Transform:<add>
 |   |           |       |   |       |       |   +- TrampolineWrapper<And:<>>
 |   |           |       |   |       |       |   |   +- FunctionWrapper<Literal:<>>
 |   |           |       |   |       |       |   |   |   `- '%'
 |   |           |       |   |       |       |   |   `- Transform:<add>
 |   |           |       |   |       |       |   |       +- TrampolineWrapper<DepthFirst:<>>
 |   |           |       |   |       |       |   |       |   +- start 2
 |   |           |       |   |       |       |   |       |   +- stop 2
 |   |           |       |   |       |       |   |       |   +- rest FunctionWrapper<Any:<>>
 |   |           |       |   |       |       |   |       |   |   `- '0123456789abcdefABCDEF'
 |   |           |       |   |       |       |   |       |   `- first FunctionWrapper<Any:<>>
 |   |           |       |   |       |       |   |       |       `- '0123456789abcdefABCDEF'
 |   |           |       |   |       |       |   |       `- TransformationWrapper(<add>)
 |   |           |       |   |       |       |   `- TransformationWrapper(<add>)
 |   |           |       |   |       |       `- FunctionWrapper<Any:<>>
 |   |           |       |   |       |           `- '"$&(*,.02468:@BDFHJLNPRTVXZ\\^`bdfhjlnprtvxz|~!\')+-13579=ACEGIKMOQSUWY[]_acegikmoqsuwy{}/'
 |   |           |       |   |       `- TransformationWrapper(<add>)
 |   |           |       |   `- TransformationWrapper(<add>)
 |   |           |       `- first Transform:<add>
 |   |           |           +- TrampolineWrapper<And:<>>
 |   |           |           |   +- FunctionWrapper<Literal:<>>
 |   |           |           |   |   `- '#'
 |   |           |           |   `- Transform:<add>
 |   |           |           |       +- TrampolineWrapper<DepthFirst:<>>
 |   |           |           |       |   +- start 1
 |   |           |           |       |   +- stop None
 |   |           |           |       |   +- rest TrampolineWrapper<Or:<>>
 |   |           |           |       |   |   +- Transform:<add>
 |   |           |           |       |   |   |   +- TrampolineWrapper<And:<>>
 |   |           |           |       |   |   |   |   +- FunctionWrapper<Literal:<>>
 |   |           |           |       |   |   |   |   |   `- '%'
 |   |           |           |       |   |   |   |   `- Transform:<add>
 |   |           |           |       |   |   |   |       +- TrampolineWrapper<DepthFirst:<>>
 |   |           |           |       |   |   |   |       |   +- start 2
 |   |           |           |       |   |   |   |       |   +- stop 2
 |   |           |           |       |   |   |   |       |   +- rest FunctionWrapper<Any:<>>
 |   |           |           |       |   |   |   |       |   |   `- '0123456789abcdefABCDEF'
 |   |           |           |       |   |   |   |       |   `- first FunctionWrapper<Any:<>>
 |   |           |           |       |   |   |   |       |       `- '0123456789abcdefABCDEF'
 |   |           |           |       |   |   |   |       `- TransformationWrapper(<add>)
 |   |           |           |       |   |   |   `- TransformationWrapper(<add>)
 |   |           |           |       |   |   `- FunctionWrapper<Any:<>>
 |   |           |           |       |   |       `- '"$&(*,.02468:@BDFHJLNPRTVXZ\\^`bdfhjlnprtvxz|~!\')+-13579=ACEGIKMOQSUWY[]_acegikmoqsuwy{}/'
 |   |           |           |       |   `- first TrampolineWrapper<Or:<>>
 |   |           |           |       |       +- Transform:<add>
 |   |           |           |       |       |   +- TrampolineWrapper<And:<>>
 |   |           |           |       |       |   |   +- FunctionWrapper<Literal:<>>
 |   |           |           |       |       |   |   |   `- '%'
 |   |           |           |       |       |   |   `- Transform:<add>
 |   |           |           |       |       |   |       +- TrampolineWrapper<DepthFirst:<>>
 |   |           |           |       |       |   |       |   +- start 2
 |   |           |           |       |       |   |       |   +- stop 2
 |   |           |           |       |       |   |       |   +- rest FunctionWrapper<Any:<>>
 |   |           |           |       |       |   |       |   |   `- '0123456789abcdefABCDEF'
 |   |           |           |       |       |   |       |   `- first FunctionWrapper<Any:<>>
 |   |           |           |       |       |   |       |       `- '0123456789abcdefABCDEF'
 |   |           |           |       |       |   |       `- TransformationWrapper(<add>)
 |   |           |           |       |       |   `- TransformationWrapper(<add>)
 |   |           |           |       |       `- FunctionWrapper<Any:<>>
 |   |           |           |       |           `- '"$&(*,.02468:@BDFHJLNPRTVXZ\\^`bdfhjlnprtvxz|~!\')+-13579=ACEGIKMOQSUWY[]_acegikmoqsuwy{}/'
 |   |           |           |       `- TransformationWrapper(<add>)
 |   |           |           `- TransformationWrapper(<add>)
 |   |           `- TransformationWrapper(<add>)
 |   `- TransformationWrapper(<add>)
 `- FunctionWrapper<Eof:<>>

Plus Memoisation

From: andrew cooke <andrew@...>

Date: Sat, 1 May 2010 17:22:51 -0400

And (of course) with memoisation and repeated similar request, it's even
faster: 0.05s.

Andrew

Comment on this post