diff --git a/RELEASE_NOTES.md b/RELEASE_NOTES.md index c59617f..988a63e 100644 --- a/RELEASE_NOTES.md +++ b/RELEASE_NOTES.md @@ -23,6 +23,7 @@ June 2019. - add `set-hook` - add `unhook` - `c:put` primitive is a hookable word +- `set:` is now `array:` ## I/O and Extensions diff --git a/doc/Glossary-Concise.txt b/doc/Glossary-Concise.txt index 232e54f..cd5bd2f 100644 --- a/doc/Glossary-Concise.txt +++ b/doc/Glossary-Concise.txt @@ -205,6 +205,45 @@ Allocate the specified number of cells from the `Heap`. and D: nm-o A: - F: - Perform a bitwise AND operation between the two provided values. +array:contains-string? D: sa-f A: - F: - +Return `TRUE` if the string value is in the set or`FALSE` otherwise. + +array:contains? D: na-f A: - F: - +Return `TRUE` if the value is in the set or `FALSE` otherwise. + +array:counted-results D: q-a A: - F: - +Run a quote and construct a new set from the returned values. The quote should return the values and the number of values to put into the set. + +array:dup D: a-b A: - F: - +Make a copy of a set. Return the address of the copy. + +array:filter D: aq-b A: - F: - +For each item in the initial set, run the specified quote. If the quote returns `TRUE`, copy the item into a new set. If `FALSE`, discard it. Returns a pointer to the new set. + +array:for-each D: aq- A: - F: - +Execute the quote once for each item in the set. + +array:from-string D: s-a A: - F: - +Create a new set with the characters in the source string. + +array:length D: a-n A: - F: - +Return the length of a set. + +array:make D: q-a A: - F: - +Execute quote. Return a new set containing the values the quote leaves on the stack. This is identical to doing `array:counted-results array:reverse` + +array:map D: aq- A: - F: - +Execute quote once for each item in the set. Constructs a new set from the value returned by the quote. + +array:nth D: an-b A: - F: - +Return the actual address of the nth item in the set. + +array:reduce D: pnq-n A: - F: - +Takes a set, a starting value, and a quote. This will apply the quote to each item in the set; the quote should consume two values and return one. + +array:reverse D: a-b A: - F: - +Reverse the order of items in a set. This will return a new set. + as{ D: -f A: - F: - Begin an assembly section. @@ -604,6 +643,9 @@ Rotate the top three values. f:round D: - A: - F: f-f Round a floating point value. +f:sign D: -n A: - F: F- +Return 1 if the floating point value is positive or -1 if it is negative. + f:sin D: - A: - F: F-F Return the sine of a floating point number. @@ -763,9 +805,6 @@ Scan the I/O devices for a device with a specified ID. Returns the device number io:unix-syscall D: ...n- A: - F: - Trigger a Unix system call. This is not intended to be used directly. -ios:list-fonts D: - A: - F: - -Display a list of all installed fonts. - listen D: - A: - F: - Run interactive "listener" (a REPL). @@ -914,7 +953,7 @@ prefix:` D: s- A: - F: - Process token as a bytecode. prefix:| D: s- A: - F: - -POSTPONE equivilent. +POSTPONE equivalent. primitive D: - A: - F: - Change the class of the most recently defined word to `class:primitive`. @@ -1102,45 +1141,6 @@ Trim trailing whitespace from a string. set-hook D: aa- A: - F: - Patch the hook point in a2 to point to a1. -set:contains-string? D: sa-f A: - F: - -Return `TRUE` if the string value is in the set or`FALSE` otherwise. - -set:contains? D: na-f A: - F: - -Return `TRUE` if the value is in the set or `FALSE` otherwise. - -set:counted-results D: q-a A: - F: - -Run a quote and construct a new set from the returned values. The quote should return the values and the number of values to put into the set. - -set:dup D: a-b A: - F: - -Make a copy of a set. Return the address of the copy. - -set:filter D: aq-b A: - F: - -For each item in the initial set, run the specified quote. If the quote returns `TRUE`, copy the item into a new set. If `FALSE`, discard it. Returns a pointer to the new set. - -set:for-each D: aq- A: - F: - -Execute the quote once for each item in the set. - -set:from-string D: s-a A: - F: - -Create a new set with the characters in the source string. - -set:length D: a-n A: - F: - -Return the length of a set. - -set:make D: q-a A: - F: - -Execute quote. Return a new set containing the values the quote leaves on the stack. This is identical to doing `set:counted-results set:reverse` - -set:map D: aq- A: - F: - -Execute quote once for each item in the set. Constructs a new set from the value returned by the quote. - -set:nth D: an-b A: - F: - -Return the actual address of the nth item in the set. - -set:reduce D: pnq-n A: - F: - -Takes a set, a starting value, and a quote. This will apply the quote to each item in the set; the quote should consume two values and return one. - -set:reverse D: a-b A: - F: - -Reverse the order of items in a set. This will return a new set. - shift D: mn-o A: - F: - Peform a bitwise shift of m by n bits. If n is positive, shift right. If negative, the shift will be to the left. @@ -1222,6 +1222,9 @@ u:n? D: u-f A: - F: - u:nan? D: u-f A: - F: - Is encoded value a Nan? +u:scaling D: - A: - F: -f +Hook. Return a constant used as the scaling factor for the u: words. + u:to-f D: u- A: - F: -n Decode an encoded floating point value. @@ -1340,7 +1343,7 @@ xor D: mn-o A: - F: - Perform a bitwise XOR operation. { D: - A: - F: - -Begin a set. This is intended to make creating sets a bit cleaner than using a quotation and `set:counteh-results`. +Begin a set. This is intended to make creating sets a bit cleaner than using a quotation and `array:counteh-results`. {{ D: - A: - F: - Begin a lexically scoped area. diff --git a/doc/Glossary-Names_and_Stack.txt b/doc/Glossary-Names_and_Stack.txt index 232e54f..cd5bd2f 100644 --- a/doc/Glossary-Names_and_Stack.txt +++ b/doc/Glossary-Names_and_Stack.txt @@ -205,6 +205,45 @@ Allocate the specified number of cells from the `Heap`. and D: nm-o A: - F: - Perform a bitwise AND operation between the two provided values. +array:contains-string? D: sa-f A: - F: - +Return `TRUE` if the string value is in the set or`FALSE` otherwise. + +array:contains? D: na-f A: - F: - +Return `TRUE` if the value is in the set or `FALSE` otherwise. + +array:counted-results D: q-a A: - F: - +Run a quote and construct a new set from the returned values. The quote should return the values and the number of values to put into the set. + +array:dup D: a-b A: - F: - +Make a copy of a set. Return the address of the copy. + +array:filter D: aq-b A: - F: - +For each item in the initial set, run the specified quote. If the quote returns `TRUE`, copy the item into a new set. If `FALSE`, discard it. Returns a pointer to the new set. + +array:for-each D: aq- A: - F: - +Execute the quote once for each item in the set. + +array:from-string D: s-a A: - F: - +Create a new set with the characters in the source string. + +array:length D: a-n A: - F: - +Return the length of a set. + +array:make D: q-a A: - F: - +Execute quote. Return a new set containing the values the quote leaves on the stack. This is identical to doing `array:counted-results array:reverse` + +array:map D: aq- A: - F: - +Execute quote once for each item in the set. Constructs a new set from the value returned by the quote. + +array:nth D: an-b A: - F: - +Return the actual address of the nth item in the set. + +array:reduce D: pnq-n A: - F: - +Takes a set, a starting value, and a quote. This will apply the quote to each item in the set; the quote should consume two values and return one. + +array:reverse D: a-b A: - F: - +Reverse the order of items in a set. This will return a new set. + as{ D: -f A: - F: - Begin an assembly section. @@ -604,6 +643,9 @@ Rotate the top three values. f:round D: - A: - F: f-f Round a floating point value. +f:sign D: -n A: - F: F- +Return 1 if the floating point value is positive or -1 if it is negative. + f:sin D: - A: - F: F-F Return the sine of a floating point number. @@ -763,9 +805,6 @@ Scan the I/O devices for a device with a specified ID. Returns the device number io:unix-syscall D: ...n- A: - F: - Trigger a Unix system call. This is not intended to be used directly. -ios:list-fonts D: - A: - F: - -Display a list of all installed fonts. - listen D: - A: - F: - Run interactive "listener" (a REPL). @@ -914,7 +953,7 @@ prefix:` D: s- A: - F: - Process token as a bytecode. prefix:| D: s- A: - F: - -POSTPONE equivilent. +POSTPONE equivalent. primitive D: - A: - F: - Change the class of the most recently defined word to `class:primitive`. @@ -1102,45 +1141,6 @@ Trim trailing whitespace from a string. set-hook D: aa- A: - F: - Patch the hook point in a2 to point to a1. -set:contains-string? D: sa-f A: - F: - -Return `TRUE` if the string value is in the set or`FALSE` otherwise. - -set:contains? D: na-f A: - F: - -Return `TRUE` if the value is in the set or `FALSE` otherwise. - -set:counted-results D: q-a A: - F: - -Run a quote and construct a new set from the returned values. The quote should return the values and the number of values to put into the set. - -set:dup D: a-b A: - F: - -Make a copy of a set. Return the address of the copy. - -set:filter D: aq-b A: - F: - -For each item in the initial set, run the specified quote. If the quote returns `TRUE`, copy the item into a new set. If `FALSE`, discard it. Returns a pointer to the new set. - -set:for-each D: aq- A: - F: - -Execute the quote once for each item in the set. - -set:from-string D: s-a A: - F: - -Create a new set with the characters in the source string. - -set:length D: a-n A: - F: - -Return the length of a set. - -set:make D: q-a A: - F: - -Execute quote. Return a new set containing the values the quote leaves on the stack. This is identical to doing `set:counted-results set:reverse` - -set:map D: aq- A: - F: - -Execute quote once for each item in the set. Constructs a new set from the value returned by the quote. - -set:nth D: an-b A: - F: - -Return the actual address of the nth item in the set. - -set:reduce D: pnq-n A: - F: - -Takes a set, a starting value, and a quote. This will apply the quote to each item in the set; the quote should consume two values and return one. - -set:reverse D: a-b A: - F: - -Reverse the order of items in a set. This will return a new set. - shift D: mn-o A: - F: - Peform a bitwise shift of m by n bits. If n is positive, shift right. If negative, the shift will be to the left. @@ -1222,6 +1222,9 @@ u:n? D: u-f A: - F: - u:nan? D: u-f A: - F: - Is encoded value a Nan? +u:scaling D: - A: - F: -f +Hook. Return a constant used as the scaling factor for the u: words. + u:to-f D: u- A: - F: -n Decode an encoded floating point value. @@ -1340,7 +1343,7 @@ xor D: mn-o A: - F: - Perform a bitwise XOR operation. { D: - A: - F: - -Begin a set. This is intended to make creating sets a bit cleaner than using a quotation and `set:counteh-results`. +Begin a set. This is intended to make creating sets a bit cleaner than using a quotation and `array:counteh-results`. {{ D: - A: - F: - Begin a lexically scoped area. diff --git a/doc/Glossary.html b/doc/Glossary.html index 1c99be2..ee23db7 100644 --- a/doc/Glossary.html +++ b/doc/Glossary.html @@ -581,6 +581,110 @@

Perform a bitwise AND operation between the two provided values.

Class: class:primitive | Namespace: global | Interface Layer: all


+

array:contains-string?

+

Data: sa-f
+Addr: -
+Float: -

+
+

Return `TRUE` if the string value is in the set or`FALSE` otherwise.

+

Class: class:word | Namespace: set | Interface Layer: all

+
+

array:contains?

+

Data: na-f
+Addr: -
+Float: -

+
+

Return `TRUE` if the value is in the set or `FALSE` otherwise.

+

Class: class:word | Namespace: set | Interface Layer: all

+
+

array:counted-results

+

Data: q-a
+Addr: -
+Float: -

+
+

Run a quote and construct a new set from the returned values. The quote should return the values and the number of values to put into the set.

+

Class: class:word | Namespace: set | Interface Layer: all

+
+

array:dup

+

Data: a-b
+Addr: -
+Float: -

+
+

Make a copy of a set. Return the address of the copy.

+

Class: class:word | Namespace: set | Interface Layer: all

+
+

array:filter

+

Data: aq-b
+Addr: -
+Float: -

+
+

For each item in the initial set, run the specified quote. If the quote returns `TRUE`, copy the item into a new set. If `FALSE`, discard it. Returns a pointer to the new set.

+

Class: class:word | Namespace: set | Interface Layer: all

+
+

array:for-each

+

Data: aq-
+Addr: -
+Float: -

+
+

Execute the quote once for each item in the set.

+

Class: class:word | Namespace: set | Interface Layer: all

+
+

array:from-string

+

Data: s-a
+Addr: -
+Float: -

+
+

Create a new set with the characters in the source string.

+

Class: class:word | Namespace: set | Interface Layer: all

+
+

array:length

+

Data: a-n
+Addr: -
+Float: -

+
+

Return the length of a set.

+

Class: class:word | Namespace: set | Interface Layer: all

+
+

array:make

+

Data: q-a
+Addr: -
+Float: -

+
+

Execute quote. Return a new set containing the values the quote leaves on the stack. This is identical to doing `array:counted-results array:reverse`

+

Class: class:word | Namespace: set | Interface Layer: all

+
+

array:map

+

Data: aq-
+Addr: -
+Float: -

+
+

Execute quote once for each item in the set. Constructs a new set from the value returned by the quote.

+

Class: class:word | Namespace: set | Interface Layer: all

+
+

array:nth

+

Data: an-b
+Addr: -
+Float: -

+
+

Return the actual address of the nth item in the set.

+

Class: class:word | Namespace: set | Interface Layer: all

+
+

array:reduce

+

Data: pnq-n
+Addr: -
+Float: -

+
+

Takes a set, a starting value, and a quote. This will apply the quote to each item in the set; the quote should consume two values and return one.

+

Class: class:word | Namespace: set | Interface Layer: all

+
+

array:reverse

+

Data: a-b
+Addr: -
+Float: -

+
+

Reverse the order of items in a set. This will return a new set.

+

Class: class:word | Namespace: set | Interface Layer: all

+

