<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.secondlife.com/w/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Shy+Robbiani</id>
	<title>Second Life Wiki - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.secondlife.com/w/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Shy+Robbiani"/>
	<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/wiki/Special:Contributions/Shy_Robbiani"/>
	<updated>2026-05-30T09:19:34Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.42.1</generator>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=Talk:LSO&amp;diff=1200181</id>
		<title>Talk:LSO</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=Talk:LSO&amp;diff=1200181"/>
		<updated>2016-05-25T12:53:28Z</updated>

		<summary type="html">&lt;p&gt;Shy Robbiani: Link to http://www.libsecondlife.org/wiki/LSO no longer valid.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Unfortunately http://www.libsecondlife.org/wiki/LSO is no longer a valid link. I could not find yet an alternative.&lt;/div&gt;</summary>
		<author><name>Shy Robbiani</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=Talk:Build_the_Viewer_on_Windows&amp;diff=1196372</id>
		<title>Talk:Build the Viewer on Windows</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=Talk:Build_the_Viewer_on_Windows&amp;diff=1196372"/>
		<updated>2015-05-02T16:51:26Z</updated>

		<summary type="html">&lt;p&gt;Shy Robbiani: Comment regarding Python path added&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Section Cygwin &lt;br /&gt;
&lt;br /&gt;
Add--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Net/openssh&lt;br /&gt;
&lt;br /&gt;
copy ssh keys&lt;br /&gt;
&lt;br /&gt;
Copy ssh keys to C:\cygwin64\home\[username]\.ssh&lt;br /&gt;
&lt;br /&gt;
at first use  this may come up &amp;quot;Permissions 0755 for &#039;/home/bill/.ssh/id_rsa&#039; are too open.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Fix it with:&lt;br /&gt;
&lt;br /&gt;
 cd /home/[username]bill/.ssh&lt;br /&gt;
 chgrp Users id_rsa&lt;br /&gt;
 chmod 600 id_rsa&lt;br /&gt;
[[User:Nicky Perian|Nicky Perian]] ([[User talk:Nicky Perian|talk]]) 23:54, 28 January 2015 (PST)&lt;br /&gt;
:&lt;br /&gt;
&#039;&#039;&#039;Section DirectX SDK&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
1) It should be mentioned that .NET Framework 3.5 (includes NET 2.0 and 3.0) is required and must be installed first if prompted.&lt;br /&gt;
&lt;br /&gt;
2) In case of Error S1023 remove Visual C++ 2010 Redistributable Package, retry to install and run Windows Update to reapply security patches.&lt;br /&gt;
(http://blogs.msdn.com/b/chuckw/archive/2011/12/09/known-issue-directx-sdk-june-2010-setup-and-the-s1023-error.aspx)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Section Intermediate check&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
After Python install but before the intermediate check a new login is required, otherwise Python will not be found in the path in Cygwin.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Section Test build of the Second Life Viewer&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
-&amp;gt; before &amp;quot;When the build completes (hopefully without errors) run it by pressing Control-F5&amp;quot;&lt;br /&gt;
&lt;br /&gt;
- Pick Properties &amp;gt; Configuration Properties &amp;gt; Debugging&lt;br /&gt;
&lt;br /&gt;
- Set Working Directory to  ..\..\indra\newview&lt;br /&gt;
&lt;br /&gt;
[[User:Shy Robbiani|Shy Robbiani]] ([[User talk:Shy Robbiani|talk]]) 08:05, 30 April 2015 (PDT)&lt;/div&gt;</summary>
		<author><name>Shy Robbiani</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=Talk:Build_the_Viewer_on_Windows&amp;diff=1196326</id>
		<title>Talk:Build the Viewer on Windows</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=Talk:Build_the_Viewer_on_Windows&amp;diff=1196326"/>
		<updated>2015-04-30T15:12:29Z</updated>

		<summary type="html">&lt;p&gt;Shy Robbiani: fixed formatting&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Section Cygwin &lt;br /&gt;
&lt;br /&gt;
Add--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Net/openssh&lt;br /&gt;
&lt;br /&gt;
copy ssh keys&lt;br /&gt;
&lt;br /&gt;
Copy ssh keys to C:\cygwin64\home\[username]\.ssh&lt;br /&gt;
&lt;br /&gt;
at first use  this may come up &amp;quot;Permissions 0755 for &#039;/home/bill/.ssh/id_rsa&#039; are too open.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Fix it with:&lt;br /&gt;
&lt;br /&gt;
 cd /home/[username]bill/.ssh&lt;br /&gt;
 chgrp Users id_rsa&lt;br /&gt;
 chmod 600 id_rsa&lt;br /&gt;
[[User:Nicky Perian|Nicky Perian]] ([[User talk:Nicky Perian|talk]]) 23:54, 28 January 2015 (PST)&lt;br /&gt;
:&lt;br /&gt;
&#039;&#039;&#039;Section DirectX SDK&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
It should be mentioned that .NET Framework 3.5 (includes NET 2.0 and 3.0) is required and must be installed first if prompted.&lt;br /&gt;
&lt;br /&gt;
2) In case of Error S1023 remove Visual C++ 2010 Redistributable Package, retry to install and run Windows Update to reapply security patches.&lt;br /&gt;
(http://blogs.msdn.com/b/chuckw/archive/2011/12/09/known-issue-directx-sdk-june-2010-setup-and-the-s1023-error.aspx)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Section Test build of the Second Life Viewer&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
-&amp;gt; before &amp;quot;When the build completes (hopefully without errors) run it by pressing Control-F5&amp;quot;&lt;br /&gt;
&lt;br /&gt;
- Pick Properties &amp;gt; Configuration Properties &amp;gt; Debugging&lt;br /&gt;
&lt;br /&gt;
- Set Working Directory to  ..\..\indra\newview&lt;br /&gt;
&lt;br /&gt;
[[User:Shy Robbiani|Shy Robbiani]] ([[User talk:Shy Robbiani|talk]]) 08:05, 30 April 2015 (PDT)&lt;/div&gt;</summary>
		<author><name>Shy Robbiani</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=Talk:Build_the_Viewer_on_Windows&amp;diff=1196325</id>
		<title>Talk:Build the Viewer on Windows</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=Talk:Build_the_Viewer_on_Windows&amp;diff=1196325"/>
		<updated>2015-04-30T15:08:43Z</updated>

		<summary type="html">&lt;p&gt;Shy Robbiani: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Section Cygwin &lt;br /&gt;
&lt;br /&gt;
Add--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Net/openssh&lt;br /&gt;
&lt;br /&gt;
copy ssh keys&lt;br /&gt;
&lt;br /&gt;
Copy ssh keys to C:\cygwin64\home\[username]\.ssh&lt;br /&gt;
&lt;br /&gt;
at first use  this may come up &amp;quot;Permissions 0755 for &#039;/home/bill/.ssh/id_rsa&#039; are too open.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Fix it with:&lt;br /&gt;
&lt;br /&gt;
 cd /home/[username]bill/.ssh&lt;br /&gt;
 chgrp Users id_rsa&lt;br /&gt;
 chmod 600 id_rsa&lt;br /&gt;
[[User:Nicky Perian|Nicky Perian]] ([[User talk:Nicky Perian|talk]]) 23:54, 28 January 2015 (PST)&lt;br /&gt;
:&lt;br /&gt;
&#039;&#039;&#039;Section DirectX SDK&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
It should be mentioned that .NET Framework 3.5 (includes NET 2.0 and 3.0) is required and must be installed first if prompted.&lt;br /&gt;
&lt;br /&gt;
2) In case of Error S1023 remove Visual C++ 2010 Redistributable Package, retry to install and run Windows Update to reapply security patches.&lt;br /&gt;
(http://blogs.msdn.com/b/chuckw/archive/2011/12/09/known-issue-directx-sdk-june-2010-setup-and-the-s1023-error.aspx)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Section Test build of the Second Life Viewer&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
-&amp;gt; before &amp;quot;When the build completes (hopefully without errors) run it by pressing Control-F5&amp;quot;&lt;br /&gt;
- Pick Properties &amp;gt; Configuration Properties &amp;gt; Debugging&lt;br /&gt;
- Set Working Directory to  ..\..\indra\newview&lt;br /&gt;
&lt;br /&gt;
[[User:Shy Robbiani|Shy Robbiani]] ([[User talk:Shy Robbiani|talk]]) 08:05, 30 April 2015 (PDT)&lt;/div&gt;</summary>
		<author><name>Shy Robbiani</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=Talk:Build_the_Viewer_on_Windows&amp;diff=1196324</id>
		<title>Talk:Build the Viewer on Windows</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=Talk:Build_the_Viewer_on_Windows&amp;diff=1196324"/>
		<updated>2015-04-30T15:05:17Z</updated>

		<summary type="html">&lt;p&gt;Shy Robbiani: Missing instructions/remarks&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Section Cygwin &lt;br /&gt;
&lt;br /&gt;
Add--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Net/openssh&lt;br /&gt;
&lt;br /&gt;
copy ssh keys&lt;br /&gt;
&lt;br /&gt;
Copy ssh keys to C:\cygwin64\home\[username]\.ssh&lt;br /&gt;
&lt;br /&gt;
at first use  this may come up &amp;quot;Permissions 0755 for &#039;/home/bill/.ssh/id_rsa&#039; are too open.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Fix it with:&lt;br /&gt;
&lt;br /&gt;
 cd /home/[username]bill/.ssh&lt;br /&gt;
 chgrp Users id_rsa&lt;br /&gt;
 chmod 600 id_rsa&lt;br /&gt;
[[User:Nicky Perian|Nicky Perian]] ([[User talk:Nicky Perian|talk]]) 23:54, 28 January 2015 (PST)&lt;br /&gt;
:&lt;br /&gt;
&#039;&#039;&#039;Section DirectX SDK&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
It should be mentioned that .NET Framework 3.5 (includes NET 2.0 and 3.0) is required and must be installed first if prompted.&lt;br /&gt;
&lt;br /&gt;
2) In case of In case of Error S1023 remove Visual C++ 2010 Redistributable Package, retry to install and run Windows Update to reapply security patches.&lt;br /&gt;
(http://blogs.msdn.com/b/chuckw/archive/2011/12/09/known-issue-directx-sdk-june-2010-setup-and-the-s1023-error.aspx)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Section Test build of the Second Life Viewer&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
-&amp;gt; before &amp;quot;When the build completes (hopefully without errors) run it by pressing Control-F5&amp;quot;&lt;br /&gt;
- Pick Properties &amp;gt; Configuration Properties &amp;gt; Debugging&lt;br /&gt;
- Set Working Directory to  ..\..\indra\newview&lt;br /&gt;
&lt;br /&gt;
[[User:Shy Robbiani|Shy Robbiani]] ([[User talk:Shy Robbiani|talk]]) 08:05, 30 April 2015 (PDT)&lt;/div&gt;</summary>
		<author><name>Shy Robbiani</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=Autobuild/How_To&amp;diff=1196292</id>
		<title>Autobuild/How To</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=Autobuild/How_To&amp;diff=1196292"/>
		<updated>2015-04-28T12:13:53Z</updated>

		<summary type="html">&lt;p&gt;Shy Robbiani: /* Creating a new configuration */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Autobuild Nav}}&lt;br /&gt;
