diff --git a/GNUmakefile b/GNUmakefile index 62855d0..bdfd3ce 100644 --- a/GNUmakefile +++ b/GNUmakefile @@ -83,6 +83,7 @@ DEVICES += interface/unsigned.retro DEVICES += interface/ffi.retro DEVICES += interface/retro-napia.retro DEVICES += interface/future.retro +# DEVICES += interface/new-strings.retro DEVICES += interface/block.retro DEVICES += interface/deprecated.retro DEVICES += interface/double.retro diff --git a/Makefile b/Makefile index 408c721..be18164 100644 --- a/Makefile +++ b/Makefile @@ -68,6 +68,7 @@ DEVICES += interface/ffi.retro DEVICES += interface/unsigned.retro DEVICES += interface/retro-napia.retro DEVICES += interface/future.retro +# DEVICES += interface/new-strings.retro DEVICES += interface/block.retro DEVICES += interface/deprecated.retro DEVICES += interface/double.retro diff --git a/interface/future.retro b/interface/future.retro index fcacc7b..a8f301f 100644 --- a/interface/future.retro +++ b/interface/future.retro @@ -7,10 +7,6 @@ Notes: `aa:` is a new set of array words. These will be replacing the existing set in the future. -`as:` is a new set of string words. These will be replacing the -existing set in the future. (In the current system, strings are -null terminated. The `as` strings are length-prefixed instead.) - ~~~ 'NextArray var :arrays FREE #513 #12 n:mul n:sub ; @@ -28,12 +24,6 @@ null terminated. The `as` strings are length-prefixed instead.) &store sip n:inc ] times drop-pair ] sip ; -:as:map aa:map ; - -:as:left a:left ; -:as:right a:right ; -:as:middle a:middle ; - {{ 'Count var :prepare #0 &Count store ; @@ -53,137 +43,14 @@ null terminated. The `as` strings are length-prefixed instead.) :aa:contains? (an-f) swap #0 swap [ swap [ over eq? ] dip or ] a:for-each nip ; -:as:contains? aa:contains? ; - -:as:filter a:filter ; - -:as:length fetch ; - -:as:th n:inc n:add ; -:as:store a:th store ; -:as:fetch as:th fetch ; - :aa:first (a-n) #0 a:fetch ; :aa:last (a-n) dup a:length n:dec a:fetch ; -:as:first aa:first ; -:as:last aa:last ; -:as:index/c aa:index ; - - -:as:dup a:dup ; -:as:last aa:last ; -:as:temp a:dup ; - -:as:trim-right (s-s) - as:temp [ dup v:dec [ as:last #32 lteq? ] sip swap ] while - dup v:inc ; - -{{ - 'Start var - 'End var - 'Len var - :find-end dup as:length dup !Len over n:add n:inc !End n:inc ; - :new-size @Start over swap n:sub @Len swap n:sub ; - :patch over store ; ----reveal--- - :as:trim-left (s-s) - as:dup dup #0 as:fetch #32 eq? - [ dup !Start find-end - [ fetch-next #32 -eq? over @End -eq? and ] while - new-size patch ] if ; -}} - -:as:trim (s-s) as:trim-left as:trim-right ; - -:sigil:" (s-a) here [ dup s:length comma &comma s:for-each ] dip ; immediate - -:as:for-each (sq-) a:for-each ; :aa:hash (a-n) #5381 swap [ swap #33 n:mul n:add ] a:for-each ; -:as:hash (s-n) aa:hash ; :aa:eq? (aa-f) aa:hash swap aa:hash eq? ; :aa:-eq? (aa-f) aa:hash swap aa:hash -eq? ; -:as:eq? (ss-f) aa:eq? ; -:as:-eq? (ss-f) aa:-eq? ; :a:dup here [ dup a:length comma &comma a:for-each ] dip ; -:as:dup a:dup ; - -:as:temp ; -:as:keep ; - -:as:to-upper (s-s) [ as:dup &c:to-upper as:map as:temp ] gc ; -:as:to-lower (s-s) [ as:dup &c:to-lower as:map as:temp ] gc ; ~~~ - - a:append aa-a Create a new array with the contents of a1 - a:behead a-a Remove first item from an array - a:chop a-a Remove last item from an array -* a:contains? an-f True if array contains n. False otherwise - a:copy sd- Copy array from s to d -* a:dup a-a Make a copy of an array -* a:eq? aa-f Compare two arrays for equality -* a:-eq? aa-f Compare two arrays for inequality -* a:fetch an-v Fetch value stored at index n in array - a:filter aq-a Run q once for each value in a. If it returns - a:first a-n Return the first value in an array -* a:for-each aq- Run q once for each value in the array. Pushes -* a:hash a-n Return the hash of an array -* a:indices av-a Return array of indices for v in source array -* a:index av-n Return first index of n in a - a:last a-n Return the last value in an array -* a:left an-a Return left n values from array -* a:length a-n Return the length of an array -* a:make ...n-a Create a new permanent array from the provided values - a:make/temp ...n-a Create a new temporary array from the -* a:map aq-a Run q once for each value in the array. Takes the -* a:middle afl-a Return new array from f to l, inclusive - a:prepend aa-a Create a new array with the contents of a2 - a:reduce anq-n Takes an array, a starting value, and a quote. - a:reverse a-a Reverse the order of items in an array -* a:right an-a Return right n values from array -* a:store van- Store value v into array at index n - a:temp a-a Make a copy of the array in the temporary string/array -* a:th an-p Return the address of a specific index into the array - - - s:append ss-s Append s2 to s1, returning new temporary string - s:behead s-s Remove first item from a string - s:chop s-s Remove last item from a string -* s:contains? sc-f True if string contains c. False otherwise - s:copy sd- Copy string s to memory at d -* s:dup s-s Make a copy of string -* s:eq? ss-f Compare two strings for equality -* s:-eq? ss-f Compare two strings for inequality - s:evaluate s-? Interpret each token in a string -* s:fetch sn-c Return character at index n in the string -* s:filter sq-s Run q once for each value in s If it returns - s:first s-c Return the first character in a string - s:for-each sq- Run q once for each character in s. Pushes - s:get/line '-s Read a line of input until enter is - s:get/token -s Read a string from the keyboard ending when -* s:hash s-n Return the hash of the string -* s:index/c sc-f True if string contains c, false otherwise - s:keep s-s Move string to here, allocating space and returning - s:last s-c Return the last character in a string -* s:left sn-s Return left n characters of string -* s:length s-n Return the length of a string -* s:middle sfl-s Return substring from f to l, inclusive - s:pool -p Return the starting address of the temporary string/array - s:prepend ss-s Create a new string with the contents of s2 - s:put s- Display a string - s:reverse s-s Reverse the order of values in the string. - s:rewrite s-s Replace underscores in string with spaces -* s:right sn-s Return right n characters of string -* s:store csn- Store character into string at index n - s:temp s-s Put a copy of a string in the temporary buffers. -* s:th sn-a Given a string and index, return the address -* s:to-lower s-s Make all characters in string lowercase - s:to-n s-n Convert a string to a number -* s:to-upper s-s Make all characters in a string uppercase -* s:trim s-s Trim both leading and trailing whitespace from a string -* s:trim-right s-s Trim trailing whitespace from a string -* s:trim-left s-s Trim leading whitespace from a string - diff --git a/interface/new-strings.retro b/interface/new-strings.retro new file mode 100644 index 0000000..d0f4268 --- /dev/null +++ b/interface/new-strings.retro @@ -0,0 +1,73 @@ +# New Words + +This contains a variety of words from my more recent systems. + +Notes: + +`as:` is a new set of string words. These will be replacing the +existing set in the future. (In the current system, strings are +null terminated. The `as` strings are length-prefixed instead.) + +~~~ +:as:map aa:map ; + +:as:left a:left ; +:as:right a:right ; +:as:middle a:middle ; + +:as:contains? aa:contains? ; + +:as:filter a:filter ; + +:as:length fetch ; + +:as:th n:inc n:add ; +:as:store a:th store ; +:as:fetch as:th fetch ; + +:as:first aa:first ; +:as:last aa:last ; +:as:index/c aa:index ; + +:as:dup a:dup ; +:as:last aa:last ; +:as:temp a:dup ; + +:as:trim-right (s-s) + as:temp [ dup v:dec [ as:last #32 lteq? ] sip swap ] while + dup v:inc ; + +{{ + 'Start var + 'End var + 'Len var + :find-end dup as:length dup !Len over n:add n:inc !End n:inc ; + :new-size @Start over swap n:sub @Len swap n:sub ; + :patch over store ; +---reveal--- + :as:trim-left (s-s) + as:dup dup #0 as:fetch #32 eq? + [ dup !Start find-end + [ fetch-next #32 -eq? over @End -eq? and ] while + new-size patch ] if ; +}} + +:as:trim (s-s) as:trim-left as:trim-right ; + +:sigil:" (s-a) here [ dup s:length comma &comma s:for-each ] dip ; immediate + +:as:for-each (sq-) a:for-each ; + +:as:hash (s-n) aa:hash ; + +:as:eq? (ss-f) aa:eq? ; +:as:-eq? (ss-f) aa:-eq? ; + +:as:dup a:dup ; + +:as:temp ; +:as:keep ; + +:as:to-upper (s-s) [ as:dup &c:to-upper as:map as:temp ] gc ; +:as:to-lower (s-s) [ as:dup &c:to-lower as:map as:temp ] gc ; +~~~ diff --git a/vm/nga-c/image.c b/vm/nga-c/image.c index 99fd44b..c569489 100644 --- a/vm/nga-c/image.c +++ b/vm/nga-c/image.c @@ -10,8 +10,8 @@ #define CELL_MAX LLONG_MAX - 1 #endif #endif -CELL ngaImageCells = 20664; -CELL ngaImage[] = { 1793,20173,20619,20663,202301,415,387,1247,1535,0,10995,0,10,1,10,2,10,3,10, +CELL ngaImageCells = 19953; +CELL ngaImage[] = { 1793,19462,19908,19952,202301,415,387,1247,1535,0,10995,0,10,1,10,2,10,3,10, 4,10,5,10,6,10,7,10,8,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,68223234, 1,2575,85000450,1,656912,163,180,268505089,65,64,285281281,0,65,2063,10,101384453,0,9,10,68485378, @@ -20,8 +20,8 @@ CELL ngaImage[] = { 1793,20173,20619,20663,202301,415,387,1247,1535,0,10995,0,10 1,251790353,101777669,1,17565186,109,524545,113,66,167838467,-1,134287105,3,61,659457,3,459023,130,2049,58, 25,2049,130,1793,137,2049,137,117506307,0,130,0,524545,28,135,168820993,0,149,1642241,149,134283523, 13,135,1793,130,524545,2049,130,1793,130,16846593,149,163,180,1793,66,16846593,149,135,180,1793, - 66,7,10,659713,1,659713,2,659713,3,659713,4,659713,5,1793,20428,17108737,3,2,524559,130, - 2049,130,2049,130,524545,0,130,524545,0,130,2049,144,1048838,2,1642241,10,7,19409,1247,167841793, + 66,7,10,659713,1,659713,2,659713,3,659713,4,659713,5,1793,19717,17108737,3,2,524559,130, + 2049,130,2049,130,524545,0,130,524545,0,130,2049,144,1048838,2,1642241,10,7,18698,1247,167841793, 216,11,17826049,0,216,2,15,25,524546,190,134287105,217,118,2305,218,459023,226,134287361,217,221, 659201,216,10,659969,7,2049,58,25,17694978,58,242,9,84152833,48,319750404,241,117507601,244,184618754,45, 25,16974851,-1,168886532,1,134284289,1,257,134284289,0,244,660227,32,0,0,115,105,103,105,108, @@ -170,7 +170,7 @@ CELL ngaImage[] = { 1793,20173,20619,20663,202301,415,387,1247,1535,0,10995,0,10 110,58,105,110,99,0,659713,1,10,3114,3139,168,16552,210720197721,110,58,100,101,99,0, 659969,1,10,3128,3158,168,16552,8246617666422322998,110,58,98,101,116,119,101,101,110,63,0,67503109, 1793,3166,67503109,67503109,2049,3106,10,1,3161,2049,2241,11,10,3142,3187,168,16552,249861296566813883,83,99, - 111,112,101,76,105,115,116,0,20521,20575,10,3172,3198,168,16552,5864091,123,123,0,2049, + 111,112,101,76,105,115,116,0,19810,19864,10,3172,3198,168,16552,5864091,123,123,0,2049, 1576,2,1,3187,2049,61,16,10,3190,3225,168,16552,-6305314778776785742,45,45,45,114,101,118,101, 97,108,45,45,45,0,2049,1576,1,3187,2049,3125,16,10,3207,3241,168,16552,5864159,125, 125,0,1,3187,2049,58,4,15,11,1793,3255,3841,3187,4097,2,10,1,3250,1793,3281, @@ -228,7 +228,7 @@ CELL ngaImage[] = { 1793,20173,20619,20663,202301,415,387,1247,1535,0,10995,0,10 10,4239,4297,156,16552,-4600587576916820603,84,101,109,112,83,116,114,105,110,103,115,0,32,4280, 4317,156,16552,7474516786580364824,84,101,109,112,83,116,114,105,110,103,77,97,120,0,512,4298, 4331,168,16552,229440420829967,83,84,82,73,78,71,83,0,2049,1545,3841,4297,3841,4317,19,18, - 10,4318,4353,156,0,0,67,117,114,114,101,110,116,0,26,10,4340,4370,168,0, + 10,4318,4353,156,0,0,67,117,114,114,101,110,116,0,20,10,4340,4370,168,0, 0,115,58,112,111,105,110,116,101,114,0,3841,4353,3841,4317,19,2049,4331,17,10, 4355,4391,168,0,0,115,58,110,101,120,116,0,1,4353,2049,3864,3841,4353,3841,4297, 11,1793,4407,1,0,4097,4353,10,1,4402,9,10,4318,4423,168,16552,6953962777192,115,58,116, @@ -888,160 +888,124 @@ CELL ngaImage[] = { 1793,20173,20619,20663,202301,415,387,1247,1535,0,10995,0,10 0,2049,1977,1793,17492,2,2049,17351,1,17351,2049,2449,10,1,17484,2049,2229,10,17467,17509, 168,0,6953302515007,97,97,58,109,97,112,0,4,1793,17539,2049,58,1793,17533,1793,17522,15, 67502597,8,10,1,17518,2049,2241,1,39,2049,2241,2049,3125,10,1,17516,2049,2449,771,10, - 1,17512,2049,2241,10,17497,17556,168,0,6953323861585,97,115,58,109,97,112,0,2049,17509,10, - 17544,17572,168,0,229459687400510,97,115,58,108,101,102,116,0,2049,8654,10,17559,17589,168,0, - 7572169691476913,97,115,58,114,105,103,104,116,0,2049,8673,10,17575,17607,168,0,249881599622948834,97,115, - 58,109,105,100,100,108,101,0,2049,8614,10,17592,17621,156,0,210671126606,67,111,117,110, - 116,0,0,17610,17635,168,0,229479071419028,112,114,101,112,97,114,101,0,1,0,1,17621, - 16,10,17622,17654,168,0,229481161821089,114,101,115,101,114,118,101,0,4,1,0,2049,17351, - 10,17641,17671,168,0,210723988469,112,97,116,99,104,0,2049,1977,67502597,2049,17283,2049,3139,67502597, - 16,10,17660,17694,168,0,229462046998285,99,108,101,97,110,117,112,0,2,2049,4423,4,1, - 0,16,10,17681,17714,168,0,6953774213361,109,97,116,99,104,63,0,67502597,11,10,17702,17729, - 168,0,6953974036516,114,101,99,111,114,100,0,1,17621,15,2049,17351,10,17717,17748,168,0, - 229470109485971,105,116,101,114,97,116,101,0,1793,17760,2049,17714,1,17729,9,1,17621,2049,3864, - 10,1,17750,2049,8777,10,17592,17781,168,0,8246067467232158272,97,97,58,105,110,100,105,99,101, - 115,0,2049,17635,2049,1977,1793,17793,2049,17654,2049,17748,3,10,1,17787,2049,2229,2049,17671, - 2049,17694,10,17765,17816,168,0,7572146434556505,97,97,58,105,110,100,101,120,0,1793,17825,2049, - 17781,1,0,2049,9236,10,1,17818,2049,17362,10,17802,17848,168,0,-3596900463221605921,97,97,58,99, - 111,110,116,97,105,110,115,63,0,4,1,0,4,1793,17866,4,1793,17860,67502597,11, - 10,1,17857,2049,2229,22,10,1,17854,2049,8777,772,10,17830,17890,168,0,-3569332041486845839,97,115, - 58,99,111,110,116,97,105,110,115,63,0,2049,17848,10,17872,17908,168,0,249881599349305785,97, - 115,58,102,105,108,116,101,114,0,2049,8997,10,17893,17926,168,0,249881599579432661,97,115,58, - 108,101,110,103,116,104,0,15,10,17911,17939,168,0,210706783919,97,115,58,116,104,0, - 2049,3125,2049,17270,10,17928,17958,168,0,7572169693067168,97,115,58,115,116,111,114,101,0,2049, - 9219,16,10,17944,17976,168,0,7572169677116093,97,115,58,102,101,116,99,104,0,2049,17939,15, - 10,17962,17994,168,0,7572146430834761,97,97,58,102,105,114,115,116,0,1,0,2049,9236,10, - 17980,18012,168,0,229458982959509,97,97,58,108,97,115,116,0,2,2049,8598,2049,3139,2049,9236, - 10,17999,18034,168,0,7572169677258203,97,115,58,102,105,114,115,116,0,2049,17994,10,18020,18050, - 168,0,229459687396583,97,115,58,108,97,115,116,0,2049,18012,10,18037,18069,168,0,8246092782587163933,97, - 115,58,105,110,100,101,120,47,99,0,2049,17816,10,18053,18084,168,0,6953323852444,97,115, - 58,100,117,112,0,2049,8810,10,18072,18100,168,0,229459687396583,97,115,58,108,97,115,116, - 0,2049,18012,10,18087,18116,168,0,229459687688233,97,115,58,116,101,109,112,0,2049,8810,10, - 18103,18138,168,0,-7106699936504964166,97,115,58,116,114,105,109,45,114,105,103,104,116,0,2049, - 18116,1793,18160,2,2049,3881,1793,18154,2049,18100,1,32,2049,2659,10,1,18147,2049,2241,4, - 10,1,18142,2049,2372,2,2049,3864,10,18119,18179,156,0,210690259379,83,116,97,114,116,0, - 0,18168,18189,156,0,193455868,69,110,100,0,0,18180,18199,156,0,193463204,76,101,110,0, - 0,18190,18214,168,0,7572371885291434,102,105,110,100,45,101,110,100,0,2,2049,17926,2,4097, - 18199,67502597,2049,17270,2049,3125,4097,18189,2049,3125,10,18200,18244,168,0,7572707956476599,110,101,119,45, - 115,105,122,101,0,3841,18179,67502597,4,2049,17283,3841,18199,4,2049,17283,10,18230,18267,168, - 0,210723988469,112,97,116,99,104,0,67502597,16,10,18119,18288,168,0,-3569308011477864665,97,115,58,116, - 114,105,109,45,108,101,102,116,0,2049,18084,2,1,0,2049,17976,1,32,11,1793, - 18327,2,4097,18179,2049,18214,1793,18318,2049,58,1,32,12,67502597,3841,18189,12,21,10,1, - 18307,2049,2372,2049,18244,2049,18267,10,1,18300,9,10,18270,18344,168,0,229459687702255,97,115,58, - 116,114,105,109,0,2049,18288,2049,18138,10,18331,18362,180,0,229482595734745,115,105,103,105,108, - 58,34,0,2049,1977,1793,18376,2,2049,104,2049,17351,1,17351,2049,4741,10,1,18366,2049, - 2229,10,18349,18398,168,0,-4580099406349869736,97,115,58,102,111,114,45,101,97,99,104,0,2049, - 8777,10,18381,18414,168,0,229458982815749,97,97,58,104,97,115,104,0,1,5381,4,1793,18427, - 4,1,33,2049,17296,2049,17270,10,1,18419,2049,8777,10,18401,18445,168,0,229459687252823,97,115, - 58,104,97,115,104,0,2049,18414,10,18432,18460,168,0,6953302506774,97,97,58,101,113,63, - 0,2049,18414,4,2049,18414,11,10,18448,18480,168,0,229458980699715,97,97,58,45,101,113,63, - 0,2049,18414,4,2049,18414,12,10,18467,18499,168,0,6953323853352,97,115,58,101,113,63,0, - 2049,18460,10,18487,18515,168,0,229459685136789,97,115,58,45,101,113,63,0,2049,18480,10,18502, - 18529,168,0,210704781289,97,58,100,117,112,0,2049,1977,1793,18543,2,2049,8598,2049,17351,1, - 17351,2049,8777,10,1,18533,2049,2229,10,18518,18560,168,0,6953323852444,97,115,58,100,117,112, - 0,2049,18529,10,18548,18576,168,0,229459687688233,97,115,58,116,101,109,112,0,10,18563,18590, - 168,0,229459687364536,97,115,58,107,101,101,112,0,10,18577,18608,168,0,-4580098812306212145,97,115,58, - 116,111,45,117,112,112,101,114,0,1793,18619,2049,18560,1,6804,2049,17556,2049,18576,10, - 1,18610,2049,17362,10,18591,18641,168,0,-4580098812316913748,97,115,58,116,111,45,108,111,119,101, - 114,0,1793,18652,2049,18560,1,6829,2049,17556,2049,18576,10,1,18643,2049,17362,10,18624,18675, - 168,0,-3527051417241377258,98,108,111,99,107,58,105,110,118,111,107,101,0,1,3,2049,10534, - 2049,10515,10,18624,18698,168,0,8246131600073141446,98,108,111,99,107,58,114,101,97,100,0,1, - 0,2049,18675,10,18682,18720,168,0,-4578818303223200395,98,108,111,99,107,58,119,114,105,116,101, - 0,1,1,2049,18675,10,18703,18745,168,0,-4036225629868593021,98,108,111,99,107,58,115,101,116, - 45,102,105,108,101,0,1,2,2049,18675,10,18725,18763,168,0,229480770855518,115,58,115,112, - 108,105,116,0,2049,7184,10,18750,18789,168,0,6119006473764520940,115,58,115,112,108,105,116,45, - 111,110,45,115,116,114,105,110,103,0,2049,7218,10,18766,18814,168,0,-2157201768052001381,115,58, - 99,111,110,116,97,105,110,115,45,99,104,97,114,63,0,2049,4857,10,18792,18841, - 168,0,-6456228026363444588,115,58,99,111,110,116,97,105,110,115,45,115,116,114,105,110,103, - 63,0,2049,5286,10,18817,18868,168,0,-3160266536000611262,97,58,99,111,110,116,97,105,110,115, - 45,115,116,114,105,110,103,63,0,2049,9099,10,18844,18887,168,0,8246014626430519194,97,58,105, - 110,100,101,120,45,111,102,0,2049,9291,10,18871,18913,168,0,-5025353456659034242,97,58,105,110, - 100,101,120,45,111,102,45,115,116,114,105,110,103,0,2049,9416,10,18890,18932,168, - 0,8246850033149754348,115,58,105,110,100,101,120,45,111,102,0,2049,4779,10,18916,18958,168,0, - -94300875658333296,115,58,105,110,100,101,120,45,111,102,45,115,116,114,105,110,103,0,2049, - 5069,10,18935,18977,168,0,8246228896775126019,100,111,117,98,108,101,58,118,97,114,0,2049,2075, - 4,2049,130,2049,130,10,18961,19003,168,0,-3421095308458227740,100,111,117,98,108,101,58,102,101, - 116,99,104,0,2049,58,4,15,10,18985,19026,168,0,-3421095308442276665,100,111,117,98,108,101, - 58,115,116,111,114,101,0,1,19,2049,2229,2049,61,16,10,19008,19052,168,0,-3421095308461432127, - 100,111,117,98,108,101,58,99,111,110,115,116,0,2049,18977,1,19003,2049,8460,10, - 19034,19076,168,0,-4575607512064199915,100,111,117,98,108,101,58,115,119,97,112,0,67503109,5,67503109, - 6,10,19059,19097,168,0,8246228896775106679,100,111,117,98,108,101,58,100,105,112,0,67503109,67503109, - 5,5,8,6,6,10,19081,19121,168,0,8246228896775123014,100,111,117,98,108,101,58,115,105, - 112,0,1,2217,2049,2229,2049,19097,10,19105,19144,168,0,8246632143337714634,109,101,109,58,105,110, - 118,111,107,101,0,1,15,2049,10534,2049,10515,10,19128,0,156,0,210667451248,65,76,76, - 79,67,0,19151,1,156,0,6384048135,70,82,69,69,0,19162,2,156,0,210689088690,83,84, - 79,82,69,0,19172,3,156,0,210673137615,70,69,84,67,72,0,19183,4,156,0,6952683137271, - 82,69,83,73,90,69,0,19105,19221,168,0,249897943727936361,109,101,109,58,97,108,108,111, - 99,0,1,0,2049,19144,10,19206,19241,168,0,249897943749573803,109,101,109,58,115,116,111,114, - 101,0,1,2,2049,19144,10,19226,19261,168,0,249897943733622728,109,101,109,58,102,101,116,99, - 104,0,1,3,2049,19144,10,19246,19280,168,0,7572664961638592,109,101,109,58,102,114,101,101, - 0,1,1,2049,19144,10,19266,19301,168,0,8246632143679146032,109,101,109,58,114,101,115,105,122, - 101,0,1,4,2049,19144,10,19285,19321,168,0,249897943730056489,109,101,109,58,99,101,108,108, - 43,0,1,8,19,17,10,19306,19348,168,0,1050530996183190288,109,101,109,58,102,101,116,99, - 104,45,100,111,117,98,108,101,0,2,1,1,2049,19321,15,5,2049,19261,6,10, - 19326,19381,168,0,1730340976492540563,109,101,109,58,115,116,111,114,101,45,100,111,117,98,108, - 101,0,5,5,2049,2217,1,1,2049,19321,6,2049,19241,6,2049,19241,10,19359,19405,168, - 20192,193470948,84,73,66,0,1,7,15,10,19396,19425,168,20192,8246457295145463473,105,109,97,103,101, - 58,115,97,118,101,0,1,1000,2049,10534,2049,10515,10,19409,19443,168,0,210711039690,101,100, - 105,116,63,0,2,1793,19450,1,8,11,10,1,19446,1793,19458,1,127,11,10,1, - 19454,2049,2255,22,10,19432,19476,168,0,6953539406400,103,97,116,104,101,114,0,2049,19443,1, - 17,1,4134,2049,66,10,19464,19496,168,0,210709415765,99,121,99,108,101,0,2049,10864,2049, - 2217,4,8,2049,2644,25,3,2049,19476,1,19496,7,10,19409,19529,168,20192,-4557881830897049127,112,97, - 114,115,101,45,117,110,116,105,108,0,1793,19541,2049,4451,2049,4234,2049,19496,771,2049, - 4096,10,1,19531,2049,4260,10,19512,19557,168,20192,210726130610,115,58,103,101,116,0,1793,19579, - 1793,19565,1,13,11,10,1,19561,1793,19573,1,10,11,10,1,19569,2049,2255,22,10, - 1,19559,2049,19529,10,19546,19595,168,20192,210708950412,99,108,101,97,114,0,2049,4472,92,94, - 91,50,74,92,94,91,48,59,48,72,0,1,19597,2049,8246,2049,10640,10,19584,19629, - 156,20192,6952575930081,78,111,69,99,104,111,0,0,19617,19639,156,0,193454829,69,79,84,0, - 0,19630,19654,156,0,7571133383038306,73,103,110,111,114,105,110,103,0,0,19640,19670,168,0, - 249892406716047873,105,103,110,111,114,105,110,103,63,0,3841,19654,10,19655,19686,168,0,229486327000139,118, - 101,114,115,105,111,110,0,3841,4,1,100,20,10,19673,19703,168,0,210710254026,100,111, - 110,101,63,0,2,4097,19639,1793,19712,1,13,11,10,1,19708,1793,19720,1,10,11, - 10,1,19716,1793,19728,1,32,11,10,1,19724,2049,2298,22,22,10,19692,19745,168,0, - 6385195044,101,111,108,63,0,3841,19639,1793,19753,1,13,11,10,1,19749,1793,19761,1,10, - 11,10,1,19757,2049,2255,22,10,19735,19779,168,0,6954126150804,118,97,108,105,100,63,0, - 2,2049,104,2049,2812,10,19767,19800,168,0,249883998779477802,99,104,101,99,107,45,101,111,102, - 0,2,1793,19807,1,-1,11,10,1,19803,1793,19815,1,4,11,10,1,19811,2049,2255, - 22,1793,19825,2049,10931,10,1,19822,9,10,19785,19837,168,0,5863258,98,115,0,2049,4212, - 1,2,2049,2675,1793,19849,2049,4160,3,10,1,19845,9,2049,4160,3,10,19829,19870,168, - 0,7572242387256805,99,104,101,99,107,45,98,115,0,2,1793,19877,1,8,11,10,1,19873, - 1793,19885,1,127,11,10,1,19881,2049,2255,22,1793,19895,2049,19837,10,1,19892,9,10, - 19856,19910,168,0,210708806723,99,104,101,99,107,0,2049,19800,2049,19870,10,19899,19930,168,0, - 249883994190734226,99,104,97,114,97,99,116,101,114,0,2049,10864,2,2049,4134,10,19915,19948,168, - 0,6953366942559,98,117,102,102,101,114,0,1793,19958,2049,19405,2049,4234,8,2049,4096,10,1, - 19950,2049,4260,10,19936,19979,168,0,8246863741238799215,114,101,97,100,45,116,111,107,101,110,0, - 1793,19995,1793,19990,2049,19930,2049,19910,2049,19703,10,1,19983,2049,2397,10,1,19981,2049,19948, - 2049,4587,10,19963,20013,168,0,210716150453,105,110,112,117,116,0,2049,19979,2049,19779,10,20002, - 20031,168,0,229479082815460,112,114,111,99,101,115,115,0,2049,19670,1793,20049,771,2049,19745,1793, - 20045,1,19654,2049,3931,10,1,20040,9,10,1,20035,2049,2862,1,415,1,17,2049,66, - 10,19617,20068,180,20192,5861507,47,47,0,2049,15996,1,19654,2049,3916,10,20060,20087,168,20192, - 6953343520347,98,97,110,110,101,114,0,2049,19686,2049,4472,82,69,84,82,79,32,49,50, - 32,40,37,110,46,37,110,41,92,110,0,1,20091,2049,8246,2049,10640,2049,10716,2049, - 1545,2049,10716,18,2049,1545,2049,4472,37,110,32,77,97,120,44,32,37,110,32,85, - 115,101,100,44,32,37,110,32,70,114,101,101,92,110,0,1,20127,2049,8246,2049, - 10640,10,20075,20173,168,20192,6953744547860,108,105,115,116,101,110,0,3841,19629,1793,20180,2049,20087, - 10,1,20177,2049,74,2049,20013,2049,20031,1,20184,7,10,105,110,116,101,114,102,97, - 99,101,47,114,101,116,114,111,45,117,110,105,120,46,114,101,116,114,111,0, - 20161,20232,156,0,229441520490121,83,111,117,114,99,101,115,0,1,20469,0,0,0,0,0, + 1,17512,2049,2241,10,17497,17555,156,0,210671126606,67,111,117,110,116,0,0,17544,17569,168, + 0,229479071419028,112,114,101,112,97,114,101,0,1,0,1,17555,16,10,17556,17588,168,0, + 229481161821089,114,101,115,101,114,118,101,0,4,1,0,2049,17351,10,17575,17605,168,0,210723988469, + 112,97,116,99,104,0,2049,1977,67502597,2049,17283,2049,3139,67502597,16,10,17594,17628,168,0, + 229462046998285,99,108,101,97,110,117,112,0,2,2049,4423,4,1,0,16,10,17615,17648,168, + 0,6953774213361,109,97,116,99,104,63,0,67502597,11,10,17636,17663,168,0,6953974036516,114,101,99, + 111,114,100,0,1,17555,15,2049,17351,10,17651,17682,168,0,229470109485971,105,116,101,114,97, + 116,101,0,1793,17694,2049,17648,1,17663,9,1,17555,2049,3864,10,1,17684,2049,8777,10, + 17497,17715,168,0,8246067467232158272,97,97,58,105,110,100,105,99,101,115,0,2049,17569,2049,1977, + 1793,17727,2049,17588,2049,17682,3,10,1,17721,2049,2229,2049,17605,2049,17628,10,17699,17750,168, + 0,7572146434556505,97,97,58,105,110,100,101,120,0,1793,17759,2049,17715,1,0,2049,9236,10, + 1,17752,2049,17362,10,17736,17782,168,0,-3596900463221605921,97,97,58,99,111,110,116,97,105,110, + 115,63,0,4,1,0,4,1793,17800,4,1793,17794,67502597,11,10,1,17791,2049,2229,22, + 10,1,17788,2049,8777,772,10,17764,17820,168,0,7572146430834761,97,97,58,102,105,114,115,116, + 0,1,0,2049,9236,10,17806,17838,168,0,229458982959509,97,97,58,108,97,115,116,0,2, + 2049,8598,2049,3139,2049,9236,10,17825,17859,168,0,229458982815749,97,97,58,104,97,115,104,0, + 1,5381,4,1793,17872,4,1,33,2049,17296,2049,17270,10,1,17864,2049,8777,10,17846,17889, + 168,0,6953302506774,97,97,58,101,113,63,0,2049,17859,4,2049,17859,11,10,17877,17909,168, + 0,229458980699715,97,97,58,45,101,113,63,0,2049,17859,4,2049,17859,12,10,17896,17927,168, + 0,210704781289,97,58,100,117,112,0,2049,1977,1793,17941,2,2049,8598,2049,17351,1,17351,2049, + 8777,10,1,17931,2049,2229,10,17916,17964,168,0,-3527051417241377258,98,108,111,99,107,58,105,110, + 118,111,107,101,0,1,3,2049,10534,2049,10515,10,17916,17987,168,0,8246131600073141446,98,108,111, + 99,107,58,114,101,97,100,0,1,0,2049,17964,10,17971,18009,168,0,-4578818303223200395,98,108, + 111,99,107,58,119,114,105,116,101,0,1,1,2049,17964,10,17992,18034,168,0,-4036225629868593021, + 98,108,111,99,107,58,115,101,116,45,102,105,108,101,0,1,2,2049,17964,10, + 18014,18052,168,0,229480770855518,115,58,115,112,108,105,116,0,2049,7184,10,18039,18078,168,0, + 6119006473764520940,115,58,115,112,108,105,116,45,111,110,45,115,116,114,105,110,103,0,2049, + 7218,10,18055,18103,168,0,-2157201768052001381,115,58,99,111,110,116,97,105,110,115,45,99,104, + 97,114,63,0,2049,4857,10,18081,18130,168,0,-6456228026363444588,115,58,99,111,110,116,97,105, + 110,115,45,115,116,114,105,110,103,63,0,2049,5286,10,18106,18157,168,0,-3160266536000611262,97, + 58,99,111,110,116,97,105,110,115,45,115,116,114,105,110,103,63,0,2049,9099, + 10,18133,18176,168,0,8246014626430519194,97,58,105,110,100,101,120,45,111,102,0,2049,9291,10, + 18160,18202,168,0,-5025353456659034242,97,58,105,110,100,101,120,45,111,102,45,115,116,114,105, + 110,103,0,2049,9416,10,18179,18221,168,0,8246850033149754348,115,58,105,110,100,101,120,45,111, + 102,0,2049,4779,10,18205,18247,168,0,-94300875658333296,115,58,105,110,100,101,120,45,111,102, + 45,115,116,114,105,110,103,0,2049,5069,10,18224,18266,168,0,8246228896775126019,100,111,117,98, + 108,101,58,118,97,114,0,2049,2075,4,2049,130,2049,130,10,18250,18292,168,0,-3421095308458227740, + 100,111,117,98,108,101,58,102,101,116,99,104,0,2049,58,4,15,10,18274,18315, + 168,0,-3421095308442276665,100,111,117,98,108,101,58,115,116,111,114,101,0,1,19,2049,2229, + 2049,61,16,10,18297,18341,168,0,-3421095308461432127,100,111,117,98,108,101,58,99,111,110,115, + 116,0,2049,18266,1,18292,2049,8460,10,18323,18365,168,0,-4575607512064199915,100,111,117,98,108,101, + 58,115,119,97,112,0,67503109,5,67503109,6,10,18348,18386,168,0,8246228896775106679,100,111,117,98, + 108,101,58,100,105,112,0,67503109,67503109,5,5,8,6,6,10,18370,18410,168,0,8246228896775123014, + 100,111,117,98,108,101,58,115,105,112,0,1,2217,2049,2229,2049,18386,10,18394,18433, + 168,0,8246632143337714634,109,101,109,58,105,110,118,111,107,101,0,1,15,2049,10534,2049,10515, + 10,18417,0,156,0,210667451248,65,76,76,79,67,0,18440,1,156,0,6384048135,70,82,69, + 69,0,18451,2,156,0,210689088690,83,84,79,82,69,0,18461,3,156,0,210673137615,70,69, + 84,67,72,0,18472,4,156,0,6952683137271,82,69,83,73,90,69,0,18394,18510,168,0, + 249897943727936361,109,101,109,58,97,108,108,111,99,0,1,0,2049,18433,10,18495,18530,168,0, + 249897943749573803,109,101,109,58,115,116,111,114,101,0,1,2,2049,18433,10,18515,18550,168,0, + 249897943733622728,109,101,109,58,102,101,116,99,104,0,1,3,2049,18433,10,18535,18569,168,0, + 7572664961638592,109,101,109,58,102,114,101,101,0,1,1,2049,18433,10,18555,18590,168,0,8246632143679146032, + 109,101,109,58,114,101,115,105,122,101,0,1,4,2049,18433,10,18574,18610,168,0, + 249897943730056489,109,101,109,58,99,101,108,108,43,0,1,8,19,17,10,18595,18637,168,0, + 1050530996183190288,109,101,109,58,102,101,116,99,104,45,100,111,117,98,108,101,0,2,1, + 1,2049,18610,15,5,2049,18550,6,10,18615,18670,168,0,1730340976492540563,109,101,109,58,115,116, + 111,114,101,45,100,111,117,98,108,101,0,5,5,2049,2217,1,1,2049,18610,6, + 2049,18530,6,2049,18530,10,18648,18694,168,19481,193470948,84,73,66,0,1,7,15,10,18685, + 18714,168,19481,8246457295145463473,105,109,97,103,101,58,115,97,118,101,0,1,1000,2049,10534,2049, + 10515,10,18698,18732,168,0,210711039690,101,100,105,116,63,0,2,1793,18739,1,8,11,10, + 1,18735,1793,18747,1,127,11,10,1,18743,2049,2255,22,10,18721,18765,168,0,6953539406400,103, + 97,116,104,101,114,0,2049,18732,1,17,1,4134,2049,66,10,18753,18785,168,0,210709415765, + 99,121,99,108,101,0,2049,10864,2049,2217,4,8,2049,2644,25,3,2049,18765,1,18785, + 7,10,18698,18818,168,19481,-4557881830897049127,112,97,114,115,101,45,117,110,116,105,108,0,1793, + 18830,2049,4451,2049,4234,2049,18785,771,2049,4096,10,1,18820,2049,4260,10,18801,18846,168,19481, + 210726130610,115,58,103,101,116,0,1793,18868,1793,18854,1,13,11,10,1,18850,1793,18862,1, + 10,11,10,1,18858,2049,2255,22,10,1,18848,2049,18818,10,18835,18884,168,19481,210708950412,99, + 108,101,97,114,0,2049,4472,92,94,91,50,74,92,94,91,48,59,48,72,0, + 1,18886,2049,8246,2049,10640,10,18873,18918,156,19481,6952575930081,78,111,69,99,104,111,0,0, + 18906,18928,156,0,193454829,69,79,84,0,0,18919,18943,156,0,7571133383038306,73,103,110,111,114, + 105,110,103,0,0,18929,18959,168,0,249892406716047873,105,103,110,111,114,105,110,103,63,0, + 3841,18943,10,18944,18975,168,0,229486327000139,118,101,114,115,105,111,110,0,3841,4,1,100, + 20,10,18962,18992,168,0,210710254026,100,111,110,101,63,0,2,4097,18928,1793,19001,1,13, + 11,10,1,18997,1793,19009,1,10,11,10,1,19005,1793,19017,1,32,11,10,1,19013, + 2049,2298,22,22,10,18981,19034,168,0,6385195044,101,111,108,63,0,3841,18928,1793,19042,1, + 13,11,10,1,19038,1793,19050,1,10,11,10,1,19046,2049,2255,22,10,19024,19068,168, + 0,6954126150804,118,97,108,105,100,63,0,2,2049,104,2049,2812,10,19056,19089,168,0,249883998779477802, + 99,104,101,99,107,45,101,111,102,0,2,1793,19096,1,-1,11,10,1,19092,1793, + 19104,1,4,11,10,1,19100,2049,2255,22,1793,19114,2049,10931,10,1,19111,9,10,19074, + 19126,168,0,5863258,98,115,0,2049,4212,1,2,2049,2675,1793,19138,2049,4160,3,10,1, + 19134,9,2049,4160,3,10,19118,19159,168,0,7572242387256805,99,104,101,99,107,45,98,115,0, + 2,1793,19166,1,8,11,10,1,19162,1793,19174,1,127,11,10,1,19170,2049,2255,22, + 1793,19184,2049,19126,10,1,19181,9,10,19145,19199,168,0,210708806723,99,104,101,99,107,0, + 2049,19089,2049,19159,10,19188,19219,168,0,249883994190734226,99,104,97,114,97,99,116,101,114,0, + 2049,10864,2,2049,4134,10,19204,19237,168,0,6953366942559,98,117,102,102,101,114,0,1793,19247, + 2049,18694,2049,4234,8,2049,4096,10,1,19239,2049,4260,10,19225,19268,168,0,8246863741238799215,114,101, + 97,100,45,116,111,107,101,110,0,1793,19284,1793,19279,2049,19219,2049,19199,2049,18992,10, + 1,19272,2049,2397,10,1,19270,2049,19237,2049,4587,10,19252,19302,168,0,210716150453,105,110,112, + 117,116,0,2049,19268,2049,19068,10,19291,19320,168,0,229479082815460,112,114,111,99,101,115,115, + 0,2049,18959,1793,19338,771,2049,19034,1793,19334,1,18943,2049,3931,10,1,19329,9,10,1, + 19324,2049,2862,1,415,1,17,2049,66,10,18906,19357,180,19481,5861507,47,47,0,2049,15996, + 1,18943,2049,3916,10,19349,19376,168,19481,6953343520347,98,97,110,110,101,114,0,2049,18975,2049, + 4472,82,69,84,82,79,32,49,50,32,40,37,110,46,37,110,41,92,110,0, + 1,19380,2049,8246,2049,10640,2049,10716,2049,1545,2049,10716,18,2049,1545,2049,4472,37,110,32, + 77,97,120,44,32,37,110,32,85,115,101,100,44,32,37,110,32,70,114,101, + 101,92,110,0,1,19416,2049,8246,2049,10640,10,19364,19462,168,19481,6953744547860,108,105,115,116, + 101,110,0,3841,18918,1793,19469,2049,19376,10,1,19466,2049,74,2049,19302,2049,19320,1,19473, + 7,10,105,110,116,101,114,102,97,99,101,47,114,101,116,114,111,45,117,110, + 105,120,46,114,101,116,114,111,0,19450,19521,156,0,229441520490121,83,111,117,114,99,101, + 115,0,1,19758,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,20219,20372,168,0,6953711201841,107,110,111,119,110,63,0,2,1,20232,2049,9099,10,20360, - 20389,168,0,210716136861,105,110,100,101,120,0,1,20232,4,2049,9416,1,20232,4,2049,9236, - 10,20378,20412,168,0,6953974036516,114,101,99,111,114,100,0,2049,4500,2,1,20232,2049,3864, - 3841,20232,1,20232,17,16,10,1793,20467,2049,15931,2049,20372,1793,20437,2049,20389,10,1,20434, - 1793,20444,2049,20412,10,1,20441,2049,66,1793,20457,1,192,1,2,17,8,10,1,20450, - 2049,2229,2049,1576,2049,186,16,10,1,20428,100,105,99,116,45,119,111,114,100,115, - 45,108,105,115,116,105,110,103,46,102,111,114,116,104,0,20161,20507,168,20469,229461403550098, - 100,58,119,111,114,100,115,0,1793,20516,2049,190,2049,10640,2049,10610,10,1,20509,2049, - 8491,10,20494,20539,168,20469,-3502157631813457253,100,58,119,111,114,100,115,45,119,105,116,104,0, - 2049,1977,2049,5573,1793,20570,2049,190,2,2049,1977,2049,5286,1793,20559,2049,10640,2049,10610,10, - 1,20554,1793,20565,3,10,1,20563,2049,66,10,1,20545,2049,8491,10,20521,20596,168,20469, - 2818131571306626127,100,105,115,112,108,97,121,45,105,102,45,108,101,102,116,0,2,2049,1977, - 2049,5519,1793,20608,2049,10640,2049,10610,10,1,20603,1793,20614,3,10,1,20612,2049,66,10, - 20521,20647,168,20469,2947807019553410009,100,58,119,111,114,100,115,45,98,101,103,105,110,110,105, - 110,103,45,119,105,116,104,0,2049,1977,2049,5573,1793,20658,2049,190,2049,20596,10,1, - 20653,2049,8491,10,0 }; + 0,0,0,0,0,0,0,0,0,0,19508,19661,168,0,6953711201841,107,110,111,119,110, + 63,0,2,1,19521,2049,9099,10,19649,19678,168,0,210716136861,105,110,100,101,120,0,1, + 19521,4,2049,9416,1,19521,4,2049,9236,10,19667,19701,168,0,6953974036516,114,101,99,111,114, + 100,0,2049,4500,2,1,19521,2049,3864,3841,19521,1,19521,17,16,10,1793,19756,2049,15931, + 2049,19661,1793,19726,2049,19678,10,1,19723,1793,19733,2049,19701,10,1,19730,2049,66,1793,19746, + 1,192,1,2,17,8,10,1,19739,2049,2229,2049,1576,2049,186,16,10,1,19717,100, + 105,99,116,45,119,111,114,100,115,45,108,105,115,116,105,110,103,46,102,111, + 114,116,104,0,19450,19796,168,19758,229461403550098,100,58,119,111,114,100,115,0,1793,19805,2049, + 190,2049,10640,2049,10610,10,1,19798,2049,8491,10,19783,19828,168,19758,-3502157631813457253,100,58,119,111, + 114,100,115,45,119,105,116,104,0,2049,1977,2049,5573,1793,19859,2049,190,2,2049,1977, + 2049,5286,1793,19848,2049,10640,2049,10610,10,1,19843,1793,19854,3,10,1,19852,2049,66,10, + 1,19834,2049,8491,10,19810,19885,168,19758,2818131571306626127,100,105,115,112,108,97,121,45,105,102, + 45,108,101,102,116,0,2,2049,1977,2049,5519,1793,19897,2049,10640,2049,10610,10,1,19892, + 1793,19903,3,10,1,19901,2049,66,10,19810,19936,168,19758,2947807019553410009,100,58,119,111,114,100, + 115,45,98,101,103,105,110,110,105,110,103,45,119,105,116,104,0,2049,1977,2049, + 5573,1793,19947,2049,190,2049,19885,10,1,19942,2049,8491,10,0 };