<snapdata remixID="13529822"><project name="Custom Input Dialog Box V2" app="Snap! 10, https://snap.berkeley.edu" version="2"><notes></notes><thumbnail>data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAKAAAAB4CAYAAAB1ovlvAAAAAXNSR0IArs4c6QAAAtxJREFUeF7t1TFKY1EAhtEbrUOwsrDIFlxNNpAtCK7AVZgtpHUXWYKllWBjqeQNphgYZuI0kg/0vDaX9/O+eyCzaZqm4VEgKjADMCpv9lAAQBDSAgCm+Y0DyEBaAMA0v3EAGUgLAJjmNw4gA2kBANP8xgFkIC0AYJrfOIAMpAUATPMbB5CBtACAaX7jADKQFgAwzW8cQAbSAgCm+Y0DyEBaAMA0v3EAGUgLAJjmNw4gA2kBANP8xgFkIC0AYJrfOIAMpAUATPMbB5CBtACAaX7jADKQFgAwzW8cQAbSAgCm+Y0DyEBaAMA0v3EAGUgLAJjmNw4gA2kBANP8xgFkIC0AYJrfOIAMpAUATPMbB5CBtACAaX7jADKQFgAwzW8cQAbSAgCm+Y0DyEBaAMA0v3EAGUgLAJjmNw4gA2kBAI/kf3p6GldXV+nl/IRxAI/c8vv7+1itVodfX19fx2azGcvl8ieYOOk3AvhJ7sfHx3Fzc/PHifPz87FYLA4gZ7PZSS/rO44B+J9bXa/X4+Xl5Z+nnp+fx3a7HZeXl9/Rxkm+CcBPMt/f34+Hh4ffJ97e3sb19fW4vb0d8/n8JBf03UcAPHLDu91u3N3djWmaxgfEi4uL8fH36/naAgAe6bnf78fZ2dnX1va2vwoACEVaAMA0v3EAGUgLAJjmNw4gA2kBANP8xgFkIC0AYJrfOIAMpAUATPMbB5CBtACAaX7jADKQFgAwzW8cQAbSAgCm+Y0DyEBaAMA0v3EAGUgLAJjmNw4gA2kBANP8xgFkIC0AYJrfOIAMpAUATPMbB5CBtACAaX7jADKQFgAwzW8cQAbSAgCm+Y0DyEBaAMA0v3EAGUgLAJjmNw4gA2kBANP8xgFkIC0AYJrfOIAMpAUATPMbB5CBtACAaX7jADKQFgAwzW8cQAbSAgCm+Y0DyEBaAMA0v3EAGUgLAJjmNw4gA2kBANP8xgFkIC0AYJrf+C+xlQ63xWqsxQAAAABJRU5ErkJggg==</thumbnail><scenes select="1"><scene name="Custom Input Dialog Box V2"><notes></notes><hidden></hidden><headers></headers><code></code><blocks><block-definition s="boo" type="command" category="sensing"><header></header><code></code><translations></translations><inputs></inputs></block-definition><block-definition s="custom input" type="command" category="control"><header></header><code></code><translations></translations><inputs></inputs><script><block s="doRun"><block s="reportJSFunction"><list></list><l>InputSlotDialogMorph.prototype.createSlotTypeButtons = function () {&#xD;&#xD;    // populate my &apos;slots&apos; area with radio buttons, labels and input fields&#xD;    var defLabel, defInput, defSwitch, loopArrow, settingsButton;&#xD;&#xD;    // slot types&#xD;&#xD;this.addSlotTypeButton(&apos;%s&apos;,&apos;%s&apos;)&#xD;this.addSlotTypeButton(&apos;%n&apos;,&apos;%n&apos;)&#xD;this.addSlotTypeButton(&apos;%txt&apos;,&apos;%txt&apos;)&#xD;this.addSlotTypeButton(&apos;%anyUE&apos;,&apos;%anyUE&apos;)&#xD;this.addSlotTypeButton(&apos;%dir&apos;,&apos;%dir&apos;)&#xD;this.addSlotTypeButton(&apos;%note&apos;,&apos;%note&apos;)&#xD;this.addSlotTypeButton(&apos;%inst&apos;,&apos;%inst&apos;)&#xD;this.addSlotTypeButton(&apos;%prim&apos;,&apos;%prim&apos;)&#xD;this.addSlotTypeButton(&apos;%ext&apos;,&apos;%ext&apos;)&#xD;this.addSlotTypeButton(&apos;%audio&apos;,&apos;%audio&apos;)&#xD;this.addSlotTypeButton(&apos;%aa&apos;,&apos;%aa&apos;)&#xD;this.addSlotTypeButton(&apos;%img&apos;,&apos;%img&apos;)&#xD;this.addSlotTypeButton(&apos;%imgsource&apos;,&apos;%imgsource&apos;)&#xD;this.addSlotTypeButton(&apos;%rate&apos;,&apos;%rate&apos;)&#xD;this.addSlotTypeButton(&apos;%interaction&apos;,&apos;%interaction&apos;)&#xD;this.addSlotTypeButton(&apos;%dates&apos;,&apos;%dates&apos;)&#xD;this.addSlotTypeButton(&apos;%delim&apos;,&apos;%delim&apos;)&#xD;this.addSlotTypeButton(&apos;%ida&apos;,&apos;%ida&apos;)&#xD;this.addSlotTypeButton(&apos;%idx&apos;,&apos;%idx&apos;)&#xD;this.addSlotTypeButton(&apos;%ix&apos;,&apos;%ix&apos;)&#xD;this.addSlotTypeButton(&apos;%la&apos;,&apos;%la&apos;)&#xD;this.addSlotTypeButton(&apos;%ta&apos;,&apos;%ta&apos;)&#xD;this.addSlotTypeButton(&apos;%mlfunc&apos;,&apos;%mlfunc&apos;)&#xD;this.addSlotTypeButton(&apos;%dim&apos;,&apos;%dim&apos;)&#xD;this.addSlotTypeButton(&apos;%rel&apos;,&apos;%rel&apos;)&#xD;this.addSlotTypeButton(&apos;%loc&apos;,&apos;%loc&apos;)&#xD;this.addSlotTypeButton(&apos;%rcv&apos;,&apos;%rcv&apos;)&#xD;this.addSlotTypeButton(&apos;%spr&apos;,&apos;%spr&apos;)&#xD;this.addSlotTypeButton(&apos;%self&apos;,&apos;%self&apos;)&#xD;this.addSlotTypeButton(&apos;%edit&apos;,&apos;%edit&apos;)&#xD;this.addSlotTypeButton(&apos;%col&apos;,&apos;%col&apos;)&#xD;this.addSlotTypeButton(&apos;%dst&apos;,&apos;%dst&apos;)&#xD;this.addSlotTypeButton(&apos;%cln&apos;,&apos;%cln&apos;)&#xD;this.addSlotTypeButton(&apos;%clntrtl&apos;,&apos;%clntrtl&apos;)&#xD;this.addSlotTypeButton(&apos;%get&apos;,&apos;%get&apos;)&#xD;this.addSlotTypeButton(&apos;%cst&apos;,&apos;%cst&apos;)&#xD;this.addSlotTypeButton(&apos;%eff&apos;,&apos;%eff&apos;)&#xD;this.addSlotTypeButton(&apos;%env&apos;,&apos;%env&apos;)&#xD;this.addSlotTypeButton(&apos;%snd&apos;,&apos;%snd&apos;)&#xD;this.addSlotTypeButton(&apos;%key&apos;,&apos;%key&apos;)&#xD;this.addSlotTypeButton(&apos;%keyHat&apos;,&apos;%keyHat&apos;)&#xD;this.addSlotTypeButton(&apos;%msg&apos;,&apos;%msg&apos;)&#xD;this.addSlotTypeButton(&apos;%msgHat&apos;,&apos;%msgHat&apos;)&#xD;this.addSlotTypeButton(&apos;%msgSend&apos;,&apos;%msgSend&apos;)&#xD;this.addSlotTypeButton(&apos;%att&apos;,&apos;%att&apos;)&#xD;this.addSlotTypeButton(&apos;%fun&apos;,&apos;%fun&apos;)&#xD;this.addSlotTypeButton(&apos;%layer&apos;,&apos;%layer&apos;)&#xD;this.addSlotTypeButton(&apos;%clrdim&apos;,&apos;%clrdim&apos;)&#xD;this.addSlotTypeButton(&apos;%pen&apos;,&apos;%pen&apos;)&#xD;this.addSlotTypeButton(&apos;%asp&apos;,&apos;%asp&apos;)&#xD;this.addSlotTypeButton(&apos;%txtfun&apos;,&apos;%txtfun&apos;)&#xD;this.addSlotTypeButton(&apos;%stopChoices&apos;,&apos;%stopChoices&apos;)&#xD;this.addSlotTypeButton(&apos;%setting&apos;,&apos;%setting&apos;)&#xD;this.addSlotTypeButton(&apos;%typ&apos;,&apos;%typ&apos;)&#xD;this.addSlotTypeButton(&apos;%mapValue&apos;,&apos;%mapValue&apos;)&#xD;this.addSlotTypeButton(&apos;%var&apos;,&apos;%var&apos;)&#xD;this.addSlotTypeButton(&apos;%shd&apos;,&apos;%shd&apos;)&#xD;this.addSlotTypeButton(&apos;%codeKind&apos;,&apos;%codeKind&apos;)&#xD;this.addSlotTypeButton(&apos;%codeListPart&apos;,&apos;%codeListPart&apos;)&#xD;this.addSlotTypeButton(&apos;%codeListKind&apos;,&apos;%codeListKind&apos;)&#xD;this.addSlotTypeButton(&apos;%scn&apos;,&apos;%scn&apos;)&#xD;this.addSlotTypeButton(&apos;%vid&apos;,&apos;%vid&apos;)&#xD;this.addSlotTypeButton(&apos;%block&apos;,&apos;%block&apos;)&#xD;this.addSlotTypeButton(&apos;%byob&apos;,&apos;%byob&apos;)&#xD;this.addSlotTypeButton(&apos;%mlt&apos;,&apos;%mlt&apos;)&#xD;this.addSlotTypeButton(&apos;%code&apos;,&apos;%code&apos;)&#xD;this.addSlotTypeButton(&apos;%b&apos;,&apos;%b&apos;)&#xD;this.addSlotTypeButton(&apos;%boolUE&apos;,&apos;%boolUE&apos;)&#xD;this.addSlotTypeButton(&apos;%bool&apos;,&apos;%bool&apos;)&#xD;this.addSlotTypeButton(&apos;%obj&apos;,&apos;%obj&apos;)&#xD;this.addSlotTypeButton(&apos;%l&apos;,&apos;%l&apos;)&#xD;this.addSlotTypeButton(&apos;$turtle&apos;,&apos;$turtle&apos;)&#xD;this.addSlotTypeButton(&apos;$turtleOutline&apos;,&apos;$turtleOutline&apos;)&#xD;this.addSlotTypeButton(&apos;$pipette&apos;,&apos;$pipette&apos;)&#xD;this.addSlotTypeButton(&apos;$clockwise&apos;,&apos;$clockwise&apos;)&#xD;this.addSlotTypeButton(&apos;$counterclockwise&apos;,&apos;$counterclockwise&apos;)&#xD;this.addSlotTypeButton(&apos;$greenflag&apos;,&apos;$greenflag&apos;)&#xD;this.addSlotTypeButton(&apos;$blitz&apos;,&apos;$blitz&apos;)&#xD;this.addSlotTypeButton(&apos;$list&apos;,&apos;$list&apos;)&#xD;this.addSlotTypeButton(&apos;$pause&apos;,&apos;$pause&apos;)&#xD;this.addSlotTypeButton(&apos;$loopArrow&apos;,&apos;$loopArrow&apos;)&#xD;this.addSlotTypeButton(&apos;%c&apos;,&apos;%c&apos;)&#xD;this.addSlotTypeButton(&apos;%cs&apos;,&apos;%cs&apos;)&#xD;this.addSlotTypeButton(&apos;%ca&apos;,&apos;%ca&apos;)&#xD;this.addSlotTypeButton(&apos;%cl&apos;,&apos;%cl&apos;)&#xD;this.addSlotTypeButton(&apos;%cla&apos;,&apos;%cla&apos;)&#xD;this.addSlotTypeButton(&apos;%loop&apos;,&apos;%loop&apos;)&#xD;this.addSlotTypeButton(&apos;%cmd&apos;,&apos;%cmd&apos;)&#xD;this.addSlotTypeButton(&apos;%cmdRing&apos;,&apos;%cmdRing&apos;)&#xD;this.addSlotTypeButton(&apos;%repRing&apos;,&apos;%repRing&apos;)&#xD;this.addSlotTypeButton(&apos;%predRing&apos;,&apos;%predRing&apos;)&#xD;this.addSlotTypeButton(&apos;%rc&apos;,&apos;%rc&apos;)&#xD;this.addSlotTypeButton(&apos;%rr&apos;,&apos;%rr&apos;)&#xD;this.addSlotTypeButton(&apos;%rp&apos;,&apos;%rp&apos;)&#xD;this.addSlotTypeButton(&apos;%t&apos;,&apos;%t&apos;)&#xD;this.addSlotTypeButton(&apos;%upvar&apos;,&apos;%upvar&apos;)&#xD;this.addSlotTypeButton(&apos;%clr&apos;,&apos;%clr&apos;)&#xD;this.addSlotTypeButton(&apos;%br&apos;,&apos;%br&apos;)&#xD;this.addSlotTypeButton(&apos;%inputName&apos;,&apos;%inputName&apos;)&#xD;this.addSlotTypeButton(&apos;%inputs&apos;,&apos;%inputs&apos;)&#xD;this.addSlotTypeButton(&apos;%send&apos;,&apos;%send&apos;)&#xD;this.addSlotTypeButton(&apos;%receive&apos;,&apos;%receive&apos;)&#xD;this.addSlotTypeButton(&apos;%scriptVars&apos;,&apos;%scriptVars&apos;)&#xD;this.addSlotTypeButton(&apos;%blockVars&apos;,&apos;%blockVars&apos;)&#xD;this.addSlotTypeButton(&apos;%message&apos;,&apos;%message&apos;)&#xD;this.addSlotTypeButton(&apos;%keyName&apos;,&apos;%keyName&apos;)&#xD;this.addSlotTypeButton(&apos;%parms&apos;,&apos;%parms&apos;)&#xD;this.addSlotTypeButton(&apos;%ringparms&apos;,&apos;%ringparms&apos;)&#xD;this.addSlotTypeButton(&apos;%words&apos;,&apos;%words&apos;)&#xD;this.addSlotTypeButton(&apos;%lists&apos;,&apos;%lists&apos;)&#xD;this.addSlotTypeButton(&apos;%nums&apos;,&apos;%nums&apos;)&#xD;this.addSlotTypeButton(&apos;%exp&apos;,&apos;%exp&apos;)&#xD;this.addSlotTypeButton(&apos;%sum&apos;,&apos;%sum&apos;)&#xD;this.addSlotTypeButton(&apos;%product&apos;,&apos;%product&apos;)&#xD;this.addSlotTypeButton(&apos;%min&apos;,&apos;%min&apos;)&#xD;this.addSlotTypeButton(&apos;%max&apos;,&apos;%max&apos;)&#xD;this.addSlotTypeButton(&apos;%all&apos;,&apos;%all&apos;)&#xD;this.addSlotTypeButton(&apos;%any&apos;,&apos;%any&apos;)&#xD;this.addSlotTypeButton(&apos;%all&lt;&apos;,&apos;%all&lt;&apos;)&#xD;this.addSlotTypeButton(&apos;%all&gt;&apos;,&apos;%all&gt;&apos;)&#xD;this.addSlotTypeButton(&apos;%all&lt;=&apos;,&apos;%all&lt;=&apos;)&#xD;this.addSlotTypeButton(&apos;%all&gt;=&apos;,&apos;%all&gt;=&apos;)&#xD;this.addSlotTypeButton(&apos;%all=&apos;,&apos;%all=&apos;)&#xD;this.addSlotTypeButton(&apos;%all!=&apos;,&apos;%all!=&apos;)&#xD;this.addSlotTypeButton(&apos;%all==&apos;,&apos;%all==&apos;)&#xD;this.addSlotTypeButton(&apos;%elseif&apos;,&apos;%elseif&apos;)&#xD;&#xD;    // arity and upvars&#xD;    this.slots.radioButtonSingle = this.addSlotArityButton(&#xD;        () =&gt; this.setSlotArity(&apos;single&apos;),&#xD;        "Single input.",&#xD;        () =&gt; this.fragment.isSingleInput()&#xD;    );&#xD;    this.addSlotArityButton(&#xD;        () =&gt; this.setSlotArity(&apos;multiple&apos;),&#xD;        "Multiple inputs (value is list of inputs)",&#xD;        () =&gt; this.fragment.isMultipleInput()&#xD;    );&#xD;&#xD;    // default values&#xD;    defLabel = new StringMorph(localize(&apos;Default Value:&apos;));&#xD;    defLabel.fontSize = this.slots.radioButtonSingle.fontSize;&#xD;    defLabel.setColor(WHITE);&#xD;    defLabel.refresh = () =&gt; {&#xD;        if (this.isExpanded &amp;&amp; contains(&#xD;                [&#xD;                    &apos;%s&apos;, &apos;%n&apos;, &apos;%txt&apos;, &apos;%anyUE&apos;, &apos;%b&apos;, &apos;%boolUE&apos;,&#xD;                    &apos;%bool&apos;,&#xD;                    &apos;%mlt&apos;, &apos;%code&apos;&#xD;                ],&#xD;                this.fragment.type&#xD;            )) {&#xD;            defLabel.show();&#xD;        } else {&#xD;            defLabel.hide();&#xD;        }&#xD;    };&#xD;    this.slots.defaultInputLabel = defLabel;&#xD;    this.slots.add(defLabel);&#xD;&#xD;    defInput = new InputFieldMorph(this.fragment.defaultValue);&#xD;    defInput.contents().fontSize = defLabel.fontSize;&#xD;    defInput.contrast = 90;&#xD;    defInput.setWidth(50);&#xD;    defInput.refresh = () =&gt; {&#xD;        if (this.isExpanded &amp;&amp; contains(&#xD;            [&apos;%s&apos;, &apos;%n&apos;, &apos;%txt&apos;, &apos;%anyUE&apos;, &apos;%mlt&apos;, &apos;%code&apos;],&#xD;            this.fragment.type&#xD;        )) {&#xD;            defInput.show();&#xD;            defInput.setIsNumeric(false);&#xD;        } else {&#xD;            defInput.hide();&#xD;        }&#xD;    };&#xD;    this.slots.defaultInputField = defInput;&#xD;    this.slots.add(defInput);&#xD;&#xD;    defSwitch = new BooleanSlotMorph(this.fragment.defaultValue);&#xD;    defSwitch.refresh = () =&gt; {&#xD;        if (this.isExpanded &amp;&amp; contains(&#xD;            [&apos;%b&apos;, &apos;%boolUE&apos;, &apos;%bool&apos;],&#xD;            this.fragment.type&#xD;        )) {&#xD;            defSwitch.show();&#xD;        } else {&#xD;            defSwitch.hide();&#xD;        }&#xD;    };&#xD;    this.slots.defaultSwitch = defSwitch;&#xD;    this.slots.add(defSwitch);&#xD;&#xD;    // loop arrow checkbox //&#xD;    loopArrow = new ToggleMorph(&#xD;        &apos;checkbox&apos;,&#xD;        this, // target&#xD;        () =&gt; { // action&#xD;            if (this.fragment.type === &apos;%ca&apos;) {&#xD;                this.setType(&apos;%cs&apos;);&#xD;            } else {&#xD;                this.setType(&apos;%ca&apos;);&#xD;            }&#xD;        },&#xD;        null, // label string&#xD;        () =&gt; this.fragment.type === &apos;%ca&apos;,&#xD;        null, // environment&#xD;        null, // hint&#xD;        new SymbolMorph(&#xD;            &apos;loop&apos;,&#xD;            this.fontSize * 0.7,&#xD;            WHITE&#xD;        ).getImage(),&#xD;        null // builder method that constructs the element morph&#xD;    );&#xD;    loopArrow.refresh = () =&gt; {&#xD;        ToggleMorph.prototype.refresh.call(loopArrow);&#xD;        if (this.isExpanded &amp;&amp; contains(&#xD;                [&apos;%cs&apos;, &apos;%ca&apos;],&#xD;                this.fragment.type&#xD;            )) {&#xD;            loopArrow.show();&#xD;        } else {&#xD;            loopArrow.hide();&#xD;        }&#xD;    };&#xD;    this.slots.loopArrow = loopArrow;&#xD;    this.slots.add(loopArrow);&#xD;&#xD;    // settings button&#xD;    settingsButton = new PushButtonMorph(&#xD;        this.slots,&#xD;        () =&gt; this.slots.userMenu().popUpAtHand(this.world()),&#xD;        new SymbolMorph(&apos;gearPartial&apos;, this.fontSize * 1.5)&#xD;    );&#xD;    settingsButton.padding = 0;&#xD;    settingsButton.fixLayout();&#xD;    settingsButton.refresh = nop;&#xD;    this.slots.settingsButton = settingsButton;&#xD;    this.slots.add(settingsButton);&#xD;&#xD;};</l></block><list></list></block><block s="doRun"><block s="reportJSFunction"><list></list><l>InputSlotDialogMorph.prototype.fixSlotsLayout = function () {&#xD;    var slots = this.slots,&#xD;        scale = SyntaxElementMorph.prototype.scale,&#xD;        xPadding = 10 * scale,&#xD;        ypadding = 14 * scale,&#xD;        bh = (fontHeight(10) / 1.2 + 15) * scale, // slot type button height&#xD;        ah = (fontHeight(10) / 1.2 + 10) * scale, // arity button height&#xD;        size = 126, // number slot type radio buttons&#xD;        cols = [&#xD;            slots.left() + xPadding,&#xD;            slots.left() + slots.width() * 1 / 6,&#xD;            slots.left() + slots.width() * 2 / 6,&#xD;            slots.left() + slots.width() * 3 / 6,&#xD;            slots.left() + slots.width() * 4 / 6,&#xD;            slots.left() + slots.width() * 5 / 6,&#xD;&#xD;        ],&#xD;        rows = [&#xD;            slots.top() + ypadding,&#xD;            slots.top() + ypadding + bh,&#xD;            slots.top() + ypadding + bh * 2,&#xD;            slots.top() + ypadding + bh * 3,&#xD;            slots.top() + ypadding + bh * 4,&#xD;            slots.top() + ypadding + bh * 5,&#xD;            slots.top() + ypadding + bh * 6,&#xD;            slots.top() + ypadding + bh * 7,&#xD;            slots.top() + ypadding + bh * 8,&#xD;            slots.top() + ypadding + bh * 9,&#xD;            slots.top() + ypadding + bh * 10,&#xD;            slots.top() + ypadding + bh * 11,&#xD;            slots.top() + ypadding + bh * 12,&#xD;            slots.top() + ypadding + bh * 13,&#xD;            slots.top() + ypadding + bh * 14,&#xD;            slots.top() + ypadding + bh * 15,&#xD;            slots.top() + ypadding + bh * 16,&#xD;            slots.top() + ypadding + bh * 17,&#xD;            slots.top() + ypadding + bh * 18,&#xD;            slots.top() + ypadding + bh * 19,&#xD;            slots.top() + ypadding + bh * 20,&#xD;            slots.top() + ypadding + bh * 21,&#xD;            slots.top() + ypadding + bh * 21 + ah,&#xD;            slots.top() + ypadding + bh * 21 + ah * 2&#xD;        ],&#xD;        idx,&#xD;        row = -1,&#xD;        col;&#xD;&#xD;    // slot types:&#xD;&#xD;    for (idx = 0; idx &lt; size; idx += 1) {&#xD;        col = idx % 6;&#xD;        if (idx % 6 === 0) {row += 1; }&#xD;        slots.children[idx].setPosition(new Point(&#xD;            cols[col],&#xD;            rows[row]&#xD;        ));&#xD;    }&#xD;&#xD;    // arity:&#xD;&#xD;    col = 0;&#xD;    row = 21;&#xD;    for (idx = size; idx &lt; size + 2; idx += 1) {&#xD;        slots.children[idx].setPosition(new Point(&#xD;            cols[col],&#xD;            rows[row + idx - size]&#xD;        ));&#xD;    }&#xD;&#xD;    // default input&#xD;&#xD;    this.slots.defaultInputLabel.setPosition(&#xD;        this.slots.radioButtonSingle.label.topRight().add(new Point(5, 0))&#xD;    );&#xD;    this.slots.defaultInputField.setCenter(&#xD;        this.slots.defaultInputLabel.center().add(new Point(&#xD;            this.slots.defaultInputField.width() / 2&#xD;                + this.slots.defaultInputLabel.width() / 2 + 5,&#xD;            0&#xD;        ))&#xD;    );&#xD;    this.slots.defaultSwitch.setCenter(&#xD;        this.slots.defaultInputLabel.center().add(new Point(&#xD;            this.slots.defaultSwitch.width() / 2&#xD;                + this.slots.defaultInputLabel.width() / 2 + 5,&#xD;            0&#xD;        ))&#xD;    );&#xD;&#xD;    // loop arrow&#xD;&#xD;    this.slots.loopArrow.setPosition(this.slots.defaultInputLabel.position());&#xD;    this.slots.settingsButton.setPosition(&#xD;        this.slots.bottomRight().subtract(&#xD;            this.slots.settingsButton.extent().add(&#xD;                this.padding + this.slots.border&#xD;            )&#xD;        )&#xD;    );&#xD;&#xD;    this.slots.changed();&#xD;};</l></block><list></list></block><block s="doRun"><block s="reportJSFunction"><list></list><l>InputSlotDialogMorph.prototype.init = function (&#xD;    fragment,&#xD;    target,&#xD;    action,&#xD;    environment,&#xD;    category&#xD;) {&#xD;    var scale = SyntaxElementMorph.prototype.scale,&#xD;        fh = fontHeight(10) / 1.2 * scale; // "raw height"&#xD;&#xD;    // additional properties:&#xD;    this.fragment = fragment || new BlockLabelFragment();&#xD;    this.textfield = null;&#xD;    this.types = null;&#xD;    this.slots = null;&#xD;    this.isExpanded = false;&#xD;    this.category = category || &apos;other&apos;;&#xD;    this.noDelete = false;&#xD;&#xD;    // initialize inherited properties:&#xD;    BlockDialogMorph.uber.init.call(&#xD;        this,&#xD;        target,&#xD;        action,&#xD;        environment&#xD;    );&#xD;&#xD;    // override inherited properites:&#xD;    this.types = new AlignmentMorph(&apos;row&apos;, this.padding);&#xD;    this.types.respectHiddens = true; // prevent the arrow from flipping&#xD;    this.add(this.types);&#xD;    this.slots = new BoxMorph();&#xD;    this.slots.color = new Color(55, 55, 55); // same as palette&#xD;    this.slots.borderColor = this.slots.color.lighter(50);&#xD;    this.slots.setExtent(new Point((fh + 10) * 40, (fh + 10 * scale) * 30.4));&#xD;    this.add(this.slots);&#xD;    this.createSlotTypeButtons();&#xD;    this.fixSlotsLayout();&#xD;    this.addSlotsMenu();&#xD;    this.createTypeButtons();&#xD;    this.fixLayout();&#xD;};</l></block><list></list></block></script></block-definition><block-definition s="default input" type="command" category="control"><header></header><code></code><translations></translations><inputs></inputs><script><block s="doRun"><block s="reportJSFunction"><list></list><l>InputSlotDialogMorph.prototype.createSlotTypeButtons = function () {&#xD;    // populate my &apos;slots&apos; area with radio buttons, labels and input fields&#xD;    var defLabel, defInput, defSwitch, loopArrow, settingsButton;&#xD;&#xD;    // slot types&#xD;    this.addSlotTypeButton(&apos;Object&apos;, &apos;%obj&apos;);&#xD;    this.addSlotTypeButton(&apos;Text&apos;, &apos;%txt&apos;);&#xD;    this.addSlotTypeButton(&apos;List&apos;, &apos;%l&apos;);&#xD;    this.addSlotTypeButton(&apos;Number&apos;, &apos;%n&apos;);&#xD;    this.addSlotTypeButton(&apos;Any type&apos;, &apos;%s&apos;);&#xD;    this.addSlotTypeButton(&apos;Boolean (T/F)&apos;, &apos;%b&apos;);&#xD;    this.addSlotTypeButton(&apos;Command\n(inline)&apos;, &apos;%cmdRing&apos;); //&apos;%cmd&apos;);&#xD;    this.addSlotTypeButton(&apos;Reporter&apos;, &apos;%repRing&apos;); //&apos;%r&apos;);&#xD;    this.addSlotTypeButton(&apos;Predicate&apos;, &apos;%predRing&apos;); //&apos;%p&apos;);&#xD;    this.addSlotTypeButton(&apos;Command\n(C-shape)&apos;, [&apos;%cs&apos;, &apos;%ca&apos;, &apos;%loop&apos;]);&#xD;    this.addSlotTypeButton(&apos;Any\n(unevaluated)&apos;, &apos;%anyUE&apos;);&#xD;    this.addSlotTypeButton(&apos;Boolean\n(unevaluated)&apos;, &apos;%boolUE&apos;);&#xD;&#xD;    // arity and upvars&#xD;    this.slots.radioButtonSingle = this.addSlotArityButton(&#xD;        () =&gt; this.setSlotArity(&apos;single&apos;),&#xD;        "Single input.",&#xD;        () =&gt; this.fragment.isSingleInput()&#xD;    );&#xD;    this.addSlotArityButton(&#xD;        () =&gt; this.setSlotArity(&apos;multiple&apos;),&#xD;        "Multiple inputs (value is list of inputs)",&#xD;        () =&gt; this.fragment.isMultipleInput()&#xD;    );&#xD;    this.addSlotArityButton(&#xD;        () =&gt; this.setSlotArity(&apos;upvar&apos;),&#xD;        "Upvar - make internal variable visible to caller",&#xD;        () =&gt; this.fragment.isUpvar()&#xD;    );&#xD;&#xD;    // default values&#xD;    defLabel = new StringMorph(localize(&apos;Default Value:&apos;));&#xD;    defLabel.fontSize = this.slots.radioButtonSingle.fontSize;&#xD;    defLabel.setColor(WHITE);&#xD;    defLabel.refresh = () =&gt; {&#xD;        if (this.isExpanded &amp;&amp; contains(&#xD;                [&#xD;                    &apos;%s&apos;, &apos;%n&apos;, &apos;%txt&apos;, &apos;%anyUE&apos;, &apos;%b&apos;, &apos;%boolUE&apos;,&#xD;                    &apos;%mlt&apos;, &apos;%code&apos;, &apos;%upvar&apos;&#xD;                ],&#xD;                this.fragment.type&#xD;            )) {&#xD;            defLabel.changed();&#xD;            defLabel.text = this.fragment.type === &apos;%upvar&apos; ?&#xD;                localize(&apos;Default Name:&apos;)&#xD;                : localize(&apos;Default Value:&apos;);&#xD;            defLabel.fixLayout();&#xD;            defLabel.rerender();&#xD;            defLabel.show();&#xD;        } else {&#xD;            defLabel.hide();&#xD;        }&#xD;    };&#xD;    this.slots.defaultInputLabel = defLabel;&#xD;    this.slots.add(defLabel);&#xD;&#xD;    defInput = new InputFieldMorph(this.fragment.defaultValue);&#xD;    defInput.contents().fontSize = defLabel.fontSize;&#xD;    defInput.contrast = 90;&#xD;    defInput.setWidth(50);&#xD;    defInput.refresh = () =&gt; {&#xD;        if (this.isExpanded &amp;&amp; contains(&#xD;            [&apos;%s&apos;, &apos;%n&apos;, &apos;%txt&apos;, &apos;%anyUE&apos;, &apos;%mlt&apos;, &apos;%code&apos;, &apos;%upvar&apos;],&#xD;            this.fragment.type&#xD;        )) {&#xD;            defInput.show();&#xD;            if (this.fragment.type === &apos;%n&apos;) {&#xD;                defInput.setIsNumeric(true);&#xD;            } else {&#xD;                defInput.setIsNumeric(false);&#xD;            }&#xD;        } else {&#xD;            defInput.hide();&#xD;        }&#xD;    };&#xD;    this.slots.defaultInputField = defInput;&#xD;    this.slots.add(defInput);&#xD;&#xD;    defSwitch = new BooleanSlotMorph(this.fragment.defaultValue);&#xD;    defSwitch.refresh = () =&gt; {&#xD;        if (this.isExpanded &amp;&amp; contains(&#xD;            [&apos;%b&apos;, &apos;%boolUE&apos;],&#xD;            this.fragment.type&#xD;        )) {&#xD;            defSwitch.show();&#xD;        } else {&#xD;            defSwitch.hide();&#xD;        }&#xD;    };&#xD;    this.slots.defaultSwitch = defSwitch;&#xD;    this.slots.add(defSwitch);&#xD;&#xD;    // loop arrow checkbox //&#xD;    loopArrow = new ToggleMorph(&#xD;        &apos;checkbox&apos;,&#xD;        this, // target&#xD;        () =&gt; { // action&#xD;            if ([&apos;%ca&apos;, &apos;%loop&apos;].includes(this.fragment.type)) {&#xD;                this.setType(&apos;%cs&apos;);&#xD;            } else {&#xD;                this.setType(&apos;%ca&apos;);&#xD;            }&#xD;        },&#xD;        null, // label string&#xD;        () =&gt; [&apos;%ca&apos;, &apos;%loop&apos;].includes(this.fragment.type),&#xD;        null, // environment&#xD;        null, // hint&#xD;        new SymbolMorph(&#xD;            &apos;loop&apos;,&#xD;            this.fontSize * 0.7,&#xD;            WHITE&#xD;        ).getImage(),&#xD;        null // builder method that constructs the element morph&#xD;    );&#xD;    loopArrow.refresh = () =&gt; {&#xD;        ToggleMorph.prototype.refresh.call(loopArrow);&#xD;        if (this.isExpanded &amp;&amp; contains(&#xD;                [&apos;%cs&apos;, &apos;%ca&apos;, &apos;%loop&apos;],&#xD;                this.fragment.type&#xD;            )) {&#xD;            loopArrow.show();&#xD;        } else {&#xD;            loopArrow.hide();&#xD;        }&#xD;    };&#xD;    this.slots.loopArrow = loopArrow;&#xD;    this.slots.add(loopArrow);&#xD;&#xD;    // settings button&#xD;    settingsButton = new PushButtonMorph(&#xD;        this.slots,&#xD;        () =&gt; this.slots.userMenu().popUpAtHand(this.world()),&#xD;        new SymbolMorph(&apos;gearPartial&apos;, this.fontSize * 1.5)&#xD;    );&#xD;    settingsButton.padding = 0;&#xD;    settingsButton.fixLayout();&#xD;    settingsButton.refresh = nop;&#xD;    this.slots.settingsButton = settingsButton;&#xD;    this.slots.add(settingsButton);&#xD;&#xD;};</l></block><list></list></block><block s="doRun"><block s="reportJSFunction"><list></list><l>InputSlotDialogMorph.prototype.fixSlotsLayout = function () {&#xD;    var slots = this.slots,&#xD;        scale = SyntaxElementMorph.prototype.scale,&#xD;        xPadding = 10 * scale,&#xD;        ypadding = 14 * scale,&#xD;        bh = (fontHeight(10) / 1.2 + 15) * scale, // slot type button height&#xD;        ah = (fontHeight(10) / 1.2 + 10) * scale, // arity button height&#xD;        size = 12, // number slot type radio buttons&#xD;        cols = [&#xD;            slots.left() + xPadding,&#xD;            slots.left() + slots.width() / 3,&#xD;            slots.left() + slots.width() * 2 / 3&#xD;        ],&#xD;        rows = [&#xD;            slots.top() + ypadding,&#xD;            slots.top() + ypadding + bh,&#xD;            slots.top() + ypadding + bh * 2,&#xD;            slots.top() + ypadding + bh * 3,&#xD;            slots.top() + ypadding + bh * 4,&#xD;            slots.top() + ypadding + bh * 5,&#xD;&#xD;            slots.top() + ypadding + bh * 5 + ah,&#xD;            slots.top() + ypadding + bh * 5 + ah * 2&#xD;        ],&#xD;        idx,&#xD;        row = -1,&#xD;        col;&#xD;&#xD;    // slot types:&#xD;&#xD;    for (idx = 0; idx &lt; size; idx += 1) {&#xD;        col = idx % 3;&#xD;        if (idx % 3 === 0) {row += 1; }&#xD;        slots.children[idx].setPosition(new Point(&#xD;            cols[col],&#xD;            rows[row]&#xD;        ));&#xD;    }&#xD;&#xD;    // arity:&#xD;&#xD;    col = 0;&#xD;    row = 5;&#xD;    for (idx = size; idx &lt; size + 3; idx += 1) {&#xD;        slots.children[idx].setPosition(new Point(&#xD;            cols[col],&#xD;            rows[row + idx - size]&#xD;        ));&#xD;    }&#xD;&#xD;    // default input&#xD;&#xD;    this.slots.defaultInputLabel.setPosition(&#xD;        this.slots.radioButtonSingle.label.topRight().add(new Point(5, 0))&#xD;    );&#xD;    this.slots.defaultInputField.setCenter(&#xD;        this.slots.defaultInputLabel.center().add(new Point(&#xD;            this.slots.defaultInputField.width() / 2&#xD;                + this.slots.defaultInputLabel.width() / 2 + 5,&#xD;            0&#xD;        ))&#xD;    );&#xD;    this.slots.defaultSwitch.setCenter(&#xD;        this.slots.defaultInputLabel.center().add(new Point(&#xD;            this.slots.defaultSwitch.width() / 2&#xD;                + this.slots.defaultInputLabel.width() / 2 + 5,&#xD;            0&#xD;        ))&#xD;    );&#xD;&#xD;    // loop arrow&#xD;&#xD;    this.slots.loopArrow.setPosition(this.slots.defaultInputLabel.position());&#xD;    this.slots.settingsButton.setPosition(&#xD;        this.slots.bottomRight().subtract(&#xD;            this.slots.settingsButton.extent().add(&#xD;                this.padding + this.slots.border&#xD;            )&#xD;        )&#xD;    );&#xD;&#xD;    this.slots.changed();&#xD;};</l></block><list></list></block><block s="doRun"><block s="reportJSFunction"><list></list><l>InputSlotDialogMorph.prototype.init = function (&#xD;    fragment,&#xD;    target,&#xD;    action,&#xD;    environment,&#xD;    category&#xD;) {&#xD;    var scale = SyntaxElementMorph.prototype.scale,&#xD;        fh = fontHeight(10) / 1.2 * scale; // "raw height"&#xD;&#xD;    // additional properties:&#xD;    this.fragment = fragment || new BlockLabelFragment();&#xD;    this.textfield = null;&#xD;    this.types = null;&#xD;    this.slots = null;&#xD;    this.isExpanded = false;&#xD;    this.category = category || &apos;other&apos;;&#xD;    this.noDelete = false;&#xD;&#xD;    // initialize inherited properties:&#xD;    BlockDialogMorph.uber.init.call(&#xD;        this,&#xD;        target,&#xD;        action,&#xD;        environment&#xD;    );&#xD;&#xD;    // override inherited properites:&#xD;    this.types = new AlignmentMorph(&apos;row&apos;, this.padding);&#xD;    this.types.respectHiddens = true; // prevent the arrow from flipping&#xD;    this.add(this.types);&#xD;    this.slots = new BoxMorph();&#xD;    this.slots.color = new Color(55, 55, 55); // same as palette&#xD;    this.slots.borderColor = this.slots.color.lighter(50);&#xD;    this.slots.setExtent(new Point((fh + 10) * 24, (fh + 10 * scale) * 10.4));&#xD;    this.add(this.slots);&#xD;    this.createSlotTypeButtons();&#xD;    this.fixSlotsLayout();&#xD;    this.addSlotsMenu();&#xD;    this.createTypeButtons();&#xD;    this.fixLayout();&#xD;};</l></block><list></list></block></script></block-definition><block-definition s="rc %&apos;rc&apos; rr %&apos;rr&apos; rp %&apos;rp&apos; cmd %&apos;cmd&apos;" type="command" category="variables"><header></header><code></code><translations></translations><inputs><input type="%rc" initial="1"></input><input type="%rr" initial="1"></input><input type="%rp" initial="1"></input><input type="%cmd" initial="1"></input></inputs></block-definition><block-definition s="$nl %&apos;a&apos;" type="reporter" category="variables"><header></header><code></code><translations></translations><inputs><input type="%mult%elseif" separator="wow"></input></inputs><script><block s="doReport"><block var="a"/></block></script></block-definition><block-definition s="%&apos;a&apos; $nl %&apos;b&apos; $nl %&apos;c&apos; $nl %&apos;d&apos; $nl %&apos;e&apos; $nl %&apos;f&apos; $nl %&apos;g&apos; $nl %&apos;h&apos; $nl %&apos;i&apos; $nl %&apos;j&apos; $nl %&apos;k&apos; $nl %&apos;l&apos; $nl %&apos;m&apos;" type="command" category="variables"><header></header><code></code><translations></translations><inputs><input type="%mult%sum" initial="1"></input><input type="%mult%product" initial="1"></input><input type="%mult%min" initial="1"></input><input type="%mult%max" initial="1"></input><input type="%mult%all" initial="1"></input><input type="%mult%any" initial="1"></input><input type="%mult%all&lt;" initial="1"></input><input type="%mult%all&gt;" initial="1"></input><input type="%mult%all&lt;=" initial="1"></input><input type="%mult%all&gt;=" initial="1"></input><input type="%mult%all=" initial="1"></input><input type="%mult%all!=" initial="1"></input><input type="%mult%all==" initial="1"></input></inputs></block-definition><block-definition s="go %&apos;gf&apos; $nl wait %&apos;ps&apos; $nl go!!! %&apos;tb&apos;" type="command" category="variables"><header></header><code></code><translations></translations><inputs><input type="%mult$greenflag" initial="1"></input><input type="%mult$pause" initial="1"></input><input type="%mult$blitz" initial="1"></input></inputs></block-definition><block-definition s="%&apos;bool&apos;" type="predicate" category="variables"><header></header><code></code><translations></translations><inputs><input type="%mult%bool" initial="1"></input></inputs><script><block s="doReport"><l></l></block></script></block-definition><block-definition s="c %&apos;c&apos; %&apos;cs&apos; %&apos;ca&apos; %&apos;cl&apos; %&apos;cla&apos; %&apos;loop&apos;" type="predicate" category="variables"><header></header><code></code><translations></translations><inputs><input type="%mult%c" initial="1"></input><input type="%mult%cs" initial="1"></input><input type="%mult%cs" initial="1"></input><input type="%mult%cl" initial="1"></input><input type="%mult%cla" initial="1"></input><input type="%mult%cs" initial="1"></input></inputs><script><block s="doReport"><l></l></block></script></block-definition><block-definition s="a" type="command" category="variables"><header></header><code></code><translations></translations><inputs></inputs></block-definition></blocks><primitives></primitives><stage name="Stage" width="480" height="360" costume="0" color="255,255,255,1" tempo="60" threadsafe="false" penlog="false" volume="100" pan="0" lines="round" ternary="true" hyperops="true" codify="false" inheritance="true" sublistIDs="false" id="75"><pentrails>data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAeAAAAFoCAYAAACPNyggAAAAAXNSR0IArs4c6QAADoVJREFUeF7t1cEJAAAIxDDdf2m3sJ+4wEEQuuMIECBAgACBd4F9XzRIgAABAgQIjAB7AgIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECByxcQFpoRMBzwAAAABJRU5ErkJggg==</pentrails><costumes><list struct="atomic" id="76"></list></costumes><sounds><list struct="atomic" id="77"></list></sounds><variables></variables><blocks></blocks><scripts></scripts><sprites select="1"><sprite name="Sprite" idx="1" x="0.6169665809768503" y="-1.0796915167095165" heading="90" scale="1" volume="100" pan="0" rotation="1" draggable="true" costume="0" color="80,80,80,1" pen="tip" id="82"><costumes><list struct="atomic" id="83"></list></costumes><sounds><list struct="atomic" id="84"></list></sounds><blocks></blocks><variables></variables><scripts><script x="19.09090909090909" y="9.09090909090909"><custom-block s="custom input"></custom-block></script><script x="18.18181818181818" y="53.21212121212123"><custom-block s="default input"></custom-block></script><script x="106.36363636363636" y="106.37878787878796"><custom-block s="rc %rc rr %rr rp %rp cmd %cmd"><script></script><script></script><script></script><script></script></custom-block></script><script x="105.9090909090909" y="140.9242424242425"><custom-block s="%br %mult%elseif"><list></list></custom-block></script><script x="75.9090909090909" y="248.60606060605937"><custom-block s="%mult%sum %br %mult%product %br %mult%min %br %mult%max %br %mult%all %br %mult%any %br %mult%all&lt; %br %mult%all&gt; %br %mult%all&lt;= %br %mult%all&gt;= %br %mult%all= %br %mult%all!= %br %mult%all=="><list><list><l></l><l></l></list></list><list><list><l></l><l></l></list></list><list><list><l></l><l></l></list></list><list><list><l></l><l></l></list></list><list><list><l/><l/></list></list><list><list><l/><l/></list></list><list><list><l></l><l></l></list></list><list><list><l></l><l></l></list></list><list><list><l></l><l></l></list></list><list><list><l></l><l></l></list></list><list><list><l></l><l></l></list></list><list><list><l></l><l></l></list></list><list><list><l></l><l></l></list></list></custom-block></script><script x="78.63636363636363" y="470.5454545454545"><custom-block s="go %mult$greenflag %br wait %mult$pause %br go!!! %mult$blitz"><list></list><list></list><list></list></custom-block></script><script x="147.6726740056818" y="139.46969696969703"><custom-block s="%mult%bool"><list><l/></list></custom-block></script><script x="75.9090909090909" y="546.7878787878789"><custom-block s="c %mult%c %mult%cs %mult%cs %mult%cl %mult%cla %mult%cs"><list><script></script></list><list><script></script></list><list><script></script></list><list><script></script></list><list><script></script></list><list><script></script></list></custom-block></script><comment x="247.27272727272725" y="189.09090909090907" w="212.72727272727272" collapsed="false">make sure JavaScript extensions is enabled.&#xD;&#xD;alot of these are buggy and could potentially lead to a crash, so use at your own discretion. most notably is the input name one, which isnt supposed to be an input and leaves these bug (input name) reporters that throw an error in the console when clicked.&#xD;&#xD;this adds every single kind of &apos;input&apos; to the input dialog box. there are currently at the time of making this 126. alot of these are available now in snap but there are some that are interesting/fun to play around with that arent available but are programmed in.&#xD;&#xD;many of them are menus, approx. 60. these show up as normal inputs unless for some reason if you select multi input, then it will show the menu. there is similar behavior with the %bool input (the long boolean selector). it shows up as a normal sized bool as a single input but if you put muti input it shows the long form.&#xD;&#xD;there are a few symbols that arent really inputs. you can select multi input though, but be careful setting things like default values could cause snap to freeze up.&#xD;&#xD;some of them are already multi inputs like the math operations (add multiply min max and etc), which you can then make multi inputs themselves, and have multi-multi inputs.&#xD;&#xD;the c script inputs that arent normally available are buggy, but have special behaviors such as not being able to accept a reporter.&#xD;&#xD;my favorites are %rc %rr %rp and %cmd. the first three are the inputs to grey rings. the cmd one i dont really know, but it certainly looks cool. they do have odd behavior if you return their value, but ive found uses for them in the past.</comment></scripts></sprite></sprites></stage><variables></variables></scene></scenes></project><media name="Custom Input Dialog Box V2" app="Snap! 10, https://snap.berkeley.edu" version="2"></media></snapdata>