&lt;br /&gt;
Autobuild is a framework for maintaining and building projects and managing dependencies among them.  &lt;br /&gt;
This page is a tutorial introduction to basic use of Autobuild.  For an overview, see [[Autobuild]].&lt;br /&gt;
&lt;br /&gt;
== Using Autobuild to build a project ==&lt;br /&gt;
This section discusses how to configure Autobuild to build a source package.  It assumes you have a source distribution and a working build system like &#039;&#039;&#039;[http://www.gnu.org/software/make/ make]&#039;&#039;&#039; or &#039;&#039;&#039;[http://www.cmake.org/ cmake]&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
=== Before you start ===&lt;br /&gt;
&lt;br /&gt;
==== Build for your platform(s) ====&lt;br /&gt;
Autobuild is not a build system like &#039;&#039;&#039;[http://www.gnu.org/software/make/ make]&#039;&#039;&#039; or  &#039;&#039;&#039;[http://www.cmake.org/ cmake]&#039;&#039;&#039;. It is not intended to solve the nitty-gritty problem of building code on particular platforms; it is designed to provide a common interface for builds and packaging on top of platform-specific tools.  &lt;br /&gt;
&lt;br /&gt;
For each library or application you want to manage with Autobuild  you need a build (and possibly configure) command for every platform you support.  For example, typical Linux packages use makefiles and are built by calling the &amp;lt;code&amp;gt;make&amp;lt;/code&amp;gt; command.   On Windows you may call &#039;&#039;devenv.com&#039;&#039; passing a project file as an argument.  In subsequent sections you will learn how to configure Autobuild so it can run your platform configuration and build commands.&lt;br /&gt;
&lt;br /&gt;
=== Creating a new configuration ===&lt;br /&gt;
&lt;br /&gt;
The following steps create an autobuild configuration (conventionally &amp;lt;tt&amp;gt;autobuild.xml&amp;lt;/tt&amp;gt;) for your project. That configuration describes the project output, each of the projects dependencies (also referred to as &#039;&#039;installables&#039;&#039;), and the platform specific steps required to configure and build the project.&lt;br /&gt;
&lt;br /&gt;
Change directories to the root of your package (or wherever you would like the configuration file to live) and enter this command:&lt;br /&gt;
&lt;br /&gt;
 autobuild edit package&lt;br /&gt;
&lt;br /&gt;
This starts an interactive session in which you may fill in the general package details.  You must provide a name and the location of a file (relative to the build directory) of a file that will contain the project version number at the completion of the build. If your project is intended to produce an archive package for use as an installable in other projects, you will also want to specify a license and license file.  We will ignore the other fields for now.  As an alternative to the interactive session, you may add or change package fields all from the command line by passing &#039;&#039;field=value&#039;&#039; arguments on the command line.  For all edit commands, the interactive mode will be used when no attribute arguments are passed and the non-interactive mode otherwise.  For example to create our configuration file non-interactively, use the following command to create the &#039;&#039;&#039;test&#039;&#039;&#039; package version 1.0 using an MIT license:&lt;br /&gt;
&lt;br /&gt;
 autobuild edit package name=test license=MIT license_file=LICENSES/test.txt version_file=VERSION.txt&lt;br /&gt;
&lt;br /&gt;
=== Configuring platform builds ===&lt;br /&gt;
Now that you have defined basic attributes for the package you need to configure the platforms on which to build the library.  At this level you can really only configure the build directory because you may define multiple build configurations (see below).  The build directory is the directory in which Autobuild will run the build and configure commands and is presumed to be where any build product will be generated.  You can, for example, configure the MacOS X platform with the command:&lt;br /&gt;
&lt;br /&gt;
 autobuild edit platform name=darwin build_directory=build&lt;br /&gt;
&lt;br /&gt;
Note that for relative paths, the root is always the location of the autobuild configuration file.  &lt;br /&gt;
&lt;br /&gt;
Now you need to add a build configuration which includes the build and configure commands which autobuild will invoke to make the package.   Assuming you are dealing with a UNIX style package, you typically just call &#039;&#039;configure&#039;&#039; and &#039;&#039;make&#039;&#039; from the root directory to make the package.  You can define the &#039;&#039;&#039;Release&#039;&#039;&#039; configuration to do just that using the commands:&lt;br /&gt;
&lt;br /&gt;
 autobuild edit configure platform=darwin name=Release command=../configure&lt;br /&gt;
 autobuild edit build platform=darwin name=Release command=make options=&#039;--directory=..&#039; default=True&lt;br /&gt;
 &lt;br /&gt;
You must run these commands in the build directory, so you must the path or add an option as appropriate to work select the root directory.  The configure and build commands may take three attributes: &#039;&#039;&#039;command&#039;&#039;&#039;, &#039;&#039;&#039;arguments&#039;&#039;&#039;, and &#039;&#039;&#039;options&#039;&#039;&#039;.  These are concatenated to produce the actual command invoked in the shell.   The build configuration also supports the &#039;&#039;&#039;default&#039;&#039;&#039; option which flags a build configuration to be build by default if no configuration is specified when the autobuild &#039;&#039;build&#039;&#039; command is invoked.  You may repeat these steps for other build configurations like &#039;&#039;&#039;Debug&#039;&#039;&#039; with different &#039;&#039;make&#039;&#039; and &#039;&#039;configure&#039;&#039; options to, for example, build a debug version of the library. You now have enough autobuild configuration to build a simple package for the Darwin platform.  Simply run this command to configure and make the package:&lt;br /&gt;
&lt;br /&gt;
 autobuild build&lt;br /&gt;
&lt;br /&gt;
=== Building on multiple platforms ===&lt;br /&gt;
To support other platforms you need only repeat the package, config, and build configuration steps for each platform.  &lt;br /&gt;
&lt;br /&gt;
In some cases you may find that different platforms share common command, arguments, or options.  For example, a library configured by the cross-platform [http://www.cmake.org/ cmake] tool may use the same configuration command on all platforms.  In that case you can define the special platform &#039;&#039;&#039;common&#039;&#039;&#039; to define the commonalities.  Attributes from build configurations in the &#039;&#039;&#039;common&#039;&#039;&#039; platform are inherited by those for the working platform.  &lt;br /&gt;
&lt;br /&gt;
If a command is defined for a platform for a build configuration like &#039;&#039;&#039;Release&#039;&#039;&#039; for both a working platform like &#039;&#039;&#039;darwin&#039;&#039;&#039; that platform will inherit from &#039;&#039;&#039;common&#039;&#039;&#039;.  This means that if the &#039;&#039;arguments&#039;&#039; or &#039;&#039;command&#039;&#039; are not specified in the working platform build configuration for either the &#039;&#039;&#039;build&#039;&#039;&#039; or &#039;&#039;&#039;configure&#039;&#039;&#039; command, then the value from the &#039;&#039;&#039;common&#039;&#039;&#039; will be  used.  Conversely, if the &#039;&#039;arguments&#039;&#039; or &#039;&#039;command&#039;&#039; attribute is defined in the working platform, it will supersede what is specified in &#039;&#039;&#039;common&#039;&#039;&#039;.  However, the &#039;&#039;options&#039;&#039; for the commands from &#039;&#039;&#039;common&#039;&#039;&#039; will be concatenated with those specified in the working platform configuration with  the common options preceding the working.   Specifying a &#039;&#039;&#039;common&#039;&#039;&#039; platform can allow you to specify commands once per build configuration enabling a single point of truth for cross platform tools.&lt;br /&gt;
&lt;br /&gt;
=== Adding dependencies ===&lt;br /&gt;
&lt;br /&gt;
If your package depends on other archives produced by autobuild in other projects, you can instruct autobuild to download and install those archives. First you will need to provide information in the autobuild configuration to identify and locate any package dependencies.  You can add a package description of the installable archive using the &#039;&#039;installables&#039;&#039; command like the following&lt;br /&gt;
&lt;br /&gt;
 autobuild installables add GL url=http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/GL-darwin-20101004.tar.bz2 hash=0b7c1d43dc2b39301fef6c05948fb826&lt;br /&gt;
&lt;br /&gt;
This creates a new entry in the installables dictionary that includes the information needed to download and verify the &#039;&#039;&#039;GL&#039;&#039;&#039; package for the &#039;&#039;&#039;darwin&#039;&#039;&#039; platform.  You can add downloads for other platforms using the installables edit command&lt;br /&gt;
&lt;br /&gt;
 autobuild installables edit GL platform=windows &amp;lt;br&amp;gt; url=http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/GL-windows-20101001a.tar.bz2 hash=a94538d064cd0a235b2a95389e7e8ee8&lt;br /&gt;
&lt;br /&gt;
Once a package has been added to the installables configuration for the platform you are working on, you can download and install it using the Autobuild &#039;&#039;install&#039;&#039; command&lt;br /&gt;
&lt;br /&gt;
 autobuild install GL&lt;br /&gt;
&lt;br /&gt;
The package contents will be downloaded and extracted into the &#039;&#039;&#039;packages&#039;&#039;&#039; directory inside the build directory configured for the working platform.  Autobuild will conveniently track which packages are installed and what files were extracted only installing or updating files as needed.  If you no longer need a package, uninstall it with the command&lt;br /&gt;
&lt;br /&gt;
 autobuild uninstall GL&lt;br /&gt;
&lt;br /&gt;
If you update a package by changing its configuration in the installables configuration, Autobuild will automatically clean up the older version so typically you will not need to uninstall packages.&lt;br /&gt;
&lt;br /&gt;
== Using Autobuild to construct an archive ==&lt;br /&gt;
&lt;br /&gt;
=== Constructing the manifest and packaging ===&lt;br /&gt;
&lt;br /&gt;
Autobuild has the ability to construct a compressed tar archives with the autobuild &#039;&#039;package&#039;&#039; command, but to do that you must tell Autobuild what to include in the archive.  Typically you will be packaging an archive of build product generated by the Autobuild &#039;&#039;build&#039;&#039; command, but that is not a requirement.  Minimally you will need an Autobuild configuration with the &#039;&#039;&#039;name&#039;&#039;&#039;, &#039;&#039;&#039;license&#039;&#039;&#039;, &#039;&#039;&#039;license_file&#039;&#039;&#039;, and &#039;&#039;&#039;copyright&#039;&#039;&#039; attributes set and a platform configuration for the platform for which you wish to build and archive.  You may then use the Autobuild &#039;&#039;manifest&#039;&#039; command to add files which should be included in the archive.  For example, this command adds the pattern &#039;include/*.h&#039; to the manifest for the platform you are currently running (use the &#039;&#039;-p&#039;&#039; option to select another platform).&lt;br /&gt;
&lt;br /&gt;
 autobuild manifest add &#039;include/*.h&#039;&lt;br /&gt;
&lt;br /&gt;
Autobuild supports simple glob patterns, so this pattern instructs autobuild to add all .h header files in the include directory to the archive.  The root directory for all paths is assumed to be the build directory configured for the platform.  &#039;&#039;Use only relative paths in your manifest.&#039;&#039; Additional files may be added by calling &#039;&#039;manifest add&#039;&#039; again as needed (note that the &#039;&#039;add&#039;&#039; instruction can accept more than one pattern argument).  Note that license file will automatically be included in the archive even if it is not explicitly listed in the manifest.  If a file is to be included in every archive regardless of platform, you may add it to the manifest of the &#039;&#039;&#039;common&#039;&#039;&#039; platform.&lt;br /&gt;
&lt;br /&gt;
Once you have added all the files required by the archive listed in the manifest, you can generate the archive using the command:&lt;br /&gt;
&lt;br /&gt;
 autobuild package&lt;br /&gt;
&lt;br /&gt;
This command will generate an archive in the directory containing the Autobuild configuration file.  Unless set using the &#039;&#039;--archive-name&#039;&#039; option, the archive will be named using the convention &amp;lt;nowiki&amp;gt;&amp;lt;name&amp;gt;-&amp;lt;version&amp;gt;-&amp;lt;platform&amp;gt;-&amp;lt;buildid&amp;gt;.tar.bz2&amp;lt;/nowiki&amp;gt;, e.g. test-1.0-darwin-201010201423.tar.bz2 for the package described in this tutorial.&lt;br /&gt;
&lt;br /&gt;
=== Laying out build product ===&lt;br /&gt;
&lt;br /&gt;
Autobuild places no constraints on the layout of build product bundled into an archive, but there are some recommended conventions.  The following table shows the recommended directory under which to place files of different types.&lt;br /&gt;
&lt;br /&gt;
{|border=&amp;quot;1&amp;quot; class=lltable&lt;br /&gt;
|--&lt;br /&gt;
!File type&lt;br /&gt;
!Directory&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|license&lt;br /&gt;
|LICENSES&lt;br /&gt;
|-&lt;br /&gt;
|header&lt;br /&gt;
|include&lt;br /&gt;
|-&lt;br /&gt;
|libraries&lt;br /&gt;
|lib&lt;br /&gt;
|-&lt;br /&gt;
|executables&lt;br /&gt;
|bin&lt;br /&gt;
|-&lt;br /&gt;
|scripts&lt;br /&gt;
|scripts&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
For  more details, see [[Autobuild/Package_Layout]]. Follow these conventions to help package users easily configure their build systems to find your files. For types not listed here, install files following well-known conventions.&lt;br /&gt;
&lt;br /&gt;
[[Category:Autobuild]] [[Category:Open Source Portal]]&lt;/div&gt;</summary>
		<author><name>Shy Robbiani</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=Object_to_Data_v1.4&amp;diff=1172788</id>
		<title>Object to Data v1.4</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=Object_to_Data_v1.4&amp;diff=1172788"/>
		<updated>2012-09-21T07:47:06Z</updated>

		<summary type="html">&lt;p&gt;Shy Robbiani: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{LSL Header}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;float:right;&amp;quot;&amp;gt;__TOC__&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;box&amp;quot;&amp;gt;&lt;br /&gt;
== Introduction ==&lt;br /&gt;
&amp;lt;div style=&amp;quot;padding: 0.5em;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(http://www.gnu.org/copyleft/fdl.html) in the spirit of which this script is GPL&#039;d. Copyright (C) 2011 [[User:Xaviar Czervik|Xaviar Czervik]]&lt;br /&gt;
&lt;br /&gt;
This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.&lt;br /&gt;
&lt;br /&gt;
This is one of the projects that I&#039;ve spent a significant amount of time on, and that I&#039;ve uploaded to the wiki. &lt;br /&gt;
It&#039;s purpose is simple: it allows anyone to transfer objects through text. This may seem trivial, but it has several advantages to it.&lt;br /&gt;
Below are a few ways in which this script can be used:&lt;br /&gt;
# The Internet. There is no way (yet) to go on to the Internet and request an object be sent to your SL character. This solves this issue. One could post the data on to the Internet, and allow people to copy the text down to SL, run this script, and obtain an object from it.&lt;br /&gt;
# Management Scripts. There is no way to have an object create a totally new object. And objects can only call llGiveInventory on other objects when in the same sim. This solves the issue by allowing objects to use email to send data, which can then be turned into an object.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;box&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Revision History ==&lt;br /&gt;
&amp;lt;div style=&amp;quot;padding: 0.5em;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Version 1.4:&lt;br /&gt;
# Doesn&#039;t require rerezing.&lt;br /&gt;
# Simpler to turn object to data.&lt;br /&gt;
# Backwards compatible with 1.3.&lt;br /&gt;
# Bug fix from [[User:KimAnn Galaxy|KimAnn Galaxy]].&lt;br /&gt;
&lt;br /&gt;
Version 1.3:&lt;br /&gt;
# 100% success rate.&lt;br /&gt;
# Added PRIM_GLOW&lt;br /&gt;
# Added functionality for multiple notecards (for really big objects).&lt;br /&gt;
# Improved efficiency; removed the delink/relink sections.&lt;br /&gt;
&lt;br /&gt;
Version 1.2:&lt;br /&gt;
# Around 95% success rate.&lt;br /&gt;
# Changed to almost all llGetPrimitiveParams calls.&lt;br /&gt;
# Added more than just ten different descriptors of an object.&lt;br /&gt;
# Removed freakish menu-controlled system.&lt;br /&gt;
# Script need only be dropped in root object, not every prim.&lt;br /&gt;
&lt;br /&gt;
Version 1.1:&lt;br /&gt;
# Made process simpler: removed replicate from listen.&lt;br /&gt;
# Changed to work (slightly) better.&lt;br /&gt;
&lt;br /&gt;
Version 1.0:&lt;br /&gt;
# First release.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;box&amp;quot;&amp;gt;&lt;br /&gt;
== Instructions ==&lt;br /&gt;
&amp;lt;div style=&amp;quot;padding: 0.5em;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Thanks to [[User:DMC Zsigmond|DMC Zsigmond]] for the original documentation shown below, modified for Version 1.4 by Xaviar.&lt;br /&gt;
&lt;br /&gt;
-------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
Check List (Parts Required):&lt;br /&gt;
&lt;br /&gt;
# 1 x Script, named: &amp;quot;Object to Data&amp;quot;&lt;br /&gt;
# 1 x Script, named: &amp;quot;Holo Script&amp;quot;&lt;br /&gt;
# 1 x Object, named: &amp;quot;HoloBox&amp;quot;&lt;br /&gt;
# 1 x Notecard, named: &amp;quot;Data_Default&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Plus,&lt;br /&gt;
# 1 x Any Object you wish to use these scripts with to turn into data, or re-rez it back again.&lt;br /&gt;
&lt;br /&gt;
Part 1/3 - Creating Scripts and Assembling Objects&lt;br /&gt;
-------------------------------------------------------------&lt;br /&gt;
# Open your &amp;quot;Inventory&amp;quot;, and create a new folder, called: &amp;quot;Object to Data v1.4&amp;quot;.&lt;br /&gt;
# Under the new &amp;quot;Object to Data v1.4&amp;quot; folder, right-click and create a new script, named &amp;quot;Data To Object&amp;quot;. Then copy and paste the &amp;quot;Data To Object&amp;quot; LSL code on this wiki page into the &amp;quot;Data To Object&amp;quot; script you just created under your &amp;quot;Object to Data v1.4&amp;quot; folder. Click on &amp;quot;Save&amp;quot; to compile the &amp;quot;Data to Object&amp;quot; script,  and then after that &amp;quot;Data to Object&amp;quot; script has successfully compiled, close the script.&lt;br /&gt;
# Repeat Step 2, for the &amp;quot;Holo Script&amp;quot; and &amp;quot;Object to Data&amp;quot; scripts.&lt;br /&gt;
# Create a new Object on the ground, and then right-click on it, and select &amp;quot;Edit&amp;quot;.&lt;br /&gt;
# Under the &amp;quot;General&amp;quot; tab, name the Object you just created as, &amp;quot;HoloBox&amp;quot;. This object must be inserted into your &amp;quot;Data to Object&amp;quot; object in future to supply the prim that will be converted back into the original Object you once sort to have turned into text/notecard data.&lt;br /&gt;
# Go the the &amp;quot;Content&amp;quot; tab of the &amp;quot;HoloBox&amp;quot; prim, to view its contents.&lt;br /&gt;
# Drag&#039;n&#039;drop the &amp;quot;Holo Script&amp;quot; script under the &amp;quot;Object to Data v1.4&amp;quot; folder in your Inventory, to the &amp;quot;Contents&amp;quot; folder of the &amp;quot;HoloBox&amp;quot; object you have selected.&lt;br /&gt;
# Right-click the &amp;quot;HoloBox&amp;quot; object, and select &amp;quot;Take&amp;quot;, to take the object back into your inventory.&lt;br /&gt;
# Create a new Object on the ground, right-click it, and select &amp;quot;Edit&amp;quot;.&lt;br /&gt;
# Under the &amp;quot;General&amp;quot; tab, name the Object you just created as, &amp;quot;Data to Object&amp;quot;. (not necessary)&lt;br /&gt;
# Go the the &amp;quot;Content&amp;quot; tab of the &amp;quot;Data to Object&amp;quot; prim, to view its contents.&lt;br /&gt;
# Drag&#039;n&#039;drop the &amp;quot;Data To Object&amp;quot; script under the &amp;quot;Object to Data v1.4&amp;quot; folder in your Inventory, to the &amp;quot;Contents&amp;quot; folder of the &amp;quot;Data to Object&amp;quot; object you have selected.&lt;br /&gt;
# Drag&#039;n&#039;drop the &amp;quot;HoloBox&amp;quot; object you have either in your &amp;quot;Objects&amp;quot; folder in your Inventory or under the &amp;quot;Object to Data v1.4&amp;quot; folder in your Inventory, to the &amp;quot;Contents&amp;quot; folder of the &amp;quot;Data to Object&amp;quot; object you have selected. &lt;br /&gt;
&lt;br /&gt;
You should now have two things:&lt;br /&gt;
# An object named &amp;quot;Data to Object&amp;quot; which contains (1) a script named &amp;quot;Data to Object&amp;quot; (found below) and (2) an object named HoloBox. Holobox should contain a script named &amp;quot;Holo Script&amp;quot; (found below). &lt;br /&gt;
# A script named &amp;quot;Object to Data&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Part 2/3 - Convert an Object to Data&lt;br /&gt;
-------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
# Select an Object you wish to turn into data (NB. perhaps start with a single object which is relatively simple). &lt;br /&gt;
# Rez the Object you wish to turn into data on the ground.&lt;br /&gt;
# Right-click the Object you wish to turn into data, and select edit. Then click on the &amp;quot;Content&amp;quot; tab to view its contents.&lt;br /&gt;
# Now drag&#039;n&#039;drop the &amp;quot;Object to Data&amp;quot; script you created in your Inventory, from your &amp;quot;Object to Data v1.4&amp;quot; folder into the &amp;quot;Contents&amp;quot; folder of the Object you wish to turn into data. &lt;br /&gt;
# Wait a few moments (or possibly a minute or two) until your Local Chat Window outputs the Object&#039;s data.&lt;br /&gt;
# Copy the text data from your Local Chat Window (including the time code) from the very beginning to the very end.&lt;br /&gt;
# Return to your Inventory folder named, &amp;quot;Object to Data v1.4&amp;quot;, and then right-click and create a new note (i.e. notecard) called, &amp;quot;Data_Default&amp;quot;.&lt;br /&gt;
# Paste the Object code data copied from your Local Chat Window to the &amp;quot;Data_Default&amp;quot; notecard, and then &amp;quot;Save&amp;quot; it. This notecard now holds the data information for your Object.&lt;br /&gt;
# If the information does not fit in to one notecard, the first object stays named &amp;quot;Data_Default&amp;quot;, however name the second notecard &amp;quot;Data_Default 1&amp;quot;, the third &amp;quot;Data_Default 2&amp;quot;, etc.&lt;br /&gt;
&lt;br /&gt;
The entire object has now been turned into data. It can now be transferred through many means not usually possible, including a text file on the Internet.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Part 3/3 Instructions to convert Data to Object&lt;br /&gt;
--------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
# Rez the &amp;quot;Data to Object&amp;quot; object from the &amp;quot;Object to Data v1.4&amp;quot; folder. (Move the object some meters above the ground, since it will silently fail and hang if later if it attempts to rez objects slightly below ground level!)&lt;br /&gt;
# Right-click the Object you wish to turn into data, and select edit. Go to the &amp;quot;Contents&amp;quot; tab of the &amp;quot;Data to Object&amp;quot; object.&lt;br /&gt;
# Drag&#039;n&#039;drop the &amp;quot;Data_Default&amp;quot; notecard(s) to the object.&lt;br /&gt;
# Now touch the object, &amp;quot;Data to Object&amp;quot; to begin rebuilding the original Object that you had turned into data. &lt;br /&gt;
# View your Local Chat window for confirm of the build &amp;quot;Start&amp;quot;, and notification when the build is &amp;quot;Done&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
The original Object you sort to have turned into data will now rez as a new object above the &amp;quot;Data to Object&amp;quot; prim. &lt;br /&gt;
&lt;br /&gt;
This object will be empty, ready for use as intended.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;box&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Data To Object (Script) ==&lt;br /&gt;
&amp;lt;div style=&amp;quot;padding: 0.5em;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
string name = &amp;quot;Data_Default&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
integer numberOfNotes;&lt;br /&gt;
key     qid;&lt;br /&gt;
integer line = 0;&lt;br /&gt;
integer lineTotal = 0;&lt;br /&gt;
integer prims;&lt;br /&gt;
list    totalLines;&lt;br /&gt;
integer totalLinesTotal;&lt;br /&gt;
&lt;br /&gt;
string hexDigits = &amp;quot;0123456789ABCDEF&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
integer rand;&lt;br /&gt;
&lt;br /&gt;
integer whichNote;&lt;br /&gt;
&lt;br /&gt;
vector start;&lt;br /&gt;
&lt;br /&gt;
get() {&lt;br /&gt;
    if (whichNote == 0) {&lt;br /&gt;
        qid = llGetNotecardLine(name, line);&lt;br /&gt;
    } else {&lt;br /&gt;
        qid = llGetNotecardLine(name + &amp;quot; &amp;quot; + (string)whichNote, line);&lt;br /&gt;
    }&lt;br /&gt;
        &lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
rezObj(vector pos, string num) {&lt;br /&gt;
    while (llVecDist(llGetPos(), start-pos) &amp;gt; .001) llSetPos(start-pos);&lt;br /&gt;
    llRezObject(&amp;quot;HoloBox&amp;quot;, llGetPos(), &amp;lt;0,0,0&amp;gt;, &amp;lt;0,0,0,0&amp;gt;, hex2int(num) + rand);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
integer hex2int(string hex) {&lt;br /&gt;
    integer p1 = llSubStringIndex(hexDigits, llGetSubString(hex, 0, 0));&lt;br /&gt;
    integer p2 = llSubStringIndex(hexDigits, llGetSubString(hex, 1, 1));&lt;br /&gt;
    integer data = p2 + (p1 &amp;lt;&amp;lt; 4);&lt;br /&gt;
    return data;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
default {&lt;br /&gt;
    touch_start(integer i) {&lt;br /&gt;
        llSetText(&amp;quot;Starting Up... (1/4)&amp;quot;, &amp;lt;1,1,1&amp;gt;, 1);&lt;br /&gt;
        numberOfNotes = llGetInventoryNumber(INVENTORY_NOTECARD);&lt;br /&gt;
        &lt;br /&gt;
        qid = llGetNumberOfNotecardLines(name);&lt;br /&gt;
    }&lt;br /&gt;
    dataserver(key queryId, string data) {&lt;br /&gt;
        if (queryId == qid)  {&lt;br /&gt;
            totalLines += data;&lt;br /&gt;
            totalLinesTotal += (integer)data;&lt;br /&gt;
            ++whichNote;&lt;br /&gt;
            if (whichNote &amp;lt; numberOfNotes) {&lt;br /&gt;
                llOwnerSay(name + &amp;quot; &amp;quot; + (string)whichNote);&lt;br /&gt;
                qid = llGetNumberOfNotecardLines(name + &amp;quot; &amp;quot; + (string)whichNote);&lt;br /&gt;
            } else {&lt;br /&gt;
                state rez;&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
state rez {&lt;br /&gt;
    state_entry() {&lt;br /&gt;
        start = llGetPos();&lt;br /&gt;
        rand = (integer)llFrand(0x6FFFFFFF) + 0x10000000;&lt;br /&gt;
        llOwnerSay(&amp;quot;Start&amp;quot;);&lt;br /&gt;
        line = 0;&lt;br /&gt;
        qid = llGetNotecardLine(name, line); &lt;br /&gt;
        whichNote = 0;&lt;br /&gt;
    }&lt;br /&gt;
    dataserver(key queryId, string data) {&lt;br /&gt;
        if (queryId == qid)  {&lt;br /&gt;
            if (data != EOF) {&lt;br /&gt;
                data = llList2String(llParseString2List(data, [&amp;quot;-----: &amp;quot;], []), 1);&lt;br /&gt;
                if (llGetSubString(data, 0, 3) == &amp;quot;#NEW&amp;quot;) {&lt;br /&gt;
                    string num = llGetSubString(data, 5, 6);&lt;br /&gt;
                    vector pos = (vector)llGetSubString(data, 8, -1);&lt;br /&gt;
                    rezObj(pos, num);&lt;br /&gt;
                }&lt;br /&gt;
                llSetText(&amp;quot;Rezing Prims: &amp;quot; + (string)((integer)(100*lineTotal/totalLinesTotal)) + &amp;quot;% (2/4)&amp;quot;, &amp;lt;1,1,1&amp;gt;, 1);&lt;br /&gt;
                line += 1;&lt;br /&gt;
                lineTotal += 1;&lt;br /&gt;
                get();&lt;br /&gt;
            } else {&lt;br /&gt;
                whichNote++;&lt;br /&gt;
                if (whichNote &amp;lt; numberOfNotes) {&lt;br /&gt;
                    line = 0;&lt;br /&gt;
                    get();&lt;br /&gt;
                } else {&lt;br /&gt;
                    state run;&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
state run {&lt;br /&gt;
    state_entry() {&lt;br /&gt;
        line = 0;&lt;br /&gt;
        lineTotal = 0;&lt;br /&gt;
        qid = llGetNotecardLine(name, line); &lt;br /&gt;
        whichNote = 0;&lt;br /&gt;
    }&lt;br /&gt;
    dataserver(key queryId, string data) {&lt;br /&gt;
        if (queryId == qid)  {&lt;br /&gt;
            if (data != EOF) {&lt;br /&gt;
                data = llList2String(llParseString2List(data, [&amp;quot;-----: &amp;quot;], []), 1);&lt;br /&gt;
                if (llGetSubString(data, 0, 3) != &amp;quot;#NEW&amp;quot;) {&lt;br /&gt;
                    list parts = llParseString2List(data, [&amp;quot;:::&amp;quot;], []);&lt;br /&gt;
                    integer prim = hex2int(llList2String(parts, 0));&lt;br /&gt;
                    llRegionSay(rand + prim, llList2String(parts, 1));&lt;br /&gt;
                }&lt;br /&gt;
                llSetText(&amp;quot;Sending Data: &amp;quot; + (string)((integer)(100*lineTotal/totalLinesTotal)) + &amp;quot;% (3/4)&amp;quot;, &amp;lt;1,1,1&amp;gt;, 1);&lt;br /&gt;
                line += 1;&lt;br /&gt;
                lineTotal += 1;&lt;br /&gt;
                get();&lt;br /&gt;
            } else {&lt;br /&gt;
                whichNote++;&lt;br /&gt;
                if (whichNote &amp;lt; numberOfNotes) {&lt;br /&gt;
                    line = 0;&lt;br /&gt;
                    get();&lt;br /&gt;
                } else {&lt;br /&gt;
                    llSetText(&amp;quot;Cleaning Up... (4/4)&amp;quot;, &amp;lt;1,1,1&amp;gt;, 1);&lt;br /&gt;
                    integer i = 0;&lt;br /&gt;
                    while (i &amp;lt; 256) {&lt;br /&gt;
                        llRegionSay(rand + i, &amp;quot;Finish&amp;quot;);&lt;br /&gt;
                        ++i;&lt;br /&gt;
                    }&lt;br /&gt;
                    llSetTimerEvent(3);&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    timer() {&lt;br /&gt;
        llSetText(&amp;quot;Finished.&amp;quot;, &amp;lt;1,1,1&amp;gt;, 1);&lt;br /&gt;
        llOwnerSay(&amp;quot;Done&amp;quot;);&lt;br /&gt;
        llSetTimerEvent(0);&lt;br /&gt;
        llResetScript();&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;box&amp;quot;&amp;gt;&lt;br /&gt;
== Object To Data (Script) ==&lt;br /&gt;
&amp;lt;div style=&amp;quot;padding: 0.5em;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
string hexc=&amp;quot;0123456789ABCDEF&amp;quot;;//faster&lt;br /&gt;
&lt;br /&gt;
string Float2Hex(float input)&lt;br /&gt;
{// Copyright Strife Onizuka, 2006-2007, LGPL, http://www.gnu.org/copyleft/lesser.html&lt;br /&gt;
    if((integer)input != input)//LL screwed up hex integers support in rotation &amp;amp; vector string typecasting&lt;br /&gt;
    {//this also keeps zero from hanging the zero stripper.&lt;br /&gt;
        float unsigned = llFabs(input);//logs don&#039;t work on negatives.&lt;br /&gt;
        integer exponent = llFloor(llLog(unsigned) / 0.69314718055994530941723212145818);//floor(log2(b)) + rounding error&lt;br /&gt;
        integer mantissa = (integer)((unsigned / (float)(&amp;quot;0x1p&amp;quot;+(string)(exponent -= (exponent == 128)))) * 0x1000000);//shift up into integer range&lt;br /&gt;
        integer index = (integer)(llLog(mantissa &amp;amp; -mantissa) / 0.69314718055994530941723212145818);//index of first &#039;on&#039; bit&lt;br /&gt;
        string str = &amp;quot;p&amp;quot; + (string)((exponent += index) - 24);&lt;br /&gt;
        mantissa = mantissa &amp;gt;&amp;gt; index;&lt;br /&gt;
        do&lt;br /&gt;
            str = llGetSubString(hexc,15&amp;amp;mantissa,15&amp;amp;mantissa) + str;&lt;br /&gt;
        while(mantissa = mantissa &amp;gt;&amp;gt; 4);&lt;br /&gt;
        if(input &amp;lt; 0)&lt;br /&gt;
            return &amp;quot;-0x&amp;quot; + str;&lt;br /&gt;
        return &amp;quot;0x&amp;quot; + str;&lt;br /&gt;
    }//integers pack well so anything that qualifies as an integer we dump as such, supports netative zero&lt;br /&gt;
    return llDeleteSubString((string)input,-7,-1);//trim off the float portion, return an integer&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
string safeVector(vector v) {&lt;br /&gt;
    return &amp;quot;&amp;lt;&amp;quot;+safeFloat(v.x)+&amp;quot;,&amp;quot;+safeFloat(v.y)+&amp;quot;,&amp;quot;+safeFloat(v.z)+&amp;quot;&amp;gt;&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
string safeRotation(rotation v) {&lt;br /&gt;
    return &amp;quot;&amp;lt;&amp;quot;+safeFloat(v.x)+&amp;quot;,&amp;quot;+safeFloat(v.y)+&amp;quot;,&amp;quot;+safeFloat(v.z)+&amp;quot;,&amp;quot;+safeFloat(v.s)+&amp;quot;&amp;gt;&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
string safeFloat(float f) {&lt;br /&gt;
    return Float2Hex(f);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
string list2string(list l) {&lt;br /&gt;
    string ret;&lt;br /&gt;
    integer len = llGetListLength(l);&lt;br /&gt;
    integer i;&lt;br /&gt;
    &lt;br /&gt;
    while (i &amp;lt; len) {&lt;br /&gt;
        integer type = llGetListEntryType(l, i);&lt;br /&gt;
        if (type == 1) {&lt;br /&gt;
            ret += &amp;quot;#I&amp;quot;+(string)llList2Integer(l, i);&lt;br /&gt;
        } else if (type == 2) {&lt;br /&gt;
            ret += &amp;quot;#F&amp;quot;+safeFloat(llList2Float(l, i));&lt;br /&gt;
        } else if (type == 3) {&lt;br /&gt;
            ret += &amp;quot;#S&amp;quot;+llList2String(l, i);&lt;br /&gt;
        } else if (type == 4) {&lt;br /&gt;
            ret += &amp;quot;#K&amp;quot;+(string)llList2Key(l, i);&lt;br /&gt;
        } else if (type == 5) {&lt;br /&gt;
            ret += &amp;quot;#V&amp;quot;+safeVector(llList2Vector(l, i));        &lt;br /&gt;
        } else if (type == 6) {&lt;br /&gt;
            ret += &amp;quot;#R&amp;quot;+safeRotation(llList2Rot(l, i));&lt;br /&gt;
        }&lt;br /&gt;
        ret += &amp;quot;-=-&amp;quot;;&lt;br /&gt;
        i++;&lt;br /&gt;
    }&lt;br /&gt;
    return ret;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
integer LINK_NUM = 0;&lt;br /&gt;
&lt;br /&gt;
string getTexture() {&lt;br /&gt;
    string ret;&lt;br /&gt;
    &lt;br /&gt;
    integer sides = llGetLinkNumberOfSides(LINK_NUM);&lt;br /&gt;
    &lt;br /&gt;
    integer same = 1;&lt;br /&gt;
    list texture;&lt;br /&gt;
    list repeat;&lt;br /&gt;
    list offset;&lt;br /&gt;
    list rot;&lt;br /&gt;
    &lt;br /&gt;
    integer i = 0;&lt;br /&gt;
    while (i &amp;lt; sides) {&lt;br /&gt;
        list side  = llGetLinkPrimitiveParams(LINK_NUM, [PRIM_TEXTURE, i]);&lt;br /&gt;
        texture += llList2String(side, 0);&lt;br /&gt;
        repeat  += llList2Vector(side, 1);&lt;br /&gt;
        offset  += llList2Vector(side, 2);&lt;br /&gt;
        rot     += llList2Float(side, 3);&lt;br /&gt;
        &lt;br /&gt;
        if (!(llList2String(texture, i) == llList2String(texture, i-1) &amp;amp;&amp;amp; llList2Vector(repeat, i) == llList2Vector(repeat, i-1) &amp;amp;&amp;amp;&lt;br /&gt;
            llList2Vector(offset, i) == llList2Vector(offset, i-1) &amp;amp;&amp;amp; llList2Float(rot, i) == llList2Float(rot, i-1))) {&lt;br /&gt;
                same = 0;&lt;br /&gt;
        }&lt;br /&gt;
        i++;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if (same) {&lt;br /&gt;
        ret += list2string([PRIM_TEXTURE, ALL_SIDES, llList2String(texture, 0), llList2Vector(repeat, 0), llList2Vector(offset, 0), llList2Float(rot, 0)]);&lt;br /&gt;
    } else {&lt;br /&gt;
        integer j = 0;&lt;br /&gt;
        while (j &amp;lt; llGetListLength(texture)) {&lt;br /&gt;
            ret += list2string([PRIM_TEXTURE, j, llList2String(texture, j), llList2Vector(repeat, j), llList2Vector(offset, j), llList2Float(rot, j)]);&lt;br /&gt;
            j++;&lt;br /&gt;
        }&lt;br /&gt;
    }        &lt;br /&gt;
    &lt;br /&gt;
    return ret;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
string getColor() {&lt;br /&gt;
    string ret;&lt;br /&gt;
&lt;br /&gt;
    integer sides = llGetLinkNumberOfSides(LINK_NUM);&lt;br /&gt;
    &lt;br /&gt;
    integer same = 1;&lt;br /&gt;
    list color;&lt;br /&gt;
    list alpha;&lt;br /&gt;
    &lt;br /&gt;
    integer i = 0;&lt;br /&gt;
    while (i &amp;lt; sides) {&lt;br /&gt;
        list side  = llGetLinkPrimitiveParams(LINK_NUM, [PRIM_COLOR, i]);&lt;br /&gt;
        alpha += llList2Float(side, 1);&lt;br /&gt;
        color  += llList2Vector(side, 0);&lt;br /&gt;
        &lt;br /&gt;
        if (!(llList2String(color, i) == llList2String(color, i-1) &amp;amp;&amp;amp; llList2Vector(alpha, i) == llList2Vector(alpha, i-1))) {&lt;br /&gt;
                same = 0;&lt;br /&gt;
        }&lt;br /&gt;
        i++;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if (same) {&lt;br /&gt;
        ret += list2string([PRIM_COLOR, ALL_SIDES, llList2Vector(color, 0), llList2Float(alpha, 0)]);&lt;br /&gt;
    } else {&lt;br /&gt;
        integer j = 0;&lt;br /&gt;
        while (j &amp;lt; llGetListLength(color)) {&lt;br /&gt;
            ret += list2string([PRIM_COLOR, j, llList2Vector(color, j), llList2Float(alpha, j)]);&lt;br /&gt;
            j++;&lt;br /&gt;
        }&lt;br /&gt;
    }        &lt;br /&gt;
    &lt;br /&gt;
    return ret;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
string getShiny() {&lt;br /&gt;
    string ret;&lt;br /&gt;
&lt;br /&gt;
    integer sides = llGetLinkNumberOfSides(LINK_NUM);&lt;br /&gt;
    &lt;br /&gt;
    integer same = 1;&lt;br /&gt;
    list shiny;&lt;br /&gt;
    list bump;&lt;br /&gt;
    &lt;br /&gt;
    integer i = 0;&lt;br /&gt;
    while (i &amp;lt; sides) {&lt;br /&gt;
        list side  = llGetLinkPrimitiveParams(LINK_NUM, [PRIM_BUMP_SHINY, i]);&lt;br /&gt;
        shiny += llList2Integer(side, 0);&lt;br /&gt;
        bump += llList2Integer(side, 1);&lt;br /&gt;
        &lt;br /&gt;
        if (!(llList2Integer(shiny, i) == llList2Integer(shiny, i-1) &amp;amp;&amp;amp; llList2Integer(bump, i) == llList2Integer(bump, i-1))) {&lt;br /&gt;
                same = 0;&lt;br /&gt;
        }&lt;br /&gt;
        i++;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if (same) {&lt;br /&gt;
        ret += list2string([PRIM_BUMP_SHINY, ALL_SIDES, llList2Integer(shiny, 0), llList2Integer(bump, 0)]);&lt;br /&gt;
    } else {&lt;br /&gt;
        integer j = 0;&lt;br /&gt;
        while (j &amp;lt; llGetListLength(shiny)) {&lt;br /&gt;
            ret += list2string([PRIM_BUMP_SHINY, j, llList2Integer(shiny, j), llList2Integer(bump, j)]);&lt;br /&gt;
            j++;&lt;br /&gt;
        }&lt;br /&gt;
    }        &lt;br /&gt;
    &lt;br /&gt;
    return ret;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
string getBright() {&lt;br /&gt;
    string ret;&lt;br /&gt;
&lt;br /&gt;
    integer sides = llGetLinkNumberOfSides(LINK_NUM);&lt;br /&gt;
    &lt;br /&gt;
    integer same = 1;&lt;br /&gt;
    list fullbright;&lt;br /&gt;
    &lt;br /&gt;
    integer i = 0;&lt;br /&gt;
    while (i &amp;lt; sides) {&lt;br /&gt;
        list side  = llGetLinkPrimitiveParams(LINK_NUM, [PRIM_FULLBRIGHT, i]);&lt;br /&gt;
        fullbright += llList2Integer(side, 0);&lt;br /&gt;
        &lt;br /&gt;
        if (!(llList2Integer(fullbright, i) == llList2Integer(fullbright, i-1))) {&lt;br /&gt;
                same = 0;&lt;br /&gt;
        }&lt;br /&gt;
        i++;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if (same) {&lt;br /&gt;
        ret += list2string([PRIM_FULLBRIGHT, ALL_SIDES, llList2Integer(fullbright, 0)]);&lt;br /&gt;
    } else {&lt;br /&gt;
        integer j = 0;&lt;br /&gt;
        while (j &amp;lt; llGetListLength(fullbright)) {&lt;br /&gt;
            ret += list2string([PRIM_FULLBRIGHT, j, llList2Integer(fullbright, j)]);&lt;br /&gt;
            j++;&lt;br /&gt;
        }&lt;br /&gt;
    }        &lt;br /&gt;
    &lt;br /&gt;
    return ret;&lt;br /&gt;
}&lt;br /&gt;
string getGlow() {&lt;br /&gt;
    string ret;&lt;br /&gt;
&lt;br /&gt;
    integer sides = llGetLinkNumberOfSides(LINK_NUM);&lt;br /&gt;
    &lt;br /&gt;
    integer same = 1;&lt;br /&gt;
    list glow;&lt;br /&gt;
    &lt;br /&gt;
    integer i = 0;&lt;br /&gt;
    while (i &amp;lt; sides) {&lt;br /&gt;
        list side  = llGetLinkPrimitiveParams(LINK_NUM, [PRIM_GLOW, i]);&lt;br /&gt;
        glow += llList2Integer(side, 0);&lt;br /&gt;
        &lt;br /&gt;
        if (!(llList2Integer(glow, i) == llList2Integer(glow, i-1))) {&lt;br /&gt;
                same = 0;&lt;br /&gt;
        }&lt;br /&gt;
        i++;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if (same) {&lt;br /&gt;
        ret += list2string([PRIM_GLOW, ALL_SIDES, llList2Integer(glow, 0)]);&lt;br /&gt;
    } else {&lt;br /&gt;
        integer j = 0;&lt;br /&gt;
        while (j &amp;lt; llGetListLength(glow)) {&lt;br /&gt;
            ret += list2string([PRIM_GLOW, j, llList2Integer(glow, j)]);&lt;br /&gt;
            j++;&lt;br /&gt;
        }&lt;br /&gt;
    }        &lt;br /&gt;
    &lt;br /&gt;
    return ret;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
vector getPos() {&lt;br /&gt;
    vector pos = llGetPos();&lt;br /&gt;
    pos -= llList2Vector(llGetLinkPrimitiveParams(LINK_NUM, [PRIM_POSITION]), 0);&lt;br /&gt;
    &lt;br /&gt;
    if (LINK_NUM == 1) {&lt;br /&gt;
        pos = &amp;lt;0,0,0&amp;gt;;&lt;br /&gt;
    }&lt;br /&gt;
    return pos;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
string getType() {&lt;br /&gt;
    list type = [PRIM_TYPE] + llGetLinkPrimitiveParams(LINK_NUM, [PRIM_TYPE]);&lt;br /&gt;
    type += [PRIM_PHYSICS] + llGetLinkPrimitiveParams(LINK_NUM, [PRIM_PHYSICS]);&lt;br /&gt;
    type += [PRIM_MATERIAL] + llGetLinkPrimitiveParams(LINK_NUM, [PRIM_MATERIAL]);&lt;br /&gt;
    type += [PRIM_TEMP_ON_REZ] + llGetLinkPrimitiveParams(LINK_NUM, [PRIM_TEMP_ON_REZ]);&lt;br /&gt;
    type += [PRIM_PHANTOM] + llGetLinkPrimitiveParams(LINK_NUM, [PRIM_PHANTOM]);&lt;br /&gt;
    type += [PRIM_ROTATION] + llGetLinkPrimitiveParams(LINK_NUM, [PRIM_ROTATION]);&lt;br /&gt;
    type += [PRIM_SIZE] + llGetLinkPrimitiveParams(LINK_NUM, [PRIM_SIZE]);&lt;br /&gt;
    type += [PRIM_FLEXIBLE] + llGetLinkPrimitiveParams(LINK_NUM, [PRIM_FLEXIBLE]);&lt;br /&gt;
    type += [PRIM_POINT_LIGHT] + llGetLinkPrimitiveParams(LINK_NUM, [PRIM_POINT_LIGHT]);&lt;br /&gt;
    return list2string(type);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
string getPrimitiveParams() {&lt;br /&gt;
    string ret;&lt;br /&gt;
    ret += getType();&lt;br /&gt;
    ret += getTexture();&lt;br /&gt;
    ret += getShiny();&lt;br /&gt;
    ret += getColor();&lt;br /&gt;
    ret += getBright();&lt;br /&gt;
    ret += getGlow();&lt;br /&gt;
    return ret;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
string getMeta() {&lt;br /&gt;
    return llDumpList2String([llGetLinkName(LINK_NUM), llList2String(llGetLinkPrimitiveParams(LINK_NUM, [PRIM_DESC]), 0)], &amp;quot;-=-&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
string int2hex(integer num) {&lt;br /&gt;
    integer p1 = num &amp;amp; 0xF;&lt;br /&gt;
    integer p2 = (num &amp;gt;&amp;gt; 4) &amp;amp; 0xF;&lt;br /&gt;
    string data = llGetSubString(hexc, p2, p2) + llGetSubString(hexc, p1, p1);&lt;br /&gt;
    return data;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
default {&lt;br /&gt;
    state_entry() {&lt;br /&gt;
        string name = llGetObjectName();&lt;br /&gt;
        llSetObjectName(&amp;quot;-----&amp;quot;);&lt;br /&gt;
        LINK_NUM = 1;&lt;br /&gt;
        while (LINK_NUM &amp;lt;= llGetNumberOfPrims()) {&lt;br /&gt;
            llOwnerSay(&amp;quot;#NEW &amp;quot; + int2hex(LINK_NUM) + &amp;quot; &amp;quot; + safeVector(getPos()));&lt;br /&gt;
            LINK_NUM++;&lt;br /&gt;
        }&lt;br /&gt;
        LINK_NUM = 1;&lt;br /&gt;
        llSetObjectName(name);&lt;br /&gt;
        while (LINK_NUM &amp;lt;= llGetNumberOfPrims()) {&lt;br /&gt;
            string meta = getMeta();&lt;br /&gt;
            string data = getPrimitiveParams();&lt;br /&gt;
            llSetObjectName(&amp;quot;-----&amp;quot;);&lt;br /&gt;
            llOwnerSay(int2hex(llGetLinkNumber()) + &amp;quot;:::0&amp;quot;+meta);&lt;br /&gt;
            integer i = 0;&lt;br /&gt;
            integer num = 1;&lt;br /&gt;
            while (i &amp;lt; llStringLength(data)) {&lt;br /&gt;
                llOwnerSay(int2hex(LINK_NUM) + &amp;quot;:::&amp;quot; + (string)num + &amp;quot;&amp;quot; + (string)llGetSubString(data, i, i+199));&lt;br /&gt;
                i += 200;&lt;br /&gt;
                llSleep(.1);&lt;br /&gt;
                num++;&lt;br /&gt;
            }&lt;br /&gt;
            LINK_NUM++;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;box&amp;quot;&amp;gt;&lt;br /&gt;
== Holo Box (Script) ==&lt;br /&gt;
&amp;lt;div style=&amp;quot;padding: 0.5em;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
string meta;&lt;br /&gt;
list data = [&amp;quot;&amp;quot;, &amp;quot;&amp;quot;, &amp;quot;&amp;quot;, &amp;quot;&amp;quot;, &amp;quot;&amp;quot;, &amp;quot;&amp;quot;, &amp;quot;&amp;quot;, &amp;quot;&amp;quot;, &amp;quot;&amp;quot;, &amp;quot;&amp;quot;, &amp;quot;&amp;quot;, &amp;quot;&amp;quot;, &amp;quot;&amp;quot;, &amp;quot;&amp;quot;];&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
setLink() {&lt;br /&gt;
    list m = llParseString2List(meta, [&amp;quot;-=-&amp;quot;], []);&lt;br /&gt;
    llSetObjectName(llList2String(m, 0));&lt;br /&gt;
    llSetObjectDesc(llList2String(m, 1));&lt;br /&gt;
    &lt;br /&gt;
    list l = llParseString2List((string)data, [&amp;quot;-=-&amp;quot;], []);&lt;br /&gt;
    list real;&lt;br /&gt;
    integer i = 0;&lt;br /&gt;
    while (i &amp;lt; llGetListLength(l)) {&lt;br /&gt;
        string this = llList2String(l, i);&lt;br /&gt;
        string thisPart = llGetSubString(this, 0, 1);&lt;br /&gt;
        if (thisPart == &amp;quot;#S&amp;quot;) {&lt;br /&gt;
            real += (string)llGetSubString(this, 2, -1);&lt;br /&gt;
        } else if (thisPart == &amp;quot;#K&amp;quot;) {&lt;br /&gt;
            real += (key)llGetSubString(this, 2, -1);&lt;br /&gt;
        } else if (thisPart == &amp;quot;#I&amp;quot;) {&lt;br /&gt;
            real += (integer)llGetSubString(this, 2, -1);&lt;br /&gt;
        } else if (thisPart == &amp;quot;#F&amp;quot;) {&lt;br /&gt;
            real += (float)llGetSubString(this, 2, -1);&lt;br /&gt;
        } else if (thisPart == &amp;quot;#V&amp;quot;) {&lt;br /&gt;
            real += (vector)llGetSubString(this, 2, -1);&lt;br /&gt;
        } else if (thisPart == &amp;quot;#R&amp;quot;) {&lt;br /&gt;
            real += (rotation)llGetSubString(this, 2, -1);&lt;br /&gt;
        }&lt;br /&gt;
        i++;&lt;br /&gt;
    }&lt;br /&gt;
    llSetPrimitiveParams(real);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
default {&lt;br /&gt;
    on_rez(integer i) {&lt;br /&gt;
        llListen(i, &amp;quot;&amp;quot;, &amp;quot;&amp;quot;, &amp;quot;&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
    listen(integer i, string n, key id, string m) {&lt;br /&gt;
        if (m == &amp;quot;Finish&amp;quot;) {&lt;br /&gt;
            setLink();&lt;br /&gt;
            llSleep(.5);&lt;br /&gt;
            llRemoveInventory(llGetScriptName());&lt;br /&gt;
        }&lt;br /&gt;
        integer num = (integer)llGetSubString(m, 0, 0);&lt;br /&gt;
        if (num == 0) {&lt;br /&gt;
            meta = llGetSubString(m, 1, -1);&lt;br /&gt;
        } else {&lt;br /&gt;
            num--;&lt;br /&gt;
            data = llListReplaceList(data, [llGetSubString(m, 1, -1)], num, num);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{LSLC|Library}}&lt;/div&gt;</summary>
		<author><name>Shy Robbiani</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=Kiss-a-Linden&amp;diff=53720</id>
		<title>Kiss-a-Linden</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=Kiss-a-Linden&amp;diff=53720"/>
		<updated>2008-02-12T19:06:39Z</updated>

		<summary type="html">&lt;p&gt;Shy Robbiani: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;*Nitram Foden&lt;br /&gt;
*Emily Darrow&lt;br /&gt;
*Suz Bumbo&lt;br /&gt;
*Doctor Gascoigne&lt;br /&gt;
*Firehorse Whiplash&lt;br /&gt;
*Redbeard McCellan&lt;br /&gt;
*Thalia Tal&lt;br /&gt;
*Norelen Carter&lt;br /&gt;
*Flux Woyseck&lt;br /&gt;
*Dirk Talamasca&lt;br /&gt;
*Jezzie McCellan&lt;br /&gt;
*Rock Paderborn&lt;br /&gt;
*Jaclyn Iredell&lt;br /&gt;
*Orlandoo Habercom&lt;br /&gt;
*Bulli Schumann&lt;br /&gt;
*Jesica Homewood&lt;br /&gt;
*Monalisa Robbiani&lt;br /&gt;
*Joslyn Bonetto&lt;br /&gt;
*Moon Nikolaidis&lt;br /&gt;
*Yoko Beaumont&lt;br /&gt;
*Lowri Mills&lt;br /&gt;
*Tonya Petrov&lt;br /&gt;
*Deanna Sukra&lt;br /&gt;
*Lum Pfohl&lt;br /&gt;
*aRa Sheridan&lt;br /&gt;
*Thely Anansi&lt;br /&gt;
*Kimber Enoch&lt;br /&gt;
*Roenik Newell&lt;br /&gt;
*Jurin Juran&lt;br /&gt;
*Lozzie Lowe&lt;br /&gt;
*miki22 Voom&lt;br /&gt;
*Ramona Forcella&lt;br /&gt;
*Kryptonia Paperdoll&lt;br /&gt;
*Michel Lemmon&lt;br /&gt;
*Aliceinwire Bleac&lt;br /&gt;
*Shania Humphreys&lt;br /&gt;
*Kwant Capalini&lt;br /&gt;
*Johnny Rambler&lt;br /&gt;
*Helmer Holmer&lt;br /&gt;
*Sylvana Huet&lt;br /&gt;
*Pompeja Rossini&lt;br /&gt;
*Furo Lane&lt;br /&gt;
*Igel Hawks&lt;br /&gt;
*Shinya Tandino&lt;br /&gt;
*Luna Larsen&lt;br /&gt;
*Pumpkin Zenovka&lt;br /&gt;
*Ludmilia Zapedzki&lt;br /&gt;
*CallieDel Boa&lt;br /&gt;
*Marisa Naheed&lt;br /&gt;
*Petronilla Paperdoll&lt;br /&gt;
*Stacy Maracas&lt;br /&gt;
*Brock Fabre&lt;br /&gt;
*Elvis Ireton&lt;br /&gt;
*NorgeTroll Fredriksson&lt;br /&gt;
*Geordie Superior&lt;br /&gt;
*Yukarikat Benelli&lt;br /&gt;
*BeccaLynn Montgomery&lt;br /&gt;
*Grianne Oyen&lt;br /&gt;
*Kati Voss&lt;br /&gt;
*elmiguel Ricardo&lt;br /&gt;
*Dawson &amp;quot;Lips&amp;quot; Murphy&lt;br /&gt;
*RB Vostok&lt;br /&gt;
*Tatanya Dawn&lt;br /&gt;
*Giovannigino Qinan&lt;br /&gt;
*Poppa Heron&lt;br /&gt;
*NABU Dabu&lt;br /&gt;
*IaoNeedle Mayo&lt;br /&gt;
*Meghan Dench&lt;br /&gt;
*Renisenb Beresford&lt;br /&gt;
*Skye Galileo&lt;br /&gt;
*Ryder Dryke&lt;br /&gt;
*Funn Jewell&lt;br /&gt;
*Moira Seelowe&lt;br /&gt;
*Rachel Howey&lt;br /&gt;
*Celadori Sakai&lt;br /&gt;
*Sumar Morgan&lt;br /&gt;
*harmony Colman&lt;br /&gt;
*Zi Ree&lt;br /&gt;
*Shy Robbiani&lt;/div&gt;</summary>
		<author><name>Shy Robbiani</name></author>
	</entry>
</feed>