Java StarLogo 2.0 english `turtle` turtles-own [ sugar-holdings ; agent's current store of sugar sugar-metabolism ; rate at which agents use up their store of sugar vision-level ; how far an agent can see ;; Variables used in finding best visible sugar neighbor max-so-far ; best sugar value found so far hd-of-max ; heading of that best sugar value r-of-max ; radius (distance) to that best sugar value r ; dummy variable used to check at different radii ] ;; Agent Rules to agent-move-M ;;move to-best-sugar-level... move-to-max ;; metabolize sugar setsugar-holdings sugar-holdings - sugar-metabolism if sugar-holdings <= 0 [die] ;; (if still alive) eat all the sugar at new location setsugar-holdings sugar-holdings + sugar-level-at 0 0 setsugar-level 0 end to reproduce ;; reproduce if have enough sugar-holdings if sugar-holdings > hatch-threshold [ setsugar-holdings (sugar-holdings / 2) hatch [relocate move-to-max] ] end to relocate seth random 360 leap 1 if count-turtles-here > 1 [relocate] end to move-to-max ;; initialize variables used in finding and recording max setmax-so-far sugar-level sethd-of-max heading setr-of-max 0 ;; start facing random direction - to prevent biased handling of ties seth (90 * random 4) setr vision-level repeat vision-level [ ;; check at each distance repeat 4 [ ;; and in each of the four directions if (;; unoccupied? ( (count-turtles-towards 0 r) < 1 ) and ;; and better than best so far ((sugar-level-towards 0 r ) > max-so-far)) [ setmax-so-far sugar-level-towards 0 r sethd-of-max heading setr-of-max r ] rt 90 ] setr r - 1 ] seth hd-of-max ;check if better off than you are now? if (max-so-far > (sugar-level-at 0 0)) ;; better off? then move to the new spot [leap r-of-max] end ;; Visualizations to sugar-color scale-color red (sugar-holdings) 0 (hatch-threshold + 5) end to metab-color scale-color purple (sugar-metabolism) 1 4 end to vis-color scale-color blue vision-level 1 4 end to color-turtles ifelse (colorscheme = 0) [sugar-color] [ifelse (colorscheme = 1) [metab-color] [vis-color]] end `observer` patches-own [ sugar-level ; amount of sugar currently at the patch sugar-capacity ; upper limit on amount of sugar that can be at the patch ] globals [colorscheme averagesugar averagevision averagemetabolism nowshown] to setup ca setcolorscheme 0 setaveragesugar 0 setaveragevision 0 setaveragemetabolism 0 ;;Patches makecircles ;; Agents crt n-agents ask-turtles [ setvision-level (1 + random 4) setsugar-metabolism (1 + random 4) setsugar-holdings 10 setxy random screen-width random screen-height sugar-color ] ave-sugar ave-metabolism ave-vision setnowshown true clearplots end to go ask-turtles [agent-move-M color-turtles] ave-sugar ave-metabolism ave-vision ifelse alphinity = 0 [sugar-growback-Galpha] [sugar-growback-Ginfinity] if birth? = 1 [ask-turtles [reproduce]] end to growback ave-sugar ave-metabolism ave-vision ifelse alphinity = 0 [sugar-growback-Galpha] [sugar-growback-Ginfinity] end to makecircles ;create the initial distribution ca crt 249 ask-patches [setsugar-capacity 0] ask-turtles [ht ;setup two groups of temporary turtles to draw the sugar ifelse (int (who / 2)) = (who / 2) [setxy screen-half-width / 2 screen-half-height / 2] [setxy (0 - screen-half-width) / 2 (0 - screen-half-height / 2)] setsugar-holdings capacity-constant repeat 12 ;create the two circles [setsugar-capacity (round sugar-holdings) setsugar-holdings (sugar-holdings - (capacity-constant / 12)) fd 1 ] ifelse ycor > 0 ;have the turtles create the connecting section [setsugar-holdings ( 1 - abs (225 - heading) / 45) if xcor > (screen-half-width) / 2 or ycor > (screen-half-height / 2) [die] hatch [setx xcor - .5 seth 225 repeat 16 [setsugar-capacity round (sugar-holdings) fd 1] die] seth 225 repeat 16 [setsugar-capacity round (sugar-holdings) fd 1] die ] [setsugar-holdings ( 1 - abs (45 - heading) / 45) if xcor < (0 - screen-half-width) / 2 or ycor < (0 - screen-half-height / 2) [die] hatch [setx xcor - .5 seth 45 repeat 16 [setsugar-capacity round (sugar-holdings) fd 1] die] seth 45 repeat 16 [setsugar-capacity round (sugar-holdings) fd 1] die ] ] ask-patches [setsugar-level sugar-capacity] color-em end to sugar-growback-Galpha ask-patches [ ;; grow sugar by alpha up to level permitted by patch capacity setsugar-level sugar-level + (milli-alpha / 1000) if sugar-level > sugar-capacity [ setsugar-level sugar-capacity ] ] ;; color the patches appropriately color-em end to sugar-growback-Ginfinity ask-patches [ ;; grow sugar immediately to level permitted by patch capacity setsugar-level sugar-capacity ] ;; color the patches appropriately color-em end to color-em ask-patches [scale-pc yellow sugar-level (1) (10)] end to ave-sugar setaveragesugar 0 ask-turtles[setaveragesugar (averagesugar + sugar-holdings)] setaveragesugar (averagesugar / count-turtles) end to ave-vision setaveragevision 0 ask-turtles[setaveragevision (averagevision + vision-level)] setaveragevision (averagevision / count-turtles) end to ave-metabolism setaveragemetabolism 0 ask-turtles[setaveragemetabolism (averagemetabolism + sugar-metabolism)] setaveragemetabolism (averagemetabolism / count-turtles) end `information` WHAT IS IT? ----------- This project explores an artificial society known as Sugarscape. This society was conceived of by Joshua Epstein and Robert Axtell (http://www.brook.edu/SUGARSCAPE/) In this society, agents (red) wander around on a landscape consisting of two connected mounds of sugar (yellow). As the agents move around on the landscape they metabolize some of their existing sugar. The agents are constantly looking for new sugar, and when they find it they add it to their resources. If the agents ever eat all of their sugar, then they will die. If they get enough sugar, then they can reproduce. Each agent has a random value for its metabolism, initial quantity of sugar, and vision level (that controls how far around it can look for more sugar). The sugar itself can grow back at different rates. For a more thorough description of Sugarscape, check out the Sugarscape web site (http://www.brook.edu/SUGARSCAPE/). HOW TO USE IT ------------- Click the SETUP button to setup the agents (red). Click the GO button to start the simulation. The N-AGENTS slider controls the initial number of agents. The HATCH-THRESHOLD slider sets the sugar level at which the agents reproduce. The CAPCITY-CONSTANT slider controls how much sugar there is initially. The MILLI-ALPHA slider controls how fast the sugar grows back if it is not growing back instantly (controlled by the INSTANT-GROWBACK? slider). The BLACK-IS and WHITE-IS sliders control the color coding of the sugar. The BIRTH slider controls whether (1) or not (0) the agents can give birth. The SHOW SUGAR button colors the turtles based on how much sugar they have. The SHOW VISION button colors the turtles based on how far their vision is. The SHOW METABOLISM button colors the turtles based on the value of their metabolism. THINGS TO NOTICE ---------------- Watch the COUNT-TURTLES monitor to see how the agent population changes over time. You can also watch the AVERAGESUGAR, AVERAGEVISION and AVERAGEMETABOLISM monitors to see how the average values of these turtle traits change over time. The plot window graphs the total number of agents, as well as these average values, over time. The value of these traits can be influenced by the environmental conditions. Sometimes coniditions will strongly select for longer range vision, or lower metabolism. EXPLORATIONS ------------- Under the current setting, the agents can survive and reproduce. Is the current Sugarscape capable of supporting an infinite number of agents, or is there a limit? How is that limit determined? How does the growback rate affect turtle vision and metabolism? How are these two quantities related in the population of turtles and within individual turtles? There are many extensions of this model that are described in the Artificial Societies book. Can you implement some of them? STARLOGO FEATURES ------------------- The turtles in Sugarscape are all called from an "ask-turtles" inside of an Observer procedure. This keeps the turtles in sync with each other. This also keeps them in sync with the patch procedures that are growing back the sugar. The turtles also make use of the "leap" command. This command is like the jump command, except that turtles will not execute it unless there are no other turtles on the patch they are trying to get to. By calling leap within the recursive turtle procedure "relocate", it is ensured that no two turtles stay on the same patch. `interface` SLCanvas top-left 8 228 SLSlider top-left 155 82 width-height 62 25 name "slider5" variable "birth?" min-value 0 max-value 1 current-value 1 slider-number 5 show-name? false SLMonitor top-left 224 16 width-height 82 36 name "monitor1" list-to-run "count-turtles" digits 0 delay 0.5 monitor-number 2 show-name? false whichip 24 onewhichip 25 SLMonitor top-left 221 130 width-height 77 36 name "monitor2" list-to-run "averagesugar" digits 1 delay 0.5 monitor-number 3 show-name? false whichip 26 onewhichip 27 SLMonitor top-left 267 19 width-height 80 36 name "monitor3" list-to-run "averagevision" digits 2 delay 0.5 monitor-number 4 show-name? false whichip 28 onewhichip 29 SLMonitor top-left 264 130 width-height 78 36 name "monitor4" list-to-run "averagemetabolism" digits 2 delay 0.5 monitor-number 5 show-name? false whichip 30 onewhichip 31 SLButton turtle-or-observer? turtle top-left 309 21 width-height 75 30 name "Show Sugar" line-to-run "setcolorscheme 0 sugar-color" forever? false button-number 8 show-name? true whichip 18 SLButton turtle-or-observer? turtle top-left 309 117 width-height 101 30 name "Show Vision" line-to-run "setcolorscheme 2 vis-color" forever? false button-number 7 show-name? true whichip 19 SLButton turtle-or-observer? turtle top-left 344 122 width-height 94 30 name "Show Metabolism" line-to-run "setcolorscheme 1 metab-color" forever? false button-number 6 show-name? true whichip 20 SLButton turtle-or-observer? turtle top-left 345 23 width-height 71 30 name "toggle-turtles" line-to-run "ifelse shown? [ht] [st]" forever? false button-number 9 show-name? true whichip 21 SLLineWidget top-left 387 17 width-height 201 100 id 6 order 6 type 1 title "Agents, Sugar, Vision, Metabolism" delay-string "1.0" xlabel "" ylabel "" grid false connected true autoscaletrue location 0 0 whichip 32 onewhichip 33 wizard-on true lineset-id 1 lineset-name "Agents" lineset-order 6 lineset-type 1 lineset-color -16777216 lineset-displayed? true lineset-instruction "( count-turtles) " extrainfo-extra? true extrainfo-instruction "number of" extrainfo-breed "turtles" extrainfo-var "Xcor" extrainfo-with false extrainfo-xy? false extrainfo-xval? false lineset-end 1 lineset-id 2 lineset-name "Sugar" lineset-order 6 lineset-type 1 lineset-color -65536 lineset-displayed? true lineset-instruction " (average-of-turtles [ sugar-holdings ] ) " extrainfo-extra? true extrainfo-instruction "average of" extrainfo-breed "turtles" extrainfo-var "sugar-holdings" extrainfo-with false extrainfo-xy? false extrainfo-xval? false lineset-end 2 lineset-id 3 lineset-name "Vision" lineset-order 6 lineset-type 1 lineset-color -16776961 lineset-displayed? true lineset-instruction " (average-of-turtles [ vision-level ] ) " extrainfo-extra? true extrainfo-instruction "average of" extrainfo-breed "turtles" extrainfo-var "vision-level" extrainfo-with false extrainfo-xy? false extrainfo-xval? false lineset-end 3 lineset-id 4 lineset-name "Metabolism" lineset-order 6 lineset-type 1 lineset-color -8453889 lineset-displayed? true lineset-instruction " (average-of-turtles [ sugar-metabolism ] ) " extrainfo-extra? true extrainfo-instruction "average of" extrainfo-breed "turtles" extrainfo-var "sugar-metabolism" extrainfo-with false extrainfo-xy? false extrainfo-xval? false lineset-end 4 lineset-id 5 lineset-name "" lineset-order 6 lineset-type 1 lineset-color -11418368 lineset-displayed? false lineset-instruction "( count-turtles) " extrainfo-extra? true extrainfo-instruction "number of" extrainfo-breed "turtles" extrainfo-var "Xcor" extrainfo-with false extrainfo-xy? false extrainfo-xval? false lineset-end 5 lineset-id 6 lineset-name "" lineset-order 6 lineset-type 1 lineset-color -16711936 lineset-displayed? false lineset-instruction "( count-turtles) " extrainfo-extra? true extrainfo-instruction "number of" extrainfo-breed "turtles" extrainfo-var "Xcor" extrainfo-with false extrainfo-xy? false extrainfo-xval? false lineset-end 6 lineset-id 7 lineset-name "" lineset-order 6 lineset-type 1 lineset-color -16711738 lineset-displayed? false lineset-instruction "( count-turtles) " extrainfo-extra? true extrainfo-instruction "number of" extrainfo-breed "turtles" extrainfo-var "Xcor" extrainfo-with false extrainfo-xy? false extrainfo-xval? false lineset-end 7 lineset-id 8 lineset-name "" lineset-order 6 lineset-type 1 lineset-color -16711681 lineset-displayed? false lineset-instruction "( count-turtles) " extrainfo-extra? true extrainfo-instruction "number of" extrainfo-breed "turtles" extrainfo-var "Xcor" extrainfo-with false extrainfo-xy? false extrainfo-xval? false lineset-end 8 lineset-id 9 lineset-name "" lineset-order 6 lineset-type 1 lineset-color -16744449 lineset-displayed? false lineset-instruction "( count-turtles) " extrainfo-extra? true extrainfo-instruction "number of" extrainfo-breed "turtles" extrainfo-var "Xcor" extrainfo-with false extrainfo-xy? false extrainfo-xval? false lineset-end 9 lineset-id 10 lineset-name "" lineset-order 6 lineset-type 1 lineset-color -7434610 lineset-displayed? false lineset-instruction "( count-turtles) " extrainfo-extra? true extrainfo-instruction "number of" extrainfo-breed "turtles" extrainfo-var "Xcor" extrainfo-with false extrainfo-xy? false extrainfo-xval? false lineset-end 10 SLSlider top-left 16 101 width-height 121 25 name "capacity-constant" variable "capacity-constant" min-value 1 max-value 10 current-value 10 slider-number 1 show-name? false SLSlider top-left 47 55 width-height 107 25 name "slider2" variable "hatch-threshold" min-value 0 max-value 99 current-value 30 slider-number 2 show-name? false SLSlider top-left 81 37 width-height 129 25 name "growback rate" variable "milli-alpha" min-value 0 max-value 2000 current-value 182 slider-number 3 show-name? true SLSlider top-left 112 55 width-height 118 25 name "instant growback?" variable "alphinity" min-value 0 max-value 1 current-value 0 slider-number 4 show-name? true SLButton turtle-or-observer? observer top-left 187 126 width-height 40 30 name "button2" line-to-run "go" forever? true button-number 3 show-name? false whichip 23 SLSlider top-left 16 12 width-height 82 25 name "slider0" variable "n-agents" min-value 1 max-value 400 current-value 197 slider-number 0 show-name? false SLButton turtle-or-observer? observer top-left 188 58 width-height 40 30 name "button1" line-to-run "setup" forever? false button-number 2 show-name? false whichip 22 `turtle shapes` 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 DhUAABUO2Q== `template` null `settings` patch-size 8 num-shapes 256 screen-half-width 25 screen-half-height 25 interface-window-xcor 284 interface-window-ycor 46 interface-window-size 661 495 output-window-xcor 0 output-window-ycor 0 output-window-width 300 output-window-height 219 info-window-xcor 0 info-window-ycor 0 info-window-width 500 info-window-height 419 control-center-xcor 28 control-center-ycor 29 control-center-width 863 control-center-height 592 turtle-command-center-height 150 observer-command-center-height 151 `string table` H4sIAAAAAAAAAGNgYGAAABzfRCEEAAAAAAAABA== `symbol table` H4sIAAAAAAAAAGNgYGBkYCkpKk0FAJNWxWwKAAAAAAAACg== `double table` H4sIAAAAAAAAAGNgYOBzUGEAAweWUzvaVdfnObDkangcbb3pwAEVF4DQ9h+gfAYo /wGU79YAoUWgfAkorQelYw5A6CiITgDVFokHdAAAAAAAAHQ= `list table` H4sIAAAAAAAAAJVS223DMAwkKVlJHBcI0AUK9DsbdJJOkLX71xX6V1I6xmcjRRED 9FF8nCiSIvImIq/qvxQTmYANWOBTlwp76hE7h7+M2OpQdUjkhL/TpM2/D8cfust2 IjtU6AvXB/tCeuKXy5XyzXMOsF+IQ/+wKfKTY1MPuK4P8h7ZFG8+It97Wb6Jl2OM 9OjtkWJmGfcy910PJH+jd7dE8pdRR8/ruo3x7Xv5r8g6i83cpPPqLd/n5/e827AH jifHT+xF1Dgr7YmueyZ0LnwmvkZ8DW+bwcU5fSejbvefd/Od0PeF5lJhe6FdzB1n TpW1BzlLIz3nevfFHsmwm2xnckBMAW+hHqWvUt6EGaavnzHP7GHuBPfRoFfaofMz Ob9UThDdQAQAAAAABEA= `bytecodes` H4sIAAAAAAAAANVYWXPbNhBeUvd9mbJsybbio3WbKj3S033p+KUv8Uszk/Yxsswq mkiiR6KS5qW/sP1PBRcLYAHJcmfcGU85Q4EEd789sNhdCEqvrz/E4Si6CZevf4K/ kutvADiGzDKMV7fi8RXo61jcHj179NPw6VmNKTaXpjHD5rI05uRcjniA4+bBOxVD J42wAE9ovkBjEbx6VtyKvgTQ9Oi5TGPFoakymhqNdZzzer6k7aVwhCBLelWNXomK J2o+Z+ZzpJf1nnfsadDYlDafHSUqZNBr40j8Xhp6n/By0k4bt/Ef6QPSv7SGXn2X 5GaIPm3Lsb5l7G+1lF5/g5limAWHv7RuA+L45BMP8uNF9P56OHorpk8dSx7ZUtTQ h9Js+DYcTRajabgUuMeGkG8RHb5Zs13UVmmlyXyi8cSH4AC8YIe5MLl7bC5Nc8oI sQ16Sl5GfuspGVl8x1DWhtX11kv4vLqizUta2mIGo0jyPIOjl7vEHFtmW6tCsjp6 23nNBKdrtl5LYdTxm9oiBq9p5OJ7i+ELXwRl0kXoGqi0Egj6gGT/QnNtGncFXZfh dQi/yeb2ZCoQEMan+0QXoBzjl66Zrx+RTB9N1qHsE3+gsHrkR5USD8Sz8tEh0Zfo /cjxWZ/57Illv5bZUX44ZrgnDu6pg3vGcD/ajIv8vxHNxzSeO/78ZIM/P9X+lO9P nZj7jHjabA0HzMfPdAwgzb/28+eOn79g/vjS8cdXjj+eM398fY+fv2G43zq43zm4 3zPcHzbjJvtKpUPEyhH9BXgt5ZMf7byBSSoL+sLklIJguRoPFwOVRAc/D6e3b4a4 TPryZZjpHKlFeGwb+rQE6j0lxatUpHky+Gy2n1I9y2hyRvVk2baakIaOa8Jk/vtk Pok/gFUDLWm2Ffc7KgP5UTSNFoNwtgG1pFG1XzQ663R2skYKomahMHwXDlB/wJ0N HMbAYSNgiRLubngaWkYQaHdDg0WIcnvSV+zx7J2VuDVZw4qJKu8my0k0f2Rd8lBN dJmF8fA6mk6Ws0fWpwDl4Ticx4NZJNS6giRv6AvDpbKmnalVHmnAAqJpa2fq9d7m vKW01LSsLVY1uZVjVhaYDMVTknkFLSpCYRHeLqKb1SgETP3b1D8Ftl/bxsmaJsUc l5airc60fLe7VJq0uroS5BfhNBoN40S71rp22Hd3TAgEosh0wWimtfVlk2ehl0VH lixkHA1mwz/Elz/XBbTAgGNl6m5cPctkWiXTUSW3zxTNMZflGU9BzqPCl2bV8P25 WT1PuhKjaV+l1gpWPNU96a4JR9kxeS11yGlQJCadyKGznE3Q3ROOOw5v4PihzfTf ZXZ15LwVuSKqgz1TxXBun/Hw7qDH+BXtgaRlHZDhVWWpD6rjkTtBBYBaj2PCOHeC oQIlWT4wvYOV292croWanG7qX1puv6BJwFURZUkC08DrOWIbsAGqQUFk5QfD1KEi K1i8WsR4EuElXsW9zpubjj/OAddNBzznrvHWNvCqb3X7m+pu9BGqAa3LVRxH84t+ /+Wb6H3/JRXM4poPMLm7yqKkJuzYIK9UqduGUndQWtCxUa54kdqGVHOQdmBXI8XR eDwN2cqI81LAelhx1jNeS94PjYcQLICqBlN/xWSs868RHEBJ0+L/Ce6Z2zPkKCSr GdtXkeirosVFfxStRD00CpcJI29CSZRTOE0ZT9SKDl57C15mHQcndyHQPKJHWIi6 rLqnqj7nrm2MZE9rVfwNqnTuhs3dDYese8wKYtVN1ENU2t+Ce59OXdh3ea1m6iF6 9e7Bvk+3A6i+mMzD/q+Tm3EYX/TFcUgcraQ+z9Z5k9U/O1vPa0jPzhdJ7kv+HTk5 Z/SmGNv0uTvoVfQWHPriHfSlDf453GDf0/+PXQh+9A/wL9fl6hUAAAAAFeo= `observer world` H4sIAAAAAAAAAD1OXQvCMAxMNz+GU9B3H/wdPvlT1s3QFrpmNHX9+6ZlLHCQu8sl gftAI2NcMb446YTDB/Z6w2XxlLL7GkzCD3DyGEyy0j/hXLwFQx3ta3h3O8ER+ok8 RZ4szlinrlruaIP8MzoKV3DblNWxo7KqgccmzZj0SN7xLHILXaDMlnKoj5SsQNVE hRI0rfR/7/ibL9MAAAAAAADT `patch world` H4sIAAAAAAAAAI3dO69j13nG8W3HsbcTJGDBgkF2QRAEQRDMBu/36+HtnNpQaguK INsQrJEzubjjF4g+QSp38fcI1KVybcAW4CZFAqRIkSZz5POu2eudWfP8F0Do9vMz Erk3/+PBHJ7sL3786uPXn/yk+fevP3796Y8PWTh/m33vnz/54hff/vmfvfr8i9f/ 9NO/++zT12/+qsi+++qTN3+sZd///NOff/b6J2/+vJv94Nm8+vTnb/6ikX3vl3/8 n+bZn387HFzzzeOvXh7fffMP/+Gzj3/xN59/+o+ffv7tD/SXf/wbn3z86uNPfvr6 l2/+znf2//3Hfx/7Y+V85/nxnZc/sX916XLoatDVoWtAV0DXhK4FXRu6DnRd6HrQ 9aEroRtAN4RuBN0Yugl0U+hm0M2hW0C3hG4F3Rq6DXRb6HbQ7aE7UHdn7gj3jnDv Ae49wL0T3DvBvTPcO8O9C9y7wL0r3LvCvRvcu8G9R7j3CPee4N4T27N/fniHvb/7 0uXQ1aCrQ9eAroCuCV0LujZ0Hei60PWg60NXQjeAbgjdCLoxdBPoptDNoJtDt4Bu Cd0KujV0G+i20O2g20N3oO7O3BHuHeHeA9x7gHsnuHeCe2e4d4Z7F7h3gXtXuHeF eze4d4N7j3DvEe49wb0nthe6n4u9DLocuhp0dega0BXQNaFrQdeGrgNdF7oedH3o SugG0A2hG0E3hm4C3RS6GXRz6BbQLaFbQbeGbgPdFroddHvoDtTdmTvGe9bFivv2 Ebqv3APce4B7J7h3gntnuHeGe9Z96eDeNd6rnPh1s+4rZ92XDu5Z96WDe9Z96dhe 6H5N7GXQ5dDVoKtD14CugK4JXQu6NnQd6LrQ9aDrQ1dCN4BuCN0IujF0E+im0M2g m0O3gG4J3Qq6NXQb6LbQ7aDbQ3eIXbIf1n3ljn7vq8U3//J//1Fx331+hO4r9wD3 HuDeCe6d4N4Z7p3h3gXuXeDrcfV7KQf3bvFe5cTXlXVfOeu+dHDPui8d2wvdr4u9 DLocuhp0dega0BXQNaFrQdeGrgNdF7oedH3oSugG0A2hG0E3hm4C3RS6GXRz6BbQ LaFbQbeGbgPdFroddPvYpXtO3d25VM/9nui+uUvx5dd//b//WnF/8vwI3ZcO7p3g 3gnuneHeGe5d4N4Fvh7XDDq/l9mJr4Ob30u5eK9y4uvUui8d3LPuS8f2QvcbYi+D LoeuBl0dugZ0BXRN6FrQtaHrQNeFrgddH7oSugF0Q+hG0I2hm0A3hW4G3Ry6BXRL 6FbQraHbQLeFbhe75PvuHrqDd4kuWPfNpXp0zKCDew9w7wHuneDeCe6d4d4Z7l3g 3gXuXeHe1e2lroOb21PdV+4x3quc+Lq37itn3ZeO7YXuF2Ivgy6HrgZdHboGdAV0 Teha0LWh60DXha4HXR+6EroBdEPoRtCNoZtAN4VuBt0cugV0S+hW0K2h20C3jV3y fXIH3d67VM+dS3XBuq/cEe4d/d6vf/3rf/ufn1Xc954fofvSwb0T3DvBvTPcO8O9 C9y7wNfj6vdE95W7ub3kzw/cnuq+dPFe5cT3kXVfOrYXut8Uexl0OXQ16OrQNaAr oGtC14KuDV0Hui50Pej60JXQDaAbQjeCbgzdBLopdDPo5tAtoFtCt4JuDd0Gum3s ZPeDS7zv7p1L9py6O3NHv5fo1tHvie6buy6++Wr+X4uK+9PnR+i+cie4d4J7Z7h3 hnsXt6e6r9zV74nuK3eDeze3l7pOH92e6n4z8ye+j6z70rG90P2W2Mugy6GrQVeH rgFdAV0TuhZ0beg60HWh60HXh66EbgDdELoRdGPoJtBNoZtBN4duAd0SuhV0a+g2 sUu+r22h23knum9OdV+6u3Opnvs90X1zyZ67vevXxZf//p/fr7jvPz9C95U7wb0T 3DvDvTPcu/i91M8P4PN3dXvJnx/411d0Xzq3p7qvrvtHv5dwT/Fe5cT3pXVfuND9 ttjLoMuhq0FXh64BXQFdE7oWdG3oOtB1oetB14euhG4A3RC6EXRj6CbQTaGbQTeH bgHdEroVdGvoNrGT3Q8u8T65cy71vruH7uBdogvWfeWObi/Vo6PbS/bc7d0++uij H/3hNxX3g+dH6L5yJ7h3gntnuHeGexe3l/z5gX/+RPfV63Z1e6r70sG9R7eX/PmB 21PdV/eldV+40P2O2Mugy6GrQVeHrgFdAV0TuhZ0beg60HWh60HXh66EbgDdELoR dGPoJtBNoZtBN4duAd0SuhV0a+g2sZPdD05035zqvnIH70T3zSV77vZS3Tq6vWTP M+jg3gnuneDeGe6d4d4F7l3865F4nq9uL/nzA7eXug5ubk91X7lHt6e6r+6jp3iv cuL70rovXOh+V+xl0OXQ1aCrQ9eAroCuCV0LujZ0Hei60PWg60NXQjeAbgjdCLox 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 5lT3X5zsvnBd71T3X5zsvnAl/HEH3qnuCzdyTnZfvG4T52T3zanuCzd3TnbfXGYn vo+Wsauc+L5cQbeGbgPdFroddHvoDtTdmTvCvdB94UL3lYN7ofvKwb3QfeXgXui+ cnAvdF85uBe6rxzcC91XDu6F7ivH9kL3z54luq9cHjvZ/eBE982p7itXeCe6b051 PzjRfXOq+8p1vRPdV64PXQndwDvRfeVGzqnuq9dt4pzqvrquZtDNnVPdV/fRu99n 1ru4+8q9+31x3u/e/bz997t3P8f3/e7dzwd8v3v3c4fe7w7U3Zk7wr13f1/n+927 v/8p4eDeu78ulHBw793rLuHgnnVfOrhn3ZcO7ln3pYN71n3p4J51Xzq297b79w/v ZdDlsdPdN6e6/+Jk94UrvFPdf3Gy++ZU91+c7L5wXeh60PWhK6EbQDeEbuSc7L54 3SbOye6bU90Xbu6c7L65zE58Hy1jVznxfbmCbg3dBrotdDvo9tAdqLszd4R7ofvC he4rB/dC95WDe6H7ysG90H3l4F7ovnJwL3RfObgXuq8c3AvdV47the5fPEt0X7k8 drL7wYnum1PdV67wTnRfuZZz6uv4ghNfx2dOdV+5HnR96EroBtANnVNfx6ee57Fz 6uv4lJt6J7qv3Nw51X11Hy1jVznxfbmCbg3dBrotdDvo9tAdqLszd4R74es9hbPu Swf3wu8rUQ7uhV+3Ug7uhftCObhn3ZcO7ln3pYN71n3p4J51Xzq297b79w/vZdDl sdPdF67unfjcnnDdqO4L1/ROdf/Fye4L1/FOfG6Pcj3o+tCV0A2gG3onPrdHvR5j 6CbeJa6DKXQz51LX6Ry6hXeZnfj+WMaucuL7cgXdGroNdFvodtDtoTtQd2fuCPdC 94UL3VcO7oXuKwf3QveVg3uh+8rBvdB95eBe6L5ycC90Xzm4F7qvHNsL3b96lui+ cjl0tdjJ7gcnuh+uB9F95ZrQtbwTn9OrXMc59Tm9yvWg60NXQjeAbuic+pxe5cbe JV63CXRT6GbOqe6r634Ru8qJ76MldCvo1tBtoNtCt4NuD92BujtzR7gXPldKOOu+ dHAvfP2KcnAv/P4Y5eBe+HU65eBeeF9RDu5Z96WDe9Z96eCedV86tve2+/cP72XQ 5dDVYqe7L1zDO/F9ecLPA1X3hWtB14au4534vjzK9aDrQ1dCN4BuCN3Iu8TzN4Zu At3UudR1NfMusxNfp/PYVU58fyygW0K3gm4N3Qa6LXQ76PbQHai7M3eEe6H7woXu Kwf3QveVg3uh+8rBvdB95eBe6L5ycC90Xzm4F7qvHNwL3VeO7YXu3zxLdF+5HLoa dPXYye4rV3gnvg9v+PUf0X3l2tB1oOtC14OuD10J3QC6IXQj6MbQTZxLXQdT7zI7 8XU1g24eu8qJr/sFdEvoVtCtodtAt4VuB90eugN1d+aOcC98LrVw1n3p4F74/Avl 4F74+hrl4F74fT7KwT3rvnRwz+5b6eCedV86uGfdl47tve3+/cN7GXQ5dDXo6tA1 Yqe7L1zTu0QXWtC1nZPdF64LXQ+6PnQldAPohtCNnEs9z2PoJt5lduLrYArdLHaV E1+nc+gW0C2hW0G3hm4D3Ra6HXR76A7U3Zk7wr3QfeFC95WDe6H7ysG90H3l4F7o vnJwL3RfObgXuq8c3AvdVw7uhe4rx/ZC9x89S3RfuRy6GnR16BrQFdA1Y5d8v29B 1/Yu0aMOdF3oetD1oSuhG0A3hG7kXeJ5HkM3gW4au8qJr5cZdHPoFtAtoVtBt4Zu A90Wuh10e+gO1N2ZO8I9675y1n3p4F74nE3l4J51Xzq4Z92XDu5Z96WDe9Z96eCe va9IB/es+9Kxvbfdv394L4Muh64GXR26BnQFdE3oWrHT3ReuA10Xuh50fehK6AbQ DaEbQTeOXeXEr9sEuil0M+jm0C2gW0K3gm4N3Qa6LXQ76PbQHai7M3eEe6H7woXu Kwf3QveVg3uh+8rBvdB95eBe6L5ycC90Xzm4F7qvHNwL3VeO7YXuP3mW6L5yOXQ1 6OrQNaAroGtC14KuDV0Hui50Pej60JXQDaAbQjeCbgzdBLopdDPo5tAtoFtCt4Ju Dd0Gui10O+j20B2ouzN3hHvWfeWs+9LBPeu+dHDPui8d3LPuSwf3rPvSwT3rvnRw z7ovHdyz7kvH9t52//7hvQy6HLoadHXoGtAV0DWha0HXhq4DXRe6HnR96EroBtAN oRtBN4ZuAt0Uuhl0c+gW0C2hW0G3hm4D3Ra6HXR76A7U3Zk7wr3QfeFC95WDe6H7 ysG90H3l4F7ovnJwL3RfObgXuq8c3AvdVw7uhe4rx/b+HwP4bCoKlwEAAAGXCg== `turtle world` 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 nv2ILfMh1m8Vf/5f//wv8nYFvq9CAAAAAEKv