as{

Data: -f
Addr: -
@@ -3231,110 +3335,6 @@ &bar &foo set-hook


-

set:contains-string?

-

Data: sa-f
-Addr: -
-Float: -

-
-

Return `TRUE` if the string value is in the set or`FALSE` otherwise.

-

Class: class:word | Namespace: set | Interface Layer: all

-
-

set:contains?

-

Data: na-f
-Addr: -
-Float: -

-
-

Return `TRUE` if the value is in the set or `FALSE` otherwise.

-

Class: class:word | Namespace: set | Interface Layer: all

-
-

set:counted-results

-

Data: q-a
-Addr: -
-Float: -

-
-

Run a quote and construct a new set from the returned values. The quote should return the values and the number of values to put into the set.

-

Class: class:word | Namespace: set | Interface Layer: all

-
-

set:dup

-

Data: a-b
-Addr: -
-Float: -

-
-

Make a copy of a set. Return the address of the copy.

-

Class: class:word | Namespace: set | Interface Layer: all

-
-

set:filter

-

Data: aq-b
-Addr: -
-Float: -

-
-

For each item in the initial set, run the specified quote. If the quote returns `TRUE`, copy the item into a new set. If `FALSE`, discard it. Returns a pointer to the new set.

-

Class: class:word | Namespace: set | Interface Layer: all

-
-

set:for-each

-

Data: aq-
-Addr: -
-Float: -

-
-

Execute the quote once for each item in the set.

-

Class: class:word | Namespace: set | Interface Layer: all

-
-

set:from-string

-

Data: s-a
-Addr: -
-Float: -

-
-

Create a new set with the characters in the source string.

-

Class: class:word | Namespace: set | Interface Layer: all

-
-

set:length

-

Data: a-n
-Addr: -
-Float: -

-
-

Return the length of a set.

-

Class: class:word | Namespace: set | Interface Layer: all

-
-

set:make

-

Data: q-a
-Addr: -
-Float: -

-
-

Execute quote. Return a new set containing the values the quote leaves on the stack. This is identical to doing `set:counted-results set:reverse`

-

Class: class:word | Namespace: set | Interface Layer: all

-
-

set:map

-

Data: aq-
-Addr: -
-Float: -

-
-

Execute quote once for each item in the set. Constructs a new set from the value returned by the quote.

-

Class: class:word | Namespace: set | Interface Layer: all

-
-

set:nth

-

Data: an-b
-Addr: -
-Float: -

-
-

Return the actual address of the nth item in the set.

-

Class: class:word | Namespace: set | Interface Layer: all

-
-

set:reduce

-

Data: pnq-n
-Addr: -
-Float: -

-
-

Takes a set, a starting value, and a quote. This will apply the quote to each item in the set; the quote should consume two values and return one.

-

Class: class:word | Namespace: set | Interface Layer: all

-
-

set:reverse

-

Data: a-b
-Addr: -
-Float: -

-
-

Reverse the order of items in a set. This will return a new set.

-

Class: class:word | Namespace: set | Interface Layer: all

-

shift

Data: mn-o
Addr: -
@@ -3930,7 +3930,7 @@ Addr: -
Float: -

-

Begin a set. This is intended to make creating sets a bit cleaner than using a quotation and `set:counteh-results`.

+

Begin a set. This is intended to make creating sets a bit cleaner than using a quotation and `array:counteh-results`.

Class: class:word | Namespace: set | Interface Layer: all


{{

diff --git a/doc/Glossary.txt b/doc/Glossary.txt index 58cc9a2..3cd01f6 100644 --- a/doc/Glossary.txt +++ b/doc/Glossary.txt @@ -795,6 +795,149 @@ Perform a bitwise AND operation between the two provided values. Class: class:primitive | Namespace: global | Interface Layer: all ------------------------------------------------------------------------ +array:contains-string? + + Data: sa-f + Addr: - + Float: - + +Return `TRUE` if the string value is in the set or`FALSE` otherwise. + +Class: class:word | Namespace: set | Interface Layer: all +------------------------------------------------------------------------ + +array:contains? + + Data: na-f + Addr: - + Float: - + +Return `TRUE` if the value is in the set or `FALSE` otherwise. + +Class: class:word | Namespace: set | Interface Layer: all +------------------------------------------------------------------------ + +array:counted-results + + Data: q-a + Addr: - + Float: - + +Run a quote and construct a new set from the returned values. The quote should return the values and the number of values to put into the set. + +Class: class:word | Namespace: set | Interface Layer: all +------------------------------------------------------------------------ + +array:dup + + Data: a-b + Addr: - + Float: - + +Make a copy of a set. Return the address of the copy. + +Class: class:word | Namespace: set | Interface Layer: all +------------------------------------------------------------------------ + +array:filter + + Data: aq-b + Addr: - + Float: - + +For each item in the initial set, run the specified quote. If the quote returns `TRUE`, copy the item into a new set. If `FALSE`, discard it. Returns a pointer to the new set. + +Class: class:word | Namespace: set | Interface Layer: all +------------------------------------------------------------------------ + +array:for-each + + Data: aq- + Addr: - + Float: - + +Execute the quote once for each item in the set. + +Class: class:word | Namespace: set | Interface Layer: all +------------------------------------------------------------------------ + +array:from-string + + Data: s-a + Addr: - + Float: - + +Create a new set with the characters in the source string. + +Class: class:word | Namespace: set | Interface Layer: all +------------------------------------------------------------------------ + +array:length + + Data: a-n + Addr: - + Float: - + +Return the length of a set. + +Class: class:word | Namespace: set | Interface Layer: all +------------------------------------------------------------------------ + +array:make + + Data: q-a + Addr: - + Float: - + +Execute quote. Return a new set containing the values the quote leaves on the stack. This is identical to doing `array:counted-results array:reverse` + +Class: class:word | Namespace: set | Interface Layer: all +------------------------------------------------------------------------ + +array:map + + Data: aq- + Addr: - + Float: - + +Execute quote once for each item in the set. Constructs a new set from the value returned by the quote. + +Class: class:word | Namespace: set | Interface Layer: all +------------------------------------------------------------------------ + +array:nth + + Data: an-b + Addr: - + Float: - + +Return the actual address of the nth item in the set. + +Class: class:word | Namespace: set | Interface Layer: all +------------------------------------------------------------------------ + +array:reduce + + Data: pnq-n + Addr: - + Float: - + +Takes a set, a starting value, and a quote. This will apply the quote to each item in the set; the quote should consume two values and return one. + +Class: class:word | Namespace: set | Interface Layer: all +------------------------------------------------------------------------ + +array:reverse + + Data: a-b + Addr: - + Float: - + +Reverse the order of items in a set. This will return a new set. + +Class: class:word | Namespace: set | Interface Layer: all +------------------------------------------------------------------------ + as{ Data: -f @@ -4380,149 +4523,6 @@ Example #1: ------------------------------------------------------------------------ -set:contains-string? - - Data: sa-f - Addr: - - Float: - - -Return `TRUE` if the string value is in the set or`FALSE` otherwise. - -Class: class:word | Namespace: set | Interface Layer: all ------------------------------------------------------------------------- - -set:contains? - - Data: na-f - Addr: - - Float: - - -Return `TRUE` if the value is in the set or `FALSE` otherwise. - -Class: class:word | Namespace: set | Interface Layer: all ------------------------------------------------------------------------- - -set:counted-results - - Data: q-a - Addr: - - Float: - - -Run a quote and construct a new set from the returned values. The quote should return the values and the number of values to put into the set. - -Class: class:word | Namespace: set | Interface Layer: all ------------------------------------------------------------------------- - -set:dup - - Data: a-b - Addr: - - Float: - - -Make a copy of a set. Return the address of the copy. - -Class: class:word | Namespace: set | Interface Layer: all ------------------------------------------------------------------------- - -set:filter - - Data: aq-b - Addr: - - Float: - - -For each item in the initial set, run the specified quote. If the quote returns `TRUE`, copy the item into a new set. If `FALSE`, discard it. Returns a pointer to the new set. - -Class: class:word | Namespace: set | Interface Layer: all ------------------------------------------------------------------------- - -set:for-each - - Data: aq- - Addr: - - Float: - - -Execute the quote once for each item in the set. - -Class: class:word | Namespace: set | Interface Layer: all ------------------------------------------------------------------------- - -set:from-string - - Data: s-a - Addr: - - Float: - - -Create a new set with the characters in the source string. - -Class: class:word | Namespace: set | Interface Layer: all ------------------------------------------------------------------------- - -set:length - - Data: a-n - Addr: - - Float: - - -Return the length of a set. - -Class: class:word | Namespace: set | Interface Layer: all ------------------------------------------------------------------------- - -set:make - - Data: q-a - Addr: - - Float: - - -Execute quote. Return a new set containing the values the quote leaves on the stack. This is identical to doing `set:counted-results set:reverse` - -Class: class:word | Namespace: set | Interface Layer: all ------------------------------------------------------------------------- - -set:map - - Data: aq- - Addr: - - Float: - - -Execute quote once for each item in the set. Constructs a new set from the value returned by the quote. - -Class: class:word | Namespace: set | Interface Layer: all ------------------------------------------------------------------------- - -set:nth - - Data: an-b - Addr: - - Float: - - -Return the actual address of the nth item in the set. - -Class: class:word | Namespace: set | Interface Layer: all ------------------------------------------------------------------------- - -set:reduce - - Data: pnq-n - Addr: - - Float: - - -Takes a set, a starting value, and a quote. This will apply the quote to each item in the set; the quote should consume two values and return one. - -Class: class:word | Namespace: set | Interface Layer: all ------------------------------------------------------------------------- - -set:reverse - - Data: a-b - Addr: - - Float: - - -Reverse the order of items in a set. This will return a new set. - -Class: class:word | Namespace: set | Interface Layer: all ------------------------------------------------------------------------- - shift Data: mn-o @@ -5332,7 +5332,7 @@ Class: class:primitive | Namespace: global | Interface Layer: all Addr: - Float: - -Begin a set. This is intended to make creating sets a bit cleaner than using a quotation and `set:counteh-results`. +Begin a set. This is intended to make creating sets a bit cleaner than using a quotation and `array:counteh-results`. Class: class:word | Namespace: set | Interface Layer: all ------------------------------------------------------------------------ diff --git a/example/Block-Editor.forth b/example/Block-Editor.forth index 82fa3da..9789830 100755 --- a/example/Block-Editor.forth +++ b/example/Block-Editor.forth @@ -262,7 +262,7 @@ tokenization. :prepare &Tokens #4096 [ #0 over store n:inc ] times drop ; :generate &Tokens !Heap &Block #32 s:tokenize ; :item dup s:length n:zero? [ drop ] [ interpret ] choose ; - :process [ item ] set:for-each ; + :process [ item ] array:for-each ; ---reveal--- :editor:key<1> [ prepare &Heap [ generate ] v:preserve process ] with-tob ; diff --git a/example/DisplayNames.forth b/example/DisplayNames.forth index 126ec87..e5845fc 100644 --- a/example/DisplayNames.forth +++ b/example/DisplayNames.forth @@ -70,7 +70,7 @@ any used space is recovered. &Heap [ identify-classes [ [ d:name s:put nl ] [ d:xt fetch d:words-in-class ] bi - nl nl ] set:for-each ] v:preserve ; + nl nl ] array:for-each ] v:preserve ; }} ~~~ diff --git a/example/Matrix.forth b/example/Matrix.forth index fc2e104..2f49816 100644 --- a/example/Matrix.forth +++ b/example/Matrix.forth @@ -31,5 +31,5 @@ Test matrix, should be "contained!" thrice. ``` #30 #20 #10 #3 #1 "tester matrix { tester #2 + #3 [ fetch-next swap ] times drop } -[ { #10 #20 #30 } set:contains? [ 'contained! s:put sp nl ] if ] set:for-each +[ { #10 #20 #30 } array:contains? [ 'contained! s:put sp nl ] if ] array:for-each ``` diff --git a/example/Primes.forth b/example/Primes.forth index 1fee9b8..3151603 100644 --- a/example/Primes.forth +++ b/example/Primes.forth @@ -6,7 +6,7 @@ This is a quick and dirty way to find prime numbers in a set. :extract (s-s) [ @NextPrime dup-pair eq? [ drop-pair TRUE ] - [ mod n:-zero? ] choose ] set:filter ; + [ mod n:-zero? ] choose ] array:filter ; ---reveal--- :get-primes (s-s) #2 !NextPrime @@ -20,5 +20,5 @@ And a test: :create-set (-a) here #3000 , #2 #3002 [ dup , n:inc ] times drop ; -create-set get-primes [ n:put sp ] set:for-each +create-set get-primes [ n:put sp ] array:for-each ~~~ diff --git a/example/atua-gophermap.forth b/example/atua-gophermap.forth index ce91e52..9d01068 100755 --- a/example/atua-gophermap.forth +++ b/example/atua-gophermap.forth @@ -70,7 +70,7 @@ unix:count-files 'FILES const Ok, now for a useful combinator. I want to be able to run something once for each file or directory in the current directory. One option would be to read the names and -construct a set, then use `set:for-each`. I decided to take +construct a set, then use `array:for-each`. I decided to take a different path: I implement a word to open a pipe, read a single line, then run a quote against it. diff --git a/example/defstruct.forth b/example/defstruct.forth index 4539e49..2fa23ac 100644 --- a/example/defstruct.forth +++ b/example/defstruct.forth @@ -10,13 +10,13 @@ This can be useful, so I'm doing something similar here. :make-struct (ns-) d:create , [ here swap fetch allot ] does ; ---reveal--- :defstruct (sa-) - dup set:length + dup array:length [ n:dec swap [ 'ab 'aabab reorder '@ s:append [ fetch + fetch ] make-helper '! s:append [ fetch + store ] make-helper n:dec - ] set:for-each drop + ] array:for-each drop ] sip swap make-struct ; }} ~~~ diff --git a/example/iOS/GopherClient.forth b/example/iOS/GopherClient.forth index 84dc436..cabe1b9 100644 --- a/example/iOS/GopherClient.forth +++ b/example/iOS/GopherClient.forth @@ -83,7 +83,7 @@ The next word is `display`. This will tokenize a line and display the `type` and ~~~ :display (s-) &Heap [ #0 !Displayed - ASCII:HT s:tokenize #0 set:nth fetch + ASCII:HT s:tokenize #0 array:nth fetch fetch-next type s:put ] v:preserve ; ~~~ @@ -102,7 +102,7 @@ And finally, tie everything together. This will display an index. #0 @Results [ over line display nl n:inc ] - set:for-each drop + array:for-each drop ] v:preserve ; }} ~~~ @@ -139,12 +139,12 @@ The last bit is `g`, which is used to navigate a directory. Pass it the line num ~~~ :g (n-) - &Heeap [ @Results swap set:nth fetch + &Heeap [ @Results swap array:nth fetch ASCII:HT s:tokenize - dup #0 set:nth fetch fetch [ - [ #2 set:nth fetch ] - [ #3 set:nth fetch s:chop s:to-number ] - [ #1 set:nth fetch ] tri grab + dup #0 array:nth fetch fetch [ + [ #2 array:nth fetch ] + [ #3 array:nth fetch s:chop s:to-number ] + [ #1 array:nth fetch ] tri grab ] dip display-by-type ] v:preserve ; ~~~ diff --git a/example/retro-extend.forth b/example/retro-extend.forth index 42f9e5c..391f4b1 100755 --- a/example/retro-extend.forth +++ b/example/retro-extend.forth @@ -238,7 +238,7 @@ top level word called returns. #0 sys:argv [ [ ASCII:SPACE s:tokenize - [ valid? [ to-TIB process ] &drop choose ] set:for-each + [ valid? [ to-TIB process ] &drop choose ] array:for-each progress ] gc ] unu nl ~~~ diff --git a/glossary.forth b/glossary.forth index 1050653..146326b 100755 --- a/glossary.forth +++ b/glossary.forth @@ -94,7 +94,7 @@ simple code. [ 'field: s:prepend d:create dup compile:lit &select compile:call compile:ret - &class:word reclass n:inc ] set:for-each drop + &class:word reclass n:inc ] array:for-each drop }} ~~~ @@ -281,7 +281,7 @@ before doing the checks. :record-name !SourceLine field:name s:keep over &GlossaryNames + store ; :populate-names #1 'words.tsv [ record-name n:inc ] file:for-each-line n:dec &GlossaryNames store ; - :in-set? dup &GlossaryNames set:contains-string? ; + :in-set? dup &GlossaryNames array:contains-string? ; ---reveal--- :display-missing restrict-scope populate-names @@ -372,7 +372,7 @@ when done. '/tmp/glossary.ex2 '/tmp/glossary.namespace '/tmp/glossary.interface } - [ file:delete ] set:for-each ; + [ file:delete ] array:for-each ; ~~~ Cleaning the edited data is necessary. This entails: @@ -532,7 +532,7 @@ you edit/save the TSV data with a spreadsheet application. &field:ex2 &field:namespace &field:interface } - [ call s:put tab ] set:for-each nl ; + [ call s:put tab ] array:for-each nl ; :export-tsv 'words.tsv [ s:keep !SourceLine display-fields ] file:for-each-line ; @@ -587,7 +587,7 @@ to use. '__glossary____concise '__tsv_________concise-stack '-------------------------------- - } [ s:put nl ] set:for-each ; + } [ s:put nl ] array:for-each ; ~~~ @@ -686,7 +686,7 @@ And then the actual top level server. '*_{_font-family:_monospace;_color:_#aaa;_background:_#121212;_} 'a_{_color:_#EE7600;_} ' - } [ s:put sp ] set:for-each ; + } [ s:put sp ] array:for-each ; :entry display-result ; @@ -704,13 +704,13 @@ And then the actual top level server. :handle-http page-header - &Selector ASCII:SPACE s:tokenize #1 set:nth fetch + &Selector ASCII:SPACE s:tokenize #1 array:nth fetch dup s:length #1 eq? [ drop http:list-words ] [ n:inc s:to-number http:display ] choose ; :handle-gopher - &Selector ASCII:SPACE s:tokenize #1 set:nth fetch + &Selector ASCII:SPACE s:tokenize #1 array:nth fetch s:chop s:keep dup s:put !Target gopher:display ; ---reveal--- diff --git a/interfaces/image.c b/interfaces/image.c index 8ec98e0..d63ad0e 100644 --- a/interfaces/image.c +++ b/interfaces/image.c @@ -1,6 +1,6 @@ #include -int32_t ngaImageCells = 9139; -int32_t ngaImage[] = { 1793,-1,9121,9138,201906,0,10,1,10,2,10,3,10,4,10,5,10,6,10, +int32_t ngaImageCells = 9165; +int32_t ngaImage[] = { 1793,-1,9147,9164,201906,0,10,1,10,2,10,3,10,4,10,5,10,6,10, 7,10,8,10,9,10,10,10,11,10,12,10,13,10,14,10,15,10,16,10, 17,10,18,10,19,10,20,10,21,10,22,10,23,10,24,10,25,10,26,10, 68223234,1,2575,85000450,1,656912,355,339,268505089,66,65,135205121,66,10,101384453,0,9,10,2049,59, @@ -52,7 +52,7 @@ int32_t ngaImage[] = { 1793,-1,9121,9138,201906,0,10,1,10,2,10,3,10,4,10,5,10,6, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,59,0,114,101,0,0,83,0,99,104,0,109,97,116, - 99,104,101,100,0,0,63,0,63,64,91,92,93,94,96,123,124,125,126,0, + 99,104,101,100,0,0,115,0,63,0,91,92,93,94,96,123,124,125,126,0, 72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, @@ -159,7 +159,7 @@ int32_t ngaImage[] = { 1793,-1,9121,9138,201906,0,10,1,10,2,10,3,10,4,10,5,10,6, 2065,10,1,3112,2049,2065,4,16,10,3093,3146,147,118,58,117,112,100,97,116,101, 45,117,115,105,110,103,0,4,1793,3153,15,4,8,10,1,3149,2049,2077,16,10, 3128,3167,147,99,111,112,121,0,1793,3176,1,59,2049,2065,2049,62,10,1,3169,2049, - 2252,3,3,10,3159,3196,147,83,99,111,112,101,76,105,115,116,0,9016,9044,10, + 2252,3,3,10,3159,3196,147,83,99,111,112,101,76,105,115,116,0,9042,9070,10, 3183,3205,147,123,123,0,2049,1570,2,1,3196,2049,62,16,10,3199,3230,147,45,45, 45,114,101,118,101,97,108,45,45,45,0,2049,1570,1,3196,2049,2908,16,10,3214, 3244,147,125,125,0,1,3196,2049,59,4,15,11,1793,3258,3841,3196,4097,2,10,1, @@ -354,106 +354,108 @@ int32_t ngaImage[] = { 1793,-1,9121,9138,201906,0,10,1,10,2,10,3,10,4,10,5,10,6, 10,1,7017,2049,2065,10,1,7015,2049,2065,1,7009,7,10,1,7009,8,3,10,6991, 7053,147,100,58,108,111,111,107,117,112,45,120,116,0,1,0,4,1793,7079,2049, 2055,2049,161,15,11,1793,7072,4,1,2016,2049,2065,10,1,7066,1,11,2049,67,10, - 1,7058,2049,7005,3,10,7038,7099,147,115,101,116,58,108,101,110,103,116,104,0, - 15,10,7085,7124,147,115,101,116,58,99,111,117,110,116,101,100,45,114,101,115, - 117,108,116,115,0,8,2049,1835,1793,7137,2,2049,108,1,108,2049,2252,10,1,7129, - 2049,2065,10,7101,7161,147,115,101,116,58,102,114,111,109,45,115,116,114,105,110, - 103,0,2049,1835,1793,7180,2,2049,82,2049,108,1793,7175,2049,108,10,1,7172,2049,4023, - 10,1,7165,2049,2065,10,7142,7190,134,81,0,0,7142,7207,147,115,101,116,58,102, - 111,114,45,101,97,99,104,0,1,7190,1793,7237,4097,7190,2049,59,1793,7231,2049,59, - 4,1793,7226,3841,7190,8,10,1,7222,2049,2065,10,1,7217,2049,2252,3,10,1,7211, - 2049,3107,10,7191,7253,147,115,101,116,58,100,117,112,0,2049,1835,1793,7271,2,15, - 2049,108,1793,7266,2049,108,10,1,7263,2049,7207,10,1,7257,2049,2065,10,7242,7290,147, - 115,101,116,58,102,105,108,116,101,114,0,1793,7318,67502597,1793,7297,8,10,1,7295, - 2049,2065,4,1793,7307,2049,108,10,1,7304,1793,7313,3,10,1,7311,2049,67,10,1, - 7292,2049,6951,2049,1835,1793,7333,67502597,15,2049,108,2049,7207,10,1,7326,2049,2065,2049,1835, - 67502597,18,2049,2921,67502597,16,10,7276,7351,134,70,0,0,7276,7369,147,115,101,116,58, - 99,111,110,116,97,105,110,115,63,0,1,7351,2049,3074,1793,7383,67502597,11,3841,7351, - 22,4097,7351,10,1,7375,2049,7207,3,3841,7351,10,7352,7415,147,115,101,116,58,99, - 111,110,116,97,105,110,115,45,115,116,114,105,110,103,63,0,1,7351,2049,3074, - 1793,7430,67502597,2049,96,3841,7351,22,4097,7351,10,1,7421,2049,7207,3,3841,7351,10,7391, - 7449,147,115,101,116,58,109,97,112,0,1793,7455,8,2049,108,10,1,7451,2049,6951, - 2049,1835,1793,7470,67502597,15,2049,108,2049,7207,10,1,7463,2049,2065,10,7438,7490,147,115, - 101,116,58,114,101,118,101,114,115,101,0,2049,1835,1793,7524,2049,59,1793,7502,17, - 2049,2921,10,1,7498,2049,2077,2,2049,108,1793,7518,2,15,2049,108,2049,2921,10,1, - 7511,2049,2252,3,10,1,7494,2049,2065,10,7475,7540,147,115,101,116,58,110,116,104, - 0,17,2049,2908,10,7529,7558,147,115,101,116,58,114,101,100,117,99,101,0,1793, - 7562,4,10,1,7560,2049,2065,2049,7207,10,7544,7581,147,115,101,116,58,109,97,107, - 101,0,2049,7124,2049,7490,10,7569,7591,159,123,0,1,288,2049,159,1,1556,2049,147, - 1,288,2049,159,10,7586,7609,159,125,0,1,305,2049,159,1,2065,2049,147,1,1556, - 2049,147,1,13,2049,153,1,41,2049,153,1,2921,2049,147,1,305,2049,159,1,7581, - 2049,147,10,7604,7648,134,73,48,0,105,105,0,7642,7657,134,73,49,0,46,46, - 0,7651,7666,134,73,50,0,46,46,0,7660,7675,134,73,51,0,46,46,0,7669, - 7688,147,111,112,99,111,100,101,0,2049,3697,46,46,0,1,7690,1793,7700,1,0, - 10,1,7697,2049,2326,2049,3697,108,105,0,1,7706,1793,7716,1,1,10,1,7713,2049, - 2326,2049,3697,100,117,0,1,7722,1793,7732,1,2,10,1,7729,2049,2326,2049,3697,100, - 114,0,1,7738,1793,7748,1,3,10,1,7745,2049,2326,2049,3697,115,119,0,1,7754, - 1793,7764,1,4,10,1,7761,2049,2326,2049,3697,112,117,0,1,7770,1793,7780,1,5, - 10,1,7777,2049,2326,2049,3697,112,111,0,1,7786,1793,7796,1,6,10,1,7793,2049, - 2326,2049,3697,106,117,0,1,7802,1793,7812,1,7,10,1,7809,2049,2326,2049,3697,99, - 97,0,1,7818,1793,7828,1,8,10,1,7825,2049,2326,2049,3697,99,99,0,1,7834, - 1793,7844,1,9,10,1,7841,2049,2326,2049,3697,114,101,0,1,7850,1793,7860,1,10, - 10,1,7857,2049,2326,2049,3697,101,113,0,1,7866,1793,7876,1,11,10,1,7873,2049, - 2326,2049,3697,110,101,0,1,7882,1793,7892,1,12,10,1,7889,2049,2326,2049,3697,108, - 116,0,1,7898,1793,7908,1,13,10,1,7905,2049,2326,2049,3697,103,116,0,1,7914, - 1793,7924,1,14,10,1,7921,2049,2326,2049,3697,102,101,0,1,7930,1793,7940,1,15, - 10,1,7937,2049,2326,2049,3697,115,116,0,1,7946,1793,7956,1,16,10,1,7953,2049, - 2326,2049,3697,97,100,0,1,7962,1793,7972,1,17,10,1,7969,2049,2326,2049,3697,115, - 117,0,1,7978,1793,7988,1,18,10,1,7985,2049,2326,2049,3697,109,117,0,1,7994, - 1793,8004,1,19,10,1,8001,2049,2326,2049,3697,100,105,0,1,8010,1793,8020,1,20, - 10,1,8017,2049,2326,2049,3697,97,110,0,1,8026,1793,8036,1,21,10,1,8033,2049, - 2326,2049,3697,111,114,0,1,8042,1793,8052,1,22,10,1,8049,2049,2326,2049,3697,120, - 111,0,1,8058,1793,8068,1,23,10,1,8065,2049,2326,2049,3697,115,104,0,1,8074, - 1793,8084,1,24,10,1,8081,2049,2326,2049,3697,122,114,0,1,8090,1793,8100,1,25, - 10,1,8097,2049,2326,2049,3697,101,110,0,1,8106,1793,8116,1,26,10,1,8113,2049, - 2326,2049,3697,105,101,0,1,8122,1793,8132,1,27,10,1,8129,2049,2326,2049,3697,105, - 113,0,1,8138,1793,8148,1,28,10,1,8145,2049,2326,2049,3697,105,105,0,1,8154, - 1793,8164,1,29,10,1,8161,2049,2326,3,1,0,10,7678,8180,147,112,97,99,107, - 0,1,7648,2049,7688,1,7657,2049,7688,1,7666,2049,7688,1,7675,2049,7688,1,-24,24, - 4,1,-16,24,17,4,1,-8,24,17,4,17,10,7604,8217,147,105,0,2,1, - 7648,1,2,2049,3167,1,2,17,2,1,7657,1,2,2049,3167,1,2,17,2,1, - 7666,1,2,2049,3167,1,2,17,1,7675,1,2,2049,3167,2049,8180,2049,108,10,8212, - 8263,147,100,0,2049,108,10,8258,8271,147,114,0,2049,200,2049,161,15,2049,108,10, - 8266,8286,159,97,115,123,0,3841,127,1,127,2049,3074,10,8279,8300,159,125,97,115, - 0,4097,127,10,8293,8319,147,99,117,114,114,101,110,116,45,108,105,110,101,0, - 2049,3568,1,1025,18,10,8303,8341,147,99,111,117,110,116,45,116,111,107,101,110, - 115,0,1793,8347,1,32,11,10,1,8343,2049,4452,2049,82,10,8325,8368,147,110,101, - 120,116,45,116,111,107,101,110,0,1,32,2049,6165,10,8354,8391,147,112,114,111, - 99,101,115,115,45,116,111,107,101,110,115,0,1793,8417,2049,8368,4,1793,8410,2, - 2049,82,2049,2583,1,367,1,11,2049,67,10,1,8398,2049,2065,2049,2908,10,1,8393, - 2049,2252,2049,367,10,8293,8438,147,115,58,101,118,97,108,117,97,116,101,0,2049, - 8319,2049,4655,2049,8319,2,2049,8341,2049,8391,10,8424,8456,134,76,80,0,0,8450,8466, - 134,73,110,100,101,120,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 1,7058,2049,7005,3,10,7038,7101,147,97,114,114,97,121,58,108,101,110,103,116, + 104,0,15,10,7085,7128,147,97,114,114,97,121,58,99,111,117,110,116,101,100, + 45,114,101,115,117,108,116,115,0,8,2049,1835,1793,7141,2,2049,108,1,108,2049, + 2252,10,1,7133,2049,2065,10,7103,7167,147,97,114,114,97,121,58,102,114,111,109, + 45,115,116,114,105,110,103,0,2049,1835,1793,7186,2,2049,82,2049,108,1793,7181,2049, + 108,10,1,7178,2049,4023,10,1,7171,2049,2065,10,7146,7196,134,81,0,0,7146,7215, + 147,97,114,114,97,121,58,102,111,114,45,101,97,99,104,0,1,7196,1793,7245, + 4097,7196,2049,59,1793,7239,2049,59,4,1793,7234,3841,7196,8,10,1,7230,2049,2065,10, + 1,7225,2049,2252,3,10,1,7219,2049,3107,10,7197,7263,147,97,114,114,97,121,58, + 100,117,112,0,2049,1835,1793,7281,2,15,2049,108,1793,7276,2049,108,10,1,7273,2049, + 7215,10,1,7267,2049,2065,10,7250,7302,147,97,114,114,97,121,58,102,105,108,116, + 101,114,0,1793,7330,67502597,1793,7309,8,10,1,7307,2049,2065,4,1793,7319,2049,108,10, + 1,7316,1793,7325,3,10,1,7323,2049,67,10,1,7304,2049,6951,2049,1835,1793,7345,67502597, + 15,2049,108,2049,7215,10,1,7338,2049,2065,2049,1835,67502597,18,2049,2921,67502597,16,10,7286, + 7363,134,70,0,0,7286,7383,147,97,114,114,97,121,58,99,111,110,116,97,105, + 110,115,63,0,1,7363,2049,3074,1793,7397,67502597,11,3841,7363,22,4097,7363,10,1,7389, + 2049,7215,3,3841,7363,10,7364,7431,147,97,114,114,97,121,58,99,111,110,116,97, + 105,110,115,45,115,116,114,105,110,103,63,0,1,7363,2049,3074,1793,7446,67502597,2049, + 96,3841,7363,22,4097,7363,10,1,7437,2049,7215,3,3841,7363,10,7405,7467,147,97,114, + 114,97,121,58,109,97,112,0,1793,7473,8,2049,108,10,1,7469,2049,6951,2049,1835, + 1793,7488,67502597,15,2049,108,2049,7215,10,1,7481,2049,2065,10,7454,7510,147,97,114,114, + 97,121,58,114,101,118,101,114,115,101,0,2049,1835,1793,7544,2049,59,1793,7522,17, + 2049,2921,10,1,7518,2049,2077,2,2049,108,1793,7538,2,15,2049,108,2049,2921,10,1, + 7531,2049,2252,3,10,1,7514,2049,2065,10,7493,7562,147,97,114,114,97,121,58,110, + 116,104,0,17,2049,2908,10,7549,7582,147,97,114,114,97,121,58,114,101,100,117, + 99,101,0,1793,7586,4,10,1,7584,2049,2065,2049,7215,10,7566,7607,147,97,114,114, + 97,121,58,109,97,107,101,0,2049,7128,2049,7510,10,7593,7617,159,123,0,1,288, + 2049,159,1,1556,2049,147,1,288,2049,159,10,7612,7635,159,125,0,1,305,2049,159, + 1,2065,2049,147,1,1556,2049,147,1,13,2049,153,1,41,2049,153,1,2921,2049,147, + 1,305,2049,159,1,7607,2049,147,10,7630,7674,134,73,48,0,105,105,0,7668,7683, + 134,73,49,0,46,46,0,7677,7692,134,73,50,0,46,46,0,7686,7701,134,73, + 51,0,46,46,0,7695,7714,147,111,112,99,111,100,101,0,2049,3697,46,46,0, + 1,7716,1793,7726,1,0,10,1,7723,2049,2326,2049,3697,108,105,0,1,7732,1793,7742, + 1,1,10,1,7739,2049,2326,2049,3697,100,117,0,1,7748,1793,7758,1,2,10,1, + 7755,2049,2326,2049,3697,100,114,0,1,7764,1793,7774,1,3,10,1,7771,2049,2326,2049, + 3697,115,119,0,1,7780,1793,7790,1,4,10,1,7787,2049,2326,2049,3697,112,117,0, + 1,7796,1793,7806,1,5,10,1,7803,2049,2326,2049,3697,112,111,0,1,7812,1793,7822, + 1,6,10,1,7819,2049,2326,2049,3697,106,117,0,1,7828,1793,7838,1,7,10,1, + 7835,2049,2326,2049,3697,99,97,0,1,7844,1793,7854,1,8,10,1,7851,2049,2326,2049, + 3697,99,99,0,1,7860,1793,7870,1,9,10,1,7867,2049,2326,2049,3697,114,101,0, + 1,7876,1793,7886,1,10,10,1,7883,2049,2326,2049,3697,101,113,0,1,7892,1793,7902, + 1,11,10,1,7899,2049,2326,2049,3697,110,101,0,1,7908,1793,7918,1,12,10,1, + 7915,2049,2326,2049,3697,108,116,0,1,7924,1793,7934,1,13,10,1,7931,2049,2326,2049, + 3697,103,116,0,1,7940,1793,7950,1,14,10,1,7947,2049,2326,2049,3697,102,101,0, + 1,7956,1793,7966,1,15,10,1,7963,2049,2326,2049,3697,115,116,0,1,7972,1793,7982, + 1,16,10,1,7979,2049,2326,2049,3697,97,100,0,1,7988,1793,7998,1,17,10,1, + 7995,2049,2326,2049,3697,115,117,0,1,8004,1793,8014,1,18,10,1,8011,2049,2326,2049, + 3697,109,117,0,1,8020,1793,8030,1,19,10,1,8027,2049,2326,2049,3697,100,105,0, + 1,8036,1793,8046,1,20,10,1,8043,2049,2326,2049,3697,97,110,0,1,8052,1793,8062, + 1,21,10,1,8059,2049,2326,2049,3697,111,114,0,1,8068,1793,8078,1,22,10,1, + 8075,2049,2326,2049,3697,120,111,0,1,8084,1793,8094,1,23,10,1,8091,2049,2326,2049, + 3697,115,104,0,1,8100,1793,8110,1,24,10,1,8107,2049,2326,2049,3697,122,114,0, + 1,8116,1793,8126,1,25,10,1,8123,2049,2326,2049,3697,101,110,0,1,8132,1793,8142, + 1,26,10,1,8139,2049,2326,2049,3697,105,101,0,1,8148,1793,8158,1,27,10,1, + 8155,2049,2326,2049,3697,105,113,0,1,8164,1793,8174,1,28,10,1,8171,2049,2326,2049, + 3697,105,105,0,1,8180,1793,8190,1,29,10,1,8187,2049,2326,3,1,0,10,7704, + 8206,147,112,97,99,107,0,1,7674,2049,7714,1,7683,2049,7714,1,7692,2049,7714,1, + 7701,2049,7714,1,-24,24,4,1,-16,24,17,4,1,-8,24,17,4,17,10,7630, + 8243,147,105,0,2,1,7674,1,2,2049,3167,1,2,17,2,1,7683,1,2,2049, + 3167,1,2,17,2,1,7692,1,2,2049,3167,1,2,17,1,7701,1,2,2049,3167, + 2049,8206,2049,108,10,8238,8289,147,100,0,2049,108,10,8284,8297,147,114,0,2049,200, + 2049,161,15,2049,108,10,8292,8312,159,97,115,123,0,3841,127,1,127,2049,3074,10, + 8305,8326,159,125,97,115,0,4097,127,10,8319,8345,147,99,117,114,114,101,110,116, + 45,108,105,110,101,0,2049,3568,1,1025,18,10,8329,8367,147,99,111,117,110,116, + 45,116,111,107,101,110,115,0,1793,8373,1,32,11,10,1,8369,2049,4452,2049,82, + 10,8351,8394,147,110,101,120,116,45,116,111,107,101,110,0,1,32,2049,6165,10, + 8380,8417,147,112,114,111,99,101,115,115,45,116,111,107,101,110,115,0,1793,8443, + 2049,8394,4,1793,8436,2,2049,82,2049,2583,1,367,1,11,2049,67,10,1,8424,2049, + 2065,2049,2908,10,1,8419,2049,2252,2049,367,10,8319,8464,147,115,58,101,118,97,108, + 117,97,116,101,0,2049,8345,2049,4655,2049,8345,2,2049,8367,2049,8417,10,8450,8482,134, + 76,80,0,0,8476,8492,134,73,110,100,101,120,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8457,8602,147,110,101, - 120,116,0,3841,8456,1,8466,17,2049,3009,10,8594,8618,147,112,114,101,112,0,1, - 8456,2049,3009,1,0,3841,8456,1,8466,17,16,10,8610,8639,147,100,111,110,101,0, - 1,8456,2049,3024,10,8424,8649,147,73,0,3841,8456,1,8466,17,15,10,8644,8661,147, - 74,0,3841,8456,1,8466,17,2049,2921,15,10,8656,8675,147,75,0,3841,8456,1,8466, - 17,1,2,18,15,10,8670,8706,147,116,105,109,101,115,60,119,105,116,104,45, - 105,110,100,101,120,62,0,2049,8618,4,1793,8726,25,2049,2921,5,1,21,2049,2077, - 6,2049,8602,1,8711,7,10,1,8711,8,3,2049,8639,10,8685,8741,159,104,111,111, - 107,0,1,1793,2049,108,2049,1835,2049,2908,2049,108,10,8733,8764,147,115,101,116,45, - 104,111,111,107,0,2049,2908,16,10,8752,8778,147,117,110,104,111,111,107,0,2049, - 2908,2,2049,2908,4,16,10,8768,8802,147,105,111,58,101,110,117,109,101,114,97, - 116,101,0,27,10,8786,8816,147,105,111,58,113,117,101,114,121,0,28,10,8804, - 8831,147,105,111,58,105,110,118,111,107,101,0,29,10,8818,8841,134,83,108,111, - 116,0,0,8818,8857,147,105,111,58,115,99,97,110,45,102,111,114,0,1,-1, - 4097,8841,2049,8802,1793,8883,2049,8649,2049,8816,772,67502597,11,1793,8879,2049,8649,4097,8841,10, - 1,8874,9,10,1,8865,2049,8706,3,3841,8841,10,8842,8900,147,99,58,112,117,116, - 0,1793,8902,1,0,2049,8831,10,8891,8913,147,110,108,0,1,10,2049,8900,10,8907, - 8924,147,115,112,0,1,32,2049,8900,10,8918,8936,147,116,97,98,0,1,9,2049, - 8900,10,8929,8950,147,115,58,112,117,116,0,1,8900,2049,4023,10,8941,8964,147,110, - 58,112,117,116,0,2049,5994,2049,8950,10,8955,8980,147,100,58,119,111,114,100,115, - 0,1793,8989,2049,165,2049,8950,2049,8924,10,1,8982,2049,7005,10,8969,9003,147,114,101, - 115,101,116,0,2049,1556,25,5,3,6,1,1,18,1,9005,7,10,8994,9030,147, - 100,117,109,112,45,115,116,97,99,107,0,2049,1556,25,3,5,2049,9030,6,2, - 2049,8964,2049,8924,10,9016,9066,147,100,105,115,112,108,97,121,45,105,102,45,109, - 97,116,99,104,101,100,0,2,2049,1835,2049,4323,1793,9078,2049,8950,2049,8924,10,1, - 9073,1793,9084,3,10,1,9082,2049,67,10,9016,9105,147,100,58,119,111,114,100,115, - 45,119,105,116,104,0,2049,1835,2049,4655,1793,9116,2049,165,2049,9066,10,1,9111,2049, - 7005,10,9089,9129,147,70,82,69,69,0,2049,3568,1,1025,18,2049,1835,18,10,0 }; + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,8483,8628,147,110,101,120,116,0,3841,8482,1,8492,17,2049,3009,10,8620,8644,147, + 112,114,101,112,0,1,8482,2049,3009,1,0,3841,8482,1,8492,17,16,10,8636,8665, + 147,100,111,110,101,0,1,8482,2049,3024,10,8450,8675,147,73,0,3841,8482,1,8492, + 17,15,10,8670,8687,147,74,0,3841,8482,1,8492,17,2049,2921,15,10,8682,8701,147, + 75,0,3841,8482,1,8492,17,1,2,18,15,10,8696,8732,147,116,105,109,101,115, + 60,119,105,116,104,45,105,110,100,101,120,62,0,2049,8644,4,1793,8752,25,2049, + 2921,5,1,21,2049,2077,6,2049,8628,1,8737,7,10,1,8737,8,3,2049,8665,10, + 8711,8767,159,104,111,111,107,0,1,1793,2049,108,2049,1835,2049,2908,2049,108,10,8759, + 8790,147,115,101,116,45,104,111,111,107,0,2049,2908,16,10,8778,8804,147,117,110, + 104,111,111,107,0,2049,2908,2,2049,2908,4,16,10,8794,8828,147,105,111,58,101, + 110,117,109,101,114,97,116,101,0,27,10,8812,8842,147,105,111,58,113,117,101, + 114,121,0,28,10,8830,8857,147,105,111,58,105,110,118,111,107,101,0,29,10, + 8844,8867,134,83,108,111,116,0,0,8844,8883,147,105,111,58,115,99,97,110,45, + 102,111,114,0,1,-1,4097,8867,2049,8828,1793,8909,2049,8675,2049,8842,772,67502597,11,1793, + 8905,2049,8675,4097,8867,10,1,8900,9,10,1,8891,2049,8732,3,3841,8867,10,8868,8926, + 147,99,58,112,117,116,0,1793,8928,1,0,2049,8857,10,8917,8939,147,110,108,0, + 1,10,2049,8926,10,8933,8950,147,115,112,0,1,32,2049,8926,10,8944,8962,147,116, + 97,98,0,1,9,2049,8926,10,8955,8976,147,115,58,112,117,116,0,1,8926,2049, + 4023,10,8967,8990,147,110,58,112,117,116,0,2049,5994,2049,8976,10,8981,9006,147,100, + 58,119,111,114,100,115,0,1793,9015,2049,165,2049,8976,2049,8950,10,1,9008,2049,7005, + 10,8995,9029,147,114,101,115,101,116,0,2049,1556,25,5,3,6,1,1,18,1, + 9031,7,10,9020,9056,147,100,117,109,112,45,115,116,97,99,107,0,2049,1556,25, + 3,5,2049,9056,6,2,2049,8990,2049,8950,10,9042,9092,147,100,105,115,112,108,97, + 121,45,105,102,45,109,97,116,99,104,101,100,0,2,2049,1835,2049,4323,1793,9104, + 2049,8976,2049,8950,10,1,9099,1793,9110,3,10,1,9108,2049,67,10,9042,9131,147,100, + 58,119,111,114,100,115,45,119,105,116,104,0,2049,1835,2049,4655,1793,9142,2049,165, + 2049,9092,10,1,9137,2049,7005,10,9115,9155,147,70,82,69,69,0,2049,3568,1,1025, + 18,2049,1835,18,10,0 }; diff --git a/interfaces/native/x86/Block-Editor.forth b/interfaces/native/x86/Block-Editor.forth index 16f0069..c645e91 100755 --- a/interfaces/native/x86/Block-Editor.forth +++ b/interfaces/native/x86/Block-Editor.forth @@ -251,7 +251,7 @@ tokenization. :prepare &Tokens #4096 [ #0 over store n:inc ] times drop ; :generate &Tokens !Heap &Block #32 s:tokenize ; :item dup s:length n:zero? [ drop ] [ interpret ] choose ; - :process [ item ] set:for-each ; + :process [ item ] array:for-each ; ---reveal--- :editor:key<1> [ prepare &Heap [ generate ] v:preserve process ] with-tob ; diff --git a/interfaces/rre_image.c b/interfaces/rre_image.c index e81388c..f00b33e 100644 --- a/interfaces/rre_image.c +++ b/interfaces/rre_image.c @@ -1,6 +1,6 @@ #include -int32_t ngaImageCells = 14834; -int32_t ngaImage[] = { 1793,14785,14812,14833,201906,0,10,1,10,2,10,3,10,4,10,5,10,6,10, +int32_t ngaImageCells = 14860; +int32_t ngaImage[] = { 1793,14811,14838,14859,201906,0,10,1,10,2,10,3,10,4,10,5,10,6,10, 7,10,8,10,9,10,10,10,11,10,12,10,13,10,14,10,15,10,16,10, 17,10,18,10,19,10,20,10,21,10,22,10,23,10,24,10,25,10,26,10, 68223234,1,2575,85000450,1,656912,142,141,268505089,66,65,135205121,66,10,101384453,0,9,10,2049,59, @@ -9,7 +9,7 @@ int32_t ngaImage[] = { 1793,14785,14812,14833,201906,0,10,1,10,2,10,3,10,4,10,5, 108,1793,115,2049,115,117506307,0,108,0,524545,25,113,168820993,0,127,1642241,127,134283523,7,113, 1793,108,7,524545,2049,108,1793,108,16846593,127,142,141,1793,67,16846593,127,113,141,1793,67, 7,10,659713,1,659713,2,659713,3,17108737,3,2,524559,108,2049,108,2049,108,2049,122,168820998, - 2,14812,1025,167841793,180,5,17826049,0,180,2,15,25,524546,165,134287105,181,96,2305,182,459023, + 2,14838,1025,167841793,180,5,17826049,0,180,2,15,25,524546,165,134287105,181,96,2305,182,459023, 190,134287361,181,185,659201,180,2049,59,25,84152833,48,286458116,10,459014,205,184618754,45,25,16974851,-1, 168886532,1,134284289,1,214,134284289,0,205,660227,32,0,0,112,114,101,102,105,120,58,105, 0,285278479,231,7,2576,524546,82,1641217,1,167838467,228,2049,244,2049,240,524545,231,200,17826050,230, @@ -159,7 +159,7 @@ int32_t ngaImage[] = { 1793,14785,14812,14833,201906,0,10,1,10,2,10,3,10,4,10,5, 2065,10,1,3112,2049,2065,4,16,10,3093,3146,147,118,58,117,112,100,97,116,101, 45,117,115,105,110,103,0,4,1793,3153,15,4,8,10,1,3149,2049,2077,16,10, 3128,3167,147,99,111,112,121,0,1793,3176,1,59,2049,2065,2049,62,10,1,3169,2049, - 2252,3,3,10,3159,3196,147,83,99,111,112,101,76,105,115,116,0,14412,14633,10, + 2252,3,3,10,3159,3196,147,83,99,111,112,101,76,105,115,116,0,14438,14659,10, 3183,3205,147,123,123,0,2049,1570,2,1,3196,2049,62,16,10,3199,3230,147,45,45, 45,114,101,118,101,97,108,45,45,45,0,2049,1570,1,3196,2049,2908,16,10,3214, 3244,147,125,125,0,1,3196,2049,59,4,15,11,1793,3258,3841,3196,4097,2,10,1, @@ -354,306 +354,307 @@ int32_t ngaImage[] = { 1793,14785,14812,14833,201906,0,10,1,10,2,10,3,10,4,10,5, 10,1,7017,2049,2065,10,1,7015,2049,2065,1,7009,7,10,1,7009,8,3,10,6991, 7053,147,100,58,108,111,111,107,117,112,45,120,116,0,1,0,4,1793,7079,2049, 2055,2049,161,15,11,1793,7072,4,1,2016,2049,2065,10,1,7066,1,11,2049,67,10, - 1,7058,2049,7005,3,10,7038,7099,147,115,101,116,58,108,101,110,103,116,104,0, - 15,10,7085,7124,147,115,101,116,58,99,111,117,110,116,101,100,45,114,101,115, - 117,108,116,115,0,8,2049,1835,1793,7137,2,2049,108,1,108,2049,2252,10,1,7129, - 2049,2065,10,7101,7161,147,115,101,116,58,102,114,111,109,45,115,116,114,105,110, - 103,0,2049,1835,1793,7180,2,2049,82,2049,108,1793,7175,2049,108,10,1,7172,2049,4023, - 10,1,7165,2049,2065,10,7142,7190,134,81,0,0,7142,7207,147,115,101,116,58,102, - 111,114,45,101,97,99,104,0,1,7190,1793,7237,4097,7190,2049,59,1793,7231,2049,59, - 4,1793,7226,3841,7190,8,10,1,7222,2049,2065,10,1,7217,2049,2252,3,10,1,7211, - 2049,3107,10,7191,7253,147,115,101,116,58,100,117,112,0,2049,1835,1793,7271,2,15, - 2049,108,1793,7266,2049,108,10,1,7263,2049,7207,10,1,7257,2049,2065,10,7242,7290,147, - 115,101,116,58,102,105,108,116,101,114,0,1793,7318,67502597,1793,7297,8,10,1,7295, - 2049,2065,4,1793,7307,2049,108,10,1,7304,1793,7313,3,10,1,7311,2049,67,10,1, - 7292,2049,6951,2049,1835,1793,7333,67502597,15,2049,108,2049,7207,10,1,7326,2049,2065,2049,1835, - 67502597,18,2049,2921,67502597,16,10,7276,7351,134,70,0,0,7276,7369,147,115,101,116,58, - 99,111,110,116,97,105,110,115,63,0,1,7351,2049,3074,1793,7383,67502597,11,3841,7351, - 22,4097,7351,10,1,7375,2049,7207,3,3841,7351,10,7352,7415,147,115,101,116,58,99, - 111,110,116,97,105,110,115,45,115,116,114,105,110,103,63,0,1,7351,2049,3074, - 1793,7430,67502597,2049,96,3841,7351,22,4097,7351,10,1,7421,2049,7207,3,3841,7351,10,7391, - 7449,147,115,101,116,58,109,97,112,0,1793,7455,8,2049,108,10,1,7451,2049,6951, - 2049,1835,1793,7470,67502597,15,2049,108,2049,7207,10,1,7463,2049,2065,10,7438,7490,147,115, - 101,116,58,114,101,118,101,114,115,101,0,2049,1835,1793,7524,2049,59,1793,7502,17, - 2049,2921,10,1,7498,2049,2077,2,2049,108,1793,7518,2,15,2049,108,2049,2921,10,1, - 7511,2049,2252,3,10,1,7494,2049,2065,10,7475,7540,147,115,101,116,58,110,116,104, - 0,17,2049,2908,10,7529,7558,147,115,101,116,58,114,101,100,117,99,101,0,1793, - 7562,4,10,1,7560,2049,2065,2049,7207,10,7544,7581,147,115,101,116,58,109,97,107, - 101,0,2049,7124,2049,7490,10,7569,7591,159,123,0,1,288,2049,159,1,1556,2049,147, - 1,288,2049,159,10,7586,7609,159,125,0,1,305,2049,159,1,2065,2049,147,1,1556, - 2049,147,1,13,2049,153,1,41,2049,153,1,2921,2049,147,1,305,2049,159,1,7581, - 2049,147,10,7604,7648,134,73,48,0,115,116,0,7642,7657,134,73,49,0,115,116, - 0,7651,7666,134,73,50,0,115,116,0,7660,7675,134,73,51,0,115,116,0,7669, - 7688,147,111,112,99,111,100,101,0,2049,3697,46,46,0,1,7690,1793,7700,1,0, - 10,1,7697,2049,2326,2049,3697,108,105,0,1,7706,1793,7716,1,1,10,1,7713,2049, - 2326,2049,3697,100,117,0,1,7722,1793,7732,1,2,10,1,7729,2049,2326,2049,3697,100, - 114,0,1,7738,1793,7748,1,3,10,1,7745,2049,2326,2049,3697,115,119,0,1,7754, - 1793,7764,1,4,10,1,7761,2049,2326,2049,3697,112,117,0,1,7770,1793,7780,1,5, - 10,1,7777,2049,2326,2049,3697,112,111,0,1,7786,1793,7796,1,6,10,1,7793,2049, - 2326,2049,3697,106,117,0,1,7802,1793,7812,1,7,10,1,7809,2049,2326,2049,3697,99, - 97,0,1,7818,1793,7828,1,8,10,1,7825,2049,2326,2049,3697,99,99,0,1,7834, - 1793,7844,1,9,10,1,7841,2049,2326,2049,3697,114,101,0,1,7850,1793,7860,1,10, - 10,1,7857,2049,2326,2049,3697,101,113,0,1,7866,1793,7876,1,11,10,1,7873,2049, - 2326,2049,3697,110,101,0,1,7882,1793,7892,1,12,10,1,7889,2049,2326,2049,3697,108, - 116,0,1,7898,1793,7908,1,13,10,1,7905,2049,2326,2049,3697,103,116,0,1,7914, - 1793,7924,1,14,10,1,7921,2049,2326,2049,3697,102,101,0,1,7930,1793,7940,1,15, - 10,1,7937,2049,2326,2049,3697,115,116,0,1,7946,1793,7956,1,16,10,1,7953,2049, - 2326,2049,3697,97,100,0,1,7962,1793,7972,1,17,10,1,7969,2049,2326,2049,3697,115, - 117,0,1,7978,1793,7988,1,18,10,1,7985,2049,2326,2049,3697,109,117,0,1,7994, - 1793,8004,1,19,10,1,8001,2049,2326,2049,3697,100,105,0,1,8010,1793,8020,1,20, - 10,1,8017,2049,2326,2049,3697,97,110,0,1,8026,1793,8036,1,21,10,1,8033,2049, - 2326,2049,3697,111,114,0,1,8042,1793,8052,1,22,10,1,8049,2049,2326,2049,3697,120, - 111,0,1,8058,1793,8068,1,23,10,1,8065,2049,2326,2049,3697,115,104,0,1,8074, - 1793,8084,1,24,10,1,8081,2049,2326,2049,3697,122,114,0,1,8090,1793,8100,1,25, - 10,1,8097,2049,2326,2049,3697,101,110,0,1,8106,1793,8116,1,26,10,1,8113,2049, - 2326,2049,3697,105,101,0,1,8122,1793,8132,1,27,10,1,8129,2049,2326,2049,3697,105, - 113,0,1,8138,1793,8148,1,28,10,1,8145,2049,2326,2049,3697,105,105,0,1,8154, - 1793,8164,1,29,10,1,8161,2049,2326,3,1,0,10,7678,8180,147,112,97,99,107, - 0,1,7648,2049,7688,1,7657,2049,7688,1,7666,2049,7688,1,7675,2049,7688,1,-24,24, - 4,1,-16,24,17,4,1,-8,24,17,4,17,10,7604,8217,147,105,0,2,1, - 7648,1,2,2049,3167,1,2,17,2,1,7657,1,2,2049,3167,1,2,17,2,1, - 7666,1,2,2049,3167,1,2,17,1,7675,1,2,2049,3167,2049,8180,2049,108,10,8212, - 8263,147,100,0,2049,108,10,8258,8271,147,114,0,2049,200,2049,161,15,2049,108,10, - 8266,8286,159,97,115,123,0,3841,127,1,127,2049,3074,10,8279,8300,159,125,97,115, - 0,4097,127,10,8293,8319,147,99,117,114,114,101,110,116,45,108,105,110,101,0, - 2049,3568,1,1025,18,10,8303,8341,147,99,111,117,110,116,45,116,111,107,101,110, - 115,0,1793,8347,1,32,11,10,1,8343,2049,4452,2049,82,10,8325,8368,147,110,101, - 120,116,45,116,111,107,101,110,0,1,32,2049,6165,10,8354,8391,147,112,114,111, - 99,101,115,115,45,116,111,107,101,110,115,0,1793,8417,2049,8368,4,1793,8410,2, - 2049,82,2049,2583,1,367,1,11,2049,67,10,1,8398,2049,2065,2049,2908,10,1,8393, - 2049,2252,2049,367,10,8293,8438,147,115,58,101,118,97,108,117,97,116,101,0,2049, - 8319,2049,4655,2049,8319,2,2049,8341,2049,8391,10,8424,8456,134,76,80,0,0,8450,8466, - 134,73,110,100,101,120,0,0,8,0,0,0,0,0,0,0,0,0,0,0, + 1,7058,2049,7005,3,10,7038,7101,147,97,114,114,97,121,58,108,101,110,103,116, + 104,0,15,10,7085,7128,147,97,114,114,97,121,58,99,111,117,110,116,101,100, + 45,114,101,115,117,108,116,115,0,8,2049,1835,1793,7141,2,2049,108,1,108,2049, + 2252,10,1,7133,2049,2065,10,7103,7167,147,97,114,114,97,121,58,102,114,111,109, + 45,115,116,114,105,110,103,0,2049,1835,1793,7186,2,2049,82,2049,108,1793,7181,2049, + 108,10,1,7178,2049,4023,10,1,7171,2049,2065,10,7146,7196,134,81,0,0,7146,7215, + 147,97,114,114,97,121,58,102,111,114,45,101,97,99,104,0,1,7196,1793,7245, + 4097,7196,2049,59,1793,7239,2049,59,4,1793,7234,3841,7196,8,10,1,7230,2049,2065,10, + 1,7225,2049,2252,3,10,1,7219,2049,3107,10,7197,7263,147,97,114,114,97,121,58, + 100,117,112,0,2049,1835,1793,7281,2,15,2049,108,1793,7276,2049,108,10,1,7273,2049, + 7215,10,1,7267,2049,2065,10,7250,7302,147,97,114,114,97,121,58,102,105,108,116, + 101,114,0,1793,7330,67502597,1793,7309,8,10,1,7307,2049,2065,4,1793,7319,2049,108,10, + 1,7316,1793,7325,3,10,1,7323,2049,67,10,1,7304,2049,6951,2049,1835,1793,7345,67502597, + 15,2049,108,2049,7215,10,1,7338,2049,2065,2049,1835,67502597,18,2049,2921,67502597,16,10,7286, + 7363,134,70,0,0,7286,7383,147,97,114,114,97,121,58,99,111,110,116,97,105, + 110,115,63,0,1,7363,2049,3074,1793,7397,67502597,11,3841,7363,22,4097,7363,10,1,7389, + 2049,7215,3,3841,7363,10,7364,7431,147,97,114,114,97,121,58,99,111,110,116,97, + 105,110,115,45,115,116,114,105,110,103,63,0,1,7363,2049,3074,1793,7446,67502597,2049, + 96,3841,7363,22,4097,7363,10,1,7437,2049,7215,3,3841,7363,10,7405,7467,147,97,114, + 114,97,121,58,109,97,112,0,1793,7473,8,2049,108,10,1,7469,2049,6951,2049,1835, + 1793,7488,67502597,15,2049,108,2049,7215,10,1,7481,2049,2065,10,7454,7510,147,97,114,114, + 97,121,58,114,101,118,101,114,115,101,0,2049,1835,1793,7544,2049,59,1793,7522,17, + 2049,2921,10,1,7518,2049,2077,2,2049,108,1793,7538,2,15,2049,108,2049,2921,10,1, + 7531,2049,2252,3,10,1,7514,2049,2065,10,7493,7562,147,97,114,114,97,121,58,110, + 116,104,0,17,2049,2908,10,7549,7582,147,97,114,114,97,121,58,114,101,100,117, + 99,101,0,1793,7586,4,10,1,7584,2049,2065,2049,7215,10,7566,7607,147,97,114,114, + 97,121,58,109,97,107,101,0,2049,7128,2049,7510,10,7593,7617,159,123,0,1,288, + 2049,159,1,1556,2049,147,1,288,2049,159,10,7612,7635,159,125,0,1,305,2049,159, + 1,2065,2049,147,1,1556,2049,147,1,13,2049,153,1,41,2049,153,1,2921,2049,147, + 1,305,2049,159,1,7607,2049,147,10,7630,7674,134,73,48,0,115,116,0,7668,7683, + 134,73,49,0,115,116,0,7677,7692,134,73,50,0,115,116,0,7686,7701,134,73, + 51,0,115,116,0,7695,7714,147,111,112,99,111,100,101,0,2049,3697,46,46,0, + 1,7716,1793,7726,1,0,10,1,7723,2049,2326,2049,3697,108,105,0,1,7732,1793,7742, + 1,1,10,1,7739,2049,2326,2049,3697,100,117,0,1,7748,1793,7758,1,2,10,1, + 7755,2049,2326,2049,3697,100,114,0,1,7764,1793,7774,1,3,10,1,7771,2049,2326,2049, + 3697,115,119,0,1,7780,1793,7790,1,4,10,1,7787,2049,2326,2049,3697,112,117,0, + 1,7796,1793,7806,1,5,10,1,7803,2049,2326,2049,3697,112,111,0,1,7812,1793,7822, + 1,6,10,1,7819,2049,2326,2049,3697,106,117,0,1,7828,1793,7838,1,7,10,1, + 7835,2049,2326,2049,3697,99,97,0,1,7844,1793,7854,1,8,10,1,7851,2049,2326,2049, + 3697,99,99,0,1,7860,1793,7870,1,9,10,1,7867,2049,2326,2049,3697,114,101,0, + 1,7876,1793,7886,1,10,10,1,7883,2049,2326,2049,3697,101,113,0,1,7892,1793,7902, + 1,11,10,1,7899,2049,2326,2049,3697,110,101,0,1,7908,1793,7918,1,12,10,1, + 7915,2049,2326,2049,3697,108,116,0,1,7924,1793,7934,1,13,10,1,7931,2049,2326,2049, + 3697,103,116,0,1,7940,1793,7950,1,14,10,1,7947,2049,2326,2049,3697,102,101,0, + 1,7956,1793,7966,1,15,10,1,7963,2049,2326,2049,3697,115,116,0,1,7972,1793,7982, + 1,16,10,1,7979,2049,2326,2049,3697,97,100,0,1,7988,1793,7998,1,17,10,1, + 7995,2049,2326,2049,3697,115,117,0,1,8004,1793,8014,1,18,10,1,8011,2049,2326,2049, + 3697,109,117,0,1,8020,1793,8030,1,19,10,1,8027,2049,2326,2049,3697,100,105,0, + 1,8036,1793,8046,1,20,10,1,8043,2049,2326,2049,3697,97,110,0,1,8052,1793,8062, + 1,21,10,1,8059,2049,2326,2049,3697,111,114,0,1,8068,1793,8078,1,22,10,1, + 8075,2049,2326,2049,3697,120,111,0,1,8084,1793,8094,1,23,10,1,8091,2049,2326,2049, + 3697,115,104,0,1,8100,1793,8110,1,24,10,1,8107,2049,2326,2049,3697,122,114,0, + 1,8116,1793,8126,1,25,10,1,8123,2049,2326,2049,3697,101,110,0,1,8132,1793,8142, + 1,26,10,1,8139,2049,2326,2049,3697,105,101,0,1,8148,1793,8158,1,27,10,1, + 8155,2049,2326,2049,3697,105,113,0,1,8164,1793,8174,1,28,10,1,8171,2049,2326,2049, + 3697,105,105,0,1,8180,1793,8190,1,29,10,1,8187,2049,2326,3,1,0,10,7704, + 8206,147,112,97,99,107,0,1,7674,2049,7714,1,7683,2049,7714,1,7692,2049,7714,1, + 7701,2049,7714,1,-24,24,4,1,-16,24,17,4,1,-8,24,17,4,17,10,7630, + 8243,147,105,0,2,1,7674,1,2,2049,3167,1,2,17,2,1,7683,1,2,2049, + 3167,1,2,17,2,1,7692,1,2,2049,3167,1,2,17,1,7701,1,2,2049,3167, + 2049,8206,2049,108,10,8238,8289,147,100,0,2049,108,10,8284,8297,147,114,0,2049,200, + 2049,161,15,2049,108,10,8292,8312,159,97,115,123,0,3841,127,1,127,2049,3074,10, + 8305,8326,159,125,97,115,0,4097,127,10,8319,8345,147,99,117,114,114,101,110,116, + 45,108,105,110,101,0,2049,3568,1,1025,18,10,8329,8367,147,99,111,117,110,116, + 45,116,111,107,101,110,115,0,1793,8373,1,32,11,10,1,8369,2049,4452,2049,82, + 10,8351,8394,147,110,101,120,116,45,116,111,107,101,110,0,1,32,2049,6165,10, + 8380,8417,147,112,114,111,99,101,115,115,45,116,111,107,101,110,115,0,1793,8443, + 2049,8394,4,1793,8436,2,2049,82,2049,2583,1,367,1,11,2049,67,10,1,8424,2049, + 2065,2049,2908,10,1,8419,2049,2252,2049,367,10,8319,8464,147,115,58,101,118,97,108, + 117,97,116,101,0,2049,8345,2049,4655,2049,8345,2,2049,8367,2049,8417,10,8450,8482,134, + 76,80,0,0,8476,8492,134,73,110,100,101,120,0,0,8,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8457,8602,147,110,101, - 120,116,0,3841,8456,1,8466,17,2049,3009,10,8594,8618,147,112,114,101,112,0,1, - 8456,2049,3009,1,0,3841,8456,1,8466,17,16,10,8610,8639,147,100,111,110,101,0, - 1,8456,2049,3024,10,8424,8649,147,73,0,3841,8456,1,8466,17,15,10,8644,8661,147, - 74,0,3841,8456,1,8466,17,2049,2921,15,10,8656,8675,147,75,0,3841,8456,1,8466, - 17,1,2,18,15,10,8670,8706,147,116,105,109,101,115,60,119,105,116,104,45, - 105,110,100,101,120,62,0,2049,8618,4,1793,8726,25,2049,2921,5,1,21,2049,2077, - 6,2049,8602,1,8711,7,10,1,8711,8,3,2049,8639,10,8685,8741,159,104,111,111, - 107,0,1,1793,2049,108,2049,1835,2049,2908,2049,108,10,8733,8764,147,115,101,116,45, - 104,111,111,107,0,2049,2908,16,10,8752,8778,147,117,110,104,111,111,107,0,2049, - 2908,2,2049,2908,4,16,10,8768,8802,147,105,111,58,101,110,117,109,101,114,97, - 116,101,0,27,10,8786,8816,147,105,111,58,113,117,101,114,121,0,28,10,8804, - 8831,147,105,111,58,105,110,118,111,107,101,0,29,10,8818,8841,134,83,108,111, - 116,0,7,8818,8857,147,105,111,58,115,99,97,110,45,102,111,114,0,1,-1, - 4097,8841,2049,8802,1793,8883,2049,8649,2049,8816,772,67502597,11,1793,8879,2049,8649,4097,8841,10, - 1,8874,9,10,1,8865,2049,8706,3,3841,8841,10,8842,8900,147,99,58,112,117,116, - 0,1793,8902,1,0,2049,8831,10,8891,8913,147,110,108,0,1,10,2049,8900,10,8907, - 8924,147,115,112,0,1,32,2049,8900,10,8918,8936,147,116,97,98,0,1,9,2049, - 8900,10,8929,8950,147,115,58,112,117,116,0,1,8900,2049,4023,10,8941,8964,147,110, - 58,112,117,116,0,2049,5994,2049,8950,10,8955,8980,147,100,58,119,111,114,100,115, - 0,1793,8989,2049,165,2049,8950,2049,8924,10,1,8982,2049,7005,10,8969,9003,147,114,101, - 115,101,116,0,2049,1556,25,5,3,6,1,1,18,1,9005,7,10,8994,9030,147, - 100,117,109,112,45,115,116,97,99,107,0,2049,1556,25,3,5,2049,9030,6,2, - 2049,8964,2049,8924,10,9016,9066,147,100,105,115,112,108,97,121,45,105,102,45,109, - 97,116,99,104,101,100,0,2,2049,1835,2049,4323,1793,9078,2049,8950,2049,8924,10,1, - 9073,1793,9084,3,10,1,9082,2049,67,10,9016,9105,147,100,58,119,111,114,100,115, - 45,119,105,116,104,0,2049,1835,2049,4655,1793,9116,2049,165,2049,9066,10,1,9111,2049, - 7005,10,9089,9129,147,70,82,69,69,0,2049,3568,1,1025,18,2049,1835,18,10,9121, - 9155,134,105,111,58,70,105,108,101,115,121,115,116,101,109,0,0,9138,9168,147, - 105,100,101,110,116,105,102,121,0,3841,9155,2049,2567,1793,9235,1,4,2049,8857,2, - 2049,2602,1793,9223,3,2049,3697,73,79,32,68,69,86,73,67,69,32,84,89,80, - 69,32,48,48,48,52,32,78,79,84,32,70,79,85,78,68,0,1,9186,2049, - 8950,2049,8913,10,1,9183,1793,9230,4097,9155,10,1,9227,2049,67,10,1,9174,9,10, - 9121,9260,147,105,111,58,102,105,108,101,45,111,112,101,114,97,116,105,111,110, - 0,2049,9168,3841,9155,2049,8831,10,9239,0,134,102,105,108,101,58,82,0,9267,1, - 134,102,105,108,101,58,87,0,9277,2,134,102,105,108,101,58,65,0,9287,3, - 134,102,105,108,101,58,82,43,0,9297,9321,147,102,105,108,101,58,111,112,101, - 110,0,1,0,2049,9260,10,9308,9340,147,102,105,108,101,58,99,108,111,115,101, - 0,1,1,2049,9260,10,9326,9358,147,102,105,108,101,58,114,101,97,100,0,1, - 2,2049,9260,10,9345,9377,147,102,105,108,101,58,119,114,105,116,101,0,1,3, - 2049,9260,10,9363,9395,147,102,105,108,101,58,116,101,108,108,0,1,4,2049,9260, - 10,9382,9413,147,102,105,108,101,58,115,101,101,107,0,1,5,2049,9260,10,9400, - 9431,147,102,105,108,101,58,115,105,122,101,0,1,6,2049,9260,10,9418,9451,147, - 102,105,108,101,58,100,101,108,101,116,101,0,1,7,2049,9260,10,9436,9470,147, - 102,105,108,101,58,102,108,117,115,104,0,1,8,2049,9260,10,9456,9491,147,102, - 105,108,101,58,101,120,105,115,116,115,63,0,1,0,2049,9321,2,2049,2583,1793, - 9505,2049,9340,2049,2428,10,1,9500,1793,9513,3,2049,2440,10,1,9509,2049,67,10,9475, - 9544,147,102,105,108,101,58,111,112,101,110,60,102,111,114,45,114,101,97,100, - 105,110,103,62,0,1,0,2049,9321,2,2049,9431,4,10,9518,9578,147,102,105,108, - 101,58,111,112,101,110,60,102,111,114,45,97,112,112,101,110,100,62,0,1, - 2,2049,9321,2,2049,9431,4,10,9553,9613,147,102,105,108,101,58,111,112,101,110, - 60,102,111,114,45,119,114,105,116,105,110,103,62,0,1,1,2049,9321,10,9587, - 9625,134,70,73,68,0,0,9618,9634,134,83,105,122,101,0,0,9626,9645,134,65, - 99,116,105,111,110,0,0,9635,9656,134,66,117,102,102,101,114,0,0,9646,9666, - 147,45,101,111,102,63,0,3841,9625,2049,9395,3841,9634,13,10,9657,9686,147,112,114, - 101,115,101,114,118,101,0,1,9625,1793,9701,1,9634,1793,9696,8,10,1,9694,2049, - 3107,10,1,9690,2049,3107,10,9587,9724,147,102,105,108,101,58,114,101,97,100,45, - 108,105,110,101,0,4097,9625,1793,9781,2049,1835,2,4097,9656,2049,3475,1793,9773,3841,9625, - 2049,9358,2,2049,3383,1793,9750,1,13,11,10,1,9746,1793,9758,1,10,11,10,1, - 9754,1793,9766,1,0,11,10,1,9762,2049,2129,22,22,10,1,9737,2049,2223,2049,3407, - 3,10,1,9728,2049,3499,3841,9656,10,9706,9810,147,102,105,108,101,58,102,111,114, - 45,101,97,99,104,45,108,105,110,101,0,1793,9841,4097,9645,2049,9544,4097,9625,4097, - 9634,1793,9832,3841,9625,2049,9724,3841,9645,8,2049,9666,10,1,9822,2049,2197,3841,9625,2049, - 9340,10,1,9812,2049,9686,10,9788,9853,134,70,73,68,0,0,9846,9862,134,83,105, - 122,101,0,0,9788,9877,147,102,105,108,101,58,115,108,117,114,112,0,1793,9907, - 2049,9544,4097,9853,4097,9862,2049,3475,3841,9862,1793,9898,3841,9853,2049,9358,2049,3383,10,1, - 9891,2049,2252,3841,9853,2049,9340,10,1,9879,2049,3499,10,9863,9919,134,70,73,68,0, - 0,9863,9933,147,102,105,108,101,58,115,112,101,119,0,2049,9613,4097,9919,1793,9944, - 3841,9919,2049,9377,10,1,9939,2049,4023,3841,9919,2049,9340,10,9920,9966,134,105,111,58, - 71,111,112,104,101,114,0,0,9953,9979,147,105,100,101,110,116,105,102,121,0, - 3841,9966,2049,2567,1793,10046,1,5,2049,8857,2,2049,2602,1793,10034,3,2049,3697,73,79, - 32,68,69,86,73,67,69,32,84,89,80,69,32,48,48,48,53,32,78,79, - 84,32,70,79,85,78,68,0,1,9997,2049,8950,2049,8913,10,1,9994,1793,10041,4097, - 9966,10,1,10038,2049,67,10,1,9985,9,10,9920,10064,147,103,111,112,104,101,114, - 58,103,101,116,0,2049,9979,1,0,3841,9966,2049,8831,10,10050,10093,134,105,111,58, - 70,108,111,97,116,105,110,103,80,111,105,110,116,0,0,10073,10106,147,105,100, - 101,110,116,105,102,121,0,3841,10093,2049,2567,1793,10173,1,2,2049,8857,2,2049,2602, - 1793,10161,3,2049,3697,73,79,32,68,69,86,73,67,69,32,84,89,80,69,32, - 48,48,48,50,32,78,79,84,32,70,79,85,78,68,0,1,10124,2049,8950,2049, - 8913,10,1,10121,1793,10168,4097,10093,10,1,10165,2049,67,10,1,10112,9,10,10050,10199, - 147,105,111,58,102,108,111,97,116,45,111,112,101,114,97,116,105,111,110,0, - 2049,10106,3841,10093,2049,8831,10,10177,10220,147,110,58,116,111,45,102,108,111,97,116, - 0,1,0,2049,10199,10,10206,10239,147,115,58,116,111,45,102,108,111,97,116,0, - 1,1,2049,10199,10,10225,10259,147,102,58,116,111,45,110,117,109,98,101,114,0, - 1,2,2049,10199,10,10244,10279,147,102,58,116,111,45,115,116,114,105,110,103,0, - 2049,3678,2,1,3,2049,10199,10,10264,10294,147,102,58,43,0,1,4,2049,10199,10, - 10287,10306,147,102,58,45,0,1,5,2049,10199,10,10299,10318,147,102,58,42,0,1, - 6,2049,10199,10,10311,10330,147,102,58,47,0,1,7,2049,10199,10,10323,10346,147,102, - 58,102,108,111,111,114,0,1,8,2049,10199,10,10335,10364,147,102,58,99,101,105, - 108,105,110,103,0,1,9,2049,10199,10,10351,10379,147,102,58,115,113,114,116,0, - 1,10,2049,10199,10,10369,10393,147,102,58,101,113,63,0,1,11,2049,10199,10,10384, - 10408,147,102,58,45,101,113,63,0,1,12,2049,10199,10,10398,10422,147,102,58,108, - 116,63,0,1,13,2049,10199,10,10413,10436,147,102,58,103,116,63,0,1,14,2049, - 10199,10,10427,10452,147,102,58,100,101,112,116,104,0,1,15,2049,10199,10,10441,10466, - 147,102,58,100,117,112,0,1,16,2049,10199,10,10457,10481,147,102,58,100,114,111, - 112,0,1,17,2049,10199,10,10471,10496,147,102,58,115,119,97,112,0,1,18,2049, - 10199,10,10486,10510,147,102,58,108,111,103,0,1,19,2049,10199,10,10501,10526,147,102, - 58,112,111,119,101,114,0,1,20,2049,10199,10,10515,10540,147,102,58,115,105,110, - 0,1,21,2049,10199,10,10531,10554,147,102,58,99,111,115,0,1,22,2049,10199,10, - 10545,10568,147,102,58,116,97,110,0,1,23,2049,10199,10,10559,10583,147,102,58,97, - 115,105,110,0,1,24,2049,10199,10,10573,10598,147,102,58,97,99,111,115,0,1, - 25,2049,10199,10,10588,10613,147,102,58,97,116,97,110,0,1,26,2049,10199,10,10603, - 10628,147,102,58,112,117,115,104,0,1,27,2049,10199,10,10618,10642,147,102,58,112, - 111,112,0,1,28,2049,10199,10,10633,10659,147,102,58,115,113,117,97,114,101,0, - 2049,10466,2049,10318,10,10647,10674,147,102,58,111,118,101,114,0,2049,10628,2049,10466,2049, - 10642,2049,10496,10,10664,10693,147,102,58,116,117,99,107,0,2049,10466,2049,10628,2049,10496, - 2049,10642,10,10683,10711,147,102,58,110,105,112,0,2049,10496,2049,10481,10,10702,10731,147, - 102,58,100,114,111,112,45,112,97,105,114,0,2049,10481,2049,10481,10,10716,10750,147, - 102,58,100,117,112,45,112,97,105,114,0,2049,10674,2049,10674,10,10736,10764,147,102, - 58,114,111,116,0,2049,10628,2049,10496,2049,10642,2049,10496,10,10755,10788,147,102,58,112, - 111,115,105,116,105,118,101,63,0,1,0,2049,10220,2049,10436,10,10773,10810,147,102, - 58,110,101,103,97,116,105,118,101,63,0,1,0,2049,10220,2049,10422,10,10795,10829, - 147,102,58,110,101,103,97,116,101,0,1,-1,2049,10220,2049,10318,10,10817,10845,147, - 102,58,97,98,115,0,2049,10466,2049,10810,1793,10854,2049,10829,10,1,10851,9,10,10836, - 10870,159,112,114,101,102,105,120,58,46,0,2049,1806,1793,10877,2049,3723,10,1,10874, - 1793,10884,2049,3652,10,1,10881,2049,67,1,10239,2049,147,10,10858,10902,147,102,58,112, - 117,116,0,2049,10279,2049,8950,10,10893,10915,147,102,58,80,73,0,2049,3697,51,46, - 49,52,49,53,57,50,0,1,10917,2049,10239,10,10907,10938,147,102,58,69,0,2049, - 3697,50,46,55,49,56,50,56,49,0,1,10940,2049,10239,10,10931,10963,147,102,58, - 78,65,78,0,2049,3697,48,0,1,10965,2049,10239,2049,3697,48,0,1,10973,2049,10239, - 2049,10330,10,10954,10991,147,102,58,73,78,70,0,2049,3697,49,46,48,0,1,10993, - 2049,10239,2049,3697,48,0,1,11003,2049,10239,2049,10330,10,10982,11022,147,102,58,45,73, - 78,70,0,2049,3697,45,49,46,48,0,1,11024,2049,10239,2049,3697,48,0,1,11035, - 2049,10239,2049,10330,10,11012,11054,147,102,58,110,97,110,63,0,2049,10466,2049,10408,10, - 11044,11069,147,102,58,105,110,102,63,0,2049,10991,2049,10393,10,11059,11085,147,102,58, - 45,105,110,102,63,0,2049,11022,2049,10393,10,11074,11101,147,102,58,114,111,117,110, - 100,0,2049,10466,2049,10810,1793,11122,2049,3697,48,46,53,0,1,11109,2049,10239,2049,10306, - 2049,10364,10,1,11107,1793,11141,2049,3697,48,46,53,0,1,11128,2049,10239,2049,10294,2049, - 10346,10,1,11126,2049,67,10,11090,11155,147,102,58,109,105,110,0,2049,10750,2049,10422, - 1,10481,1,10711,2049,67,10,11146,11175,147,102,58,109,97,120,0,2049,10750,2049,10436, - 1,10481,1,10711,2049,67,10,11166,11197,147,102,58,108,105,109,105,116,0,2049,10496, - 2049,10628,2049,11155,2049,10642,2049,11175,10,11186,11222,147,102,58,98,101,116,119,101,101, - 110,63,0,2049,10764,2049,10466,2049,10628,2049,10764,2049,10764,2049,11197,2049,10642,2049,10393,10, - 11208,11248,147,102,58,105,110,99,0,2049,3697,49,0,1,11250,2049,10239,2049,10294,10, - 11239,11268,147,102,58,100,101,99,0,2049,3697,49,0,1,11270,2049,10239,2049,10306,10, - 11259,11289,147,102,58,99,97,115,101,0,2049,10674,2049,10393,1793,11301,2049,10481,8,1, - -1,10,1,11295,1793,11309,3,1,0,10,1,11305,2049,67,25,6,771,10,11279,11327, - 147,102,58,115,105,103,110,0,2049,10466,2049,3697,48,0,1,11331,2049,10239,2049,10393, - 1793,11346,1,0,2049,10481,10,1,11341,2049,2494,2049,3697,48,0,1,11352,2049,10239,2049, - 10436,1793,11365,1,1,10,1,11362,1793,11372,1,-1,10,1,11369,2049,67,10,11317,2147483646, - 134,117,58,77,65,88,0,11377,-2147483646,134,117,58,77,73,78,0,11386,-2147483648,134,117, - 58,78,65,78,0,11395,2147483647,134,117,58,73,78,70,0,11404,-2147483647,134,117,58,45, - 73,78,70,0,11413,11431,147,117,58,110,63,0,1,-2147483646,2049,2908,1,2147483646,2049,2921, - 2049,2939,10,11423,11452,147,117,58,109,97,120,63,0,1,2147483646,11,10,11442,11466,147, - 117,58,109,105,110,63,0,1,-2147483646,11,10,11456,11481,147,117,58,122,101,114,111, - 63,0,2049,2567,10,11470,11494,147,117,58,110,97,110,63,0,1,-2147483648,11,10,11484, - 11508,147,117,58,105,110,102,63,0,1,2147483647,11,10,11498,11523,147,117,58,45,105, - 110,102,63,0,1,-2147483647,11,10,11512,11537,147,117,58,99,108,105,112,0,1,-2147483646, - 1,2147483646,2049,2891,10,11527,11557,147,117,58,115,99,97,108,105,110,103,0,1793,11559, - 2049,3697,49,48,46,48,101,45,52,0,1,11561,2049,10239,10,11544,11586,147,102,58, - 101,110,99,111,100,101,0,2049,3697,48,46,53,0,1,11588,2049,10239,2049,10526,2049, - 11557,2049,3697,45,49,46,48,0,1,11602,2049,10239,2049,10526,2049,10318,10,11574,11628,147, - 102,58,100,101,99,111,100,101,0,2049,10659,2049,11557,2049,10659,2049,10318,10,11544,11647, - 147,102,58,116,111,45,117,0,2049,10466,2049,11586,2049,11101,2049,10259,2049,11537,2049,10466, - 2049,11054,1793,11667,3,1,-2147483648,10,1,11663,9,2049,10466,2049,11069,1793,11680,3,1,2147483647, - 10,1,11676,9,2049,10466,2049,11085,1793,11693,3,1,-2147483647,10,1,11689,9,2049,10481,10, - 11637,11709,147,117,58,116,111,45,102,0,2,2049,10220,2049,11628,2,2049,11494,1793,11724, - 2049,10481,2049,10963,10,1,11719,9,2,2049,11508,1793,11737,2049,10481,2049,10991,10,1,11732, - 9,2,2049,11523,1793,11750,2049,10481,2049,11022,10,1,11745,9,3,10,11699,11766,147,102, - 58,115,116,111,114,101,0,1793,11771,2049,11647,10,1,11768,2049,2065,16,10,11755,11788, - 147,102,58,102,101,116,99,104,0,15,2049,11709,10,11777,11808,147,102,58,100,117, - 109,112,45,115,116,97,99,107,0,2049,10452,2,1793,11816,2049,10628,10,1,11813,2049, - 2252,1793,11831,2049,10642,2049,10466,2049,10902,2049,8924,10,1,11822,2049,2252,10,11792,11854,134, - 105,111,58,85,110,105,120,83,121,115,99,97,108,108,0,0,11836,11867,147,105, - 100,101,110,116,105,102,121,0,3841,11854,2049,2567,1793,11934,1,8,2049,8857,2,2049, - 2602,1793,11922,3,2049,3697,73,79,32,68,69,86,73,67,69,32,84,89,80,69, - 32,48,48,48,56,32,78,79,84,32,70,79,85,78,68,0,1,11885,2049,8950, - 2049,8913,10,1,11882,1793,11929,4097,11854,10,1,11926,2049,67,10,1,11873,9,10,11792, - 11957,147,105,111,58,117,110,105,120,45,115,121,115,99,97,108,108,0,2049,11867, - 3841,11854,2049,8831,10,11938,11979,147,117,110,105,120,58,115,121,115,116,101,109,0, - 1,0,2049,11957,10,11964,11997,147,117,110,105,120,58,102,111,114,107,0,1,1, - 2049,11957,10,11984,12016,147,117,110,105,120,58,101,120,101,99,48,0,1,2,2049, - 11957,10,12002,12035,147,117,110,105,120,58,101,120,101,99,49,0,1,3,2049,11957, - 10,12021,12054,147,117,110,105,120,58,101,120,101,99,50,0,1,4,2049,11957,10, - 12040,12073,147,117,110,105,120,58,101,120,101,99,51,0,1,5,2049,11957,10,12059, - 12091,147,117,110,105,120,58,101,120,105,116,0,1,6,2049,11957,10,12078,12111,147, - 117,110,105,120,58,103,101,116,112,105,100,0,1,7,2049,11957,10,12096,12129,147, - 117,110,105,120,58,119,97,105,116,0,1,8,2049,11957,10,12116,12147,147,117,110, - 105,120,58,107,105,108,108,0,1,9,2049,11957,10,12134,12166,147,117,110,105,120, - 58,112,111,112,101,110,0,1,10,2049,11957,10,12152,12186,147,117,110,105,120,58, - 112,99,108,111,115,101,0,1,11,2049,11957,10,12171,12205,147,117,110,105,120,58, - 119,114,105,116,101,0,1793,12211,2,2049,82,10,1,12207,2049,2065,1,12,2049,11957, - 10,12191,12234,147,117,110,105,120,58,99,104,100,105,114,0,1,13,2049,11957,10, - 12220,12254,147,117,110,105,120,58,103,101,116,101,110,118,0,1,14,2049,11957,10, - 12239,12274,147,117,110,105,120,58,112,117,116,101,110,118,0,1,15,2049,11957,10, - 12259,12293,147,117,110,105,120,58,115,108,101,101,112,0,1,16,2049,11957,10,12279, - 12315,147,117,110,105,120,58,105,111,58,110,58,112,117,116,0,1,17,2049,11957, - 10,12298,12337,147,117,110,105,120,58,105,111,58,115,58,112,117,116,0,1,18, - 2049,11957,10,12320,12358,147,117,110,105,120,58,103,101,116,45,99,119,100,0,2049, - 3697,112,119,100,0,1,12360,1,0,2049,12166,2,2049,9724,2049,3946,4,2049,12186,1, - 0,2049,3697,115,121,115,58,97,114,103,118,0,1,12382,2049,200,2049,161,15,8, - 2049,82,17,2049,3697,47,0,1,12404,2049,4005,10,12342,12438,147,117,110,105,120,58, - 99,111,117,110,116,45,102,105,108,101,115,45,105,110,45,99,119,100,0,2049, - 3697,108,115,32,45,49,32,124,32,119,99,32,45,108,0,1,12440,1,0,2049, - 12166,2,2049,9724,2049,3946,2049,221,4,2049,12186,10,12411,12493,147,117,110,105,120,58, - 102,111,114,45,101,97,99,104,45,102,105,108,101,0,2049,3697,108,115,32,45, - 49,32,45,112,0,1,12495,1,0,2049,12166,2049,12438,1793,12528,1793,12523,2049,9724,2049, - 3652,67502597,8,10,1,12516,2049,2077,10,1,12514,2049,2252,2049,12186,3,10,12471,12551,147, - 114,97,110,100,111,109,58,98,121,116,101,0,2049,3697,47,100,101,118,47,117, - 114,97,110,100,111,109,0,1,12553,1,0,2049,9321,1,9358,2049,2077,2049,9340,10, - 12471,12591,147,110,58,114,97,110,100,111,109,0,2049,12551,1,-8,24,2049,12551,17, - 1,-8,24,2049,12551,17,1,8,24,2049,12551,17,10,12579,12620,134,74,85,77,80, - 0,-2023489525,-180170029,1872770499,2012404571,12612,12629,134,107,0,0,12624,12635,134,116,0,0,12630,12642,134, - 115,48,0,0,12636,12649,134,115,49,0,0,12643,12656,134,115,50,0,0,12650,12663, - 134,115,51,0,0,12657,12674,147,114,101,115,101,101,100,0,2,4097,12649,2,4097, - 12656,2,4097,12663,2,4097,12629,4097,12635,10,12664,12697,147,114,111,116,108,0,4097,12629, - 1793,12707,3841,12629,2049,2759,24,10,1,12701,1793,12718,1,32,3841,12629,18,24,10,1, - 12711,2049,2092,22,10,12689,12733,147,114,101,115,42,42,0,3841,12642,1,5,19,1, - 7,2049,12697,1,9,19,10,12724,12754,147,110,101,120,116,0,3841,12649,2,1,-9, - 24,5,3841,12663,3841,12642,3841,12656,386269701,1285,386269701,100926980,85394690,386269701,386270726,4097,12656,4097,12649,4097, - 12642,1,11,2049,12697,4097,12663,10,12746,12797,147,120,111,114,45,101,114,0,386860290,5, - 386860290,5,386860290,5,386860290,5,101058054,101058054,10,12787,12817,147,106,117,109,112,63,0,1793,12824, - 1,12620,17,15,10,1,12819,2049,2065,1,1,4,2049,2759,24,21,10,12808,12845,147, - 105,110,110,101,114,0,1,32,1793,12872,2,2049,8649,2049,12817,1793,12866,1793,12861,2049, - 12797,10,1,12858,2049,2065,10,1,12856,9,2049,12754,10,1,12849,2049,8706,10,12579,12902, - 147,114,97,110,100,111,109,58,120,111,114,111,115,104,105,114,111,49,50,56, - 42,42,0,2049,12754,2049,12733,10,12877,12937,147,114,97,110,100,111,109,58,120,111, - 114,111,115,104,105,114,111,49,50,56,42,42,58,106,117,109,112,0,1,0, - 1,12663,1,0,1,12656,1,0,1,12649,1,0,1,12642,1,4,1793,12963,2049,8649, - 2049,12845,3,10,1,12957,2049,8706,269488144,10,12907,13003,147,114,97,110,100,111,109,58, - 120,111,114,111,115,104,105,114,111,49,50,56,42,42,58,115,101,116,45,115, - 101,101,100,0,2049,12674,1,100,1793,13012,2049,12754,10,1,13009,2049,2252,10,12969,13052, - 147,114,97,110,100,111,109,58,120,111,114,111,115,104,105,114,111,49,50,56, - 42,42,58,116,101,115,116,45,115,101,101,100,0,4097,12642,4097,12649,4097,12656,4097, - 12663,10,13017,13071,134,83,116,97,116,101,115,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,8483,8628,147,110,101,120,116,0,3841,8482,1,8492,17,2049,3009,10,8620,8644,147, + 112,114,101,112,0,1,8482,2049,3009,1,0,3841,8482,1,8492,17,16,10,8636,8665, + 147,100,111,110,101,0,1,8482,2049,3024,10,8450,8675,147,73,0,3841,8482,1,8492, + 17,15,10,8670,8687,147,74,0,3841,8482,1,8492,17,2049,2921,15,10,8682,8701,147, + 75,0,3841,8482,1,8492,17,1,2,18,15,10,8696,8732,147,116,105,109,101,115, + 60,119,105,116,104,45,105,110,100,101,120,62,0,2049,8644,4,1793,8752,25,2049, + 2921,5,1,21,2049,2077,6,2049,8628,1,8737,7,10,1,8737,8,3,2049,8665,10, + 8711,8767,159,104,111,111,107,0,1,1793,2049,108,2049,1835,2049,2908,2049,108,10,8759, + 8790,147,115,101,116,45,104,111,111,107,0,2049,2908,16,10,8778,8804,147,117,110, + 104,111,111,107,0,2049,2908,2,2049,2908,4,16,10,8794,8828,147,105,111,58,101, + 110,117,109,101,114,97,116,101,0,27,10,8812,8842,147,105,111,58,113,117,101, + 114,121,0,28,10,8830,8857,147,105,111,58,105,110,118,111,107,101,0,29,10, + 8844,8867,134,83,108,111,116,0,7,8844,8883,147,105,111,58,115,99,97,110,45, + 102,111,114,0,1,-1,4097,8867,2049,8828,1793,8909,2049,8675,2049,8842,772,67502597,11,1793, + 8905,2049,8675,4097,8867,10,1,8900,9,10,1,8891,2049,8732,3,3841,8867,10,8868,8926, + 147,99,58,112,117,116,0,1793,8928,1,0,2049,8857,10,8917,8939,147,110,108,0, + 1,10,2049,8926,10,8933,8950,147,115,112,0,1,32,2049,8926,10,8944,8962,147,116, + 97,98,0,1,9,2049,8926,10,8955,8976,147,115,58,112,117,116,0,1,8926,2049, + 4023,10,8967,8990,147,110,58,112,117,116,0,2049,5994,2049,8976,10,8981,9006,147,100, + 58,119,111,114,100,115,0,1793,9015,2049,165,2049,8976,2049,8950,10,1,9008,2049,7005, + 10,8995,9029,147,114,101,115,101,116,0,2049,1556,25,5,3,6,1,1,18,1, + 9031,7,10,9020,9056,147,100,117,109,112,45,115,116,97,99,107,0,2049,1556,25, + 3,5,2049,9056,6,2,2049,8990,2049,8950,10,9042,9092,147,100,105,115,112,108,97, + 121,45,105,102,45,109,97,116,99,104,101,100,0,2,2049,1835,2049,4323,1793,9104, + 2049,8976,2049,8950,10,1,9099,1793,9110,3,10,1,9108,2049,67,10,9042,9131,147,100, + 58,119,111,114,100,115,45,119,105,116,104,0,2049,1835,2049,4655,1793,9142,2049,165, + 2049,9092,10,1,9137,2049,7005,10,9115,9155,147,70,82,69,69,0,2049,3568,1,1025, + 18,2049,1835,18,10,9147,9181,134,105,111,58,70,105,108,101,115,121,115,116,101, + 109,0,0,9164,9194,147,105,100,101,110,116,105,102,121,0,3841,9181,2049,2567,1793, + 9261,1,4,2049,8883,2,2049,2602,1793,9249,3,2049,3697,73,79,32,68,69,86,73, + 67,69,32,84,89,80,69,32,48,48,48,52,32,78,79,84,32,70,79,85, + 78,68,0,1,9212,2049,8976,2049,8939,10,1,9209,1793,9256,4097,9181,10,1,9253,2049, + 67,10,1,9200,9,10,9147,9286,147,105,111,58,102,105,108,101,45,111,112,101, + 114,97,116,105,111,110,0,2049,9194,3841,9181,2049,8857,10,9265,0,134,102,105,108, + 101,58,82,0,9293,1,134,102,105,108,101,58,87,0,9303,2,134,102,105,108, + 101,58,65,0,9313,3,134,102,105,108,101,58,82,43,0,9323,9347,147,102,105, + 108,101,58,111,112,101,110,0,1,0,2049,9286,10,9334,9366,147,102,105,108,101, + 58,99,108,111,115,101,0,1,1,2049,9286,10,9352,9384,147,102,105,108,101,58, + 114,101,97,100,0,1,2,2049,9286,10,9371,9403,147,102,105,108,101,58,119,114, + 105,116,101,0,1,3,2049,9286,10,9389,9421,147,102,105,108,101,58,116,101,108, + 108,0,1,4,2049,9286,10,9408,9439,147,102,105,108,101,58,115,101,101,107,0, + 1,5,2049,9286,10,9426,9457,147,102,105,108,101,58,115,105,122,101,0,1,6, + 2049,9286,10,9444,9477,147,102,105,108,101,58,100,101,108,101,116,101,0,1,7, + 2049,9286,10,9462,9496,147,102,105,108,101,58,102,108,117,115,104,0,1,8,2049, + 9286,10,9482,9517,147,102,105,108,101,58,101,120,105,115,116,115,63,0,1,0, + 2049,9347,2,2049,2583,1793,9531,2049,9366,2049,2428,10,1,9526,1793,9539,3,2049,2440,10, + 1,9535,2049,67,10,9501,9570,147,102,105,108,101,58,111,112,101,110,60,102,111, + 114,45,114,101,97,100,105,110,103,62,0,1,0,2049,9347,2,2049,9457,4,10, + 9544,9604,147,102,105,108,101,58,111,112,101,110,60,102,111,114,45,97,112,112, + 101,110,100,62,0,1,2,2049,9347,2,2049,9457,4,10,9579,9639,147,102,105,108, + 101,58,111,112,101,110,60,102,111,114,45,119,114,105,116,105,110,103,62,0, + 1,1,2049,9347,10,9613,9651,134,70,73,68,0,0,9644,9660,134,83,105,122,101, + 0,0,9652,9671,134,65,99,116,105,111,110,0,0,9661,9682,134,66,117,102,102, + 101,114,0,0,9672,9692,147,45,101,111,102,63,0,3841,9651,2049,9421,3841,9660,13, + 10,9683,9712,147,112,114,101,115,101,114,118,101,0,1,9651,1793,9727,1,9660,1793, + 9722,8,10,1,9720,2049,3107,10,1,9716,2049,3107,10,9613,9750,147,102,105,108,101, + 58,114,101,97,100,45,108,105,110,101,0,4097,9651,1793,9807,2049,1835,2,4097,9682, + 2049,3475,1793,9799,3841,9651,2049,9384,2,2049,3383,1793,9776,1,13,11,10,1,9772,1793, + 9784,1,10,11,10,1,9780,1793,9792,1,0,11,10,1,9788,2049,2129,22,22,10, + 1,9763,2049,2223,2049,3407,3,10,1,9754,2049,3499,3841,9682,10,9732,9836,147,102,105, + 108,101,58,102,111,114,45,101,97,99,104,45,108,105,110,101,0,1793,9867,4097, + 9671,2049,9570,4097,9651,4097,9660,1793,9858,3841,9651,2049,9750,3841,9671,8,2049,9692,10,1, + 9848,2049,2197,3841,9651,2049,9366,10,1,9838,2049,9712,10,9814,9879,134,70,73,68,0, + 0,9872,9888,134,83,105,122,101,0,0,9814,9903,147,102,105,108,101,58,115,108, + 117,114,112,0,1793,9933,2049,9570,4097,9879,4097,9888,2049,3475,3841,9888,1793,9924,3841,9879, + 2049,9384,2049,3383,10,1,9917,2049,2252,3841,9879,2049,9366,10,1,9905,2049,3499,10,9889, + 9945,134,70,73,68,0,0,9889,9959,147,102,105,108,101,58,115,112,101,119,0, + 2049,9639,4097,9945,1793,9970,3841,9945,2049,9403,10,1,9965,2049,4023,3841,9945,2049,9366,10, + 9946,9992,134,105,111,58,71,111,112,104,101,114,0,0,9979,10005,147,105,100,101, + 110,116,105,102,121,0,3841,9992,2049,2567,1793,10072,1,5,2049,8883,2,2049,2602,1793, + 10060,3,2049,3697,73,79,32,68,69,86,73,67,69,32,84,89,80,69,32,48, + 48,48,53,32,78,79,84,32,70,79,85,78,68,0,1,10023,2049,8976,2049,8939, + 10,1,10020,1793,10067,4097,9992,10,1,10064,2049,67,10,1,10011,9,10,9946,10090,147, + 103,111,112,104,101,114,58,103,101,116,0,2049,10005,1,0,3841,9992,2049,8857,10, + 10076,10119,134,105,111,58,70,108,111,97,116,105,110,103,80,111,105,110,116,0, + 0,10099,10132,147,105,100,101,110,116,105,102,121,0,3841,10119,2049,2567,1793,10199,1, + 2,2049,8883,2,2049,2602,1793,10187,3,2049,3697,73,79,32,68,69,86,73,67,69, + 32,84,89,80,69,32,48,48,48,50,32,78,79,84,32,70,79,85,78,68, + 0,1,10150,2049,8976,2049,8939,10,1,10147,1793,10194,4097,10119,10,1,10191,2049,67,10, + 1,10138,9,10,10076,10225,147,105,111,58,102,108,111,97,116,45,111,112,101,114, + 97,116,105,111,110,0,2049,10132,3841,10119,2049,8857,10,10203,10246,147,110,58,116,111, + 45,102,108,111,97,116,0,1,0,2049,10225,10,10232,10265,147,115,58,116,111,45, + 102,108,111,97,116,0,1,1,2049,10225,10,10251,10285,147,102,58,116,111,45,110, + 117,109,98,101,114,0,1,2,2049,10225,10,10270,10305,147,102,58,116,111,45,115, + 116,114,105,110,103,0,2049,3678,2,1,3,2049,10225,10,10290,10320,147,102,58,43, + 0,1,4,2049,10225,10,10313,10332,147,102,58,45,0,1,5,2049,10225,10,10325,10344, + 147,102,58,42,0,1,6,2049,10225,10,10337,10356,147,102,58,47,0,1,7,2049, + 10225,10,10349,10372,147,102,58,102,108,111,111,114,0,1,8,2049,10225,10,10361,10390, + 147,102,58,99,101,105,108,105,110,103,0,1,9,2049,10225,10,10377,10405,147,102, + 58,115,113,114,116,0,1,10,2049,10225,10,10395,10419,147,102,58,101,113,63,0, + 1,11,2049,10225,10,10410,10434,147,102,58,45,101,113,63,0,1,12,2049,10225,10, + 10424,10448,147,102,58,108,116,63,0,1,13,2049,10225,10,10439,10462,147,102,58,103, + 116,63,0,1,14,2049,10225,10,10453,10478,147,102,58,100,101,112,116,104,0,1, + 15,2049,10225,10,10467,10492,147,102,58,100,117,112,0,1,16,2049,10225,10,10483,10507, + 147,102,58,100,114,111,112,0,1,17,2049,10225,10,10497,10522,147,102,58,115,119, + 97,112,0,1,18,2049,10225,10,10512,10536,147,102,58,108,111,103,0,1,19,2049, + 10225,10,10527,10552,147,102,58,112,111,119,101,114,0,1,20,2049,10225,10,10541,10566, + 147,102,58,115,105,110,0,1,21,2049,10225,10,10557,10580,147,102,58,99,111,115, + 0,1,22,2049,10225,10,10571,10594,147,102,58,116,97,110,0,1,23,2049,10225,10, + 10585,10609,147,102,58,97,115,105,110,0,1,24,2049,10225,10,10599,10624,147,102,58, + 97,99,111,115,0,1,25,2049,10225,10,10614,10639,147,102,58,97,116,97,110,0, + 1,26,2049,10225,10,10629,10654,147,102,58,112,117,115,104,0,1,27,2049,10225,10, + 10644,10668,147,102,58,112,111,112,0,1,28,2049,10225,10,10659,10685,147,102,58,115, + 113,117,97,114,101,0,2049,10492,2049,10344,10,10673,10700,147,102,58,111,118,101,114, + 0,2049,10654,2049,10492,2049,10668,2049,10522,10,10690,10719,147,102,58,116,117,99,107,0, + 2049,10492,2049,10654,2049,10522,2049,10668,10,10709,10737,147,102,58,110,105,112,0,2049,10522, + 2049,10507,10,10728,10757,147,102,58,100,114,111,112,45,112,97,105,114,0,2049,10507, + 2049,10507,10,10742,10776,147,102,58,100,117,112,45,112,97,105,114,0,2049,10700,2049, + 10700,10,10762,10790,147,102,58,114,111,116,0,2049,10654,2049,10522,2049,10668,2049,10522,10, + 10781,10814,147,102,58,112,111,115,105,116,105,118,101,63,0,1,0,2049,10246,2049, + 10462,10,10799,10836,147,102,58,110,101,103,97,116,105,118,101,63,0,1,0,2049, + 10246,2049,10448,10,10821,10855,147,102,58,110,101,103,97,116,101,0,1,-1,2049,10246, + 2049,10344,10,10843,10871,147,102,58,97,98,115,0,2049,10492,2049,10836,1793,10880,2049,10855, + 10,1,10877,9,10,10862,10896,159,112,114,101,102,105,120,58,46,0,2049,1806,1793, + 10903,2049,3723,10,1,10900,1793,10910,2049,3652,10,1,10907,2049,67,1,10265,2049,147,10, + 10884,10928,147,102,58,112,117,116,0,2049,10305,2049,8976,10,10919,10941,147,102,58,80, + 73,0,2049,3697,51,46,49,52,49,53,57,50,0,1,10943,2049,10265,10,10933,10964, + 147,102,58,69,0,2049,3697,50,46,55,49,56,50,56,49,0,1,10966,2049,10265, + 10,10957,10989,147,102,58,78,65,78,0,2049,3697,48,0,1,10991,2049,10265,2049,3697, + 48,0,1,10999,2049,10265,2049,10356,10,10980,11017,147,102,58,73,78,70,0,2049,3697, + 49,46,48,0,1,11019,2049,10265,2049,3697,48,0,1,11029,2049,10265,2049,10356,10,11008, + 11048,147,102,58,45,73,78,70,0,2049,3697,45,49,46,48,0,1,11050,2049,10265, + 2049,3697,48,0,1,11061,2049,10265,2049,10356,10,11038,11080,147,102,58,110,97,110,63, + 0,2049,10492,2049,10434,10,11070,11095,147,102,58,105,110,102,63,0,2049,11017,2049,10419, + 10,11085,11111,147,102,58,45,105,110,102,63,0,2049,11048,2049,10419,10,11100,11127,147, + 102,58,114,111,117,110,100,0,2049,10492,2049,10836,1793,11148,2049,3697,48,46,53,0, + 1,11135,2049,10265,2049,10332,2049,10390,10,1,11133,1793,11167,2049,3697,48,46,53,0,1, + 11154,2049,10265,2049,10320,2049,10372,10,1,11152,2049,67,10,11116,11181,147,102,58,109,105, + 110,0,2049,10776,2049,10448,1,10507,1,10737,2049,67,10,11172,11201,147,102,58,109,97, + 120,0,2049,10776,2049,10462,1,10507,1,10737,2049,67,10,11192,11223,147,102,58,108,105, + 109,105,116,0,2049,10522,2049,10654,2049,11181,2049,10668,2049,11201,10,11212,11248,147,102,58, + 98,101,116,119,101,101,110,63,0,2049,10790,2049,10492,2049,10654,2049,10790,2049,10790,2049, + 11223,2049,10668,2049,10419,10,11234,11274,147,102,58,105,110,99,0,2049,3697,49,0,1, + 11276,2049,10265,2049,10320,10,11265,11294,147,102,58,100,101,99,0,2049,3697,49,0,1, + 11296,2049,10265,2049,10332,10,11285,11315,147,102,58,99,97,115,101,0,2049,10700,2049,10419, + 1793,11327,2049,10507,8,1,-1,10,1,11321,1793,11335,3,1,0,10,1,11331,2049,67, + 25,6,771,10,11305,11353,147,102,58,115,105,103,110,0,2049,10492,2049,3697,48,0, + 1,11357,2049,10265,2049,10419,1793,11372,1,0,2049,10507,10,1,11367,2049,2494,2049,3697,48, + 0,1,11378,2049,10265,2049,10462,1793,11391,1,1,10,1,11388,1793,11398,1,-1,10,1, + 11395,2049,67,10,11343,2147483646,134,117,58,77,65,88,0,11403,-2147483646,134,117,58,77,73, + 78,0,11412,-2147483648,134,117,58,78,65,78,0,11421,2147483647,134,117,58,73,78,70,0, + 11430,-2147483647,134,117,58,45,73,78,70,0,11439,11457,147,117,58,110,63,0,1,-2147483646, + 2049,2908,1,2147483646,2049,2921,2049,2939,10,11449,11478,147,117,58,109,97,120,63,0,1, + 2147483646,11,10,11468,11492,147,117,58,109,105,110,63,0,1,-2147483646,11,10,11482,11507,147, + 117,58,122,101,114,111,63,0,2049,2567,10,11496,11520,147,117,58,110,97,110,63, + 0,1,-2147483648,11,10,11510,11534,147,117,58,105,110,102,63,0,1,2147483647,11,10,11524, + 11549,147,117,58,45,105,110,102,63,0,1,-2147483647,11,10,11538,11563,147,117,58,99, + 108,105,112,0,1,-2147483646,1,2147483646,2049,2891,10,11553,11583,147,117,58,115,99,97,108, + 105,110,103,0,1793,11585,2049,3697,49,48,46,48,101,45,52,0,1,11587,2049,10265, + 10,11570,11612,147,102,58,101,110,99,111,100,101,0,2049,3697,48,46,53,0,1, + 11614,2049,10265,2049,10552,2049,11583,2049,3697,45,49,46,48,0,1,11628,2049,10265,2049,10552, + 2049,10344,10,11600,11654,147,102,58,100,101,99,111,100,101,0,2049,10685,2049,11583,2049, + 10685,2049,10344,10,11570,11673,147,102,58,116,111,45,117,0,2049,10492,2049,11612,2049,11127, + 2049,10285,2049,11563,2049,10492,2049,11080,1793,11693,3,1,-2147483648,10,1,11689,9,2049,10492,2049, + 11095,1793,11706,3,1,2147483647,10,1,11702,9,2049,10492,2049,11111,1793,11719,3,1,-2147483647,10, + 1,11715,9,2049,10507,10,11663,11735,147,117,58,116,111,45,102,0,2,2049,10246,2049, + 11654,2,2049,11520,1793,11750,2049,10507,2049,10989,10,1,11745,9,2,2049,11534,1793,11763,2049, + 10507,2049,11017,10,1,11758,9,2,2049,11549,1793,11776,2049,10507,2049,11048,10,1,11771,9, + 3,10,11725,11792,147,102,58,115,116,111,114,101,0,1793,11797,2049,11673,10,1,11794, + 2049,2065,16,10,11781,11814,147,102,58,102,101,116,99,104,0,15,2049,11735,10,11803, + 11834,147,102,58,100,117,109,112,45,115,116,97,99,107,0,2049,10478,2,1793,11842, + 2049,10654,10,1,11839,2049,2252,1793,11857,2049,10668,2049,10492,2049,10928,2049,8950,10,1,11848, + 2049,2252,10,11818,11880,134,105,111,58,85,110,105,120,83,121,115,99,97,108,108, + 0,0,11862,11893,147,105,100,101,110,116,105,102,121,0,3841,11880,2049,2567,1793,11960, + 1,8,2049,8883,2,2049,2602,1793,11948,3,2049,3697,73,79,32,68,69,86,73,67, + 69,32,84,89,80,69,32,48,48,48,56,32,78,79,84,32,70,79,85,78, + 68,0,1,11911,2049,8976,2049,8939,10,1,11908,1793,11955,4097,11880,10,1,11952,2049,67, + 10,1,11899,9,10,11818,11983,147,105,111,58,117,110,105,120,45,115,121,115,99, + 97,108,108,0,2049,11893,3841,11880,2049,8857,10,11964,12005,147,117,110,105,120,58,115, + 121,115,116,101,109,0,1,0,2049,11983,10,11990,12023,147,117,110,105,120,58,102, + 111,114,107,0,1,1,2049,11983,10,12010,12042,147,117,110,105,120,58,101,120,101, + 99,48,0,1,2,2049,11983,10,12028,12061,147,117,110,105,120,58,101,120,101,99, + 49,0,1,3,2049,11983,10,12047,12080,147,117,110,105,120,58,101,120,101,99,50, + 0,1,4,2049,11983,10,12066,12099,147,117,110,105,120,58,101,120,101,99,51,0, + 1,5,2049,11983,10,12085,12117,147,117,110,105,120,58,101,120,105,116,0,1,6, + 2049,11983,10,12104,12137,147,117,110,105,120,58,103,101,116,112,105,100,0,1,7, + 2049,11983,10,12122,12155,147,117,110,105,120,58,119,97,105,116,0,1,8,2049,11983, + 10,12142,12173,147,117,110,105,120,58,107,105,108,108,0,1,9,2049,11983,10,12160, + 12192,147,117,110,105,120,58,112,111,112,101,110,0,1,10,2049,11983,10,12178,12212, + 147,117,110,105,120,58,112,99,108,111,115,101,0,1,11,2049,11983,10,12197,12231, + 147,117,110,105,120,58,119,114,105,116,101,0,1793,12237,2,2049,82,10,1,12233, + 2049,2065,1,12,2049,11983,10,12217,12260,147,117,110,105,120,58,99,104,100,105,114, + 0,1,13,2049,11983,10,12246,12280,147,117,110,105,120,58,103,101,116,101,110,118, + 0,1,14,2049,11983,10,12265,12300,147,117,110,105,120,58,112,117,116,101,110,118, + 0,1,15,2049,11983,10,12285,12319,147,117,110,105,120,58,115,108,101,101,112,0, + 1,16,2049,11983,10,12305,12341,147,117,110,105,120,58,105,111,58,110,58,112,117, + 116,0,1,17,2049,11983,10,12324,12363,147,117,110,105,120,58,105,111,58,115,58, + 112,117,116,0,1,18,2049,11983,10,12346,12384,147,117,110,105,120,58,103,101,116, + 45,99,119,100,0,2049,3697,112,119,100,0,1,12386,1,0,2049,12192,2,2049,9750, + 2049,3946,4,2049,12212,1,0,2049,3697,115,121,115,58,97,114,103,118,0,1,12408, + 2049,200,2049,161,15,8,2049,82,17,2049,3697,47,0,1,12430,2049,4005,10,12368,12464, + 147,117,110,105,120,58,99,111,117,110,116,45,102,105,108,101,115,45,105,110, + 45,99,119,100,0,2049,3697,108,115,32,45,49,32,124,32,119,99,32,45,108, + 0,1,12466,1,0,2049,12192,2,2049,9750,2049,3946,2049,221,4,2049,12212,10,12437,12519, + 147,117,110,105,120,58,102,111,114,45,101,97,99,104,45,102,105,108,101,0, + 2049,3697,108,115,32,45,49,32,45,112,0,1,12521,1,0,2049,12192,2049,12464,1793, + 12554,1793,12549,2049,9750,2049,3652,67502597,8,10,1,12542,2049,2077,10,1,12540,2049,2252,2049, + 12212,3,10,12497,12577,147,114,97,110,100,111,109,58,98,121,116,101,0,2049,3697, + 47,100,101,118,47,117,114,97,110,100,111,109,0,1,12579,1,0,2049,9347,1, + 9384,2049,2077,2049,9366,10,12497,12617,147,110,58,114,97,110,100,111,109,0,2049,12577, + 1,-8,24,2049,12577,17,1,-8,24,2049,12577,17,1,8,24,2049,12577,17,10,12605, + 12646,134,74,85,77,80,0,-2023489525,-180170029,1872770499,2012404571,12638,12655,134,107,0,0,12650,12661,134, + 116,0,0,12656,12668,134,115,48,0,0,12662,12675,134,115,49,0,0,12669,12682,134, + 115,50,0,0,12676,12689,134,115,51,0,0,12683,12700,147,114,101,115,101,101,100, + 0,2,4097,12675,2,4097,12682,2,4097,12689,2,4097,12655,4097,12661,10,12690,12723,147,114, + 111,116,108,0,4097,12655,1793,12733,3841,12655,2049,2759,24,10,1,12727,1793,12744,1,32, + 3841,12655,18,24,10,1,12737,2049,2092,22,10,12715,12759,147,114,101,115,42,42,0, + 3841,12668,1,5,19,1,7,2049,12723,1,9,19,10,12750,12780,147,110,101,120,116, + 0,3841,12675,2,1,-9,24,5,3841,12689,3841,12668,3841,12682,386269701,1285,386269701,100926980,85394690,386269701, + 386270726,4097,12682,4097,12675,4097,12668,1,11,2049,12723,4097,12689,10,12772,12823,147,120,111,114, + 45,101,114,0,386860290,5,386860290,5,386860290,5,386860290,5,101058054,101058054,10,12813,12843,147,106,117, + 109,112,63,0,1793,12850,1,12646,17,15,10,1,12845,2049,2065,1,1,4,2049,2759, + 24,21,10,12834,12871,147,105,110,110,101,114,0,1,32,1793,12898,2,2049,8675,2049, + 12843,1793,12892,1793,12887,2049,12823,10,1,12884,2049,2065,10,1,12882,9,2049,12780,10,1, + 12875,2049,8732,10,12605,12928,147,114,97,110,100,111,109,58,120,111,114,111,115,104, + 105,114,111,49,50,56,42,42,0,2049,12780,2049,12759,10,12903,12963,147,114,97,110, + 100,111,109,58,120,111,114,111,115,104,105,114,111,49,50,56,42,42,58,106, + 117,109,112,0,1,0,1,12689,1,0,1,12682,1,0,1,12675,1,0,1,12668, + 1,4,1793,12989,2049,8675,2049,12871,3,10,1,12983,2049,8732,269488144,10,12933,13029,147,114, + 97,110,100,111,109,58,120,111,114,111,115,104,105,114,111,49,50,56,42,42, + 58,115,101,116,45,115,101,101,100,0,2049,12700,1,100,1793,13038,2049,12780,10,1, + 13035,2049,2252,10,12995,13078,147,114,97,110,100,111,109,58,120,111,114,111,115,104, + 105,114,111,49,50,56,42,42,58,116,101,115,116,45,115,101,101,100,0,4097, + 12668,4097,12675,4097,12682,4097,12689,10,13043,13097,134,83,116,97,116,101,115,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, @@ -684,61 +685,62 @@ int32_t ngaImage[] = { 1793,14785,14812,14833,201906,0,10,1,10,2,10,3,10,4,10,5, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,13061,13705,134, - 73,110,100,101,120,0,0,13696,13715,147,114,101,115,101,116,0,1,13071,67502597,2049, - 2921,17,2,15,1,30,24,4,15,23,1,1812433253,19,67502597,17,2049,2541,21,4,1, - 13071,17,16,10,13706,13757,147,114,97,110,100,111,109,105,122,101,100,0,1,1, - 1793,13771,2,2049,13715,2049,2908,2,1,624,14,10,1,13761,2049,2223,3,10,13743,13782, - 147,121,0,2,2049,2908,1,624,788,1,13071,17,15,2049,2541,21,4,1,13071,17, - 15,1,-31,24,17,10,13777,13816,147,97,108,116,101,114,101,100,0,2,2049,13782, - 2,1,1,21,1,1073741823,19,1793,13844,1,2,197652,67502597,1,397,17,1,624,788,1, - 13071,17,15,23,10,1,13828,2049,2065,23,4,1,13071,17,16,10,13805,13868,147,115, - 99,114,97,109,98,108,101,100,0,1,0,1793,13882,2,2049,13816,2049,2908,2,1, - 624,14,10,1,13872,2049,2223,3,10,13017,13916,147,114,97,110,100,111,109,58,109, - 101,114,115,101,110,110,101,58,115,101,116,45,115,101,101,100,0,4097,13071,1, - 0,4097,13705,2049,13757,10,13888,13944,147,114,97,110,100,111,109,58,109,101,114,115, - 101,110,110,101,0,3841,13705,2049,2567,1,13868,9,3841,13705,1,13071,17,15,2,1, - 11,24,23,2,1,-7,24,1,1073741823,21,23,2,1,-15,24,1,2011365376,21,23,2, - 1,18,24,23,3841,13705,2049,2908,1,624,788,4097,13705,10,13925,14008,134,105,111,58, - 75,101,121,98,111,97,114,100,0,0,13993,14021,147,105,100,101,110,116,105,102, - 121,0,3841,14008,2049,2567,1793,14088,1,1,2049,8857,2,2049,2602,1793,14076,3,2049,3697, - 73,79,32,68,69,86,73,67,69,32,84,89,80,69,32,48,48,48,49,32, - 78,79,84,32,70,79,85,78,68,0,1,14039,2049,8950,2049,8913,10,1,14036,1793, - 14083,4097,14008,10,1,14080,2049,67,10,1,14027,9,10,13925,14101,147,99,58,103,101, - 116,0,2049,14021,3841,14008,2049,8831,10,14092,14118,147,103,97,116,104,101,114,0,2, - 1793,14125,1,8,11,10,1,14121,1793,14133,1,127,11,10,1,14129,2049,2092,22,1793, - 14142,3,10,1,14140,1793,14149,2049,3383,10,1,14146,2049,67,10,14108,14163,147,99,121, - 99,108,101,0,2049,14101,2049,2055,4,8,2049,2720,25,3,2049,14118,1,14163,7,10, - 14092,14194,147,112,97,114,115,101,45,117,110,116,105,108,0,1793,14206,2049,3678,2049, - 3475,2049,14163,771,2049,3349,10,1,14196,2049,3499,10,14179,14220,147,115,58,103,101,116, - 0,1793,14242,1793,14228,1,10,11,10,1,14224,1793,14236,1,13,11,10,1,14232,2049, - 2092,22,10,1,14222,2049,14194,10,14211,14263,134,105,111,58,83,99,114,105,112,116, - 105,110,103,0,0,14247,14276,147,105,100,101,110,116,105,102,121,0,3841,14263,2049, - 2567,1793,14343,1,9,2049,8857,2,2049,2602,1793,14331,3,2049,3697,73,79,32,68,69, - 86,73,67,69,32,84,89,80,69,32,48,48,48,57,32,78,79,84,32,70, - 79,85,78,68,0,1,14294,2049,8950,2049,8913,10,1,14291,1793,14338,4097,14263,10,1, - 14335,2049,67,10,1,14282,9,10,14211,14359,147,115,121,115,58,97,114,103,99,0, - 2049,14276,1,0,3841,14263,2049,8831,10,14347,14380,147,115,121,115,58,97,114,103,118, - 0,2049,3678,4,2049,14276,1,1,3841,14263,2049,8831,10,14368,14403,147,105,110,99,108, - 117,100,101,0,2049,14276,1,2,3841,14263,2049,8831,10,14392,14422,134,78,111,69,99, - 104,111,0,0,14412,14434,147,118,101,114,115,105,111,110,0,3841,4,1,100,20, - 2049,8964,1,46,2049,8900,2049,8964,10,14423,14456,147,101,111,108,63,0,1793,14462,1, - 13,11,10,1,14458,1793,14470,1,10,11,10,1,14466,1793,14478,1,32,11,10,1, - 14474,2049,2129,22,22,10,14448,14495,147,118,97,108,105,100,63,0,2,2049,82,2049, - 2583,10,14485,14507,147,111,107,0,3841,14422,2049,2720,25,3,2049,1806,1793,14530,2049,8913, - 2049,3697,79,107,32,0,1,14521,2049,8950,10,1,14517,2049,73,10,14501,14548,147,99, - 104,101,99,107,45,101,111,102,0,2,1793,14555,1,-1,11,10,1,14551,1793,14563, - 1,4,11,10,1,14559,2049,2092,22,1793,14585,2049,3697,98,121,101,0,1,14572,2049, - 200,2049,161,15,8,10,1,14570,9,10,14535,14601,147,99,104,101,99,107,45,98, - 115,0,2,1793,14608,1,8,11,10,1,14604,1793,14616,1,127,11,10,1,14612,2049, - 2092,22,1793,14629,2049,3407,2049,3407,771,10,1,14623,9,10,14589,14642,147,115,58,103, - 101,116,0,1793,14671,1,1025,2049,3475,1793,14662,2049,14101,2,2049,3383,2049,14548,2049,14601, - 2049,14456,10,1,14650,2049,2223,2049,3349,2049,3790,10,1,14644,2049,3499,10,14412,14686,147, - 98,97,110,110,101,114,0,3841,14422,2049,2720,25,3,2049,3697,82,69,84,82,79, - 32,49,50,32,40,114,120,45,0,1,14694,2049,8950,2049,14434,1,41,2049,8900,2049, - 8913,2049,1543,2049,8964,2049,3697,32,77,65,88,44,32,84,73,66,32,64,32,49, - 48,50,53,44,32,72,101,97,112,32,64,32,0,1,14726,2049,8950,2049,1835,2049, - 8964,2049,8913,10,14676,14770,147,98,121,101,0,1,0,2049,12091,10,14763,14785,147,108, - 105,115,116,101,110,0,2049,14507,2049,14642,2049,14495,1793,14798,2049,367,2049,14507,10,1, - 14793,1793,14804,3,10,1,14802,2049,67,1,14787,7,10,14775,14826,147,105,109,97,103, - 101,58,115,97,118,101,0,1,1000,2049,8857,2049,8831,10,0 }; + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,13087,13731,134,73,110,100,101,120,0,0,13722,13741,147,114,101,115,101, + 116,0,1,13097,67502597,2049,2921,17,2,15,1,30,24,4,15,23,1,1812433253,19,67502597, + 17,2049,2541,21,4,1,13097,17,16,10,13732,13783,147,114,97,110,100,111,109,105, + 122,101,100,0,1,1,1793,13797,2,2049,13741,2049,2908,2,1,624,14,10,1,13787, + 2049,2223,3,10,13769,13808,147,121,0,2,2049,2908,1,624,788,1,13097,17,15,2049, + 2541,21,4,1,13097,17,15,1,-31,24,17,10,13803,13842,147,97,108,116,101,114, + 101,100,0,2,2049,13808,2,1,1,21,1,1073741823,19,1793,13870,1,2,197652,67502597,1, + 397,17,1,624,788,1,13097,17,15,23,10,1,13854,2049,2065,23,4,1,13097,17, + 16,10,13831,13894,147,115,99,114,97,109,98,108,101,100,0,1,0,1793,13908,2, + 2049,13842,2049,2908,2,1,624,14,10,1,13898,2049,2223,3,10,13043,13942,147,114,97, + 110,100,111,109,58,109,101,114,115,101,110,110,101,58,115,101,116,45,115,101, + 101,100,0,4097,13097,1,0,4097,13731,2049,13783,10,13914,13970,147,114,97,110,100,111, + 109,58,109,101,114,115,101,110,110,101,0,3841,13731,2049,2567,1,13894,9,3841,13731, + 1,13097,17,15,2,1,11,24,23,2,1,-7,24,1,1073741823,21,23,2,1,-15, + 24,1,2011365376,21,23,2,1,18,24,23,3841,13731,2049,2908,1,624,788,4097,13731,10, + 13951,14034,134,105,111,58,75,101,121,98,111,97,114,100,0,0,14019,14047,147,105, + 100,101,110,116,105,102,121,0,3841,14034,2049,2567,1793,14114,1,1,2049,8883,2,2049, + 2602,1793,14102,3,2049,3697,73,79,32,68,69,86,73,67,69,32,84,89,80,69, + 32,48,48,48,49,32,78,79,84,32,70,79,85,78,68,0,1,14065,2049,8976, + 2049,8939,10,1,14062,1793,14109,4097,14034,10,1,14106,2049,67,10,1,14053,9,10,13951, + 14127,147,99,58,103,101,116,0,2049,14047,3841,14034,2049,8857,10,14118,14144,147,103,97, + 116,104,101,114,0,2,1793,14151,1,8,11,10,1,14147,1793,14159,1,127,11,10, + 1,14155,2049,2092,22,1793,14168,3,10,1,14166,1793,14175,2049,3383,10,1,14172,2049,67, + 10,14134,14189,147,99,121,99,108,101,0,2049,14127,2049,2055,4,8,2049,2720,25,3, + 2049,14144,1,14189,7,10,14118,14220,147,112,97,114,115,101,45,117,110,116,105,108, + 0,1793,14232,2049,3678,2049,3475,2049,14189,771,2049,3349,10,1,14222,2049,3499,10,14205,14246, + 147,115,58,103,101,116,0,1793,14268,1793,14254,1,10,11,10,1,14250,1793,14262,1, + 13,11,10,1,14258,2049,2092,22,10,1,14248,2049,14220,10,14237,14289,134,105,111,58, + 83,99,114,105,112,116,105,110,103,0,0,14273,14302,147,105,100,101,110,116,105, + 102,121,0,3841,14289,2049,2567,1793,14369,1,9,2049,8883,2,2049,2602,1793,14357,3,2049, + 3697,73,79,32,68,69,86,73,67,69,32,84,89,80,69,32,48,48,48,57, + 32,78,79,84,32,70,79,85,78,68,0,1,14320,2049,8976,2049,8939,10,1,14317, + 1793,14364,4097,14289,10,1,14361,2049,67,10,1,14308,9,10,14237,14385,147,115,121,115, + 58,97,114,103,99,0,2049,14302,1,0,3841,14289,2049,8857,10,14373,14406,147,115,121, + 115,58,97,114,103,118,0,2049,3678,4,2049,14302,1,1,3841,14289,2049,8857,10,14394, + 14429,147,105,110,99,108,117,100,101,0,2049,14302,1,2,3841,14289,2049,8857,10,14418, + 14448,134,78,111,69,99,104,111,0,0,14438,14460,147,118,101,114,115,105,111,110, + 0,3841,4,1,100,20,2049,8990,1,46,2049,8926,2049,8990,10,14449,14482,147,101,111, + 108,63,0,1793,14488,1,13,11,10,1,14484,1793,14496,1,10,11,10,1,14492,1793, + 14504,1,32,11,10,1,14500,2049,2129,22,22,10,14474,14521,147,118,97,108,105,100, + 63,0,2,2049,82,2049,2583,10,14511,14533,147,111,107,0,3841,14448,2049,2720,25,3, + 2049,1806,1793,14556,2049,8939,2049,3697,79,107,32,0,1,14547,2049,8976,10,1,14543,2049, + 73,10,14527,14574,147,99,104,101,99,107,45,101,111,102,0,2,1793,14581,1,-1, + 11,10,1,14577,1793,14589,1,4,11,10,1,14585,2049,2092,22,1793,14611,2049,3697,98, + 121,101,0,1,14598,2049,200,2049,161,15,8,10,1,14596,9,10,14561,14627,147,99, + 104,101,99,107,45,98,115,0,2,1793,14634,1,8,11,10,1,14630,1793,14642,1, + 127,11,10,1,14638,2049,2092,22,1793,14655,2049,3407,2049,3407,771,10,1,14649,9,10, + 14615,14668,147,115,58,103,101,116,0,1793,14697,1,1025,2049,3475,1793,14688,2049,14127,2, + 2049,3383,2049,14574,2049,14627,2049,14482,10,1,14676,2049,2223,2049,3349,2049,3790,10,1,14670, + 2049,3499,10,14438,14712,147,98,97,110,110,101,114,0,3841,14448,2049,2720,25,3,2049, + 3697,82,69,84,82,79,32,49,50,32,40,114,120,45,0,1,14720,2049,8976,2049, + 14460,1,41,2049,8926,2049,8939,2049,1543,2049,8990,2049,3697,32,77,65,88,44,32,84, + 73,66,32,64,32,49,48,50,53,44,32,72,101,97,112,32,64,32,0,1, + 14752,2049,8976,2049,1835,2049,8990,2049,8939,10,14702,14796,147,98,121,101,0,1,0,2049, + 12117,10,14789,14811,147,108,105,115,116,101,110,0,2049,14533,2049,14668,2049,14521,1793,14824, + 2049,367,2049,14533,10,1,14819,1793,14830,3,10,1,14828,2049,67,1,14813,7,10,14801, + 14852,147,105,109,97,103,101,58,115,97,118,101,0,1,1000,2049,8883,2049,8857,10, + 0 }; diff --git a/literate/RetroForth.md b/literate/RetroForth.md index 4e76bc9..91977f9 100644 --- a/literate/RetroForth.md +++ b/literate/RetroForth.md @@ -29,13 +29,13 @@ The main namespaces are: | namespace | words related to | | ---------- | ------------------ | | ASCII | ASCII Constants | + | array | arrays | | c | characters | | compile | compiler functions | | d | dictionary headers | | err | error handlers | | n | numbers | | s | strings | - | set | sets (arrays) | | v | variables | This makes it very easy to identify related words, especially @@ -1250,10 +1250,10 @@ dictionary header by the `d:xt` field. [ swap &nip dip ] &drop choose ] d:for-each drop ; ~~~ -## Sets +## Arrays -Sets are statically sized arrays. They are represented in -memory as: +Retro provides words for statically sized arrays. They are +represented in memory as: count data #1 (first) @@ -1262,69 +1262,69 @@ memory as: Since the count comes first, a simple `fetch` will suffice to get it, but for completeness (and to allow for future changes), -we wrap this as `set:length`: +we wrap this as `array:length`: ~~~ -:set:length (a-n) fetch ; +:array:length (a-n) fetch ; ~~~ -The first couple of words are used to create sets. The first, -`set:counted-results` executes a quote which returns values -and a count. It then creates a set with the provided data. +The first couple of words are used to create arrays. The first, +`array:counted-results` executes a quote which returns values +and a count. It then creates an array with the provided data. ~~~ -:set:counted-results (q-a) +:array:counted-results (q-a) call here [ dup , &, times ] dip ; ~~~ -The second, `set:from-string`, creates a new string with the +The second, `array:from-string`, creates a new string with the characters in given a string. ~~~ -:set:from-string (s-a) +:array:from-string (s-a) here [ dup s:length , [ , ] s:for-each ] dip ; ~~~ -A very crucial piece is `set:for-each`. This runs a quote once -against each value in a set. This is leveraged to implement +A very crucial piece is `array:for-each`. This runs a quote once +against each value in an array. This is leveraged to implement additional combinators. ~~~ {{ 'Q var ---reveal--- - :set:for-each (aq-) + :array:for-each (aq-) &Q [ !Q fetch-next [ fetch-next swap [ @Q call ] dip ] times drop ] v:preserve ; }} ~~~ -With this I can easily define `set:dup` to make a copy of a -set. +With this I can easily define `array:dup` to make a copy of an +array. ~~~ -:set:dup (a-a) - here [ dup fetch , [ , ] set:for-each ] dip ; +:array:dup (a-a) + here [ dup fetch , [ , ] array:for-each ] dip ; ~~~ -Next is `set:filter`, which is extracts matching values from -a set. This is used like: +Next is `array:filter`, which is extracts matching values from +an array. This is used like: { #1 #2 #3 #4 #5 #6 #7 #8 } - [ n:even? ] set:filter + [ n:even? ] array:filter -It returns a new set with the values that the quote returned +It returns a new array with the values that the quote returned a `TRUE` flag for. ~~~ -:set:filter (aq-) +:array:filter (aq-) [ over [ call ] dip swap [ , ] [ drop ] choose ] curry - here [ over fetch , set:for-each ] dip + here [ over fetch , array:for-each ] dip here over - n:dec over store ; ~~~ -Next are `set:contains?` and `set:contains-string?` which +Next are `array:contains?` and `array:contains-string?` which compare a given value to each item in the array and returns a flag. @@ -1332,70 +1332,70 @@ a flag. {{ 'F var ---reveal--- - :set:contains? (na-f) + :array:contains? (na-f) &F v:off - [ over eq? @F or !F ] set:for-each + [ over eq? @F or !F ] array:for-each drop @F ; - :set:contains-string? (sa-f) + :array:contains-string? (sa-f) &F v:off - [ over s:eq? @F or !F ] set:for-each + [ over s:eq? @F or !F ] array:for-each drop @F ; }} ~~~ -I implemented `set:map` to apply a quotation to each item in a -set and construct a new set from the returned values. +I implemented `array:map` to apply a quotation to each item in +an array and construct a new array from the returned values. Example: { #1 #2 #3 } - [ #10 * ] set:map + [ #10 * ] array:map ~~~ -:set:map (aq-a) +:array:map (aq-a) [ call , ] curry - here [ over fetch , set:for-each ] dip ; + here [ over fetch , array:for-each ] dip ; ~~~ -You can use `set:reverse` to make a copy of a set with the +You can use `array:reverse` to make a copy of an array with the values reversed. ~~~ -:set:reverse (a-a) +:array:reverse (a-a) here [ fetch-next [ + n:dec ] sip dup , [ dup fetch , n:dec ] times drop ] dip ; ~~~ -`set:nth` provides a quick means of adjusting a set and offset -into an address for use with `fetch` and `store`. +`array:nth` provides a quick means of adjusting an array and +offset into an address for use with `fetch` and `store`. ~~~ -:set:nth (an-a) +:array:nth (an-a) + n:inc ; ~~~ -`set:reduce` takes a set, a starting value, and a quote. It -executes the quote once for each item in the set, passing the +`array:reduce` takes an array, a starting value, and a quote. It +executes the quote once for each item in the array, passing the item and the value to the quote. The quote should consume both and return a new value. ~~~ -:set:reduce (pnp-n) - [ swap ] dip set:for-each ; +:array:reduce (pnp-n) + [ swap ] dip array:for-each ; ~~~ -When making a set, I often want the values in the original -order. The `set:counted-results set:reverse` is a bit long, so -I'm defining a new `set:make` which wraps these. +When making an array, I often want the values in the original +order. The `array:counted-results array:reverse` is a bit long, so +I'm defining a new `array:make` which wraps these. ~~~ -:set:make (q-a) - set:counted-results set:reverse ; +:array:make (q-a) + array:counted-results array:reverse ; :{ (-) |[ |depth |[ ; immediate -:} (-a) |] |dip |depth |swap |- |n:dec |] |set:make ; immediate +:} (-a) |] |dip |depth |swap |- |n:dec |] |array:make ; immediate ~~~ ## Muri: an assembler diff --git a/literate/Rx.md b/literate/Rx.md index 7954b73..6e82f71 100644 --- a/literate/Rx.md +++ b/literate/Rx.md @@ -1055,7 +1055,7 @@ instruction. It is intended that this be hooked into and changed. As an example, in Rx code, assuming an I/O interface with some support for strings and output: - [ $? putc space 'word not found' puts ] + [ $? c:put sp 'word_not_found s:put ] &err:notfound #1 + store An interface should either patch the jump, or catch it and do diff --git a/ngaImage b/ngaImage index e17e7f3..4291587 100644 Binary files a/ngaImage and b/ngaImage differ diff --git a/words.tsv b/words.tsv index 33605e6..5cb17cb 100644 --- a/words.tsv +++ b/words.tsv @@ -67,6 +67,19 @@ Version -a - - Variable. This stores the version number. class:data {n/a} {n/a again - - - Close an unconditional loop. Branches back to the prior `repeat`. class:macro {n/a} {n/a} global all allot n- - - Allocate the specified number of cells from the `Heap`. class:word 'Buffer d:create #100 allot {n/a} global all and nm-o - - Perform a bitwise AND operation between the two provided values. class:primitive {n/a} {n/a} global all +array:contains-string? sa-f - - Return `TRUE` if the string value is in the set or`FALSE` otherwise. class:word {n/a} {n/a} set all +array:contains? na-f - - Return `TRUE` if the value is in the set or `FALSE` otherwise. class:word {n/a} {n/a} set all +array:counted-results q-a - - Run a quote and construct a new set from the returned values. The quote should return the values and the number of values to put into the set. class:word {n/a} {n/a} set all +array:dup a-b - - Make a copy of a set. Return the address of the copy. class:word {n/a} {n/a} set all +array:filter aq-b - - For each item in the initial set, run the specified quote. If the quote returns `TRUE`, copy the item into a new set. If `FALSE`, discard it. Returns a pointer to the new set. class:word {n/a} {n/a} set all +array:for-each aq- - - Execute the quote once for each item in the set. class:word {n/a} {n/a} set all +array:from-string s-a - - Create a new set with the characters in the source string. class:word {n/a} {n/a} set all +array:length a-n - - Return the length of a set. class:word {n/a} {n/a} set all +array:make q-a - - Execute quote. Return a new set containing the values the quote leaves on the stack. This is identical to doing `array:counted-results array:reverse` class:word {n/a} {n/a} set all +array:map aq- - - Execute quote once for each item in the set. Constructs a new set from the value returned by the quote. class:word {n/a} {n/a} set all +array:nth an-b - - Return the actual address of the nth item in the set. class:word {n/a} {n/a} set all +array:reduce pnq-n - - Takes a set, a starting value, and a quote. This will apply the quote to each item in the set; the quote should consume two values and return one. class:word {n/a} {n/a} set all +array:reverse a-b - - Reverse the order of items in a set. This will return a new set. class:word {n/a} {n/a} set all as{ -f - - Begin an assembly section. class:macro {n/a} {n/a} global all banner - - - Display a welcome message on startup. class:word {n/a} {n/a} global rre {n/a} bi xqq-? - - Execute q1 against x, then execute q2 against a copy of x. class:word #100 [ #10 * ] [ #10 - ] bi {n/a} global all @@ -366,19 +379,6 @@ s:trim s-s - - Trim leading and trailing whitespace from a string. class:word s:trim-left s-s - - Trim leading whitespace from a string. class:word '__hello__ s:trim-left {n/a} s all s:trim-right s-s - - Trim trailing whitespace from a string. class:word '__hello__ s:trim-right {n/a} s all set-hook aa- - - Patch the hook point in a2 to point to a1. class:word :foo hook ;\n :bar #1 ;\n &bar &foo set-hook {n/a} global all -set:contains-string? sa-f - - Return `TRUE` if the string value is in the set or`FALSE` otherwise. class:word {n/a} {n/a} set all -set:contains? na-f - - Return `TRUE` if the value is in the set or `FALSE` otherwise. class:word {n/a} {n/a} set all -set:counted-results q-a - - Run a quote and construct a new set from the returned values. The quote should return the values and the number of values to put into the set. class:word {n/a} {n/a} set all -set:dup a-b - - Make a copy of a set. Return the address of the copy. class:word {n/a} {n/a} set all -set:filter aq-b - - For each item in the initial set, run the specified quote. If the quote returns `TRUE`, copy the item into a new set. If `FALSE`, discard it. Returns a pointer to the new set. class:word {n/a} {n/a} set all -set:for-each aq- - - Execute the quote once for each item in the set. class:word {n/a} {n/a} set all -set:from-string s-a - - Create a new set with the characters in the source string. class:word {n/a} {n/a} set all -set:length a-n - - Return the length of a set. class:word {n/a} {n/a} set all -set:make q-a - - Execute quote. Return a new set containing the values the quote leaves on the stack. This is identical to doing `set:counted-results set:reverse` class:word {n/a} {n/a} set all -set:map aq- - - Execute quote once for each item in the set. Constructs a new set from the value returned by the quote. class:word {n/a} {n/a} set all -set:nth an-b - - Return the actual address of the nth item in the set. class:word {n/a} {n/a} set all -set:reduce pnq-n - - Takes a set, a starting value, and a quote. This will apply the quote to each item in the set; the quote should consume two values and return one. class:word {n/a} {n/a} set all -set:reverse a-b - - Reverse the order of items in a set. This will return a new set. class:word {n/a} {n/a} set all shift mn-o - - Peform a bitwise shift of m by n bits. If n is positive, shift right. If negative, the shift will be to the left. class:primitive {n/a} {n/a} global all sip nq-n - - Run quote. After execution completes, put a copy of n back on top of the stack. class:word {n/a} {n/a} global all sp - - - Display a space (`ASCII:SPACE`) class:word :spaces (n-) [ sp ] times ;\n #12 spaces {n/a} global all @@ -446,7 +446,7 @@ var s- - - Create a variable. The variable is initialized to 0. class:word var ns- - - Create a variable with the specified initial value. class:word #10 'Base var\n {n/a} global all while q- - - Execute quote repeatedly while the quote returns a `TRUE` value. The quote should return a flag of either `TRUE` or `FALSE`, though `while` will treat any non-zero value as `TRUE`. class:word #10 [ dup n:put nl n:dec dup n:-zero? ] while {n/a} global all xor mn-o - - Perform a bitwise XOR operation. class:primitive {n/a} {n/a} global all -{ - - - Begin a set. This is intended to make creating sets a bit cleaner than using a quotation and `set:counteh-results`. class:word {n/a} {n/a} set all +{ - - - Begin a set. This is intended to make creating sets a bit cleaner than using a quotation and `array:counteh-results`. class:word {n/a} {n/a} set all {{ - - - Begin a lexically scoped area. class:word {n/a} {n/a} global all } -a - - Complete a set begun by `{`. Returns a pointer to the data. class:word {n/a} {n/a} set all }as f- - - End an assembly section. class:macro {n/a} {n/a} global all