<div dir="ltr"><div class="markdown-here-wrapper" style=""><p style="margin:0px 0px 1.2em!important">I will now talk about general design, not specific methods or implementation details. This touches SE-0101.</p>
<p style="margin:0px 0px 1.2em!important">The following are niches for metatype-like types:</p>
<ol style="margin:1.2em 0px;padding-left:2em">
<li style="margin:0.5em 0px">Explicit specialization of functions and expressing specific static types</li>
<li style="margin:0.5em 0px">Dynamic dispatch of <code style="font-size:0.85em;font-family:Consolas,Inconsolata,Courier,monospace;margin:0px 0.15em;padding:0px 0.3em;white-space:pre-wrap;border:1px solid rgb(234,234,234);border-radius:3px;display:inline;background-color:rgb(248,248,248)">static</code> methods</li>
<li style="margin:0.5em 0px">Passing around information about dynamic type; reflection</li>
<li style="margin:0.5em 0px">Container for <code style="font-size:0.85em;font-family:Consolas,Inconsolata,Courier,monospace;margin:0px 0.15em;padding:0px 0.3em;white-space:pre-wrap;border:1px solid rgb(234,234,234);border-radius:3px;display:inline;background-color:rgb(248,248,248)">size</code>, <code style="font-size:0.85em;font-family:Consolas,Inconsolata,Courier,monospace;margin:0px 0.15em;padding:0px 0.3em;white-space:pre-wrap;border:1px solid rgb(234,234,234);border-radius:3px;display:inline;background-color:rgb(248,248,248)">stride</code>, <code style="font-size:0.85em;font-family:Consolas,Inconsolata,Courier,monospace;margin:0px 0.15em;padding:0px 0.3em;white-space:pre-wrap;border:1px solid rgb(234,234,234);border-radius:3px;display:inline;background-color:rgb(248,248,248)">alignment</code></li>
</ol>
<p style="margin:0px 0px 1.2em!important">Basic thoughs on each of them (trying to be objective!):</p>
<ol style="margin:1.2em 0px;padding-left:2em">
<li style="margin:0.5em 0px">We must have a generic type. Even <code style="font-size:0.85em;font-family:Consolas,Inconsolata,Courier,monospace;margin:0px 0.15em;padding:0px 0.3em;white-space:pre-wrap;border:1px solid rgb(234,234,234);border-radius:3px;display:inline;background-color:rgb(248,248,248)">struct Type&lt;T&gt; { }</code> would be enough (I’m not suggesting it). Current <code style="font-size:0.85em;font-family:Consolas,Inconsolata,Courier,monospace;margin:0px 0.15em;padding:0px 0.3em;white-space:pre-wrap;border:1px solid rgb(234,234,234);border-radius:3px;display:inline;background-color:rgb(248,248,248)">T.Type</code> can also do that</li>
<li style="margin:0.5em 0px">Only metatypes (current <code style="font-size:0.85em;font-family:Consolas,Inconsolata,Courier,monospace;margin:0px 0.15em;padding:0px 0.3em;white-space:pre-wrap;border:1px solid rgb(234,234,234);border-radius:3px;display:inline;background-color:rgb(248,248,248)">T.Type</code>) can do that</li>
<li style="margin:0.5em 0px">Is best expressed using a non-generic type like <code style="font-size:0.85em;font-family:Consolas,Inconsolata,Courier,monospace;margin:0px 0.15em;padding:0px 0.3em;white-space:pre-wrap;border:1px solid rgb(234,234,234);border-radius:3px;display:inline;background-color:rgb(248,248,248)">Mirror</code></li>
<li style="margin:0.5em 0px">Can be dropped on top of metatypes (global functions), or <code style="font-size:0.85em;font-family:Consolas,Inconsolata,Courier,monospace;margin:0px 0.15em;padding:0px 0.3em;white-space:pre-wrap;border:1px solid rgb(234,234,234);border-radius:3px;display:inline;background-color:rgb(248,248,248)">Mirror</code> (properties plus global functions) or whatever custom type (properties).</li>
</ol>
<p style="margin:0px 0px 1.2em!important">So, we give (2) to metatypes, because we must do so, and give (3) to <code style="font-size:0.85em;font-family:Consolas,Inconsolata,Courier,monospace;margin:0px 0.15em;padding:0px 0.3em;white-space:pre-wrap;border:1px solid rgb(234,234,234);border-radius:3px;display:inline;background-color:rgb(248,248,248)">Mirror</code>.<br>Now to opinionated side. The following are solutions I could come up with:</p>
<ol style="margin:1.2em 0px;padding-left:2em">
<li style="margin:0.5em 0px">Current state of things<ul style="margin:1.2em 0px;padding-left:2em;margin:0px;padding-left:1em">
<li style="margin:0.5em 0px">Metatypes do (1)</li>
<li style="margin:0.5em 0px">Global functions on metatypes do (4)</li>
<li style="margin:0.5em 0px"><code style="font-size:0.85em;font-family:Consolas,Inconsolata,Courier,monospace;margin:0px 0.15em;padding:0px 0.3em;white-space:pre-wrap;border:1px solid rgb(234,234,234);border-radius:3px;display:inline;background-color:rgb(248,248,248)">Pro</code> No extra entities, just metatypes and <code style="font-size:0.85em;font-family:Consolas,Inconsolata,Courier,monospace;margin:0px 0.15em;padding:0px 0.3em;white-space:pre-wrap;border:1px solid rgb(234,234,234);border-radius:3px;display:inline;background-color:rgb(248,248,248)">Mirror</code></li>
<li style="margin:0.5em 0px"><code style="font-size:0.85em;font-family:Consolas,Inconsolata,Courier,monospace;margin:0px 0.15em;padding:0px 0.3em;white-space:pre-wrap;border:1px solid rgb(234,234,234);border-radius:3px;display:inline;background-color:rgb(248,248,248)">Pro</code> Functions on metatypes are not perfect, but they are “good enough”</li>
<li style="margin:0.5em 0px"><code style="font-size:0.85em;font-family:Consolas,Inconsolata,Courier,monospace;margin:0px 0.15em;padding:0px 0.3em;white-space:pre-wrap;border:1px solid rgb(234,234,234);border-radius:3px;display:inline;background-color:rgb(248,248,248)">Con</code> Mixed static type instances and metatypes. Value of passed metatypes is often ignored</li>
<li style="margin:0.5em 0px"><code style="font-size:0.85em;font-family:Consolas,Inconsolata,Courier,monospace;margin:0px 0.15em;padding:0px 0.3em;white-space:pre-wrap;border:1px solid rgb(234,234,234);border-radius:3px;display:inline;background-color:rgb(248,248,248)">Con</code> Some people hate global functions (although they are right solution for “methods of metatypes”)</li>
</ul>
</li>
<li style="margin:0.5em 0px">Proposal of this thread; <code style="font-size:0.85em;font-family:Consolas,Inconsolata,Courier,monospace;margin:0px 0.15em;padding:0px 0.3em;white-space:pre-wrap;border:1px solid rgb(234,234,234);border-radius:3px;display:inline;background-color:rgb(248,248,248)">Type&lt;T&gt;</code> struct<ul style="margin:1.2em 0px;padding-left:2em;margin:0px;padding-left:1em">
<li style="margin:0.5em 0px"><code style="font-size:0.85em;font-family:Consolas,Inconsolata,Courier,monospace;margin:0px 0.15em;padding:0px 0.3em;white-space:pre-wrap;border:1px solid rgb(234,234,234);border-radius:3px;display:inline;background-color:rgb(248,248,248)">Type&lt;T&gt;</code> is a wrapper for metatypes</li>
<li style="margin:0.5em 0px">The shortest syntax (<code style="font-size:0.85em;font-family:Consolas,Inconsolata,Courier,monospace;margin:0px 0.15em;padding:0px 0.3em;white-space:pre-wrap;border:1px solid rgb(234,234,234);border-radius:3px;display:inline;background-color:rgb(248,248,248)">.self</code> and type literals) is passed from metatypes to <code style="font-size:0.85em;font-family:Consolas,Inconsolata,Courier,monospace;margin:0px 0.15em;padding:0px 0.3em;white-space:pre-wrap;border:1px solid rgb(234,234,234);border-radius:3px;display:inline;background-color:rgb(248,248,248)">Type&lt;T&gt;</code></li>
<li style="margin:0.5em 0px"><code style="font-size:0.85em;font-family:Consolas,Inconsolata,Courier,monospace;margin:0px 0.15em;padding:0px 0.3em;white-space:pre-wrap;border:1px solid rgb(234,234,234);border-radius:3px;display:inline;background-color:rgb(248,248,248)">Type&lt;T&gt;</code> does (1) and (4)</li>
<li style="margin:0.5em 0px"><code style="font-size:0.85em;font-family:Consolas,Inconsolata,Courier,monospace;margin:0px 0.15em;padding:0px 0.3em;white-space:pre-wrap;border:1px solid rgb(234,234,234);border-radius:3px;display:inline;background-color:rgb(248,248,248)">Pro</code> Groups of <code style="font-size:0.85em;font-family:Consolas,Inconsolata,Courier,monospace;margin:0px 0.15em;padding:0px 0.3em;white-space:pre-wrap;border:1px solid rgb(234,234,234);border-radius:3px;display:inline;background-color:rgb(248,248,248)">size</code>, <code style="font-size:0.85em;font-family:Consolas,Inconsolata,Courier,monospace;margin:0px 0.15em;padding:0px 0.3em;white-space:pre-wrap;border:1px solid rgb(234,234,234);border-radius:3px;display:inline;background-color:rgb(248,248,248)">stride</code>, <code style="font-size:0.85em;font-family:Consolas,Inconsolata,Courier,monospace;margin:0px 0.15em;padding:0px 0.3em;white-space:pre-wrap;border:1px solid rgb(234,234,234);border-radius:3px;display:inline;background-color:rgb(248,248,248)">alignment</code> in a logical context</li>
<li style="margin:0.5em 0px"><code style="font-size:0.85em;font-family:Consolas,Inconsolata,Courier,monospace;margin:0px 0.15em;padding:0px 0.3em;white-space:pre-wrap;border:1px solid rgb(234,234,234);border-radius:3px;display:inline;background-color:rgb(248,248,248)">Con</code> Again, mixed static type instances and <code style="font-size:0.85em;font-family:Consolas,Inconsolata,Courier,monospace;margin:0px 0.15em;padding:0px 0.3em;white-space:pre-wrap;border:1px solid rgb(234,234,234);border-radius:3px;display:inline;background-color:rgb(248,248,248)">Type&lt;T&gt;</code></li>
<li style="margin:0.5em 0px"><code style="font-size:0.85em;font-family:Consolas,Inconsolata,Courier,monospace;margin:0px 0.15em;padding:0px 0.3em;white-space:pre-wrap;border:1px solid rgb(234,234,234);border-radius:3px;display:inline;background-color:rgb(248,248,248)">Con</code> Additional entity <code style="font-size:0.85em;font-family:Consolas,Inconsolata,Courier,monospace;margin:0px 0.15em;padding:0px 0.3em;white-space:pre-wrap;border:1px solid rgb(234,234,234);border-radius:3px;display:inline;background-color:rgb(248,248,248)">Type&lt;T&gt;</code></li>
<li style="margin:0.5em 0px"><code style="font-size:0.85em;font-family:Consolas,Inconsolata,Courier,monospace;margin:0px 0.15em;padding:0px 0.3em;white-space:pre-wrap;border:1px solid rgb(234,234,234);border-radius:3px;display:inline;background-color:rgb(248,248,248)">Con</code> <code style="font-size:0.85em;font-family:Consolas,Inconsolata,Courier,monospace;margin:0px 0.15em;padding:0px 0.3em;white-space:pre-wrap;border:1px solid rgb(234,234,234);border-radius:3px;display:inline;background-color:rgb(248,248,248)">Type&lt;T&gt;</code> partially takes work of <code style="font-size:0.85em;font-family:Consolas,Inconsolata,Courier,monospace;margin:0px 0.15em;padding:0px 0.3em;white-space:pre-wrap;border:1px solid rgb(234,234,234);border-radius:3px;display:inline;background-color:rgb(248,248,248)">Mirror</code> (dynamic <code style="font-size:0.85em;font-family:Consolas,Inconsolata,Courier,monospace;margin:0px 0.15em;padding:0px 0.3em;white-space:pre-wrap;border:1px solid rgb(234,234,234);border-radius:3px;display:inline;background-color:rgb(248,248,248)">size</code>, <code style="font-size:0.85em;font-family:Consolas,Inconsolata,Courier,monospace;margin:0px 0.15em;padding:0px 0.3em;white-space:pre-wrap;border:1px solid rgb(234,234,234);border-radius:3px;display:inline;background-color:rgb(248,248,248)">stride</code>, <code style="font-size:0.85em;font-family:Consolas,Inconsolata,Courier,monospace;margin:0px 0.15em;padding:0px 0.3em;white-space:pre-wrap;border:1px solid rgb(234,234,234);border-radius:3px;display:inline;background-color:rgb(248,248,248)">align</code>)</li>
</ul>
</li>
<li style="margin:0.5em 0px"><code style="font-size:0.85em;font-family:Consolas,Inconsolata,Courier,monospace;margin:0px 0.15em;padding:0px 0.3em;white-space:pre-wrap;border:1px solid rgb(234,234,234);border-radius:3px;display:inline;background-color:rgb(248,248,248)">MemoryLayout</code> proposal<ul style="margin:1.2em 0px;padding-left:2em;margin:0px;padding-left:1em">
<li style="margin:0.5em 0px">Metatypes do (1)</li>
<li style="margin:0.5em 0px"><code style="font-size:0.85em;font-family:Consolas,Inconsolata,Courier,monospace;margin:0px 0.15em;padding:0px 0.3em;white-space:pre-wrap;border:1px solid rgb(234,234,234);border-radius:3px;display:inline;background-color:rgb(248,248,248)">MemoryLayout&lt;T&gt;</code> contains <code style="font-size:0.85em;font-family:Consolas,Inconsolata,Courier,monospace;margin:0px 0.15em;padding:0px 0.3em;white-space:pre-wrap;border:1px solid rgb(234,234,234);border-radius:3px;display:inline;background-color:rgb(248,248,248)">size</code>, <code style="font-size:0.85em;font-family:Consolas,Inconsolata,Courier,monospace;margin:0px 0.15em;padding:0px 0.3em;white-space:pre-wrap;border:1px solid rgb(234,234,234);border-radius:3px;display:inline;background-color:rgb(248,248,248)">stride</code>, <code style="font-size:0.85em;font-family:Consolas,Inconsolata,Courier,monospace;margin:0px 0.15em;padding:0px 0.3em;white-space:pre-wrap;border:1px solid rgb(234,234,234);border-radius:3px;display:inline;background-color:rgb(248,248,248)">alignment</code></li>
<li style="margin:0.5em 0px"><code style="font-size:0.85em;font-family:Consolas,Inconsolata,Courier,monospace;margin:0px 0.15em;padding:0px 0.3em;white-space:pre-wrap;border:1px solid rgb(234,234,234);border-radius:3px;display:inline;background-color:rgb(248,248,248)">Con</code> Again, mixed static type instances and metatypes</li>
<li style="margin:0.5em 0px"><code style="font-size:0.85em;font-family:Consolas,Inconsolata,Courier,monospace;margin:0px 0.15em;padding:0px 0.3em;white-space:pre-wrap;border:1px solid rgb(234,234,234);border-radius:3px;display:inline;background-color:rgb(248,248,248)">Con</code> Additional <code style="font-size:0.85em;font-family:Consolas,Inconsolata,Courier,monospace;margin:0px 0.15em;padding:0px 0.3em;white-space:pre-wrap;border:1px solid rgb(234,234,234);border-radius:3px;display:inline;background-color:rgb(248,248,248)">MemoryLayout</code> entity, which only hosts 3 functions</li>
<li style="margin:0.5em 0px"><code style="font-size:0.85em;font-family:Consolas,Inconsolata,Courier,monospace;margin:0px 0.15em;padding:0px 0.3em;white-space:pre-wrap;border:1px solid rgb(234,234,234);border-radius:3px;display:inline;background-color:rgb(248,248,248)">Con</code> <code style="font-size:0.85em;font-family:Consolas,Inconsolata,Courier,monospace;margin:0px 0.15em;padding:0px 0.3em;white-space:pre-wrap;border:1px solid rgb(234,234,234);border-radius:3px;display:inline;background-color:rgb(248,248,248)">MemoryLayout&lt;T&gt;</code> is not able to get size of <code style="font-size:0.85em;font-family:Consolas,Inconsolata,Courier,monospace;margin:0px 0.15em;padding:0px 0.3em;white-space:pre-wrap;border:1px solid rgb(234,234,234);border-radius:3px;display:inline;background-color:rgb(248,248,248)">dynamicType</code> by design</li>
</ul>
</li>
<li style="margin:0.5em 0px">My suggestion <code style="font-size:0.85em;font-family:Consolas,Inconsolata,Courier,monospace;margin:0px 0.15em;padding:0px 0.3em;white-space:pre-wrap;border:1px solid rgb(234,234,234);border-radius:3px;display:inline;background-color:rgb(248,248,248)">#1</code><ul style="margin:1.2em 0px;padding-left:2em;margin:0px;padding-left:1em">
<li style="margin:0.5em 0px">Allow labelless initialization of <code style="font-size:0.85em;font-family:Consolas,Inconsolata,Courier,monospace;margin:0px 0.15em;padding:0px 0.3em;white-space:pre-wrap;border:1px solid rgb(234,234,234);border-radius:3px;display:inline;background-color:rgb(248,248,248)">Mirror</code> from metatype or from value</li>
<li style="margin:0.5em 0px">Move dynamic <code style="font-size:0.85em;font-family:Consolas,Inconsolata,Courier,monospace;margin:0px 0.15em;padding:0px 0.3em;white-space:pre-wrap;border:1px solid rgb(234,234,234);border-radius:3px;display:inline;background-color:rgb(248,248,248)">size</code>, <code style="font-size:0.85em;font-family:Consolas,Inconsolata,Courier,monospace;margin:0px 0.15em;padding:0px 0.3em;white-space:pre-wrap;border:1px solid rgb(234,234,234);border-radius:3px;display:inline;background-color:rgb(248,248,248)">stride</code>, <code style="font-size:0.85em;font-family:Consolas,Inconsolata,Courier,monospace;margin:0px 0.15em;padding:0px 0.3em;white-space:pre-wrap;border:1px solid rgb(234,234,234);border-radius:3px;display:inline;background-color:rgb(248,248,248)">alignment</code> to <code style="font-size:0.85em;font-family:Consolas,Inconsolata,Courier,monospace;margin:0px 0.15em;padding:0px 0.3em;white-space:pre-wrap;border:1px solid rgb(234,234,234);border-radius:3px;display:inline;background-color:rgb(248,248,248)">Mirror</code></li>
<li style="margin:0.5em 0px">Leave static <code style="font-size:0.85em;font-family:Consolas,Inconsolata,Courier,monospace;margin:0px 0.15em;padding:0px 0.3em;white-space:pre-wrap;border:1px solid rgb(234,234,234);border-radius:3px;display:inline;background-color:rgb(248,248,248)">size</code>, <code style="font-size:0.85em;font-family:Consolas,Inconsolata,Courier,monospace;margin:0px 0.15em;padding:0px 0.3em;white-space:pre-wrap;border:1px solid rgb(234,234,234);border-radius:3px;display:inline;background-color:rgb(248,248,248)">stride</code>, <code style="font-size:0.85em;font-family:Consolas,Inconsolata,Courier,monospace;margin:0px 0.15em;padding:0px 0.3em;white-space:pre-wrap;border:1px solid rgb(234,234,234);border-radius:3px;display:inline;background-color:rgb(248,248,248)">alignment</code> as global functions</li>
<li style="margin:0.5em 0px"><code style="font-size:0.85em;font-family:Consolas,Inconsolata,Courier,monospace;margin:0px 0.15em;padding:0px 0.3em;white-space:pre-wrap;border:1px solid rgb(234,234,234);border-radius:3px;display:inline;background-color:rgb(248,248,248)">Pro</code> Does not introduce new entities</li>
<li style="margin:0.5em 0px"><code style="font-size:0.85em;font-family:Consolas,Inconsolata,Courier,monospace;margin:0px 0.15em;padding:0px 0.3em;white-space:pre-wrap;border:1px solid rgb(234,234,234);border-radius:3px;display:inline;background-color:rgb(248,248,248)">Pro</code> I feel like this is the perfect place for dynamic <code style="font-size:0.85em;font-family:Consolas,Inconsolata,Courier,monospace;margin:0px 0.15em;padding:0px 0.3em;white-space:pre-wrap;border:1px solid rgb(234,234,234);border-radius:3px;display:inline;background-color:rgb(248,248,248)">size</code>, <code style="font-size:0.85em;font-family:Consolas,Inconsolata,Courier,monospace;margin:0px 0.15em;padding:0px 0.3em;white-space:pre-wrap;border:1px solid rgb(234,234,234);border-radius:3px;display:inline;background-color:rgb(248,248,248)">stride</code>, <code style="font-size:0.85em;font-family:Consolas,Inconsolata,Courier,monospace;margin:0px 0.15em;padding:0px 0.3em;white-space:pre-wrap;border:1px solid rgb(234,234,234);border-radius:3px;display:inline;background-color:rgb(248,248,248)">alignment</code></li>
<li style="margin:0.5em 0px"><code style="font-size:0.85em;font-family:Consolas,Inconsolata,Courier,monospace;margin:0px 0.15em;padding:0px 0.3em;white-space:pre-wrap;border:1px solid rgb(234,234,234);border-radius:3px;display:inline;background-color:rgb(248,248,248)">Con</code> Again, mixed static type instances and metatypes</li>
<li style="margin:0.5em 0px"><code style="font-size:0.85em;font-family:Consolas,Inconsolata,Courier,monospace;margin:0px 0.15em;padding:0px 0.3em;white-space:pre-wrap;border:1px solid rgb(234,234,234);border-radius:3px;display:inline;background-color:rgb(248,248,248)">Con</code> Global functions. I’m fine with them, but some people don’t like them</li>
</ul>
</li>
<li style="margin:0.5em 0px">My suggestion <code style="font-size:0.85em;font-family:Consolas,Inconsolata,Courier,monospace;margin:0px 0.15em;padding:0px 0.3em;white-space:pre-wrap;border:1px solid rgb(234,234,234);border-radius:3px;display:inline;background-color:rgb(248,248,248)">#2</code><ul style="margin:1.2em 0px;padding-left:2em;margin:0px;padding-left:1em">
<li style="margin:0.5em 0px">Allow labelless initialization of <code style="font-size:0.85em;font-family:Consolas,Inconsolata,Courier,monospace;margin:0px 0.15em;padding:0px 0.3em;white-space:pre-wrap;border:1px solid rgb(234,234,234);border-radius:3px;display:inline;background-color:rgb(248,248,248)">Mirror</code> from metatype or from value</li>
<li style="margin:0.5em 0px">Move dynamic <code style="font-size:0.85em;font-family:Consolas,Inconsolata,Courier,monospace;margin:0px 0.15em;padding:0px 0.3em;white-space:pre-wrap;border:1px solid rgb(234,234,234);border-radius:3px;display:inline;background-color:rgb(248,248,248)">size</code>, <code style="font-size:0.85em;font-family:Consolas,Inconsolata,Courier,monospace;margin:0px 0.15em;padding:0px 0.3em;white-space:pre-wrap;border:1px solid rgb(234,234,234);border-radius:3px;display:inline;background-color:rgb(248,248,248)">stride</code>, <code style="font-size:0.85em;font-family:Consolas,Inconsolata,Courier,monospace;margin:0px 0.15em;padding:0px 0.3em;white-space:pre-wrap;border:1px solid rgb(234,234,234);border-radius:3px;display:inline;background-color:rgb(248,248,248)">alignment</code> to <code style="font-size:0.85em;font-family:Consolas,Inconsolata,Courier,monospace;margin:0px 0.15em;padding:0px 0.3em;white-space:pre-wrap;border:1px solid rgb(234,234,234);border-radius:3px;display:inline;background-color:rgb(248,248,248)">Mirror</code></li>
<li style="margin:0.5em 0px"><code style="font-size:0.85em;font-family:Consolas,Inconsolata,Courier,monospace;margin:0px 0.15em;padding:0px 0.3em;white-space:pre-wrap;border:1px solid rgb(234,234,234);border-radius:3px;display:inline;background-color:rgb(248,248,248)">T.self</code> and future type literals will create instances of <code style="font-size:0.85em;font-family:Consolas,Inconsolata,Courier,monospace;margin:0px 0.15em;padding:0px 0.3em;white-space:pre-wrap;border:1px solid rgb(234,234,234);border-radius:3px;display:inline;background-color:rgb(248,248,248)">Type&lt;T&gt;</code></li>
</ul>
</li>
</ol>
<pre style="font-size:0.85em;font-family:Consolas,Inconsolata,Courier,monospace;font-size:1em;line-height:1.2em;margin:1.2em 0px"><code class="hljs language-swift" style="font-size:0.85em;font-family:Consolas,Inconsolata,Courier,monospace;margin:0px 0.15em;padding:0px 0.3em;white-space:pre-wrap;border:1px solid rgb(234,234,234);border-radius:3px;display:inline;background-color:rgb(248,248,248);white-space:pre;overflow:auto;border-radius:3px;border:1px solid rgb(204,204,204);padding:0.5em 0.7em;display:block!important;display:block;overflow-x:auto;padding:0.5em;color:rgb(51,51,51);background:rgb(248,248,248)"><span class="hljs-class"><span class="hljs-keyword" style="color:rgb(51,51,51);font-weight:bold">struct</span> <span class="hljs-title" style="color:rgb(153,0,0);font-weight:bold;color:rgb(68,85,136);font-weight:bold">Type</span>&lt;<span class="hljs-title" style="color:rgb(153,0,0);font-weight:bold;color:rgb(68,85,136);font-weight:bold">T</span>&gt; </span>{
    <span class="hljs-keyword" style="color:rgb(51,51,51);font-weight:bold">init</span>()

    <span class="hljs-keyword" style="color:rgb(51,51,51);font-weight:bold">var</span> size: <span class="hljs-type" style="color:rgb(68,85,136);font-weight:bold">Int</span> { <span class="hljs-keyword" style="color:rgb(51,51,51);font-weight:bold">return</span> <span class="hljs-built_in" style="color:rgb(0,134,179)">sizeof</span>(<span class="hljs-type" style="color:rgb(68,85,136);font-weight:bold">T</span>.<span class="hljs-keyword" style="color:rgb(51,51,51);font-weight:bold">self</span>) }
    <span class="hljs-keyword" style="color:rgb(51,51,51);font-weight:bold">var</span> stride: <span class="hljs-type" style="color:rgb(68,85,136);font-weight:bold">Int</span> { <span class="hljs-keyword" style="color:rgb(51,51,51);font-weight:bold">return</span> <span class="hljs-built_in" style="color:rgb(0,134,179)">strideof</span>(<span class="hljs-type" style="color:rgb(68,85,136);font-weight:bold">T</span>.<span class="hljs-keyword" style="color:rgb(51,51,51);font-weight:bold">self</span>) }
    <span class="hljs-keyword" style="color:rgb(51,51,51);font-weight:bold">var</span> alignment: <span class="hljs-type" style="color:rgb(68,85,136);font-weight:bold">Int</span> { <span class="hljs-keyword" style="color:rgb(51,51,51);font-weight:bold">return</span> <span class="hljs-built_in" style="color:rgb(0,134,179)">alignof</span>(<span class="hljs-type" style="color:rgb(68,85,136);font-weight:bold">T</span>.<span class="hljs-keyword" style="color:rgb(51,51,51);font-weight:bold">self</span>) }
    <span class="hljs-keyword" style="color:rgb(51,51,51);font-weight:bold">static</span> <span class="hljs-keyword" style="color:rgb(51,51,51);font-weight:bold">var</span> size: <span class="hljs-type" style="color:rgb(68,85,136);font-weight:bold">Int</span> { <span class="hljs-keyword" style="color:rgb(51,51,51);font-weight:bold">return</span> <span class="hljs-built_in" style="color:rgb(0,134,179)">sizeof</span>(<span class="hljs-type" style="color:rgb(68,85,136);font-weight:bold">T</span>.<span class="hljs-keyword" style="color:rgb(51,51,51);font-weight:bold">self</span>) }
    <span class="hljs-keyword" style="color:rgb(51,51,51);font-weight:bold">static</span> <span class="hljs-keyword" style="color:rgb(51,51,51);font-weight:bold">var</span> stride: <span class="hljs-type" style="color:rgb(68,85,136);font-weight:bold">Int</span> { <span class="hljs-keyword" style="color:rgb(51,51,51);font-weight:bold">return</span> <span class="hljs-built_in" style="color:rgb(0,134,179)">strideof</span>(<span class="hljs-type" style="color:rgb(68,85,136);font-weight:bold">T</span>.<span class="hljs-keyword" style="color:rgb(51,51,51);font-weight:bold">self</span>) }
    <span class="hljs-keyword" style="color:rgb(51,51,51);font-weight:bold">static</span> <span class="hljs-keyword" style="color:rgb(51,51,51);font-weight:bold">var</span> alignment: <span class="hljs-type" style="color:rgb(68,85,136);font-weight:bold">Int</span> { <span class="hljs-keyword" style="color:rgb(51,51,51);font-weight:bold">return</span> <span class="hljs-built_in" style="color:rgb(0,134,179)">alignof</span>(<span class="hljs-type" style="color:rgb(68,85,136);font-weight:bold">T</span>.<span class="hljs-keyword" style="color:rgb(51,51,51);font-weight:bold">self</span>) }

    <span class="hljs-keyword" style="color:rgb(51,51,51);font-weight:bold">var</span> metatype: <span class="hljs-type" style="color:rgb(68,85,136);font-weight:bold">Metatype</span>&lt;<span class="hljs-type" style="color:rgb(68,85,136);font-weight:bold">T</span>&gt; { <span class="hljs-keyword" style="color:rgb(51,51,51);font-weight:bold">return</span> <span class="hljs-type" style="color:rgb(68,85,136);font-weight:bold">T</span>.metatype }
    <span class="hljs-keyword" style="color:rgb(51,51,51);font-weight:bold">static</span> <span class="hljs-keyword" style="color:rgb(51,51,51);font-weight:bold">var</span> metatype: <span class="hljs-type" style="color:rgb(68,85,136);font-weight:bold">Metatype</span>&lt;<span class="hljs-type" style="color:rgb(68,85,136);font-weight:bold">T</span>&gt; { <span class="hljs-keyword" style="color:rgb(51,51,51);font-weight:bold">return</span> <span class="hljs-type" style="color:rgb(68,85,136);font-weight:bold">T</span>.metatype }

    <span class="hljs-comment" style="color:rgb(153,153,136);font-style:italic">// Nothing more; no fields!</span>
}
</code></pre>
<ul style="margin:1.2em 0px;padding-left:2em">
<li style="margin:0.5em 0px">Metatypes will be typically created using <code style="font-size:0.85em;font-family:Consolas,Inconsolata,Courier,monospace;margin:0px 0.15em;padding:0px 0.3em;white-space:pre-wrap;border:1px solid rgb(234,234,234);border-radius:3px;display:inline;background-color:rgb(248,248,248)">Type&lt;T&gt;.metatype</code> and <code style="font-size:0.85em;font-family:Consolas,Inconsolata,Courier,monospace;margin:0px 0.15em;padding:0px 0.3em;white-space:pre-wrap;border:1px solid rgb(234,234,234);border-radius:3px;display:inline;background-color:rgb(248,248,248)">dynamicType</code></li>
<li style="margin:0.5em 0px"><code style="font-size:0.85em;font-family:Consolas,Inconsolata,Courier,monospace;margin:0px 0.15em;padding:0px 0.3em;white-space:pre-wrap;border:1px solid rgb(234,234,234);border-radius:3px;display:inline;background-color:rgb(248,248,248)">Pro</code> Both static and dynamic <code style="font-size:0.85em;font-family:Consolas,Inconsolata,Courier,monospace;margin:0px 0.15em;padding:0px 0.3em;white-space:pre-wrap;border:1px solid rgb(234,234,234);border-radius:3px;display:inline;background-color:rgb(248,248,248)">size</code>, <code style="font-size:0.85em;font-family:Consolas,Inconsolata,Courier,monospace;margin:0px 0.15em;padding:0px 0.3em;white-space:pre-wrap;border:1px solid rgb(234,234,234);border-radius:3px;display:inline;background-color:rgb(248,248,248)">stride</code>, <code style="font-size:0.85em;font-family:Consolas,Inconsolata,Courier,monospace;margin:0px 0.15em;padding:0px 0.3em;white-space:pre-wrap;border:1px solid rgb(234,234,234);border-radius:3px;display:inline;background-color:rgb(248,248,248)">alignment</code> are in logically suited contexts</li>
<li style="margin:0.5em 0px"><code style="font-size:0.85em;font-family:Consolas,Inconsolata,Courier,monospace;margin:0px 0.15em;padding:0px 0.3em;white-space:pre-wrap;border:1px solid rgb(234,234,234);border-radius:3px;display:inline;background-color:rgb(248,248,248)">Pro</code> Metatypes (with which few people will work) are separated from static types (which are used for function specialization etc)</li>
<li style="margin:0.5em 0px"><code style="font-size:0.85em;font-family:Consolas,Inconsolata,Courier,monospace;margin:0px 0.15em;padding:0px 0.3em;white-space:pre-wrap;border:1px solid rgb(234,234,234);border-radius:3px;display:inline;background-color:rgb(248,248,248)">Con</code> Additional entity <code style="font-size:0.85em;font-family:Consolas,Inconsolata,Courier,monospace;margin:0px 0.15em;padding:0px 0.3em;white-space:pre-wrap;border:1px solid rgb(234,234,234);border-radius:3px;display:inline;background-color:rgb(248,248,248)">Type&lt;T&gt;</code>, but I think it’s the most elegant of all solutions that introduce additional types</li>
</ul>
<p style="margin:0px 0px 1.2em!important">I will prepare a separate proposal with this last option.</p>
<div title="MDH:PGRpdiBjbGFzcz0iZ21haWxfZXh0cmEiPlNlY29uZCB0cnkgYXQgZXhwcmVzc2luZyBteSBpZGVh
cy4gSSB3aWxsIG5vdyB0YWxrIGFib3V0IGdlbmVyYWwgZGVzaWduLCBub3Qgc3BlY2lmaWMgbWV0
aG9kcyBvciBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzLjwvZGl2PjxkaXYgY2xhc3M9ImdtYWlsX2V4
dHJhIj48YnI+PC9kaXY+PGRpdiBjbGFzcz0iZ21haWxfZXh0cmEiPlRoZSBmb2xsb3dpbmcgYXJl
IG5pY2hlcyBmb3IgbWV0YXR5cGUtbGlrZSB0eXBlczo8L2Rpdj48ZGl2IGNsYXNzPSJnbWFpbF9l
eHRyYSI+PGJyPjwvZGl2PjxkaXYgY2xhc3M9ImdtYWlsX2V4dHJhIj4xLiBFeHBsaWNpdCBzcGVj
aWFsaXphdGlvbiBvZiBmdW5jdGlvbnMgYW5kIGV4cHJlc3Npbmcgc3BlY2lmaWMgc3RhdGljIHR5
cGVzPC9kaXY+Mi4gRHluYW1pYyBkaXNwYXRjaCBvZiBgc3RhdGljYCBtZXRob2RzPGRpdiBjbGFz
cz0iZ21haWxfZXh0cmEiPjMuIFBhc3NpbmcgYXJvdW5kIGluZm9ybWF0aW9uIGFib3V0IGR5bmFt
aWMgdHlwZTsgcmVmbGVjdGlvbjwvZGl2PjxkaXYgY2xhc3M9ImdtYWlsX2V4dHJhIj40LiBDb250
YWluZXIgZm9yIGBzaXplYCwgYHN0cmlkZWAsIGBhbGlnbm1lbnRgPC9kaXY+PGRpdiBjbGFzcz0i
Z21haWxfZXh0cmEiPjxicj48L2Rpdj48ZGl2IGNsYXNzPSJnbWFpbF9leHRyYSI+QmFzaWMgdGhv
dWdocyBvbiBlYWNoIG9mIHRoZW0gKHRyeWluZyB0byBiZSBvYmplY3RpdmUhKTo8L2Rpdj48ZGl2
IGNsYXNzPSJnbWFpbF9leHRyYSI+PGJyPjwvZGl2PjxkaXYgY2xhc3M9ImdtYWlsX2V4dHJhIj4x
LiBXZSBtdXN0IGhhdmUgYSBnZW5lcmljIHR5cGUuIEV2ZW4gYHN0cnVjdCBUeXBlJmx0O1QmZ3Q7
IHsgfWAgd291bGQgYmUgZW5vdWdoIChJJ20gbm90IHN1Z2dlc3RpbmcgaXQpLiBDdXJyZW50IGBU
LlR5cGVgIGNhbiBhbHNvIGRvIHRoYXQ8L2Rpdj48ZGl2IGNsYXNzPSJnbWFpbF9leHRyYSI+Mi4g
T25seSBtZXRhdHlwZXMgKGN1cnJlbnQgYFQuVHlwZWApIGNhbiBkbyB0aGF0PC9kaXY+PGRpdiBj
bGFzcz0iZ21haWxfZXh0cmEiPjMuIElzIGJlc3QgZXhwcmVzc2VkIHVzaW5nIGEgbm9uLWdlbmVy
aWMgdHlwZSBsaWtlIGBNaXJyb3JgPC9kaXY+PGRpdiBjbGFzcz0iZ21haWxfZXh0cmEiPjQuIENh
biBiZSBkcm9wcGVkIG9uIHRvcCBvZiBtZXRhdHlwZXMgKGdsb2JhbCBmdW5jdGlvbnMpLCBvciBg
TWlycm9yYCAocHJvcGVydGllcyBwbHVzIGdsb2JhbCBmdW5jdGlvbnMpIG9yIHdoYXRldmVyIGN1
c3RvbSB0eXBlIChwcm9wZXJ0aWVzKS48L2Rpdj48ZGl2IGNsYXNzPSJnbWFpbF9leHRyYSI+PGJy
PjwvZGl2PjxkaXYgY2xhc3M9ImdtYWlsX2V4dHJhIj5Tbywgd2UgZ2l2ZSAoMikgdG8gbWV0YXR5
cGVzLCBiZWNhdXNlIHdlIG11c3QgZG8gc28sIGFuZCBnaXZlICgzKSB0byBgTWlycm9yYC48L2Rp
dj48ZGl2IGNsYXNzPSJnbWFpbF9leHRyYSI+Tm93IHRvIG9waW5pb25hdGVkIHNpZGUuIFRoZSBm
b2xsb3dpbmcgYXJlIHNvbHV0aW9ucyBJIGNvdWxkIGNvbWUgdXAgd2l0aDo8L2Rpdj48ZGl2IGNs
YXNzPSJnbWFpbF9leHRyYSI+PGJyPjwvZGl2PjxkaXYgY2xhc3M9ImdtYWlsX2V4dHJhIj4xLiBD
dXJyZW50IHN0YXRlIG9mIHRoaW5nczwvZGl2PjxkaXYgY2xhc3M9ImdtYWlsX2V4dHJhIj4mbmJz
cDsgKiBNZXRhdHlwZXMgZG8gKDEpPC9kaXY+PGRpdiBjbGFzcz0iZ21haWxfZXh0cmEiPiZuYnNw
OyAqIEdsb2JhbCBmdW5jdGlvbnMgb24gbWV0YXR5cGVzIGRvICg0KTwvZGl2PjxkaXYgY2xhc3M9
ImdtYWlsX2V4dHJhIj4mbmJzcDsgKiBgUHJvYCBObyBleHRyYSBlbnRpdGllcywganVzdCBtZXRh
dHlwZXMgYW5kIGBNaXJyb3JgLCB3aGljaCBpcyBub3QgcGFydCBvZiB0aGUgbGFuZ3VhZ2U8L2Rp
dj48ZGl2IGNsYXNzPSJnbWFpbF9leHRyYSI+Jm5ic3A7ICogYFByb2AgRnVuY3Rpb25zIG9uIG1l
dGF0eXBlcyBhcmUgbm90IHBlcmZlY3QsIGJ1dCB0aGV5IGFyZSAiZ29vZCBlbm91Z2giPC9kaXY+
PGRpdiBjbGFzcz0iZ21haWxfZXh0cmEiPiZuYnNwOyAqIGBDb25gIE1peGVkIHN0YXRpYyB0eXBl
IGluc3RhbmNlcyBhbmQgbWV0YXR5cGVzLiBWYWx1ZSBvZiBwYXNzZWQgbWV0YXR5cGVzIGlzIG9m
dGVuIGlnbm9yZWQ8L2Rpdj48ZGl2IGNsYXNzPSJnbWFpbF9leHRyYSI+Jm5ic3A7ICogYENvbmAg
U29tZSBwZW9wbGUgaGF0ZSBnbG9iYWwgZnVuY3Rpb25zIChhbHRob3VnaCB0aGV5IGFyZSByaWdo
dCBzb2x1dGlvbiBmb3IgIm1ldGhvZHMgb2YgbWV0YXR5cGVzIik8L2Rpdj48ZGl2IGNsYXNzPSJn
bWFpbF9leHRyYSI+Mi4gUHJvcG9zYWwgb2YgdGhpcyB0aHJlYWQ7IGBUeXBlJmx0O1QmZ3Q7YCBz
dHJ1Y3Q8L2Rpdj48ZGl2IGNsYXNzPSJnbWFpbF9leHRyYSI+Jm5ic3A7ICogYFR5cGUmbHQ7VCZn
dDtgIGlzIGEgd3JhcHBlciBmb3IgbWV0YXR5cGVzPC9kaXY+PGRpdiBjbGFzcz0iZ21haWxfZXh0
cmEiPiZuYnNwOyAqIFRoZSBzaG9ydGVzdCBzeW50YXggKGAuc2VsZmAgYW5kIHR5cGUgbGl0ZXJh
bHMpIGlzIHBhc3NlZCBmcm9tIG1ldGF0eXBlcyB0byBgVHlwZSZsdDtUJmd0O2A8L2Rpdj48ZGl2
IGNsYXNzPSJnbWFpbF9leHRyYSI+Jm5ic3A7ICogYFR5cGUmbHQ7VCZndDtgIGRvZXMgKDEpIGFu
ZCAoNCk8L2Rpdj48ZGl2IGNsYXNzPSJnbWFpbF9leHRyYSI+Jm5ic3A7ICogYFByb2AgR3JvdXBz
IG9mIGBzaXplYCwgYHN0cmlkZWAsIGBhbGlnbm1lbnRgIGluIGEgbG9naWNhbCBjb250ZXh0PC9k
aXY+PGRpdiBjbGFzcz0iZ21haWxfZXh0cmEiPiZuYnNwOyAqIGBDb25gIEFnYWluLCBtaXhlZCBz
dGF0aWMgdHlwZSBpbnN0YW5jZXMgYW5kIGBUeXBlJmx0O1QmZ3Q7YDwvZGl2PjxkaXYgY2xhc3M9
ImdtYWlsX2V4dHJhIj4mbmJzcDsgKiBgQ29uYCBBZGRpdGlvbmFsIGVudGl0eSBgVHlwZSZsdDtU
Jmd0O2A8L2Rpdj48ZGl2IGNsYXNzPSJnbWFpbF9leHRyYSI+Jm5ic3A7ICogYENvbmAgYFR5cGUm
bHQ7VCZndDtgIHBhcnRpYWxseSB0YWtlcyB3b3JrIG9mIGBNaXJyb3JgIChkeW5hbWljIGBzaXpl
YCwgYHN0cmlkZWAsIGBhbGlnbmApPC9kaXY+PGRpdiBjbGFzcz0iZ21haWxfZXh0cmEiPjMuIGBN
ZW1vcnlMYXlvdXRgIHByb3Bvc2FsPC9kaXY+PGRpdiBjbGFzcz0iZ21haWxfZXh0cmEiPiZuYnNw
OyAqIE1ldGF0eXBlcyBkbyAoMSk8L2Rpdj48ZGl2IGNsYXNzPSJnbWFpbF9leHRyYSI+Jm5ic3A7
ICogYE1lbW9yeUxheW91dCZsdDtUJmd0O2AgY29udGFpbnMgYHNpemVgLCBgc3RyaWRlYCwgYGFs
aWdubWVudGA8L2Rpdj7CoCAqIGBDb25gIEFnYWluLCBtaXhlZCBzdGF0aWMgdHlwZSBpbnN0YW5j
ZXMgYW5kIG1ldGF0eXBlczxkaXYgY2xhc3M9ImdtYWlsX2V4dHJhIj4mbmJzcDsgKiBgQ29uYCBB
ZGRpdGlvbmFsIGBNZW1vcnlMYXlvdXRgIGVudGl0eSwgd2hpY2ggb25seSBob3N0cyAzIGZ1bmN0
aW9uczwvZGl2PjxkaXYgY2xhc3M9ImdtYWlsX2V4dHJhIj4mbmJzcDsgKiBgQ29uYCBgTWVtb3J5
TGF5b3V0Jmx0O1QmZ3Q7YCBpcyBub3QgYWJsZSB0byBnZXQgc2l6ZSBvZiBgZHluYW1pY1R5cGVg
IGJ5IGRlc2lnbjwvZGl2PjxkaXYgY2xhc3M9ImdtYWlsX2V4dHJhIj40LiBNeSBzdWdnZXN0aW9u
IGAjMWA8L2Rpdj48ZGl2IGNsYXNzPSJnbWFpbF9leHRyYSI+Jm5ic3A7ICogQWxsb3cgbGFiZWxs
ZXNzIGluaXRpYWxpemF0aW9uIG9mIGBNaXJyb3JgIGZyb20gbWV0YXR5cGUgb3IgZnJvbSB2YWx1
ZTwvZGl2PjxkaXYgY2xhc3M9ImdtYWlsX2V4dHJhIj4mbmJzcDsgKiBNb3ZlIGR5bmFtaWMgYHNp
emVgLCBgc3RyaWRlYCwgYGFsaWdubWVudGAgdG8gYE1pcnJvcmA8L2Rpdj48ZGl2IGNsYXNzPSJn
bWFpbF9leHRyYSI+Jm5ic3A7ICogTGVhdmUgc3RhdGljIGBzaXplYCwgYHN0cmlkZWAsIGBhbGln
bm1lbnRgIGFzIGdsb2JhbCBmdW5jdGlvbnM8L2Rpdj48ZGl2IGNsYXNzPSJnbWFpbF9leHRyYSI+
Jm5ic3A7ICogYFByb2AgRG9lcyBub3QgaW50cm9kdWNlIG5ldyBlbnRpdGllczwvZGl2PjxkaXYg
Y2xhc3M9ImdtYWlsX2V4dHJhIj4mbmJzcDsgKiBgUHJvYCBJIGZlZWwgbGlrZSB0aGlzIGlzIHRo
ZSBwZXJmZWN0IHBsYWNlIGZvciBkeW5hbWljIGBzaXplYCwgYHN0cmlkZWAsIGBhbGlnbm1lbnRg
PC9kaXY+wqAgKiBgQ29uYCBBZ2FpbiwgbWl4ZWQgc3RhdGljIHR5cGUgaW5zdGFuY2VzIGFuZCBt
ZXRhdHlwZXM8ZGl2PiZuYnNwOyAqIGBDb25gIEdsb2JhbCBmdW5jdGlvbnMuIEknbSBmaW5lIHdp
dGggdGhlbSwgYnV0IHNvbWUgcGVvcGxlIGRvbid0IGxpa2UgdGhlbTwvZGl2PjxkaXY+NS4gTXkg
c3VnZ2VzdGlvbiBgIzJgPGJyPjwvZGl2PjxkaXYgY2xhc3M9ImdtYWlsX2V4dHJhIj4mbmJzcDsg
KiBBbGxvdyBsYWJlbGxlc3MgaW5pdGlhbGl6YXRpb24gb2YgYE1pcnJvcmAgZnJvbSBtZXRhdHlw
ZSBvciBmcm9tIHZhbHVlPC9kaXY+PGRpdiBjbGFzcz0iZ21haWxfZXh0cmEiPiZuYnNwOyAqIE1v
dmUgZHluYW1pYyBgc2l6ZWAsIGBzdHJpZGVgLCBgYWxpZ25tZW50YCB0byBgTWlycm9yYDwvZGl2
PjxkaXYgY2xhc3M9ImdtYWlsX2V4dHJhIj4mbmJzcDsgKiBgVC5zZWxmYCBhbmQgZnV0dXJlIHR5
cGUgbGl0ZXJhbHMgd2lsbCBjcmVhdGUgaW5zdGFuY2VzIG9mIGBUeXBlJmx0O1QmZ3Q7YDwvZGl2
PjxkaXYgY2xhc3M9ImdtYWlsX2V4dHJhIj48YnI+PC9kaXY+PGRpdiBjbGFzcz0iZ21haWxfZXh0
cmEiPmBgYHN3aWZ0PC9kaXY+PGRpdiBjbGFzcz0iZ21haWxfZXh0cmEiPnN0cnVjdCBUeXBlJmx0
O1QmZ3Q7IHs8L2Rpdj48ZGl2IGNsYXNzPSJnbWFpbF9leHRyYSI+Jm5ic3A7ICZuYnNwOyBpbml0
KCk8L2Rpdj48ZGl2IGNsYXNzPSJnbWFpbF9leHRyYSI+PGJyPjwvZGl2PjxkaXYgY2xhc3M9Imdt
YWlsX2V4dHJhIj4mbmJzcDsgJm5ic3A7IHZhciBzaXplOiBJbnQgeyByZXR1cm4gc2l6ZW9mKFQu
c2VsZikgfTwvZGl2PsKgIMKgIHZhciBzdHJpZGU6IEludCB7IHJldHVybsKgc3RyaWRlb2YoVC5z
ZWxmKSB9PGRpdiBjbGFzcz0iZ21haWxfZXh0cmEiPiZuYnNwOyAmbmJzcDsgdmFyIGFsaWdubWVu
dDogSW50IHsgcmV0dXJuIGFsaWdub2YoVC5zZWxmKSB9PC9kaXY+PGRpdiBjbGFzcz0iZ21haWxf
ZXh0cmEiPiZuYnNwOyAmbmJzcDsgc3RhdGljIHZhciBzaXplOiBJbnQgeyByZXR1cm4gc2l6ZW9m
KFQuc2VsZikgfTwvZGl2PsKgIMKgwqBzdGF0aWPCoHZhciBzdHJpZGU6IEludCB7IHJldHVybsKg
c3RyaWRlb2YoVC5zZWxmKSB9PGRpdiBjbGFzcz0iZ21haWxfZXh0cmEiPiZuYnNwOyAmbmJzcDsm
bmJzcDtzdGF0aWMmbmJzcDt2YXIgYWxpZ25tZW50OiBJbnQgeyByZXR1cm4gYWxpZ25vZihULnNl
bGYpIH08L2Rpdj48ZGl2IGNsYXNzPSJnbWFpbF9leHRyYSI+PGJyPjwvZGl2PjxkaXYgY2xhc3M9
ImdtYWlsX2V4dHJhIj4mbmJzcDsgJm5ic3A7IHZhciBtZXRhdHlwZTogTWV0YXR5cGUmbHQ7VCZn
dDsgeyByZXR1cm4gVC5tZXRhdHlwZSB9PC9kaXY+PGRpdiBjbGFzcz0iZ21haWxfZXh0cmEiPiZu
YnNwOyAmbmJzcDsgc3RhdGljIHZhciBtZXRhdHlwZTogTWV0YXR5cGUmbHQ7VCZndDsgeyByZXR1
cm4gVC5tZXRhdHlwZSB9PC9kaXY+PGRpdiBjbGFzcz0iZ21haWxfZXh0cmEiPjxicj48L2Rpdj48
ZGl2IGNsYXNzPSJnbWFpbF9leHRyYSI+Jm5ic3A7ICZuYnNwOyAvLyBOb3RoaW5nIG1vcmU7IG5v
IGZpZWxkcyE8L2Rpdj48ZGl2IGNsYXNzPSJnbWFpbF9leHRyYSI+fTwvZGl2PjxkaXYgY2xhc3M9
ImdtYWlsX2V4dHJhIj5gYGA8L2Rpdj48ZGl2IGNsYXNzPSJnbWFpbF9leHRyYSI+PGJyPjwvZGl2
PjxkaXYgY2xhc3M9ImdtYWlsX2V4dHJhIj4mbmJzcDsgKiBNZXRhdHlwZXMgd2lsbCBiZSB0eXBp
Y2FsbHkgY3JlYXRlZCB1c2luZyBgVHlwZSZsdDtUJmd0Oy5tZXRhdHlwZWAgYW5kIGBkeW5hbWlj
VHlwZWA8L2Rpdj48ZGl2IGNsYXNzPSJnbWFpbF9leHRyYSI+Jm5ic3A7ICogYFByb2AgQm90aCBz
dGF0aWMgYW5kIGR5bmFtaWMgYHNpemVgLCBgc3RyaWRlYCwgYGFsaWdubWVudGAgYXJlIGluIGxv
Z2ljYWxseSBzdWl0ZWQgY29udGV4dHM8L2Rpdj48ZGl2IGNsYXNzPSJnbWFpbF9leHRyYSI+Jm5i
c3A7ICogYFByb2AgTWV0YXR5cGVzICh3aXRoIHdoaWNoIGZldyBwZW9wbGUgd2lsbCB3b3JrKSBh
cmUgc2VwYXJhdGVkIGZyb20gc3RhdGljIHR5cGVzICh3aGljaCBhcmUgdXNlZCBmb3IgZnVuY3Rp
b24gc3BlY2lhbGl6YXRpb24gZXRjKTwvZGl2PjxkaXYgY2xhc3M9ImdtYWlsX2V4dHJhIj4mbmJz
cDsgKiBgQ29uYCBBZGRpdGlvbmFsIGVudGl0eSBgVHlwZSZsdDtUJmd0O2AsIGJ1dCBJIHRoaW5r
IGl0J3MgdGhlIG1vc3QgZWxlZ2FudCBvZiBhbGwgc29sdXRpb25zIHRoYXQgaW50cm9kdWNlIGFk
ZGl0aW9uYWwgdHlwZXM8L2Rpdj48ZGl2IGNsYXNzPSJnbWFpbF9leHRyYSI+PGJyPjwvZGl2Pjxk
aXYgY2xhc3M9ImdtYWlsX2V4dHJhIj5JIHdpbGwgcHJlcGFyZSBhIHNlcGFyYXRlIHByb3Bvc2Fs
IHdpdGggdGhpcyBsYXN0IG9wdGlvbi48L2Rpdj4=" style="height:0;width:0;max-height:0;max-width:0;overflow:hidden;font-size:0em;padding:0;margin:0">​</div></div></div>